This commit is contained in:
fro1991
2025-02-12 10:22:20 +07:00
parent 1beb8d15a6
commit 21c0ebd190
29 changed files with 430 additions and 1624 deletions

View File

@ -1,50 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
OneToMany,
} from 'typeorm';
import { Goods } from './goods';
@Entity('asset_category')
export class AssetCategory {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: true,
length: 128,
})
name: string;
@Column({
nullable: true,
length: 255,
})
description: string;
@OneToMany(() => Goods, (goods) => goods.category)
goods: Goods[];
@Column({
nullable: false,
default: true,
})
is_active: boolean;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -1,51 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
} from 'typeorm';
@Entity('asset_classification')
export class AssetClassification {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: false,
length: 128,
})
name: string;
@Column({
nullable: true,
length: 255,
})
description: string;
@Column({
nullable: false,
unique: true,
length: 64,
})
code_id: string;
@Column({
nullable: true,
length: 128,
})
updated_by: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -1,73 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
Index,
ManyToOne,
JoinColumn,
} from 'typeorm';
import { FixedAssetClassification } from './fixed_assets_classification';
@Entity('asset_depreciation')
export class AssetDepreciation {
@PrimaryGeneratedColumn('uuid')
id: string;
@ManyToOne(() => FixedAssetClassification, (asset) => asset.id, { nullable: false })
@JoinColumn({ name: 'asset_id' })
asset: FixedAssetClassification;
@Column({
nullable: false,
type: 'uuid',
})
asset_id: string;
@Column({
nullable: false,
type: 'date',
})
depreciation_date: Date;
@Column({
nullable: false,
type: 'decimal',
precision: 12,
scale: 2,
})
depreciation_amount: number;
@Column({
nullable: true,
type: 'text',
})
remarks: string;
@Index()
@Column({
nullable: true,
type: 'uuid',
})
created_by: string;
@Index()
@Column({
nullable: true,
type: 'uuid',
})
updated_by: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -0,0 +1,37 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from "typeorm"
@Entity("asset_fixed_classifications")
export class AssetFixedClassification {
@PrimaryGeneratedColumn("uuid")
id: string
@Column({ type: "varchar", length: 50, unique: true })
code: string
@Column({ type: "varchar", length: 255 })
name: string
@Column({ type: "text", nullable: true })
description: string
@Column()
@CreateDateColumn()
created_at: Date
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
@Column({ type: "varchar", length: 100, nullable: true })
created_by: string
@Column({ type: "varchar", length: 100, nullable: true })
updated_by: string
@Column({ type: "varchar", length: 100, nullable: true })
deleted_by: string
}

View File

@ -0,0 +1,42 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, ManyToOne, JoinTable } from "typeorm"
import { AssetFixedClassification } from "./asset_fixed_classification"
@Entity("asset_fixed_types")
export class AssetFixedType {
@PrimaryGeneratedColumn("uuid")
id: string
@ManyToOne(() => AssetFixedClassification, { onDelete: "CASCADE" })
@JoinTable()
fixed_classification: AssetFixedClassification
@Column({ type: "varchar", length: 50, unique: true })
code: string
@Column({ type: "varchar", length: 255 })
name: string
@Column({ type: "text", nullable: true })
description: string
@Column()
@CreateDateColumn()
created_at: Date
@Column({ type: "varchar", length: 100, nullable: true })
created_by: string
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ type: "varchar", length: 100, nullable: true })
updated_by: string
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
@Column({ type: "varchar", length: 100, nullable: true })
deleted_by: string
}

56
src/entity/asset_good.ts Normal file
View File

