From e1cab198e35f0d3cd8600827ea566202ba6c395e Mon Sep 17 00:00:00 2001 From: emile Date: Thu, 9 May 2024 23:11:37 +0300 Subject: [PATCH] new --- .DS_Store | Bin 8196 -> 8196 bytes osinaweb/.DS_Store | Bin 10244 -> 10244 bytes osinaweb/billing/.DS_Store | Bin 6148 -> 8196 bytes .../billing/__pycache__/admin.cpython-310.pyc | Bin 472 -> 499 bytes .../__pycache__/models.cpython-310.pyc | Bin 5637 -> 5854 bytes .../billing/__pycache__/urls.cpython-310.pyc | Bin 758 -> 831 bytes .../billing/__pycache__/views.cpython-310.pyc | Bin 2211 -> 2445 bytes .../add/__pycache__/urls.cpython-310.pyc | Bin 822 -> 909 bytes .../add/__pycache__/views.cpython-310.pyc | Bin 5440 -> 6772 bytes osinaweb/billing/add/urls.py | 11 +- osinaweb/billing/add/views.py | 95 ++++++++++++++-- osinaweb/billing/admin.py | 1 + .../delete/__pycache__/urls.cpython-310.pyc | Bin 385 -> 489 bytes .../delete/__pycache__/views.cpython-310.pyc | Bin 667 -> 1009 bytes osinaweb/billing/delete/urls.py | 3 +- osinaweb/billing/delete/views.py | 18 ++- .../edit/__pycache__/urls.cpython-310.pyc | Bin 341 -> 439 bytes .../edit/__pycache__/views.cpython-310.pyc | Bin 570 -> 1017 bytes osinaweb/billing/edit/urls.py | 3 +- osinaweb/billing/edit/views.py | 22 ++++ ...ymenttype_description_paymenttype_image.py | 23 ++++ .../0048_remove_order_status_orderstatus.py | 27 +++++ .../0049_rename_due_date_order_date.py | 18 +++ ...ove_orderpayment_type_orderpayment_type.py | 22 ++++ .../0051_alter_orderpayment_amount.py | 18 +++ ...cription_paymenttype_image.cpython-310.pyc | Bin 0 -> 778 bytes ...e_order_status_orderstatus.cpython-310.pyc | Bin 0 -> 1112 bytes ...rename_due_date_order_date.cpython-310.pyc | Bin 0 -> 618 bytes ...ent_type_orderpayment_type.cpython-310.pyc | Bin 0 -> 744 bytes ..._alter_orderpayment_amount.cpython-310.pyc | Bin 0 -> 670 bytes osinaweb/billing/models.py | 29 +++-- osinaweb/billing/templates/.DS_Store | Bin 6148 -> 10244 bytes .../billing/templates/add_templates/.DS_Store | Bin 0 -> 6148 bytes .../templates/add_templates/add-order.html | 12 +- .../add-payment-method-modal.html | 12 +- .../add_templates/add-payment-modal.html | 15 ++- .../templates/delete_templates/.DS_Store | Bin 0 -> 6148 bytes .../delete-payment-method-modal.html | 2 +- .../details_templates/invoice-details.html | 2 +- .../details_templates/order-details.html | 45 ++++++-- .../details_templates/payment-details.html | 28 ++++- .../templates/edit_templates/.DS_Store | Bin 0 -> 6148 bytes .../edit_templates/edit-payment-method.html | 20 +++- .../billing/templates/listing_pages/.DS_Store | Bin 0 -> 6148 bytes .../templates/listing_pages/orders.html | 8 +- .../listing_pages/payment-methods.html | 14 ++- osinaweb/billing/urls.py | 9 +- osinaweb/billing/views.py | 15 ++- .../__pycache__/admin.cpython-310.pyc | Bin 452 -> 458 bytes .../custom_context.cpython-310.pyc | Bin 1589 -> 1649 bytes .../__pycache__/models.cpython-310.pyc | Bin 3156 -> 3197 bytes .../__pycache__/urls.cpython-310.pyc | Bin 1887 -> 2041 bytes .../__pycache__/views.cpython-310.pyc | Bin 12822 -> 13753 bytes osinaweb/customercore/admin.py | 2 +- osinaweb/customercore/custom_context.py | 8 +- ...ame_ticketreaction_ticketupdatereaction.py | 17 +++ .../0011_ticketupdatereaction_customer.py | 21 ++++ ...ction_ticketupdatereaction.cpython-310.pyc | Bin 0 -> 641 bytes ...ketupdatereaction_customer.cpython-310.pyc | Bin 0 -> 894 bytes osinaweb/customercore/models.py | 3 +- .../inner-customer-ticket.html | 34 +++--- .../listing_pages/customer-orders.html | 4 +- osinaweb/customercore/urls.py | 1 + osinaweb/customercore/views.py | 106 ++++++++++++++++-- osinaweb/db.sqlite3 | Bin 1204224 -> 1232896 bytes osinaweb/osinacore/.DS_Store | Bin 10244 -> 10244 bytes .../__pycache__/urls.cpython-310.pyc | Bin 4045 -> 3985 bytes .../__pycache__/views.cpython-310.pyc | Bin 18293 -> 18145 bytes .../add/__pycache__/urls.cpython-310.pyc | Bin 1947 -> 1900 bytes .../add/__pycache__/views.cpython-310.pyc | Bin 13363 -> 13549 bytes osinaweb/osinacore/add/urls.py | 1 - osinaweb/osinacore/add/views.py | 14 ++- .../delete/__pycache__/urls.cpython-310.pyc | Bin 1302 -> 1215 bytes .../delete/__pycache__/views.cpython-310.pyc | Bin 3611 -> 3438 bytes osinaweb/osinacore/delete/urls.py | 1 - osinaweb/osinacore/delete/views.py | 9 -- .../edit/__pycache__/urls.cpython-310.pyc | Bin 1951 -> 1875 bytes .../edit/__pycache__/views.cpython-310.pyc | Bin 11607 -> 11452 bytes osinaweb/osinacore/edit/urls.py | 1 - osinaweb/osinacore/edit/views.py | 12 -- osinaweb/osinacore/templates/.DS_Store | Bin 10244 -> 12292 bytes .../osinacore/templates/add-edit-main.html | 4 +- .../templates/add_templates/.DS_Store | Bin 8196 -> 8196 bytes .../templates/delete_templates/.DS_Store | Bin 0 -> 6148 bytes .../templates/edit_templates/.DS_Store | Bin 6148 -> 6148 bytes .../templates/listing_pages/.DS_Store | Bin 0 -> 6148 bytes osinaweb/osinacore/templates/main.html | 4 +- osinaweb/osinacore/urls.py | 2 +- osinaweb/osinacore/views.py | 12 +- osinaweb/static/images/eHcWZi3-_400x400_3.jpg | Bin 0 -> 17708 bytes .../generated_invoices/invoice_024-1427.pdf | Bin 0 -> 39674 bytes osinaweb/static/images/unnamed.png | Bin 0 -> 15694 bytes osinaweb/static/js/pop-modals.js | 2 +- 93 files changed, 571 insertions(+), 159 deletions(-) create mode 100644 osinaweb/billing/migrations/0047_paymenttype_description_paymenttype_image.py create mode 100644 osinaweb/billing/migrations/0048_remove_order_status_orderstatus.py create mode 100644 osinaweb/billing/migrations/0049_rename_due_date_order_date.py create mode 100644 osinaweb/billing/migrations/0050_remove_orderpayment_type_orderpayment_type.py create mode 100644 osinaweb/billing/migrations/0051_alter_orderpayment_amount.py create mode 100644 osinaweb/billing/migrations/__pycache__/0047_paymenttype_description_paymenttype_image.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0048_remove_order_status_orderstatus.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0049_rename_due_date_order_date.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0050_remove_orderpayment_type_orderpayment_type.cpython-310.pyc create mode 100644 osinaweb/billing/migrations/__pycache__/0051_alter_orderpayment_amount.cpython-310.pyc create mode 100644 osinaweb/billing/templates/add_templates/.DS_Store rename osinaweb/{osinacore => billing}/templates/add_templates/add-payment-method-modal.html (82%) create mode 100644 osinaweb/billing/templates/delete_templates/.DS_Store rename osinaweb/{osinacore => billing}/templates/delete_templates/delete-payment-method-modal.html (89%) create mode 100644 osinaweb/billing/templates/edit_templates/.DS_Store rename osinaweb/{osinacore => billing}/templates/edit_templates/edit-payment-method.html (69%) create mode 100644 osinaweb/billing/templates/listing_pages/.DS_Store rename osinaweb/{osinacore => billing}/templates/listing_pages/payment-methods.html (91%) create mode 100644 osinaweb/customercore/migrations/0010_rename_ticketreaction_ticketupdatereaction.py create mode 100644 osinaweb/customercore/migrations/0011_ticketupdatereaction_customer.py create mode 100644 osinaweb/customercore/migrations/__pycache__/0010_rename_ticketreaction_ticketupdatereaction.cpython-310.pyc create mode 100644 osinaweb/customercore/migrations/__pycache__/0011_ticketupdatereaction_customer.cpython-310.pyc create mode 100644 osinaweb/osinacore/templates/delete_templates/.DS_Store create mode 100644 osinaweb/osinacore/templates/listing_pages/.DS_Store create mode 100644 osinaweb/static/images/eHcWZi3-_400x400_3.jpg create mode 100644 osinaweb/static/images/generated_invoices/invoice_024-1427.pdf create mode 100644 osinaweb/static/images/unnamed.png diff --git a/.DS_Store b/.DS_Store index 9aa77fe27c44826d04b1715e54b74b9a0d4f67e1..a6aaa87d6a6f9f760a491742d9596047e606624e 100644 GIT binary patch delta 21 ccmZp1XmQx!A;@85VxXg7WMr~AKyV8m07OIu>Hq)$ delta 21 ccmZp1XmQx!A;@89Vy2^DWNf%OKyV8m07PyD?EnA( diff --git a/osinaweb/.DS_Store b/osinaweb/.DS_Store index 0627f6a24149463146e3d8edc3e7d19acdb2acdc..caeca3b7bb72c3126f002cbd77cc89f10c80e945 100644 GIT binary patch delta 65 zcmZn(XbITBB*gvPj2fY2oFJo99WM%~2oBxNSc3g3~A7vL|>$S?Oy&d&=dN-fJw zEsw|qvV$|LQYU|quo7p00M3xS{Jd07WrqL=f3l;bqNF6F5~DVw38O8eJ);MsCu0<2 lGGhv3CS%s*`69}j=SiOAh1td{DHAUsoRpZHonDk*3IIuHC|&>n diff --git a/osinaweb/billing/.DS_Store b/osinaweb/billing/.DS_Store index a7b7da6ae11510bcf92efad67d2a58d56934578d..7820bbd813125388d4f24ea4f1c2463b09c172d1 100644 GIT binary patch delta 291 zcmZoMXmOBWU|?W$DortDU;r^WfEYvza8E20o2aMAD7G? zP3B>l%FfJ?$dJO2GFgwUfy2neKu5vI$Yk<1HV0v-L|JfAUQT{qI>`9R^H_Q(|7YRF zP%Oy?G$WNE2Z&1;Qc<*Muxd}%X63}tBFX|(oWhXFP=c&{a{y}`BitREx3L8>ZftO5 x6l4Zk4+Ik2K*AN|tIdKO-T9kXP(S2;|Vg9 QfeB&($WDgM@jP>w0T5jlUjP6A diff --git a/osinaweb/billing/__pycache__/admin.cpython-310.pyc b/osinaweb/billing/__pycache__/admin.cpython-310.pyc index f5e7768ec4509ed4ddb412c4d944c3165a0b601d..421a0ef4e6f9f68e1bf7e944ee0ce5ca9fe593d8 100644 GIT binary patch delta 82 zcmcb?{F#|IpO=@50SHb?*{0=8V!Z delta 74 zcmey&e1n-cpO=@50SG2-u}Slu$SccOF;TmG;yMLJ-ihbEC#y4Bu?YZWiv%X8GZsmR S0GT`t9E?0HJd6k^zz6`M-wn7%Q6yEW!?frGun{^roic1=iIzNT92}S*ZprkE7Z4PY5Bw2?-%2Bu;Q$p$d+OI}%9zythsQNbG37eKYUP%$x7M zH@7D4PdaVKF%|qaM$cURV#hhizS`!p2DVXYk?`$Ws7UcIK8a~HjbTSl-W)NInl?nT;Eb|vcN^z;ASG{Z!1?Bx46Bf z2i|Q(Q-Xdx!HLrgzy;i6;GkDk$RYmB5$>s=;}6JNuod}d=5sbCKg+(&M&(ob>+Gcb zP_M9wPk+@HSo#7Q9hc9UCFaZT?IHP&IkgG%I2jxBVI-ujky_@*$ggA*Z1XjX-!_S z-p$gPRd`(fVeJ&pp!_ce6Y@^r+@k!*zIYg3Beh2GD8U#)oC)huV@*JXW@cs4Ipn@b zVo2~3!3lEaa1F(0uBLJhjPZ9AEDD@XQ3skZG@{;nROSME<>Man#LuCItzR9(jkB67h(z@Q__@l;Vlew=~4n=dg7 z>#*<$7_C8jYoW07=LgOMO)Evg{OJ0XL&=O?RlQ> H=>yi^afDUA delta 1363 zcmZux&2QX96!+}PDq>(Mh9>Fzbna7 z7{I=@Tv_In@rKeU{o@6F#24!KdQoV9VX9;-;4<|D!!~tiNHL)ovUdUWt%C#41>9`5M^vJW?dTUbd$9y z&|DwzWWac~#hWmPFCt*5+-|o!-6&1*RP8n&#eo7^XpJG90hofG)&X=$Ca&fa7n(y# z#3Uv0oq1SHT6eV>7;o`e@sqVrUJ{QgBg!0ju80rprKfWxL7lk_9zKomEI_VCoh-h| z_%-yrEFRfM-M7(v7a>HL6E&x;ugg-E zmH#jc6Jj;f_^5A7-^F(#zuqXvr2&(%Q z`B;1%T$s$OOHqHTl^_oHz~!Mf7~Te4{U5>ULmy!{OdO>)iH>sL0@|>}rO{@9@0k~` t6Yqs%1bz$dX{?d!bG?LacG*P&&J-VxCFu~rlRej~c$1#z`JOsj`5XCGJC*0D7fDH6d9nvyR;?$Knr#ZoZwnhzUmYD#8_{$xeQKzaUx#LC>%ypr71l8pS6 zV*MyS6oJVFjHb-RB}J20Fv_z4l@(7u&8Wo4JNX@>8BAw9RO@6VrX6xpKx+gTco=zD QfS8ewnU4_+!8FGw02TB|7XSbN delta 222 zcmdnb_Kj6LpO=@50SGh?+oa86Vqka-;vfTFAjbiSi|0(#wn}GBWlCXhW^86kWlZ5n zWyxYq;Y{J`Wd`!NfjqVp9w?6&$YW38gYx)+JdP9rC{GZ`<4h5P@`Qmrt`rdvFP$@r zJ4G~@K~rqvt+2`Fi~*BZFd8#w=9Nso$0*NInF?euGAS|gOjcnso1D$GO-2IfE&)a! UMjjR*X5?exV+2BG5Xtcg0Cur01poj5 diff --git a/osinaweb/billing/__pycache__/views.cpython-310.pyc b/osinaweb/billing/__pycache__/views.cpython-310.pyc index 1d6101b5a5ea68e147e5da032d39d0a3b7957db7..ad7fcc94b20b4b355d294b187a90a24be09e2ad4 100644 GIT binary patch delta 506 zcmYk1&o2W}5XX1+y|zzxt6g0oQNK#nrlAKvPMjPiLWqP5Vpm&fsolL)DiR!A9GZ6# zA*nby`VagG4o*EeaO30;V5Y6aOXl-t-pqXG&4Y0j?>vk|!U~?R*SWpBj#_5|wriOU z-R`Nc#b#CYoS`&da%p%YRC4_Mq3s11QlU1w~PECSz|qkMzpQ7)gCiOxj{lwKC@d$QJM6) z5ud_Gk2cl+HciWG{;65uQqv>2DR~uG$By^FIb>u$nAVzVDN>u1H^BkOHq~B&QJ9x+ z!C{z|YG@-qLIvXl+Stt^q`^&j78=%QYHN*{JYwDd6kA#!A){{vYdmVz!TkH%42DZq jL>gi-mL!cdVVW=_b7HL5L^q}g&_M)*CInhUgmv>5)Zl5! delta 278 zcmeAbUM$F$&&$ij00c6}ZPNB}OyrYcjF_k$$r8+tKfmDP@Y`L`i8Se9w@Pru}E=p0b3YQ{c*NtM)k?w z?CRV~K#3wn5TP}>mR*if8)%jUKW~0fN@`JjN@_`BW=^rebGfQ^bN9G{q+#$TgMD%qz>!OitA;NJ-PT$;>OU$}dVuEsD=fvD1&@N=!+C%2!Dj zBv$68=9PdHPL5)XG^`SZip1xpmSp6o#OLOxB^Vg delta 237 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 diff --git a/osinaweb/billing/add/urls.py b/osinaweb/billing/add/urls.py index 211da872..8639b6a7 100644 --- a/osinaweb/billing/add/urls.py +++ b/osinaweb/billing/add/urls.py @@ -6,11 +6,14 @@ urlpatterns = [ path('product', views.add_product, name='addproduct'), path('service', views.add_service, name='addservice'), path('order//', views.add_order, name='addorder'), - path('invoice//', views.add_invoice_pdf, name='addinvoice'), - path('payment//', views.add_payment_pdf, name='addpayment'), + path('invoice-pdf//', views.add_invoice_pdf, name='addinvoice'), + path('payment-pdf//', views.add_payment_pdf, name='addpayment'), 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'), + path('payment_method_modal/', views.add_payment_method_modal, name='add_payment_method_modal'), + path('payment//', views.add_payment_modal, name='add_payment_modal'), + path('payment_comment/', views.add_payment_comment_modal, name='add_payment_comment_modal'), + + ] diff --git a/osinaweb/billing/add/views.py b/osinaweb/billing/add/views.py index 919cfacb..3db2c169 100644 --- a/osinaweb/billing/add/views.py +++ b/osinaweb/billing/add/views.py @@ -82,8 +82,8 @@ def add_order(request, customer_id): services = Item.objects.filter(Q(type='Service') & (Q(customer=customer) | Q(customer__isnull=True))) if request.method == 'POST': - status = request.POST.get('status') business_id = request.POST.get('business') + date = request.POST.get('date') if business_id: business = get_object_or_404(Business, id=business_id) else: @@ -92,10 +92,20 @@ def add_order(request, customer_id): order = Order.objects.create( customer=customer, - status=status, business=business, + date=date ) - return redirect('orderdetails', order_id=order.id) + + selected_services_ids = request.POST.getlist('service') + for service_id in selected_services_ids: + service = get_object_or_404(Item, id=service_id) + order_item = OrderItem.objects.create( + order=order, + item=service, + purchased_at=datetime.now() + ) + + return redirect('orderdetails', order_id=order.order_id) context = { 'customer' : customer, @@ -118,28 +128,87 @@ def add_service_in_order(request, service_id, order_id): purchased_at = datetime.now() ) order_item.save() - return redirect('orderdetails', order_id=order.id) + return redirect('orderdetails', order_id=order.order_id) + @staff_login_required -def add_payment_comment_modal(request): +def add_payment_method_modal(request, *args, **kwargs): + if request.method == 'POST': + name = request.POST.get('name') + description = request.POST.get('description') + image = request.FILES.get('image') + + payment_method = PaymentType( + name = name, + description = description, + image = image + ) + payment_method.save() + + # Reload the parent page + return HttpResponse('') + return render(request, 'add_templates/add-payment-method-modal.html') + - context = { + +@staff_login_required +def add_payment_modal(request, order_id): + order = get_object_or_404(Order, id=order_id) + methods = PaymentType.objects.all().order_by('name') + if request.method == 'POST': + amount = request.POST.get('amount') + + if request.POST.get('date_paid'): + date_paid = request.POST.get('date_paid') + else: + date_paid = None + + if request.POST.get('date_due'): + date_due = request.POST.get('date_due') + else: + date_due = None + + comment = request.POST.get('comment') + selected_methods = request.POST.getlist('methods') + + payment = OrderPayment( + order = order, + amount = amount, + date_paid = date_paid, + date_due = date_due, + comment = comment + ) + payment.save() + + for method_id in selected_methods: + method = get_object_or_404(PaymentType, id=method_id) + payment.type.add(method) + + + # Reload the parent page + return HttpResponse('') + + context = { + 'methods': methods, + 'order': order } - return render(request, 'add_templates/add-payment-comment-modal.html', context) + return render(request, 'add_templates/add-payment-modal.html', context) + + @staff_login_required -def add_payment_modal(request): +def add_payment_comment_modal(request): context = { } - return render(request, 'add_templates/add-payment-modal.html', context) + return render(request, 'add_templates/add-payment-comment-modal.html', context) @@ -206,6 +275,10 @@ def add_invoice_pdf(request, order_id): def add_payment_pdf(request, order_id): order = get_object_or_404(Order, id=order_id) payments = OrderPayment.objects.filter(order = order) + paid_amount = OrderPayment.objects.filter(order=order, date_paid__isnull=False).aggregate(total_paid=Sum('amount'))['total_paid'] or 0 + cart_total = order.get_cart_total + remaining_amount = cart_total - paid_amount + invoice = order.invoice @@ -213,7 +286,7 @@ def add_payment_pdf(request, order_id): invoice_template = get_template('details_templates/invoice-details.html') payment_template = get_template('details_templates/payment-details.html') invoice_html = invoice_template.render({'order': order}) - payment_html = payment_template.render({'order': order, 'payments':payments}) + payment_html = payment_template.render({'order': order, 'payments':payments, 'remaining_amount':remaining_amount,}) # Combine the HTML content of both templates combined_html = f"{invoice_html}
{payment_html}" @@ -249,5 +322,3 @@ def add_payment_pdf(request, order_id): - - diff --git a/osinaweb/billing/admin.py b/osinaweb/billing/admin.py index 3005339d..07960f29 100644 --- a/osinaweb/billing/admin.py +++ b/osinaweb/billing/admin.py @@ -6,6 +6,7 @@ from .models import * admin.site.register(RecurringCycle) admin.site.register(Item) admin.site.register(Order) +admin.site.register(OrderStatus) admin.site.register(OrderItem) admin.site.register(Invoice) admin.site.register(OrderPayment) diff --git a/osinaweb/billing/delete/__pycache__/urls.cpython-310.pyc b/osinaweb/billing/delete/__pycache__/urls.cpython-310.pyc index 812e90e6c1d67a2732e26d0cee2605cf14e72ff0..02351a648b8b3d4bb8ce01738e48b70ae5278e35 100644 GIT binary patch delta 207 zcmZoHG|bmeBQ?gaySnI4FG!gd8)QhKOYh0vo2 zdhB1yAMh-A*WIL`yYSBJ@Xj;CzUp756P8K^B+vEs+3l*9IGb>p?3^q!lj_uXLKA4& z)NCNvO8gs}znBsfPS7Q9G zeIP)BP;CMYL`jUhFw%q`BdW*RM3Xa&8aE^%CH1RDGj*c&AYeTaFwqHVKQ;1XctDxY z1oH$7BEKzIe?Ko&qjBC)&5hL{q-}q%BLd$wxTe4h_1w`MM2uHtg%_0&C0L3}cu9tq zofEt+&0MK@6ZQmq6uhjQnJmgI-I%X3-*nfT_hpkE>F6sd;sRLm5<-58gs;g`%`Hs7 iA-Yf>mlghz|M1qS1U>ld9281TtRMxl081n`9ry(=nQY1c delta 129 zcmey!KAV*/', views.delete_orderitem, name='deleteorderitem'), + path('orderitem//', views.delete_orderitem, name='deleteorderitem'), + path('paymentmethod//', views.delete_payment_method_modal, name='deletepaymentmethodmodal') ] diff --git a/osinaweb/billing/delete/views.py b/osinaweb/billing/delete/views.py index 4e927fbe..f9fce538 100644 --- a/osinaweb/billing/delete/views.py +++ b/osinaweb/billing/delete/views.py @@ -6,6 +6,22 @@ from osinacore.decorators import * @staff_login_required def delete_orderitem(request, orderitem_id): order_item = get_object_or_404(OrderItem, id=orderitem_id) - order_id = order_item.order.id + order_id = order_item.order.order_id order_item.delete() return redirect('orderdetails', order_id=order_id) + + +@staff_login_required +def delete_payment_method_modal(request, method_id): + method = get_object_or_404(PaymentType, id=method_id) + if request.method == 'POST': + method.delete() + return redirect('paymentmethods') + + + context = { + 'method': method + } + + return render(request, "delete_templates/delete-payment-method-modal.html", context) + diff --git a/osinaweb/billing/edit/__pycache__/urls.cpython-310.pyc b/osinaweb/billing/edit/__pycache__/urls.cpython-310.pyc index e2f6db7779d7404997c0bf5c5dd6f9d706d31317..8f83279a699363113fd5d50b95796c517ac725a0 100644 GIT binary patch delta 222 zcmcc0w4GTypO=@50SFdcvq}2{q#uJg$bb#VaRB0Cn~B;gvMedAz09eMDQv0CS*$7S zAYM9C6k7^MFoP!N#5l2-D!GEh%G}hvlHAmijQkXRo6NitD+oJ2GsR9nN-#Agvjjzr zCgUxZyu{qpDh{Zy{w*PpqIf7bJ~uxlF~?7ned1(Q@hD+bDX=X?tP^+j^MU-q!@$GH K$HK?R@ecsAxIdQw delta 143 zcmdnae3eN%pO=@50SG2-u}NDBq#uJg$bc2daRB0Cy@}c?F3c$`z0B#1QLHJf!3>&g zFF`6b8E>%^B$i|VY1XpL)biq6La8a4CGiD`mAR>TCGolWDTz5CMR|$2seYPl6Yr@q X6|qc~V(jPP0BYx9;9=xr;rI^#XlNl^ diff --git a/osinaweb/billing/edit/__pycache__/views.cpython-310.pyc b/osinaweb/billing/edit/__pycache__/views.cpython-310.pyc index db11330575c24e9066ccf45cd1c1083597d560a0..4a21aa49f9dbc6eab55b74a7e4c239637173da7e 100644 GIT binary patch delta 633 zcmY+B%Wl&^6o%*KTasEOp|I&1uu$72EC3;H5)vwvQWkU*narVaW5;G@iYRiGMc5(~ zb;Gh*@(R2F?=Wuy8#rS}0%kP7|8wT}o8$3!@iU0ajg1b$@nh@$+bLhh+w{ru_MJZX z(v$utvYH=`ZMz$e?B!ou6~lt%(e4zTntXw4YGRGHJ!Z z%i*CFv$O!)m7vEet4vnTtd|w(G1$0D&kC5C0?ee8+WM{ecoSr1Mh1#1PYvij7w)WU zciNiWi7E1=r#OD$+;$II(BWAHs*5S*qgZ|nMg=YmUFbb~{^IFSMa~PIz6TpBL@O8@ z<*qOhHc;^H6tp>t+G9qUY8ZZY{sOd8DqOQGF*4-pW;Uw*No1lxe<=dENYFjtEEJ qPoj&jbo$WYn#4bphS#9NdqpWvb9g`p%|YxUc2t4`$i2m31JqfXlWNBZ}KUMi69T;$s8=vb80C diff --git a/osinaweb/billing/edit/urls.py b/osinaweb/billing/edit/urls.py index 7497a217..6a45915d 100644 --- a/osinaweb/billing/edit/urls.py +++ b/osinaweb/billing/edit/urls.py @@ -3,5 +3,6 @@ from billing.edit import views urlpatterns = [ - path('edit_payment_modal', views.edit_payment_modal, name='edit_payment_modal'), + path('paymentmethod//', views.edit_payment_method, name='editpaymentmethod'), + path('payment/', views.edit_payment_modal, name='edit_payment_modal'), ] diff --git a/osinaweb/billing/edit/views.py b/osinaweb/billing/edit/views.py index 8870b4cb..e044f77b 100644 --- a/osinaweb/billing/edit/views.py +++ b/osinaweb/billing/edit/views.py @@ -3,6 +3,28 @@ from osinacore.models import * from billing.models import * from osinacore.decorators import * + + +@staff_login_required +def edit_payment_method(request, method_id): + method = get_object_or_404(PaymentType, id=method_id) + if request.method == 'POST': + method.name = request.POST.get('name') + method.description = request.POST.get('description') + if request.FILES.get('image'): + method.image = request.FILES.get('image') + method.save() + return redirect('paymentmethods') + + context = { + 'method': method, + + } + return render(request, 'edit_templates/edit-payment-method.html', context) + + + + @staff_login_required def edit_payment_modal(request): diff --git a/osinaweb/billing/migrations/0047_paymenttype_description_paymenttype_image.py b/osinaweb/billing/migrations/0047_paymenttype_description_paymenttype_image.py new file mode 100644 index 00000000..7d67f2f4 --- /dev/null +++ b/osinaweb/billing/migrations/0047_paymenttype_description_paymenttype_image.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.5 on 2024-05-09 13:47 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0046_remove_orderpayment_order_orderpayment_order'), + ] + + operations = [ + migrations.AddField( + model_name='paymenttype', + name='description', + field=models.TextField(blank=True, null=True), + ), + migrations.AddField( + model_name='paymenttype', + name='image', + field=models.ImageField(blank=True, null=True, upload_to=''), + ), + ] diff --git a/osinaweb/billing/migrations/0048_remove_order_status_orderstatus.py b/osinaweb/billing/migrations/0048_remove_order_status_orderstatus.py new file mode 100644 index 00000000..61a70a7c --- /dev/null +++ b/osinaweb/billing/migrations/0048_remove_order_status_orderstatus.py @@ -0,0 +1,27 @@ +# Generated by Django 4.2.5 on 2024-05-09 18:48 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0047_paymenttype_description_paymenttype_image'), + ] + + operations = [ + migrations.RemoveField( + model_name='order', + name='status', + ), + migrations.CreateModel( + name='OrderStatus', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('status', models.CharField(choices=[('Completed', 'Completed'), ('Pending', 'Pending'), ('Failed', 'Failed'), ('Cancelled', 'Cancelled')], default='Pending', max_length=200)), + ('date', models.DateTimeField()), + ('order', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='billing.order')), + ], + ), + ] diff --git a/osinaweb/billing/migrations/0049_rename_due_date_order_date.py b/osinaweb/billing/migrations/0049_rename_due_date_order_date.py new file mode 100644 index 00000000..46c709f6 --- /dev/null +++ b/osinaweb/billing/migrations/0049_rename_due_date_order_date.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.5 on 2024-05-09 18:48 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0048_remove_order_status_orderstatus'), + ] + + operations = [ + migrations.RenameField( + model_name='order', + old_name='due_date', + new_name='date', + ), + ] diff --git a/osinaweb/billing/migrations/0050_remove_orderpayment_type_orderpayment_type.py b/osinaweb/billing/migrations/0050_remove_orderpayment_type_orderpayment_type.py new file mode 100644 index 00000000..45faa151 --- /dev/null +++ b/osinaweb/billing/migrations/0050_remove_orderpayment_type_orderpayment_type.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.5 on 2024-05-09 19:32 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0049_rename_due_date_order_date'), + ] + + operations = [ + migrations.RemoveField( + model_name='orderpayment', + name='type', + ), + migrations.AddField( + model_name='orderpayment', + name='type', + field=models.ManyToManyField(null=True, to='billing.paymenttype'), + ), + ] diff --git a/osinaweb/billing/migrations/0051_alter_orderpayment_amount.py b/osinaweb/billing/migrations/0051_alter_orderpayment_amount.py new file mode 100644 index 00000000..3619df12 --- /dev/null +++ b/osinaweb/billing/migrations/0051_alter_orderpayment_amount.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.5 on 2024-05-09 19:43 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('billing', '0050_remove_orderpayment_type_orderpayment_type'), + ] + + operations = [ + migrations.AlterField( + model_name='orderpayment', + name='amount', + field=models.FloatField(null=True), + ), + ] diff --git a/osinaweb/billing/migrations/__pycache__/0047_paymenttype_description_paymenttype_image.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0047_paymenttype_description_paymenttype_image.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..caa994209d80d842bc44d8939686911cb6a7d192 GIT binary patch literal 778 zcmZuv%Wl*#6!jySNir>Bg+OA#3MreWNC-9+DiY!$L0PnHvcSrWZzE5gIM^A=tYO;? zf5G=4vGA4^zfcLmbuv{42}i!V=UnGLj%{{#GlJ{K_k+{-jF6uJY_ABxA#QgcjUMkj-(f?HVCg_%w;aXi;md*-8d zrFG76;4q|Us|Jt@Ha=CLrH@rp)!<3aZGv;!Fttxtoi>#ey*bJ=pNQcY# ze@BQ9t4fDl0ZHhfmC!B}IE(j1eDYMv=b?t>L(UWU)DPHauR_g@Z#vlA#5ZDZhZcgl z{93$oU|j)?(g3K@8j5G&&U(`o$CXyiz1LM2z+0#Kg=q@oR9h7-oDYs%R&8xY@*L*H zM&{!B-U}4`vDlJOY$^B;KPa@OP^NNT_y`-Qs@%f1ck& literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0048_remove_order_status_orderstatus.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0048_remove_order_status_orderstatus.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e761dd1b8b21bb384a5cef3111e4e7fed2e0ebef GIT binary patch literal 1112 zcmY*YOOMn>5O%kF?D0Hc7gh*z;uejRj5#2|At07n7NPJGOD?`xJySK_9{ftT2bjIW zfy?{{k{kbo6F;D@Iq?@DBB{2QK-zMt9^KVneN|nJ#{-Yn>mP0`Klq;amovU!f{a`A zn<)wKfaPAn5?1hpGiUSMPsCjhd=Rfa5Xe@&SANn1e&kJhAL)!Y;dW4{Ov^@9rLjR# z0p{l6!o|K{Lo#mBZ%#;{moV@W4lHAdk77j`-5py_dH_8LFkJN^q^}PV47OrPaq>l( z2g5%Zj9?6Bwmx~!V)%COhesNx_z*{{@hV)MS)GL)*xm9a&jg&?@{A`taGp@_+33Mn zxP(2Nt2|d_mQ1f)xq2f~SX;-#eHHJCf_BN*5YsgJ6fXrj&YgZ~&yAo%)RX9tH;-cTRq%QVL_YmTh|!gew~WoOzJ>ktqZR3$;Mys0K!N0iJ4ONBX@hm&2~ zPg}TYY6odbv#`#Q^ii7rzLvRT#aVzg!Nzi-&}i;544+_8J;y_r#|~#LGY=e}nx@vX zquVOmC(gQfG&`2MQ^yAc^QkIMPYw<%jVddDB_;z{$ug@fhq>*yn5mIAob4aY_7CpZ zK~>}F(7yBZPjpKwKD~*5qZXJL3nG%JQyYvA&^&9ZIzFPt6qoPI+8K|GY8F)yS4NdG zF7ZXHbeDF{7dVek35>rzk(dVUdaB!c)0Wq?o1xC=^l81(?rnzjo698n9{0sRqQ@C$ z;)@WR?ePn2z%DZWxA@Zk-0q$PHtGOOVcrtk(Rb-T=d^pC)31E!A1QZx_8SGA_A>=+ T|Cg?XHyK$bAhE;y?1KL<&7n>Y literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0049_rename_due_date_order_date.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0049_rename_due_date_order_date.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..784799cee6d912ede7ffe9c8f39c7f180bb11e2a GIT binary patch literal 618 zcmYjPu}&N@5VhC4$8tbJq!d&UqPYfBP$W`76o@o|NT4*=SiYOd$rtZ>S?_V8CM{LI zBERG|6~BOlVC+2vV|n!6j6I%tvfJ7kGP1urN57VwvHy|0x17icZNEzn7;wufKIWW# zV~~OP!$2UPXLn+pL4L(X#RHvVBOZp8nYFqzuJ+RydT#}h6WV@{9I`P7M%Vd_j|JxQ zA{K@mihDtk0Su_@T3A1StvAZT+Qe9E>RH%3I5_;QTCCg+D%S$G%6Gb3_@4AQ6e$x* zSfB#kVaTH&32M>-T2<=`L+LE6P>sukF6iA-C8$&wDn-W^771@Eb-mCwUW^Q|!5Xlh z8uV>OLxqh?jL9>D7Q)aqxYFVuYqu$%+~b}6>9O?^D`OF9qFa=w=zn*vkyqN9>eF}K zMDoL%Zt5!Oys5RM_7Z@(u4k?fE^#7PqR2PpCCT%JYM zvw|nQ5Q*UI1p@){69b8SBR|SSf;wfh!FQ@?%BQZbh=L=s z`j8y5gabTy3eZghF4ML^(>T?%B?juAuJ(U9<^9=*{l4YAuk9<9 z+2*+ujh)HLAEp|UbA$5?b2uSdkq%w7b`z~hgl&$5r&_<;rg>mR5nzc1(5y17E4l~f zuD!;>zQ^ajjf!y*mHz%*(d&Pijb3-y#<=A=Mu>5L|HeTPgpYa`h|v8R|}E%8ff3b65stf&?LX YdC(3WP(K$v>NI}B{RltnhB%Oa0ZUube*gdg literal 0 HcmV?d00001 diff --git a/osinaweb/billing/migrations/__pycache__/0051_alter_orderpayment_amount.cpython-310.pyc b/osinaweb/billing/migrations/__pycache__/0051_alter_orderpayment_amount.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..79132a065e470702e33e9f922998b7f7d4897ace GIT binary patch literal 670 zcmZuvy>1jS5cbdR-QFsZ5CUo{&`KzK6m)=sghB(M2sGPRzVqbd!#~Sw18Oh`Kbn@j;mQL#DEJC zOChjtV*uklAwF-UNxdmk(1KIomKs9GkZ3GlnI5{MG^OJMaAdsf2OyTdg&Wdn#nQ+P}(;njEy-E`5mfX5lWnf-s(4XE~#cmNffaTo3i*DvPsm+ksjP ega?vC@s`gR-N!kxcs@$^68|6xX~!M*fd2tg3cghU literal 0 HcmV?d00001 diff --git a/osinaweb/billing/models.py b/osinaweb/billing/models.py index f3ef4d8d..ea777bfc 100644 --- a/osinaweb/billing/models.py +++ b/osinaweb/billing/models.py @@ -32,18 +32,10 @@ class RecurringCycle(models.Model): class Order(models.Model): - STATUS = ( - ('Completed', 'Completed'), - ('Failed', 'Failed'), - ('Cancelled', 'Cancelled'), - ('None', 'None'), - ('Pending', 'Pending'), - ) customer = models.ForeignKey(CustomerProfile, on_delete=models.CASCADE) business = models.ForeignKey(Business, on_delete=models.SET_NULL, null=True, blank=True) - status = models.CharField(max_length=200, choices=STATUS, default='None') order_id = models.CharField(max_length=100, null=True, blank=True) - due_date = models.DateField(null=True, blank=True) + date = models.DateField(null=True, blank=True) @property def get_cart_total(self): orderitems = self.orderitem_set.all() @@ -64,6 +56,19 @@ class Order(models.Model): super(Order, self).save(*args, **kwargs) + +class OrderStatus(models.Model): + STATUS = ( + ('Completed', 'Completed'), + ('Pending', 'Pending'), + ('Failed', 'Failed'), + ('Cancelled', 'Cancelled'), + ) + order = models.ForeignKey(Order, on_delete=models.CASCADE) + status = models.CharField(max_length=200, choices=STATUS, default='Pending') + date = models.DateTimeField() + + class OrderItem(models.Model): order = models.ForeignKey(Order, on_delete=models.CASCADE) item = models.ForeignKey(Item, on_delete=models.CASCADE) @@ -104,16 +109,18 @@ class Invoice(models.Model): class PaymentType(models.Model): name = models.CharField(max_length=100) + description = models.TextField(null=True, blank=True) + image = models.ImageField(null=True, blank=True) def __str__(self): return self.name class OrderPayment(models.Model): order = models.ForeignKey(Order, on_delete=models.SET_NULL, null=True) - amount = models.DecimalField(decimal_places=3, max_digits = 5) + amount = models.FloatField(null=True) date_paid = models.DateField(null=True,blank=True) date_due = models.DateField(null=True, blank=True) - type = models.ForeignKey(PaymentType, null=True, on_delete=models.SET_NULL) + type = models.ManyToManyField(PaymentType, null=True) comment = models.TextField(null=True, blank=True) def __str__(self): return f"Payment for {self.order}" diff --git a/osinaweb/billing/templates/.DS_Store b/osinaweb/billing/templates/.DS_Store index efbd10e19f0f49a019e1475dba06811bb172d1d9..e4ea3e2d294def2fc0980d7a2aff987cf79709c1 100644 GIT binary patch literal 10244 zcmeI2&x_MQ6vte)ZQe?jl!(X)8d@BFBC)0$)zq?Gr{%uAE`PBI_fOnB2W#&~<=)EP4wV+M-w zl{2VTn7A&=l5OcT7vVYdj3vxv0~Rr#^_E)G2_irQhyW2F0z_aP2;iM9%-B_)Y9c@c zh`=ubVtp`Cgl}m-Q(i6|sALKNU&3i=I7S{IHKz70?PtnMDf(2|1J_cnQw*-;xNeH( z@Gb3U$}2hJO3t{xGuIgkmv@KGl+77$DNi*KAOgz-MDD(aY~8`9dn|t!xqN)j4-afV zw9!gTtbLSgKcwL(Q)!RmNGsplk?+Mxt@e>`ZI@1+-Z6HJUE`^B7>=!^myF_eZ}?bz zdk}`cJwNW*4?TC>t(?CT21(Bg+@TbBj*BKw9(jQij@#iVaAK*o)CHq#l)IHnlS!jl ztD22Qb6Pbg^;-RA)ok8qOs8ez!j3fwOhK4-DgI0&62KXBMP1kU2ZovGcFkjWfm3g#YWpock_pbl6c zNF&V4{_;DJUrwRSP;Lsyj3K5lf(;oFAOb{y2oM1xu+9Xw)x()$|Nkyhr9b@szs^IT zXCnec;2#O_Qpf7F(aC%tEZv{jYd2Azp$HT0X39$mD!CmGFSq0IMQq1kMGZ6U`#OrNi( z_M4F~YdcF0DWL?7kw!C`8I68vB}+uy*(&=W(iM>dit^4Isz*rswd~Md&}gT#7;{-j zCOP%Vj&)Q-1R?_e8v^?6zLhJ!+Dv-V{C;nwlBpCQi}`p|%tzSiA#qAM`C~*&-s{3gW6%{r(54v)E%$V0(S}B&Ei4m1pOV}(f6b~- zOLxdulc(g;>=Sv$N`dEP!1EbVSdF8QV~^}McjA-#!yRw!k8UH@0$egybhIV6JL@wB$u|GrTmFbIK-}3%2Zx@=IwBAehzP6^(DNaoC{F{gJ-4HS%ANr54r(LX z`Zqy+lEBlzYtQL{oOgwLR~Mcb&by;ef?XPT?YVas7akujjO@Y-#o6e@Pt06g>Updq z0ug~t1opky)%*Xv{r$h`6s3qjMBr5+;5vih;EXASyLD%Bdebcay literal 0 HcmV?d00001 diff --git a/osinaweb/billing/templates/add_templates/add-order.html b/osinaweb/billing/templates/add_templates/add-order.html index ea6d600c..34135d0a 100644 --- a/osinaweb/billing/templates/add_templates/add-order.html +++ b/osinaweb/billing/templates/add_templates/add-order.html @@ -18,6 +18,8 @@
{% csrf_token %}
+ +
+
+ + diff --git a/osinaweb/osinacore/templates/add_templates/add-payment-method-modal.html b/osinaweb/billing/templates/add_templates/add-payment-method-modal.html similarity index 82% rename from osinaweb/osinacore/templates/add_templates/add-payment-method-modal.html rename to osinaweb/billing/templates/add_templates/add-payment-method-modal.html index b0023ea8..fb2a3144 100644 --- a/osinaweb/osinacore/templates/add_templates/add-payment-method-modal.html +++ b/osinaweb/billing/templates/add_templates/add-payment-method-modal.html @@ -14,28 +14,28 @@ - + {% csrf_token %}

Add Payment Method

-
- + rows="4" >
- +
- + Upload Logo
-
-
- - + + {% for method in methods %} + + {% endfor %}
diff --git a/osinaweb/billing/templates/delete_templates/.DS_Store b/osinaweb/billing/templates/delete_templates/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..51e35cc0dff79b6f9c7dae9a9c6335de93034804 GIT binary patch literal 6148 zcmeHKO;5r=5S>*HL@yjY?jL~0e^3b?Oo$$cUX@a!Xg>&)5Nz*8`=NRaukBX+$r8$jhvlnd+W55{r zZ4B_Y>nX)|n?al3Z;pBaPnWn<(G!)3;~L`_@jdt|)U&IsoFrM9pfBD?E}*?P5tI(l z|GY|ut7Wx7U#~R6-m;XL<`mH#W|PrM=D0+CfSFa$h;9)zr3GvR%xNYo7^P#9_F-R&Kxj9>~)+^H&(ana$EZ4QSRFFb0f)Ed#ti zcqn76SO=7?14ga@z!uyhDDy7>=Xk|fu?~n9hzqH}km~e`;X*q6UgKiLI$%gAr zBRjpJI2j%NdkH5O2Q+I87z4Wu@V`H#!{`6y*Y|%3GGh!F1OJl&*BXoleXLE-*1c8o tS?i$>P!^7>14;^v9>-GPqxcLef;P_uV60dNga=|j0z!isW8g;_cn2RxgOC6K literal 0 HcmV?d00001 diff --git a/osinaweb/osinacore/templates/delete_templates/delete-payment-method-modal.html b/osinaweb/billing/templates/delete_templates/delete-payment-method-modal.html similarity index 89% rename from osinaweb/osinacore/templates/delete_templates/delete-payment-method-modal.html rename to osinaweb/billing/templates/delete_templates/delete-payment-method-modal.html index 69486555..93ef8a3f 100644 --- a/osinaweb/osinacore/templates/delete_templates/delete-payment-method-modal.html +++ b/osinaweb/billing/templates/delete_templates/delete-payment-method-modal.html @@ -13,7 +13,7 @@ - + {% csrf_token %}
diff --git a/osinaweb/billing/templates/details_templates/invoice-details.html b/osinaweb/billing/templates/details_templates/invoice-details.html index b1ab4500..ba001759 100644 --- a/osinaweb/billing/templates/details_templates/invoice-details.html +++ b/osinaweb/billing/templates/details_templates/invoice-details.html @@ -161,7 +161,7 @@
-

Date: 2024-03-03

+

Date: {{order.date}}

OSITCOM LTD

CR. 2014057

diff --git a/osinaweb/billing/templates/details_templates/order-details.html b/osinaweb/billing/templates/details_templates/order-details.html index 00accf3e..31b54122 100644 --- a/osinaweb/billing/templates/details_templates/order-details.html +++ b/osinaweb/billing/templates/details_templates/order-details.html @@ -13,11 +13,16 @@

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

+ + {% if order.orderstatus.set_all.last.status %}

{{order.status}} - - 12-02-2024 + class="uppercase text-green-700 font-semibold text-sm {% if order.orderstatus.set_all.last.status == 'Completed' %} text-green-700 {% elif order.orderstatus.set_all.last.status == 'Pending' %} text-yellow-500 {% elif order.orderstatus.set_all.last.status == 'Failed' %} text-red-500 {% endif %}">{{order.status}} + {{order.orderstatus.set_all.last.status}} - {{order.orderstatus.set_all.last.date}}

+ {% endif %} + +
@@ -26,10 +31,22 @@ class="w-full s:w-fit text-base px-3 py-2 bg-osiblue text-white outline-none border border-osiblue rounded-md cursor-pointer hover:bg-white hover:text-osiblue duration-300"> Add Payment - + + {% if not order.invoice %} + + + + {% else %} + + + + {% endif %}
@@ -161,15 +178,25 @@ -

{{payment.date_due}}

+ {% if payment.date_due %} +

{{payment.date_due}}

+ {% else %} +

-

+ {% endif %} + {% if payment.date_paid %}

{{payment.date_paid}}

+ {% else %} +

UNPAID

+ {% endif %} -

{{payment.type}}

+ {% for type in payment.type.all %} +

{{type.name}}

+ {% endfor %} diff --git a/osinaweb/billing/templates/details_templates/payment-details.html b/osinaweb/billing/templates/details_templates/payment-details.html index cf6587f7..db2459f0 100644 --- a/osinaweb/billing/templates/details_templates/payment-details.html +++ b/osinaweb/billing/templates/details_templates/payment-details.html @@ -148,7 +148,7 @@
-

Payment

+

Payments

@@ -165,9 +165,27 @@ {% for payment in payments %} ${{payment.amount}} - {{payment.date_due}} - {{payment.date_paid}} - {{payment.type}} + + + {% if payment.date_due %} + {{payment.date_due}} + {% else %} + - + {% endif %} + + + {% if payment.date_paid %} + {{payment.date_paid}} + {% else %} +

UNPAID

+ {% endif %} + + + {% for type in payment.type.all %} + {{type.name}} + {% endfor %} + + {% endfor %} @@ -176,7 +194,7 @@
-

Remaining Amount: $0.00

+

Remaining Amount: ${{remaining_amount}}

diff --git a/osinaweb/billing/templates/edit_templates/.DS_Store b/osinaweb/billing/templates/edit_templates/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..d65a1bb7964cba2cad0848668b120eaefcf6b8fa GIT binary patch literal 6148 zcmeHK%}&BV5S~>IL@(Ur*cXt-H>d;;CPWWJuS%g&w6qPB5N|#BK0cy;Gdm$Ag@YUn zF*9WM+nt@C?MHXFOGK`}nqCogh^URi*g8YCLwKA^LrzrF0y>FtNd=ARgXWYptW9AI z7z4+~0I%IHR_l~zR8oEYX42=CT+%D$u;>9xtnKtR%_ni1$MEHi;|rztErQko@rp7Y zu9oEjzMnM0{;@=!1erp5MCO!MvZE}~A7FneQ9^ovRYD8Yq1et~m*AJ;H$#j>tP_mC z!z0Je6e9LmM&}gJ5ba_!at}LZU;<0dn@c~FOc`RWYnmy&L7&kJbal%$?BXpAM_b5D z{PPsZ&hzJ4@vJ@TPokM)HucfNc)U{{fBm0=`-{ztcD)Du1~7a3-hyjHsJ{j1njAF) zII~&W=N_##28;n?V8a0K4*?2eq*!^Btpk-@0f77&A%Zr460lF87%5gBF#>Vk73f`^ zUNM|^hdxldNU`$h-O1_Y!)a!xHxwt?5kC-fa*;=?jR9j|n}Ji`?eO`3v;Y3T?PNV; zz!>;f47k={H0a}z^lWWB9G|rT$} - + {% csrf_token %}
-
- + rows="4" required>{{method.description}}
- +
- + Upload Logo
+ + +
+ +
diff --git a/osinaweb/billing/templates/listing_pages/.DS_Store b/osinaweb/billing/templates/listing_pages/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..950d5c4cfbbbb2f7e1d5cf2839f79b0f60cc2cee GIT binary patch literal 6148 zcmeHKO-lnY5Pi`iq6i*5coFsw=;A+Er5*&)gXmT52erEGmUgRnTkz$gM?`Egz}8+p;7m243QEPHP%YyoTZD7oT$w&rK~yngdp zXPzNi^cv3h3OnDtwlKgAo|vi4v6k4?R>^&)V63>~%*Y;Iei~;`HcrN)a!CJYoHO&t zW}4!XIdhD41S6!Vb7Un;iVIrBd8Nuqmv(JFIiD_LwAEU6$a{JeoKwo!H`?1nf)lm} zA3bNZ6Mmbt?9sB&_r7N8GuGo5O$&F__tBy5tK}o@8WS3cHq?>CFE?Oz8NZAw)se_d zfj&VV!E416#k`$NJam>E_Pb?acI zR{&y-Y8AHSkAnClhM8d%kv)_UU5U{(*cBs0cj^!zIlNAvIhlTQBT3^)V-ih)q8pVtpLB|BTECMRcY!g9?bB6d|o kbzx=4u{Pu=-eyr@Um^`+W>`g}hT?w&lm@SyfnR0d9S;AS$N&HU literal 0 HcmV?d00001 diff --git a/osinaweb/billing/templates/listing_pages/orders.html b/osinaweb/billing/templates/listing_pages/orders.html index ef134d50..7e3e96bb 100644 --- a/osinaweb/billing/templates/listing_pages/orders.html +++ b/osinaweb/billing/templates/listing_pages/orders.html @@ -64,13 +64,13 @@

