This commit is contained in:
aminhashemi92 2025-09-29 17:38:11 +03:30
parent 810c87e2e0
commit b5bf3a5dbe
51 changed files with 2397 additions and 326 deletions

View file

@ -104,7 +104,8 @@ class WellForm(forms.ModelForm):
}),
'reference_letter_number': forms.TextInput(attrs={
'class': 'form-control',
'placeholder': 'شماره معرفی نامه'
'placeholder': 'شماره معرفی نامه',
'required': True
}),
'reference_letter_date': forms.DateInput(attrs={
'class': 'form-control',

View file

@ -0,0 +1,33 @@
# Generated by Django 5.2.4 on 2025-09-21 07:37
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wells', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='historicalwell',
name='utm_x',
field=models.DecimalField(blank=True, decimal_places=0, max_digits=10, null=True, verbose_name='X UTM'),
),
migrations.AlterField(
model_name='historicalwell',
name='utm_y',
field=models.DecimalField(blank=True, decimal_places=0, max_digits=10, null=True, verbose_name='Y UTM'),
),
migrations.AlterField(
model_name='well',
name='utm_x',
field=models.DecimalField(blank=True, decimal_places=0, max_digits=10, null=True, verbose_name='X UTM'),
),
migrations.AlterField(
model_name='well',
name='utm_y',
field=models.DecimalField(blank=True, decimal_places=0, max_digits=10, null=True, verbose_name='Y UTM'),
),
]

View file

@ -0,0 +1,113 @@
# Generated by Django 5.2.4 on 2025-09-24 11:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wells', '0002_alter_historicalwell_utm_x_and_more'),
]
operations = [
migrations.AddField(
model_name='historicalwell',
name='discharge_pipe_diameter',
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='قطر لوله آبده (اینچ)'),
),
migrations.AddField(
model_name='historicalwell',
name='driving_force',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='نیرو محرکه چاه'),
),
migrations.AddField(
model_name='historicalwell',
name='exploitation_license_number',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='شماره پروانه بهره\u200cبرداری چاه'),
),
migrations.AddField(
model_name='historicalwell',
name='meter_size',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='سایز کنتور'),
),
migrations.AddField(
model_name='historicalwell',
name='meter_type',
field=models.CharField(blank=True, choices=[('smart', 'هوشمند (آبی/برق)'), ('volumetric', 'حجمی')], max_length=20, null=True, verbose_name='نوع کنتور'),
),
migrations.AddField(
model_name='historicalwell',
name='motor_power',
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='(کیلووات ساعت)قدرت موتور'),
),
migrations.AddField(
model_name='historicalwell',
name='post_calibration_flow_rate',
field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='(لیتر بر ثانیه)دبی بعد از کالیبراسیون'),
),
migrations.AddField(
model_name='historicalwell',
name='pre_calibration_flow_rate',
field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='(لیتر بر ثانیه)دبی قبل از کالیبراسیون'),
),
migrations.AddField(
model_name='historicalwell',
name='sim_number',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='شماره سیمکارت'),
),
migrations.AddField(
model_name='historicalwell',
name='usage_type',
field=models.CharField(blank=True, choices=[('domestic', 'شرب و خدمات'), ('agriculture', 'کشاورزی'), ('industrial', 'صنعتی')], max_length=20, null=True, verbose_name='نوع مصرف'),
),
migrations.AddField(
model_name='well',
name='discharge_pipe_diameter',
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='قطر لوله آبده (اینچ)'),
),
migrations.AddField(
model_name='well',
name='driving_force',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='نیرو محرکه چاه'),
),
migrations.AddField(
model_name='well',
name='exploitation_license_number',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='شماره پروانه بهره\u200cبرداری چاه'),
),
migrations.AddField(
model_name='well',
name='meter_size',
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='سایز کنتور'),
),
migrations.AddField(
model_name='well',
name='meter_type',
field=models.CharField(blank=True, choices=[('smart', 'هوشمند (آبی/برق)'), ('volumetric', 'حجمی')], max_length=20, null=True, verbose_name='نوع کنتور'),
),
migrations.AddField(
model_name='well',
name='motor_power',
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='(کیلووات ساعت)قدرت موتور'),
),
migrations.AddField(
model_name='well',
name='post_calibration_flow_rate',
field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='(لیتر بر ثانیه)دبی بعد از کالیبراسیون'),
),
migrations.AddField(
model_name='well',
name='pre_calibration_flow_rate',
field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='(لیتر بر ثانیه)دبی قبل از کالیبراسیون'),
),
migrations.AddField(
model_name='well',
name='sim_number',
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='شماره سیمکارت'),
),
migrations.AddField(
model_name='well',
name='usage_type',
field=models.CharField(blank=True, choices=[('domestic', 'شرب و خدمات'), ('agriculture', 'کشاورزی'), ('industrial', 'صنعتی')], max_length=20, null=True, verbose_name='نوع مصرف'),
),
]