@ -0,0 +1,56 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, ManyToOne, JoinColumn, JoinTable } from "typeorm"
import { AssetGoodCategory } from "./asset_good_category"
import { AssetFixedType } from "./asset_fixed_type"
@Entity("asset_goods")
export class AssetGood {
@PrimaryGeneratedColumn("uuid")
id: string
@ManyToOne(() => AssetGoodCategory, { onDelete: "CASCADE" })
@JoinTable()
good_category: AssetGoodCategory
@ManyToOne(() => AssetFixedType, { onDelete: "CASCADE" })
@JoinTable()
fixed_type: AssetFixedType
@Column({ type: "varchar", length: 50, unique: true })
code: string
@Column({ type: "varchar", length: 255 })
name: string
@Column({ type: "text", nullable: true })
description: string
@Column({ type: "smallint" })
price: number
@Column({ type: "varchar", length: 50 })
unit: string
@Column({ type: "varchar", length: 50, default: "active" })
status: string
@Column()
@CreateDateColumn()
created_at: Date
@Column({ type: "varchar", length: 100, nullable: true })
created_by: string
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ type: "varchar", length: 100, nullable: true })
updated_by: string
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
@Column({ type: "varchar", length: 100, nullable: true })
deleted_by: string
}

View File

@ -0,0 +1,37 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from "typeorm"
@Entity("asset_good_categories")
export class AssetGoodCategory {
@PrimaryGeneratedColumn("uuid")
id: string
@Column({ type: "varchar", length: 255 })
name: string
@Column({ type: "text", nullable: true })
description: string
@Column({ type: "varchar", length: 50, nullable: true })
status: string
@Column()
@CreateDateColumn()
created_at: Date
@Column({ type: "varchar", length: 100, nullable: true })
created_by: string
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ type: "varchar", length: 100, nullable: true })
updated_by: string
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
@Column({ type: "varchar", length: 100, nullable: true })
deleted_by: string
}

View File

