From e9db6dcad263cfaada4adc29628537a8ae4949e7 Mon Sep 17 00:00:00 2001 From: nataly Date: Thu, 9 May 2024 14:28:56 +0300 Subject: [PATCH] New changes. --- .../__pycache__/models.cpython-312.pyc | Bin 9205 -> 9205 bytes .../billing/__pycache__/urls.cpython-312.pyc | Bin 927 -> 990 bytes .../billing/__pycache__/views.cpython-312.pyc | Bin 3292 -> 3292 bytes .../add/__pycache__/urls.cpython-312.pyc | Bin 737 -> 946 bytes .../add/__pycache__/views.cpython-312.pyc | Bin 5060 -> 5830 bytes osinaweb/billing/add/urls.py | 5 +- osinaweb/billing/add/views.py | 63 ++---- .../edit/__pycache__/urls.cpython-312.pyc | Bin 0 -> 391 bytes .../edit/__pycache__/views.cpython-312.pyc | Bin 0 -> 634 bytes osinaweb/billing/edit/urls.py | 7 + osinaweb/billing/edit/views.py | 13 ++ osinaweb/billing/models.py | 1 + .../templates/add_templates/add-order.html | 48 +++-- .../add-payment-comment-modal.html | 34 +++ .../add_templates/add-payment-modal.html | 62 ++++++ .../details_templates/order-details.html | 201 +++++++++++++++--- .../edit_templates/edit-payment-modal.html | 62 ++++++ osinaweb/billing/urls.py | 2 + osinaweb/db.sqlite3 | Bin 1204224 -> 1204224 bytes .../__pycache__/urls.cpython-312.pyc | Bin 6185 -> 6296 bytes .../__pycache__/views.cpython-312.pyc | Bin 35195 -> 35420 bytes .../add/__pycache__/urls.cpython-312.pyc | Bin 2969 -> 3060 bytes .../add/__pycache__/views.cpython-312.pyc | Bin 27104 -> 27349 bytes osinaweb/osinacore/add/urls.py | 2 +- osinaweb/osinacore/add/views.py | 10 + .../delete/__pycache__/urls.cpython-312.pyc | Bin 1593 -> 1835 bytes .../delete/__pycache__/views.cpython-312.pyc | Bin 5762 -> 6262 bytes osinaweb/osinacore/delete/urls.py | 4 +- osinaweb/osinacore/delete/views.py | 20 ++ .../edit/__pycache__/urls.cpython-312.pyc | Bin 2725 -> 2845 bytes .../edit/__pycache__/views.cpython-312.pyc | Bin 25479 -> 25715 bytes osinaweb/osinacore/edit/urls.py | 1 + osinaweb/osinacore/edit/views.py | 7 + .../osinacore/templates/add-edit-main.html | 14 ++ .../add-payment-method-modal.html | 60 ++++++ .../delete-payment-method-modal.html | 30 +++ .../delete-payment-modal.html | 30 +++ .../details_templates/customer-details.html | 118 +++++++++- .../edit_templates/edit-payment-method.html | 65 ++++++ .../listing_pages/business-types.html | 2 +- .../listing_pages/payment-methods.html | 101 +++++++++ osinaweb/osinacore/templates/main.html | 15 ++ .../templates/recent-activities.html | 7 + osinaweb/osinacore/urls.py | 1 + osinaweb/osinacore/views.py | 11 + osinaweb/static/dist/output.css | 59 +++-- osinaweb/static/images/icons/whishlogo.png | Bin 0 -> 15694 bytes osinaweb/static/js/billing/add-order.js | 32 +++ osinaweb/static/js/pop-modals.js | 12 +- 49 files changed, 988 insertions(+), 111 deletions(-) create mode 100644 osinaweb/billing/edit/__pycache__/urls.cpython-312.pyc create mode 100644 osinaweb/billing/edit/__pycache__/views.cpython-312.pyc create mode 100644 osinaweb/billing/templates/add_templates/add-payment-comment-modal.html create mode 100644 osinaweb/billing/templates/add_templates/add-payment-modal.html create mode 100644 osinaweb/billing/templates/edit_templates/edit-payment-modal.html create mode 100644 osinaweb/osinacore/templates/add_templates/add-payment-method-modal.html create mode 100644 osinaweb/osinacore/templates/delete_templates/delete-payment-method-modal.html create mode 100644 osinaweb/osinacore/templates/delete_templates/delete-payment-modal.html create mode 100644 osinaweb/osinacore/templates/edit_templates/edit-payment-method.html create mode 100644 osinaweb/osinacore/templates/listing_pages/payment-methods.html create mode 100644 osinaweb/static/images/icons/whishlogo.png create mode 100644 osinaweb/static/js/billing/add-order.js diff --git a/osinaweb/billing/__pycache__/models.cpython-312.pyc b/osinaweb/billing/__pycache__/models.cpython-312.pyc index b3ad9c1c92ac4a31dd64d2f13622a590f9b6a24d..f486031cb0c81650b3c16751564bc90a9df36fc2 100644 GIT binary patch delta 56 zcmezB{?(oLG%qg~0}%90wMqN6k(XDAv2L=oQVC<#<_SuHj3Q#JjLIEp{W+aEUm1YR IA}OF!0QDme@c;k- delta 56 zcmezB{?(oLG%qg~0}w1svPt{6k(XDAv39bwQVC<_<_SuHj3OeejLIEp{W+aEUm1YR IA}OF!0PZsn!~g&Q diff --git a/osinaweb/billing/__pycache__/urls.cpython-312.pyc b/osinaweb/billing/__pycache__/urls.cpython-312.pyc index 26e8ebf272023df062fdc1557da1fb8b7700ecf2..671b70ef572a2d1faac1766683dcd52d538be5f5 100644 GIT binary patch delta 288 zcmbQweve)KG%qg~0}%XLVUy;@#K7pBug?r*UaZ4UFL0+I{K2(h$UJ4(YI{u0O#H|I;1Oz!=6Wn3S25lbM&Umzt7UvUvexIwRx!$sEiELN{4BIwU8$Uy#wi aEMjn(#qcA?WGm(ucaCxnoPu~PUE>eAVwxGDuS1t-2)8GK7PF(oCwAh9wxHLoN-IX@Rf z-;%^47@wP;l9+Rg8%gSxAQA^6@2AN?(Fvt`^883a0^vBSiqVpR0*YG(l(_~g&6H+vM{r-xF7UCvnG() zEGAZCVxnXYUYdC6K>`=U#e;{M7&XxYr1+5$YvRp=$&z|79*pn(XBK8#J@`*}``-J% z_vU^4-k&e}zZ{Hx6OD#AIJeEQ-1p)}texE7=+|lrrvwV|V&X=EaB5NszQt{!6`UI> zkV7sx4RY8ew}KpT$!#D;fsl|Y` zS}K}KWjU9pnl6{JMU{%p;Q|X4O)rCRl-MP%Nd;%?+3#0v@)38ICrbADI$_i%{MTWj%<@9OLJh}5-XqAcyZ5Sz@ZSNMbrDLtZZ}X3872med(5^xB zHSlZ5Rjcja z`b)gRRsDJjGbU|jwk28P4WHrP4sBscaH;_vC(4czHUi7o?}yHIq!DqJGkC*ec$MgF zPc^9HyxB20C1wO0F=shRoMupyh>f8kumT?7RpaJhEn1ESDCf0OrBGndumnxd>J`lj z%vZF0N!2vTWBWe?{`6TOR-{Z}yA)N=<_p>;u>wp695|*{sNt(Z9B01TS{F_mc520( ziKT0zjlZWbVBiJkTMWXM0BF@=Q5ZHO_}OOUTD}=fzy;eB8ZqpKZ0w#z1q0=C$UTn) z3$VgYY8N!bEi1>z(zlU{uh=nAZIlKvZ`gWi?fivpOAt3p$EMVb>Cm zqj`{Z<_h@OuR*VQDc;kM?U4l587t(>1Is^;F8;;>PMGh-J2PxCQ?A97^ChSHDKIaZ zU&WVeY(bq>10~1d%f*IJb2Y-zDPq|6UN6t$pH+#o9jYn{ud8#TD z|BJDQmm;z$4wyBJ;-@z`7MFGSufP~Ys}$66D#I0yR@($p_YgvU;U@ODi36_Zfa@|} zNhUl$b3Nu#^4we}d67KuaC~c>N47o=>>(c_BaRZddKc3PWUgU}Y(3#DFo$tF_ujumvd;dnjH!7-M#WsZCqnZiH$= zJXjP@mIs~$PaY&asJVC*L=Peq1P^=jD2TSylLv9;C2JEL*x8xy&CHv>_x{+sl=d+g zR5+li+*JN+a8v8%UvH+YS+mpd-REj}0(3PDy1zw_fUdOYU7)KidURdZ161Mf)*tcD zglGrEAR%O($hwe4Y1)(LHTv9hVYml@e@0HAV4KB^y}o8<3PzhtK-!Ro!8lldBK;Ao zK@go#$udbMlP?g<&a7mMCehl%`En)8UImRxi7&5w-!Z%w)Z z(*=SFJAN8bMnk=56-U;Gte-9@(P{!kmc~JpJjjyB29Qa}L}0o`4xv1V>@YIciQ_2k zw?lRF$8NBsj-Ww%9b^bF3$IKjlY{WNL{fk`YSu6^&?l^voCIW~E~{z2PX{q40CNd* z!_@X(^7MKjPZL7SXNb3;>12cc@E)aALE$|pO-ePs;Z>2!5((Q)jpJ;rmr+^T;%m+D z6?sK4xQc9t=)*uiEsBw9StxtT@|Ik~8-XfbJKB&q&hVDKOEFj5|8M!+fQuaXi-!NH zQ1RK=I7Vg8P|7|x;v%Q3m)YEPzR^2ukt17n)-KU6nx?Xbo&u1J)1O)*Brr2axlytT zE2d@9RL4Ly*cjm$`uZ+5PuSEQIbT?|VYk{x?nn#70Ca!e5xjy8-QO7c2?W^fXHmiw z9M!!QM?H>+v+mHtin0)X{`SMT@EKwSf(zs3LT}na9GR)x_I3UoTjhBaXv*qg?ptrI9a0K!%H$Q zqaLH*y57>a(bzaXbhfLkGJ@U#4$ W$O*9>0mYqjAnwBIPB4&3EYx3wf&oha diff --git a/osinaweb/billing/add/urls.py b/osinaweb/billing/add/urls.py index b5c7f44b..84f0f892 100644 --- a/osinaweb/billing/add/urls.py +++ b/osinaweb/billing/add/urls.py @@ -7,6 +7,9 @@ urlpatterns = [ path('service', views.add_service, name='addservice'), path('order//', views.add_order, name='addorder'), - path('invoice//', views.add_invoice_pdf, name='addinvoice'), + path('service///', views.add_service_in_order, name='addserviceinorder'), + + path('add_payment_comment', views.add_payment_comment_modal, name='add_payment_comment_modal'), + path('add_payment', views.add_payment_modal, name='add_payment_modal'), ] diff --git a/osinaweb/billing/add/views.py b/osinaweb/billing/add/views.py index 53e288c7..28ccc22b 100644 --- a/osinaweb/billing/add/views.py +++ b/osinaweb/billing/add/views.py @@ -7,7 +7,7 @@ from django.conf import settings import os from osinacore.decorators import * from django.core.files.base import ContentFile -from weasyprint import HTML, CSS +from django.db.models import Q @@ -78,6 +78,7 @@ def add_service (request, *args, **kwargs): def add_order(request, customer_id): customer= get_object_or_404(CustomerProfile, id=customer_id) businesses = Business.objects.filter(customer=customer) + services = Item.objects.filter(Q(type='Service') & (Q(customer=customer) | Q(customer__isnull=True))) if request.method == 'POST': status = request.POST.get('status') @@ -98,6 +99,7 @@ def add_order(request, customer_id): context = { 'customer' : customer, 'businesses' : businesses, + 'services' : services, } return render(request, 'add_templates/add-order.html', context) @@ -119,63 +121,24 @@ def add_service_in_order(request, service_id, order_id): +@staff_login_required +def add_payment_comment_modal(request): -def add_invoice_pdf(request, order_id): - order = get_object_or_404(Order, id=order_id) - - current_year = str(timezone.now().year)[-2:] - last_invoice = Invoice.objects.all().last() - if last_invoice: - last_invoice_number = int(last_invoice.invoice_number.split('-')[1].split('+')[0]) - new_invoice_number = f"$0{current_year}-{last_invoice_number + 1}" - else: - new_invoice_number = f"$0{current_year}-1425" + context = { + } + return render(request, 'add_templates/add-payment-comment-modal.html', context) - invoice = Invoice.objects.create( - invoice_number = new_invoice_number, - order=order, - date_created=datetime.now(), - ) - template = get_template('details_templates/invoice-details.html') - context = {'order': order} - html_string = template.render(context) - - # Define the CSS string with Poppins font - css_string = ''' - @font-face { - font-family: 'Poppins'; - src: url('path_to_poppins_font_file.ttf') format('truetype'); /* Update the path to the font file */ - } - - body { - font-family: 'Poppins', sans-serif; /* Use Poppins font for the entire document */ - } - - /* Your existing CSS styles */ - /* Add or modify styles as needed */ - ''' - - # Generate PDF - pdf = HTML(string=html_string).write_pdf( - stylesheets=[ - CSS(string=css_string), - CSS(string='@page { margin: 30px; }') - ], - presentational_hints=True - ) +@staff_login_required +def add_payment_modal(request): - filename = f'invoice_{invoice.invoice_number}.pdf' - pdf_content = ContentFile(pdf) - invoice.pdf.save(filename, pdf_content, save=True) + context = { + } - # Return PDF - response = HttpResponse(pdf, content_type='application/pdf') - response['Content-Disposition'] = 'attachment; filename="my_pdf.pdf"' - return response + return render(request, 'add_templates/add-payment-modal.html', context) diff --git a/osinaweb/billing/edit/__pycache__/urls.cpython-312.pyc b/osinaweb/billing/edit/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68c0a98af8d21ff54f4cc1b62651109b2fb8d9d6 GIT binary patch literal 391 zcmYLDyH3L}6t&}|Y6%e%GtiX|)MJ;b69ZER5CdH*w>Bk}<3x5sl##E1A3&&rKVc~n z5>lj2Ol(EnI&s~m;!5^8=f2K;4}v`e!C$(!&w$@n?82+a>H^3k;)r93B0Rv@az{E5 z84!#dBrqp}OzXSBf8^xNeI;8x!2_@GTD2c5Tex%+mfit+_o2v5c_?_84ii>HLZ!nf z=1kfq#Ujyf)k>dFnVQ7yOiQEf#&UlYN*St2+YV|MQrccz`p^QaQ=yfap%tXi`i5Q` zp$&~qn2zI!p2y?N`WV`0DU*dQD0a5>pi1N$UC9m4#fVmh)EZKININOk^)B3+Nzu~* vIAM6^6uu?F7%$M#0-gNUk=K|vj-RrxX6K{XnfER~-K!;W4x9&H`_TLc$NOq$ literal 0 HcmV?d00001 diff --git a/osinaweb/billing/edit/__pycache__/views.cpython-312.pyc b/osinaweb/billing/edit/__pycache__/views.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..762467ed435e25889cf3a3e3ea03a2d25cedd556 GIT binary patch literal 634 zcmYL`L2DC16vtBf<%%f)un*i=ZD+=K~RbS*qGf)t!Qfho8tv713|ZYH|Iyb8%oJ1tkY%uaCf_ zaK2*B>Xgj8sKFkngRdrM$u0^j@OA>)*hVHx1MiJ?2XD8}`^jq!N+(k1CX+?- zLS_?}qLUsoOw8P%WF5ZG%8^V;n0jAXuct6b2DuPwA2kEPsA zM7Z=8wnK6j1=pg(mw%h&O6&83)2-)U-+W)&J+197a7=n}({5aRtE=~

- Add Order for {{customer.user.first_name}} {{customer.user.last_name}} + Create Order for {{customer.user.first_name}} {{customer.user.last_name}}

@@ -20,7 +20,7 @@
-
+ + + +
- - +

Pick Services

+
+ + {% for service in services %} +
+
+

+ {{service.title}} +

+
+
+

+ ${{service.amount}}

+
+
+

Add

+
+
+ {% endfor %} +
+ class="w-fit py-1 px-5 bg-osiblue rounded-md outline-none text-white border border-osiblue text-xl cursor-pointer hover:bg-white hover:text-osiblue duration-300">Create
@@ -52,6 +71,9 @@
+ + + {% endblock %} \ No newline at end of file diff --git a/osinaweb/billing/templates/add_templates/add-payment-comment-modal.html b/osinaweb/billing/templates/add_templates/add-payment-comment-modal.html new file mode 100644 index 00000000..0057e055 --- /dev/null +++ b/osinaweb/billing/templates/add_templates/add-payment-comment-modal.html @@ -0,0 +1,34 @@ +{% load static %} + + + + + + + + Osina + + + + + + + +
+ {% csrf_token %} +

Add Comment

+ +
+ +
+ +
+ +
+
+ + + \ No newline at end of file diff --git a/osinaweb/billing/templates/add_templates/add-payment-modal.html b/osinaweb/billing/templates/add_templates/add-payment-modal.html new file mode 100644 index 00000000..1e309340 --- /dev/null +++ b/osinaweb/billing/templates/add_templates/add-payment-modal.html @@ -0,0 +1,62 @@ +{% load static %} + + + + + + + + Osina + + + + + + + +
+ {% csrf_token %} +

Add Payment

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ + +
+ + +
+ +
+
+ + + \ No newline at end of file diff --git a/osinaweb/billing/templates/details_templates/order-details.html b/osinaweb/billing/templates/details_templates/order-details.html index 347cde05..fb9407fa 100644 --- a/osinaweb/billing/templates/details_templates/order-details.html +++ b/osinaweb/billing/templates/details_templates/order-details.html @@ -7,13 +7,34 @@
-
-
-

Order {{order.order_id}}

-

{{order.customer.user.first_name}} {{order.customer.user.last_name}}

+
+
+

Order {{order.order_id}} - {{order.customer.user.first_name}} + {{order.customer.user.last_name}}

+

+

+ {{order.status}} + - 12-02-2024 +

-

{{order.status}}

+ +
+ + + +
{% if order_items %} @@ -23,22 +44,27 @@ {% for item in order_items %}
-
+

{{item.item.title}}

-

${{item.item.amount}}

+

${{item.item.amount}} +

-
- > - - - -

Remove

-
+ +
+ > + + + +

Remove

+
+
{% endfor %}
@@ -53,29 +79,152 @@ {% for service in services %}
-
+

{{service.title}}

-

${{service.amount}}

+

${{service.amount}} +

-
- - - -

Add

-
+ +
+ + + +

Add

+
+
{% endfor %}
{% endif %} + + +
+
+
+

Payment

+
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Amount + + Date Paid + + Date Due + + Payment Method + + Comment + + Actions +
+

$20.0

+
+

02-12-2024

+
+

02-12-2024

+
+

Cash

+
+
+
+ + + +
+
+ +
+
+
+ + + +
+ + +
+ + + +
+
+
+
+
+
+
+ + + + + {% endblock %} \ No newline at end of file diff --git a/osinaweb/billing/templates/edit_templates/edit-payment-modal.html b/osinaweb/billing/templates/edit_templates/edit-payment-modal.html new file mode 100644 index 00000000..b34d5952 --- /dev/null +++ b/osinaweb/billing/templates/edit_templates/edit-payment-modal.html @@ -0,0 +1,62 @@ +{% load static %} + + + + + + + + Osina + + + + + + + +
+ {% csrf_token %} +

Edit Payment

+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ + +
+ + +
+ +
+
+ + + \ No newline at end of file diff --git a/osinaweb/billing/urls.py b/osinaweb/billing/urls.py index d21abcda..c58f79c3 100644 --- a/osinaweb/billing/urls.py +++ b/osinaweb/billing/urls.py @@ -6,6 +6,8 @@ from billing import views urlpatterns = [ path('add/', include('billing.add.urls')), path('delete/', include('billing.delete.urls')), + path('delete/', include('billing.edit.urls')), + # LISTING path('items/', views.items, name='items'), diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index dfdd46cb40d8aa4ad5ef7765735cfa77e7ce7db0..0cd843f99069ea7c7a59c9321e5f9932244ebcd7 100644 GIT binary patch delta 1433 zcmah}Z%k8H6o2==_Pw_6&wVd(6K0Xu@<$yOUSD5n%VuC!2_WcD#JD96DMjj_tyrL9 zjHn%aFlg22-CP{Z>4(iPBUSIREyfVD822ZNW{Jy4U~!4;!^RfpqREoI7B{v}yUF=; zU+y{Y{LcC13|+4ux?Z1NCiGJjD5WTB&Jb{7r4RH^v_;Cmxl^~wGyqTiSr!J)OlY+g zfc=>s*8l+bGC!72Rd@I_)i}kQVtQ?Ncy}V!(CY3A_0}bJb|u4mir4AQJ$v=tEv^2& zTerGj+Z0cfdA$Q#ZKJv&xxQ>q6@B zGrwHJ0Q7`HPp~v&-i(zQGeg>E%owo@4WNg*H#~11o@a*V*{kywlSF@QR|GYrP=z;QzPLVh2~C6HY49{nz_<$JA#zFLoMbdhEPijL85nG zXIC)R6YmZu!W|yLG)cLzS+czjEh}-GWYftR$yQ+ko#cxpwsv~esx$i;s=`rV%>^nh z<)7HazNnQ|UX3*8*)o67GCGP`iBssKXc8-N-borIu6h9y3(t|0g3D z`K4~RqaantQiVkTP>Ut%1_uJJEEAkN?5X9?;#4E9AnU&X0%U3r70|pGx_X$ z2%|K*h?TbN-`lu#=*8?f9MHL791BLt8Ye7VxGi5W1?1Bh*YL5?gd}Da-T@7(D!d)n zC_Fbn30*{EXd*iU14o?Sf=Y53 zojL8u=^Th1urPO7p3?;*HxBaT#zCQ`jb3V*BkYXe0?;yt^;zLMwERLI%?iIVLY8z8 zW>Hr`KpsC7Y?w1BpF84r0&%GFhXT1gDz-vMO<`MF?8k@GVvC}BDX&65rUQj8F|WTDlMU#VAsIDXgKcnCp|mk(PUKDeO-OK zqy0PkW67S*UA{hwjNG{(k~N zGWxmP1V_>j5J^9f67SNoxE-@YvIC0Si7bH%G5`6u3ak`>l*7QoLgymWN$)ZFq)cyv zYcM-5UoyckTw@eE0_c(y#3#R!$6-XsfS{4t4ptv7Ids^0$Y*XkvgMWk>mHsS6*CQ9)gP(~ zZ5#}SIs#Gk%{Llc@wJUxYxQ_nU(<%>=9XYE*%ETC?XGLCuaCMzd;i9#d2$=>**eP+ VEjS@Jab)_KSOm!ZYx0Ws{{n`Di^Tu{ delta 1510 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 Qq+6a|S_7yRhAV#f2d!w*5&!@I diff --git a/osinaweb/osinacore/add/__pycache__/urls.cpython-312.pyc b/osinaweb/osinacore/add/__pycache__/urls.cpython-312.pyc index ddfdd4280f3ce1514703de1dc4bf3e140bdfb091..0a4237467d3d36964b32180e7ecc3a27c130a2dc 100644 GIT binary patch delta 196 zcmbO!{zY8UP*jzYDq?ZN_=j9N@9+mrp)Gr z>>Z4(MG8QTlQlW3xom(8Mj$T!zIh$zeMW_cEF2d&l^29wS9QLq>U_Z~DC0B7Ms-#ej&#W=sY-KAi_I}CS6(?&k8Zs(Pj$vFUk}8y<(8919 zqzVY4G%E!)l{fP-`KC-Z*0E#Mo-F7k%$r!5o0?amo10pak)JX-LRTd~A~7W;z5pT~ z4-t>g%}+_pDPm+~V7S1(^@ zl-FeP^V4MX)709WlIG9I4AeY%W4a_456}!CVknl{d?lTcN$~@d6r&&G2O9<^v5!n_ NjKPebnc+;ZIRHxuKI;Gg delta 98 zcmcb5mGQx4M&8rByj%=GurSFcO=u#oB;%uv>P(D`3X`=M4H*?D$1tvAsT9;y+APQ9 zo5HEd/', views.add_ticket, name='addticket'), path('ticketupdate//', views.add_ticket_update, name='addticketupdate'), - + path('add_payment_method_modal', views.add_payment_method_modal, name='add_payment_method_modal'), ] \ No newline at end of file diff --git a/osinaweb/osinacore/add/views.py b/osinaweb/osinacore/add/views.py index 7d058a00..7a89ef2f 100644 --- a/osinaweb/osinacore/add/views.py +++ b/osinaweb/osinacore/add/views.py @@ -717,5 +717,15 @@ def add_ticket_update(request, ticket_id): +@staff_login_required +def add_payment_method_modal(request, *args, **kwargs): + + context = { + + } + + return render(request, 'add_templates/add-payment-method-modal.html', context) + + diff --git a/osinaweb/osinacore/delete/__pycache__/urls.cpython-312.pyc b/osinaweb/osinacore/delete/__pycache__/urls.cpython-312.pyc index cc953bfbd6ba4c5e17d6e22dca38ad93ae911248..167350ae999107f3a3e62b0b3b2511f1432defc8 100644 GIT binary patch delta 340 zcmdnVvzkxiG%qg~0}xDHWRtd#g@NHQhyw!xP{wBlri~hF7$cY%QW;YuQ<<}5U@8!F ziqsmm)yxn+Se-Obog6|Q#!8Vvs7vRG5~!5bl-qoV@fV|a6-Pm0Wo~L-iT*92l+>Km zl2j-^H$NpYr-~28OD)OBPtm_6fvN^93RdZ-DLDBi^H&`ah=O>izId?YEopR7u*S*9 zSz5SNfo^03;$mjT$ziP5jc>AWbVyAIy)LSMQB?nenb#E-Z=lcxPRSXj*QISPO50p; Uj=jPX_d%MUpQ(|%NExUV06ZOBm;e9( delta 104 zcmZ3@x06TXG%qg~0}w1svPt{G%)sy%#DM`mDC6@6#*G?l7&+3pqWCH$HKjJ|F#Td= q_S58_T*&fu@=VrRZbhIWTlX% z@MbkeKVhb1#>tJ`BI*i2Wz!il8EP3z7(rSbjKCv=4 zHLpZBH$NpYM=zr!H)kbd5lGQWrXpb=RU`@|ikX0ffy|pnhR1Y4I~;EKCm(Ivo*MX;h4', views.delete_ticket_modal, name='deleteticketmodal'), path('point///', views.delete_point_modal, name='deletepointmodal'), path('taskpoint///', views.delete_task_point_modal, name='deletetaskpointmodal'), - path('note/', views.delete_note_modal, name='deletenotemodal') + path('note/', views.delete_note_modal, name='deletenotemodal'), + path('payment/', views.delete_payment_modal, name='deletepaymentmodal'), + path('paymentmethod/', views.delete_payment_method_modal, name='deletepaymentmethodmodal') ] \ No newline at end of file diff --git a/osinaweb/osinacore/delete/views.py b/osinaweb/osinacore/delete/views.py index debf383c..e8a0b75c 100644 --- a/osinaweb/osinacore/delete/views.py +++ b/osinaweb/osinacore/delete/views.py @@ -153,3 +153,23 @@ def delete_note_modal(request, note_id): return render(request, "delete_templates/delete-note-modal.html", context) + +@staff_login_required +def delete_payment_modal(request): + + context = { + + } + + return render(request, "delete_templates/delete-payment-modal.html", context) + + +@staff_login_required +def delete_payment_method_modal(request): + + context = { + + } + + return render(request, "delete_templates/delete-payment-method-modal.html", context) + diff --git a/osinaweb/osinacore/edit/__pycache__/urls.cpython-312.pyc b/osinaweb/osinacore/edit/__pycache__/urls.cpython-312.pyc index a0991f281dfcd63c318dc95ac74618084b4d2fa4..f38ae7000cbd45e2adce7599ce765e52ef114fec 100644 GIT binary patch delta 264 zcmZ1~I#*2nG%qg~0}!YzwMk>+U|@I*;=q6el=0bNqq-=w0TV+iV~TbvbCw=V0fJ7^ zS;MxP8NyE&iIS+))zsVU!tBbVA(WbuSyGT#nVXtdlABtRk)NV}OAte>%6RgAR?*G# zS#L8kN=~k3e`at?7^Em3sxuy&cN^(#DM{EDC4ulMs-nUj&$KD@k(t?oy|GSu1uS6 zuzqA@l$d;q{h4%;2vA{>D2NaP5g>g<5+Fiy@&k@~E?pp#5r~UtY|i9lWt`l^HGx}S Nf}g38yGR=-3;;``8vy_S diff --git a/osinaweb/osinacore/edit/__pycache__/views.cpython-312.pyc b/osinaweb/osinacore/edit/__pycache__/views.cpython-312.pyc index 83999fa1b537701054f91b11d4393c03a0cf15b2..c55dfd29f6e644b7f4b83e114dd8d5a14a52aea9 100644 GIT binary patch delta 1610 zcmb`HYivwg6vxj#W+v4!)1(Y_rmBjJX|%yaDcWd}_7}g3zdX9QR)Cy%wqjp$+e2s{4+qp&ja38RaUJP>yr`?lk*@%T2 z%JvLon~Y*l0Gn?bx zNEq?i?Tfhie&JcoBuR4$Q6;rnx9$mzOY7i;@icxK*YB z2gD*j2%!1A0XPga0!M)3)R?E_{RP<__#5~KNC8d)iGT{60+0j$7pMdN1CoLNDK6j9 z_cUZVpaJ#38Q?4sq&`K7F(v!|9x1CsE702M ziQL3)OeE9XEaWp|R*`P9A@h*LWjGtC<+o9l(F&pi==~Eb2zA$&=xX`bUi8ah5n5$)D36Rf&Bgq_`uJ)?{2%$Fp8ZlHBvHY-Ur~yDmbuhGnZl IvGZ4d0`0z+ssI20 delta 1473 zcmb`HTS$~a6vuZqchQZt)FfLiFJ-o7VlGKuDOXT8S|tVZp|;OUU@Fq=r(h9=SP5mQ zQ;DoZR+46#HeI|`ik7C?ogTLA_E=C4f)745e}&cymJcoLZ_oMWoSAdZf4-d@A!mk( z>zG!nQHW1tR?OiS2{o=>%!n>Am>~sSa`06Y3-a^z2Zmft2$Lq1}X>V&<>_ zQpt~o1uKQq5T4{-ff!e+7C+PioMuzuL1J-(Ay|DD4=R}15J;-HY$!z1w;kqrNv8Qp zI#vj0D@i>wMw^I@pO5}Q$Ypjc)|)i4OR-0o zA>EU|k4s-cn%LI(?IP|#yn&o#HSwvgx5Soqb($>6#a3F+e#P$*LD9zJs>foXg7+G) zIBmLyW3K}@fM%ctxCyiZ?W`P z^ft0P1oU3B>XhKY(uK3Oy(ZmXN_8{qb}m(_U0WboWs8(8=auBirL+%6&5Y+EtVb-{ z9HJQ$<{;|VuzsU2OHCW)5#SlH zpvRTV)?*ae&?8bcF3brYk|sN8QMp|~l~`/', views.edit_business_type, name='editbusinesstype'), path('reference//', views.edit_reference, name='editreference'), path('tag//', views.edit_tag, name='edittag'), + path('editpaymentmethod/', views.edit_payment_method, name='editpaymentmethod'), #Mark Points diff --git a/osinaweb/osinacore/edit/views.py b/osinaweb/osinacore/edit/views.py index 769dba50..8f442652 100644 --- a/osinaweb/osinacore/edit/views.py +++ b/osinaweb/osinacore/edit/views.py @@ -378,7 +378,14 @@ def edit_tag(request, tag_id): +@staff_login_required +def edit_payment_method(request, *args, **kwargs): + + context = { + } + return render(request, 'edit_templates/edit-payment-method.html', context) + diff --git a/osinaweb/osinacore/templates/add-edit-main.html b/osinaweb/osinacore/templates/add-edit-main.html index d7df6bca..b68a0f85 100644 --- a/osinaweb/osinacore/templates/add-edit-main.html +++ b/osinaweb/osinacore/templates/add-edit-main.html @@ -272,6 +272,13 @@
+ +
+

Payment Methods/p> +

+
+
@@ -557,6 +564,13 @@
+ +
+

Payment Methods/p> +

+
+
diff --git a/osinaweb/osinacore/templates/add_templates/add-payment-method-modal.html b/osinaweb/osinacore/templates/add_templates/add-payment-method-modal.html new file mode 100644 index 00000000..b0023ea8 --- /dev/null +++ b/osinaweb/osinacore/templates/add_templates/add-payment-method-modal.html @@ -0,0 +1,60 @@ +{% load static %} + + + + + + + + Osina + + + + + + + +
+ {% csrf_token %} +

Add Payment Method

+ +
+ + +
+ +
+ + +
+ +
+ +
+
+ + Upload + Logo + +
+
+
+ +
+ +
+
+ + + + + + + \ No newline at end of file diff --git a/osinaweb/osinacore/templates/delete_templates/delete-payment-method-modal.html b/osinaweb/osinacore/templates/delete_templates/delete-payment-method-modal.html new file mode 100644 index 00000000..69486555 --- /dev/null +++ b/osinaweb/osinacore/templates/delete_templates/delete-payment-method-modal.html @@ -0,0 +1,30 @@ +{%load static%} + + + + + + + + + + + + + + +
+ {% csrf_token %} + +
+

Are you sure you want to delete this Payment Method?

+ +
+ +
+
+
+ + + \ No newline at end of file diff --git a/osinaweb/osinacore/templates/delete_templates/delete-payment-modal.html b/osinaweb/osinacore/templates/delete_templates/delete-payment-modal.html new file mode 100644 index 00000000..8abd9bf4 --- /dev/null +++ b/osinaweb/osinacore/templates/delete_templates/delete-payment-modal.html @@ -0,0 +1,30 @@ +{%load static%} + + + + + + + + + + + + + + +
+ {% csrf_token %} + +
+

Are you sure you want to delete this Payment?

+ +
+ +
+
+
+ + + \ No newline at end of file diff --git a/osinaweb/osinacore/templates/details_templates/customer-details.html b/osinaweb/osinacore/templates/details_templates/customer-details.html index 3d9ec8cb..c00baf0e 100644 --- a/osinaweb/osinacore/templates/details_templates/customer-details.html +++ b/osinaweb/osinacore/templates/details_templates/customer-details.html @@ -28,14 +28,14 @@
+ + +
+
+
+

Payment

+
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Order + + Amount + + Date Paid + + Date Due + + Payment Method + + Comment + + Actions +
+

order 1

+
+

$20.0

+
+

02-12-2024

+
+

02-12-2024

+
+

Cash

+
+
+
+ + + +
+
+ +
+
+
+ + + +
+ +
+ + + +
+
+
+
+
diff --git a/osinaweb/osinacore/templates/edit_templates/edit-payment-method.html b/osinaweb/osinacore/templates/edit_templates/edit-payment-method.html new file mode 100644 index 00000000..858cc5bd --- /dev/null +++ b/osinaweb/osinacore/templates/edit_templates/edit-payment-method.html @@ -0,0 +1,65 @@ +{% extends "add-edit-main.html" %} +{%load static%} +{% block content %} + +
+
+

+ Edit Payment Method +

+ +
+ {% csrf_token %} + +
+
+ + +
+ +
+ + +
+ +
+ +
+
+ + Upload + Logo + +
+
+
+
+
+ +
+
+ + + + + + + + + + +{% endblock content %} \ No newline at end of file diff --git a/osinaweb/osinacore/templates/listing_pages/business-types.html b/osinaweb/osinacore/templates/listing_pages/business-types.html index b95902ee..de370a66 100644 --- a/osinaweb/osinacore/templates/listing_pages/business-types.html +++ b/osinaweb/osinacore/templates/listing_pages/business-types.html @@ -57,7 +57,7 @@ - +
diff --git a/osinaweb/osinacore/templates/listing_pages/payment-methods.html b/osinaweb/osinacore/templates/listing_pages/payment-methods.html new file mode 100644 index 00000000..082079b9 --- /dev/null +++ b/osinaweb/osinacore/templates/listing_pages/payment-methods.html @@ -0,0 +1,101 @@ +{% extends "main.html" %} +{%load static%} +{% block content %} + + +
+
+

Payment Methods

+ + +
+
+
+ + +
+
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + +
+ Payment Method + + Description + + Actions +
+
+ +

Whish

+
+
+

Helo this is a description

+
+
+ +
+ + + +
+
+
+ + + +
+
+
+
+
+
+ + + + + + + + +{% endblock content %} \ No newline at end of file diff --git a/osinaweb/osinacore/templates/main.html b/osinaweb/osinacore/templates/main.html index 2a1b72db..e1d2d405 100644 --- a/osinaweb/osinacore/templates/main.html +++ b/osinaweb/osinacore/templates/main.html @@ -424,6 +424,14 @@
+ + +
+

Payment Methods

+
+
+
@@ -718,6 +726,13 @@
+ +
+

Payment Methods/p> +

+
+
diff --git a/osinaweb/osinacore/templates/recent-activities.html b/osinaweb/osinacore/templates/recent-activities.html index f601c0fd..52e1d54d 100644 --- a/osinaweb/osinacore/templates/recent-activities.html +++ b/osinaweb/osinacore/templates/recent-activities.html @@ -175,6 +175,13 @@ {% else %}

{{latest.status.text}}

{% endif %} +
+

Osina

+ + + +
+
diff --git a/osinaweb/osinacore/urls.py b/osinaweb/osinacore/urls.py index 1e4b138b..ea2039a5 100644 --- a/osinaweb/osinacore/urls.py +++ b/osinaweb/osinacore/urls.py @@ -52,6 +52,7 @@ urlpatterns = [ path('businesstypes/', views.business_types, name='businesstypes'), path('references/', views.references, name='references'), path('tags/', views.tags, name='tags'), + path('payment_methods/', views.payment_methods, name='payment_methods'), #Details Templates diff --git a/osinaweb/osinacore/views.py b/osinaweb/osinacore/views.py index 1efe0f30..b960a118 100644 --- a/osinaweb/osinacore/views.py +++ b/osinaweb/osinacore/views.py @@ -475,6 +475,17 @@ def tags(request): +@staff_login_required +def payment_methods(request): + + context = { + + } + + return render(request, 'listing_pages/payment-methods.html', context) + + + diff --git a/osinaweb/static/dist/output.css b/osinaweb/static/dist/output.css index f7e24821..ef500ddf 100644 --- a/osinaweb/static/dist/output.css +++ b/osinaweb/static/dist/output.css @@ -1048,6 +1048,14 @@ video { height: 3.5rem; } +.h-2 { + height: 0.5rem; +} + +.h-3 { + height: 0.75rem; +} + .h-4 { height: 1rem; } @@ -1222,6 +1230,14 @@ video { width: 3.5rem; } +.w-2 { + width: 0.5rem; +} + +.w-3 { + width: 0.75rem; +} + .w-4 { width: 1rem; } @@ -2590,6 +2606,10 @@ video { padding-top: 2.25rem; } +.text-left { + text-align: left; +} + .text-center { text-align: center; } @@ -3247,11 +3267,6 @@ video { transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)); } -.hover\:bg-fifthosiblue:hover { - --tw-bg-opacity: 1; - background-color: rgb(146 156 183 / var(--tw-bg-opacity)); -} - .hover\:bg-gray-50:hover { --tw-bg-opacity: 1; background-color: rgb(249 250 251 / var(--tw-bg-opacity)); @@ -3280,10 +3295,6 @@ video { --tw-bg-opacity: 0.6; } -.hover\:fill-fifthosiblue:hover { - fill: #929cb7; -} - .hover\:p-2:hover { padding: 0.5rem; } @@ -3293,6 +3304,11 @@ video { color: rgb(146 156 183 / var(--tw-text-opacity)); } +.hover\:text-gray-100:hover { + --tw-text-opacity: 1; + color: rgb(243 244 246 / var(--tw-text-opacity)); +} + .hover\:text-gray-500:hover { --tw-text-opacity: 1; color: rgb(107 114 128 / var(--tw-text-opacity)); @@ -3461,10 +3477,6 @@ video { flex-direction: row; } - .s\:items-center { - align-items: center; - } - .s\:justify-end { justify-content: flex-end; } @@ -3839,14 +3851,35 @@ video { width: 75%; } + .xll\:w-fit { + width: -moz-fit-content; + width: fit-content; + } + .xll\:grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); } + .xll\:flex-row { + flex-direction: row; + } + + .xll\:justify-end { + justify-content: flex-end; + } + + .xll\:justify-between { + justify-content: space-between; + } + .xll\:rounded-none { border-radius: 0px; } + .xll\:text-left { + text-align: left; + } + .xll\:text-2xl { font-size: 1.5rem; line-height: 2rem; diff --git a/osinaweb/static/images/icons/whishlogo.png b/osinaweb/static/images/icons/whishlogo.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a31004e16258696a84b759ca4bec642e984b7e GIT binary patch literal 15694 zcmeIZWl)^YvoN|i!4rZ6f&`La!F_SJ;O_41;_e|xAV3lFJr4nf{=qp+rnTLjV8(h*gy3bpQZN zbQKeT|4$K2BL_hj&wLb&e01F%eEhAw>;W=%?l$&}Dj;h|dmVdgyFkxDdvO2&>$S6< zk&lu3TcE8wh|Bt)He3N94>U9YATAZ)VQuSb@55+g@8}GcU^<3%Gch{bNiZ1-s`IFO z$k{tND+hVm>jr7)*#^1VirO(rNivED0MQ6Q_CD5(0U$T9H!whg>EG}I(e-~mb2Bmi zTN58w38sH1%1B*{QO@1Vo>7oXh|`vrUxZOul#5qTRD@694I>{9uMjtnC^xSFCl4=> zM-<4z%lIEZCUkFJb`C%tdBy+e3;ia+L8gNdIc6uKs`D6a@Ou*4{ok_WzsS|07~=y+99pZXJ7XcV91C^u#$Z z|I?KRP|nNV+Q;2X&)wbaUtH93a`$ofc5?S%l#~01Yr>4IhR$F+cYklTe}hq12daR* zeXPN@_A2rcOlT}z&dzo~K7Kv{VPPI#Q8`gQUS0(e5jjB~IYk*>K|WzoULgh1f5FPT z+xmj+!9M?jwfo<&eE%ivKjHxLK=&+f@8#@gZ>Q+x4r2VbVFR82D_VpU75__o{{d_F zU(>?#U&3;uiQ)cda{n)r{jX1G3Hqn{pQ4L?`A^}u2csq43oY8?`BAz6fM}PByo_GJ z!T|!$$80-r>l80)IT#QBa#=y=DO;6Vi^;O6z4I70<8hzGyn`8ZwxnOR_7eb$~$tNZviM}I%~Z}mJ?Chv=FziPJ( z?k*`fdIDfP{p*AYU_>uUYycnvU67$4^ir2b7x?H01MvUwPewHG|NBw?Grs?3D*uO2 zqWKwtX6b*|^!&%f{tux1hoApvDjV3MU-#threo?nA@(FEHB||%lPB}BjO?1#Km3$K zt?n7f{1O@3FSjCz5h1o_XpltUMS(v~DZC+&4VyDv3rzCO2`2+xf1TeUAE=TVX+486TRy$-K!Q6m8a(dtKVMbxR*DY=_>AZ z!2~K4XYAPr4YluM{r{d*`F0sAN!8CbCYrRWD@khAkAUJu+URhW6qR-C(_WJ_DN^fH zXL)UI8v#Tfub%JPRMU*^Y#4*)N-44ra>uCX`FlqHX=&a&AKNQs7$O$X94 z-UNko48?!NX`{PI+GDBPb#&h;Iw$)2ID18|RpMqvSbqgoM4wsov3c<=Svki^EBDUK z^^xUQO4mfPdf3C<1Zs=w;s8r%&$oIsXZHKmMRJ|fPuy1SGz|db>!3SHV#w6j7eOvD z{Uq?dHGv^c(?*$<`(Tg}xBbrrr+`>ukMMmp6snG$`$pq|j|Df3*Yx3zK`*=y6h9aE zL{$}TC|Uh*Z?B)RY&=`9{vc@@j`XIJ*pnoCe>WlxSRJi1xq3FfdrL{V(6)`Ry|@Ua zF)06TX0q)dD73pDUP|SlV9)s159%r%emC{djQ2pc(5TsczHQRYrr05GJ~T3Ac^BD* zGW&Hu)TxAA2`draR_UOVqxSE8nMe<;5Wnys{dR{>6Nx99z zlHh=%&fE<`g+cvXNBXIa8RpBvur5%RuBbM$ho2Nbg%av_BS;udZixcRRaGy(lU}&y z6K$^SnepWZX&qufmJdj{qIt3K0q=Ppg@n3_z5|Au>tTBA#N@%nL3+|)Rw36id&unIdnxc1*QZ? z(o1ewT()@+mk)PoElsj4ZV3?#qZ8}j#ntIcXDO>YM^bEUWN2@%n^tBGCCU4_|6J7a z@iluWtQ?7A0(djAk6f-s{pciX(rA&Bm?I{I>adw<7deJ&QDK-J&*PF(mj$EFCdI^Z ziA;>6)Uo^!g@;XD>j#~gQdO0yTZ+6THh8V3R3SsCS{Kj5j~pVAsXu-MKPK_tVltok zf0AC293)Dka^0gw@Eh>=yZ(t=G?S+ew=l053pbS^)xd4uJsLDY>DtTN<=OIq$y zVaCeqL~ruo<$w*qp;#?wQCx_SMlY!2eoa%r%j$iXm1=w<&WPDg!<&QY{0Bn`UJ0*6 z9*24h^Qsp3r{tK&fH*Mq1rgcx^h{+63)H34BB#7H-Fe2qlsq@L@^-2Is zy~?|iE^y>@fPt9bKIA9r`Z;6;eBQrX*)qmjh#NN)@ADT66tKd-Xmh7J24A^tplJP2 zGX1o=SlHip<>uu=DC0IVcLgq&!hDy8cQsX$<|0nMQ1t>EAWn@d@oG}1#Axkok$8SJnN6lxttaPDm&Ve(S;1W$p_iS+xAlvg}lgPb?JKB27BAAAm~k zb>r~RmX$UhZUV&l2^&YFhUR&+lO~S;esY%;ZCY_@k&&8k$E(RA5sIbKwJ4-xcXbUb z1)CQTR!$@6Xphf;j}PbrKQXHke>^_VztE=O{${p&6kf$?V9H6Y=PdKvFz?rJ3*V`! zzr627u^L4hYC`z%k$_1Ky|fx^+5B0TL<7Ua-{X>1s(h%+*u>$}u10yf!@?lORe7F1 zjC?WGBZEAVaEm4?r%Tun$J9=5hyOSFuO*&xZnpxjZMjsEmmm*c5&r3JshF#}qzhiZ zchGzAy%~ncdF_$D_tl?LYQ5Krmaeq{L`hMe_Y(v zEi_KEdUc`p)qFOLDwc^Z0AzJsxxBQ~M|TDmhu5O)oXwc&Xf--f*|ONe!;RZTx;?SD zJMhitrK)9@`qgqBTe0}W)9&k%uFZsrT$dAV_`K)-DSbyrr{^EL4lDPLP4nfWA9=4DC_js2if-zC0c?O@ymsCNV@e z>xwHr_H|{MERuyOtQVzkVy)Rlza}0bbydH-^7QoCXOcviS}|@=(c^c8AtcK00Vj)p z={)X6WwMhFW?5Ql1jF=xV;z1+~Y9 z*^EgPJs`c!zft!BJlxxo)seq@{R(gU*Chd%>}-wXTYOU#_ym6|lyJHifIgS+md%PJ zVnNsAeb%a%{j!tg$Fm&AikE}J1*vaouawUwE%s$*;D*7w5PZrw682ZZL)B8;{wOp2 z6)aB%03BN6?uCbBX48UCkErxqvtw1s#3UlB*mFf5_X_fu(*VC~u$~*_a}Fk1h1l0( zKF%gMf|oQHe41xY$|qP`1wD+b{R zv!BFygu`f}5vg)!V31b_)nXy5WjCLk)Dp#K?kz)uNMhWezR$S1t|V(w!Ap1%nh;2q zpk`B0JP`}WD}5YMzjRaI%)OyQTlIDjxv!+bQ&Z!HmpT}E7r&mSrSATok2}EMhgbA= z1UD;X|EavWAmy%vGT+)#o6`uq)s>hc2~OHEBbSIU{T;D<&E)^24K~bG$X~uRBNKLY zE()I?8*51}jfN{!RM(eAYS2I3s%+Hzc|D}Mz3L^Oc^(rIl9dU`g4>sY!jEztt&{Li+9V7T5i)2fB{l_}%;O7w|mTgi`84VhDC@Qn>P3ukP{+ z3~KM{J-xg*0Ye0wSVIYr6`uM90s-K|?zf!gIHZYfTx)+TqDqI4aGsLQ~@$ ztZP@cpLx^lqy9HTq13q_yDnrF5eAy`-GqDu;Hy)u;bu(zq&#$;?23S0Eg-b^)EagR zYKZhx=YXCpSUKB#+f*9eg)K{YPtTSN*@+W)0zAG{RYUr<1Crx*TYB?Pe~2TV=C=*F zq{g%gnPn&v&q~;Ko^cB2z+>nN=>Qv&zH0MidOhyjKCMuryEQto;4ysPEZ$c?@>FvG z9vy^OReI)Ny68O}wdngap{dndt|r1ZIsI3c(x^X$_1%a0UyqP-!b(KrA5VjP{pP?n zGW(AZ5<|64$pPURN%=&FS89MI6P8=t+`0mFP67XgUOJXNXrQTOLz14oopCIq*pD+S zX(;Y&g=Hx!t-7QK_j69NsIdSCxOe?(=cn+GYaGlW?#Xh7_{g%qx5Yue7ITV`@6POv zIKjtXTQws6*ivzJ@gv4@<<8PH$#jCV7fcVRVo6*PxK}9{{(gl$22G+ES|(0P-6WOJ zupd1%)q&ahwwY_u9Z@F*gT;Er#W6AU=HEa;x1O{!7hN~UlbidQns%I`#}x}<9JMswDsUJ?$pQI zm%EqS20wwgDYpZkY{0KwU1##J7Mf;>al0W`sw2&n(K&DTpI=nhtKe+w>o|=$jdEA1 zrlvcP6Ajkrs1uEnqAG(0T~$_!wGLjm^Scjn&i0F zpn$V^T?#v5wu7+a;B9r6u#I6X&Ehom^h81MbDb3iwGka{i{ocI8ayHrF_AOuoQ+{o zDFmB8;kMFd9sciz)O^nLj4)RRcZI|#ILeZn_8|Mh(Ley^(BM>*f8ge#c$f)?P^>K$ zBgX2Tm2%fTX;-xxi{}1@N^n!H?uzw1+tBDiuC-qfQQ9j?A~_WD$kjXOiNpfgjN}7-Mxz*$8glb=v9CPzJK6>Z)Uq{ID65^SB5Xr$&AC;Q5yirkF+mt_ zWBb+XnfYxK^lPg9t}bIw?x~y4SNJEtok@%ums&ZBuv?J>PE+wR+<7Fx^|4lvkJvq^Vb3$!cS_`F9Z{xW6cMN-2 zf{V=r+OPbLQ@BrhE!f;$7ElIQx)nU~HZ`LEi4O=Onq4Ni1^Vig)1Yuae+j0lDl1!v zoSw07sT>)MS@2q1*z%!MCD8loT6b%fB`BMdH(%`U+Iu#RKz0b)mvDxBR3OzbcnAZA zyp$Ji26J?5=ki&eqXh`_$JuWMz^cjY)1IA)nM!gNgk0sjP*<|4AgV&jt@*jnDZ~`7 zD4$@tzM;o8U=tfw%$$6tL=ZJlzJDWSI2El$L~`-*;dk83W2tgORG+}z`n}fD_&Zfq zD7lq*(b`8&0I}(WE+#;D%CPO0%1}ehzooiKor(rw;ZlE`Tx!a0=P>tV=3c)A3bKNV z)oC5X$Tx6mey5|6_?7ggCH|{FJpjSZ-f)Q1fZkv)#@yfA$Vrzg0wrFIJ^k)|biY0N zzV4C%9in&?Q$j1L2!+m zkAh@wx}_x5ohx~lo{kp(AfG}2#&ZP~%3>Y9lTN$NY@IyqU<8ouDvv86$~AHuGPgPJ z(ZWPjTFx;g5!9;^9eMOPPeZBqLu}sJLZGODtsp;hA*mldzY)2j%Vw6C=?i)-h3LFC z;Vskk-DfBm)wBJ|vxqYj#%|Gh?bMxT4F8{?{xVF;Gq2wj*hT6Dw!@*?1i!7nn8q0L~U#o^(1asOT##3O5r~8s)ZUBoG zZAXm(GXVA>r?2y-2pKeIr!ruow4dCiW>zEIlKo;sDSomEL}l7duvjY>vq4 zoJ2fOEc;tkR6hc~PJ$k_bZ2LiiI;B=zMS(%$+lWjnL<62F~!op*!b!+@k2iP1%5`T zq6`;@eht~wWef!RRNY^q_sJF1=JV#Yvu*mMYKGG~sanI8c8Gt>n2=%c#>*}VCE2k1 z;5IBqCtX&{zs>hYv@HdT$J^kjuR}2fw~@<+J)xrAJ4w;4r|+$4M78#Xmr~Pgwu9kp-c>%XH%a;C$Cw;Bs6P1Ck-#r$_eBYnAwv~Ur{rl?f zkT46T2qUfTOfe-OdqlcyPg>vk^9HPwai)e2nt0C9piS`Kvi^WO1I*P(m|JoO)q!LY zQjD4Bp8U))?m1l?m)WIedOGt@d`hmHos6PqO zdN#M;+MEA5>QBAk5e+!)g`17|wL>S%X`$2UlK3DX(`oN{sf zNt%JgV)^eU%#Yn${4k%Q5bUoZe zoC{l1ZKiIi+@8Z7^)L?U#p-OtXzSD^gvUVdHI1;OLph*zpbaiMsoHfVL~Uj;pNdYE zPAEIu#CA>KSL#}5WvcoC?I|d3+dYBm4bUo#2 zC)^Om;;{1D+eex_HnH_gq*11Wi%;2rMzWVxHgkWi?p zP-DMDt5myL`#Jf@KpQa$B1)igcGM;r?(S z>;m5S>+OT01OS{$FgSaCF9uv{s#uaE$f()9vz?z8sy5Sc>g6dI+RDr|G%tl70_OkiOW{YBM*Ljg_$5&-6m4PXvct&9x{v4){sQ2= z0qmZSkKn;c?)s$$G)@oq$-6|aN{#gbO8A?tASPo9ZnsJe?Z{V^$Lq*22LuA>^;U_* zIZ%@`{%xrvyYSQ&1+JcJAAqsLt=UR(Jyr7~Y?*x9$jjE8E;Z%}cZ5tzp+s zjJ0~CEhM{&!y)WC+=aiAvflOlf|x5RJ>lr&vnep3R&0M&&A=cXM|$kt^w8w8N;K0| z!NR0$S=M8$qi(fLd%yRiO5*2|ydxZH^glSc7t=e!rbR!?gxX{o-b1|&*vDxaa0(th z0SJ4|T@K~bN#P%U(ECk=lZwS?m$%8Qxkqb0(%8F3%QLYenl)?BZ~C>=ZTB5#7L>7<6N_8TUm z-||L&Q@m=yMf>9;Tu(O_Fj|~TFuxbH$WHa|joR$gyBbqOm zxS~a-#O+Fi9YxUQJ!*a*?Oz+XbvT`>O(Vg&W>Q?MbM4;F0dQm&cj&D7VY448~xzJTik zIV-jt1TDuWB3j(0+$@g`V!oNtim?BJ?rvK93eAWY43&|`pM%udvu95pnj{imt zb9r#G@f3EaSlny98h)RE-{?(`hKjtoim?33A#kE&|4;O+xc7s`YT7+zu0;?NXl4lFq?qeH?__3t0t_KZxC-Gk;O+r!N`1r{Et9Lk!6 z-)olG(jiwATnIQ8aJIs`{E$k*{VGodhlPSYL0`Ych=0A#Pn{B$-smgcL z+8*6qGCn*I6%zW1$vkDAVq)&Fu234iXIQ(2<>t~m81?N!)0`~AEtf;TNPP^t1-V0DE;HdTD=VEBn zq*(Ay4e&C6-b`$)W|+V{2foGG>8c!JJT%xy-#n#8ZRXlE!i+c9@31Y!5nq$%hdw9W z8>}rD8x0M)14)Sf@XKT7kV{sdfp=!{Es#ItUAy{hVPOI+NMZ^w5iUS?SDj?~iJNSc zL0MUKN#9mFM}oeI-OX$aywb8%e~fFe^^maS9hEqbN|e&x1Y5Iwol=?8m31&Is5g5U z#nrK6ej4lh*~$)KA5C~INx4lI{g zOSQd#IiB;z;>^(F5TL&ZaLe=M;(4ka*Tsn`+)iQocz(!UkYORFu3!F})Z!Y?xG!K4YqWw;fW$ z)>^q`eaA^laGshEVpfiGruAR^J>KJD^4$$l9vg1xNK@Q~Re+b$6L-NMdvlt_P8G=| zC{VH1)`GL7d3or-%C!UWw<~QLMx2XOAHI#wAu8n!c`A0l{m_*1>wZJ6`MvQ)-e}H8 z)oV>mKwjeejeQ@gQK7v9XGri^u8Fc?m00Dc^&?B#rLhit{nD1s`46%2Pj19h2ulHYSzDZ#Qte(0lA8`iHrr?>=0T;`fWavbTW{#1U^da*? z9(pELi(;-EZqFtQOm04&S8+OGyuIjbQ66!G!UhRe9#HEamT49*T}R**r1xZiID~kc zPQfCHl(WdP;hl)F3Y(C$UXG(F`A~ws!48@*Cq(q^^K54;L+?I;R+meHE5}*%;X(13 zMAdX(*Wovq36(~$^=&LbI;5@YR$Hq#0=VE)q|c&pp)OedYr7W6IoirUi_$luzNl+P zyNok%?O$)VrK9VOIu(wOz0iiE^C>Q5K7HJm&14Z8aF?c(Kn{?O6C;?lFqgr(HMp<1 zFWO6X)-Sla%l~3cftf=h^T3|%;urKtLtKw?QA@}E!yV<(`0t;4Zs~l7v$^W1WdA2X zz$N`eyt;PH!&?AjukP9qj>Jw^JhLQQefnFq6BD)>2uB^gaM|OU>Em$8$EL+l z1mxlQ#b|dNATGUt?nKPFWM+vJ+nGf3p@i$MZlw;~ts%Jgm(6te^H#dlo~RZ&;OFo( z$bm|yy~d0#H>+KFuj4>+y=m%$rEvwfWNsW?<(0qlO;^S7{VPBbSHa8tt_Q)p(Iz3T z$3){yynp$LI_e@6-gTRrhj9p`r`Rib77lE6nm|vpZp=I2V0cWfAG=ynpg*)D>m_O0 z)@wk~h1RZGBc7rk=ZmDyc0CAHt>}@sia7|i`RzSn1l(`LIIii>O$l`jT#@uF>hxhk=^j?vi-vVf{L|oApBpNCAKbGkeP?jc{;6&aqVXp zfFjDyg)X)54qZ0mAyr*a+Uw+ImqDy5fs*_?ChqJ)yT1B)4xgP9;&?=P)!Nr(i`u$S zp-39Ldzx#B=KEMcTt_o$#*3pl2;E|^<^ua09sLG$%voTP#IlARx_}E!^Lb3h-*JaN zE{FX(>~J^nS2^O|+8G{W=j2_UDIarP3kEy>GG*C(44Ck}{&Uf_zAz@Zx5Reyvk@v} zl$z>tqqom~xIXvdlAXJ`Vf9?cd?$qQYPRJv(jz=GU2`X-+@_H@u2ymr*|7-wL5uF82YxkXO(C1EEl z-2Jbl`xN2%lUD%r_@r-?gzzyU_AOaDm`FRse7oefX`#NR$0>Ry9ft}uTE!oJxVcW& zqkXfPU8Z{a$J(B?D#tZm8Mom}BaXd5x|^OVa9=BVIn<^}*u4c?`uAq9zAO8?y@T-& zDF#Tl8J8P*mpuL6H(d33y=^c2?tSe)99sIyGO>N2l%L~V+yVQe=GKz*W*BA;(olQe zp398YEjw17O8=N|r&NzJ93D>wacqTq=r9O44QO=!$s5Wxt|;^sdb`orgZA0yEjM3P zv9_QxqVUtj)ZXiHL=4osUQ!md&NFQe^)L)SW8~YP~I2 zI&Q|6W;$t4w%t9NQXW4mfas&6{&vxekH_@2YgGvaUFy}}kk+&$Yp~ln_MLk_`@WI* z3W)4g&k)lvSj6e^jt$(dy_k8#A8M87py(wsTh^^YvH#e*5&!I!G|s6B?XF!T^U= zUu=g+fF)QMhfTXs;=s3;Fr-+wD9})mPAbDAxV^7u$rrs3@ z;-)z`Be+bxjLuE#tE*$3CVeH^cYu6OAwcUN-o#G)59@u-V!NAuV82Qes0yv0^WN7s zmrv5t-UjWnasFaM*Z^={#-|0UM;PY+Se5Y4maV;qymkwen?p~sMX4o>)?=%_{bFBA z(}gkBc6P}V54cw^$i!!j?QP;on< zcE_j9DWoP`3r~s<#Sr&0@n5F&QXLc2m53YlJS3BzxjmA(-k*bpWx(COMP-|3T^==T zZ(82Te|u@uI^s6GU*738_+rW0!@1bY@}Xx1GUe!lDuLH{59d0Vyb@cCA7&95R)FIX|I@K;x{WeADyJv zKs7>lI>>^bYCsO);|n7!3bC+wm6zF;Kf290 zmnxD>p8&<=`B@S!`&Tq7BLfy``0mNOb;Oe-~kT@aCm@ zZqbhcx1$T;ytqT5%uX{-s&7(grOHToz8bWtv2Usu{`MH;^Pt=jPsmB?f=I;IRdm*Z z<`(RV86c*RHG!_3-Dpi9z0}s2qs>#mU+%kwB_?o~ z8-2vWe^AqmK>_FV2;+5r@B8@7TSWd`BUiHAm_rsg{<&zA7P=nMPns|z6d2y>$8d3v zV!#BPE-18xq-k5SKNqRM3U2nO3}%u|hY3RzZSh=6daMQjSQAB6gZI&w80__F zTa~>t=8wx9jb0QlFHl6)XG7 zWzBiK17B(1_acsxvtecEO}${*rh;E>V;Vn=RkvRUzQU=PUGqgKXob9`SVL#p$HcuZ zt^p9>9-GGhAsW3~1HQlfO10_N&a}7rS4R;2Z=xSf%(NB%l@~K zJGLx>*Mz{`T`b03491Y#Ag8Rn9BY;}oJSGELGl_=*zfj^S{g;o!)`Y2ZCykVXt8pL zu>t>C-NbPLl5Z7jP{8z--(ezq8>}^My!``Y?g3C{coj@-vK=6-)+@Rb$}N9-)?6^erq@cx%n)6s&!rQ zgBEBiv(2@(O^~kn%~xMC?*7n?n2;r4^pKIsUVVelSBfSGICklr>FL+JKp*657vnkq z;o+$Mq~W|PT=ViQ>a0C=2J+0zoN9*x$j&u1I;Q3DxnYvW&g;rw4k%%%p6iAVd`O34z0 zj^GQR#|*oEgz{r%2NM7%&{U58(O=ECUA~V1@_dhK51t7KI?n(hCbp)f1m2+0)xtqa z++w_Wnn2a_;F0}=89zyyw9zjDuI*jd+3aj57OY1TD7pp_v}4~R7DzVUejZe(eGF-} zUKw)9=BF0bx=L(K)}ZEj`_z|(771@;)d#B0EMsML>R1L1d5<)nNI(UD8lXci01NNk zw@R(e8b9z{M9L^!FQyDrQ>s1X4l1q&i`_DeLD5JGvcTh-@m^-_plRgb3S5lhpprR= zt7YNwWrNw@_a@ROjRiM*EkN?2`uJ=t7oRIuT4wagd)ijHBiS=VSm@Sb77~1+0VHDO zG_MW^BU?Lddw~*2U(>r9Bl8(WQb1mq^e&`(#hXwh*uYT}wk=XtQ84~G@%ULWTQS;x zA9>zqqYpJ|@a^7$eB2Xdk@OYXy%xG#Rqx4kU6)p_I54^YXk-DfX#0jHEB<`AsdZ`xau z#t)Y*Vf)US2QR~IKfHtRO8ld?xXu|N{(=+HuhAw@uGryJ;H!TN90}OIJNF7&d!n4AA?EA)}<= z{#{R@b=`q=^eFRO*N;(nPC)==yNn_2HgDXpZquKrPZptSl{i(^_3=+hH5*@2FN|%a zgg!E;1`pzL3>>%HC&{3L5SG`e@n^;7$Q6?+Z%3OTBnt+>j20K=A){>=d&w|!xJ+wS;`px(upIkoHSJ z#9tr#waHLCsC)9rGdqXs8lx0Nrwgma_u?)Es)Xy_(CdUPrT-D9nMW3kKv0$EQO9SKH6j=Qd9Fu6LAXazj{X@m8dYoWDLFH^ zb<;{)3U<04wRHG6K_CK&=CQOF!=gv@hVCRjf2Svk7`ojETSFe3k)jy9o5M_>zj=5# zAs%68Tus8^Hr0As|GuIY9*1F2bkwUt!>eVFGxV|2vH$qi@@`W~S(M)5V5fC*ocrE> z!vQlXf3mY1@C|PhiEaGK;H=_+T5J$m>gtwBMF>T)=y^@o0@vK>V+2Gfzm8mzlxY?7$gxd(bEA)ri~IGB{4Er+ zOI>S_xr7Tz+^BOJQ8NEn;zTVqp*BgscgbF@IPSMT#QL7tv|LD`nPI5;1UqP0PcPNg z1Nu5~vbmvU%<5uwhpLJY7n#^S^>DrIWEj@<^YvXX!>(92ML&0ASVrF8tWkmffrW5P zz=`a30SoEUE5%X;A;(o8eEPOw19JVR98xR<4;A@cwRLyW7~yXvwoz$WHQ^|5n+DNx znDkhvTJYshnN9RQd1Cd%3^*wb=T{y(K-lp(m-v$4&MNLOF6IB877nj~Us9VrpDV3- zdv`*MT5y!Rr8*X=&!mk}HaMw{|C3!}TV6G|Tj2 z`=O>g)FSfet2xaw$W^ZU-W9cMDCdVgUY&4p_^{4(qmn$^N`nCi5PgIhTCEnvUNwFK z+<*T2tCcry)J^o(#&GHJK1^z+G3}_Pj=Mj*+MK^^|HiTjLGAzNuk+o>3Nj^QW}be) zAI*k1NbC}q|0p9uQC#t&wNySuaW{{*g{1M@4*b6HQUjeTlK-tLGhuq-V0r6L@w7S2 zivanv9GRwR`r+8L3z|C_$P$t}GRlZ2Q}Z2v?!HcL9PMpx zFvw$NzC#hlcXZ4w7t*0`pF~l1mJ6EBc#U=<2j+P*!J)^KUJ{|*dF^ADe>UydcA3{9 z?F!Yc#)rkN8Lnett%17huO2@FFoMlh-xWyIZfz}o#>J|xAyZH{KIZ(r-86GIpt-;5 zNmntO>D>{~tNuB)jSF{b^N4b^rE!^D$!S4EjJ%mqGt-%!YkdBEZ%1bxhfb{0cM@>8&k7vV!K3>ZxM(+ zr^8%{mO^^VCFFa20Au0#Y88Nyj$0qpk@`;M!xEn!7S5l`)1=pJWmxYy{{O_b|NfM* m|AAb&|1TuA?LH9l0P?E@PXiJOtkGF|02Kud`C3`4cmE5b(9pdA literal 0 HcmV?d00001 diff --git a/osinaweb/static/js/billing/add-order.js b/osinaweb/static/js/billing/add-order.js new file mode 100644 index 00000000..fe822c92 --- /dev/null +++ b/osinaweb/static/js/billing/add-order.js @@ -0,0 +1,32 @@ +document.addEventListener("DOMContentLoaded", function () { + const addButtons = document.querySelectorAll('.addServiceButton'); + + addButtons.forEach(function (button) { + button.addEventListener('click', function () { + const serviceId = button.getAttribute('data-service-id'); + const serviceTitle = button.getAttribute('data-service-title'); + + const selectTag = document.getElementById('servicesSelectTag'); + const option = document.createElement('option'); + option.value = serviceId; + option.text = serviceTitle; + + if (button.classList.contains('added')) { + button.classList.remove('added'); + button.classList.remove('bg-red-500'); + button.classList.add('bg-osiblue'); + button.querySelector('p').textContent = "Add"; + const optionToRemove = selectTag.querySelector(`option[value="${serviceId}"]`); + if (optionToRemove) { + selectTag.removeChild(optionToRemove); + } + } else { + button.classList.add('added'); + button.classList.add('bg-red-500'); + button.querySelector('p').textContent = "Remove"; + selectTag.appendChild(option); + option.selected = true; + } + }); + }); +}); diff --git a/osinaweb/static/js/pop-modals.js b/osinaweb/static/js/pop-modals.js index 476a7ad7..fec63eb6 100644 --- a/osinaweb/static/js/pop-modals.js +++ b/osinaweb/static/js/pop-modals.js @@ -65,6 +65,15 @@ document.addEventListener("DOMContentLoaded", function () { addButtonClickListener("userRecentActivitiesButton", "400px", "600px"); addButtonClickListener("addUserStoryButton", "400px", "160px"); addButtonClickListener("reactionDetailsButton", "400px", "300px"); + + addButtonClickListener("addPaymentCommentButton", "500px", "250px"); + addButtonClickListener("addPaymentButton", "500px", "400px"); + addButtonClickListener("editPaymentButton", "500px", "400px"); + + addButtonClickListener("addPaymentMethodButton", "500px", "400px"); + + + @@ -78,7 +87,8 @@ document.addEventListener("DOMContentLoaded", function () { addButtonClickListener("deleteProjectNoteButton", "400px", "140px"); addButtonClickListener("deletePointButton", "400px", "140px"); addButtonClickListener("deleteTicketButton", "400px", "140px"); - + addButtonClickListener("deletePaymentButton", "400px", "140px"); + addButtonClickListener("deletePaymentMethodButton", "400px", "140px");