From 833cb874db2db3fab958cef387468ab551923480 Mon Sep 17 00:00:00 2001 From: nataly Date: Tue, 23 Apr 2024 17:03:16 +0300 Subject: [PATCH] .. --- .../add/__pycache__/views.cpython-312.pyc | Bin 4838 -> 7587 bytes osinaweb/billing/add/urls.py | 1 + osinaweb/billing/add/views.py | 68 ++++++++++++++++++ osinaweb/db.sqlite3 | Bin 1077248 -> 1077248 bytes 4 files changed, 69 insertions(+) diff --git a/osinaweb/billing/add/__pycache__/views.cpython-312.pyc b/osinaweb/billing/add/__pycache__/views.cpython-312.pyc index 3a126b7f489e0f300ea22fd96de634b3007ba3d9..dc3077a5c6d304d005d9e3f18902029596ac46e8 100644 GIT binary patch delta 3361 zcma(TOKcm*b(h~Ix#UV*NwjHNUQxDb%9bUka*EjTC!rnLu^fNX#*Sci&0Si{@`u@x zWiiW=4O}#C3&aWw$VqC{Kyz?mp%-0>T8XH*LAsz zWfblvbGcjb5FAvz1dED~;GS7moS*wB>yO(^$BB!lCro?d!i7Z_`+Hk&7cq*u0R;i| z0_v-MYEQF5ZNPD4R~QH#A(PjznoHu@qMFo{bt>;Ue&LK0VSX{_{Lan>YTcf`l(1f# zOHJ#zkWf$`jmgsg{J+v@Goi(8C|vuMXJ2It2t)vF1=LTF zDJ0s9okfMTmQ~RJqZwIsk5Z!|jn5}Ju&k6mLLa|!1D-_yAIHpfll%(DY5xqbt@x^z&hgo)L@iX6fyN^0X?TEF0p)W||v$sMY z1IznsuL*H>q*fHRZyN=|`gorYueK-*x@c4bwH0CL(uR0wDEq(!T@S3AzN^!^mREHh z;@JNL7u8l4BCDBi8=SMrxmMJ+&(?Zdci1IM8t%vNQ}w2I_JHWVY1$Z4pj! zLBhz#r~XJq;o!qETXrfQ!~QX&I1Q)bDiO}d%w0#>m3Ou2-n;g)>w8>>y50bW%dlZ6 zbqX1eHDhWXzPqyEdjK0vpzOv_<`fjZ;}xg)4V%W6JqDKf< zG~DLwox-^+Rh2&^D|w|h98DMUc({_5Q>ye%hYC!}NXt1bJ9|Kioh=lLT3(MGTqmQW z)B$N4Wp~AjGM-A}LbBMBOM-S1&i1_+r(p|uBwV0#(3e188XD;=S?1w~8GS|YM8 z`s>h{cL`;=JM~m_`k{Kx{qib6Jfb@gW;*En+`678Q_*!dBsVdgZo+46p z;;W3cLSD`$r?fnwa#rb-9D9pO+O*AFEeUe5nAK8LaD))aYJ4R{wwq|v=R;{g##l~G zLFfl*4)StNJrvE&CW$!MiI&7fOJVq!rWXsk2CK%U*2N8-V%kXnCWp10S}NpK1kGhS zW>p!P?vt&?pqHfSA~`1cN3Dl}Gp!*Vn|9(nIt40Do%o7d&w#^(fZ!;lZvo^3zGnuJ zYY+TFaKD(gf^IsXj!Z|Upyd&~%uMg;V57Jzpr}yiHqq8{r1MZF=y0%wiFs_goc{p?)$Ia zPt?WH>col|ox)^VY=ai83$>59}N$C|?N>WO8c?~bz`=&z112gCCtb0ha+&0uAy zdTQ0h2f6C&Px=|3aQml^ywN4^o`!eNSG;h$^oWnH@IpN_N;YZLY47!}a!h}8)yMdT zA2TkWtD1Py!}Nyc$LGf9C*~$T*|an;))*N3Gxsp`dHA#NL;j0n^%u`Id(Kx+uXz0L zx|r+TIRampA6gz+}0m)TfVgu8Zjb$_(s82r*FR?mDJ0xdB2REIYBYbZD#v40+Mj_+{Cdu#vczI7H& z61wS~QDuF$NU99e{-I5S;88%Iz4U!Z>*J3Mg4>=}&{OVZa$-$q)x&6((BPiZU#k5n hC=L9Rk-p(Jv#+t=9Owu9Dm%y?V;`So53@Z~|Gzrg{%q%Sq6 zk@zi&C%lk#opAdBb38ZE@*@2>vmnKKw37L%4JKq6m-?K6<8(aWq0`&yGBA?k^6fqk z1Ia@f5B9Bq?YUbF9(rwN=U^()2dDm3!(qwUDZqu}f_PmxJ(xk&5rm@%6+E%7{Jil7 z1Rc+3a14*sT2-vl2sMN{LIy#TV4H9p>k|kK1eHt+t3UDRzx-f2SJjrYs7M-vImvPC zswX~}msG58xvnE~L+5Z-GR^2&ah1|$^g+L=>1tIqxh&SLsRPQk_9KxcsfK0YSvGA6 zVa?XgAdyU9zhUvtYGmuEsflma$-!R^mAOScR`=obSij%rUXO8(4wsQJIrCXNWUhm6 zgTpx_bLyQ)$qKgr*KYy+2H-Nt!n#yni(Z!Q(QH$ec3JFHcKkRMaKN{v;!vXJ1W=$7 z`;x!d4cxxZR^htjsQfwR_DQ3Z?vb^(WNnvJcS&WBERD$Gh}7Sc!Z<%eH|h9%RpRH% Kv_Uthn)n?h;;y;? diff --git a/osinaweb/billing/add/urls.py b/osinaweb/billing/add/urls.py index c29906c6..304ba24f 100644 --- a/osinaweb/billing/add/urls.py +++ b/osinaweb/billing/add/urls.py @@ -6,4 +6,5 @@ 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'), ] diff --git a/osinaweb/billing/add/views.py b/osinaweb/billing/add/views.py index b7ecbfc3..b208278b 100644 --- a/osinaweb/billing/add/views.py +++ b/osinaweb/billing/add/views.py @@ -5,6 +5,7 @@ from django.http import JsonResponse, HttpResponse from django.template.loader import get_template from django.conf import settings import os +from weasyprint import HTML, CSS @@ -110,6 +111,73 @@ def add_order (request, *args, **kwargs): +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.filter(invoice_number__startswith=current_year).order_by('-invoice_number').first() + if last_invoice: + last_invoice_number = int(last_invoice.invoice_number.split('-')[1].split('+')[0]) + new_invoice_number = f"${current_year}-{last_invoice_number + 1}" + else: + new_invoice_number = f"${current_year}-1425" + + + 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 + ) + + + # Save PDF to a file + pdf_file_path = os.path.join(settings.MEDIA_ROOT, f'invoice_{invoice.id}.pdf') + with open(pdf_file_path, 'wb') as pdf_file: + pdf_file.write(pdf) + + # Associate PDF file path with the Invoice object + invoice.pdf = pdf_file_path + invoice.save() + + # Return PDF + response = HttpResponse(pdf, content_type='application/pdf') + response['Content-Disposition'] = 'attachment; filename="my_pdf.pdf"' + + return response + + + + diff --git a/osinaweb/db.sqlite3 b/osinaweb/db.sqlite3 index 0f0b44130c0769c407768e60ccd15af14ddacced..036f6e958569640c4c14e45b543eb80f2f78cb9b 100644 GIT binary patch delta 436 zcmY+Ay-Nc@5XEnIFS+w}j28((G{g&n2uWe^v#`h!D-prgDj}i>DN=}N5j;IGo%j*5 zma$7K0k=tEVU>TtHlP?wkra2J;v|A#@!NR|v-94p)3Ke7eKA2Am$58q+~xL?q6BNETAY?X&6(D~d2m`mw0IhfYN}%;$s^=DJ)B^A?xI zGE}LoPV$n)92OH=hJUjK7L&ToBa}tmBe9v~k-$K+axU5v|(EWeMb4mgT1>%nD_ z$?-?gF$1bF^L$NMd7QtM=hHkCWQ4|v|64qHUgQT&=ICvqS@5OmPpHfU%nK_47%2f~ z+PLBFY6_u>qEO-+?#|!ElP@!1Y0QBuq0NF{%Tu+M22Xybp=J!MDCzdCD0!9j71(Cj ztKd%X&2$u|-FLG4PByd*Q)AfalkT8;_{Lm^-qimuJ86zSbeMeGhcO)jteIlt+3WKlKlLU;qFB delta 450 zcmZ9IKTBI-6vofJ?~V7G_n5p_l!mI|rh*7YxbY7-bnr$eDfs}M64DNWScf7mxkdy7 z4nYlibkQ3-wOft!T^t;o`~rnS!D0#>y0i#w!Ag(NE**a7Im^Ryo>RRFs#n2QpAl{M z&lu6$;{1s5xp6tNZ~Ry{qJFzL2v=hi4ld5@X#d7HfYl6PzWp9tq zt7${;paD+d#p3g^3E$U+8Tqc?3b78PqK+w=F3Jm1B{@f4iSwS8