Files
plantillas-proyectos/backend/api/v1/modules/a76/client_and_provider/models.py

109 lines
4.5 KiB
Python

"""
Modelos ORM para gestión de clientes y proveedores
"""
from sqlalchemy import Column, Integer, String, SmallInteger, Numeric, ForeignKey
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from core.database import Base
class ClientProvider(Base):
"""
Modelo para la tabla GClientesPro - Información de clientes y proveedores
"""
__tablename__ = "client_provider"
__table_args__ = {"schema": "a76"}
# Primary key
client_id = Column(String(8), primary_key=True, nullable=False)
# Basic information
type_nat_foreign = Column(String(1), nullable=True) # TIPO NACIONAL/EXTRANJERO
name = Column(String(256), nullable=True)
short_name = Column(String(10), nullable=True)
rfc = Column(String(30), nullable=True)
curp = Column(String(19), nullable=True)
client_or_provider = Column(String(1), nullable=True)
linking = Column(String(1), nullable=True)
transform_subassembly = Column(String(1), nullable=True)
extra_information = Column(String(399), nullable=True)
web_key = Column(String(40), nullable=True)
responsible = Column(String(80), nullable=True)
position = Column(String(30), nullable=True)
incoterm = Column(String(19), nullable=True)
is_national_provider = Column(String(2), nullable=True)
enabled_disabled = Column(SmallInteger, nullable=True)
tenant_id = Column(String, ForeignKey("a76.tenants.id"), nullable=False)
# Relationships
address = relationship("ClientProviderAddress", back_populates="client_provider", uselist=False, cascade="all, delete-orphan")
programs = relationship("ClientProviderPrograms", back_populates="client_provider", uselist=False, cascade="all, delete-orphan")
class ClientProviderAddress(Base):
"""
Modelo para la tabla GClientesPro_Direccion - Dirección de clientes y proveedores
"""
__tablename__ = "client_provider_address"
__table_args__ = {"schema": "a76"}
# Primary key (foreign key)
client_id = Column(String(8), ForeignKey('a76.client_provider.client_id', ondelete='CASCADE'), primary_key=True, nullable=False)
# Address information
municipality = Column(String(150), nullable=True)
streets = Column(String(100), nullable=True)
neighborhood = Column(String(40), nullable=True)
interior_number = Column(String(20), nullable=True)
exterior_number = Column(String(20), nullable=True)
postal_code = Column(String(15), nullable=True)
city = Column(String(30), nullable=True)
state = Column(String(30), nullable=True)
country = Column(String(3), nullable=True)
phone = Column(String(30), nullable=True)
fax_number = Column(String(30), nullable=True)
email = Column(String(100), nullable=True)
contact = Column(String(50), nullable=True)
reference = Column(String(250), nullable=True)
# Relationship
client_provider = relationship("ClientProvider", back_populates="address")
class ClientProviderPrograms(Base):
"""
Modelo para la tabla GClientesPro_Programas - Programas de clientes y proveedores
"""
__tablename__ = "client_provider_programs"
__table_args__ = {"schema": "a76"}
# Primary key (foreign key)
client_id = Column(String(8), ForeignKey('a76.client_provider.client_id', ondelete='CASCADE'), primary_key=True, nullable=False)
# Program information
program = Column(String(7), nullable=True)
program_number = Column(String(40), nullable=True)
prosec = Column(SmallInteger, nullable=True)
prosec_authorization = Column(String(20), nullable=True)
secon_auth_date = Column(Integer, nullable=True)
manufacturer_id = Column(String(25), nullable=True)
tax_id = Column(String(30), nullable=True)
broker = Column(String(6), nullable=True)
import_broker = Column(String(6), nullable=True)
transfer_key = Column(String(8), nullable=True)
secon_authorization = Column(String(20), nullable=True)
applied_proportion = Column(Numeric(7, 2), nullable=True)
is_certified_company = Column(String(1), nullable=True)
certified_company_registry = Column(String(40), nullable=True)
donation_auth_number = Column(String(50), nullable=True)
ctpat_svi = Column(String(100), nullable=True)
tax_registry_number = Column(String(40), nullable=True)
subassembly_service = Column(SmallInteger, nullable=True)
autse_dates = Column(Integer, nullable=True)
autse_number = Column(String(300), nullable=True)
# Relationship
client_provider = relationship("ClientProvider", back_populates="programs")