diff --git a/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs b/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs
index 2f7d9c4e..404635e5 100644
--- a/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs
+++ b/BMA.EHR.Application/Repositories/Commands/CommandRepository.cs
@@ -17,7 +17,9 @@ using Microsoft.AspNetCore.Http;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
+using System.Drawing;
using System.Net.Http.Headers;
+using System.Security.Cryptography;
using Command = BMA.EHR.Domain.Models.Commands.Core.Command;
using Profile = BMA.EHR.Domain.Models.HR.Profile;
@@ -1458,6 +1460,27 @@ namespace BMA.EHR.Application.Repositories.Commands
case "C-PM-02":
await ExecuteCommand01_02Async(command);
break;
+ case "C-PM-03":
+ await ExecuteCommand03Async(command);
+ break;
+ case "C-PM-04":
+ await ExecuteCommand04Async(command);
+ break;
+ case "C-PM-05":
+ await ExecuteCommand05Async(command);
+ break;
+ case "C-PM-06":
+ await ExecuteCommand06Async(command);
+ break;
+ case "C-PM-07":
+ await ExecuteCommand07Async(command);
+ break;
+ case "C-PM-08":
+ await ExecuteCommand08Async(command);
+ break;
+ case "C-PM-09":
+ await ExecuteCommand09Async(command);
+ break;
case "C-PM-10":
await ExecuteCommand10Async(command);
break;
@@ -1873,6 +1896,1538 @@ namespace BMA.EHR.Application.Repositories.Commands
}
}
+ //
+ /// C-PM-03 - คำสั่งแต่งตั้ง : สำหรับข้าราชการ กทม. เดิม
+ ///
+ /// object ของรายการคำสั่ง
+ ///
+ private async Task ExecuteCommand03Async(Command command)
+ {
+ try
+ {
+ foreach (var recv in command.Receivers)
+ {
+ var placementProfile = await _dbContext.Set()
+ .Include(x => x.Prefix)
+ .Include(x => x.FatherPrefix)
+ .Include(x => x.MotherPrefix)
+ .Include(x => x.MarryPrefix)
+ .Include(x => x.Gender)
+ .Include(x => x.Relationship)
+ .Include(x => x.BloodGroup)
+ .Include(x => x.Religion)
+
+ .Include(x => x.RegistSubDistrict)
+ .Include(x => x.RegistDistrict)
+ .Include(x => x.RegistProvince)
+ .Include(x => x.CurrentSubDistrict)
+ .Include(x => x.CurrentDistrict)
+ .Include(x => x.CurrentProvince)
+
+ .Include(x => x.PositionPath)
+ .Include(x => x.PositionPathSide)
+ .Include(x => x.PositionType)
+ .Include(x => x.PositionLine)
+ .Include(x => x.PositionLevel)
+ .Include(x => x.PositionNumber)
+
+ .Include(x => x.PlacementCertificates)
+ .Include(x => x.PlacementEducations)
+ .ThenInclude(x => x.EducationLevel)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationShortName)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutive)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutiveSide)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionLine)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationOrganization)
+
+ .FirstOrDefaultAsync(x => x.Id == recv.RefPlacementProfileId);
+
+ var profile = await _dbContext.Set()
+ .Include(x => x.Salaries)
+ .FirstOrDefaultAsync(x => x.CitizenId == placementProfile.CitizenId);
+ if(profile != null)
+ {
+ profile.Position = placementProfile.PositionPath;
+ profile.PositionPathSideId = placementProfile.PositionPathSide == null ? Guid.Empty : placementProfile.PositionPathSide.Id;
+ profile.PositionType = placementProfile.PositionType;
+ profile.PositionLevel = placementProfile.PositionLevel;
+
+ profile.PositionLineId = placementProfile.PositionLine == null ? Guid.Empty : placementProfile.PositionLine.Id;
+ profile.PositionLine = placementProfile.PositionLine == null ? "" : placementProfile.PositionLine.Name;
+ profile.PosNo = placementProfile.OrganizationPosition!.PositionNumber;
+
+ // organization
+ profile.OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id;
+ profile.OrganizationShortName = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Name;
+ profile.OrganizationOrganizationId = placementProfile.OrganizationPosition!.Organization!.OrganizationOrganization!.Id;
+ profile.OcId = placementProfile.OrganizationPosition!.Organization!.Id;
+ profile.Oc = _organizationCommonRepository.GetOrganizationNameFullPath(placementProfile.OrganizationPosition!.Organization!.Id, false, false, "/");
+ }
+
+ var lastSarary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
+ var order = 1;
+ if (lastSarary.Order != null)
+ order = lastSarary.Order.Value + 1;
+
+ var oc = _dbContext.Set()
+ .FirstOrDefault(x => x.Id == placementProfile.OrganizationPosition!.Organization!.Id);
+
+ var position = placementProfile.PositionPath;
+
+ var positionNumber = placementProfile.PositionNumber;
+
+ var positionType = placementProfile.PositionType;
+
+ var positionLevel = placementProfile.PositionLevel;
+
+ var salary = new ProfileSalary
+ {
+ Order = order,
+ Date = command.CommandAffectDate,
+
+ Amount = placementProfile.Amount == null ? 0 : placementProfile.Amount,
+ PositionSalaryAmount = placementProfile.PositionSalaryAmount == null ? 0 : placementProfile.PositionSalaryAmount,
+ MouthSalaryAmount = placementProfile.MouthSalaryAmount == null ? 0 : placementProfile.MouthSalaryAmount,
+ SalaryClass = "",
+ SalaryRef = "คำสั่งแต่งตั้ง คำสั่ง" + command.IssuerOrganizationName + "ที่ " + $"{command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate!.Value.ToThaiFullDate3()}",
+
+ OcId = oc == null ? Guid.Empty : oc.Id,
+
+ PositionLevel = placementProfile.PositionLevel,
+ PositionLineId = placementProfile.PositionLine!.Id,
+ PositionTypeId = placementProfile.PositionType!.Id,
+ OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id,
+ PosNoId = positionNumber!.Id,
+
+ CommandNo = $"{command.CommandNo}/{command.CommandYear}",
+ CommandTypeName = command.CommandType.Name,
+
+ PositionEmployeeGroupId = null,
+ PositionEmployeeLevelId = null,
+ PositionEmployeePositionId = null,
+ PositionEmployeePositionSideId = null,
+ PosNoEmployee = "",
+
+
+ PositionPathSideId = placementProfile.PositionPathSide! == null ? null : placementProfile.PositionPathSide!.Id,
+ PositionExecutiveId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive!.Id,
+ PositionExecutiveSideId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide!.Id,
+
+
+ IsActive = true,
+ CreatedAt = DateTime.Now,
+ CreatedFullName = FullName ?? "System Administrator",
+ CreatedUserId = UserId ?? "",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateFullName = FullName ?? "System Administrator",
+ LastUpdateUserId = UserId ?? "",
+
+ };
+
+ if (lastSarary.PositionPathSideId != null) salary.PositionPathSideId = lastSarary.PositionPathSideId;
+ if (lastSarary.PositionExecutiveSideId != null) salary.PositionExecutiveSideId = lastSarary.PositionExecutiveSideId;
+
+ profile.Salaries.Add(salary);
+
+ // 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 = profile.Id,
+ Payload = "",
+ };
+ _dbContext.Set().Add(inbox);
+
+ var noti = new Notification
+ {
+ Body = $"คำสั่งแต่งตั้ง เลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}",
+ ReceiverUserId = profile.Id,
+ Type = "",
+ Payload = "",
+ };
+ _dbContext.Set().Add(noti);
+ await _dbContext.SaveChangesAsync();
+ }
+
+ // send cc noti inbox
+ foreach (var cc in command.Deployments)
+ {
+ var pf = await _dbContext.Set().FirstOrDefaultAsync(x => x.CitizenId == cc.CitizenId);
+ if (pf != null)
+ {
+ 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 = pf.Id,
+ Payload = "",
+ };
+ _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 = pf.Id,
+ Type = "",
+ Payload = "",
+ };
+ _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-04 - คำสั่งย้าย : สำหรับข้าราชการ กทม. เดิม
+ ///
+ /// object ของรายการคำสั่ง
+ ///
+ private async Task ExecuteCommand04Async(Command command)
+ {
+ try
+ {
+ foreach (var recv in command.Receivers)
+ {
+ var placementProfile = await _dbContext.Set()
+ .Include(x => x.Prefix)
+ .Include(x => x.FatherPrefix)
+ .Include(x => x.MotherPrefix)
+ .Include(x => x.MarryPrefix)
+ .Include(x => x.Gender)
+ .Include(x => x.Relationship)
+ .Include(x => x.BloodGroup)
+ .Include(x => x.Religion)
+
+ .Include(x => x.RegistSubDistrict)
+ .Include(x => x.RegistDistrict)
+ .Include(x => x.RegistProvince)
+ .Include(x => x.CurrentSubDistrict)
+ .Include(x => x.CurrentDistrict)
+ .Include(x => x.CurrentProvince)
+
+ .Include(x => x.PositionPath)
+ .Include(x => x.PositionPathSide)
+ .Include(x => x.PositionType)
+ .Include(x => x.PositionLine)
+ .Include(x => x.PositionLevel)
+ .Include(x => x.PositionNumber)
+
+ .Include(x => x.PlacementCertificates)
+ .Include(x => x.PlacementEducations)
+ .ThenInclude(x => x.EducationLevel)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationShortName)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutive)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutiveSide)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionLine)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationOrganization)
+
+ .FirstOrDefaultAsync(x => x.Id == recv.RefPlacementProfileId);
+
+ var profile = await _dbContext.Set()
+ .Include(x => x.Salaries)
+ .FirstOrDefaultAsync(x => x.CitizenId == placementProfile.CitizenId);
+ if (profile != null)
+ {
+ profile.Position = placementProfile.PositionPath;
+ profile.PositionPathSideId = placementProfile.PositionPathSide == null ? Guid.Empty : placementProfile.PositionPathSide.Id;
+ profile.PositionType = placementProfile.PositionType;
+ profile.PositionLevel = placementProfile.PositionLevel;
+
+ profile.PositionLineId = placementProfile.PositionLine == null ? Guid.Empty : placementProfile.PositionLine.Id;
+ profile.PositionLine = placementProfile.PositionLine == null ? "" : placementProfile.PositionLine.Name;
+ profile.PosNo = placementProfile.OrganizationPosition!.PositionNumber;
+
+ // organization
+ profile.OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id;
+ profile.OrganizationShortName = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Name;
+ profile.OrganizationOrganizationId = placementProfile.OrganizationPosition!.Organization!.OrganizationOrganization!.Id;
+ profile.OcId = placementProfile.OrganizationPosition!.Organization!.Id;
+ profile.Oc = _organizationCommonRepository.GetOrganizationNameFullPath(placementProfile.OrganizationPosition!.Organization!.Id, false, false, "/");
+ }
+
+ var lastSarary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
+ var order = 1;
+ if (lastSarary.Order != null)
+ order = lastSarary.Order.Value + 1;
+
+ var oc = _dbContext.Set()
+ .FirstOrDefault(x => x.Id == placementProfile.OrganizationPosition!.Organization!.Id);
+
+ var position = placementProfile.PositionPath;
+
+ var positionNumber = placementProfile.PositionNumber;
+
+ var positionType = placementProfile.PositionType;
+
+ var positionLevel = placementProfile.PositionLevel;
+
+ var salary = new ProfileSalary
+ {
+ Order = order,
+ Date = command.CommandAffectDate,
+
+ Amount = placementProfile.Amount == null ? 0 : placementProfile.Amount,
+ PositionSalaryAmount = placementProfile.PositionSalaryAmount == null ? 0 : placementProfile.PositionSalaryAmount,
+ MouthSalaryAmount = placementProfile.MouthSalaryAmount == null ? 0 : placementProfile.MouthSalaryAmount,
+ SalaryClass = "",
+ SalaryRef = "คำสั่งย้าย คำสั่ง" + command.IssuerOrganizationName + "ที่ " + $"{command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate!.Value.ToThaiFullDate3()}",
+
+ OcId = oc == null ? Guid.Empty : oc.Id,
+
+ PositionLevel = placementProfile.PositionLevel,
+ PositionLineId = placementProfile.PositionLine!.Id,
+ PositionTypeId = placementProfile.PositionType!.Id,
+ OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id,
+ PosNoId = positionNumber!.Id,
+
+ CommandNo = $"{command.CommandNo}/{command.CommandYear}",
+ CommandTypeName = command.CommandType.Name,
+
+ PositionEmployeeGroupId = null,
+ PositionEmployeeLevelId = null,
+ PositionEmployeePositionId = null,
+ PositionEmployeePositionSideId = null,
+ PosNoEmployee = "",
+
+
+ PositionPathSideId = placementProfile.PositionPathSide! == null ? null : placementProfile.PositionPathSide!.Id,
+ PositionExecutiveId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive!.Id,
+ PositionExecutiveSideId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide!.Id,
+
+
+ IsActive = true,
+ CreatedAt = DateTime.Now,
+ CreatedFullName = FullName ?? "System Administrator",
+ CreatedUserId = UserId ?? "",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateFullName = FullName ?? "System Administrator",
+ LastUpdateUserId = UserId ?? "",
+
+ };
+
+ if (lastSarary.PositionPathSideId != null) salary.PositionPathSideId = lastSarary.PositionPathSideId;
+ if (lastSarary.PositionExecutiveSideId != null) salary.PositionExecutiveSideId = lastSarary.PositionExecutiveSideId;
+
+ profile.Salaries.Add(salary);
+
+ // 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 = profile.Id,
+ Payload = "",
+ };
+ _dbContext.Set().Add(inbox);
+
+ var noti = new Notification
+ {
+ Body = $"คำสั่งย้าย เลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}",
+ ReceiverUserId = profile.Id,
+ Type = "",
+ Payload = "",
+ };
+ _dbContext.Set().Add(noti);
+ await _dbContext.SaveChangesAsync();
+ }
+
+ // send cc noti inbox
+ foreach (var cc in command.Deployments)
+ {
+ var pf = await _dbContext.Set().FirstOrDefaultAsync(x => x.CitizenId == cc.CitizenId);
+ if (pf != null)
+ {
+ 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 = pf.Id,
+ Payload = "",
+ };
+ _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 = pf.Id,
+ Type = "",
+ Payload = "",
+ };
+ _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 - คำสั่งแต่งตั้ง
+ ///
+ /// object ของรายการคำสั่ง
+ ///
+ private async Task ExecuteCommand05Async(Command command)
+ {
+ try
+ {
+ foreach (var recv in command.Receivers)
+ {
+ var placementProfile = await _dbContext.Set()
+ .Include(x => x.Profile)
+ .ThenInclude(x => x.Salaries)
+
+ .Include(x => x.PositionPath)
+ .Include(x => x.PositionPathSide)
+ .Include(x => x.PositionType)
+ .Include(x => x.PositionLine)
+ .Include(x => x.PositionLevel)
+ .Include(x => x.PositionNumber)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationShortName)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutive)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutiveSide)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionLine)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationOrganization)
+
+ .FirstOrDefaultAsync(x => x.Id == recv.RefPlacementProfileId);
+
+ var profile = placementProfile.Profile;
+ if (profile != null)
+ {
+ profile.Position = placementProfile.PositionPath;
+ profile.PositionPathSideId = placementProfile.PositionPathSide == null ? Guid.Empty : placementProfile.PositionPathSide.Id;
+ profile.PositionType = placementProfile.PositionType;
+ profile.PositionLevel = placementProfile.PositionLevel;
+
+ profile.PositionLineId = placementProfile.PositionLine == null ? Guid.Empty : placementProfile.PositionLine.Id;
+ profile.PositionLine = placementProfile.PositionLine == null ? "" : placementProfile.PositionLine.Name;
+ profile.PosNo = placementProfile.OrganizationPosition!.PositionNumber;
+
+ // organization
+ profile.OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id;
+ profile.OrganizationShortName = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Name;
+ profile.OrganizationOrganizationId = placementProfile.OrganizationPosition!.Organization!.OrganizationOrganization!.Id;
+ profile.OcId = placementProfile.OrganizationPosition!.Organization!.Id;
+ profile.Oc = _organizationCommonRepository.GetOrganizationNameFullPath(placementProfile.OrganizationPosition!.Organization!.Id, false, false, "/");
+ }
+
+ var lastSarary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
+ var order = 1;
+ if (lastSarary.Order != null)
+ order = lastSarary.Order.Value + 1;
+
+ var oc = _dbContext.Set()
+ .FirstOrDefault(x => x.Id == placementProfile.OrganizationPosition!.Organization!.Id);
+
+ var position = placementProfile.PositionPath;
+
+ var positionNumber = placementProfile.PositionNumber;
+
+ var positionType = placementProfile.PositionType;
+
+ var positionLevel = placementProfile.PositionLevel;
+
+ var salary = new ProfileSalary
+ {
+ Order = order,
+ Date = command.CommandAffectDate,
+
+ Amount = recv.Amount == null ? 0 : recv.Amount,
+ PositionSalaryAmount = recv.PositionSalaryAmount == null ? 0 : recv.PositionSalaryAmount,
+ MouthSalaryAmount = recv.MouthSalaryAmount == null ? 0 : recv.MouthSalaryAmount,
+ SalaryClass = "",
+ SalaryRef = "คำสั่งแต่งตั้ง คำสั่ง" + command.IssuerOrganizationName + "ที่ " + $"{command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate!.Value.ToThaiFullDate3()}",
+
+ OcId = oc == null ? Guid.Empty : oc.Id,
+
+ PositionLevel = placementProfile.PositionLevel,
+ PositionLineId = placementProfile.PositionLine!.Id,
+ PositionTypeId = placementProfile.PositionType!.Id,
+ OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id,
+ PosNoId = positionNumber!.Id,
+
+ CommandNo = $"{command.CommandNo}/{command.CommandYear}",
+ CommandTypeName = command.CommandType.Name,
+
+ PositionEmployeeGroupId = null,
+ PositionEmployeeLevelId = null,
+ PositionEmployeePositionId = null,
+ PositionEmployeePositionSideId = null,
+ PosNoEmployee = "",
+
+
+ PositionPathSideId = placementProfile.PositionPathSide! == null ? null : placementProfile.PositionPathSide!.Id,
+ PositionExecutiveId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive!.Id,
+ PositionExecutiveSideId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide!.Id,
+
+
+ IsActive = true,
+ CreatedAt = DateTime.Now,
+ CreatedFullName = FullName ?? "System Administrator",
+ CreatedUserId = UserId ?? "",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateFullName = FullName ?? "System Administrator",
+ LastUpdateUserId = UserId ?? "",
+
+ };
+
+ if (lastSarary.PositionPathSideId != null) salary.PositionPathSideId = lastSarary.PositionPathSideId;
+ if (lastSarary.PositionExecutiveSideId != null) salary.PositionExecutiveSideId = lastSarary.PositionExecutiveSideId;
+
+ profile.Salaries.Add(salary);
+
+ // update placementstatus
+ placementProfile.Status = "DONE";
+
+ 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 = profile.Id,
+ Payload = "",
+ };
+ _dbContext.Set().Add(inbox);
+
+ var noti = new Notification
+ {
+ Body = $"คำสั่งแต่งตั้ง เลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}",
+ ReceiverUserId = profile.Id,
+ Type = "",
+ Payload = "",
+ };
+ _dbContext.Set().Add(noti);
+ await _dbContext.SaveChangesAsync();
+ }
+
+ // send cc noti inbox
+ foreach (var cc in command.Deployments)
+ {
+ var pf = await _dbContext.Set().FirstOrDefaultAsync(x => x.CitizenId == cc.CitizenId);
+ if (pf != null)
+ {
+ 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 = pf.Id,
+ Payload = "",
+ };
+ _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 = pf.Id,
+ Type = "",
+ Payload = "",
+ };
+ _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-06 - คำสั่งเลื่อน
+ ///
+ /// object ของรายการคำสั่ง
+ ///
+ private async Task ExecuteCommand06Async(Command command)
+ {
+ try
+ {
+ foreach (var recv in command.Receivers)
+ {
+ var placementProfile = await _dbContext.Set()
+ .Include(x => x.Profile)
+ .ThenInclude(x => x.Salaries)
+
+ .Include(x => x.PositionPath)
+ .Include(x => x.PositionPathSide)
+ .Include(x => x.PositionType)
+ .Include(x => x.PositionLine)
+ .Include(x => x.PositionLevel)
+ .Include(x => x.PositionNumber)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationShortName)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutive)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutiveSide)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionLine)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationOrganization)
+
+ .FirstOrDefaultAsync(x => x.Id == recv.RefPlacementProfileId);
+
+ var profile = placementProfile.Profile;
+ if (profile != null)
+ {
+ profile.Position = placementProfile.PositionPath;
+ profile.PositionPathSideId = placementProfile.PositionPathSide == null ? Guid.Empty : placementProfile.PositionPathSide.Id;
+ profile.PositionType = placementProfile.PositionType;
+ profile.PositionLevel = placementProfile.PositionLevel;
+
+ profile.PositionLineId = placementProfile.PositionLine == null ? Guid.Empty : placementProfile.PositionLine.Id;
+ profile.PositionLine = placementProfile.PositionLine == null ? "" : placementProfile.PositionLine.Name;
+ profile.PosNo = placementProfile.OrganizationPosition!.PositionNumber;
+
+ // organization
+ profile.OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id;
+ profile.OrganizationShortName = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Name;
+ profile.OrganizationOrganizationId = placementProfile.OrganizationPosition!.Organization!.OrganizationOrganization!.Id;
+ profile.OcId = placementProfile.OrganizationPosition!.Organization!.Id;
+ profile.Oc = _organizationCommonRepository.GetOrganizationNameFullPath(placementProfile.OrganizationPosition!.Organization!.Id, false, false, "/");
+ }
+
+ var lastSarary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
+ var order = 1;
+ if (lastSarary.Order != null)
+ order = lastSarary.Order.Value + 1;
+
+ var oc = _dbContext.Set()
+ .FirstOrDefault(x => x.Id == placementProfile.OrganizationPosition!.Organization!.Id);
+
+ var position = placementProfile.PositionPath;
+
+ var positionNumber = placementProfile.PositionNumber;
+
+ var positionType = placementProfile.PositionType;
+
+ var positionLevel = placementProfile.PositionLevel;
+
+ var salary = new ProfileSalary
+ {
+ Order = order,
+ Date = command.CommandAffectDate,
+
+ Amount = recv.Amount == null ? 0 : recv.Amount,
+ PositionSalaryAmount = recv.PositionSalaryAmount == null ? 0 : recv.PositionSalaryAmount,
+ MouthSalaryAmount = recv.MouthSalaryAmount == null ? 0 : recv.MouthSalaryAmount,
+ SalaryClass = "",
+ SalaryRef = "คำสั่งเลื่อน คำสั่ง" + command.IssuerOrganizationName + "ที่ " + $"{command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate!.Value.ToThaiFullDate3()}",
+
+ OcId = oc == null ? Guid.Empty : oc.Id,
+
+ PositionLevel = placementProfile.PositionLevel,
+ PositionLineId = placementProfile.PositionLine!.Id,
+ PositionTypeId = placementProfile.PositionType!.Id,
+ OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id,
+ PosNoId = positionNumber!.Id,
+
+ CommandNo = $"{command.CommandNo}/{command.CommandYear}",
+ CommandTypeName = command.CommandType.Name,
+
+ PositionEmployeeGroupId = null,
+ PositionEmployeeLevelId = null,
+ PositionEmployeePositionId = null,
+ PositionEmployeePositionSideId = null,
+ PosNoEmployee = "",
+
+
+ PositionPathSideId = placementProfile.PositionPathSide! == null ? null : placementProfile.PositionPathSide!.Id,
+ PositionExecutiveId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive!.Id,
+ PositionExecutiveSideId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide!.Id,
+
+
+ IsActive = true,
+ CreatedAt = DateTime.Now,
+ CreatedFullName = FullName ?? "System Administrator",
+ CreatedUserId = UserId ?? "",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateFullName = FullName ?? "System Administrator",
+ LastUpdateUserId = UserId ?? "",
+
+ };
+
+ if (lastSarary.PositionPathSideId != null) salary.PositionPathSideId = lastSarary.PositionPathSideId;
+ if (lastSarary.PositionExecutiveSideId != null) salary.PositionExecutiveSideId = lastSarary.PositionExecutiveSideId;
+
+ profile.Salaries.Add(salary);
+
+ // update placementstatus
+ placementProfile.Status = "DONE";
+
+ 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 = profile.Id,
+ Payload = "",
+ };
+ _dbContext.Set().Add(inbox);
+
+ var noti = new Notification
+ {
+ Body = $"คำสั่งเลื่อน เลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}",
+ ReceiverUserId = profile.Id,
+ Type = "",
+ Payload = "",
+ };
+ _dbContext.Set().Add(noti);
+ await _dbContext.SaveChangesAsync();
+ }
+
+ // send cc noti inbox
+ foreach (var cc in command.Deployments)
+ {
+ var pf = await _dbContext.Set().FirstOrDefaultAsync(x => x.CitizenId == cc.CitizenId);
+ if (pf != null)
+ {
+ 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 = pf.Id,
+ Payload = "",
+ };
+ _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 = pf.Id,
+ Type = "",
+ Payload = "",
+ };
+ _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-07 - คำสั่งย้าย
+ ///
+ /// object ของรายการคำสั่ง
+ ///
+ private async Task ExecuteCommand07Async(Command command)
+ {
+ try
+ {
+ foreach (var recv in command.Receivers)
+ {
+ var placementProfile = await _dbContext.Set()
+ .Include(x => x.Profile)
+ .ThenInclude(x => x.Salaries)
+
+ .Include(x => x.PositionPath)
+ .Include(x => x.PositionPathSide)
+ .Include(x => x.PositionType)
+ .Include(x => x.PositionLine)
+ .Include(x => x.PositionLevel)
+ .Include(x => x.PositionNumber)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationShortName)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutive)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutiveSide)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionLine)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationOrganization)
+
+ .FirstOrDefaultAsync(x => x.Id == recv.RefPlacementProfileId);
+
+ var profile = placementProfile.Profile;
+ if (profile != null)
+ {
+ profile.Position = placementProfile.PositionPath;
+ profile.PositionPathSideId = placementProfile.PositionPathSide == null ? Guid.Empty : placementProfile.PositionPathSide.Id;
+ profile.PositionType = placementProfile.PositionType;
+ profile.PositionLevel = placementProfile.PositionLevel;
+
+ profile.PositionLineId = placementProfile.PositionLine == null ? Guid.Empty : placementProfile.PositionLine.Id;
+ profile.PositionLine = placementProfile.PositionLine == null ? "" : placementProfile.PositionLine.Name;
+ profile.PosNo = placementProfile.OrganizationPosition!.PositionNumber;
+
+ // organization
+ profile.OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id;
+ profile.OrganizationShortName = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Name;
+ profile.OrganizationOrganizationId = placementProfile.OrganizationPosition!.Organization!.OrganizationOrganization!.Id;
+ profile.OcId = placementProfile.OrganizationPosition!.Organization!.Id;
+ profile.Oc = _organizationCommonRepository.GetOrganizationNameFullPath(placementProfile.OrganizationPosition!.Organization!.Id, false, false, "/");
+ }
+
+ var lastSarary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
+ var order = 1;
+ if (lastSarary.Order != null)
+ order = lastSarary.Order.Value + 1;
+
+ var oc = _dbContext.Set()
+ .FirstOrDefault(x => x.Id == placementProfile.OrganizationPosition!.Organization!.Id);
+
+ var position = placementProfile.PositionPath;
+
+ var positionNumber = placementProfile.PositionNumber;
+
+ var positionType = placementProfile.PositionType;
+
+ var positionLevel = placementProfile.PositionLevel;
+
+ var salary = new ProfileSalary
+ {
+ Order = order,
+ Date = command.CommandAffectDate,
+
+ Amount = recv.Amount == null ? 0 : recv.Amount,
+ PositionSalaryAmount = recv.PositionSalaryAmount == null ? 0 : recv.PositionSalaryAmount,
+ MouthSalaryAmount = recv.MouthSalaryAmount == null ? 0 : recv.MouthSalaryAmount,
+ SalaryClass = "",
+ SalaryRef = "คำสั่งย้าย คำสั่ง" + command.IssuerOrganizationName + "ที่ " + $"{command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate!.Value.ToThaiFullDate3()}",
+
+ OcId = oc == null ? Guid.Empty : oc.Id,
+
+ PositionLevel = placementProfile.PositionLevel,
+ PositionLineId = placementProfile.PositionLine!.Id,
+ PositionTypeId = placementProfile.PositionType!.Id,
+ OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id,
+ PosNoId = positionNumber!.Id,
+
+ CommandNo = $"{command.CommandNo}/{command.CommandYear}",
+ CommandTypeName = command.CommandType.Name,
+
+ PositionEmployeeGroupId = null,
+ PositionEmployeeLevelId = null,
+ PositionEmployeePositionId = null,
+ PositionEmployeePositionSideId = null,
+ PosNoEmployee = "",
+
+
+ PositionPathSideId = placementProfile.PositionPathSide! == null ? null : placementProfile.PositionPathSide!.Id,
+ PositionExecutiveId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive!.Id,
+ PositionExecutiveSideId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide!.Id,
+
+
+ IsActive = true,
+ CreatedAt = DateTime.Now,
+ CreatedFullName = FullName ?? "System Administrator",
+ CreatedUserId = UserId ?? "",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateFullName = FullName ?? "System Administrator",
+ LastUpdateUserId = UserId ?? "",
+
+ };
+
+ if (lastSarary.PositionPathSideId != null) salary.PositionPathSideId = lastSarary.PositionPathSideId;
+ if (lastSarary.PositionExecutiveSideId != null) salary.PositionExecutiveSideId = lastSarary.PositionExecutiveSideId;
+
+ profile.Salaries.Add(salary);
+
+ // update placementstatus
+ placementProfile.Status = "DONE";
+
+ 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 = profile.Id,
+ Payload = "",
+ };
+ _dbContext.Set().Add(inbox);
+
+ var noti = new Notification
+ {
+ Body = $"คำสั่งย้าย เลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}",
+ ReceiverUserId = profile.Id,
+ Type = "",
+ Payload = "",
+ };
+ _dbContext.Set().Add(noti);
+ await _dbContext.SaveChangesAsync();
+ }
+
+ // send cc noti inbox
+ foreach (var cc in command.Deployments)
+ {
+ var pf = await _dbContext.Set().FirstOrDefaultAsync(x => x.CitizenId == cc.CitizenId);
+ if (pf != null)
+ {
+ 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 = pf.Id,
+ Payload = "",
+ };
+ _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 = pf.Id,
+ Type = "",
+ Payload = "",
+ };
+ _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-08 - คำสั่งบรรจุและแต่งตั้งข้าราชการฯ กลับเข้ารับราชการ
+ ///
+ /// object ของรายการคำสั่ง
+ ///
+ private async Task ExecuteCommand08Async(Command command)
+ {
+ try
+ {
+ foreach (var recv in command.Receivers)
+ {
+ var placementProfile = await _dbContext.Set()
+ .Include(x => x.Profile)
+ .ThenInclude(x => x.Salaries)
+
+ .Include(x => x.PositionPath)
+ .Include(x => x.PositionPathSide)
+ .Include(x => x.PositionType)
+ .Include(x => x.PositionLine)
+ .Include(x => x.PositionLevel)
+ .Include(x => x.PositionNumber)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationShortName)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutive)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutiveSide)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionLine)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationOrganization)
+
+ .FirstOrDefaultAsync(x => x.Id == recv.RefPlacementProfileId);
+
+ var profile = placementProfile.Profile;
+ if (profile != null)
+ {
+ profile.IsActive = true;
+ profile.IsLeave = false;
+ profile.LeaveDate = null;
+
+
+ profile.Position = placementProfile.PositionPath;
+ profile.PositionPathSideId = placementProfile.PositionPathSide == null ? Guid.Empty : placementProfile.PositionPathSide.Id;
+ profile.PositionType = placementProfile.PositionType;
+ profile.PositionLevel = placementProfile.PositionLevel;
+
+ profile.PositionLineId = placementProfile.PositionLine == null ? Guid.Empty : placementProfile.PositionLine.Id;
+ profile.PositionLine = placementProfile.PositionLine == null ? "" : placementProfile.PositionLine.Name;
+ profile.PosNo = placementProfile.OrganizationPosition!.PositionNumber;
+
+ // organization
+ profile.OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id;
+ profile.OrganizationShortName = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Name;
+ profile.OrganizationOrganizationId = placementProfile.OrganizationPosition!.Organization!.OrganizationOrganization!.Id;
+ profile.OcId = placementProfile.OrganizationPosition!.Organization!.Id;
+ profile.Oc = _organizationCommonRepository.GetOrganizationNameFullPath(placementProfile.OrganizationPosition!.Organization!.Id, false, false, "/");
+ }
+
+ var lastSarary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
+ var order = 1;
+ if (lastSarary.Order != null)
+ order = lastSarary.Order.Value + 1;
+
+ var oc = _dbContext.Set()
+ .FirstOrDefault(x => x.Id == placementProfile.OrganizationPosition!.Organization!.Id);
+
+ var position = placementProfile.PositionPath;
+
+ var positionNumber = placementProfile.PositionNumber;
+
+ var positionType = placementProfile.PositionType;
+
+ var positionLevel = placementProfile.PositionLevel;
+
+ var salary = new ProfileSalary
+ {
+ Order = order,
+ Date = command.CommandAffectDate,
+
+ Amount = recv.Amount == null ? 0 : recv.Amount,
+ PositionSalaryAmount = recv.PositionSalaryAmount == null ? 0 : recv.PositionSalaryAmount,
+ MouthSalaryAmount = recv.MouthSalaryAmount == null ? 0 : recv.MouthSalaryAmount,
+ SalaryClass = "",
+ SalaryRef = "คำสั่งบรรจุและแต่งตั้งข้าราชการฯ กลับเข้ารับราชการ คำสั่ง" + command.IssuerOrganizationName + "ที่ " + $"{command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate!.Value.ToThaiFullDate3()}",
+
+ OcId = oc == null ? Guid.Empty : oc.Id,
+
+ PositionLevel = placementProfile.PositionLevel,
+ PositionLineId = placementProfile.PositionLine!.Id,
+ PositionTypeId = placementProfile.PositionType!.Id,
+ OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id,
+ PosNoId = positionNumber!.Id,
+
+ CommandNo = $"{command.CommandNo}/{command.CommandYear}",
+ CommandTypeName = command.CommandType.Name,
+
+ PositionEmployeeGroupId = null,
+ PositionEmployeeLevelId = null,
+ PositionEmployeePositionId = null,
+ PositionEmployeePositionSideId = null,
+ PosNoEmployee = "",
+
+
+ PositionPathSideId = placementProfile.PositionPathSide! == null ? null : placementProfile.PositionPathSide!.Id,
+ PositionExecutiveId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive!.Id,
+ PositionExecutiveSideId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide!.Id,
+
+
+ IsActive = true,
+ CreatedAt = DateTime.Now,
+ CreatedFullName = FullName ?? "System Administrator",
+ CreatedUserId = UserId ?? "",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateFullName = FullName ?? "System Administrator",
+ LastUpdateUserId = UserId ?? "",
+
+ };
+
+ if (lastSarary.PositionPathSideId != null) salary.PositionPathSideId = lastSarary.PositionPathSideId;
+ if (lastSarary.PositionExecutiveSideId != null) salary.PositionExecutiveSideId = lastSarary.PositionExecutiveSideId;
+
+ profile.Salaries.Add(salary);
+
+ // update placementstatus
+ placementProfile.Status = "DONE";
+
+ 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 = profile.Id,
+ Payload = "",
+ };
+ _dbContext.Set().Add(inbox);
+
+ var noti = new Notification
+ {
+ Body = $"คำสั่งบรรจุและแต่งตั้งข้าราชการฯ กลับเข้ารับราชการ เลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}",
+ ReceiverUserId = profile.Id,
+ Type = "",
+ Payload = "",
+ };
+ _dbContext.Set().Add(noti);
+ await _dbContext.SaveChangesAsync();
+ }
+
+ // send cc noti inbox
+ foreach (var cc in command.Deployments)
+ {
+ var pf = await _dbContext.Set().FirstOrDefaultAsync(x => x.CitizenId == cc.CitizenId);
+ if (pf != null)
+ {
+ 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 = pf.Id,
+ Payload = "",
+ };
+ _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 = pf.Id,
+ Type = "",
+ Payload = "",
+ };
+ _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-09 - คำสั่งบรรจุและแต่งตั้งผู้ออกไปรับราชการทหารกลับเข้ารับราชการ
+ ///
+ /// object ของรายการคำสั่ง
+ ///
+ private async Task ExecuteCommand09Async(Command command)
+ {
+ try
+ {
+ foreach (var recv in command.Receivers)
+ {
+ var placementProfile = await _dbContext.Set()
+ .Include(x => x.Profile)
+ .ThenInclude(x => x.Salaries)
+
+ .Include(x => x.PositionPath)
+ .Include(x => x.PositionPathSide)
+ .Include(x => x.PositionType)
+ .Include(x => x.PositionLine)
+ .Include(x => x.PositionLevel)
+ .Include(x => x.PositionNumber)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationShortName)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutive)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionExecutiveSide)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.PositionMaster)
+ .ThenInclude(x => x.PositionLine)
+
+ .Include(x => x.OrganizationPosition)
+ .ThenInclude(x => x.Organization)
+ .ThenInclude(x => x.OrganizationOrganization)
+
+ .FirstOrDefaultAsync(x => x.Id == recv.RefPlacementProfileId);
+
+ var profile = placementProfile.Profile;
+ if (profile != null)
+ {
+ profile.IsActive = true;
+ profile.IsLeave = false;
+ profile.LeaveDate = null;
+
+
+ profile.Position = placementProfile.PositionPath;
+ profile.PositionPathSideId = placementProfile.PositionPathSide == null ? Guid.Empty : placementProfile.PositionPathSide.Id;
+ profile.PositionType = placementProfile.PositionType;
+ profile.PositionLevel = placementProfile.PositionLevel;
+
+ profile.PositionLineId = placementProfile.PositionLine == null ? Guid.Empty : placementProfile.PositionLine.Id;
+ profile.PositionLine = placementProfile.PositionLine == null ? "" : placementProfile.PositionLine.Name;
+ profile.PosNo = placementProfile.OrganizationPosition!.PositionNumber;
+
+ // organization
+ profile.OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id;
+ profile.OrganizationShortName = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Name;
+ profile.OrganizationOrganizationId = placementProfile.OrganizationPosition!.Organization!.OrganizationOrganization!.Id;
+ profile.OcId = placementProfile.OrganizationPosition!.Organization!.Id;
+ profile.Oc = _organizationCommonRepository.GetOrganizationNameFullPath(placementProfile.OrganizationPosition!.Organization!.Id, false, false, "/");
+ }
+
+ var lastSarary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault();
+ var order = 1;
+ if (lastSarary.Order != null)
+ order = lastSarary.Order.Value + 1;
+
+ var oc = _dbContext.Set()
+ .FirstOrDefault(x => x.Id == placementProfile.OrganizationPosition!.Organization!.Id);
+
+ var position = placementProfile.PositionPath;
+
+ var positionNumber = placementProfile.PositionNumber;
+
+ var positionType = placementProfile.PositionType;
+
+ var positionLevel = placementProfile.PositionLevel;
+
+ var salary = new ProfileSalary
+ {
+ Order = order,
+ Date = command.CommandAffectDate,
+
+ Amount = recv.Amount == null ? 0 : recv.Amount,
+ PositionSalaryAmount = recv.PositionSalaryAmount == null ? 0 : recv.PositionSalaryAmount,
+ MouthSalaryAmount = recv.MouthSalaryAmount == null ? 0 : recv.MouthSalaryAmount,
+ SalaryClass = "",
+ SalaryRef = "คำสั่งบรรจุและแต่งตั้งผู้ออกไปรับราชการทหารกลับเข้ารับราชการ คำสั่ง" + command.IssuerOrganizationName + "ที่ " + $"{command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate!.Value.ToThaiFullDate3()}",
+
+ OcId = oc == null ? Guid.Empty : oc.Id,
+
+ PositionLevel = placementProfile.PositionLevel,
+ PositionLineId = placementProfile.PositionLine!.Id,
+ PositionTypeId = placementProfile.PositionType!.Id,
+ OrganizationShortNameId = placementProfile.OrganizationPosition!.Organization!.OrganizationShortName!.Id,
+ PosNoId = positionNumber!.Id,
+
+ CommandNo = $"{command.CommandNo}/{command.CommandYear}",
+ CommandTypeName = command.CommandType.Name,
+
+ PositionEmployeeGroupId = null,
+ PositionEmployeeLevelId = null,
+ PositionEmployeePositionId = null,
+ PositionEmployeePositionSideId = null,
+ PosNoEmployee = "",
+
+
+ PositionPathSideId = placementProfile.PositionPathSide! == null ? null : placementProfile.PositionPathSide!.Id,
+ PositionExecutiveId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutive!.Id,
+ PositionExecutiveSideId = placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide! == null ? null : placementProfile.OrganizationPosition!.PositionMaster!.PositionExecutiveSide!.Id,
+
+
+ IsActive = true,
+ CreatedAt = DateTime.Now,
+ CreatedFullName = FullName ?? "System Administrator",
+ CreatedUserId = UserId ?? "",
+ LastUpdatedAt = DateTime.Now,
+ LastUpdateFullName = FullName ?? "System Administrator",
+ LastUpdateUserId = UserId ?? "",
+
+ };
+
+ if (lastSarary.PositionPathSideId != null) salary.PositionPathSideId = lastSarary.PositionPathSideId;
+ if (lastSarary.PositionExecutiveSideId != null) salary.PositionExecutiveSideId = lastSarary.PositionExecutiveSideId;
+
+ profile.Salaries.Add(salary);
+
+ // update placementstatus
+ placementProfile.Status = "DONE";
+
+ 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 = profile.Id,
+ Payload = "",
+ };
+ _dbContext.Set().Add(inbox);
+
+ var noti = new Notification
+ {
+ Body = $"คำสั่งบรรจุและแต่งตั้งผู้ออกไปรับราชการทหารกลับเข้ารับราชการ เลขที่ {command.CommandNo}/{command.CommandYear.ToInteger().ToThaiYear()} ลงวันที่ {command.CommandExcecuteDate.Value.ToThaiFullDate3()}",
+ ReceiverUserId = profile.Id,
+ Type = "",
+ Payload = "",
+ };
+ _dbContext.Set().Add(noti);
+ await _dbContext.SaveChangesAsync();
+ }
+
+ // send cc noti inbox
+ foreach (var cc in command.Deployments)
+ {
+ var pf = await _dbContext.Set().FirstOrDefaultAsync(x => x.CitizenId == cc.CitizenId);
+ if (pf != null)
+ {
+ 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 = pf.Id,
+ Payload = "",
+ };
+ _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 = pf.Id,
+ Type = "",
+ Payload = "",
+ };
+ _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-10 - คำสั่งแต่งตั้งคณะกรรมการประเมินผลการทดลองปฏิบัติหน้าที่ราชการ
///
@@ -2509,7 +4064,7 @@ namespace BMA.EHR.Application.Repositories.Commands
{
throw;
}
- }
+ }
///
/// C-PM-15 - คำสั่งให้ช่วยราชการ