This commit is contained in:
aminhashemi92 2025-09-29 17:38:11 +03:30
parent 810c87e2e0
commit b5bf3a5dbe
51 changed files with 2397 additions and 326 deletions

View file

@ -1,6 +1,7 @@
{% extends '_base.html' %}
{% load static %}
{% load accounts_tags %}
{% load common_tags %}
{% block sidebar %}
{% include 'sidebars/admin.html' %}
@ -36,12 +37,10 @@
<div class="d-md-flex justify-content-between align-items-center dt-layout-end col-md-auto ms-auto mt-0">
<div class="dt-buttons btn-group flex-wrap mb-0">
<div class="btn-group">
<button class="btn buttons-collection btn-label-primary dropdown-toggle me-4 d-none" type="button">
<span>
<span class="d-flex align-items-center gap-2">
<i class="icon-base bx bx-export me-sm-1"></i>
<span class="d-none d-sm-inline-block">خروجی</span>
</span>
<button class="btn btn-label-success me-2" type="button" onclick="exportToExcel()">
<span class="d-flex align-items-center gap-2">
<i class="bx bx-export me-sm-1"></i>
<span class="d-none d-sm-inline-block">خروجی اکسل</span>
</span>
</button>
{% if request.user|is_broker %}
@ -212,6 +211,7 @@
<th>امور</th>
<th>پیشرفت</th>
<th>وضعیت</th>
<th>تاریخ نصب/تاخیر</th>
<th>تاریخ ایجاد</th>
<th>عملیات</th>
</tr>
@ -244,6 +244,20 @@
</div>
</td>
<td>{{ item.instance.get_status_display_with_color|safe }}</td>
<td>
{% if item.installation_scheduled_date %}
<div>
<span title="{{ item.installation_scheduled_date|date:'Y-m-d' }}">{{ item.installation_scheduled_date | to_jalali }}</span>
</div>
{% if item.installation_overdue_days and item.installation_overdue_days > 0 %}
<small class="text-danger d-block">{{ item.installation_overdue_days }} روز تاخیر</small>
{% else %}
<small class="text-muted d-block">بدون تاخیر</small>
{% endif %}
{% else %}
<span class="text-muted">تاریخ نصب تعیین نشده</span>
{% endif %}
</td>
<td>{{ item.instance.jcreated_date }}</td>
<td>
<div class="d-inline-block">
@ -287,6 +301,7 @@
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
{% endfor %}
</tbody>
@ -419,6 +434,10 @@
<div id="repNewFields" class="col-sm-12" style="display:none;">
<div class="row g-3">
<div class="col-sm-12">
<label class="form-label" for="id_user_type">{{ customer_form.user_type.label }}</label>
{{ customer_form.user_type }}
</div>
<div class="col-sm-6">
<label class="form-label" for="id_first_name">{{ customer_form.first_name.label }}</label>
{{ customer_form.first_name }}
@ -439,6 +458,15 @@
<label class="form-label" for="id_national_code">{{ customer_form.national_code.label }}</label>
{{ customer_form.national_code }}
</div>
<!-- Company fields for legal entities -->
<div class="col-sm-6 company-fields" style="display:none;">
<label class="form-label" for="id_company_name">{{ customer_form.company_name.label }}</label>
{{ customer_form.company_name }}
</div>
<div class="col-sm-6 company-fields" style="display:none;">
<label class="form-label" for="id_company_national_id">{{ customer_form.company_national_id.label }}</label>
{{ customer_form.company_national_id }}
</div>
<div class="col-sm-6">
<label class="form-label" for="id_card_number">{{ customer_form.card_number.label }}</label>
{{ customer_form.card_number }}
@ -717,6 +745,21 @@
.fail(function(){ setStatus('#wellStatus', 'خطا در بررسی چاه', 'danger'); });
});
function toggleRepCompanyFields() {
const userType = $('#user-type-select').val();
if (userType === 'legal') {
$('#repNewFields .company-fields').show();
$('input[name="company_name"]').attr('required', true);
$('input[name="company_national_id"]').attr('required', true);
} else {
$('#repNewFields .company-fields').hide();
$('input[name="company_name"]').removeAttr('required');
$('input[name="company_national_id"]').removeAttr('required');
}
}
$('#user-type-select').on('change', toggleRepCompanyFields);
$('#btnLookupRep').on('click', function() {
const nc = $('#rep_national_code').val().trim();
if (!nc) { setStatus('#repStatus', 'لطفا کد ملی نماینده را وارد کنید', 'danger'); return; }
@ -732,36 +775,47 @@
$('#id_first_name').val(resp.user.first_name || '');
$('#id_last_name').val(resp.user.last_name || '');
if (resp.user.profile) {
$('#user-type-select').val(resp.user.profile.user_type || 'individual');
$('#id_national_code').val(resp.user.profile.national_code || nc);
$('#id_phone_number_1').val(resp.user.profile.phone_number_1 || '');
$('#id_phone_number_2').val(resp.user.profile.phone_number_2 || '');
$('#id_company_name').val(resp.user.profile.company_name || '');
$('#id_company_national_id').val(resp.user.profile.company_national_id || '');
$('#id_card_number').val(resp.user.profile.card_number || '');
$('#id_account_number').val(resp.user.profile.account_number || '');
$('#id_bank_name').val(resp.user.profile.bank_name || '');
$('#id_address').val(resp.user.profile.address || '');
} else {
$('#user-type-select').val('individual');
$('#id_national_code').val(nc);
$('#id_phone_number_1').val('');
$('#id_phone_number_2').val('');
$('#id_company_name').val('');
$('#id_company_national_id').val('');
$('#id_card_number').val('');
$('#id_account_number').val('');
$('#id_bank_name').val('');
$('#id_address').val('');
}
toggleRepCompanyFields();
setStatus('#repStatus', 'نماینده یافت شد.', 'success');
} else {
currentRepId = null;
$('#repNewFields').show();
// Clear form and prefill national code
$('#user-type-select').val('individual');
$('#id_first_name').val('');
$('#id_last_name').val('');
$('#id_national_code').val(nc);
$('#id_phone_number_1').val('');
$('#id_phone_number_2').val('');
$('#id_company_name').val('');
$('#id_company_national_id').val('');
$('#id_card_number').val('');
$('#id_account_number').val('');
$('#id_bank_name').val('');
$('#id_address').val('');
toggleRepCompanyFields();
setStatus('#repStatus', 'نماینده یافت نشد. لطفا اطلاعات را تکمیل کنید.', 'danger');
}
})
@ -954,6 +1008,45 @@
});
};
};
// Export to Excel function
window.exportToExcel = function() {
// Get current filter parameters from the form
const form = document.querySelector('form[method="get"]');
const formData = new FormData(form);
// Build query string
const params = new URLSearchParams();
for (const [key, value] of formData.entries()) {
if (value.trim()) {
params.append(key, value);
}
}
// Create export URL with current filters
const exportUrl = '{% url "processes:export_requests_excel" %}' + '?' + params.toString();
// Show loading state
const btn = document.querySelector('button[onclick="exportToExcel()"]');
const originalText = btn.innerHTML;
btn.innerHTML = '<i class="bx bx-loader-circle bx-spin me-1"></i>در حال تولید...';
btn.disabled = true;
// Create invisible link and trigger download
const link = document.createElement('a');
link.href = exportUrl;
link.style.display = 'none';
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
// Reset button after a short delay
setTimeout(() => {
btn.innerHTML = originalText;
btn.disabled = false;
showToast('فایل اکسل آماده دانلود است', 'success');
}, 1000);
};
});
</script>
{% endblock %}