fix(ui): payment due date calculation, datepicker colors, scrollable tabs, optional receipt, default today date

This commit is contained in:
2026-08-21 15:17:48 +03:30
parent 86f1f9bab0
commit ee9750e6f2
12 changed files with 192 additions and 42 deletions
+35
View File
@@ -82,3 +82,38 @@ export function calculateClassEndDate(startDate, days = [], numberOfSessions = 0
return lastMatchingDate ? lastMatchingDate.locale('fa').format('jYYYY/jMM/jDD') : '';
}
/**
* Calculates the halfway due date for a class in Jalali (jYYYY/jMM/jDD).
* If class has 10 sessions, due date is calculated until the 5th session.
* @param {Object} cls - Class object
* @returns {string} Jalali formatted date string, or today's date if not calculable
*/
export function calculateClassMidDate(cls) {
if (!cls) return moment().locale('fa').format('jYYYY/jMM/jDD');
const totalSessions = parseInt(cls.numberOfSessions || cls.course?.sectionCount || 0, 10);
const midSessions = totalSessions > 0 ? Math.ceil(totalSessions / 2) : 0;
if (cls.startDate && Array.isArray(cls.days) && cls.days.length > 0 && midSessions >= 1) {
const computed = calculateClassEndDate(cls.startDate, cls.days, midSessions);
if (computed) return computed;
}
if (cls.startDate && cls.endDate) {
const startM = moment(cls.startDate);
const endM = moment(cls.endDate);
if (startM.isValid() && endM.isValid()) {
const midTime = startM.valueOf() + (endM.valueOf() - startM.valueOf()) / 2;
return moment(midTime).locale('fa').format('jYYYY/jMM/jDD');
}
}
if (cls.startDate) {
const startM = moment(cls.startDate);
if (startM.isValid()) return startM.locale('fa').format('jYYYY/jMM/jDD');
}
return moment().locale('fa').format('jYYYY/jMM/jDD');
}