import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { type FindOptionsWhere, Repository } from 'typeorm'; import { OperateType } from '../../constants'; import { AuditLogService } from '../audit-log/audit-log.service'; import { type UserEntity } from '../user/user.entity'; import { type UpdateOtSettingDto } from './dtos/update-ot-settings.dto'; import { OtSettingEntity } from './ot-settings.entity'; @Injectable() export class OtSettingService { constructor( @InjectRepository(OtSettingEntity) private otSettingRepository: Repository, private auditLogService: AuditLogService, ) {} async findOne( findData?: FindOptionsWhere, ): Promise { const queryBuilder = this.otSettingRepository.createQueryBuilder('otSetting'); if (findData) { queryBuilder.where(findData); } return queryBuilder.getOne(); } async updateOtSetting( otSettingEntity: OtSettingEntity, dto: UpdateOtSettingDto, user: UserEntity, ): Promise { const { sundayRatePer, normalRatePer, publicHolidayRatePer } = dto; const oldValue = JSON.stringify({ ...otSettingEntity }); let summaryChanges = 'UPDATE '; if (sundayRatePer !== undefined) { summaryChanges += otSettingEntity.sundayRatePer === sundayRatePer ? '' : `Sunday Rate %:${otSettingEntity.sundayRatePer} -> ${sundayRatePer}, `; otSettingEntity.sundayRatePer = sundayRatePer; } if (normalRatePer !== undefined) { summaryChanges += otSettingEntity.normalRatePer === normalRatePer ? '' : `Normal Rate %:${otSettingEntity.normalRatePer} -> ${normalRatePer}, `; otSettingEntity.normalRatePer = normalRatePer; } if (publicHolidayRatePer !== undefined) { summaryChanges += otSettingEntity.publicHolidayRatePer === publicHolidayRatePer ? '' : `Public Holiday Rate %:${otSettingEntity.publicHolidayRatePer} -> ${publicHolidayRatePer}, `; otSettingEntity.publicHolidayRatePer = publicHolidayRatePer; } const updatedEntity = await this.otSettingRepository.save(otSettingEntity); await this.auditLogService.create({ itemId: updatedEntity.id, newValue: JSON.stringify(updatedEntity), oldValue, operateType: OperateType.UPDATE, summaryChanges, tableName: 'otRecordSetting', user, }); return otSettingEntity; } }