@ -1,96 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
} from 'typeorm';
export enum PaymentStatus {
PAID = 'PAID',
UNPAID = 'UNPAID',
PARTIALLY_PAID = 'PARTIALLY_PAID',
}
export enum InvoiceStatus {
ISSUED = 'ISSUED',
PENDING = 'PENDING',
CANCELED = 'CANCELED',
SETTLED = 'SETTLED',
}
export enum PaymentMethod {
BANK_TRANSFER = 'BANK_TRANSFER',
CREDIT_CARD = 'CREDIT_CARD',
PAYPAL = 'PAYPAL',
}
@Entity('invoices')
export class Invoice {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ nullable: false, length: 128 })
invoice_number: string;
@Column({ nullable: false, type: 'date' })
invoice_date: Date;
@Column({ nullable: false, type: 'date' })
due_date: Date;
@Column({ nullable: false, type: 'uuid' })
supplier_id: string;
@Column({ nullable: false, type: 'uuid' })
request_order_id: string;
@Column({ nullable: false, type: 'decimal', precision: 12, scale: 2 })
total_amount: number;
@Column({ nullable: false, type: 'decimal', precision: 12, scale: 2 })
tax_amount: number;
@Column({ nullable: false, length: 3 })
currency: string;
@Column({ nullable: true, type: 'decimal', precision: 12, scale: 2 })
discount: number;
@Column({ nullable: false, type: 'decimal', precision: 12, scale: 2 })
net_amount: number;
@Column({ nullable: true, type: 'text' })
payment_terms: string;
@Column({ nullable: true, type: 'enum', enum: PaymentMethod })
payment_method: PaymentMethod;
@Column({ nullable: false, type: 'uuid' })
issued_by: string;
@Column({ nullable: true, type: 'text' })
remarks: string;
@Column({ nullable: false, type: 'enum', enum: PaymentStatus })
payment_status: PaymentStatus;
@Column({ nullable: false, type: 'enum', enum: InvoiceStatus })
invoice_status: InvoiceStatus;
@Column({ nullable: true, type: 'text' })
invoice_evidence: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -1,90 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
OneToMany,
} from 'typeorm';
import { AssetRealization } from './asset_realizations';
@Entity('asset_realization_recaps')
export class AssetRealizationRecap {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: false,
length: 128,
})
recap_number: string;
@Column({
nullable: false,
type: 'date',
})
recap_date: Date;
@Column({
nullable: false,
type: 'int',
})
total_assets: number;
@Column({
nullable: false,
type: 'decimal',
precision: 14,
scale: 2,
})
total_value: number;
@Column({
nullable: false,
type: 'uuid',
})
created_by: string;
@Column({
nullable: false,
type: 'uuid',
})
journal_id: string;
@OneToMany(() => AssetRealization, (realization) => realization.id)
assetRealizations: AssetRealization[];
@Column({
nullable: true,
type: 'float',
})
total_quantity_discrepancy: number;
@Column({
nullable: true,
type: 'decimal',
precision: 14,
scale: 2,
})
total_payment_discrepancy: number;
@Column({
nullable: true,
type: 'text',
})
remarks: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -1,160 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn
} from 'typeorm';
enum ApprovalStatus {
PENDING = 'PENDING',
APPROVED = 'APPROVED',
REJECTED = 'REJECTED',
}
@Entity('asset_realizations')
export class AssetRealization {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: false,
length: 128,
})
realization_number: string;
@Column({
nullable: false,
type: 'date',
})
realization_date: Date;
@Column({
nullable: false,
type: 'uuid',
})
goods_id: string;
@Column({
nullable: false,
type: 'uuid',
})
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',
})
realized_by: string;
@Column({
nullable: true,
type: 'text',
})
remarks: string;
@Column({
nullable: false,
length: 64,
})
status: string;
// Discrepancies
@Column({
nullable: true,
type: 'float',
})
quantity_discrepancy: number;
@Column({
nullable: true,
type: 'float',
})
payment_discrepancy: number;
@Column({
nullable: true,
type: 'text',
})
discrepancy_remarks: string;
@Column({
nullable: true,
type: 'text',
})
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;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -0,0 +1,106 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
ManyToOne,
JoinColumn,
JoinTable
} from 'typeorm';
import { AssetRequestOrderCategory } from './asset_request_order_category';
@Entity('asset_request_orders')
export class AssetRequestOrder {
@PrimaryGeneratedColumn('uuid')
id: string;
@ManyToOne(() => AssetRequestOrderCategory, { onDelete: 'CASCADE' })
@JoinTable()
request_order_category: AssetRequestOrderCategory;
@Column({ type: 'uuid' })
department_id: string;
@Column({ type: 'varchar', length: 255 })
department_name: string;
@Column({ type: 'varchar', length: 50, unique: true })
code: string;
@Column({ type: 'varchar', length: 50 })
type: string;
@CreateDateColumn()
request_at: Date;
@Column({ type: 'text', nullable: true })
description: string;
@Column({ type: 'int2' })
quantity: number;
@Column({ type: 'float8' })
total: number;
@Column({ type: 'varchar', length: 50, default: 'pending' })
status: string;
@Column({ type: 'boolean', nullable: true })
is_spv_approved: boolean;
@Column({ type: 'varchar', length: 100, nullable: true })
spv_approved_by: string;
@Column({ nullable: true })
spv_approved_at: Date;
@Column({ type: 'text', nullable: true })
spv_approved_note: string;
@Column({ type: 'boolean', nullable: true })
is_ga_approved: boolean;
@Column({ type: 'varchar', length: 100, nullable: true })
ga_approved_by: string;
@Column({ nullable: true })
ga_approved_at: Date;
@Column({ type: 'text', nullable: true })
ga_approved_note: string;
@Column({ type: 'boolean', nullable: true })
is_gm_approved: boolean;
@Column({ type: 'varchar', length: 100, nullable: true })
gm_approved_by: string;
@Column({ nullable: true })
gm_approved_at: Date;
@Column({ type: 'text', nullable: true })
gm_approved_note: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ type: 'varchar', length: 100, nullable: true })
created_by: string;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;;
@Column({ type: 'varchar', length: 100, nullable: true })
updated_by: string;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;;
@Column({ type: 'varchar', length: 100, nullable: true })
deleted_by: string;
}

View File

@ -0,0 +1,37 @@
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from "typeorm"
@Entity("asset_request_order_categories")
export class AssetRequestOrderCategory {
@PrimaryGeneratedColumn("uuid")
id: string
@Column({ type: "varchar", length: 50, unique: true })
code: string
@Column({ type: "varchar", length: 255 })
name: string
@Column({ type: "varchar", length: 50, nullable: true })
status: string
@Column()
@CreateDateColumn()
created_at: Date
@Column({ type: "varchar", length: 100, nullable: true })
created_by: string
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ type: "varchar", length: 100, nullable: true })
updated_by: string
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
@Column({ type: "varchar", length: 100, nullable: true })
deleted_by: string
}

