diff --git a/.github/workflows/release_Retirement.yaml b/.github/workflows/release_Retirement.yaml index 173243f4..02bfe31e 100644 --- a/.github/workflows/release_Retirement.yaml +++ b/.github/workflows/release_Retirement.yaml @@ -13,8 +13,8 @@ env: IMAGE_NAME: ehr/bma-ehr-retirement-service DEPLOY_HOST: frappet.com DEPLOY_PORT: 10102 - COMPOSE_PATH: /home/frappet/docker/bma-ehr - # COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-retirement + # COMPOSE_PATH: /home/frappet/docker/bma-ehr + COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-retirement TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: diff --git a/.github/workflows/release_command.yaml b/.github/workflows/release_command.yaml index d2870f61..82287b09 100644 --- a/.github/workflows/release_command.yaml +++ b/.github/workflows/release_command.yaml @@ -13,8 +13,8 @@ env: IMAGE_NAME: ehr/bma-ehr-command-service DEPLOY_HOST: frappet.com DEPLOY_PORT: 10102 - COMPOSE_PATH: /home/frappet/docker/bma-ehr - # COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-command + # COMPOSE_PATH: /home/frappet/docker/bma-ehr + COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-command TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: diff --git a/.github/workflows/release_discipline.yaml b/.github/workflows/release_discipline.yaml index 5f6f12d2..59f6f5e9 100644 --- a/.github/workflows/release_discipline.yaml +++ b/.github/workflows/release_discipline.yaml @@ -13,8 +13,8 @@ env: IMAGE_NAME: ehr/bma-ehr-discipline-service DEPLOY_HOST: frappet.com DEPLOY_PORT: 10102 - COMPOSE_PATH: /home/frappet/docker/bma-ehr - # COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-discipline + # COMPOSE_PATH: /home/frappet/docker/bma-ehr + COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-discipline TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: diff --git a/.github/workflows/release_insignia.yaml b/.github/workflows/release_insignia.yaml index d6408d19..7ffed528 100644 --- a/.github/workflows/release_insignia.yaml +++ b/.github/workflows/release_insignia.yaml @@ -13,8 +13,8 @@ env: IMAGE_NAME: ehr/bma-ehr-insignia-service DEPLOY_HOST: frappet.com DEPLOY_PORT: 10102 - COMPOSE_PATH: /home/frappet/docker/bma-ehr - # COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-insignia + # COMPOSE_PATH: /home/frappet/docker/bma-ehr + COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-insignia TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: diff --git a/.github/workflows/release_leave.yaml b/.github/workflows/release_leave.yaml index 4931956a..c24b66e8 100644 --- a/.github/workflows/release_leave.yaml +++ b/.github/workflows/release_leave.yaml @@ -13,8 +13,8 @@ env: IMAGE_NAME: ehr/bma-ehr-leave-service DEPLOY_HOST: frappet.com DEPLOY_PORT: 10102 - COMPOSE_PATH: /home/frappet/docker/bma-ehr - # COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-leave + # COMPOSE_PATH: /home/frappet/docker/bma-ehr + COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-leave TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: diff --git a/.github/workflows/release_orgEmployee.yaml b/.github/workflows/release_orgEmployee.yaml index 1dfce9bc..c5874c85 100644 --- a/.github/workflows/release_orgEmployee.yaml +++ b/.github/workflows/release_orgEmployee.yaml @@ -13,8 +13,8 @@ env: IMAGE_NAME: ehr/bma-ehr-org-employee-service DEPLOY_HOST: frappet.com DEPLOY_PORT: 10102 - COMPOSE_PATH: /home/frappet/docker/bma-ehr - # COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-org-employee + # COMPOSE_PATH: /home/frappet/docker/bma-ehr + COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-org-employee TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: diff --git a/.github/workflows/release_placement.yaml b/.github/workflows/release_placement.yaml index 1139dda0..53c65a53 100644 --- a/.github/workflows/release_placement.yaml +++ b/.github/workflows/release_placement.yaml @@ -13,8 +13,8 @@ env: IMAGE_NAME: ehr/bma-ehr-placement-service DEPLOY_HOST: frappet.com DEPLOY_PORT: 10102 - COMPOSE_PATH: /home/frappet/docker/bma-ehr - # COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-placement + # COMPOSE_PATH: /home/frappet/docker/bma-ehr + COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-placement TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: diff --git a/.github/workflows/release_report.yaml b/.github/workflows/release_report.yaml index a87e741e..adec1217 100644 --- a/.github/workflows/release_report.yaml +++ b/.github/workflows/release_report.yaml @@ -13,8 +13,8 @@ env: IMAGE_NAME: ehr/bma-ehr-report-v2-service DEPLOY_HOST: frappet.com DEPLOY_PORT: 10102 - COMPOSE_PATH: /home/frappet/docker/bma-ehr - # COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-report-v2 + # COMPOSE_PATH: /home/frappet/docker/bma-ehr + COMPOSE_PATH: /home/frappet/docker/bma/bma-ehr-report-v2 TOKEN_LINE: uxuK5hDzS2DsoC5piJBrWRLiz8GgY7iMZZldOWsDDF0 jobs: diff --git a/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs b/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs index 9fbd6824..e82f3dc6 100644 --- a/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs +++ b/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs @@ -101,6 +101,9 @@ namespace BMA.EHR.Application.Repositories.Commands case "C-PM-04": result = await GetReceiver04Async(command); break; + case "C-PM-39": + result = await GetReceiver39Async(command); + break; case "C-PM-05": result = await GetReceiver05Async(command); break; @@ -446,6 +449,65 @@ namespace BMA.EHR.Application.Repositories.Commands } } + /// + /// C-PM-39 - คำสั่งเลื่อน : สำหรับข้าราชการ กทม. เดิม + /// + /// object ของรายการคำสั่ง + /// + private async Task> GetReceiver39Async(Command command) + { + try + { + var result = new List(); + // TODO : ต้องมา list คนตามประเภทอีกครั้งนึง + + // 1. หารายชื่อที่ถูกเลือกไปแล้ว ในประเภทเดียวกัน + var otherCommandReceivers = await _dbContext.Set() + .Include(x => x.Command) + .ThenInclude(x => x.CommandType) + .Where(x => x.Command.CommandType.CommandCode.Trim().ToUpper() == "C-PM-39") + .Where(x => x.Command.Id != command.Id) + .Select(x => x.CitizenId) + .ToListAsync(); + + // 2. Query + var appointPeople = await _dbContext.Set() + .Include(x => x.Placement) + .ThenInclude(x => x.PlacementType) + .Where(x => x.Placement.Id == command.Placement.Id) + .Where(x => !otherCommandReceivers.Contains(x.CitizenId!)) + .Where(x => x.PlacementStatus.Trim().ToUpper() == "PREPARE-CONTAIN") + .Where(x => x.typeCommand.Trim().ToUpper() == "SLIP") + .Where(x => x.Draft! == true) + .OrderBy(x => x.ExamNumber) + .ToListAsync(); + + // 3. Create new Record + var seq = 1; + foreach (var item in appointPeople) + { + var receiver = new CommandReceiver + { + Sequence = seq, + CitizenId = item.CitizenId == null ? "" : item.CitizenId, + Prefix = item.Prefix == null ? "" : item.Prefix, + FirstName = item.Firstname == null ? "" : item.Firstname, + LastName = item.Lastname == null ? "" : item.Lastname, + RefPlacementProfileId = item.Id, + }; + seq++; + + result.Add(receiver); + } + + return result; + } + catch + { + throw; + } + } + /// /// C-PM-05 - คำสั่งแต่งตั้ง /// @@ -2626,6 +2688,9 @@ namespace BMA.EHR.Application.Repositories.Commands case "C-PM-04": await ExecuteCommand04Async(command, token); break; + case "C-PM-39": + await ExecuteCommand39Async(command, token); + break; case "C-PM-05": await ExecuteCommand05Async(command, token); break; @@ -3347,6 +3412,161 @@ namespace BMA.EHR.Application.Repositories.Commands } } + // + /// C-PM-39 - คำสั่งเลื่อน : สำหรับข้าราชการ กทม. เดิม + /// + /// object ของรายการคำสั่ง + /// + private async Task ExecuteCommand39Async(Command command, string token = "") + { + try + { + // create command payload + var payload_attach = command.Documents + .Select(x => new PayloadAttachment + { + name = x.Category == "cover" ? "สำเนาคำสั่ง" : "สำเนาเอกสารแนบท้าย", + url = $"{_configuration["API"]}/order/download/attachment/{x.Document.Id}" + }) + .ToList(); + + var payload = new CommandPayload() + { + attachments = payload_attach + }; + + var payload_str = JsonConvert.SerializeObject(payload); + + foreach (var recv in command.Receivers) + { + var placementProfile = await _dbContext.Set() + .FirstOrDefaultAsync(x => x.Id == recv.RefPlacementProfileId); + + var baseAPI = _configuration["API"]; + var apiUrlSalary = $"{baseAPI}/org/profile/salary"; + using (var client = new HttpClient()) + { + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); + var _req = new HttpRequestMessage(HttpMethod.Post, apiUrlSalary); + var _res = await client.PostAsJsonAsync(apiUrlSalary, new + { + profileId = placementProfile.profileId, + date = command.CommandAffectDate, + amount = recv.Amount, + positionSalaryAmount = recv.PositionSalaryAmount, + mouthSalaryAmount = recv.MouthSalaryAmount, + posNo = placementProfile.posMasterNo == null ? "" : + placementProfile.node == 4 ? $"{placementProfile.child4ShortName}{placementProfile.posMasterNo}" : + placementProfile.node == 3 ? $"{placementProfile.child3ShortName}{placementProfile.posMasterNo}" : + placementProfile.node == 2 ? $"{placementProfile.child2ShortName}{placementProfile.posMasterNo}" : + placementProfile.node == 1 ? $"{placementProfile.child1ShortName}{placementProfile.posMasterNo}" : + placementProfile.node == 0 ? $"{placementProfile.rootShortName}{placementProfile.posMasterNo}" : "", + position = placementProfile.positionName, + positionLine = "", + positionPathSide = "", + positionExecutive = "", + positionType = placementProfile.posTypeName, + positionLevel = placementProfile.posLevelName, + refCommandNo = $"{command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()}", + salaryRef = "คำสั่งเลื่อน คำสั่ง" + command.IssuerOrganizationName + "ที่ " + $"{command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate!.Value.ToThaiFullDate3()}", + }); + var _result = await _res.Content.ReadAsStringAsync(); + } + + var baseAPIOrg = _configuration["API"]; + var apiUrlOrg = $"{baseAPIOrg}/org/pos/report/current"; + using (var client = new HttpClient()) + { + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); + var _req = new HttpRequestMessage(HttpMethod.Post, apiUrlOrg); + var _res = await client.PostAsJsonAsync(apiUrlOrg, new + { + posmasterId = placementProfile.posmasterId, + positionId = placementProfile.positionId, + profileId = placementProfile.profileId, + }); + var _result = await _res.Content.ReadAsStringAsync(); + } + + // update placementstatus + placementProfile.PlacementStatus = "CONTAIN"; + + await _dbContext.SaveChangesAsync(); + + // TODO: ต้องเปลี่ยนเป็น Email จริงนะ ตอนนี้ Hardcode อยู่ + // Send noti inbox and email + var subject = $"คุณได้รับคำสั่งเลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}"; + var body = $"คำสั่งเลื่อน เลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}"; + _emailSenderService.SendMail(subject, body, "dev@frappet.com"); + + + var inbox = new Inbox + { + Subject = $"คุณได้รับคำสั่งเลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}", + Body = $"คำสั่งเลื่อน เลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}", + ReceiverUserId = Guid.Parse(placementProfile.profileId), + Payload = payload_str, + }; + _dbContext.Set().Add(inbox); + + var noti = new Notification + { + Body = $"คำสั่งเลื่อน เลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}", + ReceiverUserId = Guid.Parse(placementProfile.profileId), + Type = "LINK", + Payload = payload_str, + }; + _dbContext.Set().Add(noti); + await _dbContext.SaveChangesAsync(); + } + + // send cc noti inbox + foreach (var cc in command.Deployments) + { + if (cc.IsSendInbox) + { + var inbox = new Inbox + { + Subject = $"คุณได้รับสำเนาคำสั่งเลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}", + Body = $"คำสั่งเลื่อน คำสั่งเลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}", + ReceiverUserId = Guid.Parse(cc.ReceiveUserId), + Payload = payload_str, + }; + _dbContext.Set().Add(inbox); + } + + if (cc.IsSendMail) + { + // TODO: ต้องเปลี่ยนเป็น Email จริงนะ ตอนนี้ Hardcode อยู่ + // Send noti inbox and email + var subject = $"คุณได้รับสำเนาคำสั่งเลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}"; + var body = $"คำสั่งเลื่อน คำสั่งเลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}"; + _emailSenderService.SendMail(subject, body, "dev@frappet.com"); + } + + + var noti = new Notification + { + Body = $"คำสั่งเลื่อน คำสั่งเลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}", + ReceiverUserId = Guid.Parse(cc.ReceiveUserId), + Type = "LINK", + Payload = payload_str, + }; + _dbContext.Set().Add(noti); + } + + // change command status + var cmdStatus = await _dbContext.Set().FirstOrDefaultAsync(x => x.Sequence == 5); + command.CommandStatusId = cmdStatus!.Id; + + await _dbContext.SaveChangesAsync(); + } + catch + { + throw; + } + } + // /// C-PM-05 - คำสั่งแต่งตั้ง /// @@ -8301,6 +8521,13 @@ namespace BMA.EHR.Application.Repositories.Commands .Include(x => x.CommandType) .FirstOrDefaultAsync(x => x.Id == id); break; + case "C-PM-39": + command = await _dbContext.Set() + .Include(x => x.Placement) + .Include(x => x.Receivers) + .Include(x => x.CommandType) + .FirstOrDefaultAsync(x => x.Id == id); + break; default: command = await _dbContext.Set() .Include(x => x.Receivers) @@ -8337,6 +8564,9 @@ namespace BMA.EHR.Application.Repositories.Commands case "C-PM-04": salary = await GetPlacementSalaryAsync(item.RefPlacementProfileId.Value); break; + case "C-PM-39": + salary = await GetPlacementSalaryAsync(item.RefPlacementProfileId.Value); + break; default: salary = await GetCommandReceiverSalary(item.RefPlacementProfileId.Value, item.Amount, item.MouthSalaryAmount, item.PositionSalaryAmount); break; diff --git a/BMA.EHR.Command.Service/Controllers/OrderController.cs b/BMA.EHR.Command.Service/Controllers/OrderController.cs index cc1591d4..9ace7fc6 100644 --- a/BMA.EHR.Command.Service/Controllers/OrderController.cs +++ b/BMA.EHR.Command.Service/Controllers/OrderController.cs @@ -1178,6 +1178,116 @@ namespace BMA.EHR.Command.Service.Controllers #endregion + #region " C-PM-39 " + + /// + /// PM7-22 : สร้างข้อมูลรายละเอียดการออกคำสั่ง C-PM-39 + /// + /// + /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("c-pm-39/detail")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> PostType39Async([FromBody] CreateCommandRequest req) + { + try + { + var commandType = await _commandTypeRepository.GetByIdAsync(req.orderTypeValue); + + var inserted = new Domain.Models.Commands.Core.Command + { + CommandNo = req.orderNo, + CommandYear = req.orderYear.ToString(), + CommandSubject = req.orderTitle, + PositionName = req.registerPosition, + CommandTypeId = req.orderTypeValue, + IssuerOrganizationId = req.orderBy, + IssuerOrganizationName = req.orderByOrganizationName, + AuthorizedUserFullName = req.signatoryBy, + AuthorizedPosition = req.signatoryPosition, + + CommandAffectDate = req.orderDate, + OwnerGovId = OcId, + + // c-pm-01 ถึง c-pm-04 + PlacementId = req.examRound, + ConclusionRegisterNo = req.conclusionRegisterNo ?? "", + ConclusionRegisterDate = req.conclusionRegisterDate, + ConclusionResultNo = req.conclusionResultNo, + ConclusionResultDate = req.conclusionResultDate, + + }; + + var result = await _repository.AddAsync(inserted); + + return Success(result); + } + catch + { + throw; + } + } + + /// + /// PM7-23 : แก้ไขข้อมูลรายละเอียดการออกคำสั่ง C-PM-39 + /// + /// Record Id ของคำสั่ง + /// + /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("c-pm-39/detail/{orderId}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> PutType39Async(Guid orderId, [FromBody] CreateCommandRequest req) + { + try + { + var order = await _repository.GetByIdAsync(orderId); + if (order == null) + throw new Exception(GlobalMessages.CommandNotFound); + + + // var commandType = await _commandTypeRepository.GetByIdAsync(req.orderTypeValue); + // var status = await _commandStatusRepository.GetByIdAsync(order.CommandStatusId); + + order.CommandNo = req.orderNo; + order.CommandYear = req.orderYear.ToString(); + order.CommandSubject = req.orderTitle; + order.PositionName = req.registerPosition; + // order.CommandType = commandType!; + order.IssuerOrganizationId = req.orderBy; + order.IssuerOrganizationName = req.orderByOrganizationName; + order.AuthorizedUserFullName = req.signatoryBy; + order.AuthorizedPosition = req.signatoryPosition; + // order.CommandStatus = status!; + order.CommandAffectDate = req.orderDate; + + // c-pm-01 ถึง c-pm-04 + + // var placement = await _placementRepository.GetByIdAsync(req.examRound); + // order.Placement = placement!; + order.ConclusionRegisterNo = req.conclusionRegisterNo; + order.ConclusionRegisterDate = req.conclusionRegisterDate; + order.ConclusionResultNo = req.conclusionResultNo; + order.ConclusionResultDate = req.conclusionResultDate; + + var result = await _repository.UpdateAsync(order); + + return Success(result); + } + catch + { + throw; + } + } + + #endregion + #region " C-PM-05 " /// @@ -4716,6 +4826,17 @@ namespace BMA.EHR.Command.Service.Controllers } } break; + case "c-PM-39": + { + foreach (var r in receivers) + { + var salary = await _repository.GetPlacementSalaryAsync(r.RefRecordId); + r.SalaryAmount = salary.SalaryAmount; + r.PositionSalaryAmount = salary.PositionSalaryAmount; + r.MonthSalaryAmount = salary.MonthSalaryAmount; + } + } + break; default: { foreach (var r in receivers) @@ -4788,6 +4909,17 @@ namespace BMA.EHR.Command.Service.Controllers } break; } + case "C-PM-39": + { + foreach (var r in receivers) + { + var salary = await _repository.GetPlacementSalaryAsync(r.RefRecordId); + r.SalaryAmount = salary.SalaryAmount; + r.PositionSalaryAmount = salary.PositionSalaryAmount; + r.MonthSalaryAmount = salary.MonthSalaryAmount; + } + break; + } default: { foreach (var r in receivers) @@ -5369,6 +5501,9 @@ namespace BMA.EHR.Command.Service.Controllers case "C-PM-04": data = await _repository.GetPlacementSalaryAsync(record!.RefPlacementProfileId!.Value); break; + case "C-PM-39": + data = await _repository.GetPlacementSalaryAsync(record!.RefPlacementProfileId!.Value); + break; default: data = await _repository.GetCommandReceiverSalary(personalId, record.Amount, record.MouthSalaryAmount, record.PositionSalaryAmount); break; @@ -5411,6 +5546,9 @@ namespace BMA.EHR.Command.Service.Controllers case "C-PM-04": await _repository.UpdatePlacementSalaryAsync(personalId, req); return Success(); + case "C-PM-39": + await _repository.UpdatePlacementSalaryAsync(personalId, req); + return Success(); default: await _repository.UpdateCommandReceiverSalaryAsync(personalId, req); return Success(); diff --git a/BMA.EHR.Insignia/appsettings.json b/BMA.EHR.Insignia/appsettings.json index ec87a6e4..25e790e1 100644 --- a/BMA.EHR.Insignia/appsettings.json +++ b/BMA.EHR.Insignia/appsettings.json @@ -12,14 +12,14 @@ "Uri": "http://localhost:9200" }, "AllowedHosts": "*", - "ConnectionStrings": { - //"DefaultConnection": "User Id=sys;Password=P@ssw0rd;DBA Privilege=SYSDBA;Data Source=localhost:1521/ORCLCDB", - //"DefaultConnection": "server=192.168.1.9;user=root;password=adminVM123;port=3306;database=bma_ehr_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;" - "DefaultConnection": "server=192.168.1.80;user=root;password=adminVM123;port=3306;database=bma_ehr_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", - "ExamConnection": "server=192.168.1.80;user=root;password=adminVM123;port=3306;database=bma_ehr_exam_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", - "LeaveConnection": "server=192.168.1.80;user=root;password=adminVM123;port=3306;database=bma_ehr_leave_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", - "DisciplineConnection": "server=192.168.1.80;user=root;password=adminVM123;port=3306;database=bma_ehr_discipline_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;" - }, + "ConnectionStrings": { + //"DefaultConnection": "User Id=sys;Password=P@ssw0rd;DBA Privilege=SYSDBA;Data Source=localhost:1521/ORCLCDB", + //"DefaultConnection": "server=192.168.1.9;user=root;password=adminVM123;port=3306;database=bma_ehr_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;" + "DefaultConnection": "server=192.168.1.81;user=root;password=adminVM123;port=4063;database=bma_ehr_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", + "ExamConnection": "server=192.168.1.81;user=root;password=adminVM123;port=4063;database=bma_ehr_exam_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", + "LeaveConnection": "server=192.168.1.81;user=root;password=adminVM123;port=4063;database=bma_ehr_leave_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", + "DisciplineConnection": "server=192.168.1.81;user=root;password=adminVM123;port=4063;database=bma_ehr_discipline_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;" + }, "Jwt": { "Key": "HP-FnQMUj9msHMSD3T9HtdEnphAKoCJLEl85CIqROFI", "Issuer": "https://id.frappet.synology.me/realms/bma-ehr" @@ -43,7 +43,7 @@ "Node": { "API": "https://bma-ehr.frappet.synology.me/api/v1/probation" }, - "API": "https://bma-ehr.frappet.synology.me/api/v1", + "API": "https://bma-ehr.frappet.com/api/v1", "RabbitMQ" :{ "URL": "localhost", "UserName": "frappet", diff --git a/BMA.EHR.Placement.Service/Controllers/NotifyController.cs b/BMA.EHR.Placement.Service/Controllers/NotifyController.cs index 8024c8fc..03beac67 100644 --- a/BMA.EHR.Placement.Service/Controllers/NotifyController.cs +++ b/BMA.EHR.Placement.Service/Controllers/NotifyController.cs @@ -85,27 +85,59 @@ namespace BMA.EHR.Placement.Service.Controllers // if (profile == null) // return Error(GlobalMessages.DataNotFound); - var apiUrl = $"{_configuration["API"]}/org/profile/keycloak/position"; - using (var client = new HttpClient()) + var apiUrl = $"{_configuration["API"]}/org/profile/keycloakid/position/" + req.ReceiverUserId; + using (var client = new HttpClient()) + { + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); + var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); + var _res = await client.SendAsync(_req); + var _result = await _res.Content.ReadAsStringAsync(); + var org = JsonConvert.DeserializeObject(_result); + if (org != null && org.result != null) { - client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); - var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); - var _res = await client.SendAsync(_req); - var _result = await _res.Content.ReadAsStringAsync(); - var org = JsonConvert.DeserializeObject(_result); - if (org != null && org.result != null) - { - await _repositoryNoti.PushNotificationAsync( - Guid.Parse(org.result.profileId), - req.Subject, - req.Body, - req.Payload, - req.IsSendInbox, - req.IsSendMail - ); - } - return Success(); + await _repositoryNoti.PushNotificationAsync( + Guid.Parse(org.result.id), + req.Subject, + req.Body, + req.Payload, + req.IsSendInbox, + req.IsSendMail + ); } + return Success(); + } + + return Success(); + } + + [HttpPost("profile")] + public async Task> UpdatePropertyByUserKeycloak([FromBody] NotiRequest req) + { + // var profile = await _context.Profiles.FirstOrDefaultAsync(x => x.KeycloakId == req.ReceiverUserId); + // if (profile == null) + // return Error(GlobalMessages.DataNotFound); + + // var apiUrl = $"{_configuration["API"]}/org/profile/profileid/position/" + req.ReceiverUserId; + // using (var client = new HttpClient()) + // { + // client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); + // var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); + // var _res = await client.SendAsync(_req); + // var _result = await _res.Content.ReadAsStringAsync(); + // var org = JsonConvert.DeserializeObject(_result); + if (req.ReceiverUserId != null) + { + await _repositoryNoti.PushNotificationAsync( + Guid.Parse(req.ReceiverUserId), + req.Subject, + req.Body, + req.Payload, + req.IsSendInbox, + req.IsSendMail + ); + } + return Success(); + // } return Success(); } @@ -117,28 +149,28 @@ namespace BMA.EHR.Placement.Service.Controllers if (inbox == null) return Error(GlobalMessages.DataNotFound); - - var apiUrl = $"{_configuration["API"]}/org/profile/keycloak/position/{inbox.CreatedUserId}"; - using (var client = new HttpClient()) + + var apiUrl = $"{_configuration["API"]}/org/profile/keycloak/position/{inbox.CreatedUserId}"; + using (var client = new HttpClient()) + { + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); + var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); + var _res = await client.SendAsync(_req); + var _result = await _res.Content.ReadAsStringAsync(); + var org = JsonConvert.DeserializeObject(_result); + if (org != null && org.result != null) { - client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); - var _req = new HttpRequestMessage(HttpMethod.Get, apiUrl); - var _res = await client.SendAsync(_req); - var _result = await _res.Content.ReadAsStringAsync(); - var org = JsonConvert.DeserializeObject(_result); - if (org != null && org.result != null) - { - await _repositoryNoti.PushNotificationAsync( - Guid.Parse(org.result.id), - req.Subject, - req.Body, - req.Payload, - req.IsSendInbox, - req.IsSendMail - ); - } - return Success(); + await _repositoryNoti.PushNotificationAsync( + Guid.Parse(org.result.id), + req.Subject, + req.Body, + req.Payload, + req.IsSendInbox, + req.IsSendMail + ); } + return Success(); + } // var profile = await _context.Profiles.FirstOrDefaultAsync(x => x.KeycloakId == Guid.Parse(inbox.CreatedUserId)); // if (profile == null) // return Error(GlobalMessages.DataNotFound); diff --git a/BMA.EHR.Report.Service/Controllers/CommandReportController.cs b/BMA.EHR.Report.Service/Controllers/CommandReportController.cs index 409cbde4..a701ca8d 100644 --- a/BMA.EHR.Report.Service/Controllers/CommandReportController.cs +++ b/BMA.EHR.Report.Service/Controllers/CommandReportController.cs @@ -602,6 +602,78 @@ namespace BMA.EHR.Report.Service.Controllers #endregion + #region " C-PM-39 " + + private async Task GenerateCommandReportType39_Cover(Guid commandId, string exportType) + { + try + { + var raw_data = await _repository.GetByIdAsync(commandId); + if (raw_data == null) + { + throw new Exception(GlobalMessages.CommandNotFound); + } + + var positionList = await _repository.GetReceiverPositionByCommandIdAsync(commandId); + + var command = new + { + CommandNo = raw_data.CommandNo.ToThaiNumber(), + CommandYear = raw_data.CommandYear.ToInteger().ToThaiYear().ToString().ToThaiNumber(), + IssuerOrganizationName = raw_data.IssuerOrganizationName, + ConclusionRegisterNo = raw_data.ConclusionRegisterNo == null ? "" : raw_data.ConclusionRegisterNo.ToThaiNumber(), + ConclusionRegisterDate = raw_data.ConclusionRegisterDate == null ? "" : raw_data.ConclusionRegisterDate.Value.ToThaiFullDate3().ToThaiNumber(), + ConclusionResultNo = raw_data.ConclusionResultNo == null ? "" : raw_data.ConclusionResultNo.ToThaiNumber(), + ConclusionResultDate = raw_data.ConclusionResultDate == null ? "" : raw_data.ConclusionResultDate.Value.ToThaiFullDate3().ToThaiNumber(), + PositionList = positionList, + Count = raw_data.Receivers.Count.ToString().ToThaiNumber(), + CommandAffectDate = raw_data.CommandAffectDate == null ? "" : raw_data.CommandAffectDate.Value.ToThaiFullDate3().ToThaiNumber(), + AuthorizedUserFullName = raw_data.AuthorizedUserFullName, + AuthorizedPosition = raw_data.AuthorizedPosition, + Subject = $"เรื่อง {raw_data.CommandSubject}", + }; + return command; + } + catch + { + throw; + } + } + + private async Task GenerateCommandReportType39_Attachment(Guid commandId, string exportType) + { + try + { + var raw_data = await _repository.GetByIdAsync(commandId); + if (raw_data == null) + { + throw new Exception(GlobalMessages.CommandNotFound); + } + var command = new + { + CommandNo = raw_data.CommandNo.ToThaiNumber(), + CommandYear = raw_data.CommandYear.ToInteger().ToThaiYear().ToString().ToThaiNumber(), + IssuerOrganizationName = raw_data.IssuerOrganizationName, + CommandExcecuteDate = raw_data.CommandExcecuteDate != null ? raw_data.CommandExcecuteDate.Value.ToThaiFullDate3().ToThaiNumber() : "-", + }; + var data = await _commandReportRepository.GetCommandType03AttachmentAsync(commandId); + return new + { + CommandNo = command.CommandNo, + CommandYear = command.CommandYear, + IssuerOrganizationName = command.IssuerOrganizationName, + CommandExcecuteDate = command.CommandExcecuteDate, + data = data, + }; + } + catch + { + throw; + } + } + + #endregion + #region " C-PM-05 " private async Task GenerateCommandReportType05_Cover(Guid commandId, string exportType) @@ -2370,7 +2442,7 @@ namespace BMA.EHR.Report.Service.Controllers Subject = $"เรื่อง {raw_data.CommandSubject}", employee = receiver, }; - + return command; //return new //{ @@ -3291,6 +3363,102 @@ namespace BMA.EHR.Report.Service.Controllers #endregion + #region " C-PM-39 คำสั่งเลื่อน : สำหรับข้าราชการ กทม. เดิม " + + /// + /// คำสั่ง C-PM-39 คำสั่งเลื่อน : สำหรับข้าราชการ กทม. เดิม + /// + /// Record Id ของคำสั่ง + /// pdf, docx หรือ xlsx + /// + /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("c-pm-39/cover/{exportType}/{id}")] + [AllowAnonymous] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> GetCommandType39CoverReportAsync(Guid id, string exportType = "pdf") + { + try + { + var mimeType = ""; + switch (exportType.Trim().ToLower()) + { + case "pdf": mimeType = "application/pdf"; break; + case "docx": mimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; break; + case "xlsx": mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; + } + + var cmd = await _repository.GetByIdAsync(id); + if (cmd == null) + throw new Exception(GlobalMessages.CommandNotFound); + + var contentData = await GenerateCommandReportType39_Cover(id, exportType); + //return File(contentData, mimeType, $"command-{cmd.CommandNo}-{cmd.CommandYear.ToInteger().ToThaiYear()}.{exportType.Trim().ToLower()}"); + var data = new + { + template = "C-PM-39", + reportName = "docx-report", + data = contentData + }; + return Success(data); + } + catch + { + throw; + } + } + + /// + /// เอกสารแนบท้าย C-PM-39 คำสั่งเลื่อน : สำหรับข้าราชการ กทม. เดิม + /// + /// Record Id ของคำสั่ง + /// pdf, docx หรือ xlsx + /// + /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("c-pm-39/attachment/{exportType}/{id}")] + [AllowAnonymous] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> GetCommandType39AttachmentReportAsync(Guid id, string exportType = "pdf") + { + try + { + var cmd = await _repository.GetByIdAsync(id); + if (cmd == null) + throw new Exception(GlobalMessages.CommandNotFound); + + var mimeType = ""; + switch (exportType.Trim().ToLower()) + { + case "pdf": mimeType = "application/pdf"; break; + case "docx": mimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; break; + case "xlsx": mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; + } + + var contentData = await GenerateCommandReportType39_Attachment(id, exportType); + //return File(contentData, mimeType, $"command-attachment-{cmd.CommandNo}-{cmd.CommandYear.ToInteger().ToThaiYear()}.{exportType.Trim().ToLower()}"); + var data = new + { + template = "C-PM-39-attachment", + reportName = "docx-report", + data = contentData + }; + return Success(data); + } + catch + { + throw; + } + } + + #endregion + #region " C-PM-05 คำสั่งแต่งตั้ง " ///