feat: pallets and boxes for deals

This commit is contained in:
2024-12-09 16:45:10 +04:00
parent d56e292276
commit 863dd226c3
14 changed files with 631 additions and 44 deletions

View File

@@ -1,52 +1,16 @@
import os
from io import BytesIO
from reportlab.pdfgen.canvas import Canvas
from reportlab_qrcode import QRCodeImage
from reportlab.lib.styles import ParagraphStyle, getSampleStyleSheet
from reportlab.lib.units import mm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.platypus import SimpleDocTemplate, Paragraph
from sqlalchemy.ext.asyncio import AsyncSession
from reportlab.pdfgen.canvas import Canvas
from reportlab.platypus import Paragraph
from reportlab_qrcode import QRCodeImage
from constants import APP_PATH
from generators.base_pdf_card_generator.base_pdf_card_generator import BasePdfCardGenerator
from models import User
from services.user import UserService
class WorkShiftsQRCodeGenerator:
def __init__(self, session: AsyncSession):
self._session = session
assets_folder = os.path.join(APP_PATH, 'assets')
fonts_folder = os.path.join(assets_folder, 'fonts')
font_file_path = os.path.join(fonts_folder, 'DejaVuSans.ttf')
self.page_width = 58 * mm
self.page_height = 40 * mm
pdfmetrics.registerFont(TTFont('DejaVuSans', font_file_path))
styles = getSampleStyleSheet()
self.small_style = ParagraphStyle(
'Small',
parent=styles['Normal'],
alignment=1,
fontName='DejaVuSans', # Specify the new font
fontSize=9,
leading=12,
spaceAfter=2,
rightIndent=2,
)
def _create_doc(self, buffer):
return SimpleDocTemplate(
buffer,
pagesize=(self.page_width, self.page_height),
rightMargin=1,
leftMargin=1,
topMargin=1,
bottomMargin=1
)
class WorkShiftsQRCodeGenerator(BasePdfCardGenerator):
async def generate(self, user_id: int) -> BytesIO:
buffer = BytesIO()
doc = self._create_doc(buffer)
@@ -59,7 +23,7 @@ class WorkShiftsQRCodeGenerator:
position = user.position.name if user.position else ""
user_info = Paragraph(
f"{user.first_name} {user.second_name}\n{position}",
self.small_style
self.small_centered_style
)
doc.build([user_info], on_first_page)