penisularhr / src / modules / incentive / dtos / incentive-record.dto.ts
incentive-record.dto.ts
Raw
/* eslint-disable @typescript-eslint/no-unnecessary-condition */
import { AbstractDto } from '../../../common/dto/abstract.dto';
import { IncentiveName } from '../../../constants';
import {
  DateField,
  EnumField,
  NumberField,
  StringField,
  StringFieldOptional,
} from '../../../decorators';
import { type IncentiveRecordEntity } from '../incentive-record.entity';

export class IncentiveRecordDto extends AbstractDto {
  @DateField()
  date!: Date;

  @StringFieldOptional()
  unit?: string;

  @NumberField()
  threshold!: number;

  @NumberField()
  quantity!: number;

  @NumberField()
  amount!: number;

  @StringField()
  employeeName!: string;

  @EnumField(() => IncentiveName)
  incentiveName!: IncentiveName;

  constructor(incentiveRecord: IncentiveRecordEntity) {
    super(incentiveRecord);
    this.date = incentiveRecord.date;
    this.unit =
      incentiveRecord.incentiveSetting && incentiveRecord.incentiveSetting.unit;
    this.threshold = incentiveRecord.threshold;
    this.quantity = incentiveRecord.quantity;
    this.amount = incentiveRecord.amount;
    this.employeeName =
      incentiveRecord.employee && incentiveRecord.employee.name;
    this.incentiveName =
      incentiveRecord.incentiveSetting && incentiveRecord.incentiveSetting.name;
  }
}