fix: scope page insights to reporting periods
This commit is contained in:
@@ -244,6 +244,38 @@ func previousPersianSeason(year, startMonth int) (int, int) {
|
||||
return year, startMonth
|
||||
}
|
||||
|
||||
// PrecedingPeriodLabel returns the exact Persian label for the complete period
|
||||
// immediately before start. The label follows the same vocabulary as Periods.
|
||||
func PrecedingPeriodLabel(periodType string, start time.Time) (string, bool) {
|
||||
location, err := time.LoadLocation("Asia/Tehran")
|
||||
if err != nil {
|
||||
return "", false
|
||||
}
|
||||
localStart := start.In(location)
|
||||
switch periodType {
|
||||
case "DAY":
|
||||
day := localStart.AddDate(0, 0, -1)
|
||||
year, month, dayOfMonth := gregorianToJalali(day.Year(), int(day.Month()), day.Day())
|
||||
return fmt.Sprintf("روز %s %s %s", persianNumber(dayOfMonth), jalaliMonthNames[month-1], persianNumber(year)), true
|
||||
case "WEEK":
|
||||
weekStart := localStart.AddDate(0, 0, -7)
|
||||
weekLastDay := localStart.AddDate(0, 0, -1)
|
||||
_, startMonth, startDay := gregorianToJalali(weekStart.Year(), int(weekStart.Month()), weekStart.Day())
|
||||
endYear, endMonth, endDay := gregorianToJalali(weekLastDay.Year(), int(weekLastDay.Month()), weekLastDay.Day())
|
||||
return fmt.Sprintf("هفته %s %s تا %s %s %s", persianNumber(startDay), jalaliMonthNames[startMonth-1], persianNumber(endDay), jalaliMonthNames[endMonth-1], persianNumber(endYear)), true
|
||||
case "JALALI_MONTH":
|
||||
year, month, _ := gregorianToJalali(localStart.Year(), int(localStart.Month()), localStart.Day())
|
||||
year, month = previousJalaliMonth(year, month)
|
||||
return fmt.Sprintf("%s %s", jalaliMonthNames[month-1], persianNumber(year)), true
|
||||
case "PERSIAN_SEASON":
|
||||
year, month, _ := gregorianToJalali(localStart.Year(), int(localStart.Month()), localStart.Day())
|
||||
year, month = previousPersianSeason(year, ((month-1)/3*3)+1)
|
||||
return fmt.Sprintf("%s %s", persianSeasonNames[(month-1)/3], persianNumber(year)), true
|
||||
default:
|
||||
return "", false
|
||||
}
|
||||
}
|
||||
|
||||
func newPeriod(id, kind string, localStart, localEnd time.Time, label string, isDefault bool) Period {
|
||||
return Period{
|
||||
PeriodID: id, PeriodType: kind, StartAt: localStart.UTC(), EndAt: localEnd.UTC(),
|
||||
|
||||
Reference in New Issue
Block a user