Add field to installation report
This commit is contained in:
		
							parent
							
								
									0f66e897a1
								
							
						
					
					
						commit
						c90e19daaa
					
				
					 10 changed files with 259 additions and 61 deletions
				
			
		| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue