From 0a58075428a1f647411dbc31bb7b6c4d3f0c9103 Mon Sep 17 00:00:00 2001 From: harid Date: Thu, 11 Dec 2025 21:27:18 +0700 Subject: [PATCH 01/17] =?UTF-8?q?migrate=20+=20api=20=E0=B8=9A=E0=B8=B1?= =?UTF-8?q?=E0=B8=99=E0=B8=97=E0=B8=B6=E0=B8=81=E0=B8=9C=E0=B8=B9=E0=B9=89?= =?UTF-8?q?=E0=B8=95=E0=B8=A3=E0=B8=A7=E0=B8=88=E0=B8=AA=E0=B8=AD=E0=B8=9A?= =?UTF-8?q?=E0=B9=81=E0=B8=A5=E0=B8=B0=E0=B8=AA=E0=B9=88=E0=B8=87=E0=B9=84?= =?UTF-8?q?=E0=B8=9B=E0=B8=9E=E0=B8=B4=E0=B8=88=E0=B8=B2=E0=B8=93=E0=B8=B2?= =?UTF-8?q?=20#2109?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LeaveRequests/LeaveRequestRepository.cs | 16 +- .../Leave/Requests/LeaveRequestApprover.cs | 4 + ...questApprover_add_PositionSign.Designer.cs | 1597 +++++++++++++++++ ...e_LeaveRequestApprover_add_PositionSign.cs | 30 + .../LeaveDb/LeaveDbContextModelSnapshot.cs | 4 + .../Controllers/LeaveRequestController.cs | 70 + .../GetLeaveRequestForAdminByIdDto.cs | 2 + .../LeaveRequest/LeaveRequestApproverDto.cs | 3 + 8 files changed, 1722 insertions(+), 4 deletions(-) create mode 100644 BMA.EHR.Infrastructure/Migrations/LeaveDb/20251211080157_update_LeaveRequestApprover_add_PositionSign.Designer.cs create mode 100644 BMA.EHR.Infrastructure/Migrations/LeaveDb/20251211080157_update_LeaveRequestApprover_add_PositionSign.cs diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index 6223d786..f71f5e15 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -955,7 +955,9 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests approver.ApproveStatus = "APPROVE"; approver.Comment = reason; - + approver.LastUpdateFullName = FullName ?? ""; + approver.LastUpdateUserId = userId.ToString("D"); + approver.LastUpdatedAt = DateTime.Now; //await _dbContext.SaveChangesAsync(); if (approver.Seq != maxSeq) @@ -1045,7 +1047,9 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests approver.ApproveStatus = "REJECT"; approver.Comment = reason; - + approver.LastUpdateFullName = FullName ?? ""; + approver.LastUpdateUserId = userId.ToString("D"); + approver.LastUpdatedAt = DateTime.Now; if (approver.Seq != maxSeq) { @@ -1141,7 +1145,9 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests approver.ApproveStatus = "APPROVE"; approver.Comment = reason; - + approver.LastUpdateFullName = FullName ?? ""; + approver.LastUpdateUserId = userId.ToString("D"); + approver.LastUpdatedAt = DateTime.Now; if (approver.Seq != maxSeq) { var nextApprover = approvers.FirstOrDefault(x => x.Seq == approver.Seq + 1); @@ -1294,7 +1300,9 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests approver.ApproveStatus = "REJECT"; approver.Comment = reason; - + approver.LastUpdateFullName = FullName ?? ""; + approver.LastUpdateUserId = userId.ToString("D"); + approver.LastUpdatedAt = DateTime.Now; if (approver.Seq != maxSeq) { var nextApprover = approvers.FirstOrDefault(x => x.Seq == approver.Seq + 1); diff --git a/BMA.EHR.Domain/Models/Leave/Requests/LeaveRequestApprover.cs b/BMA.EHR.Domain/Models/Leave/Requests/LeaveRequestApprover.cs index 11b1b719..10e7175d 100644 --- a/BMA.EHR.Domain/Models/Leave/Requests/LeaveRequestApprover.cs +++ b/BMA.EHR.Domain/Models/Leave/Requests/LeaveRequestApprover.cs @@ -1,4 +1,5 @@ using BMA.EHR.Domain.Models.Base; +using Microsoft.EntityFrameworkCore; namespace BMA.EHR.Domain.Models.Leave.Requests { @@ -16,6 +17,9 @@ namespace BMA.EHR.Domain.Models.Leave.Requests public string PositionName { get; set; } = string.Empty; + [Comment("ตำแหน่งใต้ลายเช็นต์")] + public string? PositionSign { get; set; } = string.Empty; + public Guid ProfileId { get; set; } = Guid.Empty; public Guid KeycloakId { get; set; } = Guid.Empty; diff --git a/BMA.EHR.Infrastructure/Migrations/LeaveDb/20251211080157_update_LeaveRequestApprover_add_PositionSign.Designer.cs b/BMA.EHR.Infrastructure/Migrations/LeaveDb/20251211080157_update_LeaveRequestApprover_add_PositionSign.Designer.cs new file mode 100644 index 00000000..d62357c4 --- /dev/null +++ b/BMA.EHR.Infrastructure/Migrations/LeaveDb/20251211080157_update_LeaveRequestApprover_add_PositionSign.Designer.cs @@ -0,0 +1,1597 @@ +// +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("20251211080157_update_LeaveRequestApprover_add_PositionSign")] + partial class update_LeaveRequestApprover_add_PositionSign + { + /// + 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.LeaveBeginning", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("Child1DnaId") + .HasColumnType("char(36)"); + + b.Property("Child2DnaId") + .HasColumnType("char(36)"); + + b.Property("Child3DnaId") + .HasColumnType("char(36)"); + + b.Property("Child4DnaId") + .HasColumnType("char(36)"); + + 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("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("LeaveDays") + .HasColumnType("double") + .HasComment("จำนวนวันลายกมา"); + + b.Property("LeaveDaysUsed") + .HasColumnType("double") + .HasComment("จำนวนวันลาที่ใช้ไป"); + + b.Property("LeaveTypeId") + .HasColumnType("char(36)") + .HasComment("รหัสประเภทการลา"); + + b.Property("LeaveYear") + .HasColumnType("int") + .HasComment("ปีงบประมาณ"); + + b.Property("Prefix") + .HasColumnType("longtext"); + + b.Property("ProfileId") + .HasColumnType("char(36)") + .HasComment("รหัส Profile ในระบบทะเบียนประวัติ"); + + b.Property("RootDnaId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("LeaveTypeId"); + + b.ToTable("LeaveBeginnings"); + }); + + 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("Child1DnaId") + .HasColumnType("char(36)"); + + b.Property("Child1Id") + .HasColumnType("char(36)"); + + b.Property("Child2") + .HasColumnType("longtext"); + + b.Property("Child2DnaId") + .HasColumnType("char(36)"); + + b.Property("Child2Id") + .HasColumnType("char(36)"); + + b.Property("Child3") + .HasColumnType("longtext"); + + b.Property("Child3DnaId") + .HasColumnType("char(36)"); + + b.Property("Child3Id") + .HasColumnType("char(36)"); + + b.Property("Child4") + .HasColumnType("longtext"); + + b.Property("Child4DnaId") + .HasColumnType("char(36)"); + + b.Property("Child4Id") + .HasColumnType("char(36)"); + + b.Property("CitizenId") + .HasColumnType("longtext"); + + b.Property("CommanderPosition") + .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("LeaveRangeEnd") + .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("LeaveSubTypeName") + .HasColumnType("longtext"); + + 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("RootDnaId") + .HasColumnType("char(36)"); + + 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.Requests.LeaveRequestApprover", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)") + .HasColumnOrder(0) + .HasComment("PrimaryKey") + .HasAnnotation("Relational:JsonPropertyName", "id"); + + b.Property("ApproveStatus") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ApproveType") + .HasColumnType("longtext"); + + b.Property("Comment") + .IsRequired() + .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") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("KeycloakId") + .HasColumnType("char(36)"); + + b.Property("LastName") + .IsRequired() + .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("LeaveRequestId") + .HasColumnType("char(36)"); + + b.Property("PositionName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("PositionSign") + .HasColumnType("longtext") + .HasComment("ตำแหน่งใต้ลายเช็นต์"); + + b.Property("Prefix") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProfileId") + .HasColumnType("char(36)"); + + b.Property("Seq") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("LeaveRequestId"); + + b.ToTable("LeaveRequestApprovers"); + }); + + 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("Child1DnaId") + .HasColumnType("char(36)"); + + b.Property("Child2DnaId") + .HasColumnType("char(36)"); + + b.Property("Child3DnaId") + .HasColumnType("char(36)"); + + b.Property("Child4DnaId") + .HasColumnType("char(36)"); + + 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("Latitude") + .HasColumnType("double"); + + b.Property("Longitude") + .HasColumnType("double"); + + b.Property("POI") + .HasColumnType("longtext"); + + b.Property("Prefix") + .HasColumnType("longtext"); + + b.Property("RootDnaId") + .HasColumnType("char(36)"); + + 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("Child1DnaId") + .HasColumnType("char(36)"); + + b.Property("Child1Id") + .HasColumnType("char(36)"); + + b.Property("Child2") + .HasColumnType("longtext"); + + b.Property("Child2DnaId") + .HasColumnType("char(36)"); + + b.Property("Child2Id") + .HasColumnType("char(36)"); + + b.Property("Child3") + .HasColumnType("longtext"); + + b.Property("Child3DnaId") + .HasColumnType("char(36)"); + + b.Property("Child3Id") + .HasColumnType("char(36)"); + + b.Property("Child4") + .HasColumnType("longtext"); + + b.Property("Child4DnaId") + .HasColumnType("char(36)"); + + 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("RootDnaId") + .HasColumnType("char(36)"); + + 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("Child1DnaId") + .HasColumnType("char(36)"); + + b.Property("Child2DnaId") + .HasColumnType("char(36)"); + + b.Property("Child3DnaId") + .HasColumnType("char(36)"); + + b.Property("Child4DnaId") + .HasColumnType("char(36)"); + + 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.Property("RootDnaId") + .HasColumnType("char(36)"); + + 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("Child1DnaId") + .HasColumnType("char(36)"); + + b.Property("Child1Id") + .HasColumnType("char(36)"); + + b.Property("Child2") + .HasColumnType("longtext"); + + b.Property("Child2DnaId") + .HasColumnType("char(36)"); + + b.Property("Child2Id") + .HasColumnType("char(36)"); + + b.Property("Child3") + .HasColumnType("longtext"); + + b.Property("Child3DnaId") + .HasColumnType("char(36)"); + + b.Property("Child3Id") + .HasColumnType("char(36)"); + + b.Property("Child4") + .HasColumnType("longtext"); + + b.Property("Child4DnaId") + .HasColumnType("char(36)"); + + 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("RootDnaId") + .HasColumnType("char(36)"); + + b.Property("RootId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.ToTable("UserTimeStamps"); + }); + + modelBuilder.Entity("BMA.EHR.Domain.Models.Leave.Requests.LeaveBeginning", b => + { + b.HasOne("BMA.EHR.Domain.Models.Leave.Commons.LeaveType", "LeaveType") + .WithMany() + .HasForeignKey("LeaveTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LeaveType"); + }); + + 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.Requests.LeaveRequestApprover", b => + { + b.HasOne("BMA.EHR.Domain.Models.Leave.Requests.LeaveRequest", "LeaveRequest") + .WithMany("Approvers") + .HasForeignKey("LeaveRequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("LeaveRequest"); + }); + + 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("Approvers"); + + b.Navigation("LeaveDocument"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/BMA.EHR.Infrastructure/Migrations/LeaveDb/20251211080157_update_LeaveRequestApprover_add_PositionSign.cs b/BMA.EHR.Infrastructure/Migrations/LeaveDb/20251211080157_update_LeaveRequestApprover_add_PositionSign.cs new file mode 100644 index 00000000..80797914 --- /dev/null +++ b/BMA.EHR.Infrastructure/Migrations/LeaveDb/20251211080157_update_LeaveRequestApprover_add_PositionSign.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace BMA.EHR.Infrastructure.Migrations.LeaveDb +{ + /// + public partial class update_LeaveRequestApprover_add_PositionSign : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "PositionSign", + table: "LeaveRequestApprovers", + type: "longtext", + nullable: true, + comment: "ตำแหน่งใต้ลายเช็นต์") + .Annotation("MySql:CharSet", "utf8mb4"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "PositionSign", + table: "LeaveRequestApprovers"); + } + } +} diff --git a/BMA.EHR.Infrastructure/Migrations/LeaveDb/LeaveDbContextModelSnapshot.cs b/BMA.EHR.Infrastructure/Migrations/LeaveDb/LeaveDbContextModelSnapshot.cs index 3077d37b..c0a77c10 100644 --- a/BMA.EHR.Infrastructure/Migrations/LeaveDb/LeaveDbContextModelSnapshot.cs +++ b/BMA.EHR.Infrastructure/Migrations/LeaveDb/LeaveDbContextModelSnapshot.cs @@ -731,6 +731,10 @@ namespace BMA.EHR.Infrastructure.Migrations.LeaveDb .IsRequired() .HasColumnType("longtext"); + b.Property("PositionSign") + .HasColumnType("longtext") + .HasComment("ตำแหน่งใต้ลายเช็นต์"); + b.Property("Prefix") .IsRequired() .HasColumnType("longtext"); diff --git a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs index da9ceb43..1177b31e 100644 --- a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs @@ -159,6 +159,7 @@ namespace BMA.EHR.Leave.Service.Controllers FirstName = r.FirstName, LastName = r.LastName, PositionName = r.PositionName, + PositionSign = r.PositionSign, ProfileId = r.ProfileId, KeycloakId = r.KeycloakId, ApproveStatus = "PENDING", @@ -1944,6 +1945,73 @@ namespace BMA.EHR.Leave.Service.Controllers return Success(result); } + + /// + /// เพิ่มชื่อผู้ส่งไปพิจารณา (ADMIN) + /// + /// + /// + /// เมื่อทำรายการสำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("admin/sender/{id:guid}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> SenderLeaveRequestAsync(Guid id) + { + var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); + var jsonData = JsonConvert.DeserializeObject(getPermission); + if (jsonData["status"]?.ToString() != "200") + { + return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); + } + + var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(Guid.Parse(UserId!), AccessToken); + + if (profile == null) + { + return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); + } + + var rawData = await _leaveRequestRepository.GetByIdAsync(id); + + if (rawData == null) + { + return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); + } + + var sender = rawData.Approvers + .Where(x => x.ApproveType!.ToUpper() == "SENDER") + .FirstOrDefault(); + + if (sender == null) + { + await _leaveRequestRepository.AddApproversAsync(id, new List + { + new LeaveRequestApprover + { + Prefix = profile.Prefix, + FirstName = profile.FirstName, + LastName = profile.LastName, + PositionName = profile.Position, + ProfileId = profile.Id, + KeycloakId = Guid.Parse(UserId!), + ApproveType = "SENDER", + + CreatedFullName = FullName ?? "", + CreatedUserId = UserId!, + CreatedAt = DateTime.Now, + LastUpdateFullName = FullName ?? "", + LastUpdateUserId = UserId!, + LastUpdatedAt = DateTime.Now, + } + }); + } + + return Success(); + } + /// /// LV2_018 - ผู้มีอำนาจอนุมัติขอยกเลิกการลา(ADMIN) /// @@ -2460,6 +2528,7 @@ namespace BMA.EHR.Leave.Service.Controllers FirstName = x.FirstName, LastName = x.LastName, PositionName = x.PositionName, + PositionSign = x.PositionSign, ApproveStatus = x.ApproveStatus, Comment = x.Comment, ProfileId = x.ProfileId, @@ -2474,6 +2543,7 @@ namespace BMA.EHR.Leave.Service.Controllers FirstName = x.FirstName, LastName = x.LastName, PositionName = x.PositionName, + PositionSign = x.PositionSign, ApproveStatus = x.ApproveStatus, Comment = x.Comment, ProfileId = x.ProfileId, diff --git a/BMA.EHR.Leave/DTOs/LeaveRequest/GetLeaveRequestForAdminByIdDto.cs b/BMA.EHR.Leave/DTOs/LeaveRequest/GetLeaveRequestForAdminByIdDto.cs index eaf81698..88dfe7da 100644 --- a/BMA.EHR.Leave/DTOs/LeaveRequest/GetLeaveRequestForAdminByIdDto.cs +++ b/BMA.EHR.Leave/DTOs/LeaveRequest/GetLeaveRequestForAdminByIdDto.cs @@ -161,6 +161,8 @@ namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest public string PositionName { get; set; } = string.Empty; + public string PositionSign { get; set; } = string.Empty; + public Guid ProfileId { get; set; } = Guid.Empty; public Guid KeycloakId { get; set; } = Guid.Empty; diff --git a/BMA.EHR.Leave/DTOs/LeaveRequest/LeaveRequestApproverDto.cs b/BMA.EHR.Leave/DTOs/LeaveRequest/LeaveRequestApproverDto.cs index 57a70e8d..21c2a216 100644 --- a/BMA.EHR.Leave/DTOs/LeaveRequest/LeaveRequestApproverDto.cs +++ b/BMA.EHR.Leave/DTOs/LeaveRequest/LeaveRequestApproverDto.cs @@ -19,6 +19,9 @@ namespace BMA.EHR.Leave.Service.DTOs.LeaveRequest [JsonProperty("positionName")] public string PositionName { get; set; } = string.Empty; + [JsonProperty("positionSign")] + public string? PositionSign { get; set; } = string.Empty; + [JsonProperty("profileId")] public Guid ProfileId { get; set; } = Guid.Empty; From ec04665f39fb600cb305bf45241048dd4316cf03 Mon Sep 17 00:00:00 2001 From: kittapath <> Date: Fri, 12 Dec 2025 01:36:06 +0700 Subject: [PATCH 02/17] add permission brother --- .../LeaveRequests/LeaveRequestRepository.cs | 31 +- .../AdditionalCheckRequestRepository.cs | 6 + .../ProcessUserTimeStampRepository.cs | 18 +- .../TimeAttendants/UserTimeStampRepository.cs | 6 + .../DisciplineComplaint_AppealController.cs | 17 + .../Controllers/InsigniaManageController.cs | 34 ++ .../Controllers/LeaveBeginningController.cs | 25 +- BMA.EHR.Leave/Controllers/LeaveController.cs | 60 ++++ .../Controllers/LeaveReportController.cs | 68 +++- .../Controllers/LeaveRequestController.cs | 40 ++- .../PlacementAppointmentController.cs | 17 + .../PlacementAppointmentEmployeeController.cs | 17 + .../Controllers/PlacementOfficerController.cs | 17 + .../Controllers/PlacementReceiveController.cs | 17 + .../PlacementRepatriationController.cs | 17 + .../PlacementTransferController.cs | 17 + .../RetirementDeceasedController.cs | 17 + .../Controllers/RetirementOtherController.cs | 17 + .../Controllers/RetirementOutController.cs | 17 + .../Controllers/RetirementResignController.cs | 293 +++--------------- .../RetirementResignEmployeeController.cs | 286 +++-------------- 21 files changed, 546 insertions(+), 491 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index f71f5e15..ce22cd23 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -289,6 +289,11 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests rawData = rawData .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + rawData = rawData + .Where(x => node == 4 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { rawData = rawData @@ -398,6 +403,11 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests rawData = rawData .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))); } + else if (role == "BROTHER") + { + rawData = rawData + .Where(x => node == 4 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true))))); + } else if (role == "ROOT") { rawData = rawData @@ -575,6 +585,11 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests rawData = rawData .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))); } + else if (role == "BROTHER") + { + rawData = rawData + .Where(x => node == 4 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true))))); + } else if (role == "ROOT") { rawData = rawData @@ -875,7 +890,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests // fix: If no commander, skip notification if (firstCommander != null) - { + { // Send Notification var noti1 = new Notification { @@ -1112,7 +1127,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests .Where(x => x.ApproveType!.ToUpper() == "COMMANDER") .OrderBy(x => x.Seq) .ToList(); - if(commanders.Count > 0 || commanders != null) + if (commanders.Count > 0 || commanders != null) { if (rawData.ApproveStep != "st3") { @@ -1594,6 +1609,16 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests node == null ? true : true ).ToList(); } + else if (role == "BROTHER") + { + data = data.Where(x => + node == 4 ? x.Child3DnaId == Guid.Parse(nodeId) : + node == 3 ? x.Child2DnaId == Guid.Parse(nodeId) : + node == 2 ? x.Child1DnaId == Guid.Parse(nodeId) : + node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId) : + node == null ? true : true + ).ToList(); + } else if (role == "ROOT") { data = data.Where(x => x.RootDnaId == Guid.Parse(nodeId)).ToList(); @@ -1614,7 +1639,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests ).ToList(); } // กรองตามที่ fe ส่งมา - if (role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT") + if (role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "BROTHER" || role == "PARENT") { data = data .Where(x => nodeByReq == 4 ? x.Child4Id == Guid.Parse(nodeIdByReq) : nodeByReq == 3 ? x.Child3Id == Guid.Parse(nodeIdByReq) : nodeByReq == 2 ? x.Child2Id == Guid.Parse(nodeIdByReq) : nodeByReq == 1 ? x.Child1Id == Guid.Parse(nodeIdByReq) : nodeByReq == 0 ? x.RootId == Guid.Parse(nodeIdByReq) : true) diff --git a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs index 68d4f32a..04c0c921 100644 --- a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs @@ -160,6 +160,12 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))) .ToList(); } + else if (role == "BROTHER") + { + data = data + .Where(x => node == 4 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true))))) + .ToList(); + } else if (role == "ROOT") { data = data diff --git a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs index bc517b13..64d32a19 100644 --- a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/ProcessUserTimeStampRepository.cs @@ -158,6 +158,16 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants node == null ? true : true ).ToList(); } + else if (role == "BROTHER") + { + data = data.Where(x => + node == 4 ? x.Child3DnaId == Guid.Parse(nodeId) : + node == 3 ? x.Child2DnaId == Guid.Parse(nodeId) : + node == 2 ? x.Child1DnaId == Guid.Parse(nodeId) : + node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId) : + node == null ? true : true + ).ToList(); + } else if (role == "ROOT") { data = data.Where(x => x.RootDnaId == Guid.Parse(nodeId)).ToList(); @@ -178,7 +188,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants ).ToList(); } // กรองตามที่ fe ส่งมา - if (role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT") + if (role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "BROTHER" || role == "PARENT") { data = data.Where(x => nodeByReq == 4 ? x.Child4Id == Guid.Parse(nodeIdByReq) : @@ -266,6 +276,12 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))) .ToList(); } + else if (role == "BROTHER") + { + data = data + .Where(x => node == 4 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true))))) + .ToList(); + } else if (role == "ROOT") { data = data diff --git a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/UserTimeStampRepository.cs b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/UserTimeStampRepository.cs index a5415537..b7a766e9 100644 --- a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/UserTimeStampRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/UserTimeStampRepository.cs @@ -124,6 +124,12 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))) .ToList(); } + else if (role == "BROTHER") + { + data = data + .Where(x => node == 4 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true))))) + .ToList(); + } else if (role == "ROOT") { data = data diff --git a/BMA.EHR.Discipline.Service/Controllers/DisciplineComplaint_AppealController.cs b/BMA.EHR.Discipline.Service/Controllers/DisciplineComplaint_AppealController.cs index bd5e3134..a9d14a71 100644 --- a/BMA.EHR.Discipline.Service/Controllers/DisciplineComplaint_AppealController.cs +++ b/BMA.EHR.Discipline.Service/Controllers/DisciplineComplaint_AppealController.cs @@ -772,6 +772,18 @@ namespace BMA.EHR.DisciplineComplaint_Appeal.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -802,6 +814,11 @@ namespace BMA.EHR.DisciplineComplaint_Appeal.Service.Controllers data_search = data_search .Where(x => node == 4 ? x.child4DnaId == nodeId : (node == 3 ? x.child3DnaId == nodeId : (node == 2 ? x.child2DnaId == nodeId : (node == 1 ? x.child1DnaId == nodeId : (node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + data_search = data_search + .Where(x => node == 4 ? x.child3DnaId == nodeId : (node == 3 ? x.child2DnaId == nodeId : (node == 2 ? x.child1DnaId == nodeId : (node == 1 || node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { data_search = data_search diff --git a/BMA.EHR.Insignia/Controllers/InsigniaManageController.cs b/BMA.EHR.Insignia/Controllers/InsigniaManageController.cs index 30b3f6d8..80a8ef31 100644 --- a/BMA.EHR.Insignia/Controllers/InsigniaManageController.cs +++ b/BMA.EHR.Insignia/Controllers/InsigniaManageController.cs @@ -627,6 +627,18 @@ namespace BMA.EHR.Insignia.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -702,6 +714,11 @@ namespace BMA.EHR.Insignia.Service.Controllers rawData = rawData .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + rawData = rawData + .Where(x => node == 4 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : true)))).ToList(); + } else if (role == "ROOT") { rawData = rawData @@ -914,6 +931,18 @@ namespace BMA.EHR.Insignia.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -987,6 +1016,11 @@ namespace BMA.EHR.Insignia.Service.Controllers rawData = rawData .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + rawData = rawData + .Where(x => node == 4 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : true)))).ToList(); + } else if (role == "ROOT") { rawData = rawData diff --git a/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs b/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs index d61d82d2..4c37f19d 100644 --- a/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveBeginningController.cs @@ -129,11 +129,23 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; } - + int? node = profileAdmin?.Node; if (role == "OWNER") { @@ -144,6 +156,11 @@ namespace BMA.EHR.Leave.Service.Controllers resData = resData .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + resData = resData + .Where(x => node == 4 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { resData = resData @@ -326,10 +343,10 @@ namespace BMA.EHR.Leave.Service.Controllers item.Child1DnaId = profile.Child1DnaId; item.Child2DnaId = profile.Child2DnaId; item.Child3DnaId = profile.Child3DnaId; - item.Child4DnaId = profile.Child4DnaId; + item.Child4DnaId = profile.Child4DnaId; _context.LeaveBeginnings.Update(item); } - + } await _context.SaveChangesAsync(); return Success("อัพเดทข้อมูลสำเร็จ"); @@ -439,7 +456,7 @@ namespace BMA.EHR.Leave.Service.Controllers { return Error("ไม่สามารถบันทึกข้อมูล เนื่องจากมีข้อมูลในระบบแล้ว"); } - + var leaveBeginning = new LeaveBeginning(); leaveBeginning.LeaveTypeId = req.LeaveTypeId; leaveBeginning.LeaveYear = req.LeaveYear; diff --git a/BMA.EHR.Leave/Controllers/LeaveController.cs b/BMA.EHR.Leave/Controllers/LeaveController.cs index 207f0556..b751b322 100644 --- a/BMA.EHR.Leave/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveController.cs @@ -1304,6 +1304,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROHTER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -1600,6 +1612,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -1834,6 +1858,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -2077,6 +2113,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -2437,6 +2485,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 9df655d5..17ba0791 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -920,6 +920,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -940,7 +952,7 @@ namespace BMA.EHR.Leave.Service.Controllers var count = 1; var employees = new List(); // กรองตามที่ fe ส่งมา - if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT") /*&& req.node > profileAdmin?.Node*/) + if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT" || role == "BROTHER") /*&& req.node > profileAdmin?.Node*/) { profile = profile .Where(x => req.node == 4 ? x.OrgChild4Id == req.nodeId : req.node == 3 ? x.OrgChild3Id == req.nodeId : req.node == 2 ? x.OrgChild2Id == req.nodeId : req.node == 1 ? x.OrgChild1Id == req.nodeId : req.node == 0 ? x.OrgRootId == req.nodeId : true) @@ -1332,7 +1344,7 @@ namespace BMA.EHR.Leave.Service.Controllers return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } var profile = new List(); - profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficerRetireFilterAndRevisionAndDate(AccessToken, req.node, req.nodeId, jsonData["result"] == "OWNER" || jsonData["result"] == "CHILD", req.isRetirement ?? true, req.revisionId, req.StartDate, req.EndDate); + profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficerRetireFilterAndRevisionAndDate(AccessToken, req.node, req.nodeId, jsonData["result"] == "OWNER" || jsonData["result"] == "CHILD" || jsonData["result"] == "BROTHER", req.isRetirement ?? true, req.revisionId, req.StartDate, req.EndDate); // get leave day var leaveDays = await _leaveRequestRepository.GetSumApproveLeaveByTypeAndRange(req.StartDate, req.EndDate); @@ -1537,6 +1549,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -1611,7 +1635,7 @@ namespace BMA.EHR.Leave.Service.Controllers var workTotal = 0; var seminarTotal = 0; // กรองตามที่ fe ส่งมา - if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT") /*&& req.node > profileAdmin?.Node*/) + if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT" || role == "BROTHER") /*&& req.node > profileAdmin?.Node*/) { profile = profile .Where(x => req.node == 4 ? x.OrgChild4Id == req.nodeId : req.node == 3 ? x.OrgChild3Id == req.nodeId : req.node == 2 ? x.OrgChild2Id == req.nodeId : req.node == 1 ? x.OrgChild1Id == req.nodeId : req.node == 0 ? x.OrgRootId == req.nodeId : true) @@ -1863,6 +1887,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -1877,7 +1913,7 @@ namespace BMA.EHR.Leave.Service.Controllers profile = await _userProfileRepository.GetEmployeeByAdminRole(AccessToken, profileAdmin?.Node, nodeId, role, req.revisionId, req.node, req.nodeId); } // Child กรองตามที่ fe ส่งมาอีกชั้น - if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT") /*&& req.node > profileAdmin?.Node*/) + if ((role == "ROOT" || role == "OWNER" || role == "CHILD" || role == "PARENT" || role == "BROTHER") /*&& req.node > profileAdmin?.Node*/) { profile = profile .Where(x => req.node == 4 ? x.OrgChild4Id == req.nodeId : req.node == 3 ? x.OrgChild3Id == req.nodeId : req.node == 2 ? x.OrgChild2Id == req.nodeId : req.node == 1 ? x.OrgChild1Id == req.nodeId : req.node == 0 ? x.OrgRootId == req.nodeId : true) @@ -2281,6 +2317,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -2390,6 +2438,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; diff --git a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs index 1177b31e..09addc23 100644 --- a/BMA.EHR.Leave/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveRequestController.cs @@ -1227,7 +1227,7 @@ namespace BMA.EHR.Leave.Service.Controllers var data = await _leaveRequestRepository.GetLeaveRequestByYearAsync(req.Year, userId); var resultData = (from d in data - //join p in profileList on d.KeycloakUserId equals p.Keycloak + //join p in profileList on d.KeycloakUserId equals p.Keycloak select new GetLeaveRequestCalendarResultDto { Id = d.Id, @@ -1286,6 +1286,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -1665,6 +1677,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -1850,6 +1874,18 @@ namespace BMA.EHR.Leave.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -2008,7 +2044,7 @@ namespace BMA.EHR.Leave.Service.Controllers } }); } - + return Success(); } diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentController.cs index cae89c51..a98abb74 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentController.cs @@ -100,6 +100,18 @@ namespace BMA.EHR.Placement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -217,6 +229,11 @@ namespace BMA.EHR.Placement.Service.Controllers placementAppointments = placementAppointments .Where(x => node == 4 ? x.child4DnaId == nodeId : (node == 3 ? x.child3DnaId == nodeId : (node == 2 ? x.child2DnaId == nodeId : (node == 1 ? x.child1DnaId == nodeId : (node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + placementAppointments = placementAppointments + .Where(x => node == 4 ? x.child3DnaId == nodeId : (node == 3 ? x.child2DnaId == nodeId : (node == 2 ? x.child1DnaId == nodeId : (node == 1 || node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { placementAppointments = placementAppointments diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentEmployeeController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentEmployeeController.cs index a453c97b..ae8e40ac 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentEmployeeController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementAppointmentEmployeeController.cs @@ -98,6 +98,18 @@ namespace BMA.EHR.Placement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -210,6 +222,11 @@ namespace BMA.EHR.Placement.Service.Controllers placementAppointments = placementAppointments .Where(x => node == 4 ? x.child4DnaId == nodeId : (node == 3 ? x.child3DnaId == nodeId : (node == 2 ? x.child2DnaId == nodeId : (node == 1 ? x.child1DnaId == nodeId : (node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + placementAppointments = placementAppointments + .Where(x => node == 4 ? x.child3DnaId == nodeId : (node == 3 ? x.child2DnaId == nodeId : (node == 2 ? x.child1DnaId == nodeId : (node == 1 || node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { placementAppointments = placementAppointments diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementOfficerController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementOfficerController.cs index 802a65bc..8638291e 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementOfficerController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementOfficerController.cs @@ -99,6 +99,18 @@ namespace BMA.EHR.Placement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -171,6 +183,11 @@ namespace BMA.EHR.Placement.Service.Controllers placementOfficers = placementOfficers .Where(x => node == 4 ? x.child4DnaOldId == nodeId : (node == 3 ? x.child3DnaOldId == nodeId : (node == 2 ? x.child2DnaOldId == nodeId : (node == 1 ? x.child1DnaOldId == nodeId : (node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + placementOfficers = placementOfficers + .Where(x => node == 4 ? x.child3DnaOldId == nodeId : (node == 3 ? x.child2DnaOldId == nodeId : (node == 2 ? x.child1DnaOldId == nodeId : (node == 1 || node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { placementOfficers = placementOfficers diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs index 00266c3b..9bbb6721 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs @@ -100,6 +100,18 @@ namespace BMA.EHR.Placement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -209,6 +221,11 @@ namespace BMA.EHR.Placement.Service.Controllers placementReceives = placementReceives .Where(x => (node == 4 ? x.child4DnaId == nodeId : (node == 3 ? x.child3DnaId == nodeId : (node == 2 ? x.child2DnaId == nodeId : (node == 1 ? x.child1DnaId == nodeId : (node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true)))))) || (x.CreatedUserId == UserId)).ToList(); } + else if (role == "BROTHER") + { + placementReceives = placementReceives + .Where(x => node == 4 ? x.child3DnaId == nodeId : (node == 3 ? x.child2DnaId == nodeId : (node == 2 ? x.child1DnaId == nodeId : (node == 1 || node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { placementReceives = placementReceives diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementRepatriationController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementRepatriationController.cs index f50e4557..45798f6c 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementRepatriationController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementRepatriationController.cs @@ -100,6 +100,18 @@ namespace BMA.EHR.Placement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -176,6 +188,11 @@ namespace BMA.EHR.Placement.Service.Controllers placementRepatriations = placementRepatriations .Where(x => node == 4 ? x.child4DnaOldId == nodeId : (node == 3 ? x.child3DnaOldId == nodeId : (node == 2 ? x.child2DnaOldId == nodeId : (node == 1 ? x.child1DnaOldId == nodeId : (node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + placementRepatriations = placementRepatriations + .Where(x => node == 4 ? x.child3DnaOldId == nodeId : (node == 3 ? x.child2DnaOldId == nodeId : (node == 2 ? x.child1DnaOldId == nodeId : (node == 1 || node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { placementRepatriations = placementRepatriations diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementTransferController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementTransferController.cs index a9ce9487..566b799b 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementTransferController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementTransferController.cs @@ -192,6 +192,18 @@ namespace BMA.EHR.Placement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -262,6 +274,11 @@ namespace BMA.EHR.Placement.Service.Controllers placementTransfers = placementTransfers .Where(x => node == 4 ? x.child4DnaOldId == nodeId : (node == 3 ? x.child3DnaOldId == nodeId : (node == 2 ? x.child2DnaOldId == nodeId : (node == 1 ? x.child1DnaOldId == nodeId : (node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + placementTransfers = placementTransfers + .Where(x => node == 4 ? x.child3DnaOldId == nodeId : (node == 3 ? x.child2DnaOldId == nodeId : (node == 2 ? x.child1DnaOldId == nodeId : (node == 1 || node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { placementTransfers = placementTransfers diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs index c04a23e5..33808435 100644 --- a/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs @@ -104,6 +104,18 @@ namespace BMA.EHR.Retirement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -155,6 +167,11 @@ namespace BMA.EHR.Retirement.Service.Controllers retirementDeceaseds = retirementDeceaseds .Where(x => node == 4 ? x.child4DnaId == nodeId : (node == 3 ? x.child3DnaId == nodeId : (node == 2 ? x.child2DnaId == nodeId : (node == 1 ? x.child1DnaId == nodeId : (node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + retirementDeceaseds = retirementDeceaseds + .Where(x => node == 4 ? x.child3DnaId == nodeId : (node == 3 ? x.child2DnaId == nodeId : (node == 2 ? x.child1DnaId == nodeId : (node == 1 || node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { retirementDeceaseds = retirementDeceaseds diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementOtherController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementOtherController.cs index 4221fe31..4db9f778 100644 --- a/BMA.EHR.Retirement.Service/Controllers/RetirementOtherController.cs +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementOtherController.cs @@ -100,6 +100,18 @@ namespace BMA.EHR.Retirement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -205,6 +217,11 @@ namespace BMA.EHR.Retirement.Service.Controllers retirementOthers = retirementOthers .Where(x => node == 4 ? x.child4DnaOldId == nodeId : (node == 3 ? x.child3DnaOldId == nodeId : (node == 2 ? x.child2DnaOldId == nodeId : (node == 1 ? x.child1DnaOldId == nodeId : (node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + retirementOthers = retirementOthers + .Where(x => node == 4 ? x.child3DnaOldId == nodeId : (node == 3 ? x.child2DnaOldId == nodeId : (node == 2 ? x.child1DnaOldId == nodeId : (node == 1 || node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { retirementOthers = retirementOthers diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementOutController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementOutController.cs index 2e0f81f2..e996abab 100644 --- a/BMA.EHR.Retirement.Service/Controllers/RetirementOutController.cs +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementOutController.cs @@ -115,6 +115,18 @@ namespace BMA.EHR.Retirement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -186,6 +198,11 @@ namespace BMA.EHR.Retirement.Service.Controllers retirementOuts = retirementOuts .Where(x => node == 4 ? x.child4DnaOldId == nodeId : (node == 3 ? x.child3DnaOldId == nodeId : (node == 2 ? x.child2DnaOldId == nodeId : (node == 1 ? x.child1DnaOldId == nodeId : (node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + retirementOuts = retirementOuts + .Where(x => node == 4 ? x.child3DnaOldId == nodeId : (node == 3 ? x.child2DnaOldId == nodeId : (node == 2 ? x.child1DnaOldId == nodeId : (node == 1 || node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { retirementOuts = retirementOuts diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementResignController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementResignController.cs index 5a4ccc71..d33b945b 100644 --- a/BMA.EHR.Retirement.Service/Controllers/RetirementResignController.cs +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementResignController.cs @@ -257,6 +257,18 @@ namespace BMA.EHR.Retirement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -312,6 +324,11 @@ namespace BMA.EHR.Retirement.Service.Controllers retirementResigns = retirementResigns .Where(x => node == 4 ? x.child4DnaOldId == nodeId : (node == 3 ? x.child3DnaOldId == nodeId : (node == 2 ? x.child2DnaOldId == nodeId : (node == 1 ? x.child1DnaOldId == nodeId : (node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + retirementResigns = retirementResigns + .Where(x => node == 4 ? x.child3DnaOldId == nodeId : (node == 3 ? x.child2DnaOldId == nodeId : (node == 2 ? x.child1DnaOldId == nodeId : (node == 1 || node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { retirementResigns = retirementResigns @@ -372,6 +389,18 @@ namespace BMA.EHR.Retirement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -426,6 +455,11 @@ namespace BMA.EHR.Retirement.Service.Controllers retirementResigns = retirementResigns .Where(x => node == 4 ? x.child4DnaOldId == nodeId : (node == 3 ? x.child3DnaOldId == nodeId : (node == 2 ? x.child2DnaOldId == nodeId : (node == 1 ? x.child1DnaOldId == nodeId : (node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + retirementResigns = retirementResigns + .Where(x => node == 4 ? x.child3DnaOldId == nodeId : (node == 3 ? x.child2DnaOldId == nodeId : (node == 2 ? x.child1DnaOldId == nodeId : (node == 1 || node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { retirementResigns = retirementResigns @@ -633,182 +667,6 @@ namespace BMA.EHR.Retirement.Service.Controllers }; return Success(_data); - // } - // else - // { - // var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(id.ToString(), "RETIREMENT_CANCEL"); - // var createdUserId = await _context.RetirementResignCancels.AsQueryable() - // .Where(x => x.CreatedUserId == UserId) - // .Where(x => x.RetirementResign.Id == id) - // .FirstOrDefaultAsync(); - // if (getWorkflow == false && createdUserId == null) - // { - // var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_RESIGN"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } - // } - // var data = await _context.RetirementResignCancels.AsQueryable() - // .Where(x => x.RetirementResign.Id == id) - // .Select(p => new - // { - // p.Id, - // p.prefix, - // p.firstName, - // p.lastName, - // p.profileId, - // p.Location, - // p.SendDate, - // p.ActiveDate, - // p.Reason, - // p.Remark, - // p.Status, - // salary = p.AmountOld, - // p.ApproveReason, - // p.RejectReason, - // p.IsActive, - // p.CreatedAt, - // p.PositionTypeOld, - // p.PositionLevelOld, - // p.PositionNumberOld, - // p.OrganizationPositionOld, - // p.OligarchReject, - // p.OligarchApproveReason, - // p.OligarchRejectReason, - // p.OligarchRejectDate, - // p.CommanderReject, - // p.CommanderApproveReason, - // p.CommanderRejectReason, - // p.CommanderRejectDate, - // p.OfficerReject, - // p.OfficerApproveReason, - // p.OfficerRejectReason, - // p.OfficerRejectDate, - // p.RemarkHorizontal, - // p.rootOld, - // p.rootOldId, - // p.rootShortNameOld, - // p.child1Old, - // p.child1OldId, - // p.child1ShortNameOld, - // p.child2Old, - // p.child2OldId, - // p.child2ShortNameOld, - // p.child3Old, - // p.child3OldId, - // p.child3ShortNameOld, - // p.child4Old, - // p.child4OldId, - // p.child4ShortNameOld, - // p.PositionOld, - // p.posMasterNoOld, - // p.posTypeOldId, - // p.posTypeNameOld, - // p.posLevelOldId, - // p.posLevelNameOld, - // p.IsNoDebt, - // p.IsNoBurden, - // p.IsDiscipline, - // p.CancelReason, - // p.ApproveStep, - // p.Group, - // Approvers = p.Approvers.Where(x => x.ApproveType.ToUpper() == "APPROVER"), - // Commanders = p.Approvers.Where(x => x.ApproveType.ToUpper() == "COMMANDER"), - // KeycloakUserId = p.CreatedUserId, - // idMain = p.RetirementResign.Id, - // statusMain = p.RetirementResign.Status, - // RetirementResignDocs = p.RetirementResign.RetirementResignDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), - // }) - // .FirstOrDefaultAsync(); - // if (data == null) - // return Error(GlobalMessages.RetirementResignNotFound, 404); - - // var retirementResignDocs = new List(); - // foreach (var doc in data.RetirementResignDocs) - // { - // var _doc = new - // { - // FileName = doc.FileName, - // PathName = await _documentService.ImagesPath(doc.Id), - // doc.Id, - // }; - // retirementResignDocs.Add(_doc); - // } - // var _data = new - // { - // data.Id, - // data.profileId, - // data.prefix, - // // data.PrefixId, - // data.firstName, - // data.lastName, - // data.Location, - // data.SendDate, - // data.ActiveDate, - // data.Reason, - // data.Remark, - // data.Status, - // data.salary, - // data.PositionTypeOld, - // data.PositionLevelOld, - // data.PositionNumberOld, - // data.OrganizationPositionOld, - // data.ApproveReason, - // data.RejectReason, - // data.IsActive, - // data.CreatedAt, - // data.OligarchReject, - // data.OligarchApproveReason, - // data.OligarchRejectReason, - // data.OligarchRejectDate, - // data.CommanderReject, - // data.CommanderApproveReason, - // data.CommanderRejectReason, - // data.CommanderRejectDate, - // data.OfficerReject, - // data.OfficerApproveReason, - // data.OfficerRejectReason, - // data.OfficerRejectDate, - // data.RemarkHorizontal, - // data.rootOld, - // data.rootOldId, - // data.rootShortNameOld, - // data.child1Old, - // data.child1OldId, - // data.child1ShortNameOld, - // data.child2Old, - // data.child2OldId, - // data.child2ShortNameOld, - // data.child3Old, - // data.child3OldId, - // data.child3ShortNameOld, - // data.child4Old, - // data.child4OldId, - // data.child4ShortNameOld, - // data.PositionOld, - // data.posMasterNoOld, - // data.posTypeOldId, - // data.posTypeNameOld, - // data.posLevelOldId, - // data.posLevelNameOld, - // data.IsNoDebt, - // data.IsNoBurden, - // data.IsDiscipline, - // data.CancelReason, - // data.idMain, - // data.statusMain, - // data.KeycloakUserId, - // data.ApproveStep, - // data.Group, - // data.Approvers, - // data.Commanders, - // statusCancel = data.Status, - // Docs = retirementResignDocs, - // }; - // return Success(_data); - // } } /// @@ -2149,6 +2007,18 @@ namespace BMA.EHR.Retirement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -2197,6 +2067,11 @@ namespace BMA.EHR.Retirement.Service.Controllers data = data .Where(x => node == 4 ? x.child4DnaId == nodeId : (node == 3 ? x.child3DnaId == nodeId : (node == 2 ? x.child2DnaId == nodeId : (node == 1 ? x.child1DnaId == nodeId : (node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + data = data + .Where(x => node == 4 ? x.child3DnaId == nodeId : (node == 3 ? x.child2DnaId == nodeId : (node == 2 ? x.child1DnaId == nodeId : (node == 1 || node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { data = data @@ -2548,12 +2423,6 @@ namespace BMA.EHR.Retirement.Service.Controllers [HttpGet("questionnaire/question")] public async Task> GetQuestionnaireQuestion() { - //var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_RESIGN_INTERVIEW"); - //var jsonData = JsonConvert.DeserializeObject(getPermission); - //if (jsonData["status"]?.ToString() != "200") - //{ - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - //} var retirementQuestionnaireQuestion = await _context.RetirementQuestionnaireQuestions.AsQueryable() .Select(x => new { @@ -3249,12 +3118,6 @@ namespace BMA.EHR.Retirement.Service.Controllers [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> OfficerApproveRetirementResignAsync(Guid id) { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.OfficerApproveRetirementResign(id); return Success(); @@ -3277,12 +3140,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.CommanderApproveRetirementResign(id, req.Reason ?? "", null); return Success(); @@ -3311,12 +3168,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.CommanderRejectRetirementResign(id, req.Reason ?? "", req.Date); return Success(); @@ -3345,12 +3196,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.ApproveRetirementResign(id, req.Reason ?? "", null); return Success(); @@ -3379,12 +3224,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.RejectRetirementResign(id, req.Reason ?? "", req.Date); return Success(); @@ -3475,12 +3314,6 @@ namespace BMA.EHR.Retirement.Service.Controllers [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> OfficerApproveRetirementResignCancelAsync(Guid id) { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.OfficerApproveRetirementResignCancel(id); return Success(); @@ -3503,12 +3336,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.CommanderApproveRetirementResignCancel(id, req.Reason ?? "", null); return Success(); @@ -3537,12 +3364,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.CommanderRejectRetirementResignCancel(id, req.Reason ?? "", req.Date); return Success(); @@ -3571,12 +3392,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.ApproveRetirementResignCancel(id, req.Reason ?? "", null); return Success(); @@ -3605,12 +3420,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.RejectRetirementResignCancel(id, req.Reason ?? "", req.Date); return Success(); diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs index b996fffe..bfd8ab9f 100644 --- a/BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementResignEmployeeController.cs @@ -196,6 +196,18 @@ namespace BMA.EHR.Retirement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -251,6 +263,11 @@ namespace BMA.EHR.Retirement.Service.Controllers retirementResignEmployees = retirementResignEmployees .Where(x => node == 4 ? x.child4DnaOldId == nodeId : (node == 3 ? x.child3DnaOldId == nodeId : (node == 2 ? x.child2DnaOldId == nodeId : (node == 1 ? x.child1DnaOldId == nodeId : (node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + retirementResignEmployees = retirementResignEmployees + .Where(x => node == 4 ? x.child3DnaOldId == nodeId : (node == 3 ? x.child2DnaOldId == nodeId : (node == 2 ? x.child1DnaOldId == nodeId : (node == 1 || node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { retirementResignEmployees = retirementResignEmployees @@ -311,6 +328,18 @@ namespace BMA.EHR.Retirement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -364,6 +393,11 @@ namespace BMA.EHR.Retirement.Service.Controllers retirementResignEmployees = retirementResignEmployees .Where(x => node == 4 ? x.child4DnaOldId == nodeId : (node == 3 ? x.child3DnaOldId == nodeId : (node == 2 ? x.child2DnaOldId == nodeId : (node == 1 ? x.child1DnaOldId == nodeId : (node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + retirementResignEmployees = retirementResignEmployees + .Where(x => node == 4 ? x.child3DnaOldId == nodeId : (node == 3 ? x.child2DnaOldId == nodeId : (node == 2 ? x.child1DnaOldId == nodeId : (node == 1 || node == 0 ? x.rootDnaOldId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { retirementResignEmployees = retirementResignEmployees @@ -572,181 +606,6 @@ namespace BMA.EHR.Retirement.Service.Controllers }; return Success(_data); - // } - // else - // { - // var getWorkflow = await _permission.GetPermissionAPIWorkflowAsync(id.ToString(), "RETIREMENT_CANCEL_EMP"); - // var createdUserId = await _context.RetirementResignEmployeeCancels.AsQueryable() - // .Where(x => x.CreatedUserId == UserId) - // .Where(x => x.RetirementResignEmployee.Id == id) - // .FirstOrDefaultAsync(); - // if (getWorkflow == false && createdUserId == null) - // { - // var getPermission = await _permission.GetPermissionAPIAsync("GET", "SYS_RESIGN_EMP"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } - // } - // var data = await _context.RetirementResignEmployeeCancels.AsQueryable() - // .Where(x => x.RetirementResignEmployee.Id == id) - // .Select(p => new - // { - // p.Id, - // p.prefix, - // p.firstName, - // p.lastName, - // p.profileId, - // p.Location, - // p.SendDate, - // p.ActiveDate, - // p.Reason, - // p.Remark, - // p.Status, - // salary = p.AmountOld, - // p.ApproveReason, - // p.RejectReason, - // p.IsActive, - // p.CreatedAt, - // p.PositionTypeOld, - // p.PositionLevelOld, - // p.PositionNumberOld, - // p.OrganizationPositionOld, - // p.OligarchReject, - // p.OligarchApproveReason, - // p.OligarchRejectReason, - // p.OligarchRejectDate, - // p.CommanderReject, - // p.CommanderApproveReason, - // p.CommanderRejectReason, - // p.CommanderRejectDate, - // p.OfficerReject, - // p.OfficerApproveReason, - // p.OfficerRejectReason, - // p.OfficerRejectDate, - // p.RemarkHorizontal, - // p.rootOld, - // p.rootOldId, - // p.rootShortNameOld, - // p.child1Old, - // p.child1OldId, - // p.child1ShortNameOld, - // p.child2Old, - // p.child2OldId, - // p.child2ShortNameOld, - // p.child3Old, - // p.child3OldId, - // p.child3ShortNameOld, - // p.child4Old, - // p.child4OldId, - // p.child4ShortNameOld, - // p.PositionOld, - // p.posMasterNoOld, - // p.posTypeOldId, - // p.posTypeNameOld, - // p.posLevelOldId, - // p.posLevelNameOld, - // p.IsNoDebt, - // p.IsNoBurden, - // p.IsDiscipline, - // p.ApproveStep, - // p.Group, - // Approvers = p.Approvers.Where(x => x.ApproveType.ToUpper() == "APPROVER"), - // Commanders = p.Approvers.Where(x => x.ApproveType.ToUpper() == "COMMANDER"), - // KeycloakUserId = p.CreatedUserId, - // p.CancelReason, - // idMain = p.RetirementResignEmployee.Id, - // statusMain = p.RetirementResignEmployee.Status, - // RetirementResignEmployeeDocs = p.RetirementResignEmployee.RetirementResignEmployeeDocs.Where(d => d.Document != null).Select(d => new { d.Document.Id, d.Document.FileName }), - // }) - // .FirstOrDefaultAsync(); - // if (data == null) - // return Error(GlobalMessages.RetirementResignEmployeeNotFound, 404); - - // var retirementResignEmployeeDocs = new List(); - // foreach (var doc in data.RetirementResignEmployeeDocs) - // { - // var _doc = new - // { - // FileName = doc.FileName, - // PathName = await _documentService.ImagesPath(doc.Id), - // doc.Id, - // }; - // retirementResignEmployeeDocs.Add(_doc); - // } - // var _data = new - // { - // data.Id, - // data.profileId, - // data.prefix, - // data.firstName, - // data.lastName, - // data.Location, - // data.SendDate, - // data.ActiveDate, - // data.Reason, - // data.Remark, - // data.Status, - // data.salary, - // data.PositionTypeOld, - // data.PositionLevelOld, - // data.PositionNumberOld, - // data.OrganizationPositionOld, - // data.ApproveReason, - // data.RejectReason, - // data.IsActive, - // data.CreatedAt, - // data.OligarchReject, - // data.OligarchApproveReason, - // data.OligarchRejectReason, - // data.OligarchRejectDate, - // data.CommanderReject, - // data.CommanderApproveReason, - // data.CommanderRejectReason, - // data.CommanderRejectDate, - // data.OfficerReject, - // data.OfficerApproveReason, - // data.OfficerRejectReason, - // data.OfficerRejectDate, - // data.RemarkHorizontal, - // data.rootOld, - // data.rootOldId, - // data.rootShortNameOld, - // data.child1Old, - // data.child1OldId, - // data.child1ShortNameOld, - // data.child2Old, - // data.child2OldId, - // data.child2ShortNameOld, - // data.child3Old, - // data.child3OldId, - // data.child3ShortNameOld, - // data.child4Old, - // data.child4OldId, - // data.child4ShortNameOld, - // data.PositionOld, - // data.posMasterNoOld, - // data.posTypeOldId, - // data.posTypeNameOld, - // data.posLevelOldId, - // data.posLevelNameOld, - // data.IsNoDebt, - // data.IsNoBurden, - // data.IsDiscipline, - // data.CancelReason, - // data.idMain, - // data.statusMain, - // data.ApproveStep, - // data.Group, - // data.KeycloakUserId, - // data.Approvers, - // data.Commanders, - // statusCancel = data.Status, - // Docs = retirementResignEmployeeDocs, - // }; - // return Success(_data); - // } } /// @@ -2065,6 +1924,18 @@ namespace BMA.EHR.Retirement.Service.Controllers ? profileAdmin?.RootDnaId : ""; } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } else if (role == "ROOT" || role == "PARENT") { nodeId = profileAdmin?.RootDnaId; @@ -2113,6 +1984,11 @@ namespace BMA.EHR.Retirement.Service.Controllers data = data .Where(x => node == 4 ? x.child4DnaId == nodeId : (node == 3 ? x.child3DnaId == nodeId : (node == 2 ? x.child2DnaId == nodeId : (node == 1 ? x.child1DnaId == nodeId : (node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true)))))).ToList(); } + else if (role == "BROTHER") + { + data = data + .Where(x => node == 4 ? x.child3DnaId == nodeId : (node == 3 ? x.child2DnaId == nodeId : (node == 2 ? x.child1DnaId == nodeId : (node == 1 || node == 0 ? x.rootDnaId == nodeId : (node == null ? true : true))))).ToList(); + } else if (role == "ROOT") { data = data @@ -2706,12 +2582,6 @@ namespace BMA.EHR.Retirement.Service.Controllers [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> OfficerApproveRetirementResignEmployeeAsync(Guid id) { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.OfficerApproveRetirementResignEmployee(id); return Success(); @@ -2734,12 +2604,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.CommanderApproveRetirementResignEmployee(id, req.Reason ?? "", null); return Success(); @@ -2768,12 +2632,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.CommanderRejectRetirementResignEmployee(id, req.Reason ?? "", req.Date); return Success(); @@ -2802,12 +2660,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.ApproveRetirementResignEmployee(id, req.Reason ?? "", null); return Success(); @@ -2836,12 +2688,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.RejectRetirementResignEmployee(id, req.Reason ?? "", req.Date); return Success(); @@ -2932,12 +2778,6 @@ namespace BMA.EHR.Retirement.Service.Controllers [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> OfficerApproveRetirementResignEmployeeCancelAsync(Guid id) { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.OfficerApproveRetirementResignEmployeeCancel(id); return Success(); @@ -2960,12 +2800,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.CommanderApproveRetirementResignEmployeeCancel(id, req.Reason ?? "", null); return Success(); @@ -2994,12 +2828,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.CommanderRejectRetirementResignEmployeeCancel(id, req.Reason ?? "", req.Date); return Success(); @@ -3028,12 +2856,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.ApproveRetirementResignEmployeeCancel(id, req.Reason ?? "", null); return Success(); @@ -3062,12 +2884,6 @@ namespace BMA.EHR.Retirement.Service.Controllers { try { - // var getPermission = await _permission.GetPermissionAPIAsync("UPDATE", "SYS_LEAVE_LIST"); - // var jsonData = JsonConvert.DeserializeObject(getPermission); - // if (jsonData["status"]?.ToString() != "200") - // { - // return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); - // } await _repository.RejectRetirementResignEmployeeCancel(id, req.Reason ?? "", req.Date); return Success(); From 23a6058eba55aa7edbe4ec646fa2a66c8835eca9 Mon Sep 17 00:00:00 2001 From: harid Date: Fri, 12 Dec 2025 12:27:52 +0700 Subject: [PATCH 03/17] query leave report --- .../Controllers/LeaveReportController.cs | 147 +++++++++++++++--- 1 file changed, 129 insertions(+), 18 deletions(-) diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 17ba0791..6b7a9a4b 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -152,7 +152,7 @@ namespace BMA.EHR.Leave.Service.Controllers var startFiscalYear = new DateTime(data.LeaveStartDate.Year - 1, 10, 1); var endFiscalYear = data.LeaveStartDate.Date.AddDays(-1); // นับจากวันที่ยื่นลา var sumLeave = await _leaveRequestRepository.GetSumApproveLeaveTotalByTypeAndRangeForUser(data.KeycloakUserId, data.Type.Id, startFiscalYear, endFiscalYear); - + var approveResult = await GetApproverData(data.Approvers); return new { template = "leave9", @@ -181,6 +181,12 @@ namespace BMA.EHR.Leave.Service.Controllers LeaveRemain = (data.Type.Limit - sumLeave).ToString().ToThaiNumber(), LeaveAll = (data.LeaveTotal + sumLeave).ToString().ToThaiNumber(), + approve = approveResult, + leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" + ? "🗹 อนุญาต ☐ ไม่อนุญาต" + : data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "REJECT" + ? "☐ อนุญาต 🗹 ไม่อนุญาต" + : "☐ อนุญาต ☐ ไม่อนุญาต" } }; } @@ -194,7 +200,7 @@ namespace BMA.EHR.Leave.Service.Controllers } var fullName = $"{profile!.Prefix}{profile!.FirstName} {profile!.LastName}"; - + var approveResult = await GetApproverData(data.Approvers); return new { template = "leave10", @@ -217,6 +223,13 @@ namespace BMA.EHR.Leave.Service.Controllers LeaveTotal = data.LeaveTotal.ToString().ToThaiNumber(), //data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), leaveAddress = data.LeaveAddress.ToThaiNumber(), leaveNumber = data.LeaveNumber.ToThaiNumber(), + + approve = approveResult, + leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" + ? "🗹 อนุญาต ☐ ไม่อนุญาต" + : data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "REJECT" + ? "☐ อนุญาต 🗹 ไม่อนุญาต" + : "☐ อนุญาต ☐ ไม่อนุญาต" } }; } @@ -248,6 +261,7 @@ namespace BMA.EHR.Leave.Service.Controllers var leaveLimit = leaveData == null ? 0.0 : leaveData.LeaveDays; var extendLeave = leaveLimit - 10; + var approveResult = await GetApproverData(data.Approvers); return new { template = "leave11", @@ -278,7 +292,15 @@ namespace BMA.EHR.Leave.Service.Controllers LeaveSummary = sumLeave.ToString().ToThaiNumber(), // วันลาครั้งก่อน LeaveAll = (data.LeaveTotal + sumLeave).ToString().ToThaiNumber(), // ลาครั้งนี้ + ครั้งก่อน - LeaveLimit = leaveLimit.ToString().ToThaiNumber() // สิทธิ์การลา + LeaveLimit = leaveLimit.ToString().ToThaiNumber(), // สิทธิ์การลา + + approve = approveResult, + leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" + ? "🗹 อนุญาต ☐ ไม่อนุญาต" + : data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "REJECT" + ? "☐ อนุญาต 🗹 ไม่อนุญาต" + : "☐ อนุญาต ☐ ไม่อนุญาต" + } }; } @@ -305,7 +327,7 @@ namespace BMA.EHR.Leave.Service.Controllers { isHajj = true; } - + var approveResult = await GetApproverData(data.Approvers); if (isHajj == true) { return new @@ -330,8 +352,14 @@ namespace BMA.EHR.Leave.Service.Controllers leaveDateStart = data.LeaveStartDate.Date.ToThaiShortDate().ToThaiNumber(), leaveDateEnd = data.LeaveEndDate.Date.ToThaiShortDate().ToThaiNumber(), - LeaveTotal = data.LeaveTotal.ToString().ToThaiNumber()//data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), + LeaveTotal = data.LeaveTotal.ToString().ToThaiNumber(),//data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), + approve = approveResult, + leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" + ? "🗹 อนุญาต ☐ ไม่อนุญาต" + : data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "REJECT" + ? "☐ อนุญาต 🗹 ไม่อนุญาต" + : "☐ อนุญาต ☐ ไม่อนุญาต" } }; } @@ -365,8 +393,13 @@ namespace BMA.EHR.Leave.Service.Controllers leaveDateStart = data.LeaveStartDate.Date.ToThaiShortDate().ToThaiNumber(), leaveDateEnd = data.LeaveEndDate.Date.ToThaiShortDate().ToThaiNumber(), - LeaveTotal = data.LeaveTotal.ToString().ToThaiNumber()//data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), + LeaveTotal = data.LeaveTotal.ToString().ToThaiNumber(),//data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), + leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" + ? "🗹 อนุญาต ☐ ไม่อนุญาต" + : data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "REJECT" + ? "☐ อนุญาต 🗹 ไม่อนุญาต" + : "☐ อนุญาต ☐ ไม่อนุญาต" } }; } @@ -390,7 +423,7 @@ namespace BMA.EHR.Leave.Service.Controllers // if (list.Count > 0) // approver = list.First().Name; //} - + var approveResult = await GetApproverData(data.Approvers); return new { template = "leave14", @@ -417,6 +450,12 @@ namespace BMA.EHR.Leave.Service.Controllers leaveDateEnd = data.LeaveEndDate.Date.ToThaiShortDate().ToThaiNumber(), LeaveTotal = data.LeaveTotal.ToString().ToThaiNumber(), //data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), + approve = approveResult, + leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" + ? "🗹 อนุญาต ☐ ไม่อนุญาต" + : data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "REJECT" + ? "☐ อนุญาต 🗹 ไม่อนุญาต" + : "☐ อนุญาต ☐ ไม่อนุญาต" } }; } @@ -439,7 +478,7 @@ namespace BMA.EHR.Leave.Service.Controllers // if (list.Count > 0) // approver = list.First().Name; //} - + var approveResult = await GetApproverData(data.Approvers); return new { template = "leave15", @@ -473,6 +512,13 @@ namespace BMA.EHR.Leave.Service.Controllers LeaveTotal = data.LeaveTotal.ToString().ToThaiNumber(), //data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), leaveAddress = data.LeaveAddress.ToThaiNumber(), leaveNumber = data.LeaveNumber.ToThaiNumber(), + + approve = approveResult, + leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" + ? "🗹 อนุญาต ☐ ไม่อนุญาต" + : data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "REJECT" + ? "☐ อนุญาต 🗹 ไม่อนุญาต" + : "☐ อนุญาต ☐ ไม่อนุญาต" } }; } @@ -501,7 +547,7 @@ namespace BMA.EHR.Leave.Service.Controllers // if (list.Count > 0) // approver = list.First().Name; //} - + var approveResult = await GetApproverData(data.Approvers); return new { template = "leave16", @@ -562,10 +608,15 @@ namespace BMA.EHR.Leave.Service.Controllers institute = x.Institute == null ? "" : x.Institute.ToThaiNumber(), country = x.Country == null ? "" : x.Country.ToThaiNumber(), finishDate = x.FinishDate == null ? "-" : x.FinishDate.Value.ToThaiShortDate().ToThaiNumber() - }).ToList() + }).ToList(), //positionName = profileLeave.PositionName, - + approve = approveResult, + leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" + ? "🗹 อนุญาต ☐ ไม่อนุญาต" + : data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "REJECT" + ? "☐ อนุญาต 🗹 ไม่อนุญาต" + : "☐ อนุญาต ☐ ไม่อนุญาต" } }; @@ -589,7 +640,7 @@ namespace BMA.EHR.Leave.Service.Controllers // if (list.Count > 0) // approver = list.First().Name; //} - + var approveResult = await GetApproverData(data.Approvers); return new { template = "leave17", @@ -623,6 +674,13 @@ namespace BMA.EHR.Leave.Service.Controllers leaveDateStart = data.LeaveStartDate.Date.ToThaiShortDate().ToThaiNumber(), leaveDateEnd = data.LeaveEndDate.Date.ToThaiShortDate().ToThaiNumber(), LeaveTotal = data.LeaveTotal.ToString().ToThaiNumber(), //data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), + + approve = approveResult, + leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" + ? "🗹 อนุญาต ☐ ไม่อนุญาต" + : data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "REJECT" + ? "☐ อนุญาต 🗹 ไม่อนุญาต" + : "☐ อนุญาต ☐ ไม่อนุญาต" } }; } @@ -651,7 +709,7 @@ namespace BMA.EHR.Leave.Service.Controllers // if (list.Count > 0) // approver = list.First().Name; //} - + var approveResult = await GetApproverData(data.Approvers); return new { template = "leave18", @@ -668,13 +726,9 @@ namespace BMA.EHR.Leave.Service.Controllers positionLeaveName = profile!.PositionLeaveName == null ? "-" : profile!.PositionLeaveName.ToThaiNumber(), organizationName = profile!.Oc!.ToThaiNumber() ?? "", - - - leaveDateStart = data.LeaveStartDate.Date.ToThaiShortDate().ToThaiNumber(), leaveDateEnd = data.LeaveEndDate.Date.ToThaiShortDate().ToThaiNumber(), - profileType = profile.ProfileType, birthDate = profileLeave.BirthDate.ToThaiShortDate().ToThaiNumber(), @@ -715,7 +769,14 @@ namespace BMA.EHR.Leave.Service.Controllers institute = x.Institute == null ? "" : x.Institute.ToThaiNumber(), country = x.Country == null ? "" : x.Country.ToThaiNumber(), finishDate = x.FinishDate == null ? "-" : x.FinishDate.Value.ToThaiShortDate().ToThaiNumber() - }).ToList() + }).ToList(), + + approve = approveResult, + leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" + ? "🗹 อนุญาต ☐ ไม่อนุญาต" + : data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "REJECT" + ? "☐ อนุญาต 🗹 ไม่อนุญาต" + : "☐ อนุญาต ☐ ไม่อนุญาต" } }; } @@ -2477,5 +2538,55 @@ namespace BMA.EHR.Leave.Service.Controllers } #endregion + private async Task GetApproverData(List list) + { + var _default = new + { + fullName = "......................", + positionName = "......................", + positionSign = "......................", + updatedAt = "...... /...... /......", + comment = "......................", + approveType = "" + }; + + var approvers = list + .Select(x => new + { + fullName = $"{(x.Prefix ?? "")}{(x.FirstName ?? "")} {(x.LastName ?? "")}".Trim(), + positionName = x.PositionName ?? "......................", + positionSign = x.PositionSign ?? "......................", + updatedAt = x.LastUpdatedAt.HasValue + ? x.LastUpdatedAt.Value.Date.ToThaiShortDate().ToThaiNumber() + : "...... /...... /......", + comment = (x.Comment ?? "") + .Replace("\r", "") + .Replace("\n", "") + .Trim(), + approveType = (x.ApproveType ?? "").Trim().ToUpper() + }) + .ToList(); + + var sender = approvers + .FirstOrDefault(x => x.approveType == "SENDER") + ?? _default; + + var approver = approvers + .FirstOrDefault(x => x.approveType == "APPROVER") + ?? _default; + + var commanders = approvers + .Where(x => x.approveType == "COMMANDER") + .DefaultIfEmpty(_default) + .ToList(); + + return new + { + sender = sender, + approver = approver, + commanders = commanders + }; + } + } } \ No newline at end of file From 88a48577e98744f9fe2014f31e7b5941c9ce2ffb Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Fri, 12 Dec 2025 15:18:27 +0700 Subject: [PATCH 04/17] feat: enhance leave request filtering and update configuration settings --- .../LeaveRequests/LeaveRequestRepository.cs | 57 +++++++++++++++---- .../Controllers/LeaveReportController.cs | 11 ++-- BMA.EHR.Leave/appsettings.json | 33 ++++++----- 3 files changed, 71 insertions(+), 30 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index ce22cd23..b3eaeab7 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -8,6 +8,7 @@ using BMA.EHR.Domain.Shared; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; +using System.IO.Compression; using System.Net.Http.Headers; using System.Net.Http.Json; @@ -275,11 +276,17 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests public async Task> GetLeaveRequestByYearForAdminAsync(int year, string role, string? nodeId, int? node) { - var rawData = await _dbContext.Set().AsQueryable().AsNoTracking() + var rawData = _dbContext.Set().AsQueryable().AsNoTracking() .Include(x => x.Type) - .Where(x => x.LeaveStartDate.Year == year) - .Where(x => x.LeaveStatus != "REJECT" && x.LeaveStatus != "DELETE") - .ToListAsync(); + .Where(x => x.LeaveStatus != "REJECT" && x.LeaveStatus != "DELETE"); + //.ToListAsync(); + if (year != 0) + { + var startFiscalDate = new DateTime(year - 1, 10, 1); + var endFiscalDate = new DateTime(year, 9, 30); + rawData = rawData.Where(x => x.LeaveStartDate.Date >= startFiscalDate && x.LeaveStartDate.Date <= endFiscalDate); + } + if (role == "OWNER") { node = null; @@ -287,22 +294,22 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests if (role == "OWNER" || role == "CHILD") { rawData = rawData - .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))).ToList(); + .Where(x => node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true)))))); } else if (role == "BROTHER") { rawData = rawData - .Where(x => node == 4 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true))))).ToList(); + .Where(x => node == 4 ? x.Child3DnaId == Guid.Parse(nodeId!) : (node == 3 ? x.Child2DnaId == Guid.Parse(nodeId!) : (node == 2 ? x.Child1DnaId == Guid.Parse(nodeId!) : (node == 1 || node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) : (node == null ? true : true))))); } else if (role == "ROOT") { rawData = rawData - .Where(x => x.RootDnaId == Guid.Parse(nodeId!)).ToList(); + .Where(x => x.RootDnaId == Guid.Parse(nodeId!)); } else if (role == "PARENT") { rawData = rawData - .Where(x => x.RootDnaId == Guid.Parse(nodeId!) && x.Child1DnaId != null).ToList(); + .Where(x => x.RootDnaId == Guid.Parse(nodeId!) && x.Child1DnaId != null); } else if (role == "NORMAL") { @@ -312,10 +319,10 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) && x.Child2DnaId == null : node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) && x.Child3DnaId == null : node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) && x.Child4DnaId == null : - node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : true).ToList(); + node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : true); } - return rawData; + return await rawData.ToListAsync(); } public async Task> GetLeaveRequestByUserIdAsync(Guid keycloakUserId, int year, Guid type, string status) @@ -566,8 +573,14 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests .Where(x => x.LeaveStatus == "DELETE" || x.LeaveStatus == "DELETING") .AsQueryable(); + // if (year != 0) + // rawData = rawData.Where(x => x.LeaveStartDate.Year == year); if (year != 0) - rawData = rawData.Where(x => x.LeaveStartDate.Year == year); + { + var startFiscalDate = new DateTime(year - 1, 10, 1); + var endFiscalDate = new DateTime(year, 9, 30); + rawData = rawData.Where(x => x.LeaveStartDate.Date >= startFiscalDate && x.LeaveStartDate.Date <= endFiscalDate); + } if (type != Guid.Empty) rawData = rawData.Where(x => x.Type.Id == type); @@ -901,6 +914,26 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests }; _appDbContext.Set().Add(noti1); } + else + { + // มีแต่ approver อย่างเดียว + var firstApprover = rawData.Approvers + .Where(x => x.ApproveType!.ToUpper() == "APPROVER") + .OrderBy(x => x.Seq) + .FirstOrDefault(); + if(firstApprover != null) + { + // Send Notification + var noti2 = new Notification + { + Body = $"การขอลาของคุณ {rawData.FirstName} {rawData.LastName} รอรับการอนุมัติจากคุณ", + ReceiverUserId = firstApprover!.ProfileId, + Type = "", + Payload = $"{URL}/leave/detail/{id}", + }; + _appDbContext.Set().Add(noti2); + } + } await _appDbContext.SaveChangesAsync(); } @@ -1127,7 +1160,7 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests .Where(x => x.ApproveType!.ToUpper() == "COMMANDER") .OrderBy(x => x.Seq) .ToList(); - if (commanders.Count > 0 || commanders != null) + if (commanders.Count > 0 && commanders != null) { if (rawData.ApproveStep != "st3") { diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 6b7a9a4b..82a22a7d 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -1749,10 +1749,13 @@ namespace BMA.EHR.Leave.Service.Controllers var leaveRangeEnd = leaveReq.LeaveRangeEnd == null ? "" : leaveReq.LeaveRangeEnd.ToUpper(); - if (leaveRangeEnd == "MORNING") - remarkStr += "ครึ่งวันเช้า"; - else if (leaveRangeEnd == "AFTERNOON") - remarkStr += "ครึ่งวันบ่าย"; + if(leaveRange != leaveRangeEnd) + { + if (leaveRangeEnd == "MORNING") + remarkStr += " - ครึ่งวันเช้า"; + else if (leaveRangeEnd == "AFTERNOON") + remarkStr += " - ครึ่งวันบ่าย"; + } break; default: remarkStr += leaveReq.Type.Name; diff --git a/BMA.EHR.Leave/appsettings.json b/BMA.EHR.Leave/appsettings.json index 711b4253..4b331ed8 100644 --- a/BMA.EHR.Leave/appsettings.json +++ b/BMA.EHR.Leave/appsettings.json @@ -15,21 +15,22 @@ }, "AllowedHosts": "*", "ConnectionStrings": { - "DefaultConnection": "server=192.168.1.80;user=root;password=adminVM123;port=3306;database=hrms;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", - "ExamConnection": "server=192.168.1.80;user=root;password=adminVM123;port=3306;database=hrms_exam;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", - "LeaveConnection": "server=192.168.1.80;user=root;password=adminVM123;port=3306;database=hrms_leave;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;" + // "DefaultConnection": "server=192.168.1.80;user=root;password=adminVM123;port=3306;database=hrms;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", + // "ExamConnection": "server=192.168.1.80;user=root;password=adminVM123;port=3306;database=hrms_exam;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", + // "LeaveConnection": "server=192.168.1.80;user=root;password=adminVM123;port=3306;database=hrms_leave;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;" - // "DefaultConnection": "server=192.168.1.63;user=root;password=12345678;port=3306;database=hrms;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", - // "ExamConnection": "server=192.168.1.63;user=root;password=12345678;port=3306;database=hrms_exam;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", - // "LeaveConnection": "server=192.168.1.63;user=root;password=12345678;port=3306;database=hrms_leave;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;" + "DefaultConnection": "server=192.168.1.63;user=root;password=12345678;port=3306;database=hrms;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", + "ExamConnection": "server=192.168.1.63;user=root;password=12345678;port=3306;database=hrms_exam;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", + "LeaveConnection": "server=192.168.1.63;user=root;password=12345678;port=3306;database=hrms_leave;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;" //"DefaultConnection": "server=172.27.17.68;user=user;password=cDldaqkwESWvuZ37Gr0n;port=3306;database=hrms;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", //"ExamConnection": "server=172.27.17.68;user=user;password=cDldaqkwESWvuZ37Gr0n;port=3306;database=hrms_exam;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", //"LeaveConnection": "server=172.27.17.68;user=user;password=cDldaqkwESWvuZ37Gr0n;port=3306;database=hrms_leave;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;" }, "Jwt": { - "Key": "HP-FnQMUj9msHMSD3T9HtdEnphAKoCJLEl85CIqROFI", - "Issuer": "https://id.frappet.synology.me/realms/hrms" + //"Key": "HP-FnQMUj9msHMSD3T9HtdEnphAKoCJLEl85CIqROFI", + "Key": "j7C9RO_p4nRtuwCH4z9Db_A_6We42tkD_p4lZtDrezc", + "Issuer": "https://hrmsbkk-id.case-collection.com/realms/hrms" //"Key": "xY2VR-EFvvNPsMs39u8ooVBWQL6mPwrNJOh3koJFTgU", //"Issuer": "https://hrms-id.bangkok.go.th/realms/hrms" }, @@ -39,10 +40,10 @@ } }, "MinIO": { - "Endpoint": "https://edm-s3.frappet.synology.me/", - "AccessKey": "XxtdnJajPjp3hHuKdOMn", - "SecretKey": "rVPzB05giC7bA400cUuIThzT4T9SGCcpcmL3tBBg", - "BucketName": "bma-ehr-fpt" + "Endpoint": "https://hrmsbkk-s3.case-collection.com/", + "AccessKey": "iwvzjyjgz0BKtLPmMpPu", + "SecretKey": "Yv56vwctYdIspDknRJ46xztcBDzteGF3elZiDcAr", + "BucketName": "hrms-fpt" }, "Protocol": "HTTPS", "Node": { @@ -63,8 +64,12 @@ "MailFrom": "saraban.csc.rd@bangkok.go.th", "Port": "25" }, - "VITE_URL_MGT": "https://bma-ehr.frappet.synology.me", - "API": "https://bma-ehr.frappet.synology.me/api/v1", + "Domain": "https://hrmsbkk.case-collection.com", + "APIPROBATION": "https://hrmsbkk.case-collection.com/api/v1/probation", + "API": "https://hrmsbkk.case-collection.com/api/v1", + "APIV2": "https://hrmsbkk.case-collection.com/api/v2", + "VITE_URL_MGT": "https://hrmsbkk-mgt.case-collection.com", + //"API": "https://bma-ehr.frappet.synology.me/api/v1", //"API": "https://bma-hrms.bangkok.go.th/api/v1", "API_KEY": "fKRL16yyEgbyTEJdsMw2h64tGSCmkW685PRtM3CygzX1JOSdptT9UJtpgWwKM8FybRTJups3GTFwj27ZRvlPdIkv3XgCoVJaD5LmR06ozuEPvCCRSdp2WFthg08V5xHc56fTPfZLpr1VmXrhd6dvYhHIqKkQUJR02Rlkss11cLRWEQOssEFVA4xdu2J5DIRO1EM5m7wRRvEwcDB4mYRXD9HH52SMq6iYqUWEWsMwLdbk7QW9yYESUEuzMW5gWrb6vIeWZxJV5bTz1PcWUyR7eO9Fyw1F5DiQYc9JgzTC1mW7cv31fEtTtrfbJYKIb5EbWilqIEUKC6A0UKBDDek35ML0006cqRVm0pvdOH6jeq7VQyYrhdXe59dBEyhYGUIfozoVBvW7Up4QBuOMjyPjSqJPlMBKwaseptfrblxQV1AOOivSBpf1ZcQyOZ8JktRtKUDSuXsmG0lsXwFlI3JCeSHdpVdgZWFYcJPegqfrB6KotR02t9AVkpLs1ZWrixwz" } From 328f54b4e3488dfe53ee31cd51e4038a79fab268 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Fri, 12 Dec 2025 16:13:01 +0700 Subject: [PATCH 05/17] fix: improve approval step validation by checking for commanders --- .../Leaves/LeaveRequests/LeaveRequestRepository.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs index b3eaeab7..e0e519e8 100644 --- a/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/LeaveRequests/LeaveRequestRepository.cs @@ -1318,9 +1318,17 @@ namespace BMA.EHR.Application.Repositories.Leaves.LeaveRequests throw new Exception(GlobalMessages.DataNotFound); } - if (rawData.ApproveStep != "st3") + // ถ้าไม่มี commander ข้ามไปเช็ค approver ได้เลย + var commanders = rawData.Approvers + .Where(x => x.ApproveType!.ToUpper() == "COMMANDER") + .OrderBy(x => x.Seq) + .ToList(); + if (commanders.Count > 0 && commanders != null) { - throw new Exception("คำขอนี้ยังไม่ได้อยู่ในขั้นตอนที่สามารถอนุมัติได้ ไม่สามารถทำรายการได้"); + if (rawData.ApproveStep != "st3") + { + throw new Exception("คำขอนี้ยังไม่ได้อยู่ในขั้นตอนที่สามารถอนุมัติได้ ไม่สามารถทำรายการได้"); + } } // check commander approve From 02a5eacd0f1b9bd583fbf985dcc64d547c2202f4 Mon Sep 17 00:00:00 2001 From: harid Date: Fri, 12 Dec 2025 17:51:04 +0700 Subject: [PATCH 06/17] fix report leave12 --- BMA.EHR.Leave/Controllers/LeaveReportController.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 82a22a7d..8849f4da 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -395,6 +395,7 @@ namespace BMA.EHR.Leave.Service.Controllers leaveDateEnd = data.LeaveEndDate.Date.ToThaiShortDate().ToThaiNumber(), LeaveTotal = data.LeaveTotal.ToString().ToThaiNumber(),//data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), + approve = approveResult, leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" ? "🗹 อนุญาต ☐ ไม่อนุญาต" : data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "REJECT" From e023ed65f79dbd47a1ded7e82202a6cbf2859f3d Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Mon, 15 Dec 2025 09:48:08 +0700 Subject: [PATCH 07/17] fix: update leave remark formatting for better clarity --- .../Controllers/LeaveReportController.cs | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 8849f4da..2b1c90be 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -2079,11 +2079,20 @@ namespace BMA.EHR.Leave.Service.Controllers remarkStr += "ครึ่งวันบ่าย"; + // var leaveRangeEnd = leaveReq.LeaveRangeEnd == null ? "" : leaveReq.LeaveRangeEnd.ToUpper(); + // if (leaveRangeEnd == "MORNING") + // remarkStr += "ครึ่งวันเช้า"; + // else if (leaveRangeEnd == "AFTERNOON") + // remarkStr += "ครึ่งวันบ่าย"; + var leaveRangeEnd = leaveReq.LeaveRangeEnd == null ? "" : leaveReq.LeaveRangeEnd.ToUpper(); - if (leaveRangeEnd == "MORNING") - remarkStr += "ครึ่งวันเช้า"; - else if (leaveRangeEnd == "AFTERNOON") - remarkStr += "ครึ่งวันบ่าย"; + if(leaveRange != leaveRangeEnd) + { + if (leaveRangeEnd == "MORNING") + remarkStr += " - ครึ่งวันเช้า"; + else if (leaveRangeEnd == "AFTERNOON") + remarkStr += " - ครึ่งวันบ่าย"; + } break; default: remarkStr += leaveReq.Type.Name; From ff66aebdfa08665afe9257efa1924148292cb500 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Mon, 15 Dec 2025 10:29:23 +0700 Subject: [PATCH 08/17] fix: update end time parsing and improve attendance status logic --- BMA.EHR.Leave/Controllers/LeaveController.cs | 25 ++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/BMA.EHR.Leave/Controllers/LeaveController.cs b/BMA.EHR.Leave/Controllers/LeaveController.cs index b751b322..6ae9f015 100644 --- a/BMA.EHR.Leave/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveController.cs @@ -2373,9 +2373,30 @@ namespace BMA.EHR.Leave.Service.Controllers //var endTime = DateTimeOffset.Parse($"{DateTime.Now.Date.ToString("yyyy-MM-dd")}T{duty.EndTimeAfternoon}:00.0000000+07:00").ToLocalTime().DateTime; - var endTime = DateTime.Parse($"{DateTime.Now.Date.ToString("yyyy-MM-dd")}T{duty.EndTimeAfternoon}:00.0000000+07:00"); +  //var endTime = DateTime.Parse($"{DateTime.Now.Date.ToString("yyyy-MM-dd")}T{duty.EndTimeAfternoon}:00.0000000+07:00"); + var endTime = DateTime.Parse($"{DateTime.Now.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}"); + var status = string.Empty; + if(lastCheckIn == null) + { + status = "ABSENT"; + } + else if (lastCheckIn.CheckIn.Date < DateTime.Now.Date) + { + status = "NORMAL"; + } + else + { + if (time < endTime) + { + status = "ABSENT"; + } + else + { + status = "NORMAL"; + } + } - var status = lastCheckIn == null ? "ABSENT" : lastCheckIn.CheckIn.Date < DateTime.Now.Date ? "NORMAL" : time < endTime ? "ABSENT" : "NORMAL"; + //var status = lastCheckIn == null ? "ABSENT" : lastCheckIn.CheckIn.Date < DateTime.Now.Date ? "NORMAL" : time < endTime ? "ABSENT" : "NORMAL"; return Success(new { From 18ab28e335ecbc88eac5648ac61cf33dadaa4b5b Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Mon, 15 Dec 2025 11:12:29 +0700 Subject: [PATCH 09/17] fix: enhance database context configuration with retry logic for resilience --- .../InfrastructureServiceRegistration.cs | 24 +++++++++++++------ .../Controllers/LeaveReportController.cs | 7 +++--- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/BMA.EHR.Infrastructure/InfrastructureServiceRegistration.cs b/BMA.EHR.Infrastructure/InfrastructureServiceRegistration.cs index 36ba47ef..deee6910 100644 --- a/BMA.EHR.Infrastructure/InfrastructureServiceRegistration.cs +++ b/BMA.EHR.Infrastructure/InfrastructureServiceRegistration.cs @@ -20,8 +20,6 @@ namespace BMA.EHR.Infrastructure public static IServiceCollection AddLeavePersistence(this IServiceCollection services, IConfiguration configuration) { - - // leave db context var connectionStringLeave = configuration.GetConnectionString("LeaveConnection"); @@ -31,6 +29,10 @@ namespace BMA.EHR.Infrastructure { b.MigrationsAssembly(typeof(LeaveDbContext).Assembly.FullName); b.MigrationsHistoryTable("__LeaveMigrationsHistory"); + b.EnableRetryOnFailure( + maxRetryCount: 5, + maxRetryDelay: System.TimeSpan.FromSeconds(30), + errorNumbersToAdd: null); }), ServiceLifetime.Transient); @@ -43,8 +45,6 @@ namespace BMA.EHR.Infrastructure public static IServiceCollection AddDisciplinePersistence(this IServiceCollection services, IConfiguration configuration) { - - // discipline db context var connectionStringDiscipline = configuration.GetConnectionString("DisciplineConnection"); @@ -54,7 +54,10 @@ namespace BMA.EHR.Infrastructure { b.MigrationsAssembly(typeof(DisciplineDbContext).Assembly.FullName); b.MigrationsHistoryTable("__DisciplineMigrationsHistory"); - + b.EnableRetryOnFailure( + maxRetryCount: 5, + maxRetryDelay: System.TimeSpan.FromSeconds(30), + errorNumbersToAdd: null); }), ServiceLifetime.Transient); @@ -67,8 +70,6 @@ namespace BMA.EHR.Infrastructure IConfiguration configuration) { services.AddTransient(); - - var connectionString = configuration.GetConnectionString("DefaultConnection"); services.AddDbContext(options => @@ -77,9 +78,14 @@ namespace BMA.EHR.Infrastructure { b.MigrationsAssembly(typeof(ApplicationDBContext).Assembly.FullName); b.MigrationsHistoryTable("__EHRMigrationsHistory"); + b.EnableRetryOnFailure( + maxRetryCount: 5, + maxRetryDelay: System.TimeSpan.FromSeconds(30), + errorNumbersToAdd: null); }), ServiceLifetime.Transient); + services.AddTransient(provider => provider.GetService()); @@ -91,6 +97,10 @@ namespace BMA.EHR.Infrastructure { b.MigrationsAssembly(typeof(ApplicationDBExamContext).Assembly.FullName); b.MigrationsHistoryTable("__EHRMigrationsHistory"); + b.EnableRetryOnFailure( + maxRetryCount: 5, + maxRetryDelay: System.TimeSpan.FromSeconds(30), + errorNumbersToAdd: null); }), ServiceLifetime.Transient); diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 2b1c90be..ea798ed9 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -2167,8 +2167,8 @@ namespace BMA.EHR.Leave.Service.Controllers timeStamps.CheckOut != null ? timeStamps.CheckOut.Value.ToThaiFullDate2() : "", - checkInTimeRaw = timeStamps?.CheckIn, - checkOutTimeRaw = timeStamps?.CheckOut, + checkInTimeRaw = timeStamps == null ? dd.date.Date : timeStamps?.CheckIn, + checkOutTimeRaw = timeStamps == null ? dd.date.Date : timeStamps?.CheckOut != null ? timeStamps?.CheckOut : null, }; if (timeStamps != null) @@ -2204,7 +2204,8 @@ namespace BMA.EHR.Leave.Service.Controllers count++; } } - employees = employees.OrderBy(x => x.checkInDate).ThenBy(x => x.checkInTimeRaw ?? DateTime.MaxValue).ThenBy(x => x.checkOutTimeRaw ?? DateTime.MaxValue).ToList(); + //employees = employees.OrderBy(x => x.checkInDate).ThenBy(x => x.checkInTimeRaw ?? DateTime.MaxValue).ThenBy(x => x.checkOutTimeRaw ?? DateTime.MaxValue).ToList(); + employees = employees.OrderBy(x => x.checkInTimeRaw ?? DateTime.MaxValue).ThenBy(x => x.checkOutTimeRaw ?? DateTime.MaxValue).ToList(); for (int i = 0; i < employees.Count; i++) { employees[i].no = i + 1; From 795502a93cd30174b23759476bb2835b2f8e8ee4 Mon Sep 17 00:00:00 2001 From: harid Date: Mon, 15 Dec 2025 16:46:37 +0700 Subject: [PATCH 10/17] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B9=80?= =?UTF-8?q?=E0=B8=AD=E0=B8=81=E0=B8=AA=E0=B8=B2=E0=B8=A3=E0=B8=A3=E0=B8=B2?= =?UTF-8?q?=E0=B8=A2=E0=B8=87=E0=B8=B2=E0=B8=99=E0=B8=81=E0=B8=B2=E0=B8=A3?= =?UTF-8?q?=E0=B8=A5=E0=B8=B2=20#2109?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/LeaveReportController.cs | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index ea798ed9..00684dc1 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -181,6 +181,21 @@ namespace BMA.EHR.Leave.Service.Controllers LeaveRemain = (data.Type.Limit - sumLeave).ToString().ToThaiNumber(), LeaveAll = (data.LeaveTotal + sumLeave).ToString().ToThaiNumber(), + Type1 = data.Type.Name == "ลาป่วย" ? "🗹" : "☐", + Type2 = data.Type.Name == "ลากิจส่วนตัว" ? "🗹" : "☐", + Type3 = data.Type.Name == "ลาคลอดบุตร" ? "🗹" : "☐", + + leaveS1 = data.Type.Name == "ลาป่วย" ? sumLeave.ToString().ToThaiNumber() : "", + leaveS2 = data.Type.Name == "ลากิจส่วนตัว" ? sumLeave.ToString().ToThaiNumber() : "", + leaveS3 = data.Type.Name == "ลาคลอดบุตร" ? sumLeave.ToString().ToThaiNumber() : "", + + leaveT1 = data.Type.Name == "ลาป่วย" ? data.LeaveTotal.ToString().ToThaiNumber() : "", + leaveT2 = data.Type.Name == "ลากิจส่วนตัว" ? data.LeaveTotal.ToString().ToThaiNumber() : "", + leaveT3 = data.Type.Name == "ลาคลอดบุตร" ? data.LeaveTotal.ToString().ToThaiNumber() : "", + + leaveA1 = data.Type.Name == "ลาป่วย" ? (data.LeaveTotal + sumLeave).ToString().ToThaiNumber() : "", + leaveA2 = data.Type.Name == "ลากิจส่วนตัว" ? (data.LeaveTotal + sumLeave).ToString().ToThaiNumber() : "", + leaveA3 = data.Type.Name == "ลาคลอดบุตร" ? (data.LeaveTotal + sumLeave).ToString().ToThaiNumber() : "", approve = approveResult, leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" ? "🗹 อนุญาต ☐ ไม่อนุญาต" @@ -354,6 +369,7 @@ namespace BMA.EHR.Leave.Service.Controllers leaveDateEnd = data.LeaveEndDate.Date.ToThaiShortDate().ToThaiNumber(), LeaveTotal = data.LeaveTotal.ToString().ToThaiNumber(),//data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), + hajjStatus = data.HajjDayStatus == true ? "☐ ยังไม่เคย 🗹 เคย" : "🗹 ยังไม่เคย ☐ เคย", approve = approveResult, leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" ? "🗹 อนุญาต ☐ ไม่อนุญาต" @@ -395,6 +411,7 @@ namespace BMA.EHR.Leave.Service.Controllers leaveDateEnd = data.LeaveEndDate.Date.ToThaiShortDate().ToThaiNumber(), LeaveTotal = data.LeaveTotal.ToString().ToThaiNumber(),//data.LeaveStartDate.DiffDay(data.LeaveEndDate).ToString().ToThaiNumber(), + ordainStatus = data.OrdainDayStatus == true ? "☐ ยังไม่เคย 🗹 เคย" : "🗹 ยังไม่เคย ☐ เคย", approve = approveResult, leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" ? "🗹 อนุญาต ☐ ไม่อนุญาต" @@ -514,6 +531,14 @@ namespace BMA.EHR.Leave.Service.Controllers leaveAddress = data.LeaveAddress.ToThaiNumber(), leaveNumber = data.LeaveNumber.ToThaiNumber(), + Type1 = data.LeaveSubTypeName == "ศึกษาต่อ" ? "🗹" : "☐", + Type2 = data.LeaveSubTypeName == "ฝึกอบรม" ? "🗹" : "☐", + Type3 = data.LeaveSubTypeName == "ปฎิบัติการวิจัย" ? "🗹" : "☐", + Type4 = data.LeaveSubTypeName == "ดูงาน" ? "🗹" : "☐", + country1 = data.LeaveSubTypeName == "ศึกษาต่อ" ? data.StudyDayCountry.ToThaiNumber() ?? "" : "", + country2 = data.LeaveSubTypeName != "ศึกษาต่อ" ? data.StudyDayCountry.ToThaiNumber() ?? "" : "", + scholarship1 = data.LeaveSubTypeName == "ศึกษาต่อ" ? data.StudyDayScholarship.ToThaiNumber() ?? "" : "☐", + scholarship2 = data.LeaveSubTypeName != "ศึกษาต่อ" ? data.StudyDayScholarship.ToThaiNumber() ?? "" : "☐", approve = approveResult, leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" ? "🗹 อนุญาต ☐ ไม่อนุญาต" @@ -764,6 +789,7 @@ namespace BMA.EHR.Leave.Service.Controllers orgChild3 = x.OrgChild3 == null ? "" : x.OrgChild3.ToThaiNumber(), orgChild4 = x.OrgChild4 == null ? "" : x.OrgChild4.ToThaiNumber(), }).ToList(), + educations = profileLeave.Educations.Select(x => new { educationLevel = x.EducationLevel == null ? "" : x.EducationLevel.ToThaiNumber(), @@ -772,6 +798,8 @@ namespace BMA.EHR.Leave.Service.Controllers finishDate = x.FinishDate == null ? "-" : x.FinishDate.Value.ToThaiShortDate().ToThaiNumber() }).ToList(), + Type1 = profile.ProfileType == "OFFICER" ? "🗹" : "☐", + Type2 = profile.ProfileType != "OFFICER" ? "🗹" : "☐", approve = approveResult, leaveStatus = data.LeaveStatus != null && data.LeaveStatus!.ToUpper() == "APPROVE" ? "🗹 อนุญาต ☐ ไม่อนุญาต" From cc8cd77560eeb54f68c0afd65d761df6310fa5b5 Mon Sep 17 00:00:00 2001 From: harid Date: Tue, 16 Dec 2025 10:37:27 +0700 Subject: [PATCH 11/17] =?UTF-8?q?fix=20=E0=B8=A5=E0=B8=B2=E0=B8=95?= =?UTF-8?q?=E0=B8=B4=E0=B8=94=E0=B8=95=E0=B8=B2=E0=B8=A1=E0=B8=84=E0=B8=B9?= =?UTF-8?q?=E0=B9=88=E0=B8=AA=E0=B8=A1=E0=B8=A3=E0=B8=AA=20=E0=B8=A3?= =?UTF-8?q?=E0=B8=B2=E0=B8=A2=E0=B8=87=E0=B8=B2=E0=B8=99=E0=B9=81=E0=B8=AA?= =?UTF-8?q?=E0=B8=94=E0=B8=87=20Null?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BMA.EHR.Leave/Controllers/LeaveReportController.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 00684dc1..2c001072 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -690,11 +690,11 @@ namespace BMA.EHR.Leave.Service.Controllers coupleDayPosition = data.CoupleDayPosition.ToThaiNumber(), coupleDayOrganizationName = "-", coupleDayLevelCountry = data.CoupleDayLevelCountry.ToThaiNumber(), - coupleDayCountryHistory = data.CoupleDayCountryHistory!.ToThaiNumber() ?? "", - coupleDayTotalHistory = data.CoupleDayTotalHistory!.ToThaiNumber() ?? "", - coupleDayStartDateHistory = data.CoupleDayStartDateHistory == null ? "" : data.CoupleDayStartDateHistory.Value.Date.ToThaiShortDate().ToThaiNumber(), - coupleDayEndDateHistory = data.CoupleDayEndDateHistory == null ? "" : data.CoupleDayEndDateHistory.Value.Date.ToThaiShortDate().ToThaiNumber(), - coupleDaySumTotalHistory = data.CoupleDaySumTotalHistory!.ToThaiNumber(), + coupleDayCountryHistory = data.CoupleDayCountryHistory == null ? "-" : data.CoupleDayCountryHistory!.ToThaiNumber() ?? "", + coupleDayTotalHistory = data.CoupleDayTotalHistory == null ? "-" : data.CoupleDayTotalHistory!.ToThaiNumber(), + coupleDayStartDateHistory = data.CoupleDayStartDateHistory == null ? "-" : data.CoupleDayStartDateHistory.Value.Date.ToThaiShortDate().ToThaiNumber(), + coupleDayEndDateHistory = data.CoupleDayEndDateHistory == null ? "-" : data.CoupleDayEndDateHistory.Value.Date.ToThaiShortDate().ToThaiNumber(), + coupleDaySumTotalHistory = data.CoupleDaySumTotalHistory == null ? "-" : data.CoupleDaySumTotalHistory!.ToThaiNumber(), leaveDateStart = data.LeaveStartDate.Date.ToThaiShortDate().ToThaiNumber(), From d6497a5d515a6c543985b26e9a858331a5e056f9 Mon Sep 17 00:00:00 2001 From: Adisak Date: Wed, 17 Dec 2025 15:38:35 +0700 Subject: [PATCH 12/17] #2132 --- .../Controllers/PlacementReceiveController.cs | 106 ++++++++---------- 1 file changed, 46 insertions(+), 60 deletions(-) diff --git a/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs b/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs index 9bbb6721..f18e2b32 100644 --- a/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs +++ b/BMA.EHR.Placement.Service/Controllers/PlacementReceiveController.cs @@ -502,46 +502,35 @@ namespace BMA.EHR.Placement.Service.Controllers LastUpdateUserId = UserId ?? "", LastUpdatedAt = DateTime.Now, }; - if (placementReceive.citizenId.Length != 13) + + var apiUrlCheckCitizen = $"{_configuration["API"]}/org/dotnet/check-citizen"; + + using (var client = new HttpClient()) + { - return Error("กรุณากรอกข้อมูลรหัสบัตรประจำตัวประชาชนให้ครบ 13 หลัก", 500); - } - int[] citizenIdDigits = placementReceive.citizenId.Select(c => int.Parse(c.ToString())).ToArray(); - int cal = - citizenIdDigits[0] * 13 + - citizenIdDigits[1] * 12 + - citizenIdDigits[2] * 11 + - citizenIdDigits[3] * 10 + - citizenIdDigits[4] * 9 + - citizenIdDigits[5] * 8 + - citizenIdDigits[6] * 7 + - citizenIdDigits[7] * 6 + - citizenIdDigits[8] * 5 + - citizenIdDigits[9] * 4 + - citizenIdDigits[10] * 3 + - citizenIdDigits[11] * 2; - int calStp2 = cal % 11; - int chkDigit = 11 - calStp2; + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); - //////if (chkDigit == 10) - //////{ - ////// chkDigit = 1; - //////} - //////else if (chkDigit == 11) - //////{ - ////// chkDigit = chkDigit % 10; - //////} + client.DefaultRequestHeaders.Add("api_key", _configuration["API_KEY"]); + + var _res = await client.PostAsJsonAsync(apiUrlCheckCitizen, new + + { + + placementReceive.citizenId + + }); + + var _result = await _res.Content.ReadAsStringAsync(); + + var jsonDataCheckCitizen = JsonConvert.DeserializeObject(_result); + + if (!_res.IsSuccessStatusCode) + + throw new Exception(jsonDataCheckCitizen?["message"]?.ToString()); - if (chkDigit >= 10) - { - chkDigit = 0; } - if (citizenIdDigits[12] != chkDigit) - { - return Error("ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง", 500); - } var avatarUrl = string.Empty; var apiUrl = $"{_configuration["API"]}/org/profile/citizenid/position/{req.citizenId}"; @@ -823,36 +812,33 @@ namespace BMA.EHR.Placement.Service.Controllers .FirstOrDefaultAsync(x => x.Id == id); if (uppdated == null) return Error(GlobalMessages.PlacementReceiveNotFound, 404); - if (req.citizenId.Length != 13) - { - return Error("กรุณากรอกข้อมูลรหัสบัตรประจำตัวประชาชนให้ครบ 13 หลัก", 500); - } - int[] citizenIdDigits = req.citizenId.Select(c => int.Parse(c.ToString())).ToArray(); - int cal = - citizenIdDigits[0] * 13 + - citizenIdDigits[1] * 12 + - citizenIdDigits[2] * 11 + - citizenIdDigits[3] * 10 + - citizenIdDigits[4] * 9 + - citizenIdDigits[5] * 8 + - citizenIdDigits[6] * 7 + - citizenIdDigits[7] * 6 + - citizenIdDigits[8] * 5 + - citizenIdDigits[9] * 4 + - citizenIdDigits[10] * 3 + - citizenIdDigits[11] * 2; - int calStp2 = cal % 11; - int chkDigit = 11 - calStp2; + var apiUrlCheckCitizen = $"{_configuration["API"]}/org/dotnet/check-citizen"; - if (chkDigit >= 10) - { - chkDigit = 0; - } + using (var client = new HttpClient()) - if (citizenIdDigits[12] != chkDigit) { - return Error("ข้อมูลรหัสบัตรประจำตัวประชาชนไม่ถูกต้อง", 500); + + client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Replace("Bearer ", "")); + + client.DefaultRequestHeaders.Add("api_key", _configuration["API_KEY"]); + + var _res = await client.PostAsJsonAsync(apiUrlCheckCitizen, new + + { + + req.citizenId + + }); + + var _result = await _res.Content.ReadAsStringAsync(); + + var jsonDataCheckCitizen = JsonConvert.DeserializeObject(_result); + + if (!_res.IsSuccessStatusCode) + + throw new Exception(jsonDataCheckCitizen?["message"]?.ToString()); + } uppdated.Relationship = req.Relationship; From d5c2c54eaa515fd4d8db478d363a3300729e3846 Mon Sep 17 00:00:00 2001 From: Suphonchai Phoonsawat Date: Thu, 18 Dec 2025 14:08:05 +0700 Subject: [PATCH 13/17] fix: update image retrieval logic in LeaveController and adjust RabbitMQ configuration in appsettings #2138 --- .../CombinedErrorHandlerAndLoggingMiddleware.cs | 7 +++++-- BMA.EHR.Leave/Controllers/LeaveController.cs | 5 +++-- BMA.EHR.Leave/appsettings.json | 9 ++++----- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/BMA.EHR.Domain/Middlewares/CombinedErrorHandlerAndLoggingMiddleware.cs b/BMA.EHR.Domain/Middlewares/CombinedErrorHandlerAndLoggingMiddleware.cs index 00224e36..a9de25fc 100644 --- a/BMA.EHR.Domain/Middlewares/CombinedErrorHandlerAndLoggingMiddleware.cs +++ b/BMA.EHR.Domain/Middlewares/CombinedErrorHandlerAndLoggingMiddleware.cs @@ -552,12 +552,15 @@ namespace BMA.EHR.Domain.Middlewares return Guid.Empty.ToString("D"); } - // Decode Base64 payload + // Decode Base64Url payload (JWT uses Base64Url encoding, not standard Base64) var payload = parts[1]; + // แปลง Base64Url เป็น Base64 ก่อน + payload = payload.Replace('-', '+').Replace('_', '/'); + // เพิ่ม padding ถ้าจำเป็น var padLength = 4 - (payload.Length % 4); - if (padLength != 4) + if (padLength < 4) { payload += new string('=', padLength); } diff --git a/BMA.EHR.Leave/Controllers/LeaveController.cs b/BMA.EHR.Leave/Controllers/LeaveController.cs index 6ae9f015..a309fb21 100644 --- a/BMA.EHR.Leave/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveController.cs @@ -1496,7 +1496,8 @@ namespace BMA.EHR.Leave.Service.Controllers CheckInPOI = d.CheckInPOI, CheckInLat = d.CheckInLat, CheckInLon = d.CheckInLon, - CheckInImg = $"{imgUrl}/{d.CheckInImageUrl}", + //CheckInImg = $"{imgUrl}/{d.CheckInImageUrl}", + CheckInImg = await _minIOService.ImagesPathByName(d.CheckInImageUrl), CheckInStatus = d.CheckInStatus != null || d.CheckInStatus != "" ? d.CheckInStatus : DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? @@ -1516,7 +1517,7 @@ namespace BMA.EHR.Leave.Service.Controllers CheckOutPOI = d.CheckOut == null ? "" : d.CheckOutPOI, CheckOutLat = d.CheckOut == null ? null : d.CheckOutLat, CheckOutLon = d.CheckOut == null ? null : d.CheckOutLon, - CheckOutImg = d.CheckOut == null ? "" : $"{imgUrl}/{d.CheckOutImageUrl}", + CheckOutImg = d.CheckOut == null ? "" : await _minIOService.ImagesPathByName(d.CheckOutImageUrl), CheckOutStatus = d.CheckOut == null ? null : d.CheckOutStatus != null || d.CheckOutStatus != "" ? d.CheckOutStatus : diff --git a/BMA.EHR.Leave/appsettings.json b/BMA.EHR.Leave/appsettings.json index 4b331ed8..e1bb5d10 100644 --- a/BMA.EHR.Leave/appsettings.json +++ b/BMA.EHR.Leave/appsettings.json @@ -50,12 +50,11 @@ "API": "https://bma-ehr.frappet.synology.me/api/v1/probation" }, "Rabbit": { - "Host": "192.168.1.40", - "API": "https://bma-ehr.frappet.synology.me/api/v1", + "Host": "192.168.1.63", "User": "admin", - "Password": "Test123456", - "Queue": "bma-checkin-queue", - "URL": "https://edm-mq.frappet.synology.me/api/queues/%2F/" + "Password": "12345678", + "Queue": "hrms-checkin-queue", + "URL": "http://192.168.1.63:9122/api/queues/%2F/" }, "Mail": { "Server": "mail.bangkok.go.th", From 97c9064ab53fa26119fc11e3252e5263a134b063 Mon Sep 17 00:00:00 2001 From: Adisak Date: Fri, 19 Dec 2025 14:23:27 +0700 Subject: [PATCH 14/17] #2142 --- BMA.EHR.Leave/Controllers/LeaveController.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BMA.EHR.Leave/Controllers/LeaveController.cs b/BMA.EHR.Leave/Controllers/LeaveController.cs index a309fb21..d4edffb2 100644 --- a/BMA.EHR.Leave/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveController.cs @@ -2090,7 +2090,7 @@ namespace BMA.EHR.Leave.Service.Controllers [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> SearchEmpProfileAsync([FromBody] DTOs.ChangeRound.SearchProfileDto req) { - var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_WORK_ROUND_EDIT"); + var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_WORK_ROUND_EDIT_EMP"); var jsonData = JsonConvert.DeserializeObject(getPermission); if (jsonData["status"]?.ToString() != "200") { From 3b58d38eb1fc24876861eff957de4f69d547aae6 Mon Sep 17 00:00:00 2001 From: harid Date: Mon, 22 Dec 2025 09:49:59 +0700 Subject: [PATCH 15/17] add filter status #2083 --- .../Controllers/DisciplineSuspendController.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/BMA.EHR.Discipline.Service/Controllers/DisciplineSuspendController.cs b/BMA.EHR.Discipline.Service/Controllers/DisciplineSuspendController.cs index de2c7ab2..9b32b1eb 100644 --- a/BMA.EHR.Discipline.Service/Controllers/DisciplineSuspendController.cs +++ b/BMA.EHR.Discipline.Service/Controllers/DisciplineSuspendController.cs @@ -59,7 +59,7 @@ namespace BMA.EHR.DisciplineSuspend.Service.Controllers /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet()] - public async Task> GetDisciplineSuspend(DateTime? startDate, DateTime? endDate, int page = 1, int pageSize = 25, string keyword = "", string profileType = "", string? sortBy = "", bool? descending = false) + public async Task> GetDisciplineSuspend(DateTime? startDate, DateTime? endDate, int page = 1, int pageSize = 25, string keyword = "", string profileType = "", string? sortBy = "", bool? descending = false, string? status="") { var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_DISCIPLINE_SUSPENDED"); var jsonData = JsonConvert.DeserializeObject(getPermission); @@ -78,7 +78,7 @@ namespace BMA.EHR.DisciplineSuspend.Service.Controllers ) : true ) - && + && ( (x.CitizenId != null && x.CitizenId.Contains(keyword)) || ((x.Prefix ?? "") + (x.FirstName ?? "") + " " + (x.LastName ?? "")).Contains(keyword) || @@ -94,6 +94,10 @@ namespace BMA.EHR.DisciplineSuspend.Service.Controllers (profileType.ToUpper() == "OFFICER" && x.profileType == "OFFICER") || (profileType.ToUpper() == "EMPLOYEE" && x.profileType == "EMPLOYEE") ) + && + ( + !string.IsNullOrEmpty(status) ? x.Status!.Trim().ToUpper() == status : true + ) select x).ToList(); var query = data_search .Select(x => new From fb282915d18c69eba1472889f79d9e7dc7daecc6 Mon Sep 17 00:00:00 2001 From: Adisak Date: Mon, 22 Dec 2025 13:45:11 +0700 Subject: [PATCH 16/17] #2146 and #2147 --- .../AdditionalCheckRequestRepository.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs index 04c0c921..12f51207 100644 --- a/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs +++ b/BMA.EHR.Application/Repositories/Leaves/TimeAttendants/AdditionalCheckRequestRepository.cs @@ -9,6 +9,8 @@ using BMA.EHR.Domain.Shared; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; +using Serilog; +using System.Diagnostics; namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants { @@ -174,15 +176,19 @@ namespace BMA.EHR.Application.Repositories.Leaves.TimeAttendants else if (role == "PARENT") { data = data - .Where(x => x.RootDnaId == Guid.Parse(nodeId!) && x.Child1DnaId != null).ToList(); + .Where(x => x.RootDnaId == Guid.Parse(nodeId!) && x.Child1DnaId != null && x.Child1DnaId != Guid.Empty).ToList(); } else if (role == "NORMAL") { data = data.Where(x => - node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) && x.Child1DnaId == null : - node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) && x.Child2DnaId == null : - node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) && x.Child3DnaId == null : - node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) && x.Child4DnaId == null : + node == 0 ? x.RootDnaId == Guid.Parse(nodeId!) && + (x.Child1DnaId == Guid.Empty || x.Child1DnaId == null) : + node == 1 ? x.Child1DnaId == Guid.Parse(nodeId!) && + (x.Child2DnaId == Guid.Empty || x.Child2DnaId == null) : + node == 2 ? x.Child2DnaId == Guid.Parse(nodeId!) && + (x.Child3DnaId == Guid.Empty || x.Child3DnaId == null) : + node == 3 ? x.Child3DnaId == Guid.Parse(nodeId!) && + (x.Child4DnaId == Guid.Empty || x.Child4DnaId == null) : node == 4 ? x.Child4DnaId == Guid.Parse(nodeId!) : true ).ToList(); From fd8e0e78b66d2e702be7c5398987abbcc74d9560 Mon Sep 17 00:00:00 2001 From: harid Date: Mon, 22 Dec 2025 16:16:07 +0700 Subject: [PATCH 17/17] =?UTF-8?q?=E0=B8=81=E0=B8=A3=E0=B8=AD=E0=B8=87?= =?UTF-8?q?=E0=B8=AA=E0=B8=B4=E0=B8=97=E0=B8=98=E0=B8=B4=E0=B9=8C=E0=B8=AB?= =?UTF-8?q?=E0=B8=99=E0=B9=89=E0=B8=B2=E0=B8=A3=E0=B8=B2=E0=B8=A2=E0=B8=8A?= =?UTF-8?q?=E0=B8=B7=E0=B9=88=E0=B8=AD=E0=B8=9C=E0=B8=B9=E0=B9=89=E0=B8=96?= =?UTF-8?q?=E0=B8=B9=E0=B8=81=E0=B8=9E=E0=B8=B1=E0=B8=81=E0=B8=A3=E0=B8=B2?= =?UTF-8?q?=E0=B8=8A=E0=B8=81=E0=B8=B2=E0=B8=A3=20#2084?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DisciplineSuspendController.cs | 85 ++++++++++++++++++- 1 file changed, 81 insertions(+), 4 deletions(-) diff --git a/BMA.EHR.Discipline.Service/Controllers/DisciplineSuspendController.cs b/BMA.EHR.Discipline.Service/Controllers/DisciplineSuspendController.cs index 9b32b1eb..e5348ce0 100644 --- a/BMA.EHR.Discipline.Service/Controllers/DisciplineSuspendController.cs +++ b/BMA.EHR.Discipline.Service/Controllers/DisciplineSuspendController.cs @@ -1,10 +1,13 @@ using BMA.EHR.Application.Repositories; using BMA.EHR.Application.Repositories.MessageQueue; +using BMA.EHR.Application.Responses.Profiles; using BMA.EHR.Discipline.Service.Requests; using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Models.Discipline; using BMA.EHR.Domain.Shared; using BMA.EHR.Infrastructure.Persistence; +using Elasticsearch.Net; + // using BMA.EHR.Placement.Service.Requests; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -29,24 +32,25 @@ namespace BMA.EHR.DisciplineSuspend.Service.Controllers private readonly MinIODisciplineService _documentService; private readonly IHttpContextAccessor _httpContextAccessor; private readonly PermissionRepository _permission; - + private readonly UserProfileRepository _userProfileRepository; public DisciplineSuspendController(DisciplineDbContext context, MinIODisciplineService documentService, IHttpContextAccessor httpContextAccessor, - PermissionRepository permission) + PermissionRepository permission, + UserProfileRepository userProfileRepository) { // _repository = repository; _context = context; _documentService = documentService; _httpContextAccessor = httpContextAccessor; _permission = permission; + _userProfileRepository = userProfileRepository; } #region " Properties " - private string? UserId => _httpContextAccessor?.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value; - private string? FullName => _httpContextAccessor?.HttpContext?.User?.FindFirst("name")?.Value; + private string? AccessToken => _httpContextAccessor?.HttpContext?.Request.Headers["Authorization"]; #endregion @@ -67,6 +71,41 @@ namespace BMA.EHR.DisciplineSuspend.Service.Controllers { return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden); } + // กรองสิทธิ์ + string role = jsonData["result"]?.ToString() ?? ""; + var nodeId = string.Empty; + var profileAdmin = new GetUserOCAllDto(); + profileAdmin = await _userProfileRepository.GetUserOCAll(Guid.Parse(UserId!), AccessToken); + if (role == "NORMAL" || role == "CHILD") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child4DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 1 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } + else if (role == "BROTHER") + { + nodeId = profileAdmin?.Node == 4 + ? profileAdmin?.Child3DnaId + : profileAdmin?.Node == 3 + ? profileAdmin?.Child2DnaId + : profileAdmin?.Node == 2 + ? profileAdmin?.Child1DnaId + : profileAdmin?.Node == 1 || profileAdmin?.Node == 0 + ? profileAdmin?.RootDnaId + : ""; + } + else if (role == "ROOT" || role == "PARENT") + { + nodeId = profileAdmin?.RootDnaId; + } var data_search = (from x in _context.DisciplineReport_Profiles.Include(x => x.DisciplineDisciplinary) where ( @@ -98,6 +137,44 @@ namespace BMA.EHR.DisciplineSuspend.Service.Controllers ( !string.IsNullOrEmpty(status) ? x.Status!.Trim().ToUpper() == status : true ) + && + ( + role == "OWNER" + ? true + : role == "ROOT" + ? x.rootDnaId == nodeId + : role == "PARENT" + ? x.rootDnaId == nodeId && x.child1DnaId != null + : role == "CHILD" + ? ( + profileAdmin.Node == 4 ? x.child4DnaId == nodeId : + profileAdmin.Node == 3 ? x.child3DnaId == nodeId : + profileAdmin.Node == 2 ? x.child2DnaId == nodeId : + profileAdmin.Node == 1 ? x.child1DnaId == nodeId : + profileAdmin.Node == 0 ? x.rootDnaId == nodeId : + true + ) + : role == "BROTHER" + ? ( + profileAdmin.Node == 4 ? x.child3DnaId == nodeId : + profileAdmin.Node == 3 ? x.child2DnaId == nodeId : + profileAdmin.Node == 2 ? x.child1DnaId == nodeId : + ( + profileAdmin.Node == 1 || profileAdmin.Node == 0 + ) + ? x.rootDnaId == nodeId : true + ) + : role == "NORMAL" + ? ( + profileAdmin.Node == 0 ? x.rootDnaId == nodeId && x.child1DnaId == null : + profileAdmin.Node == 1 ? x.child1DnaId == nodeId && x.child2DnaId == null : + profileAdmin.Node == 2 ? x.child2DnaId == nodeId && x.child3DnaId == null : + profileAdmin.Node == 3 ? x.child3DnaId == nodeId && x.child4DnaId == null : + profileAdmin.Node == 4 ? x.child4DnaId == nodeId : + true + ) + : true + ) select x).ToList(); var query = data_search .Select(x => new