From 4b9c3a2bc74f2ab7f835fb30b8ef12dca6975da0 Mon Sep 17 00:00:00 2001 From: Kittapath Date: Tue, 3 Oct 2023 08:58:30 +0700 Subject: [PATCH] =?UTF-8?q?api=20=E0=B9=81=E0=B8=95=E0=B9=88=E0=B8=87?= =?UTF-8?q?=E0=B8=95=E0=B8=B1=E0=B9=89=E0=B8=87=E0=B8=A5=E0=B8=B9=E0=B8=81?= =?UTF-8?q?=E0=B8=88=E0=B9=89=E0=B8=B2=E0=B8=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Commands/CommandReportRepository.cs | 1 + .../Reports/CommandType03Response.cs | 1 + .../PlacementAppointmentController.cs | 7 + .../PlacementAppointmentEmployeeController.cs | 567 ++++++++++++++++++ .../05-06-แนบท้ายคำสั่งแต่งตั้ง-คำสั่งเลื่อน.trdp | Bin 3318 -> 3265 bytes .../Reports/07-แนบท้ายคำสั่งย้าย.trdp | Bin 3332 -> 3263 bytes ...สั่งบรรจุและแต่งตั้งข้าราชการฯกลับเข้ารับราชการ-6.trdp | Bin 2808 -> 2808 bytes 7 files changed, 576 insertions(+) create mode 100644 BMA.EHR.Placement.Service/Controllers/PlacementAppointmentEmployeeController.cs diff --git a/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs b/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs index 5d7512ee..3861aff4 100644 --- a/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Commands/CommandReportRepository.cs @@ -328,6 +328,7 @@ namespace BMA.EHR.Application.Repositories.Commands OldPositionNumber = pf.PosNo == null ? "" : pf.PosNo.Name.ToThaiNumber(), // OldSalary = pf.Salaries == null || pf.Salaries.Count == 0 ? "" : pf.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount.Value.ToNumericNoDecimalText().ToThaiNumber(), OldSalary = p.AmountOld == null ? "" : p.AmountOld.Value.ToNumericNoDecimalText().ToThaiNumber(), + OldSalaryDate = pf.Salaries == null || pf.Salaries.Count == 0 ? "" : pf.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Date.Value.ToThaiShortDate2().ToThaiNumber(), NewOc = _organizationCommonRepository.GetOrganizationNameFullPath(p.OrganizationPosition!.Organization!.Id, false, false, "/"), NewPositionName = p.PositionPath == null ? "" : p.PositionPath!.Name, NewPositionLevel = p.PositionLevel == null ? "" : p.PositionLevel.Name, diff --git a/BMA.EHR.Application/Responses/Reports/CommandType03Response.cs b/BMA.EHR.Application/Responses/Reports/CommandType03Response.cs index d6851d7b..91cd82ce 100644 --- a/BMA.EHR.Application/Responses/Reports/CommandType03Response.cs +++ b/BMA.EHR.Application/Responses/Reports/CommandType03Response.cs @@ -40,5 +40,6 @@ namespace BMA.EHR.Application.Responses.Reports public string? Reason { get; set; } = string.Empty; public string? LeaveDate { get; set; } = string.Empty; public string? MilitaryDate { get; set; } = string.Empty; + public string? OldSalaryDate { get; set; } = string.Empty; } } diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentController.cs index 4fc606c8..c122d54d 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentController.cs @@ -63,6 +63,7 @@ namespace BMA.EHR.Placement.Service.Controllers { var placementAppointments = await _context.PlacementAppointments.AsQueryable() + .Where(x => (x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "PREM") || (x.Profile.ProfileType == "OFFICER")) .OrderByDescending(x => x.CreatedAt) .Select(p => new { @@ -123,6 +124,7 @@ namespace BMA.EHR.Placement.Service.Controllers public async Task> GetDetailByUser(Guid id) { var data = await _context.PlacementAppointments.AsQueryable() + .Where(x => (x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "PREM") || (x.Profile.ProfileType == "OFFICER")) .Where(x => x.Id == id) .Select(p => new { @@ -242,6 +244,7 @@ namespace BMA.EHR.Placement.Service.Controllers .Include(x => x.Position) .Include(x => x.Gender) .Include(x => x.Prefix) + .Where(x => (x.ProfileType == "EMPLOYEE" && x.EmployeeType == "PREM") || (x.ProfileType == "OFFICER")) .FirstOrDefaultAsync(x => x.Id == req.Id); if (profile == null) return Error(GlobalMessages.DataNotFound, 404); @@ -323,6 +326,7 @@ namespace BMA.EHR.Placement.Service.Controllers public async Task> UpdatePositionPlacementAppointment([FromBody] PersonSelectPositionAppointmentRequest req, Guid id) { var uppdated = await _context.PlacementAppointments + .Where(x => (x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "PREM") || (x.Profile.ProfileType == "OFFICER")) .FirstOrDefaultAsync(x => x.Id == id); if (uppdated == null) return Error(GlobalMessages.PlacementAppointmentNotFound, 404); @@ -402,6 +406,7 @@ namespace BMA.EHR.Placement.Service.Controllers public async Task> Put([FromBody] PlacementAppointmentEditRequest req, Guid id) { var uppdated = await _context.PlacementAppointments + .Where(x => (x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "PREM") || (x.Profile.ProfileType == "OFFICER")) .FirstOrDefaultAsync(x => x.Id == id); if (uppdated == null) return Error(GlobalMessages.PlacementAppointmentNotFound, 404); @@ -484,6 +489,7 @@ namespace BMA.EHR.Placement.Service.Controllers var deleted = await _context.PlacementAppointments.AsQueryable() .Include(x => x.PlacementAppointmentDocs) .ThenInclude(x => x.Document) + .Where(x => (x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "PREM") || (x.Profile.ProfileType == "OFFICER")) .FirstOrDefaultAsync(x => x.Id == id); if (deleted == null) return NotFound(); @@ -520,6 +526,7 @@ namespace BMA.EHR.Placement.Service.Controllers foreach (var item in req.Id) { var uppdated = await _context.PlacementAppointments + .Where(x => (x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "PREM") || (x.Profile.ProfileType == "OFFICER")) .FirstOrDefaultAsync(x => x.Id == item); if (uppdated == null) continue; diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentEmployeeController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentEmployeeController.cs new file mode 100644 index 00000000..959cd00e --- /dev/null +++ b/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentEmployeeController.cs @@ -0,0 +1,567 @@ +using BMA.EHR.Application.Repositories; +using BMA.EHR.Application.Repositories.MessageQueue; +using BMA.EHR.Domain.Common; +using BMA.EHR.Domain.Models.Placement; +using BMA.EHR.Domain.Shared; +using BMA.EHR.Infrastructure.Persistence; +using BMA.EHR.Placement.Service.Requests; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Swashbuckle.AspNetCore.Annotations; +using System.Security.Claims; + +namespace BMA.EHR.Placement.Service.Controllers +{ + [Route("api/v{version:apiVersion}/placement/appointment/temp")] + [ApiVersion("1.0")] + [ApiController] + [Produces("application/json")] + [Authorize] + [SwaggerTag("ระบบแต่งตั้ง-เลื่อน")] + public class PlacementAppointmentEmployeeController : BaseController + { + private readonly PlacementRepository _repository; + private readonly NotificationRepository _repositoryNoti; + private readonly ApplicationDBContext _context; + private readonly MinIOService _documentService; + private readonly IHttpContextAccessor _httpContextAccessor; + + public PlacementAppointmentEmployeeController(PlacementRepository repository, + NotificationRepository repositoryNoti, + ApplicationDBContext context, + MinIOService documentService, + IHttpContextAccessor httpContextAccessor) + { + _repository = repository; + _repositoryNoti = repositoryNoti; + _context = context; + _documentService = documentService; + _httpContextAccessor = httpContextAccessor; + } + + #region " Properties " + + private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; + + private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; + + private bool? PlacementAdmin => _httpContextAccessor?.HttpContext?.User?.IsInRole("placement1"); + + #endregion + + /// + /// list รายการแต่งตั้ง-เลื่อน + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet()] + public async Task> GetListByAdmin() + { + + var placementAppointments = await _context.PlacementAppointments.AsQueryable() + .OrderByDescending(x => x.CreatedAt) + .Where(x => x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "TEMP") + .Select(p => new + { + p.Id, + p.CitizenId, + Prefix = p.Prefix == null ? null : p.Prefix.Name, + p.Firstname, + p.Lastname, + p.DateOfBirth, + Gender = p.Gender == null ? null : p.Gender.Name, + p.Status, + p.Amount, + p.RecruitDate, + + PositionNumber = p.PositionNumber == null ? null : p.PositionNumber.Name, + PositionPath = p.PositionPath == null ? null : p.PositionPath.Name, + PositionPathSide = p.PositionPathSide == null ? null : p.PositionPathSide.Name, + PositionType = p.PositionType == null ? null : p.PositionType.Name, + PositionLine = p.PositionLine == null ? null : p.PositionLine.Name, + PositionLevel = p.PositionLevel == null ? null : p.PositionLevel.Name, + PosNoId = p.PositionNumber == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionNumber.Id, + PositionId = p.PositionPath == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionPath.Id, + PositionPathSideId = p.PositionPathSide == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionPathSide.Id, + PositionTypeId = p.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionType.Id, + PositionLineId = p.PositionLine == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLine.Id, + PositionLevelId = p.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLevel.Id, + + OrganizationPositionId = p.OrganizationPosition == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OrganizationPosition.Id, + OrganizationName = p.OrganizationPosition == null ? null : (p.OrganizationPosition.Organization == null ? null : (p.OrganizationPosition.Organization.OrganizationOrganization == null ? null : p.OrganizationPosition.Organization.OrganizationOrganization.Name)),//// + OrganizationShortName = p.OrganizationPosition == null ? null : (p.OrganizationPosition.Organization == null ? null : (p.OrganizationPosition.Organization.OrganizationShortName == null ? null : p.OrganizationPosition.Organization.OrganizationShortName.Name)),//// + p.IsActive, + p.PositionDate, + p.Reason, + p.EducationOld, + salary = p.AmountOld, + p.PositionTypeOld, + p.PositionLevelOld, + p.PositionNumberOld, + p.OrganizationPositionOld, + p.CreatedAt, + CommandType = p.CommandType == null ? null : p.CommandType.Name, + }) + .ToListAsync(); + if (PlacementAdmin == true) + placementAppointments.Where(x => x.Status.Trim().ToUpper().Contains("PENDING")); + + return Success(placementAppointments); + } + + /// + /// get รายละเอียดแต่งตั้ง-เลื่อน + /// + /// Id แต่งตั้ง-เลื่อน + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("{id:length(36)}")] + public async Task> GetDetailByUser(Guid id) + { + var data = await _context.PlacementAppointments.AsQueryable() + .Where(x => x.Id == id) + .Where(x => x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "TEMP") + .Select(p => new + { + p.Id, + ProfileId = p.Profile.Id, + p.CitizenId, + Prefix = p.Prefix == null ? null : p.Prefix.Name, + PrefixId = p.Prefix == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Prefix.Id, + p.Firstname, + p.Lastname, + p.DateOfBirth, + Gender = p.Gender == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Gender.Id, + p.Nationality, + p.Race, + Religion = p.Religion == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Religion.Id, + BloodGroup = p.BloodGroup == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.BloodGroup.Id, + Relationship = p.Relationship == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Relationship.Id, + p.TelephoneNumber, + p.Status, + p.Amount, + p.RecruitDate, + PosNoId = p.PositionNumber == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionNumber.Id, + PositionId = p.PositionPath == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionPath.Id, + PositionPathSideId = p.PositionPathSide == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionPathSide.Id, + PositionTypeId = p.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionType.Id, + PositionLineId = p.PositionLine == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLine.Id, + PositionLevelId = p.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLevel.Id, + OrganizationPositionId = p.OrganizationPosition == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OrganizationPosition.Id, + p.CreatedAt, + p.Reason, + p.EducationOld, + salary = p.AmountOld, + p.PositionTypeOld, + p.PositionLevelOld, + p.PositionNumberOld, + p.OrganizationPositionOld, + p.PositionDate, + PlacementAppointmentDocs = p.PlacementAppointmentDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), + Avatar = p.Profile.Avatar == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Avatar.Id, + CommandType = p.CommandType == null ? null : p.CommandType.Name, + }) + .FirstOrDefaultAsync(); + if (data == null) + return Error(GlobalMessages.DataNotFound, 404); + + var placementAppointmentDocs = new List(); + foreach (var doc in data.PlacementAppointmentDocs) + { + var _doc = new + { + doc.FileName, + PathName = await _documentService.ImagesPath(doc.Id) + }; + placementAppointmentDocs.Add(_doc); + } + var _data = new + { + data.Id, + data.ProfileId, + data.CitizenId, + data.Prefix, + data.PrefixId, + data.Firstname, + data.Lastname, + data.DateOfBirth, + data.Gender, + data.Nationality, + data.Race, + data.Religion, + data.BloodGroup, + data.Relationship, + data.TelephoneNumber, + data.Status, + data.Amount, + data.RecruitDate, + data.PosNoId, + data.PositionId, + data.PositionPathSideId, + data.PositionTypeId, + data.PositionLineId, + data.PositionLevelId, + data.OrganizationPositionId, + data.CreatedAt, + data.Reason, + data.EducationOld, + data.salary, + data.PositionTypeOld, + data.PositionLevelOld, + data.PositionNumberOld, + data.OrganizationPositionOld, + data.PositionDate, + Avatar = data.Avatar == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.Avatar), + Docs = placementAppointmentDocs, + data.CommandType, + }; + + return Success(_data); + } + + /// + /// สร้างแต่งตั้ง-เลื่อน + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost()] + public async Task> Post([FromForm] PlacementAddProfileRequest req) + { + var profile = await _context.Profiles + .Include(x => x.PositionLevel) + .Include(x => x.PositionType) + .Include(x => x.PosNo) + .Include(x => x.Salaries) + .Include(x => x.Educations) + .Include(x => x.Position) + .Include(x => x.Gender) + .Include(x => x.Prefix) + .Where(x => x.ProfileType == "EMPLOYEE" && x.EmployeeType == "TEMP") + .FirstOrDefaultAsync(x => x.Id == req.Id); + if (profile == null) + return Error(GlobalMessages.DataNotFound, 404); + + var placementAppointment = new PlacementAppointment + { + Profile = profile, + CitizenId = profile.CitizenId, + Prefix = profile.Prefix, + Firstname = profile.FirstName, + Lastname = profile.LastName, + DateOfBirth = profile.BirthDate, + Gender = profile.Gender, + Nationality = profile.Nationality, + Race = profile.Race, + Religion = await _context.Religions.FindAsync(profile.ReligionId), + BloodGroup = await _context.BloodGroups.FindAsync(profile.BloodGroupId), + Relationship = await _context.Relationships.FindAsync(profile.RelationshipId), + TelephoneNumber = profile.TelephoneNumber, + EducationOld = profile.Educations.Count() == 0 ? null : $"{profile.Educations.OrderByDescending(x => x.FinishDate).FirstOrDefault().Degree}-{profile.Educations.OrderByDescending(x => x.FinishDate).FirstOrDefault().Field}", + AmountOld = profile.Salaries.Count() == 0 ? null : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PositionLevelOld = profile.PositionLevel == null ? null : profile.PositionLevel.Name, + PositionTypeOld = profile.PositionType == null ? null : profile.PositionType.Name, + PositionNumberOld = profile.PosNo == null ? null : profile.PosNo.Name, + OrganizationPositionOld = profile.Position == null ? profile.Oc : $"{profile.Position.Name}-{profile.Oc}", + PositionDate = profile.Salaries.Count() == 0 ? null : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Date, + Status = "WAITTING", + CreatedUserId = UserId ?? "System Administrator", + CreatedFullName = FullName ?? "", + CreatedAt = DateTime.Now, + LastUpdateFullName = FullName ?? "System Administrator", + LastUpdateUserId = UserId ?? "", + LastUpdatedAt = DateTime.Now, + }; + await _context.PlacementAppointments.AddAsync(placementAppointment); + await _context.SaveChangesAsync(); + if (Request.Form.Files != null && Request.Form.Files.Count != 0) + { + foreach (var file in Request.Form.Files) + { + var fileExtension = Path.GetExtension(file.FileName); + + var doc = await _documentService.UploadFileAsync(file, file.FileName); + var _doc = await _context.Documents.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == doc.Id); + if (_doc != null) + { + var placementAppointmentDoc = new PlacementAppointmentDoc + { + PlacementAppointment = placementAppointment, + Document = _doc, + CreatedUserId = UserId ?? "System Administrator", + CreatedFullName = FullName ?? "", + CreatedAt = DateTime.Now, + LastUpdateFullName = FullName ?? "System Administrator", + LastUpdateUserId = UserId ?? "", + LastUpdatedAt = DateTime.Now, + }; + await _context.PlacementAppointmentDocs.AddAsync(placementAppointmentDoc); + + } + } + } + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// เลือกหน่วยงาน + /// + /// Id แต่งตั้ง-เลื่อน + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("position/{id:length(36)}")] + public async Task> UpdatePositionPlacementAppointment([FromBody] PersonSelectPositionAppointmentRequest req, Guid id) + { + var uppdated = await _context.PlacementAppointments + .Where(x => x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "TEMP") + .FirstOrDefaultAsync(x => x.Id == id); + if (uppdated == null) + return Error(GlobalMessages.PlacementAppointmentNotFound, 404); + if (req.PosNoId != null) + { + var save_posNo = await _context.PositionNumbers.FindAsync(req.PosNoId); + if (save_posNo == null) + return Error(GlobalMessages.PositionPosNoNotFound, 404); + uppdated.PositionNumber = save_posNo; + + var save_orgPosition = await _context.OrganizationPositions.FirstOrDefaultAsync(x => x.PositionNumber == save_posNo); + if (save_orgPosition == null) + return Error(GlobalMessages.PositionPosNoNotFound, 404); + uppdated.OrganizationPosition = save_orgPosition; + } + + if (req.PositionId != null) + { + var save = await _context.PositionPaths.FindAsync(req.PositionId); + if (save == null) + return Error(GlobalMessages.PositionPathNotFound, 404); + uppdated.PositionPath = save; + } + + if (req.PositionLevelId != null) + { + var save = await _context.PositionLevels.FindAsync(req.PositionLevelId); + if (save == null) + return Error(GlobalMessages.PositionLevelNotFound, 404); + uppdated.PositionLevel = save; + } + + if (req.PositionLineId != null) + { + var save = await _context.PositionLines.FindAsync(req.PositionLineId); + if (save == null) + return Error(GlobalMessages.PositionLineNotFound, 404); + uppdated.PositionLine = save; + } + + if (req.PositionPathSideId != null) + { + var save = await _context.PositionPathSides.FindAsync(req.PositionPathSideId); + if (save == null) + return Error(GlobalMessages.PositionPathSideNotFound, 404); + uppdated.PositionPathSide = save; + } + + if (req.PositionTypeId != null) + { + var save = await _context.PositionTypes.FindAsync(req.PositionTypeId); + if (save == null) + return Error(GlobalMessages.PositionTypeNotFound, 404); + uppdated.PositionType = save; + } + + uppdated.Amount = req.Amount; + uppdated.RecruitDate = req.RecruitDate; + uppdated.Status = "PENDING"; + uppdated.LastUpdateFullName = FullName ?? "System Administrator"; + uppdated.LastUpdateUserId = UserId ?? ""; + uppdated.LastUpdatedAt = DateTime.Now; + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// แก้ไขแต่งตั้ง-เลื่อน + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("{id:length(36)}")] + public async Task> Put([FromBody] PlacementAppointmentEditRequest req, Guid id) + { + var uppdated = await _context.PlacementAppointments + .Where(x => x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "TEMP") + .FirstOrDefaultAsync(x => x.Id == id); + if (uppdated == null) + return Error(GlobalMessages.PlacementAppointmentNotFound, 404); + + + if (req.PrefixId != null) + { + var save = await _context.Prefixes.FindAsync(req.PrefixId); + if (save == null) + return Error(GlobalMessages.PrefixNotFound, 404); + uppdated.Prefix = save; + } + + // if (req.RelationshipId != null) + // { + // var save = await _context.Relationships.FindAsync(req.RelationshipId); + // if (save == null) + // return Error(GlobalMessages.RelationshipNotFound, 404); + // uppdated.Relationship = save; + // } + + // if (req.ReligionId != null) + // { + // var save = await _context.Religions.FindAsync(req.ReligionId); + // if (save == null) + // return Error(GlobalMessages.ReligionNotFound, 404); + // uppdated.Religion = save; + // } + + // if (req.BloodGroupId != null) + // { + // var save = await _context.BloodGroups.FindAsync(req.BloodGroupId); + // if (save == null) + // return Error(GlobalMessages.BloodGroupNotFound, 404); + // uppdated.BloodGroup = save; + // } + + // if (req.GenderId != null) + // { + // var save = await _context.Genders.FindAsync(req.GenderId); + // if (save == null) + // return Error(GlobalMessages.GenderNotFound, 404); + // uppdated.Gender = save; + // } + uppdated.CitizenId = req.CitizenId; + uppdated.Firstname = req.Firstname; + uppdated.Lastname = req.Lastname; + // uppdated.DateOfBirth = req.DateOfBirth; + // uppdated.Nationality = req.Nationality; + // uppdated.Race = req.Race; + // uppdated.TelephoneNumber = req.TelephoneNumber; + uppdated.EducationOld = req.EducationOld; + uppdated.Reason = req.Reason; + uppdated.OrganizationPositionOld = req.OrganizationPositionOld; + uppdated.PositionTypeOld = req.PositionTypeOld; + uppdated.PositionLevelOld = req.PositionLevelOld; + uppdated.PositionNumberOld = req.PositionNumberOld; + uppdated.AmountOld = req.AmountOld; + uppdated.PositionDate = req.PositionDate; + uppdated.LastUpdateFullName = FullName ?? "System Administrator"; + uppdated.LastUpdateUserId = UserId ?? ""; + uppdated.LastUpdatedAt = DateTime.Now; + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// ลบแต่งตั้ง-เลื่อน + /// + /// Id แต่งตั้ง-เลื่อน + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpDelete("{id:length(36)}")] + public async Task> Delete(Guid id) + { + var deleted = await _context.PlacementAppointments.AsQueryable() + .Include(x => x.PlacementAppointmentDocs) + .ThenInclude(x => x.Document) + .Where(x => x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "TEMP") + .FirstOrDefaultAsync(x => x.Id == id); + if (deleted == null) + return NotFound(); + var placementAppointmentDocs = new List(); + foreach (var doc in deleted.PlacementAppointmentDocs) + { + if (doc.Document != null) + placementAppointmentDocs.Add(doc.Document.Id); + } + _context.PlacementAppointmentDocs.RemoveRange(deleted.PlacementAppointmentDocs); + await _context.SaveChangesAsync(); + _context.PlacementAppointments.Remove(deleted); + foreach (var doc in placementAppointmentDocs) + { + if (doc != null) + await _documentService.DeleteFileAsync(doc); + } + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// สั่งรายชื่อไปออกคำสั่ง + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("report/{commandTypeId:length(36)}")] + public async Task> PostToReport([FromBody] PlacementProfileRequest req, Guid commandTypeId) + { + foreach (var item in req.Id) + { + var uppdated = await _context.PlacementAppointments + .Where(x => x.Profile.ProfileType == "EMPLOYEE" && x.Profile.EmployeeType == "TEMP") + .FirstOrDefaultAsync(x => x.Id == item); + if (uppdated == null) + continue; + + uppdated.CommandType = await _context.CommandTypes.FindAsync(commandTypeId); + uppdated.Status = "REPORT"; + uppdated.LastUpdateFullName = FullName ?? "System Administrator"; + uppdated.LastUpdateUserId = UserId ?? ""; + uppdated.LastUpdatedAt = DateTime.Now; + } + + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// หน่วยงานที่ถูกเลือกไปแล้ว + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("use")] + public async Task> GetAppointmentsUse() + { + var appointments = await _context.PlacementAppointments + .Where(x => x.PositionNumber != null) + .Select(x => x.PositionNumber.Id) + .ToListAsync(); + + return Success(appointments); + } + } +} diff --git a/BMA.EHR.Report.Service/Reports/05-06-แนบท้ายคำสั่งแต่งตั้ง-คำสั่งเลื่อน.trdp b/BMA.EHR.Report.Service/Reports/05-06-แนบท้ายคำสั่งแต่งตั้ง-คำสั่งเลื่อน.trdp index c92e56d9282a472338a690bd767e8bd6ab13b5b5..4d35c029be91caf29a9e205475112869c5e6e5e7 100644 GIT binary patch delta 2881 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 delta 2934 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 diff --git a/BMA.EHR.Report.Service/Reports/07-แนบท้ายคำสั่งย้าย.trdp b/BMA.EHR.Report.Service/Reports/07-แนบท้ายคำสั่งย้าย.trdp index 39d118bb27130645268f3f55258f51b64fca21c5..35b814fbc105dcac4a2b797e03dfa9f8500383c9 100644 GIT binary patch delta 2926 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 delta 3042 zcmV<83mx>o8H5@bP)h>@6aWAK2mr)cLRU`v3i?M2003Kikr*<6-EP}P7QSC#-+|Qv zy(=YAvVIylh3&*mkkm0Ex5c991tU#mA{41oRAVOy5O)LE8(^_O;UKWPyV%4C0>lWg zNfVTM8$Qa;91baJI3rQAg9 zTYBe9$7n8QHk=;HC|JJLUCeB{Zs+rCw%gc5ZN00y$V85DS8dqstOM0?gIO)76|$O| z&)^mnrFPv#?JoSp7gvz08)h9fT-;OT8Zug&?qa5_mb5{CN1E|6R0>p%OM-+AwB;__ zTe15o6)HqfC^)Y!Xho866a9cMbL8iS-J!p}(aj!i&-V^}@2&6s!}p%}-Ur`1^1XMy z_rmvH`riNi{v+Re1L-(r-}iPP_lR8f{~nh7Is6^eeKIK4$3G6BiD$9$kA3eq-+N8k z?eF>C?t^uI-N85S;zy`n?{<60x#hHU%eb$TK_KJuP$3dq4 zc^Q92x80py4fCo@_w@svw$FO7?EeyRC zWMNTwXc5LjLpN#iS4OjGqT$N8`l@ZYw1JIlN*(uq5{Lwh1|svpT?GQ+A`k~ZsWA9GEUK1;yNnYcOBpak3jGcqiWnt|)i@m8lw%P=pzOo+rn z1NBH$5GOaOi}Gr*QXW=CrLtHR-9V_bVYiTfyNR3#>r_82t{TW}cGX*EbKUM5L?PTn zKOvLhW`Wmj=o$+fCR@xx7Rp19V>;T^ZPRF`kUUEUCWN1yi!qT2R>t#^{2b(sKoqVR zVt6`um(Df3*Lv+cWEL61_kzT?#CM4A^0~x!T{m@S8&83@)7G(+2f5GJa_kzbJR0YJ z@zoYQKT&as{Erg(xw#{Mp*UOM*U^s*#H)CLPlh%~OpkZEyO4laE)d}Ja|XPo<`xRG zMf_^dGzkjX-E)2d+)I!v7YO9qxzp-bo4p1Yr&y2|B*-PmxgamhU6X62*?{~3XHQCO zu%G^A>&hkkZ|PF3#H~icOu8UBAUVK) zQkq=+NVp5&K7Tv?JmJoDFp#SpiFQ8PtLJW48^bzhS6h%qObK;?VxPAaGp|;Eiuu`s zeW}y24a+4Soh;Bx@+ekfUrCGo`CBiG#ThC3Pk-#$?j^tfH{Ux3$7^u5_71_H`&aOX z{s6w$FMRJHC_J$CfX6p3{ggU%lRCS;_nx>;li&Nk_dAq1h}U@v-rdjP$6MlS-G2;C z!6oSe7O@9y5-0F@&1aCb3q^l_1DEk*Xo|Ro(_6rD`+F>VCvl`WBUI)4T_*%frcT7v z`~+S?Tt~{WOkLM4WQyI&b80zPGOUQGj6v(qA&=PkAZWZg2za=>YI*X-DSMd={ZMLJl93@<1&U{%dvZZRuka6nE7_o zAXDxH^Cn137Z>q0e$SdquQ826)L8sv+iDtG``Su^JMpD0W(nM3A|!}FilprhO(uh3JPt#Poqsqn72x%hZCoffGg(WUyQCG+Ac)) z2Wmxsk9GWiSd&1Su&GH;s3hvoBI>8zl;E`hzk6e>+Pvip8$(i^k^`)!e+%H>fgk&< zzE9^#IWwIPqE5&FkTE|N#Kh0%ENCvLLE}tJJoJMxe}sk#3!Rip%)2F0a%m7S9-_~FGdeZLE}r3Qy||Bl}5GIcwQg4qj2 z$D4^x2lv6C`v_)qScQin_LDR}&iB5+|Kca3r2_6v`FYQAQLjl7vZze}6msIF0K;|U zlJC=Ym36&?oEwIP7330L^xV{~X19TV(*~cnv~aqJ|eWg1sBNnF|CVU;f z_<~@NsvRvtW?t0*rjeeC2Q1gJaiPH-h20I3U{vax2)SVuNV(mMvpF$z>w1%X1DJM9 zi|Ipcc<9+-uho%>$I^C&skz-jVTM93@QC4OL&kYoXD1q7>1%G=q)(G+ooSAL_9wbM zdOa8bI`_q(kcG<-_(t%AF~3;+NC0Fq409RL6T diff --git a/BMA.EHR.Report.Service/Reports/08-คำสั่งบรรจุและแต่งตั้งข้าราชการฯกลับเข้ารับราชการ-6.trdp b/BMA.EHR.Report.Service/Reports/08-คำสั่งบรรจุและแต่งตั้งข้าราชการฯกลับเข้ารับราชการ-6.trdp index 23e48efa20b91cbfdbad0db86b66fb9e5338b07c..32e251a3b861a1fd684cf3a6d7fcc55248633dfe 100644 GIT binary patch delta 2365 zcmV-D3BvaH75EhwP)h>@6aWAK2mocHLRY%}Ku|jg003^07c+nDYuiQ`z`qanKWHB8 z+aybV&1!cfX|tAgX^69qQN~cMn=K+so+P(POJN;@Zi9UpEu-B&^o3GbDXeKrmH$S6 z%I;1lMLM1BvtxBhdJux|?a_0m-#vGF?oMibzB90-YryqP$8MKYxm=Qf-E|Dp?zKxJ z|NBpyrO!`)_(6Yb6AT^Km%cU)zuzutRk_g}l%&qKIb5-HdwWCg0k2)!az~&ft?L8O zE``CvFxU%&pTpqqFt{HE&%)rgR{2hY#rn?mj;#;Ba7`mF1og0?gud?&KT{O1+Xn;P zlYL+T*W8x7&OmXo3Q#dcD{B=+lhqQ`Op;pXeK7FwPZ)nV1AN`II-u*r8cFAX+3Wl5 zQcbQlsz~EVHzS>ih{2^h{;ma*AdFaZY@Za`Iwy5>SHC*4rFC!}*2262W7Yc5FGP1ptOyP7nBf;AZc&kE)bvM_kVp z$Joupz_?XlSsoP`Hwj8ZwL5PcUMOOto z{))2`-wIXMD)sc8P-RuEv+e}`by>GYu(@Mf(zzV8g;P*khv_hwY%j$@eyhh*6HjvGma z-M_niAesat*(5-Olh9P*_;wKFQQwM1<3J=B|0H77Z2zM~D&w2Cr4RsE>?jl9fdyk; z=R|*5D;(uUy>b|oJG!O2yU-dq?m&kHZk9h=FW;h=ZV09Y(=pRag(Kb67Gj;Zc87oh zS*^p-9JOf_E3g(=$5=ND##)mrOSPG?zM01wad+#Jk9W?Tg8!CJrE*;A(uP}I61)rE znY`BvH{-QtV{S8k$uhWRCYmMy7l1PXuNHp~cy)Gzo&tQrJVmPstOeFgtSg0MU9VN= zo~NX+9y3pYIr8%qttogHyfb+(-h)z`gZJ2spEX8Z9nnq!T~P(l0%*2Ru=oef=KS-L zwUK2Z;Aoz!f@i@qljq`BYs!aMt?7UtXp|c>pe!L}mMyafYqJV$AGqW43%XAv-D-dF z^X<`dq9}A`Tcn5_4U!K2Lq(liV!M^PeX_5n3NoRV=e z9+^mR_5roP;dJ4H>G+{^{6K#?VHh2Y{dkBO$0TNhIJeBj3Gr`X@D@@V1}~&fC45|I zFAN@q!9QVeI}8FyISn+=GtF@Ungj&VQOY8Tt{mPhQ#%njiGGH${UZ!sD;Q(Q^H1W-eb&o7@rN}x?C=+*#~j0(wL6%Jv6)6hc@^*vdYLp-$8%D{U7nfp_uCg^p3K+rq0y? zB7^=C!+sn8xJ#RLzTFH9;~a~c$B$Jg?ro@KTaOg3(AY@ z1-b3<^Y(%;_$v&apfP^{+4_g@$&>B`e2c=O6NpZbO=fq31&#!{oe*4o0J9!DTIfkl zMX-*AA2n*43$&c{$vGZskZrt!=fTOG_-z=xfWeZqs@t8uYuelG(wc60x#LEBn-Ja= zQ|$MxFhmGj$`HGu8|bAz$Hxx0l<^bx*&kpR;2qCy^Wk@n@8N&$_5w}SQ3rgKcp9nh z#&g)|1U{Dj@4k&g`<$C{qgq{*Yvaf1u8nw!1uwTe!GG{~KyUTsc?3LxJP9|)9Bz*K zqGl zA`-sLeR4>GfHz1M&0Lk{`^PV>X?j^UU+vW{Dd4Hai3#Vl!Z$#7QQ4=sZuGdqDsgrPbVoiup`Lq*FtsO$_suxm{Vz{$p4gUIlKJ?D zlKJ{a9E(1CvF12X7y7dxWm#?3%;dE4kj|*aI;F3J<#m9MK1Je58~PBq7fjn|mzLpB zd=WO9*M)HhALFoL#*s7faL#z8J=X0@-R+sFvs!V)SCh^NDQ0&|a*dx|LDo_OpEl(a zC>>zI_H^9rXHa&BAWo1_0Ja#syQrO4bdR!`tla1Pfkk+ru1;N!=#x~Bgbx~k41@>x z#|5c)f(g4*roJMBjZ|9uj_<;jJKg%|%IcZrt>r7yx8I&dlU)fU4*m~NO9KQH00008 j0A-_-j|t)pWurn@y8b{=I|%>)Zj*irF9KzwldlR%wuqmF delta 2365 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 j0APEQj|t)pV0%JWJ^p)RI|%>)Z