Merge branch 'master' into API

This commit is contained in:
MahanCh
2025-07-07 14:10:46 +03:30
96 changed files with 35704 additions and 13592 deletions

View File

@@ -880,7 +880,15 @@ public static class Tools
}
}
numbers = Convert.ToInt32(num);
try
{
numbers = Convert.ToInt32(num);
}
catch (Exception e)
{
return 0;
}
return numbers;
}
public static string ToFarsiMonthByNumber(this string value)

View File

@@ -1,4 +1,6 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
using Microsoft.EntityFrameworkCore.Design.Internal;
@@ -12,8 +14,7 @@ public class BaseCustomizeEntity : EntityBase
}
public BaseCustomizeEntity(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,int leavePermittedDays)
FamilyAllowance familyAllowance, LeavePay leavePay, InsuranceDeduction insuranceDeduction, FineAbsenceDeduction fineAbsenceDeduction, LateToWork lateToWork, EarlyExit earlyExit, HolidayWork holidayWork, BreakTime breakTime,int leavePermittedDays,List<WeeklyOffDay> weeklyOffDays)
{
FridayPay = fridayPay;
@@ -29,10 +30,10 @@ public class BaseCustomizeEntity : EntityBase
FineAbsenceDeduction = fineAbsenceDeduction;
LateToWork = lateToWork;
EarlyExit = earlyExit;
FridayWork = fridayWork;
HolidayWork = holidayWork;
BreakTime = breakTime;
LeavePermittedDays = leavePermittedDays;
WeeklyOffDays = weeklyOffDays.Select(x=> new WeeklyOffDay(x.DayOfWeek)).ToList();
}
/// <summary>
@@ -117,4 +118,28 @@ public class BaseCustomizeEntity : EntityBase
public BreakTime BreakTime { get; protected set; }
public List<WeeklyOffDay> WeeklyOffDays { get; set; }
public void FridayWorkToWeeklyDayOfWeek()
{
if (FridayWork == FridayWork.Default && !WeeklyOffDays.Any(x => x.DayOfWeek == DayOfWeek.Friday))
{
WeeklyOffDays.Add(new WeeklyOffDay(DayOfWeek.Friday));
}
}
}
public class WeeklyOffDay
{
public WeeklyOffDay(DayOfWeek dayOfWeek)
{
DayOfWeek = dayOfWeek;
}
public long Id { get; set; }
public DayOfWeek DayOfWeek { get; set; }
public long ParentId { get; set; }
}

View File

@@ -59,6 +59,16 @@ public interface ICheckoutRepository : IRepository<long, Checkout>
OperationResult DeleteAllCheckouts(List<long> ids);
OperationResult DeleteCheckout(long id);
List<long> CheckHasSignature(List<long> ids);
/// <summary>
/// لیست تصفیه حساب
/// جدید
///
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<List<CheckoutViewModel>> SearchCheckoutOptimized(CheckoutSearchModel searchModel);
Task<List<CheckoutViewModel>> SearchForMainCheckout(CheckoutSearchModel searchModel);
#endregion

View File

@@ -27,12 +27,13 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity
FineAbsenceDeduction fineAbsenceDeduction, LateToWork lateToWork, EarlyExit earlyExit, long employeeId,
long workshopId, double salary, long customizeWorkshopGroupSettingId,
ICollection<CustomizeWorkshopEmployeeSettingsShift> customizeWorkshopEmployeeSettingsShifts,
FridayWork fridayWork,
HolidayWork holidayWork, IrregularShift irregularShift, WorkshopShiftStatus workshopShiftStatus, BreakTime breakTime, int leavePermittedDays, ICollection<CustomizeRotatingShift> rotatingShifts) :
HolidayWork holidayWork, IrregularShift irregularShift, WorkshopShiftStatus workshopShiftStatus, BreakTime breakTime,
int leavePermittedDays, ICollection<CustomizeRotatingShift> rotatingShifts
, List<WeeklyOffDay> weeklyOffDays) :
base(fridayPay, overTimePay,
baseYearsPay, bonusesPay, nightWorkPay,
marriedAllowance, shiftPay, familyAllowance, leavePay, insuranceDeduction, fineAbsenceDeduction, lateToWork,
earlyExit, fridayWork, holidayWork, breakTime, leavePermittedDays)
earlyExit, holidayWork, breakTime, leavePermittedDays,weeklyOffDays)
{
CustomizeWorkshopGroupSettingId = customizeWorkshopGroupSettingId;
IsSettingChanged = false;
@@ -82,7 +83,6 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity
/// <param name="fineAbsenceDeduction">جریمه غیبت</param>
/// <param name="lateToWork">تاخیر در ورود</param>
/// <param name="earlyExit">تعجیل درخروج</param>
/// <param name="fridayWork">آیا در روز های جمعه موظف به کار است</param>
/// <param name="holidayWork">آیا در تعطیلات رسمی موظف به کار است</param>
/// <param name="workshopIrregularShifts">نوع شیفت کاری </param>
/// <param name="workshopShiftStatus">آیا شیفت منظم است یا نا منظم</param>
@@ -91,7 +91,7 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity
NightWorkPay nightWorkPay, MarriedAllowance marriedAllowance, ShiftPay shiftPay,
FamilyAllowance familyAllowance, LeavePay leavePay, InsuranceDeduction insuranceDeduction,
FineAbsenceDeduction fineAbsenceDeduction, LateToWork lateToWork, EarlyExit earlyExit,
FridayWork fridayWork, HolidayWork holidayWork, IrregularShift irregularShift, bool isSettingChange, int leavePermittedDays)
HolidayWork holidayWork, IrregularShift irregularShift, bool isSettingChange, int leavePermittedDays)
{
SetValueObjects(fridayPay, overTimePay, baseYearsPay, bonusesPay
, nightWorkPay, marriedAllowance, shiftPay, familyAllowance, leavePay, insuranceDeduction, fineAbsenceDeduction,
@@ -99,7 +99,6 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity
Salary = salary;
IsSettingChanged = isSettingChange;
FridayWork = fridayWork;
HolidayWork = holidayWork;
LeavePermittedDays = leavePermittedDays;
}
@@ -112,8 +111,8 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity
public void SimpleEdit(
ICollection<CustomizeWorkshopEmployeeSettingsShift> employeeSettingsShift,
IrregularShift irregularShift,
WorkshopShiftStatus workshopShiftStatus, BreakTime breakTime, bool isShiftChange, FridayWork fridayWork, HolidayWork holidayWork,
ICollection<CustomizeRotatingShift> rotatingShifts)
WorkshopShiftStatus workshopShiftStatus, BreakTime breakTime, bool isShiftChange,HolidayWork holidayWork,
ICollection<CustomizeRotatingShift> rotatingShifts,List<WeeklyOffDay> weeklyOffDays)
{
BreakTime = new BreakTime(breakTime.HasBreakTimeValue, breakTime.BreakTimeValue);
IsShiftChanged = isShiftChange;
@@ -126,9 +125,8 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity
: new IrregularShift(irregularShift.StartTime, irregularShift.EndTime, irregularShift.WorkshopIrregularShifts);
CustomizeRotatingShifts = workshopShiftStatus == WorkshopShiftStatus.Rotating ? rotatingShifts : [];
FridayWork = fridayWork;
HolidayWork = holidayWork;
WeeklyOffDays = weeklyOffDays;
}
@@ -269,4 +267,6 @@ public class CustomizeWorkshopEmployeeSettings : BaseCustomizeEntity
IsShiftChanged = isShiftChange;
}
}

View File

@@ -17,340 +17,344 @@ namespace Company.Domain.CustomizeWorkshopGroupSettingsAgg.Entities;
public class CustomizeWorkshopGroupSettings : BaseCustomizeEntity
{
public CustomizeWorkshopGroupSettings()
{
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;
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,
HolidayWork holidayWork, BreakTime breakTime, WorkshopShiftStatus workshopShiftStatus, IrregularShift irregularShift, int leavePermittedDays,
ICollection<CustomizeRotatingShift> rotatingShifts, List<WeeklyOffDay> weeklyOffDays) :
base(fridayPay, overTimePay, baseYearsPay, bonusesPay, nightWorkPay,
marriedAllowance, shiftPay, familyAllowance, leavePay, insuranceDeduction, fineAbsenceDeduction, lateToWork,
earlyExit, holidayWork, breakTime, leavePermittedDays, weeklyOffDays)
{
GroupName = groupName;
Salary = salary;
CustomizeWorkshopSettingId = customizeWorkshopSettingId;
GuardGroupShifts(customizeWorkshopGroupSettingsShifts);
WorkshopShiftStatus = workshopShiftStatus;
CustomizeRotatingShifts = workshopShiftStatus == WorkshopShiftStatus.Rotating ? rotatingShifts : [];
CustomizeRotatingShifts = workshopShiftStatus == WorkshopShiftStatus.Rotating ? rotatingShifts : [];
CustomizeWorkshopGroupSettingsShifts = workshopShiftStatus == WorkshopShiftStatus.Regular ? customizeWorkshopGroupSettingsShifts : [];
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);
}
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("شما نمیتوانید بیشتر از سه ساعت کاری در کارگاه بگذارید");
}
}
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 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 : [];
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,
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;
HolidayWork = holidayWork;
LeavePermittedDays = leavePermittedDays;
CustomizeWorkshopGroupSettingsShifts = workshopShiftStatus == WorkshopShiftStatus.Regular ? customizeWorkshopGroupSettingsShifts : [];
CustomizeRotatingShifts = workshopShiftStatus == WorkshopShiftStatus.Rotating ? rotatingShifts : [];
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 = [];
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;
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;
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, 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;
HolidayWork = holidayWork;
IsSettingChange = isSettingChange;
LeavePermittedDays = leavePermittedDays;
var employeeSettingsShift = CustomizeWorkshopGroupSettingsShifts
.Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList();
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 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, 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, HolidayWork holidayWork, bool isSettingChange, int leavePermittedDays)
{
SetValueObjects(fridayPay, overTimePay, baseYearsPay, bonusesPay
, nightWorkPay, marriedAllowance, shiftPay, familyAllowance, leavePay, insuranceDeduction, fineAbsenceDeduction,
lateToWork, earlyExit);
GroupName = groupName;
Salary = salary;
HolidayWork = holidayWork;
IsSettingChange = isSettingChange;
LeavePermittedDays = leavePermittedDays;
var employeeSettingsShift = CustomizeWorkshopGroupSettingsShifts
.Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList();
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);
}
}
foreach (var item in CustomizeWorkshopEmployeeSettingsCollection)
{
item.EditEmployees(Salary, FridayPay, OverTimePay, BaseYearsPay, BonusesPay
, NightWorkPay, MarriedAllowance, ShiftPay, FamilyAllowance, LeavePay, InsuranceDeduction, FineAbsenceDeduction,
LateToWork, EarlyExit, 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 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;
public void EditSimpleAndOverwriteOnEmployee(string groupName, IEnumerable<long> employeeIds,
ICollection<CustomizeWorkshopGroupSettingsShift> customizeWorkshopGroupSettingsShifts, WorkshopShiftStatus workshopShiftStatus,
IrregularShift irregularShift, BreakTime breakTime, bool isShiftChange, HolidayWork holidayWork, ICollection<CustomizeRotatingShift> rotatingShifts, List<WeeklyOffDay> weeklyOffDays)
{
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 : [];
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;
BreakTime = new BreakTime(breakTime.HasBreakTimeValue, breakTime.BreakTimeValue);
IsShiftChange = isShiftChange;
//var employeeSettingsShift = customizeWorkshopGroupSettingsShifts
// .Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList();
if (isShiftChange)
{
HolidayWork = holidayWork;
}
WeeklyOffDays = weeklyOffDays;
var permittedToOverWrite = CustomizeWorkshopEmployeeSettingsCollection.Where(x => employeeIds.Contains(x.EmployeeId));
//var employeeSettingsShift = customizeWorkshopGroupSettingsShifts
// .Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList();
if (isShiftChange)
{
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);
}
}
}
var permittedToOverWrite = CustomizeWorkshopEmployeeSettingsCollection.Where(x => employeeIds.Contains(x.EmployeeId));
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;
foreach (var item in permittedToOverWrite)
{
var employeeWeeklyOffDays = WeeklyOffDays.Select(x => new WeeklyOffDay(x.DayOfWeek)).ToList();
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, HolidayWork, newRotatingShifts, employeeWeeklyOffDays);
}
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 : [];
public void EditSimpleAndOverwriteOnAllEmployees(string groupName,
ICollection<CustomizeWorkshopGroupSettingsShift> customizeWorkshopGroupSettingsShifts,
WorkshopShiftStatus workshopShiftStatus, IrregularShift irregularShift, BreakTime breakTime, bool isShiftChange,
HolidayWork holidayWork, ICollection<CustomizeRotatingShift> rotatingShifts, List<WeeklyOffDay> weeklyOffDays)
{
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;
BreakTime = new BreakTime(breakTime.HasBreakTimeValue, breakTime.BreakTimeValue);
IsShiftChange = isShiftChange;
HolidayWork = holidayWork;
//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);
}
WeeklyOffDays = weeklyOffDays;
//var employeeSettingsShift = customizeWorkshopGroupSettingsShifts
// .Select(x => new CustomizeWorkshopEmployeeSettingsShift(x.StartTime, x.EndTime, x.Placement)).ToList();
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);
}
foreach (var item in CustomizeWorkshopEmployeeSettingsCollection)
{
var employeeWeeklyOffDays = WeeklyOffDays.Select(x => new WeeklyOffDay(x.DayOfWeek)).ToList();
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, HolidayWork, newRotatingShifts, employeeWeeklyOffDays);
}
}
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);
List<WeeklyOffDay> weeklyOffDays = WeeklyOffDays.Select(x => new WeeklyOffDay(x.DayOfWeek)).ToList();
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, HolidayWork, irregularShift,
WorkshopShiftStatus, breakTime, LeavePermittedDays, rotatingShift, weeklyOffDays);
CustomizeWorkshopEmployeeSettingsCollection.Add(customizeWorkshopEmployeeSettings);
}
//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);
// }
//}
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);
// }
//}
}

View File

@@ -17,7 +17,7 @@ public class CustomizeWorkshopSettings : BaseCustomizeEntity
public CustomizeWorkshopSettings(long workshopId,
ICollection<CustomizeWorkshopSettingsShift> customizeWorkshopSettingsShifts, int leavePermittedDays,
WorkshopShiftStatus workshopShiftStatus,FridayWork fridayWork,HolidayWork holidayWork)
WorkshopShiftStatus workshopShiftStatus,HolidayWork holidayWork, List<WeeklyOffDay> weeklyOffDays)
{
FridayPay = new FridayPay(FridayPayType.None, 0);
OverTimePay = new OverTimePay(OverTimePayType.None, 0);
@@ -38,11 +38,10 @@ public class CustomizeWorkshopSettings : BaseCustomizeEntity
OverTimeThresholdMinute = 0;
Currency = Currency.Rial;
MaxMonthDays = MaxMonthDays.Default;
FridayWork = fridayWork;
HolidayWork = holidayWork;
BonusesPaysInEndOfMonth = BonusesPaysInEndOfYear.EndOfYear;
WorkshopShiftStatus = workshopShiftStatus;
WeeklyOffDays = weeklyOffDays;
HolidayWork = holidayWork;
if (workshopShiftStatus == WorkshopShiftStatus.Irregular)
return;
@@ -92,8 +91,7 @@ public class CustomizeWorkshopSettings : BaseCustomizeEntity
public void Edit(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, BonusesPaysInEndOfYear bonusesPaysInEndOfYear,
FineAbsenceDeduction fineAbsenceDeduction, LateToWork lateToWork, EarlyExit earlyExit, HolidayWork holidayWork, BonusesPaysInEndOfYear bonusesPaysInEndOfYear,
int leavePermittedDays, BaseYearsPayInEndOfYear baseYearsPayInEndOfYear, int overTimeThresholdMinute)
{
FridayPay = fridayPay;
@@ -109,7 +107,6 @@ public class CustomizeWorkshopSettings : BaseCustomizeEntity
FineAbsenceDeduction = fineAbsenceDeduction;
LateToWork = lateToWork;
EarlyExit = earlyExit;
FridayWork = fridayWork;
HolidayWork = holidayWork;
BonusesPaysInEndOfMonth = bonusesPaysInEndOfYear;
LeavePermittedDays = leavePermittedDays;
@@ -127,19 +124,18 @@ public class CustomizeWorkshopSettings : BaseCustomizeEntity
}
public void ChangeWorkshopShifts(ICollection<CustomizeWorkshopSettingsShift> customizeWorkshopSettingsShifts,
WorkshopShiftStatus workshopShiftStatus,FridayWork fridayWork,HolidayWork holidayWork)
WorkshopShiftStatus workshopShiftStatus,HolidayWork holidayWork, List<WeeklyOffDay> weeklyOffDays)
{
WorkshopShiftStatus = workshopShiftStatus;
HolidayWork = holidayWork;
FridayWork = fridayWork;
CustomizeWorkshopSettingsShifts = workshopShiftStatus == WorkshopShiftStatus.Regular ? customizeWorkshopSettingsShifts : new List<CustomizeWorkshopSettingsShift>();
WeeklyOffDays = weeklyOffDays;
if (workshopShiftStatus == WorkshopShiftStatus.Regular)
{
var date = new DateOnly();
var firstStartShift = new DateTime(date, CustomizeWorkshopSettingsShifts.MinBy(x => x.Placement).StartTime);
var lastEndShift = new DateTime(date, CustomizeWorkshopSettingsShifts.MaxBy(x => x.Placement).EndTime);
if (lastEndShift > firstStartShift)
firstStartShift = firstStartShift.AddDays(1);
var offSet = (firstStartShift - lastEndShift).Divide(2);

View File

@@ -15,7 +15,7 @@ namespace Company.Domain.RollCallAgg;
public interface IRollCallMandatoryRepository : IRepository<long, RollCall>
{
ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout);
ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute);
/// <summary>
/// محاسبه ساعات کارکرد پرسنل در صورت داشتن حضور غیاب

View File

@@ -77,23 +77,13 @@ public class Workshop : EntityBase
ClientEmployeeWorkshopList = new List<ClientEmployeeWorkshop>();
}
//public Workshop()
//{
// Contracts2 = new List<Contract>();
// WorkshopEmployers = new List<WorkshopEmployer>();
// LeftWorks = new List<LeftWork>();
// LeftWorkInsurances = new List<LeftWorkInsurance>();
// EmployersList = new List<Employer>();
// WorkshopEmployers = new List<WorkshopEmployer>();
// EmployersList = new List<Employer>();
// PersonnelCodeList = new List<PersonnelCodeDomain>();
//}
public Workshop(string workshopName,string workshopSureName, string insuranceCode, string typeOfOwnership, string archiveCode, string agentName, string agentPhone,
string state, string city, string address, string typeOfInsuranceSend, string typeOfContract, string contractTerm,
string agreementNumber, bool fixedSalary, string population,long? insuranceJobId, string zoneName, bool addBonusesPay, bool addYearsPay, bool addLeavePay, bool totalPaymentHide,
bool isClassified, string computeOptions, string bonusesOptions, string yearsOptions, string hasRollCallFreeVip, bool workshopHolidayWorking,
bool insuranceCheckoutOvertime, bool insuranceCheckoutFamilyAllowance, bool createContract, bool signContract, bool createCheckout, bool signCheckout, IsActive cutContractEndOfYear)
bool insuranceCheckoutOvertime, bool insuranceCheckoutFamilyAllowance, bool createContract, bool signContract, bool createCheckout, bool signCheckout, IsActive cutContractEndOfYear, bool rotatingShiftCompute, bool isStaticCheckout)
{
WorkshopName = workshopName;
WorkshopSureName = workshopSureName;
@@ -142,7 +132,9 @@ public class Workshop : EntityBase
CreateCheckout = createCheckout;
SignCheckout = signCheckout;
CutContractEndOfYear = cutContractEndOfYear;
}
RotatingShiftCompute = rotatingShiftCompute;
IsStaticCheckout = isStaticCheckout;
}
public string WorkshopName { get; private set; }
@@ -231,7 +223,17 @@ public class Workshop : EntityBase
public IsActive CutContractEndOfYear { get; private set; }
//public Employer Employer { get; private set; }
public Workshop()
/// <summary>
/// محاسبه نوبت کاری در فیش حقوقی
/// </summary>
public bool RotatingShiftCompute { get; private set; }
/// <summary>
/// تصفیه حساب بصورت استاتیک محاصبه شود
/// </summary>
public bool IsStaticCheckout { get; private set; }
public Workshop()
{
RollCallServicesList = new List<RollCallService>();
CustomizeCheckouts = new List<CustomizeCheckout>();
@@ -262,7 +264,7 @@ public class Workshop : EntityBase
string state, string city, string address, string typeOfInsuranceSend, string typeOfContract, string contractTerm,
string agreementNumber, bool fixedSalary, string population, long? insuranceJobId, string zoneName, bool addBonusesPay, bool addYearsPay, bool addLeavePay,
bool totalPaymentHide, bool isClassified, string computeOptions, string bonusesOptions, string yearsOptions, string hasRollCallFreeVip, bool workshopHolidayWorking,
bool insuranceCheckoutOvertime, bool insuranceCheckoutFamilyAllowance, bool createContract, bool signContract, bool createCheckout, bool signCheckout, IsActive cutContractEndOfYear)
bool insuranceCheckoutOvertime, bool insuranceCheckoutFamilyAllowance, bool createContract, bool signContract, bool createCheckout, bool signCheckout, IsActive cutContractEndOfYear, bool rotatingShiftCompute, bool isStaticCheckout)
{
WorkshopName = workshopName;
WorkshopSureName = workshopSureName;
@@ -308,7 +310,9 @@ public class Workshop : EntityBase
CreateCheckout = createCheckout;
SignCheckout = signCheckout;
CutContractEndOfYear = cutContractEndOfYear;
}
RotatingShiftCompute = rotatingShiftCompute;
IsStaticCheckout = isStaticCheckout;
}
public void Active(string archiveCode)

View File

@@ -133,6 +133,9 @@ public class CheckoutViewModel
/// </summary>
public string TotalPaidLeave { get; set; }
public bool HasSignCheckout { get; set; }
public TimeSpan TotalHourlyLeave { get; set; }
public List<CheckoutDailyRollCallViewModel> MonthlyRollCall { get; set; }
public List<LoanInstallmentViewModel> InstallmentViewModels { get; set; }

View File

@@ -44,5 +44,6 @@ public class CreateCheckoutListViewModel
/// </summary>
public bool EmployeeHasCreateCheckout { get; set; }
public bool HasWorkFlow { get; set; }
public List<CreateCheckoutListViewModel> CreateCheckoutList { get; set; }
}

View File

@@ -27,6 +27,14 @@ public interface ICheckoutApplication
Task<CreateCheckoutListViewModel> GetContractResultToCreateCheckout(long workshopId, long employeeId, string year,
string month,
string contractStart, string contractEnd);
/// <summary>
/// لیست تصفیه حساب
/// جدید
///
/// </summary>
/// <param name="searchModel"></param>
/// <returns></returns>
Task<List<CheckoutViewModel>> SearchCheckoutOptimized(CheckoutSearchModel searchModel);
Task<List<CheckoutViewModel>> Search(CheckoutSearchModel searchModel);
List<CheckoutViewModel> SimpleSearch(CheckoutSearchModel searchModel);
List<CheckoutViewModel> PrintAll(List<long> id);

View File

@@ -63,6 +63,10 @@ public class ContractViweModel
public string EmployeeLName { get; set; }
public string IsBlockCantracingParty { get; set; }
/// <summary>
/// آیا مجاز به امضاء قرادا می باشد
/// </summary>
public bool HasSignContract { get; set; }
public IQueryable<WorkshopEmployerViewModel> WorkshopEmployerList { get; set; }
public List<EmployerViewModel> Employers { get; set; }
public List<WorkshopViewModel> Workshops { get; set; }

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
@@ -16,8 +17,9 @@ public class CreateCustomizeWorkshopGroupSettings
public IrregularShift IrregularShift { get; set; }
public BreakTime BreakTime { get; set; }
public int LeavePermittedDays { get; set; }
public FridayWork FridayWork { get; set; }
//public FridayWork FridayWork { get; set; }
public HolidayWork HolidayWork { get; set; }
public List<DayOfWeek> OffDayOfWeeks { get; set; }
public ICollection<CustomizeRotatingShiftsViewModel> CustomizeRotatingShiftsViewModels { get; set; }
}

View File

@@ -1,4 +1,5 @@
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using System;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings.ValueObjectsViewModel;
using System.Collections.Generic;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
@@ -20,16 +21,18 @@ public class CreateCustomizeWorkshopSettings
public BreakTime BreakTime { get; set; }
/// <summary>
/// آیا جمعه کار میکند یا نه
/// </summary>
public FridayWork FridayWork { get; set; }
///// <summary>
///// آیا جمعه کار میکند یا نه
///// </summary>
//public FridayWork FridayWork { get; set; }
/// <summary>
/// آیا در روز های تعطیل کار میکند
/// </summary>
public HolidayWork HolidayWork { get; set; }
public List<DayOfWeek> OffDays { get; set; }

View File

@@ -1,4 +1,5 @@
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using System;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
using System.Collections.Generic;
@@ -20,7 +21,8 @@ public class CustomizeWorkshopEmployeeSettingsViewModel
public bool ChangeSettingEmployeeShiftIsChange { get; set; }
public BreakTime BreakTime { get; set; }
public HolidayWork HolidayWork { get; set; }
public FridayWork FridayWork { get; set; }
//public FridayWork FridayWork { get; set; }
public int LeavePermittedDays { get; set; }
public ICollection<CustomizeRotatingShiftsViewModel> CustomizeRotatingShiftsViewModels { get; set; }
public List<DayOfWeek> WeeklyOffDays { get; set; }
}

View File

@@ -1,4 +1,6 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using _0_Framework.Domain.CustomizeCheckoutShared.Base;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
@@ -18,4 +20,5 @@ public class CustomizeWorkshopGroupSettingsViewModel
public BreakTime BreakTime { get; set; }
public FridayWork FridayWork { get; set; }
public HolidayWork HolidayWork { get; set; }
public List<DayOfWeek> OffDayOfWeeks { get; set; }
}

View File

@@ -1,4 +1,5 @@
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using System;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings.ValueObjectsViewModel;
using System.Collections.Generic;
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
@@ -72,17 +73,19 @@ public class EditCustomizeEmployeeSettings:CreateCustomizeEmployeeSettings
/// </summary>
public EarlyExitViewModel EarlyExit { get; set; }
/// <summary>
/// آیا جمعه کار میکند یا نه
/// </summary>
public FridayWork FridayWork { get; set; }
///// <summary>
///// آیا جمعه کار میکند یا نه
///// </summary>
//public FridayWork FridayWork { get; set; }
/// <summary>
/// آیا در روز های تعطیل کار میکند
/// </summary>
public HolidayWork HolidayWork { get; set; }
public long Id { get; set; }
public List<DayOfWeek> WeeklyOffDays { get; set; }
public long Id { get; set; }
public string Salary { get; set; }
public string NameGroup { get; set; }
public string EmployeeFullName { get; set; }
@@ -91,4 +94,5 @@ public class EditCustomizeEmployeeSettings:CreateCustomizeEmployeeSettings
public IEnumerable<CustomizeWorkshopShiftViewModel> ShiftViewModel { get; set; }
public ICollection<CustomizeRotatingShiftsViewModel> CustomizeRotatingShifts{ get; set; }
public BreakTime BreakTime { get; set; }
}

View File

@@ -1,6 +1,8 @@
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using System;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using CompanyManagment.App.Contracts.CustomizeWorkshopSettings.ValueObjectsViewModel;
using System.Collections.Generic;
using _0_Framework.Domain.CustomizeCheckoutShared.Base;
namespace CompanyManagment.App.Contracts.CustomizeWorkshopSettings;
@@ -75,16 +77,18 @@ public class EditCustomizeWorkshopGroupSettings : CreateCustomizeWorkshopGroupSe
/// </summary>
public EarlyExitViewModel EarlyExit { get; set; }
/// <summary>
/// آیا جمعه کار میکند یا نه
/// </summary>
public FridayWork FridayWork { get; set; }
///// <summary>
///// آیا جمعه کار میکند یا نه
///// </summary>
//public FridayWork FridayWork { get; set; }
/// <summary>
/// آیا در روز های تعطیل کار میکند
/// </summary>
public HolidayWork HolidayWork { get; set; }
//public List<DayOfWeek> WeeklyOffDays { get; set; }
public bool IsShiftChanged { get; set; }
public bool IsSettingChanged { get; set; }
}

