penisularhr / src / modules / activity-record / dtos / activity-record-setting.dto.ts
activity-record-setting.dto.ts
Raw
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
import { AbstractDto } from '../../../common/dto/abstract.dto';
import { IncentiveName } from '../../../constants';
import {
  BooleanField,
  DateFieldOptional,
  EnumFieldOptional,
  NumberField,
  StringField,
  StringFieldOptional,
} from '../../../decorators';
import { type ActivityRecordSettingEntity } from '../activity-record-setting.entity';

export class ActivityRecordSettingDto extends AbstractDto {
  @StringField()
  name!: string;

  @StringField()
  sector!: string;

  @StringField()
  activityGroup!: string;

  @StringFieldOptional()
  unit?: string;

  @NumberField()
  rate!: number;

  @BooleanField()
  isActive!: boolean;

  @BooleanField()
  shouldShowInOtfilter!: boolean;

  @DateFieldOptional()
  activateUntil?: Date;

  @EnumFieldOptional(() => IncentiveName)
  incentiveName?: IncentiveName;

  constructor(activityRecordSetting: ActivityRecordSettingEntity) {
    super(activityRecordSetting);
    this.name = activityRecordSetting.name;
    this.rate = activityRecordSetting.rate;
    this.unit = activityRecordSetting.unit;
    this.isActive = activityRecordSetting.isActive;
    this.activateUntil = activityRecordSetting.activateUntil;
    this.incentiveName = activityRecordSetting.incentiveName;
    this.shouldShowInOtfilter = activityRecordSetting.shouldShowInOtfilter;
    this.sector =
      activityRecordSetting.sector && activityRecordSetting.sector.name;
    this.activityGroup =
      activityRecordSetting.activityGroup &&
      activityRecordSetting.activityGroup.name;
  }
}