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

@ -61,6 +61,7 @@
<tr>
<th>ردیف</th>
<th>کاربر</th>
<th>نوع کاربر</th>
<th>کد ملی</th>
<th>تلفن</th>
<th>آدرس</th>
@ -100,6 +101,27 @@
</div>
</div>
</td>
<td>
{% if customer.user_type == 'legal' %}
<span class="badge bg-label-info">
<i class="bx bx-buildings me-1"></i>حقوقی
</span>
<div class="mt-1">
{% if customer.company_name %}
<small class="text-muted d-block">{{ customer.company_name|truncatechars:25 }}</small>
{% endif %}
{% if customer.company_national_id %}
<small class="text-muted d-block">
<i class="bx bx-id-card me-1"></i>{{ customer.company_national_id }}
</small>
{% endif %}
</div>
{% else %}
<span class="badge bg-label-primary">
<i class="bx bx-user me-1"></i>حقیقی
</span>
{% endif %}
</td>
<td>{{ customer.national_code|default:"کد ملی ثبت نشده" }}</td>
<td>
<div class="d-flex flex-column">
@ -205,6 +227,16 @@
<input type="hidden" id="customer-id" name="customer_id" value="">
<!-- User Information -->
<div class="col-sm-12">
<label class="form-label fw-bold" for="{{ form.user_type.id_for_label }}">{{ form.user_type.label }}</label>
<div class="input-group input-group-merge">
<span class="input-group-text"><i class="bx bx-user-circle"></i></span>
{{ form.user_type }}
</div>
{% if form.user_type.errors %}
<div class="invalid-feedback d-block">{{ form.user_type.errors.0 }}</div>
{% endif %}
</div>
<div class="col-sm-6">
<label class="form-label fw-bold" for="{{ form.first_name.id_for_label }}">{{ form.first_name.label }}</label>
@ -261,6 +293,29 @@
{% endif %}
</div>
<!-- Company Information (for legal entities) -->
<div class="col-sm-12 company-fields" style="display: none;">
<label class="form-label fw-bold" for="{{ form.company_name.id_for_label }}">{{ form.company_name.label }}</label>
<div class="input-group input-group-merge">
<span class="input-group-text"><i class="bx bx-buildings"></i></span>
{{ form.company_name }}
</div>
{% if form.company_name.errors %}
<div class="invalid-feedback d-block">{{ form.company_name.errors.0 }}</div>
{% endif %}
</div>
<div class="col-sm-12 company-fields" style="display: none;">
<label class="form-label fw-bold" for="{{ form.company_national_id.id_for_label }}">{{ form.company_national_id.label }}</label>
<div class="input-group input-group-merge">
<span class="input-group-text"><i class="bx bx-id-card"></i></span>
{{ form.company_national_id }}
</div>
{% if form.company_national_id.errors %}
<div class="invalid-feedback d-block">{{ form.company_national_id.errors.0 }}</div>
{% endif %}
</div>
<div class="col-sm-12">
<label class="form-label fw-bold" for="{{ form.bank_name.id_for_label }}">{{ form.bank_name.label }}</label>
<div class="input-group input-group-merge">
@ -347,6 +402,18 @@
<td class="text-muted"><i class="bx bx-fingerprint me-1"></i>کد ملی</td>
<td><strong id="cd-national-code">-</strong></td>
</tr>
<tr>
<td class="text-muted"><i class="bx bx-user-circle me-1"></i>نوع کاربر</td>
<td><strong id="cd-user-type">-</strong></td>
</tr>
<tr id="cd-company-name-row" style="display: none;">
<td class="text-muted"><i class="bx bx-buildings me-1"></i>نام شرکت</td>
<td><strong id="cd-company-name">-</strong></td>
</tr>
<tr id="cd-company-id-row" style="display: none;">
<td class="text-muted"><i class="bx bx-id-card me-1"></i>شناسه ملی شرکت</td>
<td><strong id="cd-company-id">-</strong></td>
</tr>
<tr>
<td class="text-muted"><i class="bx bx-phone me-1"></i>شماره تلفن اول</td>
<td><strong id="cd-phone1">-</strong></td>
@ -495,6 +562,9 @@
lengthMenu: [[10, 25, 50, -1], [10, 25, 50, "همه"]],
order: [[0, 'asc']],
responsive: true,
columnDefs: [
{ targets: [8], orderable: false } // عملیات column غیرقابل مرتب‌سازی
]
});
// Handle form submission
@ -603,6 +673,21 @@
$('#cd-username').text(c.user.username || '-');
$('#cd-fullname').text(c.user.full_name || '-');
$('#cd-national-code').text(c.national_code || '-');
// User type and company information
const userTypeDisplay = c.user_type === 'legal' ? 'حقوقی' : 'حقیقی';
$('#cd-user-type').text(userTypeDisplay);
if (c.user_type === 'legal') {
$('#cd-company-name').text(c.company_name || '-');
$('#cd-company-id').text(c.company_national_id || '-');
$('#cd-company-name-row').show();
$('#cd-company-id-row').show();
} else {
$('#cd-company-name-row').hide();
$('#cd-company-id-row').hide();
}
$('#cd-phone1').text(c.phone_number_1 || '-');
$('#cd-phone2').text(c.phone_number_2 || '-');
$('#cd-email').text(c.user.email || '-');
@ -689,9 +774,12 @@
'customer-id': customer.id,
'id_first_name': customer.first_name,
'id_last_name': customer.last_name,
'user-type-select': customer.user_type,
'id_phone_number_1': customer.phone_number_1,
'id_phone_number_2': customer.phone_number_2,
'id_national_code': customer.national_code,
'id_company_name': customer.company_name,
'id_company_national_id': customer.company_national_id,
'id_card_number': customer.card_number,
'id_account_number': customer.account_number,
'id_address': customer.address,
@ -711,6 +799,14 @@
if (customer.bank_name !== undefined && customer.bank_name !== null) {
$('#id_bank_name').val(customer.bank_name);
}
// Ensure user type is applied and toggle company fields
if (customer.user_type !== undefined && customer.user_type !== null) {
$('#user-type-select').val(customer.user_type);
}
// Toggle company fields based on user type
toggleCompanyFields();
// Open modal
$('#add-new-record').offcanvas('show');
@ -753,8 +849,39 @@
$('.is-invalid').removeClass('is-invalid');
$('.invalid-feedback').remove();
// Reset user type to individual and hide company fields
$('#user-type-select').val('individual');
toggleCompanyFields();
// Open modal
$('#add-new-record').offcanvas('show');
}
function toggleCompanyFields() {
const userType = $('#user-type-select').val();
const companyFields = $('.company-fields');
if (userType === 'legal') {
companyFields.show();
// Make company fields required
$('input[name="company_name"]').attr('required', true);
$('input[name="company_national_id"]').attr('required', true);
} else {
companyFields.hide();
// Remove required attribute from company fields
$('input[name="company_name"]').removeAttr('required').val('');
$('input[name="company_national_id"]').removeAttr('required').val('');
// Clear any validation errors for company fields
$('.company-fields .is-invalid').removeClass('is-invalid');
$('.company-fields .invalid-feedback').remove();
}
}
// Initialize user type toggle functionality
$(document).ready(function() {
$('#user-type-select').on('change', toggleCompanyFields);
// Initialize on page load
toggleCompanyFields();
});
</script>
{% endblock %}