This commit is contained in:
fro1991
2025-02-02 12:23:44 +07:00
8 changed files with 231 additions and 160 deletions

View File

@ -5,12 +5,8 @@ import {
CreateDateColumn, CreateDateColumn,
UpdateDateColumn, UpdateDateColumn,
DeleteDateColumn, DeleteDateColumn,
ManyToOne,
JoinColumn,
} from 'typeorm'; } from 'typeorm';
import { RequestOrder } from './request_orders';
export enum PaymentStatus { export enum PaymentStatus {
PAID = 'PAID', PAID = 'PAID',
UNPAID = 'UNPAID', UNPAID = 'UNPAID',
@ -35,117 +31,57 @@ export class Invoice {
@PrimaryGeneratedColumn('uuid') @PrimaryGeneratedColumn('uuid')
id: string; id: string;
@Column({ @Column({ nullable: false, length: 128 })
nullable: false,
length: 128,
})
invoice_number: string; invoice_number: string;
@Column({ @Column({ nullable: false, type: 'date' })
nullable: false,
type: 'date',
})
invoice_date: Date; invoice_date: Date;
@Column({ @Column({ nullable: false, type: 'date' })
nullable: false,
type: 'date',
})
due_date: Date; due_date: Date;
@Column({ @Column({ nullable: false, type: 'uuid' })
nullable: false,
type: 'uuid',
})
supplier_id: string; supplier_id: string;
@ManyToOne(() => RequestOrder, (requestOrder) => requestOrder.id, { nullable: false }) @Column({ nullable: false, type: 'uuid' })
@JoinColumn({ name: 'request_order_id' })
requestOrder: RequestOrder;
@Column({
nullable: false,
type: 'uuid',
})
request_order_id: string; request_order_id: string;
@Column({ @Column({ nullable: false, type: 'decimal', precision: 12, scale: 2 })
nullable: false,
type: 'decimal',
precision: 12,
scale: 2,
})
total_amount: number; total_amount: number;
@Column({ @Column({ nullable: false, type: 'decimal', precision: 12, scale: 2 })
nullable: false,
type: 'decimal',
precision: 12,
scale: 2,
})
tax_amount: number; tax_amount: number;
@Column({ @Column({ nullable: false, length: 3 })
nullable: false,
length: 3,
})
currency: string; currency: string;
@Column({ @Column({ nullable: true, type: 'decimal', precision: 12, scale: 2 })
nullable: true,
type: 'decimal',
precision: 12,
scale: 2,
})
discount: number; discount: number;
@Column({ @Column({ nullable: false, type: 'decimal', precision: 12, scale: 2 })
nullable: false,
type: 'decimal',
precision: 12,
scale: 2,
})
net_amount: number; net_amount: number;
@Column({ @Column({ nullable: true, type: 'text' })
nullable: true,
type: 'text',
})
payment_terms: string; payment_terms: string;
@Column({ @Column({ nullable: true, type: 'enum', enum: PaymentMethod })
nullable: true,
type: 'enum',
enum: PaymentMethod,
})
payment_method: PaymentMethod; payment_method: PaymentMethod;
@Column({ @Column({ nullable: false, type: 'uuid' })
nullable: false,
type: 'uuid',
})
issued_by: string; issued_by: string;
@Column({ @Column({ nullable: true, type: 'text' })
nullable: true,
type: 'text',
})
remarks: string; remarks: string;
@Column({ @Column({ nullable: false, type: 'enum', enum: PaymentStatus })
nullable: false,
type: 'enum',
enum: PaymentStatus,
})
payment_status: PaymentStatus; payment_status: PaymentStatus;
@Column({ @Column({ nullable: false, type: 'enum', enum: InvoiceStatus })
nullable: false,
type: 'enum',
enum: InvoiceStatus,
})
invoice_status: InvoiceStatus; invoice_status: InvoiceStatus;
@Column({ nullable: true, type: 'text' })
invoice_evidence: string;
@Column() @Column()
@CreateDateColumn() @CreateDateColumn()
created_at: Date; created_at: Date;

View File

@ -5,12 +5,9 @@ import {
CreateDateColumn, CreateDateColumn,
UpdateDateColumn, UpdateDateColumn,
DeleteDateColumn, DeleteDateColumn,
ManyToOne,
JoinColumn,
OneToMany, OneToMany,
} from 'typeorm'; } from 'typeorm';
import { Department } from './department';
import { AssetRealization } from './asset_realizations'; import { AssetRealization } from './asset_realizations';
@Entity('asset_realization_recaps') @Entity('asset_realization_recaps')
@ -44,22 +41,18 @@ export class AssetRealizationRecap {
}) })
total_value: number; 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({ @Column({
nullable: false, nullable: false,
type: 'uuid', type: 'uuid',
}) })
created_by: string; created_by: string;
@Column({
nullable: false,
type: 'uuid',
})
journal_id: string;
@OneToMany(() => AssetRealization, (realization) => realization.id) @OneToMany(() => AssetRealization, (realization) => realization.id)
assetRealizations: AssetRealization[]; assetRealizations: AssetRealization[];

