diff --git a/src/entity/request_orders.ts b/src/entity/request_orders.ts index 324ffc9..e28515a 100644 --- a/src/entity/request_orders.ts +++ b/src/entity/request_orders.ts @@ -7,21 +7,9 @@ import { DeleteDateColumn, OneToMany, } from 'typeorm'; -import { Goods } from './goods'; import { RequestSubmission } from './request_submission'; - -enum ApprovalStatus { - PENDING = 'PENDING', - APPROVED = 'APPROVED', - REJECTED = 'REJECTED', -} - -enum RequestOrderStatus { - DRAFT = 'DRAFT', - SUBMITTED = 'SUBMITTED', - APPROVED = 'APPROVED', - REJECTED = 'REJECTED', -} +import { ApprovalStatus } from '../enum/approvalStatus'; +import { DocumentStatus } from '../enum/documentStatus'; @Entity('request_orders') export class RequestOrder { @@ -46,8 +34,8 @@ export class RequestOrder { @Column({ type: 'text', nullable: true }) remarks: string | null; - @Column({ type: 'enum', enum: RequestOrderStatus, nullable: false }) - status: RequestOrderStatus; + @Column({ type: 'enum', enum: DocumentStatus, nullable: false }) + status: DocumentStatus; @Column({ length: 2, nullable: false }) purchasing_method: string; @@ -82,13 +70,14 @@ export class RequestOrder { @Column({ type: 'enum', enum: ApprovalStatus, default: ApprovalStatus.PENDING }) ga_approval_status: ApprovalStatus; - // Relationship with Goods - @OneToMany(() => Goods, (goods) => goods.id) - goods: Goods[]; - - // Storing related goods UUIDs as an array - @Column('uuid', { array: true, nullable: true }) - goods_ids: string[]; + // Storing goods as a JSON array, Use 'jsonb' for PostgreSQL or 'json' for MySQL + @Column({ type: 'jsonb', nullable: true }) + goods: Array<{ + name: string; + item_code: string; + quantity: number; + price: number; + }>; @OneToMany(() => RequestSubmission, (submission) => submission.request_order, { cascade: true }) submissions: RequestSubmission[]; diff --git a/src/entity/request_submission.ts b/src/entity/request_submission.ts index 3068322..df5992f 100644 --- a/src/entity/request_submission.ts +++ b/src/entity/request_submission.ts @@ -10,7 +10,7 @@ import { } from 'typeorm'; import { SubmissionRecap } from './request_submission_recap'; import { RequestOrder } from './request_orders'; - +import { ApprovalStatus } from '../enum/approvalStatus'; @Entity('request_submissions') export class RequestSubmission { @PrimaryGeneratedColumn('uuid') @@ -57,6 +57,36 @@ export class RequestSubmission { @Column({ type: 'decimal', precision: 12, scale: 2, nullable: false, default: 0.0 }) total: number; + // Supervisor Approval + @Column({ type: 'varchar', 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: 'varchar', 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; + + // General Affairs (GA) Approval + @Column({ type: 'varchar', nullable: true }) + approved_by_ga: string | null; + + @Column({ type: 'timestamp', nullable: true }) + ga_approval_date: Date | null; + + @Column({ type: 'enum', enum: ApprovalStatus, default: ApprovalStatus.PENDING }) + ga_approval_status: ApprovalStatus; + @CreateDateColumn() created_at: Date; diff --git a/src/entity/request_submission_recap.ts b/src/entity/request_submission_recap.ts index 0d4111d..1676f3c 100644 --- a/src/entity/request_submission_recap.ts +++ b/src/entity/request_submission_recap.ts @@ -38,6 +38,9 @@ export class SubmissionRecap { @OneToMany(() => RequestSubmission, (submission) => submission.recap, { cascade: true }) submission_ids: RequestSubmission[]; + @Column({ type: 'varchar', nullable: true }) + item_code: string; + @Column({ type: 'varchar', nullable: true }) created_by: string; diff --git a/src/enum/approvalStatus.ts b/src/enum/approvalStatus.ts new file mode 100644 index 0000000..3b5abe4 --- /dev/null +++ b/src/enum/approvalStatus.ts @@ -0,0 +1,5 @@ +export enum ApprovalStatus { + PENDING = 'PENDING', + APPROVED = 'APPROVED', + REJECTED = 'REJECTED', +} \ No newline at end of file diff --git a/src/enum/documentStatus.ts b/src/enum/documentStatus.ts new file mode 100644 index 0000000..185685f --- /dev/null +++ b/src/enum/documentStatus.ts @@ -0,0 +1,7 @@ + +export enum DocumentStatus { + DRAFT = 'DRAFT', + SUBMITTED = 'SUBMITTED', + APPROVED = 'APPROVED', + REJECTED = 'REJECTED', +}