Files
Backend-Api/ServiceHost/Areas/Client/Pages/Company/WorkFlow/RollCall.cshtml.cs
2024-12-23 20:39:04 +03:30

277 lines
10 KiB
C#

using _0_Framework.Application;
using CompanyManagment.App.Contracts.Leave;
using CompanyManagment.App.Contracts.RollCall;
using CompanyManagment.App.Contracts.RollCallService;
using CompanyManagment.App.Contracts.Workshop;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Security.Claims;
using WorkFlow.Application.Contracts.RollCallConfirmedAbsence;
using WorkFlow.Application.Contracts.RollCallConfirmedWithoutLunchBreak;
using WorkFlow.Application.Contracts.Shared;
using WorkFlow.Application.Contracts.WorkFlow;
namespace ServiceHost.Areas.Client.Pages.Company.WorkFlow
{
public class RollCallModel : PageModel
{
private readonly IPasswordHasher _passwordHasher;
private readonly IWorkshopApplication _workshopApplication;
private readonly ILeaveApplication _leaveApplication;
private readonly IWorkFlowApplication _workflowApplication;
private readonly IAuthHelper _authHelper;
private readonly IRollCallApplication _rollCallApplication;
private readonly IRollCallServiceApplication _rollCallServiceApplication;
private readonly IHttpContextAccessor _contextAccessor;
private readonly long _workshopId;
public string WorkshopFullName;
public int CountWorkFlowCut;
public int CountWorkFlowAbsent;
public int CountWorkFlowLunchBreak;
public int CountUndefinedRollCalls;
public int CountRollCallsOverlappingLeave;
public int Count;
public RollCallModel(IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, IAuthHelper authHelper, IWorkFlowApplication workflowApplication, IRollCallApplication rollCallApplication, IRollCallServiceApplication rollCallServiceApplication, IHttpContextAccessor contextAccessor, ILeaveApplication leaveApplication)
{
_passwordHasher = passwordHasher;
_workshopApplication = workshopApplication;
_authHelper = authHelper;
_workflowApplication = workflowApplication;
_rollCallApplication = rollCallApplication;
_rollCallServiceApplication = rollCallServiceApplication;
_contextAccessor = contextAccessor;
_leaveApplication = leaveApplication;
var workshopHash = _contextAccessor.HttpContext?.User.FindFirstValue("WorkshopSlug");
_workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (_workshopId < 1)
throw new InvalidDataException("اختلال در کارگاه");
}
public IActionResult OnGet()
{
var hasRollCallService = _rollCallServiceApplication.GetActiveServiceByWorkshopId(_workshopId) != null;
if (!hasRollCallService)
return Redirect("/Client/Company/WorkFlow");
var workshopInfo = _workshopApplication.GetWorkshopInfo(_workshopId);
WorkshopFullName = workshopInfo.WorkshopFullName;
CountWorkFlowCut = _workflowApplication.GetCountCutRollCallByBgService(_workshopId);
//CountWorkFlowAbsent = _workflowApplication.GetRollCallAbsentsWorkFlows(accountId, workshopId);
CountWorkFlowAbsent = _workflowApplication.GetAbsentRollCallWorkFlows(_workshopId).Count();
CountWorkFlowLunchBreak = _workflowApplication.GetEmployeesWithoutLunchBreak(_workshopId).Count();
CountUndefinedRollCalls = _workflowApplication.GetUndefinedRollCalls(_workshopId).Count();
CountRollCallsOverlappingLeave = _workflowApplication.GetRollCallsOverlappingLeaves(_workshopId).Count();
return Page();
}
public IActionResult OnGetCountWorkFlowOfAbsentAndCut()
{
var countWorkFlowCut = _workflowApplication.GetCountCutRollCallByBgService(_workshopId);
//CountWorkFlowAbsent = _workflowApplication.GetRollCallAbsentsWorkFlows(accountId, workshopId);
var countWorkFlowAbsent = _workflowApplication.GetAbsentRollCallWorkFlows(_workshopId).Count();
var countWorkFlowLunchBreak = _workflowApplication.GetEmployeesWithoutLunchBreak(_workshopId).Count();
var countUndefinedRollCalls = _workflowApplication.GetUndefinedRollCalls(_workshopId).Count();
var countRollCallsOverlappingLeave = _workflowApplication.GetRollCallsOverlappingLeaves(_workshopId).Count();
return new JsonResult(new
{
success = true,
dataCut = countWorkFlowCut,
dataAbsent = countWorkFlowAbsent,
dataLunchBreak = countWorkFlowLunchBreak,
dataUndefined = countUndefinedRollCalls,
dataOverlappingLeave = countRollCallsOverlappingLeave,
});
}
public IActionResult OnGetRollCallWorkFlowsCut()
{
var resultData = _workflowApplication.GetRollCallWorkFlowsCutByBgService(_workshopId);
foreach (var item in resultData)
{
item.RollCallWorkFlowPerDayCount = item.RollCallWorkFlowPerDayViewModels.Count;
item.RollCallWorkFlowPerDayViewModels = new List<RollCallWorkFlowViewModel>();
}
return new JsonResult(new
{
success = true,
data = resultData
});
}
public IActionResult OnGetEmployeeListByWorkFlowsCut(DateTime date)
{
var resultData = _workflowApplication.GetRollCallWorkFlowsCutByBgServiceByDate(_workshopId, date);
return new JsonResult(new
{
success = true,
data = resultData
});
}
public IActionResult OnGetRollCallWorkFlowsAbsents()
{
var resultData = _workflowApplication.GetAbsentRollCallWorkFlows(_workshopId);
foreach (var item in resultData)
{
item.RollCallWorkFlowPerDayCount = item.RollCallWorkFlowPerDayViewModels.Count;
item.RollCallWorkFlowPerDayViewModels = new List<RollCallWorkFlowViewModel>();
}
return new JsonResult(new
{
success = true,
data = resultData
});
}
public IActionResult OnGetEmployeeListByWorkFlowsAbsents(DateTime date)
{
var resultData = _workflowApplication.GetAbsentRollCallWorkFlowsByDate(_workshopId, date);
return new JsonResult(new
{
success = true,
data = resultData
});
}
public IActionResult OnGetRollCallWorkFlowEmployeesWithoutLunchBreak()
{
var resultData = _workflowApplication.GetEmployeesWithoutLunchBreak(_workshopId);
foreach (var item in resultData)
{
item.Count = item.RollCallConfirmedWithoutLunchList.Count;
item.RollCallConfirmedWithoutLunchList = new List<RollCallConfirmedWithoutLunchBreakViewModel>();
}
return new JsonResult(new
{
success = true,
data = resultData
});
}
public IActionResult OnGetEmployeeListByWorkFlowsEmployeesWithoutLunchBreak(DateTime date)
{
var resultData = _workflowApplication.GetEmployeesWithoutLunchBreakByDate(_workshopId, date);
return new JsonResult(new
{
success = true,
data = resultData
});
}
public IActionResult OnGetUndefinedRollCalls()
{
var resultData = _workflowApplication.GetUndefinedRollCalls(_workshopId);
foreach (var item in resultData)
{
item.RollCallWorkFlowPerDayCount = item.RollCallWorkFlowPerDayViewModels.Count;
item.RollCallWorkFlowPerDayViewModels = new List<RollCallWorkFlowViewModel>();
}
return new JsonResult(new
{
success = true,
data = resultData
});
}
public IActionResult OnGetEmployeeListByUndefinedRollCalls(DateTime date)
{
var resultData = _workflowApplication.GetUndefinedRollCallsByDate(_workshopId, date);
return new JsonResult(new
{
success = true,
data = resultData
});
}
public IActionResult OnGetOverlappingLeaves()
{
var resultData = _workflowApplication.GetRollCallsOverlappingLeaves(_workshopId);
foreach (var item in resultData)
{
item.EmployeesListCount = item.EmployeesList.Count;
item.EmployeesList = new List<WorkFlowEmployeeWithRollCallOnLeaveViewModel>();
}
return new JsonResult(new
{
success = true,
data = resultData
});
}
public IActionResult OnGetEmployeeListByOverlappingLeaveByDate(DateTime date)
{
var resultData = _workflowApplication.GetRollCallsOverlappingLeaveByDate(_workshopId, date);
return new JsonResult(new
{
success = true,
data = resultData
});
}
public IActionResult OnGetLeaveCreate(CreateLeave command)
{
return Partial("LeaveCreate", command);
}
public IActionResult OnPostConfirmedAbsence(long employeeId, string absenceDate)
{
long accountId = _authHelper.CurrentAccountId();
var command = new CreateRollCallConfirmedAbsence
{
WorkshopId = _workshopId,
ConfirmedByAccountId = accountId,
EmployeeId = employeeId,
AbsenceDate = absenceDate
};
var result = _workflowApplication.CreateRollCallConfirmedAbsence(command);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message
});
}
public IActionResult OnPostConfirmCutByBgService(long rollCallId)
{
var result = _rollCallApplication.SetModifyTypeToEditByEmployer(rollCallId);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message
});
}
public IActionResult OnPostConfirmedWithoutLunchBreak(long rollCallId)
{
var command = new CreateRollCallConfirmedWithoutLunchBreak()
{
RollCallId = rollCallId
};
var result = _workflowApplication.CreateRollCallConfirmedWithoutLunchBreak(command);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message
});
}
}
}