View File

@@ -1,4 +1,5 @@
using _0_Framework.Application;
using System;
using _0_Framework.Application;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using _0_Framework.Domain.CustomizeCheckoutShared.ValueObjects;
using CompanyManagment.App.Contracts.Employee;
@@ -51,11 +52,14 @@ public interface ICustomizeWorkshopSettingsApplication
/// </summary>
/// <param name="shiftViewModels">شیفت هت</param>
/// <param name="customizeWorkshopSettingsId">آیدی تنظیمات کارگاه</param>
/// <param name="replaceChangedGroups"></param>
/// <param name="workshopShiftStatus"></param>
/// <param name="holidayWork"></param>
/// <param name="weeklyOffDays"></param>
/// <param name="replaceChangedGroups"></param>
/// <returns></returns>
OperationResult EditWorkshopSettingShifts(List<CustomizeWorkshopShiftViewModel> shiftViewModels,
long customizeWorkshopSettingsId,WorkshopShiftStatus workshopShiftStatus,FridayWork fridayWork,HolidayWork holidayWork);
long customizeWorkshopSettingsId, WorkshopShiftStatus workshopShiftStatus,
HolidayWork holidayWork, List<DayOfWeek> weeklyOffDays);
// It will Get the Workshop Settings with its groups and the employees of groups.
CustomizeWorkshopSettingsViewModel GetWorkshopSettingsByWorkshopId(long workshopId, AuthViewModel auth);

View File

@@ -13,6 +13,10 @@ public class GroupedRollCalls
public TimeSpan BreakTime { get; set; }
public DateTime ShiftDate { get; set; }
/// <summary>
/// تاریخ های جمع کاری
/// </summary>
public DateTime? Fridays { get; set; }
/// <summary>
/// تاخیر در ورود (مدت زمانی که کارمند با تأخیر وارد شده است)
/// </summary>

View File

@@ -8,7 +8,7 @@ namespace CompanyManagment.App.Contracts.RollCall;
public interface IRollCallMandatoryApplication
{
bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart);
ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout);
ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute);
/// <summary>
/// گزارش نوبت کاری حضور غیاب

View File

@@ -142,4 +142,14 @@ public class CreateWorkshop
/// </summary>
public IsActive CutContractEndOfYear { get; set; }
/// <summary>
/// محاسبه نوبت کاری در فیش حقوقی
/// </summary>
public bool RotatingShiftCompute { get; set; }
/// <summary>
/// تصفیه حساب بصورت استاتیک محاصبه شود
/// </summary>
public bool IsStaticCheckout { get; set; }
}

View File

@@ -386,9 +386,17 @@ public class CheckoutApplication : ICheckoutApplication
contractEnd);
}
public async Task<List<CheckoutViewModel>> Search(CheckoutSearchModel searchModel)
{
var result = new List<CheckoutViewModel>();
public Task<List<CheckoutViewModel>> SearchCheckoutOptimized(CheckoutSearchModel searchModel)
{
return _checkoutRepository.SearchCheckoutOptimized(searchModel);
}
public async Task<List<CheckoutViewModel>> Search(CheckoutSearchModel searchModel)
{
var watch = System.Diagnostics.Stopwatch.StartNew();
watch.Start();
var result = new List<CheckoutViewModel>();
var query = await _checkoutRepository.SearchForMainCheckout(searchModel);
query = query.Select(x => new CheckoutViewModel()
{
@@ -415,22 +423,22 @@ public class CheckoutApplication : ICheckoutApplication
EmployerName = _employerRepository.GetEmployerByWorkshopId(x.WorkshopId).FirstOrDefault()?.EmployerFullName,
IsBlockCantracingParty = _employerRepository.GetEmployerByWorkshopId(x.WorkshopId).FirstOrDefault()?.IsBlockContractingParty,
}).ToList();
//foreach (var items in query)
//{
// var s = _employerRepository.GetEmployerByWorkshopId(items.WorkshopId);
// if (s != null)
// {
// items.EmployerName = s.FirstOrDefault().EmployerFullName;
// }
// result.Add(items);
// //var employeId = _context.WorkshopEmployers?.Where(x => x.WorkshopId == items.WorkshopId)
// // .Select(x => x.EmployerId).FirstOrDefault();
// //var employerName = _context.Employers?.FirstOrDefault(x => x.id == employeId).FullName;
// // = employerName;
//foreach (var items in query)
//{
// var s = _employerRepository.GetEmployerByWorkshopId(items.WorkshopId);
// if (s != null)
// {
// items.EmployerName = s.FirstOrDefault().EmployerFullName;
// }
// result.Add(items);
// //var employeId = _context.WorkshopEmployers?.Where(x => x.WorkshopId == items.WorkshopId)
// // .Select(x => x.EmployerId).FirstOrDefault();
// //var employerName = _context.Employers?.FirstOrDefault(x => x.id == employeId).FullName;
// // = employerName;
//}
return query;
//}
Console.WriteLine("old : " + watch.Elapsed);
return query;
}

View File

@@ -12,6 +12,7 @@ using Company.Domain.YearlySalaryAgg;
using Company.Domain.YearlySalaryItemsAgg;
using CompanyManagment.App.Contracts.Contract;
using CompanyManagment.App.Contracts.Employee;
using CompanyManagment.App.Contracts.EmployeeComputeOptions;
using CompanyManagment.App.Contracts.Employer;
using CompanyManagment.App.Contracts.LeftWork;
using CompanyManagment.App.Contracts.PersonalContractingParty;
@@ -39,6 +40,7 @@ public class ContractApplication : IContractApplication
private readonly IPersonnelCodeRepository _personnelCodeRepository;
private readonly IWorkingHoursTempApplication _workingHoursTempApplication;
private readonly IPersonalContractingPartyApp _contractingPartyApp;
private readonly IEmployeeComputeOptionsApplication _employeeComputeOptionsApplication;
public List<EmployerViewModel> EmpList;
@@ -54,7 +56,7 @@ public class ContractApplication : IContractApplication
IYearlySalaryRepository yearlySalaryRepository,
IYearlySalaryItemRepository yearlySalaryItemRepository
, IEmployeeApplication employeeApplication, IEmployerApplication employerApplication, IWorkshopApplication workshopApplication, IEmployerRepository employerRepository,
IWorkingHoursApplication workingHoursApplication, IWorkingHoursItemsApplication workingHoursItemsApplication, ILeftWorkRepository leftWorkRepository, IPersonnelCodeRepository personnelCodeRepository, IWorkingHoursTempApplication workingHoursTempApplication, IPersonalContractingPartyApp contractingPartyApp)
IWorkingHoursApplication workingHoursApplication, IWorkingHoursItemsApplication workingHoursItemsApplication, ILeftWorkRepository leftWorkRepository, IPersonnelCodeRepository personnelCodeRepository, IWorkingHoursTempApplication workingHoursTempApplication, IPersonalContractingPartyApp contractingPartyApp, IEmployeeComputeOptionsApplication employeeComputeOptionsApplication)
{
_contractRepository = contractRepository;
_holidayItemRepository = holidayItemRepository;
@@ -70,6 +72,7 @@ public class ContractApplication : IContractApplication
_personnelCodeRepository = personnelCodeRepository;
_workingHoursTempApplication = workingHoursTempApplication;
_contractingPartyApp = contractingPartyApp;
_employeeComputeOptionsApplication = employeeComputeOptionsApplication;
//_leftWorkApplication = leftWorkApplication;
}
@@ -3155,7 +3158,7 @@ public class ContractApplication : IContractApplication
EmployeeFName = x.EmployeeFName,
EmployeeLName = x.EmployeeLName,
IsBlockCantracingParty = _contractingPartyApp.IsBlockByEmployerId(x.EmployerId),
HasSignContract = _employeeComputeOptionsApplication.GetEmployeeOptions(x.WorkshopIds,x.EmployeeId).SignContract
}).ToList();

View File

@@ -512,13 +512,13 @@ public class InsuranceListApplication : IInsuranceListApplication
monthlyBenefits = GetRoundValue(monthlyBenefits += overTimePay);
}
//سرای ملک
// نوشین خالی
// 39692467
//if (employee.EmployeeId == 45280)
// monthlyBenefits += 39692467;
//سرای ملک
// نرجس خالی
// 39692467
if (employee.EmployeeId == 45280)
monthlyBenefits += 39692467;
var marriedAllowanceCompute = MarriedAllowance(employee.MaritalStatus, employee.JobId, employee.IncludeStatus,
var marriedAllowanceCompute = MarriedAllowance(employee.MaritalStatus, employee.JobId, employee.IncludeStatus,
workingDays.countWorkingDays, yearlysaleries.MarriedAllowance, endOfMonth);
//محاسبه جمع مزایای مشمول و دستمزد ماهانه
var benefitsIncludedContinuous = monthlyBenefits + monthlySalary;

View File

@@ -21,9 +21,9 @@ public class RollCallMandatoryApplication : IRollCallMandatoryApplication
return _rollCallMandatoryRepository.Exists(x => x.EmployeeId == employeeId && x.WorkshopId == workshopId && x.StartDate.Value.Date >= contractStart.Date);
}
public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout)
public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd, CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute)
{
return _rollCallMandatoryRepository.MandatoryCompute(employeeId,workshopId, contractStart, contractEnd, command, holidayWorking, isStaticCheckout);
return _rollCallMandatoryRepository.MandatoryCompute(employeeId,workshopId, contractStart, contractEnd, command, holidayWorking, isStaticCheckout, rotatingShiftCompute);
}
public async Task<ComputingViewModel> RotatingShiftReport(long workshopId, long employeeId, DateTime contractStart, DateTime contractEnd,

View File

@@ -148,6 +148,7 @@ public class WorkshopAppliction : IWorkshopApplication
// return operation.Failed("لطفا نوع ارسال لیست بیمه را مشخص کنید");
var account = new AccountViewModel();
var institutionContract = new InstitutionContract();
if (command.HasRollCallFreeVip == "true")
{
institutionContract = _institutionContractRepository.InstitutionContractByEmployerId(employer.FirstOrDefault());
@@ -156,7 +157,7 @@ public class WorkshopAppliction : IWorkshopApplication
account = _personalContractingPartyRepository.GetAccountByPersonalContractingParty(institutionContract.ContractingPartyId);
if(account == null || account.ClientAreaPermission != "true")
return operation.Failed("بدلیل نداشتن حساب کاربری کلاینت نمیتوانید سرویس حضور غیاب را فعال کنید");
}
var workshop = new Workshop(command.WorkshopName, command.WorkshopSureName, command.InsuranceCode,
command.TypeOfOwnership,
@@ -167,7 +168,7 @@ public class WorkshopAppliction : IWorkshopApplication
command.AddYearsPay,command.AddLeavePay,command.TotalPaymentHide,command.IsClassified,command.ComputeOptions,
command.BonusesOptions,command.YearsOptions,command.HasRollCallFreeVip,command.WorkshopHolidayWorking,
command.InsuranceCheckoutOvertime, command.InsuranceCheckoutFamilyAllowance, command.CreateContract, command.SignContract,
command.CreateCheckout, command.SignCheckout, command.CutContractEndOfYear);
command.CreateCheckout, command.SignCheckout, command.CutContractEndOfYear,command.RotatingShiftCompute, command.IsStaticCheckout);
_workshopRepository.Create(workshop);
_workshopRepository.SaveChanges();
@@ -281,9 +282,11 @@ public class WorkshopAppliction : IWorkshopApplication
}
var account = new AccountViewModel();
var institutionContract = new InstitutionContract();
if (command.HasRollCallFreeVip == "true")
{
institutionContract = _institutionContractRepository.InstitutionContractByEmployerId(employer.FirstOrDefault());
if (institutionContract == null)
return operation.Failed("بدلیل نداشتن قرار داد مالی نمیتوانید سرویس حضور غیاب را فعال کنید");
@@ -358,7 +361,7 @@ public class WorkshopAppliction : IWorkshopApplication
command.AddBonusesPay, command.AddYearsPay, command.AddLeavePay, command.TotalPaymentHide,command.IsClassified,
command.ComputeOptions,command.BonusesOptions, command.YearsOptions,command.HasRollCallFreeVip,
command.WorkshopHolidayWorking, command.InsuranceCheckoutOvertime,command.InsuranceCheckoutFamilyAllowance,
command.CreateContract, command.SignContract, command.CreateCheckout, command.SignCheckout, command.CutContractEndOfYear);
command.CreateContract, command.SignContract, command.CreateCheckout, command.SignCheckout, command.CutContractEndOfYear,command.RotatingShiftCompute, command.IsStaticCheckout);
_workshopRepository.SaveChanges();
_workshopRepository.RemoveOldRelation(command.Id);

View File

@@ -228,7 +228,14 @@ public class CustomizeWorkshopEmployeeSettingsMapping : IEntityTypeConfiguration
});
builder.OwnsMany(x => x.CustomizeRotatingShifts);
builder.OwnsMany(x => x.WeeklyOffDays, offDay =>
{
offDay.HasKey(x => x.Id);
offDay.Property(x => x.DayOfWeek).HasConversion<string>().HasMaxLength(15);
offDay.WithOwner().HasForeignKey(x => x.ParentId);
});
builder.OwnsMany(x => x.CustomizeRotatingShifts);
}
}

View File

@@ -227,7 +227,15 @@ public class CustomizeWorkshopGroupSettingsMapping : IEntityTypeConfiguration<Cu
});
builder.OwnsMany(x => x.CustomizeRotatingShifts);
builder.OwnsMany(x => x.WeeklyOffDays, offDay =>
{
offDay.HasKey(x => x.Id);
offDay.Property(x => x.DayOfWeek).HasConversion<string>().HasMaxLength(15);
offDay.WithOwner().HasForeignKey(x => x.ParentId);
});
builder.OwnsMany(x => x.CustomizeRotatingShifts);
builder.HasOne(x => x.CustomizeWorkshopSettings).WithMany(x => x.CustomizeWorkshopGroupSettingsCollection)

View File

@@ -221,6 +221,12 @@ public class CustomizeWorkshopSettingsMapping:IEntityTypeConfiguration<Customize
});
builder.OwnsMany(x => x.WeeklyOffDays, offDay =>
{
offDay.HasKey(x => x.Id);
offDay.Property(x => x.DayOfWeek).HasConversion<string>().HasMaxLength(15);
offDay.WithOwner().HasForeignKey(x => x.ParentId);
});
builder.HasMany(x => x.CustomizeWorkshopGroupSettingsCollection).WithOne(x => x.CustomizeWorkshopSettings)

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,106 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace CompanyManagment.EFCore.Migrations
{
/// <inheritdoc />
public partial class addoffDaystocws : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "CustomizeWorkshopEmployeeSettings_WeeklyOffDays",
columns: table => new
{
Id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
DayOfWeek = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: false),
ParentId = table.Column<long>(type: "bigint", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_CustomizeWorkshopEmployeeSettings_WeeklyOffDays", x => x.Id);
table.ForeignKey(
name: "FK_CustomizeWorkshopEmployeeSettings_WeeklyOffDays_CustomizeWorkshopEmployeeSettings_ParentId",
column: x => x.ParentId,
principalTable: "CustomizeWorkshopEmployeeSettings",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "CustomizeWorkshopGroupSettings_WeeklyOffDays",
columns: table => new
{
Id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
DayOfWeek = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: false),
ParentId = table.Column<long>(type: "bigint", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_CustomizeWorkshopGroupSettings_WeeklyOffDays", x => x.Id);
table.ForeignKey(
name: "FK_CustomizeWorkshopGroupSettings_WeeklyOffDays_CustomizeWorkshopGroupSettings_ParentId",
column: x => x.ParentId,
principalTable: "CustomizeWorkshopGroupSettings",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateTable(
name: "CustomizeWorkshopSettings_WeeklyOffDays",
columns: table => new
{
Id = table.Column<long>(type: "bigint", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
DayOfWeek = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: false),
ParentId = table.Column<long>(type: "bigint", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_CustomizeWorkshopSettings_WeeklyOffDays", x => x.Id);
table.ForeignKey(
name: "FK_CustomizeWorkshopSettings_WeeklyOffDays_CustomizeWorkshopSettings_ParentId",
column: x => x.ParentId,
principalTable: "CustomizeWorkshopSettings",
principalColumn: "id",
onDelete: ReferentialAction.Cascade);
});
migrationBuilder.CreateIndex(
name: "IX_CustomizeWorkshopEmployeeSettings_WeeklyOffDays_ParentId",
table: "CustomizeWorkshopEmployeeSettings_WeeklyOffDays",
column: "ParentId");
migrationBuilder.CreateIndex(
name: "IX_CustomizeWorkshopGroupSettings_WeeklyOffDays_ParentId",
table: "CustomizeWorkshopGroupSettings_WeeklyOffDays",
column: "ParentId");
migrationBuilder.CreateIndex(
name: "IX_CustomizeWorkshopSettings_WeeklyOffDays_ParentId",
table: "CustomizeWorkshopSettings_WeeklyOffDays",
column: "ParentId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "CustomizeWorkshopEmployeeSettings_WeeklyOffDays");
migrationBuilder.DropTable(
name: "CustomizeWorkshopGroupSettings_WeeklyOffDays");
migrationBuilder.DropTable(
name: "CustomizeWorkshopSettings_WeeklyOffDays");
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,40 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace CompanyManagment.EFCore.Migrations
{
/// <inheritdoc />
public partial class NewOptionsToWorkshop : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsStaticCheckout",
table: "Workshops",
type: "bit",
nullable: false,
defaultValue: false);
migrationBuilder.AddColumn<bool>(
name: "RotatingShiftCompute",
table: "Workshops",
type: "bit",
nullable: false,
defaultValue: false);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IsStaticCheckout",
table: "Workshops");
migrationBuilder.DropColumn(
name: "RotatingShiftCompute",
table: "Workshops");
}
}
}

View File

@@ -5714,10 +5714,16 @@ namespace CompanyManagment.EFCore.Migrations
b.Property<bool>("IsOldContract")
.HasColumnType("bit");
b.Property<bool>("IsStaticCheckout")
.HasColumnType("bit");
b.Property<string>("Population")
.HasMaxLength(25)
.HasColumnType("nvarchar(25)");
b.Property<bool>("RotatingShiftCompute")
.HasColumnType("bit");
b.Property<bool>("SignCheckout")
.HasColumnType("bit");
@@ -7643,6 +7649,32 @@ namespace CompanyManagment.EFCore.Migrations
.HasForeignKey("CustomizeWorkshopEmployeeSettingsid");
});
b.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.Base.WeeklyOffDay", "WeeklyOffDays", b1 =>
{
b1.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<long>("Id"));
b1.Property<string>("DayOfWeek")
.IsRequired()
.HasMaxLength(15)
.HasColumnType("nvarchar(15)");
b1.Property<long>("ParentId")
.HasColumnType("bigint");
b1.HasKey("Id");
b1.HasIndex("ParentId");
b1.ToTable("CustomizeWorkshopEmployeeSettings_WeeklyOffDays");
b1.WithOwner()
.HasForeignKey("ParentId");
});
b.Navigation("BaseYearsPay");
b.Navigation("BonusesPay");
@@ -7678,6 +7710,8 @@ namespace CompanyManagment.EFCore.Migrations
b.Navigation("OverTimePay");
b.Navigation("ShiftPay");
b.Navigation("WeeklyOffDays");
});
modelBuilder.Entity("Company.Domain.CustomizeWorkshopGroupSettingsAgg.Entities.CustomizeWorkshopGroupSettings", b =>
@@ -8201,6 +8235,32 @@ namespace CompanyManagment.EFCore.Migrations
.HasForeignKey("CustomizeWorkshopGroupSettingsid");
});
b.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.Base.WeeklyOffDay", "WeeklyOffDays", b1 =>
{
b1.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<long>("Id"));
b1.Property<string>("DayOfWeek")
.IsRequired()
.HasMaxLength(15)
.HasColumnType("nvarchar(15)");
b1.Property<long>("ParentId")
.HasColumnType("bigint");
b1.HasKey("Id");
b1.HasIndex("ParentId");
b1.ToTable("CustomizeWorkshopGroupSettings_WeeklyOffDays");
b1.WithOwner()
.HasForeignKey("ParentId");
});
b.Navigation("BaseYearsPay");
b.Navigation("BonusesPay");
@@ -8236,6 +8296,8 @@ namespace CompanyManagment.EFCore.Migrations
b.Navigation("OverTimePay");
b.Navigation("ShiftPay");
b.Navigation("WeeklyOffDays");
});
modelBuilder.Entity("Company.Domain.CustomizeWorkshopSettingsAgg.Entities.CustomizeWorkshopSettings", b =>
@@ -8686,6 +8748,32 @@ namespace CompanyManagment.EFCore.Migrations
.HasForeignKey("CustomizeWorkshopSettingsid");
});
b.OwnsMany("_0_Framework.Domain.CustomizeCheckoutShared.Base.WeeklyOffDay", "WeeklyOffDays", b1 =>
{
b1.Property<long>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("bigint");
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property<long>("Id"));
b1.Property<string>("DayOfWeek")
.IsRequired()
.HasMaxLength(15)
.HasColumnType("nvarchar(15)");
b1.Property<long>("ParentId")
.HasColumnType("bigint");
b1.HasKey("Id");
b1.HasIndex("ParentId");
b1.ToTable("CustomizeWorkshopSettings_WeeklyOffDays");
b1.WithOwner()
.HasForeignKey("ParentId");
});
b.Navigation("BaseYearsPay");
b.Navigation("BonusesPay");
@@ -8714,6 +8802,8 @@ namespace CompanyManagment.EFCore.Migrations
b.Navigation("ShiftPay");
b.Navigation("WeeklyOffDays");
b.Navigation("Workshop");
});

View File

