From 246a2c07592ae8153a9ffcba1abf7eeb13ee3a5b Mon Sep 17 00:00:00 2001 From: aminhashemi92 Date: Sun, 7 Sep 2025 18:43:14 +0330 Subject: [PATCH] fix print and preview quote and add broker to req and complete company model. --- accounts/admin.py | 4 +- accounts/migrations/0002_company_broker.py | 20 ++ ...count_number_company_bank_name_and_more.py | 34 +++ .../migrations/0004_company_branch_name.py | 18 ++ accounts/models.py | 81 +++++- db.sqlite3 | Bin 2375680 -> 2392064 bytes .../invoices/quote_preview_step.html | 267 +++++++++++------ invoices/templates/invoices/quote_print.html | 262 ++++++++--------- invoices/templates/invoices/quote_step.html | 16 +- invoices/views.py | 7 +- locations/admin.py | 2 +- locations/migrations/0002_broker_company.py | 20 ++ .../migrations/0003_remove_broker_company.py | 17 ++ processes/admin.py | 7 +- .../migrations/0002_processinstance_broker.py | 20 ++ processes/models.py | 27 +- .../includes/instance_info_modal.html | 275 ++++++++++++++++++ processes/templatetags/processes_tags.py | 54 ++++ processes/views.py | 1 + 19 files changed, 872 insertions(+), 260 deletions(-) create mode 100644 accounts/migrations/0002_company_broker.py create mode 100644 accounts/migrations/0003_company_account_number_company_bank_name_and_more.py create mode 100644 accounts/migrations/0004_company_branch_name.py create mode 100644 locations/migrations/0002_broker_company.py create mode 100644 locations/migrations/0003_remove_broker_company.py create mode 100644 processes/migrations/0002_processinstance_broker.py create mode 100644 processes/templates/processes/includes/instance_info_modal.html diff --git a/accounts/admin.py b/accounts/admin.py index 1d58e16..5530abc 100644 --- a/accounts/admin.py +++ b/accounts/admin.py @@ -33,9 +33,9 @@ class ProfileAdmin(admin.ModelAdmin): @admin.register(Company) class CompanyAdmin(admin.ModelAdmin): - list_display = ['name', 'logo', 'signature', 'address', 'phone'] + list_display = ['name', 'logo', 'signature', 'address', 'phone', 'broker'] prepopulated_fields = {'slug': ('name',)} search_fields = ['name', 'address', 'phone'] - list_filter = ['is_active'] + list_filter = ['is_active', 'broker'] date_hierarchy = 'created' ordering = ['-created'] \ No newline at end of file diff --git a/accounts/migrations/0002_company_broker.py b/accounts/migrations/0002_company_broker.py new file mode 100644 index 0000000..df12560 --- /dev/null +++ b/accounts/migrations/0002_company_broker.py @@ -0,0 +1,20 @@ +# Generated by Django 5.2.4 on 2025-09-07 13:43 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0001_initial'), + ('locations', '0003_remove_broker_company'), + ] + + operations = [ + migrations.AddField( + model_name='company', + name='broker', + field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='company', to='locations.broker', verbose_name='کارگزار'), + ), + ] diff --git a/accounts/migrations/0003_company_account_number_company_bank_name_and_more.py b/accounts/migrations/0003_company_account_number_company_bank_name_and_more.py new file mode 100644 index 0000000..6e692ff --- /dev/null +++ b/accounts/migrations/0003_company_account_number_company_bank_name_and_more.py @@ -0,0 +1,34 @@ +# Generated by Django 5.2.4 on 2025-09-07 14:11 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0002_company_broker'), + ] + + operations = [ + migrations.AddField( + model_name='company', + name='account_number', + field=models.CharField(blank=True, max_length=20, null=True, validators=[django.core.validators.RegexValidator(code='invalid_account_number', message='شماره حساب باید فقط شامل اعداد باشد.', regex='^\\d+$')], verbose_name='شماره حساب'), + ), + migrations.AddField( + model_name='company', + name='bank_name', + field=models.CharField(blank=True, choices=[('mellat', 'بانک ملت'), ('saman', 'بانک سامان'), ('parsian', 'بانک پارسیان'), ('sina', 'بانک سینا'), ('tejarat', 'بانک تجارت'), ('tosee', 'بانک توسعه'), ('iran_zamin', 'بانک ایران زمین'), ('meli', 'بانک ملی'), ('saderat', 'بانک توسعه صادرات'), ('iran_zamin', 'بانک ایران زمین'), ('refah', 'بانک رفاه'), ('eghtesad_novin', 'بانک اقتصاد نوین'), ('pasargad', 'بانک پاسارگاد'), ('other', 'سایر')], max_length=255, null=True, verbose_name='نام بانک'), + ), + migrations.AddField( + model_name='company', + name='card_number', + field=models.CharField(blank=True, max_length=16, null=True, validators=[django.core.validators.RegexValidator(code='invalid_card_number', message='شماره کارت باید فقط شامل اعداد باشد.', regex='^\\d+$')], verbose_name='شماره کارت'), + ), + migrations.AddField( + model_name='company', + name='sheba_number', + field=models.CharField(blank=True, max_length=30, null=True, verbose_name='شماره شبا'), + ), + ] diff --git a/accounts/migrations/0004_company_branch_name.py b/accounts/migrations/0004_company_branch_name.py new file mode 100644 index 0000000..25114e1 --- /dev/null +++ b/accounts/migrations/0004_company_branch_name.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.4 on 2025-09-07 14:12 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0003_company_account_number_company_bank_name_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='company', + name='branch_name', + field=models.CharField(blank=True, max_length=255, null=True, verbose_name='شعبه بانک'), + ), + ] diff --git a/accounts/models.py b/accounts/models.py index a94311a..c1e78fd 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -181,11 +181,82 @@ class Profile(BaseModel): class Company(NameSlugModel): - logo = models.ImageField(upload_to='companies/logos', null=True, blank=True, verbose_name='لوگوی شرکت') - signature = models.ImageField(upload_to='companies/signatures', null=True, blank=True, verbose_name='امضای شرکت') - address = models.TextField(null=True, blank=True, verbose_name='آدرس') - phone = models.CharField(max_length=11, null=True, blank=True, verbose_name='شماره تماس') - + logo = models.ImageField( + upload_to='companies/logos', + null=True, + blank=True, + verbose_name='لوگوی شرکت' + ) + signature = models.ImageField( + upload_to='companies/signatures', + null=True, + blank=True, + verbose_name='امضای شرکت' + ) + address = models.TextField( + null=True, + blank=True, + verbose_name='آدرس' + ) + phone = models.CharField( + max_length=11, + null=True, + blank=True, + verbose_name='شماره تماس' + ) + broker = models.OneToOneField( + Broker, + on_delete=models.SET_NULL, + verbose_name="کارگزار", + null=True, + blank=True, + related_name='company' + ) + card_number = models.CharField( + max_length=16, + null=True, + verbose_name="شماره کارت", + blank=True, + validators=[ + RegexValidator( + regex=r'^\d+$', + message='شماره کارت باید فقط شامل اعداد باشد.', + code='invalid_card_number' + ) + ] + ) + account_number = models.CharField( + max_length=20, + null=True, + verbose_name="شماره حساب", + blank=True, + validators=[ + RegexValidator( + regex=r'^\d+$', + message='شماره حساب باید فقط شامل اعداد باشد.', + code='invalid_account_number' + ) + ] + ) + sheba_number = models.CharField( + max_length=30, + null=True, + verbose_name="شماره شبا", + blank=True, + ) + bank_name = models.CharField( + max_length=255, + choices=BANK_CHOICES, + null=True, + verbose_name="نام بانک", + blank=True + ) + branch_name = models.CharField( + max_length=255, + null=True, + verbose_name="شعبه بانک", + blank=True + ) class Meta: verbose_name = 'شرکت' verbose_name_plural = 'شرکت‌ها' diff --git a/db.sqlite3 b/db.sqlite3 index e02ec79f8053a52023164c01f0a8ef2f18a109be..94e4e201642885bb08c59d0da20a656c781a3a80 100644 GIT binary patch delta 36884 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 diff --git a/invoices/templates/invoices/quote_preview_step.html b/invoices/templates/invoices/quote_preview_step.html index e6e405a..509c138 100644 --- a/invoices/templates/invoices/quote_preview_step.html +++ b/invoices/templates/invoices/quote_preview_step.html @@ -24,6 +24,10 @@ {% block content %} {% include '_toasts.html' %} + + +{% instance_info_modal instance %} + {% csrf_token %}

