Files
Backend-Api/ServiceHost/Areas/Client/Pages/Company/RollCall/Grouping.cshtml.cs
2025-04-30 14:55:38 +03:30

402 lines
17 KiB
C#

using _0_Framework.Application;
using CompanyManagment.App.Contracts.Workshop;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Security.Claims;
using Company.Domain.CustomizeWorkshopGroupSettingsAgg;
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
using CompanyManagment.App.Contracts.Employee;
using System.Text.RegularExpressions;
using Microsoft.AspNetCore.Mvc.Formatters;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using _0_Framework.Infrastructure;
using CompanyManagment.App.Contracts.RollCallEmployee;
using Company.Domain.EmployeeAgg;
using CompanyManagement.Infrastructure.Excel.CWS;
using CompanyManagement.Infrastructure.Excel.EmployeeBankInfo;
using CompanyManagment.App.Contracts.RollCall;
namespace ServiceHost.Areas.Client.Pages.Company.RollCall
{
[Authorize]
[NeedsPermission(SubAccountPermissionHelper.GroupingOperationsPermissionCode)]
public class GroupingModel : PageModel
{
private readonly IPasswordHasher _passwordHasher;
private readonly IWorkshopApplication _workshopApplication;
private readonly IEmployeeApplication _employeeApplication;
private readonly IRollCallEmployeeApplication _rollCallEmployeeApplication;
private readonly ICustomizeWorkshopSettingsApplication _customizeWorkshopSettingsApplication;
private readonly IHttpContextAccessor _contextAccessor;
private readonly IAuthHelper _authHelper;
private readonly IRollCallApplication _rollCallApplication;
public bool GroupedAllEmployees;
private readonly long _workshopId;
public string WorkshopFullName;
public CustomizeWorkshopSettingsViewModel RollCallWorkshopSettings;
public List<RollCallEmployeeViewModel> RollCallEmployeeList;
public GroupingModel(IPasswordHasher passwordHasher, IWorkshopApplication workshopApplication, ICustomizeWorkshopSettingsApplication rollCallWorkshopSettingsApplication, IEmployeeApplication employeeApplication, IHttpContextAccessor contextAccessor, IAuthHelper authHelper, IRollCallEmployeeApplication rollCallEmployeeApplication, IRollCallApplication rollCallApplication)
{
_passwordHasher = passwordHasher;
_workshopApplication = workshopApplication;
_customizeWorkshopSettingsApplication = rollCallWorkshopSettingsApplication;
_employeeApplication = employeeApplication;
_contextAccessor = contextAccessor;
_authHelper = authHelper;
_rollCallEmployeeApplication = rollCallEmployeeApplication;
_rollCallApplication = rollCallApplication;
var workshopHash = _contextAccessor.HttpContext?.User.FindFirstValue("WorkshopSlug");
_workshopId = _passwordHasher.SlugDecrypt(workshopHash);
if (_workshopId < 1)
throw new InvalidDataException("اختلال در کارگاه");
}
public bool IrregularWorkshopHaveGroupedAllPersonnelValidation(long workshopId)
{
//var isWorkshopIrregular = _customizeWorkshopSettingsApplication
// .GetWorkshopSettingsDetails(workshopId).WorkshopShiftStatus == WorkshopShiftStatus.Irregular;
//if (isWorkshopIrregular == false)
// return true;
var employeesWithoutGroup = _customizeWorkshopSettingsApplication.HasAnyEmployeeWithoutGroup(workshopId);
if (employeesWithoutGroup)
return false;
return true;
}
public IActionResult OnGet()
{
//if (_workshopId != 11)
// return Redirect("/Client/Company/RollCall");
RollCallEmployeeList = _rollCallEmployeeApplication.GetEmployeeRollCalls(_workshopId);
var account = _authHelper.CurrentAccountInfo();
GroupedAllEmployees = IrregularWorkshopHaveGroupedAllPersonnelValidation(_workshopId);
var workshop = _workshopApplication.GetWorkshopInfo(_workshopId);
WorkshopFullName = workshop.WorkshopFullName;
RollCallWorkshopSettings = _customizeWorkshopSettingsApplication.GetWorkshopSettingsByWorkshopId(_workshopId, account);
if (RollCallWorkshopSettings.Id == 0)
{
return Redirect("/Client/Company/RollCall");
}
return Page();
}
public IActionResult OnGetWorkshopSettingsDataAjax()
{
var account = _authHelper.CurrentAccountInfo();
var result = _customizeWorkshopSettingsApplication.GetWorkshopSettingsByWorkshopId(_workshopId, account);
return new JsonResult(new
{
isSuccedded = true,
data = result
});
}
public IActionResult OnGetEmployeesGroupAjax(long groupId)
{
var result = _customizeWorkshopSettingsApplication.GetEmployeeSettingsByGroupSettingsId(groupId);
return new JsonResult(new
{
success = true,
data = result
});
}
public IActionResult OnGetEmployeesGroupSettingsByEmployeeId(long employeeId)
{
var result = _customizeWorkshopSettingsApplication.GetEmployeesGroupSettingsByEmployeeId(employeeId, _workshopId);
return new JsonResult(new
{
success = true,
data = result
});
}
public IActionResult OnGetCreateGroup(long workshopSettingId)
{
var command = new CreateCustomizeWorkshopGroupSettings
{
CustomizeWorkshopSettingId = workshopSettingId
};
return Partial("ModalCreateGroup", command);
}
public IActionResult OnPostCreateGroup(CreateCustomizeWorkshopGroupSettings command)
{
command.Salary = "0";
OperationResult result = _customizeWorkshopSettingsApplication.CreateGroupSettingsByRollCallWorkshopSettingId(command);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message
});
}
public IActionResult OnGetEditGroup(long groupId)
{
var command = _customizeWorkshopSettingsApplication.GetCustomizeWorkshopGroupSettingsDetails(groupId);
command.IsShiftChanged = _customizeWorkshopSettingsApplication
.GetEmployeeSettingsByGroupSettingsId(groupId)
.Any(x => x.IsSettingChanged == true);
return Partial("ModalEditGroup", command);
}
public IActionResult OnPostEditGroup(EditCustomizeWorkshopGroupSettings command)
{
var result = _customizeWorkshopSettingsApplication.EditSimpleRollCallGroupSetting(command);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message
});
}
public IActionResult OnGetEmployeeIsChangeList(long groupId)
{
var result = _customizeWorkshopSettingsApplication.GetEmployeeSettingsByGroupSettingsId(groupId)
.Where(x => x.IsSettingChanged).ToList();
return new JsonResult(new
{
success = true,
data = result
});
}
public IActionResult OnPostDeleteGroup(long groupId)
{
var result = _customizeWorkshopSettingsApplication.RemoveGroupSettings(groupId);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message
});
}
public IActionResult OnGetEmployeeGroupAjax(long rollCallWorkshopSettingId)
{
var result = _customizeWorkshopSettingsApplication.GetEmployeesWithoutGroup(rollCallWorkshopSettingId);
return new JsonResult(new
{
success = true,
data = result
});
}
public IActionResult OnGetCreateEmployee(long workshopSettingId, long groupId)
{
var command = new CreateCustomizeEmployeeSettings()
{
WorkshopSettingId = workshopSettingId,
GroupId = groupId
};
return Partial("ModalAddEmployeeToGroup", command);
}
public IActionResult OnPostCreateEmployee(CreateCustomizeEmployeeSettings command)
{
command.WorkshopId = _workshopId;
OperationResult result = _customizeWorkshopSettingsApplication.CreateEmployeeSettings(command);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message
});
}
public IActionResult OnPostRemoveEmployee(long employeeId, long groupId)
{
OperationResult result = _customizeWorkshopSettingsApplication.RemoveEmployeeFromRollCallWorkshopGroup(employeeId, groupId, _workshopId);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message
});
}
public IActionResult OnGetEditEmployee(long groupId, List<long> employeeId)
{
var employee = _customizeWorkshopSettingsApplication.GetByEmployeeIdAndWorkshopIdIncludeGroupSettings(_workshopId, employeeId.First());
var command = new EditCustomizeEmployeeSettings()
{
Id = employee.Id,
EmployeeIds = employeeId,
EmployeeFullName = employee.EmployeeFullName,
Salary = employee.Salary.ToMoney(),
NameGroup = employee.Name,
ShiftViewModel = employee.RollCallWorkshopShifts,
BreakTime = employee.BreakTime,
WorkshopShiftStatus = employee.WorkshopShiftStatus,
IrregularShift = employee.IrregularShift,
FridayWork = employee.FridayWork,
HolidayWork = employee.HolidayWork,
CustomizeRotatingShifts = employee.CustomizeRotatingShiftsViewModels
};
return Partial("ModalEditEmployeeFromGroup", command);
}
public IActionResult OnGetEmployeesHaveToChange(long groupId, bool isChange)
{
var result = _customizeWorkshopSettingsApplication.GetEmployeeSettingsByGroupSettingsId(groupId)
.Where(x => x.IsSettingChanged = isChange).ToList();
return new JsonResult(new
{
success = true,
data = result
});
}
public IActionResult OnPostChangeEditEmployee(EditCustomizeEmployeeSettings command, List<ReCalculateRollCallValues> reCalculateCommand)
{
command.WorkshopId = _workshopId;
OperationResult result = _customizeWorkshopSettingsApplication.EditSimpleRollCallEmployeeSetting(command, reCalculateCommand);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message
});
}
public IActionResult OnGetEmployeeSettingsHasChangedValue(EditCustomizeEmployeeSettings command)
{
var employeeChange = _customizeWorkshopSettingsApplication.CheckEmployeeShiftHasChanged(command);
return new JsonResult(new
{
data = employeeChange
});
}
public IActionResult OnPostReCalculateValues(List<ReCalculateRollCallValues> command)
{
var result = _rollCallApplication.RecalculateValues(_workshopId, command);
return new JsonResult(new
{
success = result.IsSuccedded,
message = result.Message
});
}
public IActionResult OnGetDownloadExcel()
{
var groupData = _customizeWorkshopSettingsApplication.GetWorkshopSettingsByWorkshopIdForAdmin(_workshopId);
var data = groupData.GroupSettings.Select(x => new CustomizeWorkshopGroupExcelViewModel()
{
Name = x.GroupName,
Salary = ((int)x.Salary).ToString(),
ShiftType = x.WorkshopShiftStatus switch
{
WorkshopShiftStatus.Irregular => "مختلط",
WorkshopShiftStatus.Regular => "منظم",
WorkshopShiftStatus.Rotating => "گردشی",
_ => throw new ArgumentOutOfRangeException()
},
Shifts = x.WorkshopShiftStatus switch
{
WorkshopShiftStatus.Irregular => x.IrregularShift.WorkshopIrregularShifts switch
{
WorkshopIrregularShifts.None => "نامشخص",
WorkshopIrregularShifts.TwelveThirtySix => "12/36",
WorkshopIrregularShifts.TwelveTwentyFour => "12/24",
WorkshopIrregularShifts.TwentyFourTwentyFour => "24/24",
_ => throw new ArgumentOutOfRangeException()
},
WorkshopShiftStatus.Regular => string.Join(Environment.NewLine,
x.RollCallWorkshopShifts.Select(s => s.StartTime.ToString() + " - " + s.EndTime).ToList()),
WorkshopShiftStatus.Rotating => string.Join(Environment.NewLine,
x.CustomizeRotatingShiftsViewModels.Select(s => s.StartTime.ToString() + " - " + s.EndTime)
.ToList()),
_ => throw new ArgumentOutOfRangeException()
},
EmployeeSettings = x.RollCallWorkshopEmployeesSettings.Select(e => new CustomizeWorkshopEmployeeExcelViewModel
{
Shifts = e.WorkshopShiftStatus switch
{
WorkshopShiftStatus.Irregular => e.IrregularShift.WorkshopIrregularShifts switch
{
WorkshopIrregularShifts.None => "نامشخص",
WorkshopIrregularShifts.TwelveThirtySix => "12/36",
WorkshopIrregularShifts.TwelveTwentyFour => "12/24",
WorkshopIrregularShifts.TwentyFourTwentyFour => "24/24",
_ => throw new ArgumentOutOfRangeException()
},
WorkshopShiftStatus.Regular => string.Join(Environment.NewLine,
e.RollCallWorkshopShifts.Select(s => s.StartTime.ToString() + " - " + s.EndTime).ToList()),
WorkshopShiftStatus.Rotating => string.Join(Environment.NewLine,
e.CustomizeRotatingShiftsViewModels.Select(s => s.StartTime.ToString() + " - " + s.EndTime)
.ToList()),
_ => throw new ArgumentOutOfRangeException()
},
Salary = ((int)e.Salary).ToString(),
ShiftType = e.WorkshopShiftStatus switch
{
WorkshopShiftStatus.Irregular => "مختلط",
WorkshopShiftStatus.Regular => "منظم",
WorkshopShiftStatus.Rotating => "گردشی",
_ => throw new ArgumentOutOfRangeException()
},
LeavePermitted = e.LeavePermittedDays,
Name = e.Name
}).ToList(),
}).ToList();
var bytes = CustomizeWorkshopGroupSettingExcelGenerator.Generate(data);
return File(bytes,
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
$"اطلاعات گروهبندی.xlsx");
}
// public IActionResult OnGetGroupingSetting(long groupId)
// {
// var command = _customizeWorkshopSettingsApplication.GetCustomizeWorkshopGroupSettingsDetails(groupId);
// return Partial("ModalSettingGroup", command);
//}
// public IActionResult OnPostGroupingSetting(EditCustomizeWorkshopGroupSettings command)
// {
// command.EmployeeIds = _customizeWorkshopSettingsApplication.GetEmployeeSettingsByGroupSettingsId(command.Id).Select(x => x.EmployeeId).ToList();
// OperationResult result = _customizeWorkshopSettingsApplication.EditRollCallGroupSetting(command);
// return new JsonResult(new
// {
// isSuccess = result.IsSuccedded,
// message = result.Message
// });
//}
//public IActionResult OnGetGroupingEmployeeSetting(long customizeEmployeeId, List<long> employeeId)
// {
// var command = _customizeWorkshopSettingsApplication.GetCustomizeEmployeeSettingsDetails(customizeEmployeeId);
// command.EmployeeIds = employeeId;
// return Partial("ModalSettingGroupEmployee", command);
// }
// public IActionResult OnPostGroupingEmployeeSetting(EditCustomizeEmployeeSettings command)
// {
// command.WorkshopId = _workshopId;
// OperationResult result = _customizeWorkshopSettingsApplication.EditRollCallEmployeeSettings(command);
// return new JsonResult(new
// {
// isSuccess = result.IsSuccedded,
// message = result.Message
// });
//}
}
}