@@ -18,332 +18,449 @@ namespace CompanyManagment.EFCore.Repository;
public class AdminMonthlyOverviewRepository : RepositoryBase<long, AdminMonthlyOverview>, IAdminMonthlyOverviewRepository
{
private readonly CompanyContext _companyContext;
private readonly AccountContext _accountContext;
public AdminMonthlyOverviewRepository(CompanyContext companyContext, AccountContext accountContext) : base(companyContext)
{
_companyContext = companyContext;
_accountContext = accountContext;
}
private readonly CompanyContext _companyContext;
private readonly AccountContext _accountContext;
public AdminMonthlyOverviewRepository(CompanyContext companyContext, AccountContext accountContext) : base(companyContext)
{
_companyContext = companyContext;
_accountContext = accountContext;
}
public async Task<List<AdminMonthlyOverviewListViewModel>> GetWorkshopStatus(AdminMonthlyOverviewSearchModel searchModel)
{
public async Task<List<AdminMonthlyOverviewListViewModel>> GetWorkshopStatus(AdminMonthlyOverviewSearchModel searchModel)
{
var year = searchModel.Year;
var month = searchModel.Month;
var accountId = searchModel.AdminAccountId;
// اگر تبدیل تاریخ به میلادی موفق نبود، لیست خالی برگردان
if ($"{year:0000}/{month:00}/01".TryToGeorgianDateTime(out var targetStartDate) == false)
return [];
var targetEndDate = Tools.FindeEndOfMonth(targetStartDate.ToFarsi()).ToGeorgianDateTime();
var year = searchModel.Year;
var month = searchModel.Month;
var accountId = searchModel.AdminAccountId;
// اگر تبدیل تاریخ به میلادی موفق نبود، لیست خالی برگردان
if ($"{year:0000}/{month:00}/01".TryToGeorgianDateTime(out var targetStartDate) == false)
return [];
var targetEndDate = Tools.FindeEndOfMonth(targetStartDate.ToFarsi()).ToGeorgianDateTime();
_ = $"{year:0000}/{month:00}/01".ToGeorgianDateTime().AddMonthsFa(1, out var nextFirstMonth);
var nextEndMonth = Tools.FindeEndOfMonth(nextFirstMonth.ToFarsi()).ToGeorgianDateTime();
_ = $"{year:0000}/{month:00}/01".ToGeorgianDateTime().AddMonthsFa(1, out var nextFirstMonth);
var nextEndMonth = Tools.FindeEndOfMonth(nextFirstMonth.ToFarsi()).ToGeorgianDateTime();
// دریافت اطلاعات ادمین
var adminAccount = await _accountContext.Accounts.FirstOrDefaultAsync(x => x.id == searchModel.AdminAccountId);
// دریافت اطلاعات ادمین
var adminAccount = await _accountContext.Accounts.FirstOrDefaultAsync(x => x.id == searchModel.AdminAccountId);
// اگر ادمین پیدا نشد، لیست خالی برگردان
if (adminAccount == null)
return [];
// اگر ادمین پیدا نشد، لیست خالی برگردان
if (adminAccount == null)
return [];
// دریافت طرف حساب های معتبر برای تاریخ مورد نظر
var contractingPartyIds = _companyContext.InstitutionContractSet.AsNoTracking()
.Where(c => c.ContractStartGr <= targetEndDate && c.ContractEndGr >= targetStartDate)
.Select(c => c.ContractingPartyId);
// دریافت طرف حساب های معتبر برای تاریخ مورد نظر
var contractingPartyIds = _companyContext.InstitutionContractSet.AsNoTracking()
.Where(c => c.ContractStartGr <= targetEndDate && c.ContractEndGr >= targetStartDate)
.Select(c => c.ContractingPartyId);
// دریافت کارگاه‌های مرتبط با اکانت
// دریافت کارگاه‌های مرتبط با اکانت
var workshopAccounts = _companyContext.WorkshopAccounts
.AsNoTracking()
.Where(w => w.AccountId == accountId)
.Select(w => w.WorkshopId).ToList();
var workshopAccounts = _companyContext.WorkshopAccounts
.AsNoTracking()
.Where(w => w.AccountId == accountId)
.Select(w => w.WorkshopId).ToList();
var workshopsHasLeftWorkEmployees = _companyContext.LeftWorkList.Where(x =>
((x.StartWorkDate <= targetEndDate && x.LeftWorkDate.AddDays(-1) >= targetStartDate)
|| (x.StartWorkDate <= nextEndMonth && x.LeftWorkDate.AddDays(-1) >= nextFirstMonth)) && workshopAccounts.Contains(x.WorkshopId)).Select(x => x.WorkshopId);
var workshopsHasLeftWorkEmployees = _companyContext.LeftWorkList.Where(x =>
((x.StartWorkDate <= targetEndDate && x.LeftWorkDate.AddDays(-1) >= targetStartDate)
|| (x.StartWorkDate <= nextEndMonth && x.LeftWorkDate.AddDays(-1) >= nextFirstMonth)) && workshopAccounts.Contains(x.WorkshopId)).Select(x => x.WorkshopId);
// دریافت کارگاه‌های مربوط به طرف حساب و اکانت
// Replace the selected code with the following to return a list of anonymous objects containing both workshop and contractingParty
var workshopsWithContractingParty = await _companyContext.Workshops
.AsNoTracking()
.Where(w => workshopsHasLeftWorkEmployees.Contains(w.id) && w.IsActive)
.Include(w => w.WorkshopEmployers)
.ThenInclude(we => we.Employer)
.ThenInclude(e => e.ContractingParty).AsSplitQuery().
Where(w => w.WorkshopEmployers.Any(we =>
we.Employer != null &&
contractingPartyIds.Contains(we.Employer.ContractingPartyId)))
.Select(w => new
{
Workshop = w,
ContractingParty = w.WorkshopEmployers
.Where(we => we.Employer != null && contractingPartyIds.Contains(we.Employer.ContractingPartyId))
.Select(we => we.Employer.ContractingParty)
.FirstOrDefault()
})
.ToListAsync();
// دریافت کارگاه‌های مربوط به طرف حساب و اکانت
// Replace the selected code with the following to return a list of anonymous objects containing both workshop and contractingParty
var workshopsWithContractingParty = await _companyContext.Workshops
.AsNoTracking()
.Where(w => workshopsHasLeftWorkEmployees.Contains(w.id) && w.IsActive)
.Include(w => w.WorkshopEmployers)
.ThenInclude(we => we.Employer)
.ThenInclude(e => e.ContractingParty).AsSplitQuery().
Where(w => w.WorkshopEmployers.Any(we =>
we.Employer != null &&
contractingPartyIds.Contains(we.Employer.ContractingPartyId)))
.Select(w => new
{
Workshop = w,
ContractingParty = w.WorkshopEmployers
.Where(we => we.Employer != null && contractingPartyIds.Contains(we.Employer.ContractingPartyId))
.Select(we => we.Employer.ContractingParty)
.FirstOrDefault()
})
.ToListAsync();
var workshopIds = workshopsWithContractingParty.Select(x => x.Workshop.id).ToList();
var workshopIds = workshopsWithContractingParty.Select(x => x.Workshop.id).ToList();
// پیدا کردن کارگاه‌هایی که قبلاً برای این ماه/سال AdminMonthlyOverview دارند
var adminMonthlyOverviewWorkshopIds = await _companyContext.AdminMonthlyOverviews
.AsNoTracking()
.Where(x => workshopIds.Contains(x.WorkshopId) && x.Month == month && x.Year == year)
.Select(x => x.WorkshopId)
.ToListAsync();
// پیدا کردن کارگاه‌هایی که قبلاً برای این ماه/سال AdminMonthlyOverview دارند
var adminMonthlyOverviewWorkshopIds = await _companyContext.AdminMonthlyOverviews
.AsNoTracking()
.Where(x => workshopIds.Contains(x.WorkshopId) && x.Month == month && x.Year == year)
.Select(x => x.WorkshopId)
.ToListAsync();
// پیدا کردن کارگاه‌هایی که نیاز به ایجاد AdminMonthlyOverview جدید دارند
var notExistAdminMonthlyReviewsWorkshopIds = workshopIds
.Except(adminMonthlyOverviewWorkshopIds)
.ToList();
// پیدا کردن کارگاه‌هایی که نیاز به ایجاد AdminMonthlyOverview جدید دارند
var notExistAdminMonthlyReviewsWorkshopIds = workshopIds
.Except(adminMonthlyOverviewWorkshopIds)
.ToList();
// ایجاد رکوردهای AdminMonthlyOverview که وجود ندارند
if (notExistAdminMonthlyReviewsWorkshopIds.Any())
await CreateRangeAdminMonthlyOverview(notExistAdminMonthlyReviewsWorkshopIds, month, year);
// به‌روزرسانی وضعیت‌ها
await UpdateAdminMonthlyOverviewStatus(year, month, workshopIds, targetStartDate,targetEndDate, nextFirstMonth,nextEndMonth);
// ایجاد رکوردهای AdminMonthlyOverview که وجود ندارند
if (notExistAdminMonthlyReviewsWorkshopIds.Any())
await CreateRangeAdminMonthlyOverview(notExistAdminMonthlyReviewsWorkshopIds, month, year);
// به‌روزرسانی وضعیت‌ها
await UpdateAdminMonthlyOverviewStatus(year, month, workshopIds, targetStartDate, targetEndDate, nextFirstMonth, nextEndMonth);
if (searchModel.ActivationStatus != IsActive.None)
{
var isBlock = searchModel.ActivationStatus == IsActive.True ? "false" : "true";
workshopsWithContractingParty = workshopsWithContractingParty
.Where(x => x.ContractingParty?.IsBlock == isBlock).ToList();
if (searchModel.ActivationStatus != IsActive.None)
{
var isBlock = searchModel.ActivationStatus == IsActive.True ? "false" : "true";
workshopsWithContractingParty = workshopsWithContractingParty
.Where(x => x.ContractingParty?.IsBlock == isBlock).ToList();
workshopIds = workshopsWithContractingParty.Select(x => x.Workshop.id).ToList();
}
// دریافت همه AdminMonthlyOverview برای این کارگاه‌ها/ماه/سال
var adminMonthlyOverviewsQuery = _companyContext.AdminMonthlyOverviews
.Where(x => workshopIds.Contains(x.WorkshopId) && x.Month == month && x.Year == year);
if (searchModel.WorkshopId > 0)
{
adminMonthlyOverviewsQuery = adminMonthlyOverviewsQuery.Where(x => x.WorkshopId == searchModel.WorkshopId);
}
workshopIds = workshopsWithContractingParty.Select(x => x.Workshop.id).ToList();
}
// دریافت همه AdminMonthlyOverview برای این کارگاه‌ها/ماه/سال
var adminMonthlyOverviewsQuery = _companyContext.AdminMonthlyOverviews
.Where(x => workshopIds.Contains(x.WorkshopId) && x.Month == month && x.Year == year);
if (searchModel.WorkshopId > 0)
{
adminMonthlyOverviewsQuery = adminMonthlyOverviewsQuery.Where(x => x.WorkshopId == searchModel.WorkshopId);
}
if (searchModel.EmployerId > 0)
{
var searchWorkshopId = workshopsWithContractingParty.Where(x => x.Workshop.WorkshopEmployers.Any(e => e.EmployerId == searchModel.EmployerId)).Select(x => x.Workshop.id).ToList();
adminMonthlyOverviewsQuery = adminMonthlyOverviewsQuery.Where(x => searchWorkshopId.Contains(x.WorkshopId));
}
var employeeCheckoutCounts = _companyContext.LeftWorkList.Where(x =>
x.StartWorkDate <= targetStartDate && x.LeftWorkDate.AddDays(-1) >= targetStartDate && workshopIds.Contains(x.WorkshopId))
.GroupBy(x => x.WorkshopId).Select(x => new { EmployeeCounts = x.Count(), WorkshopId = x.Key }).ToList();
var employeeContractCounts = _companyContext.LeftWorkList.Where(x =>
x.StartWorkDate <= nextFirstMonth && x.LeftWorkDate.AddDays(-1) >= nextFirstMonth && workshopIds.Contains(x.WorkshopId))
.GroupBy(x => x.WorkshopId).Select(x => new { EmployeeCounts = x.Count(), WorkshopId = x.Key }).ToList();
var adminMonthlyOverviewsList = await adminMonthlyOverviewsQuery.ToListAsync();
var now = DateTime.Today;
//پرسنل ادمین اجرایی
var operatorAdminAccounts = _accountContext.AccountLeftWorks
.Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkGr <= now && x.LeftWorkGr >= now &&
x.RoleId == 5).Select(x => new { x.WorkshopId, x.AccountId })
.Join(_accountContext.Accounts,
x => x.AccountId,
account => account.id, (x, account) => new
{
x.WorkshopId,
account.Fullname
}).ToList();
var adminMonthlyOverviewList = adminMonthlyOverviewsList.Select(x =>
{
var employeeCheckoutCount = employeeCheckoutCounts.FirstOrDefault(e => e.WorkshopId == x.WorkshopId);
var employeeContractCount = employeeContractCounts.FirstOrDefault(e => e.WorkshopId == x.WorkshopId);
var workshopWithContractingParty =
workshopsWithContractingParty.FirstOrDefault(w => w.Workshop.id == x.WorkshopId);
var operatorAccount = operatorAdminAccounts.FirstOrDefault(o => o.WorkshopId == x.WorkshopId);
var workshop = workshopWithContractingParty?.Workshop;
var contractingParty = workshopWithContractingParty?.ContractingParty;
var employer = workshop?.WorkshopEmployers.FirstOrDefault()?.Employer;
return new AdminMonthlyOverviewListViewModel
{
WorkshopId = x.WorkshopId,
Status = x.Status,
Id = x.id,
WorkshopName = workshop?.WorkshopFullName ?? "",
WorkshopArchiveCode = workshop?.ArchiveCode ?? "",
WorkshopArchiveCodeInt = workshop?.ArchiveCode.ExtractIntNumbers() ?? 0,
Address = workshop?.Address ?? "",
City = workshop?.City ?? "",
Province = workshop?.State ?? "",
EmployerName = employer?.FullName ?? "",
EmployerPhoneNumber = employer?.Phone ?? "",
AdminFullName = operatorAccount?.Fullname ?? "",
CheckoutEmployeeCount = employeeCheckoutCount?.EmployeeCounts ?? 0,
ContractEmployeeCount = employeeContractCount?.EmployeeCounts ?? 0,
AgentPhoneNumber = "",
IsBlock = contractingParty?.IsBlock == "true"
};
}).OrderBy(x => x.IsBlock).ThenBy(x => x.WorkshopArchiveCodeInt).ToList();
return adminMonthlyOverviewList;
}
public async Task<AdminMonthlyOverViewCounterVm> GetCounter(int year, int month, long accountId)
{
var searchModel = new AdminMonthlyOverviewSearchModel()
{
AdminAccountId = accountId,
Month = month,
Year = year
};
var list = await GetWorkshopStatus(searchModel);
var allCount = list.Count;
var archivedCount = list.Count(x => x.Status == AdminMonthlyOverviewStatus.Archived);
var createDocCount = list.Count(x => x.Status == AdminMonthlyOverviewStatus.CreateDocuments);
var visitCompleteCount = list.Count(x => x.Status == AdminMonthlyOverviewStatus.VisitCompleted);
var visitInProgressCount = list.Count(x => x.Status == AdminMonthlyOverviewStatus.VisitInProgress);
var visitPendingCount = list.Count(x => x.Status == AdminMonthlyOverviewStatus.VisitPending);
return new AdminMonthlyOverViewCounterVm
{
All = allCount,
Archived = archivedCount,
VisitPending = visitPendingCount,
VisitInProgress = visitInProgressCount,
VisitCompleted = visitCompleteCount,
CreateDocument = createDocCount
};
}
private async Task UpdateAdminMonthlyOverviewStatus(int year, int month, List<long> workshopIds, DateTime targetStartDate,DateTime targetEndDate, DateTime nextStartMonth,DateTime nextEndMonth)
{
var vipGroup = _companyContext.CustomizeWorkshopEmployeeSettings.Where(x => x.CustomizeWorkshopGroupSettingId == 117)
.Select(x => x.EmployeeId)
.Except([5976]).ToList();
var workingCheckoutEmployeeIds = _companyContext.LeftWorkList.AsNoTracking()
.Join(
_companyContext.Contracts.AsNoTracking(),
leftWork => new { leftWork.EmployeeId, WorkshopId = leftWork.WorkshopId },
contract => new { contract.EmployeeId, WorkshopId = contract.WorkshopIds },
(leftWork, contract) => new { leftWork, contract }
)
.Where(x =>
workshopIds.Contains(x.leftWork.WorkshopId) &&
x.leftWork.StartWorkDate <= targetEndDate &&
x.leftWork.LeftWorkDate.AddDays(-1) >= targetStartDate &&
x.contract.ContarctStart <= targetEndDate &&
x.contract.ContractEnd >= targetStartDate &&
!vipGroup.Contains(x.leftWork.EmployeeId) &&
!_companyContext.EmployeeClientTemps
.Any(temp => temp.EmployeeId == x.leftWork.EmployeeId && temp.WorkshopId == x.leftWork.WorkshopId)
)
.Select(x => new { x.leftWork.WorkshopId, x.leftWork.EmployeeId });
var workingContractEmployeeIds = _companyContext.LeftWorkList.AsNoTracking()
.Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkDate <= nextEndMonth && x.LeftWorkDate.AddDays(-1) >= nextStartMonth &&
!vipGroup.Contains(x.EmployeeId) &&
!_companyContext.EmployeeClientTemps
.Any(temp => temp.EmployeeId == x.EmployeeId && temp.WorkshopId == x.WorkshopId)
).Select(x => new { x.WorkshopId, x.EmployeeId });
var contractSet = (await _companyContext.Contracts.AsNoTracking()
.Where(x => x.ContarctStart <= nextEndMonth && x.ContractEnd >= nextStartMonth && workshopIds.Contains(x.WorkshopIds))
.Select(x => new { x.WorkshopIds, x.EmployeeId })
.ToListAsync())
.Select(x => (x.WorkshopIds, x.EmployeeId))
.ToHashSet();
var checkoutSet = (await _companyContext.CheckoutSet.AsNoTracking()
.Where(x => x.ContractStart <= targetEndDate && x.ContractEnd >= targetStartDate && workshopIds.Contains(x.WorkshopId))
.Select(x => new { x.WorkshopId, x.EmployeeId })
.ToListAsync())
.Select(x => (x.WorkshopId, x.EmployeeId))
.ToHashSet();
var workingCheckoutGrouping = workingCheckoutEmployeeIds.GroupBy(x => x.WorkshopId).ToList();
var workingContractGrouping = workingContractEmployeeIds.GroupBy(x => x.WorkshopId).Select(x => new
{
WorkshopId = x.Key,
Data = x.ToList()
}).ToList();
var workshopsWithFullContracts = workingContractGrouping
.Where(g => g.Data.All(emp => contractSet.Contains((emp.WorkshopId, emp.EmployeeId))))
.Select(g => g.WorkshopId)
.ToList();
var list = workingContractEmployeeIds.ToList().Where(x=>!contractSet.Any(a=>a.EmployeeId== x.EmployeeId&&a.WorkshopIds == x.WorkshopId)).ToList();
var workshopsWithFullCheckout = workingCheckoutGrouping
.Where(g => g.All(emp => checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId))))
.Select(g => g.Key)
.ToList();
var fullyCoveredWorkshops = workshopsWithFullContracts.Intersect(workshopsWithFullCheckout).ToList();
//var notFullyCoveredWorkshops = groupedCheckout
// .Where(g => g.Any(emp =>
// !contractSet.Contains((emp.WorkshopId, emp.EmployeeId)) ||
// !checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId))))
// .Select(g => g.Key)
// .ToList();
var notFullyCoveredWorkshops = workshopIds.Except(fullyCoveredWorkshops);
var adminMonthlyOverviews = _companyContext.AdminMonthlyOverviews
.Where(x => x.Month == month && x.Year == year);
var adminMonthlyOverviewsWithFullContracts = await adminMonthlyOverviews
.Where(x => fullyCoveredWorkshops.Contains(x.WorkshopId) && x.Status == AdminMonthlyOverviewStatus.CreateDocuments)
.ToListAsync();
var adminMonthlyOverviewsWithNotFullContracts = await adminMonthlyOverviews
.Where(x => notFullyCoveredWorkshops.Contains(x.WorkshopId) && x.Status != AdminMonthlyOverviewStatus.CreateDocuments)
.ToListAsync();
foreach (var adminMonthlyOverview in adminMonthlyOverviewsWithFullContracts)
adminMonthlyOverview.SetStatus(AdminMonthlyOverviewStatus.VisitPending);
foreach (var adminMonthlyOverview in adminMonthlyOverviewsWithNotFullContracts)
adminMonthlyOverview.SetStatus(AdminMonthlyOverviewStatus.CreateDocuments);
await _companyContext.SaveChangesAsync();
}
private async Task CreateRangeAdminMonthlyOverview(List<long> workshopIds, int month, int year)
{
foreach (var workshopId in workshopIds)
{
var adminMonthlyOverview =
new AdminMonthlyOverview(workshopId, month, year, AdminMonthlyOverviewStatus.CreateDocuments);
await _companyContext.AddAsync(adminMonthlyOverview);
}
await _companyContext.SaveChangesAsync();
}
if (searchModel.EmployerId > 0)
{
var searchWorkshopId = workshopsWithContractingParty.Where(x => x.Workshop.WorkshopEmployers.Any(e => e.EmployerId == searchModel.EmployerId)).Select(x => x.Workshop.id).ToList();
adminMonthlyOverviewsQuery = adminMonthlyOverviewsQuery.Where(x => searchWorkshopId.Contains(x.WorkshopId));
}
var employeeCheckoutCounts = _companyContext.LeftWorkList.Where(x =>
x.StartWorkDate <= targetStartDate && x.LeftWorkDate.AddDays(-1) >= targetStartDate && workshopIds.Contains(x.WorkshopId))
.GroupBy(x => x.WorkshopId).Select(x => new { EmployeeCounts = x.Count(), WorkshopId = x.Key }).ToList();
var employeeContractCounts = _companyContext.LeftWorkList.Where(x =>
x.StartWorkDate <= nextFirstMonth && x.LeftWorkDate.AddDays(-1) >= nextFirstMonth && workshopIds.Contains(x.WorkshopId))
.GroupBy(x => x.WorkshopId).Select(x => new { EmployeeCounts = x.Count(), WorkshopId = x.Key }).ToList();
var adminMonthlyOverviewsList = await adminMonthlyOverviewsQuery.ToListAsync();
var now = DateTime.Today;
//پرسنل ادمین اجرایی
var operatorAdminAccounts = _accountContext.AccountLeftWorks
.Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkGr <= now && x.LeftWorkGr >= now &&
x.RoleId == 5).Select(x => new { x.WorkshopId, x.AccountId })
.Join(_accountContext.Accounts,
x => x.AccountId,
account => account.id, (x, account) => new
{
x.WorkshopId,
account.Fullname
}).ToList();
var adminMonthlyOverviewList = adminMonthlyOverviewsList.Select(x =>
{
var employeeCheckoutCount = employeeCheckoutCounts.FirstOrDefault(e => e.WorkshopId == x.WorkshopId);
var employeeContractCount = employeeContractCounts.FirstOrDefault(e => e.WorkshopId == x.WorkshopId);
var workshopWithContractingParty =
workshopsWithContractingParty.FirstOrDefault(w => w.Workshop.id == x.WorkshopId);
var operatorAccount = operatorAdminAccounts.FirstOrDefault(o => o.WorkshopId == x.WorkshopId);
var workshop = workshopWithContractingParty?.Workshop;
var contractingParty = workshopWithContractingParty?.ContractingParty;
var employer = workshop?.WorkshopEmployers.FirstOrDefault()?.Employer;
return new AdminMonthlyOverviewListViewModel
{
WorkshopId = x.WorkshopId,
Status = x.Status,
Id = x.id,
WorkshopName = workshop?.WorkshopFullName ?? "",
WorkshopArchiveCode = workshop?.ArchiveCode ?? "",
WorkshopArchiveCodeInt = workshop?.ArchiveCode.ExtractIntNumbers() ?? 0,
Address = workshop?.Address ?? "",
City = workshop?.City ?? "",
Province = workshop?.State ?? "",
EmployerName = employer?.FullName ?? "",
EmployerPhoneNumber = employer?.Phone ?? "",
AdminFullName = operatorAccount?.Fullname ?? "",
CheckoutEmployeeCount = employeeCheckoutCount?.EmployeeCounts ?? 0,
ContractEmployeeCount = employeeContractCount?.EmployeeCounts ?? 0,
AgentPhoneNumber = "",
IsBlock = contractingParty?.IsBlock == "true"
};
}).OrderBy(x => x.IsBlock).ThenBy(x => x.WorkshopArchiveCodeInt).ToList();
return adminMonthlyOverviewList;
}
public async Task<AdminMonthlyOverViewCounterVm> GetCounter(int year, int month, long accountId)
{
var searchModel = new AdminMonthlyOverviewSearchModel()
{
AdminAccountId = accountId,
Month = month,
Year = year
};
var list = await GetWorkshopStatus(searchModel);
var allCount = list.Count;
var archivedCount = list.Count(x => x.Status == AdminMonthlyOverviewStatus.Archived);
var createDocCount = list.Count(x => x.Status == AdminMonthlyOverviewStatus.CreateDocuments);
var visitCompleteCount = list.Count(x => x.Status == AdminMonthlyOverviewStatus.VisitCompleted);
var visitInProgressCount = list.Count(x => x.Status == AdminMonthlyOverviewStatus.VisitInProgress);
var visitPendingCount = list.Count(x => x.Status == AdminMonthlyOverviewStatus.VisitPending);
return new AdminMonthlyOverViewCounterVm
{
All = allCount,
Archived = archivedCount,
VisitPending = visitPendingCount,
VisitInProgress = visitInProgressCount,
VisitCompleted = visitCompleteCount,
CreateDocument = createDocCount
};
}
private async Task UpdateAdminMonthlyOverviewStatus(int year, int month, List<long> workshopIds, DateTime targetStartDate, DateTime targetEndDate, DateTime nextStartMonth, DateTime nextEndMonth)
{
var vipGroup = _companyContext.CustomizeWorkshopEmployeeSettings.Where(x => x.CustomizeWorkshopGroupSettingId == 117)
.Select(x => x.EmployeeId)
.Except([5976]).ToHashSet();
var workingCheckoutEmployeeIds = GetWorkingCheckoutEmployeeIds(workshopIds, targetStartDate, targetEndDate, vipGroup);
//var workingCheckoutEmployeeIds = _companyContext.LeftWorkList.AsNoTracking()
// .Join(
// _companyContext.Contracts.AsNoTracking(),
// leftWork => new { leftWork.EmployeeId, WorkshopId = leftWork.WorkshopId },
// contract => new { contract.EmployeeId, WorkshopId = contract.WorkshopIds },
// (leftWork, contract) => new { leftWork, contract }
// )
// .Where(x =>
// workshopIds.Contains(x.leftWork.WorkshopId) &&
// x.leftWork.StartWorkDate <= targetEndDate &&
// x.leftWork.LeftWorkDate.AddDays(-1) >= targetStartDate &&
// x.contract.ContarctStart <= targetEndDate &&
// x.contract.ContractEnd >= targetStartDate &&
// !vipGroup.Contains(x.leftWork.EmployeeId) &&
// !_companyContext.EmployeeClientTemps
// .Any(temp => temp.EmployeeId == x.leftWork.EmployeeId && temp.WorkshopId == x.leftWork.WorkshopId)
// )
// .Select(x => new { x.leftWork.WorkshopId, x.leftWork.EmployeeId });
var workingContractEmployeeIds = _companyContext.LeftWorkList.AsNoTracking()
.Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkDate <= nextEndMonth && x.LeftWorkDate.AddDays(-1) >= nextStartMonth &&
!vipGroup.Contains(x.EmployeeId) &&
!_companyContext.EmployeeClientTemps
.Any(temp => temp.EmployeeId == x.EmployeeId && temp.WorkshopId == x.WorkshopId))
.GroupJoin(_companyContext.EmployeeComputeOptionsSet.Where(o => workshopIds.Contains(o.WorkshopId)),
x => new { x.EmployeeId, x.WorkshopId },
option => new { option.EmployeeId, option.WorkshopId },
(x, options) => new { LeftWork = x, options })
.SelectMany(
x => x.options.DefaultIfEmpty(),
(x, option) => new { x.LeftWork, option })
.Where(x => x.option != null ? x.option.CreateContract
: x.LeftWork.Workshop.CreateContract)
.Select(x => new { x.LeftWork.WorkshopId, x.LeftWork.EmployeeId });
//var workingContractEmployeeIds = _companyContext.LeftWorkList.AsNoTracking()
// .Where(x => workshopIds.Contains(x.WorkshopId) && x.StartWorkDate <= nextEndMonth && x.LeftWorkDate.AddDays(-1) >= nextStartMonth &&
// !vipGroup.Contains(x.EmployeeId) &&
// !_companyContext.EmployeeClientTemps
// .Any(temp => temp.EmployeeId == x.EmployeeId && temp.WorkshopId == x.WorkshopId)
// ).Select(x => new { x.WorkshopId, x.EmployeeId });
var contractSet = (await _companyContext.Contracts.AsNoTracking()
.Where(x => x.ContarctStart <= nextEndMonth && x.ContractEnd >= nextStartMonth && workshopIds.Contains(x.WorkshopIds))
.Select(x => new { x.WorkshopIds, x.EmployeeId })
.ToListAsync())
.Select(x => (x.WorkshopIds, x.EmployeeId))
.ToHashSet();
var checkoutSet = (await _companyContext.CheckoutSet.AsNoTracking()
.Where(x => x.ContractStart <= targetEndDate && x.ContractEnd >= targetStartDate && workshopIds.Contains(x.WorkshopId))
.Select(x => new { x.WorkshopId, x.EmployeeId })
.ToListAsync())
.Select(x => (x.WorkshopId, x.EmployeeId))
.ToHashSet();
var workingCheckoutGrouping = workingCheckoutEmployeeIds.GroupBy(x => x.WorkshopId).ToList();
var workingContractGrouping = workingContractEmployeeIds.GroupBy(x => x.WorkshopId).Select(x => new
{
WorkshopId = x.Key,
Data = x.ToList()
}).ToList();
var workshopsWithFullContracts = workingContractGrouping
.Where(g => g.Data.All(emp => contractSet.Contains((emp.WorkshopId, emp.EmployeeId))))
.Select(g => g.WorkshopId)
.ToList();
var list = workingContractEmployeeIds.ToList().Where(x => !contractSet.Any(a => a.EmployeeId == x.EmployeeId && a.WorkshopIds == x.WorkshopId)).ToList();
var workshopsWithFullCheckout = workingCheckoutGrouping
.Where(g => g.All(emp => checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId))))
.Select(g => g.Key)
.ToList();
var fullyCoveredWorkshops = workshopsWithFullContracts.Intersect(workshopsWithFullCheckout).ToList();
//var notFullyCoveredWorkshops = groupedCheckout
// .Where(g => g.Any(emp =>
// !contractSet.Contains((emp.WorkshopId, emp.EmployeeId)) ||
// !checkoutSet.Contains((emp.WorkshopId, emp.EmployeeId))))
// .Select(g => g.Key)
// .ToList();
var notFullyCoveredWorkshops = workshopIds.Except(fullyCoveredWorkshops);
var adminMonthlyOverviews = _companyContext.AdminMonthlyOverviews
.Where(x => x.Month == month && x.Year == year);
var adminMonthlyOverviewsWithFullContracts = await adminMonthlyOverviews
.Where(x => fullyCoveredWorkshops.Contains(x.WorkshopId) && x.Status == AdminMonthlyOverviewStatus.CreateDocuments)
.ToListAsync();
var adminMonthlyOverviewsWithNotFullContracts = await adminMonthlyOverviews
.Where(x => notFullyCoveredWorkshops.Contains(x.WorkshopId) && x.Status != AdminMonthlyOverviewStatus.CreateDocuments)
.ToListAsync();
foreach (var adminMonthlyOverview in adminMonthlyOverviewsWithFullContracts)
adminMonthlyOverview.SetStatus(AdminMonthlyOverviewStatus.VisitPending);
foreach (var adminMonthlyOverview in adminMonthlyOverviewsWithNotFullContracts)
adminMonthlyOverview.SetStatus(AdminMonthlyOverviewStatus.CreateDocuments);
await _companyContext.SaveChangesAsync();
}
private async Task CreateRangeAdminMonthlyOverview(List<long> workshopIds, int month, int year)
{
foreach (var workshopId in workshopIds)
{
var adminMonthlyOverview =
new AdminMonthlyOverview(workshopId, month, year, AdminMonthlyOverviewStatus.CreateDocuments);
await _companyContext.AddAsync(adminMonthlyOverview);
}
await _companyContext.SaveChangesAsync();
}
private List<(long WorkshopId,long EmployeeId)> GetWorkingCheckoutEmployeeIds(List<long> workshopIds, DateTime targetStartDate, DateTime targetEndDate,
HashSet<long> vipGroup)
{
//var workingCheckoutEmployeeIds = _companyContext.LeftWorkList.AsNoTracking()
// .Join(
// _companyContext.Contracts.AsNoTracking(),
// leftWork => new { leftWork.EmployeeId, WorkshopId = leftWork.WorkshopId },
// contract => new { contract.EmployeeId, WorkshopId = contract.WorkshopIds },
// (leftWork, contract) => new { leftWork, contract }
// ).GroupJoin(_companyContext.EmployeeComputeOptionsSet.Where(o => workshopIds.Contains(o.WorkshopId)),
// x => new { x.leftWork.EmployeeId, x.leftWork.WorkshopId },
// option => new { option.EmployeeId, option.WorkshopId },
// (x, options) => new { x.leftWork, x.contract, options })
// .SelectMany(
// x => x.options.DefaultIfEmpty(),
// (x, option) => new { x.leftWork, x.contract, option })
// .Where(x =>
// workshopIds.Contains(x.leftWork.WorkshopId) &&
// x.leftWork.StartWorkDate <= targetEndDate &&
// x.leftWork.LeftWorkDate.AddDays(-1) >= targetStartDate &&
// x.contract.ContarctStart <= targetEndDate &&
// x.contract.ContractEnd >= targetStartDate &&
// !vipGroup.Contains(x.leftWork.EmployeeId) &&
// !_companyContext.EmployeeClientTemps
// .Any(temp => temp.EmployeeId == x.leftWork.EmployeeId && temp.WorkshopId == x.leftWork.WorkshopId) &&
// x.option != null
// ? x.option.CreateCheckout
// : x.leftWork.Workshop.CreateCheckout
// )
// .Select(x => new { x.leftWork.WorkshopId, x.leftWork.EmployeeId }).AsEnumerable()
// .Select(x=>(x.WorkshopId,x.EmployeeId)).ToList();
var chcekoutLeftWorks = _companyContext.LeftWorkList
.AsNoTracking()
.Where(x =>
workshopIds.Contains(x.WorkshopId) &&
x.StartWorkDate <= targetEndDate &&
x.LeftWorkDate.AddDays(-1) >= targetStartDate &&
!vipGroup.Contains(x.EmployeeId))
.Select(x => new
{
x.EmployeeId,
x.WorkshopId,
x.StartWorkDate,
x.LeftWorkDate,
x.Workshop.CreateCheckout
})
.ToList();
var checkoutContracts = _companyContext.Contracts
.AsNoTracking()
.Where(x =>
workshopIds.Contains(x.WorkshopIds) &&
x.ContarctStart <= targetEndDate &&
x.ContractEnd >= targetStartDate)
.Select(x => new
{
x.EmployeeId,
WorkshopId = x.WorkshopIds,
x.ContarctStart,
x.ContractEnd
})
.ToList();
var computeOptionsDict = _companyContext.EmployeeComputeOptionsSet
.AsNoTracking()
.Where(o => workshopIds.Contains(o.WorkshopId))
.ToDictionary(
o => (o.EmployeeId, o.WorkshopId),
o => o.CreateCheckout
);
var clientTemps = _companyContext.EmployeeClientTemps
.AsNoTracking().AsEnumerable()
.Select(x => (x.EmployeeId, x.WorkshopId))
.ToHashSet();
var workingCheckoutEmployeeIds = chcekoutLeftWorks
.Join(
checkoutContracts,
left => new { left.EmployeeId, left.WorkshopId },
contract => new { contract.EmployeeId, contract.WorkshopId },
(left, contract) => new { left, contract })
.Where(x =>
!clientTemps.Contains((x.left.EmployeeId, x.left.WorkshopId)) &&
(computeOptionsDict.TryGetValue((x.left.EmployeeId, x.left.WorkshopId), out var createCheckout)
? createCheckout
: x.left.CreateCheckout))
.Select(x => (
x.left.WorkshopId,
x.left.EmployeeId
)).ToList();
return workingCheckoutEmployeeIds;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -26,7 +26,6 @@ public class CustomizeWorkshopEmployeeSettingsRepository(CompanyContext companyC
return new();
return new EditCustomizeEmployeeSettings()
{
FridayWork = entity.FridayWork,
FridayPay = new() { FridayPayType = entity.FridayPay.FridayPayType, Value = entity.FridayPay.Value },
LateToWork = new()
{

View File

@@ -265,7 +265,7 @@ public class CustomizeWorkshopGroupSettingsRepository(CompanyContext companyCont
var entity = _companyContext.CustomizeWorkshopGroupSettings.AsSplitQuery().FirstOrDefault(x => x.id == groupId);
return new EditCustomizeWorkshopGroupSettings()
{
FridayWork = entity.FridayWork,
//FridayWork = entity.FridayWork,
FridayPay = new (){ FridayPayType = entity.FridayPay.FridayPayType, Value = entity.FridayPay.Value },
LateToWork = new()
{
@@ -338,8 +338,8 @@ public class CustomizeWorkshopGroupSettingsRepository(CompanyContext companyCont
{
EndTime = x.EndTime.ToString("HH:mm"),
StartTime = x.StartTime.ToString("HH:mm")
}).ToList()
}).ToList(),
OffDayOfWeeks = entity.WeeklyOffDays.Select(x=>x.DayOfWeek).ToList()
};
}

View File

@@ -159,7 +159,6 @@ public class CustomizeWorkshopSettingsRepository(CompanyContext companyContext,
return new();
var viewModel = new EditCustomizeWorkshopSettings()
{
FridayWork = entity.FridayWork,
FridayPay = new() { FridayPayType = entity.FridayPay.FridayPayType, Value = entity.FridayPay.Value },
LateToWork = new()
{
@@ -234,7 +233,8 @@ public class CustomizeWorkshopSettingsRepository(CompanyContext companyContext,
LeavePermittedDays = entity.LeavePermittedDays,
BaseYearsPayInEndOfYear = entity.BaseYearsPayInEndOfYear,
WorkshopId = entity.WorkshopId,
WorkshopShiftStatus = entity.WorkshopShiftStatus
WorkshopShiftStatus = entity.WorkshopShiftStatus,
OffDays = entity.WeeklyOffDays.Select(x=>x.DayOfWeek).ToList()
};
return viewModel;
@@ -261,8 +261,8 @@ public class CustomizeWorkshopSettingsRepository(CompanyContext companyContext,
Id = entity.id,
WorkshopId = entity.WorkshopId,
WorkshopShiftStatus = entity.WorkshopShiftStatus,
FridayWork = entity.FridayWork,
HolidayWork = entity.HolidayWork
HolidayWork = entity.HolidayWork,
OffDays = entity.WeeklyOffDays.Select(x=>x.DayOfWeek).ToList()
};
}
@@ -318,7 +318,8 @@ public class CustomizeWorkshopSettingsRepository(CompanyContext companyContext,
{
EndTime = r.EndTime.ToString("HH:mm"),
StartTime = r.StartTime.ToString("HH:mm")
}).ToList()
}).ToList(),
OffDayOfWeeks = g.WeeklyOffDays.Select(x=>x.DayOfWeek).ToList()
}).ToList(),

View File

@@ -66,7 +66,7 @@ public class RollCallMandatoryRepository : RepositoryBase<long, RollCall>, IRoll
#region OfficialChckout
public ComputingViewModel MandatoryCompute(long employeeId, long workshopId, DateTime contractStart,
DateTime contractEnd,
CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout)
CreateWorkingHoursTemp command, bool holidayWorking, bool isStaticCheckout, bool rotatingShiftCompute)
{
#region Entities
@@ -159,15 +159,40 @@ public class RollCallMandatoryRepository : RepositoryBase<long, RollCall>, IRoll
{
breakTime = CalculateBreakTime(breakTimeEntity, new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)));
}
return new GroupedRollCalls()
DateTime friday = new DateTime();
if (x.Any(s =>
s.StartDate != null && s.EndDate != null && s.StartDate.Value.DayOfWeek == DayOfWeek.Friday))
{
friday = x.FirstOrDefault(s =>
s.StartDate != null && s.EndDate != null &&
(s.StartDate.Value.DayOfWeek == DayOfWeek.Friday))
.StartDate.Value;
}
if (x.Any(s =>
s.StartDate != null && s.EndDate != null && s.EndDate.Value.DayOfWeek == DayOfWeek.Friday))
{
friday = x.FirstOrDefault(s =>
s.StartDate != null && s.EndDate != null &&
(s.EndDate.Value.DayOfWeek == DayOfWeek.Friday))
.EndDate.Value;
}
return new GroupedRollCalls()
{
CreationDate = x.Key,
ShiftList = x.Select(s => new ShiftList() { Start = s.StartDate!.Value, End = s.EndDate!.Value, EndWithOutResTime = s.EndDate!.Value })
.ToList(),
HasFriday = x.Any(s =>
s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday ||
s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)),
SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - breakTime,
//HasFriday = x.Any(s =>
// s.StartDate != null && s.EndDate != null && (s.StartDate.Value.DayOfWeek == DayOfWeek.Friday ||
// s.EndDate.Value!.DayOfWeek == DayOfWeek.Friday)),
Fridays = friday,
SumOneDaySpan = new TimeSpan(x.Sum(shift => shift.ShiftSpan.Ticks)) - breakTime,
BreakTime = breakTime,
};
@@ -175,19 +200,20 @@ public class RollCallMandatoryRepository : RepositoryBase<long, RollCall>, IRoll
}
numberOfFridays = groupedRollCall.Count(x => x.HasFriday);
var firdays = groupedRollCall.Where(x => x.Fridays != null && x.Fridays != new DateTime()).DistinctBy(x => x.Fridays.Value.Date).ToList();
numberOfFridays = firdays.Count();
////*****کسر ساعاعت استراحت پرسنل از ساعت کار
//List<GroupedRollCalls> rollCallSubtractSpan = groupedRollCall.Select(x => new GroupedRollCalls()
//{
// CreationDate = x.CreationDate,
// AfterSubtractRestSpan = AfterSubtract(command, x.SumOneDaySpan, x.CreationDate),
//}).ToList();
////*****کسر ساعاعت استراحت پرسنل از ساعت کار
//List<GroupedRollCalls> rollCallSubtractSpan = groupedRollCall.Select(x => new GroupedRollCalls()
//{
// CreationDate = x.CreationDate,
// AfterSubtractRestSpan = AfterSubtract(command, x.SumOneDaySpan, x.CreationDate),
//}).ToList();
TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks));
TimeSpan sumSpans = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks));
TimeSpan sumSpansWhitOutleaves = new TimeSpan(groupedRollCall.Sum(x => x.SumOneDaySpan.Ticks));
@@ -682,7 +708,7 @@ public class RollCallMandatoryRepository : RepositoryBase<long, RollCall>, IRoll
break;
}
var rotatingFaResult = "";
if (countOutOfRange >= validCount && workshopId != 344)
if (countOutOfRange >= validCount && rotatingShiftCompute)
{
shiftOver22Hours = "0";
shiftOver22Minuts = "0";

View File

@@ -969,7 +969,7 @@ public class RollCallRepository : RepositoryBase<long, RollCall>, IRollCallRepos
var activatedEmployeesList = activeEmployeesQuery.ToList();
var leavesList = leavesQuery.ToList();
//start search year may be in another year
//start of search year may be different to end of search year
var holidays1 = _holidayItemApplication.Search(new HolidayItemSearchModel()
{
HolidayYear = startSearch.ToFarsiYear()
@@ -984,33 +984,46 @@ public class RollCallRepository : RepositoryBase<long, RollCall>, IRollCallRepos
List<RollCallsByDateViewModel> result = new();
foreach (var day in days)
{
List<RollCallEmployee> activatedEmployeesListInDay = new();
bool isHoliday = totalHolidays.Any(x => x.HolidaydateGr == day);
//in working days everyone should be present
if (day.DayOfWeek != DayOfWeek.Friday && !isHoliday)
List<RollCallEmployee> activatedEmployeesListInDay = new();
activatedEmployeesListInDay = activatedEmployeesList
.Join(employeeSettingsList.Where(x => x.WeeklyOffDays == null || !x.WeeklyOffDays.Select(w => w.DayOfWeek).Contains(day.DayOfWeek))
, x => x.EmployeeId, y => y.EmployeeId,
(x, _) => x).ToList();
if (isHoliday)
{
activatedEmployeesListInDay = activatedEmployeesList;
activatedEmployeesListInDay = activatedEmployeesListInDay
.Join(employeeSettingsList.Where(x => x.WeeklyOffDays == null || x.HolidayWork != HolidayWork.Default)
, x => x.EmployeeId, y => y.EmployeeId,
(x, _) => x).ToList();
}
//in fridays, friday workers should be present
else if (day.DayOfWeek == DayOfWeek.Friday)
{
activatedEmployeesListInDay = activatedEmployeesList
.Join(employeeSettingsList.Where(x => x.FridayWork != FridayWork.Default)
, x => x.EmployeeId, y => y.EmployeeId,
(x, y) => x).ToList();
}
////in working days everyone should be present
//if (day.DayOfWeek != DayOfWeek.Friday && isHoliday == false)
//{
// activatedEmployeesListInDay = activatedEmployeesList;
//}
//in holidays holiday worksers should be present
else
{
activatedEmployeesListInDay = activatedEmployeesList
.Join(employeeSettingsList.Where(x => x.HolidayWork != HolidayWork.Default)
, x => x.EmployeeId, y => y.EmployeeId,
(x, y) => x).ToList();
}
////in fridays, friday workers should be present
//else if (day.DayOfWeek == DayOfWeek.Friday)
//{
// activatedEmployeesListInDay = activatedEmployeesList
// .Join(employeeSettingsList.Where(x => x.FridayWork != FridayWork.Default)
// , x => x.EmployeeId, y => y.EmployeeId,
// (x, y) => x).ToList();
//}
////in holidays holiday workers should be present
//else
//{
// activatedEmployeesListInDay = activatedEmployeesList
// .Join(employeeSettingsList.Where(x => x.HolidayWork != HolidayWork.Default)
// , x => x.EmployeeId, y => y.EmployeeId,
// (x, y) => x).ToList();
//}
var item = new RollCallsByDateViewModel()
{
DateGr = day,
@@ -1037,6 +1050,7 @@ public class RollCallRepository : RepositoryBase<long, RollCall>, IRollCallRepos
}
//گزارش آنلاین حضور غیاب کارگاه
public CurrentDayRollCall GetWorkshopCurrentDayRollCalls(long workshopId)
{

View File

@@ -203,6 +203,8 @@ public class WorkshopRepository : RepositoryBase<long, Company.Domain.WorkshopAg
SignContract = x.SignContract,
CreateCheckout = x.CreateCheckout,
SignCheckout = x.SignCheckout,
RotatingShiftCompute = x.RotatingShiftCompute,
IsStaticCheckout = x.IsStaticCheckout,
}).FirstOrDefault(x => x.Id == id);
}

View File

@@ -1,3 +1,4 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeEditing/SuppressNullableWarningFix/Enabled/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Govermentlist/@EntryIndexedValue">True</s:Boolean>
<s:Boolean x:Key="/Default/UserDictionary/Words/=Mcls/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>

View File

@@ -1,4 +1,5 @@
@model CompanyManagment.App.Contracts.Checkout.CreateCheckoutListViewModel
@using Microsoft.CodeAnalysis.CSharp.Syntax
@model CompanyManagment.App.Contracts.Checkout.CreateCheckoutListViewModel
@{
var i = 1;
var b = 0;
@@ -14,7 +15,7 @@
@if (Model.CreateCheckoutList.Count > 0)
@if (Model.CreateCheckoutList.Count > 0 && !Model.HasWorkFlow)
{
@foreach (var item in Model.CreateCheckoutList)
{
@@ -151,6 +152,22 @@
</tr>
}
}
else
{
if (@Model.HasWorkFlow)
{
<div class="container">
<div class="row">
<div class="3"></div>
<div class="6">
<h4 style="color: red">این کارگاه به دلیل داشتن کارپوشه مجاز به ایجاد تصفیه حساب نمی باشد</h4>
</div>
<div class="3"></div>
</div>
</div>
}
}
<script>

View File

@@ -743,7 +743,7 @@
<th style="width: 12%; text-align: center; border-bottom: 1px solid #000; border-left: 1px solid #000; font-size: 10px"> مقطع اول کار </th>
<th style="width: 12%; text-align: center; border-bottom: 1px solid #000; border-left: 1px solid #000; font-size: 10px"> مقطع دوم کار </th>
<th style="width: 7%; text-align: center; border-bottom: 1px solid #000; border-left: 1px solid #000; font-size: 10px"> استراحت </th>
<th style="width: 7%; text-align: center; border-bottom: 1px solid #000; font-size: 10px"> جمع </th>
<th style="width: 7%; text-align: center; border-bottom: 1px solid #000; font-size: 10px"> کارکرد </th>
</tr>
@for (int i = 0; i < 16; i++)
{
@@ -849,18 +849,18 @@
<tr style="height: 20px; border-bottom: 1px solid; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> مدت مرخصی استحقاقی <span>:</span> @Model.TotalPaidLeave </td>
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی <span>:</span> @Model.TotalSickLeave </td>
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr </td>
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr </td>
</tr>
<tr>
<td colspan="10" style="padding: 0;">
<table style="width: 100%; table-layout: fixed;">
<tr style="height: 20px; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> موظفی @Model.Month @Model.Year <span>:</span> @Model.TotalMandatoryTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور <span>:</span> @Model.TotalPresentTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات استراحت <span>:</span> @Model.TotalBreakTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> ساعات کارکرد واقعی <span>:</span> @Model.TotalWorkingTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور : @Model.TotalPresentTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave </td>
</tr>
</table>
</td>

File diff suppressed because it is too large Load Diff

View File

@@ -170,21 +170,33 @@
@item.PersonnelCode
</td>
<td class="hidden-xs" id="td_@item.Id" class="signSize" style="font-size: 12px !important; text-align: center;">
@if (item.Signature == "1")
@if (item.HasSignCheckout)
{
<a class="myLinkSign" name="foo1" value="@item.Id" style="font-size: 20px">
@if (item.Signature == "1")
{
<a class="myLinkSign" name="foo1" value="@item.Id" style="font-size: 20px">
<i class="ion-checkmark-circled" style="color: #1f9c11"></i>
<input type="hidden" value="@item.Id" name="signed" />
</a>
<i class="ion-checkmark-circled" style="color: #1f9c11"></i>
<input type="hidden" value="@item.Id" name="signed"/>
</a>
}
else
{
<a permission="20216" class="myLinkSign " name="foo2" value="@item.Id" style="font-size: 20px">
<i class="ion-ios7-circle-outline" style="color: #dd3632"></i>
<input type="hidden" value="@item.Id" name="unsigned"/>
</a>
}
}
else
{
<a permission="20216" class="myLinkSign " name="foo2" value="@item.Id" style="font-size: 20px">
<i class="ion-ios7-circle-outline" style="color: #dd3632"></i>
<input type="hidden" value="@item.Id" name="unsigned" />
<a class="myLinkSign" style="font-size: 20px">
<i class="ion-checkmark-circled" style="color: #37baf6"></i>
</a>
}
</td>

View File

@@ -166,7 +166,7 @@
</div>
<div class="row m-t-20">
<div class="row " style="margin-top: 8px;">
<fieldset style="border: 1px solid black !important;-webkit-print-color-adjust: exact;print-color-adjust: exact; border-radius: 10px 10px 10px 10px; margin: 0px 10px;overflow:hidden">
<table style="/* table-layout: fixed; */ width: 100%">
@@ -386,7 +386,7 @@
</div>
<div style="">
<div class="" style="margin-top: 8px;background-color: #F6F6F6 !important;border: 1px solid #000;border-radius: 10px;display: grid;gap: 8px;padding: 8px 0;-webkit-print-color-adjust: exact;print-color-adjust: exact;padding: 6px;grid-template-columns: repeat(2, minmax(0, 1fr));width: 100%;">
<div class="" style="margin-top: 4px;background-color: #F6F6F6 !important;border: 1px solid #000;border-radius: 10px;display: grid;gap: 8px;padding: 8px 0;-webkit-print-color-adjust: exact;print-color-adjust: exact;padding: 6px;grid-template-columns: repeat(2, minmax(0, 1fr));width: 100%;">
<div class="" style="background-color: #DDDCDC !important; border: 1px solid #CCCCCC;border-radius: 7px;padding: 7px; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<table style="width: 100%">
<thead style="background-color: #AFAFAF;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@@ -557,24 +557,30 @@
</tbody>
</table>
</div>
<div style="grid-column: span 2 / span 2;padding: 0;">
<div style="background-color: #FFFFFF !important; border: 1px solid #CCCCCC;border-radius: 7px; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<table style="width: 100%;">
<tbody>
<tr style="font-size: 12px; border-collapse: separate; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 6px 6px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 0px 0px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 0px 0px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 0px;border-color: #D9D9D9;border-style: solid; border-radius: 6px 0 0 6px; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات کارکرد : @Model.TotalWorkingTimeStr</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div style="grid-column: span 2 / span 2;padding: 0;">
<table style="width:100%; background-color: #575656 !important;border-radius: 10px">
<thead>
<tr>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr
</th>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View File

@@ -513,18 +513,19 @@
<tr style="height: 20px; border-bottom: 1px solid; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> مدت مرخصی استحقاقی <span>:</span> @Model.TotalPaidLeave </td>
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی <span>:</span> @Model.TotalSickLeave </td>
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr</td>
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr</td>
</tr>
<tr>
<td colspan="10" style="padding: 0;">
<table style="width: 100%; table-layout: fixed;">
<tr style="height: 20px; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> موظفی @Model.Month @Model.Year <span>:</span> @Model.TotalMandatoryTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور <span>:</span> @Model.TotalPresentTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات استراحت <span>:</span> @Model.TotalBreakTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> ساعات کارکرد واقعی <span>:</span> @Model.TotalWorkingTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave </td>
</tr>
</table>
</td>

View File

@@ -149,7 +149,7 @@
</div>
</div>
<div class="row m-t-20">
<div class="row " style="margin-top: 8px;">
<fieldset style="border: 1px solid black !important;-webkit-print-color-adjust: exact;print-color-adjust: exact; border-radius: 10px 10px 10px 10px; margin: 0px 10px;overflow:hidden">
<table style="/* table-layout: fixed; */ width: 100%">
@@ -368,7 +368,7 @@
</div>
<div style="">
<div class="" style="margin-top: 8px;background-color: #F6F6F6 !important;border: 1px solid #000;border-radius: 10px;display: grid;gap: 8px;padding: 8px 0;-webkit-print-color-adjust: exact;print-color-adjust: exact;padding: 6px;grid-template-columns: repeat(2, minmax(0, 1fr));width: 100%;">
<div class="" style="margin-top: 4px;background-color: #F6F6F6 !important;border: 1px solid #000;border-radius: 10px;display: grid;gap: 8px;padding: 8px 0;-webkit-print-color-adjust: exact;print-color-adjust: exact;padding: 6px;grid-template-columns: repeat(2, minmax(0, 1fr));width: 100%;">
<div class="" style="background-color: #DDDCDC !important; border: 1px solid #CCCCCC;border-radius: 7px;padding: 7px; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<table style="width: 100%">
<thead style="background-color: #AFAFAF;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@@ -538,23 +538,28 @@
</tbody>
</table>
</div>
<div style="grid-column: span 2 / span 2;padding: 0;">
<div style="background-color: #FFFFFF !important; border: 1px solid #CCCCCC;border-radius: 7px; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<table style="width: 100%;">
<tbody>
<tr style="font-size: 12px; border-collapse: separate; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 6px 6px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 0px 0px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 0px 0px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 0px;border-color: #D9D9D9;border-style: solid; border-radius: 6px 0 0 6px; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات کارکرد : @Model.TotalWorkingTimeStr</td>
</tr>
</tbody>
</table>
</div>
</div>
<div style="grid-column: span 2 / span 2;padding: 0;">
<table style="width:100%; background-color: #575656 !important;border-radius: 10px">
<thead>
<tr>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr
</th>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View File

@@ -748,30 +748,35 @@
@item.PersonnelCode
</td>
<td class="hidden-xs" id="td_@item.Id" style="font-size: 12px !important; text-align: center; max-width: 60px; width: 65px;">
@if (item.Signature == "1")
@if (@item.HasSignContract)
{
<a class="myLinkSign" name="foo1" value="@item.Id" style="font-size: 20px">
@if (item.Signature == "1")
{
<a class="myLinkSign" name="foo1" value="@item.Id" style="font-size: 20px">
<i class="ion-checkmark-circled" style="color: #1f9c11"></i>
<input type="hidden" value="@item.Id" name="signed" />
</a>
@* <a class="myLinkSign @(item.IsBlockCantracingParty=="true"?"disabled":"")" name="foo1" value="@item.Id" style="font-size: 20px">
<i class="ion-checkmark-circled" style="color: #1f9c11"></i>
<input type="hidden" value="@item.Id" name="signed"/>
</a>
<i class="ion-checkmark-circled" style="color: #1f9c11"></i>
<input type="hidden" value="@item.Id" name="signed" />
</a> *@
}
else
{
<a permission="20117" class="myLinkSign" name="foo2" value="@item.Id" style="font-size: 20px">
<i class="ion-ios7-circle-outline" style="color: #dd3632"></i>
<input type="hidden" value="@item.Id" name="unsigned"/>
</a>
}
}
else
{
<a permission="20117" class="myLinkSign" name="foo2" value="@item.Id" style="font-size: 20px">
<i class="ion-ios7-circle-outline" style="color: #dd3632"></i>
<input type="hidden" value="@item.Id" name="unsigned" />
<a class="myLinkSign" style="font-size: 20px">
<i class="ion-checkmark-circled" style="color: #37baf6"></i>
</a>
@* <a permission="20117" class="myLinkSign @(item.IsBlockCantracingParty=="true"?"disabled":"")" name="foo2" value="@item.Id" style="font-size: 20px">
<i class="ion-ios7-circle-outline" style="color: #dd3632"></i>
<input type="hidden" value="@item.Id" name="unsigned" />
</a> *@
}
</td>
@{

View File

@@ -222,6 +222,23 @@ public class IndexModel : PageModel
if (string.IsNullOrWhiteSpace(command.MaritalStatus))
return new JsonResult(result.Failed("لطفا وضعیت تاهل را مشخص نمایید"));
if (string.IsNullOrWhiteSpace(command.InsuranceHistoryByYear) || string.IsNullOrWhiteSpace(command.InsuranceHistoryByMonth))
return new JsonResult(result.Failed("لطفا سابقه بیمه را مشخص نمایید"));
if (command.InsuranceHistoryByYear != "0")
{
var insuranceYear = command.InsuranceHistoryByYear.ExtractIntNumbers();
if(insuranceYear == 0)
return new JsonResult(result.Failed("لطفا سال را به عدد وارد کنید"));
}
if (command.InsuranceHistoryByMonth != "0")
{
var insuranceMonth = command.InsuranceHistoryByMonth.ExtractIntNumbers();
if (insuranceMonth == 0)
return new JsonResult(result.Failed("لطفا ماه را به عدد وارد کنید"));
}
result = _employeeApplication.Create(command);
Thread.Sleep(1000);
@@ -254,7 +271,8 @@ public class IndexModel : PageModel
public JsonResult OnPostEdit(EditEmployee command)
{
var childrenEdit = 0;
var op = new OperationResult();
var childrenEdit = 0;
var children = 0;
if (ModelState.IsValid)
{
@@ -266,15 +284,29 @@ public class IndexModel : PageModel
if (command.EditEmployeChildrenList != null)
childrenEdit = command.EditEmployeChildrenList.Count(x => x.DateOfBirth != null);
//if (children > 0)
//{
// var oldChildrenNumber = Convert.ToInt32(command.NumberOfChildren);
// var sumChildren = oldChildrenNumber + children;
// command.NumberOfChildren = sumChildren.ToString();
//}
//if (children > 0)
//{
// var oldChildrenNumber = Convert.ToInt32(command.NumberOfChildren);
// var sumChildren = oldChildrenNumber + children;
// command.NumberOfChildren = sumChildren.ToString();
//}
if (string.IsNullOrWhiteSpace(command.InsuranceHistoryByYear) || string.IsNullOrWhiteSpace(command.InsuranceHistoryByMonth))
return new JsonResult(op.Failed("لطفا سابقه بیمه را مشخص نمایید"));
if (command.InsuranceHistoryByYear != "0")
{
var insuranceYear = command.InsuranceHistoryByYear.ExtractIntNumbers();
if (insuranceYear == 0)
return new JsonResult(op.Failed("لطفا سال را به عدد وارد کنید"));
}
if (command.InsuranceHistoryByMonth != "0")
{
var insuranceMonth = command.InsuranceHistoryByMonth.ExtractIntNumbers();
if (insuranceMonth == 0)
return new JsonResult(op.Failed("لطفا ماه را به عدد وارد کنید"));
}
var result = _employeeApplication.Edit(command);
var result = _employeeApplication.Edit(command);
Thread.Sleep(1000);
if (result.IsSuccedded)
{

View File

@@ -308,16 +308,20 @@
@if (Model.Command.PermissionIds != null && Model.Command.PermissionIds.Contains(10323))
{
<div class="col-lg-12 col-md-12 col-xs-12">
@* <div class="" style="margin-top: 5px;">
<label>تعیین سطح دسترسی برای قرارداد </label>
<select class="form-control select-city" multiple asp-for="@Model.Command.AccountIdsList" asp-items='new SelectList(Model.Command.AccountsList, "Id", "Fullname")'>
</select>
</div> *@
<div class="" style="display: flex; align-items: center;">
<input type="checkbox" asp-for="Command.WorkshopHolidayWorking" class="form-control" style="width: 15px;margin: 0 0 0 10px;" />
<label asp-for="Command.WorkshopHolidayWorking" style="margin: 0;">این کارگاه در ایام تعطیلات رسمی باز است</label>
<div class="col-xs-12 col-md-4" style="position: relative;top: 12px;background-color: aliceblue;">
<div class="" style="display: flex; align-items: center;">
<input type="checkbox" asp-for="Command.WorkshopHolidayWorking" class="form-control" style="width: 15px;margin: 0 0 0 10px;" />
<label asp-for="Command.WorkshopHolidayWorking" style="margin: 0;">این کارگاه در ایام تعطیلات رسمی باز است</label>
</div>
</div>
<div class="col-xs-12 col-md-8" style="position: relative;top: 12px;background-color: aliceblue;" >
<div class="" style="display: flex; align-items: center;">
<input type="checkbox" asp-for="Command.RotatingShiftCompute" class="form-control" style="width: 15px;margin: 0 0 0 10px;" />
<label asp-for="Command.RotatingShiftCompute" style="margin: 0;"> محاسبه نوبت کاری در تصفیه حساب </label>
</div>
</div>
</div>
<div class="col-xs-12 area-workshop">
@* <div class="form-group">
@@ -578,16 +582,24 @@
<input id="hasRollCall" type="checkbox" name="Command.HasRollCallFreeVip" class="form-control" style="width: 15px;margin: 0 0 0 10px;" />
<label asp-for="Command.HasRollCallFreeVip" style="margin: 0;">فعال سازی سرویس حضور و غیاب ویژه رایگان</label>
</div>
<div class="" style="display: flex; align-items: center;">
<input id="hasChekoutService" disabled="disabled" type="checkbox" name="Command.HasCustomizeCheckoutService" class="form-control" style="width: 15px;margin: 0 0 0 10px;" />
<label asp-for="Command.HasCustomizeCheckoutService" style="margin: 0;">فعال سازی سرویس فیش غیر رسمی رایگان</label>
</div>
<div class="" style="display: flex; align-items: center; margin-top:5px">
<input id="isStaticCheckout" type="checkbox" asp-for="Command.IsStaticCheckout" class="form-control" style="width: 15px;margin: 0 0 0 10px;" />
<label asp-for="Command.IsStaticCheckout" style="margin: 0;">تصفیه حساب های این کارگاه بدون حضور غیاب محاسبه گردد</label>
</div>
<script>
$("#hasRollCall").on("click", function () {
if ($(this).is(":checked")) {
$("#hasChekoutService").removeAttr("disabled");
} else {
$("#hasChekoutService").attr("disabled", "disabled");
}
});

View File

@@ -51,7 +51,8 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Workshops
SeniorInsuranceAccountList = accounts.Where(x => x.RoleId == 7).ToList(),
JuniorInsuranceAccountsList = accounts.Where(x => x.RoleId == 8).ToList(),
InsuranceJobViewModels = new SelectList(insuranceJob, "Id", "InsuranceJobTitle"),
CutContractEndOfYear = IsActive.None
CutContractEndOfYear = IsActive.None,
RotatingShiftCompute = true
};
var res = _workshopApplication.GetWorkshop();
@@ -185,6 +186,7 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Workshops
command.HasRollCallFreeVip = "true";
if (command.HasCustomizeCheckoutService == "on")
command.HasCustomizeCheckoutService = "true";
}
else
{

View File

@@ -323,10 +323,23 @@
<select class="form-control select-city" multiple asp-for="@Model.Command.AccountIdsList" asp-items='new SelectList(Model.Command.AccountsList, "Id", "Fullname")'>
</select>
</div> *@
<div class="" style="display: flex; align-items: center;">
<input type="checkbox" asp-for="Command.WorkshopHolidayWorking" class="form-control" style="width: 15px;margin: 0 0 0 10px;" />
<label asp-for="Command.WorkshopHolidayWorking" style="margin: 0;">این کارگاه در ایام تعطیلات رسمی باز است</label>
<div class="col-xs-12 col-md-4" style="position: relative;top: 12px;background-color: aliceblue;">
<div class="" style="display: flex; align-items: center;">
<input type="checkbox" asp-for="Command.WorkshopHolidayWorking" class="form-control" style="width: 15px;margin: 0 0 0 10px;" />
<label asp-for="Command.WorkshopHolidayWorking" style="margin: 0;">این کارگاه در ایام تعطیلات رسمی باز است</label>
</div>
</div>
<div class="col-xs-12 col-md-8" style="position: relative;top: 12px;background-color: aliceblue;">
<div class="" style="display: flex; align-items: center;">
<input type="checkbox" asp-for="Command.RotatingShiftCompute" class="form-control" style="width: 15px;margin: 0 0 0 10px;" />
<label asp-for="Command.RotatingShiftCompute" style="margin: 0;"> محاسبه نوبت کاری در تصفیه حساب </label>
</div>
</div>
</div>
<div class="col-xs-12 area-workshop">
<div id="radio2" class="card">
@@ -464,22 +477,22 @@
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12 col-xs-12">
<input type="hidden" id="CutContractEndOfYear" asp-for="Command.CutContractEndOfYear" />
<div style="display: flex; align-items: center; gap: 14px;">
آیا قراردادهای بالای یک ماه منتهی به پایان سال باشد یا نباشد؟
<div style="display: flex; align-items: center; gap: 15px;">
<div class="col-md-12 col-sm-12 col-xs-12">
<input type="hidden" id="CutContractEndOfYear" asp-for="Command.CutContractEndOfYear" />
<div style="display: flex; align-items: center; gap: 14px;">
آیا قراردادهای بالای یک ماه منتهی به پایان سال باشد یا نباشد؟
<div style="display: flex; align-items: center; gap: 15px;">
<label class="@(Model.Command.CutContractEndOfYear == IsActive.None ? "disable" : "")" style="display: flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 500; margin: 0;">
<input type="checkbox" class="form-control single-check" style="margin: 0;" value="@IsActive.True" @(Model.Command.CutContractEndOfYear == IsActive.True ? "checked" : "")/>
باشد
</label>
<input type="checkbox" class="form-control single-check" style="margin: 0;" value="@IsActive.True" @(Model.Command.CutContractEndOfYear == IsActive.True ? "checked" : "") />
باشد
</label>
<label class="@(Model.Command.CutContractEndOfYear == IsActive.None ? "disable" : "")" style="display: flex; align-items: center; gap: 5px; font-size: 12px; font-weight: 500; margin: 0;">
<input type="checkbox" class="form-control single-check" style="margin: 0;" value="@IsActive.False" @(Model.Command.CutContractEndOfYear == IsActive.False ? "checked" : "")/>
نباشد
</label>
</div>
</div>
</div>
<input type="checkbox" class="form-control single-check" style="margin: 0;" value="@IsActive.False" @(Model.Command.CutContractEndOfYear == IsActive.False ? "checked" : "") />
نباشد
</label>
</div>
</div>
</div>
</div>
</div>
<div class="card textFloat">
@@ -607,6 +620,7 @@
<input id="hasRollCall" type="checkbox" name="Command.HasRollCallFreeVip" class="form-control" style="width: 15px;margin: 0 0 0 10px;" @(Model.Command.HasRollCallFreeVip == "true" ? "checked" : "") />
<label asp-for="Command.HasRollCallFreeVip" style="margin: 0;">فعال سازی سرویس حضور و غیاب ویژه رایگان</label>
</div>
<div class="" style="display: flex; align-items: center;">
@{
if (Model.Command.HasRollCallFreeVip == "true")
@@ -622,12 +636,20 @@
}
<label asp-for="Command.HasCustomizeCheckoutService" style="margin: 0;">فعال سازی سرویس فیش غیر رسمی رایگان</label>
</div>
<div class="" style="display: flex; align-items: center; margin-top:5px">
<input id="isStaticCheckout" type="checkbox" asp-for="Command.IsStaticCheckout" class="form-control" style="width: 15px;margin: 0 0 0 10px;" />
<label asp-for="Command.IsStaticCheckout" style="margin: 0;">تصفیه حساب های این کارگاه بدون حضور غیاب [استاتیک] محاسبه گردد</label>
</div>
<script>
$("#hasRollCall").on("click", function () {
if ($(this).is(":checked")) {
$("#hasChekoutService").removeAttr("disabled");
} else {
$("#hasChekoutService").attr("disabled", "disabled");
}
});

View File

@@ -219,7 +219,7 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Workshops
}
#endregion
if (command.HasRollCallFreeVip == "on")
{
command.HasRollCallFreeVip = "true";
@@ -231,7 +231,8 @@ namespace ServiceHost.Areas.Admin.Pages.Company.Workshops
{
command.HasCustomizeCheckoutService = "false";
}
}
else
{

View File

@@ -90,7 +90,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
//Console.WriteLine("endStep 1 ============");
//SetRollCall(r1);
await SetWorkshopRoleSubAccount();
await ChangeFridayWorkToWeeklyDayOfWeek();
ViewData["message"] = "تومام دو";
return Page();
}
@@ -534,5 +534,32 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.AndroidApk
// ViewData["message"] = "تومام";
// return Page();
//}
private async System.Threading.Tasks.Task ChangeFridayWorkToWeeklyDayOfWeek()
{
var employeeSettingsEnumerable = await _context.CustomizeWorkshopEmployeeSettings.Where(x => x.FridayWork == FridayWork.Default).ToListAsync();
foreach (var employeeSetting in employeeSettingsEnumerable)
{
employeeSetting.FridayWorkToWeeklyDayOfWeek();
}
var groupSettings = await _context.CustomizeWorkshopGroupSettings
.Where(x => x.FridayWork == FridayWork.Default).ToListAsync();
foreach (var groupSetting in groupSettings)
{
groupSetting.FridayWorkToWeeklyDayOfWeek();
}
var workshopSettings = await _context.CustomizeWorkshopSettings
.Where(x => x.FridayWork == FridayWork.Default).ToListAsync();
foreach (var workshopSetting in workshopSettings)
{
workshopSetting.FridayWorkToWeeklyDayOfWeek();
}
await _context.SaveChangesAsync();
}
}
}

View File

@@ -228,7 +228,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.RollCall
}
public IActionResult OnPostEditSettingWorkTime(List<CustomizeWorkshopShiftViewModel> shiftViewModels,
long customizeWorkshopSettingsId, WorkshopShiftStatus workshopShiftStatus, long workshopId,FridayWork fridayWork,HolidayWork holidayWork)
long customizeWorkshopSettingsId, WorkshopShiftStatus workshopShiftStatus, long workshopId,FridayWork fridayWork,HolidayWork holidayWork,List<DayOfWeek> offDayOfWeeks)
{
if (workshopId < 1)
return new JsonResult(new
@@ -240,7 +240,7 @@ namespace ServiceHost.Areas.AdminNew.Pages.Company.RollCall
//Todo:Vafa!!
//Todo: Vafa : to in ja bool replaceChange group ro ezafe kon. hatman ham workshopShiftStatus az front pas bede be in.
var result = _customizeWorkshopSettingsApplication
.EditWorkshopSettingShifts(shiftViewModels, customizeWorkshopSettingsId, workshopShiftStatus, fridayWork, holidayWork);
.EditWorkshopSettingShifts(shiftViewModels, customizeWorkshopSettingsId, workshopShiftStatus, holidayWork, offDayOfWeeks);
return new JsonResult(new
{

View File

@@ -163,7 +163,7 @@
</div>
</div>
<div class="row" style="margin-top: 10px; padding: 0 12px;">
<div class="row" style="margin-top: 6px; padding: 0 12px;">
<fieldset style="border: 1px solid black !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; border-radius: 10px 10px 10px 10px; margin: 0px 0px; overflow: hidden; padding: 0;">
<table style="/* table-layout: fixed; */width: 100%">
@@ -379,7 +379,7 @@
</fieldset>
</div>
<div class="row" style="margin-top: 10px; padding: 0 12px;">
<div class="row" style="margin-top: 6px; padding: 0 12px;">
<fieldset style="border: 1px solid black !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; border-radius: 10px 10px 10px 10px; margin: 0px 0px; overflow: hidden; padding: 0; display: flex; width: 100%;">
<div class="table-container">
<table style="width: 100%;">
@@ -519,23 +519,23 @@
}
<tr style="height: 20px; border-bottom: 1px solid; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> مدت مرخصی استحقاقی <span>:</span> @Model.TotalPaidLeave </td>
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی <span>:</span> @Model.TotalSickLeave </td>
</tr>
<tr style="height: 20px; border-bottom: 1px solid; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr </td>
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr </td>
</tr>
<tr>
<td colspan="10" style="padding: 0;">
<table style="width: 100%; table-layout: fixed;">
<tr style="height: 20px; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> موظفی @Model.Month @Model.Year <span>:</span> @Model.TotalMandatoryTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور <span>:</span> @Model.TotalPresentTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات استراحت <span>:</span> @Model.TotalBreakTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> ساعات کارکرد واقعی <span>:</span> @Model.TotalWorkingTimeStr </td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="10" style="padding: 0;">
<table style="width: 100%; table-layout: fixed;">
<tr style="height: 20px; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور : @Model.TotalPresentTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave </td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</fieldset>

View File

@@ -382,7 +382,7 @@
</div>
<div style="padding: 0 12px;">
<div class="row" style="margin-top: 8px;background-color: #F6F6F6 !important;border: 1px solid #000;border-radius: 10px;display: grid;gap: 8px;padding: 8px 0;-webkit-print-color-adjust: exact;print-color-adjust: exact;padding: 6px;grid-template-columns: repeat(2, minmax(0, 1fr));">
<div class="row" style="margin-top: 4px;background-color: #F6F6F6 !important;border: 1px solid #000;border-radius: 10px;display: grid;gap: 8px;padding: 8px 0;-webkit-print-color-adjust: exact;print-color-adjust: exact;padding: 6px;grid-template-columns: repeat(2, minmax(0, 1fr));">
<div class="col-6 w-100" style="background-color: #DDDCDC !important; border: 1px solid #CCCCCC; border-radius: 7px; padding: 7px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
@@ -717,26 +717,32 @@
</table>
</div>
*@
<div style="grid-column: span 2 / span 2;padding: 0;">
<div style="background-color: #FFFFFF !important; border: 1px solid #CCCCCC;border-radius: 7px; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<table style="width: 100%;">
<tbody>
<tr style="font-size: 12px; border-collapse: separate; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 6px 6px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">موظفی @Model.Month @Model.Year <span>:</span> @Model.TotalMandatoryTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 0px 0px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات حضور <span>:</span> @Model.TotalPresentTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 0px 0px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات استراحت <span>:</span> @Model.TotalBreakTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 0px;border-color: #D9D9D9;border-style: solid; border-radius: 6px 0 0 6px; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات کارکرد <span>:</span> @Model.TotalWorkingTimeStr</td>
</tr>
</tbody>
</table>
</div>
</div>
<div style="grid-column: span 2 / span 2;padding: 0;">
<table style="width:100%; background-color: #575656 !important;border-radius: 10px">
<thead>
<tr>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr
</th>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="row" style="margin-top: 10px;">
<div class="row" style="margin-top: 4px;">
<div style="width: 65%;">
<div style="display: flex; gap: 10px;">
<fieldset style="border: 1px solid black !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; border-radius: 10px 10px 10px 10px; margin: 0px 0px; overflow: hidden; padding: 0; display: flex; width: 50%;">

View File

@@ -157,7 +157,7 @@
</div>
</div>
<div class="row" style="margin-top: 10px; padding: 0 12px;">
<div class="row" style="margin-top: 6px; padding: 0 12px;">
<fieldset style="border: 1px solid black !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; border-radius: 10px 10px 10px 10px; margin: 0px 0px; overflow: hidden; padding: 0;">
<table style="/* table-layout: fixed; */width: 100%">
@@ -373,7 +373,7 @@
</fieldset>
</div>
<div class="row" style="margin-top: 10px; padding: 0 12px;">
<div class="row" style="margin-top: 6px; padding: 0 12px;">
<fieldset style="border: 1px solid black !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; border-radius: 10px 10px 10px 10px; margin: 0px 0px; overflow: hidden; padding: 0; display: flex; width: 100%;">
<div class="table-container">
<table style="width: 100%;">
@@ -513,23 +513,23 @@
}
<tr style="height: 20px; border-bottom: 1px solid; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> مدت مرخصی استحقاقی <span>:</span> @Model.TotalPaidLeave </td>
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی <span>:</span> @Model.TotalSickLeave </td>
</tr>
<tr style="height: 20px; border-bottom: 1px solid; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr </td>
<td colspan="5" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr </td>
</tr>
<tr>
<td colspan="10" style="padding: 0;">
<table style="width: 100%; table-layout: fixed;">
<tr style="height: 20px; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> موظفی @Model.Month @Model.Year <span>:</span> @Model.TotalMandatoryTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور <span>:</span> @Model.TotalPresentTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات استراحت <span>:</span> @Model.TotalBreakTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> ساعات کارکرد واقعی <span>:</span> @Model.TotalWorkingTimeStr </td>
</tr>
</table>
</td>
</tr>
<tr>
<td colspan="10" style="padding: 0;">
<table style="width: 100%; table-layout: fixed;">
<tr style="height: 20px; color:#ffffff !important; background-color: #575656 !important; font-size: 10px; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور : @Model.TotalPresentTimeStr </td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave </td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</fieldset>

View File

@@ -150,7 +150,7 @@
</div>
</div>
<div class="row" style="margin-top: 10px;padding: 0 12px;">
<div class="row" style="margin-top: 4px;padding: 0 12px;">
<fieldset style="border: 1px solid black !important;-webkit-print-color-adjust: exact;print-color-adjust: exact; border-radius: 10px 10px 10px 10px; margin: 0px 0px; overflow: hidden;padding: 0;">
<table style="/* table-layout: fixed; */ width: 100%">
@@ -372,7 +372,7 @@
</div>
<div style="padding: 0 12px;">
<div class="row" style="margin-top: 8px;background-color: #F6F6F6 !important;border: 1px solid #000;border-radius: 10px;display: grid;gap: 8px;padding: 8px 0;-webkit-print-color-adjust: exact;print-color-adjust: exact;padding: 6px;grid-template-columns: repeat(2, minmax(0, 1fr));">
<div class="row" style="margin-top: 4px;background-color: #F6F6F6 !important;border: 1px solid #000;border-radius: 10px;display: grid;gap: 8px;padding: 8px 0;-webkit-print-color-adjust: exact;print-color-adjust: exact;padding: 6px;grid-template-columns: repeat(2, minmax(0, 1fr));">
<div class="col-6 w-100" style="background-color: #DDDCDC !important; border: 1px solid #CCCCCC;border-radius: 7px;padding: 7px; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<table style="width: 100%">
<thead style="background-color: #AFAFAF;-webkit-print-color-adjust: exact;print-color-adjust: exact; ">
@@ -539,22 +539,29 @@
</table>
</div>
<div style="grid-column: span 2 / span 2;padding: 0;">
<div style="background-color: #FFFFFF !important; border: 1px solid #CCCCCC;border-radius: 7px; -webkit-print-color-adjust: exact;print-color-adjust: exact; ">
<table style="width: 100%;">
<tbody>
<tr style="font-size: 12px; border-collapse: separate; -webkit-print-color-adjust: exact; print-color-adjust: exact;">
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 6px 6px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 0px 0px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 1px;border-color: #D9D9D9;border-style: solid; border-radius: 0 0px 0px 0; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="font-size: 8px; padding: 5px 3px;border-width: 0 0 0 0px;border-color: #D9D9D9;border-style: solid; border-radius: 6px 0 0 6px; -webkit-print-color-adjust: exact;print-color-adjust: exact; text-align: center;width: 25%;background: #FFFFFF;">ساعات کارکرد : @Model.TotalWorkingTimeStr</td>
</tr>
</tbody>
</table>
</div>
</div>
<div style="grid-column: span 2 / span 2;padding: 0;">
<table style="width:100%; background-color: #575656 !important;border-radius: 10px">
<thead>
<tr>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
موظفی @Model.Month @Model.Year : @Model.TotalMandatoryTimeStr
</th>
<th colspan="2" style="color:#ffffff !important; text-align: center; border-bottom: 1px solid #CCCCCC; font-size: 8px; padding: 2px">
ساعات کارکرد واقعی : @Model.TotalWorkingTimeStr
</th>
</tr>
</thead>
<tbody>
<tr>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px"> ساعات حضور : @Model.TotalPresentTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">ساعات استراحت : @Model.TotalBreakTimeStr</td>
<td style="color:#ffffff !important; width:25%; text-align: center; border-left: 1px solid #CCCCCC; font-size: 8px; padding: 2px">مدت مرخصی استحقاقی : @Model.TotalPaidLeave </td>
<td style="color:#ffffff !important; width:25%; text-align: center; font-size: 8px; padding: 2px"> مدت مرخصی استعلاجی : @Model.TotalSickLeave</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>

View File

@@ -58,14 +58,14 @@
<div class="col-12 group-container">
<div class="titleSettingRollCall">وضعیت فعالیت مجموعه در روز های جمعه</div>
<div class="form-group my-1 group">
@* <div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))" />
<label for="Friday1">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div> *@
</div>
<div class="col-12">

View File

@@ -56,14 +56,14 @@
<div class="col-12 group-container">
<div class="titleSettingRollCall">وضعیت فعالیت مجموعه در روز های جمعه</div>
<div class="form-group my-1 group">
@* <div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))" />
<label for="Friday1">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div> *@
</div>
<div class="col-12">

View File

@@ -29,14 +29,14 @@
<div class="col-12 group-container">
<div class="titleSettingRollCall">وضعیت فعالیت مجموعه در روز های جمعه</div>
<div class="form-group my-1 group">
@* <div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))" />
<label for="Friday1">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div> *@
</div>
<div class="col-12">

