Files
entity/src/entity/request_orders.ts
2025-02-02 10:19:51 +07:00

131 lines
2.1 KiB
TypeScript

import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
} from 'typeorm';
enum ApprovalStatus {
PENDING = 'PENDING',
APPROVED = 'APPROVED',
REJECTED = 'REJECTED',
}
enum RequestOrderStatus {
DRAFT = 'DRAFT',
SUBMITTED = 'SUBMITTED',
APPROVED = 'APPROVED',
REJECTED = 'REJECTED',
}
@Entity('request_orders')
export class RequestOrder {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: false,
length: 128,
unique: true,
})
order_number: string;
@Column({
nullable: false,
})
order_date: Date;
@Column({
type: 'decimal',
precision: 10,
scale: 2,
nullable: false,
})
total_amount: number;
@Column({
type: 'varchar',
nullable: false,
})
requested_by: string;
@Column({
type: 'varchar',
nullable: false,
})
department: string;
@Column({
type: 'text',
nullable: true,
})
remarks: string | null;
@Column({
type: 'enum',
enum: RequestOrderStatus,
nullable: false,
})
status: RequestOrderStatus;
@Column({
length: 2,
nullable: false,
})
purchasing_method: string;
// Supervisor Approval
@Column({
type: 'uuid',
nullable: true,
})
approved_by_spv: string | null;
@Column({
type: 'timestamp',
nullable: true,
})
spv_approval_date: Date | null;
@Column({
type: 'enum',
enum: ApprovalStatus,
default: ApprovalStatus.PENDING,
})
spv_approval_status: ApprovalStatus;
// General Manager Approval
@Column({
type: 'uuid',
nullable: true,
})
approved_by_gm: string | null;
@Column({
type: 'timestamp',
nullable: true,
})
gm_approval_date: Date | null;
@Column({
type: 'enum',
enum: ApprovalStatus,
default: ApprovalStatus.PENDING,
})
gm_approval_status: ApprovalStatus;
@Column('uuid', { array: true, nullable: true })
goods_ids: string[];
@CreateDateColumn()
created_at: Date;
@UpdateDateColumn()
updated_at: Date;
@DeleteDateColumn({ nullable: true })
deleted_at: Date | null;
}