feat: cards, attributes and modules

This commit is contained in:
2025-02-19 14:46:31 +04:00
parent a509a3a586
commit 1af78ce08a
61 changed files with 3212 additions and 2795 deletions

View File

@@ -8,7 +8,7 @@ from barcodes.attributes import AttributeWriterFactory
from barcodes.generator.default_generator import DefaultBarcodeGenerator
from barcodes.images_uploader import BarcodeImagesUploader
from models import BarcodeTemplate, BarcodeTemplateAttribute, barcode_template_attribute_link, Product, \
BarcodeTemplateAdditionalField, BarcodeTemplateSize, Deal, DealProduct
BarcodeTemplateAdditionalField, BarcodeTemplateSize, Card, CardProduct
from schemas.barcode import *
from services.base import BaseService
@@ -113,44 +113,44 @@ class BarcodeService(BaseService):
)
return filename, pdf_buffer
async def get_deal_barcodes_pdf(self, request: GetDealProductsBarcodesPdfRequest) -> Tuple[str, BytesIO]:
async def get_card_barcodes_pdf(self, request: GetCardProductsBarcodesPdfRequest) -> Tuple[str, BytesIO]:
stmt = (
select(Deal)
select(Card)
.options(
selectinload(Deal.products).joinedload(DealProduct.product).selectinload(Product.client),
selectinload(Deal.products).joinedload(DealProduct.product).joinedload(Product.barcodes),
selectinload(Card.products).joinedload(CardProduct.product).selectinload(Product.client),
selectinload(Card.products).joinedload(CardProduct.product).joinedload(Product.barcodes),
)
.filter(Deal.id == request.deal_id)
.filter(Card.id == request.card_id)
)
query = await self.session.execute(stmt)
deal: Deal = query.scalar()
if not deal:
card: Card = query.scalar()
if not card:
raise ValueError('Сделка не найдена')
uploader = BarcodeImagesUploader()
barcodes_data: List[Dict[str, str | Product | BarcodeTemplate | int]] = []
for deal_product in deal.products:
if deal_product.product.barcode_image:
for card_product in card.products:
if card_product.product.barcode_image:
barcodes_data.append({
"barcode_image_url": uploader.get_abs_path(deal_product.product.barcode_image.filename),
"num_duplicates": deal_product.quantity
"barcode_image_url": uploader.get_abs_path(card_product.product.barcode_image.filename),
"num_duplicates": card_product.quantity
})
else:
product_request = GetProductBarcodeRequest(
product_id=deal_product.product_id,
product_id=card_product.product_id,
barcode="",
barcode_template_id=deal_product.product.barcode_template_id,
barcode_template_id=card_product.product.barcode_template_id,
)
barcode_template = await self._get_barcode_template(product_request, deal_product.product)
barcode_template = await self._get_barcode_template(product_request, card_product.product)
barcodes_data.append({
"barcode": deal_product.product.barcodes[0].barcode,
"product": deal_product.product,
"barcode": card_product.product.barcodes[0].barcode,
"product": card_product.product,
"template": barcode_template,
"num_duplicates": deal_product.quantity
"num_duplicates": card_product.quantity
})
default_generator = DefaultBarcodeGenerator()
filename = f'{deal.id}_deal_barcodes.pdf'
filename = f'{card.id}_deal_barcodes.pdf'
pdf_buffer = default_generator.generate(barcodes_data)
return filename, pdf_buffer