View File

@ -0,0 +1,42 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
ManyToOne,
JoinColumn,
JoinTable
} from 'typeorm';
import { AssetRequestOrder } from './asset_request_order';
import { AssetGood } from './asset_good';
@Entity('asset_request_order_goods')
export class AssetRequestOrderGood {
@PrimaryGeneratedColumn('uuid')
id: string;
@ManyToOne(() => AssetRequestOrder, { onDelete: 'CASCADE' })
@JoinTable()
request_order: AssetRequestOrder;
@ManyToOne(() => AssetGood, { onDelete: 'CASCADE' })
@JoinTable()
goods: AssetGood;
@Column({ type: 'varchar', length: 255 })
goods_name: string;
@Column({ type: 'int' })
quantity: number;
@Column({ type: 'varchar', length: 50 })
unit: string;
@Column({ type: 'float8' })
price: number;
@Column({ type: 'float8' })
total: number;
@Column({ type: 'text', nullable: true })
description: string;
}

View File

@ -0,0 +1,56 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn
} from 'typeorm';
@Entity('asset_suppliers')
export class AssetSupplier {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ length: 256, nullable: true })
code: string;
@Column({ length: 256, nullable: true })
name: string;
@Column({ length: 256, nullable: true })
type: string;
@Column({ length: 512, nullable: true })
address: string;
@Column({ length: 256, nullable: true })
pic_name: string;
@Column({ length: 64, nullable: true })
pic_phone: string;
@Column({ length: 256, nullable: true })
pic_email: string;
@Column({ length: 64, nullable: false })
status: string;
@CreateDateColumn()
created_at: Date;
@Column({ length: 256, nullable: true })
created_by: string;
@UpdateDateColumn()
updated_at: Date;
@Column({ length: 256, nullable: true })
updated_by: string;
@DeleteDateColumn()
deleted_at: Date;
@Column({ length: 256, nullable: true })
deleted_by: string;
}

View File

@ -1,56 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
} from 'typeorm';
@Entity('assets')
export class Asset {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ type: 'varchar', length: 255 })
name: string;
@Column({ type: 'varchar', length: 100, unique: true })
asset_code: string;
@Column({ type: 'decimal', precision: 10, scale: 2 })
cost: number;
@Column({ type: 'int' })
quantity: number;
@Column({ type: 'varchar', length: 255, nullable: true })
location: string;
@Column({ type: 'enum', enum: ['Active', 'In Maintenance', 'Retired'], default: 'Active' })
status: 'Active' | 'In Maintenance' | 'Retired';
@Column({ type: 'varchar', length: 255, nullable: true })
condition: string;
@Column({ type: 'timestamp', nullable: true })
acquisition_date: Date;
@Column({ type: 'timestamp', nullable: true })
last_maintenance_date: Date;
@Column({ type: 'timestamp', nullable: true })
next_scheduled_maintenance: Date;
@Column({ type: 'text', nullable: true })
remarks: string;
@CreateDateColumn({ type: 'timestamp' })
created_at: Date;
@UpdateDateColumn({ type: 'timestamp' })
updated_at: Date;
@DeleteDateColumn({ type: 'timestamp' })
deleted_at: Date;
}

View File