${{order.get_cart_total}}

- -

{{order.status}}

+ +

{{order.orderstatus_set.all.last.status}}

- {% if order.status == 'Pending' and not order.invoice %} + {% if order.orderstatus_set.all.last.status == 'Pending' and not order.invoice %} @@ -86,7 +86,7 @@ {% endif %} - +
diff --git a/osinaweb/osinacore/templates/listing_pages/payment-methods.html b/osinaweb/billing/templates/listing_pages/payment-methods.html similarity index 91% rename from osinaweb/osinacore/templates/listing_pages/payment-methods.html rename to osinaweb/billing/templates/listing_pages/payment-methods.html index 082079b9..5d681197 100644 --- a/osinaweb/osinacore/templates/listing_pages/payment-methods.html +++ b/osinaweb/billing/templates/listing_pages/payment-methods.html @@ -48,28 +48,31 @@ + {% for method in methods %}
- -

Whish

+ {% if method.image %} + + {% endif %} +

{{method.name}}

-

Helo this is a description

+

{{method.description}}

- +
-
+
@@ -77,6 +80,7 @@
+ {% endfor %}
diff --git a/osinaweb/billing/urls.py b/osinaweb/billing/urls.py index c9f808fd..0db9dfc3 100644 --- a/osinaweb/billing/urls.py +++ b/osinaweb/billing/urls.py @@ -1,4 +1,3 @@ - from django.urls import path, include from billing import views @@ -6,16 +5,16 @@ from billing import views urlpatterns = [ path('add/', include('billing.add.urls')), path('delete/', include('billing.delete.urls')), - path('delete/', include('billing.edit.urls')), - + path('edit/', include('billing.edit.urls')), # LISTING path('items/', views.items, name='items'), path('orders/', views.orders, name='orders'), path('invoices/', views.invoices, name='invoices'), + path('paymentmethods/', views.payment_methods, name='paymentmethods'), # DETAILS path('invoices//', views.invoice_details, name='invoicedetails'), - path('orders//', views.order_details, name='orderdetails'), - path('paymyent//', views.payment_details, name='paymentdetails'), + path('orders//', views.order_details, name='orderdetails'), + path('payments//', views.payment_details, name='paymentdetails'), ] diff --git a/osinaweb/billing/views.py b/osinaweb/billing/views.py index 0b15c8b3..5c65b6b4 100644 --- a/osinaweb/billing/views.py +++ b/osinaweb/billing/views.py @@ -34,6 +34,19 @@ def invoices(request, *args, **kwargs): return render(request, 'listing_pages/invoices.html', context) + +def payment_methods(request): + methods = PaymentType.objects.all().order_by('-id') + + context = { + 'methods': methods, + } + + return render(request, 'listing_pages/payment-methods.html', context) + + + + #DETAILS def invoice_details(request, order_id): order = get_object_or_404(Order, id=order_id) @@ -46,7 +59,7 @@ def invoice_details(request, order_id): def order_details(request, order_id): - order = get_object_or_404(Order, id=order_id) + order = get_object_or_404(Order, order_id=order_id) order_items = OrderItem.objects.filter(order=order).order_by('-id') order_item_ids = order_items.values_list('item_id', flat=True) diff --git a/osinaweb/customercore/__pycache__/admin.cpython-310.pyc b/osinaweb/customercore/__pycache__/admin.cpython-310.pyc index 477bc6156126d8474373e7e6aaff4d9f6570694b..cf27a1c0ccadf3e642deb0aade3d0c32312a5af6 100644 GIT binary patch delta 40 ucmX@Ye2SSjpO=@50SMkn+oox6;M1& diff --git a/osinaweb/customercore/__pycache__/custom_context.cpython-310.pyc b/osinaweb/customercore/__pycache__/custom_context.cpython-310.pyc index 9ac272fb86b8befaf2b21d710ee82ad8a2009c96..48846556339c250aa9bc511dc2e3e5a44581abeb 100644 GIT binary patch delta 562 zcmXv~%We}f6tz8`%+r%JY10LZ?hyF^#0I2RsaVoQkdPwE2;~kCD`c7(Pg_+Ub-{WT z(JbjAsrmy5_?avazrY6|amNXkj<3(TzUNr}8U6`HDuhpPbsxR>@OCL~MiCMRF+}9A zDIq{gieLx}!4Wp1rHLexX7`FoOY(*Rt&khtE*;fsbYR+9{yMsKz^PctHD7saG*G@7 za=---byvGG03U*imY(*^ot6rvwc^T!5X46YQAL%zHAgRcOxAQIpuMIg)67g*nw^sK z=cNywGSI$^WMH1PSJ7K+bjwh+O>Agn2Hnb9b=D;Rq66qXBW18yXdI09nqf5G$A~UI zS7?!a)k5~?bNPsll?8r3LOk3L4EjYNdM`X}{HJ}?_gA|ewj`uNgPk}c`=)9ykYwJVwR``26Ws@Gf1*ry;nsZ$J@H$XBWx*`x`c*k$u+m zH%@XrnH5lfvmV#KEls2PoIgFz4l!Vxvh#_rrs`9?OB^3<&5f8ADxUlg-UZb^_ya#h WkNTb6=N%T(`qF;FI#&H)FaH6?+?@^p delta 517 zcmYjO!A=`75cPPyyUy-92}w(O0@Op*d_cv815!bP3mkH&gjA&{-d0$^mR+YptxZ0l z+Cx~06Nf~CFQDzmL_PEuDz*2{8c|{E&G^0X8;|7Q$@fHLLPP}D<+qLZU#H^p8-XN5 zyhaoUK!_w35ES7d7{W&ch|my46y&#>Do?SRNhpy!-M3r^wJxdQ)5Yq9%dn)D88&Oo zv5Agck;_I2HZXxxLmew`#x$2)Mjxn*OVIqj9lBwY%wd+uWDb@Z>KvY-TjcGAZAf7w z(@;V+-5|{pQ194Sx7={?#K}~)N^jPllj6cevb|1hbargeI9#gD*nA0}=-_~fN%AX` zsIGc~)u(t`#@su5CrQm+MD{TF{|ts2&-f;koojzU`rW-gEZDfH{=#-|!S+9a9!zRNc rcRMZe9{yDxW2pYHo0T0rFnGM50f#oMQ4UR7{qSD~+^dD^mp}anMWBRN diff --git a/osinaweb/customercore/__pycache__/models.cpython-310.pyc b/osinaweb/customercore/__pycache__/models.cpython-310.pyc index 7dad84ca522a3049c4055e839a482362712d754d..c12ecab98e7cb177e165dd25b8f53724eda28916 100644 GIT binary patch delta 192 zcmca2@mGR3pO=@50SMe=Y}4j!aYceRpO=@50SG2-u}SmV$h(Ql&H%_uWr$)-VTfW%VT@ukFfcp@agc!&kmCTv#UUHD9T_E38B_FAnX@EQ3{u#7 znbXChq*4rn88nSHmoZi_x;iDMq?BYPXQ!5w7NjJWq!y(nCYNO9=jq!NmlRpSc=08b z1*vxWHko-PR>-R3GgIvJqvR*+Gl_G+)NX#uB+SGpJ(-d9jEZt{X>mz@Zfa3H(3*IN m&UlDL@o@ELSmPNPjV9}`OGz{GvG6fMAv2g}0+K+?aT@^3fkc=9 delta 117 zcmey#f1gh~pO=@50SG2-u}NFN&cN^(#6bpzU1|Y;lZI20*1e3_Of{EPRZ7%s>pHL6BwgeRfI4I{@aH6g~g| diff --git a/osinaweb/customercore/__pycache__/views.cpython-310.pyc b/osinaweb/customercore/__pycache__/views.cpython-310.pyc index 9aa5d200d5cc47796e1b5d9dfec803e0a6bc42b4..36e1ecdabdf118c1a49f88075c4eb95adb5fa716 100644 GIT binary patch delta 6316 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 aIQ`v1&qjK>K#u delta 5407 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 E2fO^a;s5{u diff --git a/osinaweb/customercore/admin.py b/osinaweb/customercore/admin.py index 52db7685..fa944c3e 100644 --- a/osinaweb/customercore/admin.py +++ b/osinaweb/customercore/admin.py @@ -7,4 +7,4 @@ admin.site.register(TicketStatusUpdate) admin.site.register(TicketRead) admin.site.register(TicketUpdate) admin.site.register(TicketAttachment) -admin.site.register(TicketReaction) \ No newline at end of file +admin.site.register(TicketUpdateReaction) \ No newline at end of file diff --git a/osinaweb/customercore/custom_context.py b/osinaweb/customercore/custom_context.py index 4f8fa6f1..e0bb04b1 100644 --- a/osinaweb/customercore/custom_context.py +++ b/osinaweb/customercore/custom_context.py @@ -9,7 +9,6 @@ def utilities(request): customer_open_tickets_count = None customer_open_projects = None customer_open_projects_count = None - customer_open_invoices = None customer_open_invoices_count = None if request.user.is_authenticated and CustomerProfile.objects.filter(user=request.user): customer = request.user.customerprofile @@ -18,8 +17,9 @@ def utilities(request): customer_open_projects = Project.objects.filter(Q(status='Active') | Q(status='Pending'), customer=customer) customer_open_projects_count = customer_open_projects.count() - customer_open_invoices = Invoice.objects.filter(order__status='Open') - customer_open_invoices_count = customer_open_invoices.count() + orders_with_invoice = Order.objects.filter(customer=customer, invoice__isnull=False) + orders_without_completed_status = orders_with_invoice.exclude(orderstatus__status='Completed') + customer_open_invoices_count = orders_without_completed_status.count() customer_open_tickets = Ticket.objects.filter( Q(status__in=['Open', 'Working On']) & Q(customer=request.user.customerprofile) @@ -42,6 +42,4 @@ def utilities(request): ticket.last_update_date_added = None - customer_open_invoices_count = customer_open_invoices.count() - customer_open_invoices_count = customer_open_invoices.count() return {'active_subscriptions': active_subscriptions, 'customer_open_tickets': customer_open_tickets, 'customer_open_tickets_count':customer_open_tickets_count, 'customer_open_projects_count': customer_open_projects_count, 'customer_open_invoices_count': customer_open_invoices_count} diff --git a/osinaweb/customercore/migrations/0010_rename_ticketreaction_ticketupdatereaction.py b/osinaweb/customercore/migrations/0010_rename_ticketreaction_ticketupdatereaction.py new file mode 100644 index 00000000..b22ef95a --- /dev/null +++ b/osinaweb/customercore/migrations/0010_rename_ticketreaction_ticketupdatereaction.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.5 on 2024-05-09 18:54 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('customercore', '0009_alter_ticketattachment_ticket'), + ] + + operations = [ + migrations.RenameModel( + old_name='TicketReaction', + new_name='TicketUpdateReaction', + ), + ] diff --git a/osinaweb/customercore/migrations/0011_ticketupdatereaction_customer.py b/osinaweb/customercore/migrations/0011_ticketupdatereaction_customer.py new file mode 100644 index 00000000..f11c5e99 --- /dev/null +++ b/osinaweb/customercore/migrations/0011_ticketupdatereaction_customer.py @@ -0,0 +1,21 @@ +# Generated by Django 4.2.5 on 2024-05-09 18:56 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('customercore', '0010_rename_ticketreaction_ticketupdatereaction'), + ] + + operations = [ + migrations.AddField( + model_name='ticketupdatereaction', + name='customer', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/osinaweb/customercore/migrations/__pycache__/0010_rename_ticketreaction_ticketupdatereaction.cpython-310.pyc b/osinaweb/customercore/migrations/__pycache__/0010_rename_ticketreaction_ticketupdatereaction.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3a0c656a5f2ee13386a2a14a3d6c9b597ce1d77 GIT binary patch literal 641 zcmY*Xv2GMG5VgH~$L6>I1)`xr>9&cN5(!WWq%G=hI z$t@K%9ReVTb|v%kMUF@8UP^J%~c{Y+pt$_S3)aR)I8B(Opnw-}>i zB#0=!AyEKcldnZfM0t+t*{^sH)i^A)Tv_g=>0Oto-S|%wP>ThMpW_v73nXdJo=a$XTZBO zQFuDyi$QP?TQ(|JMhVt)4Wa7cI#;LlgHW+tG8Pt$X(KiYV!dSS%Z96TJs|-D^aA=$ zg0m#98y=oPYMvMYDlE(ZlOI2jeH{Ba{rOHW99Ty|O9h~myaDEqOTH*doq2 zkH*9)s9ulGy^YTdx%32<OTO?NUXy)_mely=pxxO9{Ja2biUM?9S-)->lI2i2Xr=O#dL{dd^ z8c}L}rdZA+o;#7##$36P_nJsYx}S)2foHvsJnBh4B}4BA-X}w9d<{*L7IQshCdkuy z9XDxNXyfIj1f@?CoA>be80_PxCuo2~RFa4R|Kfm~d0(lda~AcG%a=@Y=x2d+U@aSD z{cJsZWOJl@!=-n_=QP@oJ*>qy{gV|jRxwBxx+!z0ld^^=+}+*V6*Uxb4x&kuD`;wn z6IiD2dq^U!1=Y7t_P{ z;^b^{cx(oD87XMvkEJ}ae6=02368M+bY8rJrSW7I7xU6EIWvA+Gq!Jf2jl6%cyefh zvVz;WeIxZ#yxp3gpTi3cwGJUq6@XId62b}StEQ~NX{^%x*>POi;7q4YQs!Z)(;^NF zxNe<}v;(hU7Oo_;a|!QP#ZGANzq1gl8>4DjyI7Xp9lg~$0cX_t?Rbnb`j|Su{6B35 zF2h>KJ4(vpvJS!fQy=@h+eD_*(-VS2Mf6>kF6~#!~k_K#( I`gEKB1&fXb)c^nh literal 0 HcmV?d00001 diff --git a/osinaweb/customercore/models.py b/osinaweb/customercore/models.py index b8a2ba3e..3d3dfa53 100644 --- a/osinaweb/customercore/models.py +++ b/osinaweb/customercore/models.py @@ -70,11 +70,12 @@ class TicketAttachment(models.Model): file = models.FileField() -class TicketReaction(models.Model): +class TicketUpdateReaction(models.Model): REACTION_CHOICES = ( ('Happy', 'Happy'), ('Indifferent', 'Indifferent'), ('Sad', 'Sad'), ) + customer = models.ForeignKey(User, on_delete=models.CASCADE, null=True) reaction = models.CharField(max_length=50, choices=REACTION_CHOICES, null=True) ticket_update = models.ForeignKey(TicketUpdate, on_delete=models.CASCADE) \ No newline at end of file diff --git a/osinaweb/customercore/templates/details_templates/inner-customer-ticket.html b/osinaweb/customercore/templates/details_templates/inner-customer-ticket.html index 07e58ee4..dc3fa817 100644 --- a/osinaweb/customercore/templates/details_templates/inner-customer-ticket.html +++ b/osinaweb/customercore/templates/details_templates/inner-customer-ticket.html @@ -130,20 +130,26 @@ did I do?
-
- -
- -
- -
- -
- -
+ +
+ +
+
+ + +
+ +
+
+ + +
+ +
+
{% endif %} diff --git a/osinaweb/customercore/templates/listing_pages/customer-orders.html b/osinaweb/customercore/templates/listing_pages/customer-orders.html index d04a87f7..355dfdf6 100644 --- a/osinaweb/customercore/templates/listing_pages/customer-orders.html +++ b/osinaweb/customercore/templates/listing_pages/customer-orders.html @@ -30,7 +30,7 @@ Status - Date purchased + Date Created @@ -55,7 +55,7 @@ -

{{order.status}}

+

{{ order.orderstatus_set.last.status }}

diff --git a/osinaweb/customercore/urls.py b/osinaweb/customercore/urls.py index f8dbfe8a..beff0be1 100644 --- a/osinaweb/customercore/urls.py +++ b/osinaweb/customercore/urls.py @@ -20,6 +20,7 @@ urlpatterns = [ # DETAILS path('my-tickets//', views.customer_ticket_details, name='customerticketdetails'), + path('addticketupdatereaction///', views.customer_add_ticket_update_reaction, name='customeraddticketupdatereaction'), # PRODUCTS URL diff --git a/osinaweb/customercore/views.py b/osinaweb/customercore/views.py index 0767cbd4..cb67807f 100644 --- a/osinaweb/customercore/views.py +++ b/osinaweb/customercore/views.py @@ -12,6 +12,7 @@ from billing.add.views import * from .models import * from django.db.models import Q from django.http import Http404 +from django.db.models import OuterRef, Subquery # Create your views here. @@ -88,6 +89,7 @@ def customer_add_ticket(request, *args, **kwargs): return render(request, 'add_templates/customer-add-ticket.html', context) + @customer_login_required def customer_add_ticket_update(request, ticket_id): ticket = get_object_or_404(Ticket, id=ticket_id) @@ -118,6 +120,38 @@ def customer_add_ticket_update(request, ticket_id): return render(request, 'add_templates/customer-add-ticket.html', context) + +@customer_login_required +def customer_add_ticket_update_reaction(request, reaction_type, ticketupdate_id): + ticket_update = get_object_or_404(TicketUpdate, id=ticketupdate_id) + + existing_reaction = TicketUpdateReaction.objects.filter(ticket_update=ticket_update, customer=request.user).first() + + if existing_reaction: + # If the existing reaction type is equal to the new reaction, delete it + if existing_reaction.reaction == reaction_type: + existing_reaction.delete() + else: + # If not, delete all previous reactions and add a new one + TicketUpdateReaction.objects.filter(ticket_update=ticket_update, customer=request.user).delete() + reaction = TicketUpdateReaction.objects.create( + ticket_update=ticket_update, + reaction=reaction_type, + customer=request.user + ) + else: + # If there's no existing reaction, simply add the new one + reaction = TicketUpdateReaction.objects.create( + ticket_update=ticket_update, + reaction=reaction_type, + customer=request.user + ) + + return redirect('customerticketdetails', ticket_number=ticket_update.ticket.ticket_number) + + + + # LISTING @customer_login_required def customer_invoices(request, *args, **kwargs): @@ -144,7 +178,7 @@ def all_products(request, *args, **kwargs): @customer_login_required def customer_orders(request, *args, **kwargs): customer = request.user.customerprofile - orders = Order.objects.filter(customer=customer, status='Completed').order_by('-order_id') + orders = Order.objects.filter(customer=customer, orderstatus__isnull=False).order_by('-order_id') context = { @@ -211,7 +245,15 @@ def customer_ticket_details(request, ticket_number): if ticket.customer != request.user.customerprofile: raise Http404("Page not found.") - ticket_updates = TicketUpdate.objects.filter(ticket=ticket).order_by('id') + # Subquery to get the last reaction added by the logged-in customer for each ticket update + last_reaction_subquery = TicketUpdateReaction.objects.filter( + ticket_update=OuterRef('pk'), + customer=request.user + ).order_by('-id').values('reaction')[:1] + + ticket_updates = TicketUpdate.objects.filter(ticket=ticket).annotate( + last_customer_reaction=Subquery(last_reaction_subquery) + ).order_by('id') # Mark updates as read for the current user for update in TicketUpdate.objects.filter(ticket=ticket).exclude(added_by=request.user).order_by('id'): @@ -233,6 +275,35 @@ def customer_ticket_details(request, ticket_number): return render(request, 'details_templates/inner-customer-ticket.html', context) +@customer_login_required +def customer_add_ticket_update_reaction(request, reaction_type, ticketupdate_id): + ticket_update = get_object_or_404(TicketUpdate, id=ticketupdate_id) + + existing_reaction = TicketUpdateReaction.objects.filter(ticket_update=ticket_update, customer=request.user).first() + + if existing_reaction: + # If the existing reaction type is equal to the new reaction, delete it + if existing_reaction.reaction == reaction_type: + existing_reaction.delete() + else: + # If not, delete all previous reactions and add a new one + TicketUpdateReaction.objects.filter(ticket_update=ticket_update, customer=request.user).delete() + reaction = TicketUpdateReaction.objects.create( + ticket_update=ticket_update, + reaction=reaction_type, + customer=request.user + ) + else: + # If there's no existing reaction, simply add the new one + reaction = TicketUpdateReaction.objects.create( + ticket_update=ticket_update, + reaction=reaction_type, + customer=request.user + ) + + return redirect('customerticketdetails', ticket_number=ticket_update.ticket.ticket_number) + + # PRODUCTS @@ -357,14 +428,14 @@ def initiate_checkout(request): price = cycle.cycle_price - existing_order = Order.objects.filter(customer=customer, status='None').first() + existing_order = Order.objects.filter(customer=customer, orderstatus__isnull=True).first() if existing_order: existing_order.orderitem_set.all().delete() order = existing_order else: - order = Order.objects.create(status='None', customer=customer) + order = Order.objects.create(customer=customer) order.save() order_id = order.order_id @@ -425,8 +496,11 @@ def check_order_status(request, merchant_id, order_id): if response.status_code == 200: order_details = response.json() if order_details.get('result') == 'SUCCESS': - order.status = 'Completed' - order.save() + OrderStatus.objects.create( + order = order, + status = 'Completed', + date = datetime.now() + ) order_items = OrderItem.objects.filter(order=order) for order_item in order_items: order_item.purchased_at = datetime.now() @@ -452,7 +526,7 @@ def check_order_status(request, merchant_id, order_id): } response = requests.post(api_url, json=api_data) order_item.active = True - old_order_items = OrderItem.objects.exclude(order__id=order.id).filter(item__item_type__name='OSIMENU') + old_order_items = OrderItem.objects.exclude(order__id=order.id).filter(item__item_type__name='OSIMENU', order__customer=request.user.customerprofile) for item in old_order_items: item.active = False item.save() @@ -489,7 +563,12 @@ def buy_free_osimenu(request): order = Order.objects.create( customer = request.user.customerprofile, - status = 'Completed' + ) + + order_status = OrderStatus.objects.create( + order=order, + status = 'Completed', + date = datetime.now() ) order_item = OrderItem.objects.create( @@ -499,7 +578,7 @@ def buy_free_osimenu(request): active = True, ) - old_order_items = OrderItem.objects.exclude(order__id=order.id).filter(item__item_type__name='OSIMENU') + old_order_items = OrderItem.objects.exclude(order__id=order.id).filter(item__item_type__name='OSIMENU', order__customer=request.user.customerprofile) for item in old_order_items: item.active = False item.save() @@ -532,7 +611,12 @@ def buy_free_osicard(request): order = Order.objects.create( customer = request.user.customerprofile, - status = 'Completed' + ) + + order_status = OrderStatus.objects.create( + order=order, + status = 'Completed', + date = datetime.now() ) order_item = OrderItem.objects.create( @@ -542,7 +626,7 @@ def buy_free_osicard(request): active = True, ) - old_order_items = OrderItem.objects.exclude(order__id=order.id).filter(item__item_type__name='OSICARD') + old_order_items = OrderItem.objects.exclude(order__id=order.id).filter(item__item_type__name='OSICARD', order__customer=request.user.customerprofile) for item in old_order_items: item.active = False item.save() diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 6ffa2b0496ec262048d652ec733c70b9acaade33..2e2ef2a9fb9fa43f83f9b40d0e6aae9f167cb9b1 100644 GIT binary patch delta 11261 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 JUc!t1{{a?hcXR*% diff --git a/osinaweb/osinacore/.DS_Store b/osinaweb/osinacore/.DS_Store index f3099d358d9658824fc49b015261dedc7f603076..5f204903921da098608c093cdc19582063fce18c 100644 GIT binary patch delta 220 zcmZn(XbITREzV(NVxXg7WMne=fuO_W%i?m3Hzt1)S7Viwl9rO4EGuzGI$nUkI3vH@ zGdVvmpeVI0GqpS-6UYwEtV*3MBB{aT)-c&lQe0BmA)EmWI79OC^HMpL9ReWy$*Gcx z){=}$jM|JQjJAySj2?`Ej6saaj5&_N<%5en#mW$#Wr7+RA<}F euF%4c;a=ezNd-BX#U%y?_XPwPnV4Bv+1LU4eljHh delta 194 zcmZn(XbITREk5~%pvUCP;&O~Gnz2kGTJkG zFa|OPF(xynFlI6qK@>4DLTCnAC=I0;izirKT)1HpO=@50SI5$($j|I3*#NK{Ii44D(FZ%@Um7nHbGB3-Hu13Ptgi zWF}{)mc*x|mLz886cf{N0#f*n0v+&nU IZsGR?0KTRy1ONa4 delta 219 zcmbOze^#D1pO=@50SG2B`7U=2qj-@7&^1wfC7H?DsU`6#sU?Y- zImJbile2lV*rb3`MbeXR^ZGE#OxEDjVp9VNs7;RGD`q@4`3zqTvm(>|$?p7K0KP0i A`v3p{ diff --git a/osinaweb/osinacore/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/__pycache__/views.cpython-310.pyc index 5d4856e9f1d550edb674b6d19b40c1d0b2f9ac76..7a853f942f712eb306b23b31a2211d170f7316c2 100644 GIT binary patch delta 1365 zcmZvbZA_b06vv-)+dhoG(6Y8rI@&@RTOVk7D=%xH8wk#rMbr#fGNZHfDO$pST^}dW zvXQ_(7^1kGEGAATGcjg~S;XgqCMIrK^pi0Q$zrm8F!5!$Ea+e`HL`*C&@O)QN&36z zp7a0Tb6?W?Z^KV-fo;rYGfU#*H#&xVXKg;V&KANyu%Ifb>WKe%-_bsh)Ra0jBOUEm zUs7Kd52~(c~sqPGA?9Hqa*KW^K3(>0 zJ_>oy<|6%j@8_hN@;xI|`lA1cK@3W;IPcMWtE?10xBE)oT30678u%(M)Rm(i`O>jYGM(^O&M@V3;ar`iw3JL%k+U)v zFara5(<<`~Vf1l!b-Ryy+57e6h*7QV! z3A~%4o|O~hj#G{C@`n^|Ys}i1mKZsvrH`lh7G)*8*;p^Gys#+< zjTmlf0gFD^1mL!bJLU@{DWb?uNa92^2z_`yTE-lJmqX2%jYbPEv0Sqx+M8>h91{K4 zjKXL%SdH8%d`a5Tqt7G)s&Pq((0Zo92y zd`GCWCM~Uvq<9f7w#MY`S`j+h0>$TOJy|HMtOOju{d#BH*8pbR+UJG73`&3gf7LP*>z7`KaExsG?f~$Bleuy>Fi|jJ+V!)pLA+{6H z(d@?Q{VvO@*fV$0(VFy+_TK}D;e#yFQ`9!^e)vZ6w`?gWW;! z;F<1dLAyxwDo6Ay-Q(=pW!l7D!YW~d@PJ?;n}a~F&OHP#!A}Sg8VOB=D4~_mj%N<; Qfou5b!5MI3%M+dd0;;EE1ONa4 delta 1529 zcmZ8hZA@Eb6u#&7gV7J#(n9$vUmHT#QiK8np`$QDGEMNuWG75B^PclO z=RN1V@4Y|13aclWb9u6XNe94iA)JOAv5Yr~^EV#+7 zP@5e)3%|-(MMcwTOZ~j)Vuq-`d$qJ%!%f=6SGk^X2Dh3he!0qlp>5~VPAspQ zN%<~uw0Rvk{m}W;+KzjwPh~g{s-MqTQ#E$9`|Il~BjLCbjt&pRLc?;rE*3gEDo2&t zQCS%olj6P+Wi-N0@KbqTWL5mdQn^brw1Et59t2@U%fniYNy~o0Gc~Upe?KI2g-D=Dc`T93nuVh&Jy?c#!$nkBO#Rpk#iYuX^AxTz3;Yi%cCGkv6 z8eWrzt>P{3ch-BvR|)QKDsi#aN!d zAH+ROJ{%|k9%djH11B&MV5~%{*W=Bws&sUP?0?>D+5X>emMRDRr0@K z>sTRTh9LF0Ne5ABQL`ZJlggaxX{_|0wXrHA9U98WJv@6iA3c=B|H{oZ&Kpzc)mRV z9$acK1238aop1$v1CK!ija$RVjUNYUAU*8WfYW$?bJ%{>x$`zaBN~D-G-E7S%Qt#E z=z$&TmEgM+U|j=QE!09QU}v=*uXp9}g4eqIS?%20>)xj}?uv;|Em9rJ1S=t)vQBFZ(Nl9u^UhztXB9N&?T$7)%l`~pQj$^lE;&=)G6qXuQ delta 160 zcmaFEH=AEOpO=@50SG2IG;0T= ubP+qyuv^@vML7kDB_*jvdBrOkinxJdMck8jvXwJhO*Uk=WZ`4tcnknJ*C| zrLZ?hw*m*R~AGHtl}u(a(vuJZif}RU oF!C@mF)=Z+{pVojVCG>gy1LoMD29>kDoCr!WJV+5$s3KE04B{a_5c6? delta 67 zcmaExxjBO`pO=@50SG2/', 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 7a89ef2f..fe612c9e 100644 --- a/osinaweb/osinacore/add/views.py +++ b/osinaweb/osinacore/add/views.py @@ -719,11 +719,17 @@ def add_ticket_update(request, ticket_id): @staff_login_required def add_payment_method_modal(request, *args, **kwargs): + if request.method == 'POST': + name = request.POST.get('name') + image = request.POST.get('method') + + payment = Paymw( + name = name, + ) + tag.save() - context = { - - } - + # Reload the parent page + return HttpResponse('') return render(request, 'add_templates/add-payment-method-modal.html', context) diff --git a/osinaweb/osinacore/delete/__pycache__/urls.cpython-310.pyc b/osinaweb/osinacore/delete/__pycache__/urls.cpython-310.pyc index 2d5eaf3f8bc3a045923e1f44abafd7937cd3ff9a..ce1fab128dd72b838dcccf2ff73826e2c3e976f5 100644 GIT binary patch delta 95 zcmbQnwVzWvpO=@50SIKpY}1@r7#JRdILLq>$Z-JT;$0K9w{oR(NAagf2Qz5OZ2Td? h#O$Xju-TTGi*a%a%LFbNpei0l9!5UaNvxubUjV;;57__! delta 170 zcmdnbIgLv@pO=@50SG2@CQ&MwMOH$(t xAX?)gTI0c5mxGkLg9r~G;ioAzS(4`in;TeQG8eBJqupdfUTZckMkY=^MgX`cI{N?s diff --git a/osinaweb/osinacore/delete/urls.py b/osinaweb/osinacore/delete/urls.py index 991de119..bb091acc 100644 --- a/osinaweb/osinacore/delete/urls.py +++ b/osinaweb/osinacore/delete/urls.py @@ -16,6 +16,5 @@ urlpatterns = [ path('taskpoint///', views.delete_task_point_modal, name='deletetaskpointmodal'), 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 e8a0b75c..55f2adb0 100644 --- a/osinaweb/osinacore/delete/views.py +++ b/osinaweb/osinacore/delete/views.py @@ -164,12 +164,3 @@ def delete_payment_modal(request): 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-310.pyc b/osinaweb/osinacore/edit/__pycache__/urls.cpython-310.pyc index 74a54b6e54da4a64d89cd1062437370fea51e607..5760d0fd6d4333f99582aa3b2f0b3b91031569bf 100644 GIT binary patch delta 109 zcmbQwf0<7^pO=@50SG2svq{^?&cN^(#6bq)K#l_t7i(?QR%PT$7mgB7(GF(N)Y+WD r=*q-sJXw)Nbn`3b+l-77laH}Jn|zRM4WrKFJa#2s7CuH8ItjtZ#E6GhQ$;eO9j}pWX+dPl?6CaX}Vc=opW1VcsE;`wPU5N1o0BVsg@Bjb+ diff --git a/osinaweb/osinacore/edit/__pycache__/views.cpython-310.pyc b/osinaweb/osinacore/edit/__pycache__/views.cpython-310.pyc index d9ca5137dd715fe6ae6b904b7a982f5a685a0126..13b32e5cc9eaea53d1d50fdb82f3d68dc999b33d 100644 GIT binary patch delta 1568 zcma*nTS!xJ90&0IogFOOXzl88*XGHssbN7$+Jhh!6(cZ$Rw2ub1WP?Tib*oX$`Z@u zS9Z6nUF>S>ezEMSpon^?7*zDqLs0Y(J@nN7dnPWcg?sqyzjJ>7|M~rY|KHi0(EXMA zTAgl^hJR+gE?NJytVeHWC4+%tCalXZ*Z2!!P0V6s5$ZP0$?!8-%LD!N+%z{clFodBC4B*`+JDfGc=rwx{^{Mr}GqN#P5rH=nV_Cbw&0j0%W!$@l38@aW)!yIMxC10 zM_U1F;i)=UEmdS&s4T0CMd@W$KxjZvtGWxPIK$L|M z>!inyLLT_tF`Lzp&$&$B!`Fxlcr25er>~>@+>}I;hw6F1iB` z+X=eBF0dPPgFS#i7=$=}W1?(TxX=p>U_Uqj+~6P(!3uB)ASd}SXah%p;DkrXAemi# z7_I_qK_@r{j)N1F=P447GmR#aLrYy!x?U^y6M5b*M&dswy7S%3!VQtCb-!i47Zdk! z{I+o=P4}iP7XOvzNR}?ISd=QuxUMD~Q7XcfN_AtkvROWXXRD<-iP0(EOOh~z^qmxy zvNHs&J}raEm-$INF`q$*dH`oJO4Oc?)-~s32uSg;10M8k_8ImXNWVt&W!%?KBcOVd=KlUK62c}AEo-5`E{}f z!p>B?$yYXUd1U4A#VmG^Rj$H@?pZ}L?qL|tb-e2DL&Hs7w zobr9U{+CuIX)=|U@IxbuKiRwDh*Bk1-Ja1XDq^N+eYBysq(`(?M`yK^gl1>r!fF=J zsi$(jaY#r#8x7He$^{djm-4n$KS?h;GJ1j0nsu&%05Srt;` z1pbigfKF<(1tE5tsncdN?7*d}*@d5%e=+4Q|xE+ zxxoWa3dXBPD+wRg@{(~zNY}JINLyW%&aIKIL~M&%pNOfOlhKCFY9cNZkZnOEUUMwk zu7*cN;hbnEyOt7~eiGI0Om&qa#9^B4p2LxDa?cYJV@QI0_JO3^)#)1R_8yBV^9?EryFTz*OKYa1QVR zp8`(cBj7xMnB)M^2V4LQ9&nJl1D3!=Y&QU#fWyEg;4|PdFjec&u+L|>&UHuy=$>a< zsiK!xxfZ{#Mg}iF@YVa8Bk5EuT9Cpi7@uZ@?Bj}_LjKjxcf~sz?m@qEVX<(trg$W! zh9hliduO}aH5xbq_#C*RrSOlx!tfX=chH*g$o&>7IpY&ItMvP=8O-lBA1FwgJ00JhlV{O?^z^ YnJZnB%Z1Lw%g4*j%fZXSt5y*&0ehN@XaE2J diff --git a/osinaweb/osinacore/edit/urls.py b/osinaweb/osinacore/edit/urls.py index 6bd07c8b..c8ef0e2f 100644 --- a/osinaweb/osinacore/edit/urls.py +++ b/osinaweb/osinacore/edit/urls.py @@ -17,7 +17,6 @@ urlpatterns = [ path('businesstype//', 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 8f442652..4caac75e 100644 --- a/osinaweb/osinacore/edit/views.py +++ b/osinaweb/osinacore/edit/views.py @@ -378,18 +378,6 @@ 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) - - - - - #Mark points @staff_login_required diff --git a/osinaweb/osinacore/templates/.DS_Store b/osinaweb/osinacore/templates/.DS_Store index 8e010a73422d471530a778fba479e8ebd04dc16c..fa2cbac910bfdda923dbd79571498cc91977b419 100644 GIT binary patch delta 554 zcmZn(Xh~3DU|?W$DortDV9)?EIe-{M3-ADifgAVZ?-Wu~;t&DafeaWqL-O+TQk5M7AflX;xr7zX z1sIhWwHZwqZ5izuJs3S1qZp$Z6BsigN|-=_0Rl1*3Pv(!O%4!{n+)=CziO zXufs;i@lTNpFCMqd9$6UHRI%yvb7*%SRsaJa06*qNsLTX;3K(z9`anAIKNv7DOuiwaLX`agFu-@_ delta 407 zcmaiwJxjw-6o&6<3W*wRsx&5QOVUUXOl#A+WRO-ts9RMK5y5H`F@CgY)q*&77V8AL$FLwhb+v)A}m1} zs;~|l&;TDoI3D!G=wrVx{l`B*8*4@e@9a@jXHDEyWb9iu-YYWiTRFfJ+rp+X#&>KI z6YwmST+cCF56k1rq|?zP_mpZJ{nRTjsSiR@7_2r%h^vuJJQ@2IFyYXUtVywfgL7DS Zo)V|61L`8jgazV0*6sYi=g?Dbe*lI=Q^WuO diff --git a/osinaweb/osinacore/templates/add-edit-main.html b/osinaweb/osinacore/templates/add-edit-main.html index b68a0f85..21c3d08b 100644 --- a/osinaweb/osinacore/templates/add-edit-main.html +++ b/osinaweb/osinacore/templates/add-edit-main.html @@ -272,7 +272,7 @@
- +

Payment Methods/p> @@ -564,7 +564,7 @@

- +

Payment Methods/p> diff --git a/osinaweb/osinacore/templates/add_templates/.DS_Store b/osinaweb/osinacore/templates/add_templates/.DS_Store index 412c7c5d81202e1da2519ae9d6f31d30582f4353..c631ee6241395f06800471b6e4433c1140a8d98c 100644 GIT binary patch delta 151 zcmZp1XmOa}&nUVvU^hRb=w=>)YDP&(hD3%GAk+ooRE7c|uZW?9A(tU_a*UA1P*(n?1$$F-~mo+srQUjb(D9sNCd} KB0NNC@df~kL@3w* delta 289 zcmZp1XmOa}&nUJrU^hRb*k&GqYR1hs1^t*Or;1J!7hp(cC}K!uNMtAhlDa@Lk)fC& zd-4WBO9@v?Ya!22I+ zs8u-=T@%*enS*szi}NkuJPPt$fX!vRGe7PITqgn76Gr!}xh=q1W5oQvlW~Ro9x>Xa z9%JJ^U_7hjSZ4ge_;r3>3-favaA(MIM0dDqjGbg=ifrM`2vR$J`;Fz}STXT`2n_2D@;yN4{U|F?Z;~iT&Y&{V%gWp|Jis_#^F396Pkq6fgzK z3hcStw(S3x-=F`>L3U>fm;(Pw0d5YjhXV}B@2!==$zB`5Z{T9mFL$URDExM;71@eA ba5X%OqymgR<_^&Uvkw84!3tC0R~7gKtGm7g literal 0 HcmV?d00001 diff --git a/osinaweb/osinacore/templates/edit_templates/.DS_Store b/osinaweb/osinacore/templates/edit_templates/.DS_Store index 02e90256e6994f633cba5c55bcdd953ba9ceb123..163380e5eb45be704076734e9b26f9c28ce460fa 100644 GIT binary patch delta 71 zcmZoMXfc@J&&azmU^g=(?_?g9oAM$IsSGI$nG7WixpS+Gudh_&c_Pgj4k9O zIP4H0Ph~&X@tYYx#db_YYP_3Y5cP?ug~Hfuqx!=5IhTqxOivf6#K)Qzw8d{oS!J~E z@CtYZewzZkc28(VJFMD!ve)mPHnN&WbcfaaMDcZ;M6)=Vfx+9wCCcbs3@xHw#S8BR zF7|7Q-K9u!$S6Uq1*LATIxletG^Z)Dk7-c)#;!Mc|J zR^qoYJ^`a<&W%-xGeEo)tOu|naCz7KPIcDp#ZvvaKApD>)+Y^{z)UwZ|-0$zbn1$ci5P#8mlxklMKP{|bl*hIG& z+Wc|AoWNjcFxQADFr}$LO;zTKp)?)+ff*MX%r$B{DRcQyCbBX&6eZE&Kak<1LXE!m z3U~#I3LNOaeLnxM-1q+?$^Y{Tcm@8I0;)N=nT# - +