View File

@@ -173,7 +173,7 @@
<div class="container my-3" id="footer-section">
<div class="row breack-time">
<div class="row breack-time mb-2">
<div>
<div class="d-flex align-items-center my-1 breakTimeDiv">
<input type="checkbox" id="BreakTimeFirst" class="form-check-input">
@@ -226,47 +226,109 @@
</div>
</div>
<div class="row mt-2">
<div class="col-12">
<div class="lableCheckBreakTime text-center">وضعیت فعالیت مجموعه در روز های جمعه و تعطیلات رسمی</div>
<div class="row extraOptionBorder">
<div class="day-off-parent">
<div class="day-off-title mb-2">
روزهای تعطیل هفته
</div>
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های جمعه</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork1" id="Friday1" class="form-check-input Main-Radio" value="@((int)(FridayWork.Default))" />
<label for="Friday1" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork1" id="Friday2" class="form-check-input Main-Radio" value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div>
<div class="day-off-button-container mb-3">
<button type="button" name="Saturday" value="@((int)(DayOfWeek.Saturday))"
class="day-off-button text-center day-off-button__active ">
شنبه
</button>
</div>
<button type="button" name="Sunday" value="@((int)(DayOfWeek.Sunday))"
class="day-off-button text-center ">
یکشنبه
</button>
<button type="button" name="Monday" value="@((int)(DayOfWeek.Monday))"
class="day-off-button text-center ">
دوشنبه
</button>
<button type="button" name="Tuesday" value="@((int)(DayOfWeek.Tuesday))"
class="day-off-button text-center ">
سه‌شنبه
</button>
<button type="button" name="Wednesday" value="@((int)(DayOfWeek.Wednesday))"
class="day-off-button text-center ">
چهارشنبه
</button>
<button type="button" name="Thursday" value="@((int)(DayOfWeek.Thursday))"
class="day-off-button text-center ">
پنج‌شنبه
</button>
<button type="button" name="Friday" value="@((int)(DayOfWeek.Friday))"
class="day-off-button text-center ">
جمعه
</button>
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های تعطیلات رسمی</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork1" id="HolidayWork1" class="form-check-input Main-Radio" value="@HolidayWork.Default" />
<label for="HolidayWork1" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork1" id="HolidayWork2" class="form-check-input Main-Radio" value="@HolidayWork.WorkInHolidays" />
<label for="HolidayWork2" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار می‌کند.</label>
</div>
</div>
</div>
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.CreateCustomizeEmployeeSettings.WeeklyOffDays" id="SaturdayInput"
value="@((int)(DayOfWeek.Saturday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.CreateCustomizeEmployeeSettings.WeeklyOffDays" id="SundayInput" value="@((int)(DayOfWeek.Sunday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.CreateCustomizeEmployeeSettings.WeeklyOffDays" id="MondayInput" value="@((int)(DayOfWeek.Monday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.CreateCustomizeEmployeeSettings.WeeklyOffDays" id="TuesdayInput" value="@((int)(DayOfWeek.Tuesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.CreateCustomizeEmployeeSettings.WeeklyOffDays" id="WednesdayInput"
value="@((int)(DayOfWeek.Wednesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.CreateCustomizeEmployeeSettings.WeeklyOffDays" id="ThursdayInput"
value="@((int)(DayOfWeek.Thursday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.CreateCustomizeEmployeeSettings.WeeklyOffDays" id="FridayInput" value="@((int)(DayOfWeek.Friday))" />
<input type="hidden" id="GroupId" name="Command.CreateCustomizeEmployeeSettings.GroupId" value="" />
</div>
</div>
</div>
</div>
<div class="day-off-title mb-2">
وضعیت فعالیت مجموعه در روزهای جمعه و تعطیلات رسمی
</div>
<div class="day-off-status-person mb-3">
<div class="d-flex align-items-center gap-3">
<span class="day-off-status-person__item">وضعیت پرسنل در روز های تعطیل رسمی : </span>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" class="custom-checkbox" name="Command.CreateCustomizeEmployeeSettings.HolidayWork" id="OffDays2"
value="@((int)(HolidayWork.WorkInHolidays))" />
<label class="text-nowrap day-off-status-person__item--label" for="OffDays2">
اشتغال دارد
</label>
</div>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" name="Command.CreateCustomizeEmployeeSettings.HolidayWork" id="OffDays1" class="custom-checkbox"
value="@((int)(HolidayWork.Default))" />
<label for="OffDays1" class="text-nowrap day-off-status-person__item--label">
اشتغال ندارد
</label>
</div>
</div>
<div>
</div>
</div>
</div>
</div>
<script src="~/assetsclient/pages/employees/js/WorkshopSettingGrouping.js?ver=@clientVersion"></script>

