El día de ayer un cliente me pidió capturar en forma automática el listado de grandes contribuyentes de AFIP (el que indica cuando una empresa debe facturar con facturas de crédito o no).
Filoquin (se llama Martín y su apellido es desconocido para mí) lo hizo posible. Me pasó una URL
https://servicioscf.afip.gob.ar/FCEServicioConsulta/api/fceconsulta.aspx/getGrandesEmpresas
que da como respuesta una lista con diccionarios que tiene el CUIT de los grandes contribuyentes. Esa URL y la librería requests me permitieron desarrollar un script que actualiza los contactos y le agrega el tag "Gran contribuyente". Veamos como es el script
#!/usr/bin/python3
from xmlrpc import client
import requests
url = 'http://127.0.0.1:8069'
common = client.ServerProxy('{}/xmlrpc/2/common'.format(url))
res = common.version()
dbname = 'dbname'
user = 'admin'
pwd = 'admin-pwd'
uid = common.authenticate(dbname, user, pwd, {})
models = client.ServerProxy('{}/xmlrpc/2/object'.format(url))
res = requests.get('https://servicioscf.afip.gob.ar/FCEServicioConsulta/api/fceconsulta.aspx/getGrandesEmpresas')
result = res.content.decode('UTF-8')
cadena = result[:result.find(']')+1]
lista = eval(cadena)
for item in lista:
cuit = item.get('Cuit')
print(cuit)
partner_ids = models.execute_kw(dbname,uid,pwd,'res.partner',
'search',[[['vat','=',str(cuit)]]])
if partner_ids:
for partner_id in partner_ids:
vals = {
'category_id': [(6,0,[2])]
}
return_id = models.execute_kw(dbname,uid,pwd,'res.partner',
'write',[[partner_id],vals])
print(return_id)
Como pueden ver, el script primero captura el listado de grandes contribuyentes y los convierte en una lista de Python
res = requests.get('https://servicioscf.afip.gob.ar/FCEServicioConsulta/api/fceconsulta.aspx/getGrandesEmpresas')
result = res.content.decode('UTF-8')
cadena = result[:result.find(']')+1]
lista = eval(cadena)
Y luego recorre los elementos de la lista, buscando los partners que coinciden con el CUIT informado
for item in lista:
cuit = item.get('Cuit')
print(cuit)
partner_ids = models.execute_kw(dbname,uid,pwd,'res.partner',
'search',[[['vat','=',str(cuit)]]])
if partner_ids:
Y si encuentra el CUIT, le reemplaza los tags del contacto con la etiqueta "Gran contribuyente" (que tiene ID 2)
vals = {
'category_id': [(6,0,[2])]
}
return_id = models.execute_kw(dbname,uid,pwd,'res.partner',
write',[[partner_id],vals])
print(return_id)
Lo cual brinda un resultado como el siguiente:
No es un script que sea precisamente una best-practice, pero les da una idea de que se puede hacer con la información del listado de grandes contribuyentes
De vuelta, gracias Filoquin por el dato