feat: add Persian calendar support for week numbers and dates
All checks were successful
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 6m35s
All checks were successful
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 6m35s
This commit is contained in:
@@ -87,7 +87,16 @@ public class GetAvailableWeeksQueryHandler : IRequestHandler<GetAvailableWeeksQu
|
|||||||
var log = executionLogs.GetValueOrDefault(weekNumber);
|
var log = executionLogs.GetValueOrDefault(weekNumber);
|
||||||
|
|
||||||
var isCalculated = pool != null && pool.IsCalculated;
|
var isCalculated = pool != null && pool.IsCalculated;
|
||||||
var displayText = $"{weekNumber} ({startDate:yyyy/MM/dd} - {endDate:yyyy/MM/dd})";
|
|
||||||
|
// تبدیل weekNumber به شمسی
|
||||||
|
var persianWeekNumber = ConvertWeekNumberToPersian(weekNumber, startDate);
|
||||||
|
|
||||||
|
// تبدیل تاریخ به شمسی برای نمایش
|
||||||
|
var persianCalendar = new PersianCalendar();
|
||||||
|
var startDatePersian = $"{persianCalendar.GetYear(startDate):D4}/{persianCalendar.GetMonth(startDate):D2}/{persianCalendar.GetDayOfMonth(startDate):D2}";
|
||||||
|
var endDatePersian = $"{persianCalendar.GetYear(endDate):D4}/{persianCalendar.GetMonth(endDate):D2}/{persianCalendar.GetDayOfMonth(endDate):D2}";
|
||||||
|
|
||||||
|
var displayText = $"{persianWeekNumber} ({startDatePersian} - {endDatePersian})";
|
||||||
|
|
||||||
if (isCalculated)
|
if (isCalculated)
|
||||||
{
|
{
|
||||||
@@ -96,7 +105,7 @@ public class GetAvailableWeeksQueryHandler : IRequestHandler<GetAvailableWeeksQu
|
|||||||
|
|
||||||
return new WeekInfoDto
|
return new WeekInfoDto
|
||||||
{
|
{
|
||||||
WeekNumber = weekNumber,
|
WeekNumber = persianWeekNumber, // شمسی
|
||||||
StartDate = startDate,
|
StartDate = startDate,
|
||||||
EndDate = endDate,
|
EndDate = endDate,
|
||||||
IsCalculated = isCalculated,
|
IsCalculated = isCalculated,
|
||||||
@@ -152,4 +161,33 @@ public class GetAvailableWeeksQueryHandler : IRequestHandler<GetAvailableWeeksQu
|
|||||||
|
|
||||||
return (startDate, endDate);
|
return (startDate, endDate);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static string ConvertWeekNumberToPersian(string gregorianWeekNumber, DateTime weekStartDate)
|
||||||
|
{
|
||||||
|
// ورودی: "2025-W48"
|
||||||
|
var persianCalendar = new PersianCalendar();
|
||||||
|
var persianYear = persianCalendar.GetYear(weekStartDate);
|
||||||
|
|
||||||
|
// محاسبه شماره هفته شمسی
|
||||||
|
var jan1Persian = persianCalendar.ToDateTime(persianYear, 1, 1, 0, 0, 0, 0);
|
||||||
|
|
||||||
|
// پیدا کردن اولین شنبه سال شمسی
|
||||||
|
var jan1DayOfWeek = (int)jan1Persian.DayOfWeek;
|
||||||
|
var daysToFirstSaturday = jan1DayOfWeek == 6 ? 0 : (6 - jan1DayOfWeek + 7) % 7;
|
||||||
|
var firstSaturday = jan1Persian.AddDays(daysToFirstSaturday);
|
||||||
|
|
||||||
|
// محاسبه شماره هفته
|
||||||
|
int weekNum;
|
||||||
|
if (weekStartDate < firstSaturday)
|
||||||
|
{
|
||||||
|
weekNum = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var daysSinceFirstSaturday = (weekStartDate - firstSaturday).Days;
|
||||||
|
weekNum = (daysSinceFirstSaturday / 7) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $"{persianYear}-W{weekNum:D2}";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user