import { Column, Entity, JoinColumn, ManyToOne, OneToMany } from 'typeorm'; import { AbstractEntity } from '../../common/abstract.entity'; import { IncentiveName, PartialIncentiveName } from '../../constants'; import { UseDto } from '../../decorators'; import { NumberTransformer } from '../../transformer/number-transformer'; import { OtRecordEntity } from '../ot/ot-record.entity'; import { SectorEntity } from '../sector/sector.entity'; import { ActivityGroupEntity } from './activity-group.entity'; import { ActivityRecordEntity } from './activity-record.entity'; import { ActivityRecordSettingDto } from './dtos/activity-record-setting.dto'; @Entity({ name: 'activity_record_settings' }) @UseDto(ActivityRecordSettingDto) export class ActivityRecordSettingEntity extends AbstractEntity { @Column({ unique: true }) name!: string; @Column({ type: 'decimal', precision: 20, scale: 6, transformer: new NumberTransformer(), }) rate!: number; @Column({ nullable: true }) unit?: string; @Column({ type: 'boolean', default: true }) isActive!: boolean; @Column({ type: 'boolean', default: false }) shouldShowInOtfilter!: boolean; @Column({ type: 'timestamp', nullable: true }) activateUntil?: Date; @Column({ type: 'enum', enum: PartialIncentiveName, nullable: true, }) incentiveName?: IncentiveName; @ManyToOne( () => SectorEntity, (sectorEntity) => sectorEntity.activityRecordSetting, { onUpdate: 'CASCADE', }, ) @JoinColumn({ name: 'sector_id', foreignKeyConstraintName: 'activity_record_setting_sector', }) sector!: SectorEntity; @ManyToOne( () => ActivityGroupEntity, (activityGroup) => activityGroup.activityRecordSetting, { onUpdate: 'CASCADE', }, ) @JoinColumn({ name: 'activity_record_setting_id', foreignKeyConstraintName: 'activity_record_setting_activity_group', }) activityGroup!: ActivityGroupEntity; @OneToMany( () => ActivityRecordEntity, (activityRecordEntity) => activityRecordEntity.activityRecordSetting, ) activityRecord!: ActivityRecordEntity[]; @OneToMany( () => OtRecordEntity, (otRecordEntity) => otRecordEntity.activitySetting, ) otRecord!: OtRecordEntity[]; }