bmya/odoo-bmya-cl

View on GitHub
l10n_cl_financial_indicators/models/l10n_cl_financial_indicators.py

Summary

Maintainability
A
1 hr
Test Coverage
# -*- coding: utf-8 -*-
from openerp import models, fields, api
#from openerp.osv import fields as old_fields
from datetime import datetime, time
from dateutil.relativedelta import relativedelta
import logging
from openerp.tools.translate import _
import json
import openerp.addons.decimal_precision as dp

indicadores = {
    'SBIFUSD':['dolar', 'Dolares', 'sbif_usd', 'USD'],
    'SBIFEUR':['euro', 'Euros', 'sbif_eur', 'EUR'],
    'SBIFUF':['uf', 'UFs', 'sbif_uf', 'UF'],
    'SBIFUTM':['utm', 'UTMs', 'sbif_utm', 'UTM'],
}

_logger = logging.getLogger(__name__)

class l10n_cl_financial_indicators(models.Model):
    _inherit = "webservices.server"

    @api.multi
    def action_update_currency(self):
        self.ensure_one()
        _logger.info('nombre: %s' % self.name)
        _logger.info('url: %s' % self.url)
        a = self.generic_connection()
        _logger.info('Datos recibidos... status: %s' % a['status'])
        if a['status'] != 200:
            _logger.warning('no se pudo conectar: %s' % a['data'])
            return

        data_json = a['data']
        
        _logger.info('datos mostrados localmente... Fecha: %s, Valor: %s' %
            (data_json[indicadores[self.name][1]][0]['Fecha'],
             data_json[indicadores[self.name][1]][0]['Valor']))
        
        rate = float(
            data_json[indicadores[self.name][1]][0]['Valor'].replace(
                '.', '').replace(',', '.'))

        _logger.info('rate: %s' % str(rate))

        rate_name = fields.Datetime.to_string(datetime.utcnow().replace(
            hour=0, minute=0, second=0, microsecond=0))

        currency_id = self.env['res.currency'].search([(
                    'name', '=', indicadores[self.name][3])])

        if not currency_id:
            _logger.warning(
                'No esta cargada "%s" como moneda. No se actualiza.'
                % indicadores[self.name][1])
        else:
            _logger.info(
                'Actualizando la moneda "%s"' % indicadores[self.name][1])
            values = {
                'currency_id': currency_id.id,
                'rate': 1/rate,
                'name': rate_name
                }
            self.env['res.currency.rate'].create(values)
            _logger.info(
                'Se actualizó la moneda "%s".' % indicadores[self.name][1])
    
    '''
    Ejemplo de resultado bueno:
    Result: {u'UFs': [{u'Fecha': u'2016-01-16', u'Valor': u'25.629,09'}]}!
    Ejemplo de resultado malo:
    Result: {"CodigoHTTP": 404, "CodigoError": 81, "Mensaje": "El recurso correspondiente al dia actual aun no ha sido cargado" }!
    '''
 
    def currency_schedule_update(self):
        
        for indic in indicadores.iteritems():

            sbif_svr_data = self.env['webservices.server'].search(
                [('name', '=', indic[0])])

            # print 'uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu'
            # print sbif_svr_data.name
            _logger.info(
                'Iterando la moneda "%s" por proceso planificado'
                % indic[0])

            sbif_svr_data.action_update_currency()

        return True