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 { public class RetireReportRepository { #region " Fields " private readonly IApplicationDBContext _dbContext; private readonly IWebHostEnvironment _hostingEnvironment; private readonly MinIOService _documentService; private readonly OrganizationCommonRepository _organizationCommonRepository; #endregion #region " Constructor and Destructor " public RetireReportRepository(IApplicationDBContext dbContext, MinIOService documentService, OrganizationCommonRepository organizationCommonRepository, IWebHostEnvironment hostEnvironment) { _dbContext = dbContext; _hostingEnvironment = hostEnvironment; _organizationCommonRepository = organizationCommonRepository; _documentService = documentService; } #endregion #region " Methods " //public async Task> GetListRetirePeriodAsync(Guid Id) //{ // try // { // // 1. query // //var data = await _dbContext.Set() // // .Include(x => x.RetirementProfiles) // // .ThenInclude(x => x.Profile) // // .ToListAsync(); // // 2. data not found throw exception // // 3. Load Report File // //return data; // } // catch // { // throw; // } //} #region รายงานประกาศเกษียณ public async Task GetProfileRetirementdAsync(Guid retireId) { var retire = await _dbContext.Set() .Include(x => x.RetirementProfiles) .FirstOrDefaultAsync(x => x.Id == retireId); var retires = new List(); if (retire == null) { var retireHistorys = await _dbContext.Set().AsQueryable() .FirstOrDefaultAsync(x => x.Id == retireId); 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 ? 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); if (retireHistorys.TypeReport != null) { retireHistorys.Total = profiles.Where(x => x.remove == retireHistorys.TypeReport).Count(); profiles = profiles.Where(x => x.remove == retireHistorys.TypeReport).OrderBy(x => x.order).ToList(); } else { 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 && (retire.TypeReport == null || retire.TypeReport == x.Remove)) .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 ? "" : x.Profile.Prefix.Name, fullName = $"{(x.Profile.Prefix == null ? null : x.Profile.Prefix.Name)}{x.Profile.FirstName} {x.Profile.LastName}", organizationOrganization = x.Profile.OrganizationOrganization, ocId = x.Profile.OcId, position = x.Profile.Position == null ? "-" : x.Profile.Position.Name, positionType = x.Profile.PositionType == null ? "-" : x.Profile.PositionType.Name, positionExecutive = x.Profile.PositionExecutive, posNo = x.Profile.PosNo == null ? "-" : x.Profile.PosNo.Name, positionEmployeePosition = x.Profile.PositionEmployeePosition == null ? "-" : x.Profile.PositionEmployeePosition.Name, positionEmployeeLevel = x.Profile.PositionEmployeeLevel == null ? "-" : x.Profile.PositionEmployeeLevel.Name, positionEmployeeGroup = x.Profile.PositionEmployeeGroup == null ? "-" : x.Profile.PositionEmployeeGroup.Name, posNoEmployee = x.Profile.PosNoEmployee, }) .ToListAsync(); foreach (var r in profile_retire) { var data = new ProfileJsonRequest { order = r.order, id = r.id, reason = r.reason, remove = r.remove, profileId = r.profileId, citizenId = r.citizenId, prefix = r.prefix, fullName = r.fullName, organizationOrganization = r.organizationOrganization, oc = r.ocId == null ? null : _organizationCommonRepository.GetOrganizationNameFullPath(r.ocId.Value), position = r.position, positionType = r.positionType, positionExecutive = r.positionExecutive, posNo = r.posNo, positionEmployeePosition = r.positionEmployeePosition, positionEmployeeLevel = r.positionEmployeeLevel, positionEmployeeGroup = r.positionEmployeeGroup, posNoEmployee = r.posNoEmployee, }; retires.Add(data); } 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 = retires }; } } #endregion #region รายงานบันทึกการถึงแก่กรรม public async Task GetRetirementDeceasedAsync(Guid id) { var data = await _dbContext.Set().AsQueryable() .Where(x => x.Id == id) .Select(p => new { p.Id, p.prefix, p.profileId, p.firstName, p.lastName, p.root, p.rootShortName, p.child1, p.child1ShortName, p.child2, p.child2ShortName, p.child3, p.child3ShortName, p.child4, p.child4ShortName, p.posMasterNo, p.posLevelName, p.posTypeName, // ProfileId = p.Profile.Id, // Prefix = p.Profile.Prefix == null ? null : p.Profile.Prefix.Name, // PrefixId = p.Profile.Prefix == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Prefix.Id, // p.Profile.FirstName, // p.Profile.LastName, // Position = p.Profile.Position == null ? null : p.Profile.Position.Name, // PositionId = p.Profile.Position == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Position.Id, // PositionType = p.Profile.PositionType == null ? null : p.Profile.PositionType.Name, // PositionTypeId = p.Profile.PositionType == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.PositionType.Id, // p.Profile.PositionLine, // p.Profile.PositionLineId, // PositionLevel = p.Profile.PositionLevel == null ? null : p.Profile.PositionLevel.Name, // PositionLevelId = p.Profile.PositionLevel == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.PositionLevel.Id, // p.Profile.PositionExecutive, // p.Profile.PositionExecutiveId, // Organization = p.Profile.Oc, // OrganizationId = p.Profile.OcId, p.Number, p.Date, p.Location, p.Reason, }) .FirstOrDefaultAsync(); 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 { FullName = $"{data.prefix} {data.firstName} {data.lastName}", Date, CurrentDate, data.profileId, data.prefix, data.firstName, data.lastName, data.root, data.rootShortName, data.child1, data.child1ShortName, data.child2, data.child2ShortName, data.child3, data.child3ShortName, data.child4, data.child4ShortName, data.posMasterNo, data.posLevelName, data.posTypeName, data.Number, data.Location, data.Reason, }; } #endregion #region หัวกระดาษหนังสือเวียน public async Task GetHeadRetirementDeceasedAsync(Guid id) { var data = await _dbContext.Set().AsQueryable() // .Include(x => x.Profile) .Where(x => x.Id == id) .FirstOrDefaultAsync(); var oc = ""; if (data == null) return new { Oc = oc, Number = $"กท /", Date = "", Subject = "ข้าราชการถึงแก่กรรม", Send = "หัวหน้าสำนักงาน ก.ก.", }; // if (data.Profile.OcId != null) // { // var organization = await _dbContext.Set().AsQueryable() // .Where(x => x.Id == data.Profile.OcId) // .FirstOrDefaultAsync(); // if (organization != null) // { // var organizationAgency = await _dbContext.Set().AsQueryable() // .Where(x => x.Id == organization.OrganizationAgencyId) // .FirstOrDefaultAsync(); // if (organizationAgency != null) // { // var agency = await _dbContext.Set().AsQueryable() // .Where(x => x.Id == organizationAgency.Id) // .FirstOrDefaultAsync(); // if (agency != null) // { // oc = agency.OrganizationOrganization?.Name; // } // } // } // } return new { Oc = oc, Number = $"กท /{data.CreatedAt.Year.ToThaiYear()}", Date = data.CreatedAt.ToThaiFullDate().ToString().ToThaiNumber(), Subject = "ข้าราชการถึงแก่กรรม", Send = "หัวหน้าสำนักงาน ก.ก.", }; } #endregion #region บันทึกหนังสือเวียน public async Task UploadFileRetirementDeceasedAsync(Guid id, Domain.Models.Documents.Document file) { var data = await _dbContext.Set().AsQueryable() // .Include(x => x.Profile) .Where(x => x.Id == id) .FirstOrDefaultAsync(); if (data != null) data.DocumentForward = file; await _dbContext.SaveChangesAsync(); } #endregion #region แบบฟอร์มหนังสือขอลาออกจากราชการ public async Task GetResignByUser(Guid id) { var data = await _dbContext.Set().AsQueryable() .Where(x => x.Id == id) .Select(p => new { p.Id, Prefix = p.Profile.Prefix == null ? null : p.Profile.Prefix.Name, PrefixId = p.Profile.Prefix == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Profile.Prefix.Id, p.Profile.FirstName, p.Profile.LastName, ProfileId = p.Profile.Id, p.Location, p.SendDate, p.ActiveDate, p.Reason, p.Status, salary = p.AmountOld, p.ApproveReason, p.RejectReason, p.IsActive, p.CreatedAt, p.PositionTypeOld, p.PositionLevelOld, p.PositionNumberOld, p.OrganizationPositionOld, p.OligarchReject, p.OligarchApproveReason, p.OligarchRejectReason, p.OligarchRejectDate, p.CommanderReject, p.CommanderApproveReason, p.CommanderRejectReason, p.CommanderRejectDate, p.RemarkHorizontal, }) .FirstOrDefaultAsync(); if (data == null) return null; var _data = new { data.Id, data.ProfileId, data.Prefix, data.FirstName, data.LastName, data.Location, FullName = $"{data.Prefix}{data.FirstName} {data.LastName}", SendDate = string.IsNullOrEmpty(data.SendDate.ToString()) ? string.Empty : DateTime.Parse(data.SendDate.ToString()).ToThaiFullDate().ToString().ToThaiNumber(), ActiveDate = string.IsNullOrEmpty(data.ActiveDate.ToString()) ? string.Empty : DateTime.Parse(data.ActiveDate.ToString()).ToThaiFullDate().ToString().ToThaiNumber(), data.Reason, data.Status, data.salary, data.PositionTypeOld, data.PositionLevelOld, data.PositionNumberOld, data.OrganizationPositionOld, data.ApproveReason, data.RejectReason, data.IsActive, data.CreatedAt, data.OligarchReject, data.OligarchApproveReason, data.OligarchRejectReason, OligarchRejectDate = string.IsNullOrEmpty(data.OligarchRejectDate.ToString()) ? string.Empty : DateTime.Parse(data.OligarchRejectDate.ToString()).ToThaiFullDate().ToString().ToThaiNumber(), data.CommanderReject, data.CommanderApproveReason, data.CommanderRejectReason, CommanderRejectDate = string.IsNullOrEmpty(data.CommanderRejectDate.ToString()) ? string.Empty : DateTime.Parse(data.CommanderRejectDate.ToString()).ToThaiFullDate().ToString().ToThaiNumber(), data.RemarkHorizontal, }; return _data; } #endregion #endregion } }