import { Column, Entity, JoinColumn, ManyToOne, VirtualColumn } from 'typeorm'; import { AbstractEntity } from '../../common/abstract.entity'; import { UseDto } from '../../decorators'; import { NumberTransformer } from '../../transformer/number-transformer'; import { ActivityRecordSettingEntity } from '../activity-record/activity-record-setting.entity'; import { EmployeeEntity } from '../employee/employee.entity'; import { OtRecordDto } from './dtos/ot-record.dto'; @Entity({ name: 'ot_records' }) @UseDto(OtRecordDto) export class OtRecordEntity extends AbstractEntity { @Column({ type: 'timestamp' }) date!: Date; @Column({ type: 'decimal', precision: 20, scale: 6, transformer: new NumberTransformer(), }) hour!: number; @Column({ type: 'decimal', precision: 20, scale: 6, transformer: new NumberTransformer(), }) ratePer!: number; @Column({ type: 'decimal', precision: 20, scale: 6, transformer: new NumberTransformer(), }) dailyRate!: number; @VirtualColumn({ type: 'decimal', transformer: new NumberTransformer(), query: (alias) => `SELECT ${alias}.hour * ${alias}.rate_per * ${alias}.daily_rate / 8`, }) amount!: number; @Column({ nullable: true }) remark?: string; @ManyToOne( () => EmployeeEntity, (employeeEntity) => employeeEntity.otRecord, { onUpdate: 'CASCADE', }, ) @JoinColumn({ name: 'employee_id', foreignKeyConstraintName: 'ot_record_employee', }) employee!: EmployeeEntity; @ManyToOne( () => ActivityRecordSettingEntity, (activityRecordSettingEntity) => activityRecordSettingEntity.otRecord, { onUpdate: 'CASCADE', }, ) @JoinColumn({ name: 'activity_setting_id', foreignKeyConstraintName: 'ot_record_activity_setting', }) activitySetting!: ActivityRecordSettingEntity; }