Files
edr-platform/apps/edr-freight-api/src/modules/interchange-documents/entities/interchange-document-item.entity.ts
hagiye f4a90755c2 api
2026-06-25 11:00:40 +03:00

86 lines
3.0 KiB
TypeScript

import { BaseEntity } from '@edr/api-common';
import { Column, Entity, Index, JoinColumn, ManyToOne } from 'typeorm';
import { Booking } from '../../bookings/entities/booking.entity';
import { InterchangeDocument } from './interchange-document.entity';
export const INTERCHANGE_ITEM_TYPES = ['CONTAINER', 'CARGO'] as const;
export type InterchangeItemType = (typeof INTERCHANGE_ITEM_TYPES)[number];
export const INTERCHANGE_CONDITION_STATUSES = [
'GOOD',
'DAMAGED',
'SHORTAGE',
'EXCESS',
'HOLD',
'UNKNOWN',
] as const;
export type InterchangeConditionStatus = (typeof INTERCHANGE_CONDITION_STATUSES)[number];
@Entity({ schema: 'freight', name: 'interchange_document_items' })
@Index(['interchangeDocumentId'])
@Index(['bookingId'])
export class InterchangeDocumentItem extends BaseEntity {
@Column({ name: 'interchange_document_id', type: 'uuid' })
interchangeDocumentId!: string;
@ManyToOne(() => InterchangeDocument, (document) => document.items, { onDelete: 'CASCADE' })
@JoinColumn({ name: 'interchange_document_id' })
document?: InterchangeDocument;
@Column({ name: 'booking_id', type: 'uuid', nullable: true })
bookingId?: string | null;
@ManyToOne(() => Booking, { nullable: true, onDelete: 'SET NULL' })
@JoinColumn({ name: 'booking_id' })
booking?: Booking | null;
@Column({ name: 'booking_reference', type: 'varchar', length: 64, nullable: true })
bookingReference?: string | null;
@Column({ name: 'item_type', type: 'varchar', length: 20 })
itemType!: InterchangeItemType;
@Column({ name: 'booking_container_id', type: 'uuid', nullable: true })
bookingContainerId?: string | null;
@Column({ name: 'booking_cargo_id', type: 'uuid', nullable: true })
bookingCargoId?: string | null;
@Column({ name: 'container_number', type: 'varchar', length: 64, nullable: true })
containerNumber?: string | null;
@Column({ name: 'seal_number', type: 'varchar', length: 100, nullable: true })
sealNumber?: string | null;
@Column({ name: 'cargo_id', type: 'uuid', nullable: true })
cargoId?: string | null;
@Column({ name: 'cargo_type', type: 'varchar', length: 255, nullable: true })
cargoType?: string | null;
@Column({ name: 'cargo_description', type: 'text', nullable: true })
cargoDescription?: string | null;
@Column({ name: 'weight', type: 'numeric', precision: 14, scale: 3, nullable: true })
weight?: number | null;
@Column({ name: 'quantity', type: 'numeric', precision: 12, scale: 3, nullable: true })
quantity?: number | null;
@Column({ name: 'package_count', type: 'int', nullable: true })
packageCount?: number | null;
@Column({ name: 'wagon_number', type: 'varchar', length: 80, nullable: true })
wagonNumber?: string | null;
@Column({ name: 'condition_status', type: 'varchar', length: 20, default: 'GOOD' })
conditionStatus!: InterchangeConditionStatus;
@Column({ name: 'damage_description', type: 'text', nullable: true })
damageDescription?: string | null;
@Column({ name: 'remarks', type: 'text', nullable: true })
remarks?: string | null;
}