@ -1,44 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
} from 'typeorm';
@Entity('departments')
export class Department {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: false,
length: 128,
})
name: string;
@Column({
nullable: true,
length: 255,
})
description: string;
@Column({
nullable: true,
length: 64,
})
code: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -1,103 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
Index,
ManyToOne,
JoinColumn,
} from 'typeorm';
import { Status } from '../types/status';
import { User } from './users';
@Entity('employees')
export class Employee {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: false,
length: 64,
})
first_name: string;
@Column({
nullable: false,
length: 64,
})
last_name: string;
@Column({
nullable: false,
unique: true,
length: 128,
})
email: string;
@Column({
nullable: true,
length: 15,
})
phone_number: string;
@Column({
nullable: false,
length: 128,
})
position: string;
@Column({
nullable: true,
type: 'uuid',
})
branch_id: string;
@Column({
nullable: false,
type: 'date',
})
hired_date: Date;
@Column({
nullable: false,
length: 64,
})
status: Status;
@ManyToOne(() => User, { nullable: true })
@JoinColumn({ name: 'created_by' })
createdBy: User;
@Index()
@Column({
nullable: true,
type: 'uuid',
})
created_by: string;
@ManyToOne(() => User, { nullable: true })
@JoinColumn({ name: 'updated_by' })
updatedBy: User;
@Index()
@Column({
nullable: true,
type: 'uuid',
})
updated_by: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -1,33 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
OneToMany,
} from 'typeorm';
import { PaymentApproval } from './payment_approval';
@Entity('finance_memos')
export class FinanceMemo {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: false,
type: 'text',
})
memo_content: string;
@OneToMany(() => PaymentApproval, (paymentApproval) => paymentApproval.financeMemo)
paymentApprovals: PaymentApproval[];
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
}

View File

@ -1,102 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
Index,
} from 'typeorm';
import { Status } from '../types/status';
@Entity('fixed_assets')
export class FixedAssetClassification {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: false,
length: 128,
})
name: string;
@Column({
nullable: true,
length: 255,
})
description: string;
@Column({
nullable: false,
length: 64,
unique: true,
})
asset_code: string;
@Column({
nullable: false,
type: 'decimal',
precision: 12,
scale: 2,
})
acquisition_cost: number;
@Column({
nullable: true,
type: 'date',
})
acquisition_date: Date;
@Column({
nullable: true,
type: 'date',
})
depreciation_start_date: Date;
@Column({
nullable: true,
type: 'decimal',
precision: 5,
scale: 2,
})
depreciation_rate: number;
@Column({
nullable: true,
type: 'uuid',
})
category_id: string;
@Index()
@Column({
nullable: true,
type: 'uuid',
})
created_by: string;
@Index()
@Column({
nullable: true,
type: 'uuid',
})
updated_by: string;
@Column({
nullable: false,
length: 64,
})
status: Status;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -1,100 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
Index,
ManyToOne,
JoinColumn,
} from 'typeorm';
import { AssetCategory } from './asset_category';
import { Supplier } from './supplier';
@Entity('goods')
export class Goods {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
type: 'varchar',
nullable: false,
length: 128,
})
name: string;
@Column({
type: 'varchar',
nullable: true,
length: 255,
})
description: string;
@Column({
type: 'varchar',
nullable: false,
length: 64,
unique: true,
})
item_code: string;
@Column({
nullable: false,
type: 'decimal',
precision: 10,
scale: 2,
})
price: number;
@Column({
nullable: false,
type: 'int',
})
quantity: number;
@Index()
@Column({
type: 'varchar',
nullable: false,
})
created_by: string;
@Index()
@Column({
type: 'varchar',
nullable: false,
})
updated_by: string;
@ManyToOne(() => AssetCategory, (category) => category.goods, {
nullable: true,
onDelete: 'SET NULL',
})
@Index()
@JoinColumn({ name: 'category_id' })
category: AssetCategory;
@ManyToOne(() => Supplier, (supplier) => supplier.goods, {
nullable: true,
onDelete: 'SET NULL',
})
@Index()
@JoinColumn({ name: 'supplier_id' })
supplier: Supplier;
@Column({
nullable: false,
default: true,
})
is_active: boolean;
@CreateDateColumn()
created_at: Date;
@UpdateDateColumn()
updated_at: Date;
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -1,57 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn
} from 'typeorm';
@Entity('goods_handover')
export class GoodsHandover {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: false,
type: 'uuid',
})
request_order_id: string;
@Column({
nullable: false,
type: 'date',
})
handover_date: Date;
@Column({
nullable: false,
type: 'uuid',
})
goods_id: string;
@Column({
nullable: false,
type: 'uuid',
})
handed_over_by: string;
@Column({
nullable: false,
type: 'uuid',
})
received_by: string;
@Column({
nullable: true,
type: 'text',
})
remarks: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
}

