diff --git a/Data/MetadataDbContext.cs b/Data/MetadataDbContext.cs index 5708bfb..506f92c 100644 --- a/Data/MetadataDbContext.cs +++ b/Data/MetadataDbContext.cs @@ -36,6 +36,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Data } public DbSet ProfileOrganizations { get; set; } public DbSet Profiles { get; set; } + public DbSet ProfileSalaries { get; set; } public DbSet Organizations { get; set; } public DbSet Prefixes { get; set; } @@ -63,5 +64,6 @@ namespace BMA.EHR.Recurit.Exam.Service.Data public DbSet PlacementTypes { get; set; } public DbSet PositionPaths { get; set; } public DbSet Genders { get; set; } + public DbSet Documents { get; set; } } } diff --git a/Models/HR/Profile.cs b/Models/HR/Profile.cs index a278278..3ca60a8 100644 --- a/Models/HR/Profile.cs +++ b/Models/HR/Profile.cs @@ -1,117 +1,120 @@ -using BMA.EHR.Recurit.Exam.Service.Models; + using System.ComponentModel.DataAnnotations; +using BMA.EHR.Recurit.Exam.Service.Models; +using Microsoft.EntityFrameworkCore; namespace BMA.EHR.Profile.Service.Models.HR { public class Profile : EntityBase - { - [Key] - public Guid Id { get; set; } - - [MaxLength(13)] + { // [Key] + // public Guid Id { get; set; } + [MaxLength(13), Comment("รหัสบัตรประชาชน")] public string? CitizenId { get; set; } - [MaxLength(50)] public string? ProfileType { get; set; } - - [MaxLength(20)] + [MaxLength(20), Comment("ประเภทการจ้าง")] public string? EmployeeType { get; set; } - - [MaxLength(20)] + [MaxLength(20), Comment("ประเภทลูกจ้าง")] public string? EmployeeClass { get; set; } - - public Guid? PrefixId { get; set; } - - [MaxLength(100)] - [Required] + // [Comment("Id คำนำหน้า")] + // public Prefix? Prefix { get; set; } + [Required, MaxLength(100), Comment("ชื่อ")] public string? FirstName { get; set; } - - [MaxLength(100)] - [Required] + [Required, MaxLength(100), Comment("นามสกุล")] public string? LastName { get; set; } - + [Comment("Id คำนำหน้า(เดิม)")] + public Guid? PrefixOldId { get; set; } + [Required, MaxLength(100), Comment("ชื่อ(เดิม)")] + public string? FirstNameOld { get; set; } + [Required, MaxLength(100), Comment("นามสกุล(เดิม)")] + public string? LastNameOld { get; set; } [MaxLength(100)] public string AvatarRef { get; set; } - - public Guid? GenderId { get; set; } - - [MaxLength(100)] + // [Comment("Id เพศ")] + // public Gender? Gender { get; set; } + [MaxLength(100), Comment("สัญชาติ")] public string? Nationality { get; set; } - - [MaxLength(100)] + [MaxLength(100), Comment("เชื้อชาติ")] public string? Race { get; set; } - + [Comment("Id ศาสนา")] public Guid? ReligionId { get; set; } - - [Required] + [Required, Comment("วันเกิด")] public DateTime BirthDate { get; set; } - + [Comment("Id กลุ่มเลือด")] public Guid? BloodGroupId { get; set; } - + [Comment("Id สถานะภาพ")] public Guid? RelationshipId { get; set; } - - [MaxLength(50)] + [MaxLength(50), Comment("เบอร์โทร")] public string? TelephoneNumber { get; set; } - + [Comment("คู่สมรส")] public bool? Couple { get; set; } - + [Comment("Id คำนำหน้าคู่สมรส")] public Guid? CouplePrefixId { get; set; } - - [MaxLength(100)] + [MaxLength(100), Comment("ชื่อคู่สมรส")] public string? CoupleFirstName { get; set; } - - [MaxLength(100)] + [MaxLength(100), Comment("นามสกุลคู่สมรส")] public string? CoupleLastName { get; set; } - - [MaxLength(100)] + [MaxLength(100), Comment("นามสกุลคู่สมรส(เดิม)")] + public string? CoupleLastNameOld { get; set; } + [MaxLength(100), Comment("อาชีพคู่สมรส")] public string? CoupleCareer { get; set; } + [MaxLength(20), Comment("เลขที่บัตรประชาชนคู่สมรส")] + public string? CoupleCitizenId { get; set; } + [Comment("มีชีวิตคู่สมรส")] + public bool CoupleLive { get; set; } = true; + [Comment("Id คำนำหน้าบิดา")] public Guid? FatherPrefixId { get; set; } - - [MaxLength(100)] + [MaxLength(100), Comment("ชื่อบิดา")] public string? FatherFirstName { get; set; } - [MaxLength(100)] + [MaxLength(100), Comment("นามสกุลบิดา")] public string? FatherLastName { get; set; } - [MaxLength(100)] + [MaxLength(100), Comment("อาชีพบิดา")] public string? FatherCareer { get; set; } + [MaxLength(20), Comment("เลขที่บัตรประชาชนบิดา")] + public string? FatherCitizenId { get; set; } + [Comment("มีชีวิตบิดา")] + public bool FatherLive { get; set; } = true; + [Comment("Id คำนำหน้ามารดา")] public Guid? MotherPrefixId { get; set; } - [MaxLength(100)] + [MaxLength(100), Comment("ชื่อมารดา")] public string? MotherFirstName { get; set; } - [MaxLength(100)] + [MaxLength(100), Comment("นามสกุลมารดา")] public string? MotherLastName { get; set; } - [MaxLength(100)] + [MaxLength(100), Comment("อาชีพมารดา")] public string? MotherCareer { get; set; } + [MaxLength(20), Comment("เลขที่บัตรประชาชนมารดา")] + public string? MotherCitizenId { get; set; } - [MaxLength(200)] + [Comment("มีชีวิตมารดา")] + public bool MotherLive { get; set; } = true; + [MaxLength(200), Comment("ที่อยู่ปัจจุบัน")] public string? CurrentAddress { get; set; } - + [Comment("Id แขวงปัจจุบัน")] public Guid? CurrentSubDistrictId { get; set; } - + [Comment("Id เขตปัจจุบัน")] public Guid? CurrentDistrictId { get; set; } - + [Comment("Id จังหวัดปัจจุบัน")] public Guid? CurrentProvinceId { get; set; } - - [MaxLength(5)] + [MaxLength(5), Comment("รหัสไปรษณีย์ปัจจุบัน")] public string? CurrentZipCode { get; set; } - + [Comment("ที่อยู่ปัจจุบันตรงกับที่อยู่ตามทะเบียนบ้านหรือไม่")] public bool? RegistrationSame { get; set; } = false; - - [MaxLength(200)] + [MaxLength(200), Comment("Id แขวงตามทะเบียนบ้าน")] public string? RegistrationAddress { get; set; } - + [Comment("แขวงตามทะเบียนบ้าน")] public Guid? RegistrationSubDistrictId { get; set; } - + [Comment("Id เขตตามทะเบียนบ้าน")] public Guid? RegistrationDistrictId { get; set; } - + [Comment("Id จังหวัดตามทะเบียนบ้าน")] public Guid? RegistrationProvinceId { get; set; } - - [MaxLength(5)] + [MaxLength(5), Comment("รหัสไปรษณีย์ตามทะเบียนบ้าน")] public string? RegistrationZipCode { get; set; } public DateTime? DateAppoint { get; set; } @@ -120,6 +123,7 @@ namespace BMA.EHR.Profile.Service.Models.HR public DateTime? DateRetire { get; set; } + public string? ReasonSameDate { get; set; } // public Guid? AffiliationId { get; set; } // public Guid? PositionId { get; set; } // public Guid? WorkId { get; set; } @@ -127,36 +131,72 @@ namespace BMA.EHR.Profile.Service.Models.HR // public Guid? LevelId { get; set; } // public Guid? NumberId { get; set; } // public Guid? BusinessId { get; set; } - // public Guid? OcId { get; set; } - // public Guid? PositionId { get; set; } - // public Guid? PosNoId { get; set; } + [Comment("Id สังกัด")] public Guid? OcId { get; set; } + [Comment("สังกัด")] public string? Oc { get; set; } public Guid? OrganizationShortNameId { get; set; } public string? OrganizationShortName { get; set; } - public string? GovernmentCode { get; set; } - public Guid? OrganizationOrganizationId { get; set; } public string? OrganizationOrganization { get; set; } - public Guid? PositionId { get; set; } - public string? Position { get; set; } - public Guid? PosNoId { get; set; } - public string? PosNo { get; set; } + // [Comment("Id ตำแหน่ง")] + // public PositionPath? Position { get; set; } + // // [Comment("ตำแหน่ง")] + // // public string? Position { get; set; } + // [Comment("Id เลขที่ตำแหน่ง")] + // public PositionNumberEntity? PosNo { get; set; } + // [Comment("เลขที่ตำแหน่ง")] + // public string? PosNo { get; set; } + [Comment("เลขที่ตำแหน่งลูกจ้าง")] + public string? PosNoEmployee { get; set; } + [Comment("Id สายงาน")] public Guid? PositionLineId { get; set; } + [Comment("สายงาน")] public string? PositionLine { get; set; } + [Comment("Id ด้าน/สาขา")] public Guid? PositionPathSideId { get; set; } + [Comment("ด้าน/สาขา")] public string? PositionPathSide { get; set; } - public Guid? PositionTypeId { get; set; } - public string? PositionType { get; set; } - public Guid? PositionLevelId { get; set; } - public string? PositionLevel { get; set; } + // [Comment("Id ประเภทตำแหน่ง")] + // public Guid? PositionTypeId { get; set; } + // [Comment("ประเภทตำแหน่ง")] + // public PositionType? PositionType { get; set; } + // // [Comment(" Id ระดับ")] + // // public Guid? PositionLevelId { get; set; } + // [Comment("ระดับ")] + // public PositionLevel? PositionLevel { get; set; } + [Comment("Id ตำแหน่งทางการบริหาร")] public Guid? PositionExecutiveId { get; set; } + [Comment("ตำแหน่งทางการบริหาร")] public string? PositionExecutive { get; set; } + [Comment("Id ด้านทางการบริหาร")] public Guid? PositionExecutiveSideId { get; set; } + [Comment("ด้านทางการบริหาร")] public string? PositionExecutiveSide { get; set; } - [MaxLength(100)] + // [Comment("Id ตำแหน่ง")] + // public PositionEmployeePosition? PositionEmployeePosition { get; set; } + // // [Comment("ตำแหน่ง")] + // // public string? PositionEmployeePosition { get; set; } + // [Comment("Id ด้านของตำแหน่ง")] + // public PositionEmployeePositionSide? PositionEmployeePositionSide { get; set; } + // // [Comment("ด้านของตำแหน่ง")] + // // public string? PositionEmployeePositionSide { get; set; } + // [Comment(" Id ระดับชั้นงาน")] + // public PositionEmployeeLevel? PositionEmployeeLevel { get; set; } + // // [Comment("ระดับชั้นงาน")] + // // public string? PositionEmployeeLevel { get; set; } + // [Comment("Id กลุ่มงาน")] + // public PositionEmployeeGroup? PositionEmployeeGroup { get; set; } + // // [Comment("กลุ่มงาน")] + // // public string? PositionEmployeeGroup { get; set; } + // [Comment("Id สายงาน")] + // public PositionEmployeeLine? PositionEmployeeLine { get; set; } + // // [Comment("สายงาน")] + // // public string? PositionEmployeeLine { get; set; } + + [MaxLength(100), Comment("สถานภาพทางกาย")] public string Physical { get; set; } [MaxLength(100)] @@ -170,6 +210,9 @@ namespace BMA.EHR.Profile.Service.Models.HR [MaxLength(1000)] public string? LeaveReason { get; set; } + public string? LeaveDetail { get; set; } + public string? LeaveNumberOrder { get; set; } + public DateTime? LeaveDateOrder { get; set; } public DateTime? CreatedDate { get; set; } @@ -204,7 +247,80 @@ namespace BMA.EHR.Profile.Service.Models.HR public DateTime? VerifiedDate { get; set; } + // public Document? Avatar { get; set; } + public bool IsProbation { get; set; } = true; + // public PositionType PositionType { get; set; } // ประเภทตำแหน่ง + + // public PositionLevel PositionLevel { get; set; } // ระดับ + + // public OrganizationPositionEntity? OrganizationPosition { get; set; } + // public LimitLeave? LimitLeave { get; set; } + public Guid? KeycloakId { get; set; } + [Comment("สังกัด")] + public string? EmployeeOc { get; set; } + [Comment("ค่าจ้าง")] + public double? EmployeeWage { get; set; } + [Comment("ประเภทบุคคล")] + public string? EmployeeTypeIndividual { get; set; } + [Comment("เงินเพิ่มการครองชีพชั่วคราว")] + public double? EmployeeMoneyIncrease { get; set; } + [Comment("เงินช่วยเหลือค่าครองชีพชั่วคราว")] + public double? EmployeeMoneyAllowance { get; set; } + [Comment("เงินสมทบประกันสังคม(ลูกจ้าง)")] + public double? EmployeeMoneyEmployee { get; set; } + [Comment("เงินสมทบประกันสังคม(นายจ้าง)")] + public double? EmployeeMoneyEmployer { get; set; } + + // public virtual List Educations { get; set; } = new List(); + + // public virtual List Honors { get; set; } = new List(); + // public virtual List Assessments { get; set; } = new List(); + + // public virtual List Disciplines { get; set; } = new List(); + + // public virtual List Certificates { get; set; } = new List(); + + // public virtual List Trainings { get; set; } = new List(); + + // public virtual List Insignias { get; set; } = new List(); + + public virtual List Salaries { get; set; } = new List(); + + // public virtual List ProfileHistory { get; set; } = new List(); + + // public virtual List CoupleHistory { get; set; } = new List(); + + // public virtual List FatherHistory { get; set; } = new List(); + + // public virtual List MotherHistory { get; set; } = new List(); + + // public virtual List FamilyHistory { get; set; } = new List(); + + // public virtual List GovernmentHistory { get; set; } = new List(); + + // public virtual List Leaves { get; set; } = new List(); + + // public virtual List CurrentAddressHistory { get; set; } = new List(); + + // public virtual List RegistrationAddressHistory { get; set; } = new List(); + + // public virtual List AddressHistory { get; set; } = new List(); + + // public virtual List Others { get; set; } = new List(); + + // public virtual List Abilitys { get; set; } = new List(); + + // public virtual List Dutys { get; set; } = new List(); + + // public virtual List Nopaids { get; set; } = new List(); + + // public virtual List AvatarHistory { get; set; } = new List(); + + // public virtual List Papers { get; set; } = new List(); + + // public virtual List Childrens { get; set; } = new List(); + // public virtual List ChangeNames { get; set; } = new List(); } } diff --git a/Models/HR/ProfileSalary.cs b/Models/HR/ProfileSalary.cs new file mode 100644 index 0000000..68e59df --- /dev/null +++ b/Models/HR/ProfileSalary.cs @@ -0,0 +1,68 @@ +using BMA.EHR.Recurit.Exam.Service.Models; +using System.ComponentModel.DataAnnotations; +using Microsoft.EntityFrameworkCore; + +namespace BMA.EHR.Profile.Service.Models.HR +{ + public class ProfileSalary : EntityBase + { + [Comment("วัน เดือน ปี รับตำแหน่ง")] + public DateTime? Date { get; set; } + [Comment("ลำดับ")] + public int? Order { get; set; } + [Comment("เงินเดือน")] + public double? Amount { get; set; } + [Comment("เงินประจำตำแหน่ง")] + public double? PositionSalaryAmount { get; set; } + [Comment("เงินค่าตอบแทนรายเดือน")] + public double? MouthSalaryAmount { get; set; } + [Comment("Id สังกัด")] + public Guid? OcId { get; set; } + [Comment("Id ชื่อย่อหน่วยงาน")] + public Guid? OrganizationShortNameId { get; set; } + [Comment("Id ตำแหน่ง")] + public Guid? PositionId { get; set; } + [Comment("Id เลขที่ตำแหน่ง")] + public Guid? PosNoId { get; set; } + [Comment("เลขที่ตำแหน่งลูกจ้าง")] + public string? PosNoEmployee { get; set; } + [Comment("Id สายงาน")] + public Guid? PositionLineId { get; set; } + [Comment("Id ด้าน/สาขา")] + public Guid? PositionPathSideId { get; set; } + [Comment("Id ประเภทตำแหน่ง")] + public Guid? PositionTypeId { get; set; } + // [Comment("Id ระดับ")] + // public PositionLevel? PositionLevel { get; set; } + [Comment("Id ตำแหน่งทางการบริหาร")] + public Guid? PositionExecutiveId { get; set; } + [Comment("Id ด้านทางการบริหาร")] + public Guid? PositionExecutiveSideId { get; set; } + [Comment("Id ตำแหน่ง")] + public Guid? PositionEmployeePositionId { get; set; } + [Comment("Id ด้านของตำแหน่ง")] + public Guid? PositionEmployeePositionSideId { get; set; } + [Comment(" Id ระดับชั้นงาน")] + public Guid? PositionEmployeeLevelId { get; set; } + [Comment("Id กลุ่มงาน")] + public Guid? PositionEmployeeGroupId { get; set; } + + [Comment("ตำแหน่ง (รายละเอียด)")] + public string? SalaryClass { get; set; } + + [Comment("เอกสารอ้างอิง")] + public string? SalaryRef { get; set; } + // public virtual List ProfileSalaryHistorys { get; set; } = new List(); + public virtual Profile? Profile { get; set; } + + [Comment("เลขที่คำสั่ง")] + public string CommandNo { get; set; } + + [Comment("ประเภทคำสั่ง")] + public string CommandTypeName { get; set; } + + [Comment("ประเภทตำแหน่งกรณีพิเศษ")] + public string? SalaryStatus { get; set; } + public bool IsActive { get; set; } = true; + } +} diff --git a/Models/Placement/PlacementProfile.cs b/Models/Placement/PlacementProfile.cs index ef8515d..59ce081 100644 --- a/Models/Placement/PlacementProfile.cs +++ b/Models/Placement/PlacementProfile.cs @@ -239,6 +239,12 @@ namespace BMA.EHR.Domain.Models.Placement [Comment("Id รูปโปรไฟล์")] public virtual Document? ProfileImg { get; set; } + + [Comment("หมายเหตุแนวตั้ง")] + public string? RemarkVertical { get; set; } + + [Comment("หมายเหตุแนวนอน")] + public string? RemarkHorizontal { get; set; } public virtual List PlacementCertificates { get; set; } = new List(); public virtual List PlacementEducations { get; set; } = new List(); } diff --git a/Services/PeriodExamService.cs b/Services/PeriodExamService.cs index bb4033a..dae84dc 100644 --- a/Services/PeriodExamService.cs +++ b/Services/PeriodExamService.cs @@ -1985,6 +1985,9 @@ namespace BMA.EHR.Recurit.Exam.Service.Services await _contextMetadata.Placements.AddAsync(placement); foreach (var candidate in periodExam.Candidate.Where(x => x.Status == "done" && x.Pass == "ได้")) { + var profile = await _contextMetadata.Profiles + .Include(x => x.Salaries) + .FirstOrDefaultAsync(p => p.CitizenId == candidate.CitizenId); var placementProfile = new PlacementProfile { Placement = placement, @@ -2049,6 +2052,10 @@ namespace BMA.EHR.Recurit.Exam.Service.Services IsRelief = false, PlacementStatus = "UN-CONTAIN", Pass = candidate.Pass, + RemarkHorizontal = "โดยมีเงื่อนไขว่าต้องปฏิบัติงานให้กรุงเทพมหานครเป็นระยะเวลาไม่น้อยกว่า ๕ ปี นับแต่วันที่ได้รับการบรรจุและแต่งตั้ง โดยห้ามโอนไปหน่วยงานหรือส่วนราชการอื่น เว้นเเต่ลาออกจากราชการ", + Amount = profile == null || profile.Salaries.Count() == 0 ? 0 : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PositionSalaryAmount = profile == null || profile.Salaries.Count() == 0 ? 0 : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount, + MouthSalaryAmount = profile == null || profile.Salaries.Count() == 0 ? 0 : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().MouthSalaryAmount, CreatedAt = DateTime.Now, CreatedUserId = UserId ?? "", CreatedFullName = FullName ?? "", @@ -2139,6 +2146,9 @@ namespace BMA.EHR.Recurit.Exam.Service.Services .FirstOrDefaultAsync(x => x.ExamId == candidate.ExamId && x.ScoreImport == scoreImport); if (disableScore == null) continue; + var profile = await _contextMetadata.Profiles + .Include(x => x.Salaries) + .FirstOrDefaultAsync(p => p.CitizenId == candidate.CitizenId); var placementProfile = new PlacementProfile { Placement = placement, @@ -2206,7 +2216,11 @@ namespace BMA.EHR.Recurit.Exam.Service.Services IsRelief = false, PlacementStatus = "UN-CONTAIN", Pass = disableScore == null ? null : disableScore.ExamStatus, + RemarkHorizontal = "โดยมีเงื่อนไขว่าต้องปฏิบัติงานให้กรุงเทพมหานครเป็นระยะเวลาไม่น้อยกว่า ๕ ปี นับแต่วันที่ได้รับการบรรจุและแต่งตั้ง โดยห้ามโอนไปหน่วยงานหรือส่วนราชการอื่น เว้นเเต่ลาออกจากราชการ", // ReportingDate = DateTime.Now, + Amount = profile == null || profile.Salaries.Count() == 0 ? 0 : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount, + PositionSalaryAmount = profile == null || profile.Salaries.Count() == 0 ? 0 : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().PositionSalaryAmount, + MouthSalaryAmount = profile == null || profile.Salaries.Count() == 0 ? 0 : profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().MouthSalaryAmount, CreatedAt = DateTime.Now, CreatedUserId = UserId ?? "", CreatedFullName = FullName ?? "",