Merge branch 'develop' into working
This commit is contained in:
commit
a62e71268c
29 changed files with 914 additions and 410 deletions
|
|
@ -10,6 +10,7 @@
|
|||
<PackageReference Include="AWSSDK.S3" Version="3.7.107.5" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.9" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
|
||||
<PackageReference Include="MimeTypeMapOfficial" Version="1.0.17" />
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
366
BMA.EHR.Application/Repositories/MinIOService.cs
Normal file
366
BMA.EHR.Application/Repositories/MinIOService.cs
Normal file
|
|
@ -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<Document> 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<Document>().AddAsync(doc);
|
||||
await _dbContext.SaveChangesAsync();
|
||||
|
||||
return doc;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw;
|
||||
}
|
||||
finally
|
||||
{
|
||||
File.Delete(tmpFile);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<FileDownloadResponse> DownloadFileAsync(Guid fileId)
|
||||
{
|
||||
try
|
||||
{
|
||||
var doc = await _dbContext.Set<Document>().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<Document>().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<Document>().Remove(doc);
|
||||
await _dbContext.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
throw;
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<string> ImagesPath(Guid? fileId)
|
||||
{
|
||||
if (fileId == null)
|
||||
return "";
|
||||
|
||||
var doc = await _dbContext.Set<Document>().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<string> 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<Guid> GetAllIdByRoot(Guid? id)
|
||||
{
|
||||
try
|
||||
{
|
||||
var ret = new List<Guid>();
|
||||
if (id == null)
|
||||
return ret;
|
||||
|
||||
var oc = _dbContext.Set<OrganizationEntity>().FirstOrDefault(x => x.Id == id);
|
||||
if (oc != null)
|
||||
ret.Add(oc.Id);
|
||||
|
||||
var child = _dbContext.Set<OrganizationEntity>().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<string?> CheckBmaOfficer(string CitizenId)
|
||||
{
|
||||
var data = await _dbContext.Set<Profile>().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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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<RetirementProfile>()
|
||||
.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<RetirementProfile>()
|
||||
// .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<ProfileJsonRequest> profiles = JsonConvert.DeserializeObject<List<ProfileJsonRequest>>(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<RetirementProfile>()
|
||||
.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,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
|
|
|
|||
|
|
@ -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; }
|
||||
}
|
||||
|
|
|
|||
24
BMA.EHR.Application/Responses/ProfileJsonRequest.cs
Normal file
24
BMA.EHR.Application/Responses/ProfileJsonRequest.cs
Normal file
|
|
@ -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; }
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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<Document> 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<Document> 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<FileDownloadResponse> DownloadFileAsync(Guid fileId)
|
||||
{
|
||||
try
|
||||
{
|
||||
var doc = await _context.Documents.AsQueryable()
|
||||
.FirstOrDefaultAsync(x => x.Id == fileId);
|
||||
// public async Task<FileDownloadResponse> 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<string> ImagesPath(Guid? fileId)
|
||||
{
|
||||
if (fileId == null)
|
||||
return "";
|
||||
// public async Task<string> 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<string> ImagesPathByName(string fileName)
|
||||
{
|
||||
var config = new AmazonS3Config
|
||||
{
|
||||
ServiceURL = _configuration["MinIO:Endpoint"],
|
||||
ForcePathStyle = true
|
||||
};
|
||||
// public async Task<string> 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<Guid> GetAllIdByRoot(Guid? id)
|
||||
{
|
||||
try
|
||||
{
|
||||
var ret = new List<Guid>();
|
||||
if (id == null)
|
||||
return ret;
|
||||
// public List<Guid> GetAllIdByRoot(Guid? id)
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// var ret = new List<Guid>();
|
||||
// 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<string?> 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<string?> 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();
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
}
|
||||
// }
|
||||
// }
|
||||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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": {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ namespace BMA.EHR.Report.Service.Controllers
|
|||
/// <summary>
|
||||
/// 36-บันทึกเวียนแจ้งการถึงแก่กรรม
|
||||
/// </summary>
|
||||
/// <param name="id">id </param>
|
||||
/// <param name="id">Id รายการบันทึกเวียนแจ้งการถึงแก่กรรม</param>
|
||||
/// <param name="exportType">pdf, docx หรือ xlsx</param>
|
||||
/// <returns></returns>
|
||||
/// <response code="200">เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ</response>
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 36-บันทึกเวียนแจ้งการถึงแก่กรรม
|
||||
/// </summary>
|
||||
/// <param name="id">Id รายการบันทึกเวียนแจ้งการถึงแก่กรรม</param>
|
||||
/// <param name="exportType">pdf, docx หรือ xlsx</param>
|
||||
/// <returns></returns>
|
||||
/// <response code="200">เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ</response>
|
||||
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
||||
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
||||
[HttpGet("copy/36/{exportType}/{id}")]
|
||||
public async Task<ActionResult<ResponseObject>> 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
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -42,14 +42,10 @@ namespace BMA.EHR.Report.Service.Controllers
|
|||
public async Task<ActionResult<ResponseObject>> 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<dynamic>();
|
||||
|
||||
|
|
@ -123,6 +120,10 @@ namespace BMA.EHR.Report.Service.Controllers
|
|||
var content = result.DocumentBytes;
|
||||
return File(content, $"application/{exportType}", returnfile);
|
||||
}
|
||||
else
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
|
@ -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": {
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue