From 204b0aa48e9686ab662385aa99d83cc5d8f494d5 Mon Sep 17 00:00:00 2001 From: aminhashemi92 Date: Mon, 8 Sep 2025 16:55:43 +0330 Subject: [PATCH] fix date in payment and imporove contract page. --- accounts/admin.py | 2 +- .../0005_company_registration_number.py | 18 ++++ .../0006_company_card_holder_name.py | 18 ++++ accounts/models.py | 12 +++ .../templates/contracts/contract_print.html | 68 ++++++++++----- .../templates/contracts/contract_step.html | 60 ++++++++----- contracts/views.py | 50 +++++++---- db.sqlite3 | Bin 2682880 -> 2859008 bytes invoices/models.py | 4 + .../invoices/final_settlement_step.html | 39 +++++++-- .../invoices/quote_payment_step.html | 15 +++- .../invoices/quote_preview_step.html | 2 +- invoices/templates/invoices/quote_step.html | 2 +- invoices/views.py | 79 ++++++++++++++++-- 14 files changed, 295 insertions(+), 74 deletions(-) create mode 100644 accounts/migrations/0005_company_registration_number.py create mode 100644 accounts/migrations/0006_company_card_holder_name.py diff --git a/accounts/admin.py b/accounts/admin.py index 5530abc..d741357 100644 --- a/accounts/admin.py +++ b/accounts/admin.py @@ -33,7 +33,7 @@ class ProfileAdmin(admin.ModelAdmin): @admin.register(Company) class CompanyAdmin(admin.ModelAdmin): - list_display = ['name', 'logo', 'signature', 'address', 'phone', 'broker'] + list_display = ['name', 'logo', 'signature', 'address', 'phone', 'broker', 'registration_number'] prepopulated_fields = {'slug': ('name',)} search_fields = ['name', 'address', 'phone'] list_filter = ['is_active', 'broker'] diff --git a/accounts/migrations/0005_company_registration_number.py b/accounts/migrations/0005_company_registration_number.py new file mode 100644 index 0000000..b38ab10 --- /dev/null +++ b/accounts/migrations/0005_company_registration_number.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.4 on 2025-09-08 10:10 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0004_company_branch_name'), + ] + + operations = [ + migrations.AddField( + model_name='company', + name='registration_number', + field=models.CharField(blank=True, max_length=255, null=True, verbose_name='شماره ثبت شرکت'), + ), + ] diff --git a/accounts/migrations/0006_company_card_holder_name.py b/accounts/migrations/0006_company_card_holder_name.py new file mode 100644 index 0000000..9228034 --- /dev/null +++ b/accounts/migrations/0006_company_card_holder_name.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.4 on 2025-09-08 10:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('accounts', '0005_company_registration_number'), + ] + + operations = [ + migrations.AddField( + model_name='company', + name='card_holder_name', + field=models.CharField(blank=True, max_length=255, null=True, verbose_name='نام دارنده کارت'), + ), + ] diff --git a/accounts/models.py b/accounts/models.py index c1e78fd..937c329 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -204,6 +204,12 @@ class Company(NameSlugModel): blank=True, verbose_name='شماره تماس' ) + registration_number = models.CharField( + max_length=255, + null=True, + blank=True, + verbose_name='شماره ثبت شرکت' + ) broker = models.OneToOneField( Broker, on_delete=models.SET_NULL, @@ -238,6 +244,12 @@ class Company(NameSlugModel): ) ] ) + card_holder_name = models.CharField( + max_length=255, + null=True, + verbose_name="نام دارنده کارت", + blank=True, + ) sheba_number = models.CharField( max_length=30, null=True, diff --git a/contracts/templates/contracts/contract_print.html b/contracts/templates/contracts/contract_print.html index bc47f05..d6a6b85 100644 --- a/contracts/templates/contracts/contract_print.html +++ b/contracts/templates/contracts/contract_print.html @@ -2,45 +2,71 @@ - + چاپ قرارداد {{ instance.code }} - + {% load static %} + + + + + + + + + + + +
-
-
-
{{ contract.template.company.name }}
-
{{ contract.template.name }}
-
کد درخواست: {{ instance.code }} | تاریخ: {{ contract.jcreated }}
-
- {% if contract.template.company.logo %} - - {% endif %} - + +
+
تاریخ: {{ contract.jcreated_date }} | کد درخواست: {{ instance.code }}
+
+ {% if instance.broker and instance.broker.company %} + {{ instance.broker.company.name }} + {% elif template.company %} + {{ template.company.name }} + {% else %} + شرکت آب منطقه‌ای + {% endif %} +
+

{{ contract.template.name }}

-
+ +
{{ contract.rendered_body|safe }}

+ +
امضای مشترک
-
+
امضای شرکت
-
- {% if contract.template.company.signature %} - امضای شرکت +
+ {% if instance.broker and instance.broker.company and instance.broker.company.signature %} + امضای شرکت + {% elif contract.template.company and contract.template.company.signature %} + امضای شرکت {% endif %}
diff --git a/contracts/templates/contracts/contract_step.html b/contracts/templates/contracts/contract_step.html index df4fdfc..700d44b 100644 --- a/contracts/templates/contracts/contract_step.html +++ b/contracts/templates/contracts/contract_step.html @@ -19,6 +19,10 @@ {% block content %} {% include '_toasts.html' %} + + +{% instance_info_modal instance %} +
@@ -26,13 +30,18 @@

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

- اشتراک آب: {{ instance.well.water_subscription_number|default:"-" }} - | نماینده: {{ instance.representative.profile.national_code|default:"-" }} + {% instance_info instance %}
@@ -41,29 +50,32 @@
+
تاریخ: {{ contract.jcreated_date }} | کد درخواست: {{ instance.code }}
+
+ {% if instance.broker and instance.broker.company %} + {{ instance.broker.company.name }} + {% elif template.company %} + {{ template.company.name }} + {% else %} + شرکت آب منطقه‌ای + {% endif %}
+

{{ contract.template.name }}

{% if can_view_contract_body %} - {% if template.company.logo %} -
- لوگوی شرکت -

{{ contract.template.company.name }}

-
{{ contract.template.name }}
-
- {% endif %} - -
تاریخ: {{ contract.jcreated }}

{{ contract.rendered_body|safe }}

امضای مشترک
-
+
امضای شرکت
-
- {% if template.company.signature %} - امضای شرکت +
+ {% if instance.broker and instance.broker.company and instance.broker.company.signature %} + امضای شرکت + {% elif template.company and template.company.signature %} + امضای شرکت {% endif %}
@@ -76,15 +88,23 @@
{% csrf_token %} {% if previous_step %} - قبلی + + + قبلی + {% else %} {% endif %} {% if next_step %} {% if is_broker %} - + {% else %} - بعدی + + بعدی + + {% endif %} {% else %} {% if is_broker %} diff --git a/contracts/views.py b/contracts/views.py index 1949665..7a1788b 100644 --- a/contracts/views.py +++ b/contracts/views.py @@ -2,29 +2,51 @@ from django.shortcuts import render, get_object_or_404, redirect from django.contrib.auth.decorators import login_required from django.urls import reverse from django.utils import timezone +from decimal import Decimal from django.template import Template, Context +from django.utils.safestring import mark_safe from processes.models import ProcessInstance, StepInstance from common.consts import UserRoles from .models import ContractTemplate, ContractInstance +from invoices.models import Invoice, Quote from _helpers.utils import jalali_converter2 +from django.http import JsonResponse def build_contract_context(instance: ProcessInstance) -> dict: representative = instance.representative profile = getattr(representative, 'profile', None) well = instance.well + # Compute prepayment from Quote-linked invoice payments + quote = Quote.objects.filter(process_instance=instance).first() + invoice = Invoice.objects.filter(quote=quote).first() if quote else None + payments_qs = invoice.payments.filter(is_deleted=False, direction='in').all() if invoice else [] + total_paid = sum((p.amount for p in payments_qs), Decimal('0')) + try: + latest_payment_date = max((p.payment_date for p in payments_qs)) if payments_qs else None + except Exception: + latest_payment_date = None + return { - 'customer_full_name': representative.get_full_name() if representative else '', - 'national_code': profile.national_code if profile else '', - 'address': profile.address if profile else '', - 'phone': profile.phone_number_1 if profile else '', - 'phone2': profile.phone_number_2 if profile else '', - 'water_subscription_number': well.water_subscription_number if well else '', - 'electricity_subscription_number': well.electricity_subscription_number if well else '', - 'water_meter_serial_number': well.water_meter_serial_number if well else '', - 'well_power': well.well_power if well else '', - 'request_code': instance.code, - 'today': jalali_converter2(timezone.now()), + 'customer_full_name': mark_safe(f"{representative.get_full_name() if representative else ''}"), + 'registration_number': mark_safe(f"{instance.broker.company.registration_number if instance.broker and instance.broker.company else ''}"), + 'national_code': mark_safe(f"{profile.national_code if profile else ''}"), + 'address': mark_safe(f"{profile.address if profile else ''}"), + 'phone': mark_safe(f"{profile.phone_number_1 if profile else ''}"), + 'phone2': mark_safe(f"{profile.phone_number_2 if profile else ''}"), + 'water_subscription_number': mark_safe(f"{well.water_subscription_number if well else ''}"), + 'electricity_subscription_number': mark_safe(f"{well.electricity_subscription_number if well else ''}"), + 'water_meter_serial_number': mark_safe(f"{well.water_meter_serial_number if well else ''}"), + 'well_power': mark_safe(f"{well.well_power if well else ''}"), + 'request_code': mark_safe(f"{instance.code}"), + 'today': mark_safe(f"{jalali_converter2(timezone.now())}"), + 'company_name': mark_safe(f"{instance.broker.company.name if instance.broker and instance.broker.company else ''}"), + 'city_name': mark_safe(f"{instance.broker.affairs.county.city.name if instance.broker and instance.broker.affairs and instance.broker.affairs.county and instance.broker.affairs.county.city else ''}"), + 'card_number': mark_safe(f"{instance.representative.profile.card_number if instance.representative else ''}"), + 'account_number': mark_safe(f"{instance.representative.profile.account_number if instance.representative else ''}"), + 'bank_name': mark_safe(f"{instance.representative.profile.get_bank_name_display() if instance.representative else ''}"), + 'prepayment_amount': mark_safe(f"{int(total_paid):,}"), + 'prepayment_date': mark_safe(f"{jalali_converter2(latest_payment_date)}") if latest_payment_date else '', } @@ -35,10 +57,7 @@ def contract_step(request, instance_id, step_id): step = get_object_or_404(instance.process.steps, id=step_id) previous_step = instance.process.steps.filter(order__lt=step.order).last() next_step = instance.process.steps.filter(order__gt=step.order).first() - # Access control: - # - INSTALLER: can open step but cannot view contract body (show inline message) - # - Others: can view - # - Only BROKER can submit/complete this step + profile = getattr(request.user, 'profile', None) is_broker = False can_view_contract_body = True @@ -72,7 +91,6 @@ def contract_step(request, instance_id, step_id): # If user submits to go next, only broker can complete and go to next if request.method == 'POST': if not is_broker: - from django.http import JsonResponse return JsonResponse({'success': False, 'message': 'شما مجوز تایید این مرحله را ندارید'}, status=403) StepInstance.objects.update_or_create( process_instance=instance, diff --git a/db.sqlite3 b/db.sqlite3 index 700863fed5d356ebf31e63ef899abdce104a6935..a04ea6caf5f679b74eb1fceea53bad861e7619c5 100644 GIT binary patch delta 127727 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