View File

@ -1,104 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn
} from 'typeorm';
export enum GoodsReceiptStatus {
PENDING = 'PENDING',
RECEIVED = 'RECEIVED',
REJECTED = 'REJECTED',
}
@Entity('goods_receipts')
export class GoodsReceipt {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: false,
length: 128,
})
receipt_number: string;
@Column({
nullable: false,
type: 'date',
})
receipt_date: Date;
@Column({
nullable: true,
type: 'uuid',
})
request_order_id: string;
@Column({
nullable: false,
type: 'uuid',
})
department_id: string;
@Column({
nullable: true,
type: 'varchar',
})
requested_by: string;
@Column({
nullable: true,
type: 'decimal',
precision: 15,
scale: 2,
})
nominal: number;
@Column({
nullable: false,
type: 'int',
})
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()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -1,56 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
ManyToOne,
JoinColumn,
} from 'typeorm';
import { PaymentApproval } from './payment_approval';
@Entity('journal_entries')
export class AssetJournalEntry {
@PrimaryGeneratedColumn('uuid')
id: string;
@ManyToOne(() => PaymentApproval, (paymentApproval) => paymentApproval.journalEntries, { nullable: false })
@JoinColumn({ name: 'payment_approval_id' })
paymentApproval: PaymentApproval;
@Column({
nullable: false,
type: 'uuid',
})
payment_approval_id: string;
@Column({
nullable: false,
type: 'decimal',
precision: 12,
scale: 2,
})
amount: number;
@Column({
nullable: false,
length: 128,
})
account_code: string;
@Column({
nullable: false,
length: 128,
})
description: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
}

View File

@ -1,86 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
ManyToOne,
OneToMany,
JoinColumn,
} from 'typeorm';
import { RequestOrder } from './request_orders';
import { AssetJournalEntry } from './journal_entries';
import { FinanceMemo } from './finance_memo';
export enum ApprovalStatus {
PENDING = 'PENDING',
APPROVED = 'APPROVED',
REJECTED = 'REJECTED',
}
@Entity('payment_approvals')
export class PaymentApproval {
@PrimaryGeneratedColumn('uuid')
id: string;
@ManyToOne(() => RequestOrder, (requestOrder) => requestOrder.id, { nullable: false })
@JoinColumn({ name: 'request_order_id' })
requestOrder: RequestOrder;
@Column({
nullable: false,
type: 'uuid',
})
request_order_id: string;
@Column({
nullable: false,
type: 'decimal',
precision: 12,
scale: 2,
})
approved_amount: number;
// 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[];
@ManyToOne(() => FinanceMemo, (finance) => finance.paymentApprovals)
@JoinColumn({ name: 'finance_memo_id' })
financeMemo: FinanceMemo;
@Column({
nullable: true,
type: 'uuid',
})
finance_memo_id: string;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
}

View File

@ -1,106 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
OneToMany,
} from 'typeorm';
import { RequestSubmission } from './request_submission';
import { ApprovalStatus } from '../enum/approvalStatus';
import { DocumentStatus } from '../enum/documentStatus';
@Entity('request_orders')
export class RequestOrder {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ nullable: false, length: 128, unique: true })
order_number: string;
@Column({ type: 'timestamp', nullable: false })
order_date: Date;
@Column({ type: 'decimal', precision: 10, scale: 2, nullable: true })
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: DocumentStatus, nullable: false })
status: DocumentStatus;
@Column({ length: 2, nullable: false })
purchasing_method: string;
// 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;
@Column({ type: 'text', nullable: true })
spv_approval_remarks: string | null;
// 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;
@Column({ type: 'text', nullable: true })
gm_approval_remarks: string | null;
// 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;
@Column({ type: 'text', nullable: true })
ga_approval_remarks: string | null;
@Column({ type: 'varchar', nullable: true })
category: string | null;
// 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;
supplier: string;
}>;
@OneToMany(() => RequestSubmission, (submission) => submission.request_order, { cascade: true })
submissions: RequestSubmission[];
@CreateDateColumn()
created_at: Date;
@UpdateDateColumn()
updated_at: Date;
@DeleteDateColumn({ nullable: true })
deleted_at: Date | null;
}

