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 }, ) { 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); } }