View File

@ -7,6 +7,12 @@ import {
DeleteDateColumn DeleteDateColumn
} from 'typeorm'; } from 'typeorm';
enum ApprovalStatus {
PENDING = 'PENDING',
APPROVED = 'APPROVED',
REJECTED = 'REJECTED',
}
@Entity('asset_realizations') @Entity('asset_realizations')
export class AssetRealization { export class AssetRealization {
@PrimaryGeneratedColumn('uuid') @PrimaryGeneratedColumn('uuid')
@ -36,6 +42,26 @@ export class AssetRealization {
}) })
department_id: string; 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({ @Column({
nullable: false, nullable: false,
type: 'uuid', type: 'uuid',
@ -54,6 +80,7 @@ export class AssetRealization {
}) })
status: string; status: string;
// Discrepancies
@Column({ @Column({
nullable: true, nullable: true,
type: 'float', type: 'float',
@ -78,6 +105,47 @@ export class AssetRealization {
}) })
discrepancy_images: string; 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() @Column()
@CreateDateColumn() @CreateDateColumn()
created_at: Date; created_at: Date;

View File

@ -4,13 +4,14 @@ import {
Column, Column,
CreateDateColumn, CreateDateColumn,
UpdateDateColumn, UpdateDateColumn,
DeleteDateColumn, DeleteDateColumn
ManyToOne,
JoinColumn,
Index,
} from 'typeorm'; } from 'typeorm';
import { RequestOrder } from './request_orders'; export enum GoodsReceiptStatus {
PENDING = 'PENDING',
RECEIVED = 'RECEIVED',
REJECTED = 'REJECTED',
}
@Entity('goods_receipts') @Entity('goods_receipts')
export class GoodsReceipt { export class GoodsReceipt {
@ -29,10 +30,6 @@ export class GoodsReceipt {
}) })
receipt_date: Date; receipt_date: Date;
@ManyToOne(() => RequestOrder, (requestOrder) => requestOrder.id, { nullable: true })
@JoinColumn({ name: 'request_order_id' })
requestOrder: RequestOrder;
@Column({ @Column({
nullable: true, nullable: true,
type: 'uuid', type: 'uuid',
@ -47,15 +44,51 @@ export class GoodsReceipt {
@Column({ @Column({
nullable: true, nullable: true,
type: 'text', type: 'varchar',
}) })
remarks: string; requested_by: string;
@Column({
nullable: true,
type: 'decimal',
precision: 15,
scale: 2,
})
nominal: number;
@Column({ @Column({
nullable: false, 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() @Column()
@CreateDateColumn() @CreateDateColumn()

View File

@ -42,19 +42,26 @@ export class PaymentApproval {
}) })
approved_amount: number; approved_amount: number;
@Column({ // General Manager Approval
nullable: false, @Column({
type: 'enum', type: 'uuid',
enum: ApprovalStatus, nullable: true,
default: ApprovalStatus.PENDING, })
}) approved_by_gm: string | null;
finance_approval_status: ApprovalStatus;
@Column({
@Column({ type: 'timestamp',
nullable: true, nullable: true,
type: 'uuid', })
}) gm_approval_date: Date | null;
approved_by: string;
@Column({
type: 'enum',
enum: ApprovalStatus,
default: ApprovalStatus.PENDING,
})
gm_approval_status: ApprovalStatus;
@OneToMany(() => AssetJournalEntry, (journalEntry) => journalEntry.paymentApproval) @OneToMany(() => AssetJournalEntry, (journalEntry) => journalEntry.paymentApproval)
journalEntries: AssetJournalEntry[]; journalEntries: AssetJournalEntry[];

View File

@ -33,7 +33,6 @@ export class RequestOrder {
order_number: string; order_number: string;
@Column({ @Column({
type: 'date',
nullable: false, nullable: false,
}) })
order_date: Date; order_date: Date;
@ -52,6 +51,12 @@ export class RequestOrder {
}) })
requested_by: string; requested_by: string;
@Column({
type: 'varchar',
nullable: false,
})
department: string;
@Column({ @Column({
type: 'text', type: 'text',
nullable: true, nullable: true,
@ -111,7 +116,6 @@ export class RequestOrder {
}) })
gm_approval_status: ApprovalStatus; gm_approval_status: ApprovalStatus;
// Store multiple goods IDs
@Column('uuid', { array: true, nullable: true }) @Column('uuid', { array: true, nullable: true })
goods_ids: string[]; goods_ids: string[];

View File

@ -5,62 +5,79 @@ import {
CreateDateColumn, CreateDateColumn,
UpdateDateColumn, UpdateDateColumn,
DeleteDateColumn, DeleteDateColumn,
Index,
ManyToOne, ManyToOne,
JoinColumn, JoinColumn
} from 'typeorm'; } from 'typeorm';
import { RequestOrder } from './request_orders'; 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') @Entity('request_submissions')
export class RequestSubmission { export class RequestSubmission {
@PrimaryGeneratedColumn('uuid') @PrimaryGeneratedColumn('uuid')
id: string; id: string;
@ManyToOne(() => RequestOrder, (order) => order.id, { nullable: false }) @ManyToOne(() => RequestOrder, { nullable: false })
@JoinColumn({ name: 'request_order_id' }) @JoinColumn({ name: 'request_order_id' })
requestOrder: RequestOrder; request_order: RequestOrder;
@Column({ @Column({ type: 'varchar', nullable: false, unique: true })
nullable: false,
type: 'uuid',
})
request_order_id: string;
@Column({
nullable: false,
type: 'varchar',
unique: true,
})
code_id: string; code_id: string;
@Column({ @Column({ type: 'date', nullable: false })
nullable: false,
type: 'date',
})
submission_date: Date; submission_date: Date;
@Column({ @Column({ type: 'text', nullable: true })
nullable: true, remarks: string | null;
type: 'text',
})
remarks: string;
@Column({ @Column({ type: 'varchar', nullable: true })
nullable: false, department: string | null;
length: 64,
}) @Column({ type: 'enum', enum: SubmissionStatus, nullable: false, default: SubmissionStatus.DRAFT })
status: string; 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() @CreateDateColumn()
created_at: Date; created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn() @UpdateDateColumn()
updated_at: Date; updated_at: Date;
@Column({ nullable: true }) @DeleteDateColumn({ nullable: true })
@DeleteDateColumn() deleted_at: Date | null;
deleted_at: Date;
} }

View File

@ -56,6 +56,19 @@ export class SubmissionRecap {
}) })
remarks: string; 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() @Column()
@CreateDateColumn() @CreateDateColumn()
created_at: Date; created_at: Date;