@@ -32,15 +36,17 @@

{{ step.name }}: {{ instance.process.name }}

- اشتراک آب: {{ instance.well.water_subscription_number|default:"-" }} - | نماینده: {{ instance.representative.profile.national_code|default:"-" }} + {% instance_info instance %}
@@ -50,100 +56,116 @@
-
+
-
- - شرکت آب منطقه‌ای + +
+
+ + {% if instance.broker.company %} + لوگوی شرکت + {% else %} + + {% endif %} + +
+
+
+ {% if instance.broker.company %} + {{ instance.broker.company.name }} + {% else %} + شرکت آب منطقه‌ای + {% endif %} +
+ {% if instance.broker.company %} +
+ {% if instance.broker.company.address %} +
{{ instance.broker.company.address }}
+ {% endif %} + {% if instance.broker.affairs.county.city.name %} +
{{ instance.broker.affairs.county.city.name }}، ایران
+ {% endif %} + {% if instance.broker.company.phone %} +
{{ instance.broker.company.phone }}
+ {% endif %} +
+ {% endif %} +
-

دفتر مرکزی، خیابان اصلی

-

تهران، ایران

-

۰۲۱-۱۲۳۴۵۶۷۸

-
-

پیش‌فاکتور #{{ quote.name }}

-
- تاریخ صدور: - {{ quote.jcreated }} + +
+
+
#{{ quote.name }}
-
- معتبر تا: - {{ quote.valid_until|date:"Y/m/d" }} +
+
+ تاریخ صدور: + {{ quote.jcreated_date }} +