View File

@ -1,80 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
ManyToOne,
JoinColumn
} 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')
id: string;
@ManyToOne(() => SubmissionRecap, (recap) => recap.submission_ids, { 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;
@Column({ type: 'varchar', nullable: true })
requested_by: string;
@Column({ type: 'varchar', nullable: false })
department: string;
@Column({ type: 'varchar', nullable: false, unique: true })
code_id: string;
@Column({ type: 'date', nullable: false })
submission_date: Date;
@Column({ type: 'text', nullable: true })
remarks: string;
@Column({ length: 64, nullable: false })
status: string;
@Column({ type: 'varchar', nullable: true })
created_by: string;
@Column({ type: 'varchar', nullable: true })
updated_by: string;
@Column({ type: 'int', nullable: false, default: 0 })
quantity: number;
@Column({ type: 'decimal', precision: 12, scale: 2, nullable: false, default: 0.0 })
amount: number;
// 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;
@Column({ type: 'text', nullable: true })
gm_approval_remarks: string | null;
@CreateDateColumn()
created_at: Date;
@UpdateDateColumn()
updated_at: Date;
@DeleteDateColumn({ nullable: true })
deleted_at: Date;
}

View File

@ -1,55 +0,0 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
OneToMany
} from 'typeorm';
import { RequestSubmission } from './request_submission';
@Entity('submission_recap')
export class SubmissionRecap {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ type: 'date', nullable: false })
recap_date: Date;
@Column({ type: 'int', nullable: false })
total_requests: number;
@Column({ type: 'int', nullable: false })
total_approved: number;
@Column({ type: 'int', nullable: false })
total_rejected: number;
@Column({ type: 'int', nullable: false })
total_pending: number;
@Column({ type: 'decimal', precision: 12, scale: 2, nullable: false })
total_budget: number;
@Column({ type: 'text', nullable: true })
remarks: string;
@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;
@CreateDateColumn()
created_at: Date;
@UpdateDateColumn()
updated_at: Date;
@DeleteDateColumn({ nullable: true })
deleted_at: Date;
}

View File

@ -1,81 +0,0 @@
import {
Entity,
OneToMany,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
DeleteDateColumn,
} from 'typeorm';
import { Goods } from './goods';
@Entity('suppliers')
export class Supplier {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({
nullable: false,
length: 128,
})
name: string;
@Column({
nullable: true,
length: 128,
})
contact_person: string;
@OneToMany(() => Goods, (goods) => goods.supplier)
goods: Goods[];
@Column({
nullable: true,
length: 128,
})
email: string;
@Column({
nullable: true,
length: 15,
})
phone: string;
@Column({
nullable: true,
length: 255,
})
address: string;
@Column({
nullable: false,
length: 64,
unique: true,
})
code_id: string;
@Column({
nullable: false,
length: 64,
})
type: string;
@Column({
nullable: false,
default: true,
})
is_active: boolean;
@Column()
@CreateDateColumn()
created_at: Date;
@Column({ nullable: true })
@UpdateDateColumn()
updated_at: Date;
@Column({ nullable: true })
@DeleteDateColumn()
deleted_at: Date;
}

View File

