diff --git a/certificates/templates/certificates/step.html b/certificates/templates/certificates/step.html
index 917183a..8696e6c 100644
--- a/certificates/templates/certificates/step.html
+++ b/certificates/templates/certificates/step.html
@@ -75,23 +75,29 @@
diff --git a/certificates/views.py b/certificates/views.py
index 68ca5b0..26a5d6f 100644
--- a/certificates/views.py
+++ b/certificates/views.py
@@ -83,7 +83,7 @@ def certificate_step(request, instance_id, step_id):
messages.error(request, 'مانده فاکتور باید صفر باشد')
return redirect('processes:request_list')
- template = CertificateTemplate.objects.filter(is_active=True, company=instance.broker.company).order_by('-created').first()
+ template = CertificateTemplate.objects.filter(is_active=True).order_by('-created').first()
if not template:
return render(request, 'certificates/missing.html', {})
diff --git a/db.sqlite3 b/db.sqlite3
deleted file mode 100644
index 4bedcf3..0000000
Binary files a/db.sqlite3 and /dev/null differ
diff --git a/installations/admin.py b/installations/admin.py
index b32240b..2a2f779 100644
--- a/installations/admin.py
+++ b/installations/admin.py
@@ -25,12 +25,11 @@ class InstallationReportAdmin(admin.ModelAdmin):
'assignment', 'visited_date', 'meter_type', 'meter_size', 'water_meter_manufacturer',
'discharge_pipe_diameter', 'usage_type', 'exploitation_license_number',
'motor_power', 'flow_rate', 'meter_reading', 'meter_charge', 'meter_charge_expiration_date',
- 'pump_type', 'licence_working_hour',
'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', 'is_panel_sealed', 'is_panel_cut', 'is_disconnection_done', 'approved', 'visited_date', 'meter_type', 'pump_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'
)
@@ -51,7 +50,7 @@ class InstallationReportAdmin(admin.ModelAdmin):
'fields': ('usage_type', 'exploitation_license_number')
}),
('توان و محرکه', {
- 'fields': ('driving_force', 'motor_power', 'pump_type', 'licence_working_hour')
+ 'fields': ('driving_force', 'motor_power')
}),
('وضعیت تابلو/قطع', {
'fields': ('is_panel_sealed', 'is_panel_cut', 'is_disconnection_done')
diff --git a/installations/forms.py b/installations/forms.py
index d2483e7..4c30a5f 100644
--- a/installations/forms.py
+++ b/installations/forms.py
@@ -20,12 +20,11 @@ class InstallationReportForm(forms.ModelForm):
model = InstallationReport
fields = [
'visited_date', 'new_water_meter_serial', 'seal_number',
- 'utm_x', 'utm_y', 'meter_type',
+ 'utm_x', 'utm_y', 'meter_type', 'meter_size', 'meter_model',
'discharge_pipe_diameter', 'usage_type', 'exploitation_license_number',
- 'motor_power', 'flow_rate', 'meter_charge_expiration_date',
- 'pump_type', 'licence_working_hour',
- 'is_panel_cut',
- 'water_meter_manufacturer',
+ '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'
]
@@ -61,7 +60,16 @@ class InstallationReportForm(forms.ModelForm):
('smart', 'هوشمند (آب و برق)'),
('volumetric', 'حجمی')
]),
- # meter_size and meter_model removed from form UI
+ 'meter_size': forms.TextInput(attrs={
+ 'class': 'form-control'
+ }),
+ 'meter_model': forms.Select(attrs={
+ 'class': 'form-select'
+ }, choices=[
+ ('', 'انتخاب کنید'),
+ ('direct', 'مستقیم'),
+ ('indirect', 'غیرمستقیم')
+ ]),
'discharge_pipe_diameter': forms.NumberInput(attrs={
'class': 'form-control',
'required': True
@@ -88,7 +96,16 @@ class InstallationReportForm(forms.ModelForm):
'min': '0',
'step': '0.0001',
}),
- # meter_reading and meter_charge removed from form UI
+ 'meter_reading': forms.NumberInput(attrs={
+ 'class': 'form-control',
+ 'min': '0',
+ 'step': '0.0001',
+ }),
+ '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',
@@ -98,26 +115,27 @@ class InstallationReportForm(forms.ModelForm):
'id': 'id_water_meter_manufacturer',
'required': True
}),
- # sim_number and driving_force removed from form UI
- 'pump_type': forms.Select(attrs={
- 'class': 'form-select',
+ 'sim_number': forms.TextInput(attrs={
+ 'class': 'form-control',
'required': True
}),
- 'licence_working_hour': forms.NumberInput(attrs={
+ 'driving_force': forms.TextInput(attrs={
'class': 'form-control',
- 'min': '0',
- 'step': '1',
'required': True
}),
'is_meter_suspicious': forms.CheckboxInput(attrs={
'class': 'form-check-input',
'id': 'id_is_meter_suspicious',
}),
- # is_panel_sealed removed from form UI
+ 'is_panel_sealed': forms.CheckboxInput(attrs={
+ 'class': 'form-check-input',
+ }),
'is_panel_cut': forms.CheckboxInput(attrs={
'class': 'form-check-input',
}),
- # is_disconnection_done removed from form UI
+ 'is_disconnection_done': forms.CheckboxInput(attrs={
+ 'class': 'form-check-input',
+ }),
'description': forms.Textarea(attrs={
'class': 'form-control',
'rows': 3
@@ -126,22 +144,27 @@ class InstallationReportForm(forms.ModelForm):
labels = {
'visited_date': 'تاریخ مراجعه',
- 'new_water_meter_serial': 'سریال کنتور',
+ 'new_water_meter_serial': 'سریال کنتور جدید',
'seal_number': 'شماره پلمپ',
'utm_x': 'UTM X',
'utm_y': 'UTM Y',
'meter_type': 'نوع کنتور',
+ 'meter_size': 'سایز کنتور',
'discharge_pipe_diameter': 'قطر لوله آبده (اینچ)',
'usage_type': 'نوع مصرف',
'exploitation_license_number': 'شماره پروانه بهرهبرداری',
- 'motor_power': 'توان مصرفی (کیلووات)',
- 'flow_rate': 'دبی بعد از کالیبراسیون (لیتر بر ثانیه)',
+ 'motor_power': 'قدرت موتور (کیلووات ساعت)',
+ 'flow_rate': 'دبی (لیتر بر ثانیه)',
+ 'meter_reading': 'عدد کنتور (متر مکعب)',
+ 'meter_charge': 'شارژ کنتور (متر مکعب)',
'meter_charge_expiration_date': 'تاریخ پایان اعتبار شارژ',
- 'pump_type': 'نوع پمپ',
- 'licence_working_hour': 'ساعت کارکرد پروانه',
'water_meter_manufacturer': 'شرکت سازنده کنتور',
+ 'sim_number': 'شماره سیمکارت',
+ 'driving_force': 'نیرو محرکه چاه',
'is_meter_suspicious': 'کنتور مشکوک است',
+ 'is_panel_sealed': 'پلمپ تابلو',
'is_panel_cut': 'تابلو قطع',
+ 'is_disconnection_done': 'انجام عملیات قطع',
'description': 'توضیحات'
}
diff --git a/installations/migrations/0014_installationreport_licence_working_hour_and_more.py b/installations/migrations/0014_installationreport_licence_working_hour_and_more.py
deleted file mode 100644
index f77fb6a..0000000
--- a/installations/migrations/0014_installationreport_licence_working_hour_and_more.py
+++ /dev/null
@@ -1,38 +0,0 @@
-# Generated by Django 5.2.4 on 2025-11-23 08:57
-
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('installations', '0013_remove_installationreport_post_calibration_flow_rate_and_more'),
- ]
-
- operations = [
- migrations.AddField(
- model_name='installationreport',
- name='licence_working_hour',
- field=models.PositiveIntegerField(blank=True, null=True, verbose_name='ساعت کارکرد پروانه'),
- ),
- migrations.AddField(
- model_name='installationreport',
- name='pump_type',
- field=models.CharField(blank=True, choices=[('shaft_sleeve', 'شفت و غلاف'), ('submersible', 'شناور')], max_length=20, null=True, verbose_name='نوع پمپ'),
- ),
- migrations.AlterField(
- model_name='installationreport',
- name='flow_rate',
- field=models.DecimalField(blank=True, decimal_places=4, max_digits=10, null=True, verbose_name='(لیتر بر ثانیه)دبی بعد از کالیبراسیون'),
- ),
- migrations.AlterField(
- model_name='installationreport',
- name='motor_power',
- field=models.DecimalField(blank=True, decimal_places=4, max_digits=10, null=True, verbose_name='(کیلووات)توان مصرفی'),
- ),
- migrations.AlterField(
- model_name='installationreport',
- name='new_water_meter_serial',
- field=models.CharField(blank=True, max_length=50, null=True, verbose_name='سریال کنتور'),
- ),
- ]
diff --git a/installations/models.py b/installations/models.py
index 9761ae3..ae86340 100644
--- a/installations/models.py
+++ b/installations/models.py
@@ -41,7 +41,7 @@ class InstallationReport(BaseModel):
related_name='reports', verbose_name='اختصاص'
)
visited_date = models.DateField(null=True, blank=True, verbose_name='تاریخ مراجعه')
- new_water_meter_serial = models.CharField(max_length=50, null=True, blank=True, verbose_name='سریال کنتور')
+ new_water_meter_serial = models.CharField(max_length=50, null=True, blank=True, verbose_name='سریال کنتور جدید')
seal_number = models.CharField(max_length=50, null=True, blank=True, verbose_name='شماره پلمپ')
is_meter_suspicious = models.BooleanField(default=False, verbose_name='کنتور مشکوک است؟')
METER_TYPE_CHOICES = [
@@ -61,12 +61,6 @@ class InstallationReport(BaseModel):
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='انجام عملیات قطع')
- PUMP_TYPE_CHOICES = [
- ('shaft_sleeve', 'شفت و غلاف'),
- ('submersible', 'شناور'),
- ]
- pump_type = models.CharField(max_length=20, choices=PUMP_TYPE_CHOICES, null=True, blank=True, verbose_name='نوع پمپ')
- licence_working_hour = models.PositiveIntegerField(null=True, blank=True, verbose_name='ساعت کارکرد پروانه')
discharge_pipe_diameter = models.DecimalField(max_digits=10, decimal_places=4, null=True, blank=True, verbose_name='قطر لوله آبده (اینچ)')
USAGE_TYPE_CHOICES = [
('domestic', 'شرب و خدمات'),
@@ -75,8 +69,8 @@ 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='(کیلووات)توان مصرفی')
- flow_rate = models.DecimalField(max_digits=10, decimal_places=4, null=True, blank=True, verbose_name='(لیتر بر ثانیه)دبی بعد از کالیبراسیون')
+ motor_power = 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='نیرو محرکه چاه')
diff --git a/installations/templates/installations/installation_report_step.html b/installations/templates/installations/installation_report_step.html
index 9aa11c3..fbd0405 100644
--- a/installations/templates/installations/installation_report_step.html
+++ b/installations/templates/installations/installation_report_step.html
@@ -146,23 +146,33 @@
تاریخ مراجعه: {{ report.visited_date|to_jalali|default:'-' }}
-
سریال کنتور: {{ report.new_water_meter_serial|default:'-' }}
+
سریال جدید: {{ report.new_water_meter_serial|default:'-' }}
شماره پلمپ: {{ report.seal_number|default:'-' }}
نوع کنتور: {{ report.get_meter_type_display|default:'-' }}
+ {% if report.meter_type == 'smart' %}
+
مدل کنتور: {{ report.get_meter_model_display|default:'-' }}
+ {% else %}
+
سایز کنتور: {{ report.meter_size|default:'-' }}
+ {% endif %}
قطر لوله آبده (اینچ): {{ report.discharge_pipe_diameter|default:'-' }}
-
شرکت سازنده کنتور: {{ report.water_meter_manufacturer.name|default:'-' }}
+
سازنده کنتور: {{ report.water_meter_manufacturer|default:'-' }}
+
شماره سیمکارت: {{ report.sim_number|default:'-' }}
+
نیرو محرکه چاه: {{ report.driving_force|default:'-' }}
+
شارژ کنتور (متر مکعب): {{ report.meter_charge|default:'-' }}
پایان اعتبار شارژ: {{ report.meter_charge_expiration_date|to_jalali|default:'-' }}
-
کنتور مشکوک: {{ report.is_meter_suspicious|yesno:'بله,خیر' }}
-
UTM X: {{ report.utm_x|default:'-' }} Y: {{ report.utm_y|default:'-' }}
+
کنتور مشکوک: {{ report.is_meter_suspicious|yesno:'بله,خیر' }}
+
UTM X: {{ report.utm_x|default:'-' }}
+
UTM Y: {{ report.utm_y|default:'-' }}
نوع مصرف: {{ report.get_usage_type_display|default:'-' }}
شماره پروانه بهرهبرداری: {{ report.exploitation_license_number|default:'-' }}
-
توان مصرفی (کیلووات): {{ report.motor_power|default:'-' }}
-
دبی بعد از کالیبراسیون (لیتر بر ثانیه): {{ report.flow_rate|default:'-' }}
-
نوع پمپ: {{ report.get_pump_type_display|default:'-' }}
-
ساعت کارکرد پروانه: {{ report.licence_working_hour|default:'-' }}
+
قدرت موتور (کیلووات ساعت): {{ report.motor_power|default:'-' }}
+
دبی (لیتر/ثانیه): {{ report.flow_rate|default:'-' }}
+
عدد کنتور (متر مکعب): {{ report.meter_reading|default:'-' }}
+
پلمپ تابلو: {{ report.is_panel_sealed|yesno:'بله,خیر' }}
تابلو قطع: {{ report.is_panel_cut|yesno:'بله,خیر' }}
+
انجام عملیات قطع: {{ report.is_disconnection_done|yesno:'بله,خیر' }}
@@ -341,7 +351,20 @@
{{ form.meter_type.errors.0 }}
{% endif %}
{{ form.meter_charge_expiration_date.label_tag }}
@@ -387,7 +423,7 @@
{% endif %}