feat: pallets and boxes for deals
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user