From d34c14bf6694c13109a169e4e351166a5578df02 Mon Sep 17 00:00:00 2001 From: emile Date: Fri, 12 Apr 2024 18:07:38 +0300 Subject: [PATCH] ss --- .../billing/__pycache__/urls.cpython-310.pyc | Bin 563 -> 1014 bytes .../billing/__pycache__/views.cpython-310.pyc | Bin 974 -> 3041 bytes osinaweb/billing/urls.py | 7 +++- osinaweb/billing/views.py | 39 ++++++++---------- .../__pycache__/urls.cpython-310.pyc | Bin 830 -> 839 bytes osinaweb/db.sqlite3 | Bin 999424 -> 1003520 bytes .../__pycache__/settings.cpython-310.pyc | Bin 2779 -> 2779 bytes 7 files changed, 24 insertions(+), 22 deletions(-) diff --git a/osinaweb/billing/__pycache__/urls.cpython-310.pyc b/osinaweb/billing/__pycache__/urls.cpython-310.pyc index 4897b3ecdd379a3333ba83536e4e89f8d091dc26..f1898f910c726271ab850d95128538f9c86cad91 100644 GIT binary patch literal 1014 zcmaiyy>8nu5XU7;mL*yKNNmULmQIBSTNyGHLC~RNKZc+Sfx?hQ+F?pk21(n9pP);Z zzC~ZBqt;FZ`UIVNq-iA0QV}}*f5$t19IxthQV+f_@18He1)lfQz~iq2@EU&g0}S@C z&phrU-#5C!8azM&4^e12U`-yO$m)=_c#LAJn=IieO0AAqn`bEVJrdv+$?iJ1h2yUQ zPy*D&iK7&#hf_ywpgztVb%0KA*HI7X6!#sS01fb|qXEzm4;_twM)=IoDnVy>eB(`? z{epXW6Tfa2m{T!n)Zx0&w{?q(l5H@7ne?_0m=Sq-aS0SDU1(Z@iWSkCij^|iTS|7S zZcE}?fYXNwMdTL3?1a<%#AMiYPz=(l z{mUiMn^@4#HyN=mC%wdWCO}xx1Dn%nUc_co(#dD{zL3?X6KqFdi>Nq zJG_OA9OFDPZ8$0PjwVv5@17i*t&I8eDgOv-tDJDk2!SKrll%=)pLMm)Zwf~F`P*V`;De&N ztax52DvDf?ofU^$ADla~$la}SQ<&NMzK*Xr^b;f3K5VAW!DL?F&)n$7T^~khZ2&fi GfByvn?lI;7 delta 174 zcmeyyzL`ZkpO=@50SM0OiKbaHGB7*_agYHkkmCTv#Yq#jW4Y29qxe!dgBdirCNnYm z2_$EvCTD9h-eSp1%uV&v8ad0l z?9+1PA8^<`=EhHezo9E9&Ri%Cz}K1?XC0u5!meqxq?XkEb*t6c(o)mH?}xkF`#%Mi z^)q$O|7>*L$Cv*I!Y$5XD`7pB*gcz3-;SNc?YV|`;#%VMJn$~B#r69%@5O%7=ru4_ z=l-`=ugM#{iMGXCJU|=pCEiB6#FzOB+BRS1YiO7GI^RIM!Z-OA+EspmUqrixJ+})T z%$ZMN|MlLw;V;D-$!2fU@R#GQmc`NHa4{RLK79b0=+q+Ce7dLUFk z+Z&1j8ri>j<7S6xUqy+SWT^n(AfAg@g}*Rb$~1c!B={uH($7Uc%FH2mMiaAo6acM3V0usw95IBq9FD)paSp9*bOQ zHUH{#EzOT*$mDk|-7;j-zAIy)E(wDjRjb2;(TZ`e`_# z&b>TRgDmN0d6b6TR2&(G55x2zD+Z6mUUx6T7U@CvVI+?7ozbzb8QmIWjIoRbj$A|U zUu~8oOEzvV+L%e;T^K1T-sjO#){vdrXV$61 z*%_NT+@3lSo4Lvb5Y+V|ICAZT zajbo#Uw`k|c&Ss9xH6VpBGM*ufygqEMZ?SlP5$bGtT5Mc{|sC+x?r7w7!njbb0DvT zoc9qSqc~Iu7WA%WwiZwG+VT=6eXynf%Iu`|Lai1*+XFWUk)urUzs0z<;g?O z`%!LUw&U)~Ews8Z80RWW5G<3+f4AH?pz_l4ty1(ene8L~3r=qml)Nzc&K zKR8J@=s0u0>m+iS$g>~=+Nb(?VCcJrFaI1wS&B^=XW!W~TiHWr=uT~Je}_;kdfeeI zdakNXol}q3xOZlsF!bEVJzoFbp4C)+T03FL5dQ8XrtOF$(fAb__t9CYI{ki>r{g%5 z&p`oQQ;~`Vvf8$}tbHjcQV=s)zgnQTim9VW9cE)SAMg0m!4~o=?c?4-lo<@Q2RIe- zqf6IBdk@1Hxkys*c03dGx>ar6kGM3^^&)NblG%udDtzJ!=#71$28Z*L`$nO6A)eFK z30T|4-)S@N55Fe67+Qe6jsZ#=26hhSJnU0@XajCQKLp4Ie0S;$y;%)2b#VTaxCXf9 zur&fCGcWg2YLlQsyYg8!k3e2v6SK;I;eT&3MHZm4daQ>O7)hnhKBn#=ntEirDd z7jAD>=ELB6$s1+lTO|4hksTt72~ckq-mg}3pojB*vHHpJ5 zvio~jV%Gg*&RBlJA_3`~01K)l{~@iX&_xslA1gJg$_DC_ud39JzWee0yPqy3=PFMc zQ{Tic3WdZ8n<3?#vNMZPPLXa-9rPT$dX7mr_6#-H)aBmW*3?BxsqapLQq{s-roCKA zy!Dgia5RdeL8ziE?T+|9>1C>n6uKRc#AJ(dD~0Sk*QzZbc5SkLi)xWnUB4Zn5JG){ z4Uleclfi_b{0KxhjwHgjj}?-PDDyFjtnx+EE)_o7hd`eW(!MO~swZOzXr)5Zy@IU5 zUO7F#zU{NN6F5G?M&8B1Zf9Gs6ot)Bewax$7^}Qc$iXzOrYU-M#tIQADUP&Hx0NbA zNqB27$x!m;x>ZUZ!fWOhn9|1-CB;)uZ>glW&AbyPYnf=3#_43P-YWN~%-xBz5SP}V zq?<<~%#TNKgEC+l{m+?gE|IB>{I{XgI2P|xt(m_7vVsr`a82;JejWcMLj!-+-wK*E Hhrj(7WLD!F literal 974 zcmZuw&u`N(6tr_c8LzP#@_5#4T^;P`QHZ@A|Y^3yJE4~C1^IMopb zPB<+|MH5ObW+khf#93pfbSp3M5WCzf{Zo7Hmq8UKA?^h{{6>-%Z=H~S`x=!(M>8nH)i?040UQMyG?h@rH#|TJE5X#Oo$z_iv49KF>=?dUaC` zFj)-KO4NFciic|@Hk&gT#DfAQ>QQ`Nz)T%X=jO@A#kK~O4u$+rwH+))J;V^v9t~NK?XW%O zJB+%NQU5pl5_xhTkB|Fp)7!lBK#hged83uIKaGjD+l?+twYj*^-kJTrH@){Ofgidu ooo(h=>*>0&Yw2}6ZiUBIG<=Diri54a4^XzH5tbOy5NG870lQunK>z>% diff --git a/osinaweb/billing/urls.py b/osinaweb/billing/urls.py index 44891bcc..2565e7b6 100644 --- a/osinaweb/billing/urls.py +++ b/osinaweb/billing/urls.py @@ -8,7 +8,7 @@ from billing import views urlpatterns = [ - path('check', views.create_charges_for_recurring_services, name='check'), + # LISTING path('items', views.items, name='items'), @@ -28,4 +28,9 @@ urlpatterns = [ path('invoice-details//', views.invoice_details, name='invoicedetails'), + path('generate-pdf/', views.generate_pdf, name='generate-pdf'), + + + + ] diff --git a/osinaweb/billing/views.py b/osinaweb/billing/views.py index 518dcc22..468230f9 100644 --- a/osinaweb/billing/views.py +++ b/osinaweb/billing/views.py @@ -3,27 +3,9 @@ from django.utils import timezone from datetime import timedelta from .models import * from django.http import JsonResponse - - -def create_charges_for_recurring_services(request): - today = timezone.now().date() - active_recurring_services = Service.objects.filter(active=True, recurring=True) - - for service in active_recurring_services: - # Get the last charge for the service - last_charge = service.charge_set.order_by('-due_date').first() - - if last_charge and last_charge.due_date <= today: - # Calculate the new due date for the charge based on the recurring cycle - new_due_date = today + timedelta(days=service.recurring_cycle.number_of_months * 30) - - # Create a new charge for the service - Charge.objects.create( - service=service, - amount=service.amount, - due_date=new_due_date - ) - return JsonResponse({'status': 'success'}) +from django.http import HttpResponse +from django.template.loader import get_template +from weasyprint import HTML # LISTING def items (request, *args, **kwargs): @@ -128,3 +110,18 @@ def invoice_details (request, invoice_id): return render(request, 'invoice-details.html', context) + + + +def generate_pdf(request): + # Render the template + template = get_template('invoice.html') + html = template.render() + + # Create a PDF file + pdf_file = HTML(string=html).write_pdf() + + # Prepare HTTP response + response = HttpResponse(pdf_file, content_type='application/pdf') + response['Content-Disposition'] = 'filename="invoice.pdf"' + return response diff --git a/osinaweb/customercore/__pycache__/urls.cpython-310.pyc b/osinaweb/customercore/__pycache__/urls.cpython-310.pyc index 786b047b1c23f0b42c5bcce0ea50069fab8024ab..72ffedd52d586ff14577eb2de2377f5a09b88686 100644 GIT binary patch delta 37 rcmdnTcASkbpO=@50SFZACDRy~C-R-+5=t&DF3HbLEz;e1H<1Ydp$`fz delta 28 icmX@kwvUZ3pO=@50SJ=RB+|Y!P2@Yr$hq-ZA`<{&zXziL diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index dbd97d24601400a836584201113bf374983c94cf..84e97bda0287fa4d1eb07252091dc8e3915338c6 100644 GIT binary patch delta 1306 zcmai!TWH&66vus!liG5cJ#=ef?9wFNg2N}tk|je5w&ggsB$;hlwk27TFOp?L zvFmP23uSa`!P{Hghcfmuwrn%(Z7&=2Wv}ZXkjD)+*h^mugJ~IovJLvd555l$=bZ2S z&pDIH*5v-yolDL=gTe4r=k$Dd#cSO&Y!;$lFduIilShAUd>gp?V|`&S&7wh(&t;qJ zsK`b<6*R;qXzVh@5E3F6V$nucs0Ql-A8d>mO^|zGhTJG*y}?8<*77GPd3Ugd0L0@4 z9yg4<277!6?(^WAUIK*?aQBk5e;Osi7pr_xL_vlVB$`LM9jaWBF9-NAMxmo!EvjJk zY9^#LXcn#J$w7taN*t@@!A87M%i`Xg^sguY_W^VhAv`#N-Z+*Hk0qmyNyn^X(Xr~- zbQW~%I*U3>^JD4Unm5#8cO^uOa9+mrcKaKaG8}3{55`i#(s+fgYOIR?Tr!qb_i=j5Y`D zzNo+wLx`A6DjhE_^^^+E^bI%X(Rv|qDd(?9Zwb+-Npdi#wL z-xfqn7}SQ9I)_%pR=3R&qXq-ItPC)2q`T-nfwnsKY`tHKg5nuH_%QS+69v%YBq?u~`Z) zMtXH&*isQfbng_>J%y2&g1ngA76{GzsU^{IM!8llkF{uZdFjwWOBNhiWR%I*VKNX{T z$-&T{4%EruPIkNGAM|8!(2KXi#bU3ViU{gZmihxSEygnaFxf^0Rj4T%m*UELy17oL zGsF+V7>x_5c0g@ru(7JN@X@Y{gDf6nJAB*iDGGhI&!mW?){P~)G)~n5k%-o3JIR1J zq$~aFc1wKtLV@cjIIEX;6jBRRvL9Aja#Li153g9U}E2Q9yqqIw-Z$;CLO8Y?mW z|F0K}Az=RGs%zc2?9_+A;@UU3esX>8I&|&pvy^a|*QUwYcP8lN^Up04l0;UgiP`HW q=oQ!5>|-7rtWD!*wgB^?$R>&cfTF9@-BVi!Kz$xk-$pn<@xK6xKAX7! delta 757 zcmZozVB64OJ3*S)oq>Vj3lJXzV#bLY=B(}vdU-oHrp(Z0^xphedzVv+xsd@7s02nh z<`#z(8kJO-07VLd&0U?-^Yc~0U9t*%gQ7Bnb3@CLBg)J|%eBqCii>^HGqqhkB2Bdm z3_UIU6Wx=8ER$`G42(>44NP)OfC%zF{<*-F7ztS z3yv(z4MefX$jZpj%EUm=%+k`>#Ju@#e*4{gMj&PaVrC#_0b*7lW&>h&Am#vKP9Wym zem9?6`GEj1TwtIZ$Ozvo*sz4(M}nDyL7SJ6lYzlM*wfe5FH|8Q$ko>~)K@~1iGx8G zMJ71J(a*&($c0msk%K{B0=nlE&-4ot+^o|N?_hM^ ze(No-n$V;NEZbQEc>eNlXB6P8Z+bIT~9_~~wJ5F)-4}3RyH?f@p8nvE{xk