5SZ2xZ_%ox!}2O;ncYn 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 S^E>wzY_h-Sy}n{w!M_3Ds3=PS delta 15173 zcmb_@34D{q_GrF+|0YeBq-mQbZPTQMLb|sIQdSEVD2Rw$k+RArluZE@T0})fC>A)V zTrIeOxKKbkh@b@pK|qQkf+!YoK|v_4sEF@;NkQ)Y-}nCS{oX&&`SQ)2IdkUBnVGYt zs_|8(s`*)_#_b4vYO}G6ZC5|cx+QIM*ubY7DxM=;d-igzWFNLEs(uB#>9T`$GOk)C z^LFO7+KS9ZMz8g?NoGiGmo{sivtn|&EN0xKyC#ntIeOZ#%Hgx_96f1z>f>#bnX+1M z+km((DTC{x0Q05luDzpeEOxuEZJucO(zqThL=9A;p4)V68Yff-gird={K zt@gooJ(0cx?L16r?b&vJGVM2g*FLd?|Hx*3gtOUa#?1>d(Y7vK6xkNvZ|+Ukr7FJo ztZW}VbJmQj{e6z%Ec9mQb;vF5kel5ux1cDuxN!EkY16xmfT}G)Uv1~PTQ^qmO|n3~ zLB_EqRIk%d5c=IP#@!Ml5oD>2T}1vMzmN;$Ecu3fLG3O2ZbDBCV}l{y%V}P!*0539 zl5)W@FNTSW5aO%uoOU;B12>~58cSL{6`~TOhB61tKM1CbdP_voM`LAOnap5rzQOV1-Vdx+qM>Hg}CQJuKI@(7g3G+cJ z;g&!{3Acg{?85D^W>R~V)amq687JNpw;kEEnIRvM-^p?EKG{XSBVUls)K$klk4*X@ z!X$}jEFP7@f%RN|+(GQJ*P`$%(u|!xA}!cyFLl*(l<4Fan`pBM9Kx5v@wd2uYafE| zV#osJoHdfE|9m(gE>*e2~lHUelI>)Wkgx`;y5>v=U&rGacQ`57Tb=h5tfvl<+end zB5AfnZ*fHQs9D1uBJ>pDecnV}9>(dfm|vSg^;NP=FVvy#+TWdJI;@DV z;h|$fK!epkq)wz`I`L1lZk^=VNOu&j*<>NvNpi?oGKhRlo+kBcyd^wAj>mwvAFsf5 z{rJ76PNv()MY4xba+lqsQ`Pq(+U1c9^joyJ_qT0Lx;xB0uM_LuwCi-`}kOvo2JErRK@2)$146c z1PQ3{`6IkclOE;2;jxv1RKst!oAb<>My>G(nP%Q@4k9P$ks5xZB`L*}KE?O3AUA_l z$EQNuI{szaT*p6ewRWJJU*h}4aMRcr+%Nn$I6yiB>vw7-%p%%uCx67?rWreNA;YbQ zub~i-LKT|t^GP)R1b>G4pN2zL?YzP&+(6Ap+6BVj*<_kw?bHogUS}c0=zX@=n{a6Y(88*TB5q;1&6DZYW;|QloC`sw1p zKmMB`xlEFdLN0Zu{i>t`rnObV+aUKmn+AOsOATD6`6J4?l-b5QJpRH901p%MH?kb} z=?L>j++`2qG9Dx~xPPn2bTWzDMg}1f5FuFNGp&P+gQ#S|1#!BHnTe{ZwBzoY^VG zLrY7Xz}y5swZ!Fu?`>(8#yw@-N8t~Zk4U>%?jgi7VYjqG5p4Bpl?|GPC%zAh4oQ#G z5i7}l202?MK}D`dpbvZ^eHsHbyj>M@atm^B`cuxM*w*h(mDHk~qI_mA;+?lVT6WV- z=cWE7{CH!&4HmBQB|)1SwFriW&C|{HCBf}Tw<`+QdaYq)@0F#He ziKCr2Cbuydvo@-J+42&Gr+kb2S7*wVME^--Rn?ixylA8ItNimgkh>|fS%szIe7`8- ztzumi)HOc&w6MI7A}+7@^K1BWr9$?R&e+H<0KH!6igf&FLYKFcM!)iujR-$+WR$tX zOw*f;S?Y({Ts5SJ*FqqgNU6ukSO z|5ClaF$^s1nK}xZ-c!!Nt-VvHLe_qz3zT$89YzoAR|>f}VlK3qYsfsa zg>d8!vd>&-ZY9g8r%5R?t>Y7(c6oK^wOcXi3n!G@8LrGM0jXK}2b`-(a>8W0ASXvo zngw`5-)r7wR+{7S)ai+*beTEW9AK6p-E~If-06N!Y3$F(llyHT*Z8app%;nlgn{k3 z*_0_)IlIeaylW%l%m>I~yt7p@$at6BYfdF0JQCDu1BuF{@7}3)a>$9~9~L(s0zIS_ zA+C4=Ll>)SiL9dDM#mDuveD3` zdwO)@gV-|9!DTQ-mN;dN99=LnFFUWGKW;n)?5Vz(5Pp-RxePWZzbH35YgEpNP^hSI z47=MxEs_ii^*wmNy-t>qDWng{zUVd%6lkI0s)WzJcA_hVlt~o_rNJvfV zVr@<4dZ!Sw#%A3+c-fpHAEUOk54EPZknm096|x3(r_ZoQHHjRkFDDBHaPk=~l_O*= zUej7KHqN`!xLzAPw@lw*p+i;MSZq9i-A|HZh;%R6fhav@j!|YBL^HdSdh!Aug^!zO z%@Ky6|EYhkAJTu;_nN<$w;Jb+C-fc0b4I<9NEVPeMv0N9pVE(!bP{8BFajoP{$=(t zUpAjME|RHa3>jj~GVUb(NOv=St65`gGxm`VBxIa4gT}{(VeT=jO($)x*G8!*2s;?M zW1H5Ek{pUa-PrpLN9jHGaxXq9?` zRjTfA86PeqH;dEyuEbfT92+iU!ez8oN{(zqP`*U<9an0*ZQ*D33}Z5Pwu+HH!t-2#5_+MSCR`AL%=x{!HRLg{G`S@uqA6UV~! zmjepR)zg!vk;@=)% zS#=sSv7yA^Yq$;C7@VfzN&2TT-MG<+HA4DV`rZ0%dKZ10p053=9oJsh=0VRUBROe- zG1%y&|EB+-@72fYef3=Zab49;YrD0@h~+^9nft6U+vsm37zO$n{XTt!euKVKZ>w|K zN$o9d0a^_Yp$682q!1am;oGQcjyL<6S;k3Y18&}7Mt8$zr07k0rGB&CL0_Z0wDZ~l z?Ky2axrYoje>ao$C$#0{12U4VCqeT)bCo&8IB#q*#u$?RvHq&|k_#0@`$apfZPe~DelgxMP8+9j9e-CMcJTP) z#`9^+R*O**^SbrmnJv~sWvInuronpQn9VfzQzL`v%QA5hpjhi6GBFWYlxT!?L|~(= zhs@Zm2g?xa!85o_7E%;z1k|k;j?w74&x|1~u1r6?FpXW{X!0e(*=A!tQh2JB!kf+* zFZv@Cx+4_2BNVzBYN2sQNOU8KzOzOS1Ha0yjC6Zscza}cdt`V!V^}@xk@4*~{_5|I z5gWNo?HN39&5puHT8pmHvN|)#vcWsRxR=amy747*0H2a+4z-a}=11nA$t%FHBs z(Jt>{5Yh|HKX~l4dh1ze9DtBby!}2FUb#R_ zs5vhQwC(~i7`VN&CPH~annY*I_GuEl@&k!(u-o|xzMjRStV1aFNmyNJ-yO%i$22gj znMIt+{=$C2zR&gKaySpnnPOjn)Qp0XUo&`6r`ids$PWA0Zr%2eC60R-h;&`@&{gmCqzQ)$E z3)z|MD7KvK$OhRM*2bI_E5tIfNKC_%?~-s@I4m>@FAFP#`9h^|n@}p`30^_xV=wYw z@=g3UeytQE*~GKrQSlwI9U_0Qy-h7u^Hi^@D;Je7l_q7IvQ}BDR4Egc z!Af@}q$Db`{FB@)@0Yj8&&f6Nz4BOjpj;xim0dC~wIoZQN_(W&q&jJ#G*cQSl}jC^ zpe?MmFuyTh*U#*@O7Yzc6)C=QNK5hE2wI9S2&a5LH#D^MnQ+kO z6C>Z=@cCk34Hk4kTi;AB+S0lT3UcyuvI>d|ipPu@m6Hz-wee-b=(aurWo>;~k#ApT z`c}d4w!UZ>lIdFrzhwC0Y2yO>2nOCU@xRU(|AVXN;%4`<{EeBPZWkIegNrVN*xn zfo{jC!>5m%JZadZ$+YFZsD~Nw)Ho7&yh$<}s-n;!V#puJL*_L3!@3C06OQ>tZm5gm zL+bxo6N{)+%~AiNQk{<){J-x;xBeB?+y1Yn)!mR-qLe^RO>n>_Z~dSvrd5*T9yU?e zZ?%z)WE6=r_nPJTbuS5#P>9V(;` zWI66lAvi6Sf59d^D0JgrFgjCvx#L00D716*g@KMIWbJ`Y^ZH88tSsh{EV`<{V>8QS zG*mcvJC`IMM|<1R2g=KxKA2VM@PWNVNrE@5Z_SmC>mg+d7Ne}Nxq{#8m zd8#87iF=~e)cbsTn65@?y_DWd#^U@=3xZgfnL zb8z*hjvg~((x_p>M~<94W72e7H}8G-d5=AKbmP(W-lJ=et~vJLCog*ch6Co0U}DU_ zb((zlq|sB?wErW>z=k&*9q5Eh!DU=SorCxCI(gkj)kep^W&1&xAIvWUzemFNQ)K)R9ZNioSI?QyPGy&RuA28%Yv#d8WQX)jM+ z-i)phzA`$4q3RNcj}eLs^Rn~*gR$$ZjjHdoypG``o|*4ZxBnTH^4;j0`O@;r;H|%v zdPBm>h$cnf{L9g^{=bu>H=+f)>>>Z%YzKqwYKylGv5`vi8*`BHwh`2q={D_7^_bdC zc|pw%&GzS!5f6ba|tz%~X426S9G5%iJ9q1&4N{`|$Ac z;B}DwOfVLz`e$g+8-m2)^;xj8(uH$|VTVUSbN@gLBtI4GXTc`J+NTgKJLM{v(?U5n z3JyLM938?8`L%lhaVqZ?eboMjSZu`DGK^O9gKsjrNOeR!>jIg<12ByPpbAN zUjdI$+dm4XtVbFfpAHVPz|$Q`9t#3v7kt2H4L%tMFL66ze~G&*WOQ-oJA6r3A>v!f z^FAKD8EPI6c5*}|wl;FHNv+*iedCRV@~-Y83nCTH_j5-@S7#<%AtW}T6|SYLdkjqJ zh9ji8TamD_Jz5+456h^4lLIoMm-ld|I5Ok^OYa?fkm>z;xcgs$!V9~nJH`=kwSuy- zVP@idR^8xsLDSHT8?S)6-Fe6$i$6|h>&RT}mAUPx^~6G-Qg;Db%NGV^WWoMYH*vV) zt^$VX$2ID5TSnOxm<7EM#vR)V!#l6QtncOS%gE5B%pHW-+cIJt(J@!?Tw(XgyrdXt z9+Gig1h7p)PH`)BQPEcrUS(SLkPH{JACi%O1?$=&8M?#nxB}?BGU==pC=exO?))f6 z)RiHfktKqPTQmAuZCUViH@EDt+phvddPl>O@d>doxR1L4S_WkVpsA0=0&)c`a0Tqb zEg3g4qBXs?uyAmO;;@@nV4PuoBKQC5>yCvzecgo-KrejS1DDA(t^i(Lrs{quc60i< zbFDG+9irX}A;kJEp|~*$PTrg`5TYi;#6s`kF{Z=NS|RudLAORhvOyz0m`;(-nnk83S0B@@(bdvaYETSxw)<| zf>3TwcCItrCnq}x|Hrj{$D^|#)*3QDub{99duHdvSWN}_*dxC<+QL&4v=Hss&n}4iYx0(v9k2XK% zwOBsH)KMW6o6op~FNHm*TGj~Dg~38cwhGnIQnoGH06)RN?ATo9D01>J6H&8H=fs*1 zP0EeMzc@N6*IBz#624+y<6dUKUhNq`hcr2dF!bml=Qc(beiwce&I(_Fwow|g_}tZ`o_e1U$jb@Wn=`&G+;7zoWN@d*#b z*ScwZZNisrH7~OZ9aGFeG2uq~T4Tbi4E@0C6d4%vc0!rSQ9QV>e(1*! zdO{q^MFqXEJ0W^6Ka%^W4JOqlx+qR@Is@J)S5MXupm|B+VDNIT$DwIsq5|1FoDb8% zwTXvB=2hh7IyN$?qbn2JM*rX97@p$XL2EW8KJjljwk5XZ5XVP0c=}L^i#2yasLFE} zeX=oeAOkHsB6K{07O%4u?5l7cD(3m@;5n3%NC&^2_=3#bg%nL~rD(?ciHk4r_pr4# zP`z;_EO!dZ8k5T5>Bgi{Fu+c_pt^-G9D6Bg z<$nvKdsaqsH;bFmQSXTpkfasN@*`;JZB6&wph!v`lfzZmFq$e&UAC~z5MEiK)Ido^ zVjQgtdFC>6oAsmm7QJ3yi*A7xdJQ^h7U&gvl|ELViN1z%T}D&Mu9xU8y-4@!Aw7u7 z#aitm8cZ$P7IbhlYR%dn?WoqI)uG|ELMzc~v{E#s%C#zOur?D7s!DCF7E+IDLA6=) zs;4!V+JffQMNQUhYEzjyR^5ZvRiipn-J({h_38q3ty-hjq19EPTvP|EHnm)p(e|>d zC8|p;LJKUU29*}&w9>2`MLTSdQl~VcEw)9eN6rN)hD1t4o*ZQ@uf>;`8eoM;KI`NG zhPQpg+)tDIo}~=k*4b0)b;!0Vn`ze(rCcJG^A&6*Oo@*jPeZdk7Z@5f$8(;cfe;Ct3*n&z1g7-`2`(va@wJ-R#cdGm6F+varW7u^7lxUGs2W-=Xbyij!<#CVhjFn z%4ai5d&^7xoQCls+{5p|iKdh}SL~NBBK{S+;8D-aw1%35iwsv(9MO1baAR^;12bSS zu9IWPeQj--cLeq&b{HGY?B=KOe(sn$OpWHcvcJl#)F6$QJm?-AN0Q7#<^yIixEnp` zF6CY29;H3Eh&zrwD=;*$o0-WivMoi94Pxl-9iD84E1jo53cdWc$IEfO=Gi0A;}bmX1sQvjtM4j& zk>K$QELNIVQL0d$h?UkjMx^pmr#9_H)vhhJox}-$hA79ts*n5$Fn4{L1aB@*^TYa& z{ZBFTVE8Bg7zoWxQlMr+l1Pi*^W1{MVWUg-dDgPnFAgs3^2EV=#cd4OUfd>4V554? zi@jQ@L%(=yXsnF6rn0%Hjb9M4GCETEyW68f8#h9#QKj=7aOj9X4#JgBV5QYN>MCG1 z%SAObdH5zfPrk#YW~YV&1enBO8OTRT3_EQeQpirPF2r)i3@i#eHqUd~u=M^B( z-aEsQ$I7;(q%Ig*n>u>@=#kS$j{@^{(Fql&{bGJ$Zeei_Kcg*!FvhhoIiZ~VtWa@Q zC@k-JXc1?(D=ZA<6=ZWW8bV&t>#nh3!p{W^a~#E}?n`7f#J<5&##Oail~$BlwCq5} z361Aj7ko3>YY$lOEXOHIr1R@m;KhpJ?8Eqt70>w$={iJqS+OlE29LqiuyH!qThu1( zvS)dYQ8<-+izBbQ5(N4JqjhhQE#ds7-DCq9_fwxP#t3uu;ua%d|Rq{mnR=KB~D|=-_`d#`) zIxOvwUX`Ab7DzLs5mG<&QDsPR5+}BZpNa2@RD4ccBF+&fh=au*Vvd+B>cVfrSHdA- zyYQm0OsE#_6mAuI2-%hgaZ4v|1lN!2$YpSG9EYyG&)D}^%09;~VdtmtGm|dKemsgZu zR8%;e84omwNgO@8r(;4-X}V8Z!-src)JlYMpTa<>zi%m=?(f?T?+@?|o-3b}kINs) z2XSfzQhO;V`6Ra#E$NaVUKW4FiGC}7As!bGiwDHr;#=Ytaf7%{d{$g3E)y4t4~bRc zEO9C_V3asi93=J=OT{i?2QgP{EBZx`=oIauBC^6C!cW5Y!q>v*!ck<-d&1koHes{y zs<1|Y&Num%VNyYVdwM$F)qS~$^3&%QA9ZmP#80SH>1)el%bHdt-quoih3_{Bow&?wVZRMZesIP?-wLM#9%*r|hF|J@DYSBxZwSNc z>2Q6N^QI&gozB0gE$X-G7wU0zJ|9qbt8bxNv_V~`J_}<8TiD^1V)FsEX*5bVfM<0ap(X`D;G8$(#W2{5zCw_8`{DfcRODV552Wz_PU ze14dA$mfFI&HciMbF*p-n-|h@8O5|0g^YY|0aRIB4s44sYvmP$V3b` z6s4N9-5n`MWNv`a2pg(`H-NV?^LCmN5@Li%B2Uwdl)NE)g4`{lPf*k+CNgwDNgJVc zj2n)oY_G6%zr&{7$ zh3Dn4)LVR5+0pi}4G-Z}m<7-UvkFg|8!#B%-xQ6l#v~&JQYupKpaXLPdl=e(MCu`x z?Tr_HejpJVgJ~v&Mx?3`n~)yEn|yEmYC|ere`o5nuB=*4)9O>ZqmpS8pTuF8i|q7h z`1JKuH}z~u&0*Q;ruCKp<9C^cr#QPPKXRdk9p2f6=-=%SDr}b*3gzWx!(o~lRK#$; zL$zVRWACTBV9labJH4M;^fMMz@Bu;x79F3`IIAScv&d7wiU8#xC{B|my zGzkHj-t~6s83sCbN>{|(;@pC~9H`ut8pOQWCw8T-X5isVvccyUp{Y{#Zfa0f!cI)3 zr)_F&RQ(is{@v7DFr=Jfn~txQbnD*K9~gGJ%bJG^%J<w2^T`11S zqzM?mA5rl|1*jbox9u+MJC&Ut7v=@TPe?cE&i$!fQ#m_Z4pK|14@nQQwETzEIZfa_ zmG(HOJJZ@g7l+f2EeWj$ZtZpeQ)0jG&T0)vJhL`|>66YQ`-{RQ- z%{%?E5ZdDB>2Gt=B}{_qtVKgrsb7TVTl@k&!TP&uR;3sE6C)OL!@LT;-Soe}aN|VG z8ngRfXQAHVY_BDXv7#wTqD}Y>k*0Y-Kb5wcZjJWWvdEGLB8TyFr_)^YT%12TyvWb~ z8(%J@tbmfn#6jTk`KzFOH7;o5l0@8?JDta_vZXKNr1^VVY&rN>W_Fk@Ni3!Br}_`` zP`|);H;vEm=b=H@#-G8$>Y#rj-U>Fba*`q}S@&nApKS>F`4ZNyQnB3SmN1ZtDT(=t zK>f4*p9^@^xc+vN+)Y%#ubzQ_(`qnKUBDr1nLnoZ0s9OR@8hT8*g za=qpcgC%D&ec(Qmc^8vr**WoG|In|%*5v^|NZ)7nW9O$_Q@tDlenCp=HQyJmqzF5R zXYcO-*~k1I@CMU)_x$^_{S?ZKrhXhm}QFD<$}6r}Pw_$4cn(r9Ec( z5gfK^tY4&)j`|O?^vzHG(P%}@zs;gB1^zmd`4)SB;nnUu$k!uI)m?gjfn^gVLgn@8 zZ7gj05tycmpak11f+;NLhDB#G`>^-7v09Sp^`HB9S7biR^{{b=xb57F+%m43yOX<> z>w!wf3RE&GQOPLf^Q?#ycai%NE>>Z<{^crrSy=OpWN4yrw~4q32P6ldf;(KnQQ-*g zzoxO-K8No-!LjrvXVAsaf5ZfTW9dg1Gn`Tw7Vn9o+^nKe!$%a1$}V8GHF;ndcb`R)mW0(giwXfBG8E(xB#Z&5;z?Wk=d<#;ALXvH(3m zHS};(`n?REYIt?XZ3Oz&hv{`f^sn5l;iRIA+~Dx@H|`c#aV&ix+8SJ0Ys-za=(F@a zEL0s!Pl8uIOn1W457X^D^A7thRCf0Cf#-`oz7+O&82okilkjs3do28%;3>xz%V*);?I~dHM_3?p0B7=Eu-oUgpemEb) zo#Hm4V3l*p>^XKjJB3YSeq?qsOPC6#z3sB?0M4sD*AAT+Q#^>HJ_VV##1}~9xZc%M zp}Jq2B&gq*)<#HYdsRo)AqCED7Ye6*!%8l>iYd^!3n+Zx~6VB)~PPu zz!R<*se_nMV2F#uAAoR0>{*oTftVe%jj3e(wqv$MOS;4uy=G{Zd!P&cdPkO_{b_$k z-o^Evehtd{KhX8^%0<7%yVzdSBHXDs<0tTPkAMmGOL&hp6}J)Pq5^ccxq45v6gteV zx$IZraz#3U(U<&$cPhQ7T+>iK92>5C+@r~u4N>Tndskl5*whoZRKcHqH}8~sPrjz1 z?oYpmcZ$6yT~lXXw(5l5cV1I>Z@7-{J@IN?kau#uCtQ8ipwq~76YluSqKxe|-kMb6 z^2>e`7L7#0(4mDt^Z3gzaL(T2tWKHqhP=R54O4&vTsh^df*Sr-#xz7|=@nGyoOOYZ z7^q1LYV`8zzzhj${!EwXke34ms9ryuF&7RFM5w_FGYU}!vwAh<26-tjyEwamJr6rf zyz{LZn6)}^M?-x;w0A9)%nH5H{MI;Pl<9fsCHAPbs;t~c?!v^FacB(Qj6Q@e!WJQm zU(I}rjy_Z-ncH}$?L%8Bt~`F|xgCL6%=*IP`0YRnG-jqJLuxSn29`~ScDn)#>B6@I z&teu?0$ex|@W5v~c?s61q$fhpw*x&e=doHw=h+U_*x%TNF0uC8d~vYobzdp%x;yX; z1N|BU#n8FTqd;M)=LUgwRf~2DQ9Rt;&*O(4eLXz|)>$p%PZ#zClHtI_q!d^*E~y8d zxF_Jm1U1d7PXJ|?U59#alzUCz_W~R%MNedg*B`dzbZXEIb~lRG zw$B4StkbYeJbT3)YDt-m2j+#eIB2Ot!@X{&)3ON5_=rl=@^xU75K)D=jzAXqfDU}b zXR^?+&^H<2VPBCN&(5&)+<10+LrZ|O3%0)$dl-2luZ&XqE&Cw20G2bs68Z@fG#EU1 zzg50ajw^?86jg#I9#8mKC3s%sZWk7M}iz=H<#pBC(Xm6Kf| zG%Xkvex>K81mjHZX5nwDMj_5u`LGoWFYO7Mbj}08Y`m4uOPHZxWt?ti?Au|0WPcON zXQU(1to>&8@5DMWFO*Zv1|nKBX4=V+Alv=%7SW0_-$n+Rj~gvUPyJD?LH$83z^GVF z@TN_e3aD_^?aScB<-sXvTxo<#PX_-KJcel4NTE5$*ri|6bG7m6DvW&)xu^6Pda4X0 z^^8D`7lJ=34VBSZ;f$0gSz5Wt@rTA_)>`=|7107KBR?900fbJHxk>Y9!SI2BX!!oU zU=F;pCn(V;_XN=~Z^&pQ-)Vkg-eA0D`1D2EAKF;;Beg5~kP_vGvGW}=UrnkLVan&h ZZnWuWFi#R0ve-rzW7`7+7M~AJ`Cn6(4K)A& diff --git a/invoices/models.py b/invoices/models.py index 53059d8..ddf1334 100644 --- a/invoices/models.py +++ b/invoices/models.py @@ -7,6 +7,7 @@ from decimal import Decimal from django.utils import timezone from django.core.validators import MinValueValidator from django.conf import settings +from _helpers.utils import jalali_converter2 User = get_user_model() @@ -372,3 +373,6 @@ class Payment(BaseModel): except Exception: pass return result + + def jpayment_date(self): + return jalali_converter2(self.payment_date) diff --git a/invoices/templates/invoices/final_settlement_step.html b/invoices/templates/invoices/final_settlement_step.html index ca11dec..2335298 100644 --- a/invoices/templates/invoices/final_settlement_step.html +++ b/invoices/templates/invoices/final_settlement_step.html @@ -150,7 +150,7 @@ {% if p.direction == 'in' %}دریافتی{% else %}پرداختی{% endif %} {{ p.amount|floatformat:0|intcomma:False }} تومان - {{ p.payment_date|date:'Y/m/d' }} + {{ p.jpayment_date }} {{ p.get_payment_method_display }} {{ p.reference_number|default:'-' }} @@ -316,11 +316,32 @@ (function initPersianDatePicker(){ if (window.$ && $.fn.persianDatepicker && $('#id_payment_date').length) { $('#id_payment_date').persianDatepicker({ - format: 'YYYY/MM/DD', initialValue: false, autoClose: true, persianDigit: false, observer: true, + format: 'YYYY/MM/DD', + initialValue: false, + autoClose: true, + persianDigit: false, + observer: true, calendar: { persian: { locale: 'fa', leapYearMode: 'astronomical' } }, onSelect: function(unix){ - const g = new window.persianDate(unix).toCalendar('gregorian').format('YYYY-MM-DD'); - $('#id_payment_date').attr('data-gregorian', g); + // تبدیل تاریخ شمسی به میلادی برای ارسال به سرور + const gregorianDate = new Date(unix); + const year = gregorianDate.getFullYear(); + const month = String(gregorianDate.getMonth() + 1).padStart(2, '0'); + const day = String(gregorianDate.getDate()).padStart(2, '0'); + const gregorianDateString = `${year}-${month}-${day}`; + + // نمایش تاریخ شمسی در فیلد + if (window.persianDate) { + const persianDate = new window.persianDate(unix); + const persianDateString = persianDate.format('YYYY/MM/DD'); + $('#id_payment_date').val(persianDateString); + } else { + // اگر persianDate در دسترس نبود، تاریخ میلادی را نمایش بده + $('#id_payment_date').val(gregorianDateString); + } + + // ذخیره تاریخ میلادی در فیلد مخفی برای ارسال به سرور + $('#id_payment_date').attr('data-gregorian', gregorianDateString); } }); } @@ -328,8 +349,14 @@ function buildForm(){ const fd = new FormData(document.getElementById('formFinalPayment')); - const g = document.getElementById('id_payment_date').getAttribute('data-gregorian'); - if (g) { fd.set('payment_date', g); } + + // تبدیل تاریخ شمسی به میلادی برای ارسال + const persianDateValue = $('#id_payment_date').val(); + const gregorianDateValue = $('#id_payment_date').attr('data-gregorian'); + if (persianDateValue && gregorianDateValue) { + fd.set('payment_date', gregorianDateValue); + } + return fd; } (function(){ diff --git a/invoices/templates/invoices/quote_payment_step.html b/invoices/templates/invoices/quote_payment_step.html index e73e0d3..551420b 100644 --- a/invoices/templates/invoices/quote_payment_step.html +++ b/invoices/templates/invoices/quote_payment_step.html @@ -164,7 +164,7 @@ {% for p in payments %} {{ p.amount|floatformat:0|intcomma:False }} تومان - {{ p.payment_date|date:'Y/m/d' }} + {{ p.jpayment_date }} {{ p.get_payment_method_display }} {{ p.reference_number|default:'-' }} @@ -359,6 +359,13 @@ } const form = document.getElementById('formAddPayment'); const fd = buildFormData(form); + + // تبدیل تاریخ شمسی به میلادی برای ارسال + const persianDateValue = $('#id_payment_date').val(); + const gregorianDateValue = $('#id_payment_date').attr('data-gregorian'); + if (persianDateValue && gregorianDateValue) { + fd.set('payment_date', gregorianDateValue); + } fetch('{% url "invoices:add_quote_payment" instance.id step.id %}', { method: 'POST', body: fd @@ -422,18 +429,24 @@ observer: true, calendar: { persian: { locale: 'fa', leapYearMode: 'astronomical' } }, onSelect: function(unix) { + // تبدیل تاریخ شمسی به میلادی برای ارسال به سرور const gregorianDate = new Date(unix); const year = gregorianDate.getFullYear(); const month = String(gregorianDate.getMonth() + 1).padStart(2, '0'); const day = String(gregorianDate.getDate()).padStart(2, '0'); const gregorianDateString = `${year}-${month}-${day}`; + + // نمایش تاریخ شمسی در فیلد if (window.persianDate) { const persianDate = new window.persianDate(unix); const persianDateString = persianDate.format('YYYY/MM/DD'); $('#id_payment_date').val(persianDateString); } else { + // اگر persianDate در دسترس نبود، تاریخ میلادی را نمایش بده $('#id_payment_date').val(gregorianDateString); } + + // ذخیره تاریخ میلادی در فیلد مخفی برای ارسال به سرور $('#id_payment_date').attr('data-gregorian', gregorianDateString); } }); diff --git a/invoices/templates/invoices/quote_preview_step.html b/invoices/templates/invoices/quote_preview_step.html index 5a2fbbd..7243f4b 100644 --- a/invoices/templates/invoices/quote_preview_step.html +++ b/invoices/templates/invoices/quote_preview_step.html @@ -323,7 +323,7 @@ {% else %} {% if next_step %} + class="btn btn-primary"> مرحله بعد diff --git a/invoices/templates/invoices/quote_step.html b/invoices/templates/invoices/quote_step.html index a12c9c0..404cf14 100644 --- a/invoices/templates/invoices/quote_step.html +++ b/invoices/templates/invoices/quote_step.html @@ -149,7 +149,7 @@ {% endif %} {% else %} {% if next_step %} - + مرحله بعد diff --git a/invoices/views.py b/invoices/views.py index cc1f925..b271a29 100644 --- a/invoices/views.py +++ b/invoices/views.py @@ -172,18 +172,24 @@ def create_quote(request, instance_id, step_id): quote.status = 'draft' quote.save(update_fields=['status']) - if next_step: - next_step_instance = instance.step_instances.filter(step=next_step).first() - if next_step_instance and next_step_instance.status == 'completed': - next_step_instance.status = 'in_progress' - next_step_instance.completed_at = None - next_step_instance.save(update_fields=['status', 'completed_at']) + # Reset ALL subsequent completed steps to in_progress + subsequent_steps = instance.process.steps.filter(order__gt=step.order) + for subsequent_step in subsequent_steps: + subsequent_step_instance = instance.step_instances.filter(step=subsequent_step).first() + if subsequent_step_instance and subsequent_step_instance.status == 'completed': + # Bypass validation by using update() instead of save() + instance.step_instances.filter(step=subsequent_step).update( + status='in_progress', + completed_at=None + ) # Clear previous approvals if the step requires re-approval try: - next_step_instance.approvals.all().delete() + subsequent_step_instance.approvals.all().delete() except Exception: pass + # Set current step to the next step + if next_step: instance.current_step = next_step instance.save(update_fields=['current_step']) @@ -524,6 +530,26 @@ def add_quote_payment(request, instance_id, step_id): si.approvals.all().delete() except Exception: pass + + # Reset ALL subsequent completed steps to in_progress + try: + subsequent_steps = instance.process.steps.filter(order__gt=step.order) + for subsequent_step in subsequent_steps: + subsequent_step_instance = instance.step_instances.filter(step=subsequent_step).first() + if subsequent_step_instance and subsequent_step_instance.status == 'completed': + # Bypass validation by using update() instead of save() + instance.step_instances.filter(step=subsequent_step).update( + status='in_progress', + completed_at=None + ) + # Clear previous approvals if the step requires re-approval + try: + subsequent_step_instance.approvals.all().delete() + except Exception: + pass + except Exception: + pass + # If current step is ahead of this step, reset it back to this step try: if instance.current_step and instance.current_step.order > step.order: @@ -572,6 +598,26 @@ def delete_quote_payment(request, instance_id, step_id, payment_id): si.approvals.all().delete() except Exception: pass + + # Reset ALL subsequent completed steps to in_progress + try: + subsequent_steps = instance.process.steps.filter(order__gt=step.order) + for subsequent_step in subsequent_steps: + subsequent_step_instance = instance.step_instances.filter(step=subsequent_step).first() + if subsequent_step_instance and subsequent_step_instance.status == 'completed': + # Bypass validation by using update() instead of save() + instance.step_instances.filter(step=subsequent_step).update( + status='in_progress', + completed_at=None + ) + # Clear previous approvals if the step requires re-approval + try: + subsequent_step_instance.approvals.all().delete() + except Exception: + pass + except Exception: + pass + # If current step is ahead of this step, reset it back to this step try: if instance.current_step and instance.current_step.order > step.order: @@ -1000,6 +1046,25 @@ def add_final_payment(request, instance_id, step_id): si.save() except Exception: pass + + # Reset ALL subsequent completed steps to in_progress + try: + subsequent_steps = instance.process.steps.filter(order__gt=step.order) + for subsequent_step in subsequent_steps: + subsequent_step_instance = instance.step_instances.filter(step=subsequent_step).first() + if subsequent_step_instance and subsequent_step_instance.status == 'completed': + # Bypass validation by using update() instead of save() + instance.step_instances.filter(step=subsequent_step).update( + status='in_progress', + completed_at=None + ) + # Clear previous approvals if the step requires re-approval + try: + subsequent_step_instance.approvals.all().delete() + except Exception: + pass + except Exception: + pass return JsonResponse({ 'success': True, 'redirect': reverse('invoices:final_settlement_step', args=[instance.id, step_id]),