Files
Backend-Api/WorkFlow/Infrastructure/WorkFlow.Infrastructure.ACL/RollCall/WorkFlowRollCallACL.cs

118 lines
5.0 KiB
C#

using _0_Framework.Application;
using CompanyManagment.App.Contracts.RollCall;
using CompanyManagment.App.Contracts.RollCallEmployee;
using CompanyManagment.App.Contracts.RollCallEmployeeStatus;
using CompanyManagment.App.Contracts.RollCallService;
using WorkFlow.Application.Contracts.Shared;
namespace WorkFlow.Infrastructure.ACL.RollCall;
public class WorkFlowRollCallACL : IWorkFlowRollCallACL
{
private readonly IRollCallApplication _rollCallApplication;
private readonly IRollCallEmployeeStatusApplication _rollCallEmployeeStatusApplication;
private readonly IRollCallEmployeeApplication _rollCallEmployeeApplication;
private readonly IRollCallServiceApplication _rollCallServiceApplication;
public WorkFlowRollCallACL(IRollCallApplication rollCallApplication, IRollCallEmployeeStatusApplication rollCallEmployeeStatusApplication, IRollCallEmployeeApplication rollCallEmployeeApplication, IRollCallServiceApplication rollCallServiceApplication)
{
_rollCallApplication = rollCallApplication;
_rollCallEmployeeStatusApplication = rollCallEmployeeStatusApplication;
_rollCallEmployeeApplication = rollCallEmployeeApplication;
_rollCallServiceApplication = rollCallServiceApplication;
}
public List<DailyRollCallWorkFlowViewModel> GetRollCallWorkFlowsCutByBgService(long workshopId, DateTime start, DateTime end)
{
return _rollCallApplication.GetRollCallWorkFlowsCutByBgService(workshopId, start, end).Select(x =>
{
return new DailyRollCallWorkFlowViewModel()
{
DateTime = x.DateGr,
DateTimeFa = x.DateFa,
RollCallWorkFlowPerDayViewModels = x.ActiveEmployees.Select(e => new RollCallWorkFlowViewModel()
{
EmployeeId = e.EmployeeId,
EmployeeName = e.EmployeeFullName,
Message = $"{TimeOnly.FromDateTime(e.StartDate!.Value):HH:mm} الی {TimeOnly.FromDateTime(e.EndDate.Value):HH:mm}",
RollCallId = e.Id
}).ToList(),
DayOfWeekFa = x.DateGr.DayOfWeek.DayOfWeeKToPersian(),
};
}).Where(x => x.RollCallWorkFlowPerDayViewModels.Count > 0).ToList();
}
public List<(long EmployeeId, string EmployeeName,DateTime startActive,DateTime endActive)> GetActiveWorkshopRollCallEmployees(long workshopId, DateTime start, DateTime end)
{
return _rollCallEmployeeStatusApplication.GetActiveByWorkshopIdInDate(workshopId, start, end).Select(x => (x.EmployeeId, x.EmployeeName,x.StartDateGr,x.EndDateGr))
.ToList();
}
public int GetCountCutRollCallByBgService(long workshopId)
{
var now = DateTime.Now;
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
return GetRollCallWorkFlowsCutByBgService(workshopId, twoMonthsAgo, now).Count;
}
public int GetRollCallAbsentsWorkFlowsCount(long workshopId, DateTime durationEnd, DateTime durationStart)
{
return GetAbsentRollCallWorkFlows(workshopId, durationStart, durationEnd).Count;
}
public List<DailyRollCallWorkFlowViewModel> GetAbsentRollCallWorkFlows(long workshopId, DateTime durationStart, DateTime durationEnd)
{
return _rollCallApplication.GetWorkshopAbsentHistory(workshopId, durationStart, durationEnd).Select(x => new DailyRollCallWorkFlowViewModel()
{
IsHoliday = x.IsHoliday,
DateTime = x.DateGr,
DateTimeFa = x.DateFa,
DayOfWeekFa = x.DayOfWeekFa,
IsFriday = x.IsFriday,
RollCallWorkFlowPerDayViewModels = x.ActiveEmployees.Select(a => new RollCallWorkFlowViewModel()
{
EmployeeId = a.EmployeeId,
Message = "",
EmployeeName = a.EmployeeFullName,
WorkshopId = a.WorkshopId
}).ToList()
}).ToList();
}
public List<RollCallWorkFlowViewModel> GetNotSlicedRollCallsByWorkshopId(long workshopId, DateTime durationStart, DateTime durationEnd)
{
return _rollCallApplication.GetNotSlicedRollCallsByWorkshopId(workshopId, durationStart, durationEnd)
.Select(x => new RollCallWorkFlowViewModel
{
EmployeeId = x.EmployeeId,
EmployeeName = x.EmployeeFullName,
RollCallDate = x.DateGr,
RollCallId = x.Id
}).ToList();
}
public RollCallWorkFlowViewModel GetDetails(long rollCallId)
{
var entity = _rollCallApplication.GetDetails(rollCallId);
if (entity == null)
return null;
return new RollCallWorkFlowViewModel
{
EmployeeId = entity.EmployeeId,
EmployeeName = entity.EmployeeFullName,
RollCallId = rollCallId,
RollCallDate = entity.DateGr.Date,
WorkshopId = entity.WorkshopId
};
}
public RollCallServiceViewModel GetActiveServiceByWorkshopId(long workshopId)
{
return _rollCallServiceApplication.GetActiveServiceByWorkshopId(workshopId);
}
}