diff --git a/src/entity/asset_invoice.ts b/src/entity/asset_invoice.ts index d49134f..6f63e72 100644 --- a/src/entity/asset_invoice.ts +++ b/src/entity/asset_invoice.ts @@ -5,12 +5,8 @@ import { CreateDateColumn, UpdateDateColumn, DeleteDateColumn, - ManyToOne, - JoinColumn, } from 'typeorm'; -import { RequestOrder } from './request_orders'; - export enum PaymentStatus { PAID = 'PAID', UNPAID = 'UNPAID', @@ -35,117 +31,57 @@ export class Invoice { @PrimaryGeneratedColumn('uuid') id: string; - @Column({ - nullable: false, - length: 128, - }) + @Column({ nullable: false, length: 128 }) invoice_number: string; - @Column({ - nullable: false, - type: 'date', - }) + @Column({ nullable: false, type: 'date' }) invoice_date: Date; - @Column({ - nullable: false, - type: 'date', - }) + @Column({ nullable: false, type: 'date' }) due_date: Date; - @Column({ - nullable: false, - type: 'uuid', - }) + @Column({ nullable: false, type: 'uuid' }) supplier_id: string; - @ManyToOne(() => RequestOrder, (requestOrder) => requestOrder.id, { nullable: false }) - @JoinColumn({ name: 'request_order_id' }) - requestOrder: RequestOrder; - - @Column({ - nullable: false, - type: 'uuid', - }) + @Column({ nullable: false, type: 'uuid' }) request_order_id: string; - @Column({ - nullable: false, - type: 'decimal', - precision: 12, - scale: 2, - }) + @Column({ nullable: false, type: 'decimal', precision: 12, scale: 2 }) total_amount: number; - @Column({ - nullable: false, - type: 'decimal', - precision: 12, - scale: 2, - }) + @Column({ nullable: false, type: 'decimal', precision: 12, scale: 2 }) tax_amount: number; - @Column({ - nullable: false, - length: 3, - }) + @Column({ nullable: false, length: 3 }) currency: string; - @Column({ - nullable: true, - type: 'decimal', - precision: 12, - scale: 2, - }) + @Column({ nullable: true, type: 'decimal', precision: 12, scale: 2 }) discount: number; - @Column({ - nullable: false, - type: 'decimal', - precision: 12, - scale: 2, - }) + @Column({ nullable: false, type: 'decimal', precision: 12, scale: 2 }) net_amount: number; - @Column({ - nullable: true, - type: 'text', - }) + @Column({ nullable: true, type: 'text' }) payment_terms: string; - @Column({ - nullable: true, - type: 'enum', - enum: PaymentMethod, - }) + @Column({ nullable: true, type: 'enum', enum: PaymentMethod }) payment_method: PaymentMethod; - @Column({ - nullable: false, - type: 'uuid', - }) + @Column({ nullable: false, type: 'uuid' }) issued_by: string; - @Column({ - nullable: true, - type: 'text', - }) + @Column({ nullable: true, type: 'text' }) remarks: string; - @Column({ - nullable: false, - type: 'enum', - enum: PaymentStatus, - }) + @Column({ nullable: false, type: 'enum', enum: PaymentStatus }) payment_status: PaymentStatus; - @Column({ - nullable: false, - type: 'enum', - enum: InvoiceStatus, - }) + @Column({ nullable: false, type: 'enum', enum: InvoiceStatus }) invoice_status: InvoiceStatus; + @Column({ nullable: true, type: 'text' }) + invoice_evidence: string; + @Column() @CreateDateColumn() created_at: Date; diff --git a/src/entity/asset_realization_recaps.ts b/src/entity/asset_realization_recaps.ts index 384ca4e..b865db2 100644 --- a/src/entity/asset_realization_recaps.ts +++ b/src/entity/asset_realization_recaps.ts @@ -5,12 +5,9 @@ import { CreateDateColumn, UpdateDateColumn, DeleteDateColumn, - ManyToOne, - JoinColumn, OneToMany, } from 'typeorm'; -import { Department } from './department'; import { AssetRealization } from './asset_realizations'; @Entity('asset_realization_recaps') @@ -44,22 +41,18 @@ export class AssetRealizationRecap { }) total_value: number; - @ManyToOne(() => Department, (department) => department.id, { nullable: false }) - @JoinColumn({ name: 'department_id' }) - department: Department; - - @Column({ - nullable: false, - type: 'uuid', - }) - department_id: string; - @Column({ nullable: false, type: 'uuid', }) created_by: string; + @Column({ + nullable: false, + type: 'uuid', + }) + journal_id: string; + @OneToMany(() => AssetRealization, (realization) => realization.id) assetRealizations: AssetRealization[]; diff --git a/src/entity/asset_realizations.ts b/src/entity/asset_realizations.ts index 03d3710..baa5ad3 100644 --- a/src/entity/asset_realizations.ts +++ b/src/entity/asset_realizations.ts @@ -7,6 +7,12 @@ import { DeleteDateColumn } from 'typeorm'; +enum ApprovalStatus { + PENDING = 'PENDING', + APPROVED = 'APPROVED', + REJECTED = 'REJECTED', +} + @Entity('asset_realizations') export class AssetRealization { @PrimaryGeneratedColumn('uuid') @@ -36,6 +42,26 @@ export class AssetRealization { }) department_id: string; + // 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({ nullable: false, type: 'uuid', @@ -54,6 +80,7 @@ export class AssetRealization { }) status: string; + // Discrepancies @Column({ nullable: true, type: 'float', @@ -78,6 +105,47 @@ export class AssetRealization { }) discrepancy_images: string; + // Excess and Insufficient Quantity & Nominal + @Column({ + nullable: true, + type: 'float', + }) + excess_quantity: number; + @Column({ + nullable: true, + type: 'float', + }) + insufficient_quantity: number; + + @Column({ + nullable: true, + type: 'float', + }) + excess_nominal: number; + @Column({ + nullable: true, + type: 'float', + }) + insufficient_nominal: number; + + @Column({ + nullable: true, + type: 'text', + }) + insufficient_quantity_images: string; + + @Column({ + nullable: true, + type: 'text', + }) + excess_quantity_images: string; + + @Column({ + type: 'varchar', + nullable: false, + }) + requested_by: string; + @Column() @CreateDateColumn() created_at: Date; diff --git a/src/entity/goods_receipt.ts b/src/entity/goods_receipt.ts index e2782c7..cdba296 100644 --- a/src/entity/goods_receipt.ts +++ b/src/entity/goods_receipt.ts @@ -4,13 +4,14 @@ import { Column, CreateDateColumn, UpdateDateColumn, - DeleteDateColumn, - ManyToOne, - JoinColumn, - Index, + DeleteDateColumn } from 'typeorm'; -import { RequestOrder } from './request_orders'; +export enum GoodsReceiptStatus { + PENDING = 'PENDING', + RECEIVED = 'RECEIVED', + REJECTED = 'REJECTED', +} @Entity('goods_receipts') export class GoodsReceipt { @@ -29,10 +30,6 @@ export class GoodsReceipt { }) receipt_date: Date; - @ManyToOne(() => RequestOrder, (requestOrder) => requestOrder.id, { nullable: true }) - @JoinColumn({ name: 'request_order_id' }) - requestOrder: RequestOrder; - @Column({ nullable: true, type: 'uuid', @@ -47,15 +44,51 @@ export class GoodsReceipt { @Column({ nullable: true, - type: 'text', + type: 'varchar', }) - remarks: string; + requested_by: string; + + @Column({ + nullable: true, + type: 'decimal', + precision: 15, + scale: 2, + }) + nominal: number; @Column({ nullable: false, - length: 64, + type: 'int', }) - status: string; + requested_quantity: number; + + @Column({ + nullable: false, + type: 'int', + default: 0, + }) + quantity_received: number; + + @Column({ + nullable: false, + type: 'int', + default: 0, + }) + quantity_remaining: number; + + @Column({ + nullable: false, + type: 'boolean', + default: false, + }) + finalized: boolean; + + @Column({ + type: 'enum', + enum: GoodsReceiptStatus, + default: GoodsReceiptStatus.PENDING, + }) + status: GoodsReceiptStatus; @Column() @CreateDateColumn() diff --git a/src/entity/payment_approval.ts b/src/entity/payment_approval.ts index dfbeab2..f67bd21 100644 --- a/src/entity/payment_approval.ts +++ b/src/entity/payment_approval.ts @@ -42,19 +42,26 @@ export class PaymentApproval { }) approved_amount: number; - @Column({ - nullable: false, - type: 'enum', - enum: ApprovalStatus, - default: ApprovalStatus.PENDING, - }) - finance_approval_status: ApprovalStatus; - - @Column({ - nullable: true, - type: 'uuid', - }) - approved_by: string; + // 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; + @OneToMany(() => AssetJournalEntry, (journalEntry) => journalEntry.paymentApproval) journalEntries: AssetJournalEntry[]; diff --git a/src/entity/request_orders.ts b/src/entity/request_orders.ts index e0c1ea4..8f1103e 100644 --- a/src/entity/request_orders.ts +++ b/src/entity/request_orders.ts @@ -33,7 +33,6 @@ export class RequestOrder { order_number: string; @Column({ - type: 'date', nullable: false, }) order_date: Date; @@ -52,6 +51,12 @@ export class RequestOrder { }) requested_by: string; + @Column({ + type: 'varchar', + nullable: false, + }) + department: string; + @Column({ type: 'text', nullable: true, @@ -111,7 +116,6 @@ export class RequestOrder { }) gm_approval_status: ApprovalStatus; - // Store multiple goods IDs @Column('uuid', { array: true, nullable: true }) goods_ids: string[]; diff --git a/src/entity/request_submission.ts b/src/entity/request_submission.ts index 538e6cd..2985194 100644 --- a/src/entity/request_submission.ts +++ b/src/entity/request_submission.ts @@ -5,62 +5,79 @@ import { CreateDateColumn, UpdateDateColumn, DeleteDateColumn, - Index, ManyToOne, - JoinColumn, + JoinColumn } from 'typeorm'; - import { RequestOrder } from './request_orders'; +enum ApprovalStatus { + PENDING = 'PENDING', + APPROVED = 'APPROVED', + REJECTED = 'REJECTED', +} + +enum SubmissionStatus { + DRAFT = 'DRAFT', + SUBMITTED = 'SUBMITTED', + APPROVED = 'APPROVED', + REJECTED = 'REJECTED', +} + @Entity('request_submissions') export class RequestSubmission { @PrimaryGeneratedColumn('uuid') id: string; - @ManyToOne(() => RequestOrder, (order) => order.id, { nullable: false }) - @JoinColumn({ name: 'request_order_id' }) - requestOrder: RequestOrder; + @ManyToOne(() => RequestOrder, { nullable: false }) + @JoinColumn({ name: 'request_order_id' }) + request_order: RequestOrder; - @Column({ - nullable: false, - type: 'uuid', - }) - request_order_id: string; - - @Column({ - nullable: false, - type: 'varchar', - unique: true, - }) + @Column({ type: 'varchar', nullable: false, unique: true }) code_id: string; - @Column({ - nullable: false, - type: 'date', - }) + @Column({ type: 'date', nullable: false }) submission_date: Date; - @Column({ - nullable: true, - type: 'text', - }) - remarks: string; + @Column({ type: 'text', nullable: true }) + remarks: string | null; - @Column({ - nullable: false, - length: 64, - }) - status: string; + @Column({ type: 'varchar', nullable: true }) + department: string | null; + + @Column({ type: 'enum', enum: SubmissionStatus, nullable: false, default: SubmissionStatus.DRAFT }) + status: SubmissionStatus; + + // General Manager Approval + @Column({ type: 'uuid', nullable: true }) + approved_by_gm: string | null; + + @Column({ type: 'timestamptz', nullable: true }) + gm_approval_date: Date | null; + + @Column({ type: 'enum', enum: ApprovalStatus, default: ApprovalStatus.PENDING }) + gm_approval_status: ApprovalStatus; + + @Column({ type: 'varchar', nullable: false }) + created_by: string; + + @Column({ type: 'varchar', nullable: true }) + updated_by: string | null; + + @Column({ type: 'int', nullable: false, default: 0 }) + quantity: number; + + @Column({ type: 'decimal', precision: 12, scale: 2, nullable: false, default: 0.0 }) + amount: number; + + @Column({ type: 'decimal', precision: 12, scale: 2, nullable: false, default: 0.0 }) + total: number; - @Column() @CreateDateColumn() created_at: Date; - @Column({ nullable: true }) @UpdateDateColumn() updated_at: Date; - @Column({ nullable: true }) - @DeleteDateColumn() - deleted_at: Date; + @DeleteDateColumn({ nullable: true }) + deleted_at: Date | null; } diff --git a/src/entity/request_submission_recap.ts b/src/entity/request_submission_recap.ts index a079039..d079730 100644 --- a/src/entity/request_submission_recap.ts +++ b/src/entity/request_submission_recap.ts @@ -56,6 +56,19 @@ export class SubmissionRecap { }) remarks: string; + // Store multiple submissions IDs + @Column('uuid', { array: true, nullable: true }) + submissions_ids: string[]; + + @Column({ + nullable: true, + type: 'varchar', + }) + journal_id: string; + + @Column({ nullable: true }) + created_by: string; + @Column() @CreateDateColumn() created_at: Date;