new invoices

This commit is contained in:
Martin Quarda 2024-10-02 18:48:04 +02:00
parent 83233f223c
commit a8d3c7f108
3 changed files with 30 additions and 254 deletions

View File

@ -265,105 +265,6 @@
<td class="tg-7zrl"></td> <td class="tg-7zrl"></td>
<td class="tg-7zrl"></td> <td class="tg-7zrl"></td>
</tr> </tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr> <tr>
<td class="tg-7zrl"></td> <td class="tg-7zrl"></td>
<td class="tg-7zrl"></td> <td class="tg-7zrl"></td>
@ -395,162 +296,8 @@
<td class="tg-7zrl"></td> <td class="tg-7zrl"></td>
<td class="tg-7zrl"></td> <td class="tg-7zrl"></td>
</tr> </tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr> <tr>
<td class="tg-kw6s" colspan="8"><span style="color:#3D3D3D">V obchodním rejstříku je zapsána pod spisovou značkou C 52475, Krajský soud v Hradci Králové.</span></td> <td class="tg-kw6s" colspan="8"><span style="color:#3D3D3D">V obchodním rejstříku je zapsána pod spisovou značkou C 52475, Krajský soud v Hradci Králové.</span></td>
<td class="tg-7zrl"></td> <td class="tg-7zrl"></td>
</tr> </tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
<tr>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
<td class="tg-7zrl"></td>
</tr>
</tbody></table> </tbody></table>

View File

@ -200,7 +200,7 @@ def photos(request):
def invoice(request): def invoice(request):
user = User.objects.get(invoice_id=request.GET['invoice_id']) user = User.objects.get(invoice_id=request.GET['invoice_id'])
return TemplateResponse( return TemplateResponse(
request, None,
'invoice.html', 'invoice.html',
{ {
'user': user, 'user': user,

29
get_invoices.py Normal file
View File

@ -0,0 +1,29 @@
from datetime import date, datetime, timedelta
from django.template.response import TemplateResponse
from alkatorapi.models import User
from xhtml2pdf import pisa
from weasyprint import HTML
from pypdf import PdfWriter
import asyncio
def html_to_pdf(html_content, output_path):
HTML(string=html_content).write_pdf(output_path)
merger = PdfWriter()
for user in User.objects.all().order_by('last_name', 'first_name'):
template = TemplateResponse(
None,
'invoice.html',
{
'user': user,
'paid_date': user.register_date + timedelta(days=1),
}
)
template.render()
pdf_name = f"{user.last_name}_{user.first_name}.pdf"
html_to_pdf(template.content, pdf_name)
merger.append(pdf_name)
merger.write('result.pdf')
merger.close()