Como actualizar el valor del dolar BNA en Odoo

22 de junio de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Muchas empresas en Argentina necesitan actualizar el valor del dolar con el valor del Banco Nación (se les viene el mundo abajo si toman la cotización de AFIP, anda a saber porque), y necesitan que esto sea automático. Lamentablemente el BNA (lo mismo sucede en Uruguay, así que tampoco podemos poner el grito en el cielo) no provee un webservice para ello pero por suerte su página es sencilla que se puede analizar con BeautifulSoup.


si examinamos su HTML es

<tbody>
<tr>
<td class="tit">Dolar U.S.A</td>
<td>141,0000</td>
<td>149,0000</td>
</tr>
<tr>
<td class="tit">Euro</td>
<td>141,0000</td>
<td>149,0000</td>
</tr>
<tr>
<td class="tit">Real *</td>
<td>2520,0000</td>
<td>2920,0000</td>
</tr>
</tbody>

Para ello desarrollamos un módulo llamado odoo_dolarbna. El mismo se instala como cualquier módulo, y solo requiere dos configuraciones. La primer configuración es crear una acción planificada para el objeto res.currency (Moneda) que invoque el método model.update_dolarbna(). Por otra parte se debe agregar un parámetro llamado dolar_bna con el valor de la página del Banco Nación Argentina

Notas técnicas


Este módulo se basa en el uso de la librería BeautifulSoup. Esta permite analizar los contenidos de una página de internet (es la librería favorita para hacer web-crawling). Nosotros lo que hacemos es por medio de la librería requests (otro día hablaremos de ella) procesamos la página de BNA,


page = requests.get(dolarbna_url)


Para luego trabajar con el ID billetes de la página


soup = BeautifulSoup(page.content, "html.parser")
results = soup.find(id="billetes")


Luego tomamos el valor de la segunda columna de la primer fila. De ahí extraemos la directiva TD y convertimos el valor a float


tds = results.find_all("td",class_=False)
if len(tds) < 2:
​raise ValidationError('No se puede determinar el dolar BNA #1')
value = tds[1].text
value = value.replace('<td>','')
value = value.replace('</td>','')
value = float(value.replace(',','.'))


Por último, se busca la moneda USD en Odoo y el tipo de cambio para el día de la fecha. Si el tipo de cambio no existe, se procede a crearlo.

Hay varias mejoras que podemos hacerle, por ejemplo crear la acción planificada durante la instalación y realizar la búsqueda de la moneda USD por medio de referencias... pero eso para más tarde.

Gustavo Orrillo 22 de junio de 2023
Compartir
Archivar
Identificarse dejar un comentario