Se completo la integracion del celery en la creacion de reportes

This commit is contained in:
2026-01-13 14:22:15 -06:00
parent 9d8e1283a8
commit 0c43c252a4
6 changed files with 39 additions and 26 deletions

View File

@@ -17,10 +17,11 @@ from sqlalchemy import (
)
from sqlalchemy.orm import Mapped, mapped_column, relationship
from api.v1.modules.public.reference_data.material_types.models import MaterialType
from api.v1.modules.a76.general_catalogs.units_of_measure.models import UnitOfMeasure
if TYPE_CHECKING:
from api.v1.modules.a76.parts.models import Part
from api.v1.modules.public.reference_data.material_types.models import MaterialType
from api.v1.modules.a76.general_catalogs.units_of_measure.models import UnitOfMeasure
class Class(Base, TenantScopedMixin, TimestampMixin):

View File

@@ -12,6 +12,10 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship
from api.v1.common.base_models import TenantScopedMixin, TimestampMixin
from core.database import Base
# Import models referenced by TenantScopedMixin (Tenant, Company) to ensure they are loaded
from api.v1.modules.core.tenants.models import Tenant
from api.v1.modules.a76.general_catalogs.company.models import Company
# 1. GUniMedACE

View File

@@ -5,6 +5,9 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship
from api.v1.common.base_models import TenantScopedMixin, TimestampMixin
from core.database import Base
from api.v1.modules.a76.classes.models import Class
from api.v1.modules.a76.general_catalogs.units_of_measure.models import UnitOfMeasure
if TYPE_CHECKING:
from ..models import Item
from ..line_financials.models import LineFinancial
@@ -12,10 +15,6 @@ if TYPE_CHECKING:
from ..line_customs.models import LineCustom
from ..line_descriptions.models import LineDescription
from ..line_references.models import LineReference
from api.v1.modules.a76.classes.models import Class
from api.v1.modules.a76.general_catalogs.units_of_measure.models import (
UnitOfMeasure,
)
from api.v1.modules.a24.fa.fa_item_lines.models import FaLineItem
@@ -35,14 +34,14 @@ class LineItem(Base, TenantScopedMixin, TimestampMixin):
line_number: Mapped[int] = mapped_column(Integer) # LINEAIMPO/LINEAEXPO/LINEA
# Part identification
part_number_id: Mapped[Optional[str]] = mapped_column(
part_number: Mapped[Optional[str]] = mapped_column(
ForeignKey("a76.parts.id")
) # NUMPARTE
component_part_number_id: Mapped[Optional[str]] = mapped_column(
component_part_number: Mapped[Optional[str]] = mapped_column(
ForeignKey("a76.parts.id")
) # NUMPARTECOM
class_id: Mapped[Optional[str]] = mapped_column(
ForeignKey("a76.classes.id")
class_code: Mapped[Optional[str]] = mapped_column(
ForeignKey("a76.classes.class_code")
) # CLASE
# Unit of measure
@@ -173,7 +172,7 @@ class LineItem(Base, TenantScopedMixin, TimestampMixin):
back_populates="line", cascade="all, delete-orphan", uselist=False
)
class_info: Mapped[Optional["Class"]] = relationship(
foreign_keys=[class_id], viewonly=True
foreign_keys=[class_code], viewonly=True
)
unit_of_measure_info: Mapped[Optional["UnitOfMeasure"]] = relationship(
foreign_keys=[unit_of_measure], viewonly=True

View File

@@ -1,14 +1,15 @@
import base64
import logging
from core.celery_app import celery_app
from celery import current_task, states
from core.database import CoreSessionLocal
from .mex.service import FacturaImportacionMexService
logger = logging.getLogger(__name__)
@celery_app.task(name="generar_pdf_factura_async")
def generar_pdf_factura_async(invoice_id: int, company_id: int):
@celery_app.task(name="generar_pdf_factura_async", bind=True)
def generar_pdf_factura_async(self, invoice_id: int, company_id: int):
"""
Esta tarea la ejecuta el Worker. No usa FastAPI, usa directamente SQLAlchemy.
"""
@@ -19,6 +20,9 @@ def generar_pdf_factura_async(invoice_id: int, company_id: int):
# 2. Instanciamos el servicio de reportes
service = FacturaImportacionMexService()
# Update state to PROCESSING
self.update_state(state='PROCESSING', meta={'current': 1, 'total': 1, 'status': 'Generating PDF...'})
# 3. Generamos los bytes del PDF
pdf_bytes, nombre, media_type = service.generar_factura_completa(