diff --git a/Controllers/OrganizationReportController.cs b/Controllers/OrganizationReportController.cs index e7310c4..6c071b2 100644 --- a/Controllers/OrganizationReportController.cs +++ b/Controllers/OrganizationReportController.cs @@ -108,7 +108,7 @@ namespace BMA.EHR.Report.Service.Controllers }); } - var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); + //var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Report", "Organization", $"rptAccount1.trdp"); ReportPackager reportPackager = new ReportPackager(); @@ -118,7 +118,7 @@ namespace BMA.EHR.Report.Service.Controllers report = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream); } - report.DataSource = items; + report.DataSource = result_data; System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); InstanceReportSource instanceReportSource = new InstanceReportSource() @@ -130,7 +130,7 @@ namespace BMA.EHR.Report.Service.Controllers ReportProcessor reportProcessor = new ReportProcessor(_configuration); RenderingResult result = reportProcessor.RenderReport("PDF", instanceReportSource, deviceInfo); - var first_record = items.FirstOrDefault(); + var first_record = result_data.FirstOrDefault(); var content = result.DocumentBytes; return File(content, "application/pdf", $"รายงานบัญชี1_{first_record.RootOcName}_.pdf"); @@ -141,17 +141,18 @@ namespace BMA.EHR.Report.Service.Controllers } } - /// - /// รายงานบัญชี 2 - /// - /// รหัสสำนัก - /// - /// เมื่อแสดงรายงานสำเร็จ - /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง - /// ไม่ได้ Login เข้าระบบ - /// เมื่อเกิดข้อผิดพลาดในการทำงาน - [HttpGet("account2/{id:length(36)}")] + /// + /// รายงานบัญชี 2 + /// + /// รหัสสำนัก + /// + /// เมื่อแสดงรายงานสำเร็จ + /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + + [HttpGet("account2/{id:length(36)}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] @@ -211,7 +212,7 @@ namespace BMA.EHR.Report.Service.Controllers } - var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); + //var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Report", "Organization", $"rptAccount2.trdp"); ReportPackager reportPackager = new ReportPackager(); @@ -221,7 +222,7 @@ namespace BMA.EHR.Report.Service.Controllers report = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream); } - report.DataSource = items; + report.DataSource = result_data; System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); InstanceReportSource instanceReportSource = new InstanceReportSource() @@ -233,7 +234,7 @@ namespace BMA.EHR.Report.Service.Controllers ReportProcessor reportProcessor = new ReportProcessor(_configuration); RenderingResult result = reportProcessor.RenderReport("PDF", instanceReportSource, deviceInfo); - var first_record = items.FirstOrDefault(); + var first_record = result_data.FirstOrDefault(); var content = result.DocumentBytes; return File(content, "application/pdf", $"รายงานบัญชี2_{first_record.RootOcName}_.pdf"); @@ -315,7 +316,7 @@ namespace BMA.EHR.Report.Service.Controllers } - var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); + //var items = result_data.OrderBy(x => x.GovernmentCode).ThenBy(x => x.PositionNumberInt).ToList(); var rptFile = Path.Combine(_hostingEnvironment.ContentRootPath, "Report", "Organization", $"rptAccount3.trdp"); ReportPackager reportPackager = new ReportPackager(); @@ -325,7 +326,7 @@ namespace BMA.EHR.Report.Service.Controllers report = (Telerik.Reporting.Report)reportPackager.UnpackageDocument(sourceStream); } - report.DataSource = items; + report.DataSource = result_data; System.Collections.Hashtable deviceInfo = new System.Collections.Hashtable(); InstanceReportSource instanceReportSource = new InstanceReportSource() @@ -337,7 +338,7 @@ namespace BMA.EHR.Report.Service.Controllers ReportProcessor reportProcessor = new ReportProcessor(_configuration); RenderingResult result = reportProcessor.RenderReport("PDF", instanceReportSource, deviceInfo); - var first_record = items.FirstOrDefault(); + var first_record = result_data.FirstOrDefault(); var content = result.DocumentBytes; return File(content, "application/pdf", $"รายงานบัญชี3_{first_record.RootOcName}_.pdf"); diff --git a/Models/HR/ProfileEducation.cs b/Models/HR/ProfileEducation.cs index cc93425..b2bd96c 100644 --- a/Models/HR/ProfileEducation.cs +++ b/Models/HR/ProfileEducation.cs @@ -40,5 +40,7 @@ namespace BMA.EHR.Profile.Service.Models.HR public virtual List ProfileEducationHistorys { get; set; } = new List(); public virtual Profile? Profile { get; set; } + public virtual Guid? ProfileId { get; set; } + } } diff --git a/Models/MetaData/PositionLevel.cs b/Models/MetaData/PositionLevel.cs index 54ca1a5..e86140a 100644 --- a/Models/MetaData/PositionLevel.cs +++ b/Models/MetaData/PositionLevel.cs @@ -12,7 +12,10 @@ namespace BMA.EHR.MetaData.Service.Models [Required, MaxLength(100), Column(Order = 2), Comment("ชื่อย่อระดับตำแหน่ง")] public string ShortName { get; set; } = string.Empty; - [Column(Order = 3), Comment("สถานะการใช้งาน")] + [Column(Order = 3), Comment("ลำดับชั้นของระดับตำแหน่ง")] + public int Level { get; set; } = 0; + + [Column(Order = 4), Comment("สถานะการใช้งาน")] public bool IsActive { get; set; } = true; } } diff --git a/Report/Organization/rptAccount2.trdp b/Report/Organization/rptAccount2.trdp index fc447cc..072dc4d 100644 Binary files a/Report/Organization/rptAccount2.trdp and b/Report/Organization/rptAccount2.trdp differ diff --git a/Report/Organization/rptAccount3.trdp b/Report/Organization/rptAccount3.trdp index 892875c..ecf9eb3 100644 Binary files a/Report/Organization/rptAccount3.trdp and b/Report/Organization/rptAccount3.trdp differ diff --git a/Services/OrganizationReportService.cs b/Services/OrganizationReportService.cs index ff311f4..4f3401c 100644 --- a/Services/OrganizationReportService.cs +++ b/Services/OrganizationReportService.cs @@ -1,8 +1,10 @@ using Amazon.Internal; +using BMA.EHR.Core; using BMA.EHR.Extensions; using BMA.EHR.Organization.Service.Extensions; using BMA.EHR.Profile.Service.Services; using BMA.EHR.Report.Service.Data; +using Microsoft.CodeAnalysis.CSharp; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage.ValueConversion.Internal; using System.Linq; @@ -10,600 +12,887 @@ using System.Security.Cryptography.X509Certificates; namespace BMA.EHR.Report.Service.Services { - public class OrganizationReportService - { - #region " Fields " + public class OrganizationReportService + { + #region " Fields " - private readonly EHRDbContext _context; - private readonly EHRDbContext _applicationDbContext; - private readonly ProfileService _profileService; + private readonly EHRDbContext _context; + private readonly EHRDbContext _applicationDbContext; + private readonly ProfileService _profileService; - #endregion + #endregion - #region " Constructor and Destructor " + #region " Constructor and Destructor " - public OrganizationReportService(EHRDbContext context, - EHRDbContext applicationDbContext, - ProfileService profileService) - { - _context = context; - _applicationDbContext = applicationDbContext; - _profileService = profileService; - } + public OrganizationReportService(EHRDbContext context, + EHRDbContext applicationDbContext, + ProfileService profileService) + { + _context = context; + _applicationDbContext = applicationDbContext; + _profileService = profileService; + } - #endregion + #endregion - #region " Methods " + #region " Methods " - #region " Report Query " + #region " Private " - public async Task?> GetOrganizationTypes(string type) - { - var Organizations = await _context.Organizations.ToListAsync(); + private string GetShortNameFromPosNo(string posno) + { + if (string.IsNullOrEmpty(posno)) return ""; + var posArray = posno.Split('.'); + var ret = string.Empty; - var OrganizationOrganizations = await _context.OrganizationOrganizations.ToListAsync(); - var OrganizationTypes = await _context.OrganizationTypes.FirstOrDefaultAsync(x => x.Name == type); + for (var i = 0; i < posArray.Length - 1; i++) + { + ret += $"{posArray[i]}."; + } - if (OrganizationTypes == null) - { - throw new Exception("Invalid Organization type."); - } + return ret; + } - var dataType = (from o in Organizations - join os in OrganizationOrganizations on o.OrganizationOrganizationId equals os.Id into os1 - from os in os1.DefaultIfEmpty() - where o.OrganizationTypeId == OrganizationTypes.Id && os != null - orderby o.OrganizationOrder - select new - { - organizationId = o.Id, - organizationName = os.Name - }).ToList(); + private int GetPosnoIntFromPosNo(string posno) + { + if (string.IsNullOrEmpty(posno)) return 999; + var posArray = posno.Split('.'); - return dataType; - } + return Convert.ToInt32(posArray.Last()); + } - public async Task> GetReport1Query(Guid ocId) - { - var ocIdList = _profileService.GetAllIdByRoot(ocId); - var RootOcName = _profileService.GetOrganizationNameFullPath(ocId, false, false); + private Guid GetOcId(Guid shortNameId, Guid nameId) + { + var data = _context.Organizations.AsNoTracking() + .FirstOrDefault(x => x.OrganizationShortNameId == shortNameId && + x.OrganizationOrganizationId == nameId); + if (data == null) return Guid.Empty; + else return data.Id; + } - var organizationPositions = await _context.OrganizationPositions.ToListAsync(); - var positionMasters = await _context.PositionMasters.ToListAsync(); - var organizations = await _context.Organizations.ToListAsync(); - var organizationOrganizations = await _applicationDbContext.OrganizationOrganizations.ToListAsync(); - var organizationShortNames = await _applicationDbContext.OrganizationShortNames.ToListAsync(); - var positionNumbers = await _context.PositionNumbers.ToListAsync(); - var executivePositions = await _applicationDbContext.PositionExecutives.ToListAsync(); - var executivePositionSide = await _applicationDbContext.PositionExecutiveSides.ToListAsync(); - var positionPaths = await _applicationDbContext.PositionPaths.ToListAsync(); - var positionPathSides = await _applicationDbContext.PositionPathSides.ToListAsync(); - var positionTypes = await _applicationDbContext.PositionTypes.ToListAsync(); + private string GetCitizenId(Guid profileId) + { + var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); - var data = (from op in organizationPositions - join pm in positionMasters on op.PositionMasterId equals pm.Id - join oc in organizations on op.OrganizationId equals oc.Id - join oc_n in organizationOrganizations on oc.OrganizationOrganizationId equals oc_n.Id - join sn in organizationShortNames on oc.OrganizationShortNameId equals sn.Id - join pn in positionNumbers on op.PositionNumberId equals pn.Id - join pp in positionPaths on pm.PositionPathId equals pp.Id - join pps in positionPathSides on pm.PositionPathSideId equals pps.Id into pp_pps_join - from pp_pps in pp_pps_join.DefaultIfEmpty() - join ex_p in executivePositions on pm.PositionExecutiveId equals ex_p.Id into pm_exp_join - from pm_exp in pm_exp_join.DefaultIfEmpty() - join ex_p_s in executivePositionSide on pm.PositionExecutiveSideId equals ex_p_s.Id into pm_exp_s_join - from pm_exp_s in pm_exp_s_join.DefaultIfEmpty() - join pt in positionTypes on pm.PositionTypeId equals pt.Id - where ocIdList.Contains((Guid)op.OrganizationId) - select new Account1ResultItem - { - Id = op.Id, - RootOcId = ocId, - RootOcName = RootOcName, - OcId = op.OrganizationId.Value, - OcFullName = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), - OcName = _profileService.GetOrganizationName(op.OrganizationId.Value), - ShortName = sn.Name, - PositionNumber = pn.Name, - PositionLevel = _profileService.GetPositionLevel(pm.Id), - PositionName = $"{pp.Name}\r\n", - PositionSide = pm.PositionPathSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionPathSideObject).GetNameList(), - PositionExecutive = pm_exp == null ? "" : $"{pm_exp.Name}\r\n", - PositionExecutiveSide = pm.PositionExecutiveSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionExecutiveSideObject).GetNameList(), - Remark = op.PositionUserNote, - OcOrder = oc.OrganizationOrder.Value, - PositionType = pt.Name, - IsDirector = pm.IsDirector.Value ? 0 : 1, - GovernmentCode = sn.GovernmentCode == null || sn.GovernmentCode == "" ? sn.AgencyCode : sn.GovernmentCode - }).ToList(); + return data == null ? "" : data.CitizenId; + } - return data; - } + private string GetPrefix(Guid profileId) + { + var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); + if (data == null) return ""; - private string GetShortNameFromPosNo(string posno) - { - if (string.IsNullOrEmpty(posno)) return ""; - var posArray = posno.Split('.'); - var ret = string.Empty; + var prefix = _context.Prefixes.AsNoTracking().FirstOrDefault(x => x.Id == data.PrefixId); - for (var i = 0; i < posArray.Length - 1; i++) - { - ret += $"{posArray[i]}."; - } + return prefix == null ? "" : prefix.Name; + } - return ret; - } + private string GetFirstName(Guid profileId) + { + var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); - private int GetPosnoIntFromPosNo(string posno) - { - if (string.IsNullOrEmpty(posno)) return 999; - var posArray = posno.Split('.'); + return data == null ? "" : data.FirstName; + } - return Convert.ToInt32(posArray.Last()); - } + private string GetLastName(Guid profileId) + { + var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); - private Guid GetOcId(Guid shortNameId, Guid nameId) - { - var data = _context.Organizations.AsNoTracking() - .FirstOrDefault(x => x.OrganizationShortNameId == shortNameId && - x.OrganizationOrganizationId == nameId); - if (data == null) return Guid.Empty; - else return data.Id; - } + return data == null ? "" : data.LastName; + } - private string GetCitizenId(Guid profileId) - { - var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); + private async Task> GetAllIdByRootAsync(Guid id) + { + try + { + var ret = new List(); - return data == null ? "" : data.CitizenId; - } - private string GetPrefix(Guid profileId) - { - var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); - if (data == null) return ""; + var oc = await _context.Organizations.FirstOrDefaultAsync(x => x.Id == id); + if (oc == null) + throw new Exception(GlobalMessages.DataNotFound); + ret.Add(oc.Id); - var prefix = _context.Prefixes.AsNoTracking().FirstOrDefault(x => x.Id == data.PrefixId); + var child = await _context.Organizations.AsQueryable().Where(x => x.ParentId == id).ToListAsync(); + if (child.Any()) + { + foreach (var item in child) + { + ret.AddRange(await GetAllIdByRootAsync(item.Id)); + } + } - return prefix == null ? "" : prefix.Name; - } + return ret; + } + catch + { + throw; + } + } - private string GetFirstName(Guid profileId) - { - var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); + private async Task> GetAllOcItemByRootAsync(Guid id, int level = 1) + { + try + { + var ret = new List(); - return data == null ? "" : data.FirstName; - } + var oc = await _context.Organizations.FirstOrDefaultAsync(x => x.Id == id); + if (oc == null) + throw new Exception(GlobalMessages.DataNotFound); + var thisLevel = (level * 10) + oc.OrganizationOrder.Value; + ret.Add(new OrganizationItem { Id = oc.Id, Order = thisLevel }); - private string GetLastName(Guid profileId) - { - var data = _context.Profiles.AsNoTracking().FirstOrDefault(x => x.Id == profileId); + var child = await _context.Organizations.AsQueryable().Where(x => x.ParentId == id).ToListAsync(); + if (child.Any()) + { + foreach (var item in child) + { + ret.AddRange(await GetAllOcItemByRootAsync(item.Id, thisLevel)); + } + } - return data == null ? "" : data.LastName; - } + return ret; + } + catch + { + throw; + } + } + + private async Task GetOrgIdByOrgPositionId(Guid orgPositionId) + { + var data = await _applicationDbContext.OrganizationPositions.FirstOrDefaultAsync(x => x.Id == orgPositionId); + + return data is null ? Guid.Empty : data.OrganizationId.Value; + } + + #endregion - public async Task> GetReport2Query(Guid ocId) - { - try - { + #region " Report Query " + + public async Task?> GetOrganizationTypes(string type) + { + var Organizations = await _context.Organizations.ToListAsync(); + + var OrganizationOrganizations = await _context.OrganizationOrganizations.ToListAsync(); + var OrganizationTypes = await _context.OrganizationTypes.FirstOrDefaultAsync(x => x.Name == type); + + if (OrganizationTypes == null) + { + throw new Exception("Invalid Organization type."); + } + + var dataType = (from o in Organizations + join os in OrganizationOrganizations on o.OrganizationOrganizationId equals os.Id into os1 + from os in os1.DefaultIfEmpty() + where o.OrganizationTypeId == OrganizationTypes.Id && os != null + orderby o.OrganizationOrder + select new + { + organizationId = o.Id, + organizationName = os.Name + }).ToList(); + + return dataType; + } + + public async Task> GetReport1Query(Guid ocId) + { + var ocIdList = _profileService.GetAllIdByRoot(ocId); + var RootOcName = _profileService.GetOrganizationNameFullPath(ocId, false, false); + + var orgWithOrder = new List(); + orgWithOrder = await GetAllOcItemByRootAsync(ocId); + + var organizationPositions = await _context.OrganizationPositions.ToListAsync(); + var positionMasters = await _context.PositionMasters.ToListAsync(); + var organizations = await _context.Organizations.ToListAsync(); + var organizationOrganizations = await _applicationDbContext.OrganizationOrganizations.ToListAsync(); + var organizationShortNames = await _applicationDbContext.OrganizationShortNames.ToListAsync(); + var positionNumbers = await _context.PositionNumbers.ToListAsync(); + var executivePositions = await _applicationDbContext.PositionExecutives.ToListAsync(); + var executivePositionSide = await _applicationDbContext.PositionExecutiveSides.ToListAsync(); + var positionPaths = await _applicationDbContext.PositionPaths.ToListAsync(); + var positionPathSides = await _applicationDbContext.PositionPathSides.ToListAsync(); + var positionTypes = await _applicationDbContext.PositionTypes.ToListAsync(); + + var data = (from op in organizationPositions + join pm in positionMasters on op.PositionMasterId equals pm.Id + join oc in organizations on op.OrganizationId equals oc.Id + join oc_n in organizationOrganizations on oc.OrganizationOrganizationId equals oc_n.Id + join sn in organizationShortNames on oc.OrganizationShortNameId equals sn.Id + join pn in positionNumbers on op.PositionNumberId equals pn.Id + join pp in positionPaths on pm.PositionPathId equals pp.Id + join pps in positionPathSides on pm.PositionPathSideId equals pps.Id into pp_pps_join + from pp_pps in pp_pps_join.DefaultIfEmpty() + join ex_p in executivePositions on pm.PositionExecutiveId equals ex_p.Id into pm_exp_join + from pm_exp in pm_exp_join.DefaultIfEmpty() + join ex_p_s in executivePositionSide on pm.PositionExecutiveSideId equals ex_p_s.Id into pm_exp_s_join + from pm_exp_s in pm_exp_s_join.DefaultIfEmpty() + join pt in positionTypes on pm.PositionTypeId equals pt.Id + + join orgOrder in orgWithOrder on op.OrganizationId equals orgOrder.Id - var ocIdList = _profileService.GetAllIdByRoot(ocId); - var RootOcName = _profileService.GetOrganizationNameFullPath(ocId, false, false); + where ocIdList.Contains((Guid)op.OrganizationId) + select new Account1ResultItem + { + Id = op.Id, + RootOcId = ocId, + RootOcName = RootOcName, + OcId = op.OrganizationId.Value, + OcFullName = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), + OcName = _profileService.GetOrganizationName(op.OrganizationId.Value), + ShortName = sn.Name, + PositionNumber = pn.Name, + PositionLevel = _profileService.GetPositionLevel(pm.Id), + PositionName = $"{pp.Name}\r\n", + PositionSide = pm.PositionPathSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionPathSideObject).GetNameList(), + PositionExecutive = pm_exp == null ? "" : $"{pm_exp.Name}\r\n", + PositionExecutiveSide = pm.PositionExecutiveSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionExecutiveSideObject).GetNameList(), + Remark = op.PositionUserNote, + OcOrder = orgOrder.Order, + PositionType = pt.Name, + IsDirector = pm.IsDirector.Value ? 0 : 1, + GovernmentCode = sn.GovernmentCode == null || sn.GovernmentCode == "" ? sn.AgencyCode : sn.GovernmentCode + }).ToList() + .OrderBy(x => x.OcOrder).ThenBy(x => GetPosnoIntFromPosNo(x.PositionNumber)) + .ToList(); - var organizationPositions = await _context.OrganizationPositions.ToListAsync(); - var positionMasters = await _context.PositionMasters.ToListAsync(); - var organizations = await _context.Organizations.ToListAsync(); - var organizationOrganizations = await _applicationDbContext.OrganizationOrganizations.ToListAsync(); - var organizationShortNames = await _applicationDbContext.OrganizationShortNames.ToListAsync(); - var positionNumbers = await _context.PositionNumbers.ToListAsync(); - var executivePositions = await _applicationDbContext.PositionExecutives.ToListAsync(); - var executivePositionSide = await _applicationDbContext.PositionExecutiveSides.ToListAsync(); - var positionPaths = await _applicationDbContext.PositionPaths.ToListAsync(); - var positionPathSides = await _applicationDbContext.PositionPathSides.ToListAsync(); - var positionTypes = await _applicationDbContext.PositionTypes.ToListAsync(); - var profilePositions = await _context.ProfilePositions.ToListAsync(); - var prefixes = await _context.Prefixes.ToListAsync(); - var profiles = await _context.Profiles.ToListAsync(); - var report2 = await _context.Report2s.ToListAsync(); + return data; + } - var profile_data = (from p in _context.Profiles - join pf in _context.Prefixes on p.PrefixId equals pf.Id - select new - { - p.Id, - p.CitizenId, - Prefix = pf.Name, - p.FirstName, - p.LastName, - p.PositionLine, - p.Position, - p.PositionPathSide, - p.PositionType, - p.PositionLevel, - p.PositionExecutive, - p.PositionExecutiveSide, - p.PosNo, - p.OrganizationShortName, - Degree = p.Educations == null || p.Educations.Count == 0 ? "" : $"{p.Educations.OrderBy(x => x.StartDate).Last().Degree}\r\n({p.Educations.OrderBy(x => x.StartDate).Last().Field})", - Salary = p.Salaries == null || p.Salaries.Count == 0 ? 0 : p.Salaries.OrderBy(x => x.Date).Last().Amount, - SalaryPosition = p.Salaries == null || p.Salaries.Count == 0 ? 0 : p.Salaries.OrderBy(x => x.Date).Last().PositionSalaryAmount, + public async Task> GetReport2Query(Guid organizationId) + { + var organizations = new List(); + organizations = await GetAllIdByRootAsync(organizationId); - }).ToList(); + var orgWithOrder = new List(); + orgWithOrder = await GetAllOcItemByRootAsync(organizationId); + + var ocIdList = _profileService.GetAllIdByRoot(organizationId); + var RootOcName = _profileService.GetOrganizationNameFullPath(organizationId, false, false); + + var prefixes = await _applicationDbContext.Prefixes.ToListAsync(); + var organizationPositions = await _context.OrganizationPositions.ToListAsync(); + var profilePositions = await _context.ProfilePositions.ToListAsync(); + var positionNumbers = await _context.PositionNumbers.ToListAsync(); + var positionPaths = await _applicationDbContext.PositionPaths.ToListAsync(); + var positionLevels = await _applicationDbContext.PositionLevels.ToListAsync(); + var positionMasters = await _context.PositionMasters.ToListAsync(); + var profiles = await _applicationDbContext.Profiles.ToListAsync(); + var organizationShortNames = await _applicationDbContext.OrganizationShortNames.ToListAsync(); + var report2s = await _context.Report2s.ToListAsync(); + var positionPathSides = await _applicationDbContext.PositionPathSides.ToListAsync(); + var positionExecutiveSides = await _applicationDbContext.PositionExecutiveSides.ToListAsync(); + var positionExecutives = await _applicationDbContext.PositionExecutives.ToListAsync(); + var orgData = await _applicationDbContext.Organizations.ToListAsync(); + var positionTypes = await _applicationDbContext.PositionTypes.ToListAsync(); + + var raw_results = (from op in organizationPositions + where organizations.Contains(op.OrganizationId == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : op.OrganizationId.Value) + join oc in orgData on op?.OrganizationId equals oc?.Id + join pp in profilePositions on op?.Id equals pp?.OrganizationPositionId into ppGroup + from pp in ppGroup.DefaultIfEmpty() + join pn in positionNumbers on op?.PositionNumberId equals pn?.Id into pnGroup + from pn in pnGroup.DefaultIfEmpty() + join os in organizationShortNames on pn?.OrganizationShortNameId equals os?.Id into osGroup + from os in osGroup.DefaultIfEmpty() + join pm in positionMasters on op?.PositionMasterId equals pm?.Id into pmGroup + from pm in pmGroup.DefaultIfEmpty() + join pPath in positionPaths on pm?.PositionPathId equals pPath?.Id into pPathGroup + from pPath in pPathGroup.DefaultIfEmpty() + + join ps in positionPathSides on pm?.PositionPathSideId equals ps?.Id into psGroup + from ps in psGroup.DefaultIfEmpty() + join pe in positionExecutives on pm?.PositionExecutiveId equals pe?.Id into peGroup + from pe in peGroup.DefaultIfEmpty() + join pes in positionExecutiveSides on pm?.PositionExecutiveSideId equals pes?.Id into pesGroup + from pes in pesGroup.DefaultIfEmpty() + + join pt in positionTypes on pm?.PositionTypeId equals pt?.Id into ptGroup + from pt in ptGroup.DefaultIfEmpty() - var report2_raw_data = (from r in _context.Report2s.AsNoTracking().ToList() - //join opos in _context.ProfilePositions.AsNoTracking().ToList() on r.OrganizationPositionId equals opos.OrganizationPositionId into r_opos_join - //from opos_join in r_opos_join.DefaultIfEmpty() + join p in profiles on pp?.ProfileId equals p?.Id into pGroup + from p in pGroup.DefaultIfEmpty() + join pf in prefixes on p?.PrefixId equals pf?.Id into pfGroup + from pf in pfGroup.DefaultIfEmpty() + join rp in report2s on pn?.Id equals rp?.PositionNumId into rpGroup + from rp in rpGroup.DefaultIfEmpty() + join pnNew in positionNumbers on rp == null ? op?.PositionNumberId : rp?.PositionNumId equals pnNew?.Id into pnNewGroup + from pnNew in pnNewGroup.DefaultIfEmpty() + join ppNew in positionPaths on rp == null ? pm?.PositionPathId : rp?.PositionPathId equals ppNew?.Id into ppNewGroup + from ppNew in ppNewGroup.DefaultIfEmpty() + join plNew in positionLevels on rp == null ? p?.PositionLevelId : rp?.PositionLevelId equals plNew?.Id into plNewGroup + from plNew in plNewGroup.DefaultIfEmpty() - join ppos in _context.ProfilePositions.AsNoTracking().ToList() on r.ProfilePositionId equals ppos.Id into r_ppos_join - from ppos_join in r_ppos_join.DefaultIfEmpty() - //join pf in profile_data.ToList() on ppos_join.ProfileId equals pf.Id into r_pf_join - //from pf_join in r_pf_join.DefaultIfEmpty() - select new - { - Id = r.Id, - ProfilePositionId = ppos_join == null ? Guid.Empty : ppos_join.Id, - CitizenId = ppos_join != null ? GetCitizenId(ppos_join.ProfileId.Value) : "", - Prefix = ppos_join != null ? GetPrefix(ppos_join.ProfileId.Value) : "", - FirstName = ppos_join != null ? GetFirstName(ppos_join.ProfileId.Value) : "", - LastName = ppos_join != null ? GetLastName(ppos_join.ProfileId.Value) : "", - // new - OrganizationName = r.OrganizationOrganization, - ShortName = GetShortNameFromPosNo(r.PositionNum), - PositionNumber = r.PositionNum, - PositionNumberInt = GetPosnoIntFromPosNo(r.PositionNum), - PositionPath = r.PositionPath, - PositionPathSide = r.PositionPathSide, - PositionType = r.PositionType, - PositionLevel = r.PositionLevel, - PositionExecutive = r.PositionExecutive, - PositionExecutiveSide = r.PositionExecutiveSide, + join psNew in positionPathSides on rp == null ? pm?.PositionPathSideId : rp?.PositionPathSideId equals psNew?.Id into psNewGroup + from psNew in psNewGroup.DefaultIfEmpty() + join peNew in positionExecutives on rp == null ? pm?.PositionExecutiveId : rp?.PositionExecutiveId equals peNew?.Id into peNewGroup + from peNew in peNewGroup.DefaultIfEmpty() + join pesNew in positionExecutiveSides on rp == null ? pm?.PositionExecutiveSideId : rp?.PositionExecutiveSideId equals pesNew?.Id into pesNewGroup + from pesNew in pesNewGroup.DefaultIfEmpty() - OrganizationPositionId = r.OrganizationPositionId, + join ptNew in positionTypes on rp == null ? pm?.PositionTypeId : rp?.PositionTypeId equals ptNew?.Id into ptNewGroup + from ptNew in ptNewGroup.DefaultIfEmpty() - // old - OcId = GetOcId(r.OrganizationShortNameId.Value, r.OrganizationOrganizationId.Value), - Degree = ppos_join == null ? "" : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().Degree), - Salary = ppos_join == null ? 0 : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().Salary), - SalaryPosition = ppos_join == null ? 0 : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().SalaryPosition), - - ShortNameOld = GetShortNameFromPosNo(r.PositionNumOld), - PositionNumberOld = r.PositionNumOld, - PositionNumberOldInt = GetPosnoIntFromPosNo(r.PositionNumOld), - GovCode = r.GovernmentCodeOld, - GovCodeNew = r.GovernmentCode, - PositionName = r.PositionPath, - PositionNameOld = r.PositionPathOld, + join orgOrder in orgWithOrder on op.OrganizationId equals orgOrder.Id - PositionPathOld = r.PositionPathOld, - PositionPathSideOld = r.PositionPathSideOld, - PositionTypeOld = r.PositionTypeOld, - PositionLevelOld = r.PositionLevelOld, - PositionExecutiveOld = r.PositionExecutiveOld, - PositionExecutiveSideOld = r.PositionExecutiveSideOld, - }).ToList(); + select new + { + ProfilePositionId = pp == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : pp.Id, + ProfileId = p == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : p.Id, + Prefix = pf == null ? null : pf.Name, + FirstName = p == null ? null : p.FirstName, + LastName = p == null ? null : p.LastName, + PositionNumberOld = rp == null ? (pn == null ? null : pn.Name) : rp.PositionNumOld, + PositionPathOld = rp == null ? (pPath == null ? null : pPath.Name) : rp.PositionPathOld, + PositionLevelOld = rp == null ? (p == null ? null : p.PositionLevel) : rp.PositionLevelOld, + PositionNumberIdNew = pnNew == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : pnNew.Id, + PositionNumberNew = pnNew == null ? null : pnNew.Name, + PositionPathNew = ppNew == null ? null : ppNew.Name, + PositionLevelNew = plNew == null ? null : plNew.Name, + PositionMasterId = pm == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : pm.Id, + Qualification = pm == null ? null : pm.Qualification, + OrganizationShortName = os == null ? null : os.Name, + Change = rp == null ? null : (rp == null ? null : rp.Status), + StatusPosition = p == null ? false : true, + Report2 = rp, + ocId = op.OrganizationId, + ocIdNew = rp == null ? op.OrganizationId : GetOrgIdByOrgPositionId(rp.OrganizationPositionId.Value).Result, + PositionPathSideOld = rp == null ? (ps == null ? null : ps.Name) : rp.PositionPathSideOld, + PositionPathSideNew = psNew == null ? null : psNew.Name, + PositionExecutiveOld = rp == null ? (pe == null ? null : pe.Name) : rp.PositionExecutiveOld, + PositionExecutiveNew = peNew == null ? null : peNew.Name, + PositionExecutiveSideOld = rp == null ? (pes == null ? null : pes.Name) : rp.PositionExecutiveSideOld, + PositionExecutiveSideNew = pesNew == null ? null : pesNew.Name, + Remark = op.PositionUserNote ?? "", + OcOrder = orgOrder.Order, + PositonTypeOld = rp == null ? (pt == null ? null : pt.Name) : rp.PositionTypeOld, + PositionTypeNew = ptNew == null ? null : ptNew.Name, + + }) + .ToList() + .OrderBy(x => x.OcOrder).ThenBy(x => GetPosnoIntFromPosNo(x.PositionNumberOld)) + .ToList(); + + var results = new List(); + + var PositionLevels = await _applicationDbContext.PositionLevels + .ToListAsync(); + + foreach (var r in raw_results.ToList()) + { + var salaryRecord = _applicationDbContext.ProfileSalaries.AsQueryable() + .Include(p => p.Profile) + .OrderByDescending(x => x.Date) + .FirstOrDefault(x => x.Profile.Id == r.ProfileId); + + var lastEducation = _applicationDbContext.ProfileEducations.AsQueryable() + .Include(p => p.Profile) + .OrderByDescending(x => x.FinishDate) + .FirstOrDefault(x => x.Profile.Id == r.ProfileId); + //.FirstOrDefault(x => x.ProfileId == r.ProfileId); + + var allLevel = await _applicationDbContext.AvailablePositionLevels.ToListAsync(); + + var data = new Account2ResultItem + { + Id = r.Report2 == null ? Guid.Parse("00000000-0000-0000-0000-000000000000") : r.Report2.Id, + RootOcId = organizationId, + RootOcName = RootOcName, + OcId = r.ocId.Value, + OcFullName = _profileService.FindOCFullPathWithNewLine(r.ocId.Value, false, suppress: RootOcName), + OcName = _profileService.GetOrganizationName(r.ocId.Value), + + ShortName = GetShortNameFromPosNo(r.PositionNumberOld), + PositionNumber = r.PositionNumberOld, + PositionLevel = r.PositionLevelOld, + PositionName = r.PositionPathOld, + PositionSide = r.PositionPathSideOld, + PositionExecutive = r.PositionExecutiveOld, + PositionExecutiveSide = r.PositionExecutiveSideOld, + Remark = r.Remark, + PositionType = r.PositonTypeOld, + + OcIdNew = r.ocIdNew.Value, + OcFullNameNew = _profileService.FindOCFullPathWithNewLine(r.ocIdNew.Value, false, suppress: RootOcName), + OcNameNew = _profileService.GetOrganizationName(r.ocIdNew.Value), + + ShortNameNew = GetShortNameFromPosNo(r.PositionNumberNew), + + PositionNumberNew = r.PositionNumberNew, + PositionLevelNew = r.PositionLevelNew, + PositionNameNew = r.PositionPathNew, + PositionSideNew = r.PositionPathSideNew, + PositionExecutiveNew = r.PositionExecutiveNew, + PositionExecutiveSideNew = r.PositionExecutiveSideNew, + PositionTypeNew = r.PositionTypeNew, + + Prefix = r.Prefix, + FirstName = r.FirstName, + LastName = r.LastName, + Degree = lastEducation == null ? r.Qualification : lastEducation.Degree, + + Salary = salaryRecord == null || salaryRecord.Amount == null ? 0 : (int)salaryRecord.Amount!.Value, + SalaryPosition = salaryRecord == null || salaryRecord.PositionSalaryAmount == null ? 0 : (int)salaryRecord.PositionSalaryAmount!.Value, + OcOrder = r.OcOrder + }; + results.Add(data); + } + // results = results.Sort() + return results; + } + + public async Task> GetReport2QueryOld(Guid ocId) + { + try + { - //var report2_data = (from org_pos in _context.OrganizationPositions.ToList() - // join ppos in _context.ProfilePositions.ToList() on org_pos.Id equals ppos.OrganizationPositionId - // join pf in profile_data.ToList() on ppos.ProfileId equals pf.Id - // join r_raw in _context.Report2s.ToList() on ppos.Id equals r_raw.ProfilePositionId into r_join - // from r in r_join.DefaultIfEmpty() - // select new - // { - // //Report2Id = r.Id, - // ProfilePositionId = ppos.Id, - // CitizenId = pf.CitizenId, - // Prefix = pf.Prefix, - // FirstName = pf.FirstName, - // LastName = pf.LastName, - // OrganizationName = r == null ? "" : r.OrganizationOrganization, - // ShortName = r == null ? pf.OrganizationShortName : GetShortNameFromPosNo(r.PositionNum), - // PositionNumber = r == null ? pf.PosNo : r.PositionNum, - // PositionNumberInt = r == null ? GetPosnoIntFromPosNo(pf.PosNo) : GetPosnoIntFromPosNo(r.PositionNum), - // PositionPath = r == null ? pf.Position : r.PositionPath, - // PositionPathSide = r == null ? pf.PositionPathSide : r.PositionPathSide, - // PositionType = r == null ? pf.PositionType : r.PositionType, - // PositionLevel = r == null ? pf.PositionLevel : r.PositionLevel, - // PositionExecutive = r == null ? pf.PositionExecutive : r.PositionExecutive, - // PositionExecutiveSide = r == null ? pf.PositionExecutiveSide : r.PositionExecutiveSide, - // OcId = org_pos.Id, - // OrganizationPositionId = ppos.OrganizationPositionId, - // Degree = pf.Degree, - // Salary = pf.Salary, - // SalaryPosition = pf.SalaryPosition, + var ocIdList = _profileService.GetAllIdByRoot(ocId); + var RootOcName = _profileService.GetOrganizationNameFullPath(ocId, false, false); - // ShortNameOld = r == null ? pf.OrganizationShortName : GetShortNameFromPosNo(r.PositionNumOld), - // PositionNumberOld = r == null ? pf.PosNo : r.PositionNumOld, - // PositionNumberOldInt = r == null ? GetPosnoIntFromPosNo(pf.PosNo) : GetPosnoIntFromPosNo(r.PositionNumOld), + var organizationPositions = await _context.OrganizationPositions.ToListAsync(); + var positionMasters = await _context.PositionMasters.ToListAsync(); + var organizations = await _context.Organizations.ToListAsync(); + var organizationOrganizations = await _applicationDbContext.OrganizationOrganizations.ToListAsync(); + var organizationShortNames = await _applicationDbContext.OrganizationShortNames.ToListAsync(); + var positionNumbers = await _context.PositionNumbers.ToListAsync(); + var executivePositions = await _applicationDbContext.PositionExecutives.ToListAsync(); + var executivePositionSide = await _applicationDbContext.PositionExecutiveSides.ToListAsync(); + var positionPaths = await _applicationDbContext.PositionPaths.ToListAsync(); + var positionPathSides = await _applicationDbContext.PositionPathSides.ToListAsync(); + var positionTypes = await _applicationDbContext.PositionTypes.ToListAsync(); + var profilePositions = await _context.ProfilePositions.ToListAsync(); + var prefixes = await _context.Prefixes.ToListAsync(); + var profiles = await _context.Profiles.ToListAsync(); + var report2 = await _context.Report2s.ToListAsync(); - // }).ToList(); - - //var report2_data = (from r in _context.Report2s.ToList() - // join ppos in _context.ProfilePositions.ToList() on r.ProfilePositionId equals ppos.Id - // join org_pos in _context.OrganizationPositions.ToList() on ppos.OrganizationPositionId equals org_pos.Id - // join pf in profile_data.ToList() on ppos.ProfileId equals pf.Id - // select new - // { - // Id = r.Id, - // ProfilePositionId = r.ProfilePositionId, - // CitizenId = pf.CitizenId, - // Prefix = pf.Prefix, - // FirstName = pf.FirstName, - // LastName = pf.LastName, - // OrganizationName = r.OrganizationOrganization, - // ShortName = r.OrganizationShortName, - // PositionNumber = r.PositionNum, - // PositionPath = r.PositionPath, - // PositionPathSide = r.PositionPathSide, - // PositionType = r.PositionType, - // PositionLevel = r.PositionLevel, - // PositionExecutive = r.PositionExecutive, - // PositionExecutiveSide = r.PositionExecutiveSide, - // OcId = org_pos.Id, - // OrganizationPositionId = ppos.OrganizationPositionId, - // Degree = pf.Degree, - // Salary = pf.Salary, - // SalaryPosition = pf.SalaryPosition, - // }).ToList(); + var profile_data = (from p in profiles + join pf in prefixes on p.PrefixId equals pf.Id + join ps in profilePositions on p.Id equals ps.ProfileId + select new + { + p.Id, + p.CitizenId, + Prefix = pf.Name, + p.FirstName, + p.LastName, + p.PositionLine, + p.Position, + p.PositionPathSide, + p.PositionType, + p.PositionLevel, + p.PositionExecutive, + p.PositionExecutiveSide, + p.PosNo, + p.OrganizationShortName, + Degree = p.Educations == null || p.Educations.Count == 0 ? "" : $"{p.Educations.OrderBy(x => x.StartDate).Last().Degree}\r\n({p.Educations.OrderBy(x => x.StartDate).Last().Field})", + Salary = p.Salaries == null || p.Salaries.Count == 0 ? 0 : p.Salaries.OrderBy(x => x.Date).Last().Amount, + SalaryPosition = p.Salaries == null || p.Salaries.Count == 0 ? 0 : p.Salaries.OrderBy(x => x.Date).Last().PositionSalaryAmount, + OrganizationPositionId = ps.OrganizationPositionId + }).ToList(); - //var data2 = (from r in report2_raw_data - // where ocIdList.Contains(r.OcId) - // select new Account2ResultItem - // { - // Id = r.Id, - // RootOcId = ocId, - // RootOcName = RootOcName, - // GovernmentCode = r.GovCode, - // OcId = r.OcId, - // OcFullName = _profileService.FindOCFullPathWithNewLine(r.OcId, false, suppress: RootOcName), - // OcName = _profileService.GetOrganizationName(r.OcId), - // ShortName = r.ShortNameOld, - // PositionNumber = r.PositionNumberOld, - // PositionLevel = r.PositionLevelOld, - // PositionName = $"{r.PositionNameOld}\r\n", - // PositionSide = r.PositionPathSideOld, - // PositionExecutive = r.PositionExecutiveOld, - // PositionExecutiveSide = r.PositionExecutiveSideOld, - // Remark = "", - // PositionType = r.PositionTypeOld, - // OcIdNew = r.OcId, - // OcFullNameNew = _profileService.FindOCFullPathWithNewLine(r.OcId, false, suppress: RootOcName), - // OcNameNew = _profileService.GetOrganizationName(r.OcId), - // ShortNameNew = r.ShortName, - // PositionNumberNew = r.PositionNumber, - // PositionLevelNew = r.PositionLevel, - // PositionNameNew = $"{r.PositionName}\r\n", - // PositionSideNew = r.PositionPathSide, - // PositionExecutiveNew = r.PositionExecutive, - // PositionExecutiveSideNew = r.PositionExecutiveSide, - // PositionTypeNew = r.PositionType, + //var report2_raw_data = (from r in _context.Report2s.AsNoTracking().ToList() + // //join opos in _context.ProfilePositions.AsNoTracking().ToList() on r.OrganizationPositionId equals opos.OrganizationPositionId into r_opos_join + // //from opos_join in r_opos_join.DefaultIfEmpty() + + // join ppos in _context.ProfilePositions.AsNoTracking().ToList() on r.ProfilePositionId equals ppos.Id into r_ppos_join + // from ppos_join in r_ppos_join.DefaultIfEmpty() + // //join pf in profile_data.ToList() on ppos_join.ProfileId equals pf.Id into r_pf_join + // //from pf_join in r_pf_join.DefaultIfEmpty() + // select new + // { + // Id = r.Id, + // ProfilePositionId = ppos_join == null ? Guid.Empty : ppos_join.Id, + // CitizenId = ppos_join != null ? GetCitizenId(ppos_join.ProfileId.Value) : "", + // Prefix = ppos_join != null ? GetPrefix(ppos_join.ProfileId.Value) : "", + // FirstName = ppos_join != null ? GetFirstName(ppos_join.ProfileId.Value) : "", + // LastName = ppos_join != null ? GetLastName(ppos_join.ProfileId.Value) : "", + // // new + // OrganizationName = r.OrganizationOrganization, + // ShortName = GetShortNameFromPosNo(r.PositionNum), + // PositionNumber = r.PositionNum, + // PositionNumberInt = GetPosnoIntFromPosNo(r.PositionNum), + // PositionPath = r.PositionPath, + // PositionPathSide = r.PositionPathSide, + // PositionType = r.PositionType, + // PositionLevel = r.PositionLevel, + // PositionExecutive = r.PositionExecutive, + // PositionExecutiveSide = r.PositionExecutiveSide, + + // OrganizationPositionId = r.OrganizationPositionId, + + // // old + // OcId = GetOcId(r.OrganizationShortNameId.Value, r.OrganizationOrganizationId.Value), + // Degree = ppos_join == null ? "" : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().Degree), + // Salary = ppos_join == null ? 0 : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().Salary), + // SalaryPosition = ppos_join == null ? 0 : (profile_data.Where(x => x.Id == ppos_join.ProfileId).FirstOrDefault().SalaryPosition), + + // ShortNameOld = GetShortNameFromPosNo(r.PositionNumOld), + // PositionNumberOld = r.PositionNumOld, + // PositionNumberOldInt = GetPosnoIntFromPosNo(r.PositionNumOld), + // GovCode = r.GovernmentCodeOld, + // GovCodeNew = r.GovernmentCode, + // PositionName = r.PositionPath, + // PositionNameOld = r.PositionPathOld, - // PositionNumberInt = r.PositionNumberOldInt, - // PositionNumberIntNew = r.PositionNumberInt, + // PositionPathOld = r.PositionPathOld, + // PositionPathSideOld = r.PositionPathSideOld, + // PositionTypeOld = r.PositionTypeOld, + // PositionLevelOld = r.PositionLevelOld, + // PositionExecutiveOld = r.PositionExecutiveOld, + // PositionExecutiveSideOld = r.PositionExecutiveSideOld, + // }).ToList(); - // Prefix = r.Prefix, - // FirstName = r.FirstName, - // LastName = r.LastName, - // Degree = r.Degree, + var report2_data = (from org_pos in _context.OrganizationPositions.ToList() + join ppos in _context.ProfilePositions.ToList() on org_pos.Id equals ppos.OrganizationPositionId + join pf in profile_data.ToList() on ppos.ProfileId equals pf.Id + join r_raw in _context.Report2s.ToList() on ppos.OrganizationPositionId equals r_raw.OrganizationPositionId into r_join + from r in r_join.DefaultIfEmpty() + select new + { + //Report2Id = r.Id, + ProfilePositionId = ppos.Id, + CitizenId = pf.CitizenId, + Prefix = pf.Prefix, + FirstName = pf.FirstName, + LastName = pf.LastName, + OrganizationName = r == null ? "" : r.OrganizationOrganization, + ShortName = r == null ? pf.OrganizationShortName : GetShortNameFromPosNo(r.PositionNum), + PositionNumber = r == null ? pf.PosNo : r.PositionNum, + PositionNumberInt = r == null ? GetPosnoIntFromPosNo(pf.PosNo) : GetPosnoIntFromPosNo(r.PositionNum), + PositionPath = r == null ? pf.Position : r.PositionPath, + PositionPathSide = r == null ? pf.PositionPathSide : r.PositionPathSide, + PositionType = r == null ? pf.PositionType : r.PositionType, + PositionLevel = r == null ? pf.PositionLevel : r.PositionLevel, + PositionExecutive = r == null ? pf.PositionExecutive : r.PositionExecutive, + PositionExecutiveSide = r == null ? pf.PositionExecutiveSide : r.PositionExecutiveSide, + OcId = org_pos.OrganizationId.Value, + OrganizationPositionId = ppos.OrganizationPositionId, + Degree = pf.Degree, + Salary = pf.Salary, + SalaryPosition = pf.SalaryPosition, - // Salary = Convert.ToInt32(r.Salary), - // SalaryPosition = Convert.ToInt32(r.SalaryPosition) + ShortNameOld = r == null ? pf.OrganizationShortName : GetShortNameFromPosNo(r.PositionNumOld), + PositionNumberOld = r == null ? pf.PosNo : r.PositionNumOld, + PositionNumberOldInt = r == null ? GetPosnoIntFromPosNo(pf.PosNo) : GetPosnoIntFromPosNo(r.PositionNumOld), + PositionNameOld = r == null ? pf.PosNo : r.PositionPathOld, + }).ToList(); - // }).ToList(); + //var report2_data = (from r in _context.Report2s.ToList() + // join ppos in _context.ProfilePositions.ToList() on r.OrganizationPositionId equals ppos.OrganizationPositionId + // join org_pos in _context.OrganizationPositions.ToList() on ppos.OrganizationPositionId equals org_pos.Id + // join pf_raw in profile_data.ToList() on r.OrganizationPositionId equals pf_raw.OrganizationPositionId into pf1 + // from pf in pf1.DefaultIfEmpty() - var data = (from op in organizationPositions - join pm in positionMasters on op.PositionMasterId equals pm.Id - join oc in organizations on op.OrganizationId equals oc.Id - join oc_n in organizationOrganizations on oc.OrganizationOrganizationId equals oc_n.Id - join sn in organizationShortNames on oc.OrganizationShortNameId equals sn.Id - join pn in positionNumbers on op.PositionNumberId equals pn.Id - join pp in positionPaths on pm.PositionPathId equals pp.Id - join pps in positionPathSides on pm.PositionPathSideId equals pps.Id into pp_pps_join - from pp_pps in pp_pps_join.DefaultIfEmpty() - join ex_p in executivePositions on pm.PositionExecutiveId equals ex_p.Id into pm_exp_join - from pm_exp in pm_exp_join.DefaultIfEmpty() - join ex_p_s in executivePositionSide on pm.PositionExecutiveSideId equals ex_p_s.Id into pm_exp_s_join - from pm_exp_s in pm_exp_s_join.DefaultIfEmpty() - join pt in positionTypes on pm.PositionTypeId equals pt.Id - join rp2 in report2_raw_data.ToList() on op.Id equals rp2.OrganizationPositionId into rp2_join - from rp2_dt in rp2_join.DefaultIfEmpty() + // select new + // { + // Id = r.Id, + // ProfilePositionId = r.ProfilePositionId, + // CitizenId = pf is null ? GetCitizenId(ppos.ProfileId.Value) : pf.CitizenId, + // Prefix = pf is null ? GetPrefix(ppos.ProfileId.Value) : pf.Prefix, + // FirstName = pf is null ? GetFirstName(ppos.ProfileId.Value) : pf.FirstName, + // LastName = pf is null ? GetLastName(ppos.ProfileId.Value) : pf.LastName, + // OrganizationName = r.OrganizationOrganization, + // ShortName = r.OrganizationShortName, + // PositionNumber = r.PositionNum, + // PositionNumberInt = GetPosnoIntFromPosNo(r.PositionNum), + // PositionPath = r.PositionPath, + // PositionPathSide = r.PositionPathSide, + // PositionType = r.PositionType, + // PositionLevel = r.PositionLevel, + // PositionExecutive = r.PositionExecutive, + // PositionExecutiveSide = r.PositionExecutiveSide, + // OcId = org_pos.OrganizationId.Value, + // OrganizationPositionId = r.OrganizationPositionId, + // Degree = pf.Degree, + // Salary = pf.Salary, + // SalaryPosition = pf.SalaryPosition, - where ocIdList.Contains((Guid)op.OrganizationId) - select new Account2ResultItem - { - Id = op.Id, - RootOcId = ocId, - RootOcName = RootOcName, - OcId = op.OrganizationId.Value, - OcFullName = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), - OcName = _profileService.GetOrganizationName(op.OrganizationId.Value), - ShortName = rp2_dt == null ? sn.Name : rp2_dt.ShortNameOld, - - PositionNumber = rp2_dt == null ? pn.Name : rp2_dt.PositionNumberOld, + // ShortNameOld = GetShortNameFromPosNo(r.PositionNumOld), + // PositionNumberOld = r.PositionNumOld, + // PositionNumberOldInt = GetPosnoIntFromPosNo(r.PositionNumOld), + // PositionNameOld = r.PositionPathOld, + // }).ToList(); + + + //var data2 = (from r in report2_raw_data + // where ocIdList.Contains(r.OcId) + // select new Account2ResultItem + // { + // Id = r.Id, + // RootOcId = ocId, + // RootOcName = RootOcName, + // GovernmentCode = r.GovCode, + // OcId = r.OcId, + // OcFullName = _profileService.FindOCFullPathWithNewLine(r.OcId, false, suppress: RootOcName), + // OcName = _profileService.GetOrganizationName(r.OcId), + // ShortName = r.ShortNameOld, + // PositionNumber = r.PositionNumberOld, + // PositionLevel = r.PositionLevelOld, + // PositionName = $"{r.PositionNameOld}\r\n", + // PositionSide = r.PositionPathSideOld, + // PositionExecutive = r.PositionExecutiveOld, + // PositionExecutiveSide = r.PositionExecutiveSideOld, + // Remark = "", + // PositionType = r.PositionTypeOld, + // OcIdNew = r.OcId, + // OcFullNameNew = _profileService.FindOCFullPathWithNewLine(r.OcId, false, suppress: RootOcName), + // OcNameNew = _profileService.GetOrganizationName(r.OcId), + // ShortNameNew = r.ShortName, + // PositionNumberNew = r.PositionNumber, + // PositionLevelNew = r.PositionLevel, + // PositionNameNew = $"{r.PositionName}\r\n", + // PositionSideNew = r.PositionPathSide, + // PositionExecutiveNew = r.PositionExecutive, + // PositionExecutiveSideNew = r.PositionExecutiveSide, + // PositionTypeNew = r.PositionType, + + + // PositionNumberInt = r.PositionNumberOldInt, + // PositionNumberIntNew = r.PositionNumberInt, + + + // Prefix = r.Prefix, + // FirstName = r.FirstName, + // LastName = r.LastName, + // Degree = r.Degree, + + // Salary = Convert.ToInt32(r.Salary), + // SalaryPosition = Convert.ToInt32(r.SalaryPosition) + + // }).ToList(); + + var data2 = (from op in organizationPositions + join rp2 in report2_data.ToList() on op.Id equals rp2.OrganizationPositionId into rp2_join + from rp2_dt in rp2_join.DefaultIfEmpty() + where ocIdList.Contains((Guid)op.OrganizationId) + select new + { + ShortNameNew = rp2_dt == null ? "" : rp2_dt.ShortName, + PositionNumberNew = rp2_dt == null ? "" : rp2_dt.PositionNumber, + Prefix = rp2_dt == null ? "" : rp2_dt.Prefix, + FirstName = rp2_dt == null ? "" : rp2_dt.FirstName, + LastName = rp2_dt == null ? "" : rp2_dt.LastName, + } + ).ToList(); + + + var data = (from op in organizationPositions + join pm in positionMasters on op.PositionMasterId equals pm.Id + join oc in organizations on op.OrganizationId equals oc.Id + join oc_n in organizationOrganizations on oc.OrganizationOrganizationId equals oc_n.Id + join sn in organizationShortNames on oc.OrganizationShortNameId equals sn.Id + join pn in positionNumbers on op.PositionNumberId equals pn.Id + join pp in positionPaths on pm.PositionPathId equals pp.Id + join pps in positionPathSides on pm.PositionPathSideId equals pps.Id into pp_pps_join + from pp_pps in pp_pps_join.DefaultIfEmpty() + join ex_p in executivePositions on pm.PositionExecutiveId equals ex_p.Id into pm_exp_join + from pm_exp in pm_exp_join.DefaultIfEmpty() + join ex_p_s in executivePositionSide on pm.PositionExecutiveSideId equals ex_p_s.Id into pm_exp_s_join + from pm_exp_s in pm_exp_s_join.DefaultIfEmpty() + join pt in positionTypes on pm.PositionTypeId equals pt.Id + join rp2 in report2_data.ToList() on op.Id equals rp2.OrganizationPositionId into rp2_join + from rp2_dt in rp2_join.DefaultIfEmpty() + + where ocIdList.Contains((Guid)op.OrganizationId) + select new Account2ResultItem + { + Id = op.Id, + RootOcId = ocId, + RootOcName = RootOcName, + OcId = op.OrganizationId.Value, + OcFullName = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), + OcName = _profileService.GetOrganizationName(op.OrganizationId.Value), + ShortName = rp2_dt == null ? sn.Name : rp2_dt.ShortNameOld, + + PositionNumber = rp2_dt == null ? pn.Name : rp2_dt.PositionNumberOld, PositionLevel = rp2_dt == null ? _profileService.GetPositionLevel(pm.Id) : rp2_dt.PositionLevel, - PositionName = rp2_dt == null ? $"{pp.Name}\r\n" : $"{ rp2_dt.PositionNameOld }\r\n", - PositionSide = pm.PositionPathSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionPathSideObject).GetNameList(), - PositionExecutive = pm_exp == null ? "" : $"{pm_exp.Name}\r\n", - PositionExecutiveSide = pm.PositionExecutiveSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionExecutiveSideObject).GetNameList(), - Remark = op.PositionUserNote, - OcOrder = oc.OrganizationOrder.Value, - PositionType = pt.Name, + PositionName = rp2_dt == null ? $"{pp.Name}\r\n" : $"{rp2_dt.PositionNameOld}\r\n", + PositionSide = pm.PositionPathSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionPathSideObject).GetNameList(), + PositionExecutive = pm_exp == null ? "" : $"{pm_exp.Name}\r\n", + PositionExecutiveSide = pm.PositionExecutiveSideObject is null ? "" : Newtonsoft.Json.JsonConvert.DeserializeObject>(pm.PositionExecutiveSideObject).GetNameList(), + Remark = op.PositionUserNote, + OcOrder = oc.OrganizationOrder.Value, + PositionType = pt.Name, - OcIdNew = rp2_dt == null ? op.OrganizationId.Value : rp2_dt.OcId, - OcFullNameNew = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), - OcNameNew = rp2_dt == null ? _profileService.GetOrganizationName(op.OrganizationId.Value) : _profileService.GetOrganizationName(rp2_dt.OcId), - ShortNameNew = rp2_dt == null ? "" : rp2_dt.ShortName, - PositionNumberNew = rp2_dt == null ? "" : rp2_dt.PositionNumber, - PositionLevelNew = rp2_dt == null ? "" : rp2_dt.PositionLevel, - PositionNameNew = rp2_dt == null ? "" : rp2_dt.PositionPath, - PositionSideNew = rp2_dt == null ? "" : rp2_dt.PositionPathSide, - PositionExecutiveNew = rp2_dt == null ? "" : rp2_dt.PositionExecutive, - PositionExecutiveSideNew = rp2_dt == null ? "" : rp2_dt.PositionExecutiveSide, - PositionTypeNew = rp2_dt == null ? "" : rp2_dt.PositionType, + OcIdNew = rp2_dt == null ? op.OrganizationId.Value : rp2_dt.OcId, + OcFullNameNew = _profileService.FindOCFullPathWithNewLine(op.OrganizationId.Value, false, suppress: RootOcName), + OcNameNew = rp2_dt == null ? _profileService.GetOrganizationName(op.OrganizationId.Value) : _profileService.GetOrganizationName(rp2_dt.OcId), - Prefix = rp2_dt == null ? "" : rp2_dt.Prefix, - FirstName = rp2_dt == null ? "" : rp2_dt.FirstName, - LastName = rp2_dt == null ? "" : rp2_dt.LastName, - Degree = rp2_dt == null ? (pm == null ? "" : pm.Qualification) : rp2_dt.Degree, + ShortNameNew = rp2_dt == null ? "" : rp2_dt.ShortName, + PositionNumberNew = rp2_dt == null ? "" : rp2_dt.PositionNumber, + PositionLevelNew = rp2_dt == null ? "" : rp2_dt.PositionLevel, + PositionNameNew = rp2_dt == null ? "" : rp2_dt.PositionPath, + PositionSideNew = rp2_dt == null ? "" : rp2_dt.PositionPathSide, + PositionExecutiveNew = rp2_dt == null ? "" : rp2_dt.PositionExecutive, + PositionExecutiveSideNew = rp2_dt == null ? "" : rp2_dt.PositionExecutiveSide, + PositionTypeNew = rp2_dt == null ? "" : rp2_dt.PositionType, - Salary = rp2_dt == null ? 0 : (int)rp2_dt.Salary.Value, - SalaryPosition = rp2_dt == null ? 0 : (int)rp2_dt.SalaryPosition.Value, + Prefix = rp2_dt == null ? "" : rp2_dt.Prefix, + FirstName = rp2_dt == null ? "" : rp2_dt.FirstName, + LastName = rp2_dt == null ? "" : rp2_dt.LastName, + Degree = rp2_dt == null ? (pm == null ? "" : pm.Qualification!) : rp2_dt.Degree, + Salary = rp2_dt == null || rp2_dt.Salary == null ? 0 : (int)rp2_dt.Salary!.Value, + SalaryPosition = rp2_dt == null || rp2_dt.SalaryPosition == null ? 0 : (int)rp2_dt.SalaryPosition!.Value, - }).ToList(); - return data; - } - catch - { - throw; - } - } + }).ToList(); - #endregion + return data; + } + catch + { + throw; + } + } - #endregion - } + #endregion - public class Account1ResultItem - { - public Guid Id { get; set; } + #endregion + } - public Guid RootOcId { get; set; } + public class Account1ResultItem + { + public Guid Id { get; set; } - public string RootOcName { get; set; } = string.Empty; + public Guid RootOcId { get; set; } - public Guid OcId { get; set; } + public string RootOcName { get; set; } = string.Empty; - public string OcFullName { get; set; } = string.Empty; + public Guid OcId { get; set; } - public string OcName { get; set; } = string.Empty; + public string OcFullName { get; set; } = string.Empty; - public string ShortName { get; set; } = string.Empty; + public string OcName { get; set; } = string.Empty; - public string PositionNumber { get; set; } = string.Empty; + public string ShortName { get; set; } = string.Empty; - public string PositionName { get; set; } = string.Empty; + public string PositionNumber { get; set; } = string.Empty; - public string PositionSide { get; set; } = string.Empty; + public string PositionName { get; set; } = string.Empty; - public string PositionLevel { get; set; } = string.Empty; + public string PositionSide { get; set; } = string.Empty; - public string PositionExecutive { get; set; } = string.Empty; + public string PositionLevel { get; set; } = string.Empty; - public string PositionExecutiveSide { get; set; } = string.Empty; + public string PositionExecutive { get; set; } = string.Empty; - public string Remark { get; set; } = string.Empty; + public string PositionExecutiveSide { get; set; } = string.Empty; - public int OcOrder { get; set; } = 0; + public string Remark { get; set; } = string.Empty; - public int PositionNumberInt { get; set; } = 0; + public int OcOrder { get; set; } = 0; - public string PositionType { get; set; } = string.Empty; + public int PositionNumberInt { get; set; } = 0; - public int IsDirector { get; set; } = 0; + public string PositionType { get; set; } = string.Empty; - public string GovernmentCode { get; set; } = string.Empty; - } + public int IsDirector { get; set; } = 0; - public class Account2ResultItem - { - public Guid Id { get; set; } + public string GovernmentCode { get; set; } = string.Empty; + } - public Guid RootOcId { get; set; } + public class Account2ResultItem + { + public Guid Id { get; set; } - public string RootOcName { get; set; } = string.Empty; + public Guid RootOcId { get; set; } - public Guid OcId { get; set; } + public string RootOcName { get; set; } = string.Empty; - public string OcFullName { get; set; } = string.Empty; + public Guid OcId { get; set; } - public string OcName { get; set; } = string.Empty; + public string OcFullName { get; set; } = string.Empty; - public string ShortName { get; set; } = string.Empty; + public string OcName { get; set; } = string.Empty; - public string PositionNumber { get; set; } = string.Empty; + public string ShortName { get; set; } = string.Empty; - public string PositionName { get; set; } = string.Empty; + public string PositionNumber { get; set; } = string.Empty; - public string PositionSide { get; set; } = string.Empty; + public string PositionName { get; set; } = string.Empty; - public string PositionLevel { get; set; } = string.Empty; + public string PositionSide { get; set; } = string.Empty; - public string PositionExecutive { get; set; } = string.Empty; + public string PositionLevel { get; set; } = string.Empty; - public string PositionExecutiveSide { get; set; } = string.Empty; + public string PositionExecutive { get; set; } = string.Empty; - public string Remark { get; set; } = string.Empty; + public string PositionExecutiveSide { get; set; } = string.Empty; - public int OcOrder { get; set; } = 0; + public string Remark { get; set; } = string.Empty; - public int PositionNumberInt { get; set; } = 0; + public int OcOrder { get; set; } = 0; - public string PositionType { get; set; } = string.Empty; + public int PositionNumberInt { get; set; } = 0; - // new - public Guid RootOcIdNew { get; set; } + public string PositionType { get; set; } = string.Empty; - public string RootOcNameNew { get; set; } = string.Empty; + // new + public Guid RootOcIdNew { get; set; } - public Guid OcIdNew { get; set; } + public string RootOcNameNew { get; set; } = string.Empty; - public string OcFullNameNew { get; set; } = string.Empty; + public Guid OcIdNew { get; set; } - public string OcNameNew { get; set; } = string.Empty; + public string OcFullNameNew { get; set; } = string.Empty; - public string ShortNameNew { get; set; } = string.Empty; + public string OcNameNew { get; set; } = string.Empty; - public string PositionNumberNew { get; set; } = string.Empty; + public string ShortNameNew { get; set; } = string.Empty; - public string PositionNameNew { get; set; } = string.Empty; + public string PositionNumberNew { get; set; } = string.Empty; - public string PositionSideNew { get; set; } = string.Empty; + public string PositionNameNew { get; set; } = string.Empty; - public string PositionLevelNew { get; set; } = string.Empty; + public string PositionSideNew { get; set; } = string.Empty; - public string PositionExecutiveNew { get; set; } = string.Empty; + public string PositionLevelNew { get; set; } = string.Empty; - public string PositionExecutiveSideNew { get; set; } = string.Empty; + public string PositionExecutiveNew { get; set; } = string.Empty; - public int PositionNumberIntNew { get; set; } = 0; + public string PositionExecutiveSideNew { get; set; } = string.Empty; - public string PositionTypeNew { get; set; } = string.Empty; + public int PositionNumberIntNew { get; set; } = 0; - // name - public string Prefix { get; set; } = string.Empty; + public string PositionTypeNew { get; set; } = string.Empty; - public string FirstName { get; set; } = string.Empty; + // name + public string Prefix { get; set; } = string.Empty; - public string LastName { get; set; } = string.Empty; + public string FirstName { get; set; } = string.Empty; - public string Degree { get; set; } = string.Empty; + public string LastName { get; set; } = string.Empty; - public int Salary { get; set; } = 0; + public string Degree { get; set; } = string.Empty; - public int SalaryPosition { get; set; } = 0; + public int Salary { get; set; } = 0; - public string FullName { get; set; } = string.Empty; + public int SalaryPosition { get; set; } = 0; - public string GovernmentCode { get; set; } = string.Empty; + public string FullName { get; set; } = string.Empty; - } + public string GovernmentCode { get; set; } = string.Empty; - public class OrganizationItem - { - public Guid Id { get; set; } + } - public string Name { get; set; } = string.Empty; + public class OrganizationItem + { + public Guid Id { get; set; } - public int Order { get; set; } = 0; - } + public string Name { get; set; } = string.Empty; + + public int Order { get; set; } = 0; + } }