Files
Backend-Api/ServiceHost/Areas/Client/Pages/Company/RollCall/CurrentDay.cshtml.cs
2025-01-26 18:44:39 +03:30

169 lines
6.2 KiB
C#

using _0_Framework.Application;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
using CompanyManagment.App.Contracts.RollCall;
using CompanyManagment.App.Contracts.RollCallEmployee;
using CompanyManagment.App.Contracts.Workshop;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Security.Claims;
using _0_Framework.Infrastructure;
namespace ServiceHost.Areas.Client.Pages.Company.RollCall
{
[Authorize]
[NeedsPermission(SubAccountPermissionHelper.ListCurrentDayRollCallsPermissionCode)]
public class CurrentDayModel : PageModel
{
public CurrentDayRollCall RollCallViewModels;
public string WorkshopFullName;
public string NowDate;
private readonly IPasswordHasher _passwordHasher;
private readonly IWorkshopApplication _workshopApplication;
private readonly IRollCallEmployeeApplication _rollCallEmployeeApplication;
private readonly IRollCallApplication _rollCallApplication;
private readonly IAuthHelper _authHelper;
private readonly ICustomizeWorkshopSettingsApplication _customizeWorkshopSettingsApplication;
public CurrentDayModel(IPasswordHasher passwordHasher, IRollCallEmployeeApplication rollCallEmployeeApplication, IRollCallApplication rollCallApplication, IWorkshopApplication workshopApplication, ICustomizeWorkshopSettingsApplication customizeWorkshopSettingsApplication, IAuthHelper authHelper)
{
_passwordHasher = passwordHasher;
_rollCallEmployeeApplication = rollCallEmployeeApplication;
_rollCallApplication = rollCallApplication;
_workshopApplication = workshopApplication;
_customizeWorkshopSettingsApplication = customizeWorkshopSettingsApplication;
_authHelper = authHelper;
}
public override void OnPageHandlerExecuting(PageHandlerExecutingContext context)
{
var auth = _authHelper.CurrentAccountInfo();
var workshopId = _passwordHasher.SlugDecrypt(auth.WorkshopSlug);
if (IrregularWorkshopHaveGroupedAllPersonnelValidation(workshopId) == false)
context.HttpContext.Response.Redirect("./grouping");
base.OnPageHandlerExecuting(context);
}
public bool IrregularWorkshopHaveGroupedAllPersonnelValidation(long workshopId)
{
var employeesWithoutGroup= _customizeWorkshopSettingsApplication.HasAnyEmployeeWithoutGroup(workshopId);
if (employeesWithoutGroup)
return false;
return true;
}
public IActionResult OnGet()
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (workshopId > 0)
{
if (_rollCallEmployeeApplication.GetByWorkshopId(workshopId).Any())
{
WorkshopFullName = _workshopApplication.GetDetails(workshopId).WorkshopFullName;
var now = DateTime.Now.ToFarsi();
NowDate = now;
var searchModel = new RollCallSearchModel()
{
WorkshopId = workshopId,
};
RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId);
return Page();
}
else
{
return Redirect("/Client/Company/RollCall");
}
}
else
{
return NotFound();
}
}
public IActionResult OnGetCurrentDayAjax(string type)
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (workshopId > 0)
{
RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId);
List<object> data = new();
switch (type)
{
case "all":
data.AddRange(RollCallViewModels.PresentEmployees);
break;
case "absent":
data.AddRange(RollCallViewModels.AbsentEmployees.Where(x => !x.HasLeave));
break;
case "leave":
data.AddRange(RollCallViewModels.AbsentEmployees.Where(x => x.HasLeave));
break;
default:
break;
}
return new JsonResult(new
{
isSuccess = true,
data = data
});
}
else
{
return new JsonResult(new
{
isSuccess = false,
message = "داده ای یافت نشده!"
});
}
}
public IActionResult OnGetCurrentAjaxCount()
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (workshopId > 0)
{
RollCallViewModels = _rollCallApplication.GetWorkshopCurrentDayRollCalls(workshopId);
var absentEmployeesCount = RollCallViewModels.AbsentEmployees.Count(x => !x.HasLeave);
var leaveEmployeesCount = RollCallViewModels.AbsentEmployees.Count(x => x.HasLeave);
return new JsonResult(new
{
isSuccess = true,
absentEmployeesCount = absentEmployeesCount,
leaveEmployeesCount = leaveEmployeesCount
});
}
else
{
return new JsonResult(new
{
isSuccess = false,
message = "داده ای یافت نشده!"
});
}
}
}
}