feat(payments): auto-populate payment due date with middle session date upon class selection

This commit is contained in:
2026-08-22 00:15:03 +03:30
parent 2d124eb0eb
commit 60b21fd94a
3 changed files with 105 additions and 17 deletions
+20 -3
View File
@@ -180,6 +180,7 @@ import { useToast } from '@/composables/useToast';
import { paymentApi } from '@/api/paymentApi';
import { userApi } from '@/api/userApi';
import { classApi } from '@/api/classApi';
import { sessionApi } from '@/api/sessionApi';
import PageHeader from '@/components/common/PageHeader.vue';
import DataTableWrapper from '@/components/common/DataTableWrapper.vue';
import ConfirmDeleteDialog from '@/components/common/ConfirmDeleteDialog.vue';
@@ -263,7 +264,7 @@ const eligibleUsers = computed(() => {
return usersList.value.filter((u) => eligibleIds?.has(String(u._id || u.id)));
});
const onClassesSelected = () => {
const onClassesSelected = async () => {
if (createForm.user && !eligibleUsers.value.some((u) => (u._id || u.id) === createForm.user)) {
createForm.user = null;
}
@@ -287,8 +288,24 @@ const onClassesSelected = () => {
if ((createForm.discount || 0) > (createForm.amount || 0)) {
createForm.discount = createForm.amount || 0;
}
if (!createForm.dueDate) {
createForm.dueDate = getTodayJalali();
const selectedClassId = createForm.classes[createForm.classes.length - 1];
const selectedClass = classesList.value.find((item) => String(item._id || item.id) === String(selectedClassId));
if (selectedClass) {
try {
const res = await sessionApi.getAll({
class: selectedClassId,
sortBy: 'day',
sortOrder: 'asc',
limit: 100
});
const data = res.data || res;
const rawSessions = data.items || data.sessions || data.data || data || [];
const sessionList = Array.isArray(rawSessions) ? rawSessions : [];
createForm.dueDate = calculateClassMidDate(selectedClass, sessionList);
} catch (e) {
createForm.dueDate = calculateClassMidDate(selectedClass);
}
}
};