Merge branch 'develop' of github.com:Frappet/bma-ehr-salary into develop
This commit is contained in:
commit
b17fd476c0
1 changed files with 256 additions and 42 deletions
|
|
@ -28,6 +28,7 @@ import { PosLevel } from "../entities/PosLevel";
|
|||
import { Salarys } from "../entities/Salarys";
|
||||
import { SalaryRanks } from "../entities/SalaryRanks";
|
||||
import CallAPI from "../interfaces/call-api";
|
||||
import * as express from "express";
|
||||
import { Int32 } from "typeorm/browser";
|
||||
|
||||
@Route("api/v1/salary/period")
|
||||
|
|
@ -74,11 +75,11 @@ export class SalaryPeriodController extends Controller {
|
|||
) == null
|
||||
? null
|
||||
: salaryPeriod.salaryOrgs.find(
|
||||
(x) =>
|
||||
x.group == "GROUP1" &&
|
||||
x.rootId == body.rootId &&
|
||||
x.snapshot == body.snapshot.toLocaleUpperCase(),
|
||||
)?.id,
|
||||
(x) =>
|
||||
x.group == "GROUP1" &&
|
||||
x.rootId == body.rootId &&
|
||||
x.snapshot == body.snapshot.toLocaleUpperCase(),
|
||||
)?.id,
|
||||
group2id:
|
||||
salaryPeriod.salaryOrgs.find(
|
||||
(x) =>
|
||||
|
|
@ -88,11 +89,11 @@ export class SalaryPeriodController extends Controller {
|
|||
) == null
|
||||
? null
|
||||
: salaryPeriod.salaryOrgs.find(
|
||||
(x) =>
|
||||
x.group == "GROUP2" &&
|
||||
x.rootId == body.rootId &&
|
||||
x.snapshot == body.snapshot.toLocaleUpperCase(),
|
||||
)?.id,
|
||||
(x) =>
|
||||
x.group == "GROUP2" &&
|
||||
x.rootId == body.rootId &&
|
||||
x.snapshot == body.snapshot.toLocaleUpperCase(),
|
||||
)?.id,
|
||||
effectiveDate: salaryPeriod.effectiveDate,
|
||||
period: salaryPeriod.period,
|
||||
};
|
||||
|
|
@ -143,11 +144,26 @@ export class SalaryPeriodController extends Controller {
|
|||
@Delete("profile/{id}")
|
||||
async deleteSalaryProfile(@Path() id: string) {
|
||||
const salaryProfile = await this.salaryProfileRepository.findOne({
|
||||
relations: ["salaryOrg"],
|
||||
where: { id: id },
|
||||
});
|
||||
if (!salaryProfile) {
|
||||
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลการขอเงินเดือนผู้ใช้งานนี้ในระบบ");
|
||||
}
|
||||
// หาจำนวน Quota คงเหลือ
|
||||
if(salaryProfile?.salaryOrg.snapshot == "SNAP1"){
|
||||
const amountFullType = await this.salaryProfileRepository.count({
|
||||
where:{
|
||||
salaryOrgId:salaryProfile?.salaryOrg.id,
|
||||
type:"FULL"
|
||||
}
|
||||
});
|
||||
const calRemainQuota = salaryProfile?.salaryOrg.fifteenPercent - amountFullType;
|
||||
salaryProfile.salaryOrg.quantityUsed = amountFullType;
|
||||
salaryProfile.salaryOrg.remainQuota = calRemainQuota;
|
||||
await this.salaryOrgRepository.save(salaryProfile?.salaryOrg);
|
||||
}
|
||||
|
||||
await this.salaryProfileRepository.remove(salaryProfile);
|
||||
return new HttpSuccess();
|
||||
}
|
||||
|
|
@ -217,9 +233,9 @@ export class SalaryPeriodController extends Controller {
|
|||
salaryProfile.amountSpecial = salaryRanks == null ? 0 : salaryRanks.salaryHalfSpecial;
|
||||
salaryProfile.amountUse =
|
||||
salaryRanks == null ||
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
? 0
|
||||
: salaryRanks.salaryHalf - salaryProfile.amount;
|
||||
salaryProfile.positionSalaryAmount = salaryRanks == null ? 0 : salaryRanks.salaryHalf;
|
||||
|
|
@ -227,9 +243,9 @@ export class SalaryPeriodController extends Controller {
|
|||
salaryProfile.amountSpecial = salaryRanks == null ? 0 : salaryRanks.salaryFullSpecial;
|
||||
salaryProfile.amountUse =
|
||||
salaryRanks == null ||
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFull == null ||
|
||||
salaryProfile.amount == null
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFull == null ||
|
||||
salaryProfile.amount == null
|
||||
? 0
|
||||
: salaryRanks.salaryFull - salaryProfile.amount;
|
||||
salaryProfile.positionSalaryAmount = salaryRanks == null ? 0 : salaryRanks.salaryFull;
|
||||
|
|
@ -237,16 +253,29 @@ export class SalaryPeriodController extends Controller {
|
|||
salaryProfile.amountSpecial = salaryRanks == null ? 0 : salaryRanks.salaryFullHalfSpecial;
|
||||
salaryProfile.amountUse =
|
||||
salaryRanks == null ||
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFullHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFullHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
? 0
|
||||
: salaryRanks.salaryFullHalf - salaryProfile.amount;
|
||||
salaryProfile.positionSalaryAmount = salaryRanks == null ? 0 : salaryRanks.salaryFullHalf;
|
||||
} else {
|
||||
throw new HttpError(HttpStatusCode.NOT_FOUND, "ประเภทการเลื่อนขึ้นเงินเดือนไม่ถูกต้อง");
|
||||
}
|
||||
|
||||
// หาจำนวน Quota คงเหลือ
|
||||
if(salaryProfile?.salaryOrg.snapshot == "SNAP1"){
|
||||
const amountFullType = await this.salaryProfileRepository.count({
|
||||
where:{
|
||||
salaryOrgId:salaryProfile?.salaryOrg.id,
|
||||
type:"FULL"
|
||||
}
|
||||
});
|
||||
const calRemainQuota = salaryProfile?.salaryOrg.fifteenPercent - amountFullType;
|
||||
salaryProfile.salaryOrg.quantityUsed = amountFullType;
|
||||
salaryProfile.salaryOrg.remainQuota = calRemainQuota;
|
||||
await this.salaryOrgRepository.save(salaryProfile?.salaryOrg);
|
||||
}
|
||||
|
||||
await this.salaryProfileRepository.save(salaryProfile);
|
||||
return new HttpSuccess();
|
||||
}
|
||||
|
|
@ -273,6 +302,21 @@ export class SalaryPeriodController extends Controller {
|
|||
if (!salaryOrg) {
|
||||
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลกลุ่มการขอเลื่อนเงินเดือน");
|
||||
}
|
||||
|
||||
//หาจำนวน Quota คงเหลือ
|
||||
if(salaryOrg.snapshot == "SNAP1"){
|
||||
const amountFullType = await this.salaryProfileRepository.count({
|
||||
where:{
|
||||
salaryOrgId:salaryOrg.id,
|
||||
type:"FULL"
|
||||
}
|
||||
});
|
||||
const calRemainQuota = salaryOrg.fifteenPercent - amountFullType;
|
||||
salaryOrg.quantityUsed = amountFullType;
|
||||
salaryOrg.remainQuota = calRemainQuota;
|
||||
await this.salaryOrgRepository.save(salaryOrg);
|
||||
}
|
||||
|
||||
salaryProfile.salaryOrgId = salaryOrg.id;
|
||||
await this.salaryProfileRepository.save(salaryProfile);
|
||||
return new HttpSuccess();
|
||||
|
|
@ -342,9 +386,9 @@ export class SalaryPeriodController extends Controller {
|
|||
salaryProfile.amountSpecial = salaryRanks == null ? 0 : salaryRanks.salaryHalfSpecial;
|
||||
salaryProfile.amountUse =
|
||||
salaryRanks == null ||
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
? 0
|
||||
: salaryRanks.salaryHalf - salaryProfile.amount;
|
||||
salaryProfile.positionSalaryAmount = salaryRanks == null ? 0 : salaryRanks.salaryHalf;
|
||||
|
|
@ -352,9 +396,9 @@ export class SalaryPeriodController extends Controller {
|
|||
salaryProfile.amountSpecial = salaryRanks == null ? 0 : salaryRanks.salaryFullSpecial;
|
||||
salaryProfile.amountUse =
|
||||
salaryRanks == null ||
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFull == null ||
|
||||
salaryProfile.amount == null
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFull == null ||
|
||||
salaryProfile.amount == null
|
||||
? 0
|
||||
: salaryRanks.salaryFull - salaryProfile.amount;
|
||||
salaryProfile.positionSalaryAmount = salaryRanks == null ? 0 : salaryRanks.salaryFull;
|
||||
|
|
@ -362,9 +406,9 @@ export class SalaryPeriodController extends Controller {
|
|||
salaryProfile.amountSpecial = salaryRanks == null ? 0 : salaryRanks.salaryFullHalfSpecial;
|
||||
salaryProfile.amountUse =
|
||||
salaryRanks == null ||
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFullHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFullHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
? 0
|
||||
: salaryRanks.salaryFullHalf - salaryProfile.amount;
|
||||
salaryProfile.positionSalaryAmount = salaryRanks == null ? 0 : salaryRanks.salaryFullHalf;
|
||||
|
|
@ -460,6 +504,21 @@ export class SalaryPeriodController extends Controller {
|
|||
if (!salaryOrg) {
|
||||
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบรอบการขึ้นเงินเดือน");
|
||||
}
|
||||
|
||||
//หาจำนวน Quota คงเหลือ
|
||||
if(salaryOrg.snapshot == "SNAP1"){
|
||||
const amountFullType = await this.salaryProfileRepository.count({
|
||||
where:{
|
||||
salaryOrgId:salaryOrg.id,
|
||||
type:"FULL"
|
||||
}
|
||||
});
|
||||
const calRemainQuota = salaryOrg.fifteenPercent - amountFullType;
|
||||
salaryOrg.quantityUsed = amountFullType;
|
||||
salaryOrg.remainQuota = calRemainQuota;
|
||||
await this.salaryOrgRepository.save(salaryOrg);
|
||||
}
|
||||
|
||||
const salaryOrgAll = await this.salaryOrgRepository.find({
|
||||
where: {
|
||||
salaryPeriodId: salaryOrg.salaryPeriodId,
|
||||
|
|
@ -535,9 +594,9 @@ export class SalaryPeriodController extends Controller {
|
|||
salaryProfile.amountSpecial = salaryRanks == null ? 0 : salaryRanks.salaryHalfSpecial;
|
||||
salaryProfile.amountUse =
|
||||
salaryRanks == null ||
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
? 0
|
||||
: salaryRanks.salaryHalf - salaryProfile.amount;
|
||||
salaryProfile.positionSalaryAmount = salaryRanks == null ? 0 : salaryRanks.salaryHalf;
|
||||
|
|
@ -545,9 +604,9 @@ export class SalaryPeriodController extends Controller {
|
|||
salaryProfile.amountSpecial = salaryRanks == null ? 0 : salaryRanks.salaryFullSpecial;
|
||||
salaryProfile.amountUse =
|
||||
salaryRanks == null ||
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFull == null ||
|
||||
salaryProfile.amount == null
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFull == null ||
|
||||
salaryProfile.amount == null
|
||||
? 0
|
||||
: salaryRanks.salaryFull - salaryProfile.amount;
|
||||
salaryProfile.positionSalaryAmount = salaryRanks == null ? 0 : salaryRanks.salaryFull;
|
||||
|
|
@ -555,9 +614,9 @@ export class SalaryPeriodController extends Controller {
|
|||
salaryProfile.amountSpecial = salaryRanks == null ? 0 : salaryRanks.salaryFullHalfSpecial;
|
||||
salaryProfile.amountUse =
|
||||
salaryRanks == null ||
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFullHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
salaryProfile == null ||
|
||||
salaryRanks.salaryFullHalf == null ||
|
||||
salaryProfile.amount == null
|
||||
? 0
|
||||
: salaryRanks.salaryFullHalf - salaryProfile.amount;
|
||||
salaryProfile.positionSalaryAmount = salaryRanks == null ? 0 : salaryRanks.salaryFullHalf;
|
||||
|
|
@ -989,18 +1048,23 @@ export class SalaryPeriodController extends Controller {
|
|||
/**
|
||||
* Cronjob SalaryPeriod
|
||||
*/
|
||||
async CronjobSalaryPeriod() {
|
||||
async CronjobSalaryPeriod() { //bright
|
||||
const current = new Date();
|
||||
let salaryPeriod: any;
|
||||
// console.log(current.getDate(), current.getMonth() , current.getFullYear())
|
||||
let request: any;
|
||||
// request = express.request;
|
||||
// console.log("request: ", request);
|
||||
if (current.getDate() == 1 && current.getMonth() == 2) {
|
||||
salaryPeriod = await this.salaryPeriodRepository.findOne({
|
||||
where: {
|
||||
year: current.getFullYear(),
|
||||
period: "MAR",
|
||||
period: "APR",
|
||||
isActive: true,
|
||||
},
|
||||
});
|
||||
if (salaryPeriod) {
|
||||
this.SnapshotSalarys("SNAP1", salaryPeriod.id, request)
|
||||
}
|
||||
} else if (current.getDate() == 1 && current.getMonth() == 3) {
|
||||
salaryPeriod = await this.salaryPeriodRepository.findOne({
|
||||
where: {
|
||||
|
|
@ -1009,14 +1073,20 @@ export class SalaryPeriodController extends Controller {
|
|||
isActive: true,
|
||||
},
|
||||
});
|
||||
if (salaryPeriod) {
|
||||
this.SnapshotSalarys("SNAP2", salaryPeriod.id, request)
|
||||
}
|
||||
} else if (current.getDate() == 1 && current.getMonth() == 8) {
|
||||
salaryPeriod = await this.salaryPeriodRepository.findOne({
|
||||
where: {
|
||||
year: current.getFullYear(),
|
||||
period: "SEP",
|
||||
period: "OCT",
|
||||
isActive: true,
|
||||
},
|
||||
});
|
||||
if (salaryPeriod) {
|
||||
this.SnapshotSalarys("SNAP1", salaryPeriod.id, request)
|
||||
}
|
||||
} else if (current.getDate() == 1 && current.getMonth() == 9) {
|
||||
salaryPeriod = await this.salaryPeriodRepository.findOne({
|
||||
where: {
|
||||
|
|
@ -1025,6 +1095,150 @@ export class SalaryPeriodController extends Controller {
|
|||
isActive: true,
|
||||
},
|
||||
});
|
||||
if (salaryPeriod) {
|
||||
this.SnapshotSalarys("SNAP2", salaryPeriod.id, request)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public async SnapshotSalarys(
|
||||
snapshot: string,
|
||||
salaryPeriodId: string,
|
||||
request: any
|
||||
) {
|
||||
snapshot = snapshot.toLocaleUpperCase();
|
||||
const salaryPeriod = await this.salaryPeriodRepository.findOne({
|
||||
where: { id: salaryPeriodId },
|
||||
});
|
||||
if (!salaryPeriod) {
|
||||
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบรอบการสร้างเงินเดือน");
|
||||
}
|
||||
|
||||
const salaryOrg = await this.salaryOrgRepository.find({
|
||||
where: { salaryPeriodId: salaryPeriod.id, snapshot: snapshot },
|
||||
});
|
||||
const salaryProfile = await this.salaryProfileRepository.find({
|
||||
where: { salaryOrgId: In(salaryOrg.map((x) => x.id)) },
|
||||
});
|
||||
await this.salaryOrgRepository.remove(salaryOrg);
|
||||
await this.salaryProfileRepository.remove(salaryProfile);
|
||||
|
||||
let orgs = await new CallAPI().GetData(request, "org/unauthorize/active/root/id");
|
||||
let orgProfiles: any;
|
||||
await new CallAPI()
|
||||
.PostData(request, "org/unauthorize/profile/salary/gen", {
|
||||
page: 1,
|
||||
pageSize: 100,
|
||||
keyword: "",
|
||||
})
|
||||
.then((x) => {
|
||||
orgProfiles = x.data;
|
||||
});
|
||||
if (orgProfiles.total > 100) {
|
||||
const page = Math.ceil(orgProfiles.total.length / 100);
|
||||
for (let index = 2; index <= page; index++) {
|
||||
await new CallAPI()
|
||||
.PostData(request, "org/unauthorize/profile/salary/gen", {
|
||||
page: index,
|
||||
pageSize: 100,
|
||||
keyword: "",
|
||||
})
|
||||
.then((x) => {
|
||||
Array.prototype.push.apply(orgProfiles, x.data);
|
||||
});
|
||||
}
|
||||
}
|
||||
let revisionId = await new CallAPI().GetData(request, "org/unauthorize/revision/latest");
|
||||
|
||||
salaryPeriod.revisionId = revisionId;
|
||||
await this.salaryPeriodRepository.save(salaryPeriod);
|
||||
|
||||
await Promise.all(
|
||||
orgs.map(async (rootId: string) => {
|
||||
let salaryOrgNew = Object.assign(new SalaryOrg());
|
||||
salaryOrgNew.salaryPeriodId = salaryPeriod.id;
|
||||
salaryOrgNew.status = "PENDING";
|
||||
salaryOrgNew.rootId = rootId;
|
||||
salaryOrgNew.revisionId = salaryPeriod.revisionId;
|
||||
salaryOrgNew.snapshot = snapshot;
|
||||
salaryOrgNew.group = "GROUP1";
|
||||
salaryOrgNew.createdUserId = request.user.sub;
|
||||
salaryOrgNew.createdFullName = request.user.name;
|
||||
salaryOrgNew.lastUpdateUserId = request.user.sub;
|
||||
salaryOrgNew.lastUpdateFullName = request.user.name;
|
||||
await this.salaryOrgRepository.save(salaryOrgNew);
|
||||
delete salaryOrgNew.id;
|
||||
salaryOrgNew.group = "GROUP2";
|
||||
await this.salaryOrgRepository.save(salaryOrgNew);
|
||||
}),
|
||||
);
|
||||
|
||||
let salaryProfileOld: SalaryProfile[] = [];
|
||||
if (snapshot == "SNAP2") {
|
||||
const salaryOrgOld = await this.salaryOrgRepository.findOne({
|
||||
where: { salaryPeriodId: salaryPeriod.id, snapshot: "SNAP1" },
|
||||
relations: ["salaryProfiles"],
|
||||
});
|
||||
if (salaryOrgOld != null) salaryProfileOld = salaryOrgOld.salaryProfiles;
|
||||
}
|
||||
|
||||
await Promise.all(
|
||||
orgProfiles.map(async (profile: any) => {
|
||||
let group = "GROUP1";
|
||||
if (
|
||||
(profile.posType == "ทั่วไป" && profile.posLevel == "ทักษะพิเศษ") ||
|
||||
(profile.posType == "วิชาการ" && profile.posLevel == "เชี่ยวชาญ") ||
|
||||
(profile.posType == "วิชาการ" && profile.posLevel == "ทรงคุณวุฒิ") ||
|
||||
(profile.posType == "อำนวยการ" && profile.posLevel == "สูง") ||
|
||||
(profile.posType == "บริหาร" && profile.posLevel == "ต้น") ||
|
||||
(profile.posType == "บริหาร" && profile.posLevel == "สูง")
|
||||
) {
|
||||
group = "GROUP2";
|
||||
}
|
||||
const salaryOrgNew = await this.salaryOrgRepository.findOne({
|
||||
where: {
|
||||
salaryPeriodId: salaryPeriod.id,
|
||||
rootId: profile.rootId,
|
||||
snapshot: snapshot,
|
||||
group: group,
|
||||
},
|
||||
});
|
||||
|
||||
if (salaryOrgNew != null) {
|
||||
let salaryProfileNew = Object.assign(new SalaryProfile(), profile);
|
||||
salaryProfileNew.salaryOrgId = salaryOrgNew.id;
|
||||
salaryProfileNew.revisionId = salaryPeriod.revisionId;
|
||||
salaryProfileNew.createdUserId = request.user.sub;
|
||||
salaryProfileNew.createdFullName = request.user.name;
|
||||
salaryProfileNew.lastUpdateUserId = request.user.sub;
|
||||
salaryProfileNew.lastUpdateFullName = request.user.name;
|
||||
|
||||
if (snapshot == "SNAP2") {
|
||||
const salaryOld = salaryProfileOld.find(
|
||||
(x) => x.citizenId == salaryProfileNew.citizenId,
|
||||
);
|
||||
salaryProfileNew.amount = salaryOld == null ? 0 : salaryOld.amount;
|
||||
salaryProfileNew.amountSpecial = salaryOld == null ? 0 : salaryOld.amountSpecial;
|
||||
salaryProfileNew.amountUse = salaryOld == null ? 0 : salaryOld.amountUse;
|
||||
salaryProfileNew.positionSalaryAmount =
|
||||
salaryOld == null ? 0 : salaryOld.positionSalaryAmount;
|
||||
}
|
||||
await this.salaryProfileRepository.save(salaryProfileNew);
|
||||
}
|
||||
}),
|
||||
);
|
||||
|
||||
const salaryOrgNew = await this.salaryOrgRepository.find({
|
||||
where: { salaryPeriodId: salaryPeriod.id, snapshot: snapshot },
|
||||
relations: ["salaryProfiles"],
|
||||
});
|
||||
await Promise.all(
|
||||
salaryOrgNew.map(async (_salaryOrg: SalaryOrg) => {
|
||||
_salaryOrg.total = _salaryOrg.salaryProfiles.length;
|
||||
_salaryOrg.fifteenPercent = Math.floor((_salaryOrg.salaryProfiles.length * 15) / 100);
|
||||
_salaryOrg.fifteenPoint = (_salaryOrg.salaryProfiles.length * 15) % 100;
|
||||
await this.salaryOrgRepository.save(_salaryOrg);
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue