From 3d5d7d8491cbe89d9e445109c5fc151aa898612a Mon Sep 17 00:00:00 2001 From: Kittapath Date: Tue, 2 Apr 2024 09:03:08 +0700 Subject: [PATCH] =?UTF-8?q?=E0=B8=84=E0=B8=B3=E0=B8=99=E0=B8=A7=E0=B8=99?= =?UTF-8?q?=E0=B9=80=E0=B8=87=E0=B8=B4=E0=B8=99=E0=B9=80=E0=B8=94=E0=B8=B7?= =?UTF-8?q?=E0=B8=AD=E0=B8=99=E0=B8=A5=E0=B8=B9=E0=B8=81=E0=B8=88=E0=B9=89?= =?UTF-8?q?=E0=B8=B2=E0=B8=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryPeriodEmployeeController.ts | 367 ++++++++++++------ 1 file changed, 245 insertions(+), 122 deletions(-) diff --git a/src/controllers/SalaryPeriodEmployeeController.ts b/src/controllers/SalaryPeriodEmployeeController.ts index 4f2d818..3fe8627 100644 --- a/src/controllers/SalaryPeriodEmployeeController.ts +++ b/src/controllers/SalaryPeriodEmployeeController.ts @@ -13,7 +13,7 @@ import { Query, } from "tsoa"; import { AppDataSource } from "../database/data-source"; -import { In, Not, MoreThan, Brackets, Like } from "typeorm"; +import { In, Not, MoreThan, Brackets, Like, MoreThanOrEqual } from "typeorm"; import HttpSuccess from "../interfaces/http-success"; import HttpError from "../interfaces/http-error"; import HttpStatusCode from "../interfaces/http-status"; @@ -330,53 +330,88 @@ export class SalaryPeriodEmployeeController extends Controller { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบระดับตำแหน่ง"); } let type = salaryProfile.type; - 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; - 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 (salaryProfile.amount == null || salaryProfile.amount == 0) { - if (salaryFormula != null) { - const salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMin == null ? 0 : salaryFormula.salaryMin, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - }); - if (salaryRankMin == null) { - step = 1; - } else { - step = salaryRankMin.step - 0.5; - } - } else { - step = 1; - } - } 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 salaryRankMin = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: + salaryProfile.amount != null && salaryProfile.amount > 0 + ? salaryProfile.amount + : salaryFormula.salaryMin != null && salaryFormula.salaryMin > 0 + ? salaryFormula.salaryMin + : 0, + salaryEmployee_: { + isActive: true, + group: group, + }, + }, + order: { salaryMonth: "ASC" }, + }); + if (salaryRankMin == null) { + salaryRankMin = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: + salaryProfile.amount != null && salaryProfile.amount > 0 + ? MoreThanOrEqual(salaryProfile.amount) + : salaryFormula.salaryMin != null && salaryFormula.salaryMin > 0 + ? MoreThanOrEqual(salaryFormula.salaryMin) + : 0, + salaryEmployee_: { + isActive: true, + group: group, + }, + }, + order: { salaryMonth: "ASC" }, + }); + step = salaryRankMin == null ? 1 : salaryRankMin.step - 0.5; + } else { + step = salaryRankMin.step; + } + } else { + step = 1; + } + } + if (type == "HAFT") { step = step + 0.5; } else if (type == "FULL") { @@ -384,6 +419,7 @@ export class SalaryPeriodEmployeeController extends Controller { } else if (type == "FULLHAFT") { step = step + 1.5; } + //หาขั้นสูงสุดในกลุ่มนั้น let salaryRankMax = await this.salaryRankRepository.findOne({ where: { salaryEmployee_: { @@ -393,18 +429,23 @@ export class SalaryPeriodEmployeeController extends Controller { }, order: { step: "DESC" }, }); + //เงินเดือนเกินตาราง if (salaryRankMax != null && step > salaryRankMax.step) { + group = group + 1; + //เงินเดือนในกลุ่มต่อไป let salaryRankAmount = await this.salaryRankRepository.findOne({ where: { - salaryMonth: MoreThan(salaryProfile.amount), + salaryMonth: + salaryRankMax.salaryMonth != null && salaryRankMax.salaryMonth > 0 + ? MoreThan(salaryRankMax.salaryMonth) + : 0, salaryEmployee_: { isActive: true, - group: group + 1, + group: group, }, }, order: { salaryMonth: "ASC" }, }); - group = group + 1; step = (salaryRankAmount == null ? 1 : salaryRankAmount.step) + (step - (salaryRankMax == null ? 0 : salaryRankMax.step) - 0.5); @@ -656,56 +697,91 @@ export class SalaryPeriodEmployeeController extends Controller { if (!Level) { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบระดับตำแหน่ง"); } - salaryProfile.type = body.type; salaryProfile.isReserve = body.isReserve; + salaryProfile.type = body.type; let type = salaryProfile.type; - 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; - 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 (salaryProfile.amount == null || salaryProfile.amount == 0) { - if (salaryFormula != null) { - const salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMin == null ? 0 : salaryFormula.salaryMin, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - }); - if (salaryRankMin == null) { - step = 1; - } else { - step = salaryRankMin.step - 0.5; - } - } else { - step = 1; - } - } 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 salaryRankMin = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: + salaryProfile.amount != null && salaryProfile.amount > 0 + ? salaryProfile.amount + : salaryFormula.salaryMin != null && salaryFormula.salaryMin > 0 + ? salaryFormula.salaryMin + : 0, + salaryEmployee_: { + isActive: true, + group: group, + }, + }, + order: { salaryMonth: "ASC" }, + }); + if (salaryRankMin == null) { + salaryRankMin = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: + salaryProfile.amount != null && salaryProfile.amount > 0 + ? MoreThanOrEqual(salaryProfile.amount) + : salaryFormula.salaryMin != null && salaryFormula.salaryMin > 0 + ? MoreThanOrEqual(salaryFormula.salaryMin) + : 0, + salaryEmployee_: { + isActive: true, + group: group, + }, + }, + order: { salaryMonth: "ASC" }, + }); + step = salaryRankMin == null ? 1 : salaryRankMin.step - 0.5; + } else { + step = salaryRankMin.step; + } + } else { + step = 1; + } + } + if (type == "HAFT") { step = step + 0.5; } else if (type == "FULL") { @@ -713,6 +789,7 @@ export class SalaryPeriodEmployeeController extends Controller { } else if (type == "FULLHAFT") { step = step + 1.5; } + //หาขั้นสูงสุดในกลุ่มนั้น let salaryRankMax = await this.salaryRankRepository.findOne({ where: { salaryEmployee_: { @@ -722,18 +799,23 @@ export class SalaryPeriodEmployeeController extends Controller { }, order: { step: "DESC" }, }); + //เงินเดือนเกินตาราง if (salaryRankMax != null && step > salaryRankMax.step) { + group = group + 1; + //เงินเดือนในกลุ่มต่อไป let salaryRankAmount = await this.salaryRankRepository.findOne({ where: { - salaryMonth: MoreThan(salaryProfile.amount == null ? 0 : salaryProfile.amount), + salaryMonth: + salaryRankMax.salaryMonth != null && salaryRankMax.salaryMonth > 0 + ? MoreThan(salaryRankMax.salaryMonth) + : 0, salaryEmployee_: { isActive: true, - group: group + 1, + group: group, }, }, order: { salaryMonth: "ASC" }, }); - group = group + 1; step = (salaryRankAmount == null ? 1 : salaryRankAmount.step) + (step - (salaryRankMax == null ? 0 : salaryRankMax.step) - 0.5); @@ -1046,53 +1128,88 @@ export class SalaryPeriodEmployeeController extends Controller { throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบระดับตำแหน่ง"); } let type = salaryProfile.type; - 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; - 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 (salaryProfile.amount == null || salaryProfile.amount == 0) { - if (salaryFormula != null) { - const salaryRankMin = await this.salaryRankRepository.findOne({ - where: { - salaryMonth: salaryFormula.salaryMin == null ? 0 : salaryFormula.salaryMin, - salaryEmployee_: { - isActive: true, - group: group, - }, - }, - }); - if (salaryRankMin == null) { - step = 1; - } else { - step = salaryRankMin.step - 0.5; - } - } else { - step = 1; - } - } 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 salaryRankMin = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: + salaryProfile.amount != null && salaryProfile.amount > 0 + ? salaryProfile.amount + : salaryFormula.salaryMin != null && salaryFormula.salaryMin > 0 + ? salaryFormula.salaryMin + : 0, + salaryEmployee_: { + isActive: true, + group: group, + }, + }, + order: { salaryMonth: "ASC" }, + }); + if (salaryRankMin == null) { + salaryRankMin = await this.salaryRankRepository.findOne({ + where: { + salaryMonth: + salaryProfile.amount != null && salaryProfile.amount > 0 + ? MoreThanOrEqual(salaryProfile.amount) + : salaryFormula.salaryMin != null && salaryFormula.salaryMin > 0 + ? MoreThanOrEqual(salaryFormula.salaryMin) + : 0, + salaryEmployee_: { + isActive: true, + group: group, + }, + }, + order: { salaryMonth: "ASC" }, + }); + step = salaryRankMin == null ? 1 : salaryRankMin.step - 0.5; + } else { + step = salaryRankMin.step; + } + } else { + step = 1; + } + } + if (type == "HAFT") { step = step + 0.5; } else if (type == "FULL") { @@ -1100,6 +1217,7 @@ export class SalaryPeriodEmployeeController extends Controller { } else if (type == "FULLHAFT") { step = step + 1.5; } + //หาขั้นสูงสุดในกลุ่มนั้น let salaryRankMax = await this.salaryRankRepository.findOne({ where: { salaryEmployee_: { @@ -1109,18 +1227,23 @@ export class SalaryPeriodEmployeeController extends Controller { }, order: { step: "DESC" }, }); + //เงินเดือนเกินตาราง if (salaryRankMax != null && step > salaryRankMax.step) { + group = group + 1; + //เงินเดือนในกลุ่มต่อไป let salaryRankAmount = await this.salaryRankRepository.findOne({ where: { - salaryMonth: MoreThan(salaryProfile.amount == null ? 0 : salaryProfile.amount), + salaryMonth: + salaryRankMax.salaryMonth != null && salaryRankMax.salaryMonth > 0 + ? MoreThan(salaryRankMax.salaryMonth) + : 0, salaryEmployee_: { isActive: true, - group: group + 1, + group: group, }, }, order: { salaryMonth: "ASC" }, }); - group = group + 1; step = (salaryRankAmount == null ? 1 : salaryRankAmount.step) + (step - (salaryRankMax == null ? 0 : salaryRankMax.step) - 0.5);