Compare commits

...

2 commits

Author SHA1 Message Date
d22473e14a add requiered field 2025-10-04 14:18:21 +03:30
001dc313f6 add requiered field 2025-10-04 14:05:33 +03:30
8 changed files with 159 additions and 35 deletions

View file

@ -64,21 +64,25 @@ class CustomerForm(forms.ModelForm):
'address': forms.Textarea(attrs={ 'address': forms.Textarea(attrs={
'class': 'form-control', 'class': 'form-control',
'placeholder': 'آدرس کامل', 'placeholder': 'آدرس کامل',
'rows': '3' 'rows': '3',
'required': True
}), }),
'card_number': forms.TextInput(attrs={ 'card_number': forms.TextInput(attrs={
'class': 'form-control', 'class': 'form-control',
'placeholder': 'شماره کارت بانکی', 'placeholder': 'شماره کارت بانکی',
'maxlength': '16' 'maxlength': '16',
'required': True
}), }),
'account_number': forms.TextInput(attrs={ 'account_number': forms.TextInput(attrs={
'class': 'form-control', 'class': 'form-control',
'placeholder': 'شماره حساب بانکی', 'placeholder': 'شماره حساب بانکی',
'maxlength': '20' 'maxlength': '20',
'required': True
}), }),
'bank_name': forms.Select(attrs={ 'bank_name': forms.Select(attrs={
'class': 'form-control', 'class': 'form-control',
'placeholder': 'نام بانک', 'placeholder': 'نام بانک',
'required': True
}), }),
} }
labels = { labels = {

View file

@ -0,0 +1,74 @@
# Generated by Django 5.2.4 on 2025-10-04 10:36
import django.core.validators
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('accounts', '0008_alter_historicalprofile_phone_number_1_and_more'),
]
operations = [
migrations.AlterField(
model_name='historicalprofile',
name='account_number',
field=models.CharField(default=1, max_length=20, validators=[django.core.validators.RegexValidator(code='invalid_account_number', message='شماره حساب باید فقط شامل اعداد باشد.', regex='^\\d+$')], verbose_name='شماره حساب'),
preserve_default=False,
),
migrations.AlterField(
model_name='historicalprofile',
name='address',
field=models.TextField(default=1, verbose_name='آدرس'),
preserve_default=False,
),
migrations.AlterField(
model_name='historicalprofile',
name='bank_name',
field=models.CharField(choices=[('mellat', 'بانک ملت'), ('saman', 'بانک سامان'), ('parsian', 'بانک پارسیان'), ('sina', 'بانک سینا'), ('tejarat', 'بانک تجارت'), ('tosee', 'بانک توسعه'), ('iran_zamin', 'بانک ایران زمین'), ('meli', 'بانک ملی'), ('saderat', 'بانک توسعه صادرات'), ('iran_zamin', 'بانک ایران زمین'), ('refah', 'بانک رفاه'), ('eghtesad_novin', 'بانک اقتصاد نوین'), ('pasargad', 'بانک پاسارگاد'), ('other', 'سایر')], default=1, max_length=255, verbose_name='نام بانک'),
preserve_default=False,
),
migrations.AlterField(
model_name='historicalprofile',
name='card_number',
field=models.CharField(default=1, max_length=16, validators=[django.core.validators.RegexValidator(code='invalid_card_number', message='شماره کارت باید فقط شامل اعداد باشد.', regex='^\\d+$')], verbose_name='شماره کارت'),
preserve_default=False,
),
migrations.AlterField(
model_name='historicalprofile',
name='national_code',
field=models.CharField(default=1, max_length=10, validators=[django.core.validators.RegexValidator(code='invalid_national_code', message='کد ملی باید فقط شامل اعداد باشد.', regex='^\\d+$')], verbose_name='کد ملی'),
preserve_default=False,
),
migrations.AlterField(
model_name='profile',
name='account_number',
field=models.CharField(default=1, max_length=20, validators=[django.core.validators.RegexValidator(code='invalid_account_number', message='شماره حساب باید فقط شامل اعداد باشد.', regex='^\\d+$')], verbose_name='شماره حساب'),
preserve_default=False,
),
migrations.AlterField(
model_name='profile',
name='address',
field=models.TextField(default=1, verbose_name='آدرس'),
preserve_default=False,
),
migrations.AlterField(
model_name='profile',
name='bank_name',
field=models.CharField(choices=[('mellat', 'بانک ملت'), ('saman', 'بانک سامان'), ('parsian', 'بانک پارسیان'), ('sina', 'بانک سینا'), ('tejarat', 'بانک تجارت'), ('tosee', 'بانک توسعه'), ('iran_zamin', 'بانک ایران زمین'), ('meli', 'بانک ملی'), ('saderat', 'بانک توسعه صادرات'), ('iran_zamin', 'بانک ایران زمین'), ('refah', 'بانک رفاه'), ('eghtesad_novin', 'بانک اقتصاد نوین'), ('pasargad', 'بانک پاسارگاد'), ('other', 'سایر')], default=1, max_length=255, verbose_name='نام بانک'),
preserve_default=False,
),
migrations.AlterField(
model_name='profile',
name='card_number',
field=models.CharField(default=1, max_length=16, validators=[django.core.validators.RegexValidator(code='invalid_card_number', message='شماره کارت باید فقط شامل اعداد باشد.', regex='^\\d+$')], verbose_name='شماره کارت'),
preserve_default=False,
),
migrations.AlterField(
model_name='profile',
name='national_code',
field=models.CharField(default=1, max_length=10, validators=[django.core.validators.RegexValidator(code='invalid_national_code', message='کد ملی باید فقط شامل اعداد باشد.', regex='^\\d+$')], verbose_name='کد ملی'),
preserve_default=False,
),
]

View file

@ -27,9 +27,7 @@ class Profile(BaseModel):
) )
national_code = models.CharField( national_code = models.CharField(
max_length=10, max_length=10,
null=True,
verbose_name="کد ملی", verbose_name="کد ملی",
blank=True,
validators=[ validators=[
RegexValidator( RegexValidator(
regex=r'^\d+$', regex=r'^\d+$',
@ -39,15 +37,11 @@ class Profile(BaseModel):
] ]
) )
address = models.TextField( address = models.TextField(
null=True,
verbose_name="آدرس", verbose_name="آدرس",
blank=True
) )
card_number = models.CharField( card_number = models.CharField(
max_length=16, max_length=16,
null=True,
verbose_name="شماره کارت", verbose_name="شماره کارت",
blank=True,
validators=[ validators=[
RegexValidator( RegexValidator(
regex=r'^\d+$', regex=r'^\d+$',
@ -58,9 +52,7 @@ class Profile(BaseModel):
) )
account_number = models.CharField( account_number = models.CharField(
max_length=20, max_length=20,
null=True,
verbose_name="شماره حساب", verbose_name="شماره حساب",
blank=True,
validators=[ validators=[
RegexValidator( RegexValidator(
regex=r'^\d+$', regex=r'^\d+$',
@ -72,9 +64,7 @@ class Profile(BaseModel):
bank_name = models.CharField( bank_name = models.CharField(
max_length=255, max_length=255,
choices=BANK_CHOICES, choices=BANK_CHOICES,
null=True,
verbose_name="نام بانک", verbose_name="نام بانک",
blank=True
) )
phone_number_1 = models.CharField( phone_number_1 = models.CharField(
max_length=11, max_length=11,

Binary file not shown.

View file

@ -34,24 +34,29 @@ class InstallationReportForm(forms.ModelForm):
'required': True 'required': True
}), }),
'new_water_meter_serial': forms.TextInput(attrs={ 'new_water_meter_serial': forms.TextInput(attrs={
'class': 'form-control' 'class': 'form-control',
'required': True
}), }),
'seal_number': forms.TextInput(attrs={ 'seal_number': forms.TextInput(attrs={
'class': 'form-control' 'class': 'form-control',
'required': True
}), }),
'utm_x': forms.NumberInput(attrs={ 'utm_x': forms.NumberInput(attrs={
'class': 'form-control', 'class': 'form-control',
'step': '1' 'step': '1',
'required': True
}), }),
'utm_y': forms.NumberInput(attrs={ 'utm_y': forms.NumberInput(attrs={
'class': 'form-control', 'class': 'form-control',
'step': '1' 'step': '1',
'required': True
}), }),
'meter_type': forms.Select(attrs={ 'meter_type': forms.Select(attrs={
'class': 'form-select' 'class': 'form-select',
'required': True
}, choices=[ }, choices=[
('', 'انتخاب کنید'), ('', 'انتخاب کنید'),
('smart', 'هوشمند (آبی/برق)'), ('smart', 'هوشمند (آب و برق)'),
('volumetric', 'حجمی') ('volumetric', 'حجمی')
]), ]),
'meter_size': forms.TextInput(attrs={ 'meter_size': forms.TextInput(attrs={
@ -60,10 +65,12 @@ class InstallationReportForm(forms.ModelForm):
'discharge_pipe_diameter': forms.NumberInput(attrs={ 'discharge_pipe_diameter': forms.NumberInput(attrs={
'class': 'form-control', 'class': 'form-control',
'min': '0', 'min': '0',
'step': '1' 'step': '1',
'required': True
}), }),
'usage_type': forms.Select(attrs={ 'usage_type': forms.Select(attrs={
'class': 'form-select' 'class': 'form-select',
'required': True
}, choices=[ }, choices=[
('', 'انتخاب کنید'), ('', 'انتخاب کنید'),
('domestic', 'شرب و خدمات'), ('domestic', 'شرب و خدمات'),
@ -77,31 +84,37 @@ class InstallationReportForm(forms.ModelForm):
'motor_power': forms.NumberInput(attrs={ 'motor_power': forms.NumberInput(attrs={
'class': 'form-control', 'class': 'form-control',
'min': '0', 'min': '0',
'step': '1' 'step': '1',
'required': True
}), }),
'pre_calibration_flow_rate': forms.NumberInput(attrs={ 'pre_calibration_flow_rate': forms.NumberInput(attrs={
'class': 'form-control', 'class': 'form-control',
'min': '0', 'min': '0',
'step': '0.01' 'step': '0.01',
'required': True
}), }),
'post_calibration_flow_rate': forms.NumberInput(attrs={ 'post_calibration_flow_rate': forms.NumberInput(attrs={
'class': 'form-control', 'class': 'form-control',
'min': '0', 'min': '0',
'step': '0.01' 'step': '0.01',
'required': True
}), }),
'water_meter_manufacturer': forms.Select(attrs={ 'water_meter_manufacturer': forms.Select(attrs={
'class': 'form-select', 'class': 'form-select',
'id': 'id_water_meter_manufacturer' 'id': 'id_water_meter_manufacturer',
'required': True
}), }),
'sim_number': forms.TextInput(attrs={ 'sim_number': forms.TextInput(attrs={
'class': 'form-control' 'class': 'form-control',
'required': True
}), }),
'driving_force': forms.TextInput(attrs={ 'driving_force': forms.TextInput(attrs={
'class': 'form-control' 'class': 'form-control',
'required': True
}), }),
'is_meter_suspicious': forms.CheckboxInput(attrs={ 'is_meter_suspicious': forms.CheckboxInput(attrs={
'class': 'form-check-input', 'class': 'form-check-input',
'id': 'id_is_meter_suspicious' 'id': 'id_is_meter_suspicious',
}), }),
'description': forms.Textarea(attrs={ 'description': forms.Textarea(attrs={
'class': 'form-control', 'class': 'form-control',

View file

@ -83,12 +83,10 @@ class WellForm(forms.ModelForm):
'utm_x': forms.NumberInput(attrs={ 'utm_x': forms.NumberInput(attrs={
'class': 'form-control', 'class': 'form-control',
'placeholder': 'X UTM', 'placeholder': 'X UTM',
'required': 'required',
}), }),
'utm_y': forms.NumberInput(attrs={ 'utm_y': forms.NumberInput(attrs={
'class': 'form-control', 'class': 'form-control',
'placeholder': 'Y UTM', 'placeholder': 'Y UTM',
'required': 'required',
}), }),
'utm_zone': forms.NumberInput(attrs={ 'utm_zone': forms.NumberInput(attrs={
'class': 'form-control', 'class': 'form-control',
@ -97,17 +95,17 @@ class WellForm(forms.ModelForm):
'max': '60' 'max': '60'
}), }),
'utm_hemisphere': forms.Select(attrs={ 'utm_hemisphere': forms.Select(attrs={
'class': 'form-select' 'class': 'form-select',
}), }),
'well_power': forms.NumberInput(attrs={ 'well_power': forms.NumberInput(attrs={
'class': 'form-control', 'class': 'form-control',
'placeholder': 'قدرت چاه', 'placeholder': 'قدرت چاه',
'min': '0' 'min': '0',
'required': True
}), }),
'reference_letter_number': forms.TextInput(attrs={ 'reference_letter_number': forms.TextInput(attrs={
'class': 'form-control', 'class': 'form-control',
'placeholder': 'شماره معرفی نامه', 'placeholder': 'شماره معرفی نامه',
'required': True
}), }),
'reference_letter_date': forms.DateInput(attrs={ 'reference_letter_date': forms.DateInput(attrs={
'class': 'form-control', 'class': 'form-control',

View file

@ -0,0 +1,43 @@
# Generated by Django 5.2.4 on 2025-10-04 10:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('wells', '0005_alter_historicalwell_utm_x_and_more'),
]
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='historicalwell',
name='well_power',
field=models.PositiveIntegerField(verbose_name='قدرت چاه'),
),
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'),
),
migrations.AlterField(
model_name='well',
name='well_power',
field=models.PositiveIntegerField(verbose_name='قدرت چاه'),
),
]

View file

@ -80,11 +80,15 @@ class Well(SluggedModel):
max_digits=10, max_digits=10,
decimal_places=0, decimal_places=0,
verbose_name="X UTM", verbose_name="X UTM",
null=True,
blank=True
) )
utm_y = models.DecimalField( utm_y = models.DecimalField(
max_digits=10, max_digits=10,
decimal_places=0, decimal_places=0,
verbose_name="Y UTM", verbose_name="Y UTM",
null=True,
blank=True
) )
utm_zone = models.PositiveIntegerField( utm_zone = models.PositiveIntegerField(
verbose_name="زون UTM", verbose_name="زون UTM",
@ -103,8 +107,6 @@ class Well(SluggedModel):
well_power = models.PositiveIntegerField( well_power = models.PositiveIntegerField(
verbose_name="قدرت چاه", verbose_name="قدرت چاه",
null=True,
blank=True
) )
reference_letter_number = models.CharField( reference_letter_number = models.CharField(