update relation submission and request order

This commit is contained in:
fadlydev
2025-02-02 19:43:08 +07:00
parent 508a919eb9
commit 68a72efaed
3 changed files with 57 additions and 138 deletions

View File

@ -5,7 +5,10 @@ import {
CreateDateColumn, CreateDateColumn,
UpdateDateColumn, UpdateDateColumn,
DeleteDateColumn, DeleteDateColumn,
OneToMany,
} from 'typeorm'; } from 'typeorm';
import { Goods } from './goods';
import { RequestSubmission } from './request_submission';
enum ApprovalStatus { enum ApprovalStatus {
PENDING = 'PENDING', PENDING = 'PENDING',
@ -25,100 +28,62 @@ export class RequestOrder {
@PrimaryGeneratedColumn('uuid') @PrimaryGeneratedColumn('uuid')
id: string; id: string;
@Column({ @Column({ nullable: false, length: 128, unique: true })
nullable: false,
length: 128,
unique: true,
})
order_number: string; order_number: string;
@Column({ @Column({ type: 'timestamp', nullable: false }) // Ensuring timestamp type for date storage
nullable: false,
})
order_date: Date; order_date: Date;
@Column({ @Column({ type: 'decimal', precision: 10, scale: 2, nullable: false })
type: 'decimal',
precision: 10,
scale: 2,
nullable: false,
})
total_amount: number; total_amount: number;
@Column({ @Column({ type: 'varchar', nullable: false })
type: 'varchar',
nullable: false,
})
requested_by: string; requested_by: string;
@Column({ @Column({ type: 'varchar', nullable: false })
type: 'varchar',
nullable: false,
})
department: string; department: string;
@Column({ @Column({ type: 'text', nullable: true })
type: 'text',
nullable: true,
})
remarks: string | null; remarks: string | null;
@Column({ @Column({ type: 'enum', enum: RequestOrderStatus, nullable: false })
type: 'enum',
enum: RequestOrderStatus,
nullable: false,
})
status: RequestOrderStatus; status: RequestOrderStatus;
@Column({ @Column({ length: 2, nullable: false })
length: 2,
nullable: false,
})
purchasing_method: string; purchasing_method: string;
// Supervisor Approval // Supervisor Approval
@Column({ @Column({ type: 'uuid', nullable: true })
type: 'uuid',
nullable: true,
})
approved_by_spv: string | null; approved_by_spv: string | null;
@Column({ @Column({ type: 'timestamp', nullable: true })
type: 'timestamp',
nullable: true,
})
spv_approval_date: Date | null; spv_approval_date: Date | null;
@Column({ @Column({ type: 'enum', enum: ApprovalStatus, default: ApprovalStatus.PENDING })
type: 'enum',
enum: ApprovalStatus,
default: ApprovalStatus.PENDING,
})
spv_approval_status: ApprovalStatus; spv_approval_status: ApprovalStatus;
// General Manager Approval // General Manager Approval
@Column({ @Column({ type: 'uuid', nullable: true })
type: 'uuid',
nullable: true,
})
approved_by_gm: string | null; approved_by_gm: string | null;
@Column({ @Column({ type: 'timestamp', nullable: true })
type: 'timestamp',
nullable: true,
})
gm_approval_date: Date | null; gm_approval_date: Date | null;
@Column({ @Column({ type: 'enum', enum: ApprovalStatus, default: ApprovalStatus.PENDING })
type: 'enum',
enum: ApprovalStatus,
default: ApprovalStatus.PENDING,
})
gm_approval_status: ApprovalStatus; gm_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 }) @Column('uuid', { array: true, nullable: true })
goods_ids: string[]; goods_ids: string[];
@OneToMany(() => RequestSubmission, (submission) => submission.request_order, { cascade: true })
submissions: RequestSubmission[];
@CreateDateColumn() @CreateDateColumn()
created_at: Date; created_at: Date;

View File

@ -8,29 +8,24 @@ import {
ManyToOne, ManyToOne,
JoinColumn JoinColumn
} from 'typeorm'; } from 'typeorm';
import { SubmissionRecap } from './request_submission_recap';
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, { nullable: false })
@JoinColumn({ name: 'request_order_id' }) @ManyToOne(() => SubmissionRecap, (recap) => recap.submissions, { nullable: true, onDelete: "SET NULL" })
@JoinColumn({ name: 'submission_recap_id' })
recap: SubmissionRecap;
@ManyToOne(() => RequestOrder, (order) => order.submissions, { nullable: false, onDelete: "CASCADE" })
@JoinColumn({ name: 'request_order_id' })
request_order: RequestOrder; request_order: RequestOrder;
@Column({ type: 'varchar', nullable: false, unique: true }) @Column({ type: 'varchar', nullable: false, unique: true })
code_id: string; code_id: string;
@ -39,29 +34,19 @@ export class RequestSubmission {
submission_date: Date; submission_date: Date;
@Column({ type: 'text', nullable: true }) @Column({ type: 'text', nullable: true })
remarks: string | null; remarks: string;
@Column({ type: 'varchar', nullable: true }) @Column({ type: 'varchar', nullable: true })
department: string | null; department: string;
@Column({ type: 'enum', enum: SubmissionStatus, nullable: false, default: SubmissionStatus.DRAFT }) @Column({ length: 64, nullable: false })
status: SubmissionStatus; status: string;
// General Manager Approval @Column({ type: 'varchar', nullable: true })
@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; created_by: string;
@Column({ type: 'varchar', nullable: true }) @Column({ type: 'varchar', nullable: true })
updated_by: string | null; updated_by: string;
@Column({ type: 'int', nullable: false, default: 0 }) @Column({ type: 'int', nullable: false, default: 0 })
quantity: number; quantity: number;
@ -79,5 +64,5 @@ export class RequestSubmission {
updated_at: Date; updated_at: Date;
@DeleteDateColumn({ nullable: true }) @DeleteDateColumn({ nullable: true })
deleted_at: Date | null; deleted_at: Date;
} }

