diff --git a/certificates/templates/certificates/step.html b/certificates/templates/certificates/step.html
index 8696e6c..917183a 100644
--- a/certificates/templates/certificates/step.html
+++ b/certificates/templates/certificates/step.html
@@ -75,29 +75,23 @@
diff --git a/certificates/views.py b/certificates/views.py
index 26a5d6f..68ca5b0 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).order_by('-created').first()
+ template = CertificateTemplate.objects.filter(is_active=True, company=instance.broker.company).order_by('-created').first()
if not template:
return render(request, 'certificates/missing.html', {})
diff --git a/db.sqlite3 b/db.sqlite3
index 746ab0f..4bedcf3 100644
Binary files a/db.sqlite3 and b/db.sqlite3 differ
diff --git a/installations/admin.py b/installations/admin.py
index 2a2f779..b32240b 100644
--- a/installations/admin.py
+++ b/installations/admin.py
@@ -25,11 +25,12 @@ 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', 'usage_type', 'water_meter_manufacturer')
+ 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')
search_fields = (
'assignment__process_instance__code', 'new_water_meter_serial', 'seal_number', 'exploitation_license_number', 'sim_number'
)
@@ -50,7 +51,7 @@ class InstallationReportAdmin(admin.ModelAdmin):
'fields': ('usage_type', 'exploitation_license_number')
}),
('توان و محرکه', {
- 'fields': ('driving_force', 'motor_power')
+ 'fields': ('driving_force', 'motor_power', 'pump_type', 'licence_working_hour')
}),
('وضعیت تابلو/قطع', {
'fields': ('is_panel_sealed', 'is_panel_cut', 'is_disconnection_done')
diff --git a/installations/forms.py b/installations/forms.py
index 4c30a5f..d2483e7 100644
--- a/installations/forms.py
+++ b/installations/forms.py
@@ -20,11 +20,12 @@ class InstallationReportForm(forms.ModelForm):
model = InstallationReport
fields = [
'visited_date', 'new_water_meter_serial', 'seal_number',
- 'utm_x', 'utm_y', 'meter_type', 'meter_size', 'meter_model',
+ 'utm_x', 'utm_y', 'meter_type',
'discharge_pipe_diameter', 'usage_type', 'exploitation_license_number',
- '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',
+ 'motor_power', 'flow_rate', 'meter_charge_expiration_date',
+ 'pump_type', 'licence_working_hour',
+ 'is_panel_cut',
+ 'water_meter_manufacturer',
'is_meter_suspicious', 'description'
]
@@ -60,16 +61,7 @@ class InstallationReportForm(forms.ModelForm):
('smart', 'هوشمند (آب و برق)'),
('volumetric', 'حجمی')
]),
- 'meter_size': forms.TextInput(attrs={
- 'class': 'form-control'
- }),
- 'meter_model': forms.Select(attrs={
- 'class': 'form-select'
- }, choices=[
- ('', 'انتخاب کنید'),
- ('direct', 'مستقیم'),
- ('indirect', 'غیرمستقیم')
- ]),
+ # meter_size and meter_model removed from form UI
'discharge_pipe_diameter': forms.NumberInput(attrs={
'class': 'form-control',
'required': True
@@ -96,16 +88,7 @@ class InstallationReportForm(forms.ModelForm):
'min': '0',
'step': '0.0001',
}),
- '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_reading and meter_charge removed from form UI
'meter_charge_expiration_date': forms.DateInput(attrs={
'type': 'date',
'class': 'form-control',
@@ -115,27 +98,26 @@ class InstallationReportForm(forms.ModelForm):
'id': 'id_water_meter_manufacturer',
'required': True
}),
- 'sim_number': forms.TextInput(attrs={
- 'class': 'form-control',
+ # sim_number and driving_force removed from form UI
+ 'pump_type': forms.Select(attrs={
+ 'class': 'form-select',
'required': True
}),
- 'driving_force': forms.TextInput(attrs={
+ 'licence_working_hour': forms.NumberInput(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': forms.CheckboxInput(attrs={
- 'class': 'form-check-input',
- }),
+ # is_panel_sealed removed from form UI
'is_panel_cut': forms.CheckboxInput(attrs={
'class': 'form-check-input',
}),
- 'is_disconnection_done': forms.CheckboxInput(attrs={
- 'class': 'form-check-input',
- }),
+ # is_disconnection_done removed from form UI
'description': forms.Textarea(attrs={
'class': 'form-control',
'rows': 3
@@ -144,27 +126,22 @@ 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': 'دبی (لیتر بر ثانیه)',
- 'meter_reading': 'عدد کنتور (متر مکعب)',
- 'meter_charge': 'شارژ کنتور (متر مکعب)',
+ 'motor_power': 'توان مصرفی (کیلووات)',
+ 'flow_rate': 'دبی بعد از کالیبراسیون (لیتر بر ثانیه)',
'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
new file mode 100644
index 0000000..f77fb6a
--- /dev/null
+++ b/installations/migrations/0014_installationreport_licence_working_hour_and_more.py
@@ -0,0 +1,38 @@
+# 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 ae86340..9761ae3 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,6 +61,12 @@ 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', 'شرب و خدمات'),
@@ -69,8 +75,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 fbd0405..9aa11c3 100644
--- a/installations/templates/installations/installation_report_step.html
+++ b/installations/templates/installations/installation_report_step.html
@@ -146,33 +146,23 @@
تاریخ مراجعه: {{ 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|default:'-' }}
-
شماره سیمکارت: {{ report.sim_number|default:'-' }}
-
نیرو محرکه چاه: {{ report.driving_force|default:'-' }}
-
شارژ کنتور (متر مکعب): {{ report.meter_charge|default:'-' }}
+
شرکت سازنده کنتور: {{ report.water_meter_manufacturer.name|default:'-' }}
پایان اعتبار شارژ: {{ report.meter_charge_expiration_date|to_jalali|default:'-' }}
+
کنتور مشکوک: {{ report.is_meter_suspicious|yesno:'بله,خیر' }}
-
کنتور مشکوک: {{ report.is_meter_suspicious|yesno:'بله,خیر' }}
-
UTM X: {{ report.utm_x|default:'-' }}
-
UTM Y: {{ report.utm_y|default:'-' }}
+
UTM X: {{ report.utm_x|default:'-' }} 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.meter_reading|default:'-' }}
-
پلمپ تابلو: {{ report.is_panel_sealed|yesno:'بله,خیر' }}
+
توان مصرفی (کیلووات): {{ report.motor_power|default:'-' }}
+
دبی بعد از کالیبراسیون (لیتر بر ثانیه): {{ report.flow_rate|default:'-' }}
+
نوع پمپ: {{ report.get_pump_type_display|default:'-' }}
+
ساعت کارکرد پروانه: {{ report.licence_working_hour|default:'-' }}
تابلو قطع: {{ report.is_panel_cut|yesno:'بله,خیر' }}
-
انجام عملیات قطع: {{ report.is_disconnection_done|yesno:'بله,خیر' }}
@@ -351,20 +341,7 @@
{{ form.meter_type.errors.0 }}
{% endif %}
{{ form.meter_charge_expiration_date.label_tag }}
@@ -423,7 +387,7 @@
{% endif %}