View File

@@ -240,9 +240,10 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall
BreakTime = employee.BreakTime,
WorkshopShiftStatus = employee.WorkshopShiftStatus,
IrregularShift = employee.IrregularShift,
FridayWork = employee.FridayWork,
//FridayWork = employee.FridayWork,
HolidayWork = employee.HolidayWork,
CustomizeRotatingShifts = employee.CustomizeRotatingShiftsViewModels
CustomizeRotatingShifts = employee.CustomizeRotatingShiftsViewModels,
WeeklyOffDays = employee.WeeklyOffDays
};
return Partial("ModalEditEmployeeFromGroup", command);
}

View File

@@ -310,7 +310,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall
}
public IActionResult OnPostEditSettingWorkTime(List<CustomizeWorkshopShiftViewModel> shiftViewModels,
long customizeWorkshopSettingsId, WorkshopShiftStatus workshopShiftStatus,FridayWork fridayWork,HolidayWork holidayWork)
long customizeWorkshopSettingsId, WorkshopShiftStatus workshopShiftStatus,FridayWork fridayWork,HolidayWork holidayWork,List<DayOfWeek> offDayOfWeeks)
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
@@ -324,7 +324,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall
//Todo:Vafa!!
//Todo: Vafa : to in ja bool replaceChange group ro ezafe kon. hatman ham workshopShiftStatus az front pas bede be in.
var result = _customizeWorkshopSettingsApplication
.EditWorkshopSettingShifts(shiftViewModels, customizeWorkshopSettingsId, workshopShiftStatus,fridayWork, holidayWork);
.EditWorkshopSettingShifts(shiftViewModels, customizeWorkshopSettingsId, workshopShiftStatus, holidayWork, offDayOfWeeks);
return new JsonResult(new
{

View File

@@ -221,45 +221,114 @@
</div>
</div>
<div class="row mt-2">
<div class="col-12">
<div class="lableCheckBreakTime text-center">وضعیت فعالیت مجموعه در روز های جمعه و تعطیلات رسمی</div>
<div class="row extraOptionBorder">
<div class="day-off-parent">
<div class="day-off-title mb-2">
روزهای تعطیل هفته
</div>
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های جمعه</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))"/>
<label for="Friday1" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))"/>
<label for="Friday2" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div>
<div class="day-off-button-container mb-3">
<button type="button" name="Saturday" value="@((int)(DayOfWeek.Saturday))"
class="day-off-button text-center day-off-button__active">
شنبه
</button>
<button type="button" name="Sunday" value="@((int)(DayOfWeek.Sunday))"
class="day-off-button text-center day-off-button__active">
یکشنبه
</button>
<button type="button" name="Monday" value="@((int)(DayOfWeek.Monday))"
class="day-off-button text-center day-off-button__active">
دوشنبه
</button>
<button type="button" name="Tuesday" value="@((int)(DayOfWeek.Tuesday))"
class="day-off-button text-center day-off-button__active">
سه‌شنبه
</button>
<button type="button" name="Wednesday" value="@((int)(DayOfWeek.Wednesday))"
class="day-off-button text-center day-off-button__active">
چهارشنبه
</button>
<button type="button" name="Thursday" value="@((int)(DayOfWeek.Thursday))"
class="day-off-button text-center day-off-button__active">
پنج‌شنبه
</button>
<button type="button" name="Friday" value="@((int)(DayOfWeek.Friday))"
class="day-off-button text-center day-off-button__diactive">
جمعه
</button>
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="Command.WeeklyOffDays" id="SaturdayInput"
value="@((int)(DayOfWeek.Saturday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="Command.WeeklyOffDays" id="SundayInput" value="@((int)(DayOfWeek.Sunday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="Command.WeeklyOffDays" id="MondayInput" value="@((int)(DayOfWeek.Monday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="Command.WeeklyOffDays" id="TuesdayInput" value="@((int)(DayOfWeek.Tuesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="Command.WeeklyOffDays" id="WednesdayInput"
value="@((int)(DayOfWeek.Wednesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="Command.WeeklyOffDays" id="ThursdayInput"
value="@((int)(DayOfWeek.Thursday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__diactive"
name="Command.WeeklyOffDays" id="FridayInput" value="@((int)(DayOfWeek.Friday))" checked="checked" />
</div>
<div class="day-off-title mb-2">
وضعیت فعالیت مجموعه در روزهای جمعه و تعطیلات رسمی
</div>
<div class="day-off-status-person mb-3">
<div class="d-flex align-items-center gap-3">
<span class="day-off-status-person__item">وضعیت پرسنل در روز های تعطیل رسمی : </span>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" class="custom-checkbox" name="command.HolidayWork" id="OffDays2"
@(Model.HolidayWork == HolidayWork.WorkInHolidays ? "checked" : "")
value="@((int)(HolidayWork.WorkInHolidays))" />
<label class="text-nowrap day-off-status-person__item--label" for="OffDays2">
اشتغال دارد
</label>
</div>
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های تعطیلات رسمی</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="Command.HolidayWork" id="OffDays1" class="form-check-input Main-Radio" @(Model.HolidayWork == HolidayWork.Default ? "checked" : "") value="@((int)(HolidayWork.Default))"/>
<label for="OffDays1" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="Command.HolidayWork" id="OffDays2" class="form-check-input Main-Radio" @(Model.HolidayWork == HolidayWork.WorkInHolidays ? "checked" : "") value="@((int)(HolidayWork.WorkInHolidays))"/>
<label for="OffDays2" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار می‌کند.</label>
</div>
</div>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" name="command.HolidayWork" id="OffDays1" class="custom-checkbox"
@(Model.HolidayWork == HolidayWork.Default ? "checked" : "")
value="@((int)(HolidayWork.Default))" />
<label for="OffDays1" class="text-nowrap day-off-status-person__item--label">
اشتغال ندارد
</label>
</div>
</div>
<div>
</div>
</div>
</div>
</div>

View File

@@ -379,46 +379,118 @@
</div>
</div>
</div>
<div class="row mt-2">
<div class="col-12">
<div class="lableCheckBreakTime text-center">وضعیت فعالیت مجموعه در روز های جمعه و تعطیلات رسمی</div>
<div class="row extraOptionBorder">
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های جمعه</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))" />
<label for="Friday1" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
<div class="day-off-parent">
<div class="day-off-title mb-2">
روزهای تعطیل هفته
</div>
<div class="day-off-button-container mb-3">
<button type="button" name="Saturday" value="@((int)(DayOfWeek.Saturday))"
class="day-off-button text-center @(Model.WeeklyOffDays.Contains(DayOfWeek.Saturday) ? "day-off-button__diactive" : "day-off-button__active")">
شنبه
</button>
<button type="button" name="Sunday" value="@((int)(DayOfWeek.Sunday))"
class="day-off-button text-center @(Model.WeeklyOffDays.Contains(DayOfWeek.Sunday) ? "day-off-button__diactive" : "day-off-button__active")">
یکشنبه
</button>
<button type="button" name="Monday" value="@((int)(DayOfWeek.Monday))"
class="day-off-button text-center @(Model.WeeklyOffDays.Contains(DayOfWeek.Monday) ? "day-off-button__diactive" : "day-off-button__active")">
دوشنبه
</button>
<button type="button" name="Tuesday" value="@((int)(DayOfWeek.Tuesday))"
class="day-off-button text-center @(Model.WeeklyOffDays.Contains(DayOfWeek.Tuesday) ? "day-off-button__diactive" : "day-off-button__active")">
سه‌شنبه
</button>
<button type="button" name="Wednesday" value="@((int)(DayOfWeek.Wednesday))"
class="day-off-button text-center @(Model.WeeklyOffDays.Contains(DayOfWeek.Wednesday) ? "day-off-button__diactive" : "day-off-button__active")">
چهارشنبه
</button>
<button type="button" name="Thursday" value="@((int)(DayOfWeek.Thursday))"
class="day-off-button text-center @(Model.WeeklyOffDays.Contains(DayOfWeek.Thursday) ? "day-off-button__diactive" : "day-off-button__active")">
پنج‌شنبه
</button>
<button type="button" name="Friday" value="@((int)(DayOfWeek.Friday))"
class="day-off-button text-center @(Model.WeeklyOffDays.Contains(DayOfWeek.Friday) ? "day-off-button__diactive" : "day-off-button__active")">
جمعه
</button>
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="SaturdayInput"
@(Model.WeeklyOffDays.Contains(DayOfWeek.Saturday) ? "checked" : "")
value="@((int)(DayOfWeek.Saturday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="SundayInput" @(Model.WeeklyOffDays.Contains(DayOfWeek.Sunday) ?
"checked" : "") value="@((int)(DayOfWeek.Sunday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="MondayInput" @(Model.WeeklyOffDays.Contains(DayOfWeek.Monday) ?
"checked" : "") value="@((int)(DayOfWeek.Monday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="TuesdayInput" @(Model.WeeklyOffDays.Contains(DayOfWeek.Tuesday)
? "checked" : "") value="@((int)(DayOfWeek.Tuesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="WednesdayInput"
@(Model.WeeklyOffDays.Contains(DayOfWeek.Wednesday) ? "checked" : "")
value="@((int)(DayOfWeek.Wednesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="ThursdayInput"
@(Model.WeeklyOffDays.Contains(DayOfWeek.Thursday) ? "checked" : "")
value="@((int)(DayOfWeek.Thursday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="FridayInput" @(Model.WeeklyOffDays.Contains(DayOfWeek.Friday) ?
"checked" : "") value="@((int)(DayOfWeek.Friday))" />
</div>
<div class="day-off-title mb-2">
وضعیت فعالیت مجموعه در روزهای جمعه و تعطیلات رسمی
</div>
<div class="day-off-status-person mb-3">
<div class="d-flex align-items-center gap-3">
<span class="day-off-status-person__item">وضعیت پرسنل در روز های تعطیل رسمی : </span>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" class="custom-checkbox" name="command.HolidayWork" id="OffDays2"
@(Model.HolidayWork == HolidayWork.WorkInHolidays ? "checked" : "")
value="@((int)(HolidayWork.WorkInHolidays))" />
<label class="text-nowrap day-off-status-person__item--label" for="OffDays2">
اشتغال دارد
</label>
</div>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" name="command.HolidayWork" id="OffDays1" class="custom-checkbox"
@(Model.HolidayWork == HolidayWork.Default ? "checked" : "")
value="@((int)(HolidayWork.Default))" />
<label for="OffDays1" class="text-nowrap day-off-status-person__item--label">
اشتغال ندارد
</label>
</div>
</div>
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های تعطیلات رسمی</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork" id="OffDays1" class="form-check-input Main-Radio" @(Model.HolidayWork == HolidayWork.Default ? "checked" : "") value="@((int)(HolidayWork.Default))" />
<label for="OffDays1" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork" id="OffDays2" class="form-check-input Main-Radio" @(Model.HolidayWork == HolidayWork.WorkInHolidays ? "checked" : "") value="@((int)(HolidayWork.WorkInHolidays))" />
<label for="OffDays2" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار می‌کند.</label>
</div>
</div>
<div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -391,46 +391,119 @@
</div>
<div class="row mt-2">
<div class="col-12">
<div class="lableCheckBreakTime text-center">وضعیت فعالیت مجموعه در روز های جمعه و تعطیلات رسمی</div>
<div class="row extraOptionBorder">
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های جمعه</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))" />
<label for="Friday1" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div>
</div>
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های تعطیلات رسمی</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork" id="OffDays1" class="form-check-input Main-Radio" @(Model.HolidayWork == HolidayWork.Default ? "checked" : "") value="@((int)(HolidayWork.Default))" />
<label for="OffDays1" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork" id="OffDays2" class="form-check-input Main-Radio" @(Model.HolidayWork == HolidayWork.WorkInHolidays ? "checked" : "") value="@((int)(HolidayWork.WorkInHolidays))" />
<label for="OffDays2" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار می‌کند.</label>
</div>
</div>
</div>
</div>
</div>
<div class="day-off-parent">
<div class="day-off-title mb-2">
روزهای تعطیل هفته
</div>
<div class="day-off-button-container mb-3">
<button type="button" name="Saturday" value="@((int)(DayOfWeek.Saturday))"
class="day-off-button text-center @(Model.OffDayOfWeeks.Contains(DayOfWeek.Saturday) ? "day-off-button__diactive" : "day-off-button__active")">
شنبه
</button>
<button type="button" name="Sunday" value="@((int)(DayOfWeek.Sunday))"
class="day-off-button text-center @(Model.OffDayOfWeeks.Contains(DayOfWeek.Sunday) ? "day-off-button__diactive" : "day-off-button__active")">
یکشنبه
</button>
<button type="button" name="Monday" value="@((int)(DayOfWeek.Monday))"
class="day-off-button text-center @(Model.OffDayOfWeeks.Contains(DayOfWeek.Monday) ? "day-off-button__diactive" : "day-off-button__active")">
دوشنبه
</button>
<button type="button" name="Tuesday" value="@((int)(DayOfWeek.Tuesday))"
class="day-off-button text-center @(Model.OffDayOfWeeks.Contains(DayOfWeek.Tuesday) ? "day-off-button__diactive" : "day-off-button__active")">
سه‌شنبه
</button>
<button type="button" name="Wednesday" value="@((int)(DayOfWeek.Wednesday))"
class="day-off-button text-center @(Model.OffDayOfWeeks.Contains(DayOfWeek.Wednesday) ? "day-off-button__diactive" : "day-off-button__active")">
چهارشنبه
</button>
<button type="button" name="Thursday" value="@((int)(DayOfWeek.Thursday))"
class="day-off-button text-center @(Model.OffDayOfWeeks.Contains(DayOfWeek.Thursday) ? "day-off-button__diactive" : "day-off-button__active")">
پنج‌شنبه
</button>
<button type="button" name="Friday" value="@((int)(DayOfWeek.Friday))"
class="day-off-button text-center @(Model.OffDayOfWeeks.Contains(DayOfWeek.Friday) ? "day-off-button__diactive" : "day-off-button__active")">
جمعه
</button>
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="SaturdayInput"
@(Model.OffDayOfWeeks.Contains(DayOfWeek.Saturday) ? "checked" : "")
value="@((int)(DayOfWeek.Saturday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="SundayInput" @(Model.OffDayOfWeeks.Contains(DayOfWeek.Sunday) ?
"checked" : "") value="@((int)(DayOfWeek.Sunday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="MondayInput" @(Model.OffDayOfWeeks.Contains(DayOfWeek.Monday) ?
"checked" : "") value="@((int)(DayOfWeek.Monday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="TuesdayInput" @(Model.OffDayOfWeeks.Contains(DayOfWeek.Tuesday)
? "checked" : "") value="@((int)(DayOfWeek.Tuesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="WednesdayInput"
@(Model.OffDayOfWeeks.Contains(DayOfWeek.Wednesday) ? "checked" : "")
value="@((int)(DayOfWeek.Wednesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="ThursdayInput"
@(Model.OffDayOfWeeks.Contains(DayOfWeek.Thursday) ? "checked" : "")
value="@((int)(DayOfWeek.Thursday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="FridayInput" @(Model.OffDayOfWeeks.Contains(DayOfWeek.Friday) ?
"checked" : "") value="@((int)(DayOfWeek.Friday))" />
</div>
<div class="day-off-title mb-2">
وضعیت فعالیت مجموعه در روزهای جمعه و تعطیلات رسمی
</div>
<div class="day-off-status-person mb-3">
<div class="d-flex align-items-center gap-3">
<span class="day-off-status-person__item">وضعیت پرسنل در روز های تعطیل رسمی : </span>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" class="custom-checkbox" name="command.HolidayWork" id="OffDays2"
@(Model.HolidayWork == HolidayWork.WorkInHolidays ? "checked" : "")
value="@((int)(HolidayWork.WorkInHolidays))" />
<label class="text-nowrap day-off-status-person__item--label" for="OffDays2">
اشتغال دارد
</label>
</div>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" name="command.HolidayWork" id="OffDays1" class="custom-checkbox"
@(Model.HolidayWork == HolidayWork.Default ? "checked" : "")
value="@((int)(HolidayWork.Default))" />
<label for="OffDays1" class="text-nowrap day-off-status-person__item--label">
اشتغال ندارد
</label>
</div>
</div>
<div>
</div>
</div>
</div>
</div>
<div class="container m-0">
@@ -488,4 +561,4 @@
var ajaxReCalculateValuesUrl = `@Url.Page("./Grouping", "ReCalculateValues")`;
</script>
<script src="~/assetsclient/pages/rollcall/js/modaleditgroup.js?ver=clientVersion"></script>
<script src="~/assetsclient/pages/rollcall/js/modaleditgroup.js?ver=@clientVersion"></script>

