fix some bugs for admin monthly overview
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user