hrms-api-backend/BMA.EHR.Application/Repositories/Reports/InsigniaReportRepository.cs
2023-09-08 11:05:23 +07:00

746 lines
46 KiB
C#

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.Insignias;
using BMA.EHR.Domain.Models.MetaData;
using BMA.EHR.Domain.Models.Organizations;
using BMA.EHR.Domain.Models.Retirement;
using BMA.EHR.Domain.Shared;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
namespace BMA.EHR.Application.Repositories.Reports
{
public class InsigniaReportRepository
{
#region " Fields "
private readonly IApplicationDBContext _dbContext;
private readonly IWebHostEnvironment _hostingEnvironment;
private readonly OrganizationCommonRepository _organizationCommonRepository;
private readonly string CRLF = "\r\n";
#endregion
#region " Constructor and Destructor "
public InsigniaReportRepository(IApplicationDBContext dbContext,
OrganizationCommonRepository organizationCommonRepository,
IWebHostEnvironment hostEnvironment)
{
_dbContext = dbContext;
_hostingEnvironment = hostEnvironment;
_organizationCommonRepository = organizationCommonRepository;
}
#endregion
#region " Methods "
// private string GetPositionByYear(string profileID, int year)
// {
// using (var ctx = new ApplicationDbContext())
// {
// var ret = (from x in ctx.ProfileSalaryPositions.AsQueryable()
// where x.IdNavigation.ProfileId == profileID &&
// x.IdNavigation.SalaryDateAnnounce.Value.Year == year
// orderby x.IdNavigation.Order descending
// select x)
// .Include(x => x.Position)
// .FirstOrDefault();
// if (ret != null)
// return ret.Position.Name;
// else
// return "ไม่ระบุ";
// }
// }
// private string GetPositionLevelByYear(string profileID, int year)
// {
// using (var ctx = new ApplicationDbContext())
// {
// var ret = (from x in ctx.ProfileSalaryPositionLevels.AsQueryable()
// where x.IdNavigation.ProfileId == profileID &&
// x.IdNavigation.SalaryDateAnnounce.Value.Year == year
// orderby x.IdNavigation.Order descending
// select x)
// .Include(x => x.PositionLevel)
// .FirstOrDefault();
// if (ret != null)
// return ret.PositionLevel.Name;
// else
// return "ไม่ระบุ";
// }
// }
// private string GetPositionTypeByYear(string profileID, int year)
// {
// using (var ctx = new ApplicationDbContext())
// {
// var ret = (from x in ctx.ProfileSalaryPositionTypes.AsQueryable()
// where x.IdNavigation.ProfileId == profileID &&
// x.IdNavigation.SalaryDateAnnounce.Value.Year == year
// orderby x.IdNavigation.Order descending
// select x)
// .Include(x => x.PositionType)
// .FirstOrDefault();
// if (ret != null)
// return ret.PositionType.Name;
// else
// return "ไม่ระบุ";
// }
// }
public async Task<dynamic> GetYearInsigniaPeriod(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
string thaiYear = period.Year.ToThaiYear().ToString().ToThaiNumber();
return thaiYear;
}
public async Task<dynamic> Get2YearInsigniaPeriod(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
string thaiYear = period.Year.ToThaiYear().ToString().ToThaiNumber();
return thaiYear.Substring(2);
}
public async Task<dynamic> GetInsigniaPeriod(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
return period;
}
public async Task<dynamic> GetDateInsigniaPeriod(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
return new
{
StartDater = period.StartDate.ToThaiFullDate().ToString().ToThaiNumber(),
EndDate = period.EndDate.ToThaiFullDate().ToString().ToThaiNumber(),
};
}
public async Task<dynamic> GetProfileInsignia(Guid id)
{
var profile = (from r in await _dbContext.Set<Profile>()
.Include(x => x.Prefix)
.Include(x => x.Position)
.ToListAsync()
where r.Id == id
select new
{
FullName = $"{r.Prefix?.Name}{r.FirstName} {r.LastName}",
Position = r.Position == null ? "-" : r.Position.Name,
OCName = r.OcId == null ? "-" : _organizationCommonRepository.GetOrganizationNameFullPath(r.OcId.Value, false, false),
BirthDate = r.BirthDate.ToThaiFullDate().ToString().ToThaiNumber(),
})
.FirstOrDefault();
if (profile == null)
throw new Exception(GlobalMessages.DataNotFound);
return profile;
}
//39-แบบ ขร1 บัญชีแสดงจำนวนชั้นตราเครื่องราชฯ ข้าราชการ ชั้นสายสะพาย
public async Task<dynamic> GetKhr1Report(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
var data_insignia = await _dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Profile)
.Where(x => x.Request.Period == period)
.Where(x => x.IsApprove == true)
.Where(x => x.RequestInsignia.InsigniaType != null)
.Where(x => x.RequestInsignia.InsigniaType.Name == "ชั้นสายสะพาย")
.Select(x => new
{
Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name,
RequestInsigniaName = x.RequestInsignia.Name,
OcId = x.Request.Organization.Id
})
.ToListAsync();
var insignia = (from r in data_insignia
group r by new { OcId = r.OcId } into g
select new
{
RowNo = 1,
DepartmentName = _organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false),
G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "มหาปรมาภรณ์ช้างเผือก" ? 1 : 0),
G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "มหาปรมาภรณ์ช้างเผือก" ? 1 : 0),
G2Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "มหาวชิรมงกุฎ" ? 1 : 0),
G2Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "มหาวชิรมงกุฎ" ? 1 : 0),
G3Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ประถมาภรณ์ช้างเผือก" ? 1 : 0),
G3Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ประถมาภรณ์ช้างเผือก" ? 1 : 0),
G4Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ประถมาภรณ์มงกุฎไทย" ? 1 : 0),
G4Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ประถมาภรณ์มงกุฎไทย" ? 1 : 0),
G5Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0),
G5Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0),
Remark = "",
}).ToList();
return insignia;
}
public async Task<dynamic> GetKhr1TotalReport(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
var data_insignia = await _dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Profile)
.Where(x => x.Request.Period == period)
.Where(x => x.IsApprove == true)
.Where(x => x.RequestInsignia.InsigniaType != null)
.Where(x => x.RequestInsignia.InsigniaType.Name == "ชั้นสายสะพาย")
.Select(x => new
{
Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name,
RequestInsigniaName = x.RequestInsignia.Name,
OcId = x.Request.Organization.Id
})
.ToListAsync();
var insignia = (from r in data_insignia
group r by new { OcId = r.OcId } into g
select new
{
RowNo = 1,
DepartmentName = _organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false),
G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "มหาปรมาภรณ์ช้างเผือก" ? 1 : 0),
G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "มหาปรมาภรณ์ช้างเผือก" ? 1 : 0),
G2Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "มหาวชิรมงกุฎ" ? 1 : 0),
G2Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "มหาวชิรมงกุฎ" ? 1 : 0),
G3Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ประถมาภรณ์ช้างเผือก" ? 1 : 0),
G3Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ประถมาภรณ์ช้างเผือก" ? 1 : 0),
G4Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ประถมาภรณ์มงกุฎไทย" ? 1 : 0),
G4Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ประถมาภรณ์มงกุฎไทย" ? 1 : 0),
G5Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0),
G5Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0),
Remark = "",
}).ToList();
return new
{
G1Male = insignia.Sum(x => x.G1Male),
G1Female = insignia.Sum(x => x.G1Female),
G2Male = insignia.Sum(x => x.G2Male),
G2Female = insignia.Sum(x => x.G2Female),
G3Male = insignia.Sum(x => x.G3Male),
G3Female = insignia.Sum(x => x.G3Female),
G4Male = insignia.Sum(x => x.G4Male),
G4Female = insignia.Sum(x => x.G4Female),
G5Male = insignia.Sum(x => x.G5Male),
G5Female = insignia.Sum(x => x.G5Female),
Remark = "",
};
}
//40-แบบ ขร2 บัญชีแสดงจำนวนชั้นตราเครื่องราชฯ ข้าราชการ ชั้นต่ำกว่าสายสะพาย
public async Task<dynamic> GetKhr2Report(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
var data_insignia = await _dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Profile)
.Where(x => x.Request.Period == period)
.Where(x => x.IsApprove == true)
.Where(x => x.RequestInsignia.InsigniaType != null)
.Where(x => x.RequestInsignia.InsigniaType.Name == "ชั้นต่ำกว่าสายสะพาย")
.Select(x => new
{
Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name,
RequestInsigniaName = x.RequestInsignia.Name,
OcId = x.Request.Organization.Id
})
.ToListAsync();
var insignia = (from r in data_insignia
group r by new { OcId = r.OcId } into g
select new
{
RowNo = 1,
DepartmentName = _organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false),
G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ทวีติยาภรณ์ช้างเผือก" ? 1 : 0),
G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ทวีติยาภรณ์ช้างเผือก" ? 1 : 0),
G2Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ทวีติยาภรณ์มงกุฎไทย" ? 1 : 0),
G2Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ทวีติยาภรณ์มงกุฎไทย" ? 1 : 0),
G3Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ตริตาภรณ์ช้างเผือก" ? 1 : 0),
G3Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ตริตาภรณ์ช้างเผือก" ? 1 : 0),
G4Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ตริตาภรณ์มงกุฎไทย" ? 1 : 0),
G4Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ตริตาภรณ์มงกุฎไทย" ? 1 : 0),
G5Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "จัตุรถาภรณ์ช้างเผือก" ? 1 : 0),
G5Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "จัตุรถาภรณ์ช้างเผือก" ? 1 : 0),
G6Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "จัตุรถาภรณ์มงกุฎไทย" ? 1 : 0),
G6Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "จัตุรถาภรณ์มงกุฎไทย" ? 1 : 0),
G7Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เบญจมาภรณ์ช้างเผือก" ? 1 : 0),
G7Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เบญจมาภรณ์ช้างเผือก" ? 1 : 0),
G8Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เบญจมาภรณ์มงกุฎไทย" ? 1 : 0),
G8Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เบญจมาภรณ์มงกุฎไทย" ? 1 : 0),
G9Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0),
G9Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0),
Remark = "",
}).ToList();
return insignia;
}
public async Task<dynamic> GetKhr2TotalReport(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
var data_insignia = await _dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Profile)
.Where(x => x.Request.Period == period)
.Where(x => x.IsApprove == true)
.Where(x => x.RequestInsignia.InsigniaType != null)
.Where(x => x.RequestInsignia.InsigniaType.Name == "ชั้นต่ำกว่าสายสะพาย")
.Select(x => new
{
Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name,
RequestInsigniaName = x.RequestInsignia.Name,
OcId = x.Request.Organization.Id
})
.ToListAsync();
var insignia = (from r in data_insignia
group r by new { OcId = r.OcId } into g
select new
{
RowNo = 1,
DepartmentName = _organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false),
G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ทวีติยาภรณ์ช้างเผือก" ? 1 : 0),
G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ทวีติยาภรณ์ช้างเผือก" ? 1 : 0),
G2Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ทวีติยาภรณ์มงกุฎไทย" ? 1 : 0),
G2Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ทวีติยาภรณ์มงกุฎไทย" ? 1 : 0),
G3Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ตริตาภรณ์ช้างเผือก" ? 1 : 0),
G3Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ตริตาภรณ์ช้างเผือก" ? 1 : 0),
G4Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "ตริตาภรณ์มงกุฎไทย" ? 1 : 0),
G4Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "ตริตาภรณ์มงกุฎไทย" ? 1 : 0),
G5Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "จัตุรถาภรณ์ช้างเผือก" ? 1 : 0),
G5Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "จัตุรถาภรณ์ช้างเผือก" ? 1 : 0),
G6Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "จัตุรถาภรณ์มงกุฎไทย" ? 1 : 0),
G6Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "จัตุรถาภรณ์มงกุฎไทย" ? 1 : 0),
G7Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เบญจมาภรณ์ช้างเผือก" ? 1 : 0),
G7Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เบญจมาภรณ์ช้างเผือก" ? 1 : 0),
G8Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เบญจมาภรณ์มงกุฎไทย" ? 1 : 0),
G8Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เบญจมาภรณ์มงกุฎไทย" ? 1 : 0),
G9Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0),
G9Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0),
Remark = "",
}).ToList();
return new
{
G1Male = insignia.Sum(x => x.G1Male),
G1Female = insignia.Sum(x => x.G1Female),
G2Male = insignia.Sum(x => x.G2Male),
G2Female = insignia.Sum(x => x.G2Female),
G3Male = insignia.Sum(x => x.G3Male),
G3Female = insignia.Sum(x => x.G3Female),
G4Male = insignia.Sum(x => x.G4Male),
G4Female = insignia.Sum(x => x.G4Female),
G5Male = insignia.Sum(x => x.G5Male),
G5Female = insignia.Sum(x => x.G5Female),
G6Male = insignia.Sum(x => x.G6Male),
G6Female = insignia.Sum(x => x.G6Female),
G7Male = insignia.Sum(x => x.G7Male),
G7Female = insignia.Sum(x => x.G7Female),
G8Male = insignia.Sum(x => x.G8Male),
G8Female = insignia.Sum(x => x.G8Female),
G9Male = insignia.Sum(x => x.G9Male),
G9Female = insignia.Sum(x => x.G9Female),
Remark = "",
};
}
//41-แบบ ขร3 บัญชีรายชื่อข้าราชการผู้ขอพระราชทานเครื่องราชฯ
public async Task<dynamic> GetKhr3Report(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
var data = (from r in await _dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Profile)
.ThenInclude(x => x.Gender)
.Include(x => x.Profile)
.ThenInclude(x => x.Prefix)
.Include(x => x.Request)
.ThenInclude(x => x.Period)
.Include(x => x.Request)
.ThenInclude(x => x.Organization)
.Include(x => x.RequestInsignia)
.ThenInclude(x => x.InsigniaType)
.ToListAsync()
where r.Request.Period == period
&& r.IsApprove == true
&& r.RequestInsignia.InsigniaType != null
&& r.RequestInsignia.InsigniaType.Name != "เหรียญบำเหน็จในราชการ"
select new
{
InsigniaInitial = r.RequestInsignia.ShortName,
InsigniaName = r.RequestInsignia.Name,
ProfileId = r.Profile.Id,
FullName = $"{r.Profile.Prefix?.Name}{r.Profile.FirstName} {r.Profile.LastName}",
Gender = r.Profile.Gender == null ? null : r.Profile.Gender.Name,
Male = r.Profile.Gender == null ? 0 : (r.Profile.Gender.Name == "ชาย" ? 1 : 0),
Female = r.Profile.Gender == null ? 0 : (r.Profile.Gender.Name == "หญิง" ? 1 : 0),
InsigniaId = r.RequestInsignia.Id,
OCName = _organizationCommonRepository.GetOrganizationNameFullPath(r.Request.Organization.Id, false, false)
})
.Distinct()
.ToList();
// loop to add temp row with 50 rows per page
var insigniaList = data.Select(x => new { InsigniaId = x.InsigniaId, InsigniaInitial = x.InsigniaInitial, InsigniaName = x.InsigniaName })
.Distinct().ToList();
foreach (var ins in insigniaList)
{
var count = data.Where(x => x.InsigniaId == ins.InsigniaId).Count();
var mod_val = count <= 50 ? 50 - count : count % 50.0;
for (int i = 0; i < mod_val; i++)
{
var p = new
{
InsigniaInitial = ins.InsigniaInitial,
InsigniaName = ins.InsigniaName,
ProfileId = Guid.Parse("00000000-0000-0000-0000-000000000000"),
FullName = "",
Gender = "",
Male = 0,
Female = 0,
InsigniaId = ins.InsigniaId,
OCName = ""
};
data.Add(p);
}
}
return data;
}
//42-แบบ ขร4 บัญชีแสดงคุณสมบัติของข้าราชการซึ่งเสนอขอเครื่องราชฯ
public async Task<dynamic> GetKhr4Report(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
var teacher_data = (from r in await _dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Profile)
.ThenInclude(x => x.Salaries)
.Include(x => x.Profile)
.ThenInclude(x => x.Gender)
.Include(x => x.Profile)
.ThenInclude(x => x.Prefix)
.Include(x => x.Profile)
.ThenInclude(x => x.PositionType)
.Include(x => x.Profile)
.ThenInclude(x => x.PositionLevel)
.Include(x => x.Request)
.ThenInclude(x => x.Period)
.Include(x => x.RequestInsignia)
.ThenInclude(x => x.InsigniaType)
.Include(x => x.Request)
.ThenInclude(x => x.Organization)
.ToListAsync()
where r.Request.Period == period
&& r.IsApprove == true
&& r.RequestInsignia.InsigniaType != null
&& r.RequestInsignia.InsigniaType.Name != "เหรียญบำเหน็จในราชการ"
select new
{
InsigniaInitial = r.RequestInsignia.ShortName,
InsigniaName = r.RequestInsignia.Name,
ProfileId = r.Profile.Id,
CitizenId = r.Profile.CitizenId,
FullName = $"{r.Profile.Prefix?.Name}{r.Profile.FirstName} {r.Profile.LastName}",
ShowProfileId = r.Profile.Id,
Type = r.Profile.PositionType == null ? "-" : r.Profile.PositionType.Name,
AcademicStanding = "",
Level = r.Profile.PositionLevel == null ? "-" : r.Profile.PositionLevel.Name,
DateStart = r.Profile.DateStart == null ? null : r.Profile.DateStart.Value.ToThaiShortDate(),
SalaryAmount = r.Profile.Salaries.Count() == 0 ? 0 :
r.Profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount,
InsigniaRecv = "",
InsigniaRecvDate = "",
InsigniaRequest = r.RequestInsignia.ShortName,
Remark = "",
Position = r.Profile.Position?.Name +
(r.Profile.PositionType == null ? null : " ประเภท" + r.Profile.PositionType?.Name) +
(r.Profile.PositionLevel == null ? null : " สังกัด" + r.Profile.PositionLevel?.Name) +
(r.Request.Organization == null ? null : " ระดับ" + CRLF + _organizationCommonRepository.GetOrganizationNameFullPath(r.Request.Organization.Id, false, false))
,
OCName = _organizationCommonRepository.GetOrganizationNameFullPath(r.Request.Organization.Id, false, false)
})
.Distinct()
.ToList();
var insignia_data = (from r in await _dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Profile)
.ThenInclude(x => x.Gender)
.Include(x => x.Profile)
.ThenInclude(x => x.Insignias)
.ThenInclude(x => x.Insignia)
.Include(x => x.Request)
.ThenInclude(x => x.Period)
.Include(x => x.Request)
.ThenInclude(x => x.Organization)
.Include(x => x.RequestInsignia)
.ThenInclude(x => x.InsigniaType)
.ToListAsync()
where r.Request.Period == period
&& r.IsApprove == true
&& r.RequestInsignia.InsigniaType != null
&& r.RequestInsignia.InsigniaType.Name != "เหรียญบำเหน็จในราชการ"
select new
{
InsigniaInitial = r.RequestInsignia.ShortName,
InsigniaName = r.RequestInsignia.Name,
ProfileId = r.Profile.Id,
CitizenId = r.Profile.CitizenId,
FullName = $"",
ShowProfileId = Guid.Parse("00000000-0000-0000-0000-000000000000"),
Type = "",
AcademicStanding = "",
Level = "",
DateStart = "",
SalaryAmount = new double?(0),
InsigniaRecv = r.Profile.Insignias.Count() == 0 ? null :
(r.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().Insignia == null ? null : r.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().Insignia.ShortName),
InsigniaRecvDate = r.Profile.Insignias.Count() == 0 ? null :
(r.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().DateAnnounce == null ? null : r.Profile.Insignias.OrderByDescending(x => x.Year).FirstOrDefault().DateAnnounce.Value.ToThaiShortDate()),
InsigniaRequest = "",
Remark = "",
Position = "",
// Position = GetPositionByYear(r.Profile.Id, r.Request.Period.Year) + " ประเภท" +
// GetPositionTypeByYear(r.Profile.Id, r.Request.Period.Year) + " ระดับ" +
// GetPositionLevelByYear(r.Profile.Id, r.Request.Period.Year),
OCName = _organizationCommonRepository.GetOrganizationNameFullPath(r.Request.Organization.Id, false, false)
})
.Distinct()
.ToList();
var data2 = teacher_data.Union(insignia_data).ToList();
return data2;
}
//44-บัญชีแสดงจำนวนชั้นตราเครื่องราชฯ
public async Task<dynamic> GetSummaryCoinReport(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
var data_insignia = await _dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Profile)
.Where(x => x.Request.Period == period)
.Where(x => x.IsApprove == true)
.Where(x => x.RequestInsignia.InsigniaType != null)
.Where(x => x.RequestInsignia.InsigniaType.Name == "เหรียญบำเหน็จในราชการ")
.Select(x => new
{
Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name,
RequestInsigniaName = x.RequestInsignia.Name,
OcId = x.Request.Organization.Id
})
.ToListAsync();
var insignia = (from r in data_insignia
group r by new { OcId = r.OcId } into g
select new
{
RowNo = 1,
DepartmentName = _organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false),
G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เหรียญจักรพรรดิมาลา" ? 1 : 0),
G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เหรียญจักรพรรดิมาลา" ? 1 : 0),
G2Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0),
G2Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0),
Remark = "",
}).ToList();
return insignia;
}
public async Task<dynamic> GetSummaryTotalCoinReport(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
var data_insignia = await _dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Profile)
.Where(x => x.Request.Period == period)
.Where(x => x.IsApprove == true)
.Where(x => x.RequestInsignia.InsigniaType != null)
.Where(x => x.RequestInsignia.InsigniaType.Name == "เหรียญบำเหน็จในราชการ")
.Select(x => new
{
Gendor = x.Profile.Gender == null ? null : x.Profile.Gender.Name,
RequestInsigniaName = x.RequestInsignia.Name,
OcId = x.Request.Organization.Id
})
.ToListAsync();
var insignia = (from r in data_insignia
group r by new { OcId = r.OcId } into g
select new
{
RowNo = 1,
DepartmentName = _organizationCommonRepository.GetOrganizationNameFullPath(g.Key.OcId, false, false),
G1Male = g.Sum(x => x.Gendor == "ชาย" && x.RequestInsigniaName == "เหรียญจักรพรรดิมาลา" ? 1 : 0),
G1Female = g.Sum(x => x.Gendor == "หญิง" && x.RequestInsigniaName == "เหรียญจักรพรรดิมาลา" ? 1 : 0),
G2Male = g.Sum(x => x.Gendor == "ชาย" ? 1 : 0),
G2Female = g.Sum(x => x.Gendor == "หญิง" ? 1 : 0),
Remark = "",
}).ToList();
return new
{
G1Male = insignia.Sum(x => x.G1Male),
G1Female = insignia.Sum(x => x.G1Female),
G2Male = insignia.Sum(x => x.G2Male),
G2Female = insignia.Sum(x => x.G2Female),
Remark = "",
};
}
//45-บัญชีแสดงรายชื่อผู้ขอพระราชทานเหรียญจักรพรรดิมาลา
public async Task<dynamic> GetCoinReport(Guid id)
{
var period = await _dbContext.Set<InsigniaPeriod>()
.FirstOrDefaultAsync(x => x.Id == id);
if (period == null)
throw new Exception(GlobalMessages.InsigniaPeriodNotFound);
var data = (from r in await _dbContext.Set<InsigniaRequestProfile>()
.Include(x => x.Profile)
.ThenInclude(x => x.Gender)
.Include(x => x.Profile)
.ThenInclude(x => x.Prefix)
.Include(x => x.Request)
.ThenInclude(x => x.Period)
.Include(x => x.Request)
.ThenInclude(x => x.Organization)
.Include(x => x.RequestInsignia)
.ThenInclude(x => x.InsigniaType)
.ToListAsync()
where r.Request.Period == period
&& r.IsApprove == true
&& r.RequestInsignia.InsigniaType != null
&& r.RequestInsignia.InsigniaType.Name != "เหรียญบำเหน็จในราชการ"
select new
{
InsigniaInitial = r.RequestInsignia.ShortName,
InsigniaName = r.RequestInsignia.Name,
ProfileId = r.Profile.Id,
FullName = $"{r.Profile.Prefix?.Name}{r.Profile.FirstName} {r.Profile.LastName}",
Gender = r.Profile.Gender == null ? null : r.Profile.Gender.Name,
Male = r.Profile.Gender == null ? 0 : (r.Profile.Gender.Name == "ชาย" ? 1 : 0),
Female = r.Profile.Gender == null ? 0 : (r.Profile.Gender.Name == "หญิง" ? 1 : 0),
InsigniaId = r.RequestInsignia.Id,
OCName = _organizationCommonRepository.GetOrganizationNameFullPath(r.Request.Organization.Id, false, false)
})
.Distinct()
.ToList();
// loop to add temp row with 50 rows per page
var insigniaList = data.Select(x => new { InsigniaId = x.InsigniaId, InsigniaInitial = x.InsigniaInitial, InsigniaName = x.InsigniaName })
.Distinct().ToList();
foreach (var ins in insigniaList)
{
var count = data.Where(x => x.InsigniaId == ins.InsigniaId).Count();
var mod_val = count <= 50 ? 50 - count : count % 50.0;
for (int i = 0; i < mod_val; i++)
{
var p = new
{
InsigniaInitial = ins.InsigniaInitial,
InsigniaName = ins.InsigniaName,
ProfileId = Guid.Parse("00000000-0000-0000-0000-000000000000"),
FullName = "",
Gender = "",
Male = 0,
Female = 0,
InsigniaId = ins.InsigniaId,
OCName = ""
};
data.Add(p);
}
}
return data;
}
//46-ประวัติสำหรับการเสนอขอพระราชทานเหรียญจักรพรรดิมาลา
public async Task<dynamic> GetHistorySalaryReport(Guid id)
{
var profile = await _dbContext.Set<Profile>()
.FirstOrDefaultAsync(x => x.Id == id);
if (profile == null)
throw new Exception(GlobalMessages.DataNotFound);
var positions = await _dbContext.Set<PositionPath>()
.ToListAsync();
var organizations = await _dbContext.Set<OrganizationEntity>()
.Include(x => x.Parent)
.ThenInclude(x => x.OrganizationOrganization)
.ToListAsync();
var data = (from r in await _dbContext.Set<ProfileSalary>()
.Include(x => x.Profile)
.ToListAsync()
join p in positions on r.PositionId equals p.Id into pGroup
from p in pGroup.DefaultIfEmpty()
join o in organizations on r.OcId equals o.Id into oGroup
from o in oGroup.DefaultIfEmpty()
where r.Profile == profile
select new
{
DateTh = r.Date == null ? "-" : r.Date.Value.ToThaiShortDate().ToString().ToThaiNumber(),
Position = p.Name,
OCName = o.Parent == null ? "-" : (o.Parent.OrganizationOrganization == null ? "-" : o.Parent.OrganizationOrganization.Name),
Age = r.Date == null ? "-" : r.Date.Value.CalculateBetweenDateV2(DateTime.Now).ToThaiNumber(),
Amount = r.Amount == null ? null : r.Amount.Value.ToNumericText().ToThaiNumber(),
Date = r.Date,
Remark = "",
})
.Distinct()
.OrderBy(x => x.Date)
.ToList();
return data;
}
#endregion
}
}