From 6890d6b79c18fe66c00603e02df84f8b90db8f6a Mon Sep 17 00:00:00 2001 From: AlexSserb Date: Sat, 9 Nov 2024 17:09:17 +0400 Subject: [PATCH] refactoring of deal documents --- generators/deal_pdf_generator/deal_data.py | 7 +++--- generators/deal_pdf_generator/generator.py | 24 +++++++++++-------- routers/deal.py | 16 ++++++------- static/css/{deal.css => deal-tech-spec.css} | 0 .../deal/{deal.html => deal-tech-spec.html} | 0 5 files changed, 25 insertions(+), 22 deletions(-) rename static/css/{deal.css => deal-tech-spec.css} (100%) rename templates/documents/deal/{deal.html => deal-tech-spec.html} (100%) diff --git a/generators/deal_pdf_generator/deal_data.py b/generators/deal_pdf_generator/deal_data.py index c87e8ad..c9781b9 100644 --- a/generators/deal_pdf_generator/deal_data.py +++ b/generators/deal_pdf_generator/deal_data.py @@ -3,17 +3,16 @@ from typing import TypedDict, List, Dict, Tuple, Optional from models import DealProduct, Deal, DealStatusHistory -class DocumentDealProductData(TypedDict): +class DealTechSpecProductData(TypedDict): deal_products: List[DealProduct] total_one_product: int quantity: int additional_info: Optional[str] -class DocumentDealData(TypedDict): +class DealTechSpecData(TypedDict): deal: Deal - general_services_total: int - products: Dict[str, DocumentDealProductData] + products: Dict[str, DealTechSpecProductData] current_status_str: str last_status: DealStatusHistory product_images: Tuple[str] diff --git a/generators/deal_pdf_generator/generator.py b/generators/deal_pdf_generator/generator.py index 7936af2..4950cc1 100644 --- a/generators/deal_pdf_generator/generator.py +++ b/generators/deal_pdf_generator/generator.py @@ -7,18 +7,18 @@ from sqlalchemy.orm import selectinload, joinedload from weasyprint import HTML, CSS from constants import DEAL_STATUS_STR, ENV, APP_PATH -from generators.deal_pdf_generator.deal_data import DocumentDealProductData +from generators.deal_pdf_generator.deal_data import DealTechSpecProductData, DealTechSpecData from models import Deal, DealProduct, DealService as DealServiceModel, Product from utils.images_fetcher import fetch_images -class DealPdfGenerator: +class DealTechSpecPdfGenerator: def __init__(self, session: AsyncSession): self._session = session @staticmethod - async def _group_deal_products_by_products(deal_products: List[DealProduct]) -> Dict[str, DocumentDealProductData]: - products: Dict[str, DocumentDealProductData] = {} + async def _group_deal_products_by_products(deal_products: List[DealProduct]) -> Dict[str, DealTechSpecProductData]: + products: Dict[str, DealTechSpecProductData] = {} additional_info: Optional[str] for deal_product in deal_products: @@ -41,7 +41,7 @@ class DealPdfGenerator: return products - async def _create_detailed_deal_document_html(self, deal_id: int): + async def _get_deal_by_id(self, deal_id: int) -> Optional[Deal]: deal: Deal | None = await self._session.scalar( select(Deal) .where(Deal.id == deal_id) @@ -54,6 +54,10 @@ class DealPdfGenerator: joinedload(Deal.shipping_warehouse), ) ) + return deal + + async def _create_deal_tech_spec_document_html(self, deal_id: int): + deal = await self._get_deal_by_id(deal_id) if not deal: return "" @@ -68,7 +72,7 @@ class DealPdfGenerator: product_urls.append(None) product_images = await fetch_images(product_urls) - document_deal_data = { + document_deal_data: DealTechSpecData = { "deal": deal, "products": products, "current_status_str": DEAL_STATUS_STR[deal.current_status], @@ -76,13 +80,13 @@ class DealPdfGenerator: "product_images": product_images, } - template = ENV.get_template("deal/deal.html") + template = ENV.get_template("deal/deal-tech-spec.html") result = template.render({"data": document_deal_data, "sign_place_text": "_" * 22}) return result - async def create_detailed_deal_document_pdf(self, deal_id) -> BytesIO: - doc = await self._create_detailed_deal_document_html(deal_id) + async def create_deal_tech_spec_pdf(self, deal_id) -> BytesIO: + doc = await self._create_deal_tech_spec_document_html(deal_id) pdf_file = BytesIO() - HTML(string=doc).write_pdf(pdf_file, stylesheets=[CSS(APP_PATH + '/static/css/deal.css')]) + HTML(string=doc).write_pdf(pdf_file, stylesheets=[CSS(APP_PATH + '/static/css/deal-tech-spec.css')]) return pdf_file diff --git a/routers/deal.py b/routers/deal.py index b2809f0..c2ca119 100644 --- a/routers/deal.py +++ b/routers/deal.py @@ -7,7 +7,7 @@ from sqlalchemy.ext.asyncio import AsyncSession from backend.dependecies import SessionDependency, CurrentUserDependency from backend.session import get_session -from generators.deal_pdf_generator.generator import DealPdfGenerator +from generators.deal_pdf_generator.generator import DealTechSpecPdfGenerator from models import User from schemas.barcode import GetDealProductsBarcodesPdfRequest, GetDealProductsBarcodesPdfResponse from schemas.deal import * @@ -183,11 +183,11 @@ async def create_guest_url( @deal_router.get( - '/document/{deal_id}', - operation_id='get_deal_document', + '/billing-document/{deal_id}', + operation_id='get_billing_document', # dependencies=[Depends(authorized_user)], ) -async def get_deal_document( +async def get_billing_document( deal_id: int, session: Annotated[AsyncSession, Depends(get_session)], ): @@ -196,15 +196,15 @@ async def get_deal_document( @deal_router.get( - '/detailedDocument/{deal_id}', - operation_id='get_deal_document_detailed', + '/tech-spec/{deal_id}', + operation_id='get_deal_tech_spec', # dependencies=[Depends(authorized_user)], ) -async def get_detailed_deal_document( +async def get_deal_tech_spec( deal_id: int, session: Annotated[AsyncSession, Depends(get_session)], ): - pdf_file: BytesIO = await DealPdfGenerator(session).create_detailed_deal_document_pdf(deal_id) + pdf_file: BytesIO = await DealTechSpecPdfGenerator(session).create_deal_tech_spec_pdf(deal_id) return Response(pdf_file.getvalue(), media_type='application/pdf') diff --git a/static/css/deal.css b/static/css/deal-tech-spec.css similarity index 100% rename from static/css/deal.css rename to static/css/deal-tech-spec.css diff --git a/templates/documents/deal/deal.html b/templates/documents/deal/deal-tech-spec.html similarity index 100% rename from templates/documents/deal/deal.html rename to templates/documents/deal/deal-tech-spec.html