using BMA.EHR.Application.Common.Interfaces; using BMA.EHR.Application.Responses.Reports; using BMA.EHR.Domain.Extensions; using BMA.EHR.Domain.Models.Commands.Core; using BMA.EHR.Domain.Models.HR; using BMA.EHR.Domain.Models.Placement; using BMA.EHR.Domain.Shared; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; namespace BMA.EHR.Application.Repositories.Commands { public class CommandReportRepository : GenericRepository { #region " Fields " private readonly IApplicationDBContext _dbContext; private readonly IHttpContextAccessor _httpContextAccessor; private readonly OrganizationCommonRepository _organizationCommonRepository; private readonly UserProfileRepository _userProfileRepository; #endregion #region " Constructor and Destuctor " public CommandReportRepository(IApplicationDBContext dbContext, IHttpContextAccessor httpContextAccessor, OrganizationCommonRepository organizationCommonRepository, UserProfileRepository userProfileRepository) : base(dbContext, httpContextAccessor) { _dbContext = dbContext; _httpContextAccessor = httpContextAccessor; _organizationCommonRepository = organizationCommonRepository; _userProfileRepository = userProfileRepository; } #endregion #region " Properties " protected Guid UserOrganizationId { get { if (UserId != null || UserId != "") return _userProfileRepository.GetUserOCId(Guid.Parse(UserId!)); else return Guid.Empty; } } #endregion #region " Methods " public async Task> GetCommandType01AttachmentAsync(Guid id) { try { var raw_data = await _dbContext.Set() .Include(c => c.Command) .Where(c => c.Command.Id == id) .ToListAsync(); if (raw_data == null) { throw new Exception(GlobalMessages.CommandNotFound); } var ret = new List(); foreach (var c in raw_data) { ret.Add(new { FullName = $"{c.Prefix}{c.FirstName} {c.LastName}", PositionName = "" }); } return ret; } catch { throw; } } public async Task> GetCommandType02AttachmentAsync(Guid id) { try { var raw_data = await _dbContext.Set() .Include(c => c.Command) .Where(c => c.Command.Id == id) .ToListAsync(); if (raw_data == null) { throw new Exception(GlobalMessages.CommandNotFound); } var ret = new List(); foreach (var c in raw_data) { ret.Add(new { FullName = $"{c.Prefix}{c.FirstName} {c.LastName}", PositionName = "" }); } return ret; } catch { throw; } } public async Task> GetCommandType03AttachmentAsync(Guid id) { try { var raw_data = await _dbContext.Set() .Include(c => c.Command) .Where(c => c.Command.Id == id) .ToListAsync(); if (raw_data == null) { throw new Exception(GlobalMessages.CommandNotFound); } var report_data = (from r in raw_data join p in _dbContext.Set() .Include(x => x.OrganizationPosition) .ThenInclude(x => x.Organization) .Include(x => x.PositionPath) .Include(x => x.PositionLevel) .Include(x => x.PositionNumber) .Include(x => x.PositionType) on r.RefPlacementProfileId equals p.Id join pf in _dbContext.Set() .Include(x => x.Position) .Include(x => x.PositionLevel) .Include(x => x.PositionType) .Include(x => x.PosNo) .Include(x => x.Salaries) on r.CitizenId equals pf.CitizenId select new CommandType03Response { CitizenId = r.CitizenId, FullName = $"{r.Prefix}{r.FirstName} {r.LastName}", OldOc = pf.Oc == null ? "" : pf.Oc.Replace("/", " "), OldPositionName = pf.Position == null ? "" : pf.Position.Name, OldPositionLevel = pf.PositionLevel == null ? "" : pf.PositionLevel.Name, OldPositionType = pf.PositionType == null ? "" : pf.PositionType.Name, OldPositionNumber = pf.PosNo == null ? "" : pf.PosNo.Name, OldSalary = pf.Salaries == null || pf.Salaries.Count == 0 ? 0 : pf.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount.Value, NewOc = _organizationCommonRepository.GetOrganizationNameFullPath(p.OrganizationPosition!.Organization!.Id, false, false, "/"), NewPositionName = p.PositionPath == null ? "" : p.PositionPath!.Name, NewPositionLevel = p.PositionLevel == null ? "" : p.PositionLevel.Name, NewPositionType = p.PositionType == null ? "" : p.PositionType.Name, NewPositionNumber = p.PositionNumber == null ? "" : p.PositionNumber.Name, NewSalary = p.Amount == null ? 0 : p.Amount.Value, AppointDate = p.RecruitDate == null ? "" : p.RecruitDate.Value.ToThaiFullDate3() }) .ToList(); return report_data; } catch { throw; } } public async Task> GetCommandType04AttachmentAsync(Guid id) { try { var raw_data = await _dbContext.Set() .Include(c => c.Command) .Where(c => c.Command.Id == id) .ToListAsync(); if (raw_data == null) { throw new Exception(GlobalMessages.CommandNotFound); } var report_data = (from r in raw_data join p in _dbContext.Set() .Include(x => x.OrganizationPosition) .ThenInclude(x => x.Organization) .Include(x => x.PositionPath) .Include(x => x.PositionLevel) .Include(x => x.PositionNumber) .Include(x => x.PositionType) on r.RefPlacementProfileId equals p.Id join pf in _dbContext.Set() .Include(x => x.Position) .Include(x => x.PositionLevel) .Include(x => x.PositionType) .Include(x => x.PosNo) .Include(x => x.Salaries) on r.CitizenId equals pf.CitizenId select new CommandType03Response { CitizenId = r.CitizenId, FullName = $"{r.Prefix}{r.FirstName} {r.LastName}", OldOc = pf.Oc == null ? "" : pf.Oc.Replace("/", " "), OldPositionName = pf.Position == null ? "" : pf.Position.Name, OldPositionLevel = pf.PositionLevel == null ? "" : pf.PositionLevel.Name, OldPositionType = pf.PositionType == null ? "" : pf.PositionType.Name, OldPositionNumber = pf.PosNo == null ? "" : pf.PosNo.Name, OldSalary = pf.Salaries == null || pf.Salaries.Count == 0 ? 0 : pf.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount.Value, NewOc = _organizationCommonRepository.GetOrganizationNameFullPath(p.OrganizationPosition!.Organization!.Id, false, false, "/"), NewPositionName = p.PositionPath == null ? "" : p.PositionPath!.Name, NewPositionLevel = p.PositionLevel == null ? "" : p.PositionLevel.Name, NewPositionType = p.PositionType == null ? "" : p.PositionType.Name, NewPositionNumber = p.PositionNumber == null ? "" : p.PositionNumber.Name, NewSalary = p.Amount == null ? 0 : p.Amount.Value, AppointDate = p.RecruitDate == null ? "" : p.RecruitDate.Value.ToThaiFullDate3() }) .ToList(); return report_data; } catch { throw; } } public async Task> GetCommandType05_06AttachmentAsync(Guid id) { try { var raw_data = await _dbContext.Set() .Include(c => c.Command) .Where(c => c.Command.Id == id) .ToListAsync(); if (raw_data == null) { throw new Exception(GlobalMessages.CommandNotFound); } var report_data = (from r in raw_data join p in _dbContext.Set() .Include(x => x.OrganizationPosition) .ThenInclude(x => x.Organization) .Include(x => x.PositionPath) .Include(x => x.PositionLevel) .Include(x => x.PositionNumber) .Include(x => x.PositionType) on r.RefPlacementProfileId equals p.Id join pf in _dbContext.Set() .Include(x => x.Position) .Include(x => x.PositionLevel) .Include(x => x.PositionType) .Include(x => x.PosNo) .Include(x => x.Salaries) on r.CitizenId equals pf.CitizenId select new CommandType03Response { CitizenId = r.CitizenId, FullName = $"{r.Prefix}{r.FirstName} {r.LastName}", OldOc = pf.Oc == null ? "" : pf.Oc.Replace("/", " "), OldPositionName = pf.Position == null ? "" : pf.Position.Name, OldPositionLevel = pf.PositionLevel == null ? "" : pf.PositionLevel.Name, OldPositionType = pf.PositionType == null ? "" : pf.PositionType.Name, OldPositionNumber = pf.PosNo == null ? "" : pf.PosNo.Name, OldSalary = pf.Salaries == null || pf.Salaries.Count == 0 ? 0 : pf.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount.Value, NewOc = _organizationCommonRepository.GetOrganizationNameFullPath(p.OrganizationPosition!.Organization!.Id, false, false, "/"), NewPositionName = p.PositionPath == null ? "" : p.PositionPath!.Name, NewPositionLevel = p.PositionLevel == null ? "" : p.PositionLevel.Name, NewPositionType = p.PositionType == null ? "" : p.PositionType.Name, NewPositionNumber = p.PositionNumber == null ? "" : p.PositionNumber.Name, NewSalary = p.Amount == null ? 0 : p.Amount.Value, AppointDate = p.RecruitDate == null ? "" : p.RecruitDate.Value.ToThaiFullDate3() }) .ToList(); return report_data; } catch { throw; } } public async Task> GetCommandType07AttachmentAsync(Guid id) { try { var raw_data = await _dbContext.Set() .Include(c => c.Command) .Where(c => c.Command.Id == id) .ToListAsync(); if (raw_data == null) { throw new Exception(GlobalMessages.CommandNotFound); } var report_data = (from r in raw_data join p in _dbContext.Set() .Include(x => x.OrganizationPosition) .ThenInclude(x => x.Organization) .Include(x => x.PositionPath) .Include(x => x.PositionLevel) .Include(x => x.PositionNumber) .Include(x => x.PositionType) on r.RefPlacementProfileId equals p.Id join pf in _dbContext.Set() .Include(x => x.Position) .Include(x => x.PositionLevel) .Include(x => x.PositionType) .Include(x => x.PosNo) .Include(x => x.Salaries) on r.CitizenId equals pf.CitizenId select new CommandType03Response { CitizenId = r.CitizenId, FullName = $"{r.Prefix}{r.FirstName} {r.LastName}", OldOc = pf.Oc == null ? "" : pf.Oc.Replace("/", " "), OldPositionName = pf.Position == null ? "" : pf.Position.Name, OldPositionLevel = pf.PositionLevel == null ? "" : pf.PositionLevel.Name, OldPositionType = pf.PositionType == null ? "" : pf.PositionType.Name, OldPositionNumber = pf.PosNo == null ? "" : pf.PosNo.Name, OldSalary = pf.Salaries == null || pf.Salaries.Count == 0 ? 0 : pf.Salaries.OrderByDescending(x => x.Order).FirstOrDefault().Amount.Value, NewOc = _organizationCommonRepository.GetOrganizationNameFullPath(p.OrganizationPosition!.Organization!.Id, false, false, "/"), NewPositionName = p.PositionPath == null ? "" : p.PositionPath!.Name, NewPositionLevel = p.PositionLevel == null ? "" : p.PositionLevel.Name, NewPositionType = p.PositionType == null ? "" : p.PositionType.Name, NewPositionNumber = p.PositionNumber == null ? "" : p.PositionNumber.Name, NewSalary = p.Amount == null ? 0 : p.Amount.Value, AppointDate = p.RecruitDate == null ? "" : p.RecruitDate.Value.ToThaiFullDate3() }) .ToList(); return report_data; } catch { throw; } } #endregion } }