diff --git a/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs b/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs index 20c7111d..94952f81 100644 --- a/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs +++ b/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs @@ -212,12 +212,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -607,12 +607,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -825,12 +825,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -1044,12 +1044,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -1366,12 +1366,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -1489,12 +1489,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -1793,12 +1793,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -2017,12 +2017,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -2329,12 +2329,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -2673,12 +2673,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -3011,12 +3011,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -3228,12 +3228,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -3541,12 +3541,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -3826,12 +3826,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -4147,12 +4147,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var CurrentRetireDate = new DateTime(period.Year, 9, 30); @@ -4689,12 +4689,12 @@ namespace BMA.EHR.Application.Repositories // var period = await _dbContext.Set().FirstOrDefault(p => p.Id == periodId); // if (period == null) - // throw new Exception(GlobalMessages.InvalidCoinPeriod); + // throw new Exception(GlobalMessages.CoinPeriodNotFound); // var oc = await _dbContext.Set().FirstOrDefault(x => x.OCId == ocId); // if (oc == null) - // throw new Exception(GlobalMessages.InvalidOC); + // throw new Exception(GlobalMessages.OCNotFound); // var result = await _dbContext.Set() // .Include(p => p.Position) @@ -4970,7 +4970,7 @@ namespace BMA.EHR.Application.Repositories // var req = await _dbContext.Set().FirstOrDefault(x => x.Id == id); // if (req == null) - // throw new Exception(GlobalMessages.InvalidInsigniaRequest); + // throw new Exception(GlobalMessages.InsigniaNotFound); // var profile = await _dbContext.Set().AsQueryable() // .Include(x => x.RequestInsignia) @@ -5060,12 +5060,12 @@ namespace BMA.EHR.Application.Repositories var period = await _dbContext.Set().FirstOrDefaultAsync(p => p.Id == periodId); if (period == null) - throw new Exception(GlobalMessages.InvalidCoinPeriod); + throw new Exception(GlobalMessages.CoinPeriodNotFound); var oc = await _dbContext.Set().FirstOrDefaultAsync(x => x.Id == ocId); if (oc == null) - throw new Exception(GlobalMessages.InvalidOC); + throw new Exception(GlobalMessages.OCNotFound); var req = new InsigniaRequest { diff --git a/BMA.EHR.Domain/Models/Insignias/InsigniaPeriod.cs b/BMA.EHR.Domain/Models/Insignias/InsigniaPeriod.cs index 7a0056f2..f64ddafa 100644 --- a/BMA.EHR.Domain/Models/Insignias/InsigniaPeriod.cs +++ b/BMA.EHR.Domain/Models/Insignias/InsigniaPeriod.cs @@ -10,20 +10,16 @@ namespace BMA.EHR.Domain.Models.Insignias { [Required, MaxLength(200)] public string Name { get; set; } - public int Year { get; set; } - public DateTime StartDate { get; set; } - public DateTime EndDate { get; set; } - [MaxLength(50)] public string Amount { get; set; } - [MaxLength(10)] public string Type { get; set; } public Document? ReliefDoc { get; set; } - + [Comment("สถานะการใช้งาน")] + public bool IsActive { get; set; } = true; public virtual List InsigniaRequests { get; set; } } } diff --git a/BMA.EHR.Domain/Models/Retirement/RetirementDeceased.cs b/BMA.EHR.Domain/Models/Retirement/RetirementDeceased.cs new file mode 100644 index 00000000..3667af57 --- /dev/null +++ b/BMA.EHR.Domain/Models/Retirement/RetirementDeceased.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using BMA.EHR.Domain.Models.Base; +using BMA.EHR.Domain.Models.MetaData; +using BMA.EHR.Domain.Models.Organizations; +using BMA.EHR.Domain.Models.Documents; +using BMA.EHR.Domain.Models.HR; + +namespace BMA.EHR.Domain.Models.Retirement +{ + public class RetirementDeceased : EntityBase + { + [Comment("ใบมรณบัตร")] + public Document? Document { get; set; } + [Comment("เลขที่ใบมรณบัตร")] + public string? Number { get; set; } = string.Empty; + [Comment("วันที่เสียชีวิต")] + public DateTime? Date { get; set; } + [Comment("สถานที่ออกใบมรณบัตร")] + public string? Location { get; set; } = string.Empty; + [Comment("เหตุผลการเสียชีวิต")] + public string? Reason { get; set; } = string.Empty; + [Comment("Id ผู้ถึงแก่กรรม")] + public Profile Profile { get; set; } + [Comment("สถานะการใช้งาน")] + public bool IsActive { get; set; } = true; + } +} diff --git a/BMA.EHR.Domain/Models/Retirement/RetirementResign.cs b/BMA.EHR.Domain/Models/Retirement/RetirementResign.cs new file mode 100644 index 00000000..0a166351 --- /dev/null +++ b/BMA.EHR.Domain/Models/Retirement/RetirementResign.cs @@ -0,0 +1,40 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations; +using BMA.EHR.Domain.Models.Base; +using BMA.EHR.Domain.Models.MetaData; +using BMA.EHR.Domain.Models.Organizations; +using BMA.EHR.Domain.Models.Documents; +using BMA.EHR.Domain.Models.HR; + +namespace BMA.EHR.Domain.Models.Retirement +{ + public class RetirementResign : EntityBase + { + [Comment("สถานที่ยื่นขอลาออกราชการ")] + public string? Location { get; set; } = string.Empty; + [Comment("วันที่ยื่นขอออกราชการ")] + public DateTime? SendDate { get; set; } + + [Comment("วันที่ขอออกราชการ")] + public DateTime? ActiveDate { get; set; } + [Comment("เหตุผลที่ลาออกจากราชการ")] + public string? Reason { get; set; } = string.Empty; + [Comment("Id ผู้ลาออก")] + public Profile Profile { get; set; } + [Comment("Id ประเภทตำแหน่ง")] + public PositionType? PositionType { get; set; } + [Comment("Id สายงาน")] + public PositionLine? PositionLine { get; set; } + + [Comment("Id ระดับ")] + public PositionLevel? PositionLevel { get; set; } + [Comment("Id ตำแหน่งทางการบริหาร")] + public PositionExecutive? PositionExecutive { get; set; } + [Comment("Id สังกัด")] + public OrganizationOrganization? OrganizationOrganization { get; set; } + [Comment("สถานะลาออก")] + public string? Status { get; set; } = "PENDING"; + [Comment("สถานะการใช้งาน")] + public bool IsActive { get; set; } = true; + } +} diff --git a/BMA.EHR.Domain/Shared/GlobalMessages.cs b/BMA.EHR.Domain/Shared/GlobalMessages.cs index 177b035e..03d3a37b 100644 --- a/BMA.EHR.Domain/Shared/GlobalMessages.cs +++ b/BMA.EHR.Domain/Shared/GlobalMessages.cs @@ -70,18 +70,17 @@ #endregion #region " Insignia " - public static readonly string InvalidInsigniaRequest = "ไม่พบข้อมูลการยื่นขอพระราชทานเครื่องราชย์ของหน่วยงานที่ระบุ!!"; - - public static readonly string InvalidInsigniaPeriod = "ไม่พบรอบการยื่นขอพระราชทานเครื่องราชย์อิสริยาภรณ์"; - - public static readonly string InvalidCoinPeriod = "ไม่พบรอบการขอพระราชทานเหรียญจักรพรรดิมาลาที่ระบุ!!"; - - public static readonly string InvalidOC = "ไม่พบหน่วยงานที่ระบุในระบบ"; + public static readonly string InsigniaRequestNotFound = "ไม่พบข้อมูลการยื่นขอพระราชทานเครื่องราชย์ของหน่วยงานที่ระบุ!!"; + public static readonly string InsigniaPeriodNotFound = "ไม่พบรอบการยื่นขอพระราชทานเครื่องราชย์อิสริยาภรณ์"; + public static readonly string CoinPeriodNotFound = "ไม่พบรอบการขอพระราชทานเหรียญจักรพรรดิมาลาที่ระบุ!!"; + public static readonly string OCNotFound = "ไม่พบหน่วยงานที่ระบุในระบบ"; #endregion #region " Retirement " - public static readonly string InvalidRetirementRequest = "ไม่พบข้อมูลการประกาศเกษียณอายุราชการ"; - public static readonly string InvalidRetirementHistoryRequest = "ไม่พบข้อมูลประวัติการประกาศเกษียณอายุราชการ"; + public static readonly string RetirementNotFound = "ไม่พบข้อมูลการประกาศเกษียณอายุราชการ"; + public static readonly string RetirementHistoryNotFound = "ไม่พบข้อมูลประวัติการประกาศเกษียณอายุราชการ"; + public static readonly string RetirementResignNotFound = "ไม่พบข้อมูลการคำขอลาออก"; + public static readonly string RetirementDeceasedNotFound = "ไม่พบข้อมูลบันทึกเวียนแจ้งการถึงแก่กรรม"; #endregion #region " Command " diff --git a/BMA.EHR.Infrastructure/Persistence/ApplicationDBContext.cs b/BMA.EHR.Infrastructure/Persistence/ApplicationDBContext.cs index 03f97769..5403ae16 100644 --- a/BMA.EHR.Infrastructure/Persistence/ApplicationDBContext.cs +++ b/BMA.EHR.Infrastructure/Persistence/ApplicationDBContext.cs @@ -306,6 +306,8 @@ namespace BMA.EHR.Infrastructure.Persistence public DbSet RetirementPeriods { get; set; } public DbSet RetirementProfiles { get; set; } + public DbSet RetirementDeceaseds { get; set; } + public DbSet RetirementResigns { get; set; } #endregion diff --git a/BMA.EHR.Insignia.Service/Controllers/InsigniaPeriodController.cs b/BMA.EHR.Insignia.Service/Controllers/InsigniaPeriodController.cs index 5462677e..5d37af6b 100644 --- a/BMA.EHR.Insignia.Service/Controllers/InsigniaPeriodController.cs +++ b/BMA.EHR.Insignia.Service/Controllers/InsigniaPeriodController.cs @@ -69,6 +69,7 @@ namespace BMA.EHR.Insignia.Service.Controllers period_end = p.EndDate, period_status = _repository.CalStatusByDate(p.StartDate, p.EndDate, p.Year.ToString()), period_year = p.Year, + period_isActive = p.IsActive, period_doc = p.ReliefDoc == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.ReliefDoc.Id, }) .ToListAsync(); @@ -84,6 +85,7 @@ namespace BMA.EHR.Insignia.Service.Controllers period_end = insigniaPeriod.period_end, period_status = insigniaPeriod.period_status, period_year = insigniaPeriod.period_year, + period_isActive = insigniaPeriod.period_isActive, period_doc = insigniaPeriod.period_doc == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(insigniaPeriod.period_doc), }; data.Add(_data); @@ -115,6 +117,7 @@ namespace BMA.EHR.Insignia.Service.Controllers period_end = p.EndDate, period_status = _repository.CalStatusByDate(p.StartDate, p.EndDate, p.Year.ToString()), period_year = p.Year, + period_isActive = p.IsActive, period_doc = p.ReliefDoc == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.ReliefDoc.Id, }) .FirstOrDefaultAsync(); @@ -130,6 +133,7 @@ namespace BMA.EHR.Insignia.Service.Controllers period_end = data.period_end, period_status = data.period_status, period_year = data.period_year, + period_isActive = data.period_isActive, period_doc = data.period_doc == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.period_doc), }; @@ -162,6 +166,7 @@ namespace BMA.EHR.Insignia.Service.Controllers EndDate = Request.Form.ContainsKey("EndDate") ? DateTime.Parse(Request.Form["EndDate"]) : DateTime.Now, Amount = Request.Form.ContainsKey("Amount") ? Request.Form["Amount"] : "", Type = type.Trim().ToUpper(), + IsActive = true, CreatedUserId = FullName ?? "", CreatedFullName = UserId ?? "System Administrator", CreatedAt = DateTime.Now, diff --git a/BMA.EHR.Insignia.Service/Controllers/InsigniaRequestController.cs b/BMA.EHR.Insignia.Service/Controllers/InsigniaRequestController.cs index 752401e1..ae3f73a9 100644 --- a/BMA.EHR.Insignia.Service/Controllers/InsigniaRequestController.cs +++ b/BMA.EHR.Insignia.Service/Controllers/InsigniaRequestController.cs @@ -457,7 +457,7 @@ namespace BMA.EHR.Insignia.Service.Controllers return Success(); } else - return Error(GlobalMessages.InvalidInsigniaRequest); + return Error(GlobalMessages.InsigniaRequestNotFound); } #endregion @@ -469,10 +469,10 @@ namespace BMA.EHR.Insignia.Service.Controllers { var result = await _repository.GetInsigniaRequest(Royal_Type, ocId); if (result == null) - return Error(GlobalMessages.InvalidInsigniaRequest); + return Error(GlobalMessages.InsigniaRequestNotFound); var requestId = await _repository.GetRequestId(result.PeriodId, ocId); if (requestId == null) - return Error(GlobalMessages.InvalidInsigniaRequest); + return Error(GlobalMessages.InsigniaRequestNotFound); var requestNew = await _context.InsigniaRequests.FirstOrDefaultAsync(i => i.Id == requestId); if (requestNew != null) { @@ -481,7 +481,7 @@ namespace BMA.EHR.Insignia.Service.Controllers return Success(); } else - return Error(GlobalMessages.InvalidInsigniaRequest); + return Error(GlobalMessages.InsigniaRequestNotFound); } [HttpPost("status/director/reject/{ocId:length(36)}")] @@ -489,10 +489,10 @@ namespace BMA.EHR.Insignia.Service.Controllers { var result = await _repository.GetInsigniaRequest(Royal_Type, ocId); if (result == null) - return Error(GlobalMessages.InvalidInsigniaRequest); + return Error(GlobalMessages.InsigniaRequestNotFound); var requestId = await _repository.GetRequestId(result.PeriodId, ocId); if (requestId == null) - return Error(GlobalMessages.InvalidInsigniaRequest); + return Error(GlobalMessages.InsigniaRequestNotFound); var requestNew = await _context.InsigniaRequests.FirstOrDefaultAsync(i => i.Id == requestId); if (requestNew != null) { @@ -501,7 +501,7 @@ namespace BMA.EHR.Insignia.Service.Controllers return Success(); } else - return Error(GlobalMessages.InvalidInsigniaRequest); + return Error(GlobalMessages.InsigniaRequestNotFound); } #endregion diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs index 2140a7eb..f31a0da5 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs @@ -1,7 +1,5 @@ using BMA.EHR.Application.Repositories; using BMA.EHR.Domain.Common; -using BMA.EHR.Domain.Extensions; -using BMA.EHR.Domain.Models.MetaData; using BMA.EHR.Domain.Models.Placement; using BMA.EHR.Domain.Shared; using BMA.EHR.Infrastructure.Persistence; @@ -11,7 +9,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Swashbuckle.AspNetCore.Annotations; using System.Security.Claims; -using System.Security.Cryptography; namespace BMA.EHR.Placement.Service.Controllers { @@ -87,6 +84,8 @@ namespace BMA.EHR.Placement.Service.Controllers PositionLineId = p.PositionLine == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLine.Id, PositionLevelId = p.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLevel.Id, OrganizationPositionId = p.OrganizationPosition == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OrganizationPosition.Id, + OrganizationName = p.OrganizationPosition == null ? null : (p.OrganizationPosition.Organization == null ? null : (p.OrganizationPosition.Organization.OrganizationOrganization == null ? null : p.OrganizationPosition.Organization.OrganizationOrganization.Name)),//// + OrganizationShortName = p.OrganizationPosition == null ? null : (p.OrganizationPosition.Organization == null ? null : (p.OrganizationPosition.Organization.OrganizationShortName == null ? null : p.OrganizationPosition.Organization.OrganizationShortName.Name)),//// p.IsActive, p.CreatedAt, }) diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementTransferController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementTransferController.cs index 2d2ba665..3b013591 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementTransferController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementTransferController.cs @@ -1,7 +1,5 @@ using BMA.EHR.Application.Repositories; using BMA.EHR.Domain.Common; -using BMA.EHR.Domain.Extensions; -using BMA.EHR.Domain.Models.MetaData; using BMA.EHR.Domain.Models.Placement; using BMA.EHR.Domain.Shared; using BMA.EHR.Infrastructure.Persistence; @@ -11,7 +9,6 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Swashbuckle.AspNetCore.Annotations; using System.Security.Claims; -using System.Security.Cryptography; namespace BMA.EHR.Placement.Service.Controllers { diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementController.cs index 89970736..8ed6975d 100644 --- a/BMA.EHR.Retirement.Service/Controllers/RetirementController.cs +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementController.cs @@ -1,8 +1,6 @@ using BMA.EHR.Application.Repositories; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Extensions; -using BMA.EHR.Domain.Models.MetaData; -using BMA.EHR.Domain.Models.Placement; using BMA.EHR.Domain.Models.Retirement; using BMA.EHR.Domain.Shared; using BMA.EHR.Infrastructure.Persistence; @@ -11,10 +9,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Swashbuckle.AspNetCore.Annotations; -using System.Drawing; -using System.Linq; using System.Security.Claims; -using System.Security.Cryptography; namespace BMA.EHR.Retirement.Service.Controllers { @@ -363,7 +358,7 @@ namespace BMA.EHR.Retirement.Service.Controllers var retireOld = await _context.RetirementPeriods .FirstOrDefaultAsync(x => x.Id == req.RetireHistoryId); if (retireOld == null) - return Error(GlobalMessages.InvalidRetirementRequest, 404); + return Error(GlobalMessages.RetirementNotFound, 404); var profileOlds = await _context.RetirementProfiles.AsQueryable() .Where(x => x.RetirementPeriod == retireOld) .ToListAsync(); @@ -441,7 +436,7 @@ namespace BMA.EHR.Retirement.Service.Controllers var profileHistorys = await _context.RetirementPeriodHistorys.AsQueryable() .FirstOrDefaultAsync(x => x.Id == retireId); if (profileHistorys == null) - return Error(GlobalMessages.InvalidRetirementHistoryRequest, 404); + return Error(GlobalMessages.RetirementHistoryNotFound, 404); using (var client = new HttpClient()) { var url = $"https://s3cluster.frappet.com/bma-ehr-fpt/{profileHistorys.ProfileFile}.json"; @@ -526,7 +521,7 @@ namespace BMA.EHR.Retirement.Service.Controllers .ThenInclude(x => x.Profile) .FirstOrDefaultAsync(x => x.Id == retireId); if (retire == null) - return Error(GlobalMessages.InvalidRetirementRequest, 404); + return Error(GlobalMessages.RetirementNotFound, 404); if (retire.RetirementProfiles.Where(x => x.Profile == profile).Count() > 0) return Error("บุคคลนี้ได้ทำการเลือกไว้อยู่แล้ว"); foreach (var retire_profile in retire.RetirementProfiles) @@ -671,7 +666,7 @@ namespace BMA.EHR.Retirement.Service.Controllers var retire = await _context.RetirementPeriods .FirstOrDefaultAsync(x => x.Id == retireId); if (retire == null) - return Error(GlobalMessages.InvalidRetirementRequest, 404); + return Error(GlobalMessages.RetirementNotFound, 404); await GenOrderByYear(retire.Id); diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs new file mode 100644 index 00000000..c0d2e24e --- /dev/null +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs @@ -0,0 +1,310 @@ +using BMA.EHR.Application.Repositories; +using BMA.EHR.Domain.Common; +using BMA.EHR.Domain.Extensions; +using BMA.EHR.Domain.Models.MetaData; +using BMA.EHR.Domain.Models.Retirement; +using BMA.EHR.Domain.Shared; +using BMA.EHR.Infrastructure.Persistence; +using BMA.EHR.Retirement.Service.Requests; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Swashbuckle.AspNetCore.Annotations; +using System.Security.Claims; +using System.Security.Cryptography; + +namespace BMA.EHR.Retirement.Service.Controllers +{ + [Route("api/v{version:apiVersion}/retirement/deceased")] + [ApiVersion("1.0")] + [ApiController] + [Produces("application/json")] + [Authorize] + [SwaggerTag("ระบบแจ้งการถึงแก่กรรม")] + public class RetirementDeceasedController : BaseController + { + private readonly RetirementRepository _repository; + private readonly ApplicationDBContext _context; + private readonly MinIOService _documentService; + private readonly IHttpContextAccessor _httpContextAccessor; + + public RetirementDeceasedController(RetirementRepository repository, + ApplicationDBContext context, + MinIOService documentService, + IHttpContextAccessor httpContextAccessor) + { + _repository = repository; + _context = context; + _documentService = documentService; + _httpContextAccessor = httpContextAccessor; + } + + #region " Properties " + + private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; + + private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; + + #endregion + + /// + /// list รายการบันทึกเวียนแจ้งการถึงแก่กรรม + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet()] + public async Task> GetList() + { + + var retirementDeceaseds = await _context.RetirementDeceaseds.AsQueryable() + .OrderByDescending(x => x.CreatedAt) + .Select(p => new + { + p.Id, + Prefix = p.Profile.Prefix == null ? null : p.Profile.Prefix.Name, + p.Profile.FirstName, + p.Profile.LastName, + PositionType = p.Profile.PositionType == null ? null : p.Profile.PositionType.Name, + p.Profile.PositionLine, + // PositionLine = p.Profile.PositionLine == null ? null : p.Profile.PositionLine.Name, + PositionLevel = p.Profile.PositionLevel == null ? null : p.Profile.PositionLevel.Name, + p.Profile.PositionExecutive, + // PositionExecutive = p.Profile.PositionExecutive == null ? null : p.Profile.PositionExecutive.Name, + Organization = p.Profile.Oc, + // Organization = p.Profile.Oc == null ? null : p.Profile.Oc.Name, + p.Number, + p.Date, + p.Location, + p.Reason, + FileName = p.Document == null ? null : p.Document.FileName, + PathName = p.Document == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Document.Id, + p.IsActive, + p.CreatedAt, + }) + .ToListAsync(); + var _retirementDeceaseds = new List(); + foreach (var data in retirementDeceaseds) + { + var _data = new + { + data.Id, + data.Prefix, + data.FirstName, + data.LastName, + data.PositionExecutive, + data.PositionType, + data.PositionLine, + data.PositionLevel, + data.Organization, + data.Number, + data.Date, + data.Location, + data.Reason, + data.FileName, + PathName = data.PathName == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.PathName), + data.IsActive, + data.CreatedAt, + }; + _retirementDeceaseds.Add(_data); + } + + return Success(_retirementDeceaseds); + } + + /// + /// get รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม + /// + /// Id การถึงแก่กรรม + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("{id:length(36)}")] + public async Task> GetDetailByUser(Guid id) + { + var data = await _context.RetirementDeceaseds.AsQueryable() + .Where(x => x.Id == id) + .Select(p => new + { + p.Id, + Prefix = p.Profile.Prefix == null ? null : p.Profile.Prefix.Name, + PrefixId = p.Profile.Prefix == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Prefix.Id, + p.Profile.FirstName, + p.Profile.LastName, + PositionType = p.Profile.PositionType == null ? null : p.Profile.PositionType.Name, + PositionTypeId = p.Profile.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.PositionType.Id, + p.Profile.PositionLine, + p.Profile.PositionLineId, + // PositionLine = p.Profile.PositionLine == null ? null : p.Profile.PositionLine.Name, + PositionLevel = p.Profile.PositionLevel == null ? null : p.Profile.PositionLevel.Name, + PositionLevelId = p.Profile.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.PositionLevel.Id, + p.Profile.PositionExecutive, + p.Profile.PositionExecutiveId, + // PositionExecutive = p.Profile.PositionExecutive == null ? null : p.Profile.PositionExecutive.Name, + Organization = p.Profile.Oc, + OrganizationId = p.Profile.OcId, + // Organization = p.Profile.Oc == null ? null : p.Profile.Oc.Name, + p.Number, + p.Date, + p.Location, + p.Reason, + FileName = p.Document == null ? null : p.Document.FileName, + PathName = p.Document == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Document.Id, + p.IsActive, + p.CreatedAt, + }) + .FirstOrDefaultAsync(); + if (data == null) + return Error(GlobalMessages.RetirementDeceasedNotFound, 404); + var _data = new + { + data.Id, + data.Prefix, + data.PrefixId, + data.FirstName, + data.LastName, + data.PositionExecutive, + data.PositionType, + data.PositionLine, + data.PositionLevel, + data.Organization, + data.PositionExecutiveId, + data.PositionTypeId, + data.PositionLineId, + data.PositionLevelId, + data.OrganizationId, + data.Number, + data.Date, + data.Location, + data.Reason, + data.FileName, + PathName = data.PathName == Guid.Parse("00000000-0000-0000-0000-000000000000") ? null : await _documentService.ImagesPath(data.PathName), + data.IsActive, + data.CreatedAt, + }; + + return Success(_data); + } + + /// + /// สร้าง รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost()] + public async Task> Post([FromForm] RetirementDeceasedRequest req) + { + var profile = await _context.Profiles + .FirstOrDefaultAsync(x => x.Id == req.ProfileId); + if (profile == null) + return Error(GlobalMessages.DataNotFound, 404); + + var retirementDeceased = new RetirementDeceased + { + Profile = profile, + Number = req.Number, + Date = req.Date, + Location = req.Location, + Reason = req.Reason, + IsActive = true, + CreatedUserId = FullName ?? "", + CreatedFullName = UserId ?? "System Administrator", + CreatedAt = DateTime.Now, + LastUpdateFullName = FullName ?? "System Administrator", + LastUpdateUserId = UserId ?? "", + LastUpdatedAt = DateTime.Now, + }; + await _context.RetirementDeceaseds.AddAsync(retirementDeceased); + await _context.SaveChangesAsync(); + if (Request.Form.Files != null && Request.Form.Files.Count != 0) + { + var file = Request.Form.Files[0]; + var fileExtension = Path.GetExtension(file.FileName); + + var doc = await _documentService.UploadFileAsync(file, file.FileName); + var _doc = await _context.Documents.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == doc.Id); + if (_doc != null) + retirementDeceased.Document = _doc; + } + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// แก้ไข รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("{id:length(36)}")] + public async Task> Put([FromForm] RetirementDeceasedRequest req, Guid id) + { + var updated = await _context.RetirementDeceaseds + .Include(x => x.Document) + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementDeceasedNotFound, 404); + + if (Request.Form.Files != null && Request.Form.Files.Count != 0) + { + if (updated.Document != null) + await _documentService.DeleteFileAsync(updated.Document.Id); + + var file = Request.Form.Files[0]; + var fileExtension = Path.GetExtension(file.FileName); + + var doc = await _documentService.UploadFileAsync(file, file.FileName); + var _doc = await _context.Documents.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == doc.Id); + if (_doc != null) + updated.Document = _doc; + } + updated.Number = req.Number; + updated.Date = req.Date; + updated.Location = req.Location; + updated.Reason = req.Reason; + updated.LastUpdateFullName = FullName ?? "System Administrator"; + updated.LastUpdateUserId = UserId ?? ""; + updated.LastUpdatedAt = DateTime.Now; + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// ลบ รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม + /// + /// Id การถึงแก่กรรม + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpDelete("{id:length(36)}")] + public async Task> Delete(Guid id) + { + var deleted = await _context.RetirementDeceaseds.AsQueryable() + .Include(x => x.Document) + .FirstOrDefaultAsync(x => x.Id == id); + if (deleted == null) + return Error(GlobalMessages.RetirementDeceasedNotFound, 404); + if (deleted.Document != null) + await _documentService.DeleteFileAsync(deleted.Document.Id); + _context.RetirementDeceaseds.Remove(deleted); + await _context.SaveChangesAsync(); + + return Success(); + } + } +} diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementResignController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementResignController.cs new file mode 100644 index 00000000..71919ce7 --- /dev/null +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementResignController.cs @@ -0,0 +1,317 @@ +using BMA.EHR.Application.Repositories; +using BMA.EHR.Domain.Common; +using BMA.EHR.Domain.Extensions; +using BMA.EHR.Domain.Models.MetaData; +using BMA.EHR.Domain.Models.Retirement; +using BMA.EHR.Domain.Shared; +using BMA.EHR.Infrastructure.Persistence; +using BMA.EHR.Retirement.Service.Requests; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Swashbuckle.AspNetCore.Annotations; +using System.Security.Claims; +using System.Security.Cryptography; + +namespace BMA.EHR.Retirement.Service.Controllers +{ + [Route("api/v{version:apiVersion}/retirement/resign")] + [ApiVersion("1.0")] + [ApiController] + [Produces("application/json")] + [Authorize] + [SwaggerTag("ระบบลาออก")] + public class RetirementResignController : BaseController + { + private readonly RetirementRepository _repository; + private readonly ApplicationDBContext _context; + private readonly MinIOService _documentService; + private readonly IHttpContextAccessor _httpContextAccessor; + + public RetirementResignController(RetirementRepository repository, + ApplicationDBContext context, + MinIOService documentService, + IHttpContextAccessor httpContextAccessor) + { + _repository = repository; + _context = context; + _documentService = documentService; + _httpContextAccessor = httpContextAccessor; + } + + #region " Properties " + + private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; + + private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; + + #endregion + + /// + /// list รายการลาออกของ User + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("user")] + public async Task> GetListByProfile() + { + var profile = await _context.Profiles + .FirstOrDefaultAsync(x => x.KeycloakId == Guid.Parse(UserId)); + if (profile == null) + return Error(GlobalMessages.DataNotFound, 404); + + var retirementResigns = await _context.RetirementResigns.AsQueryable() + .Where(x => x.Profile == profile) + .OrderByDescending(x => x.CreatedAt) + .Select(p => new + { + p.Id, + p.Location, + p.SendDate, + p.ActiveDate, + p.Reason, + p.Status, + p.IsActive, + }) + .ToListAsync(); + + return Success(retirementResigns); + } + + /// + /// list รายการลาออกของ Admin + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet()] + public async Task> GetListByAdmin() + { + + var retirementResigns = await _context.RetirementResigns.AsQueryable() + .OrderByDescending(x => x.CreatedAt) + .Select(p => new + { + p.Id, + Prefix = p.Profile.Prefix == null ? null : p.Profile.Prefix.Name, + p.Profile.FirstName, + p.Profile.LastName, + p.Location, + p.SendDate, + p.ActiveDate, + p.Reason, + p.Status, + PositionType = p.PositionType == null ? null : p.PositionType.Name, + PositionLine = p.PositionLine == null ? null : p.PositionLine.Name, + PositionLevel = p.PositionLevel == null ? null : p.PositionLevel.Name, + PositionExecutive = p.PositionExecutive == null ? null : p.PositionExecutive.Name, + OrganizationOrganization = p.OrganizationOrganization == null ? null : p.OrganizationOrganization.Name, + p.IsActive, + p.CreatedAt, + }) + .ToListAsync(); + + return Success(retirementResigns); + } + + /// + /// get รายละเอียดลาออก + /// + /// Id ลาออก + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("{id:length(36)}")] + public async Task> GetDetailByUser(Guid id) + { + var data = await _context.RetirementResigns.AsQueryable() + .Where(x => x.Id == id) + .Select(p => new + { + p.Id, + Prefix = p.Profile.Prefix == null ? null : p.Profile.Prefix.Name, + PrefixId = p.Profile.Prefix == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Prefix.Id, + p.Profile.FirstName, + p.Profile.LastName, + p.Location, + p.SendDate, + p.ActiveDate, + p.Reason, + p.Status, + PositionType = p.PositionType == null ? null : p.PositionType.Name, + PositionTypeId = p.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionType.Id, + PositionLine = p.PositionLine == null ? null : p.PositionLine.Name, + PositionLineId = p.PositionLine == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLine.Id, + PositionLevel = p.PositionLevel == null ? null : p.PositionLevel.Name, + PositionLevelId = p.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionLevel.Id, + PositionExecutive = p.PositionExecutive == null ? null : p.PositionExecutive.Name, + PositionExecutiveId = p.PositionExecutive == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.PositionExecutive.Id, + OrganizationOrganization = p.OrganizationOrganization == null ? null : p.OrganizationOrganization.Name, + OrganizationOrganizationId = p.OrganizationOrganization == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.OrganizationOrganization.Id, + p.IsActive, + p.CreatedAt, + }) + .FirstOrDefaultAsync(); + if (data == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + return Success(data); + } + + /// + /// สร้างการลาออก + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost()] + public async Task> Post([FromForm] RetirementResignRequest req) + { + var profile = await _context.Profiles + .Include(x => x.PositionType) + .Include(x => x.PositionLevel) + .FirstOrDefaultAsync(x => x.KeycloakId == Guid.Parse(UserId)); + if (profile == null) + return Error(GlobalMessages.DataNotFound, 404); + + var retirementResign = new RetirementResign + { + Profile = profile, + Location = req.Location, + SendDate = req.SendDate, + ActiveDate = req.ActiveDate, + Reason = req.Reason, + PositionType = profile.PositionType, + PositionLine = await _context.PositionLines + .FirstOrDefaultAsync(x => x.Id == profile.PositionLineId), + PositionLevel = profile.PositionLevel, + PositionExecutive = await _context.PositionExecutives + .FirstOrDefaultAsync(x => x.Id == profile.PositionExecutiveId), + OrganizationOrganization = await _context.OrganizationOrganizations + .FirstOrDefaultAsync(x => x.Id == profile.OrganizationOrganizationId), + Status = "PENDING", + IsActive = true, + CreatedUserId = FullName ?? "", + CreatedFullName = UserId ?? "System Administrator", + CreatedAt = DateTime.Now, + LastUpdateFullName = FullName ?? "System Administrator", + LastUpdateUserId = UserId ?? "", + LastUpdatedAt = DateTime.Now, + }; + await _context.RetirementResigns.AddAsync(retirementResign); + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// แก้ไขการลาออก + /// + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("{id:length(36)}")] + public async Task> Put([FromForm] RetirementResignRequest req, Guid id) + { + var updated = await _context.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + updated.Location = req.Location; + updated.SendDate = req.SendDate; + updated.ActiveDate = req.ActiveDate; + updated.Reason = req.Reason; + updated.LastUpdateFullName = FullName ?? "System Administrator"; + updated.LastUpdateUserId = UserId ?? ""; + updated.LastUpdatedAt = DateTime.Now; + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// ลบลาออก + /// + /// Id ลาออก + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpDelete("{id:length(36)}")] + public async Task> Delete(Guid id) + { + var deleted = await _context.RetirementResigns.AsQueryable() + .FirstOrDefaultAsync(x => x.Id == id); + if (deleted == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + _context.RetirementResigns.Remove(deleted); + await _context.SaveChangesAsync(); + return Success(); + } + + /// + /// อนุมัติคำลาออก + /// + /// Id คำลาออก + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("confirm/{id:length(36)}")] + public async Task> AdminConfirm(Guid id) + { + var updated = await _context.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + updated.Status = "APPROVE"; + updated.LastUpdateFullName = FullName ?? "System Administrator"; + updated.LastUpdateUserId = UserId ?? ""; + updated.LastUpdatedAt = DateTime.Now; + await _context.SaveChangesAsync(); + + return Success(); + } + + /// + /// ไม่อนุมัติคำลาออก + /// + /// Id คำลาออก + /// + /// + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("reject/{id:length(36)}")] + public async Task> AdminReject(Guid id) + { + var updated = await _context.RetirementResigns + .FirstOrDefaultAsync(x => x.Id == id); + if (updated == null) + return Error(GlobalMessages.RetirementResignNotFound, 404); + + updated.Status = "REJECT"; + updated.LastUpdateFullName = FullName ?? "System Administrator"; + updated.LastUpdateUserId = UserId ?? ""; + updated.LastUpdatedAt = DateTime.Now; + await _context.SaveChangesAsync(); + + return Success(); + } + } +} diff --git a/BMA.EHR.Retirement.Service/Requests/RetirementDeceasedRequest.cs b/BMA.EHR.Retirement.Service/Requests/RetirementDeceasedRequest.cs new file mode 100644 index 00000000..c222cb6c --- /dev/null +++ b/BMA.EHR.Retirement.Service/Requests/RetirementDeceasedRequest.cs @@ -0,0 +1,15 @@ +using BMA.EHR.Domain.Models.MetaData; +using Microsoft.EntityFrameworkCore; + +namespace BMA.EHR.Retirement.Service.Requests +{ + public class RetirementDeceasedRequest + { + public FormFile? File { get; set; } + public string? Number { get; set; } + public DateTime? Date { get; set; } + public string? Location { get; set; } + public string? Reason { get; set; } + public Guid ProfileId { get; set; } + } +} diff --git a/BMA.EHR.Retirement.Service/Requests/RetirementResignRequest.cs b/BMA.EHR.Retirement.Service/Requests/RetirementResignRequest.cs new file mode 100644 index 00000000..9dc271d7 --- /dev/null +++ b/BMA.EHR.Retirement.Service/Requests/RetirementResignRequest.cs @@ -0,0 +1,13 @@ +using BMA.EHR.Domain.Models.MetaData; +using Microsoft.EntityFrameworkCore; + +namespace BMA.EHR.Retirement.Service.Requests +{ + public class RetirementResignRequest + { + public string? Location { get; set; } + public DateTime? SendDate { get; set; } + public DateTime? ActiveDate { get; set; } + public string? Reason { get; set; } + } +}