feat(sms): send class start date, days, and course time

Expose schedule fields on class and invoice templates so SMS can include Jalali start date, weekdays, and hour range.
This commit is contained in:
2026-08-15 23:09:04 +03:30
parent 366cd41bb7
commit 0cdb9cec20
9 changed files with 226 additions and 14 deletions
+20 -6
View File
@@ -9,7 +9,9 @@ const { calculateMeta, escapeRegex, getSearchTerm } = require('../../utils/pagin
const User = require('../users/userModel');
const Course = require('../courses/courseModel');
const Class = require('../classes/classModel');
const Session = require('../sessions/sessionModel');
const { sendInvoiceCreatedSms } = require('../../utils/senders/smsMessages');
const { buildClassScheduleContext } = require('../../utils/classSchedule');
const logger = require('../../utils/logger');
const getAllPayments = async (query) => {
@@ -79,22 +81,34 @@ const createPayment = async (body, actorId = null) => {
const user = await User.findById(payment.user).select('name phoneNumber').lean();
if (user?.phoneNumber) {
let courseName = '';
let schedule = { classStartDate: '', classDays: '', courseTime: '' };
if (payment.course) {
const course = await Course.findById(payment.course).select('title').lean();
if (course?.title) courseName = course.title;
} else if (payment.classes && payment.classes.length > 0) {
}
if (payment.classes && payment.classes.length > 0) {
const cls = await Class.findById(payment.classes[0]).populate('course', 'title').lean();
if (cls?.course?.title) {
courseName = cls.course.title;
} else if (cls?.name) {
courseName = cls.name;
if (!courseName) {
if (cls?.course?.title) {
courseName = cls.course.title;
} else if (cls?.name) {
courseName = cls.name;
}
}
if (cls) {
const sessions = await Session.find({ class: cls._id })
.select('day startTime endTime')
.sort({ day: 1 })
.lean();
schedule = buildClassScheduleContext(cls, sessions);
}
}
await sendInvoiceCreatedSms(user.phoneNumber, {
fullName: user.name || '',
amount: payment.amount,
course: courseName || '-'
course: courseName || '-',
...schedule
}, user._id);
}
} catch (err) {