คำนวนเงินเดือนลูกจ้าง
This commit is contained in:
parent
139da05b0c
commit
3d5d7d8491
1 changed files with 245 additions and 122 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue