innovar_amr_tray_controller/src/services/cliente.py

85 lines
No EOL
4 KiB
Python

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