Add field to installation report
This commit is contained in:
parent
0f66e897a1
commit
c90e19daaa
10 changed files with 259 additions and 61 deletions
|
|
@ -5,6 +5,7 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>تاییدیه - {{ instance.code }}</title>
|
||||
{% load static %}
|
||||
{% load common_tags %}
|
||||
|
||||
<!-- Fonts (match project) -->
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
|
|
@ -52,21 +53,31 @@
|
|||
<h6 class="my-2">مشخصات چاه و کنتور هوشمند</h6>
|
||||
<div class="row" style="font-size: 14px;">
|
||||
<div class="col-4">
|
||||
<div>موقعیت مکانی (UTM): {{ latest_report.utm_x|default:'-' }} , {{ latest_report.utm_y|default:'-' }}</div>
|
||||
<div>موقعیت مکانی (UTM): X: {{ latest_report.utm_x|default:'-' }} , Y: {{ latest_report.utm_y|default:'-' }}</div>
|
||||
<div>نیرو محرکه چاه: {{ latest_report.driving_force|default:'-' }}</div>
|
||||
<div>نوع کنتور: {{ latest_report.get_meter_type_display|default:'-' }}</div>
|
||||
<div>قطر لوله آبده (اینچ): {{ latest_report.discharge_pipe_diameter|default:'-' }}</div>
|
||||
{% if latest_report.meter_type == 'smart' %}
|
||||
<div>مدل کنتور: {{ latest_report.get_meter_model_display|default:'-' }}</div>
|
||||
{% else %}
|
||||
<div>سایز کنتور: {{ latest_report.meter_size|default:'-' }}</div>
|
||||
{% endif %}
|
||||
<div>نوع مصرف: {{ latest_report.get_usage_type_display|default:'-' }}</div>
|
||||
<div>شماره سیمکارت: {{ latest_report.sim_number|default:'-' }}</div>
|
||||
<div>شارژ کنتور (متر مکعب): {{ latest_report.meter_charge|default:'-' }}</div>
|
||||
<div>پایان اعتبار شارژ: {{ latest_report.meter_charge_expiration_date|to_jalali|default:'-' }}</div>
|
||||
<div>شماره سریال کنتور: {{ instance.well.water_meter_serial_number|default:'-' }}</div>
|
||||
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<div>سایز کنتور: {{ latest_report.meter_size|default:'-' }}</div>
|
||||
<div>قطر لوله آبده (اینچ): {{ latest_report.discharge_pipe_diameter|default:'-' }}</div>
|
||||
<div>شماره پروانه بهرهبرداری چاه: {{ latest_report.exploitation_license_number|default:'-' }}</div>
|
||||
<div>قدرت موتور: {{ latest_report.motor_power|default:'-' }}</div>
|
||||
<div>دبی قبل از کالیبراسیون: {{ latest_report.pre_calibration_flow_rate|default:'-' }}</div>
|
||||
<div>دبی بعد از کالیبراسیون: {{ latest_report.post_calibration_flow_rate|default:'-' }}</div>
|
||||
<div>قدرت موتور (کیلووات ساعت): {{ latest_report.motor_power|default:'-' }}</div>
|
||||
<div>دبی (لیتر بر ثانیه): {{ latest_report.flow_rate|default:'-' }}</div>
|
||||
<div>عدد کنتور (متر مکعب): {{ latest_report.meter_reading|default:'-' }}</div>
|
||||
<div>پلمپ تابلو: {{ latest_report.is_panel_sealed|yesno:'دارد,ندارد' }}</div>
|
||||
<div>تابلو قطع: {{ latest_report.is_panel_cut|yesno:'دارد,ندارد' }}</div>
|
||||
<div>انجام عملیات قطع: {{ latest_report.is_disconnection_done|yesno:'دارد,ندارد' }}</div>
|
||||
<div>نام شرکت کنتورساز: {{ latest_report.water_meter_manufacturer.name|default:'-' }}</div>
|
||||
<div>شماره سریال کنتور: {{ instance.well.water_meter_serial_number|default:'-' }}</div>
|
||||
</div>
|
||||
<div class="col-4">
|
||||
<!-- Signature -->
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
{% load static %}
|
||||
{% load processes_tags %}
|
||||
{% load humanize %}
|
||||
{% load common_tags %}
|
||||
{% load accounts_tags %}
|
||||
|
||||
{% block sidebar %}
|
||||
|
|
@ -73,21 +74,30 @@
|
|||
<h6 class="mb-2">مشخصات چاه و کنتور هوشمند</h6>
|
||||
<div class="row g-2 small">
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="d-flex gap-2"><span class="text-muted">موقعیت مکانی (UTM):</span><span class="fw-medium">{{ latest_report.utm_x|default:'-' }} , {{ latest_report.utm_y|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">موقعیت مکانی (UTM):</span><span class="fw-medium">X: {{ latest_report.utm_x|default:'-' }} , Y: {{ latest_report.utm_y|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">نیرو محرکه چاه:</span><span class="fw-medium">{{ latest_report.driving_force|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">نوع کنتور:</span><span class="fw-medium">{{ latest_report.get_meter_type_display|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">قطر لوله آبده (اینچ):</span><span class="fw-medium">{{ latest_report.discharge_pipe_diameter|default:'-' }}</span></div>
|
||||
{% if latest_report.meter_type == 'smart' %}
|
||||
<div class="d-flex gap-2"><span class="text-muted">مدل کنتور:</span><span class="fw-medium">{{ latest_report.get_meter_model_display|default:'-' }}</span></div>
|
||||
{% else %}
|
||||
<div class="d-flex gap-2"><span class="text-muted">سایز کنتور:</span><span class="fw-medium">{{ latest_report.meter_size|default:'-' }}</span></div>
|
||||
{% endif %}
|
||||
<div class="d-flex gap-2"><span class="text-muted">نوع مصرف:</span><span class="fw-medium">{{ latest_report.get_usage_type_display|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">شماره سیمکارت:</span><span class="fw-medium">{{ latest_report.sim_number|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">شارژ کنتور (متر مکعب):</span><span class="fw-medium">{{ latest_report.meter_charge|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">پایان اعتبار شارژ:</span><span class="fw-medium">{{ latest_report.meter_charge_expiration_date|to_jalali|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">شماره سریال کنتور:</span><span class="fw-medium">{{ instance.well.water_meter_serial_number|default:'-' }}</span></div>
|
||||
</div>
|
||||
<div class="col-12 col-md-6">
|
||||
<div class="d-flex gap-2"><span class="text-muted">سایز کنتور:</span><span class="fw-medium">{{ latest_report.meter_size|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">قطر لوله آبده (اینچ):</span><span class="fw-medium">{{ latest_report.discharge_pipe_diameter|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">شماره پروانه بهرهبرداری چاه:</span><span class="fw-medium">{{ latest_report.exploitation_license_number|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">قدرت موتور:</span><span class="fw-medium">{{ latest_report.motor_power|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">دبی قبل از کالیبراسیون:</span><span class="fw-medium">{{ latest_report.pre_calibration_flow_rate|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">دبی بعد از کالیبراسیون:</span><span class="fw-medium">{{ latest_report.post_calibration_flow_rate|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">قدرت موتور (کیلووات ساعت):</span><span class="fw-medium">{{ latest_report.motor_power|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">دبی (لیتر بر ثانیه):</span><span class="fw-medium">{{ latest_report.flow_rate|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">عدد کنتور (متر مکعب):</span><span class="fw-medium">{{ latest_report.meter_reading|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">پلمپ تابلو:</span><span class="fw-medium">{{ latest_report.is_panel_sealed|yesno:'دارد,ندارد' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">تابلو قطع:</span><span class="fw-medium">{{ latest_report.is_panel_cut|yesno:'دارد,ندارد' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">انجام عملیات قطع:</span><span class="fw-medium">{{ latest_report.is_disconnection_done|yesno:'دارد,ندارد' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">نام شرکت کنتورساز:</span><span class="fw-medium">{{ latest_report.water_meter_manufacturer.name|default:'-' }}</span></div>
|
||||
<div class="d-flex gap-2"><span class="text-muted">شماره سریال کنتور:</span><span class="fw-medium">{{ instance.well.water_meter_serial_number|default:'-' }}</span></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="signature-section d-flex justify-content-end">
|
||||
|
|
|
|||
BIN
db.sqlite3
BIN
db.sqlite3
Binary file not shown.
|
|
@ -24,11 +24,12 @@ class InstallationReportAdmin(admin.ModelAdmin):
|
|||
list_display = (
|
||||
'assignment', 'visited_date', 'meter_type', 'meter_size', 'water_meter_manufacturer',
|
||||
'discharge_pipe_diameter', 'usage_type', 'exploitation_license_number',
|
||||
'motor_power', 'pre_calibration_flow_rate', 'post_calibration_flow_rate',
|
||||
'motor_power', 'flow_rate', 'meter_reading', 'meter_charge', 'meter_charge_expiration_date',
|
||||
'new_water_meter_serial', 'seal_number', 'sim_number',
|
||||
'is_panel_sealed', 'is_panel_cut', 'is_disconnection_done',
|
||||
'is_meter_suspicious', 'approved', 'created'
|
||||
)
|
||||
list_filter = ('is_meter_suspicious', 'approved', 'visited_date', 'meter_type', 'usage_type', 'water_meter_manufacturer')
|
||||
list_filter = ('is_meter_suspicious', 'is_panel_sealed', 'is_panel_cut', 'is_disconnection_done', 'approved', 'visited_date', 'meter_type', 'usage_type', 'water_meter_manufacturer')
|
||||
search_fields = (
|
||||
'assignment__process_instance__code', 'new_water_meter_serial', 'seal_number', 'exploitation_license_number', 'sim_number'
|
||||
)
|
||||
|
|
@ -43,7 +44,7 @@ class InstallationReportAdmin(admin.ModelAdmin):
|
|||
)
|
||||
}),
|
||||
('مشخصات هیدرولیکی', {
|
||||
'fields': ('discharge_pipe_diameter', 'pre_calibration_flow_rate', 'post_calibration_flow_rate')
|
||||
'fields': ('discharge_pipe_diameter', 'flow_rate', 'meter_reading', 'meter_charge', 'meter_charge_expiration_date')
|
||||
}),
|
||||
('کاربری و مجوز', {
|
||||
'fields': ('usage_type', 'exploitation_license_number')
|
||||
|
|
@ -51,6 +52,9 @@ class InstallationReportAdmin(admin.ModelAdmin):
|
|||
('توان و محرکه', {
|
||||
'fields': ('driving_force', 'motor_power')
|
||||
}),
|
||||
('وضعیت تابلو/قطع', {
|
||||
'fields': ('is_panel_sealed', 'is_panel_cut', 'is_disconnection_done')
|
||||
}),
|
||||
('توضیحات', {
|
||||
'fields': ('description',)
|
||||
}),
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@ class InstallationReportForm(forms.ModelForm):
|
|||
'visited_date', 'new_water_meter_serial', 'seal_number',
|
||||
'utm_x', 'utm_y', 'meter_type', 'meter_size', 'meter_model',
|
||||
'discharge_pipe_diameter', 'usage_type', 'exploitation_license_number',
|
||||
'motor_power', 'pre_calibration_flow_rate', 'post_calibration_flow_rate',
|
||||
'motor_power', 'flow_rate', 'meter_reading', 'meter_charge', 'meter_charge_expiration_date',
|
||||
'is_panel_sealed', 'is_panel_cut', 'is_disconnection_done',
|
||||
'water_meter_manufacturer', 'sim_number', 'driving_force',
|
||||
'is_meter_suspicious', 'description'
|
||||
]
|
||||
|
|
@ -90,17 +91,24 @@ class InstallationReportForm(forms.ModelForm):
|
|||
'class': 'form-control',
|
||||
'required': True
|
||||
}),
|
||||
'pre_calibration_flow_rate': forms.NumberInput(attrs={
|
||||
'flow_rate': forms.NumberInput(attrs={
|
||||
'class': 'form-control',
|
||||
'min': '0',
|
||||
'step': '0.0001',
|
||||
'required': True
|
||||
}),
|
||||
'post_calibration_flow_rate': forms.NumberInput(attrs={
|
||||
'meter_reading': forms.NumberInput(attrs={
|
||||
'class': 'form-control',
|
||||
'min': '0',
|
||||
'step': '0.0001',
|
||||
'required': True
|
||||
}),
|
||||
'meter_charge': forms.NumberInput(attrs={
|
||||
'class': 'form-control',
|
||||
'min': '0',
|
||||
'step': '0.0001',
|
||||
}),
|
||||
'meter_charge_expiration_date': forms.DateInput(attrs={
|
||||
'type': 'date',
|
||||
'class': 'form-control',
|
||||
}),
|
||||
'water_meter_manufacturer': forms.Select(attrs={
|
||||
'class': 'form-select',
|
||||
|
|
@ -119,6 +127,15 @@ class InstallationReportForm(forms.ModelForm):
|
|||
'class': 'form-check-input',
|
||||
'id': 'id_is_meter_suspicious',
|
||||
}),
|
||||
'is_panel_sealed': forms.CheckboxInput(attrs={
|
||||
'class': 'form-check-input',
|
||||
}),
|
||||
'is_panel_cut': forms.CheckboxInput(attrs={
|
||||
'class': 'form-check-input',
|
||||
}),
|
||||
'is_disconnection_done': forms.CheckboxInput(attrs={
|
||||
'class': 'form-check-input',
|
||||
}),
|
||||
'description': forms.Textarea(attrs={
|
||||
'class': 'form-control',
|
||||
'rows': 3
|
||||
|
|
@ -137,12 +154,17 @@ class InstallationReportForm(forms.ModelForm):
|
|||
'usage_type': 'نوع مصرف',
|
||||
'exploitation_license_number': 'شماره پروانه بهرهبرداری',
|
||||
'motor_power': 'قدرت موتور (کیلووات ساعت)',
|
||||
'pre_calibration_flow_rate': 'دبی قبل از کالیبراسیون (لیتر بر ثانیه)',
|
||||
'post_calibration_flow_rate': 'دبی بعد از کالیبراسیون (لیتر بر ثانیه)',
|
||||
'flow_rate': 'دبی (لیتر بر ثانیه)',
|
||||
'meter_reading': 'عدد کنتور (متر مکعب)',
|
||||
'meter_charge': 'شارژ کنتور (متر مکعب)',
|
||||
'meter_charge_expiration_date': 'تاریخ پایان اعتبار شارژ',
|
||||
'water_meter_manufacturer': 'شرکت سازنده کنتور',
|
||||
'sim_number': 'شماره سیمکارت',
|
||||
'driving_force': 'نیرو محرکه چاه',
|
||||
'is_meter_suspicious': 'کنتور مشکوک است',
|
||||
'is_panel_sealed': 'پلمپ تابلو',
|
||||
'is_panel_cut': 'تابلو قطع',
|
||||
'is_disconnection_done': 'انجام عملیات قطع',
|
||||
'description': 'توضیحات'
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
# Generated by Django 5.2.4 on 2025-10-27 03:42
|
||||
|
||||
import django.core.validators
|
||||
from decimal import Decimal
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('installations', '0011_alter_installationreport_discharge_pipe_diameter'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='installationreport',
|
||||
name='flow_rate',
|
||||
field=models.DecimalField(blank=True, decimal_places=4, max_digits=10, null=True, verbose_name='(لیتر بر ثانیه)دبی'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='installationreport',
|
||||
name='is_disconnection_done',
|
||||
field=models.BooleanField(default=False, verbose_name='انجام عملیات قطع'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='installationreport',
|
||||
name='is_panel_cut',
|
||||
field=models.BooleanField(default=False, verbose_name='تابلو قطع'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='installationreport',
|
||||
name='is_panel_sealed',
|
||||
field=models.BooleanField(default=False, verbose_name='پلمپ تابلو'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='installationreport',
|
||||
name='meter_charge',
|
||||
field=models.DecimalField(blank=True, decimal_places=4, max_digits=10, null=True, validators=[django.core.validators.MinValueValidator(Decimal('0'))], verbose_name='شارژ کنتور (متر مکعب)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='installationreport',
|
||||
name='meter_charge_expiration_date',
|
||||
field=models.DateField(blank=True, null=True, verbose_name='تاریخ پایان اعتبار شارژ'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='installationreport',
|
||||
name='meter_reading',
|
||||
field=models.DecimalField(blank=True, decimal_places=4, max_digits=10, null=True, validators=[django.core.validators.MinValueValidator(Decimal('0'))], verbose_name='عدد کنتور (متر مکعب)'),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
# Generated by Django 5.2.4 on 2025-10-27 03:47
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('installations', '0012_installationreport_flow_rate_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='installationreport',
|
||||
name='post_calibration_flow_rate',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='installationreport',
|
||||
name='pre_calibration_flow_rate',
|
||||
),
|
||||
]
|
||||
|
|
@ -55,6 +55,12 @@ class InstallationReport(BaseModel):
|
|||
]
|
||||
meter_model = models.CharField(max_length=20, choices=METER_MODEL_CHOICES, null=True, blank=True, verbose_name='مدل کنتور')
|
||||
meter_size = models.CharField(max_length=50, null=True, blank=True, verbose_name='سایز کنتور')
|
||||
meter_reading = models.DecimalField(max_digits=10, decimal_places=4, null=True, blank=True, validators=[MinValueValidator(Decimal('0'))], verbose_name='عدد کنتور (متر مکعب)')
|
||||
meter_charge = models.DecimalField(max_digits=10, decimal_places=4, null=True, blank=True, validators=[MinValueValidator(Decimal('0'))], verbose_name='شارژ کنتور (متر مکعب)')
|
||||
meter_charge_expiration_date = models.DateField(null=True, blank=True, verbose_name='تاریخ پایان اعتبار شارژ')
|
||||
is_panel_sealed = models.BooleanField(default=False, verbose_name='پلمپ تابلو')
|
||||
is_panel_cut = models.BooleanField(default=False, verbose_name='تابلو قطع')
|
||||
is_disconnection_done = models.BooleanField(default=False, verbose_name='انجام عملیات قطع')
|
||||
discharge_pipe_diameter = models.DecimalField(max_digits=10, decimal_places=4, null=True, blank=True, verbose_name='قطر لوله آبده (اینچ)')
|
||||
USAGE_TYPE_CHOICES = [
|
||||
('domestic', 'شرب و خدمات'),
|
||||
|
|
@ -64,8 +70,7 @@ class InstallationReport(BaseModel):
|
|||
usage_type = models.CharField(max_length=20, choices=USAGE_TYPE_CHOICES, null=True, verbose_name='نوع مصرف')
|
||||
exploitation_license_number = models.CharField(max_length=50, verbose_name='شماره پروانه بهرهبرداری چاه')
|
||||
motor_power = models.DecimalField(max_digits=10, decimal_places=4, null=True, blank=True, verbose_name='(کیلووات ساعت) قدرت موتور')
|
||||
pre_calibration_flow_rate = models.DecimalField(max_digits=10, decimal_places=4, null=True, blank=True, verbose_name='(لیتر بر ثانیه)دبی قبل از کالیبراسیون')
|
||||
post_calibration_flow_rate = models.DecimalField(max_digits=10, decimal_places=4, null=True, blank=True, verbose_name='(لیتر بر ثانیه)دبی بعد از کالیبراسیون')
|
||||
flow_rate = models.DecimalField(max_digits=10, decimal_places=4, null=True, blank=True, verbose_name='(لیتر بر ثانیه)دبی')
|
||||
water_meter_manufacturer = models.ForeignKey('wells.WaterMeterManufacturer', on_delete=models.SET_NULL, null=True, blank=True, verbose_name='شرکت سازنده کنتور آب')
|
||||
sim_number = models.CharField(max_length=20, null=True, blank=True, verbose_name='شماره سیمکارت')
|
||||
driving_force = models.CharField(max_length=50, null=True, blank=True, verbose_name='نیرو محرکه چاه')
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
@ -166,8 +168,11 @@
|
|||
<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-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,6 +452,7 @@
|
|||
<div class="invalid-feedback">{{ form.driving_force.errors.0 }}</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
<div class="row mt-3">
|
||||
<div class="col-md-3 d-flex align-items-end">
|
||||
<div class="form-check">
|
||||
{{ form.is_meter_suspicious }}
|
||||
|
|
@ -441,6 +462,34 @@
|
|||
<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>
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-3">
|
||||
{{ form.description.label_tag }}
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -143,12 +143,16 @@
|
|||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-category bx-sm me-2"></i>نوع کنتور: {{ latest_report.get_meter_type_display }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if latest_report.meter_size %}
|
||||
{% if latest_report.meter_type == 'smart' %}
|
||||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-chip bx-sm me-2"></i>مدل کنتور: {{ latest_report.get_meter_model_display|default:'-' }}</p>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-ruler bx-sm me-2"></i>سایز کنتور: {{ latest_report.meter_size }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% if latest_report.water_meter_manufacturer %}
|
||||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-buildings bx-sm me-2"></i>سازنده: {{ latest_report.water_meter_manufacturer.name }}</p>
|
||||
|
|
@ -179,16 +183,35 @@
|
|||
<p class="text-nowrap mb-2"><i class="bx bx-id-card bx-sm me-2"></i>شماره پروانه: {{ latest_report.exploitation_license_number }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if latest_report.pre_calibration_flow_rate %}
|
||||
{% if latest_report.flow_rate %}
|
||||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-water bx-sm me-2"></i>دبی قبل از کالیبراسیون: {{ latest_report.pre_calibration_flow_rate }} لیتر/ثانیه</p>
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-water bx-sm me-2"></i>دبی: {{ latest_report.flow_rate }} لیتر/ثانیه</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if latest_report.post_calibration_flow_rate %}
|
||||
{% if latest_report.meter_reading %}
|
||||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-tachometer bx-sm me-2"></i>دبی بعد از کالیبراسیون: {{ latest_report.post_calibration_flow_rate }} لیتر/ثانیه</p>
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-pen bx-sm me-2"></i>عدد کنتور: {{ latest_report.meter_reading }} متر مکعب</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if latest_report.meter_charge %}
|
||||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-battery bx-sm me-2"></i>شارژ کنتور: {{ latest_report.meter_charge }} متر مکعب</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% if latest_report.meter_charge_expiration_date %}
|
||||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-calendar-exclamation bx-sm me-2"></i>پایان اعتبار شارژ: {{ latest_report.meter_charge_expiration_date|to_jalali }}</p>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-lock-open-alt bx-sm me-2"></i>پلمپ تابلو: {{ latest_report.is_panel_sealed|yesno:'دارد,ندارد' }}</p>
|
||||
</div>
|
||||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-power-off bx-sm me-2"></i>تابلو قطع: {{ latest_report.is_panel_cut|yesno:'دارد,ندارد' }}</p>
|
||||
</div>
|
||||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-cut bx-sm me-2"></i>انجام عملیات قطع: {{ latest_report.is_disconnection_done|yesno:'دارد,ندارد' }}</p>
|
||||
</div>
|
||||
<div class="col-12 col-md-4">
|
||||
<p class="text-nowrap mb-2"><i class="bx bx-map bx-sm me-2"></i>UTM X: {{ latest_report.utm_x|default:'-' }}</p>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue