diff --git a/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutDto.cs b/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutDto.cs index 29a1b200..23d88b82 100644 --- a/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutDto.cs +++ b/CompanyManagment.App.Contracts/Checkout/Dto/CheckoutDto.cs @@ -59,22 +59,22 @@ public class CheckoutDto /// /// کد پرسنلی /// - public int PersonnelCode { get; set; } + public string PersonnelCode { get; set; } /// /// فعال/غیرفعال /// - public string IsActiveString { get; set; } + public bool IsActive { get; set; } /// /// امضاء فیش /// - public string Signature { get; set; } + public bool Signature { get; set; } /// /// نام کارفرما /// public string EmployerName { get; set; } - public string IsBlockCantracingParty { get; set; } + public bool IsBlockCantracingParty { get; set; } /// /// آیا فیش نیاز به بروزرسانی دارد /// diff --git a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs index 837920d6..87871b5b 100644 --- a/CompanyManagment.EFCore/Repository/CheckoutRepository.cs +++ b/CompanyManagment.EFCore/Repository/CheckoutRepository.cs @@ -4,6 +4,7 @@ using Company.Domain.CheckoutAgg; using Company.Domain.LeftWorkAgg; using Company.Domain.RollCallAgg; using Company.Domain.RollCallEmployeeAgg; +using Company.Domain.WorkshopAgg; using Company.Domain.WorkshopEmployerAgg; using CompanyManagment.App.Contracts.Checkout; using CompanyManagment.App.Contracts.Checkout.Dto; @@ -33,6 +34,7 @@ using System.Globalization; using System.Linq; using System.Reflection.Metadata.Ecma335; using System.Threading.Tasks; +using System.Xml.XPath; using static Microsoft.EntityFrameworkCore.DbLoggerCategory; namespace CompanyManagment.EFCore.Repository; @@ -2763,8 +2765,8 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos public async Task> GetList(CheckoutSearchModelDto searchModel) { var acountID = _authHelper.CurrentAccountId(); - var workshopAcounts =await _context.WorkshopAccounts.Where(x => x.AccountId == acountID) - .Select(x => x.WorkshopId).ToListAsync(); + var workshopAccounts = _context.WorkshopAccounts.Where(x => x.AccountId == acountID) + .Select(x => x.WorkshopId); //var checkouts = @@ -2798,36 +2800,82 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos // .FirstOrDefault(p => p.Employers.Any(e => e.id == res.workshopEmployer.Employer.id)) // }); - var checkouts = - _context.CheckoutSet.Include(w => w.CheckoutWarningMessageList).Where(x => workshopAcounts.Contains(x.WorkshopId)) - .Join(_context.Workshops.AsSplitQuery(), - ch => ch.WorkshopId, - workshop => workshop.id, - (ch, workshop) => new { ch, workshop }) - .Select(res => new - { - res.ch, - res.workshop, - }); + //var checkoutss = + // _context.CheckoutSet.Include(w => w.CheckoutWarningMessageList).Where(x => workshopAcounts.Contains(x.WorkshopId)) + // .Join(_context.Workshops.AsSplitQuery(), + // ch => ch.WorkshopId, + // workshop => workshop.id, + // (ch, workshop) => new { ch, workshop }) + // .Select(res => new + // { + // res.ch, + // res.workshop, + // }); + var watch = new Stopwatch(); + watch.Start(); + var checkouts = + ( + from workshop in _context.Workshops.Where(x => workshopAccounts.Contains(x.id)) + join x in _context.CheckoutSet + on workshop.id equals x.WorkshopId + + //.Include(x=>x.CheckoutWarningMessageList) + //join workshop in _context.Workshops + // on ch.WorkshopId equals workshop.id + + + select new + { + Id = x.id, + EmployeeFullName = x.EmployeeFullName, + EmployeeId = x.EmployeeId, + ContractStart = x.ContractStart, + ContractEnd = x.ContractEnd, + PersonnelCode = x.PersonnelCode, + SumOfWorkingDays = x.SumOfWorkingDays, + Month = x.Month, + Year = x.Year, + ContractNo = x.ContractNo, + IsActiveString = x.IsActiveString, + Signature = x.Signature, + IsUpdateNeeded = x.IsUpdateNeeded, + WorkshopId = x.WorkshopId, + ArchiveCode = workshop.ArchiveCode, + WorkshopName = workshop.WorkshopFullName, + WorkshopSignCheckout = workshop.SignCheckout, + + } + + ).OrderByDescending(x => x.Id) + .ThenByDescending(x => x.Year) + .ThenByDescending(x=>x.ContractStart) + .ThenBy(x => x.PersonnelCode).AsNoTracking(); + + Console.WriteLine("getList======================= : " + watch.Elapsed); #region SercheModel if (!string.IsNullOrWhiteSpace(searchModel.ContractNo)) checkouts = checkouts.Where(x => - x.ch.ContractNo == searchModel.ContractNo); + x.ContractNo == searchModel.ContractNo); if (searchModel.WorkshopId != 0) { - checkouts = checkouts.Where(x => x.ch.WorkshopId == searchModel.WorkshopId); + checkouts = checkouts.Where(x => x.WorkshopId == searchModel.WorkshopId) + .OrderByDescending(x => x.ContractStart) + .ThenBy(x => x.PersonnelCode); } if (!string.IsNullOrWhiteSpace(searchModel.EmployeeFullName)) { - checkouts = checkouts.Where(x => x.ch.EmployeeFullName.Contains(searchModel.EmployeeFullName)); + checkouts = checkouts.Where(x => x.EmployeeFullName.Contains(searchModel.EmployeeFullName)); + } + if (searchModel.EmployerId != 0) + { + var workshopIds = _context.WorkshopEmployers.Where(e => e.EmployerId == searchModel.EmployerId) + .Select(e => e.WorkshopId); + checkouts = checkouts.Where(x => workshopIds.Contains(x.WorkshopId)) + .OrderByDescending(x => x.ContractStart); } - //if (searchModel.EmployerId != 0) - //{ - // checkouts = checkouts.Where(x => x.contractingParty.Employers.Select(c => c.id).Contains(searchModel.EmployerId)); - //} - + @@ -2844,9 +2892,9 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos var endYearGr = endYear.ToGeorgianDateTime(); - checkouts = checkouts.Where(x => x.ch.ContractStart >= startyearGr && x.ch.ContractEnd <= endYearGr); + checkouts = checkouts.Where(x => x.ContractStart >= startyearGr && x.ContractEnd <= endYearGr); if (searchModel.WorkshopId > 0 || !string.IsNullOrWhiteSpace(searchModel.EmployeeFullName) || searchModel.EmployerId > 0) - checkouts = checkouts.OrderByDescending(x => x.ch.ContractEnd); + checkouts = checkouts.OrderByDescending(x => x.ContractEnd); } else if (!string.IsNullOrWhiteSpace(searchModel.Year) && !string.IsNullOrWhiteSpace(searchModel.Month) && @@ -2960,13 +3008,13 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos //checkouts = checkouts.Where(x => x.ContractEndGr >= start && x.ContractEndGr <= end).ToList(); checkouts = checkouts.Where(x => - x.ch.ContractStart >= startDate && x.ch.ContractStart < endDate && x.ch.ContractEnd > startDate && - x.ch.ContractEnd <= endDate || - x.ch.ContractStart <= startDate && x.ch.ContractEnd >= endDate || - startDate <= x.ch.ContractStart && endDate > x.ch.ContractStart || - endDate >= x.ch.ContractEnd && startDate < x.ch.ContractEnd); + x.ContractStart >= startDate && x.ContractStart < endDate && x.ContractEnd > startDate && + x.ContractEnd <= endDate || + x.ContractStart <= startDate && x.ContractEnd >= endDate || + startDate <= x.ContractStart && endDate > x.ContractStart || + endDate >= x.ContractEnd && startDate < x.ContractEnd); //if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) - // checkouts = checkouts.OrderBy(x => x.ch.PersonnelCodeInt); + // checkouts = checkouts.OrderBy(x => x.PersonnelCodeInt); } else if (!string.IsNullOrWhiteSpace(searchModel.ContractStart) && @@ -2978,51 +3026,79 @@ public class CheckoutRepository : RepositoryBase, ICheckoutRepos var start = searchModel.ContractStart.ToGeorgianDateTime(); var endd = searchModel.ContractEnd.ToGeorgianDateTime(); checkouts = checkouts.Where(x => - x.ch.ContractStart >= start && x.ch.ContractStart <= endd); + x.ContractStart >= start && x.ContractStart <= endd); - //if (searchModel.WorkshopId > 0 || searchModel.EmployeeId > 0 || searchModel.EmployerId > 0) - // checkouts = checkouts.OrderByDescending(x => x.ch.ContractEnd).ThenBy(x => x.ch.PersonnelCodeInt); + if (searchModel.WorkshopId > 0 || !string.IsNullOrWhiteSpace(searchModel.EmployeeFullName) || searchModel.EmployerId > 0) + checkouts = checkouts.OrderByDescending(x => x.ContractEnd).ThenBy(x => x.PersonnelCode); } #endregion - var count = await checkouts.CountAsync(); + watch.Reset(); + watch.Start(); + var checkoutQueryFilter = await checkouts.ApplyPagination(searchModel.PageIndex, searchModel.PageSize).ToListAsync(); + Console.WriteLine("pagination===================== : " + watch.Elapsed); + + var employers =await + _context.WorkshopEmployers.Where(x => checkoutQueryFilter + .Select(c => c.WorkshopId).Contains(x.WorkshopId)) + .Select(x=> new {x.Employer, x.WorkshopId}).ToListAsync(); + var contractingPartiesIds = employers.Select(x => x.Employer.ContractingPartyId).ToList(); + var warningMessages = await _context.CheckoutWarningMessages.Where(x => checkoutQueryFilter + .Select(c => c.Id).Contains(x.CheckoutId)).ToListAsync(); + + + var contractnigParties = await _context.PersonalContractingParties + .Where(x => contractingPartiesIds.Contains(x.id)).ToListAsync(); + + var options = await _context.EmployeeComputeOptionsSet.Where(x => checkoutQueryFilter + .Select(c => c.WorkshopId).Contains(x.WorkshopId)).ToListAsync(); + + watch.Reset(); + watch.Start(); + var result = checkoutQueryFilter.Select(x => + - var result = checkoutQueryFilter.Select(x => new CheckoutDto - { - Id = x.ch.id, - EmployeeFullName = x.ch.EmployeeFullName, - ContractStart = x.ch.ContractStart.ToFarsi(), - ContractEnd = x.ch.ContractEnd.ToFarsi(), - PersonnelCode = Convert.ToInt32(x.ch.PersonnelCode), - ArchiveCode = x.workshop.ArchiveCode, - SumOfWorkingDays = x.ch.SumOfWorkingDays, - WorkshopName = x.workshop.WorkshopName, - Month = x.ch.Month, - Year = x.ch.Year, - ContractNo = x.ch.ContractNo, - IsActiveString = x.ch.IsActiveString, - Signature = x.ch.Signature, - //EmployerName = $"{x.workshopEmployer.Employer.FName} {x.workshopEmployer.Employer.LName}", - //IsBlockCantracingParty = x.contractingParty.IsBlock, - //HasSignCheckoutOption = x.option != null ? x.option.SignCheckout : x.workshop.SignCheckout, - IsUpdateNeeded = x.ch.IsUpdateNeeded, - CheckoutWarningMessageList = x.ch.CheckoutWarningMessageList.Select(wm => new CheckoutWarningMessageModel { - WarningMessage = wm.WarningMessage, - TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, + var warningMessage = warningMessages.Where(wm => wm.CheckoutId == x.Id); + var empl = employers.First(em => em.WorkshopId == x.WorkshopId); + var isBlock = contractnigParties.Any(cp => cp.id == empl.Employer.ContractingPartyId && cp.IsBlock == "true"); + var option = options.FirstOrDefault(o => o.WorkshopId == x.WorkshopId && o.EmployeeId == x.EmployeeId); + return new CheckoutDto + { + Id = x.Id, + EmployeeFullName = x.EmployeeFullName, + ContractStart = x.ContractStart.ToFarsi(), + ContractEnd = x.ContractEnd.ToFarsi(), + PersonnelCode = x.PersonnelCode, + ArchiveCode = x.ArchiveCode, + SumOfWorkingDays = x.SumOfWorkingDays, + WorkshopName = x.WorkshopName, + Month = x.Month, + Year = x.Year, + ContractNo = x.ContractNo, + IsActive = x.IsActiveString == "true", + Signature = x.Signature == "1", + EmployerName = $"{empl.Employer.FullName}", + IsBlockCantracingParty = isBlock, + HasSignCheckoutOption = option != null ? option.SignCheckout : x.WorkshopSignCheckout, + IsUpdateNeeded = x.IsUpdateNeeded, + CheckoutWarningMessageList = warningMessage.Select(wm => new CheckoutWarningMessageModel + { + WarningMessage = wm.WarningMessage, + TypeOfCheckoutWarning = wm.TypeOfCheckoutWarning, - }).ToList() + }).ToList() + }; - }).OrderByDescending(x => x.Id) - .ThenByDescending(x => x.Year) - .ThenBy(x => x.PersonnelCode) + + }) .ToList(); - - + var count = await checkouts.CountAsync(); + Console.WriteLine("FinalList================================ : " + watch.Elapsed); return new PagedResult() { TotalCount = count,