357 lines
19 KiB
C#
357 lines
19 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using _0_Framework.Domain;
|
|
using _0_Framework.Domain.CustomizeCheckoutShared.Base;
|
|
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
|
|
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
|
|
using Company.Domain.CustomizeWorkshopEmployeeSettingsAgg.Entities;
|
|
using Company.Domain.CustomizeWorkshopSettingsAgg.Entities;
|
|
using Company.Domain.WorkshopAgg;
|
|
using CompanyManagment.App.Contracts.Leave;
|
|
using Newtonsoft.Json.Serialization;
|
|
using static Microsoft.EntityFrameworkCore.DbLoggerCategory.Database;
|
|
|
|
namespace Company.Domain.CustomizeWorkshopGroupSettingsAgg.Entities;
|
|
|
|
public class CustomizeWorkshopGroupSettings : BaseCustomizeEntity
|
|
{
|
|
public CustomizeWorkshopGroupSettings()
|
|
{
|
|
|
|
}
|
|
|
|
public CustomizeWorkshopGroupSettings(string groupName, double salary,
|
|
long customizeWorkshopSettingId, ICollection<CustomizeWorkshopGroupSettingsShift> customizeWorkshopGroupSettingsShifts,
|
|
FridayPay fridayPay, OverTimePay overTimePay, BaseYearsPay baseYearsPay,
|
|
BonusesPay bonusesPay, NightWorkPay nightWorkPay, MarriedAllowance marriedAllowance, ShiftPay shiftPay,
|
|
FamilyAllowance familyAllowance, LeavePay leavePay, InsuranceDeduction insuranceDeduction,
|
|
FineAbsenceDeduction fineAbsenceDeduction, LateToWork lateToWork, EarlyExit earlyExit, FridayWork fridayWork,
|
|
HolidayWork holidayWork, BreakTime breakTime, WorkshopShiftStatus workshopShiftStatus, IrregularShift irregularShift, int leavePermittedDays, ICollection<CustomizeRotatingShift> rotatingShifts) :
|
|
base(fridayPay, overTimePay, baseYearsPay, bonusesPay, nightWorkPay,
|
|
marriedAllowance, shiftPay, familyAllowance, leavePay, insuranceDeduction, fineAbsenceDeduction, lateToWork,
|
|
earlyExit, fridayWork, holidayWork, breakTime, leavePermittedDays)
|
|
{
|
|
GroupName = groupName;
|
|
Salary = salary;
|
|
CustomizeWorkshopSettingId = customizeWorkshopSettingId;
|
|
GuardGroupShifts(customizeWorkshopGroupSettingsShifts);
|
|
WorkshopShiftStatus = workshopShiftStatus;
|
|
|
|
CustomizeRotatingShifts = workshopShiftStatus == WorkshopShiftStatus.Rotating ? rotatingShifts : [];
|
|
|
|
CustomizeWorkshopGroupSettingsShifts = workshopShiftStatus == WorkshopShiftStatus.Regular ? customizeWorkshopGroupSettingsShifts : [];
|
|
|
|
IrregularShift = workshopShiftStatus == WorkshopShiftStatus.Regular ?
|
|
new IrregularShift(new TimeOnly(), new TimeOnly(), WorkshopIrregularShifts.None)
|
|
: new IrregularShift(irregularShift.StartTime, irregularShift.EndTime, irregularShift.WorkshopIrregularShifts);
|
|
}
|
|
|
|
private void GuardGroupShifts(ICollection<CustomizeWorkshopGroupSettingsShift> customizeWorkshopGroupSettingsShifts)
|
|
{
|
|
if (customizeWorkshopGroupSettingsShifts.Count >= 4)
|
|
{
|
|
throw new InvalidDataException("شما نمیتوانید بیشتر از سه ساعت کاری در کارگاه بگذارید");
|
|
}
|
|
}
|
|
|
|
public string GroupName { get; private set; }
|
|
public double Salary { get; private set; }
|
|
public long CustomizeWorkshopSettingId { get; private set; }
|
|
public WorkshopShiftStatus WorkshopShiftStatus { get; private set; }
|
|
public bool MainGroup { get; private set; }
|
|
public bool IsShiftChange { get; private set; }
|
|
public bool IsSettingChange { get; private set; }
|
|
public IrregularShift IrregularShift { get; set; }
|
|
public ICollection<CustomizeWorkshopGroupSettingsShift> CustomizeWorkshopGroupSettingsShifts { get; set; }
|
|
public ICollection<CustomizeWorkshopEmployeeSettings> CustomizeWorkshopEmployeeSettingsCollection { get; set; }
|
|
public ICollection<CustomizeRotatingShift> CustomizeRotatingShifts { get; set; }
|
|
public CustomizeWorkshopSettings CustomizeWorkshopSettings { get; set; }
|
|
|
|
|
|
|
|
public CustomizeWorkshopGroupSettings CreateMainGroup(FridayPay fridayPay,
|
|
OverTimePay overTimePay, BaseYearsPay baseYearsPay, BonusesPay bonusesPay, ShiftPay shiftPay,
|
|
NightWorkPay nightWorkPay, MarriedAllowance marriedAllowance, FamilyAllowance familyAllowance,
|
|
LeavePay leavePay, InsuranceDeduction insuranceDeduction, FineAbsenceDeduction fineAbsenceDeduction,
|
|
LateToWork lateToWork, EarlyExit earlyExit,
|
|
ICollection<CustomizeWorkshopGroupSettingsShift> customizeWorkshopGroupSettingsShifts, FridayWork fridayWork,
|
|
HolidayWork holidayWork, IrregularShift irregularShift, ICollection<CustomizeRotatingShift> rotatingShifts,
|
|
WorkshopShiftStatus workshopShiftStatus, long customizeWorkshopSettingId, BreakTime breakTime, int leavePermittedDays)
|
|
{
|
|
GuardGroupShifts(customizeWorkshopGroupSettingsShifts);
|
|
GroupName = "اصلی";
|
|
Salary = 0;
|
|
FridayPay = fridayPay;
|
|
OverTimePay = overTimePay;
|
|
BaseYearsPay = baseYearsPay;
|
|
BonusesPay = bonusesPay;
|
|
NightWorkPay = nightWorkPay;
|
|
MarriedAllowance = marriedAllowance;
|
|
ShiftPay = shiftPay;
|
|
FamilyAllowance = familyAllowance;
|
|
LeavePay = leavePay;
|
|
InsuranceDeduction = insuranceDeduction;
|
|
FineAbsenceDeduction = fineAbsenceDeduction;
|
|
LateToWork = lateToWork;
|
|
EarlyExit = earlyExit;
|
|
FridayWork = fridayWork;
|
|
HolidayWork = holidayWork;
|
|
LeavePermittedDays = leavePermittedDays;
|
|
CustomizeWorkshopGroupSettingsShifts = workshopShiftStatus == WorkshopShiftStatus.Regular ? customizeWorkshopGroupSettingsShifts : [];
|
|
|
|
CustomizeRotatingShifts = workshopShiftStatus == WorkshopShiftStatus.Rotating ? rotatingShifts : [];
|
|
|
|
IrregularShift = workshopShiftStatus == WorkshopShiftStatus.Regular ?
|
|
new IrregularShift(new TimeOnly(), new TimeOnly(), WorkshopIrregularShifts.None)
|
|
: new IrregularShift(irregularShift.StartTime, irregularShift.EndTime, irregularShift.WorkshopIrregularShifts);
|
|
WorkshopShiftStatus = workshopShiftStatus;
|
|
CustomizeWorkshopSettingId = customizeWorkshopSettingId;
|
|
MainGroup = true;
|
|
BreakTime = breakTime;
|
|
CustomizeWorkshopEmployeeSettingsCollection = [];
|
|
|
|
return this;
|
|
|
|
}
|
|
|
|
|
|
|
|
public void EditAndOverwriteOnEmployees(string groupName, double salary, IEnumerable<long> employeeIds,
|
|
FridayPay fridayPay,
|
|
OverTimePay overTimePay, BaseYearsPay baseYearsPay, BonusesPay bonusesPay, ShiftPay shiftPay,
|
|
NightWorkPay nightWorkPay, MarriedAllowance marriedAllowance, FamilyAllowance familyAllowance,
|
|
LeavePay leavePay, InsuranceDeduction insuranceDeduction, FineAbsenceDeduction fineAbsenceDeduction,
|
|
LateToWork lateToWork, EarlyExit earlyExit, FridayWork fridayWork, HolidayWork holidayWork, bool isSettingChange, int leavePermittedDays)
|
|
{
|
|
GroupName = groupName;
|
|
Salary = salary;
|
|
FridayPay = fridayPay;
|
|
OverTimePay = overTimePay;
|
|
BaseYearsPay = baseYearsPay;
|
|
BonusesPay = bonusesPay;
|
|
NightWorkPay = nightWorkPay;
|
|
MarriedAllowance = marriedAllowance;
|
|
ShiftPay = shiftPay;
|
|
FamilyAllowance = familyAllowance;
|
|
LeavePay = leavePay;
|
|
InsuranceDeduction = insuranceDeduction;
|
|
FineAbsenceDeduction = fineAbsenceDeduction;
|
|
LateToWork = lateToWork;
|
|
EarlyExit = earlyExit;
|
|
FridayWork = fridayWork;
|
|
HolidayWork = holidayWork;
|
|
IsSettingChange = isSettingChange;
|
|
LeavePermittedDays = leavePermittedDays;
|
|
|
|
|
|
var employeeSettingsShift = CustomizeWorkshopGroupSettingsShifts
|
|
.Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList();
|
|
|
|
var permittedToOverWrite = CustomizeWorkshopEmployeeSettingsCollection.Where(x => employeeIds.Contains(x.EmployeeId));
|
|
foreach (var item in permittedToOverWrite)
|
|
{
|
|
item.EditEmployees(Salary, FridayPay, OverTimePay, BaseYearsPay, BonusesPay
|
|
, NightWorkPay, MarriedAllowance, ShiftPay, FamilyAllowance, LeavePay, InsuranceDeduction, FineAbsenceDeduction,
|
|
LateToWork, EarlyExit, FridayWork, HolidayWork, IrregularShift, false, leavePermittedDays);
|
|
}
|
|
}
|
|
public void EditAndOverwriteOnAllEmployees(string groupName, double salary,
|
|
FridayPay fridayPay,
|
|
OverTimePay overTimePay, BaseYearsPay baseYearsPay, BonusesPay bonusesPay, ShiftPay shiftPay,
|
|
NightWorkPay nightWorkPay, MarriedAllowance marriedAllowance, FamilyAllowance familyAllowance,
|
|
LeavePay leavePay, InsuranceDeduction insuranceDeduction, FineAbsenceDeduction fineAbsenceDeduction,
|
|
LateToWork lateToWork, EarlyExit earlyExit, FridayWork fridayWork, HolidayWork holidayWork, bool isSettingChange, int leavePermittedDays)
|
|
{
|
|
SetValueObjects(fridayPay, overTimePay, baseYearsPay, bonusesPay
|
|
, nightWorkPay, marriedAllowance, shiftPay, familyAllowance, leavePay, insuranceDeduction, fineAbsenceDeduction,
|
|
lateToWork, earlyExit);
|
|
GroupName = groupName;
|
|
Salary = salary;
|
|
FridayWork = fridayWork;
|
|
HolidayWork = holidayWork;
|
|
IsSettingChange = isSettingChange;
|
|
LeavePermittedDays = leavePermittedDays;
|
|
|
|
|
|
var employeeSettingsShift = CustomizeWorkshopGroupSettingsShifts
|
|
.Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList();
|
|
|
|
foreach (var item in CustomizeWorkshopEmployeeSettingsCollection)
|
|
{
|
|
item.EditEmployees(Salary, FridayPay, OverTimePay, BaseYearsPay, BonusesPay
|
|
, NightWorkPay, MarriedAllowance, ShiftPay, FamilyAllowance, LeavePay, InsuranceDeduction, FineAbsenceDeduction,
|
|
LateToWork, EarlyExit, FridayWork, HolidayWork, IrregularShift, false, leavePermittedDays);
|
|
}
|
|
}
|
|
|
|
public void RemoveEmployeeFromGroup(long employeeId)
|
|
{
|
|
var currentItem = CustomizeWorkshopEmployeeSettingsCollection.FirstOrDefault(x => x.EmployeeId == employeeId);
|
|
if (currentItem != null)
|
|
CustomizeWorkshopEmployeeSettingsCollection.Remove(currentItem);
|
|
}
|
|
|
|
public void EditSimpleAndOverwriteOnEmployee(string groupName, IEnumerable<long> employeeIds,
|
|
ICollection<CustomizeWorkshopGroupSettingsShift> customizeWorkshopGroupSettingsShifts, WorkshopShiftStatus workshopShiftStatus,
|
|
IrregularShift irregularShift, BreakTime breakTime, bool isShiftChange, FridayWork fridayWork, HolidayWork holidayWork, ICollection<CustomizeRotatingShift> rotatingShifts)
|
|
{
|
|
GroupName = groupName;
|
|
CustomizeWorkshopGroupSettingsShifts = workshopShiftStatus == WorkshopShiftStatus.Regular ? customizeWorkshopGroupSettingsShifts : [];
|
|
WorkshopShiftStatus = workshopShiftStatus;
|
|
|
|
IrregularShift = workshopShiftStatus == WorkshopShiftStatus.Regular ?
|
|
new IrregularShift(new TimeOnly(), new TimeOnly(), WorkshopIrregularShifts.None)
|
|
: new IrregularShift(irregularShift.StartTime, irregularShift.EndTime, irregularShift.WorkshopIrregularShifts);
|
|
CustomizeRotatingShifts = workshopShiftStatus == WorkshopShiftStatus.Rotating ? rotatingShifts : [];
|
|
|
|
|
|
BreakTime = new BreakTime(breakTime.HasBreakTimeValue, breakTime.BreakTimeValue);
|
|
IsShiftChange = isShiftChange;
|
|
FridayWork = fridayWork;
|
|
HolidayWork = holidayWork;
|
|
|
|
//var employeeSettingsShift = customizeWorkshopGroupSettingsShifts
|
|
// .Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList();
|
|
if (isShiftChange)
|
|
{
|
|
|
|
}
|
|
|
|
var permittedToOverWrite = CustomizeWorkshopEmployeeSettingsCollection.Where(x => employeeIds.Contains(x.EmployeeId));
|
|
|
|
foreach (var item in permittedToOverWrite)
|
|
{
|
|
var newRotatingShifts = CustomizeRotatingShifts.Select(x => new CustomizeRotatingShift(x.StartTime, x.EndTime))
|
|
.ToList();
|
|
item.SimpleEdit(customizeWorkshopGroupSettingsShifts
|
|
.Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList(),
|
|
IrregularShift, WorkshopShiftStatus, BreakTime, false, FridayWork, HolidayWork, newRotatingShifts);
|
|
}
|
|
|
|
}
|
|
|
|
public void EditSimpleAndOverwriteOnAllEmployees(string groupName,
|
|
ICollection<CustomizeWorkshopGroupSettingsShift> customizeWorkshopGroupSettingsShifts,
|
|
WorkshopShiftStatus workshopShiftStatus, IrregularShift irregularShift, BreakTime breakTime, bool isShiftChange,
|
|
FridayWork fridayWork, HolidayWork holidayWork, ICollection<CustomizeRotatingShift> rotatingShifts)
|
|
{
|
|
GroupName = groupName;
|
|
CustomizeWorkshopGroupSettingsShifts = workshopShiftStatus == WorkshopShiftStatus.Regular ? customizeWorkshopGroupSettingsShifts : [];
|
|
WorkshopShiftStatus = workshopShiftStatus;
|
|
|
|
IrregularShift = workshopShiftStatus == WorkshopShiftStatus.Regular ?
|
|
new IrregularShift(new TimeOnly(), new TimeOnly(), WorkshopIrregularShifts.None)
|
|
: new IrregularShift(irregularShift.StartTime, irregularShift.EndTime, irregularShift.WorkshopIrregularShifts);
|
|
|
|
CustomizeRotatingShifts = workshopShiftStatus == WorkshopShiftStatus.Rotating ? rotatingShifts : [];
|
|
|
|
|
|
BreakTime = new BreakTime(breakTime.HasBreakTimeValue, breakTime.BreakTimeValue);
|
|
IsShiftChange = isShiftChange;
|
|
HolidayWork = holidayWork;
|
|
FridayWork = fridayWork;
|
|
|
|
//var employeeSettingsShift = customizeWorkshopGroupSettingsShifts
|
|
// .Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList();
|
|
|
|
foreach (var item in CustomizeWorkshopEmployeeSettingsCollection)
|
|
{
|
|
var newRotatingShifts = CustomizeRotatingShifts.Select(x => new CustomizeRotatingShift(x.StartTime, x.EndTime))
|
|
.ToList();
|
|
item.SimpleEdit(customizeWorkshopGroupSettingsShifts
|
|
.Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList(),
|
|
irregularShift, workshopShiftStatus, breakTime, false, FridayWork, HolidayWork, newRotatingShifts);
|
|
}
|
|
|
|
}
|
|
|
|
public void AddEmployeeSettingToGroupWithGroupData(long employeeId, long workshopId)
|
|
{
|
|
var shifts = CustomizeWorkshopGroupSettingsShifts
|
|
.Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList();
|
|
|
|
FridayPay fridayPay = new(FridayPay.FridayPayType, FridayPay.Value);
|
|
OverTimePay overTimePay = new(OverTimePay.OverTimePayType, OverTimePay.Value);
|
|
BaseYearsPay baseYearsPay = new(BaseYearsPay.BaseYearsPayType, BaseYearsPay.Value, BaseYearsPay.PaymentType);
|
|
BonusesPay bonusesPay = new(BonusesPay.BonusesPayType, BonusesPay.Value, BonusesPay.PaymentType);
|
|
NightWorkPay nightWorkPay = new(NightWorkPay.NightWorkingType, NightWorkPay.Value);
|
|
MarriedAllowance marriedAllowance = new(MarriedAllowance.MarriedAllowanceType, MarriedAllowance.Value);
|
|
ShiftPay shiftPay = new(ShiftType.None, ShiftPayType.None, 0);
|
|
FamilyAllowance familyAllowance = new(FamilyAllowance.FamilyAllowanceType, FamilyAllowance.Value);
|
|
LeavePay leavePay = new(LeavePay.LeavePayType, LeavePay.Value);
|
|
InsuranceDeduction insuranceDeduction = new(InsuranceDeduction.InsuranceDeductionType, InsuranceDeduction.Value);
|
|
FineAbsenceDeduction fineAbsenceDeduction = new(
|
|
FineAbsenceDeduction.FineAbsenceDeductionType, FineAbsenceDeduction.Value,
|
|
FineAbsenceDeduction.FineAbsenceDayOfWeekCollection
|
|
.Select(x => new FineAbsenceDayOfWeek(x.DayOfWeek)).ToList()
|
|
);
|
|
LateToWork lateToWork = new(
|
|
LateToWork.LateToWorkType,
|
|
LateToWork.LateToWorkTimeFines.Select(x => new LateToWorkTimeFine(x.Minute, x.FineMoney))
|
|
.ToList(), LateToWork.Value
|
|
);
|
|
EarlyExit earlyExit = new(EarlyExit.EarlyExitType,
|
|
EarlyExit.EarlyExitTimeFines.Select(x => new EarlyExitTimeFine(x.Minute, x.FineMoney))
|
|
.ToList(), EarlyExit.Value);
|
|
IrregularShift irregularShift = new(IrregularShift.StartTime, IrregularShift.EndTime,
|
|
IrregularShift.WorkshopIrregularShifts);
|
|
BreakTime breakTime = new(BreakTime.HasBreakTimeValue, BreakTime.BreakTimeValue);
|
|
|
|
var rotatingShift = CustomizeRotatingShifts.Select(x => new CustomizeRotatingShift(x.StartTime, x.EndTime)).ToList();
|
|
|
|
var customizeWorkshopEmployeeSettings = new CustomizeWorkshopEmployeeSettings(fridayPay, overTimePay, baseYearsPay, bonusesPay, nightWorkPay,
|
|
marriedAllowance, shiftPay, familyAllowance, leavePay, insuranceDeduction, fineAbsenceDeduction, lateToWork,
|
|
earlyExit, employeeId, workshopId, Salary, id, shifts, FridayWork, HolidayWork, irregularShift,
|
|
WorkshopShiftStatus, breakTime, LeavePermittedDays, rotatingShift);
|
|
|
|
CustomizeWorkshopEmployeeSettingsCollection.Add(customizeWorkshopEmployeeSettings);
|
|
}
|
|
|
|
|
|
private void SetValueObjects(FridayPay fridayPay, OverTimePay overTimePay, BaseYearsPay baseYearsPay,
|
|
BonusesPay bonusesPay
|
|
, NightWorkPay nightWorkPay, MarriedAllowance marriedAllowance, ShiftPay shiftPay,
|
|
FamilyAllowance familyAllowance, LeavePay leavePay, InsuranceDeduction insuranceDeduction,
|
|
FineAbsenceDeduction fineAbsenceDeduction,
|
|
LateToWork lateToWork, EarlyExit earlyExit)
|
|
{
|
|
FridayPay = new(fridayPay.FridayPayType, fridayPay.Value);
|
|
OverTimePay = new(overTimePay.OverTimePayType, overTimePay.Value);
|
|
BaseYearsPay = new(baseYearsPay.BaseYearsPayType, baseYearsPay.Value, baseYearsPay.PaymentType);
|
|
BonusesPay = new(bonusesPay.BonusesPayType, bonusesPay.Value, bonusesPay.PaymentType);
|
|
NightWorkPay = new(nightWorkPay.NightWorkingType, nightWorkPay.Value);
|
|
MarriedAllowance = new(marriedAllowance.MarriedAllowanceType, marriedAllowance.Value);
|
|
ShiftPay = new(shiftPay.ShiftType, shiftPay.ShiftPayType, shiftPay.Value);
|
|
FamilyAllowance = new(familyAllowance.FamilyAllowanceType, familyAllowance.Value);
|
|
LeavePay = new(leavePay.LeavePayType, leavePay.Value);
|
|
InsuranceDeduction = new(insuranceDeduction.InsuranceDeductionType, insuranceDeduction.Value);
|
|
FineAbsenceDeduction = new(
|
|
fineAbsenceDeduction.FineAbsenceDeductionType, fineAbsenceDeduction.Value,
|
|
fineAbsenceDeduction.FineAbsenceDayOfWeekCollection
|
|
.Select(x => new FineAbsenceDayOfWeek(x.DayOfWeek)).ToList()
|
|
);
|
|
LateToWork = new(
|
|
lateToWork.LateToWorkType,
|
|
lateToWork.LateToWorkTimeFines.Select(x => new LateToWorkTimeFine(x.Minute, x.FineMoney))
|
|
.ToList(), lateToWork.Value
|
|
);
|
|
EarlyExit = new(earlyExit.EarlyExitType,
|
|
earlyExit.EarlyExitTimeFines.Select(x => new EarlyExitTimeFine(x.Minute, x.FineMoney))
|
|
.ToList(), earlyExit.Value);
|
|
}
|
|
|
|
|
|
//public void OverWriteEmployeesShiftAndSalary(IEnumerable<long> ids,ICollection<RollCallWorkshopEmployeeSettingsShift> employeeSettingsShifts,double salary)
|
|
//{
|
|
// var permittedToOverWrite= RollCallWorkshopEmployeeSettingsCollection.Where(x => ids.Contains(x.id));
|
|
// foreach (var item in permittedToOverWrite)
|
|
// {
|
|
// item.OverWriteSalaryAndShift(employeeSettingsShifts, salary);
|
|
// }
|
|
//}
|
|
|
|
|
|
}
|