diff --git a/BMA.EHR.Application/BMA.EHR.Application.csproj b/BMA.EHR.Application/BMA.EHR.Application.csproj index 09d5a4e1..b3262e4b 100644 --- a/BMA.EHR.Application/BMA.EHR.Application.csproj +++ b/BMA.EHR.Application/BMA.EHR.Application.csproj @@ -10,6 +10,7 @@ + diff --git a/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs b/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs index b126d408..00708c0c 100644 --- a/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs +++ b/BMA.EHR.Application/Repositories/InsigniaPeriodsRepository.cs @@ -5738,9 +5738,9 @@ namespace BMA.EHR.Application.Repositories ProfileId = h.Profile.Id, ProfileType = h.Profile.ProfileType, FullName = $"{h.Profile.Prefix?.Name}{h.Profile.FirstName} {h.Profile.LastName}", - Position = h.Profile.ProfileType == " officer" ? h.Profile.Position?.Name : h.Profile.PositionEmployeePosition?.Name, - PosNo = h.Profile.ProfileType == " officer" ? h.Profile.PosNo?.Name : h.Profile.PosNoEmployee, - Rank = h.Profile.ProfileType == " officer" ? $"{h.Profile.PositionType?.Name}/{h.Profile.PositionLevel?.Name}" : $"-", + Position = h.Profile.ProfileType == "officer" ? h.Profile.Position?.Name : h.Profile.PositionEmployeePosition?.Name, + PosNo = h.Profile.ProfileType == "officer" ? h.Profile.PosNo?.Name : h.Profile.PosNoEmployee, + Rank = h.Profile.ProfileType == "officer" ? $"{h.Profile.PositionType?.Name}/{h.Profile.PositionLevel?.Name}" : $"-", Salary = h.Salary.ToString(), LastInsignia = h.Profile.Insignias.Count == 0 ? "" : h.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().Insignia.Name, RequestInsignia = h.RequestInsignia.Name, diff --git a/BMA.EHR.Application/Repositories/MinIOService.cs b/BMA.EHR.Application/Repositories/MinIOService.cs new file mode 100644 index 00000000..34c01048 --- /dev/null +++ b/BMA.EHR.Application/Repositories/MinIOService.cs @@ -0,0 +1,366 @@ +using Amazon.S3; +using Amazon.S3.Model; +using BMA.EHR.Domain.Models.Documents; +using BMA.EHR.Domain.Shared; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Http; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Configuration; +using System.Net.Http.Headers; +using BMA.EHR.Application.Common.Interfaces; +using Amazon; +using BMA.EHR.Domain.Models.Organizations; +using MimeTypes; +using Profile = BMA.EHR.Domain.Models.HR.Profile; + +namespace BMA.EHR.Application.Repositories +{ + public class MinIOService + { + #region " Fields " + + private readonly IApplicationDBContext _dbContext; + private readonly IConfiguration _configuration; + private readonly AmazonS3Client _s3Client; + private readonly IWebHostEnvironment _hostingEnvironment; + private string _bucketName = string.Empty; + + #endregion + + #region " Constructors " + + public MinIOService(IApplicationDBContext dbContext, + IConfiguration configuration, + IWebHostEnvironment hostingEnvironment) + { + _dbContext = dbContext; + _configuration = configuration; + _hostingEnvironment = hostingEnvironment; + + var config = new AmazonS3Config + { + ServiceURL = _configuration["MinIO:Endpoint"], + ForcePathStyle = true + }; + + _s3Client = new AmazonS3Client(_configuration["MinIO:AccessKey"], _configuration["MinIO:SecretKey"], config); + this._bucketName = _configuration["MinIO:BucketName"] ?? "bma-recruit"; + } + + #endregion + + #region " Methods " + + public async Task UploadFileAsync(IFormFile file, string newFileName = "") + { + var fileName = ""; + var fileExt = Path.GetExtension(file.FileName); + if (newFileName != "") + fileName = $"{newFileName}"; + else + fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'); + + + var tmpDir = Path.Combine("tmp"); + if (!Directory.Exists(tmpDir)) + Directory.CreateDirectory(tmpDir); + + var tmpFile = Path.Combine(tmpDir, $"tmp_{DateTime.Now.ToString("ddMMyyyyHHmmss")}{fileExt}"); + + try + { + using (var ms = new MemoryStream()) + { + var id = Guid.NewGuid(); + file.CopyTo(ms); + var fileBytes = ms.ToArray(); + System.IO.MemoryStream filestream = new System.IO.MemoryStream(fileBytes); + + var request = new PutObjectRequest + { + BucketName = _bucketName, + Key = id.ToString("D"), + InputStream = filestream, + ContentType = file.ContentType, + CannedACL = S3CannedACL.PublicRead + }; + + await _s3Client.PutObjectAsync(request); + + // create document object + var doc = new Document() + { + FileName = fileName, + FileType = file.ContentType, + FileSize = Convert.ToInt32(file.Length), + ObjectRefId = id, + CreatedDate = DateTime.Now + }; + await _dbContext.Set().AddAsync(doc); + await _dbContext.SaveChangesAsync(); + + return doc; + } + } + catch + { + throw; + } + finally + { + File.Delete(tmpFile); + } + } + + public async Task DownloadFileAsync(Guid fileId) + { + try + { + var doc = await _dbContext.Set().AsQueryable() + .FirstOrDefaultAsync(x => x.Id == fileId); + + if (doc == null) + throw new Exception(GlobalMessages.FileNotFoundOnServer); + + using (var memoryStream = new MemoryStream()) + { + GetObjectRequest request = new GetObjectRequest + { + BucketName = _bucketName, + Key = doc.ObjectRefId.ToString("D") + }; + + using (GetObjectResponse response = await _s3Client.GetObjectAsync(request)) + { + using (Stream responseStream = response.ResponseStream) + { + responseStream.CopyTo(memoryStream); + } + } + + var fileContent = memoryStream.ToArray(); + + return new FileDownloadResponse + { + FileName = doc.FileName, + FileType = doc.FileType, + FileContent = fileContent + }; + }; + } + catch + { + throw; + } + } + + public async Task DeleteFileAsync(Guid fileId) + { + try + { + var doc = await _dbContext.Set().AsQueryable() + .FirstOrDefaultAsync(x => x.Id == fileId); + + if (doc == null) + throw new Exception(GlobalMessages.FileNotFoundOnServer); + else + { + DeleteObjectRequest request = new DeleteObjectRequest + { + BucketName = _bucketName, + Key = doc?.ObjectRefId.ToString("D") + }; + + // delete from minio + await _s3Client.DeleteObjectAsync(request); + + _dbContext.Set().Remove(doc); + await _dbContext.SaveChangesAsync(); + } + } + catch + { + throw; + } + } + + public async Task ImagesPath(Guid? fileId) + { + if (fileId == null) + return ""; + + var doc = await _dbContext.Set().AsQueryable() + .FirstOrDefaultAsync(x => x.Id == fileId); + + if (doc == null) + throw new Exception(GlobalMessages.FileNotFoundOnServer); + var config = new AmazonS3Config + { + ServiceURL = _configuration["MinIO:Endpoint"], + ForcePathStyle = true + }; + + DateTime expires = DateTime.UtcNow.AddHours(6); + var _protocol = _configuration["Protocol"]; + GetPreSignedUrlRequest request = new GetPreSignedUrlRequest + { + BucketName = _bucketName, + Key = doc?.ObjectRefId.ToString("D"), + Expires = expires, + Protocol = _protocol == "HTTPS" ? Protocol.HTTPS : Protocol.HTTP + }; + string path = _s3Client.GetPreSignedURL(request); + + return path; + } + + public async Task ImagesPathByName(string fileName) + { + var config = new AmazonS3Config + { + ServiceURL = _configuration["MinIO:Endpoint"], + ForcePathStyle = true + }; + + DateTime expires = DateTime.UtcNow.AddHours(6); + var _protocol = _configuration["Protocol"]; + GetPreSignedUrlRequest request = new GetPreSignedUrlRequest + { + BucketName = _bucketName, + Key = fileName, + Expires = expires, + Protocol = _protocol == "HTTPS" ? Protocol.HTTPS : Protocol.HTTP + }; + string path = _s3Client.GetPreSignedURL(request); + + return path; + } + + #endregion + + public List GetAllIdByRoot(Guid? id) + { + try + { + var ret = new List(); + if (id == null) + return ret; + + var oc = _dbContext.Set().FirstOrDefault(x => x.Id == id); + if (oc != null) + ret.Add(oc.Id); + + var child = _dbContext.Set().AsQueryable().Where(x => x.Parent != null && x.Parent.Id == id).ToList(); + if (child.Any()) + { + foreach (var item in child) + { + ret.AddRange(GetAllIdByRoot(item.Id)); + } + } + + return ret; + } + catch + { + throw; + } + } + + public async Task CheckBmaOfficer(string CitizenId) + { + var data = await _dbContext.Set().FirstOrDefaultAsync(x => x.CitizenId == CitizenId); + if (data == null) + return null; + if (data.ProfileType.Trim().ToUpper() == "OFFICER") + return "OFFICER"; + if (data.EmployeeClass.Trim().ToUpper() == "PERM") + return "EMPLOYEE_PERM"; + if (data.EmployeeClass.Trim().ToUpper() == "TEMP") + return "EMPLOYEE_TEMP"; + return "EMPLOYEE"; + } + + public async Task UploadFileAsyncTemp(string fileName, string subFolder) + { + try + { + var fileContents = File.ReadAllBytes(fileName); + System.IO.MemoryStream filestream = new System.IO.MemoryStream(fileContents); + //var fileNameWithoutExt = Path.GetFileNameWithoutExtension(fileName); + var fileExt = Path.GetExtension(fileName); + var fileType = MimeTypeMap.GetMimeType(fileExt); + var file_name = Path.GetFileName(fileName); + Console.WriteLine($"{_bucketName}{subFolder}"); + Console.WriteLine(fileName); + Console.WriteLine(file_name); + Console.WriteLine(filestream); + Console.WriteLine(fileType); + + var request = new PutObjectRequest + { + BucketName = $"{_bucketName}", + // BucketName = $"{_bucketName}{subFolder}", + Key = file_name, + InputStream = filestream, + ContentType = fileType, + CannedACL = S3CannedACL.PublicRead + }; + + await _s3Client.PutObjectAsync(request); + } + catch + { + throw; + } + } + + public async Task GenerateJsonFile(string json, string path, string fileName) + { + var tmpDir = Path.Combine("tmp"); + if (!Directory.Exists(tmpDir)) + Directory.CreateDirectory(tmpDir); + + var tmpFile = Path.Combine(tmpDir, $"{fileName}.json"); + + try + { + SaveToJsonFile(tmpFile, json); + await UploadFileAsyncTemp(tmpFile, path); + } + catch + { + throw; + } + finally + { + if (tmpFile != "") + { + if (System.IO.File.Exists(tmpFile)) + System.IO.File.Delete(tmpFile); + } + + } + } + + private void SaveToJsonFile(string fileName, string data) + { + TextWriter writer = null; + try + { + writer = new StreamWriter(fileName); + writer.Write(data); + } + catch + { + throw; + } + finally + { + if (writer != null) + writer.Close(); + } + } + + } +} \ No newline at end of file diff --git a/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs b/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs index 6a7423f1..59cddefa 100644 --- a/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Reports/ProbationReportRepository.cs @@ -162,7 +162,7 @@ namespace BMA.EHR.Application.Repositories.Reports { No = string.IsNullOrEmpty(evaluate_assign.data.evaluate.no.ToString()) ? string.Empty : evaluate_assign.data.evaluate.no.ToString().ToThaiNumber(), EvaluateDateStart = string.IsNullOrEmpty(evaluate_assign.data.evaluate.date_start.ToString()) ? "วันที่ เดือน พ.ศ." : evaluate_assign.data.evaluate.date_start.ToThaiFullDate().ToString().ToThaiNumber(), - EvaluateDateFinish = string.IsNullOrEmpty(evaluate_assign.data.evaluate.date_start.ToString()) ? "วันที่ เดือน พ.ศ." : evaluate_assign.data.evaluate.date_start.ToThaiFullDate().ToString().ToThaiNumber(), + EvaluateDateFinish = string.IsNullOrEmpty(evaluate_assign.data.evaluate.date_finish.ToString()) ? "วันที่ เดือน พ.ศ." : evaluate_assign.data.evaluate.date_finish.ToThaiFullDate().ToString().ToThaiNumber(), Name = string.IsNullOrEmpty(evaluate_assign.data.experimentee.name) ? string.Empty : evaluate_assign.data.experimentee.name, Position = string.IsNullOrEmpty(evaluate_assign.data.experimentee.Position) ? string.Empty : evaluate_assign.data.experimentee.Position, Department = string.IsNullOrEmpty(evaluate_assign.data.experimentee.Department) ? string.Empty : evaluate_assign.data.experimentee.Department, @@ -206,7 +206,7 @@ namespace BMA.EHR.Application.Repositories.Reports { No = string.IsNullOrEmpty(evaluate_assign.data.evaluate.no.ToString()) ? string.Empty : evaluate_assign.data.evaluate.no.ToString().ToThaiNumber(), EvaluateDateStart = string.IsNullOrEmpty(evaluate_assign.data.evaluate.date_start.ToString()) ? "วันที่ เดือน พ.ศ." : evaluate_assign.data.evaluate.date_start.ToThaiFullDate().ToString().ToThaiNumber(), - EvaluateDateFinish = string.IsNullOrEmpty(evaluate_assign.data.evaluate.date_start.ToString()) ? "วันที่ เดือน พ.ศ." : evaluate_assign.data.evaluate.date_start.ToThaiFullDate().ToString().ToThaiNumber(), + EvaluateDateFinish = string.IsNullOrEmpty(evaluate_assign.data.evaluate.date_finish.ToString()) ? "วันที่ เดือน พ.ศ." : evaluate_assign.data.evaluate.date_finish.ToThaiFullDate().ToString().ToThaiNumber(), Name = string.IsNullOrEmpty(evaluate_assign.data.experimentee.name) ? string.Empty : evaluate_assign.data.experimentee.name, Position = string.IsNullOrEmpty(evaluate_assign.data.experimentee.Position) ? string.Empty : evaluate_assign.data.experimentee.Position, Department = string.IsNullOrEmpty(evaluate_assign.data.experimentee.Department) ? string.Empty : evaluate_assign.data.experimentee.Department, diff --git a/BMA.EHR.Application/Repositories/Reports/RetireReportRepository.cs b/BMA.EHR.Application/Repositories/Reports/RetireReportRepository.cs index 420ba8a4..cbe645cc 100644 --- a/BMA.EHR.Application/Repositories/Reports/RetireReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Reports/RetireReportRepository.cs @@ -1,12 +1,15 @@ using System.Reflection.Metadata; using BMA.EHR.Application.Common.Interfaces; +using BMA.EHR.Application.Responses; using BMA.EHR.Domain.Extensions; +using BMA.EHR.Domain.Models.HR; using BMA.EHR.Domain.Models.Organizations; using BMA.EHR.Domain.Models.Retirement; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using Newtonsoft.Json; namespace BMA.EHR.Application.Repositories.Reports { @@ -16,16 +19,19 @@ namespace BMA.EHR.Application.Repositories.Reports private readonly IApplicationDBContext _dbContext; private readonly IWebHostEnvironment _hostingEnvironment; + private readonly MinIOService _documentService; #endregion #region " Constructor and Destructor " public RetireReportRepository(IApplicationDBContext dbContext, + MinIOService documentService, IWebHostEnvironment hostEnvironment) { _dbContext = dbContext; _hostingEnvironment = hostEnvironment; + _documentService = documentService; } #endregion @@ -67,64 +73,73 @@ namespace BMA.EHR.Application.Repositories.Reports if (retireHistorys == null) return null; - var profile_retireHistory = await _dbContext.Set() - .Where(x => x.RetirementPeriod == retire) - .OrderBy(x => x.Order) - .Select(x => new - { - order = x.Order, - id = x.Id, - reason = x.Reason, - remove = x.Remove, - profileId = x.Profile.Id, - citizenId = x.Profile.CitizenId, - prefix = x.Profile.Prefix == null ? null : x.Profile.Prefix.Name, - fullName = $"{x.Profile.FirstName} {x.Profile.LastName}", - organizationOrganization = x.Profile.OrganizationOrganization, - oc = x.Profile.Oc, - position = x.Profile.Position == null ? null : x.Profile.Position.Name, - positionType = x.Profile.PositionType == null ? null : x.Profile.PositionType.Name, - positionExecutive = x.Profile.PositionExecutive, - posNo = x.Profile.PosNo == null ? null : x.Profile.PosNo.Name, - positionEmployeePosition = x.Profile.PositionEmployeePosition, - positionEmployeeLevel = x.Profile.PositionEmployeeLevel, - positionEmployeeGroup = x.Profile.PositionEmployeeGroup, - posNoEmployee = x.Profile.PosNoEmployee, - }) - .ToListAsync(); - - return new { retireHistorys.Id, retireHistorys.CreatedAt, Year = retireHistorys.Year.ToThaiYear().ToString().ToThaiNumber(), retireHistorys.Round, retireHistorys.Type, retireHistorys.TypeReport, Total = retireHistorys.Total.ToString().ToThaiNumber(), profile = profile_retireHistory }; + //var profile_retireHistory = await _dbContext.Set() + // .Where(x => x.RetirementPeriod == retire) + // .OrderBy(x => x.Order) + // .Select(x => new + // { + // order = x.Order, + // id = x.Id, + // reason = x.Reason, + // remove = x.Remove, + // profileId = x.Profile.Id, + // citizenId = x.Profile.CitizenId, + // prefix = x.Profile.Prefix == null ? string.Empty : x.Profile.Prefix.Name, + // fullName = $"{x.Profile.FirstName} {x.Profile.LastName}", + // organizationOrganization = x.Profile.OrganizationOrganization, + // oc = x.Profile.Oc, + // position = x.Profile.Position == null ? string.Empty : x.Profile.Position.Name, + // positionType = x.Profile.PositionType == null ? string.Empty : x.Profile.PositionType.Name, + // positionExecutive = x.Profile.PositionExecutive, + // posNo = x.Profile.PosNo == null ? string.Empty : x.Profile.PosNo.Name, + // positionEmployeePosition = x.Profile.PositionEmployeePosition, + // positionEmployeeLevel = x.Profile.PositionEmployeeLevel, + // positionEmployeeGroup = x.Profile.PositionEmployeeGroup, + // posNoEmployee = x.Profile.PosNoEmployee, + // }) + // .ToListAsync(); + //return new { retireHistorys.Detail, retireHistorys.Id, retireHistorys.CreatedAt, Year = retireHistorys.Year.ToThaiYear().ToString().ToThaiNumber(), retireHistorys.Round, retireHistorys.Type, retireHistorys.TypeReport, Total = retireHistorys.Total.ToString().ToThaiNumber(), profile = profile_retireHistory }; + using (var client = new HttpClient()) + { + var url = await _documentService.ImagesPathByName($"{retireHistorys.ProfileFile}.json"); + var responseTask = client.GetAsync(url); + var results = responseTask.Result; + var json = results.Content.ReadAsStringAsync().Result; + List profiles = JsonConvert.DeserializeObject>(json); + profiles = profiles.OrderBy(x => x.order).ToList(); + return new { retireHistorys.Detail, retireHistorys.Id, retireHistorys.CreatedAt, Year = retireHistorys.Year.ToThaiYear().ToString().ToThaiNumber(), retireHistorys.Round, retireHistorys.Type, retireHistorys.TypeReport, Total = retireHistorys.Total.ToString().ToThaiNumber(), profile = profiles}; + } } else { var profile_retire = await _dbContext.Set() - .Where(x => x.RetirementPeriod == retire) - .OrderBy(x => x.Order) - .Select(x => new - { - order = x.Order, - id = x.Id, - reason = x.Reason, - remove = x.Remove, - profileId = x.Profile.Id, - citizenId = x.Profile.CitizenId, - prefix = x.Profile.Prefix == null ? null : x.Profile.Prefix.Name, - fullName = $"{x.Profile.FirstName} {x.Profile.LastName}", - organizationOrganization = x.Profile.OrganizationOrganization, - oc = x.Profile.Oc, - position = x.Profile.Position == null ? null : x.Profile.Position.Name, - positionType = x.Profile.PositionType == null ? null : x.Profile.PositionType.Name, - positionExecutive = x.Profile.PositionExecutive, - posNo = x.Profile.PosNo == null ? null : x.Profile.PosNo.Name, - positionEmployeePosition = x.Profile.PositionEmployeePosition, - positionEmployeeLevel = x.Profile.PositionEmployeeLevel, - positionEmployeeGroup = x.Profile.PositionEmployeeGroup, + .Where(x => x.RetirementPeriod == retire) + .OrderBy(x => x.Order) + .Select(x => new + { + order = x.Order, + id = x.Id, + reason = x.Reason, + remove = x.Remove, + profileId = x.Profile.Id, + citizenId = x.Profile.CitizenId, + prefix = x.Profile.Prefix == null ? string.Empty : x.Profile.Prefix.Name, + fullName = $"{x.Profile.FirstName} {x.Profile.LastName}", + organizationOrganization = x.Profile.OrganizationOrganization, + oc = x.Profile.Oc, + position = x.Profile.Position == null ? string.Empty : x.Profile.Position.Name, + positionType = x.Profile.PositionType == null ? string.Empty : x.Profile.PositionType.Name, + positionExecutive = x.Profile.PositionExecutive, + posNo = x.Profile.PosNo == null ? string.Empty : x.Profile.PosNo.Name, + positionEmployeePosition = x.Profile.PositionEmployeePosition, + positionEmployeeLevel = x.Profile.PositionEmployeeLevel, + positionEmployeeGroup = x.Profile.PositionEmployeeGroup, posNoEmployee = x.Profile.PosNoEmployee, }) .ToListAsync(); - return new { retire.Id, retire.CreatedAt, Year = retire.Year.ToThaiYear().ToString().ToThaiNumber(), retire.Round, retire.Type, retire.TypeReport, Total = profile_retire.Count.ToString().ToThaiNumber(), profile = profile_retire }; + return new { retire.Detail, retire.Id, retire.CreatedAt, Year = retire.Year.ToThaiYear().ToString().ToThaiNumber(), retire.Round, retire.Type, retire.TypeReport, Total = profile_retire.Count.ToString().ToThaiNumber(), profile = profile_retire }; } } #endregion @@ -164,12 +179,17 @@ namespace BMA.EHR.Application.Repositories.Reports if (data == null) return null; + 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 { - data.Prefix, - data.FirstName, - data.LastName, + FullName, + Date, + CurrentDate, data.Position, data.PositionExecutive, data.PositionType, @@ -183,7 +203,6 @@ namespace BMA.EHR.Application.Repositories.Reports data.PositionLevelId, data.OrganizationId, data.Number, - Date, data.Location, data.Reason, }; diff --git a/BMA.EHR.Application/Requests/InsigniaRequestItem.cs b/BMA.EHR.Application/Requests/InsigniaRequestItem.cs index 9a0d44e4..ab0252e7 100644 --- a/BMA.EHR.Application/Requests/InsigniaRequestItem.cs +++ b/BMA.EHR.Application/Requests/InsigniaRequestItem.cs @@ -7,7 +7,7 @@ public string? ProfileType { get; set; } public Guid ProfileId { get; set; } public string FullName { get; set; } - public string Position { get; set; } + public dynamic Position { get; set; } public string PosNo { get; set; } public string Rank { get; set; } public string Salary { get; set; } diff --git a/BMA.EHR.Application/Responses/EvaluateChairmanAssignResponse.cs b/BMA.EHR.Application/Responses/EvaluateChairmanAssignResponse.cs index 78878067..e40d274d 100644 --- a/BMA.EHR.Application/Responses/EvaluateChairmanAssignResponse.cs +++ b/BMA.EHR.Application/Responses/EvaluateChairmanAssignResponse.cs @@ -126,6 +126,7 @@ namespace BMA.EHR.Application.Responses public int develop_other_training_percent { get; set; } public int develop_total_percent { get; set; } public int develop_result { get; set; } + public int evaluate_result { get; set; } public DateTime createdAt { get; set; } public DateTime updatedAt { get; set; } } diff --git a/BMA.EHR.Application/Responses/ProfileJsonRequest.cs b/BMA.EHR.Application/Responses/ProfileJsonRequest.cs new file mode 100644 index 00000000..6c19f255 --- /dev/null +++ b/BMA.EHR.Application/Responses/ProfileJsonRequest.cs @@ -0,0 +1,24 @@ +namespace BMA.EHR.Application.Responses +{ + public class ProfileJsonRequest + { + public int order { get; set; } + public Guid id { get; set; } + public string reason { get; set; } + public string remove { get; set; } + public Guid profileId { get; set; } + public string? citizenId { get; set; } + public string? prefix { get; set; } + public string? fullName { get; set; } + public string? organizationOrganization { get; set; } + public string? oc { get; set; } + public string? position { get; set; } + public string? positionType { get; set; } + public string? positionExecutive { get; set; } + public string? posNo { get; set; } + public string? positionEmployeePosition { get; set; } + public string? positionEmployeeLevel { get; set; } + public string? positionEmployeeGroup { get; set; } + public string? posNoEmployee { get; set; } + } +} diff --git a/BMA.EHR.Domain/Shared/GlobalMessages.cs b/BMA.EHR.Domain/Shared/GlobalMessages.cs index 2678c379..4267f231 100644 --- a/BMA.EHR.Domain/Shared/GlobalMessages.cs +++ b/BMA.EHR.Domain/Shared/GlobalMessages.cs @@ -89,6 +89,7 @@ public static readonly string OCNotFound = "ไม่พบหน่วยงานที่ระบุในระบบ"; public static readonly string InsigniaManageOrgLimit = "จำนวนการจัดสรรเครื่องราชฯ หน่วยงานเกินจำนวน"; public static readonly string InsigniaBorrowOrgLimit = "จำนวนการจัดสรรเครื่องราชฯ หน่วยงานเกินจำนวนของหน่วยงานที่ได้รับ"; + public static readonly string InsigniaNoBorrow = "ไม่สามารถยืมเครื่องราชฯ นี้ได้เนื่องจากสถานะรอการบันทึกข้อมูล"; public static readonly string InsigniaBorrowNotFound = "ไม่พบรายการยืมเครื่องราชฯ"; public static readonly string InsigniaNotReturn = "รายการยืมเครื่องราชนี้ได้ทำการยืมไว้แล้ว"; #endregion diff --git a/BMA.EHR.Infrastructure/Storage/MinIOService.cs b/BMA.EHR.Infrastructure/Storage/MinIOService.cs index a6f14d49..a65ec719 100644 --- a/BMA.EHR.Infrastructure/Storage/MinIOService.cs +++ b/BMA.EHR.Infrastructure/Storage/MinIOService.cs @@ -1,365 +1,365 @@ -using Amazon.S3; -using Amazon.S3.Model; -using BMA.EHR.Domain.Models.Documents; -using BMA.EHR.Domain.Shared; -using BMA.EHR.Infrastructure.Persistence; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; -using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Configuration; -using MimeTypes; -using System.Net.Http.Headers; +// using Amazon.S3; +// using Amazon.S3.Model; +// using BMA.EHR.Domain.Models.Documents; +// using BMA.EHR.Domain.Shared; +// using BMA.EHR.Infrastructure.Persistence; +// using Microsoft.AspNetCore.Hosting; +// using Microsoft.AspNetCore.Http; +// using Microsoft.EntityFrameworkCore; +// using Microsoft.Extensions.Configuration; +// using MimeTypes; +// using System.Net.Http.Headers; -namespace BMA.EHR.Application.Repositories -{ - public class MinIOService - { - #region " Fields " +// namespace BMA.EHR.Application.Repositories +// { +// public class MinIOService +// { +// #region " Fields " - private readonly ApplicationDBContext _context; - private readonly IConfiguration _configuration; - private readonly AmazonS3Client _s3Client; - private readonly IWebHostEnvironment _hostingEnvironment; - private string _bucketName = string.Empty; +// private readonly ApplicationDBContext _context; +// private readonly IConfiguration _configuration; +// private readonly AmazonS3Client _s3Client; +// private readonly IWebHostEnvironment _hostingEnvironment; +// private string _bucketName = string.Empty; - #endregion +// #endregion - #region " Constructors " +// #region " Constructors " - public MinIOService(ApplicationDBContext context, - IConfiguration configuration, - IWebHostEnvironment hostingEnvironment) - { - _context = context; - _configuration = configuration; - _hostingEnvironment = hostingEnvironment; +// public MinIOService(ApplicationDBContext context, +// IConfiguration configuration, +// IWebHostEnvironment hostingEnvironment) +// { +// _context = context; +// _configuration = configuration; +// _hostingEnvironment = hostingEnvironment; - var config = new AmazonS3Config - { - ServiceURL = _configuration["MinIO:Endpoint"], - ForcePathStyle = true - }; +// var config = new AmazonS3Config +// { +// ServiceURL = _configuration["MinIO:Endpoint"], +// ForcePathStyle = true +// }; - _s3Client = new AmazonS3Client(_configuration["MinIO:AccessKey"], _configuration["MinIO:SecretKey"], config); - this._bucketName = _configuration["MinIO:BucketName"] ?? "bma-recruit"; - } +// _s3Client = new AmazonS3Client(_configuration["MinIO:AccessKey"], _configuration["MinIO:SecretKey"], config); +// this._bucketName = _configuration["MinIO:BucketName"] ?? "bma-recruit"; +// } - #endregion +// #endregion - #region " Methods " +// #region " Methods " - public async Task UploadFileAsync(IFormFile file, string newFileName = "") - { - var fileName = ""; - var fileExt = Path.GetExtension(file.FileName); - if (newFileName != "") - fileName = $"{newFileName}"; - else - fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'); +// public async Task UploadFileAsync(IFormFile file, string newFileName = "") +// { +// var fileName = ""; +// var fileExt = Path.GetExtension(file.FileName); +// if (newFileName != "") +// fileName = $"{newFileName}"; +// else +// fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"'); - var tmpDir = Path.Combine("tmp"); - if (!Directory.Exists(tmpDir)) - Directory.CreateDirectory(tmpDir); +// var tmpDir = Path.Combine("tmp"); +// if (!Directory.Exists(tmpDir)) +// Directory.CreateDirectory(tmpDir); - var tmpFile = Path.Combine(tmpDir, $"tmp_{DateTime.Now.ToString("ddMMyyyyHHmmss")}{fileExt}"); +// var tmpFile = Path.Combine(tmpDir, $"tmp_{DateTime.Now.ToString("ddMMyyyyHHmmss")}{fileExt}"); - try - { - using (var ms = new MemoryStream()) - { - var id = Guid.NewGuid(); - file.CopyTo(ms); - var fileBytes = ms.ToArray(); - System.IO.MemoryStream filestream = new System.IO.MemoryStream(fileBytes); +// try +// { +// using (var ms = new MemoryStream()) +// { +// var id = Guid.NewGuid(); +// file.CopyTo(ms); +// var fileBytes = ms.ToArray(); +// System.IO.MemoryStream filestream = new System.IO.MemoryStream(fileBytes); - var request = new PutObjectRequest - { - BucketName = _bucketName, - Key = id.ToString("D"), - InputStream = filestream, - ContentType = file.ContentType, - CannedACL = S3CannedACL.PublicRead - }; +// var request = new PutObjectRequest +// { +// BucketName = _bucketName, +// Key = id.ToString("D"), +// InputStream = filestream, +// ContentType = file.ContentType, +// CannedACL = S3CannedACL.PublicRead +// }; - await _s3Client.PutObjectAsync(request); +// await _s3Client.PutObjectAsync(request); - // create document object - var doc = new Document() - { - FileName = fileName, - FileType = file.ContentType, - FileSize = Convert.ToInt32(file.Length), - ObjectRefId = id, - CreatedDate = DateTime.Now - }; +// // create document object +// var doc = new Document() +// { +// FileName = fileName, +// FileType = file.ContentType, +// FileSize = Convert.ToInt32(file.Length), +// ObjectRefId = id, +// CreatedDate = DateTime.Now +// }; - await _context.Documents.AddAsync(doc); - await _context.SaveChangesAsync(); +// await _context.Documents.AddAsync(doc); +// await _context.SaveChangesAsync(); - return doc; - } - } - catch - { - throw; - } - finally - { - File.Delete(tmpFile); - } - } +// return doc; +// } +// } +// catch +// { +// throw; +// } +// finally +// { +// File.Delete(tmpFile); +// } +// } - public async Task DownloadFileAsync(Guid fileId) - { - try - { - var doc = await _context.Documents.AsQueryable() - .FirstOrDefaultAsync(x => x.Id == fileId); +// public async Task DownloadFileAsync(Guid fileId) +// { +// try +// { +// var doc = await _context.Documents.AsQueryable() +// .FirstOrDefaultAsync(x => x.Id == fileId); - if (doc == null) - throw new Exception(GlobalMessages.FileNotFoundOnServer); +// if (doc == null) +// throw new Exception(GlobalMessages.FileNotFoundOnServer); - using (var memoryStream = new MemoryStream()) - { - GetObjectRequest request = new GetObjectRequest - { - BucketName = _bucketName, - Key = doc.ObjectRefId.ToString("D") - }; +// using (var memoryStream = new MemoryStream()) +// { +// GetObjectRequest request = new GetObjectRequest +// { +// BucketName = _bucketName, +// Key = doc.ObjectRefId.ToString("D") +// }; - using (GetObjectResponse response = await _s3Client.GetObjectAsync(request)) - { - using (Stream responseStream = response.ResponseStream) - { - responseStream.CopyTo(memoryStream); - } - } +// using (GetObjectResponse response = await _s3Client.GetObjectAsync(request)) +// { +// using (Stream responseStream = response.ResponseStream) +// { +// responseStream.CopyTo(memoryStream); +// } +// } - var fileContent = memoryStream.ToArray(); +// var fileContent = memoryStream.ToArray(); - return new FileDownloadResponse - { - FileName = doc.FileName, - FileType = doc.FileType, - FileContent = fileContent - }; - }; - } - catch - { - throw; - } - } +// return new FileDownloadResponse +// { +// FileName = doc.FileName, +// FileType = doc.FileType, +// FileContent = fileContent +// }; +// }; +// } +// catch +// { +// throw; +// } +// } - public async Task DeleteFileAsync(Guid fileId) - { - try - { - var doc = await _context.Documents.AsQueryable() - .FirstOrDefaultAsync(x => x.Id == fileId); +// public async Task DeleteFileAsync(Guid fileId) +// { +// try +// { +// var doc = await _context.Documents.AsQueryable() +// .FirstOrDefaultAsync(x => x.Id == fileId); - if (doc == null) - throw new Exception(GlobalMessages.FileNotFoundOnServer); - else - { - DeleteObjectRequest request = new DeleteObjectRequest - { - BucketName = _bucketName, - Key = doc?.ObjectRefId.ToString("D") - }; +// if (doc == null) +// throw new Exception(GlobalMessages.FileNotFoundOnServer); +// else +// { +// DeleteObjectRequest request = new DeleteObjectRequest +// { +// BucketName = _bucketName, +// Key = doc?.ObjectRefId.ToString("D") +// }; - // delete from minio - await _s3Client.DeleteObjectAsync(request); +// // delete from minio +// await _s3Client.DeleteObjectAsync(request); - _context.Documents.Remove(doc); - await _context.SaveChangesAsync(); - } - } - catch - { - throw; - } - } +// _context.Documents.Remove(doc); +// await _context.SaveChangesAsync(); +// } +// } +// catch +// { +// throw; +// } +// } - public async Task ImagesPath(Guid? fileId) - { - if (fileId == null) - return ""; +// public async Task ImagesPath(Guid? fileId) +// { +// if (fileId == null) +// return ""; - var doc = await _context.Documents.AsQueryable() - .FirstOrDefaultAsync(x => x.Id == fileId); +// var doc = await _context.Documents.AsQueryable() +// .FirstOrDefaultAsync(x => x.Id == fileId); - if (doc == null) - throw new Exception(GlobalMessages.FileNotFoundOnServer); - var config = new AmazonS3Config - { - ServiceURL = _configuration["MinIO:Endpoint"], - ForcePathStyle = true - }; +// if (doc == null) +// throw new Exception(GlobalMessages.FileNotFoundOnServer); +// var config = new AmazonS3Config +// { +// ServiceURL = _configuration["MinIO:Endpoint"], +// ForcePathStyle = true +// }; - DateTime expires = DateTime.UtcNow.AddHours(6); - var _protocol = _configuration["Protocol"]; - GetPreSignedUrlRequest request = new GetPreSignedUrlRequest - { - BucketName = _bucketName, - Key = doc?.ObjectRefId.ToString("D"), - Expires = expires, - Protocol = _protocol == "HTTPS" ? Protocol.HTTPS : Protocol.HTTP - }; - string path = _s3Client.GetPreSignedURL(request); +// DateTime expires = DateTime.UtcNow.AddHours(6); +// var _protocol = _configuration["Protocol"]; +// GetPreSignedUrlRequest request = new GetPreSignedUrlRequest +// { +// BucketName = _bucketName, +// Key = doc?.ObjectRefId.ToString("D"), +// Expires = expires, +// Protocol = _protocol == "HTTPS" ? Protocol.HTTPS : Protocol.HTTP +// }; +// string path = _s3Client.GetPreSignedURL(request); - return path; - } +// return path; +// } - public async Task ImagesPathByName(string fileName) - { - var config = new AmazonS3Config - { - ServiceURL = _configuration["MinIO:Endpoint"], - ForcePathStyle = true - }; +// public async Task ImagesPathByName(string fileName) +// { +// var config = new AmazonS3Config +// { +// ServiceURL = _configuration["MinIO:Endpoint"], +// ForcePathStyle = true +// }; - DateTime expires = DateTime.UtcNow.AddHours(6); - var _protocol = _configuration["Protocol"]; - GetPreSignedUrlRequest request = new GetPreSignedUrlRequest - { - BucketName = _bucketName, - Key = fileName, - Expires = expires, - Protocol = _protocol == "HTTPS" ? Protocol.HTTPS : Protocol.HTTP - }; - string path = _s3Client.GetPreSignedURL(request); +// DateTime expires = DateTime.UtcNow.AddHours(6); +// var _protocol = _configuration["Protocol"]; +// GetPreSignedUrlRequest request = new GetPreSignedUrlRequest +// { +// BucketName = _bucketName, +// Key = fileName, +// Expires = expires, +// Protocol = _protocol == "HTTPS" ? Protocol.HTTPS : Protocol.HTTP +// }; +// string path = _s3Client.GetPreSignedURL(request); - return path; - } +// return path; +// } - #endregion +// #endregion - public List GetAllIdByRoot(Guid? id) - { - try - { - var ret = new List(); - if (id == null) - return ret; +// public List GetAllIdByRoot(Guid? id) +// { +// try +// { +// var ret = new List(); +// if (id == null) +// return ret; - var oc = _context.Organizations.FirstOrDefault(x => x.Id == id); - if (oc != null) - ret.Add(oc.Id); +// var oc = _context.Organizations.FirstOrDefault(x => x.Id == id); +// if (oc != null) +// ret.Add(oc.Id); - var child = _context.Organizations.AsQueryable().Where(x => x.Parent != null && x.Parent.Id == id).ToList(); - if (child.Any()) - { - foreach (var item in child) - { - ret.AddRange(GetAllIdByRoot(item.Id)); - } - } +// var child = _context.Organizations.AsQueryable().Where(x => x.Parent != null && x.Parent.Id == id).ToList(); +// if (child.Any()) +// { +// foreach (var item in child) +// { +// ret.AddRange(GetAllIdByRoot(item.Id)); +// } +// } - return ret; - } - catch - { - throw; - } - } +// return ret; +// } +// catch +// { +// throw; +// } +// } - public async Task CheckBmaOfficer(string CitizenId) - { - var data = await _context.Profiles.FirstOrDefaultAsync(x => x.CitizenId == CitizenId); - if (data == null) - return null; - if (data.ProfileType.Trim().ToUpper() == "OFFICER") - return "OFFICER"; - if (data.EmployeeClass.Trim().ToUpper() == "PERM") - return "EMPLOYEE_PERM"; - if (data.EmployeeClass.Trim().ToUpper() == "TEMP") - return "EMPLOYEE_TEMP"; - return "EMPLOYEE"; - } +// public async Task CheckBmaOfficer(string CitizenId) +// { +// var data = await _context.Profiles.FirstOrDefaultAsync(x => x.CitizenId == CitizenId); +// if (data == null) +// return null; +// if (data.ProfileType.Trim().ToUpper() == "OFFICER") +// return "OFFICER"; +// if (data.EmployeeClass.Trim().ToUpper() == "PERM") +// return "EMPLOYEE_PERM"; +// if (data.EmployeeClass.Trim().ToUpper() == "TEMP") +// return "EMPLOYEE_TEMP"; +// return "EMPLOYEE"; +// } - public async Task UploadFileAsyncTemp(string fileName, string subFolder) - { - try - { - var fileContents = File.ReadAllBytes(fileName); - System.IO.MemoryStream filestream = new System.IO.MemoryStream(fileContents); - //var fileNameWithoutExt = Path.GetFileNameWithoutExtension(fileName); - var fileExt = Path.GetExtension(fileName); - var fileType = MimeTypeMap.GetMimeType(fileExt); - var file_name = Path.GetFileName(fileName); - Console.WriteLine($"{_bucketName}{subFolder}"); - Console.WriteLine(fileName); - Console.WriteLine(file_name); - Console.WriteLine(filestream); - Console.WriteLine(fileType); +// public async Task UploadFileAsyncTemp(string fileName, string subFolder) +// { +// try +// { +// var fileContents = File.ReadAllBytes(fileName); +// System.IO.MemoryStream filestream = new System.IO.MemoryStream(fileContents); +// //var fileNameWithoutExt = Path.GetFileNameWithoutExtension(fileName); +// var fileExt = Path.GetExtension(fileName); +// var fileType = MimeTypeMap.GetMimeType(fileExt); +// var file_name = Path.GetFileName(fileName); +// Console.WriteLine($"{_bucketName}{subFolder}"); +// Console.WriteLine(fileName); +// Console.WriteLine(file_name); +// Console.WriteLine(filestream); +// Console.WriteLine(fileType); - var request = new PutObjectRequest - { - BucketName = $"{_bucketName}", - // BucketName = $"{_bucketName}{subFolder}", - Key = file_name, - InputStream = filestream, - ContentType = fileType, - CannedACL = S3CannedACL.PublicRead - }; +// var request = new PutObjectRequest +// { +// BucketName = $"{_bucketName}", +// // BucketName = $"{_bucketName}{subFolder}", +// Key = file_name, +// InputStream = filestream, +// ContentType = fileType, +// CannedACL = S3CannedACL.PublicRead +// }; - await _s3Client.PutObjectAsync(request); - } - catch - { - throw; - } - } +// await _s3Client.PutObjectAsync(request); +// } +// catch +// { +// throw; +// } +// } - public async Task GenerateJsonFile(string json, string path, string fileName) - { - var tmpDir = Path.Combine("tmp"); - if (!Directory.Exists(tmpDir)) - Directory.CreateDirectory(tmpDir); +// public async Task GenerateJsonFile(string json, string path, string fileName) +// { +// var tmpDir = Path.Combine("tmp"); +// if (!Directory.Exists(tmpDir)) +// Directory.CreateDirectory(tmpDir); - var tmpFile = Path.Combine(tmpDir, $"{fileName}.json"); +// var tmpFile = Path.Combine(tmpDir, $"{fileName}.json"); - try - { - SaveToJsonFile(tmpFile, json); - await UploadFileAsyncTemp(tmpFile, path); - } - catch - { - throw; - } - finally - { - if (tmpFile != "") - { - if (System.IO.File.Exists(tmpFile)) - System.IO.File.Delete(tmpFile); - } +// try +// { +// SaveToJsonFile(tmpFile, json); +// await UploadFileAsyncTemp(tmpFile, path); +// } +// catch +// { +// throw; +// } +// finally +// { +// if (tmpFile != "") +// { +// if (System.IO.File.Exists(tmpFile)) +// System.IO.File.Delete(tmpFile); +// } - } - } +// } +// } - private void SaveToJsonFile(string fileName, string data) - { - TextWriter writer = null; - try - { - writer = new StreamWriter(fileName); - writer.Write(data); - } - catch - { - throw; - } - finally - { - if (writer != null) - writer.Close(); - } - } +// private void SaveToJsonFile(string fileName, string data) +// { +// TextWriter writer = null; +// try +// { +// writer = new StreamWriter(fileName); +// writer.Write(data); +// } +// catch +// { +// throw; +// } +// finally +// { +// if (writer != null) +// writer.Close(); +// } +// } - } -} \ No newline at end of file +// } +// } \ No newline at end of file diff --git a/BMA.EHR.Insignia.Service/Controllers/InsigniaManageController.cs b/BMA.EHR.Insignia.Service/Controllers/InsigniaManageController.cs index c793201e..8fc7fba3 100644 --- a/BMA.EHR.Insignia.Service/Controllers/InsigniaManageController.cs +++ b/BMA.EHR.Insignia.Service/Controllers/InsigniaManageController.cs @@ -420,6 +420,8 @@ namespace BMA.EHR.Insignia.Service.Controllers .FirstOrDefaultAsync(x => x.Id == req.InsigniaNoteProfileId); if (insigniaNoteProfile == null) return Error(GlobalMessages.InsigniaRequestProfileNotFound); + if (insigniaNoteProfile.Status != "DONE") + return Error(GlobalMessages.InsigniaNoBorrow); var insigniaManage = await _context.InsigniaManages.AsQueryable() .FirstOrDefaultAsync(x => x.Year == insigniaNoteProfile.InsigniaNote.Year && x.Insignia == insigniaNoteProfile.RequestInsignia); @@ -433,7 +435,7 @@ namespace BMA.EHR.Insignia.Service.Controllers return Error(GlobalMessages.InsigniaManageOrgNotFound); var insigniaManageProfile = await _context.InsigniaManageProfiles.AsQueryable() - .FirstOrDefaultAsync(x => x.InsigniaNoteProfile == insigniaNoteProfile && x.InsigniaManageOrganiation == insigniaManageOrganiation && x.Status == false); + .FirstOrDefaultAsync(x => x.InsigniaNoteProfile == insigniaNoteProfile && x.Status == false); if (insigniaManageProfile != null) return Error(GlobalMessages.InsigniaNotReturn); diff --git a/BMA.EHR.Insignia.Service/appsettings.json b/BMA.EHR.Insignia.Service/appsettings.json index 952a70c0..85a25b5c 100644 --- a/BMA.EHR.Insignia.Service/appsettings.json +++ b/BMA.EHR.Insignia.Service/appsettings.json @@ -18,7 +18,7 @@ }, "Jwt": { "Key": "HP-FnQMUj9msHMSD3T9HtdEnphAKoCJLEl85CIqROFI", - "Issuer": "https://identity.frappet.com/realms/bma-ehr" + "Issuer": "https://id.frappet.synology.me/realms/bma-ehr" }, "EPPlus": { "ExcelPackage": { diff --git a/BMA.EHR.Insignia.Service/wwwroot/keycloak.json b/BMA.EHR.Insignia.Service/wwwroot/keycloak.json index 9eba3b39..a023eb38 100644 --- a/BMA.EHR.Insignia.Service/wwwroot/keycloak.json +++ b/BMA.EHR.Insignia.Service/wwwroot/keycloak.json @@ -1,6 +1,6 @@ { "realm": "bma-ehr", - "auth-server-url": "https://identity.frappet.com", + "auth-server-url": "https://id.frappet.synology.me", "ssl-required": "external", "resource": "bma-ehr", "public-client": true diff --git a/BMA.EHR.Report.Service/Controllers/DeceasedReportController.cs b/BMA.EHR.Report.Service/Controllers/DeceasedReportController.cs index 635bcab1..9d7fb5e1 100644 --- a/BMA.EHR.Report.Service/Controllers/DeceasedReportController.cs +++ b/BMA.EHR.Report.Service/Controllers/DeceasedReportController.cs @@ -57,7 +57,7 @@ namespace BMA.EHR.Report.Service.Controllers /// /// 36-บันทึกเวียนแจ้งการถึงแก่กรรม /// - /// id + /// Id รายการบันทึกเวียนแจ้งการถึงแก่กรรม /// pdf, docx หรือ xlsx /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ @@ -68,9 +68,25 @@ namespace BMA.EHR.Report.Service.Controllers { try { + var head = await _repository.GetHeadRetirementDeceasedAsync(id); var data = await _repository.GetRetirementDeceasedAsync(id); - if (data != null) + if (data != null || head != null) { + var mergeData = new + { + Oc = head.GetType().GetProperty("Oc").GetValue(head), + Number = head.GetType().GetProperty("Number").GetValue(head), + Date = head.GetType().GetProperty("Date").GetValue(head), + Subject = head.GetType().GetProperty("Subject").GetValue(head), + Send = head.GetType().GetProperty("Send").GetValue(head), + FullName = data.GetType().GetProperty("FullName").GetValue(data), + Position = data.GetType().GetProperty("Position").GetValue(data), + Reason = data.GetType().GetProperty("Reason").GetValue(data), + DeceasedDate = data.GetType().GetProperty("Date").GetValue(data), + CurrentDate = data.GetType().GetProperty("CurrentDate").GetValue(data), + DeceasedNumber = data.GetType().GetProperty("Number").GetValue(data), + Location = data.GetType().GetProperty("Location").GetValue(data), + }; var mimeType = ""; switch (exportType.Trim().ToLower()) { @@ -86,7 +102,7 @@ namespace BMA.EHR.Report.Service.Controllers { report = (Telerik.Reporting.Report)reportPacker.UnpackageDocument(sourceStream); } - report.DataSource = data; + report.DataSource = mergeData; System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); InstanceReportSource instanceReportSource = new InstanceReportSource() { @@ -94,7 +110,76 @@ namespace BMA.EHR.Report.Service.Controllers }; ReportProcessor reportProcessor = new ReportProcessor(_configuration); RenderingResult result = reportProcessor.RenderReport($"{exportType}", instanceReportSource, deviceInfo); - return File(result.DocumentBytes, mimeType, $"deceased.{exportType.Trim().ToLower()}"); + return File(result.DocumentBytes, mimeType, $"รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม.{exportType.Trim().ToLower()}"); + } + else + { + return NotFound(); + } + } + catch + { + throw; + } + } + + /// + /// 36-บันทึกเวียนแจ้งการถึงแก่กรรม + /// + /// Id รายการบันทึกเวียนแจ้งการถึงแก่กรรม + /// pdf, docx หรือ xlsx + /// + /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpGet("copy/36/{exportType}/{id}")] + public async Task> GetDeceasedReportCopyAsync(Guid id, string exportType = "pdf") + { + try + { + var head = await _repository.GetHeadRetirementDeceasedAsync(id); + var data = await _repository.GetRetirementDeceasedAsync(id); + if (data != null || head != null) + { + var mergeData = new + { + Oc = head.GetType().GetProperty("Oc").GetValue(head), + Number = head.GetType().GetProperty("Number").GetValue(head), + Date = head.GetType().GetProperty("Date").GetValue(head), + Subject = head.GetType().GetProperty("Subject").GetValue(head), + Send = head.GetType().GetProperty("Send").GetValue(head), + FullName = data.GetType().GetProperty("FullName").GetValue(data), + Position = data.GetType().GetProperty("Position").GetValue(data), + Reason = data.GetType().GetProperty("Reason").GetValue(data), + DeceasedDate = data.GetType().GetProperty("Date").GetValue(data), + CurrentDate = data.GetType().GetProperty("CurrentDate").GetValue(data), + DeceasedNumber = data.GetType().GetProperty("Number").GetValue(data), + Location = data.GetType().GetProperty("Location").GetValue(data), + }; + var mimeType = ""; + switch (exportType.Trim().ToLower()) + { + case "pdf": mimeType = "application/pdf"; break; + case "docx": mimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; break; + case "xlsx": mimeType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; break; + } + + var rptFile = System.IO.Path.Combine(_hostingEnvironment.ContentRootPath, "Reports", $"36-บันทึกเวียนแจ้งการถึงแก่กรรม.trdp"); + ReportPackager reportPacker = new ReportPackager(); + Telerik.Reporting.Report? report = null; + using (var sourceStream = System.IO.File.OpenRead(rptFile)) + { + report = (Telerik.Reporting.Report)reportPacker.UnpackageDocument(sourceStream); + } + report.DataSource = mergeData; + System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); + InstanceReportSource instanceReportSource = new InstanceReportSource() + { + ReportDocument = report, + }; + ReportProcessor reportProcessor = new ReportProcessor(_configuration); + RenderingResult result = reportProcessor.RenderReport($"{exportType}", instanceReportSource, deviceInfo); + return File(result.DocumentBytes, mimeType, $"รายละเอียดบันทึกเวียนแจ้งการถึงแก่กรรม.{exportType.Trim().ToLower()}"); } else { diff --git a/BMA.EHR.Report.Service/Controllers/ProbationReportController.cs b/BMA.EHR.Report.Service/Controllers/ProbationReportController.cs index d6e48698..4da99ca5 100644 --- a/BMA.EHR.Report.Service/Controllers/ProbationReportController.cs +++ b/BMA.EHR.Report.Service/Controllers/ProbationReportController.cs @@ -1,22 +1,10 @@ using BMA.EHR.Domain.Common; -using BMA.EHR.Domain.Extensions; -using BMA.EHR.Domain.Shared; using BMA.EHR.Application.Repositories.Reports; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.ModelBinding.Binders; using Swashbuckle.AspNetCore.Annotations; -using DocumentFormat.OpenXml.Drawing; using Telerik.Reporting; using Telerik.Reporting.Processing; -using System.IO; -using Newtonsoft.Json; -using BMA.EHR.Application.Responses; -using static BMA.EHR.Application.Responses.EvaluateRecordAssignResponse; -using static BMA.EHR.Application.Responses.ProbationAssignResponse; -using DocumentFormat.OpenXml.Drawing.Charts; -using DocumentFormat.OpenXml.Bibliography; -using DocumentFormat.OpenXml.Wordprocessing; namespace BMA.EHR.Report.Service.Controllers { @@ -819,7 +807,7 @@ namespace BMA.EHR.Report.Service.Controllers Check_Moral2Level2 = moral2.col2, Check_Moral2Level3 = moral2.col3, Check_Moral2Level4 = moral2.col4, - Check_Moral2Level5 = moral2.col4, + Check_Moral2Level5 = moral2.col5, Check_Moral3Level1 = moral3.col1, Check_Moral3Level2 = moral3.col2, Check_Moral3Level3 = moral3.col3, @@ -1033,7 +1021,7 @@ namespace BMA.EHR.Report.Service.Controllers Check_Moral2Level2 = moral2.col2, Check_Moral2Level3 = moral2.col3, Check_Moral2Level4 = moral2.col4, - Check_Moral2Level5 = moral2.col4, + Check_Moral2Level5 = moral2.col5, Check_Moral3Level1 = moral3.col1, Check_Moral3Level2 = moral3.col2, Check_Moral3Level3 = moral3.col3, @@ -1091,6 +1079,7 @@ namespace BMA.EHR.Report.Service.Controllers develop_other_training_percent = evaluate.develop_other_training_percent, develop_total_percent = evaluate.develop_total_percent, develop_result = evaluate.develop_result, + evaluate_result = evaluate.evaluate_result, }); var tblEvaluateAssign1 = (Telerik.Reporting.Table)report.Items["detailSection1"].Items["table2"]; @@ -1101,7 +1090,7 @@ namespace BMA.EHR.Report.Service.Controllers tblEvaluateAssign3.DataSource = _Evaluate; var tblEvaluateAssign4 = (Telerik.Reporting.Table)report2.Items["detailSection1"].Items["table3"]; tblEvaluateAssign4.DataSource = _Evaluate; - + report2.DataSource = _Evaluate; var reportBook = new ReportBook(); reportBook.Reports.Add(report); reportBook.Reports.Add(report2); diff --git a/BMA.EHR.Report.Service/Controllers/RetireReportController.cs b/BMA.EHR.Report.Service/Controllers/RetireReportController.cs index 0dfb6a88..9d56912b 100644 --- a/BMA.EHR.Report.Service/Controllers/RetireReportController.cs +++ b/BMA.EHR.Report.Service/Controllers/RetireReportController.cs @@ -42,14 +42,10 @@ namespace BMA.EHR.Report.Service.Controllers public async Task> GetProfileRetirement([FromRoute] Guid Id, string exportType = "pdf") { var retire = await _service.GetProfileRetirementdAsync(Id); - if (retire == null) + if (retire != null) { - return NotFound(); - } - else - { - var reportfile = ""; - var returnfile = ""; + var reportfile = string.Empty; + var returnfile = string.Empty; exportType = exportType.Trim(); switch (retire.GetType().GetProperty("Type").GetValue(retire)) { @@ -89,9 +85,10 @@ namespace BMA.EHR.Report.Service.Controllers { report = (Telerik.Reporting.Report)reportPacker.UnpackageDocument(sourceStream); } - //Add Parameter - report.ReportParameters["Year"].Value = retire.GetType().GetProperty("Year").GetValue(retire); - report.ReportParameters["Total"].Value = retire.GetType().GetProperty("Total").GetValue(retire); + report.DataSource = retire; + ////Add Parameter + //report.ReportParameters["Year"].Value = retire.GetType().GetProperty("Year").GetValue(retire); + //report.ReportParameters["Total"].Value = retire.GetType().GetProperty("Total").GetValue(retire); var _profileList = new List(); @@ -123,6 +120,10 @@ namespace BMA.EHR.Report.Service.Controllers var content = result.DocumentBytes; return File(content, $"application/{exportType}", returnfile); } + else + { + return NotFound(); + } } #endregion } diff --git a/BMA.EHR.Report.Service/Reports/16-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับผู้บังคับบัญชา-1.trdp b/BMA.EHR.Report.Service/Reports/16-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับผู้บังคับบัญชา-1.trdp index 36680956..13a9b82f 100644 Binary files a/BMA.EHR.Report.Service/Reports/16-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับผู้บังคับบัญชา-1.trdp and b/BMA.EHR.Report.Service/Reports/16-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับผู้บังคับบัญชา-1.trdp differ diff --git a/BMA.EHR.Report.Service/Reports/17-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับคณะกรรมการ-1.trdp b/BMA.EHR.Report.Service/Reports/17-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับคณะกรรมการ-1.trdp index f12a4e52..9c1dad85 100644 Binary files a/BMA.EHR.Report.Service/Reports/17-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับคณะกรรมการ-1.trdp and b/BMA.EHR.Report.Service/Reports/17-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับคณะกรรมการ-1.trdp differ diff --git a/BMA.EHR.Report.Service/Reports/17-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับคณะกรรมการ-2.trdp b/BMA.EHR.Report.Service/Reports/17-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับคณะกรรมการ-2.trdp index 4a3ce0da..25f905b0 100644 Binary files a/BMA.EHR.Report.Service/Reports/17-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับคณะกรรมการ-2.trdp and b/BMA.EHR.Report.Service/Reports/17-แบบประเมินผลการทดลองปฏิบัติหน้าที่ราชการ สำหรับคณะกรรมการ-2.trdp differ diff --git a/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-1.trdp b/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-1.trdp index aef01206..75a2286d 100644 Binary files a/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-1.trdp and b/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-1.trdp differ diff --git a/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-2.trdp b/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-2.trdp index f2f7deb8..132a00da 100644 Binary files a/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-2.trdp and b/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-2.trdp differ diff --git a/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-3.trdp b/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-3.trdp index 09beb8c6..2919650d 100644 Binary files a/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-3.trdp and b/BMA.EHR.Report.Service/Reports/31-ประกาศเกษียณข้าราชการ-3.trdp differ diff --git a/BMA.EHR.Report.Service/Reports/32-ประกาศเกษียณลูกจ้างประจำ.trdp b/BMA.EHR.Report.Service/Reports/32-ประกาศเกษียณลูกจ้างประจำ.trdp index bbb55bcf..5799b202 100644 Binary files a/BMA.EHR.Report.Service/Reports/32-ประกาศเกษียณลูกจ้างประจำ.trdp and b/BMA.EHR.Report.Service/Reports/32-ประกาศเกษียณลูกจ้างประจำ.trdp differ diff --git a/BMA.EHR.Report.Service/Reports/36-บันทึกเวียนแจ้งการถึงแก่กรรม.trdp b/BMA.EHR.Report.Service/Reports/36-บันทึกเวียนแจ้งการถึงแก่กรรม.trdp index 1ddb6506..4657c011 100644 Binary files a/BMA.EHR.Report.Service/Reports/36-บันทึกเวียนแจ้งการถึงแก่กรรม.trdp and b/BMA.EHR.Report.Service/Reports/36-บันทึกเวียนแจ้งการถึงแก่กรรม.trdp differ diff --git a/BMA.EHR.Report.Service/appsettings.json b/BMA.EHR.Report.Service/appsettings.json index d6921d83..169430e3 100644 --- a/BMA.EHR.Report.Service/appsettings.json +++ b/BMA.EHR.Report.Service/appsettings.json @@ -26,10 +26,10 @@ } }, "MinIO": { - "Endpoint": "https://s3.frappet.com/", + "Endpoint": "https://s3cluster.frappet.com/", "AccessKey": "frappet", - "SecretKey": "P@ssw0rd", - "BucketName": "bma-recruit" + "SecretKey": "FPTadmin2357", + "BucketName": "bma-ehr-fpt" }, "Protocol": "HTTPS", "telerikReporting": { diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementController.cs index 8c401275..32695f67 100644 --- a/BMA.EHR.Retirement.Service/Controllers/RetirementController.cs +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementController.cs @@ -233,6 +233,7 @@ namespace BMA.EHR.Retirement.Service.Controllers { Round = round, TypeReport = null, + Detail = "มาตรา ๑๖ และมาตรา ๒๑ แห่งพระราชบัญญัตบำเหน็จบำนาญข้าราชการส่วนท้องถิ่น พ.ศ.๒๕๗๗ มาตรา ๘ แห่งพระราชบัญญัติบัเหน็จบำนาญข้าราชการกรุงเทพมหานคร พ.ศ.๒๕๕๔ ประกอบกับมติ ก.ก. ครั้งที่๑๑/๒๕๕๕ เมื่อวันที่ ๑๕ พฤศจิกายน ๒๕๕๕และมติ อ.ก.ก. สามัญข้ารายการสามัญครั้งที่ ๑/๒๕๖๕ เมื่อวันที่ ๒๑ กุมภาพันธ์ ๒๕๖๕", Type = req.Type.Trim().ToUpper(), Year = req.Year, CreatedUserId = UserId ?? "System Administrator", diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs index 9b73dce3..e1e5eaad 100644 --- a/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementDeceasedController.cs @@ -551,7 +551,7 @@ namespace BMA.EHR.Retirement.Service.Controllers payload_attach.Add(new PayloadAttachment { name = "หนังสือเวียนถึงแก่กรรม", - url = $"{_configuration["API"]}/order/download/attachment/{retirementDeceased.DocumentForward.Id}" + url = $"{_configuration["API"]}/copy/36/pdf/{retirementDeceased.Id}" }); var payload = new CommandPayload() diff --git a/BMA.EHR.Retirement.Service/Controllers/RetirementResignController.cs b/BMA.EHR.Retirement.Service/Controllers/RetirementResignController.cs index 2e54ccbe..65d21c13 100644 --- a/BMA.EHR.Retirement.Service/Controllers/RetirementResignController.cs +++ b/BMA.EHR.Retirement.Service/Controllers/RetirementResignController.cs @@ -508,6 +508,13 @@ namespace BMA.EHR.Retirement.Service.Controllers "", true ); + await _repositoryNoti.PushNotificationAsync( + Guid.Parse("08db721d-ae22-424d-8f4a-87ba30cc3ee7"), + $"คำขอลาออกขอ {updated.Profile.Prefix?.Name}{updated.Profile.FirstName} {updated.Profile.LastName} ได้รับการอนุมัติจากผู้บังคับบัญชา", + $"คำขอลาออกขอ {updated.Profile.Prefix?.Name}{updated.Profile.FirstName} {updated.Profile.LastName} ได้รับการอนุมัติจากผู้บังคับบัญชา", + "", + true + ); await _context.SaveChangesAsync(); return Success(); @@ -547,6 +554,13 @@ namespace BMA.EHR.Retirement.Service.Controllers "", true ); + await _repositoryNoti.PushNotificationAsync( + Guid.Parse("08db721d-ae22-424d-8f4a-87ba30cc3ee7"), + $"คำขอลาออกขอ {updated.Profile.Prefix?.Name}{updated.Profile.FirstName} {updated.Profile.LastName} ถูกยับยั้งจากผู้บังคับบัญชา", + $"คำขอลาออกขอ {updated.Profile.Prefix?.Name}{updated.Profile.FirstName} {updated.Profile.LastName} ถูกยับยั้งจากผู้บังคับบัญชา", + "", + true + ); await _context.SaveChangesAsync(); return Success(); diff --git a/BMA.EHR.Retirement.Service/Requests/RetirementDeceasedAddNotiPersonRequest.cs b/BMA.EHR.Retirement.Service/Requests/RetirementDeceasedAddNotiPersonRequest.cs index e087ce7c..ad996306 100644 --- a/BMA.EHR.Retirement.Service/Requests/RetirementDeceasedAddNotiPersonRequest.cs +++ b/BMA.EHR.Retirement.Service/Requests/RetirementDeceasedAddNotiPersonRequest.cs @@ -10,8 +10,8 @@ namespace BMA.EHR.Retirement.Service.Requests public class RetirementDeceasedAddNotiPerson { public Guid ProfileId { get; set; } - public bool IsSendMail { get; set; } - public bool IsSendInbox { get; set; } - public bool IsSendNotification { get; set; } + public bool IsSendMail { get; set; } = true; + public bool IsSendInbox { get; set; } = true; + public bool IsSendNotification { get; set; } = true; } }