From 98b6cc027501f495f008a21700a9d1046f05bd17 Mon Sep 17 00:00:00 2001 From: Kittapath Date: Sun, 8 Oct 2023 13:54:20 +0700 Subject: [PATCH] =?UTF-8?q?pdf=20=E0=B9=83=E0=B8=9A=E0=B8=AA=E0=B8=A1?= =?UTF-8?q?=E0=B8=B1=E0=B8=84=E0=B8=A3=E0=B8=AA=E0=B8=AD=E0=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ApplicationServicesRegistration.cs | 1 + .../Reports/CandidateReportRepository.cs | 136 +++++--- .../ModelsExam/Candidate/Candidate.cs | 323 ++++++++++++++++++ BMA.EHR.Domain/ModelsExam/Candidate/Career.cs | 37 ++ .../ModelsExam/Candidate/Education.cs | 33 ++ .../ModelsExam/Candidate/PeriodExam.cs | 110 ++++++ .../ModelsExam/Candidate/PositionExam.cs | 37 ++ .../InfrastructureServiceRegistration.cs | 48 ++- .../Persistence/ApplicationDBExamContext.cs | 44 +++ .../BMA.EHR.Report.Service.csproj | 3 + .../Controllers/CandidateReportController.cs | 2 +- BMA.EHR.Report.Service/Program.cs | 1 + .../Reports/ผลสอบคัดเลือกรายบุคคล.trdp | Bin 4364 -> 5184 bytes .../Reports/ผลสอบคัดเลือกรายบุคคล.trdp.bak | Bin 0 -> 5209 bytes BMA.EHR.Report.Service/appsettings.json | 3 +- 15 files changed, 710 insertions(+), 68 deletions(-) create mode 100644 BMA.EHR.Domain/ModelsExam/Candidate/Candidate.cs create mode 100644 BMA.EHR.Domain/ModelsExam/Candidate/Career.cs create mode 100644 BMA.EHR.Domain/ModelsExam/Candidate/Education.cs create mode 100644 BMA.EHR.Domain/ModelsExam/Candidate/PeriodExam.cs create mode 100644 BMA.EHR.Domain/ModelsExam/Candidate/PositionExam.cs create mode 100644 BMA.EHR.Infrastructure/Persistence/ApplicationDBExamContext.cs create mode 100644 BMA.EHR.Report.Service/Reports/ผลสอบคัดเลือกรายบุคคล.trdp.bak diff --git a/BMA.EHR.Application/ApplicationServicesRegistration.cs b/BMA.EHR.Application/ApplicationServicesRegistration.cs index 3f621d90..9080623b 100644 --- a/BMA.EHR.Application/ApplicationServicesRegistration.cs +++ b/BMA.EHR.Application/ApplicationServicesRegistration.cs @@ -31,6 +31,7 @@ namespace BMA.EHR.Application services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); return services; } diff --git a/BMA.EHR.Application/Repositories/Reports/CandidateReportRepository.cs b/BMA.EHR.Application/Repositories/Reports/CandidateReportRepository.cs index 031d539b..bc9e36ff 100644 --- a/BMA.EHR.Application/Repositories/Reports/CandidateReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Reports/CandidateReportRepository.cs @@ -5,6 +5,7 @@ using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.HR; using BMA.EHR.Domain.Models.Organizations; using BMA.EHR.Domain.Models.Retirement; +using BMA.EHR.Domain.ModelsExam.Candidate; using BMA.EHR.Domain.Shared; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; @@ -45,65 +46,102 @@ namespace BMA.EHR.Application.Repositories.Reports #region ใบสมัครสอบ public async Task GetExamCandidateAsync(Guid id) { - var data = await _dbContext.Set().AsQueryable() + var data = await _dbContext.Set().AsQueryable() .Where(x => x.Id == id) .Select(p => new { p.Id, - ProfileId = p.Profile.Id, - Prefix = p.Profile.Prefix == null ? null : p.Profile.Prefix.Name, - PrefixId = p.Profile.Prefix == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Prefix.Id, - p.Profile.FirstName, - p.Profile.LastName, - Position = p.Profile.Position == null ? null : p.Profile.Position.Name, - PositionId = p.Profile.Position == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Position.Id, - PositionType = p.Profile.PositionType == null ? null : p.Profile.PositionType.Name, - PositionTypeId = p.Profile.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.PositionType.Id, - p.Profile.PositionLine, - p.Profile.PositionLineId, - PositionLevel = p.Profile.PositionLevel == null ? null : p.Profile.PositionLevel.Name, - PositionLevelId = p.Profile.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.PositionLevel.Id, - p.Profile.PositionExecutive, - p.Profile.PositionExecutiveId, - Organization = p.Profile.Oc, - OrganizationId = p.Profile.OcId, - p.Number, - p.Date, - p.Location, - p.Reason, + ExamIdenNumber = p.ExamIdenNumber, + PositionName = p.PositionExam == null ? "" : p.PositionExam.PositionName, + PeriodExamName = p.PeriodExam == null ? "" : p.PeriodExam.Name, + PeriodExamRound = p.PeriodExam == null ? "" : p.PeriodExam.Round.ToString(), + PeriodExamYear = p.PeriodExam == null ? "" : p.PeriodExam.Year.ToString(), + + FullName = $"{p.PrefixName}{p.FirstName} {p.LastName}", + Religion = p.ReligionName, + Nationality = p.Nationality, + DateOfBirth = p.DateOfBirth == null ? "" : p.DateOfBirth.Value.ToThaiShortDate2(), + Age = p.DateOfBirth == null ? "" : p.DateOfBirth.Value.CalculateAgeStrV2(0, 0), + CitizenId = p.CitizenId, + + EducationLevelExamName = p.Educations.FirstOrDefault() == null ? "" : p.Educations.FirstOrDefault().EducationLevelExamName, + EducationName = p.Educations.FirstOrDefault() == null ? "" : p.Educations.FirstOrDefault().EducationName, + EducationMajor = p.Educations.FirstOrDefault() == null ? "" : p.Educations.FirstOrDefault().EducationMajor, + EducationLocation = p.Educations.FirstOrDefault() == null ? "" : p.Educations.FirstOrDefault().EducationLocation, + EducationEndDate = p.Educations.FirstOrDefault() == null || p.Educations.FirstOrDefault().EducationEndDate == null ? "" : p.Educations.FirstOrDefault().EducationEndDate.Value.ToThaiShortDate2(), + EducationScores = p.Educations.FirstOrDefault() == null ? "" : p.Educations.FirstOrDefault().EducationScores, + EducationType = p.Educations.FirstOrDefault() == null ? "" : p.Educations.FirstOrDefault().EducationType, + EducationLevelHighName = p.Educations.FirstOrDefault() == null ? "" : p.Educations.FirstOrDefault().EducationLevelHighName, + + OccupationPositionType = p.OccupationPositionType == "other" ? "ผู้ปฏิบัติงานอื่นในกรุงเทพมหานคร" : (p.OccupationPositionType == "temp" ? "ลูกจ้างชั่วคราว" : (p.OccupationPositionType == "perm" ? "ลูกจ้างประจำ" : "-")), + OccupationPosition = p.OccupationPosition, + OccupationSalary = p.OccupationSalary, + OccupationGroup = p.OccupationGroup, + OccupationPile = p.OccupationPile, + OccupationOrg = p.OccupationOrg, + OccupationTelephone = p.OccupationTelephone, + + Careers = p.Careers.Select(y => new + { + Position = y.Position, + Type = y.Type, + DurationStart = y.DurationStart.ToThaiShortDate2(), + DurationEnd = y.DurationEnd.ToThaiShortDate2(), + RangeDate = y.RangeDate, + }), + + RegistAddress = p.RegistAddress, + RegistProvinceName = p.RegistProvinceName, + RegistDistrictName = p.RegistDistrictName, + RegistSubDistrictName = p.RegistSubDistrictName, + RegistZipCode = p.RegistZipCode, + CurrentAddress = p.CurrentAddress, + CurrentProvinceName = p.CurrentProvinceName, + CurrentSubDistrictName = p.CurrentSubDistrictName, + CurrentDistrictName = p.CurrentDistrictName, + CurrentZipCode = p.CurrentZipCode, + Telephone = p.Telephone, + Email = p.Email, + + ContactFullName = $"{p.ContactPrefixName}{p.ContactFirstname} {p.ContactLastname}", + ContactRelations = p.ContactRelations, + ContactTel = p.ContactTel, + + RegisterDate = p.RegisterDate == null ? "" : p.RegisterDate.Value.ToThaiFullDate(), }) .FirstOrDefaultAsync(); if (data == null) throw new Exception(GlobalMessages.CandidateNotFound); + return data; - string Prefix = string.IsNullOrEmpty(data.Prefix.ToString()) ? string.Empty : data.Prefix.ToString(); - string FirstName = string.IsNullOrEmpty(data.FirstName.ToString()) ? string.Empty : data.FirstName.ToString(); - string LastName = string.IsNullOrEmpty(data.LastName.ToString()) ? string.Empty : data.LastName.ToString(); - string FullName = $"{Prefix} {FirstName} {LastName}"; - string Date = string.IsNullOrEmpty(data.Date.ToString()) ? "วันที่ - เดือน - พ.ศ. -" : DateTime.Parse(data.Date.ToString()).ToThaiFullDate().ToString().ToThaiNumber(); - string CurrentDate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")).ToThaiFullDate().ToString().ToThaiNumber(); - return new - { - FullName, - Date, - CurrentDate, - data.Position, - data.PositionExecutive, - data.PositionType, - data.PositionLine, - data.PositionLevel, - data.Organization, - data.PositionId, - data.PositionExecutiveId, - data.PositionTypeId, - data.PositionLineId, - data.PositionLevelId, - data.OrganizationId, - data.Number, - data.Location, - data.Reason, - }; + // string Prefix = string.IsNullOrEmpty(data.Prefix.ToString()) ? string.Empty : data.Prefix.ToString(); + // string FirstName = string.IsNullOrEmpty(data.FirstName.ToString()) ? string.Empty : data.FirstName.ToString(); + // string LastName = string.IsNullOrEmpty(data.LastName.ToString()) ? string.Empty : data.LastName.ToString(); + // string FullName = $"{Prefix} {FirstName} {LastName}"; + // string Date = string.IsNullOrEmpty(data.Date.ToString()) ? "วันที่ - เดือน - พ.ศ. -" : DateTime.Parse(data.Date.ToString()).ToThaiFullDate().ToString().ToThaiNumber(); + // string CurrentDate = DateTime.Parse(DateTime.Now.ToString("yyyy-MM-dd")).ToThaiFullDate().ToString().ToThaiNumber(); + // return new + // { + // FullName, + // Date, + // CurrentDate, + // data.Position, + // data.PositionExecutive, + // data.PositionType, + // data.PositionLine, + // data.PositionLevel, + // data.Organization, + // data.PositionId, + // data.PositionExecutiveId, + // data.PositionTypeId, + // data.PositionLineId, + // data.PositionLevelId, + // data.OrganizationId, + // data.Number, + // data.Location, + // data.Reason, + // }; } #endregion diff --git a/BMA.EHR.Domain/ModelsExam/Candidate/Candidate.cs b/BMA.EHR.Domain/ModelsExam/Candidate/Candidate.cs new file mode 100644 index 00000000..17db4824 --- /dev/null +++ b/BMA.EHR.Domain/ModelsExam/Candidate/Candidate.cs @@ -0,0 +1,323 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using BMA.EHR.Domain.Models.Base; +using BMA.EHR.Domain.Models.Documents; + +namespace BMA.EHR.Domain.ModelsExam.Candidate +{ + public class Candidate : EntityBase + { + [Required, Comment("Id การสอบ")] + public virtual PeriodExam? PeriodExam { get; set; } + + [Comment("Id ตำแหน่งสอบ")] + public virtual PositionExam? PositionExam { get; set; } + + [Required, MaxLength(40), Comment("User Id ผู้สมัคร")] + public string UserId { get; set; } = string.Empty; + + [Required, MaxLength(20), Comment("สถานะผู้สมัคร")] + public string Status { get; set; } = "register"; + + [Comment("เลขประจำตัวสอบ")] + public string? ExamIdenNumber { get; set; } + + [Comment("เลขที่นั่งสอบ")] + public string? SeatNumber { get; set; } + + [Comment("คะแนนเต็มภาค ก")] + public string? PointTotalA { get; set; } + + [Comment("คะแนนภาค ก ความสามารถในการคิดวิเคราะห์")] + public string? PointPath1A { get; set; } + + [Comment("คะแนนภาค ก ภาษาอังกฤษ")] + public string? PointPath2A { get; set; } + + [Comment("คะแนนภาค ก ความรู้และลักษณะการเป็นข้าราชการที่ดี")] + public string? PointPath3A { get; set; } + + [Comment("คะแนนภาค ก")] + public string? PointA { get; set; } + + [Comment("คะแนนภาค ก เปอร์เซนต์")] + public string? PointPerA { get; set; } + + [Comment("ผลสอบภาค ก")] + public string? ResultA { get; set; } + + [Comment("คะแนนเต็มภาค ข")] + public string? PointTotalB { get; set; } + + [Comment("คะแนนภาค ข")] + public string? PointB { get; set; } + + [Comment("คะแนนภาค ข เปอร์เซนต์")] + public string? PointPerB { get; set; } + + [Comment("ผลสอบภาค ข")] + public string? ResultB { get; set; } + + [Comment("คะแนนเต็มภาค ค")] + public string? PointTotalC { get; set; } + + [Comment("คะแนนภาค คทดสอบสมรรถนะหลัก")] + public string? PointPath1C { get; set; } + + [Comment("คะแนนภาค ค สัมภาษณ์")] + public string? PointPath2C { get; set; } + + [Comment("คะแนนภาค ค")] + public string? PointC { get; set; } + + [Comment("คะแนนภาค ค เปอร์เซนต์")] + public string? PointPerC { get; set; } + + [Comment("ผลสอบภาค ค")] + public string? ResultC { get; set; } + + [Comment("Id รูปโปรไฟล์")] + public virtual Document? ProfileImg { get; set; } + + [Comment("Id หลักฐานชำระเงิน")] + public virtual Document? PaymentImg { get; set; } + + [Comment("ลำดับที่สอบได้")] + public string? Number { get; set; } + + + [Comment("Id คำนำหน้าชื่อ")] + public Guid? PrefixId { get; set; } + + [Comment("คำนำหน้าชื่อ")] + public string? PrefixName { get; set; } + + [MaxLength(100), Column(Order = 1), Comment("ชื่อจริง")] + public string? FirstName { get; set; } + + [MaxLength(100), Column(Order = 2), Comment("นามสกุล")] + public string? LastName { get; set; } + + [MaxLength(40), Column(Order = 3), Comment("สัญชาติ")] + public string? Nationality { get; set; } + + [MaxLength(40), Comment("วันเกิด")] + public DateTime? DateOfBirth { get; set; } + + [Comment("Id สถานภาพ")] + public Guid? RelationshipId { get; set; } + + [Comment("สถานภาพ")] + public string? RelationshipName { get; set; } + + [Comment("Id ศาสนา")] + public Guid? ReligionId { get; set; } + + [Comment("ศาสนา")] + public string? ReligionName { get; set; } + + [MaxLength(200), Comment("อีเมล")] + public string? Email { get; set; } + + [MaxLength(20), Comment("เลขประจำตัวประชาชน")] + public string? CitizenId { get; set; } + + [Comment("Id เขตที่ออกบัตรประชาชน")] + public Guid? CitizenDistrictId { get; set; } + + [Comment("เขตที่ออกบัตรประชาชน")] + public string? CitizenDistrictName { get; set; } + + [Comment("Id จังหวัดที่ออกบัตรประชาชน")] + public Guid? CitizenProvinceId { get; set; } + + [Comment("จังหวัดที่ออกบัตรประชาชน")] + public string? CitizenProvinceName { get; set; } + + [Comment("วันที่ออกบัตร")] + public DateTime? CitizenDate { get; set; } + + [MaxLength(20), Comment("โทรศัพท์")] + public string? Telephone { get; set; } + + [MaxLength(20), Comment("โทรศัพท์มือถือ")] + public string? MobilePhone { get; set; } + + [Comment("ความสามารถพิเศษ")] + public string? Knowledge { get; set; } + + + + + [Comment("ที่อยู่ตามทะเบียนบ้าน")] + public string? RegistAddress { get; set; } + + [Comment("Id จังหวัดที่อยู่ตามทะเบียนบ้าน")] + public Guid? RegistProvinceId { get; set; } + + [Comment("จังหวัดที่อยู่ตามทะเบียนบ้าน")] + public string? RegistProvinceName { get; set; } + + [Comment("Id อำเภอที่อยู่ตามทะเบียนบ้าน")] + public Guid? RegistDistrictId { get; set; } + + [Comment("อำเภอที่อยู่ตามทะเบียนบ้าน")] + public string? RegistDistrictName { get; set; } + + [Comment("Id ตำบลที่อยู่ตามทะเบียนบ้าน")] + public Guid? RegistSubDistrictId { get; set; } + + [Comment("ตำบลที่อยู่ตามทะเบียนบ้าน")] + public string? RegistSubDistrictName { get; set; } + + [MaxLength(10), Comment("รหัสไปรษณีย์ที่อยู่ตามทะเบียนบ้าน")] + public string? RegistZipCode { get; set; } + + [Comment("ที่อยู่ปัจจุบันเหมือนที่อยู่ตามทะเบียนบ้าน")] + public bool? RegistSame { get; set; } + + [Comment("ที่อยู่ปัจจุบัน")] + public string? CurrentAddress { get; set; } + + [Comment("Id จังหวัดที่อยู่ปัจจุบัน")] + public Guid? CurrentProvinceId { get; set; } + + [Comment("จังหวัดที่อยู่ปัจจุบัน")] + public string? CurrentProvinceName { get; set; } + + [Comment("Id อำเภอที่อยู่ปัจจุบัน")] + public Guid? CurrentDistrictId { get; set; } + + [Comment("อำเภอที่อยู่ปัจจุบัน")] + public string? CurrentDistrictName { get; set; } + + [Comment("Id ตำบลที่อยู่ปัจจุบัน")] + public Guid? CurrentSubDistrictId { get; set; } + + [Comment("ตำบลที่อยู่ปัจจุบัน")] + public string? CurrentSubDistrictName { get; set; } + + [MaxLength(10), Comment("รหัสไปรษณีย์ที่อยู่ปัจจุบัน")] + public string? CurrentZipCode { get; set; } + + + + [Comment("คู่สมรส")] + public bool? Marry { get; set; } + + [Comment("Id คำนำหน้าชื่อคู่สมรส")] + public Guid? MarryPrefixId { get; set; } + + [Comment("คำนำหน้าชื่อคู่สมรส")] + public string? MarryPrefixName { get; set; } + + [MaxLength(100), Comment("ชื่อจริงคู่สมรส")] + public string? MarryFirstName { get; set; } + + [MaxLength(100), Comment("นามสกุลคู่สมรส")] + public string? MarryLastName { get; set; } + + [MaxLength(200), Comment("อาชีพคู่สมรส")] + public string? MarryOccupation { get; set; } + + [MaxLength(100), Comment("สัญชาติคู่สมรส")] + public string? MarryNationality { get; set; } + + [Comment("Id คำนำหน้าชื่อบิดา")] + public Guid? FatherPrefixId { get; set; } + + [Comment("คำนำหน้าชื่อบิดา")] + public string? FatherPrefixName { get; set; } + + [MaxLength(100), Comment("ชื่อจริงบิดา")] + public string? FatherFirstName { get; set; } + + [MaxLength(100), Comment("นามสกุลบิดา")] + public string? FatherLastName { get; set; } + + [MaxLength(200), Comment("อาชีพบิดา")] + public string? FatherOccupation { get; set; } + + [MaxLength(100), Comment("สัญชาติบิดา")] + public string? FatherNationality { get; set; } + + [Comment("Id คำนำหน้าชื่อมารดา")] + public Guid? MotherPrefixId { get; set; } + + [Comment("คำนำหน้าชื่อมารดา")] + public string? MotherPrefixName { get; set; } + + [MaxLength(100), Comment("ชื่อจริงมารดา")] + public string? MotherFirstName { get; set; } + + [MaxLength(100), Comment("นามสกุลมารดา")] + public string? MotherLastName { get; set; } + + [MaxLength(200), Comment("อาชีพมารดา")] + public string? MotherOccupation { get; set; } + + [MaxLength(100), Comment("สัญชาติมารดา")] + public string? MotherNationality { get; set; } + + [Comment("ตำแหน่งปัจจุบัน ชื่อตำแหน่ง")] + public string? OccupationOrg { get; set; } + [Comment("ตำแหน่งปัจจุบัน กอง")] + public string? OccupationPile { get; set; } + [Comment("ตำแหน่งปัจจุบัน กลุ่ม/ฝ่าย")] + public string? OccupationGroup { get; set; } + [Comment("ตำแหน่งปัจจุบัน เงินเดือน")] + public int? OccupationSalary { get; set; } + [Comment("ตำแหน่งปัจจุบัน สังกัด")] + public string? OccupationPosition { get; set; } + [Comment("ตำแหน่งปัจจุบัน ประเภทราชการ")] + public string? OccupationPositionType { get; set; } + + [MaxLength(20), Comment("ตำแหน่งปัจจุบัน เบอร์โทรที่ทำงาน")] + public string? OccupationTelephone { get; set; } + + [Comment("เหตุผลการไม่อนุมัติ")] + public string? RejectDetail { get; set; } + + [Comment("ผลสมัครสอบ")] + public string? Pass { get; set; } + + [Comment("หมายเหตุ")] + public string? ExamReason { get; set; } + + [Comment("คะแนนความพึงพอใจ")] + public int? ReviewPoint { get; set; } + + [Comment("ข้อแนะนำ")] + public string? Review { get; set; } + + [MaxLength(40), Comment("วันที่สมัคร")] + public DateTime? RegisterDate { get; set; } + + [Comment("วันที่ชำระเงิน")] + public DateTime? PaymentDate { get; set; } + + + + [Comment("Id คำนำหน้า บุคคลที่สามารถติดต่อได้")] + public Guid? ContactPrefixId { get; set; } + + [Comment("คำนำหน้า บุคคลที่สามารถติดต่อได้")] + public string? ContactPrefixName { get; set; } + + [Comment("ชื่อ บุคคลที่สามารถติดต่อได้")] + public string? ContactFirstname { get; set; } + + [Comment("สกุล บุคคลที่สามารถติดต่อได้")] + public string? ContactLastname { get; set; } + + [Comment("เกี่ยวข้องเป็น บุคคลที่สามารถติดต่อได้")] + public string? ContactRelations { get; set; } + + [Comment("โทรศัพท์ บุคคลที่สามารถติดต่อได้")] + public string? ContactTel { get; set; } + public virtual List Educations { get; set; } = new List(); + public virtual List Careers { get; set; } = new List(); + + } +} diff --git a/BMA.EHR.Domain/ModelsExam/Candidate/Career.cs b/BMA.EHR.Domain/ModelsExam/Candidate/Career.cs new file mode 100644 index 00000000..e4209d55 --- /dev/null +++ b/BMA.EHR.Domain/ModelsExam/Candidate/Career.cs @@ -0,0 +1,37 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using BMA.EHR.Domain.Models.Base; + +namespace BMA.EHR.Domain.ModelsExam.Candidate +{ + public class Career : EntityBase + { + [Required, Column(Order = 9), Comment("Id ผู้สมัคร")] + public virtual Candidate? Candidate { get; set; } + + [Required, Column(Order = 3), Comment("ชื่อตำแหน่ง")] + public string Position { get; set; } = string.Empty; + + [Column(Order = 4), Comment("กลุ่ม/ฝ่าย")] + public string? Group { get; set; } = string.Empty; + + [Column(Order = 5), Comment("กอง")] + public string? Pile { get; set; } = string.Empty; + + [Column(Order = 6), Comment("สังกัด")] + public string? Org { get; set; } = string.Empty; + + [Required, Column(Order = 1), Comment("ระยะเวลาเริ่ม")] + public DateTime DurationStart { get; set; } = DateTime.Now.Date; + + [Required, Column(Order = 2), Comment("ระยะเวลาสิ้นสุด")] + public DateTime DurationEnd { get; set; } = DateTime.Now.Date; + + [Required, Column(Order = 7), Comment("ระยะเวลา")] + public string RangeDate { get; set; } = string.Empty; + + [Required, Column(Order = 8), Comment("ประเภท")] + public string Type { get; set; } = string.Empty; + } +} diff --git a/BMA.EHR.Domain/ModelsExam/Candidate/Education.cs b/BMA.EHR.Domain/ModelsExam/Candidate/Education.cs new file mode 100644 index 00000000..5c6bad85 --- /dev/null +++ b/BMA.EHR.Domain/ModelsExam/Candidate/Education.cs @@ -0,0 +1,33 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using BMA.EHR.Domain.Models.Base; + +namespace BMA.EHR.Domain.ModelsExam.Candidate +{ + public class Education : EntityBase + { + [Required, Column(Order = 7), Comment("Id ผู้สมัคร")] + public virtual Candidate? Candidate { get; set; } + [Comment("Id วุฒิที่ใช้สมัครสอบ")] + public Guid? EducationLevelExamId { get; set; } + [Comment("วุฒิที่ใช้สมัครสอบ")] + public string? EducationLevelExamName { get; set; } + [Comment("ชื่อปริญญา")] + public string? EducationName { get; set; } + [Comment("สาขาวิชา/วิชาเอก")] + public string? EducationMajor { get; set; } + [Comment("ชื่อสถานศึกษา")] + public string? EducationLocation { get; set; } + [Comment("ประเภทสถานศึกษา")] + public string? EducationType { get; set; } + [Comment("วันที่สำเร็จการศึกษา")] + public DateTime? EducationEndDate { get; set; } + [Comment("คะแนนเฉลี่ยสะสม")] + public string? EducationScores { get; set; } + [Comment("Id วุฒิการศึกษาสูงสุด")] + public Guid? EducationLevelHighId { get; set; } + [Comment("วุฒิการศึกษาสูงสุด")] + public string? EducationLevelHighName { get; set; } + } +} diff --git a/BMA.EHR.Domain/ModelsExam/Candidate/PeriodExam.cs b/BMA.EHR.Domain/ModelsExam/Candidate/PeriodExam.cs new file mode 100644 index 00000000..dd9115d7 --- /dev/null +++ b/BMA.EHR.Domain/ModelsExam/Candidate/PeriodExam.cs @@ -0,0 +1,110 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using BMA.EHR.Domain.Models.Base; + +namespace BMA.EHR.Domain.ModelsExam.Candidate +{ + public class PeriodExam : EntityBase + { + [Required, MaxLength(150), Column(Order = 8), Comment("ชื่อการสอบ")] + public string Name { get; set; } = string.Empty; + + [Required, Comment("ตรวจสอบเอกสารหลังประกาศผลสอบ")] + public bool CheckDocument { get; set; } = false; + + [Required, Comment("คนพิการ")] + public bool CheckDisability { get; set; } = false; + + [Column(Order = 9), Comment("รอบการสอบ")] + public int? Round { get; set; } + + [Comment("ปีงบประมาณ")] + public int? Year { get; set; } + + [Comment("ค่าธรรมเนียม")] + public float? Fee { get; set; } = 0; + + [Column(Order = 1), Comment("วันเริ่มสมัครสอบ")] + public DateTime? RegisterStartDate { get; set; } + + [Column(Order = 2), Comment("วันสิ้นสุดสมัครสอบ")] + public DateTime? RegisterEndDate { get; set; } + + [Column(Order = 3), Comment("วันเริ่มชำระเงิน")] + public DateTime? PaymentStartDate { get; set; } + + [Column(Order = 4), Comment("วันสิ้นสุดชำระเงิน")] + public DateTime? PaymentEndDate { get; set; } + + [Column(Order = 5), Comment("วันประกาศผลสอบ")] + public DateTime? AnnouncementDate { get; set; } + + [Required, Column(Order = 6), Comment("วันเริ่มประกาศ")] + public DateTime AnnouncementStartDate { get; set; } = DateTime.Now.Date; + + [Required, Column(Order = 7), Comment("วันสิ้นสุดประกาศ")] + public DateTime AnnouncementEndDate { get; set; } = DateTime.Now.Date; + + [Comment("วันที่สอบ")] + public DateTime? ExamDate { get; set; } + + [Comment("Id รหัสส่วนราชการ")] + public Guid? OrganizationCodeId { get; set; } + + [Comment("ชื่อรหัสส่วนราชการ")] + public string? OrganizationCodeName { get; set; } + + [Comment("Id หน่วยงาน")] + public Guid? OrganizationId { get; set; } + + [Comment("ชื่อหน่วยงาน")] + public string? OrganizationName { get; set; } + + [Comment("ชำระเงินผ่านกรุงไทย")] + public string? PaymentKrungThai { get; set; } + + [Comment("รายละเอียดสมัครสอบ")] + public string? Detail { get; set; } + + [Comment("รายละเอียดเงื่อนไขการสมัคร")] + public string? EditorCondition { get; set; } + + [Comment("รายละเอียดคำรับรอง")] + public string? EditorConfirm { get; set; } + + [Comment("หมายเหตุ")] + public string? Note { get; set; } + + [Comment("สถานะการใช้งาน")] + public bool IsActive { get; set; } = true; + + [Comment("เช็คอัพคะแนน")] + public bool SetSeat { get; set; } = false; + + [Comment("ประกาศนี้มีสมัครสอบคัดเลือก")] + public bool AnnouncementExam { get; set; } = false; + + [Comment("สำนัก")] + public string? Category { get; set; } + + [Comment("รายชื่อคนสม้ครในรอบ")] + public List Candidate { get; set; } = new List(); + + [Comment("ตำแหน่งสมัคร")] + public List PositionExam { get; set; } = new List(); + + // [Comment("ช่องทางชำระเงิน")] + // public List BankExam { get; set; } = new List(); + + // [Comment("เอกสารอื่นๆ")] + // public virtual List PeriodExamDocuments { get; set; } = new(); + + // [Comment("รูป")] + // public virtual List PeriodExamImages { get; set; } = new(); + // public Document? ImportFile { get; set; } = new Document(); + // public List Disables { get; set; } = new List(); + // public ScoreImport? ScoreImport { get; set; } + // public List ImportHostories { get; set; } = new List(); + } +} diff --git a/BMA.EHR.Domain/ModelsExam/Candidate/PositionExam.cs b/BMA.EHR.Domain/ModelsExam/Candidate/PositionExam.cs new file mode 100644 index 00000000..0ac079b3 --- /dev/null +++ b/BMA.EHR.Domain/ModelsExam/Candidate/PositionExam.cs @@ -0,0 +1,37 @@ +using Microsoft.EntityFrameworkCore; +using System.ComponentModel.DataAnnotations.Schema; +using System.ComponentModel.DataAnnotations; +using BMA.EHR.Domain.Models.Base; + +namespace BMA.EHR.Domain.ModelsExam.Candidate +{ + public class PositionExam : EntityBase + { + [Required, Comment("Id การสอบ")] + public virtual PeriodExam? PeriodExam { get; set; } + + [Comment("Id ตำแหน่ง")] + public Guid? PositionId { get; set; } + + [Comment("ชื่อตำแหน่ง")] + public string? PositionName { get; set; } + + [Comment("Id ระดับ")] + public Guid? PositionLevelId { get; set; } + + [Comment("ชื่อระดับ")] + public string? PositionLevelName { get; set; } + + [Comment("Id ประเภทแบบฟอร์ม")] + public string? TypeId { get; set; } + + [Comment("ชื่อประเภทแบบฟอร์ม")] + public string? TypeName { get; set; } + + [Comment("ปริญญาบัตรขึ้นไป")] + public bool HighDegree { get; set; } + + [Comment("รหัสประจำตำแหน่งที่สอบ")] + public string? Code { get; set; } + } +} diff --git a/BMA.EHR.Infrastructure/InfrastructureServiceRegistration.cs b/BMA.EHR.Infrastructure/InfrastructureServiceRegistration.cs index 2773b8de..9c6923d7 100644 --- a/BMA.EHR.Infrastructure/InfrastructureServiceRegistration.cs +++ b/BMA.EHR.Infrastructure/InfrastructureServiceRegistration.cs @@ -7,30 +7,44 @@ using Microsoft.Extensions.DependencyInjection; namespace BMA.EHR.Infrastructure { - public static class InfrastructureServiceRegistration - { - public static IServiceCollection AddPersistence(this IServiceCollection services, - IConfiguration configuration) + public static class InfrastructureServiceRegistration + { + public static IServiceCollection AddPersistence(this IServiceCollection services, + IConfiguration configuration) { services.AddTransient(); - + var connectionString = configuration.GetConnectionString("DefaultConnection"); services.AddDbContext(options => - options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString), - b => - { - b.MigrationsAssembly(typeof(ApplicationDBContext).Assembly.FullName); - b.MigrationsHistoryTable("__EHRMigrationsHistory"); + options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString), + b => + { + b.MigrationsAssembly(typeof(ApplicationDBContext).Assembly.FullName); + b.MigrationsHistoryTable("__EHRMigrationsHistory"); - }), - ServiceLifetime.Transient); - - services.AddScoped(provider => provider.GetService()); + }), + ServiceLifetime.Transient); - return services; - } + services.AddScoped(provider => provider.GetService()); - } + var connectionStringExam = configuration.GetConnectionString("ExamConnection"); + + services.AddDbContext(options => + options.UseMySql(connectionStringExam, ServerVersion.AutoDetect(connectionStringExam), + b => + { + b.MigrationsAssembly(typeof(ApplicationDBExamContext).Assembly.FullName); + b.MigrationsHistoryTable("__EHRMigrationsHistory"); + + }), + ServiceLifetime.Transient); + + services.AddScoped(provider => provider.GetService()); + + return services; + } + + } } diff --git a/BMA.EHR.Infrastructure/Persistence/ApplicationDBExamContext.cs b/BMA.EHR.Infrastructure/Persistence/ApplicationDBExamContext.cs new file mode 100644 index 00000000..7b723d77 --- /dev/null +++ b/BMA.EHR.Infrastructure/Persistence/ApplicationDBExamContext.cs @@ -0,0 +1,44 @@ +using BMA.EHR.Application.Common.Interfaces; +using BMA.EHR.Domain.Models.Commands.Core; +using BMA.EHR.Domain.Models.Documents; +using BMA.EHR.Domain.Models.HR; +using BMA.EHR.Domain.Models.Insignias; +using BMA.EHR.Domain.Models.MetaData; +using BMA.EHR.Domain.Models.Notifications; +using BMA.EHR.Domain.Models.OrganizationEmployee; +using BMA.EHR.Domain.Models.Organizations; +using BMA.EHR.Domain.Models.Organizations.Report2; +using BMA.EHR.Domain.Models.Placement; +using BMA.EHR.Domain.Models.Probation; +using BMA.EHR.Domain.Models.Retirement; +using BMA.EHR.Domain.ModelsExam.Candidate; +using Microsoft.EntityFrameworkCore; + +namespace BMA.EHR.Infrastructure.Persistence +{ + public class ApplicationDBExamContext : DbContext, IApplicationDBContext + { + #region " From Existing Database " + public DbSet Candidates { get; set; } + public DbSet Careers { get; set; } + public DbSet Educations { get; set; } + public DbSet PeriodExams { get; set; } + public DbSet PositionExams { get; set; } + + #endregion + + public ApplicationDBExamContext(DbContextOptions options) : base(options) + { + } + + public Task SaveChangesAsync() + { + return base.SaveChangesAsync(); + } + + public void Attatch(T entity) where T : class + { + Attach(entity); + } + } +} diff --git a/BMA.EHR.Report.Service/BMA.EHR.Report.Service.csproj b/BMA.EHR.Report.Service/BMA.EHR.Report.Service.csproj index 3bc6cca1..4f4a4eb2 100644 --- a/BMA.EHR.Report.Service/BMA.EHR.Report.Service.csproj +++ b/BMA.EHR.Report.Service/BMA.EHR.Report.Service.csproj @@ -646,6 +646,9 @@ PreserveNewest + + PreserveNewest + diff --git a/BMA.EHR.Report.Service/Controllers/CandidateReportController.cs b/BMA.EHR.Report.Service/Controllers/CandidateReportController.cs index 29fb6827..fdf60331 100644 --- a/BMA.EHR.Report.Service/Controllers/CandidateReportController.cs +++ b/BMA.EHR.Report.Service/Controllers/CandidateReportController.cs @@ -52,7 +52,7 @@ namespace BMA.EHR.Report.Service.Controllers case "xlsx": mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; } - var rptFile = System.IO.Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"ใบสมัครสอบคัดเลือก.trdp"); + var rptFile = System.IO.Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"ผลสอบคัดเลือกรายบุคคล.trdp"); ReportPackager reportPacker = new ReportPackager(); Telerik.Reporting.Report? report = null; using (var sourceStream = System.IO.File.OpenRead(rptFile)) diff --git a/BMA.EHR.Report.Service/Program.cs b/BMA.EHR.Report.Service/Program.cs index b29da486..319db2e4 100644 --- a/BMA.EHR.Report.Service/Program.cs +++ b/BMA.EHR.Report.Service/Program.cs @@ -133,6 +133,7 @@ var app = builder.Build(); // apply migrations await using var scope = app.Services.CreateAsyncScope(); await using var db = scope.ServiceProvider.GetRequiredService(); + await using var dbExam = scope.ServiceProvider.GetRequiredService(); await db.Database.MigrateAsync(); app.Run(); diff --git a/BMA.EHR.Report.Service/Reports/ผลสอบคัดเลือกรายบุคคล.trdp b/BMA.EHR.Report.Service/Reports/ผลสอบคัดเลือกรายบุคคล.trdp index 245a3879f42d6eca392243250c92bf5526a82441..17e12a0aa5787eed8e7beddf5deebfbac71eb213 100644 GIT binary patch delta 4888 zcmV+z6X)!VBETpZP)h>@6aWAK2mp3$NLLz)7UP2w0054pkr*+5U1@LIMjHOU!2Sn9 z3k2;4Q{tr~v0LP9g0`t)WxLpZVuMW*SaxR&b|A8&ToG+zofMd)8hW1*R2(FUy&D;Vy&6uuBuIKAvZYsYS7;q^q&s; zyMzAoL4SSF?+yC&}dqnh1`l|wNK~so!W}lR6D$-H8fNIjISBZya@w;LBq?71yRb2ypTiViC|972E_ zBCQHMwEKZ}1059b$7@F0`Sh{c=!RkRmrJ_VsCW29G(V$$@uu3uL%Yop1fK(N8-xCX zLI2g@Xp;+neqqVzw(7U@!3%%XRP*+!-`%`$2K_mECdZvuTko017X)i`SY0vo)@S5| zjf!Q@lfnX~U$t&EG!BDswxKU0UOBI|EY0-Zh3>m#v@EBkYnQpIYO2?}t;Op5h~E02 zHH=%^%5mq6hD-Cjx1&7tL?fSfppQ+B0;2b=n>B6J%XDLNG`c@L9UvXn77`FcM19 z3#A`_#?cx=au(+-(%LqHb<^F4wt zLj5HZUHW&>{{e1(iuFzZ(2o_9C_qZo(>4cxs%ML+9(0T;{K`I!SmY(T7)^_?VFk$~ zXOc`pfJg@b_a2fTKekbP&k-fRHnyORDJ|hYJ_0FeCy-pJuuZU1pvfeH%6kF|?w`QJ z#QtJ`=`Qwv@P}>S@I$~kmR(MOEUj?~Enk9U-($$=bjVlCDEUN|8axC+IRrAkw1psl zPagnj5)uW|J7jI;@{s)KuMQ0)`90eX__13X=#E$khINGR(J0Prfw|kQjX#~+K zX(t-flu3M{5Hx4R&|n0=2f__GJwAEQPfxk zE!GF@cahEeH+;e#XB_dH#cz;AX^Xgu@d!jNc=X>YkYsW$C(+vmH2HiQN)5PwW(UTH ztmij_qczaaJ<7a3fT&?(e8%TAAC z9e5vNhA$oO9Rw1Z{2Mg0Lp8ZU?By!uRrWv?Z$JyEtH<#5XXH*CX+ScDt-9al{FGrP z_);%)3cBD=bO=1#j7=;swCn_b9Ghvj9{a~n#I(iOafw)|NG$U<6pYzHNJMy#5c3IG z$Z18;qiKu@~%{B01ZFJhohVE|6H7Fs(NEQdX4Sr(?o@N|x`OTqx+*HQ<;75|BKEbnLjf>QKB$lV07V}jo=HJmj%J6 zFeSQZifBn&X$rhj_O1O9Ep><$3YI3f%5M#{;#b)9!DrS%tlT9$d+~0=UlGN$CV-4y zQyUJ*XfR`P(&Ws4gG47_VkCB%nTr<1K+H5OYkuivq03gY5ovUhKvjxNL`39E(dze9 z!#dOEY7Mp1Svd8lu3??|uwz^`%%<9~54jG;$GL`iWKP8po#q;-=`$Rh`Lx@y^c%NM zb2?TrbF~IK*32_pQ#F@$bSvr~9dwMjhThWVR$!2*8S6BE$182zh{X^sIwAGepI5!Z-&2vJBwc~9#CA7?anTbPwTUXG&)u27F8%O8Miyh=GrPEwwOl<+>B z3Y*6+#6j!O#J8k&ht9@7fHeLlOa&rjw@rMwOEUSd;N)|%Ed4EXdVlC9J2=@ry5ZO^ zDb4F)kYtH-lGx5d>|-*a9;w^fAw_-ns3GtBGA-4kq}QqBc?_-nuH#HRc9QI+PP-y&o49FfBssk5EP;Z9 zHGxK(aUhUT|7F5Xr~2;kEePf(T2$O{z$Y_5a>M+zW0kjw$deixT#$|b(K61EP5Qnk zB!;ldvY$9y?sV$scq)E*1S=(X61(y-=j(}oT_#l}9xYJxX+W&PXhcGu(=6rTy8$u3 zZgTl4vcfJ^4eBrF<^;tq&woi4ZVzF&yJT8n79yEivw7`%=Q$haSq*nA56NN)+pFP7 z{AZ)L4I{t9kHp6USIg?Glz8t1BJ4ZRb>U%~RtG_!|VwjG&fh^C2xT4+8rBL*Kx4t z{RB9~Sr<;q8+15fF=o$s z%wyP~+u4S95H50CWSwqM)*>8o11LaGm|x265=0FL-VbP9yqZn&AN6n0G@evH;veÐ@4MubW}@ljSw+Xw3Z=q42G{I*Lz|&xv7hwxsZG)v7?jvcP2hhxe#1Id zHsczGUD(@TAD+*E_}Z@5r)t6JY;aMumGM5w5pI$sr#E03&V{+w<>m-~q6@#*po=|k zJZU$wMW(ZZoi!&FPl8W499f=8=O<_jx92#0&d75}OD)5(vihkv ziEqZ;(}>?=Cwr9Hm#a=Gkeet=5o*@lDElQI}bZe$wFD6%(`v)4EuQ_=D+ zEB8NKzT9(iuCcO`%-nLsYJjWAsr<8}xzYXqKn8(Jl0*&J*Vb!)4>u?yv<;DvEy6CXXn#ggdP#Zw}+P5_Kt^7n|@Cg`f0DON1CEf z2A^#V?!D++K4L8vQC=s>aJYkf?j+hh`ee4?rzepx5yQpSh{M-=BPbnv#nCXF*DW-})|Gky4CbES=>;R2 zCnR1`hF}Ox0l8T3)t7gr*jb zXf_dfWr&6tg~f;Jr$%7!U3q5j=$@5LDGL!MMJkJb@xb`Nu>TL>!QNsuwRntT4(F=# z21lvF+?|<#adirjcjWUloKsqm!d)>xo3QP!3klxj zHvmY+d{c!lM41>t5aZ(k#`iL6hiPpx=ctNOxbPqqA`OK{VjAC%YPD_~fLSy;dMLwW z%yTV&@`Xw`F7DMtxCAiCm;>uZ_A%mqWVo5eXNXEwZK!4-{FgK4yt?jbNciu#wlOhz z&osJiKO{=V99W63*lz@k5&I&5Y(WYa9=#DzCdzU0V!gU#G$0?D%Kll!F#%^>(;8ZTd&Ou4amkqbDhPZ<3J1nbG&=84tB5SE zx}+`Z9qVkpj{Nz6L$74af0g)BF-oTj_Uk*HTbG=p5Sg?p0)3->iL}VI~x|L~v zW~q2y`Q}CC6TN-js0aBZW73mI(Uy3*$V||8O%u&3MAH^C=9?tZv?ab$WSL|KkrAr4 zm^m*tzN#I8Oe8EB3wILfT7*j}LWZK0t&*|GIEk_?^D@fMpu3teqY_^R5s`3stbguklQFm1`%MRi%bWEg0W&IK2LD+HbZ zzP>%qw*N-TL7%5PVi5v`Qlfu#q(rX-c&bBrQSrQ48dt+_kloDpob5eu?e1N7pO1+u zYrPwT&|A5Lys>(=WS>&(ngsB&O=$=4w@`zDvRriTZ9fjPRR^yf2LWkGmIAP|8k)(f z2N7p$CnlHrfPljl`YzA`Rn4-0^wx5RTU6Vc`M%yln&+&Ha8g_KP7R%N6%kg4daG-6 zJ8&yGPdfY%wsIIM19IZ`#5`kwmmC#CK`#Oao--`VXrg0$kas6RH)>CbjMqK|uvAwx z%_3icGfQ0xtU!T0ns*()(U}BY7;iE#FZO=i=c~x4tXYQX)p@tt8o9tU;R8fjL>vtC zIn}SiS$9*G%_-uXXJO9KQH000080CsFhlcW#f4t8uv zR~m{Ih($wg3PC6951J0000000000007Gpli?60 K2CWkS00012)JV4g delta 4067 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 V000000GAJw6%-`~c@O{q002U{-Nyg` diff --git a/BMA.EHR.Report.Service/Reports/ผลสอบคัดเลือกรายบุคคล.trdp.bak b/BMA.EHR.Report.Service/Reports/ผลสอบคัดเลือกรายบุคคล.trdp.bak new file mode 100644 index 0000000000000000000000000000000000000000..7d63c76f01dce547843b33347b7bbd15f19350d0 GIT binary patch literal 5209 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 UN{C4RN`w1*eg4K_{D1xa3y0^xaR2}S literal 0 HcmV?d00001 diff --git a/BMA.EHR.Report.Service/appsettings.json b/BMA.EHR.Report.Service/appsettings.json index 169430e3..6c56493d 100644 --- a/BMA.EHR.Report.Service/appsettings.json +++ b/BMA.EHR.Report.Service/appsettings.json @@ -14,7 +14,8 @@ "AllowedHosts": "*", "ConnectionStrings": { //"DefaultConnection": "User Id=sys;Password=P@ssw0rd;DBA Privilege=SYSDBA;Data Source=localhost:1521/ORCLCDB", - "DefaultConnection": "server=192.168.1.9;user=root;password=adminVM123;port=3306;database=bma_ehr_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;" + "DefaultConnection": "server=192.168.1.9;user=root;password=adminVM123;port=3306;database=bma_ehr_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;", + "ExamConnection": "server=192.168.1.9;user=root;password=adminVM123;port=3306;database=bma_ehr_exam_demo;Convert Zero Datetime=True;Allow User Variables=true;Pooling=True;" }, "Jwt": { "Key": "HP-FnQMUj9msHMSD3T9HtdEnphAKoCJLEl85CIqROFI",