diff --git a/accounts/forms.py b/accounts/forms.py index eca6ffc..e5f3b90 100644 --- a/accounts/forms.py +++ b/accounts/forms.py @@ -64,25 +64,21 @@ class CustomerForm(forms.ModelForm): 'address': forms.Textarea(attrs={ 'class': 'form-control', 'placeholder': 'آدرس کامل', - 'rows': '3', - 'required': True + 'rows': '3' }), 'card_number': forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'شماره کارت بانکی', - 'maxlength': '16', - 'required': True + 'maxlength': '16' }), 'account_number': forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'شماره حساب بانکی', - 'maxlength': '20', - 'required': True + 'maxlength': '20' }), 'bank_name': forms.Select(attrs={ 'class': 'form-control', 'placeholder': 'نام بانک', - 'required': True }), } labels = { diff --git a/accounts/migrations/0009_alter_historicalprofile_account_number_and_more.py b/accounts/migrations/0009_alter_historicalprofile_account_number_and_more.py deleted file mode 100644 index b9e015a..0000000 --- a/accounts/migrations/0009_alter_historicalprofile_account_number_and_more.py +++ /dev/null @@ -1,74 +0,0 @@ -# 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, - ), - ] diff --git a/accounts/models.py b/accounts/models.py index b896581..f6ccf3d 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -27,7 +27,9 @@ class Profile(BaseModel): ) national_code = models.CharField( max_length=10, + null=True, verbose_name="کد ملی", + blank=True, validators=[ RegexValidator( regex=r'^\d+$', @@ -37,11 +39,15 @@ class Profile(BaseModel): ] ) address = models.TextField( + null=True, verbose_name="آدرس", + blank=True ) card_number = models.CharField( max_length=16, + null=True, verbose_name="شماره کارت", + blank=True, validators=[ RegexValidator( regex=r'^\d+$', @@ -52,7 +58,9 @@ class Profile(BaseModel): ) account_number = models.CharField( max_length=20, + null=True, verbose_name="شماره حساب", + blank=True, validators=[ RegexValidator( regex=r'^\d+$', @@ -64,7 +72,9 @@ class Profile(BaseModel): bank_name = models.CharField( max_length=255, choices=BANK_CHOICES, + null=True, verbose_name="نام بانک", + blank=True ) phone_number_1 = models.CharField( max_length=11, diff --git a/db.sqlite3 b/db.sqlite3 index d314803..02dd5e4 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/installations/forms.py b/installations/forms.py index 86e7428..ae1a13c 100644 --- a/installations/forms.py +++ b/installations/forms.py @@ -34,29 +34,24 @@ class InstallationReportForm(forms.ModelForm): 'required': True }), 'new_water_meter_serial': forms.TextInput(attrs={ - 'class': 'form-control', - 'required': True + 'class': 'form-control' }), 'seal_number': forms.TextInput(attrs={ - 'class': 'form-control', - 'required': True + 'class': 'form-control' }), 'utm_x': forms.NumberInput(attrs={ 'class': 'form-control', - 'step': '1', - 'required': True + 'step': '1' }), 'utm_y': forms.NumberInput(attrs={ 'class': 'form-control', - 'step': '1', - 'required': True + 'step': '1' }), 'meter_type': forms.Select(attrs={ - 'class': 'form-select', - 'required': True + 'class': 'form-select' }, choices=[ ('', 'انتخاب کنید'), - ('smart', 'هوشمند (آب و برق)'), + ('smart', 'هوشمند (آبی/برق)'), ('volumetric', 'حجمی') ]), 'meter_size': forms.TextInput(attrs={ @@ -65,12 +60,10 @@ class InstallationReportForm(forms.ModelForm): 'discharge_pipe_diameter': forms.NumberInput(attrs={ 'class': 'form-control', 'min': '0', - 'step': '1', - 'required': True + 'step': '1' }), 'usage_type': forms.Select(attrs={ - 'class': 'form-select', - 'required': True + 'class': 'form-select' }, choices=[ ('', 'انتخاب کنید'), ('domestic', 'شرب و خدمات'), @@ -84,37 +77,31 @@ class InstallationReportForm(forms.ModelForm): 'motor_power': forms.NumberInput(attrs={ 'class': 'form-control', 'min': '0', - 'step': '1', - 'required': True + 'step': '1' }), 'pre_calibration_flow_rate': forms.NumberInput(attrs={ 'class': 'form-control', 'min': '0', - 'step': '0.01', - 'required': True + 'step': '0.01' }), 'post_calibration_flow_rate': forms.NumberInput(attrs={ 'class': 'form-control', 'min': '0', - 'step': '0.01', - 'required': True + 'step': '0.01' }), 'water_meter_manufacturer': forms.Select(attrs={ 'class': 'form-select', - 'id': 'id_water_meter_manufacturer', - 'required': True + 'id': 'id_water_meter_manufacturer' }), 'sim_number': forms.TextInput(attrs={ - 'class': 'form-control', - 'required': True + 'class': 'form-control' }), 'driving_force': forms.TextInput(attrs={ - 'class': 'form-control', - 'required': True + 'class': 'form-control' }), 'is_meter_suspicious': forms.CheckboxInput(attrs={ 'class': 'form-check-input', - 'id': 'id_is_meter_suspicious', + 'id': 'id_is_meter_suspicious' }), 'description': forms.Textarea(attrs={ 'class': 'form-control', diff --git a/wells/forms.py b/wells/forms.py index 8c132ca..7917117 100644 --- a/wells/forms.py +++ b/wells/forms.py @@ -83,10 +83,12 @@ class WellForm(forms.ModelForm): 'utm_x': forms.NumberInput(attrs={ 'class': 'form-control', 'placeholder': 'X UTM', + 'required': 'required', }), 'utm_y': forms.NumberInput(attrs={ 'class': 'form-control', 'placeholder': 'Y UTM', + 'required': 'required', }), 'utm_zone': forms.NumberInput(attrs={ 'class': 'form-control', @@ -95,17 +97,17 @@ class WellForm(forms.ModelForm): 'max': '60' }), 'utm_hemisphere': forms.Select(attrs={ - 'class': 'form-select', + 'class': 'form-select' }), 'well_power': forms.NumberInput(attrs={ 'class': 'form-control', 'placeholder': 'قدرت چاه', - 'min': '0', - 'required': True + 'min': '0' }), 'reference_letter_number': forms.TextInput(attrs={ 'class': 'form-control', 'placeholder': 'شماره معرفی نامه', + 'required': True }), 'reference_letter_date': forms.DateInput(attrs={ 'class': 'form-control', diff --git a/wells/migrations/0006_alter_historicalwell_utm_x_and_more.py b/wells/migrations/0006_alter_historicalwell_utm_x_and_more.py deleted file mode 100644 index 2383bae..0000000 --- a/wells/migrations/0006_alter_historicalwell_utm_x_and_more.py +++ /dev/null @@ -1,43 +0,0 @@ -# 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='قدرت چاه'), - ), - ] diff --git a/wells/models.py b/wells/models.py index 2af3d8e..c82f052 100644 --- a/wells/models.py +++ b/wells/models.py @@ -80,15 +80,11 @@ class Well(SluggedModel): max_digits=10, decimal_places=0, verbose_name="X UTM", - null=True, - blank=True ) utm_y = models.DecimalField( max_digits=10, decimal_places=0, verbose_name="Y UTM", - null=True, - blank=True ) utm_zone = models.PositiveIntegerField( verbose_name="زون UTM", @@ -107,6 +103,8 @@ class Well(SluggedModel): well_power = models.PositiveIntegerField( verbose_name="قدرت چاه", + null=True, + blank=True ) reference_letter_number = models.CharField(