feat: warehouse places accounting

This commit is contained in:
2025-05-07 09:53:17 +04:00
parent 36ddf7d6a7
commit 42ce73dd6a
20 changed files with 889 additions and 1 deletions

View File

@@ -63,3 +63,16 @@ class BasePdfCardGenerator:
topMargin=1,
bottomMargin=1
)
def _get_paragraph_style(self, font_size: int):
common_paragraph_style = {
"parent": self.styles['Normal'],
"fontName": "DejaVuSans",
"spaceAfter": 4,
"fontSize": font_size,
}
return ParagraphStyle(
'LargeCentered',
alignment=1,
**common_paragraph_style,
)

View File

@@ -0,0 +1 @@
from .generator import WarehousePlaceQRCodeGenerator

View File

@@ -0,0 +1,46 @@
from io import BytesIO
from reportlab.lib.units import mm
from reportlab.pdfgen.canvas import Canvas
from reportlab.platypus import Paragraph, SimpleDocTemplate, Frame
from reportlab_qrcode import QRCodeImage
from generators.base_pdf_card_generator.base_pdf_card_generator import BasePdfCardGenerator
from services.warehouse_management import WmsService
class WarehousePlaceQRCodeGenerator(BasePdfCardGenerator):
async def generate(self, place_id: int, is_short: bool) -> BytesIO:
service = WmsService(self._session)
place_code = await service.get_code_of_place(place_id)
buffer = BytesIO()
doc: SimpleDocTemplate = self._create_doc(buffer)
def on_first_page(canvas: Canvas, doc):
denco_paragraph = Paragraph('DENCO', self.small_centered_style)
if is_short:
qr = QRCodeImage(place_code, size=20 * mm)
qr.drawOn(canvas, 39 * mm, -4)
number_paragraph = Paragraph(str(place_code), self._get_paragraph_style(26))
number_frame = Frame(x1=0 * mm, y1=-15 * mm, width=42 * mm, height=30 * mm)
denco_frame = Frame(x1=0 * mm, y1=-2 * mm, width=42 * mm, height=20 * mm)
else:
qr = QRCodeImage(place_code, size=25 * mm)
qr.drawOn(canvas, 34 * mm, -4)
number_paragraph = Paragraph(str(place_code), self._get_paragraph_style(34))
number_frame = Frame(x1=0 * mm, y1=9 * mm, width=60 * mm, height=30 * mm)
denco_frame = Frame(x1=0 * mm, y1=-13 * mm, width=58 * mm, height=20 * mm)
number_frame.addFromList([number_paragraph], canvas)
denco_frame.addFromList([denco_paragraph], canvas)
empty_paragraph = Paragraph("", self.small_centered_style)
elements = [empty_paragraph]
doc.build(elements, on_first_page)
buffer.seek(0)
return buffer