check and fix call mobile

This commit is contained in:
javad committed 2026-08-12 21:55:24 +03:30
1 parent b66fe69660
commit e353ed6fc2
5 files changed
+473 -20

No files matched your search

@@ -52,10 +52,10 @@
<input disabled value="{{ phone_obj.title }}" name="phone_titles" class="input" type="text" placeholder="عنوان">
</div>
<div class="control is-expanded">
<input disabled value="{{ phone_obj.phone_number }}" name="phones" class="input an_phone" type="text" placeholder="تلفن">
<input disabled value="0{{ phone_obj.phone_number }}" name="phones" class="input an_phone" type="text" placeholder="تلفن">
</div>
<div class="control">
<a href="tel:{{ phone_obj.phone_number }}" class="button is-success" title="تماس با {{ phone_obj.phone_number }}">
<a href="tel:0{{ phone_obj.phone_number }}" class="button is-success" title="تماس با {{ phone_obj.phone_number }}">
📞
</a>
</div>
@@ -74,10 +74,10 @@
<input disabled value="تلفن 1" name="phone_titles" class="input" type="text" placeholder="عنوان">
</div>
<div class="control is-expanded">
<input disabled value="{{ customer.phone1 }}" name="phones" class="input an_phone" type="text" placeholder="تلفن">
<input disabled value="0{{ customer.phone1 }}" name="phones" class="input an_phone" type="text" placeholder="تلفن">
</div>
<div class="control">
<a href="tel:{{ customer.phone1 }}" class="button is-success" title="تماس">
<a href="tel:0{{ customer.phone1 }}" class="button is-success" title="تماس">
📞
</a>
</div>
@@ -93,10 +93,10 @@
<input disabled value="تلفن 2" name="phone_titles" class="input" type="text">
</div>
<div class="control is-expanded">
<input disabled value="{{ customer.phone2 }}" name="phones" class="input an_phone" type="text">
<input disabled value="0{{ customer.phone2 }}" name="phones" class="input an_phone" type="text">
</div>
<div class="control">
<a href="tel:{{ customer.phone2 }}" class="button is-success" title="تماس">
<a href="tel:0{{ customer.phone2 }}" class="button is-success" title="تماس">
📞
</a>
</div>
@@ -112,10 +112,10 @@
<input disabled value="تلفن 3" name="phone_titles" class="input" type="text">
</div>
<div class="control is-expanded">
<input disabled value="{{ customer.phone3 }}" name="phones" class="input an_phone" type="text">
<input disabled value="0{{ customer.phone3 }}" name="phones" class="input an_phone" type="text">
</div>
<div class="control">
<a href="tel:{{ customer.phone3 }}" class="button is-success" title="تماس">
<a href="tel:0{{ customer.phone3 }}" class="button is-success" title="تماس">
📞
</a>
</div>
@@ -75,6 +75,15 @@
-webkit-overflow-scrolling: touch;
border-radius: 6px;
}
/* استایل‌های نتایج استعلام */
.inquiry-box {
background-color: #f8fafc;
padding: 15px;
border-radius: 8px;
margin-top: 15px;
border: 1px solid #cbd5e1;
}
</style>
<div id="hesabdari" class="column is-12-mobile is-12-desktop">
@@ -181,7 +190,7 @@
data-owner="{{ sarresid.check_owner_name|default:'' }}"
data-phone="{{ sarresid.check_owner_phone|default:'' }}">
<span class="icon is-small"><i class="fas fa-edit"></i></span>
<span>افزودن اطلاعات</span>
<span>ویرایش و استعلام</span>
</button>
{% else %}
<span class="has-text-grey-light">-</span>
@@ -276,7 +285,7 @@
<input type="hidden" name="n_sarresidDateTime" id="NewSarResidVal" class="reset_input">
<div id="check_extra_fields" style="display: none; background-color: #f8fafc; padding: 15px; border-radius: 8px; margin-top: 15px; border: 1px solid #cbd5e1;">
<div id="check_extra_fields" class="inquiry-box" style="display: none;">
<p class="has-text-weight-bold mb-3 has-text-info">اطلاعات چک صیادی</p>
<div class="field">
@@ -289,14 +298,15 @@
<div class="field">
<label class="label">شناسه صیادی (۱۶ رقم) <span class="has-text-danger">*</span></label>
<div class="control">
<input name="check_sayyad_id" class="input reset_input is-required-check" type="text" inputmode="numeric" pattern="[0-9]{16}" minlength="16" maxlength="16" placeholder="فقط اعداد ۱۶ رقمی" title="لطفاً دقیقاً ۱۶ رقم وارد کنید">
<input id="new_check_sayyad" name="check_sayyad_id" class="input reset_input is-required-check sayyad-input-dynamic" data-target="new" type="text" inputmode="numeric" pattern="[0-9]{16}" minlength="16" maxlength="16" placeholder="فقط اعداد ۱۶ رقمی را وارد کنید تا استعلام خودکار انجام شود...">
</div>
<div id="new_inquiry_results" class="mt-3" style="display:none;"></div>
</div>
<div class="field">
<label class="label">نام و نام‌خانوادگی صاحب حساب <span class="has-text-danger">*</span></label>
<div class="control">
<input name="check_owner_name" class="input reset_input is-required-check" type="text" placeholder="نام مالک چک">
<input name="check_owner_name" id="new_check_owner" class="input reset_input is-required-check" type="text" placeholder="نام مالک چک">
</div>
</div>
@@ -310,7 +320,7 @@
</section>
<footer class="modal-card-foot">
<button type="submit" class="button is-success">
<button type="submit" class="button is-success" id="new_submit_btn" style="display: none;">
<i class="fas fa-save ml-1"></i> ثبت اطلاعات
</button>
<span class="button cancellBTNSR">لغو</span>
@@ -323,7 +333,7 @@
<div class="modal-background"></div>
<div class="modal-card">
<header class="modal-card-head">
<p class="modal-card-title">تکمیل اطلاعات چک صیادی</p>
<p class="modal-card-title">ویرایش و استعلام چک صیادی</p>
<button type="button" class="delete" aria-label="close"></button>
</header>
<section class="modal-card-body">
@@ -338,8 +348,9 @@
<div class="field">
<label class="label">شناسه صیادی (۱۶ رقم) <span class="has-text-danger">*</span></label>
<div class="control">
<input id="up_check_sayyad" name="check_sayyad_id" class="input reset_input" type="text" required inputmode="numeric" pattern="[0-9]{16}" minlength="16" maxlength="16" placeholder="فقط اعداد ۱۶ رقمی" title="لطفاً دقیقاً ۱۶ رقم وارد کنید">
<input id="up_check_sayyad" name="check_sayyad_id" class="input reset_input sayyad-input-dynamic" data-target="up" type="text" required inputmode="numeric" pattern="[0-9]{16}" minlength="16" maxlength="16" placeholder="فقط اعداد ۱۶ رقمی را وارد کنید تا استعلام خودکار انجام شود...">
</div>
<div id="up_inquiry_results" class="mt-3" style="display:none;"></div>
</div>
<div class="field">
@@ -358,7 +369,7 @@
</section>
<footer class="modal-card-foot">
<button type="submit" class="button is-info">
<button type="submit" class="button is-info" id="up_submit_btn" style="display: none;">
<i class="fas fa-check ml-1"></i> ذخیره اطلاعات
</button>
<span class="button cancellBTNSR">لغو</span>
@@ -451,6 +462,7 @@
// فرمت‌بندی اعداد (۳ رقم ۳ رقم)
// ----------------------------------------------------
function formatNumber(num) {
if (!num) return "0";
return num.toString().replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
@@ -475,7 +487,163 @@
});
// ----------------------------------------------------
// مدیریت فرم و نمایش دینامیک چک
// تبدیل JSON ثبت پاسارگاد به حالت خوانا و فارسی
// ----------------------------------------------------
function parseSabtData(dataObj) {
if (typeof dataObj === 'string') {
try { dataObj = JSON.parse(dataObj); } catch(e) { return dataObj; }
}
let onGoing = dataObj.onGoingAmount || 0;
let blocked = dataObj.blocked || 0;
let bounced = 0;
let cleared = 0;
if (dataObj.ownersInfo && dataObj.ownersInfo.length > 0) {
bounced = dataObj.ownersInfo[0].bouncedAmount || 0;
cleared = dataObj.ownersInfo[0].clearedAmount || 0;
}
// تبدیل از ریال به تومان (تقسیم بر ۱۰) و جدا کردن با کاما
let onGoingToman = formatNumber(onGoing / 10);
let blockedToman = formatNumber(blocked / 10);
let bouncedToman = formatNumber(bounced / 10);
let clearedToman = formatNumber(cleared / 10);
let colorClassSabt = bounced > 0 ? "is-danger" : "is-success";
return `
<div class="notification is-light ${colorClassSabt} py-3 px-4 mb-2 is-size-7">
<p class="mb-2"><strong><i class="fas fa-file-signature"></i> وضعیت ثبت در صیاد:</strong></p>
<ul style="list-style: none; margin: 0; padding: 0; line-height: 2;">
<li><i class="fas fa-money-bill-wave has-text-info"></i> <b>مبلغ در جریان:</b> <span dir="ltr">${onGoingToman}</span> تومان</li>
<li><i class="fas fa-ban has-text-danger"></i> <b>مبلغ مسدودی:</b> <span dir="ltr">${blockedToman}</span> تومان</li>
<li><i class="fas fa-exclamation-triangle has-text-warning"></i> <b>مبلغ برگشتی:</b> <span dir="ltr">${bouncedToman}</span> تومان</li>
<li><i class="fas fa-check-circle has-text-success"></i> <b>مبلغ پاس شده:</b> <span dir="ltr">${clearedToman}</span> تومان</li>
</ul>
</div>
`;
}
// ----------------------------------------------------
// استعلام خودکار با تایپ شدن کامل ۱۶ رقم صیادی
// ----------------------------------------------------
$(".sayyad-input-dynamic").on("input", function() {
let val = $(this).val();
let target = $(this).data('target'); // 'new' یا 'up'
let resultsContainer = $(`#${target}_inquiry_results`);
let submitBtn = $(`#${target}_submit_btn`);
// اگر طول رشته کمتر یا بیشتر از ۱۶ بود دکمه ثبت و نتایج را مخفی کن
if (val.length !== 16) {
resultsContainer.hide().html('');
submitBtn.hide();
return;
}
// به محض رسیدن به ۱۶ رقم، استعلام‌ها شروع می‌شود
let sayad_id = val;
resultsContainer.show().html(`
<div class="notification is-light is-info py-2 px-3 mb-2 is-size-7">
<i class="fas fa-spinner fa-spin"></i> در حال برقراری ارتباط با سامانه‌های بانک مرکزی و صیاد...
</div>
`);
submitBtn.hide();
let req1_CBI = $.ajax({
url: "{% url 'admin_panel:api_check_status_inquiry' %}",
data: { sayad_id: sayad_id },
method: "GET"
});
let req2_SABT = $.ajax({
url: "{% url 'admin_panel:api_check_sabt_inquiry' %}",
data: { sayad_id: sayad_id, national_id: '', id_type: 1 },
method: "GET"
});
// مدیریت همزمان هر دو درخواست
$.when(req1_CBI, req2_SABT).done(function(cbiResArray, sabtResArray) {
let resCBI = cbiResArray[0];
let resSABT = sabtResArray[0];
let htmlOutput = "";
// --- تحلیل نتیجه بانک مرکزی (رنگ چک) ---
if (resCBI.success && resCBI.data) {
let colorClassCBI = "is-info";
let statusText = resCBI.data.status || "";
// برطرف کردن باگ فاصله‌های زیاد و مخفی در نام صاحب حساب
let ownerNameClean = (resCBI.data.owner_name || "").replace(/&nbsp;/ig, ' ').replace(/\s+/g, ' ').trim();
if (statusText.includes("سفید")) colorClassCBI = "is-success";
else if (statusText.includes("زرد") || statusText.includes("نارنجی")) colorClassCBI = "is-warning";
else if (statusText.includes("قرمز") || statusText.includes("قهوه ای") || statusText.includes("برگشت")) colorClassCBI = "is-danger";
htmlOutput += `
<div class="notification is-light ${colorClassCBI} py-2 px-3 mb-2 is-size-7">
<strong><i class="fas fa-university"></i> وضعیت حساب صادرکننده در بانک مرکزی:</strong>
<br>وضعیت چک: <b>${statusText}</b>
<br>مالک حساب: <b>${ownerNameClean}</b>
</div>
`;
// به‌روزرسانی فیلد نام صاحب حساب با متن اصلاح‌شده و بدون فاصله اضافی
$(`#${target}_check_owner`).val(ownerNameClean);
} else {
htmlOutput += `
<div class="notification is-light is-danger py-2 px-3 mb-2 is-size-7">
<strong><i class="fas fa-exclamation-triangle"></i> خطا (بانک مرکزی):</strong> ${resCBI.error || 'ارتباط با بانک مرکزی برقرار نشد'}
</div>
`;
// در صورت وجود خطا در استعلام، فیلد نام صاحب حساب خالی شود
$(`#${target}_check_owner`).val('');
}
// --- تحلیل نتیجه سامانه ثبت صیاد ---
if (resSABT.success && resSABT.data) {
htmlOutput += parseSabtData(resSABT.data);
} else {
let sabtErrorMsg = resSABT.error || 'سیستم استعلام ثبت در دسترس نیست';
// بررسی خطای کد 524 و عدم ثبت چک توسط صادرکننده
if (sabtErrorMsg.includes("کارتابل مشتري وجود ندارد") || sabtErrorMsg.includes("524")) {
sabtErrorMsg = "مشتری هنوز چک را برای شما (کد ملی 1219968218) ثبت نکرده، از مشتری بخواهید چک را ثبت کند.";
}
htmlOutput += `
<div class="notification is-light is-warning py-2 px-3 mb-2 is-size-7">
<strong><i class="fas fa-exclamation-triangle"></i> خطا (استعلام ثبت):</strong> ${sabtErrorMsg}
</div>
`;
}
// نمایش نتایج و نمایش دادن دکمه ثبت
resultsContainer.html(htmlOutput);
submitBtn.fadeIn();
}).fail(function() {
// در صورتی که کلا اینترنت سرور یا ریکوئست ایجکس فیِل شود
resultsContainer.html(`
<div class="notification is-light is-danger py-2 px-3 mb-2 is-size-7">
<strong><i class="fas fa-wifi"></i> خطای سرور در برقراری ارتباط با سامانه‌های استعلام (احتمالا کپچا یا قطعی شبکه)</strong>
</div>
`);
// در صورت خطای کلی شبکه یا سرور، نام صاحب حساب پاک شود
$(`#${target}_check_owner`).val('');
// با وجود خطا، دکمه ذخیره را نمایش می‌دهیم تا کاربر بتواند اطلاعات را دستی ذخیره کند
submitBtn.fadeIn();
});
});
// ----------------------------------------------------
// مدیریت فرم و نمایش دینامیک باکس چک
// ----------------------------------------------------
$("#sarresidTypeSelect").change(function(){
let selectedType = $(this).val();
@@ -486,6 +654,9 @@
$("#check_extra_fields").slideUp(250);
$(".is-required-check").prop('required', false);
$("#check_extra_fields input").val('');
$("#new_inquiry_results").hide().html('');
// برای نسیه دکمه ثبت مستقیما باز می‌شود
$("#new_submit_btn").show();
}
});
@@ -501,9 +672,10 @@
// ----------------------------------------------------
$("#newSarresid").click(function(){
$(".modalAddNew").addClass("is-active");
$("#new_submit_btn").hide(); // پیش‌فرض مخفی تا نوع سند انتخاب شود
});
// رویداد کلیک برای باز کردن مُدال تکمیل اطلاعات چک
// رویداد کلیک برای باز کردن مُدال ویرایش
$(".btn-update-check").click(function(){
let sarresidId = $(this).data('id');
let rowNum = $(this).data('row');
@@ -522,6 +694,13 @@
// باز کردن مُدال
$(".modalUpdateCheck").addClass("is-active");
// اگر شناسه صیادی از قبل ۱۶ رقم است، استعلام خودکار فراخوانی شود
if ($("#up_check_sayyad").val().length === 16) {
$("#up_check_sayyad").trigger("input");
} else {
$("#up_submit_btn").show(); // اگر ناقص بود دکمه را نشان بده تا ویرایش کند
}
});
// بستن تمامی مدال‌ها
@@ -531,6 +710,8 @@
$('#priceInWords, #nextPriceInWords').text('');
$("#check_extra_fields").hide();
$(".is-required-check").prop('required', false);
$("#new_inquiry_results, #up_inquiry_results").hide().html('');
$("#new_submit_btn, #up_submit_btn").hide();
});
// ----------------------------------------------------