WorkFlow
This commit is contained in:
@@ -1,6 +1,4 @@
|
||||
using _0_Framework.Application;
|
||||
using CompanyManagment.App.Contracts.RollCallService;
|
||||
using Microsoft.EntityFrameworkCore.Storage.Json;
|
||||
using WorkFlow.Application.Contracts.RollCallConfirmedAbsence;
|
||||
using WorkFlow.Application.Contracts.RollCallConfirmedWithoutLunchBreak;
|
||||
using WorkFlow.Application.Contracts.Shared;
|
||||
@@ -67,7 +65,6 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
count += GetAllWorkFlowCount(workshopId);
|
||||
return count;
|
||||
}
|
||||
|
||||
public int GetRollCallAbsentsWorkFlows(long workshopId)
|
||||
{
|
||||
var now = DateTime.Now;
|
||||
@@ -76,30 +73,29 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
|
||||
return _rollCallACL.GetRollCallAbsentsWorkFlowsCount(workshopId, now, twoMonthsAgo);
|
||||
}
|
||||
|
||||
public int GetCountCutRollCallByBgService(long workshopId)
|
||||
{
|
||||
return GetRollCallWorkFlowsCutByBgService(workshopId).Count;
|
||||
}
|
||||
|
||||
public int GetAllWorkFlowCount(long workshopId)
|
||||
{
|
||||
|
||||
var count = 0;
|
||||
var activeServiceByWorkshopId = _rollCallACL.GetActiveServiceByWorkshopId(workshopId);
|
||||
if (activeServiceByWorkshopId == null)
|
||||
{
|
||||
return count;
|
||||
return count;
|
||||
}
|
||||
//count += _rollCallACL.GetRollCallAbsentsWorkFlows(accId, workshopId);
|
||||
count += GetAbsentRollCallWorkFlows(workshopId).Count;
|
||||
count += GetRollCallWorkFlowsCutByBgService(workshopId).Count;
|
||||
count += GetEmployeesWithoutLunchBreak(workshopId).Count;
|
||||
count += GetAbsentRollCallWorkFlows(workshopId)?.Count ?? 0;
|
||||
count += GetRollCallWorkFlowsCutByBgService(workshopId)?.Count ?? 0;
|
||||
count += GetEmployeesWithoutLunchBreak(workshopId)?.Count ?? 0;
|
||||
count += GetRollCallsOverlappingLeaves(workshopId)?.Count ?? 0;
|
||||
count += GetUndefinedRollCalls(workshopId)?.Count ?? 0;
|
||||
|
||||
return count;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
|
||||
public DailyRollCallWorkFlowViewModel GetAbsentRollCallWorkFlowsByDate(long workshopId, DateTime date)
|
||||
{
|
||||
|
||||
@@ -140,7 +136,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
//dont count absences before the last checkout
|
||||
var absencesWithoutCheckout = allAbsencesInDate.RollCallWorkFlowPerDayViewModels
|
||||
.Where(x => !lastCheckouts.Any(y => x.EmployeeId == y.EmployeeId && y.CheckoutStart <= date && y.CheckoutEnd >= date) &&
|
||||
activeEmployees.Any(y=>y.EmployeeId == x.EmployeeId) );
|
||||
activeEmployees.Any(y => y.EmployeeId == x.EmployeeId));
|
||||
|
||||
|
||||
if (confirmedAbssences != null)
|
||||
@@ -168,7 +164,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
RollCallId = x.RollCallId,
|
||||
WorkshopId = x.WorkshopId
|
||||
|
||||
}).ToList();
|
||||
}).ToList();
|
||||
|
||||
}
|
||||
|
||||
@@ -189,8 +185,8 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
var employeesWithoutBreakTime = _customizedWorkshopSettingsACL.GetEmployeesWithoutBreakTime(workshopId);
|
||||
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, startOfDay, endOfDay);
|
||||
notSlicedRollCalls = notSlicedRollCalls
|
||||
.Where(x => !lastCheckouts.Any(y => y.EmployeeId == x.EmployeeId && y.CheckoutStart.Date <= x.RollCallDate.Date &&
|
||||
y.CheckoutEnd.Date >= x.RollCallDate.Date) && activeEmployees.Any(y=>y.EmployeeId == x.EmployeeId)).ToList();
|
||||
.Where(x => !lastCheckouts.Any(y => y.EmployeeId == x.EmployeeId && y.CheckoutStart.Date <= x.RollCallDate.Date &&
|
||||
y.CheckoutEnd.Date >= x.RollCallDate.Date) && activeEmployees.Any(y => y.EmployeeId == x.EmployeeId)).ToList();
|
||||
|
||||
var employeeWithoutBreakTimeAndNotSliced = notSlicedRollCalls.Join(employeesWithoutBreakTime, x => x.EmployeeId, y => y.EmployeeId, (x, y) =>
|
||||
new { y.EmployeeId, x.EmployeeName, x.RollCallId, x.RollCallDate }).ToList();
|
||||
@@ -204,7 +200,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
DateGr = date.Date,
|
||||
DayOfWeekFa = date.DayOfWeek.DayOfWeeKToPersian(),
|
||||
RollCallConfirmedWithoutLunchList = employeeWithoutBreakTimeAndNotSliced
|
||||
.Where(x => !entites.Any(y => y.RollCallId == x.RollCallId)).Select(y => new RollCallConfirmedWithoutLunchBreakViewModel
|
||||
.Where(x => entites.All(y => y.RollCallId != x.RollCallId)).Select(y => new RollCallConfirmedWithoutLunchBreakViewModel
|
||||
{
|
||||
EmployeeId = y.EmployeeId,
|
||||
EmployeeName = y.EmployeeName,
|
||||
@@ -233,7 +229,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
DateTimeFa = date.ToFarsi(),
|
||||
RollCallWorkFlowPerDayViewModels = rollCallsForDate.RollCallWorkFlowPerDayViewModels
|
||||
.Where(y => !lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId && z.CheckoutStart.Date <= rollCallsForDate.DateTime.Date &&
|
||||
z.CheckoutEnd.Date >= rollCallsForDate.DateTime.Date) && activeEmployees.Any(z=>y.EmployeeId==z.EmployeeId))
|
||||
z.CheckoutEnd.Date >= rollCallsForDate.DateTime.Date) && activeEmployees.Any(z => y.EmployeeId == z.EmployeeId))
|
||||
.Select(e => new RollCallWorkFlowViewModel()
|
||||
{
|
||||
EmployeeId = e.EmployeeId,
|
||||
@@ -245,17 +241,161 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
};
|
||||
return result;
|
||||
}
|
||||
public DailyRollCallWorkFlowViewModel GetUndefinedRollCallsByDate(long workshopId, DateTime date)
|
||||
{
|
||||
var startOfDay = date.Date;
|
||||
var endOfDay = startOfDay.AddDays(1).Date.AddTicks(-1);
|
||||
|
||||
startOfDay.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, DateTime.Now.Date);
|
||||
var rollCalls = _rollCallACL.GetUndefinedRollCalls(workshopId, startOfDay, endOfDay);
|
||||
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, startOfDay, endOfDay);
|
||||
|
||||
var rollCallsForDate = rollCalls.FirstOrDefault();
|
||||
if (rollCallsForDate == null)
|
||||
return new();
|
||||
var result = new DailyRollCallWorkFlowViewModel()
|
||||
{
|
||||
DateTime = date.Date,
|
||||
DateTimeFa = date.ToFarsi(),
|
||||
RollCallWorkFlowPerDayViewModels = rollCallsForDate.RollCallWorkFlowPerDayViewModels
|
||||
.Where(y => !lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId && z.CheckoutStart.Date <= rollCallsForDate.DateTime.Date &&
|
||||
z.CheckoutEnd.Date >= rollCallsForDate.DateTime.Date) && activeEmployees.Any(z => y.EmployeeId == z.EmployeeId))
|
||||
.Select(e => new RollCallWorkFlowViewModel()
|
||||
{
|
||||
EmployeeId = e.EmployeeId,
|
||||
EmployeeName = e.EmployeeName,
|
||||
Message = e.Message,
|
||||
RollCallId = e.RollCallId
|
||||
}).ToList(),
|
||||
DayOfWeekFa = date.DayOfWeek.DayOfWeeKToPersian()
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public DailyWorkFlowEmployeesWithRollCallOnLeaveViewModel GetRollCallsOverlappingLeaveByDate(long workshopId, DateTime date)
|
||||
{
|
||||
var startOfDay = date.Date;
|
||||
var endOfDay = startOfDay.AddDays(1).Date.AddTicks(-1);
|
||||
|
||||
public List<DailyRollCallWorkFlowViewModel> GetRollCallWorkFlowsCutByBgService(long workshopId)
|
||||
startOfDay.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, DateTime.Now.Date);
|
||||
var rollCalls = _rollCallACL.GetRollCallsOverlappingLeaves(workshopId, startOfDay, endOfDay);
|
||||
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, startOfDay, endOfDay);
|
||||
|
||||
var rollCallsForDate = rollCalls.FirstOrDefault(x=>x.Date==date);
|
||||
if (rollCallsForDate == null)
|
||||
return new();
|
||||
|
||||
var result = new DailyWorkFlowEmployeesWithRollCallOnLeaveViewModel()
|
||||
{
|
||||
Date = date.Date,
|
||||
DateFa = date.ToFarsi(),
|
||||
EmployeesList = rollCallsForDate. EmployeesList
|
||||
.Where(y => !lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId &&
|
||||
z.CheckoutStart.Date <= rollCallsForDate.Date.Date &&
|
||||
z.CheckoutEnd.Date >= rollCallsForDate.Date.Date) && activeEmployees.Any(z => y.EmployeeId == z.EmployeeId))
|
||||
.Select(e => new WorkFlowEmployeeWithRollCallOnLeaveViewModel()
|
||||
{
|
||||
EmployeeId = e.EmployeeId,
|
||||
EmployeeFullName = e.EmployeeFullName,
|
||||
LeaveId = e.LeaveId,
|
||||
EndOfOverlapTime = e.EndOfOverlapTime,
|
||||
StartOfOverlapTime = e.StartOfOverlapTime,
|
||||
RollCallId = e.RollCallId,
|
||||
EndOfOverlapDateFa = e.EndOfOverlapDateFa,
|
||||
EndOfOverlapDateTime = e.EndOfOverlapDateTime,
|
||||
StartOfOverlapDateFa = e.StartOfOverlapDateFa,
|
||||
StartOfOverlapDateTime = e.StartOfOverlapDateTime
|
||||
}).ToList(),
|
||||
DayOfWeek = date.DayOfWeek.DayOfWeeKToPersian()
|
||||
};
|
||||
return result;
|
||||
}
|
||||
public List<DailyWorkFlowEmployeesWithRollCallOnLeaveViewModel> GetRollCallsOverlappingLeaves(long workshopId)
|
||||
{
|
||||
var now = DateTime.Now;
|
||||
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
|
||||
var rollCalls = _rollCallACL.GetRollCallsOverlappingLeaves(workshopId, twoMonthsAgo, now);
|
||||
return rollCalls
|
||||
.Select(x=> new DailyWorkFlowEmployeesWithRollCallOnLeaveViewModel()
|
||||
{
|
||||
Date = x.Date,
|
||||
DateFa = x.DateFa,
|
||||
EmployeesList = x.EmployeesList
|
||||
.Where(y => !lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId &&
|
||||
z.CheckoutStart.Date <= x.Date.Date &&
|
||||
z.CheckoutEnd.Date >= x.Date.Date ) && activeEmployees.Any(z => y.EmployeeId == z.EmployeeId))
|
||||
.Select(e => new WorkFlowEmployeeWithRollCallOnLeaveViewModel()
|
||||
{
|
||||
EmployeeId = e.EmployeeId,
|
||||
EmployeeFullName = e.EmployeeFullName,
|
||||
LeaveId = e.LeaveId,
|
||||
EndOfOverlapTime = e.EndOfOverlapTime,
|
||||
StartOfOverlapTime = e.StartOfOverlapTime,
|
||||
RollCallId = e.RollCallId,
|
||||
EndOfOverlapDateFa = e.EndOfOverlapDateFa,
|
||||
EndOfOverlapDateTime = e.EndOfOverlapDateTime,
|
||||
StartOfOverlapDateFa = e.StartOfOverlapDateFa,
|
||||
StartOfOverlapDateTime = e.StartOfOverlapDateTime
|
||||
}).ToList(),
|
||||
DayOfWeek = x.DayOfWeek
|
||||
})
|
||||
.Where(y => y.EmployeesList != null && y.EmployeesList.Any())
|
||||
.OrderBy(x => x.Date).ToList();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public List<RollCallConfirmAbsenceViewModel> GetConfirmAbsencesBy(long workshopId, DateTime start, DateTime end)
|
||||
{
|
||||
return _absenceRepository.GetConfirmAbsencesBy(workshopId, start, end);
|
||||
}
|
||||
|
||||
public List<DailyRollCallWorkFlowViewModel> GetUndefinedRollCalls(long workshopId)
|
||||
{
|
||||
var now = DateTime.Now;
|
||||
|
||||
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
var rollCalls = _rollCallACL.GetRollCallWorkFlowsCutByBgService(workshopId, twoMonthsAgo, now);
|
||||
List<DailyRollCallWorkFlowViewModel> rollCalls = _rollCallACL.GetUndefinedRollCalls(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
|
||||
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
|
||||
return rollCalls.Select(x => new DailyRollCallWorkFlowViewModel()
|
||||
{
|
||||
DateTime = x.DateTime,
|
||||
DateTimeFa = x.DateTimeFa,
|
||||
RollCallWorkFlowPerDayViewModels = x.RollCallWorkFlowPerDayViewModels
|
||||
.Where(y =>
|
||||
!lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId && z.CheckoutStart.Date <= x.DateTime.Date &&
|
||||
z.CheckoutEnd.Date >= x.DateTime.Date) &&
|
||||
activeEmployees.Any(z => z.EmployeeId == y.EmployeeId && x.DateTime.Date >= z.startActive &&
|
||||
x.DateTime.Date <= z.endActive))
|
||||
.Select(e => new RollCallWorkFlowViewModel()
|
||||
{
|
||||
EmployeeId = e.EmployeeId,
|
||||
EmployeeName = e.EmployeeName,
|
||||
Message = e.Message,
|
||||
RollCallId = e.RollCallId
|
||||
}).ToList(),
|
||||
DayOfWeekFa = x.DateTime.DayOfWeek.DayOfWeeKToPersian()
|
||||
}).Where(y => y.RollCallWorkFlowPerDayViewModels != null && y.RollCallWorkFlowPerDayViewModels.Any()).OrderBy(x => x.DateTime).ToList();
|
||||
}
|
||||
|
||||
public List<DailyRollCallWorkFlowViewModel> GetRollCallWorkFlowsCutByBgService(long workshopId)
|
||||
{
|
||||
var now = DateTime.Now;
|
||||
var yesterday = now.AddDays(-1).Date;
|
||||
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
var rollCalls = _rollCallACL.GetRollCallWorkFlowsCutByBgService(workshopId, twoMonthsAgo, yesterday);
|
||||
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
|
||||
return rollCalls.Select(x => new DailyRollCallWorkFlowViewModel()
|
||||
{
|
||||
@@ -263,7 +403,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
DateTimeFa = x.DateTimeFa,
|
||||
RollCallWorkFlowPerDayViewModels = x.RollCallWorkFlowPerDayViewModels
|
||||
.Where(y => !lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId && z.CheckoutStart.Date <= x.DateTime.Date &&
|
||||
z.CheckoutEnd.Date >= x.DateTime.Date) && activeEmployees.Any(z=>z.EmployeeId == y.EmployeeId && x.DateTime.Date >= z.startActive &&
|
||||
z.CheckoutEnd.Date >= x.DateTime.Date) && activeEmployees.Any(z => z.EmployeeId == y.EmployeeId && x.DateTime.Date >= z.startActive &&
|
||||
x.DateTime.Date <= z.endActive))
|
||||
.Select(e => new RollCallWorkFlowViewModel()
|
||||
{
|
||||
@@ -273,7 +413,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
RollCallId = e.RollCallId
|
||||
}).ToList(),
|
||||
DayOfWeekFa = x.DateTime.DayOfWeek.DayOfWeeKToPersian()
|
||||
}).Where(y => y.RollCallWorkFlowPerDayViewModels != null && y.RollCallWorkFlowPerDayViewModels.Any()).OrderBy(x=>x.DateTime).ToList();
|
||||
}).Where(y => y.RollCallWorkFlowPerDayViewModels != null && y.RollCallWorkFlowPerDayViewModels.Any()).OrderBy(x => x.DateTime).ToList();
|
||||
}
|
||||
public List<DailyRollCallWorkFlowViewModel> GetAbsentRollCallWorkFlows(long workshopId)
|
||||
{
|
||||
@@ -285,7 +425,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
|
||||
var absences = _rollCallACL.GetAbsentRollCallWorkFlows(workshopId, twoMonthsAgo, now);
|
||||
var absences = _rollCallACL.GetAbsentRollCallWorkFlows(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
|
||||
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
|
||||
|
||||
var confirmedAbssences = GetConfirmAbsencesBy(workshopId, twoMonthsAgo,
|
||||
@@ -311,7 +451,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
|
||||
//dont count absences before the last checkout
|
||||
allAbsencesInDate = allAbsencesInDate.Where(x => !lastCheckouts.Any(y =>
|
||||
x.EmployeeId == y.EmployeeId && y.CheckoutStart<= item.DateTime.Date && y.CheckoutEnd >= item.DateTime.Date) && activeEmployees.Any(y=>
|
||||
x.EmployeeId == y.EmployeeId && y.CheckoutStart <= item.DateTime.Date && y.CheckoutEnd >= item.DateTime.Date) && activeEmployees.Any(y =>
|
||||
item.DateTime.Date >= y.startActive && item.DateTime.Date <= y.endActive)).ToList();
|
||||
|
||||
|
||||
@@ -342,7 +482,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
result.Add(newItem);
|
||||
|
||||
}
|
||||
return result.OrderBy(x=>x.DateTime).ToList();
|
||||
return result.OrderBy(x => x.DateTime).ToList();
|
||||
}
|
||||
public List<DailyRollCallConfirmedWithoutLunchBreakViewModel> GetEmployeesWithoutLunchBreak(long workshopId)
|
||||
{
|
||||
@@ -351,7 +491,7 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
now.AddMonthsFa(-2, out var twoMonthsAgo);
|
||||
|
||||
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
|
||||
var notSlicedRollCalls = _rollCallACL.GetNotSlicedRollCallsByWorkshopId(workshopId, twoMonthsAgo, now);
|
||||
var notSlicedRollCalls = _rollCallACL.GetNotSlicedRollCallsByWorkshopId(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
|
||||
var employeesWithoutBreakTime = _customizedWorkshopSettingsACL.GetEmployeesWithoutBreakTime(workshopId);
|
||||
|
||||
notSlicedRollCalls = notSlicedRollCalls
|
||||
@@ -384,12 +524,4 @@ public class WorkFlowApplication : IWorkFlowApplication
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
public List<RollCallConfirmAbsenceViewModel> GetConfirmAbsencesBy(long workshopId, DateTime start, DateTime end)
|
||||
{
|
||||
return _absenceRepository.GetConfirmAbsencesBy(workshopId, start, end);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user