View File

@@ -162,14 +162,14 @@
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های جمعه</div> *@
<div class="d-flex form-group my-1 group">
@* <div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))"/>
<label for="Friday1" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))"/>
<label for="Friday2" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div> *@
</div>
</div>

View File

@@ -103,7 +103,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall._WorkshopSetting
}
public IActionResult OnPostEditSettingWorkTime(List<CustomizeWorkshopShiftViewModel> shiftViewModels,
long customizeWorkshopSettingsId, WorkshopShiftStatus workshopShiftStatus, FridayWork fridayWork, HolidayWork holidayWork)
long customizeWorkshopSettingsId, WorkshopShiftStatus workshopShiftStatus, HolidayWork holidayWork,List<DayOfWeek> offDayOfWeeks)
{
var workshopHash = User.FindFirstValue("WorkshopSlug");
var workshopId = _passwordHasher.SlugDecrypt(workshopHash);
@@ -115,7 +115,7 @@ namespace ServiceHost.Areas.Client.Pages.Company.RollCall._WorkshopSetting
});
var result = _customizeWorkshopSettingsApplication
.EditWorkshopSettingShifts(shiftViewModels, customizeWorkshopSettingsId, workshopShiftStatus, fridayWork, holidayWork);
.EditWorkshopSettingShifts(shiftViewModels, customizeWorkshopSettingsId, workshopShiftStatus, holidayWork, offDayOfWeeks);
return new JsonResult(new
{

View File

@@ -88,45 +88,109 @@
<div class="modal-footer">
<div class="container my-2">
<div class="day-off-parent">
<div class="day-off-title mb-2">
روزهای تعطیل هفته
</div>
<div class="row mt-2">
<div class="col-12">
<div class="lableCheckBreakTime text-center">وضعیت فعالیت مجموعه در روز های جمعه و تعطیلات رسمی</div>
<div class="row extraOptionBorder">
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های جمعه</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))" />
<label for="Friday1" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div>
</div>
<div class="day-off-button-container mb-3">
<button type="button" name="Saturday" value="@((int)(DayOfWeek.Saturday))"
class="day-off-button text-center day-off-button__active">
شنبه
</button>
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های تعطیلات رسمی</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork" id="OffDays1" class="form-check-input Main-Radio" @(Model.HolidayWork == HolidayWork.Default ? "checked" : "") value="@((int)(HolidayWork.Default))" />
<label for="OffDays1" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork" id="OffDays2" class="form-check-input Main-Radio" @(Model.HolidayWork == HolidayWork.WorkInHolidays ? "checked" : "") value="@((int)(HolidayWork.WorkInHolidays))" />
<label for="OffDays2" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار می‌کند.</label>
</div>
</div>
</div>
<button type="button" name="Sunday" value="@((int)(DayOfWeek.Sunday))"
class="day-off-button text-center day-off-button__active">
یکشنبه
</button>
<button type="button" name="Monday" value="@((int)(DayOfWeek.Monday))"
class="day-off-button text-center day-off-button__active">
دوشنبه
</button>
<button type="button" name="Tuesday" value="@((int)(DayOfWeek.Tuesday))"
class="day-off-button text-center day-off-button__active">
سه‌شنبه
</button>
<button type="button" name="Wednesday" value="@((int)(DayOfWeek.Wednesday))"
class="day-off-button text-center day-off-button__active">
چهارشنبه
</button>
<button type="button" name="Thursday" value="@((int)(DayOfWeek.Thursday))"
class="day-off-button text-center day-off-button__active">
پنج‌شنبه
</button>
<button type="button" name="Friday" value="@((int)(DayOfWeek.Friday))"
class="day-off-button text-center day-off-button__diactive">
جمعه
</button>
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="Command.OffDays" id="SaturdayInput"
value="@((int)(DayOfWeek.Saturday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="OffDays" id="SundayInput" value="@((int)(DayOfWeek.Sunday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="OffDays" id="MondayInput" value="@((int)(DayOfWeek.Monday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="OffDays" id="TuesdayInput" value="@((int)(DayOfWeek.Tuesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="OffDays" id="WednesdayInput"
value="@((int)(DayOfWeek.Wednesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__active"
name="OffDays" id="ThursdayInput"
value="@((int)(DayOfWeek.Thursday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input day-off-button__diactive"
name="OffDays" id="FridayInput" value="@((int)(DayOfWeek.Friday))" checked="checked" />
</div>
<div class="day-off-title mb-2">
وضعیت فعالیت مجموعه در روزهای جمعه و تعطیلات رسمی
</div>
<div class="day-off-status-person mb-3">
<div class="d-flex align-items-center gap-3">
<span class="day-off-status-person__item">وضعیت پرسنل در روز های تعطیل رسمی : </span>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" class="custom-checkbox" name="HolidayWork" id="OffDays2"
@(Model.HolidayWork == HolidayWork.WorkInHolidays ? "checked" : "")
value="@((int)(HolidayWork.WorkInHolidays))" />
<label class="text-nowrap day-off-status-person__item--label" for="OffDays2">
اشتغال دارد
</label>
</div>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" name="HolidayWork" id="OffDays1" class="custom-checkbox"
@(Model.HolidayWork == HolidayWork.Default ? "checked" : "")
value="@((int)(HolidayWork.Default))" />
<label for="OffDays1" class="text-nowrap day-off-status-person__item--label">
اشتغال ندارد
</label>
</div>
</div>
<div>
</div>
</div>
</div>

View File

@@ -152,51 +152,120 @@
<div class="modal-footer">
<div class="container my-2">
<div class="day-off-parent">
<div class="day-off-title mb-2">
روزهای تعطیل هفته
</div>
<div class="row mt-2">
<div class="col-12">
<div class="lableCheckBreakTime text-center">وضعیت فعالیت مجموعه در روز های جمعه و تعطیلات رسمی</div>
<div class="row extraOptionBorder">
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های جمعه</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))"/>
<label for="Friday1" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))"/>
<label for="Friday2" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div>
</div>
<div class="day-off-button-container mb-3">
<button type="button" name="Saturday" value="@((int)(DayOfWeek.Saturday))"
class="day-off-button text-center @(Model.OffDays.Contains(DayOfWeek.Saturday) ? "day-off-button__diactive" : "day-off-button__active")">
شنبه
</button>
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های تعطیلات رسمی</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork" id="OffDays1" class="form-check-input Main-Radio" @(Model.HolidayWork == HolidayWork.Default ? "checked" : "") value="@((int)(HolidayWork.Default))"/>
<label for="OffDays1" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork" id="OffDays2" class="form-check-input Main-Radio" @(Model.HolidayWork == HolidayWork.WorkInHolidays ? "checked" : "") value="@((int)(HolidayWork.WorkInHolidays))"/>
<label for="OffDays2" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار می‌کند.</label>
</div>
</div>
</div>
<button type="button" name="Sunday" value="@((int)(DayOfWeek.Sunday))"
class="day-off-button text-center @(Model.OffDays.Contains(DayOfWeek.Sunday) ? "day-off-button__diactive" : "day-off-button__active")">
یکشنبه
</button>
<button type="button" name="Monday" value="@((int)(DayOfWeek.Monday))"
class="day-off-button text-center @(Model.OffDays.Contains(DayOfWeek.Monday) ? "day-off-button__diactive" : "day-off-button__active")">
دوشنبه
</button>
<button type="button" name="Tuesday" value="@((int)(DayOfWeek.Tuesday))"
class="day-off-button text-center @(Model.OffDays.Contains(DayOfWeek.Tuesday) ? "day-off-button__diactive" : "day-off-button__active")">
سه‌شنبه
</button>
<button type="button" name="Wednesday" value="@((int)(DayOfWeek.Wednesday))"
class="day-off-button text-center @(Model.OffDays.Contains(DayOfWeek.Wednesday) ? "day-off-button__diactive" : "day-off-button__active")">
چهارشنبه
</button>
<button type="button" name="Thursday" value="@((int)(DayOfWeek.Thursday))"
class="day-off-button text-center @(Model.OffDays.Contains(DayOfWeek.Thursday) ? "day-off-button__diactive" : "day-off-button__active")">
پنج‌شنبه
</button>
<button type="button" name="Friday" value="@((int)(DayOfWeek.Friday))"
class="day-off-button text-center @(Model.OffDays.Contains(DayOfWeek.Friday) ? "day-off-button__diactive" : "day-off-button__active")">
جمعه
</button>
<input type="checkbox" style="display: none;" class="custom-checkbox offDayOfWeeks-Input"
name="offDayOfWeeks" id="SaturdayInput"
@(Model.OffDays.Contains(DayOfWeek.Saturday) ? "checked" : "")
value="@((int)(DayOfWeek.Saturday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox offDayOfWeeks-Input"
name="offDayOfWeeks" id="SundayInput" @(Model.OffDays.Contains(DayOfWeek.Sunday) ?
"checked" : "") value="@((int)(DayOfWeek.Sunday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox offDayOfWeeks-Input"
name="offDayOfWeeks" id="MondayInput" @(Model.OffDays.Contains(DayOfWeek.Monday) ?
"checked" : "") value="@((int)(DayOfWeek.Monday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox offDayOfWeeks-Input"
name="offDayOfWeeks" id="TuesdayInput" @(Model.OffDays.Contains(DayOfWeek.Tuesday)
? "checked" : "") value="@((int)(DayOfWeek.Tuesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox offDayOfWeeks-Input"
name="offDayOfWeeks" id="WednesdayInput"
@(Model.OffDays.Contains(DayOfWeek.Wednesday) ? "checked" : "")
value="@((int)(DayOfWeek.Wednesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox offDayOfWeeks-Input"
name="offDayOfWeeks" id="ThursdayInput"
@(Model.OffDays.Contains(DayOfWeek.Thursday) ? "checked" : "")
value="@((int)(DayOfWeek.Thursday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox offDayOfWeeks-Input"
name="offDayOfWeeks" id="FridayInput" @(Model.OffDays.Contains(DayOfWeek.Friday) ?
"checked" : "") value="@((int)(DayOfWeek.Friday))" />
</div>
<div class="day-off-title mb-2">
وضعیت فعالیت مجموعه در روزهای جمعه و تعطیلات رسمی
</div>
<div class="day-off-status-person mb-3">
<div class="d-flex align-items-center gap-3">
<span class="day-off-status-person__item">وضعیت پرسنل در روز های تعطیل رسمی : </span>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" class="custom-checkbox" name="HolidayWork" id="OffDays2"
@(Model.HolidayWork == HolidayWork.WorkInHolidays ? "checked" : "")
value="@((int)(HolidayWork.WorkInHolidays))" />
<label class="text-nowrap day-off-status-person__item--label" for="OffDays2">
اشتغال دارد
</label>
</div>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" name="HolidayWork" id="OffDays1" class="custom-checkbox"
@(Model.HolidayWork == HolidayWork.Default ? "checked" : "")
value="@((int)(HolidayWork.Default))" />
<label for="OffDays1" class="text-nowrap day-off-status-person__item--label">
اشتغال ندارد
</label>
</div>
</div>
<div>
</div>
</div>
</div>
<div class="container m-0">
<div class="row">
<div class="col-6 text-end">

View File

@@ -15,14 +15,14 @@
</div>
<div class="col-12 group-container">
<div class="titleSettingRollCall">تعطیلات جمعه</div>
<div class="form-group my-1 group">
@* <div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))" />
<label for="Friday1">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div> *@
</div>
<div class="col-12">

View File

@@ -16,14 +16,14 @@
</div>
<div class="col-12 group-container">
<div class="titleSettingRollCall">تعطیلات جمعه</div>
<div class="form-group my-1 group">
@* <div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))" />
<label for="Friday1">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div> *@
</div>
<div class="col-12">

View File

@@ -14,14 +14,14 @@
</div>
<div class="col-12 group-container">
<div class="titleSettingRollCall">تعطیلات جمعه</div>
<div class="form-group my-1 group">
@* <div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday1" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.Default ? "checked" : "") value="@((int)(FridayWork.Default))" />
<label for="Friday1">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday2" class="form-check-input Main-Radio" @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div> *@
</div>
<div class="col-12">

View File

