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 { BlockEntity } from '../block/block.entity'; import { EmployeeEntity } from '../employee/employee.entity'; import { ActivityRecordSettingEntity } from './activity-record-setting.entity'; import { ActivityRecordDto } from './dtos/activity-record.dto'; @Entity({ name: 'activity_records' }) @UseDto(ActivityRecordDto) export class ActivityRecordEntity 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(), }) rate!: number; @Column({ type: 'decimal', precision: 20, scale: 6, transformer: new NumberTransformer(), }) quantity!: number; @VirtualColumn({ type: 'decimal', transformer: new NumberTransformer(), query: (alias) => `SELECT ${alias}.rate * ${alias}.quantity`, }) amount!: number; @Column({ nullable: true }) remark?: string; @ManyToOne( () => EmployeeEntity, (employeeEntity) => employeeEntity.activityRecord, { onUpdate: 'CASCADE', }, ) @JoinColumn({ name: 'employee_id', foreignKeyConstraintName: 'activity_record_employee', }) employee!: EmployeeEntity; @ManyToOne( () => ActivityRecordSettingEntity, (activityRecordSettingEntity) => activityRecordSettingEntity.activityRecord, { onUpdate: 'CASCADE', }, ) @JoinColumn({ name: 'activity_record_setting_id', foreignKeyConstraintName: 'activity_record_activity_record_setting', }) activityRecordSetting!: ActivityRecordSettingEntity; @ManyToOne(() => BlockEntity, (blockEntity) => blockEntity.activityRecord, { onUpdate: 'CASCADE', }) @JoinColumn({ name: 'block_id', foreignKeyConstraintName: 'activity_record_block', }) block!: BlockEntity; }