from models.sienge.services_models import * from models.sg_tray_models.services_model import TrayOrderRootResponse from appIC2Builder import SystemConfig from api.tray import ApiTray from db.banco import ConfigTenant from pydantic import ValidationError import redis class ClienteService: def __init__(self, config : SystemConfig, redis_client : redis.Redis): self.config = config self.api_tray = ApiTray(redis_client=redis_client, system_config=config) def _mapper_tray_to_sienge_cliente(self, pedido : TrayOrderRootResponse, config_tenant: ConfigTenant) -> PostCustomerSienge: enderecos : list[Addresses] = [] try: for endereco in pedido.Order.Customer.CustomerAddresses: enderecos.append(Addresses( cityId = None, city = endereco.CustomerAddress.city, state = endereco.CustomerAddress.state, neighborhood = endereco.CustomerAddress.neighborhood, number = endereco.CustomerAddress.number, complement = endereco.CustomerAddress.complement, streetName = endereco.CustomerAddress.address, zipCode = endereco.CustomerAddress.zip_code, type = 'C' if endereco.CustomerAddress.description == "Comercial" else 'R' )) except ValidationError as e: print(f"Erro ao mapear endereços: {e}",flush=True) raise e try: telefones = [Phones( type = "CE", number = pedido.Order.Customer.cellphone, main = True )] except ValidationError as e: print(f"Erro ao mapear telefones: {e}",flush=True) raise e try: if pedido.Order.Customer.cpf is not None and pedido.Order.Customer.cpf != "": cliente = PostCustomerSienge( addresses = enderecos, phones = telefones, naturalPersonData = NaturalPersonData( name = pedido.Order.Customer.name, cpf = pedido.Order.Customer.cpf, email = pedido.Order.Customer.email, birthDate = pedido.Order.Customer.birth_date, sex = 'M' if pedido.Order.Customer.gender == "0" else 'F', numberIdentityCard=pedido.Order.Customer.rg ) ) elif pedido.Order.Customer.cnpj is not None and pedido.Order.Customer.cnpj != "": cliente = PostCustomerSienge( addresses = enderecos, phones = telefones, legalPersonData = LegalPersonData( name = pedido.Order.Customer.company_name, email = pedido.Order.Customer.email, cnpj = pedido.Order.Customer.cnpj, stateRegistrationNumber = pedido.Order.Customer.state_inscription ) ) else: raise ValueError("Cliente sem CPF ou CNPJ") return { "config": { "subdominio": "s8psasistemas", #config_tenant.tenant if not config_tenant.oauth else None, "usuario" : config_tenant.usuario_sienge, "senha" : config_tenant.token_sienge, "tenant" : config_tenant.tenant if config_tenant.oauth else None, "cliente" : config_tenant.tenant }, "cliente": cliente.model_dump() } except ValidationError as e: print(f"Erro ao mapear cliente: {e}",flush=True) raise e