View File

@ -5,79 +5,48 @@ import {
CreateDateColumn, CreateDateColumn,
UpdateDateColumn, UpdateDateColumn,
DeleteDateColumn, DeleteDateColumn,
OneToMany
} from 'typeorm'; } from 'typeorm';
import { RequestSubmission } from './request_submission';
@Entity('submission_recap') @Entity('submission_recap')
export class SubmissionRecap { export class SubmissionRecap {
@PrimaryGeneratedColumn('uuid') @PrimaryGeneratedColumn('uuid')
id: string; id: string;
@Column({ @Column({ type: 'date', nullable: false })
nullable: false,
type: 'date',
})
recap_date: Date; recap_date: Date;
@Column({ @Column({ type: 'int', nullable: false })
nullable: false,
type: 'int',
})
total_requests: number; total_requests: number;
@Column({ @Column({ type: 'int', nullable: false })
nullable: false,
type: 'int',
})
total_approved: number; total_approved: number;
@Column({ @Column({ type: 'int', nullable: false })
nullable: false,
type: 'int',
})
total_rejected: number; total_rejected: number;
@Column({ @Column({ type: 'int', nullable: false })
nullable: false,
type: 'int',
})
total_pending: number; total_pending: number;
@Column({ @Column({ type: 'decimal', precision: 12, scale: 2, nullable: false })
nullable: false,
type: 'decimal',
precision: 12,
scale: 2,
})
total_budget: number; total_budget: number;
@Column({ @Column({ type: 'text', nullable: true })
nullable: true,
type: 'text',
})
remarks: string; remarks: string;
// Store multiple submissions IDs @OneToMany(() => RequestSubmission, (submission) => submission.recap, { cascade: true })
@Column('uuid', { array: true, nullable: true }) submissions: RequestSubmission[];
submissions_ids: string[];
@Column({ type: 'varchar', nullable: true })
@Column({
nullable: true,
type: 'varchar',
})
journal_id: string;
@Column({ nullable: true })
created_by: string; created_by: string;
@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; deleted_at: Date;
} }