- +

Payment Methods/p> diff --git a/osinaweb/osinacore/urls.py b/osinaweb/osinacore/urls.py index ea2039a5..038caf27 100644 --- a/osinaweb/osinacore/urls.py +++ b/osinaweb/osinacore/urls.py @@ -52,7 +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 b960a118..6e0c3c68 100644 --- a/osinaweb/osinacore/views.py +++ b/osinaweb/osinacore/views.py @@ -107,7 +107,7 @@ def signup(request): }) send_mail(mail_subject, message, settings.EMAIL_HOST_USER, [user.email], html_message=message) - return render(request, 'email-confirmation-sent.html', context) + return render(request, 'email-confirmation-sent.html') else: print('Form is not valid. Errors:') @@ -475,16 +475,6 @@ 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/images/eHcWZi3-_400x400_3.jpg b/osinaweb/static/images/eHcWZi3-_400x400_3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7004b8c680bb3e9c33eaa4a42c71a91ef62a4eb GIT binary patch literal 17708 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 literal 0 HcmV?d00001 diff --git a/osinaweb/static/images/unnamed.png b/osinaweb/static/images/unnamed.png new file mode 100644 index 0000000000000000000000000000000000000000..c4a31004e16258696a84b759ca4bec642e984b7e GIT binary patch literal 15694 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 literal 0 HcmV?d00001 diff --git a/osinaweb/static/js/pop-modals.js b/osinaweb/static/js/pop-modals.js index fec63eb6..5a861c9a 100644 --- a/osinaweb/static/js/pop-modals.js +++ b/osinaweb/static/js/pop-modals.js @@ -67,7 +67,7 @@ document.addEventListener("DOMContentLoaded", function () { addButtonClickListener("reactionDetailsButton", "400px", "300px"); addButtonClickListener("addPaymentCommentButton", "500px", "250px"); - addButtonClickListener("addPaymentButton", "500px", "400px"); + addButtonClickListener("addPaymentButton", "500px", "600px"); addButtonClickListener("editPaymentButton", "500px", "400px"); addButtonClickListener("addPaymentMethodButton", "500px", "400px");