fix some bugs for admin monthly overview

This commit is contained in:
MahanCh
2025-07-23 12:42:52 +03:30
parent f4ec4f43c6
commit 4ff2596864

View File

@@ -244,25 +244,67 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
.Except([5976]).ToHashSet();
var workingCheckoutEmployeeIds = GetWorkingCheckoutEmployeeIds(workshopIds, targetStartDate, targetEndDate, vipGroup);
//var workingCheckoutEmployeeIds = _companyContext.LeftWorkList.AsNoTracking()
// .Join(
// _companyContext.Contracts.AsNoTracking(),
// leftWork => new { leftWork.EmployeeId, WorkshopId = leftWork.WorkshopId },
// contract => new { contract.EmployeeId, WorkshopId = contract.WorkshopIds },
// (leftWork, contract) => new { leftWork, contract }
// )
// .Where(x =>
// workshopIds.Contains(x.leftWork.WorkshopId) &&
// x.leftWork.StartWorkDate <= targetEndDate &&
// x.leftWork.LeftWorkDate.AddDays(-1) >= targetStartDate &&
// x.contract.ContarctStart <= targetEndDate &&
// x.contract.ContractEnd >= targetStartDate &&
// !vipGroup.Contains(x.leftWork.EmployeeId) &&
// !_companyContext.EmployeeClientTemps
// .Any(temp => temp.EmployeeId == x.leftWork.EmployeeId && temp.WorkshopId == x.leftWork.WorkshopId)
// )
// .Select(x => new { x.leftWork.WorkshopId, x.leftWork.EmployeeId });
//var workingCheckoutEmployeeIds = GetWorkingCheckoutEmployeeIds(workshopIds, targetStartDate, targetEndDate, vipGroup);
var chcekoutLeftWorks = _companyContext.LeftWorkList
.AsNoTracking()
.Where(x =>
workshopIds.Contains(x.WorkshopId) &&
x.StartWorkDate <= targetEndDate &&
x.LeftWorkDate.AddDays(-1) >= targetStartDate &&
!vipGroup.Contains(x.EmployeeId))
.Select(x => new
{
x.EmployeeId,
x.WorkshopId,
x.StartWorkDate,
x.LeftWorkDate,
x.Workshop.CreateCheckout
})
.ToList();
var checkoutContracts = _companyContext.Contracts
.AsNoTracking()
.Where(x =>
workshopIds.Contains(x.WorkshopIds) &&
x.ContarctStart <= targetEndDate &&
x.ContractEnd >= targetStartDate)
.Select(x => new
{
x.EmployeeId,
WorkshopId = x.WorkshopIds,
x.ContarctStart,
x.ContractEnd
})
.ToList();
var computeOptionsDict = _companyContext.EmployeeComputeOptionsSet
.AsNoTracking()
.Where(o => workshopIds.Contains(o.WorkshopId))
.ToDictionary(
o => (o.EmployeeId, o.WorkshopId),
o => o.CreateCheckout
);
var clientTemps = _companyContext.EmployeeClientTemps
.AsNoTracking().AsEnumerable()
.Select(x => (x.EmployeeId, x.WorkshopId))
.ToHashSet();
var workingCheckoutEmployeeIds = chcekoutLeftWorks
.Join(
checkoutContracts,
left => new { left.EmployeeId, left.WorkshopId },
contract => new { contract.EmployeeId, contract.WorkshopId },
(left, contract) => new { left, contract })
.Where(x =>
!clientTemps.Contains((x.left.EmployeeId, x.left.WorkshopId)) &&
(computeOptionsDict.TryGetValue((x.left.EmployeeId, x.left.WorkshopId), out var createCheckout)
? createCheckout
: x.left.CreateCheckout))
.Select(x => (
x.left.WorkshopId,
x.left.EmployeeId
)).ToList();
@@ -312,6 +354,11 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
Data = x.ToList()
}).ToList();
var validWorkshops = workingCheckoutGrouping.Select(x => x.Key)
.Union(workingContractGrouping.Select(x => x.WorkshopId)).ToList();
var notValidWorkshops = workshopIds.Except(validWorkshops).ToList();
var workshopsWithFullContracts = workingContractGrouping
.Where(g => g.Data.All(emp => contractSet.Contains((emp.WorkshopId, emp.EmployeeId))))
.Select(g => g.WorkshopId)
@@ -339,6 +386,10 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
var adminMonthlyOverviews = _companyContext.AdminMonthlyOverviews
.Where(x => x.Month == month && x.Year == year);
var notValidMonthlyOverViews =
await adminMonthlyOverviews.Where(x => notValidWorkshops.Contains(x.WorkshopId)).ToListAsync();
var adminMonthlyOverviewsWithFullContracts = await adminMonthlyOverviews
.Where(x => fullyCoveredWorkshops.Contains(x.WorkshopId) && x.Status == AdminMonthlyOverviewStatus.CreateDocuments)
.ToListAsync();
@@ -353,6 +404,7 @@ public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyO
foreach (var adminMonthlyOverview in adminMonthlyOverviewsWithNotFullContracts)
adminMonthlyOverview.SetStatus(AdminMonthlyOverviewStatus.CreateDocuments);
_companyContext.RemoveRange(notValidMonthlyOverViews);
await _companyContext.SaveChangesAsync();
}