Fix payment transaction edit save and Jalali due date display.

Convert dates between Jalali picker values and ISO before API calls, and
format due dates with proper Persian calendar tokens and digits.
This commit is contained in:
2026-08-16 14:53:46 +03:30
parent 26c53d57e4
commit 133fb124b7
3 changed files with 42 additions and 16 deletions
+15 -7
View File
@@ -235,7 +235,7 @@ import DatePicker from 'vue3-persian-datetime-picker';
const route = useRoute();
const paymentId = route.params.id;
const { toPersianDigits, formatJalali } = usePersianDate();
const { toPersianDigits, formatJalali, toJalaliPickerValue, toGregorianIso } = usePersianDate();
const { showSuccess, showError } = useToast();
const payment = ref(null);
@@ -293,6 +293,8 @@ const fetchPayment = async () => {
const handleRecordTransaction = async () => {
if (!trxForm.amount) { showError('لطفا مبلغ را وارد کنید'); return; }
if (!trxForm.dueDate) { showError('لطفا تاریخ سررسید را وارد کنید'); return; }
const dueDate = toGregorianIso(trxForm.dueDate);
if (!dueDate) { showError('تاریخ سررسید نامعتبر است'); return; }
if (trxForm.status === 'paid' && !trxForm.receiptNumber) {
showError('لطفا شماره فیش یا پیگیری را وارد کنید');
return;
@@ -303,13 +305,14 @@ const handleRecordTransaction = async () => {
const payload = {
amount: trxForm.amount,
status: trxForm.status,
dueDate: trxForm.dueDate,
dueDate,
notes: trxForm.notes || undefined
};
if (trxForm.status === 'paid') {
payload.method = trxForm.method;
payload.receiptNumber = trxForm.receiptNumber;
if (trxForm.date) payload.date = trxForm.date;
const paymentDate = toGregorianIso(trxForm.date);
if (paymentDate) payload.date = paymentDate;
}
const res = await paymentApi.recordTransaction(paymentId, payload);
@@ -330,8 +333,8 @@ const openEditTransaction = (trx) => {
editForm.status = trx.status || (trx.date ? 'paid' : 'pending');
editForm.method = trx.method || 'card';
editForm.receiptNumber = trx.receiptNumber || '';
editForm.dueDate = trx.dueDate || '';
editForm.date = trx.date || '';
editForm.dueDate = toJalaliPickerValue(trx.dueDate);
editForm.date = toJalaliPickerValue(trx.date);
editForm.notes = trx.notes || '';
showEditModal.value = true;
};
@@ -345,19 +348,24 @@ const handleUpdateTransaction = async () => {
showError('لطفا تاریخ سررسید را وارد کنید');
return;
}
const dueDate = toGregorianIso(editForm.dueDate);
if (!dueDate) {
showError('تاریخ سررسید نامعتبر است');
return;
}
isSubmittingEdit.value = true;
try {
const payload = {
amount: editForm.amount,
status: editForm.status,
dueDate: editForm.dueDate,
dueDate,
notes: editForm.notes
};
if (editForm.status === 'paid') {
payload.method = editForm.method;
payload.receiptNumber = editForm.receiptNumber;
payload.date = editForm.date || undefined;
payload.date = toGregorianIso(editForm.date);
}
const res = await paymentApi.updateTransaction(editingTransactionId.value, payload);
+4 -1
View File
@@ -198,7 +198,7 @@ import Checkbox from 'primevue/checkbox';
import Textarea from 'primevue/textarea';
import DatePicker from 'vue3-persian-datetime-picker';
const { toPersianDigits, formatJalali } = usePersianDate();
const { toPersianDigits, formatJalali, toGregorianIso } = usePersianDate();
const { showSuccess, showError } = useToast();
const {
@@ -326,6 +326,8 @@ const handleCreatePayment = async () => {
if (!createForm.user) { showError('لطفا کاربر را انتخاب کنید'); return; }
if (!createForm.amount) { showError('لطفا مبلغ را وارد کنید'); return; }
if (!createForm.dueDate) { showError('لطفا تاریخ سررسید را وارد کنید'); return; }
const dueDate = toGregorianIso(createForm.dueDate);
if (!dueDate) { showError('تاریخ سررسید نامعتبر است'); return; }
if (hasDiscount.value && (createForm.discount || 0) > createForm.amount) {
showError('مبلغ تخفیف نمی‌تواند بیشتر از مبلغ کل باشد');
@@ -336,6 +338,7 @@ const handleCreatePayment = async () => {
try {
await paymentApi.create({
...createForm,
dueDate,
discount: hasDiscount.value ? (createForm.discount || 0) : 0,
notify: { ...createNotify }
});