-
-
-
-
صادر شده برای:
-

{{ quote.customer.get_full_name }}

- {% if instance.representative.profile %} -

کد ملی: {{ instance.representative.profile.national_code }}

-

{{ instance.representative.profile.address|default:"آدرس نامشخص" }}

-

{{ instance.representative.profile.phone_number_1|default:"" }}

- {% endif %} +
+
+
+
+
+
+ اطلاعات مشترک +
+
+ نام: + {{ quote.customer.get_full_name }} +
+ {% if instance.representative.profile.national_code %} +
+ کد ملی: + {{ instance.representative.profile.national_code }} +
+ {% endif %} + {% if instance.representative.profile.phone_number_1 %} +
+ تلفن: + {{ instance.representative.profile.phone_number_1 }} +
+ {% endif %} + {% if instance.representative.profile.address %} +
+ آدرس: + {{ instance.representative.profile.address }} +
+ {% endif %} + +
+
-
-
اطلاعات چاه:
- - - - - - - - - - - - - - - - - - - - - - - -
شماره اشتراک آب:{{ instance.well.water_subscription_number }}
شماره اشتراک برق:{{ instance.well.electricity_subscription_number|default:"-" }}
سریال کنتور:{{ instance.well.water_meter_serial_number|default:"-" }}
قدرت چاه:{{ instance.well.well_power|default:"-" }}
کد درخواست:{{ instance.code }}
+
+
+
+
+ اطلاعات چاه +
+
+ شماره اشتراک آب: + {{ instance.well.water_subscription_number }} +
+
+ شماره اشتراک برق: + {{ instance.well.electricity_subscription_number|default:"-" }} +
+
+ سریال کنتور: + {{ instance.well.water_meter_serial_number|default:"-" }} +
+
+ قدرت چاه: + {{ instance.well.well_power|default:"-" }} +
+
+
@@ -170,11 +192,6 @@ {% endfor %} -

- صادر کننده: - {{ quote.created_by.get_full_name }} -

- با تشکر از انتخاب شما

جمع کل:

@@ -193,6 +210,72 @@ + +
+
+
+
شرایط و ضوابط:
+
    +
  • + + اعتبار پیش‌فاکتور صادر شده ۴۸ ساعت پس از تاریخ صدور می‌باشد +
  • +
  • + + مبلغ فوق به صورت علی‌الحساب دریافت می‌گردد +
  • +
  • + + این برگه صرفاً جهت اعلام قیمت بوده و ارزش قانونی دیگری ندارد +
  • + {% if instance.broker.company.signature %} +
  • + امضای شرکت +
  • + {% endif %} +
+
+ {% if instance.broker.company %} +
+
اطلاعات پرداخت:
+
+ {% if instance.broker.company.card_number %} +
+ شماره کارت: +
{{ instance.broker.company.card_number }}
+
+ {% endif %} + {% if instance.broker.company.account_number %} +
+ شماره حساب: +
{{ instance.broker.company.account_number }}
+
+ {% endif %} + {% if instance.broker.company.sheba_number %} +
+ شماره شبا: +
{{ instance.broker.company.sheba_number }}
+
+ {% endif %} + {% if instance.broker.company.bank_name %} +
+ بانک: +
{{ instance.broker.company.get_bank_name_display }}
+
+ {% endif %} + {% if instance.broker.company.branch_name %} +
+ شعبه: +
{{ instance.broker.company.branch_name }}
+
+ {% endif %} + +
+ +
+ {% endif %} +
+
{% if quote.notes %} diff --git a/invoices/templates/invoices/quote_print.html b/invoices/templates/invoices/quote_print.html index 7296d12..282ff44 100644 --- a/invoices/templates/invoices/quote_print.html +++ b/invoices/templates/invoices/quote_print.html @@ -5,8 +5,24 @@ پیش‌فاکتور {{ quote.name }} - {{ instance.code }} - - + {% load static %} + {% load humanize %} + + + + + + + + + + + + + + + +