Add field to installation report

This commit is contained in:
aminhashemi92 2025-10-27 09:12:05 +03:30
parent 0f66e897a1
commit c90e19daaa
10 changed files with 259 additions and 61 deletions

View file

@ -156,8 +156,10 @@
{% endif %}
<p class="text-nowrap mb-2"><i class="bx bx-tachometer bx-sm me-2"></i>قطر لوله آبده (اینچ): {{ report.discharge_pipe_diameter|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-building bx-sm me-2"></i>سازنده کنتور: {{ report.water_meter_manufacturer|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-sim-card bx-sm me-2"></i>شماره سیمکارت: {{ report.sim_number|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-mobile bx-sm me-2"></i>شماره سیمکارت: {{ report.sim_number|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-cog bx-sm me-2"></i>نیرو محرکه چاه: {{ report.driving_force|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-battery bx-sm me-2"></i>شارژ کنتور (متر مکعب): {{ report.meter_charge|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-calendar-exclamation bx-sm me-2"></i>پایان اعتبار شارژ: {{ report.meter_charge_expiration_date|to_jalali|default:'-' }}</p>
</div>
<div class="col-md-6">
<p class="text-nowrap mb-2"><i class="bx bx-help-circle bx-sm me-2"></i>کنتور مشکوک: {{ report.is_meter_suspicious|yesno:'بله,خیر' }}</p>
@ -165,9 +167,12 @@
<p class="text-nowrap mb-2"><i class="bx bx-map-pin bx-sm me-2"></i>UTM Y: {{ report.utm_y|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-category bx-sm me-2"></i>نوع مصرف: {{ report.get_usage_type_display|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-id-card bx-sm me-2"></i>شماره پروانه بهره‌برداری: {{ report.exploitation_license_number|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-bolt-circle bx-sm me-2"></i>قدرت موتور(کیلووات ساعت): {{ report.motor_power|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-water bx-sm me-2"></i>دبی قبل کالیبراسیون(لیتر/ثانیه): {{ report.pre_calibration_flow_rate|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-water bx-sm me-2"></i>دبی بعد کالیبراسیون(لیتر/ثانیه): {{ report.post_calibration_flow_rate|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-bolt-circle bx-sm me-2"></i>قدرت موتور (کیلووات ساعت): {{ report.motor_power|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-water bx-sm me-2"></i>دبی (لیتر/ثانیه): {{ report.flow_rate|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-pen bx-sm me-2"></i>عدد کنتور (متر مکعب): {{ report.meter_reading|default:'-' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-lock-open-alt bx-sm me-2"></i>پلمپ تابلو: {{ report.is_panel_sealed|yesno:'بله,خیر' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-power-off bx-sm me-2"></i>تابلو قطع: {{ report.is_panel_cut|yesno:'بله,خیر' }}</p>
<p class="text-nowrap mb-2"><i class="bx bx-cut bx-sm me-2"></i>انجام عملیات قطع: {{ report.is_disconnection_done|yesno:'بله,خیر' }}</p>
</div>
</div>
@ -389,17 +394,32 @@
{% endif %}
</div>
<div class="col-md-3">
{{ form.pre_calibration_flow_rate.label_tag }}
{{ form.pre_calibration_flow_rate }}
{% if form.pre_calibration_flow_rate.errors %}
<div class="invalid-feedback">{{ form.pre_calibration_flow_rate.errors.0 }}</div>
{{ form.flow_rate.label_tag }}
{{ form.flow_rate }}
{% if form.flow_rate.errors %}
<div class="invalid-feedback">{{ form.flow_rate.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-3">
{{ form.post_calibration_flow_rate.label_tag }}
{{ form.post_calibration_flow_rate }}
{% if form.post_calibration_flow_rate.errors %}
<div class="invalid-feedback">{{ form.post_calibration_flow_rate.errors.0 }}</div>
{{ form.meter_reading.label_tag }}
{{ form.meter_reading }}
{% if form.meter_reading.errors %}
<div class="invalid-feedback">{{ form.meter_reading.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-3">
{{ form.meter_charge.label_tag }}
{{ form.meter_charge }}
{% if form.meter_charge.errors %}
<div class="invalid-feedback">{{ form.meter_charge.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-3">
{{ form.meter_charge_expiration_date.label_tag }}
<input type="text" id="id_meter_charge_expiration_date_display" class="form-control{% if form.meter_charge_expiration_date.errors %} is-invalid{% endif %}" placeholder="انتخاب تاریخ" {% if not user_is_installer %}disabled{% endif %} readonly value="{% if report and edit_mode and report.meter_charge_expiration_date %}{{ report.meter_charge_expiration_date|date:'Y/m/d' }}{% elif form.meter_charge_expiration_date.value %}{{ form.meter_charge_expiration_date.value|date:'Y/m/d' }}{% endif %}">
<input type="hidden" id="id_meter_charge_expiration_date" name="meter_charge_expiration_date" value="{% if report and edit_mode and report.meter_charge_expiration_date %}{{ report.meter_charge_expiration_date|date:'Y-m-d' }}{% elif form.meter_charge_expiration_date.value %}{{ form.meter_charge_expiration_date.value }}{% endif %}">
{% if form.meter_charge_expiration_date.errors %}
<div class="invalid-feedback">{{ form.meter_charge_expiration_date.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-3">
@ -432,14 +452,43 @@
<div class="invalid-feedback">{{ form.driving_force.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-3 d-flex align-items-end">
<div class="form-check">
{{ form.is_meter_suspicious }}
{{ form.is_meter_suspicious.label_tag }}
<div class="row mt-3">
<div class="col-md-3 d-flex align-items-end">
<div class="form-check">
{{ form.is_meter_suspicious }}
{{ form.is_meter_suspicious.label_tag }}
</div>
{% if form.is_meter_suspicious.errors %}
<div class="invalid-feedback">{{ form.is_meter_suspicious.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-3 d-flex align-items-end">
<div class="form-check">
{{ form.is_panel_sealed }}
{{ form.is_panel_sealed.label_tag }}
</div>
{% if form.is_panel_sealed.errors %}
<div class="invalid-feedback">{{ form.is_panel_sealed.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-3 d-flex align-items-end">
<div class="form-check">
{{ form.is_panel_cut }}
{{ form.is_panel_cut.label_tag }}
</div>
{% if form.is_panel_cut.errors %}
<div class="invalid-feedback">{{ form.is_panel_cut.errors.0 }}</div>
{% endif %}
</div>
<div class="col-md-3 d-flex align-items-end">
<div class="form-check">
{{ form.is_disconnection_done }}
{{ form.is_disconnection_done.label_tag }}
</div>
{% if form.is_disconnection_done.errors %}
<div class="invalid-feedback">{{ form.is_disconnection_done.errors.0 }}</div>
{% endif %}
</div>
{% if form.is_meter_suspicious.errors %}
<div class="invalid-feedback">{{ form.is_meter_suspicious.errors.0 }}</div>
{% endif %}
</div>
</div>
<div class="my-3">
@ -653,7 +702,7 @@
<script src="https://unpkg.com/persian-date@latest/dist/persian-date.min.js"></script>
<script src="https://unpkg.com/persian-datepicker@latest/dist/js/persian-datepicker.min.js"></script>
<script>
// Persian datepicker for visited_date (exact pattern like sample: display + altField)
// Persian datepicker helper for date fields (DRY)
(function(){
function convertPersianToEnglishNumbers(str) {
const persianNumbers = '۰۱۲۳۴۵۶۷۸۹';
@ -664,12 +713,12 @@
}).join('');
}
if (window.$ && $.fn.persianDatepicker && $('#id_visited_date_display').length) {
function initPersianDateField(displaySelector, hiddenSelector){
if (!(window.$ && $.fn.persianDatepicker)) return;
var $display = $(displaySelector);
var $hidden = $(hiddenSelector);
if (!$display.length || !$hidden.length) return;
try {
var $display = $('#id_visited_date_display');
var $hidden = $('#id_visited_date');
// Prefill from hidden Gregorian to visible Jalali
var initialGregorian = $hidden.val();
if (initialGregorian) {
try {
@ -678,10 +727,9 @@
} catch (e) {}
}
// Initialize datepicker with altField exactly like the sample
var picker = $display.persianDatepicker({
$display.persianDatepicker({
calendarType: 'persian',
altField: '#id_visited_date',
altField: hiddenSelector,
format: 'YYYY/MM/DD',
altFormat: 'YYYY-MM-DD',
observer: true,
@ -694,8 +742,12 @@
$hidden.val(g);
}
});
} catch (e) { console.error('Error initializing Persian Date Picker:', e); }
} catch (e) { console.error('Error initializing Persian Date Picker:', displaySelector, e); }
}
// Initialize both fields
initPersianDateField('#id_visited_date_display', '#id_visited_date');
initPersianDateField('#id_meter_charge_expiration_date_display', '#id_meter_charge_expiration_date');
})();
// Require date and show success toast on submit (persist across redirect)