diff --git a/src/controllers/AuthRoleController.ts b/src/controllers/AuthRoleController.ts index 94c7012c..0c83d910 100644 --- a/src/controllers/AuthRoleController.ts +++ b/src/controllers/AuthRoleController.ts @@ -17,8 +17,10 @@ import HttpError from "../interfaces/http-error"; import HttpStatus from "../interfaces/http-status"; import HttpSuccess from "../interfaces/http-success"; import HttpStatusCode from "../interfaces/http-status"; -import { AuthRole, CreateAuthRole, UpdateAuthRole } from "../entities/AuthRole"; +import { AuthRole, CreateAuthRole, UpdateAuthRole, CreateAddAuthRole } from "../entities/AuthRole"; import { AuthRoleAttr } from "../entities/AuthRoleAttr"; +import { PosMaster } from "../entities/PosMaster"; +import { EmployeePosMaster } from "../entities/EmployeePosMaster"; @Route("api/v1/org/auth/authRole") @Tags("AuthRole") @@ -72,6 +74,12 @@ export class AuthRoleController extends Controller { return new HttpSuccess(data.id); } + @Post("assign") + public async AddAuthRole(@Request() req: RequestWithUser, @Body() body: CreateAddAuthRole) { + // console pasMater = await this + return new HttpSuccess(); + } + @Patch("{roleId}") public async editAuthRole( @Request() req: RequestWithUser, diff --git a/src/controllers/ChangePositionController.ts b/src/controllers/ChangePositionController.ts index 9ce7281a..9cffa825 100644 --- a/src/controllers/ChangePositionController.ts +++ b/src/controllers/ChangePositionController.ts @@ -38,7 +38,7 @@ import { OrgChild1 } from "../entities/OrgChild1"; import { OrgChild2 } from "../entities/OrgChild2"; import { OrgChild3 } from "../entities/OrgChild3"; import { OrgChild4 } from "../entities/OrgChild4"; - +import CallAPI from "../interfaces/call-api"; @Route("api/v1/org/placement/change-position") @Tags("Placement") @Security("bearerAuth") @@ -163,6 +163,7 @@ export class ChangePositionController extends Controller { ) { const [changePosition, total] = await AppDataSource.getRepository(ChangePosition) .createQueryBuilder("changePosition") + .leftJoinAndSelect("changePosition.profileChangePosition", "profileChangePosition") .where( searchKeyword ? "changePosition.name LIKE :keyword OR changePosition.date LIKE :keyword OR changePosition.status LIKE :keyword" @@ -187,7 +188,10 @@ export class ChangePositionController extends Controller { @Get("{id}") async GetChangePositionById( @Path() id: string ) { - const data = await this.changePositionRepository.findOne({ where: { id: id }}); + const data = await this.changePositionRepository.findOne({ + relations: ["profileChangePosition"], + where: { id: id }} + ); if (!data) throw new HttpError(HttpStatusCode.NOT_FOUND, "ไม่พบข้อมูลรอบย้ายสับเปลี่ยนตำแหน่ง"); return new HttpSuccess(data); } @@ -335,9 +339,10 @@ export class ChangePositionController extends Controller { profileChangePos.posMasterNoOld = body.posMasterNoOld; profileChangePos.positionTypeOld = body.positionTypeOld; profileChangePos.positionLevelOld = body.positionLevelOld; - profileChangePos.positionNumberOld = body.positionNumberOld; + profileChangePos.organizationPositionOld = body.organizationPositionOld; profileChangePos.amountOld = body.amountOld; profileChangePos.reason = body.reason? String(body.reason) : ""; + profileChangePos.dateCurrent = body.dateCurrent; await this.profileChangePositionRepository.save(profileChangePos); return new HttpSuccess(); } @@ -465,5 +470,70 @@ export class ChangePositionController extends Controller { return new HttpSuccess(); } + /** + * API ออกคำสั่งย้ายสับเปลี่ยนตำแหน่ง REPORT + * + * @summary API ออกคำสั่งย้ายสับเปลี่ยนตำแหน่ง REPORT (ADMIN) + * + */ + @Post("report") + async sendReport(@Request() request: RequestWithUser, @Body() requestBody: { id: string[] }) { + const profilechangePositions = await this.changePositionRepository.find({ + relations: ["profileChangePosition"], + where: { id: In(requestBody.id) } + }); + for (const item of profilechangePositions) { + item.status = "REPORT"; + item.lastUpdateUserId = request.user.sub; + item.lastUpdateFullName = request.user.name; + if (item.profileChangePosition) { + for (const profile of item.profileChangePosition) { + profile.status = "REPORT"; + profile.lastUpdateUserId = request.user.sub; + profile.lastUpdateFullName = request.user.name; + await this.profileChangePositionRepository.save(profile); + } + } + await this.changePositionRepository.save(item); + } + return new HttpSuccess(); + } + + /** + * API ออกคำสั่งย้ายสับเปลี่ยนตำแหน่ง DONE + * + * @summary API ออกคำสั่งย้ายสับเปลี่ยนตำแหน่ง DONE (ADMIN) + * + */ + @Post("report/resume") + async doneReport( + @Body() + body: { + result: { + id: string; + }[]; + }, + @Request() request: { user: Record }, + ) { + await Promise.all( + body.result.map(async (v) => { + const profile = await this.profileChangePositionRepository.findOne({ + where: { id: v.id } + }); + if (profile != null) { + await new CallAPI() + .PostData(request, "org/profile/salary", { + profileId: profile.id, + date: new Date(), + }) + .then(async (x) => { + profile.status = "DONE"; + await this.profileChangePositionRepository.save(profile); + }); + } + }), + ); + return new HttpSuccess(); + } } diff --git a/src/entities/AuthRole.ts b/src/entities/AuthRole.ts index 9f197cd9..cb688bd4 100644 --- a/src/entities/AuthRole.ts +++ b/src/entities/AuthRole.ts @@ -1,6 +1,8 @@ -import { Entity, Column, OneToMany } from "typeorm"; +import { Entity, Column, OneToMany, OneToOne } from "typeorm"; import { EntityBase } from "./base/Base"; import { AuthRoleAttr } from "./AuthRoleAttr"; +import { PosMaster } from "./PosMaster"; +import { EmployeePosMaster } from "../entities/EmployeePosMaster"; @Entity("authRole") export class AuthRole extends EntityBase { @@ -22,6 +24,12 @@ export class AuthRole extends EntityBase { @OneToMany(() => AuthRoleAttr, (authRoleAttr) => authRoleAttr.authRoleAttrForRole) authRoles: AuthRoleAttr[]; + + @OneToOne(() => PosMaster, (posMaster) => posMaster.authRole) + posMaster: PosMaster; + + @OneToOne(() => EmployeePosMaster, (posMasters) => posMasters.authRole) + posMasters: EmployeePosMaster; } export class CreateAuthRole { @@ -33,3 +41,11 @@ export class CreateAuthRole { } export type UpdateAuthRole = Partial; + +export class CreateAddAuthRole { + @Column() + authRoleId: string; + + @Column() + posMasterId: string; +} \ No newline at end of file diff --git a/src/entities/EmployeePosMaster.ts b/src/entities/EmployeePosMaster.ts index 6c47e067..c1c6e0a8 100644 --- a/src/entities/EmployeePosMaster.ts +++ b/src/entities/EmployeePosMaster.ts @@ -10,6 +10,7 @@ import { OrgChild3 } from "./OrgChild3"; import { OrgChild4 } from "./OrgChild4"; import { Profile } from "./Profile"; import { ProfileEmployee } from "./ProfileEmployee"; +import { AuthRole } from "./AuthRole"; enum EmployeePosMasterLine { MAIN = "MAIN", @@ -171,6 +172,16 @@ export class EmployeePosMaster extends EntityBase { }) orgRevisionId: string; //fk + @Column({ + length: 40, + comment: "คีย์นอก(FK)ของตาราง authRole", + }) + authRoleId: string; + + @OneToOne(() => AuthRole, (authRole) => authRole.posMasters) + @JoinColumn({ name: "authRoleId" }) + authRole: AuthRole; + @ManyToOne(() => OrgRevision, (orgRevision) => orgRevision.posMasters) @JoinColumn({ name: "orgRevisionId" }) orgRevision: OrgRevision; diff --git a/src/entities/PosMaster.ts b/src/entities/PosMaster.ts index 5fc8d032..f181deb2 100644 --- a/src/entities/PosMaster.ts +++ b/src/entities/PosMaster.ts @@ -9,6 +9,7 @@ import { OrgChild2 } from "./OrgChild2"; import { OrgChild3 } from "./OrgChild3"; import { OrgChild4 } from "./OrgChild4"; import { Profile } from "./Profile"; +import { AuthRole } from "./AuthRole"; enum PosMasterLine { MAIN = "MAIN", @@ -170,6 +171,16 @@ export class PosMaster extends EntityBase { }) orgRevisionId: string; //fk + @Column({ + length: 40, + comment: "คีย์นอก(FK)ของตาราง authRole", + }) + authRoleId: string; + + @OneToOne(() => AuthRole, (authRole) => authRole.posMaster) + @JoinColumn({ name: "authRoleId" }) + authRole: AuthRole; + @ManyToOne(() => OrgRevision, (orgRevision) => orgRevision.posMasters) @JoinColumn({ name: "orgRevisionId" }) orgRevision: OrgRevision; diff --git a/src/entities/ProfileChangePosition.ts b/src/entities/ProfileChangePosition.ts index f7f40f06..38ea5dfb 100644 --- a/src/entities/ProfileChangePosition.ts +++ b/src/entities/ProfileChangePosition.ts @@ -255,7 +255,7 @@ export type UpdateProfileChangePosition = { posMasterNoOld: number; positionTypeOld: string; positionLevelOld: string; - positionNumberOld: string; + organizationPositionOld: string; amountOld: number; dateCurrent : Date; reason: string | null; diff --git a/src/migration/1718263333866-update_table_posmaster_add_role.ts b/src/migration/1718263333866-update_table_posmaster_add_role.ts new file mode 100644 index 00000000..f6853014 --- /dev/null +++ b/src/migration/1718263333866-update_table_posmaster_add_role.ts @@ -0,0 +1,20 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class UpdateTablePosmasterAddRole1718263333866 implements MigrationInterface { + name = 'UpdateTablePosmasterAddRole1718263333866' + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`posMaster\` ADD \`authRoleId\` varchar(40) NOT NULL COMMENT 'คีย์นอก(FK)ของตาราง authRole'`); + await queryRunner.query(`ALTER TABLE \`posMaster\` ADD UNIQUE INDEX \`IDX_a059796d095e79ba5b20407859\` (\`authRoleId\`)`); + await queryRunner.query(`CREATE UNIQUE INDEX \`REL_a059796d095e79ba5b20407859\` ON \`posMaster\` (\`authRoleId\`)`); + await queryRunner.query(`ALTER TABLE \`posMaster\` ADD CONSTRAINT \`FK_a059796d095e79ba5b20407859f\` FOREIGN KEY (\`authRoleId\`) REFERENCES \`authRole\`(\`id\`) ON DELETE NO ACTION ON UPDATE NO ACTION`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`posMaster\` DROP FOREIGN KEY \`FK_a059796d095e79ba5b20407859f\``); + await queryRunner.query(`DROP INDEX \`REL_a059796d095e79ba5b20407859\` ON \`posMaster\``); + await queryRunner.query(`ALTER TABLE \`posMaster\` DROP INDEX \`IDX_a059796d095e79ba5b20407859\``); + await queryRunner.query(`ALTER TABLE \`posMaster\` DROP COLUMN \`authRoleId\``); + } + +}