Factura electrónica paraguaya - Capturando departamentos, distritos y ciudades

27 de mayo de 2024 por
Gustavo Orrillo
| Sin comentarios aún
 

El API de FacturaSend utiliza para autenticarse el método de Bearer Token. Tanto el Bearer Token como el Tenant ID lo establecemos en la compañía (en el caso del conector de Biller para Uruguay lo hacemos en el diario de ventas). Son decisiones de diseño.

Con la librería requests dicha autenticación la hacemos de la siguiente manera:

import requests
headers = {
"Content-Type": "application/json",
"Authorization": "Bearer api_key_MI_API_KEY"
}

Establecemos un diccionario con el API Key provista por FacturaSend. 

Bien, ahora tenemos que capturar los departamentos (similar a provincias), distritos (similar a nuestros partidos) y ciudades (no necesita introducción). Para capturar esta información FacturaSend brinda un webservice con la siguiente sintaxis

# Obtiene los departamentos
curl \
GET "https://api.facturasend.com.py/<tenantId>/departamentos" \
-H "Authorization: Bearer api_key_<hdiweuw-92jwwle...>"

Lo cual llega el momento de utilizar requests, toma la siguiente sintaxis. Primero capturamos los departamentos y luego los procesamos. Este es un extracto del código que lo hace para los departamentos:

headers = {
"Content-Type": "application/json",
"Authorization": "Bearer api_key_%s"%(self.bearer_token),
}
facturasend_url = self.env['ir.config_parameter'].get_param('facturasend_url')
if facturasend_url:
if not facturasend_url.endswith('/'):
facturasend_url = facturasend_url + '/%s/departamentos'%(self.tenant_id)
else:
facturasend_url = facturasend_url + '%s/departamentos'%(self.tenant_id)
else:
raise ValidationError('No está definida la URL de FacturaSend')
response = requests.get(facturasend_url,headers=headers)
if response.status_code == 200:
​ res = response.json()
result = res.get('result')
for depto in result:
vals = {
'set_code': depto.get('codigo',''),
'code': depto.get('codigo',''),
'name': depto.get('descripcion','N/A'),
'country_id': self.env.ref('base.py').id,
}
state_id = self.env['res.country.state'].search([('set_code','=',depto.get('codigo')),('country_id','=',self.env.ref('base.py').id)])
if not state_id:
return_id = self.env['res.country.state'].create(vals)

Como pueden ver, nos autenticamos primero y luego obtenemos la lista de departamentos. Luego iteramos departamento por departamento e insertamos el departamento si el mismo no se encuentra disponible


Luego, departamento por departamento capturamos los distritos


Para finalmente capturar las ciudades


Los mantendremos al tanto con los avances de este trabajo.

Gustavo Orrillo 27 de mayo de 2024
Compartir
Archivar
Identificarse dejar un comentario