77 lines
2.5 KiB
TypeScript
77 lines
2.5 KiB
TypeScript
|
|
import {
|
||
|
|
Controller,
|
||
|
|
Get,
|
||
|
|
Post,
|
||
|
|
Put,
|
||
|
|
Delete,
|
||
|
|
Patch,
|
||
|
|
Route,
|
||
|
|
Security,
|
||
|
|
Tags,
|
||
|
|
Body,
|
||
|
|
Path,
|
||
|
|
Request,
|
||
|
|
Example,
|
||
|
|
Query,
|
||
|
|
} from "tsoa";
|
||
|
|
import { AppDataSource } from "../database/data-source";
|
||
|
|
import { DeepPartial, In, IsNull, Not, Between } from "typeorm";
|
||
|
|
import HttpSuccess from "../interfaces/http-success";
|
||
|
|
import HttpError from "../interfaces/http-error";
|
||
|
|
import HttpStatusCode from "../interfaces/http-status";
|
||
|
|
import { query } from "express";
|
||
|
|
import { randomUUID } from "crypto";
|
||
|
|
import { CreateSalaryPeriod, SalaryPeriod } from "../entities/SalaryPeriod";
|
||
|
|
import Extension from "../interfaces/extension";
|
||
|
|
|
||
|
|
@Route("api/v1/salary")
|
||
|
|
@Tags("Salary")
|
||
|
|
@Security("bearerAuth")
|
||
|
|
export class SalaryPeriodController extends Controller {
|
||
|
|
private salaryPeriodRepository = AppDataSource.getRepository(SalaryPeriod);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* API สร้างรอบเงินเดือน
|
||
|
|
*
|
||
|
|
* @summary SLR_016 - สร้างรอบเงินเดือน #16
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
@Post("period")
|
||
|
|
async create_salary_period(
|
||
|
|
@Body() requestBody: CreateSalaryPeriod,
|
||
|
|
@Request() request: { user: Record<string, any> },
|
||
|
|
) {
|
||
|
|
const salaryPeriod = Object.assign(new SalaryPeriod(), requestBody);
|
||
|
|
if (!salaryPeriod) {
|
||
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูล");
|
||
|
|
}
|
||
|
|
|
||
|
|
const chk_toUpper = ["SPECIAL", "APR", "OCT"];
|
||
|
|
if (!chk_toUpper.includes(salaryPeriod.period.toUpperCase())) {
|
||
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ประเภทผัง ไม่ถูกต้อง");
|
||
|
|
}
|
||
|
|
|
||
|
|
const startOfYear = new Date(salaryPeriod.effectiveDate.getFullYear(), 0, 1);
|
||
|
|
const endOfYear = new Date(salaryPeriod.effectiveDate.getFullYear(), 11, 31);
|
||
|
|
const chk_period = await this.salaryPeriodRepository.findOne({
|
||
|
|
where: {
|
||
|
|
period: salaryPeriod.period,
|
||
|
|
effectiveDate: Between(startOfYear, endOfYear)
|
||
|
|
},
|
||
|
|
});
|
||
|
|
|
||
|
|
if (chk_period) {
|
||
|
|
throw new HttpError(HttpStatusCode.NOT_FOUND, "ประเภทผังปี "+ salaryPeriod.effectiveDate.getFullYear() +" ซ้ำ");
|
||
|
|
}
|
||
|
|
|
||
|
|
salaryPeriod.period = salaryPeriod.period.toUpperCase();
|
||
|
|
salaryPeriod.createdUserId = request.user.sub;
|
||
|
|
salaryPeriod.createdFullName = request.user.name;
|
||
|
|
salaryPeriod.lastUpdateUserId = request.user.sub;
|
||
|
|
salaryPeriod.lastUpdateFullName = request.user.name;
|
||
|
|
await this.salaryPeriodRepository.save(salaryPeriod);
|
||
|
|
return new HttpSuccess(salaryPeriod.id);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|