From a4e89b4fb940b3b542a28ebe2ad344b36cf09ff3 Mon Sep 17 00:00:00 2001 From: docker-odoo Date: Mon, 9 Sep 2024 17:45:06 +0000 Subject: [PATCH] [FIX] l10n_uy_currency_update: Contemplamos pluralidad de posibles retornos del metodo _parse_bcu_data Ticket: 79770 --- l10n_uy_currency_update/models/res_company.py | 10 +++------- l10n_uy_currency_update/models/res_currency.py | 15 +++++++++++++-- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/l10n_uy_currency_update/models/res_company.py b/l10n_uy_currency_update/models/res_company.py index 1fc67f2f..62a0a7b5 100644 --- a/l10n_uy_currency_update/models/res_company.py +++ b/l10n_uy_currency_update/models/res_company.py @@ -73,26 +73,22 @@ def _parse_bcu_data(self, available_currencies): # code_currencies = [0] # Todas las monedas # code_currencies = {'item': [2224, 500, 501]} # Argentino, y Argentino Billete + #Siempre tomamos el today por el freeze que tenemos en res_currency today = fields.Date.context_today(self.with_context(tz='America/Montevideo')) - last_date = self.env.company.get_bcu_last_date() - yesterday = (today - relativedelta(days=1)) - + # NOTA: Esto fue necesario agregarlo porque sino me saltaba este error al correr actualizar moneda con proveedor # BCU: ""Su moneda principal (UYU) no es soportada por este servicio de tasas de cambio. Favor de elegir otro."" # Si logramos un mejora manera de definir esto mejor, porque estamos creando la tasa de moneda UYU todos los # dias con tasa 1, y no tiene sentido :( res = {'UYU': (1.0, today)} - if last_date != yesterday: - return False - response_data = [] try: _logger.log(25, "Connecting to BCU to update the currency rates for %s", available_currencies.mapped('name')) client = self._get_bcu_client('awsbcucotizaciones') factory = client.type_factory('ns0') - Entrada = factory.wsbcucotizacionesin(Moneda=code_currencies, FechaDesde=yesterday, FechaHasta=yesterday, Grupo=0) + Entrada = factory.wsbcucotizacionesin(Moneda=code_currencies, FechaDesde=today, FechaHasta=today, Grupo=0) response = client.service.Execute(Entrada) response_data = response.datoscotizaciones['datoscotizaciones.dato'] if response.respuestastatus.codigoerror: diff --git a/l10n_uy_currency_update/models/res_currency.py b/l10n_uy_currency_update/models/res_currency.py index 0c370ce5..071f1d6a 100644 --- a/l10n_uy_currency_update/models/res_currency.py +++ b/l10n_uy_currency_update/models/res_currency.py @@ -1,6 +1,8 @@ from odoo import _, fields, models from odoo.exceptions import UserError +from dateutil.relativedelta import relativedelta +from freezegun import freeze_time class ResCurrency(models.Model): @@ -9,9 +11,18 @@ class ResCurrency(models.Model): l10n_uy_bcu_code = fields.Integer('Código BCU', help='Este codigo idenfica cada moneda y permite extraer el valor de la tasa del Banco Central Uruguayo') def action_l10n_uy_get_bcu_rate(self): - rate, _date = self._l10n_uy_get_bcu_rate() + + today = fields.Date.context_today(self.with_context(tz='America/Montevideo')) last_date = self.env.company.get_bcu_last_date() - raise UserError(_('Fecha Ultimo Cierre') + ': %s' % last_date + '\n' + _('Rate:') + ' %s' % rate) + yesterday = (today - relativedelta(days=1)) + + with freeze_time(yesterday) as frozen: + #En caso de que el dia lunes queramos traer las cotizaciones del viernes movemos la fecha + if last_date != yesterday: + frozen.move_to(last_date) + + rate, _date = self._l10n_uy_get_bcu_rate() + raise UserError(_('Fecha Ultimo Cierre') + ': %s' % last_date + '\n' + _('Rate:') + ' %s' % rate) def _l10n_uy_get_bcu_rate(self): """ Return the date and rate for a given currency