@@ -216,46 +216,106 @@
</div>
</div>
<div class="row mt-2">
<div class="col-12">
<div class="lableCheckBreakTime text-center">وضعیت فعالیت مجموعه در روز های جمعه و تعطیلات رسمی</div>
<div class="row extraOptionBorder">
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های جمعه</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork1" id="Friday1" class="form-check-input Main-Radio" value="@((int)(FridayWork.Default))" />
<label for="Friday1" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="FridayWork1" id="Friday2" class="form-check-input Main-Radio" value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div>
</div>
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های تعطیلات رسمی</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork1" id="HolidayWork1" class="form-check-input Main-Radio" value="@HolidayWork.Default" />
<label for="HolidayWork1" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="HolidayWork1" id="HolidayWork2" class="form-check-input Main-Radio" value="@HolidayWork.WorkInHolidays" />
<label for="HolidayWork2" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار می‌کند.</label>
</div>
</div>
</div>
<input type="hidden" id="GroupId" name="Command.GroupId" value="" />
</div>
<div class="day-off-parent mb-4">
<div class="day-off-title mb-2">
روزهای تعطیل هفته
</div>
<div class="day-off-button-container mb-3">
<button type="button" name="Saturday" value="@((int)(DayOfWeek.Saturday))"
class="day-off-button text-center ">
شنبه
</button>
<button type="button" name="Sunday" value="@((int)(DayOfWeek.Sunday))"
class="day-off-button text-center ">
یکشنبه
</button>
<button type="button" name="Monday" value="@((int)(DayOfWeek.Monday))"
class="day-off-button text-center ">
دوشنبه
</button>
<button type="button" name="Tuesday" value="@((int)(DayOfWeek.Tuesday))"
class="day-off-button text-center ">
سه‌شنبه
</button>
<button type="button" name="Wednesday" value="@((int)(DayOfWeek.Wednesday))"
class="day-off-button text-center ">
چهارشنبه
</button>
<button type="button" name="Thursday" value="@((int)(DayOfWeek.Thursday))"
class="day-off-button text-center ">
پنج‌شنبه
</button>
<button type="button" name="Friday" value="@((int)(DayOfWeek.Friday))"
class="day-off-button text-center ">
جمعه
</button>
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="SaturdayInput"
value="@((int)(DayOfWeek.Saturday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="SundayInput" value="@((int)(DayOfWeek.Sunday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="MondayInput" value="@((int)(DayOfWeek.Monday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="TuesdayInput" value="@((int)(DayOfWeek.Tuesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="WednesdayInput"
value="@((int)(DayOfWeek.Wednesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="ThursdayInput"
value="@((int)(DayOfWeek.Thursday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="FridayInput" value="@((int)(DayOfWeek.Friday))" />
</div>
<div class="day-off-title mb-2">
وضعیت فعالیت مجموعه در روزهای جمعه و تعطیلات رسمی
</div>
<div class="day-off-status-person mb-3">
<div class="d-flex align-items-center gap-3">
<span class="day-off-status-person__item">وضعیت پرسنل در روز های تعطیل رسمی : </span>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" class="custom-checkbox" name="command.HolidayWork" id="OffDays2"
value="@((int)(HolidayWork.WorkInHolidays))" />
<label class="text-nowrap day-off-status-person__item--label" for="OffDays2">
اشتغال دارد
</label>
</div>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" name="command.HolidayWork" id="OffDays1" class="custom-checkbox"
value="@((int)(HolidayWork.Default))" />
<label for="OffDays1" class="text-nowrap day-off-status-person__item--label">
اشتغال ندارد
</label>
</div>
</div>
<div>
</div>
<input type="hidden" id="GroupId" name="Command.GroupId" value="" />
</div>
</div>
</div>

View File

@@ -166,46 +166,106 @@
<div class="row mt-2">
<div class="col-12">
<div class="lableCheckBreakTime text-center">وضعیت فعالیت مجموعه در روز های جمعه و تعطیلات رسمی</div>
<div class="row extraOptionBorder">
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های جمعه</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday1" class="form-check-input Main-Radio" @* @(Model.FridayWork == FridayWork.Default ? "checked" : "") *@ value="@((int)(FridayWork.Default))" />
<label for="Friday1" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="Command.FridayWork" id="Friday2" class="form-check-input Main-Radio" @* @(Model.FridayWork == FridayWork.WorkInFriday ? "checked" : "") *@ value="@((int)(FridayWork.WorkInFriday))" />
<label for="Friday2" class="lableCheckBreakTime">پرسنل در روزهای جمعه کار می‌کند.</label>
</div>
</div>
</div>
<div class="col-6 p-0">
<div class="group-container">
@* <div class="lableCheckBreakTime">وضعیت فعالیت مجموعه در روز های تعطیلات رسمی</div> *@
<div class="d-flex form-group my-1 group">
<input type="radio" name="Command.HolidayWork" id="HolidayWork1" class="form-check-input Main-Radio" @* @(Model.HolidayWork == HolidayWork.Default ? "checked" : "") *@ value="0" />
<label for="HolidayWork1" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار نمی‌کند.</label>
</div>
<div class="d-flex form-group my-1 group">
<input type="radio" name="Command.HolidayWork" id="HolidayWork2" class="form-check-input Main-Radio" @* @(Model.HolidayWork == HolidayWork.WorkInHolidays ? "checked" : "") *@ value="1" />
<label for="HolidayWork2" class="lableCheckBreakTime">پرسنل در ایام تعطیل رسمی کار می‌کند.</label>
</div>
</div>
</div>
<input type="hidden" id="GroupId" name="command.GroupId" value="" />
</div>
<div class="day-off-parent">
<div class="day-off-title mb-2">
روزهای تعطیل هفته
</div>
<div class="day-off-button-container mb-3">
<button type="button" name="Saturday" value="@((int)(DayOfWeek.Saturday))"
class="day-off-button text-center ">
شنبه
</button>
<button type="button" name="Sunday" value="@((int)(DayOfWeek.Sunday))"
class="day-off-button text-center ">
یکشنبه
</button>
<button type="button" name="Monday" value="@((int)(DayOfWeek.Monday))"
class="day-off-button text-center ">
دوشنبه
</button>
<button type="button" name="Tuesday" value="@((int)(DayOfWeek.Tuesday))"
class="day-off-button text-center ">
سه‌شنبه
</button>
<button type="button" name="Wednesday" value="@((int)(DayOfWeek.Wednesday))"
class="day-off-button text-center ">
چهارشنبه
</button>
<button type="button" name="Thursday" value="@((int)(DayOfWeek.Thursday))"
class="day-off-button text-center ">
پنج‌شنبه
</button>
<button type="button" name="Friday" value="@((int)(DayOfWeek.Friday))"
class="day-off-button text-center ">
جمعه
</button>
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="SaturdayInput"
value="@((int)(DayOfWeek.Saturday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="SundayInput" value="@((int)(DayOfWeek.Sunday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="MondayInput" value="@((int)(DayOfWeek.Monday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="TuesdayInput" value="@((int)(DayOfWeek.Tuesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="WednesdayInput"
value="@((int)(DayOfWeek.Wednesday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="ThursdayInput"
value="@((int)(DayOfWeek.Thursday))" />
<input type="checkbox" style="display: none;" class="custom-checkbox weeklyOffDays-Input"
name="Command.WeeklyOffDays" id="FridayInput" value="@((int)(DayOfWeek.Friday))" />
</div>
<div class="day-off-title mb-2">
وضعیت فعالیت مجموعه در روزهای جمعه و تعطیلات رسمی
</div>
<div class="day-off-status-person mb-3">
<div class="d-flex align-items-center gap-3">
<span class="day-off-status-person__item">وضعیت پرسنل در روز های تعطیل رسمی : </span>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" class="custom-checkbox" name="command.HolidayWork" id="OffDays2"
value="@((int)(HolidayWork.WorkInHolidays))" />
<label class="text-nowrap day-off-status-person__item--label" for="OffDays2">
اشتغال دارد
</label>
</div>
<div class="d-flex align-items-center gap-1 day-off-status-person__item">
<input type="radio" name="command.HolidayWork" id="OffDays1" class="custom-checkbox"
value="@((int)(HolidayWork.Default))" />
<label for="OffDays1" class="text-nowrap day-off-status-person__item--label">
اشتغال ندارد
</label>
</div>
</div>
<div>
</div>
</div>
</div>
</div>

View File

@@ -1,4 +1,5 @@
using System.Diagnostics;
using _0_Framework.Domain.CustomizeCheckoutShared.Enums;
using AccountMangement.Infrastructure.EFCore;
using CompanyManagment.App.Contracts.AdminMonthlyOverview;
using CompanyManagment.EFCore;
@@ -48,6 +49,33 @@ public class Tester
}
await _accountContext.SaveChangesAsync();
}
private async Task ChangeFridayWorkToWeeklyDayOfWeek()
{
var employeeSettingsEnumerable =await _companyContext.CustomizeWorkshopEmployeeSettings.Where(x=>x.FridayWork ==FridayWork.Default).ToListAsync();
foreach (var employeeSetting in employeeSettingsEnumerable)
{
employeeSetting.FridayWorkToWeeklyDayOfWeek();
}
var groupSettings = await _companyContext.CustomizeWorkshopGroupSettings
.Where(x => x.FridayWork == FridayWork.Default).ToListAsync();
foreach (var groupSetting in groupSettings)
{
groupSetting.FridayWorkToWeeklyDayOfWeek();
}
var workshopSettings = await _companyContext.CustomizeWorkshopSettings
.Where(x => x.FridayWork == FridayWork.Default).ToListAsync();
foreach (var workshopSetting in workshopSettings)
{
workshopSetting.FridayWorkToWeeklyDayOfWeek();
}
await _companyContext.SaveChangesAsync();
}
private async Task AdminMonthlyOverviewTest()
{
var acc = _companyContext.WorkshopAccounts.FirstOrDefault(x => x.AccountId == 322);

View File

@@ -3339,4 +3339,145 @@ button.btn-employee-payment {
/************************* End Button *************************/
.sweet-alert h2 {
font-size: 22px !important;
}
}
.day-off-parent {
width: 100%;
}
.day-off-title {
color: #000000;
font-weight: 500;
font-size: 12px;
text-align: center;
}
.day-off-button-container {
display: flex;
justify-content: center;
gap: 5px;
border: 1px solid #d9d9d9;
border-radius: 10px;
padding: 10px 4px;
}
.day-off-button {
width: 42px;
height: 22px;
border-radius: 4px;
font-weight: 500;
font-size: 8px;
}
.day-off-button__active {
background-color: #148989;
color: white;
transition: all 0.3s ease-in-out;
}
.day-off-button__active:hover {
background-color: #106b6b;
}
.day-off-button__diactive {
border: 1px solid #f2c2c2;
color: #4c4c4c;
background-color: #fff3f3;
transition: all 0.3s ease-in-out;
}
.day-off-button__diactive:hover {
background-color: #f7dbdb;
}
.day-off-status-person {
border: 1px solid #d9d9d9;
border-radius: 10px;
padding: 10px 5px;
}
.day-off-status-person__item {
font-weight: 500;
font-size: 9px;
color: #646464;
}
@media screen and (min-width: 431px) and (max-width: 767px) {
.day-off-button {
width: 55px;
height: 22px;
border-radius: 4px;
font-weight: 500;
font-size: 12px;
}
/* .day-off-status-person__item {
font-weight: 500;
font-size: 12px;
color: #646464;
} */
}
@media screen and (min-width: 768px) {
.day-off-button-container {
display: flex;
justify-content: center;
gap: 8px;
border: 1px solid #d9d9d9;
border-radius: 10px;
padding: 10px 5px;
}
.day-off-button {
width: 71px;
height: 22px;
border-radius: 4px;
font-weight: 500;
font-size: 12px;
}
.day-off-status-person__item {
font-weight: 500;
font-size: 14px;
color: #646464;
}
}
.custom-checkbox {
/* Hide the default checkbox */
appearance: none;
-webkit-appearance: none;
width: 20px;
height: 20px;
border-radius: 6px;
border: 1px solid #cfd3d4;
cursor: pointer;
position: relative;
background-color: #fff;
transition: all 0.2s ease-in-out;
}
.custom-checkbox:checked {
background-color: #23a8a8;
border: 1px solid #ffffff !important;
outline: 1px solid #23a8a8;
}
.custom-checkbox:checked::after {
content: "";
position: absolute;
left: 6px;
top: 2px;
width: 6px;
height: 12px;
border: solid white;
border-width: 0 3px 3px 0;
transform: rotate(45deg);
}

View File

@@ -1,6 +1,34 @@
var currentUrlGroup = window.location.href;
$(document).ready(function () {
var buttons = document.querySelectorAll(".day-off-button");
buttons.forEach((button) => {
button.addEventListener("click", () => {
const isDiactive = button.classList.toggle("day-off-button__diactive");
button.classList.toggle("day-off-button__active");
const name = button.name;
const $checkbox = $("#" + name + "Input");
if ($checkbox.length === 0) {
console.warn(`Checkbox with id '${name}Input' not found.`);
return;
}
if (isDiactive) {
$checkbox.prop("checked", true).attr("checked", "checked");
} else {
$checkbox.prop("checked", false).removeAttr("checked");
}
});
});
document.querySelectorAll('.day-off-button').forEach(button => {
button.classList.add('day-off-button__active');
});
$(document).on("click", ".btn-cancel2", function () {
$('#MainModal').modal('toggle');
});
@@ -748,7 +776,7 @@ function loadWorkshopSettingList() {
$('#TimeOnly').val('');
$('#computeTime').addClass('disable');
}
console.log(item);
$('#Friday1').prop('checked', (item.fridayWork === 0 ? true : false));
$('#Friday2').prop('checked', (item.fridayWork === 1 ? true : false));

View File

@@ -6,7 +6,7 @@
}
.modal-dialog, .modal-content {
height: 460px;
height: 560px;
width: 510px;
}
@@ -125,7 +125,7 @@
color: #1B929C;
}
.radio-label-workTimeOption {
font-size: 13px;
@@ -262,4 +262,4 @@
.container, .container-sm {
max-width: none;
}
}
}

View File

@@ -5,13 +5,14 @@
border: 1px solid #eb3434 !important;
}
.modal-dialog, .modal-content {
height: 460px;
.modal-dialog,
.modal-content {
height: 560px;
width: 510px;
}
.timeWorkTitle {
color: #5C5C5C;
color: #5c5c5c;
font-weight: 600;
font-size: 12px;
margin: auto 0 auto 6px;
@@ -19,9 +20,9 @@
}
.groupBox {
background-color: #F5F5F5;
background-color: #f5f5f5;
border-radius: 10px;
border: 1px solid #E7E7E7;
border: 1px solid #e7e7e7;
padding: 6px;
margin: 6px 3px;
}
@@ -35,7 +36,8 @@
opacity: 1; /* Firefox */
}
.groupBox .form-control::-ms-input-placeholder { /* Edge 12-18 */
.groupBox .form-control::-ms-input-placeholder {
/* Edge 12-18 */
color: #bfbfbf;
}
@@ -43,7 +45,7 @@
display: flex;
align-items: center;
justify-content: center;
background-color: #84CC16;
background-color: #84cc16;
border-radius: 5px;
color: #ffffff;
font-size: 12px;
@@ -55,7 +57,7 @@
display: flex;
align-items: center;
justify-content: center;
background-color: #F87171;
background-color: #f87171;
border-radius: 7px;
padding: 3px;
width: 30px;
@@ -75,7 +77,6 @@
justify-content: center;
}
.btn-workTimeOption-container {
display: flex;
}
@@ -87,8 +88,8 @@
.radio-label-workTimeOption {
font-size: 13px;
font-weight: 500;
color: #0F8080;
background-color: #DDF4F4;
color: #0f8080;
background-color: #ddf4f4;
text-align: center;
padding: 8px 16px;
border-radius: 4px;
@@ -98,20 +99,20 @@
}
.radio-label-workTimeOption:hover {
color: #FFFFFF;
color: #ffffff;
background-color: #1c7474;
border-color: #23A8A8;
border-color: #23a8a8;
}
.radio-workTimeOption:checked + .radio-label-workTimeOption {
color: #FFFFFF;
background: linear-gradient(93.83deg, #2EBEBE 1.59%, #1E9D9D 47.86%, #0B7878 101.16%);
color: #ffffff;
background: linear-gradient( 93.83deg, #2ebebe 1.59%, #1e9d9d 47.86%, #0b7878 101.16% );
}
.show-disorganized {
height: 81px;
background: #F2FEFF;
border: 1px solid #B0EBF0;
background: #f2feff;
border: 1px solid #b0ebf0;
border-radius: 10px;
display: flex;
align-items: center;
@@ -122,16 +123,14 @@
.show-disorganized p {
font-weight: 500;
font-size: 14px;
color: #1B929C;
color: #1b929c;
}
.radio-label-workTimeOption {
font-size: 13px;
font-weight: 500;
color: #0F8080;
background-color: #DDF4F4;
color: #0f8080;
background-color: #ddf4f4;
text-align: center;
padding: 8px 16px;
border-radius: 9px;
@@ -141,20 +140,20 @@
}
.radio-label-workTimeOption:hover {
color: #FFFFFF;
color: #ffffff;
background-color: #1c7474;
border-color: #23A8A8;
border-color: #23a8a8;
}
.radio-workTimeOption:checked + .radio-label-workTimeOption {
color: #FFFFFF;
background: linear-gradient(93.83deg, #2EBEBE 1.59%, #1E9D9D 47.86%, #0B7878 101.16%);
color: #ffffff;
background: linear-gradient( 93.83deg, #2ebebe 1.59%, #1e9d9d 47.86%, #0b7878 101.16% );
}
.show-disorganized {
height: 81px;
background: #F2FEFF;
border: 1px solid #B0EBF0;
background: #f2feff;
border: 1px solid #b0ebf0;
border-radius: 10px;
display: flex;
align-items: center;
@@ -165,7 +164,7 @@
.show-disorganized p {
font-weight: 500;
font-size: 14px;
color: #1B929C;
color: #1b929c;
}
#computeTime span,
@@ -197,7 +196,7 @@
height: 15px;
border-radius: 6px;
padding: 8px;
border: 1px solid #CFD3D4;
border: 1px solid #cfd3d4;
background-color: white;
background-position: center;
background-size: contain;
@@ -214,32 +213,32 @@
background-size: 75%;
}
.form-check-input[type=checkbox]:indeterminate {
background-color: #148989;
border-color: #ffffff;
--bs-form-check-bg-image: url(data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e);
}
.form-check-input[type="checkbox"]:indeterminate {
background-color: #148989;
border-color: #ffffff;
--bs-form-check-bg-image: url( data:image/svg + xml, %3csvgxmlns="http://www.w3.org/2000/svg"viewBox="0 0 20 20"%3e%3cpathfill="none"stroke="%23fff"stroke-linecap="round"stroke-linejoin="round"stroke-width="3"d="M6 10h8"/%3e%3c/svg%3e );
}
.form-check-input[type="radio"]:focus,
.form-check-input[type="checkbox"]:focus {
outline: none;
box-shadow: none;
}
.form-check-input[type="radio"]:focus,
.form-check-input[type="checkbox"]:focus {
outline: none;
box-shadow: none;
}
.form-check-input[type="radio"] + label,
.form-check-input[type="checkbox"] + label {
color: #83898C;
}
.form-check-input[type="radio"] + label,
.form-check-input[type="checkbox"] + label {
color: #83898c;
}
.form-check-input[type="radio"]:checked + label,
.form-check-input[type="checkbox"]:checked + label {
color: #2B2F32;
}
.form-check-input[type="radio"]:checked + label,
.form-check-input[type="checkbox"]:checked + label {
color: #2b2f32;
}
/************************ Radio Button Input (Like Checkbox appearance) ************************/
@media (max-width: 992px) {
.modal-dialog, .modal-content {
.modal-dialog,
.modal-content {
/*height: 622px;*/
height: 600px;
width: auto;
@@ -259,7 +258,8 @@
}
@media (min-width: 576px) {
.container, .container-sm {
.container,
.container-sm {
max-width: none;
}
}

View File

@@ -259,3 +259,28 @@ function saveNewWorkshopSetting() {
}
});
}
$(document).ready(function () {
var buttons = document.querySelectorAll(".day-off-button");
buttons.forEach((button) => {
button.addEventListener("click", () => {
const isDiactive = button.classList.toggle("day-off-button__diactive");
button.classList.toggle("day-off-button__active");
const name = button.name;
const $checkbox = $("#" + name + "Input");
if ($checkbox.length === 0) {
console.warn(`Checkbox with id '${name}Input' not found.`);
return;
}
if (isDiactive) {
$checkbox.prop("checked", true).attr("checked", "checked");
} else {
$checkbox.prop("checked", false).removeAttr("checked");
}
});
});
});

View File

@@ -344,3 +344,26 @@ function saveEditSettingWorkTime() {
}
});
}
$(document).ready(function () {
var buttons = document.querySelectorAll(".day-off-button");
buttons.forEach((button) => {
button.addEventListener("click", () => {
const isDiactive = button.classList.toggle("day-off-button__diactive");
button.classList.toggle("day-off-button__active");
const name = button.name;
const $checkbox = $("#" + name + "Input");
if ($checkbox.length === 0) {
console.warn(`Checkbox with id '${name}Input' not found.`);
return;
}
if (isDiactive) {
$checkbox.prop("checked", true).attr("checked", "checked");
} else {
$checkbox.prop("checked", false).removeAttr("checked");
}
});
});
});

View File

@@ -461,7 +461,7 @@ video {
@media (max-width: 992px) {
.modal-dialog, .modal-content {
height: 840px;
height: 860px;
}
}
@@ -484,4 +484,19 @@ video {
.form-control {
margin: 0 !important;
}
}
.stick-to-bottom {
position: fixed;
bottom: 0px; /* adjust as needed */
left: 0;
right: 0;
width: 100%;
text-align: center;
z-index: 1000; /* to make sure it's on top */
}
#mobileDisplay{
height:800px;
}

View File

@@ -798,11 +798,16 @@ function saveDataLocal() {
saveData[item.name] = item.value;
});
const checkedValues = $('.weeklyOffDays-Input:checked').map(function () {
return $(this).val();
}).get();
saveData['Command.BreakTime.HasBreakTimeValue'] = hasBreakTime;
saveData['Command.BreakTime.BreakTimeValue'] = breakTimeValue;
saveData['Command.FridayWork'] = FridayWork;
saveData['Command.HolidayWork'] = HolidayWork;
saveData["Command.WeeklyOffDays"] = checkedValues;
console.log(saveData);
@@ -886,4 +891,31 @@ async function postChangeEditEmployee() {
$('#ConfirmRecalculationLoading').hide();
$('.btn-confirm').removeClass('disable');
}
}
}
$(document).ready(function () {
var buttons = document.querySelectorAll(".day-off-button");
buttons.forEach((button) => {
button.addEventListener("click", () => {
const isDiactive = button.classList.toggle("day-off-button__diactive");
button.classList.toggle("day-off-button__active");
const name = button.name;
const $checkbox = $("#" + name + "Input");
if ($checkbox.length === 0) {
console.warn(`Checkbox with id '${name}Input' not found.`);
return;
}
if (isDiactive) {
$checkbox.prop("checked", true).attr("checked", "checked");
} else {
$checkbox.prop("checked", false).removeAttr("checked");
}
});
});
});

View File

@@ -16,6 +16,7 @@
numeralThousandsGroupStyle: 'thousand'
});
});
$(".dateTime").each(function () {
let element = $(this);
@@ -836,11 +837,16 @@ function saveDataLocal() {
saveData[item.name] = item.value;
});
const checkedValues = $('.weeklyOffDays-Input:checked').map(function () {
return $(this).val();
}).get();
saveData['BreakTime.HasBreakTimeValue'] = hasBreakTime;
saveData['BreakTime.BreakTimeValue'] = breakTimeValue;
saveData['FridayWork'] = FridayWork;
saveData['HolidayWork'] = HolidayWork;
saveData['IsShiftChanged'] = isShiftChanged;
saveData["OffDayOfWeeks"] = checkedValues;
}
@@ -968,4 +974,31 @@ async function saveReCalculateValues(command) {
if (e.responseText) console.error('Response Text:', e.responseText);
return false;
}
}
}
$(document).ready(function () {
var buttons = document.querySelectorAll(".day-off-button");
buttons.forEach((button) => {
button.addEventListener("click", () => {
const isDiactive = button.classList.toggle("day-off-button__diactive");
button.classList.toggle("day-off-button__active");
const name = button.name;
const $checkbox = $("#" + name + "Input");
if ($checkbox.length === 0) {
console.warn(`Checkbox with id '${name}Input' not found.`);
return;
}
if (isDiactive) {
$checkbox.prop("checked", true).attr("checked", "checked");
} else {
$checkbox.prop("checked", false).removeAttr("checked");
}
});
});
});

View File

