From 6e1560b91d73ff2264331b04d6c734183a50dfba Mon Sep 17 00:00:00 2001 From: kittapath Date: Wed, 18 Sep 2024 19:20:14 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B8=84=E0=B8=B3?= =?UTF-8?q?=E0=B8=99=E0=B8=A7=E0=B8=99=E0=B9=80=E0=B8=87=E0=B8=B4=E0=B8=99?= =?UTF-8?q?=E0=B9=80=E0=B8=94=E0=B8=B7=E0=B8=AD=E0=B8=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryPeriodEmployeeController.ts | 1281 +++++------------ src/database/data-source.ts | 2 +- 2 files changed, 331 insertions(+), 952 deletions(-) diff --git a/src/controllers/SalaryPeriodEmployeeController.ts b/src/controllers/SalaryPeriodEmployeeController.ts index 644cc14..ee556f5 100644 --- a/src/controllers/SalaryPeriodEmployeeController.ts +++ b/src/controllers/SalaryPeriodEmployeeController.ts @@ -374,7 +374,7 @@ export class SalaryPeriodEmployeeController extends Controller { @Request() req: RequestWithUser, ) { await new permission().PermissionCreate(req, "SYS_WAGE"); - const salaryProfile = await this.salaryProfileRepository.findOne({ + let salaryProfile = await this.salaryProfileRepository.findOne({ relations: ["salaryOrg", "salaryOrg.salaryPeriod"], where: { id: body.profileId }, }); @@ -402,321 +402,7 @@ export class SalaryPeriodEmployeeController extends Controller { } let type = salaryProfile.type; - if (type == "NONE") { - salaryProfile.isNext = false; - salaryProfile.amountSpecial = 0; - salaryProfile.amountUse = 0; - salaryProfile.positionSalaryAmount = salaryProfile.amount == null ? 0 : salaryProfile.amount; - salaryProfile.positionSalaryDayAmount = 0; - salaryProfile.groupNew = 0; - salaryProfile.salaryLevelNew = 0; - salaryProfile.positionSalaryAmountPer = 0; - } else if (type == "PENDING") { - salaryProfile.isNext = false; - salaryProfile.amountSpecial = 0; - salaryProfile.amountUse = 0; - salaryProfile.positionSalaryAmount = 0; - salaryProfile.positionSalaryDayAmount = 0; - salaryProfile.groupNew = 0; - salaryProfile.salaryLevelNew = 0; - salaryProfile.positionSalaryAmountPer = 0; - } else if (type == "HAFT" || type == "FULL" || type == "FULLHAFT") { - const salaryFormula = await this.salaryFormulaEmployeeRepository.findOne({ - where: { - position: salaryProfile.position, - posType: { posTypeName: salaryProfile.posType }, - posLevel: { posLevelName: salaryProfile.posLevel }, - }, - relations: ["salaryEmployeeMins", "salaryEmployee"], - }); - let group = salaryProfile.group == null ? 0 : salaryProfile.group; - let step = salaryProfile.salaryLevel == null ? 0 : salaryProfile.salaryLevel; - - if (group == null || group == 0) { - if (salaryFormula != null) { - //หากลุ่มต่ำสุดตามเกณฑ์ - group = salaryFormula.salaryEmployeeMins.sort((a, b) => a.group - b.group)[0].group; - } else { - group = 1; - } - } - if (step == null || step == 0) { - if (salaryFormula != null) { - //หาเงินตำ่สุดที่คำนวนเงิน - let salary = 0; - let _step = 0; - if ( - salaryProfile.amount != null && - salaryProfile.amount > 0 && - salaryFormula.salaryMin != null && - salaryFormula.salaryMin > 0 - ) { - if (salaryProfile.amount >= salaryFormula.salaryMin) { - salary = salaryProfile.amount; - } else { - salary = salaryFormula.salaryMin; - _step = 0.5; - } - } else { - if (salaryProfile.amount != null && salaryProfile.amount > 0) - salary = salaryProfile.amount; - if (salaryFormula.salaryMin != null && salaryFormula.salaryMin > 0) { - salary = salaryFormula.salaryMin; - _step = 0.5; - } - } - //หาขั้นต่ำสุดตามเกณฑ์ - let salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salary, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - - if (salaryRankMin == null) { - salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: MoreThan(salary), - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - if (salaryRankMin == null) { - salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salary, - salaryEmployee_: { - isActive: true, - group: salaryFormula.salaryEmployee.group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - if (salaryRankMin == null) { - salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: MoreThan(salary), - salaryEmployee_: { - isActive: true, - group: salaryFormula.salaryEmployee.group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - let _salaryRankAmountMax = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMax == null ? 0 : salaryFormula.salaryMax, - salaryEmployee_: { - id: salaryFormula.salaryEmployee.id, - }, - }, - }); - step = - salaryRankMin == null - ? _salaryRankAmountMax == null - ? 0.5 - : _salaryRankAmountMax.step - : salaryRankMin.step - 0.5; - // step = salaryRankMin == null ? 0.5 : salaryRankMin.step - 0.5; - group = salaryFormula.salaryEmployee.group; - } else { - step = salaryRankMin.step - _step; - group = salaryFormula.salaryEmployee.group; - } - } else { - step = salaryRankMin.step - 0.5; - } - } else { - step = salaryRankMin.step - _step; - } - } else { - step = 0.5; - } - } - - if (type == "HAFT") { - step = step + 0.5; - } else if (type == "FULL") { - step = step + 1; - } else if (type == "FULLHAFT") { - step = step + 1.5; - } - //หาขั้นสูงสุดในกลุ่มนั้น - let salaryRankMax = await this.salaryRankRepository.findOne({ - where: { - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { step: "DESC" }, - }); - //เงินเดือนเกินตาราง - if ( - salaryRankMax != null && - step > salaryRankMax.step && - (salaryFormula == null || - (salaryFormula != null && - salaryProfile.amount != null && - salaryFormula.salaryMax != null && - salaryFormula.salaryMax > salaryProfile.amount)) - ) { - group = group + 1; - //เงินเดือนในกลุ่มต่อไป - let salaryRankAmount = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: - salaryRankMax.salaryMonth != null && salaryRankMax.salaryMonth > 0 - ? MoreThan(salaryRankMax.salaryMonth) - : 0, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - step = - (salaryRankAmount == null ? 1 : salaryRankAmount.step) + - (step - (salaryRankMax == null ? 0 : salaryRankMax.step) - 0.5); - } - let salaryRanks = await this.salaryRankRepository.findOne({ - where: { - step: step, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - }); - - if (salaryRanks != null && salaryRanks.salaryMonth != null) { - if ( - salaryFormula != null && - salaryFormula.salaryMax != null && - salaryRanks.salaryMonth > salaryFormula.salaryMax - ) { - let salaryRankAmountMax = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMax, - salaryEmployee_: { - id: salaryFormula.salaryEmployee.id, - }, - }, - }); - salaryProfile.isNext = true; - salaryProfile.amountUse = salaryFormula.salaryMax - salaryProfile.amount; - salaryProfile.positionSalaryAmount = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : salaryRankAmountMax.salaryMonth; - salaryProfile.positionSalaryDayAmount = - salaryRankAmountMax == null ? 0 : salaryRankAmountMax.salaryDay; - salaryProfile.groupNew = salaryFormula.salaryEmployee.group; - salaryProfile.salaryLevelNew = salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; - salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; - if (salaryRankAmountMax != null) { - if (step - salaryRankAmountMax.step <= 0.5) { - salaryProfile.positionSalaryAmountPer = 0.02; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.02); - } else if (step - salaryRankAmountMax.step <= 1) { - salaryProfile.positionSalaryAmountPer = 0.04; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.04); - } else { - salaryProfile.positionSalaryAmountPer = 0.06; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.06); - } - } else { - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } else { - salaryProfile.isNext = false; - salaryProfile.amountUse = salaryRanks.salaryMonth - salaryProfile.amount; - salaryProfile.positionSalaryAmount = salaryRanks.salaryMonth; - salaryProfile.positionSalaryDayAmount = salaryRanks.salaryDay; - salaryProfile.groupNew = group; - salaryProfile.salaryLevelNew = step; - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } else { - if ( - salaryFormula != null && - salaryFormula.salaryMax != null && - salaryFormula.salaryMax <= salaryProfile.amount - ) { - let salaryRankAmountMax = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMax, - salaryEmployee_: { - id: salaryFormula.salaryEmployee.id, - }, - }, - }); - salaryProfile.isNext = true; - salaryProfile.amountUse = salaryFormula.salaryMax - salaryProfile.amount; - salaryProfile.positionSalaryAmount = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : salaryRankAmountMax.salaryMonth; - salaryProfile.positionSalaryDayAmount = - salaryRankAmountMax == null ? 0 : salaryRankAmountMax.salaryDay; - salaryProfile.groupNew = salaryFormula.salaryEmployee.group; - salaryProfile.salaryLevelNew = salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; - salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; - if (salaryRankAmountMax != null) { - if (step - salaryRankAmountMax.step <= 0.5) { - salaryProfile.positionSalaryAmountPer = 0.02; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.02); - } else if (step - salaryRankAmountMax.step <= 1) { - salaryProfile.positionSalaryAmountPer = 0.04; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.04); - } else { - salaryProfile.positionSalaryAmountPer = 0.06; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.06); - } - } else { - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } else { - salaryProfile.isNext = false; - salaryProfile.amountUse = 0; - salaryProfile.positionSalaryAmount = salaryProfile.amount; - salaryProfile.positionSalaryDayAmount = 0; - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } - } else { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ประเภทการเลื่อนขึ้นเงินเดือนไม่ถูกต้อง"); - } + salaryProfile = await this.testza(type, salaryProfile); salaryProfile.lastUpdateUserId = req.user.sub; salaryProfile.lastUpdateFullName = req.user.name; @@ -976,7 +662,7 @@ export class SalaryPeriodEmployeeController extends Controller { @Request() req: RequestWithUser, ) { await new permission().PermissionCreate(req, "SYS_WAGE"); - const salaryProfile = await this.salaryProfileRepository.findOne({ + let salaryProfile = await this.salaryProfileRepository.findOne({ relations: ["salaryOrg", "salaryOrg.salaryPeriod"], where: { id: body.profileId }, }); @@ -1039,324 +725,8 @@ export class SalaryPeriodEmployeeController extends Controller { salaryProfile.remark = body.remark == null ? _null : body.remark; let type = salaryProfile.type; - if (type == "NONE") { - salaryProfile.isNext = false; - salaryProfile.amountSpecial = 0; - salaryProfile.amountUse = 0; - salaryProfile.positionSalaryAmount = salaryProfile.amount == null ? 0 : salaryProfile.amount; - salaryProfile.positionSalaryDayAmount = 0; - salaryProfile.groupNew = 0; - salaryProfile.salaryLevelNew = 0; - salaryProfile.positionSalaryAmountPer = 0; - } else if (type == "PENDING") { - salaryProfile.isNext = false; - salaryProfile.amountSpecial = 0; - salaryProfile.amountUse = 0; - salaryProfile.positionSalaryAmount = 0; - salaryProfile.positionSalaryDayAmount = 0; - salaryProfile.groupNew = 0; - salaryProfile.salaryLevelNew = 0; - salaryProfile.positionSalaryAmountPer = 0; - } else if (type == "HAFT" || type == "FULL" || type == "FULLHAFT") { - const salaryFormula = await this.salaryFormulaEmployeeRepository.findOne({ - where: { - position: salaryProfile.position, - posType: { posTypeName: salaryProfile.posType }, - posLevel: { posLevelName: salaryProfile.posLevel }, - }, - relations: ["salaryEmployeeMins", "salaryEmployee"], - }); - let group = salaryProfile.group == null ? 0 : salaryProfile.group; - let step = salaryProfile.salaryLevel == null ? 0 : salaryProfile.salaryLevel; + salaryProfile = await this.testza(type, salaryProfile); - if (group == null || group == 0) { - if (salaryFormula != null) { - //หากลุ่มต่ำสุดตามเกณฑ์ - group = salaryFormula.salaryEmployeeMins.sort((a, b) => a.group - b.group)[0].group; - } else { - group = 1; - } - } - if (step == null || step == 0) { - if (salaryFormula != null) { - //หาเงินตำ่สุดที่คำนวนเงิน - let salary = 0; - let _step = 0; - if ( - salaryProfile.amount != null && - salaryProfile.amount > 0 && - salaryFormula.salaryMin != null && - salaryFormula.salaryMin > 0 - ) { - if (salaryProfile.amount >= salaryFormula.salaryMin) { - salary = salaryProfile.amount; - } else { - salary = salaryFormula.salaryMin; - _step = 0.5; - } - } else { - if (salaryProfile.amount != null && salaryProfile.amount > 0) - salary = salaryProfile.amount; - if (salaryFormula.salaryMin != null && salaryFormula.salaryMin > 0) { - salary = salaryFormula.salaryMin; - _step = 0.5; - } - } - //หาขั้นต่ำสุดตามเกณฑ์ - let salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salary, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - - if (salaryRankMin == null) { - salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: MoreThan(salary), - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - if (salaryRankMin == null) { - salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salary, - salaryEmployee_: { - isActive: true, - group: salaryFormula.salaryEmployee.group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - if (salaryRankMin == null) { - salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: MoreThan(salary), - salaryEmployee_: { - isActive: true, - group: salaryFormula.salaryEmployee.group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - let _salaryRankAmountMax = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMax == null ? 0 : salaryFormula.salaryMax, - salaryEmployee_: { - id: salaryFormula.salaryEmployee.id, - }, - }, - }); - step = - salaryRankMin == null - ? _salaryRankAmountMax == null - ? 0.5 - : _salaryRankAmountMax.step - : salaryRankMin.step - 0.5; - group = salaryFormula.salaryEmployee.group; - } else { - step = salaryRankMin.step - _step; - group = salaryFormula.salaryEmployee.group; - } - } else { - step = salaryRankMin.step - 0.5; - } - } else { - step = salaryRankMin.step - _step; - } - } else { - step = 0.5; - } - } - - if (type == "HAFT") { - step = step + 0.5; - } else if (type == "FULL") { - step = step + 1; - } else if (type == "FULLHAFT") { - step = step + 1.5; - } - //หาขั้นสูงสุดในกลุ่มนั้น - let salaryRankMax = await this.salaryRankRepository.findOne({ - where: { - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { step: "DESC" }, - }); - //เงินเดือนเกินตาราง - if ( - salaryRankMax != null && - step > salaryRankMax.step && - (salaryFormula == null || - (salaryFormula != null && - salaryProfile.amount != null && - salaryFormula.salaryMax != null && - salaryFormula.salaryMax > salaryProfile.amount)) - ) { - group = group + 1; - //เงินเดือนในกลุ่มต่อไป - let salaryRankAmount = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: - salaryRankMax.salaryMonth != null && salaryRankMax.salaryMonth > 0 - ? MoreThan(salaryRankMax.salaryMonth) - : 0, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - step = - (salaryRankAmount == null ? 1 : salaryRankAmount.step) + - (step - (salaryRankMax == null ? 0 : salaryRankMax.step) - 0.5); - } - let salaryRanks = await this.salaryRankRepository.findOne({ - where: { - step: step, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - }); - - if (salaryRanks != null && salaryRanks.salaryMonth != null) { - if ( - salaryFormula != null && - salaryFormula.salaryMax != null && - salaryRanks.salaryMonth > salaryFormula.salaryMax - ) { - let salaryRankAmountMax = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMax, - salaryEmployee_: { - id: salaryFormula.salaryEmployee.id, - }, - }, - }); - salaryProfile.isNext = true; - salaryProfile.amountUse = - salaryFormula.salaryMax - (salaryProfile.amount == null ? 0 : salaryProfile.amount); - salaryProfile.positionSalaryAmount = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : salaryRankAmountMax.salaryMonth; - salaryProfile.positionSalaryDayAmount = - salaryRankAmountMax == null ? 0 : salaryRankAmountMax.salaryDay; - salaryProfile.groupNew = salaryFormula.salaryEmployee.group; - salaryProfile.salaryLevelNew = salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; - if (salaryRankAmountMax != null) { - if (step - salaryRankAmountMax.step <= 0.5) { - salaryProfile.positionSalaryAmountPer = 0.02; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.02); - } else if (step - salaryRankAmountMax.step <= 1) { - salaryProfile.positionSalaryAmountPer = 0.04; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.04); - } else { - salaryProfile.positionSalaryAmountPer = 0.06; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.06); - } - } else { - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } else { - salaryProfile.isNext = false; - salaryProfile.amountUse = - salaryRanks.salaryMonth - (salaryProfile.amount == null ? 0 : salaryProfile.amount); - salaryProfile.positionSalaryAmount = salaryRanks.salaryMonth; - salaryProfile.positionSalaryDayAmount = salaryRanks.salaryDay; - salaryProfile.groupNew = group; - salaryProfile.salaryLevelNew = step; - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } else { - if ( - salaryFormula != null && - salaryFormula.salaryMax != null && - salaryProfile.amount != null && - salaryFormula.salaryMax <= salaryProfile.amount - ) { - let salaryRankAmountMax = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMax, - salaryEmployee_: { - id: salaryFormula.salaryEmployee.id, - }, - }, - }); - salaryProfile.isNext = true; - salaryProfile.amountUse = - salaryFormula.salaryMax - (salaryProfile.amount == null ? 0 : salaryProfile.amount); - salaryProfile.positionSalaryAmount = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : salaryRankAmountMax.salaryMonth; - salaryProfile.positionSalaryDayAmount = - salaryRankAmountMax == null ? 0 : salaryRankAmountMax.salaryDay; - salaryProfile.groupNew = salaryFormula.salaryEmployee.group; - salaryProfile.salaryLevelNew = salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; - salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; - if (salaryRankAmountMax != null) { - if (step - salaryRankAmountMax.step <= 0.5) { - salaryProfile.positionSalaryAmountPer = 0.02; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.02); - } else if (step - salaryRankAmountMax.step <= 1) { - salaryProfile.positionSalaryAmountPer = 0.04; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.04); - } else { - salaryProfile.positionSalaryAmountPer = 0.06; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.06); - } - } else { - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } else { - salaryProfile.isNext = false; - salaryProfile.amountUse = 0; - salaryProfile.positionSalaryAmount = - salaryProfile.amount == null ? 0 : salaryProfile.amount; - salaryProfile.positionSalaryDayAmount = 0; - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } - } else { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ประเภทการเลื่อนขึ้นเงินเดือนไม่ถูกต้อง"); - } salaryProfile.lastUpdateUserId = req.user.sub; salaryProfile.lastUpdateFullName = req.user.name; salaryProfile.lastUpdatedAt = new Date(); @@ -1711,323 +1081,7 @@ export class SalaryPeriodEmployeeController extends Controller { } let type = salaryProfile.type; - if (type == "NONE") { - salaryProfile.isNext = false; - salaryProfile.amountSpecial = 0; - salaryProfile.amountUse = 0; - salaryProfile.positionSalaryAmount = salaryProfile.amount == null ? 0 : salaryProfile.amount; - salaryProfile.positionSalaryDayAmount = 0; - salaryProfile.groupNew = 0; - salaryProfile.salaryLevelNew = 0; - salaryProfile.positionSalaryAmountPer = 0; - } else if (type == "PENDING") { - salaryProfile.isNext = false; - salaryProfile.amountSpecial = 0; - salaryProfile.amountUse = 0; - salaryProfile.positionSalaryAmount = 0; - salaryProfile.positionSalaryDayAmount = 0; - salaryProfile.groupNew = 0; - salaryProfile.salaryLevelNew = 0; - salaryProfile.positionSalaryAmountPer = 0; - } else if (type == "HAFT" || type == "FULL" || type == "FULLHAFT") { - const salaryFormula = await this.salaryFormulaEmployeeRepository.findOne({ - where: { - position: salaryProfile.position, - posType: { posTypeName: salaryProfile.posType }, - posLevel: { posLevelName: salaryProfile.posLevel }, - }, - relations: ["salaryEmployeeMins", "salaryEmployee"], - }); - let group = salaryProfile.group == null ? 0 : salaryProfile.group; - let step = salaryProfile.salaryLevel == null ? 0 : salaryProfile.salaryLevel; - - if (group == null || group == 0) { - if (salaryFormula != null) { - //หากลุ่มต่ำสุดตามเกณฑ์ - group = salaryFormula.salaryEmployeeMins.sort((a, b) => a.group - b.group)[0].group; - } else { - group = 1; - } - } - if (step == null || step == 0) { - if (salaryFormula != null) { - //หาเงินตำ่สุดที่คำนวนเงิน - let salary = 0; - let _step = 0; - if ( - salaryProfile.amount != null && - salaryProfile.amount > 0 && - salaryFormula.salaryMin != null && - salaryFormula.salaryMin > 0 - ) { - if (salaryProfile.amount >= salaryFormula.salaryMin) { - salary = salaryProfile.amount; - } else { - salary = salaryFormula.salaryMin; - _step = 0.5; - } - } else { - if (salaryProfile.amount != null && salaryProfile.amount > 0) - salary = salaryProfile.amount; - if (salaryFormula.salaryMin != null && salaryFormula.salaryMin > 0) { - salary = salaryFormula.salaryMin; - _step = 0.5; - } - } - //หาขั้นต่ำสุดตามเกณฑ์ - let salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salary, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - - if (salaryRankMin == null) { - salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: MoreThan(salary), - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - if (salaryRankMin == null) { - salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salary, - salaryEmployee_: { - isActive: true, - group: salaryFormula.salaryEmployee.group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - if (salaryRankMin == null) { - salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: MoreThan(salary), - salaryEmployee_: { - isActive: true, - group: salaryFormula.salaryEmployee.group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - let _salaryRankAmountMax = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMax == null ? 0 : salaryFormula.salaryMax, - salaryEmployee_: { - id: salaryFormula.salaryEmployee.id, - }, - }, - }); - step = - salaryRankMin == null - ? _salaryRankAmountMax == null - ? 0.5 - : _salaryRankAmountMax.step - : salaryRankMin.step - 0.5; - group = salaryFormula.salaryEmployee.group; - } else { - step = salaryRankMin.step - _step; - group = salaryFormula.salaryEmployee.group; - } - } else { - step = salaryRankMin.step - 0.5; - } - } else { - step = salaryRankMin.step - _step; - } - } else { - step = 0.5; - } - } - - if (type == "HAFT") { - step = step + 0.5; - } else if (type == "FULL") { - step = step + 1; - } else if (type == "FULLHAFT") { - step = step + 1.5; - } - //หาขั้นสูงสุดในกลุ่มนั้น - let salaryRankMax = await this.salaryRankRepository.findOne({ - where: { - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { step: "DESC" }, - }); - //เงินเดือนเกินตาราง - if ( - salaryRankMax != null && - step > salaryRankMax.step && - (salaryFormula == null || - (salaryFormula != null && - salaryProfile.amount != null && - salaryFormula.salaryMax != null && - salaryFormula.salaryMax > salaryProfile.amount)) - ) { - group = group + 1; - //เงินเดือนในกลุ่มต่อไป - let salaryRankAmount = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: - salaryRankMax.salaryMonth != null && salaryRankMax.salaryMonth > 0 - ? MoreThan(salaryRankMax.salaryMonth) - : 0, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - order: { salaryMonth: "ASC" }, - }); - step = - (salaryRankAmount == null ? 1 : salaryRankAmount.step) + - (step - (salaryRankMax == null ? 0 : salaryRankMax.step) - 0.5); - } - let salaryRanks = await this.salaryRankRepository.findOne({ - where: { - step: step, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - }); - - if (salaryRanks != null && salaryRanks.salaryMonth != null) { - if ( - salaryFormula != null && - salaryFormula.salaryMax != null && - salaryRanks.salaryMonth > salaryFormula.salaryMax - ) { - let salaryRankAmountMax = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMax, - salaryEmployee_: { - id: salaryFormula.salaryEmployee.id, - }, - }, - }); - salaryProfile.isNext = true; - salaryProfile.amountUse = - salaryFormula.salaryMax - (salaryProfile.amount == null ? 0 : salaryProfile.amount); - salaryProfile.positionSalaryAmount = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : salaryRankAmountMax.salaryMonth; - salaryProfile.positionSalaryDayAmount = - salaryRankAmountMax == null ? 0 : salaryRankAmountMax.salaryDay; - salaryProfile.groupNew = salaryFormula.salaryEmployee.group; - salaryProfile.salaryLevelNew = salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; - if (salaryRankAmountMax != null) { - if (step - salaryRankAmountMax.step <= 0.5) { - salaryProfile.positionSalaryAmountPer = 0.02; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.02); - } else if (step - salaryRankAmountMax.step <= 1) { - salaryProfile.positionSalaryAmountPer = 0.04; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.04); - } else { - salaryProfile.positionSalaryAmountPer = 0.06; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.06); - } - } else { - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } else { - salaryProfile.isNext = false; - salaryProfile.amountUse = - salaryRanks.salaryMonth - (salaryProfile.amount == null ? 0 : salaryProfile.amount); - salaryProfile.positionSalaryAmount = salaryRanks.salaryMonth; - salaryProfile.positionSalaryDayAmount = salaryRanks.salaryDay; - salaryProfile.groupNew = group; - salaryProfile.salaryLevelNew = step; - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } else { - if ( - salaryFormula != null && - salaryFormula.salaryMax != null && - salaryFormula.salaryMax <= salaryProfile.amount - ) { - let salaryRankAmountMax = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMax, - salaryEmployee_: { - id: salaryFormula.salaryEmployee.id, - }, - }, - }); - salaryProfile.isNext = true; - salaryProfile.amountUse = - salaryFormula.salaryMax - (salaryProfile.amount == null ? 0 : salaryProfile.amount); - salaryProfile.positionSalaryAmount = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : salaryRankAmountMax.salaryMonth; - salaryProfile.positionSalaryDayAmount = - salaryRankAmountMax == null ? 0 : salaryRankAmountMax.salaryDay; - salaryProfile.groupNew = salaryFormula.salaryEmployee.group; - salaryProfile.salaryLevelNew = salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; - salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; - if (salaryRankAmountMax != null) { - if (step - salaryRankAmountMax.step <= 0.5) { - salaryProfile.positionSalaryAmountPer = 0.02; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.02); - } else if (step - salaryRankAmountMax.step <= 1) { - salaryProfile.positionSalaryAmountPer = 0.04; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.04); - } else { - salaryProfile.positionSalaryAmountPer = 0.06; - salaryProfile.amountSpecial = - salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null - ? 0 - : Math.floor(salaryRankAmountMax.salaryMonth * 0.06); - } - } else { - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } else { - salaryProfile.isNext = false; - salaryProfile.amountUse = 0; - salaryProfile.positionSalaryAmount = - salaryProfile.amount == null ? 0 : salaryProfile.amount; - salaryProfile.positionSalaryDayAmount = 0; - salaryProfile.positionSalaryAmountPer = 0; - salaryProfile.amountSpecial = 0; - } - } - } else { - throw new HttpError(HttpStatusCode.NOT_FOUND, "ประเภทการเลื่อนขึ้นเงินเดือนไม่ถูกต้อง"); - } + salaryProfile = await this.testza(type, salaryProfile); const before = null; salaryProfile.salaryOrgId = salaryOrg.id; @@ -2667,4 +1721,329 @@ export class SalaryPeriodEmployeeController extends Controller { ); return new HttpSuccess(); } + + async testza(type: string, salaryProfile: SalaryProfileEmployee): Promise { + if (type == "NONE") { + salaryProfile.isNext = false; + salaryProfile.amountSpecial = 0; + salaryProfile.amountUse = 0; + salaryProfile.positionSalaryAmount = salaryProfile.amount == null ? 0 : salaryProfile.amount; + salaryProfile.positionSalaryDayAmount = 0; + salaryProfile.groupNew = 0; + salaryProfile.salaryLevelNew = 0; + salaryProfile.positionSalaryAmountPer = 0; + } else if (type == "PENDING") { + salaryProfile.isNext = false; + salaryProfile.amountSpecial = 0; + salaryProfile.amountUse = 0; + salaryProfile.positionSalaryAmount = 0; + salaryProfile.positionSalaryDayAmount = 0; + salaryProfile.groupNew = 0; + salaryProfile.salaryLevelNew = 0; + salaryProfile.positionSalaryAmountPer = 0; + } else if (type == "HAFT" || type == "FULL" || type == "FULLHAFT") { + const salaryFormula = await this.salaryFormulaEmployeeRepository.findOne({ + where: { + position: salaryProfile.position, + posType: { posTypeName: salaryProfile.posType }, + posLevel: { posLevelName: salaryProfile.posLevel }, + }, + relations: ["salaryEmployeeMins", "salaryEmployee"], + }); + //ขั้นเก่าที่เลื่อนมา + let group = salaryProfile.group == null ? 0 : salaryProfile.group; + let step = salaryProfile.salaryLevel == null ? 0 : salaryProfile.salaryLevel; + + if (group == null || group == 0) { + if (salaryFormula != null) { + //หากลุ่มต่ำสุดตามเกณฑ์ + group = salaryFormula.salaryEmployeeMins.sort((a, b) => a.group - b.group)[0].group; + } else { + group = 1; + } + } + if (step == null || step == 0) { + if (salaryFormula != null) { + // //หาเงินตำ่สุดที่คำนวนเงิน + // let salary = 0; + // let _step = 0; + // if ( + // salaryProfile.amount != null && + // salaryProfile.amount > 0 && + // salaryFormula.salaryMin != null && + // salaryFormula.salaryMin > 0 + // ) { + // if (salaryProfile.amount >= salaryFormula.salaryMin) { + // salary = salaryProfile.amount; + // } else { + // salary = salaryFormula.salaryMin; + // _step = 0.5; + // } + // } else { + // // if (salaryProfile.amount != null && salaryProfile.amount > 0) + // // salary = salaryProfile.amount; + // // if (salaryFormula.salaryMin != null && salaryFormula.salaryMin > 0) { + // salary = salaryFormula.salaryMin == null ? 0 : salaryFormula.salaryMin; + // _step = 0.5; + // // } + // } + let salary = salaryProfile.amount == null ? 0 : salaryProfile.amount; + //หาขั้นต่ำสุดตามเกณฑ์ + let salaryRankMin = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: salary, + salaryEmployee_: { + isActive: true, + group: group, + }, + }, + // order: { salaryMonth: "ASC" }, + }); + + if (salaryRankMin == null) { + salaryRankMin = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: MoreThan(salary), + salaryEmployee_: { + isActive: true, + group: group, + }, + }, + order: { salaryMonth: "ASC" }, + }); + if (salaryRankMin == null) { + salaryRankMin = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: salary, + salaryEmployee_: { + isActive: true, + group: salaryFormula.salaryEmployee.group, + }, + }, + order: { salaryMonth: "ASC" }, + }); + if (salaryRankMin == null) { + salaryRankMin = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: MoreThan(salary), + salaryEmployee_: { + isActive: true, + group: salaryFormula.salaryEmployee.group, + }, + }, + order: { salaryMonth: "ASC" }, + }); + let _salaryRankAmountMax = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: salaryFormula.salaryMax == null ? 0 : salaryFormula.salaryMax, + salaryEmployee_: { + id: salaryFormula.salaryEmployee.id, + }, + }, + }); + step = + salaryRankMin == null + ? _salaryRankAmountMax == null + ? 0.5 + : _salaryRankAmountMax.step + : salaryRankMin.step - 0.5; + group = salaryFormula.salaryEmployee.group; + } else { + step = salaryRankMin.step; + group = salaryFormula.salaryEmployee.group; + } + } else { + step = salaryRankMin.step - 0.5; + } + } else { + step = salaryRankMin.step; + } + } else { + step = 0.5; + } + } + + if (type == "HAFT") { + step = step + 0.5; + } else if (type == "FULL") { + step = step + 1; + } else if (type == "FULLHAFT") { + step = step + 1.5; + } + //หาขั้นสูงสุดในกลุ่มนั้น + let salaryRankMax = await this.salaryRankRepository.findOne({ + where: { + salaryEmployee_: { + isActive: true, + group: group, + }, + }, + order: { step: "DESC" }, + }); + //เงินเดือนเกินตาราง + if ( + salaryRankMax != null && + step > salaryRankMax.step && + (salaryFormula == null || + (salaryFormula != null && + salaryProfile.amount != null && + salaryFormula.salaryMax != null && + salaryFormula.salaryMax > salaryProfile.amount)) + ) { + group = group + 1; + //เงินเดือนในกลุ่มต่อไป + let salaryRankAmount = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: + salaryRankMax.salaryMonth != null && salaryRankMax.salaryMonth > 0 + ? MoreThan(salaryRankMax.salaryMonth) + : 0, + salaryEmployee_: { + isActive: true, + group: group, + }, + }, + order: { salaryMonth: "ASC" }, + }); + step = + (salaryRankAmount == null ? 1 : salaryRankAmount.step) + + (step - (salaryRankMax == null ? 0 : salaryRankMax.step) - 0.5); + } + let salaryRanks = await this.salaryRankRepository.findOne({ + where: { + step: step, + salaryEmployee_: { + isActive: true, + group: group, + }, + }, + }); + + if (salaryRanks != null && salaryRanks.salaryMonth != null) { + if ( + salaryFormula != null && + salaryFormula.salaryMax != null && + salaryRanks.salaryMonth > salaryFormula.salaryMax + ) { + let salaryRankAmountMax = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: salaryFormula.salaryMax, + salaryEmployee_: { + id: salaryFormula.salaryEmployee.id, + }, + }, + }); + salaryProfile.isNext = true; + salaryProfile.amountUse = + salaryFormula.salaryMax - (salaryProfile.amount == null ? 0 : salaryProfile.amount); + salaryProfile.positionSalaryAmount = + salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null + ? 0 + : salaryRankAmountMax.salaryMonth; + salaryProfile.positionSalaryDayAmount = + salaryRankAmountMax == null ? 0 : salaryRankAmountMax.salaryDay; + salaryProfile.groupNew = salaryFormula.salaryEmployee.group; + salaryProfile.salaryLevelNew = salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; + salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; + if (salaryRankAmountMax != null) { + if (step - salaryRankAmountMax.step <= 0.5) { + salaryProfile.positionSalaryAmountPer = 0.02; + salaryProfile.amountSpecial = + salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null + ? 0 + : Math.floor(salaryRankAmountMax.salaryMonth * 0.02); + } else if (step - salaryRankAmountMax.step <= 1) { + salaryProfile.positionSalaryAmountPer = 0.04; + salaryProfile.amountSpecial = + salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null + ? 0 + : Math.floor(salaryRankAmountMax.salaryMonth * 0.04); + } else { + salaryProfile.positionSalaryAmountPer = 0.06; + salaryProfile.amountSpecial = + salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null + ? 0 + : Math.floor(salaryRankAmountMax.salaryMonth * 0.06); + } + } else { + salaryProfile.positionSalaryAmountPer = 0; + salaryProfile.amountSpecial = 0; + } + } else { + salaryProfile.isNext = false; + salaryProfile.amountUse = + salaryRanks.salaryMonth - (salaryProfile.amount == null ? 0 : salaryProfile.amount); + salaryProfile.positionSalaryAmount = salaryRanks.salaryMonth; + salaryProfile.positionSalaryDayAmount = salaryRanks.salaryDay; + salaryProfile.groupNew = group; + salaryProfile.salaryLevelNew = step; + salaryProfile.positionSalaryAmountPer = 0; + salaryProfile.amountSpecial = 0; + } + } else { + if ( + salaryFormula != null && + salaryFormula.salaryMax != null && + salaryProfile.amount != null && + salaryFormula.salaryMax <= salaryProfile.amount + ) { + let salaryRankAmountMax = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: salaryFormula.salaryMax, + salaryEmployee_: { + id: salaryFormula.salaryEmployee.id, + }, + }, + }); + salaryProfile.isNext = true; + salaryProfile.amountUse = salaryFormula.salaryMax - salaryProfile.amount; + salaryProfile.positionSalaryAmount = + salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null + ? 0 + : salaryRankAmountMax.salaryMonth; + salaryProfile.positionSalaryDayAmount = + salaryRankAmountMax == null ? 0 : salaryRankAmountMax.salaryDay; + salaryProfile.groupNew = salaryFormula.salaryEmployee.group; + salaryProfile.salaryLevelNew = salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; + salaryRankAmountMax == null ? 0 : salaryRankAmountMax.step; + if (salaryRankAmountMax != null) { + if (step - salaryRankAmountMax.step <= 0.5) { + salaryProfile.positionSalaryAmountPer = 0.02; + salaryProfile.amountSpecial = + salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null + ? 0 + : Math.floor(salaryRankAmountMax.salaryMonth * 0.02); + } else if (step - salaryRankAmountMax.step <= 1) { + salaryProfile.positionSalaryAmountPer = 0.04; + salaryProfile.amountSpecial = + salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null + ? 0 + : Math.floor(salaryRankAmountMax.salaryMonth * 0.04); + } else { + salaryProfile.positionSalaryAmountPer = 0.06; + salaryProfile.amountSpecial = + salaryRankAmountMax == null || salaryRankAmountMax.salaryMonth == null + ? 0 + : Math.floor(salaryRankAmountMax.salaryMonth * 0.06); + } + } else { + salaryProfile.positionSalaryAmountPer = 0; + salaryProfile.amountSpecial = 0; + } + } else { + salaryProfile.isNext = false; + salaryProfile.amountUse = 0; + salaryProfile.positionSalaryAmount = + salaryProfile.amount == null ? 0 : salaryProfile.amount; + salaryProfile.positionSalaryDayAmount = 0; + salaryProfile.positionSalaryAmountPer = 0; + salaryProfile.amountSpecial = 0; + } + } + } else { + throw "ประเภทการเลื่อนขึ้นเงินเดือนไม่ถูกต้อง"; + } + + return salaryProfile; + } } diff --git a/src/database/data-source.ts b/src/database/data-source.ts index 5f6b6b0..72e9d68 100644 --- a/src/database/data-source.ts +++ b/src/database/data-source.ts @@ -50,7 +50,7 @@ export const AppDataSource = new DataSource({ password: process.env.DB_PASSWORD, connectorPackage: "mysql2", synchronize: false, - logging: ["query", "error"], + logging: true, entities: process.env.NODE_ENV !== "production" ? ["src/entities/**/*.ts"]