From 771b9b940abb0ea466a1715c6ce2d02b1253f405 Mon Sep 17 00:00:00 2001 From: kittapath Date: Fri, 13 Dec 2024 11:52:58 +0700 Subject: [PATCH] report leave --- .../LeaveRequests/LeaveRequestRepository.cs | 60 +- .../ProcessUserTimeStampRepository.cs | 9 + .../Repositories/UserProfileRepository.cs | 8 +- .../Leaves/GetSumApproveLeaveByRootDto.cs | 47 + ...GetListProfileByKeycloakIdRootResultDto.cs | 11 + .../Profiles/GetProfileByKeycloakIdRootDto.cs | 18 + .../Models/Leave/Requests/LeaveRequest.cs | 14 +- .../TimeAttendants/ProcessUserTimeStamp.cs | 27 + .../Leave/TimeAttendants/UserTimeStamp.cs | 27 + ... table leaveRequest add rootId.Designer.cs | 1284 +++++++++++++++++ ...57_update table leaveRequest add rootId.cs | 393 +++++ .../LeaveDb/LeaveDbContextModelSnapshot.cs | 102 ++ BMA.EHR.Leave/Controllers/LeaveController.cs | 37 +- .../Controllers/LeaveReportController.cs | 363 +---- .../Controllers/LeaveRequestController.cs | 7 + .../Reports/GetLeaveDetailByNodeReportDto.cs | 3 +- BMA.EHR.Leave/Properties/launchSettings.json | 4 +- 17 files changed, 2109 insertions(+), 305 deletions(-) create mode 100644 BMA.EHR.Application/Responses/Leaves/GetSumApproveLeaveByRootDto.cs create mode 100644 BMA.EHR.Application/Responses/Profiles/GetListProfileByKeycloakIdRootResultDto.cs create mode 100644 BMA.EHR.Application/Responses/Profiles/GetProfileByKeycloakIdRootDto.cs create mode 100644 BMA.EHR.Infrastructure/Migrations/LeaveDb/20241212072757_update table leaveRequest add rootId.Designer.cs create mode 100644 BMA.EHR.Infrastructure/Migrations/LeaveDb/20241212072757_update table leaveRequest add rootId.cs diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index 72142a61..fb81c595 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -663,7 +663,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests var data = await _dbContext.Set().AsQueryable().AsNoTracking() .Include(x => x.Type) //.Where(x => x.LeaveStartDate.Year == year) - .Where(x => x.LeaveStartDate.Date >= startFiscalDate && x.LeaveStartDate.Date <= endFiscalDate ) + .Where(x => x.LeaveStartDate.Date >= startFiscalDate && x.LeaveStartDate.Date <= endFiscalDate) .Where(x => x.LeaveStatus == "NEW") // fix issue : #729 .ToListAsync(); @@ -826,6 +826,64 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests return res; } + public async Task> GetSumApproveLeaveByRootAndRange(DateTime startDate, DateTime endDate, string type) + { + var data = await _dbContext.Set().AsQueryable() + .Include(x => x.Type) + .Where(x => x.ProfileType == type.Trim().ToUpper()) + .Where(x => x.LeaveStartDate.Date >= startDate.Date && x.LeaveStartDate.Date <= endDate.Date) + .Where(x => x.LeaveStatus == "APPROVE").ToListAsync(); + + var res = (from d in data + group d by new { d.Root, d.Child1, d.Child2, d.Child3, d.Child4, LeaveTypeId = d.Type.Id, LeaveTypeCode = d.Type.Code } into grp + select new GetSumApproveLeaveByRootDto + { + Root = grp.Key.Root, + LeaveTypeId = grp.Key.LeaveTypeId, + LeaveTypeCode = grp.Key.LeaveTypeCode, + SumLeaveDay = grp.Sum(x => x.LeaveTotal), + + sickDayCountMale = grp.Where(x => x.Gender == "ชาย").Sum(x => x.LeaveTotal), + maternityDayCountMale = grp.Where(x => x.Gender == "ชาย").Sum(x => x.LeaveTotal), + wifeDayCountMale = grp.Where(x => x.Gender == "ชาย").Sum(x => x.LeaveTotal), + personalDayCountMale = grp.Where(x => x.Gender == "ชาย").Sum(x => x.LeaveTotal), + restDayCountMale = grp.Where(x => x.Gender == "ชาย").Sum(x => x.LeaveTotal), + ordainDayCountMale = grp.Where(x => x.Gender == "ชาย").Sum(x => x.LeaveTotal), + absentDayCountMale = grp.Where(x => x.Gender == "ชาย").Sum(x => x.LeaveTotal), + studyDayCountMale = grp.Where(x => x.Gender == "ชาย").Sum(x => x.LeaveTotal), + agencyDayCountMale = grp.Where(x => x.Gender == "ชาย").Sum(x => x.LeaveTotal), + coupleDayCountMale = grp.Where(x => x.Gender == "ชาย").Sum(x => x.LeaveTotal), + therapyDayCountMale = grp.Where(x => x.Gender == "ชาย").Sum(x => x.LeaveTotal), + + sickDayCountFemale = grp.Where(x => x.Gender == "หญิง").Sum(x => x.LeaveTotal), + maternityDayCountFemale = grp.Where(x => x.Gender == "หญิง").Sum(x => x.LeaveTotal), + wifeDayCountFemale = grp.Where(x => x.Gender == "หญิง").Sum(x => x.LeaveTotal), + personalDayCountFemale = grp.Where(x => x.Gender == "หญิง").Sum(x => x.LeaveTotal), + restDayCountFemale = grp.Where(x => x.Gender == "หญิง").Sum(x => x.LeaveTotal), + ordainDayCountFemale = grp.Where(x => x.Gender == "หญิง").Sum(x => x.LeaveTotal), + absentDayCountFemale = grp.Where(x => x.Gender == "หญิง").Sum(x => x.LeaveTotal), + studyDayCountFemale = grp.Where(x => x.Gender == "หญิง").Sum(x => x.LeaveTotal), + agencyDayCountFemale = grp.Where(x => x.Gender == "หญิง").Sum(x => x.LeaveTotal), + coupleDayCountFemale = grp.Where(x => x.Gender == "หญิง").Sum(x => x.LeaveTotal), + therapyDayCountFemale = grp.Where(x => x.Gender == "หญิง").Sum(x => x.LeaveTotal), + + sickDayCountNo = grp.Where(x => x.Gender == "ชาย" && x.Gender == "หญิง").Sum(x => x.LeaveTotal), + maternityDayCountNo = grp.Where(x => x.Gender == "ชาย" && x.Gender == "หญิง").Sum(x => x.LeaveTotal), + wifeDayCountNo = grp.Where(x => x.Gender == "ชาย" && x.Gender == "หญิง").Sum(x => x.LeaveTotal), + personalDayCountNo = grp.Where(x => x.Gender == "ชาย" && x.Gender == "หญิง").Sum(x => x.LeaveTotal), + restDayCountNo = grp.Where(x => x.Gender == "ชาย" && x.Gender == "หญิง").Sum(x => x.LeaveTotal), + ordainDayCountNo = grp.Where(x => x.Gender == "ชาย" && x.Gender == "หญิง").Sum(x => x.LeaveTotal), + absentDayCountNo = grp.Where(x => x.Gender == "ชาย" && x.Gender == "หญิง").Sum(x => x.LeaveTotal), + studyDayCountNo = grp.Where(x => x.Gender == "ชาย" && x.Gender == "หญิง").Sum(x => x.LeaveTotal), + agencyDayCountNo = grp.Where(x => x.Gender == "ชาย" && x.Gender == "หญิง").Sum(x => x.LeaveTotal), + coupleDayCountNo = grp.Where(x => x.Gender == "ชาย" && x.Gender == "หญิง").Sum(x => x.LeaveTotal), + therapyDayCountNo = grp.Where(x => x.Gender == "ชาย" && x.Gender == "หญิง").Sum(x => x.LeaveTotal), + }) + .ToList(); + + return res; + } + public async Task> GetCountApproveLeaveByTypeAndRange(DateTime startDate, DateTime endDate) { var data = await _dbContext.Set().AsQueryable() diff --git a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs index 44e80537..b83a19fb 100644 --- a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs @@ -139,6 +139,15 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants return data; } + public async Task> GetTimestampByDateLateAsync(string type) + { + var data = await _dbContext.Set() + .Where(x => x.CheckInStatus == "LATE") + .Where(x => x.ProfileType == type.Trim().ToUpper()) + .ToListAsync(); + return data; + } + public async Task GetLastRecord(Guid keycloakId) { var data = await _dbContext.Set() diff --git a/BMA.EHR.Application/Repositories/UserProfileRepository.cs b/BMA.EHR.Application/Repositories/UserProfileRepository.cs index 0922531c..b3148ec5 100644 --- a/BMA.EHR.Application/Repositories/UserProfileRepository.cs +++ b/BMA.EHR.Application/Repositories/UserProfileRepository.cs @@ -243,7 +243,7 @@ namespace BMA.EHR.Application.Repositories } } - public async Task> GetProfileWithKeycloakAllOfficer(string? accessToken, string? node, string? nodeId) + public async Task> GetProfileWithKeycloakAllOfficer(string? accessToken, string? node, string? nodeId) { try { @@ -260,7 +260,7 @@ namespace BMA.EHR.Application.Repositories var apiResult = await PostExternalAPIAsync(apiPath, accessToken, body, apiKey); if (apiResult != null) { - var raw = JsonConvert.DeserializeObject(apiResult); + var raw = JsonConvert.DeserializeObject(apiResult); if (raw != null) return raw.Result; } @@ -273,7 +273,7 @@ namespace BMA.EHR.Application.Repositories } } - public async Task> GetProfileWithKeycloakAllEmployee(string? accessToken, string? node, string? nodeId) + public async Task> GetProfileWithKeycloakAllEmployee(string? accessToken, string? node, string? nodeId) { try { @@ -290,7 +290,7 @@ namespace BMA.EHR.Application.Repositories var apiResult = await PostExternalAPIAsync(apiPath, accessToken, body, apiKey); if (apiResult != null) { - var raw = JsonConvert.DeserializeObject(apiResult); + var raw = JsonConvert.DeserializeObject(apiResult); if (raw != null) return raw.Result; } diff --git a/BMA.EHR.Application/Responses/Leaves/GetSumApproveLeaveByRootDto.cs b/BMA.EHR.Application/Responses/Leaves/GetSumApproveLeaveByRootDto.cs new file mode 100644 index 00000000..ac783e0b --- /dev/null +++ b/BMA.EHR.Application/Responses/Leaves/GetSumApproveLeaveByRootDto.cs @@ -0,0 +1,47 @@ +namespace BMA.EHR.Application.Responses.Leaves +{ + public class GetSumApproveLeaveByRootDto + { + public string Root { get; set; } = string.Empty; + + public Guid LeaveTypeId { get; set; } + + public string LeaveTypeCode { get; set; } = string.Empty; + + public double SumLeaveDay { get; set; } + + public double sickDayCountMale { get; set; } + public double maternityDayCountMale { get; set; } + public double wifeDayCountMale { get; set; } + public double personalDayCountMale { get; set; } + public double restDayCountMale { get; set; } + public double ordainDayCountMale { get; set; } + public double absentDayCountMale { get; set; } + public double studyDayCountMale { get; set; } + public double agencyDayCountMale { get; set; } + public double coupleDayCountMale { get; set; } + public double therapyDayCountMale { get; set; } + public double sickDayCountFemale { get; set; } + public double maternityDayCountFemale { get; set; } + public double wifeDayCountFemale { get; set; } + public double personalDayCountFemale { get; set; } + public double restDayCountFemale { get; set; } + public double ordainDayCountFemale { get; set; } + public double absentDayCountFemale { get; set; } + public double studyDayCountFemale { get; set; } + public double agencyDayCountFemale { get; set; } + public double coupleDayCountFemale { get; set; } + public double therapyDayCountFemale { get; set; } + public double sickDayCountNo { get; set; } + public double maternityDayCountNo { get; set; } + public double wifeDayCountNo { get; set; } + public double personalDayCountNo { get; set; } + public double restDayCountNo { get; set; } + public double ordainDayCountNo { get; set; } + public double absentDayCountNo { get; set; } + public double studyDayCountNo { get; set; } + public double agencyDayCountNo { get; set; } + public double coupleDayCountNo { get; set; } + public double therapyDayCountNo { get; set; } + } +} diff --git a/BMA.EHR.Application/Responses/Profiles/GetListProfileByKeycloakIdRootResultDto.cs b/BMA.EHR.Application/Responses/Profiles/GetListProfileByKeycloakIdRootResultDto.cs new file mode 100644 index 00000000..4dd09565 --- /dev/null +++ b/BMA.EHR.Application/Responses/Profiles/GetListProfileByKeycloakIdRootResultDto.cs @@ -0,0 +1,11 @@ +namespace BMA.EHR.Application.Responses.Profiles +{ + public class GetListProfileByKeycloakIdRootResultDto + { + public string Message { get; set; } = string.Empty; + + public int Status { get; set; } = -1; + + public List Result { get; set; } = new(); + } +} diff --git a/BMA.EHR.Application/Responses/Profiles/GetProfileByKeycloakIdRootDto.cs b/BMA.EHR.Application/Responses/Profiles/GetProfileByKeycloakIdRootDto.cs new file mode 100644 index 00000000..bb85f0ed --- /dev/null +++ b/BMA.EHR.Application/Responses/Profiles/GetProfileByKeycloakIdRootDto.cs @@ -0,0 +1,18 @@ +using BMA.EHR.Domain.Models.HR; + +namespace BMA.EHR.Application.Responses.Profiles +{ + public class GetProfileByKeycloakIdRootDto + { + public Guid Id { get; set; } + + public string? Prefix { get; set; } + public string? FirstName { get; set; } + public string? LastName { get; set; } + public Guid? Keycloak { get; set; } + public string? PosNo { get; set; } + public string? Position { get; set; } + public string? PositionLevel { get; set; } + public string? Oc { get; set; } + } +} diff --git a/BMA.EHR.Domain/Models/Leave/Requests/LeaveRequest.cs b/BMA.EHR.Domain/Models/Leave/Requests/LeaveRequest.cs index 23dcd177..3e3d2ef2 100644 --- a/BMA.EHR.Domain/Models/Leave/Requests/LeaveRequest.cs +++ b/BMA.EHR.Domain/Models/Leave/Requests/LeaveRequest.cs @@ -163,7 +163,9 @@ namespace BMA.EHR.Domain.Models.Leave.Requests public string? CitizenId { get; set; } - public string? Root { get; set; } + public string? Gender { get; set; } + + public string? Root { get; set; } public string? Child1 { get; set; } @@ -173,6 +175,16 @@ namespace BMA.EHR.Domain.Models.Leave.Requests public string? Child4 { get; set; } + public Guid? RootId { get; set; } + + public Guid? Child1Id { get; set; } + + public Guid? Child2Id { get; set; } + + public Guid? Child3Id { get; set; } + + public Guid? Child4Id { get; set; } + public Guid? ProfileId { get; set; } public string? ProfileType { get; set; } public double? Amount { get; set; } diff --git a/BMA.EHR.Domain/Models/Leave/TimeAttendants/ProcessUserTimeStamp.cs b/BMA.EHR.Domain/Models/Leave/TimeAttendants/ProcessUserTimeStamp.cs index b2740e2f..012d1b5f 100644 --- a/BMA.EHR.Domain/Models/Leave/TimeAttendants/ProcessUserTimeStamp.cs +++ b/BMA.EHR.Domain/Models/Leave/TimeAttendants/ProcessUserTimeStamp.cs @@ -77,5 +77,32 @@ namespace BMA.EHR.Domain.Models.Leave.TimeAttendants public string? FirstName { get; set; } public string? LastName { get; set; } + + public string? CitizenId { get; set; } + + public string? Gender { get; set; } + + public string? Root { get; set; } + + public string? Child1 { get; set; } + + public string? Child2 { get; set; } + + public string? Child3 { get; set; } + + public string? Child4 { get; set; } + + public Guid? RootId { get; set; } + + public Guid? Child1Id { get; set; } + + public Guid? Child2Id { get; set; } + + public Guid? Child3Id { get; set; } + + public Guid? Child4Id { get; set; } + + public Guid? ProfileId { get; set; } + public string? ProfileType { get; set; } } } diff --git a/BMA.EHR.Domain/Models/Leave/TimeAttendants/UserTimeStamp.cs b/BMA.EHR.Domain/Models/Leave/TimeAttendants/UserTimeStamp.cs index fb58921b..62af46c9 100644 --- a/BMA.EHR.Domain/Models/Leave/TimeAttendants/UserTimeStamp.cs +++ b/BMA.EHR.Domain/Models/Leave/TimeAttendants/UserTimeStamp.cs @@ -65,5 +65,32 @@ namespace BMA.EHR.Domain.Models.Leave.TimeAttendants public string? FirstName { get; set; } public string? LastName { get; set; } + + public string? CitizenId { get; set; } + + public string? Gender { get; set; } + + public string? Root { get; set; } + + public string? Child1 { get; set; } + + public string? Child2 { get; set; } + + public string? Child3 { get; set; } + + public string? Child4 { get; set; } + + public Guid? RootId { get; set; } + + public Guid? Child1Id { get; set; } + + public Guid? Child2Id { get; set; } + + public Guid? Child3Id { get; set; } + + public Guid? Child4Id { get; set; } + + public Guid? ProfileId { get; set; } + public string? ProfileType { get; set; } } } diff --git a/BMA.EHR.Infrastructure/Migrations/LeaveDb/20241212072757_update table leaveRequest add rootId.Designer.cs b/BMA.EHR.Infrastructure/Migrations/LeaveDb/20241212072757_update table leaveRequest add rootId.Designer.cs new file mode 100644 index 00000000..53f1336c --- /dev/null +++ b/BMA.EHR.Infrastructure/Migrations/LeaveDb/20241212072757_update table leaveRequest add rootId.Designer.cs @@ -0,0 +1,1284 @@ +// +using System; +using BMA.EHR.Infrastructure.Persistence; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace BMA.EHR.Infrastructure.Migrations.LeaveDb +{ + [DbContext(typeof(LeaveDbContext))] + [Migration("20241212072757_update table leaveRequest add rootId")] + partial class updatetableleaveRequestaddrootId + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.9") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Documents.Document", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreatedDate") + .HasColumnType("datetime(6)"); + + b.Property("Detail") + .IsRequired() + .HasColumnType("text"); + + b.Property("FileName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("FileSize") + .HasColumnType("int"); + + b.Property("FileType") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ObjectRefId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.ToTable("Document"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.Commons.LeaveType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Code") + .IsRequired() + .HasColumnType("longtext") + .HasComment("รหัสประเภทการลา"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(100) + .HasComment("สร้างข้อมูลเมื่อ"); + + b.Property("CreatedFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(104) + .HasComment("ชื่อ User ที่สร้างข้อมูล"); + + b.Property("CreatedUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(101) + .HasComment("User Id ที่สร้างข้อมูล"); + + b.Property("LastUpdateFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(105) + .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdateUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(103) + .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(102) + .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); + + b.Property("Limit") + .HasColumnType("int") + .HasComment("จำนวนวันลาสูงสุดประจำปี"); + + b.Property("Name") + .IsRequired() + .HasColumnType("longtext") + .HasComment("ชื่อประเภทการลา"); + + b.HasKey("Id"); + + b.ToTable("LeaveTypes"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.Requests.LeaveDocument", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(100) + .HasComment("สร้างข้อมูลเมื่อ"); + + b.Property("CreatedFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(104) + .HasComment("ชื่อ User ที่สร้างข้อมูล"); + + b.Property("CreatedUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(101) + .HasComment("User Id ที่สร้างข้อมูล"); + + b.Property("DocumentId") + .HasColumnType("char(36)"); + + b.Property("LastUpdateFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(105) + .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdateUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(103) + .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(102) + .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); + + b.Property("LeaveRequestId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("DocumentId"); + + b.HasIndex("LeaveRequestId"); + + b.ToTable("LeaveDocuments"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.Requests.LeaveRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("AbsentDayAt") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("AbsentDayGetIn") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("AbsentDayLocation") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("AbsentDayRegistorDate") + .HasColumnType("datetime(6)"); + + b.Property("AbsentDaySummon") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Amount") + .HasColumnType("double"); + + b.Property("ApproveStep") + .HasColumnType("longtext") + .HasComment("step การอนุมัติ st1 = จทน.อนุมัตื,st2 = ผู้บังคับบัญชา อนุมัติ "); + + b.Property("BirthDate") + .HasColumnType("datetime(6)"); + + b.Property("CancelLeaveWrote") + .HasColumnType("longtext") + .HasComment("เขียนที่ (ขอยกเลิก)"); + + b.Property("Child1") + .HasColumnType("longtext"); + + b.Property("Child1Id") + .HasColumnType("char(36)"); + + b.Property("Child2") + .HasColumnType("longtext"); + + b.Property("Child2Id") + .HasColumnType("char(36)"); + + b.Property("Child3") + .HasColumnType("longtext"); + + b.Property("Child3Id") + .HasColumnType("char(36)"); + + b.Property("Child4") + .HasColumnType("longtext"); + + b.Property("Child4Id") + .HasColumnType("char(36)"); + + b.Property("CitizenId") + .HasColumnType("longtext"); + + b.Property("CoupleDayCountryHistory") + .HasColumnType("longtext"); + + b.Property("CoupleDayEndDateHistory") + .HasColumnType("datetime(6)"); + + b.Property("CoupleDayLevel") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CoupleDayLevelCountry") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CoupleDayName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CoupleDayPosition") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CoupleDayStartDateHistory") + .HasColumnType("datetime(6)"); + + b.Property("CoupleDaySumTotalHistory") + .HasColumnType("longtext"); + + b.Property("CoupleDayTotalHistory") + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(100) + .HasComment("สร้างข้อมูลเมื่อ"); + + b.Property("CreatedFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(104) + .HasComment("ชื่อ User ที่สร้างข้อมูล"); + + b.Property("CreatedUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(101) + .HasComment("User Id ที่สร้างข้อมูล"); + + b.Property("DateAppoint") + .HasColumnType("datetime(6)"); + + b.Property("Dear") + .HasColumnType("longtext") + .HasComment("เรียนใคร"); + + b.Property("FirstName") + .HasColumnType("longtext"); + + b.Property("Gender") + .HasColumnType("longtext"); + + b.Property("HajjDayStatus") + .HasColumnType("tinyint(1)"); + + b.Property("KeycloakUserId") + .HasColumnType("char(36)"); + + b.Property("LastName") + .HasColumnType("longtext"); + + b.Property("LastUpdateFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(105) + .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdateUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(103) + .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(102) + .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); + + b.Property("LeaveAddress") + .IsRequired() + .HasColumnType("longtext") + .HasComment("สถานที่ติดต่อขณะลา"); + + b.Property("LeaveBirthDate") + .HasColumnType("datetime(6)"); + + b.Property("LeaveCancelComment") + .HasColumnType("longtext") + .HasComment("เหตุผลในการขอยกเลิก"); + + b.Property("LeaveCancelDocumentId") + .HasColumnType("char(36)"); + + b.Property("LeaveCancelStatus") + .HasColumnType("longtext") + .HasComment("สถานะของคำขอยกเลิก"); + + b.Property("LeaveComment") + .HasColumnType("longtext") + .HasComment("ความเห็นของผู้บังคับบัญชา"); + + b.Property("LeaveDetail") + .IsRequired() + .HasColumnType("longtext") + .HasComment("รายละเอียดการลา"); + + b.Property("LeaveDirectorComment") + .HasColumnType("longtext") + .HasComment("ความเห็นของผู้อำนวยการสำนัก"); + + b.Property("LeaveDraftDocumentId") + .HasColumnType("char(36)"); + + b.Property("LeaveEndDate") + .HasColumnType("datetime(6)") + .HasComment("วัน เดือน ปีสิ้นสุดลา"); + + b.Property("LeaveGovernmentDate") + .HasColumnType("datetime(6)"); + + b.Property("LeaveLast") + .HasColumnType("datetime(6)"); + + b.Property("LeaveNumber") + .IsRequired() + .HasColumnType("longtext") + .HasComment("หมายเลขที่ติดต่อขณะลา"); + + b.Property("LeaveRange") + .HasColumnType("longtext") + .HasComment("ช่วงของการลา เช่น ลาทั้งวัน ครึ่งวันเช้า ครึ่งวันบ่าย"); + + b.Property("LeaveSalary") + .HasColumnType("int"); + + b.Property("LeaveSalaryText") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("LeaveStartDate") + .HasColumnType("datetime(6)") + .HasComment("วัน เดือน ปีเริ่มต้นลา"); + + b.Property("LeaveStatus") + .IsRequired() + .HasColumnType("longtext") + .HasComment("สถานะของคำร้อง"); + + b.Property("LeaveTotal") + .HasColumnType("double"); + + b.Property("LeaveTypeCode") + .HasColumnType("longtext") + .HasComment("code ของประเภทการลา"); + + b.Property("LeaveWrote") + .IsRequired() + .HasColumnType("longtext") + .HasComment("เขียนที่"); + + b.Property("OrdainDayBuddhistLentAddress") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("OrdainDayBuddhistLentName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("OrdainDayLocationAddress") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("OrdainDayLocationName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("OrdainDayLocationNumber") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("OrdainDayOrdination") + .HasColumnType("datetime(6)"); + + b.Property("OrdainDayStatus") + .HasColumnType("tinyint(1)"); + + b.Property("OrganizationName") + .HasColumnType("longtext") + .HasComment("สังกัดผู้ยื่นขอ"); + + b.Property("PositionLevelName") + .HasColumnType("longtext") + .HasComment("ระดับผู้ยื่นขอ"); + + b.Property("PositionName") + .HasColumnType("longtext") + .HasComment("ตำแหน่งผู้ยื่นขอ"); + + b.Property("Prefix") + .HasColumnType("longtext"); + + b.Property("ProfileId") + .HasColumnType("char(36)"); + + b.Property("ProfileType") + .HasColumnType("longtext"); + + b.Property("RestDayCurrentTotal") + .HasColumnType("double"); + + b.Property("RestDayOldTotal") + .HasColumnType("double"); + + b.Property("Root") + .HasColumnType("longtext"); + + b.Property("RootId") + .HasColumnType("char(36)"); + + b.Property("StudyDayCountry") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StudyDayDegreeLevel") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StudyDayScholarship") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StudyDaySubject") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StudyDayTrainingName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StudyDayTrainingSubject") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("StudyDayUniversityName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("TypeId") + .HasColumnType("char(36)"); + + b.Property("WifeDayDateBorn") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("WifeDayName") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("LeaveCancelDocumentId"); + + b.HasIndex("LeaveDraftDocumentId"); + + b.HasIndex("TypeId"); + + b.ToTable("LeaveRequests"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.AdditionalCheckRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CheckDate") + .HasColumnType("datetime(6)") + .HasComment("*วันที่ลงเวลา"); + + b.Property("CheckInEdit") + .HasColumnType("tinyint(1)") + .HasComment("*ขอลงเวลาช่วงเช้า"); + + b.Property("CheckOutEdit") + .HasColumnType("tinyint(1)") + .HasComment("*ขอลงเวลาช่วงบ่าย"); + + b.Property("Comment") + .HasColumnType("longtext") + .HasComment("หมายเหตุในการการอนุมัติ/ไม่อนุมัติ"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(100) + .HasComment("สร้างข้อมูลเมื่อ"); + + b.Property("CreatedFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(104) + .HasComment("ชื่อ User ที่สร้างข้อมูล"); + + b.Property("CreatedUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(101) + .HasComment("User Id ที่สร้างข้อมูล"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext") + .HasComment("*หมายเหตุขอลงเวลาพิเศษ"); + + b.Property("FirstName") + .HasColumnType("longtext"); + + b.Property("KeycloakUserId") + .HasColumnType("char(36)") + .HasComment("รหัส User ของ Keycloak ที่ร้องขอ"); + + b.Property("LastName") + .HasColumnType("longtext"); + + b.Property("LastUpdateFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(105) + .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdateUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(103) + .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(102) + .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); + + b.Property("Prefix") + .HasColumnType("longtext"); + + b.Property("Status") + .IsRequired() + .HasColumnType("longtext") + .HasComment("สถานะการอนุมัติ"); + + b.HasKey("Id"); + + b.ToTable("AdditionalCheckRequests"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.DutyTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(100) + .HasComment("สร้างข้อมูลเมื่อ"); + + b.Property("CreatedFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(104) + .HasComment("ชื่อ User ที่สร้างข้อมูล"); + + b.Property("CreatedUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(101) + .HasComment("User Id ที่สร้างข้อมูล"); + + b.Property("Description") + .IsRequired() + .HasColumnType("longtext") + .HasComment("คำอธิบาย"); + + b.Property("EndTimeAfternoon") + .IsRequired() + .HasColumnType("longtext") + .HasComment("เวลาออกงานช่วงบ่าย"); + + b.Property("EndTimeMorning") + .IsRequired() + .HasColumnType("longtext") + .HasComment("เวลาออกงานช่วงเช้า"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)") + .HasComment("สถานะการเปิดใช้งาน (เปิด/ปิด)"); + + b.Property("IsDefault") + .HasColumnType("tinyint(1)") + .HasComment("สถานะว่ารอบใดเป็นค่า Default ของข้าราชการ (สำหรับทุกคนที่ยังไม่ได้ทำการเลือกรอบ)"); + + b.Property("LastUpdateFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(105) + .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdateUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(103) + .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(102) + .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); + + b.Property("StartTimeAfternoon") + .IsRequired() + .HasColumnType("longtext") + .HasComment("เวลาเข้างานช่วงบ่าย"); + + b.Property("StartTimeMorning") + .IsRequired() + .HasColumnType("longtext") + .HasComment("เวลาเข้างานช่วงเช้า"); + + b.HasKey("Id"); + + b.ToTable("DutyTimes"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.ProcessUserTimeStamp", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CheckIn") + .HasColumnType("datetime(6)") + .HasComment("วัน เวลา เข้างาน"); + + b.Property("CheckInImageUrl") + .IsRequired() + .HasColumnType("longtext") + .HasComment("รูปถ่ายสถานที่ Check-In"); + + b.Property("CheckInLat") + .HasColumnType("double") + .HasComment("พิกัดละติจูด Check-In"); + + b.Property("CheckInLocationName") + .HasColumnType("longtext") + .HasComment("กรณีเลือกนอกสถานที่ตั้ง ต้องระบุข้อมูลชื่อสถานะที่ Check-In"); + + b.Property("CheckInLon") + .HasColumnType("double") + .HasComment("พิกัดลองจิจูด Check-In"); + + b.Property("CheckInPOI") + .IsRequired() + .HasColumnType("longtext") + .HasComment("ชื่อสถานที่ ได้มาจากระบบ ArcGis ของกองสารสนเทศภูมิศาสตร์ Check-In"); + + b.Property("CheckInRemark") + .HasColumnType("longtext") + .HasComment("ข้อความหมายเหตุที่ต้องการระบุเพิ่ม(มีเผื่อไว้อาจไม่ได้ใช้) Check-In"); + + b.Property("CheckInStatus") + .IsRequired() + .HasColumnType("longtext") + .HasComment("สถานะ Check-In"); + + b.Property("CheckOut") + .HasColumnType("datetime(6)") + .HasComment("วัน เวลา ออกงาน"); + + b.Property("CheckOutImageUrl") + .IsRequired() + .HasColumnType("longtext") + .HasComment("รูปถ่ายสถานที่ Check-Out"); + + b.Property("CheckOutLat") + .HasColumnType("double") + .HasComment("พิกัดละติจูด Check-Out"); + + b.Property("CheckOutLocationName") + .HasColumnType("longtext") + .HasComment("กรณีเลือกนอกสถานที่ตั้ง ต้องระบุข้อมูลชื่อสถานะที่ Check-Out"); + + b.Property("CheckOutLon") + .HasColumnType("double") + .HasComment("พิกัดลองจิจูด Check-Out"); + + b.Property("CheckOutPOI") + .IsRequired() + .HasColumnType("longtext") + .HasComment("ชื่อสถานที่ ได้มาจากระบบ ArcGis ของกองสารสนเทศภูมิศาสตร์ Check-Out"); + + b.Property("CheckOutRemark") + .HasColumnType("longtext") + .HasComment("ข้อความหมายเหตุที่ต้องการระบุเพิ่ม(มีเผื่อไว้อาจไม่ได้ใช้) Check-Out"); + + b.Property("CheckOutStatus") + .HasColumnType("longtext") + .HasComment("สถานะ Check-Out"); + + b.Property("Child1") + .HasColumnType("longtext"); + + b.Property("Child1Id") + .HasColumnType("char(36)"); + + b.Property("Child2") + .HasColumnType("longtext"); + + b.Property("Child2Id") + .HasColumnType("char(36)"); + + b.Property("Child3") + .HasColumnType("longtext"); + + b.Property("Child3Id") + .HasColumnType("char(36)"); + + b.Property("Child4") + .HasColumnType("longtext"); + + b.Property("Child4Id") + .HasColumnType("char(36)"); + + b.Property("CitizenId") + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(100) + .HasComment("สร้างข้อมูลเมื่อ"); + + b.Property("CreatedFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(104) + .HasComment("ชื่อ User ที่สร้างข้อมูล"); + + b.Property("CreatedUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(101) + .HasComment("User Id ที่สร้างข้อมูล"); + + b.Property("EditReason") + .HasColumnType("longtext") + .HasComment("เหตุผลการอนุมัติ/ไม่อนุมัติขอลงเวลาพิเศษ"); + + b.Property("EditStatus") + .HasColumnType("longtext") + .HasComment("สถานะการของลงเวลาพิเศษ"); + + b.Property("FirstName") + .HasColumnType("longtext"); + + b.Property("Gender") + .HasColumnType("longtext"); + + b.Property("IsLocationCheckIn") + .HasColumnType("tinyint(1)") + .HasComment("true คือ ณ สถานที่ตั้ง, false คือ นอกสถานที่ตั้ง Check-In"); + + b.Property("IsLocationCheckOut") + .HasColumnType("tinyint(1)") + .HasComment("true คือ ณ สถานที่ตั้ง, false คือ นอกสถานที่ตั้ง Check-Out"); + + b.Property("IsProcess") + .HasColumnType("tinyint(1)") + .HasComment("นำไปประมวลผลแล้วหรือยัง"); + + b.Property("KeycloakUserId") + .HasColumnType("char(36)") + .HasComment("รหัส User ของ Keycloak"); + + b.Property("LastName") + .HasColumnType("longtext"); + + b.Property("LastUpdateFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(105) + .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdateUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(103) + .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(102) + .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); + + b.Property("Prefix") + .HasColumnType("longtext"); + + b.Property("ProfileId") + .HasColumnType("char(36)"); + + b.Property("ProfileType") + .HasColumnType("longtext"); + + b.Property("Root") + .HasColumnType("longtext"); + + b.Property("RootId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.ToTable("ProcessUserTimeStamps"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.UserCalendar", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Calendar") + .IsRequired() + .HasColumnType("longtext") + .HasComment("ปฏิทินการทำงานของ ขรก ปกติ หรือ 6 วันต่อสัปดาห์"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(100) + .HasComment("สร้างข้อมูลเมื่อ"); + + b.Property("CreatedFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(104) + .HasComment("ชื่อ User ที่สร้างข้อมูล"); + + b.Property("CreatedUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(101) + .HasComment("User Id ที่สร้างข้อมูล"); + + b.Property("LastUpdateFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(105) + .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdateUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(103) + .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(102) + .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); + + b.Property("ProfileId") + .HasColumnType("char(36)") + .HasComment("รหัส Profile ในระบบทะเบียนประวัติ"); + + b.HasKey("Id"); + + b.ToTable("UserCalendars"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.UserDutyTime", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(100) + .HasComment("สร้างข้อมูลเมื่อ"); + + b.Property("CreatedFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(104) + .HasComment("ชื่อ User ที่สร้างข้อมูล"); + + b.Property("CreatedUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(101) + .HasComment("User Id ที่สร้างข้อมูล"); + + b.Property("DutyTimeId") + .HasColumnType("char(36)") + .HasComment("รหัสรอบการลงเวลา"); + + b.Property("EffectiveDate") + .HasColumnType("datetime(6)") + .HasComment("วันที่มีผล"); + + b.Property("IsProcess") + .HasColumnType("tinyint(1)") + .HasComment("ทำการประมวลผลแล้วหรือยัง"); + + b.Property("LastUpdateFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(105) + .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdateUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(103) + .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(102) + .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); + + b.Property("ProfileId") + .HasColumnType("char(36)") + .HasComment("รหัส Profile ในระบบทะเบียนประวัติ"); + + b.Property("Remark") + .HasColumnType("longtext") + .HasComment("หมายเหตุ"); + + b.HasKey("Id"); + + b.HasIndex("DutyTimeId"); + + b.ToTable("UserDutyTimes"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.UserTimeStamp", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("CheckIn") + .HasColumnType("datetime(6)") + .HasComment("วัน เวลา เข้างาน"); + + b.Property("CheckInImageUrl") + .IsRequired() + .HasColumnType("longtext") + .HasComment("รูปถ่ายสถานที่ Check-In"); + + b.Property("CheckInLat") + .HasColumnType("double") + .HasComment("พิกัดละติจูด Check-In"); + + b.Property("CheckInLocationName") + .HasColumnType("longtext") + .HasComment("กรณีเลือกนอกสถานที่ตั้ง ต้องระบุข้อมูลชื่อสถานะที่ Check-In"); + + b.Property("CheckInLon") + .HasColumnType("double") + .HasComment("พิกัดลองจิจูด Check-In"); + + b.Property("CheckInPOI") + .IsRequired() + .HasColumnType("longtext") + .HasComment("ชื่อสถานที่ ได้มาจากระบบ ArcGis ของกองสารสนเทศภูมิศาสตร์ Check-In"); + + b.Property("CheckInRemark") + .HasColumnType("longtext") + .HasComment("ข้อความหมายเหตุที่ต้องการระบุเพิ่ม(มีเผื่อไว้อาจไม่ได้ใช้) Check-In"); + + b.Property("CheckOut") + .HasColumnType("datetime(6)") + .HasComment("วัน เวลา ออกงาน"); + + b.Property("CheckOutImageUrl") + .IsRequired() + .HasColumnType("longtext") + .HasComment("รูปถ่ายสถานที่ Check-Out"); + + b.Property("CheckOutLat") + .HasColumnType("double") + .HasComment("พิกัดละติจูด Check-Out"); + + b.Property("CheckOutLocationName") + .HasColumnType("longtext") + .HasComment("กรณีเลือกนอกสถานที่ตั้ง ต้องระบุข้อมูลชื่อสถานะที่ Check-Out"); + + b.Property("CheckOutLon") + .HasColumnType("double") + .HasComment("พิกัดลองจิจูด Check-Out"); + + b.Property("CheckOutPOI") + .IsRequired() + .HasColumnType("longtext") + .HasComment("ชื่อสถานที่ ได้มาจากระบบ ArcGis ของกองสารสนเทศภูมิศาสตร์ Check-Out"); + + b.Property("CheckOutRemark") + .HasColumnType("longtext") + .HasComment("ข้อความหมายเหตุที่ต้องการระบุเพิ่ม(มีเผื่อไว้อาจไม่ได้ใช้) Check-Out"); + + b.Property("Child1") + .HasColumnType("longtext"); + + b.Property("Child1Id") + .HasColumnType("char(36)"); + + b.Property("Child2") + .HasColumnType("longtext"); + + b.Property("Child2Id") + .HasColumnType("char(36)"); + + b.Property("Child3") + .HasColumnType("longtext"); + + b.Property("Child3Id") + .HasColumnType("char(36)"); + + b.Property("Child4") + .HasColumnType("longtext"); + + b.Property("Child4Id") + .HasColumnType("char(36)"); + + b.Property("CitizenId") + .HasColumnType("longtext"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(100) + .HasComment("สร้างข้อมูลเมื่อ"); + + b.Property("CreatedFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(104) + .HasComment("ชื่อ User ที่สร้างข้อมูล"); + + b.Property("CreatedUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(101) + .HasComment("User Id ที่สร้างข้อมูล"); + + b.Property("FirstName") + .HasColumnType("longtext"); + + b.Property("Gender") + .HasColumnType("longtext"); + + b.Property("IsLocationCheckIn") + .HasColumnType("tinyint(1)") + .HasComment("true คือ ณ สถานที่ตั้ง, false คือ นอกสถานที่ตั้ง Check-In"); + + b.Property("IsLocationCheckOut") + .HasColumnType("tinyint(1)") + .HasComment("true คือ ณ สถานที่ตั้ง, false คือ นอกสถานที่ตั้ง Check-Out"); + + b.Property("IsProcess") + .HasColumnType("tinyint(1)") + .HasComment("นำไปประมวลผลแล้วหรือยัง"); + + b.Property("KeycloakUserId") + .HasColumnType("char(36)") + .HasComment("รหัส User ของ Keycloak"); + + b.Property("LastName") + .HasColumnType("longtext"); + + b.Property("LastUpdateFullName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)") + .HasColumnOrder(105) + .HasComment("ชื่อ User ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdateUserId") + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnOrder(103) + .HasComment("User Id ที่แก้ไขข้อมูลล่าสุด"); + + b.Property("LastUpdatedAt") + .HasColumnType("datetime(6)") + .HasColumnOrder(102) + .HasComment("แก้ไขข้อมูลล่าสุดเมื่อ"); + + b.Property("Prefix") + .HasColumnType("longtext"); + + b.Property("ProfileId") + .HasColumnType("char(36)"); + + b.Property("ProfileType") + .HasColumnType("longtext"); + + b.Property("Root") + .HasColumnType("longtext"); + + b.Property("RootId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.ToTable("UserTimeStamps"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.Requests.LeaveDocument", b => + { + b.HasOne("BMA.EHR.Domain.Models.Documents.Document", "Document") + .WithMany() + .HasForeignKey("DocumentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("BMA.EHR.Domain.Models.Leave.Requests.LeaveRequest", "LeaveRequest") + .WithMany("LeaveDocument") + .HasForeignKey("LeaveRequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Document"); + + b.Navigation("LeaveRequest"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.Requests.LeaveRequest", b => + { + b.HasOne("BMA.EHR.Domain.Models.Documents.Document", "LeaveCancelDocument") + .WithMany() + .HasForeignKey("LeaveCancelDocumentId"); + + b.HasOne("BMA.EHR.Domain.Models.Documents.Document", "LeaveDraftDocument") + .WithMany() + .HasForeignKey("LeaveDraftDocumentId"); + + b.HasOne("BMA.EHR.Domain.Models.Leave.Commons.LeaveType", "Type") + .WithMany() + .HasForeignKey("TypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LeaveCancelDocument"); + + b.Navigation("LeaveDraftDocument"); + + b.Navigation("Type"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.TimeAttendants.UserDutyTime", b => + { + b.HasOne("BMA.EHR.Domain.Models.Leave.TimeAttendants.DutyTime", "DutyTime") + .WithMany() + .HasForeignKey("DutyTimeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DutyTime"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.Requests.LeaveRequest", b => + { + b.Navigation("LeaveDocument"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/BMA.EHR.Infrastructure/Migrations/LeaveDb/20241212072757_update table leaveRequest add rootId.cs b/BMA.EHR.Infrastructure/Migrations/LeaveDb/20241212072757_update table leaveRequest add rootId.cs new file mode 100644 index 00000000..fb224d10 --- /dev/null +++ b/BMA.EHR.Infrastructure/Migrations/LeaveDb/20241212072757_update table leaveRequest add rootId.cs @@ -0,0 +1,393 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace BMA.EHR.Infrastructure.Migrations.LeaveDb +{ + /// + public partial class updatetableleaveRequestaddrootId : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "Child1", + table: "UserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Child1Id", + table: "UserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Child2", + table: "UserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Child2Id", + table: "UserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Child3", + table: "UserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Child3Id", + table: "UserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Child4", + table: "UserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Child4Id", + table: "UserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "CitizenId", + table: "UserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Gender", + table: "UserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "ProfileId", + table: "UserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "ProfileType", + table: "UserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Root", + table: "UserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "RootId", + table: "UserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Child1", + table: "ProcessUserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Child1Id", + table: "ProcessUserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Child2", + table: "ProcessUserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Child2Id", + table: "ProcessUserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Child3", + table: "ProcessUserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Child3Id", + table: "ProcessUserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Child4", + table: "ProcessUserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Child4Id", + table: "ProcessUserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "CitizenId", + table: "ProcessUserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Gender", + table: "ProcessUserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "ProfileId", + table: "ProcessUserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "ProfileType", + table: "ProcessUserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "Root", + table: "ProcessUserTimeStamps", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "RootId", + table: "ProcessUserTimeStamps", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Child1Id", + table: "LeaveRequests", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Child2Id", + table: "LeaveRequests", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Child3Id", + table: "LeaveRequests", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Child4Id", + table: "LeaveRequests", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + + migrationBuilder.AddColumn( + name: "Gender", + table: "LeaveRequests", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "RootId", + table: "LeaveRequests", + type: "char(36)", + nullable: true, + collation: "ascii_general_ci"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "Child1", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child1Id", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child2", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child2Id", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child3", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child3Id", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child4", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child4Id", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "CitizenId", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Gender", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "ProfileId", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "ProfileType", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Root", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "RootId", + table: "UserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child1", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child1Id", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child2", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child2Id", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child3", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child3Id", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child4", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child4Id", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "CitizenId", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Gender", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "ProfileId", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "ProfileType", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Root", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "RootId", + table: "ProcessUserTimeStamps"); + + migrationBuilder.DropColumn( + name: "Child1Id", + table: "LeaveRequests"); + + migrationBuilder.DropColumn( + name: "Child2Id", + table: "LeaveRequests"); + + migrationBuilder.DropColumn( + name: "Child3Id", + table: "LeaveRequests"); + + migrationBuilder.DropColumn( + name: "Child4Id", + table: "LeaveRequests"); + + migrationBuilder.DropColumn( + name: "Gender", + table: "LeaveRequests"); + + migrationBuilder.DropColumn( + name: "RootId", + table: "LeaveRequests"); + } + } +} diff --git a/BMA.EHR.Infrastructure/Migrations/LeaveDb/LeaveDbContextModelSnapshot.cs b/BMA.EHR.Infrastructure/Migrations/LeaveDb/LeaveDbContextModelSnapshot.cs index 758eb595..13e6f633 100644 --- a/BMA.EHR.Infrastructure/Migrations/LeaveDb/LeaveDbContextModelSnapshot.cs +++ b/BMA.EHR.Infrastructure/Migrations/LeaveDb/LeaveDbContextModelSnapshot.cs @@ -226,15 +226,27 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb b.Property("Child1") .HasColumnType("longtext"); + b.Property("Child1Id") + .HasColumnType("char(36)"); + b.Property("Child2") .HasColumnType("longtext"); + b.Property("Child2Id") + .HasColumnType("char(36)"); + b.Property("Child3") .HasColumnType("longtext"); + b.Property("Child3Id") + .HasColumnType("char(36)"); + b.Property("Child4") .HasColumnType("longtext"); + b.Property("Child4Id") + .HasColumnType("char(36)"); + b.Property("CitizenId") .HasColumnType("longtext"); @@ -298,6 +310,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb b.Property("FirstName") .HasColumnType("longtext"); + b.Property("Gender") + .HasColumnType("longtext"); + b.Property("HajjDayStatus") .HasColumnType("tinyint(1)"); @@ -464,6 +479,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb b.Property("Root") .HasColumnType("longtext"); + b.Property("RootId") + .HasColumnType("char(36)"); + b.Property("StudyDayCountry") .IsRequired() .HasColumnType("longtext"); @@ -768,6 +786,33 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb .HasColumnType("longtext") .HasComment("สถานะ Check-Out"); + b.Property("Child1") + .HasColumnType("longtext"); + + b.Property("Child1Id") + .HasColumnType("char(36)"); + + b.Property("Child2") + .HasColumnType("longtext"); + + b.Property("Child2Id") + .HasColumnType("char(36)"); + + b.Property("Child3") + .HasColumnType("longtext"); + + b.Property("Child3Id") + .HasColumnType("char(36)"); + + b.Property("Child4") + .HasColumnType("longtext"); + + b.Property("Child4Id") + .HasColumnType("char(36)"); + + b.Property("CitizenId") + .HasColumnType("longtext"); + b.Property("CreatedAt") .HasColumnType("datetime(6)") .HasColumnOrder(100) @@ -798,6 +843,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb b.Property("FirstName") .HasColumnType("longtext"); + b.Property("Gender") + .HasColumnType("longtext"); + b.Property("IsLocationCheckIn") .HasColumnType("tinyint(1)") .HasComment("true คือ ณ สถานที่ตั้ง, false คือ นอกสถานที่ตั้ง Check-In"); @@ -839,6 +887,18 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb b.Property("Prefix") .HasColumnType("longtext"); + b.Property("ProfileId") + .HasColumnType("char(36)"); + + b.Property("ProfileType") + .HasColumnType("longtext"); + + b.Property("Root") + .HasColumnType("longtext"); + + b.Property("RootId") + .HasColumnType("char(36)"); + b.HasKey("Id"); b.ToTable("ProcessUserTimeStamps"); @@ -1048,6 +1108,33 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb .HasColumnType("longtext") .HasComment("ข้อความหมายเหตุที่ต้องการระบุเพิ่ม(มีเผื่อไว้อาจไม่ได้ใช้) Check-Out"); + b.Property("Child1") + .HasColumnType("longtext"); + + b.Property("Child1Id") + .HasColumnType("char(36)"); + + b.Property("Child2") + .HasColumnType("longtext"); + + b.Property("Child2Id") + .HasColumnType("char(36)"); + + b.Property("Child3") + .HasColumnType("longtext"); + + b.Property("Child3Id") + .HasColumnType("char(36)"); + + b.Property("Child4") + .HasColumnType("longtext"); + + b.Property("Child4Id") + .HasColumnType("char(36)"); + + b.Property("CitizenId") + .HasColumnType("longtext"); + b.Property("CreatedAt") .HasColumnType("datetime(6)") .HasColumnOrder(100) @@ -1070,6 +1157,9 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb b.Property("FirstName") .HasColumnType("longtext"); + b.Property("Gender") + .HasColumnType("longtext"); + b.Property("IsLocationCheckIn") .HasColumnType("tinyint(1)") .HasComment("true คือ ณ สถานที่ตั้ง, false คือ นอกสถานที่ตั้ง Check-In"); @@ -1111,6 +1201,18 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb b.Property("Prefix") .HasColumnType("longtext"); + b.Property("ProfileId") + .HasColumnType("char(36)"); + + b.Property("ProfileType") + .HasColumnType("longtext"); + + b.Property("Root") + .HasColumnType("longtext"); + + b.Property("RootId") + .HasColumnType("char(36)"); + b.HasKey("Id"); b.ToTable("UserTimeStamps"); diff --git a/BMA.EHR.Leave/Controllers/LeaveController.cs b/BMA.EHR.Leave/Controllers/LeaveController.cs index a6066505..f437ba26 100644 --- a/BMA.EHR.Leave/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveController.cs @@ -635,14 +635,11 @@ namespace BMA.EHR.Leave.Service.Controllers // validate duplicate check in var currentCheckIn = await _userTimeStampRepository.GetTimestampByDateAsync(userId, currentDate); - - if (currentCheckIn != null) { return Error(new Exception("ไม่สามารถลงเวลาได้ เนื่องจากมีการลงเวลาในวันนี้แล้ว!"), StatusCodes.Status400BadRequest); } - var checkin = new UserTimeStamp { KeycloakUserId = userId, @@ -657,6 +654,23 @@ namespace BMA.EHR.Leave.Service.Controllers Prefix = profile.Prefix, FirstName = profile.FirstName, LastName = profile.LastName, + CitizenId = profile.CitizenId, + + Root = profile.Root, + Child1 = profile.Child1, + Child2 = profile.Child2, + Child3 = profile.Child3, + Child4 = profile.Child4, + + RootId = profile.RootId, + Child1Id = profile.Child1Id, + Child2Id = profile.Child2Id, + Child3Id = profile.Child3Id, + Child4Id = profile.Child4Id, + Gender = profile.Gender, + + ProfileId = profile.Id, + ProfileType = profile.ProfileType, }; var checkInStatus = DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm")) > @@ -684,6 +698,23 @@ namespace BMA.EHR.Leave.Service.Controllers Prefix = profile.Prefix, FirstName = profile.FirstName, LastName = profile.LastName, + CitizenId = profile.CitizenId, + + Root = profile.Root, + Child1 = profile.Child1, + Child2 = profile.Child2, + Child3 = profile.Child3, + Child4 = profile.Child4, + + RootId = profile.RootId, + Child1Id = profile.Child1Id, + Child2Id = profile.Child2Id, + Child3Id = profile.Child3Id, + Child4Id = profile.Child4Id, + Gender = profile.Gender, + + ProfileId = profile.Id, + ProfileType = profile.ProfileType, }; await _userTimeStampRepository.AddAsync(checkin); diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 6ddd0997..281bd911 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -740,7 +740,7 @@ namespace BMA.EHR.Leave.Service.Controllers /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน - [HttpPost("leaveday/{type:string}")] + [HttpPost("leaveday/{type}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] @@ -754,7 +754,7 @@ namespace BMA.EHR.Leave.Service.Controllers { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } - var profile = new List(); + var profile = new List(); if (type.Trim().ToUpper() == "OFFICER") { profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficer(AccessToken, req.node, req.nodeId); @@ -763,10 +763,6 @@ namespace BMA.EHR.Leave.Service.Controllers { profile = await _userProfileRepository.GetProfileWithKeycloakAllEmployee(AccessToken, req.node, req.nodeId); } - if (profile.Count > 0) - { - profile = profile.Where(p => p.IsLeave == false).ToList(); - } // get leave day var leaveDays = await _leaveRequestRepository.GetSumApproveLeaveByTypeAndRange(req.StartDate, req.EndDate); var leaveTypes = await _leaveTypeRepository.GetAllAsync(); @@ -891,16 +887,33 @@ namespace BMA.EHR.Leave.Service.Controllers count++; } + var text = ""; + if (req.Type.Trim().ToUpper() == "FULL") + { + text = "หนึ่งปี"; + } + else if (req.Type.Trim().ToUpper() == "HAFT") + { + text = "ครึ่งปี"; + } + else if (req.Type.Trim().ToUpper() == "MONTH") + { + text = "หนึ่งเดือน"; + } + var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}"; var result = new { - template = type.Trim().ToUpper() == "OFFICER" ? "LeaveHalfYear-ขรก" : "LeaveHalfYear-ลูกจ้าง", - reportName = type.Trim().ToUpper() == "OFFICER" ? "LeaveHalfYear-Officer" : "LeaveHalfYear-Employee", + template = "LeaveHalfYear-Officer", + reportName = "LeaveHalfYear-Officer", data = new { leaveDateStart = req.StartDate.Date.ToThaiShortDate().ToThaiNumber(), leaveDateEnd = req.EndDate.Date.ToThaiShortDate().ToThaiNumber(), - organizationName = profile.First().Oc ?? "", - employees = employees + dateTimeStamp = $"ณ วันที่ {req.StartDate.Date.ToThaiShortDate().ToThaiNumber()}{enddate}", + organizationName = profile?.FirstOrDefault()?.Oc ?? "", + employees = employees, + headerText = type.Trim().ToUpper() == "OFFICER" ? "ข้าราชการสามัญ" : "ลูกจ้างประจำ", + text = text } }; @@ -920,7 +933,7 @@ namespace BMA.EHR.Leave.Service.Controllers /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน - [HttpPost("time-records/{type:string}")] + [HttpPost("time-records/{type}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] @@ -934,7 +947,7 @@ namespace BMA.EHR.Leave.Service.Controllers { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } - var profile = new List(); + var profile = new List(); if (type.Trim().ToUpper() == "OFFICER") { profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficer(AccessToken, req.node, req.nodeId); @@ -943,10 +956,6 @@ namespace BMA.EHR.Leave.Service.Controllers { profile = await _userProfileRepository.GetProfileWithKeycloakAllEmployee(AccessToken, req.node, req.nodeId); } - if (profile.Count > 0) - { - profile = profile.Where(p => p.IsLeave == false).ToList(); - } var date = req.StartDate.Date; var holidays = await _holidayRepository.GetHolidayAsync(req.StartDate.Date, req.EndDate.Date); @@ -1075,7 +1084,6 @@ namespace BMA.EHR.Leave.Service.Controllers timeStamps.CheckOut != null ? $"{timeStamps.CheckOut.Value.ToString("HH:mm")} น." : "", - //remark = timeStamps == null ? "ขาดราชการ" : "", remark = remarkStr, @@ -1096,8 +1104,6 @@ namespace BMA.EHR.Leave.Service.Controllers else if (timeStamps.CheckInLocationName == "ไปประชุม/อบรม/สัมมนา/ปฏิบัติงานที่บ้านนอกสถานที่") seminarTotal += 1; } - - } @@ -1126,9 +1132,10 @@ namespace BMA.EHR.Leave.Service.Controllers } + var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}"; var item = new { - DateTimeStamp = req.StartDate.Date.ToThaiFullDate().ToThaiNumber() + "-" + req.EndDate.Date.ToThaiFullDate().ToThaiNumber(), + dateTimeStamp = $"ณ วันที่ {req.StartDate.Date.ToThaiShortDate().ToThaiNumber()}{enddate}", officerTotal = profile.Count, workTotal = workTotal, restTotal = restTotal, @@ -1163,7 +1170,7 @@ namespace BMA.EHR.Leave.Service.Controllers /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน - [HttpPost("late/{type:string}")] + [HttpPost("late/{type}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] @@ -1177,155 +1184,63 @@ namespace BMA.EHR.Leave.Service.Controllers { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } - var profile = new List(); - if (type.Trim().ToUpper() == "OFFICER") - { - profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficer(AccessToken, req.node, req.nodeId); - } - else - { - profile = await _userProfileRepository.GetProfileWithKeycloakAllEmployee(AccessToken, req.node, req.nodeId); - } - if (profile.Count > 0) - { - profile = profile.Where(p => p.IsLeave == false).ToList(); - } - // get leave day - var leaveDays = await _leaveRequestRepository.GetSumApproveLeaveByTypeAndRange(req.StartDate, req.EndDate); - var leaveTypes = await _leaveTypeRepository.GetAllAsync(); - var count = 1; var employees = new List(); + var count = 1; - foreach (var p in profile) + var userTimeStamps = await _processUserTimeStampRepository.GetTimestampByDateLateAsync(type.Trim().ToUpper()); + foreach (var p in userTimeStamps) { - var keycloakUserId = p.Keycloak ?? Guid.Empty; + var fullName = $"{p.Prefix}{p.FirstName} {p.LastName}"; - var sickDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-001"); - var sickDayCount = sickDay != null ? sickDay.SumLeaveDay : 0; - - var personalDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-002"); - var personalDayCount = personalDay != null ? personalDay.SumLeaveDay : 0; - - var maternityDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-003"); - var maternityDayCount = maternityDay != null ? maternityDay.SumLeaveDay : 0; - - var wifeDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-004"); - var wifeDayCount = wifeDay != null ? wifeDay.SumLeaveDay : 0; - - var restDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-005"); - var restDayCount = restDay != null ? restDay.SumLeaveDay : 0; - - var ordainDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-006"); - var ordainDayCount = ordainDay != null ? ordainDay.SumLeaveDay : 0; - - var absentDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-007"); - var absentDayCount = absentDay != null ? absentDay.SumLeaveDay : 0; - - var studyDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-008"); - var studyDayCount = studyDay != null ? studyDay.SumLeaveDay : 0; - - var agencyDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-009"); - var agencyDayCount = agencyDay != null ? agencyDay.SumLeaveDay : 0; - - var coupleDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-010"); - var coupleDayCount = coupleDay != null ? coupleDay.SumLeaveDay : 0; - - var therapyDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-011"); - var therapyDayCount = therapyDay != null ? therapyDay.SumLeaveDay : 0; - - var timeStamps = await _processUserTimeStampRepository.GetTimeStampHistoryByRangeForUserAsync(p.Keycloak ?? Guid.Empty, - req.StartDate, - req.EndDate); - - var defaultRound = await _dutyTimeRepository.GetDefaultAsync(); - if (defaultRound == null) - { - return Error("ไม่พบรอบการลงเวลา Default", StatusCodes.Status404NotFound); - } - - //var userRound = await _dutyTimeRepository.GetByIdAsync(profile.DutyTimeId ?? Guid.Empty); var effectiveDate = await _userDutyTimeRepository.GetLastEffectRound(p.Id); var roundId = effectiveDate != null ? effectiveDate.DutyTimeId : Guid.Empty; var userRound = await _dutyTimeRepository.GetByIdAsync(roundId); - var duty = userRound ?? defaultRound; - - var processTimeStamps = timeStamps - .Select(d => new + var duty = userRound; + if (duty == null) { - d.Id, - CheckInStatus = DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > - DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? - "LATE" : - "NORMAL", - CheckOutStatus = d.CheckOut == null ? "" : - DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < - DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ? - "LATE" : - DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < - DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? - "ABSENT" : - "NORMAL", - }); - - var absentCount = processTimeStamps.Count(x => x.CheckOutStatus == "ABSENT"); - var lateCount = processTimeStamps.Count(x => x.CheckInStatus == "LATE"); + duty = await _dutyTimeRepository.GetDefaultAsync(); + if (duty == null) + { + return Error("ไม่พบรอบการลงเวลา Default", StatusCodes.Status404NotFound); + } + } var emp = new { no = count, - fullName = $"{p.Prefix}{p.FirstName} {p.LastName}",// _userProfileRepository.GetUserFullName(p.Keycloak ?? Guid.Empty, AccessToken), - position = p.Position == null ? "" : p.Position, - //positionLevel = p.PosLevel == null ? "" : p.PosLevel, - //posNo = p.ProfileSalary == null ? "" : p.ProfileSalary.PosNo, - positionLevel = p.PositionLevel == null ? "" : p.PositionLevel, - posNo = p.PosNo == null ? "" : p.PosNo, - reason = "", - - sickDayCount = sickDayCount, - maternityDayCount = maternityDayCount, - wifeDayCount = wifeDayCount, - personalDayCount = personalDayCount, - restDayCount = restDayCount, - ordainDayCount = ordainDayCount, - absentDayCount = absentDayCount, - studyDayCount = studyDayCount, - agencyDayCount = agencyDayCount, - coupleDayCount = coupleDayCount, - therapyDayCount = therapyDayCount, - absentTotal = absentCount, - lateTotal = lateCount, - - leaveTotal = sickDayCount + - maternityDayCount + - wifeDayCount + - personalDayCount + - restDayCount + - ordainDayCount + - absentDayCount + - studyDayCount + - agencyDayCount + - coupleDayCount + - therapyDayCount + fullName = fullName, + dutyTimeName = $"{duty.StartTimeMorning} - {duty.EndTimeAfternoon} น.", + checkInLocation = p.CheckInPOI, + checkInTime = $"{p.CheckIn.ToString("HH:mm")} น.", + checkOutLocation = p.CheckOutPOI ?? "", + checkOutTime = p.CheckOut != null ? + $"{p.CheckOut.Value.ToString("HH:mm")} น." : + "", + remark = "", + checkInDate = p.CheckIn.Date.ToThaiFullDate2().ToThaiNumber(), + checkedOutDate = p.CheckOut != null ? + p.CheckOut.Value.ToThaiFullDate2().ToThaiNumber() : + "", }; - employees.Add(emp); count++; } + var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}"; + var item = new + { + dateTimeStamp = $"ณ วันที่ {req.StartDate.Date.ToThaiShortDate().ToThaiNumber()}{enddate}", + // officerTotal = profile.Count, + employees = employees + }; + var result = new { - template = "LeaveHalfYear-Officer", - reportName = "LeaveHalfYear-Officer", - data = new - { - leaveDateStart = req.StartDate.Date.ToThaiShortDate().ToThaiNumber(), - leaveDateEnd = req.EndDate.Date.ToThaiShortDate().ToThaiNumber(), - organizationName = profile.First().Oc ?? "", - employees = employees, - headerText = type.Trim().ToUpper() == "OFFICER" ? "ข้าราชการสามัญ" : "ลูกจ้างประจำ" - } + template = "TimeStamp-Day", + reportName = "TimeStamp-Day", + data = item }; return Success(result); @@ -1344,7 +1259,7 @@ namespace BMA.EHR.Leave.Service.Controllers /// เมื่อทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน - [HttpPost("leave2/{type:string}")] + [HttpPost("leave2/{type}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] @@ -1358,153 +1273,17 @@ namespace BMA.EHR.Leave.Service.Controllers { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } - var profile = new List(); - if (type.Trim().ToUpper() == "OFFICER") - { - profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficer(AccessToken, req.node, req.nodeId); - } - else - { - profile = await _userProfileRepository.GetProfileWithKeycloakAllEmployee(AccessToken, req.node, req.nodeId); - } - if (profile.Count > 0) - { - profile = profile.Where(p => p.IsLeave == false).ToList(); - } - // get leave day - var leaveDays = await _leaveRequestRepository.GetSumApproveLeaveByTypeAndRange(req.StartDate, req.EndDate); - var leaveTypes = await _leaveTypeRepository.GetAllAsync(); - - var count = 1; - var employees = new List(); - - foreach (var p in profile) - { - var keycloakUserId = p.Keycloak ?? Guid.Empty; - - var sickDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-001"); - var sickDayCount = sickDay != null ? sickDay.SumLeaveDay : 0; - - var personalDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-002"); - var personalDayCount = personalDay != null ? personalDay.SumLeaveDay : 0; - - var maternityDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-003"); - var maternityDayCount = maternityDay != null ? maternityDay.SumLeaveDay : 0; - - var wifeDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-004"); - var wifeDayCount = wifeDay != null ? wifeDay.SumLeaveDay : 0; - - var restDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-005"); - var restDayCount = restDay != null ? restDay.SumLeaveDay : 0; - - var ordainDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-006"); - var ordainDayCount = ordainDay != null ? ordainDay.SumLeaveDay : 0; - - var absentDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-007"); - var absentDayCount = absentDay != null ? absentDay.SumLeaveDay : 0; - - var studyDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-008"); - var studyDayCount = studyDay != null ? studyDay.SumLeaveDay : 0; - - var agencyDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-009"); - var agencyDayCount = agencyDay != null ? agencyDay.SumLeaveDay : 0; - - var coupleDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-010"); - var coupleDayCount = coupleDay != null ? coupleDay.SumLeaveDay : 0; - - var therapyDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-011"); - var therapyDayCount = therapyDay != null ? therapyDay.SumLeaveDay : 0; - - var timeStamps = await _processUserTimeStampRepository.GetTimeStampHistoryByRangeForUserAsync(p.Keycloak ?? Guid.Empty, - req.StartDate, - req.EndDate); - - var defaultRound = await _dutyTimeRepository.GetDefaultAsync(); - if (defaultRound == null) - { - return Error("ไม่พบรอบการลงเวลา Default", StatusCodes.Status404NotFound); - } - - //var userRound = await _dutyTimeRepository.GetByIdAsync(profile.DutyTimeId ?? Guid.Empty); - var effectiveDate = await _userDutyTimeRepository.GetLastEffectRound(p.Id); - var roundId = effectiveDate != null ? effectiveDate.DutyTimeId : Guid.Empty; - var userRound = await _dutyTimeRepository.GetByIdAsync(roundId); - - var duty = userRound ?? defaultRound; - - var processTimeStamps = timeStamps - .Select(d => new - { - d.Id, - CheckInStatus = DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > - DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? - "LATE" : - "NORMAL", - CheckOutStatus = d.CheckOut == null ? "" : - DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < - DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ? - "LATE" : - DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < - DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ? - "ABSENT" : - "NORMAL", - }); - - var absentCount = processTimeStamps.Count(x => x.CheckOutStatus == "ABSENT"); - var lateCount = processTimeStamps.Count(x => x.CheckInStatus == "LATE"); - - var emp = new - { - no = count, - fullName = $"{p.Prefix}{p.FirstName} {p.LastName}",// _userProfileRepository.GetUserFullName(p.Keycloak ?? Guid.Empty, AccessToken), - position = p.Position == null ? "" : p.Position, - //positionLevel = p.PosLevel == null ? "" : p.PosLevel, - //posNo = p.ProfileSalary == null ? "" : p.ProfileSalary.PosNo, - positionLevel = p.PositionLevel == null ? "" : p.PositionLevel, - posNo = p.PosNo == null ? "" : p.PosNo, - reason = "", - - sickDayCount = sickDayCount, - maternityDayCount = maternityDayCount, - wifeDayCount = wifeDayCount, - personalDayCount = personalDayCount, - restDayCount = restDayCount, - ordainDayCount = ordainDayCount, - absentDayCount = absentDayCount, - studyDayCount = studyDayCount, - agencyDayCount = agencyDayCount, - coupleDayCount = coupleDayCount, - therapyDayCount = therapyDayCount, - absentTotal = absentCount, - lateTotal = lateCount, - - leaveTotal = sickDayCount + - maternityDayCount + - wifeDayCount + - personalDayCount + - restDayCount + - ordainDayCount + - absentDayCount + - studyDayCount + - agencyDayCount + - coupleDayCount + - therapyDayCount - }; - - employees.Add(emp); - count++; - } - + var leaveDays = await _leaveRequestRepository.GetSumApproveLeaveByRootAndRange(req.StartDate, req.EndDate, type); + var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}"; var result = new { - template = type.Trim().ToUpper() == "OFFICER" ? "LeaveHalfYear-ขรก" : "LeaveHalfYear-ลูกจ้าง", - reportName = type.Trim().ToUpper() == "OFFICER" ? "LeaveHalfYear-Officer" : "LeaveHalfYear-Employee", + template = "LeaveHalfYear-Officer", + reportName = "LeaveHalfYear-Officer", data = new { - leaveDateStart = req.StartDate.Date.ToThaiShortDate().ToThaiNumber(), + leaveDateStart = $"ณ วันที่ {req.StartDate.Date.ToThaiShortDate().ToThaiNumber()}{enddate}", leaveDateEnd = req.EndDate.Date.ToThaiShortDate().ToThaiNumber(), - organizationName = profile.First().Oc ?? "", - employees = employees + employees = leaveDays } }; diff --git a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs index 35b5d0e0..e4f61d3d 100644 --- a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs @@ -196,6 +196,13 @@ namespace BMA.EHR.Leave.Service.Controllers Child3 = profile.Child3, Child4 = profile.Child4, + RootId = profile.RootId, + Child1Id = profile.Child1Id, + Child2Id = profile.Child2Id, + Child3Id = profile.Child3Id, + Child4Id = profile.Child4Id, + Gender = profile.Gender, + ProfileId = profile.Id, ProfileType = profile.ProfileType, Amount = profile.Amount, diff --git a/BMA.EHR.Leave/DTOs/Reports/GetLeaveDetailByNodeReportDto.cs b/BMA.EHR.Leave/DTOs/Reports/GetLeaveDetailByNodeReportDto.cs index 3081f355..0cc08245 100644 --- a/BMA.EHR.Leave/DTOs/Reports/GetLeaveDetailByNodeReportDto.cs +++ b/BMA.EHR.Leave/DTOs/Reports/GetLeaveDetailByNodeReportDto.cs @@ -3,9 +3,8 @@ namespace BMA.EHR.Leave.Service.DTOs.Reports public class GetLeaveDetailByNodeReportDto { public DateTime StartDate { get; set; } = DateTime.MinValue; - public DateTime EndDate { get; set; } = DateTime.MinValue; - + public string? Type { get; set; } = string.Empty; public string? node { get; set; } = string.Empty; public string? nodeId { get; set; } = string.Empty; } diff --git a/BMA.EHR.Leave/Properties/launchSettings.json b/BMA.EHR.Leave/Properties/launchSettings.json index c52ef5ae..13588e36 100644 --- a/BMA.EHR.Leave/Properties/launchSettings.json +++ b/BMA.EHR.Leave/Properties/launchSettings.json @@ -8,7 +8,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, - "applicationUrl": "https://localhost:7283;http://localhost:5028" + "applicationUrl": "https://localhost:7283;http://localhost:5254" }, "http": { "commandName": "Project", @@ -18,7 +18,7 @@ "ASPNETCORE_ENVIRONMENT": "Development" }, "dotnetRunMessages": true, - "applicationUrl": "http://localhost:5028" + "applicationUrl": "http://localhost:5254" }, "IIS Express": { "commandName": "IISExpress",