From 077d20a779ee95e8b1fd82e487852e9b702d77d1 Mon Sep 17 00:00:00 2001 From: kittapath Date: Thu, 13 Feb 2025 16:44:37 +0700 Subject: [PATCH] report insignia6 --- .../Reports/InsigniaReportRepository.cs | 117 ++++++++++++++++-- .../Controllers/InsigniaReportController.cs | 83 ++++++++++++- 2 files changed, 182 insertions(+), 18 deletions(-) diff --git a/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs b/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs index e2f1713b..13e91bb0 100644 --- a/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs +++ b/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs @@ -134,6 +134,26 @@ namespace BMA.EHR.Application.Repositories.Reports return thaiYear; } + public async Task GetNameInsigniaNote(Guid id) + { + var note = await _dbContext.Set() + .FirstOrDefaultAsync(x => x.Id == id); + if (note == null) + throw new Exception(GlobalMessages.InsigniaPeriodNotFound); + string name = note.Name.ToString().ToThaiNumber(); + return name; + } + + public async Task GetYearInsigniaNote(Guid id) + { + var note = await _dbContext.Set() + .FirstOrDefaultAsync(x => x.Id == id); + if (note == null) + throw new Exception(GlobalMessages.InsigniaPeriodNotFound); + string thaiYear = note.Year.ToThaiYear().ToString().ToThaiNumber(); + return thaiYear; + } + public async Task Get2YearInsigniaPeriod(Guid id) { var period = await _dbContext.Set() @@ -1371,27 +1391,26 @@ namespace BMA.EHR.Application.Repositories.Reports } public async Task GetKhr5TotalReport(Guid id, string type = null, int node = -1, Guid nodeId = default) { - var period = await _dbContext.Set() + var period = await _dbContext.Set() .FirstOrDefaultAsync(x => x.Id == id); if (period == null) throw new Exception(GlobalMessages.InsigniaPeriodNotFound); - var data_insigniaQuery = _dbContext.Set() - .Include(x => x.Request) - .Include(x => x.RequestInsignia) - .ThenInclude(x => x.InsigniaType) - .Where(x => x.Request.Period.Id == period.Id) - .Where(x => x.IsApprove == true) - .Where(x => x.Status == "PENDING") + var data_insigniaQuery = _dbContext.Set() + .Include(x => x.RequestInsignia) + .ThenInclude(x => x.InsigniaType) + .Where(x => x.InsigniaNote.Id == period.Id) + // .Where(x => x.IsApprove == true) + .Where(x => x.Status == "DONE") .Where(x => x.RequestInsignia.InsigniaType != null); if (type == "officer") { - data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType == "officer"); + data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType.Trim().ToUpper() == "OFFICER"); } else if (type == "employee") { - data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType == "employee"); + data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType.Trim().ToUpper() == "EMPLOYEE"); } switch (node) @@ -1426,14 +1445,14 @@ namespace BMA.EHR.Application.Repositories.Reports InsigniaTypeName = x.RequestInsignia.InsigniaType.Name, RequestInsigniaName = x.RequestInsignia.Name, InsigniaInitial = $"{x.RequestInsignia.Name}({x.RequestInsignia.ShortName})", // Insignia's full name and short name - OcId = x.Request.OrganizationId + OcId = x.Root }).ToListAsync(); var insignia = (from r in data group r by new { OcId = r.OcId, r.InsigniaTypeName, r.RequestInsigniaName } into g select new { RowNo = 1, - DepartmentName = _userProfileRepository.GetOc(g.Key.OcId, 0, AccessToken).Root,// _organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false), + DepartmentName = g.Key.OcId, InsigniaTypeName = g.Key.InsigniaTypeName, RequestInsigniaName = g.Key.RequestInsigniaName, Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0), @@ -1443,6 +1462,80 @@ namespace BMA.EHR.Application.Repositories.Reports return insignia; } + public async Task GetKhr6TotalReport(Guid id, string type = null, int node = -1, Guid nodeId = default) + { + var period = await _dbContext.Set() + .FirstOrDefaultAsync(x => x.Id == id); + if (period == null) + throw new Exception(GlobalMessages.InsigniaPeriodNotFound); + + var data_insigniaQuery = _dbContext.Set() + .Include(x => x.RequestInsignia) + .ThenInclude(x => x.InsigniaType) + .Where(x => x.InsigniaNote.Id == period.Id) + // .Where(x => x.IsApprove == true) + .Where(x => x.Status == "DONE") + .Where(x => x.RequestInsignia.InsigniaType != null); + + if (type == "officer") + { + data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType.Trim().ToUpper() == "OFFICER"); + } + else if (type == "employee") + { + data_insigniaQuery = data_insigniaQuery.Where(r => r.ProfileType.Trim().ToUpper() == "EMPLOYEE"); + } + + switch (node) + { + case 0: + data_insigniaQuery = data_insigniaQuery.Where(r => r.RootDnaId == nodeId); + break; + + case 1: + data_insigniaQuery = data_insigniaQuery.Where(r => r.Child1DnaId == nodeId); + break; + + case 2: + data_insigniaQuery = data_insigniaQuery.Where(r => r.Child2DnaId == nodeId); + break; + + case 3: + data_insigniaQuery = data_insigniaQuery.Where(r => r.Child3DnaId == nodeId); + break; + + case 4: + data_insigniaQuery = data_insigniaQuery.Where(r => r.Child4DnaId == nodeId); + break; + + default: + break; + } + + var data = await data_insigniaQuery.Select(x => new + { + Gendor = x.Gender ?? "", + InsigniaTypeName = x.RequestInsignia.InsigniaType.Name, + RequestInsigniaName = x.RequestInsignia.Name, + IsApprove = x.IsApprove, + InsigniaInitial = $"{x.RequestInsignia.Name}({x.RequestInsignia.ShortName})", // Insignia's full name and short name + OcId = x.Root + }).ToListAsync(); + var insignia = (from r in data + group r by new { OcId = r.OcId, r.InsigniaTypeName, r.RequestInsigniaName } into g + select new + { + RowNo = 1, + DepartmentName = g.Key.OcId, + InsigniaTypeName = g.Key.InsigniaTypeName, + RequestInsigniaName = g.Key.RequestInsigniaName, + Pending = g.Sum(x => x.IsApprove == false ? 1 : 0), + Done = g.Sum(x => x.IsApprove == true ? 1 : 0), + Remark = "", + }).ToList(); + + return insignia; + } #endregion } } diff --git a/BMA.EHR.Insignia/Controllers/InsigniaReportController.cs b/BMA.EHR.Insignia/Controllers/InsigniaReportController.cs index 29c1103a..97721107 100644 --- a/BMA.EHR.Insignia/Controllers/InsigniaReportController.cs +++ b/BMA.EHR.Insignia/Controllers/InsigniaReportController.cs @@ -368,7 +368,7 @@ namespace BMA.EHR.Insignia.Service.Controllers try { var insignalPeriod = await _repository.GetKhr5TotalReport(req.roundId, type, req.node, req.nodeId); - var yearInsignalPeriod = await _repository.GetYearInsigniaPeriod(req.roundId); + var yearInsignalNote = await _repository.GetYearInsigniaNote(req.roundId); var detailList = new List(); var male = 0; var feMale = 0; @@ -439,13 +439,12 @@ namespace BMA.EHR.Insignia.Service.Controllers { profileType = type == "employee" ? "ลูกจ้างประจำ" : "ข้าราชการสามัญกรุงเทพมหานคร", org = org, - year = yearInsignalPeriod, + year = yearInsignalNote, date = date, data = detailList, } }; return Success(result); - } catch { @@ -469,6 +468,77 @@ namespace BMA.EHR.Insignia.Service.Controllers { try { + var insignalPeriod = await _repository.GetKhr6TotalReport(req.roundId, type, req.node, req.nodeId); + var nameNote = await _repository.GetNameInsigniaNote(req.roundId); + var detailList = new List(); + var pending = 0; + var done = 0; + var _pending = 0; + var _done = 0; + var pendingSum = 0; + var doneSum = 0; + var row = 1; + var nameType = ""; + var org = ""; + foreach (var _data in insignalPeriod) + { + // return Success("result"); + if (nameType != "" && nameType != _data.GetType().GetProperty("InsigniaTypeName").GetValue(_data)) + { + org = _data.GetType().GetProperty("DepartmentName").GetValue(_data); + detailList.Add(new + { + row = "", + type = "", + name = "รวม", + pending = pending.ToString().ToThaiNumber(), + done = done.ToString().ToThaiNumber(), + sum = (pending + done).ToString().ToThaiNumber(), + }); + pendingSum = pendingSum + pending; + doneSum = pendingSum + done; + pending = 0; + done = 0; + row = 1; + } + nameType = _data.GetType().GetProperty("InsigniaTypeName").GetValue(_data); + + _pending = _data.GetType().GetProperty("Pending").GetValue(_data); + _done = _data.GetType().GetProperty("Done").GetValue(_data); + detailList.Add(new + { + row = row.ToString().ToThaiNumber(), + type = _data.GetType().GetProperty("InsigniaTypeName").GetValue(_data), + name = _data.GetType().GetProperty("RequestInsigniaName").GetValue(_data), + pending = _pending.ToString().ToThaiNumber(), + done = _done.ToString().ToThaiNumber(), + sum = (_pending + _done).ToString().ToThaiNumber(), + }); + pending = pending + _data.GetType().GetProperty("Pending").GetValue(_data); + done = done + _data.GetType().GetProperty("Done").GetValue(_data); + row = row + 1; + } + detailList.Add(new + { + row = "", + type = "", + name = "รวม", + pending = pending.ToString().ToThaiNumber(), + done = done.ToString().ToThaiNumber(), + sum = (pending + done).ToString().ToThaiNumber(), + }); + pendingSum = pendingSum + pending; + doneSum = pendingSum + done; + detailList.Add(new + { + row = "", + type = "", + name = "รวมทั้งหมด", + pending = pendingSum.ToString().ToThaiNumber(), + done = doneSum.ToString().ToThaiNumber(), + sum = (pendingSum + doneSum).ToString().ToThaiNumber(), + }); + var date = $"ณ วันที่ {DateTime.Now.Date.ToThaiShortDate().ToThaiNumber()}"; var result = new { @@ -476,13 +546,14 @@ namespace BMA.EHR.Insignia.Service.Controllers reportName = "reportInsignia6", data = new { - yearInsignalPeriod = "", + profileType = type == "employee" ? "ลูกจ้างประจำ" : "ข้าราชการสามัญกรุงเทพมหานคร", + org = org, + name = nameNote, date = date, - data = "", + data = detailList, } }; return Success(result); - } catch {