@@ -700,7 +700,14 @@ function ajaxSaveData() {
$('#btnSave').addClass('disable');
var data = $('#create-form').serializeArray();
var saveData = {};
/* var data = $('#create-form').serializeArray();*/
var formData = $('#create-form').serializeArray();;
formData.forEach(function (item) {
saveData[item.name] = item.value;
});
var hasBreakTime = "false";
if ($('#BreakTime').prop('checked')) {
@@ -727,13 +734,25 @@ function ajaxSaveData() {
HolidayWork = "WorkInHolidays";
}
const checkedValues = $('.weeklyOffDays-Input:checked').map(function () {
return $(this).val();
}).get();
console.log(checkedValues);
//data.push({ name: 'BreakTime.HasBreakTimeValue', value: hasBreakTime });
//data.push({ name: 'BreakTime.BreakTimeValue', value: breakTimeValue });
//data.push({ name: 'FridayWork', value: FridayWork });
//data.push({ name: 'HolidayWork', value: HolidayWork });
//data.push({ name: 'OffDayOfWeeks', value: checkedValues });
saveData['BreakTime.HasBreakTimeValue'] = hasBreakTime;
saveData['BreakTime.BreakTimeValue'] = breakTimeValue;
saveData['FridayWork'] = FridayWork;
saveData['HolidayWork'] = HolidayWork;
//saveData['IsShiftChanged'] = isShiftChanged;
saveData["OffDayOfWeeks"] = checkedValues;
data.push({ name: 'BreakTime.HasBreakTimeValue', value: hasBreakTime });
data.push({ name: 'BreakTime.BreakTimeValue', value: breakTimeValue });
data.push({ name: 'FridayWork', value: FridayWork });
data.push({ name: 'HolidayWork', value: HolidayWork });
var requestData = $.param(data);
/* var requestData = $.param(data);*/
debugger;
$.ajax({
async: false,
@@ -741,7 +760,7 @@ function ajaxSaveData() {
type: 'POST',
url: ajaxCreateGroup,
headers: { "RequestVerificationToken": antiForgeryToken },
data: requestData,
data: saveData,
success: function (response) {
if (response.success) {
$('.alert-success-msg').show();
@@ -771,3 +790,27 @@ function ajaxSaveData() {
}
});
}
$(document).ready(function () {
var buttons = document.querySelectorAll(".day-off-button");
buttons.forEach((button) => {
button.addEventListener("click", () => {
const isDiactive = button.classList.toggle("day-off-button__diactive");
button.classList.toggle("day-off-button__active");
const name = button.name;
const $checkbox = $("#" + name + "Input");
if ($checkbox.length === 0) {
console.warn(`Checkbox with id '${name}Input' not found.`);
return;
}
if (isDiactive) {
$checkbox.prop("checked", true).attr("checked", "checked");
} else {
$checkbox.prop("checked", false).removeAttr("checked");
}
});
});
});

View File

@@ -36,7 +36,41 @@ public interface IWorkFlowApplication
Task<List<DailyRollCallWorkFlowViewModel>> GetUndefinedRollCalls(long workshopId);
#region CountWorkFlowForCheckout
/// <summary>
/// شمارنده کات شده توسط سیستم کارپوشه
/// برای ایجاد تصفیه حساب
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<int> CountCutByBgServiceLastMonth(long workshopId);
Task<List<DailyRollCallConfirmedWithoutLunchBreakViewModel>> GetEmployeesWithoutLunchBreak(long workshopId);
/// <summary>
/// شمارنده غیبت کارپوشه
/// برای ایجاد تصفیه حساب
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<int> CountAbsentRollCallLastMonth(long workshopId);
/// <summary>
/// شمارنده عدم ثبت استراحت کارپوشه
/// برای ایجاد تصفیه حساب
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<int> CountEmployeesWithoutLunchBreakLastMonth(long workshopId);
/// <summary>
/// شمارنده ثبت نامشخص کارپوشه
/// برای ایجاد تصفیه حساب
/// </summary>
/// <param name="workshopId"></param>
/// <returns></returns>
Task<int> CountUndefinedLastMonth(long workshopId);
#endregion
Task<List<DailyRollCallConfirmedWithoutLunchBreakViewModel>> GetEmployeesWithoutLunchBreak(long workshopId);
Task<List<(long Id, string Name)>> GetEmployeesWithoutGroup(long workshopId);
}

View File

@@ -65,10 +65,10 @@ public class WorkFlowApplication : IWorkFlowApplication
return op.Succcedded();
}
public async Task<int> GetCountAllWorkFlows(long workshopId,long accountId)
public async Task<int> GetCountAllWorkFlows(long workshopId, long accountId)
{
int count = 0;
count += await GetAllWorkFlowCount(workshopId,accountId);
count += await GetAllWorkFlowCount(workshopId, accountId);
return count;
}
public Task<int> GetRollCallAbsentsWorkFlows(long workshopId)
@@ -84,28 +84,28 @@ public class WorkFlowApplication : IWorkFlowApplication
return (await GetRollCallWorkFlowsCutByBgService(workshopId)).Count;
}
public async Task<int> GetAllWorkFlowCount(long workshopId,long accountId)
public async Task<int> GetAllWorkFlowCount(long workshopId, long accountId)
{
var count = 0;
// RollCall
var count = 0;
// RollCall
count += await GetAllRollCallCount(workshopId);
count += await GetAllRollCallCount(workshopId);
count += await GetAllEmployeeDocuments(workshopId,accountId );
count += await GetAllEmployeeDocuments(workshopId, accountId);
// Employee Documents
// Employee Documents
return count;
return count;
}
public async Task<int> GetAllEmployeeDocuments(long workshopId, long accountId)
{
int count = 0;
count += (await _employeeDocumentsApplication.GetClientRejectedDocumentForClient(workshopId, accountId)).Count;
return count;
int count = 0;
count += (await _employeeDocumentsApplication.GetClientRejectedDocumentForClient(workshopId, accountId)).Count;
return count;
}
public Task<int> GetAllWorkFlowCountAsync(long workshopId)
@@ -115,19 +115,19 @@ public class WorkFlowApplication : IWorkFlowApplication
public async Task<int> GetAllRollCallCount(long workshopId)
{
int count = 0;
var activeServiceByWorkshopId = _rollCallACL.GetActiveServiceByWorkshopId(workshopId);
if (activeServiceByWorkshopId == null)
{
return count;
}
//count += _rollCallACL.GetRollCallAbsentsWorkFlows(accId, workshopId);
count += (await GetAbsentRollCallWorkFlows(workshopId))?.Count ?? 0;
count += (await GetRollCallWorkFlowsCutByBgService(workshopId))?.Count ?? 0;
count += (await GetEmployeesWithoutLunchBreak(workshopId))?.Count ?? 0;
//count += (await GetRollCallsOverlappingLeaves(workshopId))?.Count ?? 0;
count += (await GetUndefinedRollCalls(workshopId))?.Count ?? 0;
return count;
int count = 0;
var activeServiceByWorkshopId = _rollCallACL.GetActiveServiceByWorkshopId(workshopId);
if (activeServiceByWorkshopId == null)
{
return count;
}
//count += _rollCallACL.GetRollCallAbsentsWorkFlows(accId, workshopId);
count += (await GetAbsentRollCallWorkFlows(workshopId))?.Count ?? 0;
count += (await GetRollCallWorkFlowsCutByBgService(workshopId))?.Count ?? 0;
count += (await GetEmployeesWithoutLunchBreak(workshopId))?.Count ?? 0;
//count += (await GetRollCallsOverlappingLeaves(workshopId))?.Count ?? 0;
count += (await GetUndefinedRollCalls(workshopId))?.Count ?? 0;
return count;
}
#region Methods For Ajax
@@ -170,7 +170,7 @@ public class WorkFlowApplication : IWorkFlowApplication
{
DateTime = date.Date,
DateTimeFa = date.ToFarsi(),
};
//dont count absences before the last checkout
@@ -193,7 +193,7 @@ public class WorkFlowApplication : IWorkFlowApplication
FilterWithOffset(workshopId, date,ref newItem);
FilterWithOffset(workshopId, date, ref newItem);
newItem.DayOfWeekFa = newItem.DateTime.DayOfWeek.DayOfWeeKToPersian();
@@ -201,17 +201,17 @@ public class WorkFlowApplication : IWorkFlowApplication
return newItem;
}
private void FilterWithOffset(long workshopId, DateTime date,ref DailyRollCallWorkFlowViewModel dailyRollCall)
private void FilterWithOffset(long workshopId, DateTime date, ref DailyRollCallWorkFlowViewModel dailyRollCall)
{
if(date.Date == DateTime.Now.Date.AddDays(-1))
{
foreach (var item in dailyRollCall.RollCallWorkFlowPerDayViewModels.ToList())
{
var employeeOffset = _rollCallDomainService.GetEmployeeOffSetForRegularSettings(item.EmployeeId, workshopId);
if (DateTime.Now < DateTime.Today + employeeOffset.ToTimeSpan())
dailyRollCall.RollCallWorkFlowPerDayViewModels.Remove(item);
}
}
if (date.Date == DateTime.Now.Date.AddDays(-1))
{
foreach (var item in dailyRollCall.RollCallWorkFlowPerDayViewModels.ToList())
{
var employeeOffset = _rollCallDomainService.GetEmployeeOffSetForRegularSettings(item.EmployeeId, workshopId);
if (DateTime.Now < DateTime.Today + employeeOffset.ToTimeSpan())
dailyRollCall.RollCallWorkFlowPerDayViewModels.Remove(item);
}
}
}
/// <summary>
@@ -371,202 +371,358 @@ public class WorkFlowApplication : IWorkFlowApplication
#region Methods For OnGet
/// <summary>
/// لیست تداخل مرخصی و حضور
/// </summary>
public async Task<List<DailyWorkFlowEmployeesWithRollCallOnLeaveViewModel>> GetRollCallsOverlappingLeaves(long workshopId)
/// <summary>
/// لیست تداخل مرخصی و حضور
/// </summary>
public async Task<List<DailyWorkFlowEmployeesWithRollCallOnLeaveViewModel>> GetRollCallsOverlappingLeaves(long workshopId)
{
var now = DateTime.Now;
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
var rollCalls = _rollCallACL.GetRollCallsOverlappingLeaves(workshopId, twoMonthsAgo, now);
return rollCalls
.Select(x => new DailyWorkFlowEmployeesWithRollCallOnLeaveViewModel()
{
Date = x.Date,
DateFa = x.DateFa,
EmployeesList = x.EmployeesList
.Where(y => !lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId &&
z.CheckoutStart.Date <= x.Date.Date &&
z.CheckoutEnd.Date >= x.Date.Date) && activeEmployees.Any(z => y.EmployeeId == z.EmployeeId))
.Select(e => new WorkFlowEmployeeWithRollCallOnLeaveViewModel()
{
EmployeeId = e.EmployeeId,
EmployeeFullName = e.EmployeeFullName,
LeaveId = e.LeaveId,
EndOfOverlapTime = e.EndOfOverlapTime,
StartOfOverlapTime = e.StartOfOverlapTime,
RollCallId = e.RollCallId,
EndOfOverlapDateFa = e.EndOfOverlapDateFa,
EndOfOverlapDateTime = e.EndOfOverlapDateTime,
StartOfOverlapDateFa = e.StartOfOverlapDateFa,
StartOfOverlapDateTime = e.StartOfOverlapDateTime
}).ToList(),
DayOfWeek = x.DayOfWeek
})
.Where(y => y.EmployeesList != null && y.EmployeesList.Any())
.OrderBy(x => x.Date).ToList();
}
/// <summary>
/// لیست وضعیت تردد پرسنل
/// </summary>
public async Task<List<DailyRollCallWorkFlowViewModel>> GetUndefinedRollCalls(long workshopId)
{
var now = DateTime.Now;
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
List<DailyRollCallWorkFlowViewModel> rollCalls = _rollCallACL.GetUndefinedRollCalls(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
return rollCalls.Select(x => new DailyRollCallWorkFlowViewModel()
{
var now = DateTime.Now;
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
var rollCalls = _rollCallACL.GetRollCallsOverlappingLeaves(workshopId, twoMonthsAgo, now);
return rollCalls
.Select(x => new DailyWorkFlowEmployeesWithRollCallOnLeaveViewModel()
{
Date = x.Date,
DateFa = x.DateFa,
EmployeesList = x.EmployeesList
.Where(y => !lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId &&
z.CheckoutStart.Date <= x.Date.Date &&
z.CheckoutEnd.Date >= x.Date.Date) && activeEmployees.Any(z => y.EmployeeId == z.EmployeeId))
.Select(e => new WorkFlowEmployeeWithRollCallOnLeaveViewModel()
{
EmployeeId = e.EmployeeId,
EmployeeFullName = e.EmployeeFullName,
LeaveId = e.LeaveId,
EndOfOverlapTime = e.EndOfOverlapTime,
StartOfOverlapTime = e.StartOfOverlapTime,
RollCallId = e.RollCallId,
EndOfOverlapDateFa = e.EndOfOverlapDateFa,
EndOfOverlapDateTime = e.EndOfOverlapDateTime,
StartOfOverlapDateFa = e.StartOfOverlapDateFa,
StartOfOverlapDateTime = e.StartOfOverlapDateTime
}).ToList(),
DayOfWeek = x.DayOfWeek
})
.Where(y => y.EmployeesList != null && y.EmployeesList.Any())
.OrderBy(x => x.Date).ToList();
DateTime = x.DateTime,
DateTimeFa = x.DateTimeFa,
RollCallWorkFlowPerDayViewModels = x.RollCallWorkFlowPerDayViewModels
.Where(y =>
!lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId && z.CheckoutStart.Date <= x.DateTime.Date &&
z.CheckoutEnd.Date >= x.DateTime.Date) &&
activeEmployees.Any(z => z.EmployeeId == y.EmployeeId && x.DateTime.Date >= z.startActive &&
x.DateTime.Date <= z.endActive))
.ToList(),
DayOfWeekFa = x.DateTime.DayOfWeek.DayOfWeeKToPersian()
}).Where(y => y.RollCallWorkFlowPerDayViewModels != null && y.RollCallWorkFlowPerDayViewModels.Any()).OrderBy(x => x.DateTime).ToList();
}
/// <summary>
/// لیست قطع شده توسط سیستم
/// </summary>
public async Task<List<DailyRollCallWorkFlowViewModel>> GetRollCallWorkFlowsCutByBgService(long workshopId)
{
var now = DateTime.Now;
}
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
/// <summary>
/// لیست وضعیت تردد پرسنل
/// </summary>
public async Task<List<DailyRollCallWorkFlowViewModel>> GetUndefinedRollCalls(long workshopId)
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
var rollCalls = _rollCallACL.GetRollCallWorkFlowsCutByBgService(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
return rollCalls.Select(x => new DailyRollCallWorkFlowViewModel()
{
var now = DateTime.Now;
DateTime = x.DateTime,
DateTimeFa = x.DateTimeFa,
RollCallWorkFlowPerDayViewModels = x.RollCallWorkFlowPerDayViewModels
.Where(y => !lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId && z.CheckoutStart.Date <= x.DateTime.Date &&
z.CheckoutEnd.Date >= x.DateTime.Date) && activeEmployees.Any(z => z.EmployeeId == y.EmployeeId && x.DateTime.Date >= z.startActive &&
x.DateTime.Date <= z.endActive))
.ToList(),
DayOfWeekFa = x.DateTime.DayOfWeek.DayOfWeeKToPersian()
}).Where(y => y.RollCallWorkFlowPerDayViewModels != null && y.RollCallWorkFlowPerDayViewModels.Any())
.OrderBy(x => x.DateTime).ToList();
}
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
#region CountForCreateCheckout
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
List<DailyRollCallWorkFlowViewModel> rollCalls = _rollCallACL.GetUndefinedRollCalls(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
return rollCalls.Select(x => new DailyRollCallWorkFlowViewModel()
public async Task<int> CountCutByBgServiceLastMonth(long workshopId)
{
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
var now = lastMonthEnd;
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
var rollCalls = _rollCallACL.GetRollCallWorkFlowsCutByBgService(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
return rollCalls.Select(x => new DailyRollCallWorkFlowViewModel()
{
DateTime = x.DateTime,
DateTimeFa = x.DateTimeFa,
RollCallWorkFlowPerDayViewModels = x.RollCallWorkFlowPerDayViewModels
.Where(y =>
!lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId && z.CheckoutStart.Date <= x.DateTime.Date &&
z.CheckoutEnd.Date >= x.DateTime.Date) &&
activeEmployees.Any(z => z.EmployeeId == y.EmployeeId && x.DateTime.Date >= z.startActive &&
x.DateTime.Date <= z.endActive))
.ToList(),
DayOfWeekFa = x.DateTime.DayOfWeek.DayOfWeeKToPersian()
}).Where(y => y.RollCallWorkFlowPerDayViewModels != null && y.RollCallWorkFlowPerDayViewModels.Any()).OrderBy(x => x.DateTime).ToList();
}
/// <summary>
/// لیست قطع شده توسط سیستم
/// </summary>
public async Task<List<DailyRollCallWorkFlowViewModel>> GetRollCallWorkFlowsCutByBgService(long workshopId)
{
var now = DateTime.Now;
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
var rollCalls = _rollCallACL.GetRollCallWorkFlowsCutByBgService(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
return rollCalls.Select(x => new DailyRollCallWorkFlowViewModel()
{
DateTime = x.DateTime,
DateTimeFa = x.DateTimeFa,
RollCallWorkFlowPerDayViewModels = x.RollCallWorkFlowPerDayViewModels
.Where(y => !lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId && z.CheckoutStart.Date <= x.DateTime.Date &&
z.CheckoutEnd.Date >= x.DateTime.Date) && activeEmployees.Any(z => z.EmployeeId == y.EmployeeId && x.DateTime.Date >= z.startActive &&
x.DateTime.Date <= z.endActive))
.ToList(),
.Where(y => !lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId && z.CheckoutStart.Date <= x.DateTime.Date &&
z.CheckoutEnd.Date >= x.DateTime.Date) && activeEmployees.Any(z => z.EmployeeId == y.EmployeeId && x.DateTime.Date >= z.startActive &&
x.DateTime.Date <= z.endActive))
.ToList(),
DayOfWeekFa = x.DateTime.DayOfWeek.DayOfWeeKToPersian()
}).Where(y => y.RollCallWorkFlowPerDayViewModels != null && y.RollCallWorkFlowPerDayViewModels.Any())
.OrderBy(x => x.DateTime).ToList();
}
.OrderBy(x => x.DateTime).Count();
}
/// <summary>
/// لیست غیبت ها
/// </summary>
public async Task<List<DailyRollCallWorkFlowViewModel>> GetAbsentRollCallWorkFlows(long workshopId)
/// <summary>
/// لیست غیبت ها
/// </summary>
public async Task<int> CountAbsentRollCallLastMonth(long workshopId)
{
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
var now = lastMonthEnd;
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
var absences = _rollCallACL.GetAbsentRollCallWorkFlows(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
var confirmedAbssences = await GetConfirmAbsencesBy(workshopId, twoMonthsAgo,
now);
var groupedConfirmedAbssencesByDate = confirmedAbssences.GroupBy(x => x.AbsenceDate.Date).ToList();
List<DailyRollCallWorkFlowViewModel> result = new();
//iterating day by day in absences
foreach (var item in absences)
{
var now = DateTime.Now;
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
var absences = _rollCallACL.GetAbsentRollCallWorkFlows(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
var confirmedAbssences = await GetConfirmAbsencesBy(workshopId, twoMonthsAgo,
now);
var groupedConfirmedAbssencesByDate = confirmedAbssences.GroupBy(x => x.AbsenceDate.Date).ToList();
List<DailyRollCallWorkFlowViewModel> result = new();
//iterating day by day in absences
foreach (var item in absences)
var allAbsencesInDate = item.RollCallWorkFlowPerDayViewModels;
var confirmedAbssencesInDate = groupedConfirmedAbssencesByDate.FirstOrDefault(x => x.Key == item.DateTime.Date);
//set the date of new item
var newItem = new DailyRollCallWorkFlowViewModel()
{
DateTime = item.DateTime,
DateTimeFa = item.DateTime.ToFarsi()
};
var allAbsencesInDate = item.RollCallWorkFlowPerDayViewModels;
var confirmedAbssencesInDate = groupedConfirmedAbssencesByDate.FirstOrDefault(x => x.Key == item.DateTime.Date);
//set the date of new item
var newItem = new DailyRollCallWorkFlowViewModel()
{
DateTime = item.DateTime,
DateTimeFa = item.DateTime.ToFarsi()
};
//dont count absences before the last checkout
allAbsencesInDate = allAbsencesInDate.Where(x => !lastCheckouts.Any(y =>
x.EmployeeId == y.EmployeeId && y.CheckoutStart <= item.DateTime.Date && y.CheckoutEnd >= item.DateTime.Date) && activeEmployees.Any(y =>
item.DateTime.Date >= y.startActive && item.DateTime.Date <= y.endActive)).ToList();
//dont count absences before the last checkout
allAbsencesInDate = allAbsencesInDate.Where(x => !lastCheckouts.Any(y =>
x.EmployeeId == y.EmployeeId && y.CheckoutStart <= item.DateTime.Date && y.CheckoutEnd >= item.DateTime.Date) && activeEmployees.Any(y =>
item.DateTime.Date >= y.startActive && item.DateTime.Date <= y.endActive)).ToList();
if (confirmedAbssencesInDate != null)
{
newItem.RollCallWorkFlowPerDayViewModels = allAbsencesInDate
.Where(x => confirmedAbssencesInDate.All(y => x.EmployeeId != y.EmployeeId))
.ToList();
}
else
{
newItem.RollCallWorkFlowPerDayViewModels = allAbsencesInDate.ToList();
}
newItem.DayOfWeekFa = newItem.DateTime.DayOfWeek.DayOfWeeKToPersian();
FilterWithOffset(workshopId,item.DateTime,ref newItem);
if (newItem.RollCallWorkFlowPerDayViewModels.Count > 0)
result.Add(newItem);
if (confirmedAbssencesInDate != null)
{
newItem.RollCallWorkFlowPerDayViewModels = allAbsencesInDate
.Where(x => confirmedAbssencesInDate.All(y => x.EmployeeId != y.EmployeeId))
.ToList();
}
else
{
newItem.RollCallWorkFlowPerDayViewModels = allAbsencesInDate.ToList();
}
return result.OrderByDescending(x => x.DateTime).ToList();
newItem.DayOfWeekFa = newItem.DateTime.DayOfWeek.DayOfWeeKToPersian();
FilterWithOffset(workshopId, item.DateTime, ref newItem);
if (newItem.RollCallWorkFlowPerDayViewModels.Count > 0)
result.Add(newItem);
}
/// <summary>
/// لیست بدون ثبت استرحت
/// </summary>
public async Task<List<DailyRollCallConfirmedWithoutLunchBreakViewModel>> GetEmployeesWithoutLunchBreak(long workshopId)
{
var now = DateTime.Now.Date;
now.AddMonthsFa(-2, out var twoMonthsAgo);
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
var notSlicedRollCalls = _rollCallACL.GetNotSlicedRollCallsByWorkshopId(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var employeesWithoutBreakTime = _customizedWorkshopSettingsACL.GetEmployeesWithoutBreakTime(workshopId);
notSlicedRollCalls = notSlicedRollCalls
.Where(x => !lastCheckouts.Any(y => y.EmployeeId == x.EmployeeId && y.CheckoutStart.Date <= x.RollCallDate.Date && y.CheckoutEnd.Date >= x.RollCallDate.Date)).ToList();
var employeeWithoutBreakTimeAndNotSliced = notSlicedRollCalls
.Join(employeesWithoutBreakTime, x => x.EmployeeId,
y => y.EmployeeId, (x, y) =>
new { y.EmployeeId, x.EmployeeName, x.RollCallId, x.RollCallDate }).ToList();
return result.OrderByDescending(x => x.DateTime).Count();
}
var entites = _rollCallConfirmedWithoutLunchBreakRepository.GetByWorkshopId(workshopId, twoMonthsAgo, now).ToList();
public async Task<int> CountEmployeesWithoutLunchBreakLastMonth(long workshopId)
{
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
var now = lastMonthEnd;
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
return employeeWithoutBreakTimeAndNotSliced.Where(x => !entites.Any(y => y.RollCallId == x.RollCallId))
.GroupBy(x => x.RollCallDate.Date).OrderBy(x => x.Key).Select(x => new DailyRollCallConfirmedWithoutLunchBreakViewModel
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
var notSlicedRollCalls = _rollCallACL.GetNotSlicedRollCallsByWorkshopId(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var employeesWithoutBreakTime = _customizedWorkshopSettingsACL.GetEmployeesWithoutBreakTime(workshopId);
notSlicedRollCalls = notSlicedRollCalls
.Where(x => !lastCheckouts.Any(y => y.EmployeeId == x.EmployeeId && y.CheckoutStart.Date <= x.RollCallDate.Date && y.CheckoutEnd.Date >= x.RollCallDate.Date)).ToList();
var employeeWithoutBreakTimeAndNotSliced = notSlicedRollCalls
.Join(employeesWithoutBreakTime, x => x.EmployeeId,
y => y.EmployeeId, (x, y) =>
new { y.EmployeeId, x.EmployeeName, x.RollCallId, x.RollCallDate }).ToList();
var entites = _rollCallConfirmedWithoutLunchBreakRepository.GetByWorkshopId(workshopId, twoMonthsAgo, now).ToList();
return employeeWithoutBreakTimeAndNotSliced.Where(x => !entites.Any(y => y.RollCallId == x.RollCallId))
.GroupBy(x => x.RollCallDate.Date).OrderBy(x => x.Key).Select(x => new DailyRollCallConfirmedWithoutLunchBreakViewModel
{
DateGr = x.Key.Date,
DateFa = x.Key.Date.ToFarsi(),
DayOfWeekFa = x.Key.DayOfWeek.DayOfWeeKToPersian(),
RollCallConfirmedWithoutLunchList = x.Select(y => new RollCallConfirmedWithoutLunchBreakViewModel
{
DateGr = x.Key.Date,
DateFa = x.Key.Date.ToFarsi(),
DayOfWeekFa = x.Key.DayOfWeek.DayOfWeeKToPersian(),
RollCallConfirmedWithoutLunchList = x.Select(y => new RollCallConfirmedWithoutLunchBreakViewModel
{
EmployeeId = y.EmployeeId,
EmployeeName = y.EmployeeName,
RollCallId = y.RollCallId,
}).ToList()
}).ToList();
EmployeeId = y.EmployeeId,
EmployeeName = y.EmployeeName,
RollCallId = y.RollCallId,
}).ToList()
}).Count();
}
public async Task<int> CountUndefinedLastMonth(long workshopId)
{
DateTime lastMonthEnd = ($"{DateTime.Now.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime().AddDays(-1);
var now = lastMonthEnd;
var twoMonthsAgo = ($"{lastMonthEnd.ToFarsi().Substring(0, 8)}01").ToGeorgianDateTime();
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
List<DailyRollCallWorkFlowViewModel> rollCalls = _rollCallACL.GetUndefinedRollCalls(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
return rollCalls.Select(x => new DailyRollCallWorkFlowViewModel()
{
DateTime = x.DateTime,
DateTimeFa = x.DateTimeFa,
RollCallWorkFlowPerDayViewModels = x.RollCallWorkFlowPerDayViewModels
.Where(y =>
!lastCheckouts.Any(z => z.EmployeeId == y.EmployeeId && z.CheckoutStart.Date <= x.DateTime.Date &&
z.CheckoutEnd.Date >= x.DateTime.Date) &&
activeEmployees.Any(z => z.EmployeeId == y.EmployeeId && x.DateTime.Date >= z.startActive &&
x.DateTime.Date <= z.endActive))
.ToList(),
DayOfWeekFa = x.DateTime.DayOfWeek.DayOfWeeKToPersian()
}).Where(y => y.RollCallWorkFlowPerDayViewModels != null && y.RollCallWorkFlowPerDayViewModels.Any()).OrderBy(x => x.DateTime).Count();
}
#endregion
/// <summary>
/// لیست غیبت ها
/// </summary>
public async Task<List<DailyRollCallWorkFlowViewModel>> GetAbsentRollCallWorkFlows(long workshopId)
{
var now = DateTime.Now;
DateTime.Now.Date.AddMonthsFa(-2, out var twoMonthsAgo);
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
var absences = _rollCallACL.GetAbsentRollCallWorkFlows(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var activeEmployees = _rollCallACL.GetActiveWorkshopRollCallEmployees(workshopId, twoMonthsAgo, now);
var confirmedAbssences = await GetConfirmAbsencesBy(workshopId, twoMonthsAgo,
now);
var groupedConfirmedAbssencesByDate = confirmedAbssences.GroupBy(x => x.AbsenceDate.Date).ToList();
List<DailyRollCallWorkFlowViewModel> result = new();
//iterating day by day in absences
foreach (var item in absences)
{
var allAbsencesInDate = item.RollCallWorkFlowPerDayViewModels;
var confirmedAbssencesInDate = groupedConfirmedAbssencesByDate.FirstOrDefault(x => x.Key == item.DateTime.Date);
//set the date of new item
var newItem = new DailyRollCallWorkFlowViewModel()
{
DateTime = item.DateTime,
DateTimeFa = item.DateTime.ToFarsi()
};
//dont count absences before the last checkout
allAbsencesInDate = allAbsencesInDate.Where(x => !lastCheckouts.Any(y =>
x.EmployeeId == y.EmployeeId && y.CheckoutStart <= item.DateTime.Date && y.CheckoutEnd >= item.DateTime.Date) && activeEmployees.Any(y =>
item.DateTime.Date >= y.startActive && item.DateTime.Date <= y.endActive)).ToList();
if (confirmedAbssencesInDate != null)
{
newItem.RollCallWorkFlowPerDayViewModels = allAbsencesInDate
.Where(x => confirmedAbssencesInDate.All(y => x.EmployeeId != y.EmployeeId))
.ToList();
}
else
{
newItem.RollCallWorkFlowPerDayViewModels = allAbsencesInDate.ToList();
}
newItem.DayOfWeekFa = newItem.DateTime.DayOfWeek.DayOfWeeKToPersian();
FilterWithOffset(workshopId, item.DateTime, ref newItem);
if (newItem.RollCallWorkFlowPerDayViewModels.Count > 0)
result.Add(newItem);
}
return result.OrderByDescending(x => x.DateTime).ToList();
}
/// <summary>
/// لیست بدون ثبت استرحت
/// </summary>
public async Task<List<DailyRollCallConfirmedWithoutLunchBreakViewModel>> GetEmployeesWithoutLunchBreak(long workshopId)
{
var now = DateTime.Now.Date;
now.AddMonthsFa(-2, out var twoMonthsAgo);
var lastCheckouts = _checkoutACL.GetLastCheckoutsByWorkshopIdForWorkFlow(workshopId, twoMonthsAgo, now);
var notSlicedRollCalls = _rollCallACL.GetNotSlicedRollCallsByWorkshopId(workshopId, twoMonthsAgo, now.AddDays(-1).Date);
var employeesWithoutBreakTime = _customizedWorkshopSettingsACL.GetEmployeesWithoutBreakTime(workshopId);
notSlicedRollCalls = notSlicedRollCalls
.Where(x => !lastCheckouts.Any(y => y.EmployeeId == x.EmployeeId && y.CheckoutStart.Date <= x.RollCallDate.Date && y.CheckoutEnd.Date >= x.RollCallDate.Date)).ToList();
var employeeWithoutBreakTimeAndNotSliced = notSlicedRollCalls
.Join(employeesWithoutBreakTime, x => x.EmployeeId,
y => y.EmployeeId, (x, y) =>
new { y.EmployeeId, x.EmployeeName, x.RollCallId, x.RollCallDate }).ToList();
var entites = _rollCallConfirmedWithoutLunchBreakRepository.GetByWorkshopId(workshopId, twoMonthsAgo, now).ToList();
return employeeWithoutBreakTimeAndNotSliced.Where(x => !entites.Any(y => y.RollCallId == x.RollCallId))
.GroupBy(x => x.RollCallDate.Date).OrderBy(x => x.Key).Select(x => new DailyRollCallConfirmedWithoutLunchBreakViewModel
{
DateGr = x.Key.Date,
DateFa = x.Key.Date.ToFarsi(),
DayOfWeekFa = x.Key.DayOfWeek.DayOfWeeKToPersian(),
RollCallConfirmedWithoutLunchList = x.Select(y => new RollCallConfirmedWithoutLunchBreakViewModel
{
EmployeeId = y.EmployeeId,
EmployeeName = y.EmployeeName,
RollCallId = y.RollCallId,
}).ToList()
}).ToList();
}
#endregion