penisularhr / src / modules / activity-record / activity-record-setting.entity.ts
activity-record-setting.entity.ts
Raw
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<ActivityRecordSettingDto> {
  @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[];
}