add payment_link and banks
This commit is contained in:
1 parent
2ae79b1ca4
commit
de3135b588
100 files changed
+6167
-47
No files matched your search
@@ -0,0 +1,65 @@
|
||||
/* Server calculates the identifier from the selected customer's stored mobile.
|
||||
Manual values remain editable. Changing customer clears an unchanged auto value. */
|
||||
(() => {
|
||||
const button = document.querySelector('#generate-deposit-identifier');
|
||||
if (!button) return;
|
||||
const form = button.closest('form');
|
||||
const customer = form.elements.namedItem('customer');
|
||||
const input = form.elements.namedItem('deposit_id');
|
||||
const status = document.querySelector('#identifier-generation-status');
|
||||
const replacement = document.querySelector('#identifier-replacement');
|
||||
const candidate = document.querySelector('#identifier-candidate');
|
||||
const originalLabel = button.innerHTML;
|
||||
let activeCustomer = customer.value, generated = '', pending = '', controller = null;
|
||||
function customerChanged() {
|
||||
if (activeCustomer !== customer.value) {
|
||||
controller?.abort(); controller = null;
|
||||
if (generated && input.value === generated) input.value = '';
|
||||
generated = ''; pending = ''; replacement.hidden = true;
|
||||
activeCustomer = customer.value;
|
||||
}
|
||||
button.disabled = !customer.value;
|
||||
button.innerHTML = originalLabel;
|
||||
status.textContent = customer.value ? 'شناسه بر اساس شماره موبایل مشتری انتخابشده تولید میشود.' : 'ابتدا مشتری را انتخاب کنید؛ شناسه بر اساس شماره موبایل او تولید میشود.';
|
||||
}
|
||||
function applyIdentifier(value) {
|
||||
input.value = value; generated = value; pending = '';
|
||||
replacement.hidden = true;
|
||||
input.dispatchEvent(new Event('input', {bubbles:true}));
|
||||
input.dispatchEvent(new Event('change', {bubbles:true}));
|
||||
input.focus();
|
||||
status.textContent = 'شناسه تولید و در فیلد وارد شد؛ قبل از صدور اعلامیه آن را بررسی کنید.';
|
||||
}
|
||||
customer.addEventListener('change', customerChanged);
|
||||
button.addEventListener('click', async () => {
|
||||
if (!customer.value) return;
|
||||
const selectedCustomer = customer.value;
|
||||
const request = new AbortController(); controller = request;
|
||||
button.disabled = true; button.textContent = 'در حال تولید…';
|
||||
replacement.hidden = true;
|
||||
status.textContent = 'در حال دریافت شناسه از سیستم…';
|
||||
let failureMessage = 'شناسه دریافت نشد؛ اتصال را بررسی کنید و دوباره تلاش کنید.';
|
||||
try {
|
||||
const response = await fetch(button.dataset.url, {
|
||||
method: 'POST', credentials: 'same-origin', cache: 'no-store', signal: request.signal,
|
||||
headers: {'X-CSRFToken': form.elements.namedItem('csrfmiddlewaretoken').value},
|
||||
body: new URLSearchParams({customer: selectedCustomer})
|
||||
});
|
||||
const data = await response.json();
|
||||
if (request !== controller || customer.value !== selectedCustomer) return;
|
||||
if (!response.ok) {failureMessage = data.error || 'شناسه تولید نشد؛ دوباره تلاش کنید.'; throw new Error('generation');}
|
||||
if (data.customer !== selectedCustomer || !/^[0-9]{13}$/.test(data.identifier)) {failureMessage = 'پاسخ سیستم معتبر نیست؛ دوباره تلاش کنید.'; throw new Error('generation');}
|
||||
if (input.value.trim() && input.value !== data.identifier) {
|
||||
pending = data.identifier; candidate.textContent = pending; replacement.hidden = false;
|
||||
status.textContent = 'شناسه آماده است؛ برای جایگزینی مقدار فعلی، دکمه جایگزینی را بزنید.';
|
||||
} else applyIdentifier(data.identifier);
|
||||
} catch (error) {
|
||||
if (error.name !== 'AbortError' && request === controller) status.textContent = failureMessage;
|
||||
} finally {
|
||||
if (request === controller) {controller = null; button.disabled = !customer.value; button.innerHTML = originalLabel;}
|
||||
}
|
||||
});
|
||||
document.querySelector('#apply-deposit-identifier').addEventListener('click', () => {if (pending) applyIdentifier(pending);});
|
||||
document.querySelector('#cancel-deposit-identifier').addEventListener('click', () => {pending = ''; replacement.hidden = true; status.textContent = 'شناسه فعلی حفظ شد.'; button.focus();});
|
||||
customerChanged();
|
||||
})();
|
||||
Reference in new issue
Block a user