import { Column, Entity, OneToMany } from 'typeorm'; import { AbstractEntity } from '../../common/abstract.entity'; import { UseDto } from '../../decorators'; import { NumberTransformer } from '../../transformer/number-transformer'; import { ActivityRecordEntity } from '../activity-record/activity-record.entity'; import { IncentiveRecordEntity } from '../incentive/incentive-record.entity'; import { MonthlyRecordEntity } from '../monthly-record/monthly-record.entity'; import { OtRecordEntity } from '../ot/ot-record.entity'; import { EmployeeDto } from './dtos/employee.dto'; @Entity({ name: 'employees' }) @UseDto(EmployeeDto) export class EmployeeEntity extends AbstractEntity<EmployeeDto> { @Column({ unique: true }) name!: string; @Column({ nullable: true }) origin?: string; @Column({ type: 'timestamp' }) dateJoin!: Date; @Column({ nullable: true, type: 'timestamp' }) dateResign?: Date; @Column({ type: 'decimal', precision: 20, scale: 6, transformer: new NumberTransformer(), }) basicSalary!: number; @Column({ nullable: true }) referralBy?: string; @Column({ type: 'timestamp', nullable: true }) referralFeePaidAt?: Date; @Column({ type: 'boolean', default: true }) isActive!: boolean; @Column({ type: 'decimal', precision: 20, scale: 6, transformer: new NumberTransformer(), }) dailyRateAmount!: number; @Column({ type: 'decimal', precision: 20, scale: 6, default: 0, transformer: new NumberTransformer(), }) monthlyAllowanceAmount!: number; @Column({ type: 'decimal', precision: 8, scale: 3, default: 0, transformer: new NumberTransformer(), }) annualLeave!: number; @Column({ type: 'decimal', precision: 8, scale: 3, default: 0, transformer: new NumberTransformer(), }) sickLeave!: number; @Column({ type: 'integer', default: 0 }) epfRatePer!: number; @Column({ type: 'boolean', default: false, }) shouldDeductSocso!: boolean; @OneToMany(() => OtRecordEntity, (otRecordEntity) => otRecordEntity.employee) otRecord!: OtRecordEntity[]; @OneToMany( () => ActivityRecordEntity, (activityRecordEntity) => activityRecordEntity.employee, ) activityRecord!: ActivityRecordEntity[]; @OneToMany( () => IncentiveRecordEntity, (incentiveRecordEntity) => incentiveRecordEntity.employee, ) incentiveRecord!: IncentiveRecordEntity[]; @OneToMany( () => MonthlyRecordEntity, (monthlyRecordEntity) => monthlyRecordEntity.employee, ) monthlyRecord!: MonthlyRecordEntity[]; }