penisularhr / src / modules / incentive / incentive-record.entity.ts
incentive-record.entity.ts
Raw
import { Column, Entity, JoinColumn, ManyToOne } from 'typeorm';

import { AbstractEntity } from '../../common/abstract.entity';
import { UseDto } from '../../decorators';
import { NumberTransformer } from '../../transformer/number-transformer';
import { EmployeeEntity } from '../employee/employee.entity';
import { IncentiveRecordDto } from './dtos/incentive-record.dto';
import { IncentiveSettingEntity } from './incentive-settings.entity';

@Entity({ name: 'incentive_records' })
@UseDto(IncentiveRecordDto)
export class IncentiveRecordEntity extends AbstractEntity<IncentiveRecordDto> {
  @Column({
    type: 'decimal',
    precision: 20,
    scale: 6,
    default: 0,
    transformer: new NumberTransformer(),
  })
  amount!: number;

  @Column({
    type: 'decimal',
    precision: 20,
    scale: 6,
    default: 0,
    transformer: new NumberTransformer(),
  })
  quantity!: number;

  @Column({
    type: 'decimal',
    precision: 20,
    scale: 6,
    default: 0,
    transformer: new NumberTransformer(),
  })
  threshold!: number;

  @Column({ type: 'timestamp' })
  date!: Date;

  @ManyToOne(
    () => EmployeeEntity,
    (employeeEntity) => employeeEntity.incentiveRecord,
    {
      onUpdate: 'CASCADE',
    },
  )
  @JoinColumn({
    name: 'employee_id',
    foreignKeyConstraintName: 'incentive_record_employee',
  })
  employee!: EmployeeEntity;

  @ManyToOne(
    () => IncentiveSettingEntity,
    (incentiveSettingEntity) => incentiveSettingEntity.incentiveRecord,
    {
      onUpdate: 'CASCADE',
    },
  )
  @JoinColumn({
    name: 'incentive_setting_id',
    foreignKeyConstraintName: 'incentiveSetting',
  })
  incentiveSetting!: IncentiveSettingEntity;
}