@ -37,9 +37,6 @@ import { CategoryType } from "./types/category";
import { Summarize } from "./entity/summarizes"; import { Summarize } from "./entity/summarizes";
import { SummarizeLog } from "./entity/summarize_log"; import { SummarizeLog } from "./entity/summarize_log";
import { SummarizeLogStatus, SummarizeType } from "./types/summarize"; import { SummarizeLogStatus, SummarizeType } from "./types/summarize";
import { Goods } from "./entity/goods";
import { Supplier } from "./entity/supplier";
import { AssetCategory } from "./entity/asset_category";
import { TelegramBody, TelegramResponseSend } from "./types/telegram"; import { TelegramBody, TelegramResponseSend } from "./types/telegram";
import { Ledger } from "./entity/ledgers"; import { Ledger } from "./entity/ledgers";
import { CreditCompany } from "./entity/credit_companies"; import { CreditCompany } from "./entity/credit_companies";
@ -52,23 +49,6 @@ import { CreditCompanyUser } from "./entity/credit_company_users";
import { CreditCompanyUserRefreshToken } from "./entity/credit_company_user_refresh_token"; import { CreditCompanyUserRefreshToken } from "./entity/credit_company_user_refresh_token";
import { CreditApplicationChat } from "./entity/credit_application_chats"; import { CreditApplicationChat } from "./entity/credit_application_chats";
import { Application } from "./entity/application"; import { Application } from "./entity/application";
import { AssetClassification } from "./entity/asset_classification";
import { FixedAssetClassification } from "./entity/fixed_assets_classification";
import { Employee } from "./entity/employee";
import { Department } from "./entity/department";
import { AssetDepreciation } from "./entity/asset_depreciation";
import { RequestOrder } from "./entity/request_orders";
import { RequestSubmission } from "./entity/request_submission";
import { SubmissionRecap } from "./entity/request_submission_recap";
import { AssetRealization } from "./entity/asset_realizations";
import { AssetRealizationRecap } from "./entity/asset_realization_recaps";
import { GoodsReceipt } from "./entity/goods_receipt";
import { Invoice } from "./entity/asset_invoice";
import { Asset } from "./entity/assets";
import { GoodsHandover } from "./entity/goods_handover";
import { AssetJournalEntry } from "./entity/journal_entries";
import { PaymentApproval } from "./entity/payment_approval";
import { FinanceMemo } from "./entity/finance_memo";
import { TellerMutation } from "./entity/teller_mutation"; import { TellerMutation } from "./entity/teller_mutation";
import { LogHikvision } from "./entity/log_hikvision"; import { LogHikvision } from "./entity/log_hikvision";
import { CreditConfigs } from "./entity/credit_config"; import { CreditConfigs } from "./entity/credit_config";
@ -77,6 +57,14 @@ import { BrivaCompanyUser } from "./entity/briva_company_users"
import { BrivaCompanyUserRefreshToken } from "./entity/briva_company_user_refresh_token" import { BrivaCompanyUserRefreshToken } from "./entity/briva_company_user_refresh_token"
import { BrivaAccount } from './entity/briva_accounts' import { BrivaAccount } from './entity/briva_accounts'
import { BrivaTransaction } from './entity/briva_transactions' import { BrivaTransaction } from './entity/briva_transactions'
import { AssetSupplier } from './entity/asset_supplier'
import { AssetFixedClassification } from './entity/asset_fixed_classification'
import { AssetFixedType } from './entity/asset_fixed_type'
import { AssetGoodCategory } from './entity/asset_good_category'
import { AssetGood } from './entity/asset_good'
import { AssetRequestOrderCategory } from './entity/asset_request_order_category'
import { AssetRequestOrder } from './entity/asset_request_order'
import { AssetRequestOrderGood } from './entity/asset_request_order_good'
export { export {
User, // User, //
@ -125,26 +113,6 @@ export {
SummarizeLog, SummarizeLog,
SummarizeLogStatus, SummarizeLogStatus,
SummarizeType, SummarizeType,
Goods,
Supplier,
Asset,
AssetCategory,
AssetClassification,
FixedAssetClassification,
AssetDepreciation,
Employee,
Invoice,
GoodsHandover,
AssetJournalEntry,
PaymentApproval,
FinanceMemo,
Department,
GoodsReceipt,
RequestSubmission,
SubmissionRecap,
RequestOrder,
AssetRealization,
AssetRealizationRecap,
Ledger, Ledger,
CreditCompany, CreditCompany,
CreditDebtor, CreditDebtor,
@ -164,5 +132,13 @@ export {
BrivaCompanyUser, BrivaCompanyUser,
BrivaCompanyUserRefreshToken, BrivaCompanyUserRefreshToken,
BrivaAccount, BrivaAccount,
BrivaTransaction BrivaTransaction,
AssetSupplier,
AssetFixedClassification,
AssetFixedType,
AssetGoodCategory,
AssetGood,
AssetRequestOrderCategory,
AssetRequestOrder,
AssetRequestOrderGood
}; };