/* eslint-disable no-console */ import 'reflect-metadata'; import moment from 'moment'; import { MoreThanOrEqual } from 'typeorm'; import { dataSource } from './ormconfig'; import { ActivityRecordEntity } from './src/modules/activity-record/activity-record.entity'; import { ActivityRecordSettingEntity } from './src/modules/activity-record/activity-record-setting.entity'; import { BlockEntity } from './src/modules/block/block.entity'; import { EmployeeEntity } from './src/modules/employee/employee.entity'; import { PublicHolidayEntity } from './src/modules/public-holiday/public-holiday.entity'; const blockData = [ { name: 'none' }, { name: '13' }, { name: '14' }, { name: '15' }, { name: '16' }, { name: '17' }, { name: '18' }, { name: '20' }, { name: '21' }, { name: '22' }, { name: '23' }, { name: '24' }, { name: '25' }, { name: '26' }, { name: '27' }, { name: '28' }, { name: '29' }, { name: '30' }, { name: '31' }, { name: '34' }, { name: '35' }, { name: '36' }, { name: '37' }, { name: 'A1' }, { name: 'A10' }, { name: 'A11' }, { name: 'A2' }, { name: 'A3' }, { name: 'A4' }, { name: 'A5' }, { name: 'A6' }, { name: 'A7' }, { name: 'A8' }, { name: 'A9' }, { name: 'C10' }, { name: 'C11' }, { name: 'C12' }, { name: 'C12A' }, { name: 'C13' }, { name: 'C13A' }, { name: 'D0' }, { name: 'D01' }, { name: 'D0A' }, { name: 'D0B' }, { name: 'D1' }, { name: 'D10A' }, { name: 'D10B' }, { name: 'D11A' }, { name: 'D11B' }, { name: 'D12A' }, { name: 'D12B' }, { name: 'D13A' }, { name: 'D13B' }, { name: 'D14A' }, { name: 'D14B' }, { name: 'D15A' }, { name: 'D15B' }, { name: 'D16' }, { name: 'D16A' }, { name: 'D16B' }, { name: 'D17' }, { name: 'D1A' }, { name: 'D1B' }, { name: 'D2' }, { name: 'D2A' }, { name: 'D2B' }, { name: 'D3' }, { name: 'D3A' }, { name: 'D3B' }, { name: 'D4' }, { name: 'D4A' }, { name: 'D4B' }, { name: 'D5' }, { name: 'D5A' }, { name: 'D5B' }, { name: 'D6' }, { name: 'D6A' }, { name: 'D6B' }, { name: 'D7' }, { name: 'D7A' }, { name: 'D7B' }, { name: 'D8' }, { name: 'D8A' }, { name: 'D8B' }, { name: 'D9A' }, { name: 'D9B' }, { name: 'N01' }, { name: 'N02' }, ]; const employeeData = [ { name: 'Supario', origin: 'Foreign', dateJoin: '2022-07-29T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Naing', origin: 'Foreign', dateJoin: '2022-11-04T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Tin', origin: 'Foreign', dateJoin: '2022-11-04T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Rio', origin: 'Foreign', dateJoin: '2022-02-14T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Arie', origin: 'Foreign', dateJoin: '2022-07-14T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Anto', origin: 'Foreign', dateJoin: '2022-07-14T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Lapyu', origin: 'Foreign', dateJoin: '2022-11-04T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Kyaw Thin Hlaing (Soso)', origin: 'Foreign', dateJoin: '2023-03-13T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Juhri', origin: 'Foreign', dateJoin: '2023-03-16T00:00:00Z', dateResign: '2023-09-15T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Bagas', origin: 'Foreign', dateJoin: '2023-08-22T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Putra', origin: 'Foreign', dateJoin: '2023-08-22T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Vutto', origin: 'Foreign', dateJoin: '2023-08-25T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Fadli', origin: 'Foreign', dateJoin: '2023-09-05T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Ijan', origin: 'Foreign', dateJoin: '2023-09-05T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Pino', origin: 'Foreign', dateJoin: '2023-09-13T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Kasmirah', origin: 'Foreign', dateJoin: '2023-09-13T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Norinah', origin: 'Foreign', dateJoin: '2023-09-13T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Wati', origin: 'Foreign', dateJoin: '2023-09-15T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, { name: 'Supri', origin: 'Foreign', dateJoin: '2023-09-15T00:00:00Z', basicSalary: 1500, shouldDeductSocso: false, dailyRateAmount: 50, monthlyAllowanceAmount: 0, epfRatePer: 0, isActive: true, annualLeave: 0, sickLeave: 0, }, ]; async function seedBlock() { await dataSource.initialize(); const blockRepository = dataSource.getRepository(BlockEntity); // Check if blocks already exist const blocks = await blockRepository.find(); if (blocks.length === 0) { await blockRepository.save( blockData.map((block) => blockRepository.create(block)), { chunk: blockData.length }, ); console.log('Seeding complete!'); } else { console.warn('blocks already exist, seeding skipped.'); } await dataSource.destroy(); } async function seedEmployee() { await dataSource.initialize(); const employeeRepository = dataSource.getRepository(EmployeeEntity); // Check if blocks already exist const blocks = await employeeRepository.find(); if (blocks.length === 0) { await employeeRepository.save( employeeData.map((employee) => employeeRepository.create(employee)), { chunk: employeeData.length }, ); console.log('Seeding complete!'); } else { console.warn('employee already exist, seeding skipped.'); } await dataSource.destroy(); } async function seedPublicHolidayActivity() { await dataSource.initialize(); const employeeRepository = dataSource.getRepository(EmployeeEntity); const publicHolidayRepository = dataSource.getRepository(PublicHolidayEntity); const blockRepository = dataSource.getRepository(BlockEntity); const activityRepository = dataSource.getRepository(ActivityRecordEntity); const acitvitySettingRepository = dataSource.getRepository( ActivityRecordSettingEntity, ); const startDate = moment .utc() .date(1) // Set day to 10 .month(3) // Set month to March (0-indexed) .year(2024); const publicHolidayArr = await publicHolidayRepository.findBy({ date: MoreThanOrEqual(startDate.toDate()), }); const employeeArr = await employeeRepository.findBy({ isActive: true }); const blockEntity = await blockRepository.findOneBy({ name: 'none' }); const activitySettingEntity = await acitvitySettingRepository.findOneBy({ name: 'Public Holiday', }); if (!blockEntity || !activitySettingEntity) { console.warn('block or activity setting not found, seeding skipped.'); return; } for (const publicHoliday of publicHolidayArr) { for (const employee of employeeArr) { if (employee.dateResign && employee.dateResign <= publicHoliday.date) { continue; } // eslint-disable-next-line no-await-in-loop const foundActivity = await activityRepository.findOne({ where: { employee: { id: employee.id }, date: publicHoliday.date, activityRecordSetting: { id: activitySettingEntity.id }, block: { id: blockEntity.id }, }, relations: ['employee', 'activityRecordSetting', 'block'], }); if (foundActivity) { continue; } const createActivity = activityRepository.create({ activityRecordSetting: activitySettingEntity, block: blockEntity, date: publicHoliday.date, employee, hour: 8, quantity: 8, rate: activitySettingEntity.rate, }); // eslint-disable-next-line no-await-in-loop await activityRepository.save(createActivity); } } console.log('Seeding public holiday activity complete!'); await dataSource.destroy(); } async function seed() { await seedBlock(); await seedEmployee(); await seedPublicHolidayActivity(); } // eslint-disable-next-line unicorn/prefer-top-level-await seed().catch((error) => { console.error('Error during seeding', error); // eslint-disable-next-line unicorn/no-process-exit, n/no-process-exit process.exit(1); });