View file

@ -0,0 +1,93 @@
# Generated by Django 5.2.4 on 2025-09-24 11:15
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('wells', '0003_historicalwell_discharge_pipe_diameter_and_more'),
]
operations = [
migrations.RemoveField(
model_name='historicalwell',
name='discharge_pipe_diameter',
),
migrations.RemoveField(
model_name='historicalwell',
name='driving_force',
),
migrations.RemoveField(
model_name='historicalwell',
name='exploitation_license_number',
),
migrations.RemoveField(
model_name='historicalwell',
name='meter_size',
),
migrations.RemoveField(
model_name='historicalwell',
name='meter_type',
),
migrations.RemoveField(
model_name='historicalwell',
name='motor_power',
),
migrations.RemoveField(
model_name='historicalwell',
name='post_calibration_flow_rate',
),
migrations.RemoveField(
model_name='historicalwell',
name='pre_calibration_flow_rate',
),
migrations.RemoveField(
model_name='historicalwell',
name='sim_number',
),
migrations.RemoveField(
model_name='historicalwell',
name='usage_type',
),
migrations.RemoveField(
model_name='well',
name='discharge_pipe_diameter',
),
migrations.RemoveField(
model_name='well',
name='driving_force',
),
migrations.RemoveField(
model_name='well',
name='exploitation_license_number',
),
migrations.RemoveField(
model_name='well',
name='meter_size',
),
migrations.RemoveField(
model_name='well',
name='meter_type',
),
migrations.RemoveField(
model_name='well',
name='motor_power',
),
migrations.RemoveField(
model_name='well',
name='post_calibration_flow_rate',
),
migrations.RemoveField(
model_name='well',
name='pre_calibration_flow_rate',
),
migrations.RemoveField(
model_name='well',
name='sim_number',
),
migrations.RemoveField(
model_name='well',
name='usage_type',
),
]

View file

@ -15,7 +15,7 @@ from processes.utils import scope_wells_queryset
from processes.models import ProcessInstance
@login_required
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT])
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT, UserRoles.WATER_RESOURCE_MANAGER])
def well_list(request):
"""نمایش لیست چاه‌ها"""
base = Well.objects.select_related(
@ -40,7 +40,7 @@ def well_list(request):
@require_POST
@login_required
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT])
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT, UserRoles.WATER_RESOURCE_MANAGER])
def add_well_ajax(request):
"""AJAX endpoint for adding wells"""
try:
@ -98,7 +98,7 @@ def add_well_ajax(request):
@require_POST
@login_required
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT])
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT, UserRoles.WATER_RESOURCE_MANAGER])
def edit_well_ajax(request, well_id):
"""AJAX endpoint for editing wells"""
well = get_object_or_404(Well, id=well_id)
@ -154,7 +154,7 @@ def edit_well_ajax(request, well_id):
@require_POST
@login_required
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT])
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT, UserRoles.WATER_RESOURCE_MANAGER])
def delete_well(request, well_id):
"""حذف چاه"""
well = get_object_or_404(Well, id=well_id)
@ -199,7 +199,7 @@ def get_well_data(request, well_id):
@require_GET
@login_required
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT])
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT, UserRoles.WATER_RESOURCE_MANAGER])
def get_well_details(request, well_id):
"""جزئیات کامل چاه برای نمایش در مدال"""
well = get_object_or_404(
@ -260,7 +260,7 @@ def get_well_details(request, well_id):
@require_GET
@login_required
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT])
@allowed_roles([UserRoles.ADMIN, UserRoles.BROKER, UserRoles.MANAGER, UserRoles.ACCOUNTANT, UserRoles.WATER_RESOURCE_MANAGER])
def get_well_requests(request, well_id):
"""سوابق درخواست‌های مرتبط با یک چاه"""
# Scoped access: reuse base scoping by filtering on ProcessInstance via broker/affairs of current user if needed