rollCall shiftDate Change

This commit is contained in:
SamSys
2025-01-21 02:41:44 +03:30
parent 0412ec66ab
commit a50190fc1f
4 changed files with 82 additions and 8 deletions

View File

@@ -81,7 +81,8 @@ public class CustomizeCheckoutExcelGenerator
}
var dataRow = 2;
foreach (var item in data)
int totalPaymentColumnIndex = -1;
foreach (var item in data)
{
var column = 2;
foreach (var header in filteredHeaders)
@@ -101,7 +102,11 @@ public class CustomizeCheckoutExcelGenerator
ApplyGeneralDataStyle(worksheet.Cells[dataRow, column]);
ApplySpecificStyle(worksheet.Cells[dataRow, column], column); // Apply specific styles
column++;
if (header.Key == "TotalPayment")
{
totalPaymentColumnIndex = column;
}
column++;
}
var rowCounter = worksheet.Cells[dataRow, 1];
rowCounter.Value = dataRow - 1;
@@ -120,7 +125,12 @@ public class CustomizeCheckoutExcelGenerator
worksheet.PrinterSettings.Scale = 85;
worksheet.View.RightToLeft = true;
return package.GetAsByteArray();
if (totalPaymentColumnIndex != -1)
{
ApplyConditionalFormatting(worksheet, dataRow, totalPaymentColumnIndex);
}
return package.GetAsByteArray();
}
// Method to check if a property requires MoneyToDouble()
@@ -197,5 +207,25 @@ public class CustomizeCheckoutExcelGenerator
break;
}
}
private static void ApplyConditionalFormatting(ExcelWorksheet worksheet, int dataRow, int totalPaymentColumnIndex)
{
for (int rowIndex = 2; rowIndex < dataRow; rowIndex++)
{
var totalPaymentValue = worksheet.Cells[rowIndex, totalPaymentColumnIndex].Value;
if (totalPaymentValue != null && double.TryParse(totalPaymentValue.ToString(), out double payment))
{
if (payment < 0)
{
var rowRange = worksheet.Cells[rowIndex, 1, rowIndex, worksheet.Dimension.End.Column];
rowRange.Style.Fill.PatternType = ExcelFillStyle.Solid; rowRange.Style.Fill.BackgroundColor.SetColor(Color.Red);
foreach (var cell in rowRange)
{
cell.Style.Font.Color.SetColor(Color.White);
}
}
}
}
}
}

View File

@@ -78,13 +78,56 @@ public class RollCallDomainService : IRollCallDomainService
return Tools.CalculateOffset(workshopSettings.CustomizeWorkshopSettingsShifts
.Select(x => (CustomizeSifts)x).ToList());
if (employeeSettings == null )
if (employeeSettings == null)
return Tools.CalculateOffset(workshopSettings.CustomizeWorkshopSettingsShifts.Select(x => (CustomizeSifts)x).ToList());
if (workshopSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular && employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular)
{
return Tools.CalculateOffset(workshopSettings.CustomizeWorkshopSettingsShifts.Select(x => (CustomizeSifts)x).ToList());
// تعریف بازه‌های زمانی
var workshopStartTime = workshopSettings.CustomizeWorkshopSettingsShifts.MinBy(x => x.Placement).StartTime; // شروع کارگاه
var workshopEndTime = workshopSettings.CustomizeWorkshopSettingsShifts.MaxBy(x => x.Placement).EndTime; // پایان کارگاه
var employeeStartTime = employeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MinBy(x => x.Placement).StartTime; // شروع بازه پرسنل
var employeeEndTime = employeeSettings.CustomizeWorkshopEmployeeSettingsShifts.MaxBy(x => x.Placement).EndTime; // پایان پرسنل
// تبدیل زمان‌ها به TimeSpan برای مقایسه
var workshopStartTimeSpan = workshopStartTime.ToTimeSpan();
var workshopEndTimeSpan = workshopEndTime.ToTimeSpan();
var employeeStartTimeSpan = employeeStartTime.ToTimeSpan();
var employeeEndTimeSpan = employeeEndTime.ToTimeSpan();
// مدیریت زمان‌های بعد از نیمه شب
if (workshopEndTimeSpan < workshopStartTimeSpan)
workshopEndTimeSpan = workshopEndTimeSpan.Add(TimeSpan.FromDays(1)); // افزودن یک روز به پایان بازه اول
if (employeeEndTimeSpan < employeeStartTimeSpan)
employeeEndTimeSpan = employeeEndTimeSpan.Add(TimeSpan.FromDays(1)); // افزودن یک روز به پایان بازه دوم
// محاسبه بزرگ‌ترین زمان شروع و کوچک‌ترین زمان پایان
var overlapStart = workshopStartTimeSpan > employeeStartTimeSpan ? workshopStartTimeSpan : employeeStartTimeSpan;
var overlapEnd = workshopEndTimeSpan < employeeEndTimeSpan ? workshopEndTimeSpan : employeeEndTimeSpan;
if (overlapStart >= overlapEnd) // اگر بازه هم‌پوشانی وجود ندارد
return Tools.CalculateOffset(workshopSettings.CustomizeWorkshopSettingsShifts
.Select(x => (CustomizeSifts)x).ToList());
var overlapDuration = (overlapEnd - overlapStart).TotalMinutes; // مدت زمان هم‌پوشانی بر حسب دقیقه
var duration2 = (employeeEndTime - employeeStartTime).TotalMinutes; // مدت زمان بازه دوم
var overlapPercentage = (overlapDuration / duration2) * 100; // درصد هم‌پوشانی
if (overlapPercentage < 40)
{
return Tools.CalculateOffset(employeeSettings.CustomizeWorkshopEmployeeSettingsShifts
.Select(x => (CustomizeSifts)x).ToList());
}
return Tools.CalculateOffset(workshopSettings.CustomizeWorkshopSettingsShifts
.Select(x => (CustomizeSifts)x).ToList());
}
else if (employeeSettings.WorkshopShiftStatus == WorkshopShiftStatus.Regular)

View File

@@ -62,8 +62,9 @@ namespace CompanyManagment.Application
public bool HasRollCallRecord(long employeeId, long workshopId, DateTime contractStart, DateTime contractEnd)
{
//موقت
//یکتا تجارت گیل 108 - کهن سرویس وارنا 215 - دادمهرگستر 11
if(workshopId == 108 || workshopId == 215 || workshopId == 11)
// دادمهرگستر 11
//585 کاشی گالری سرامیس (بابک ابراهیمی )
if(workshopId == 11 || workshopId == 585)
return false;
var service = _rollCallServiceRepository.GetAllServiceByWorkshopId(workshopId);

View File

@@ -581,7 +581,7 @@ public class RollCallRepository : RepositoryBase<long, RollCall>, IRollCallRepos
//initialize
DateTime searchDurationEnd = DateTime.Now.AddDays(-1).Date;
DateTime searchDurationStart = searchDurationEnd.AddDays(-16);
DateTime searchDurationStart = DateTime.MinValue;