Conjunto de cambios f093433 en seiven para economico


Ignorar:
Fecha y hora:
26/04/2017 11:32:28 (hace 7 años)
Autor:
elinares <elinares@…>
Branches:
master, carga
Children:
7ec3358
Parents:
8abcf1c
Mensaje:

Actualización del modelo PIB y archivos relacionados

Ubicación:
economico
Ficheros:
4 editados

Leyenda

No modificado
Añadido
Eliminado
  • economico/forms.py

    r8abcf1c rf093433  
    2525
    2626from base.constant import (
    27 <<<<<<< HEAD
    2827    DOMINIO_PRECIOS, DOMINIO_PIB, DOMINIO_AGREGADO_MONETARIO, TIPO_PIB, TIPO_DEMANDA_GLOBAL, TIPO_OFERTA_GLOBAL, TRIMESTRES, MESES,
    29     DOMINIO_COMERCIAL, DOMINIO_CAMBIO
    30 =======
    31     DOMINIO_PRECIOS, DOMINIO_PIB, DOMINIO_AGREGADO_MONETARIO, TIPO_PIB, TIPO_DEMANDA_GLOBAL, TRIMESTRES, MESES,
    3228    DOMINIO_COMERCIAL, DOMINIO_CAMBIO, DOMINIO_CUENTA_CAPITAL
    33 >>>>>>> 8ec1e940e97a174e635684a32f42258a345e81c7
    3429)
    3530from base.functions import cargar_anho_base
     
    333328
    334329@python_2_unicode_compatible
    335 class RealPIBForm(TipoForm, AnhoBaseForm, DominioForm, AnhoIniForm, AnhoFinForm):
    336     """!
    337     Clase que contiene el formulario para la carga de datos de precios
    338 
    339     @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
    340     @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    341     @date 19-09-2016
    342     @version 1.0.0
    343     """
    344 
    345     def __init__(self, *args, **kwargs):
    346         super(RealPIBForm, self).__init__(*args, **kwargs)
     330class PIBForm(TipoForm, AnhoBaseForm, DominioForm, AnhoIniForm, AnhoFinForm, TrimestreIniForm, TrimestreFinForm):
     331    """!
     332    Clase que contiene el formulario para la carga de datos de PIB
     333
     334    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     335    @author Edgar A. Linares (elinares at cenditel.gob.ve)
     336    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     337    @date 19-09-2016
     338    @date 05-04-2017
     339    @version 1.0.0
     340    """
     341
     342    def __init__(self, *args, **kwargs):
     343        super(PIBForm, self).__init__(*args, **kwargs)
    347344        self.fields['dominio'].choices = DOMINIO_PIB
    348345        self.fields['tipo'].choices = TIPO_PIB
  • economico/models.py

    re1fea74 rf093433  
    552552@python_2_unicode_compatible
    553553class PIB(models.Model):
    554     # Año base del registro
     554    """!
     555    Clase que contiene los registros comunes de los modelos relacionados con el Producto Interno Bruto
     556
     557    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     558    @author Edgar A. Linares (elinares at cenditel.gob.ve)
     559    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     560    @date 05-12-2016
     561    @date 05-04-2017
     562    @version 1.0.0
     563    """
     564
     565    ## Año base del registro
    555566    anho_base =  models.CharField(max_length=4, null=True)
    556567
     568    ## Año al que pertenece el(los) registro(s)
    557569    anho = models.CharField(max_length=4, verbose_name=_("Año"))
    558570
     571    ## Valor de los registros si son nominales, en caso contrario almacena False
    559572    nominal = models.DecimalField(
    560573        max_digits=18, decimal_places=2, default=None, null=True, blank=True, verbose_name=_("PIB Nominal")
     
    565578
    566579    def gestion_init(self, *args, **kwargs):
    567         fields = [
    568             [
    569                 {'tag': '', 'cabecera': True},
    570                 {'tag': str(PIBDemanda._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 4,'cabecera': True},
    571                 {'tag': str(PIBProduccion._meta.verbose_name), 'color': 'green', 'text_color': 'white', 'combine': 3, 'cabecera': True},
    572             ],
    573             [
    574                 {'tag': str(_('Año')), 'cabecera': True}
     580        """!
     581        Método que permite descargar un archivo con los datos a gestionar en base a los parámetros
     582        provenientes del template economico.pib.html
     583
     584        @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     585        @author Edgar A. Linares (elinares at cenditel.gob.ve)
     586        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     587        @date 05-12-2016
     588        @date 05-04-2017
     589        @param self <b>{object}</b> Objeto que instancia la clase
     590        @param args <b>{tupla}</b> Tupla con argumentos opcionales
     591        @param kwargs <b>{dic}</b> Diccionario con filtros opcionales
     592        @return Devuelve los datos a incluír en el archivo correspondiente
     593        """
     594
     595        """!
     596        Sección para la selección de los datos del dominio Enfoque Demanda y Enfoque Oferta
     597        tanto del tipo Real como Nominal
     598        """
     599        if any('pibdemanda' in index for index in kwargs) or any('pibproduccion' in index for index in kwargs):
     600            fields = [
     601                [
     602                    {'tag': '', 'cabecera': True}
     603                ],
     604                [
     605                    {'tag': str(_('Año')), 'cabecera': True}
     606                ]
    575607            ]
    576         ]
    577         exclude_fields = ['id', 'anho', 'pib_id', 'base']
    578         is_nominal, is_demanda, is_produccion = True, True, True
    579 
    580         if any('nominal' in index for index in kwargs):
    581             if kwargs['nominal__isnull'] == "true":
    582                 kwargs['nominal__isnull'] = True
     608            exclude_fields = ['id', 'anho', 'pib_id', 'base']
     609
     610            ## Comprobación del tipo de datos a cargar en el archivo
     611            if any('nominal' in index for index in kwargs):
     612                is_nominal = True
     613            else:
    583614                is_nominal = False
    584             else:
    585                 kwargs['nominal__isnull'] = False
    586 
    587 
    588         if is_nominal:
    589             fields[0].insert(1, {'tag': '', 'cabecera': True})
    590             fields[1].extend([{'tag': str(_("PIB Nominal")), 'cabecera': True}])
    591 
    592         demanda = [
    593             {'tag': str(PIBDemanda._meta.get_field('gasto_consumo').verbose_name), 'cabecera': True},
    594             {'tag': str(PIBDemanda._meta.get_field('formacion_capital').verbose_name), 'cabecera': True},
    595             {'tag': str(PIBDemanda._meta.get_field('exportacion_bienes').verbose_name), 'cabecera': True},
    596             {'tag': str(PIBDemanda._meta.get_field('importacion_bienes').verbose_name), 'cabecera': True}
    597         ]
    598 
    599         produccion = [
    600             {'tag': str(PIBProduccion._meta.get_field('valor_agregado').verbose_name), 'cabecera': True},
    601             {'tag': str(PIBProduccion._meta.get_field('impuesto_producto').verbose_name), 'cabecera': True},
    602             {'tag': str(PIBProduccion._meta.get_field('subvencion_productos').verbose_name), 'cabecera': True}
    603         ]
    604 
    605         if any('pibdemanda' in index for index in kwargs):
    606             kwargs['pibdemanda__isnull'] = False
    607             kwargs['pibproduccion__isnull'] = True
    608             fields[1].extend(demanda)
    609             is_produccion = False
    610         elif any('pibproduccion' in index for index in kwargs):
    611             kwargs['pibdemanda__isnull'] = True
    612             kwargs['pibproduccion__isnull'] = False
    613             fields[1].extend(produccion)
    614             is_demanda = False
     615
     616            ## Cabecera para el archivo del dominio Enfoque Demanda
     617            demanda = [
     618                {'tag': str(PIBDemanda._meta.get_field('gasto_consumo').verbose_name), 'cabecera': True},
     619                {'tag': str(PIBDemanda._meta.get_field('formacion_capital').verbose_name), 'cabecera': True},
     620                {'tag': str(PIBDemanda._meta.get_field('exportacion_bienes').verbose_name), 'cabecera': True},
     621                {'tag': str(PIBDemanda._meta.get_field('importacion_bienes').verbose_name), 'cabecera': True}
     622            ]
     623
     624            ## Cabecera para el archivo del dominio Enfoque Oferta
     625            produccion = [
     626                {'tag': str(PIBProduccion._meta.get_field('valor_agregado').verbose_name), 'cabecera': True},
     627                {'tag': str(PIBProduccion._meta.get_field('impuesto_producto').verbose_name), 'cabecera': True},
     628                {'tag': str(PIBProduccion._meta.get_field('subvencion_productos').verbose_name), 'cabecera': True}
     629            ]
     630            """!
     631            Se incluyen los registros en el archivo a descargar
     632            y el nombre del archivo correspondiente
     633            """
     634            if any('pibdemanda' in index for index in kwargs):
     635                fields[0].insert(1, {'tag': str(PIBDemanda._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 4,'cabecera': True})
     636                fields[1].extend(demanda)
     637                if is_nominal:
     638                    fields[0].insert(1, {'tag': '', 'cabecera': True})
     639                    fields[1].insert(1, {'tag': str(_("PIB Nominal")), 'cabecera': True})
     640                    nombre_archivo = 'PIB-Nominal_demanda'
     641                else:
     642                    nombre_archivo = 'PIB-Real_demanda'
     643            elif any('pibproduccion' in index for index in kwargs):
     644                fields[0].insert(1, {'tag': str(PIBProduccion._meta.verbose_name), 'color': 'green', 'text_color': 'white', 'combine': 3, 'cabecera': True})
     645                fields[1].extend(produccion)
     646                if is_nominal:                   
     647                    nombre_archivo = 'PIB-Nominal_produccion'
     648                else:
     649                    nombre_archivo = 'PIB-Real_produccion'
     650
     651        ## Sección para la selección de los datos del dominio Actividad Económica
     652        if any('pibactividad' in index for index in kwargs):
     653            fields = [
     654                [
     655                    {'tag': '', 'cabecera': True},
     656                    {'tag': '', 'cabecera': True},
     657                    {'tag': str(PIBActividad._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 18, 'cabecera': True}
     658                ],
     659                [
     660                    {'tag': str(_('Año')), 'cabecera': True},                   
     661                    {'tag': str(PIBActividad._meta.get_field('total_consolidado').verbose_name), 'color': 'indigo', 'text_color': 'white', 'cabecera': True},
     662                    {'tag': str(PIBActividad._meta.get_field('total_petrolera').verbose_name), 'color': 'green', 'text_color': 'white', 'cabecera': True},
     663                    {'tag': str(PIBActividad._meta.get_field('total_no_petrolera').verbose_name), 'color': 'ocean_blue', 'text_color': 'white', 'combine': 2, 'cabecera': True},
     664                    {'tag': str(PIBActividad._meta.get_field('mineria').verbose_name), 'color': 'gray25', 'text_color': 'white', 'cabecera': True},
     665                    {'tag': str(PIBActividad._meta.get_field('manufactura').verbose_name), 'cabecera': True},
     666                    {'tag': str(PIBActividad._meta.get_field('electricidad_agua').verbose_name), 'cabecera': True},
     667                    {'tag': str(PIBActividad._meta.get_field('construccion').verbose_name), 'cabecera': True},
     668                    {'tag': str(PIBActividad._meta.get_field('comercio_servicios').verbose_name), 'cabecera': True},
     669                    {'tag': str(PIBActividad._meta.get_field('transporte_almacenamiento').verbose_name), 'cabecera': True},
     670                    {'tag': str(PIBActividad._meta.get_field('comunicaciones').verbose_name), 'cabecera': True},
     671                    {'tag': str(PIBActividad._meta.get_field('instituciones_seguros').verbose_name), 'cabecera': True},
     672                    {'tag': str(PIBActividad._meta.get_field('servicios_alquiler').verbose_name), 'cabecera': True},
     673                    {'tag': str(PIBActividad._meta.get_field('servicios_comunitarios').verbose_name), 'cabecera': True},
     674                    {'tag': str(PIBActividad._meta.get_field('produccion_servicios').verbose_name), 'cabecera': True},
     675                    {'tag': str(PIBActividad._meta.get_field('resto').verbose_name), 'color': 'red', 'text': 'white', 'cabecera': True},
     676                    {'tag': str(PIBActividad._meta.get_field('sifmi').verbose_name), 'cabecera': True},
     677                    {'tag': str(PIBActividad._meta.get_field('neto_producto').verbose_name), 'color': 'aqua', 'text_color': 'black', 'cabecera': True}
     678                ]
     679            ]
     680            # Asigna el nombre del archivo a descargar
     681            nombre_archivo = 'PIB-Actividad_economica'
     682
     683        ## Sección para la selección de los datos del dominio Actividad Económica
     684        if any('pibsector' in index for index in kwargs):
     685            fields = [
     686                [
     687                    {'tag': '', 'cabecera': True},
     688                    {'tag': '', 'cabecera': True},
     689                    {'tag': str(PIBInstitucion._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 2, 'cabecera': True}
     690                ],
     691                [
     692                    {'tag': str(_('Año')), 'cabecera': True},                   
     693                    {'tag': str(PIBInstitucion._meta.get_field('publico').verbose_name), 'color': 'indigo', 'text_color': 'white', 'cabecera': True},
     694                    {'tag': str(PIBInstitucion._meta.get_field('privado').verbose_name), 'color': 'green', 'text_color': 'white', 'cabecera': True},
     695                ]
     696            ]
     697            # Asigna el nombre del archivo a descargar
     698            nombre_archivo = 'PIB-Institucional'
     699
     700        """!
     701        Verifica si se deben cargar los registros de trimestre, de ser afirmativo:
     702            Carga la cabecera de la columna
     703            Carga cada uno de los valores de las columnas año y trimestre en base
     704            a los parámetros del formulario
     705        En caso contrario
     706            Carga cada uno de los valores de la columna año
     707        """
     708        diff_anhos = int(kwargs['anho__lte']) - int(kwargs['anho__gte']) + 1       
     709        if any('trimestre' in index for index in kwargs):
     710            fields[1].insert(1, {'tag': str(PIBActividad._meta.get_field('trimestre').verbose_name), 'cabecera': True})
     711            # Almacena los datos de año y trimestre inicial provenientes del formulario
     712            anho_ini = int(kwargs['anho__gte'])
     713            trimestre_ini = int(kwargs['trimestre__gte'])
     714
     715            # Genera los años y trimestres correspondientes a los parámetros del formulario
     716            registros = []
     717            while True:
     718                registros = [({'tag': anho_ini})]
     719                registros.append({'tag': trimestre_ini})
     720                # Agrega los datos a la nueva fila del archivo a generar
     721                fields.append(registros)
     722                if (anho_ini == int(kwargs['anho__lte']) and trimestre_ini == int(kwargs['trimestre__lte'])):
     723                    break
     724                if (trimestre_ini == 4):
     725                    trimestre_ini = 0
     726                    anho_ini += 1
     727                trimestre_ini += 1
    615728        else:
    616             fields[1].extend(demanda)
    617             fields[1].extend(produccion)
    618 
    619         if 'anho_base' in kwargs:
    620             pib_base = {'anho_base': kwargs['anho_base']}
    621             kwargs.pop('anho_base')
    622         else:
    623             pib_base = {}
    624 
    625         for pib in PIB.objects.filter(Q(**kwargs) | Q(**pib_base)).order_by('anho'):
    626             # Registros por año
    627             registros = [{'tag': pib.anho}]
    628 
    629             if is_nominal:
    630                 registros.append({'tag': str(pib.nominal) if pib.nominal else str(0.0)})
    631 
    632             if is_demanda and pib.pibdemanda_set.all():
    633                 # Asigna los índices por demanda
    634                 dem = pib.pibdemanda_set.get()
    635                 for d in dem._meta.get_fields():
    636                     if not d.attname in exclude_fields:
    637                         registros.append({'tag': str(dem.__getattribute__(d.attname))})
    638 
    639             if is_produccion and pib.pibproduccion_set.all():
    640                 # Asigna los índices por oferta
    641                 prod = pib.pibproduccion_set.get()
    642                 for p in prod._meta.get_fields():
    643                     if not p.attname in exclude_fields:
    644                         registros.append({'tag': str(prod.__getattribute__(p.attname))})
    645 
    646             # Agrega los datos a la nueva fila del archivo a generar
    647             fields.append(registros)
    648 
    649         return {'fields': fields, 'output': 'pib'}
     729            # Almacena los años de los registros a descargar
     730            for i in range(diff_anhos):
     731                registros = [({'tag': int(kwargs['anho__gte']) + i})]
     732                # Agrega los datos a la nueva fila del archivo a generar
     733                fields.append(registros)
     734        ## Devuelve los datos correspondientes al archivo a descargar y el nombre de ese archivo
     735        return {'fields': fields, 'output': nombre_archivo}
    650736
    651737    def gestion_process(self, file, user, *args, **kwargs):
     738        """!
     739        Método que permite cargar y gestionar datos
     740
     741        @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     742        @author Edgar A. Linares (elinares at cenditel.gob.ve)
     743        @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     744        @date 05-12-2016
     745        @date 20-04-2017
     746        @param self <b>{object}</b> Objeto que instancia la clase
     747        @param file <b>{string}</b> Ruta y nombre del archivo a gestionar
     748        @param user <b>{object}</b> Objeto que contiene los datos del usuario que realiza la acción
     749        @param args <b>{tupla}</b> Tupla con argumentos opcionales
     750        @param kwargs <b>{dic}</b> Diccionario con filtros opcionales
     751        @return Devuelve el resultado de la acción con su correspondiente mensaje
     752        """
     753
    652754        load_file = pyexcel.get_sheet(file_name=file)
    653         anho_base, i, col_ini, errors, result, message, is_nominal = '', 0, 2, '', True, '', False
    654         is_demanda, is_produccion = True, True
     755        anho_base, i, col_ini, errors, result, message, is_nominal = '', 0, 2, '', False, '', False
     756        is_demanda, is_produccion, is_actividad, is_sector = False, False, False, False
    655757        load_data_msg = str(_("Datos Cargados"))
    656758
     759        """!
     760        Verifica cuál es el archivo que se está cargando en base a los parámetros provenientes
     761        del template economico.pib.html
     762        """
    657763        if any('nominal' in index for index in kwargs):
    658764            is_nominal = True
    659             if load_file.row[1][1] != str(_("PIB Nominal")):
    660                 result = False
    661 
    662765        if any('pibdemanda' in index for index in kwargs):
    663             is_produccion =  False
    664         if any('pibproduccion' in index for index in kwargs):
    665             is_demanda = False
    666 
     766            is_demanda = True
     767        elif any('pibproduccion' in index for index in kwargs):
     768            is_produccion = True
     769        elif any('pibactividad' in index for index in kwargs):
     770            is_actividad = True
     771        elif any('pibsector' in index for index in kwargs):
     772            is_sector = True
     773
     774        ## Valida que el archivo corresponde a lo indicado en los parámetros del formulario
     775        if is_demanda:
     776            if is_nominal and (load_file.row[1][1] == str(_("PIB Nominal"))):
     777                result = True
     778            elif load_file.row[1][1] == str(PIBDemanda._meta.get_field('gasto_consumo').verbose_name):
     779                result = True
     780        elif is_produccion:
     781            if load_file.row[1][1] == str(PIBProduccion._meta.get_field('valor_agregado').verbose_name):
     782                    result = True
     783        elif is_actividad:
     784            if load_file.row[1][2] == str(PIBActividad._meta.get_field('total_consolidado').verbose_name):
     785                result = True
     786        elif is_sector:
     787            if load_file.row[1][2] == str(PIBInstitucion._meta.get_field('publico').verbose_name):
     788                result = True
     789        ## Si el archivo no pasa las validaciones, devuelve False y un mensaje indicando el problema
    667790        if not result:
    668791            return {
     
    671794            }
    672795
     796       
     797        ## En base al archivo cargado, se validan y cargan a la base de datos los valores contenidos en el archivo
    673798        for row in load_file.row[2:]:
    674799            try:
    675800                # Asigna el año base del registro
    676                 anho_b = anho_base = row[0] if i == 0 else anho_base
     801                anho_b = int(kwargs['anho_base'])
    677802
    678803                # Posición inicial desde la cual se van a comenzar a registrar los datos en los modelos asociados
     
    682807                base = True if i == 0 else False
    683808
    684                 nominal = row[1] if is_nominal else None
     809                # Almacena el valor en caso de tratarse del archivo PIB-Nominal_demanda o False en caso contrario
     810                nominal = row[1] if (is_nominal and is_demanda) else None
    685811
    686812                # Gestión para los datos básicos de pib
    687813                real_pib, created = PIB.objects.update_or_create(anho=anho, anho_base=anho_b, nominal=nominal)
    688814
    689                 defaults_demanda = {
    690                     'base': base,
    691                     'gasto_consumo': check_val_data(row[2] if is_nominal else row[1]),
    692                     'formacion_capital': check_val_data(row[3] if is_nominal else row[2]),
    693                     'exportacion_bienes': check_val_data(row[4] if is_nominal else row[3]),
    694                     'importacion_bienes': check_val_data(row[5] if is_nominal else row[4])
    695                 }
    696 
    697815                if is_demanda:
    698816                    # Gestión de datos para el Índice por Demanda
    699                     PIBDemanda.objects.update_or_create(pib=real_pib, defaults=defaults_demanda)
    700                 else:
     817                    PIBDemanda.objects.update_or_create(pib=real_pib, defaults={
     818                        'base': base,
     819                        'gasto_consumo': check_val_data(row[2] if is_nominal else row[1]),
     820                        'formacion_capital': check_val_data(row[3] if is_nominal else row[2]),
     821                        'exportacion_bienes': check_val_data(row[4] if is_nominal else row[3]),
     822                        'importacion_bienes': check_val_data(row[5] if is_nominal else row[4])
     823                    })
     824                elif is_produccion:
    701825                    # Gestión de datos para el Índice por Producción
    702826                    PIBProduccion.objects.update_or_create(pib=real_pib, defaults={
    703827                        'base': base,
    704                         'valor_agregado': check_val_data(row[2] if is_nominal else row[1]),
    705                         'impuesto_producto': check_val_data(row[3] if is_nominal else row[2]),
    706                         'subvencion_productos': check_val_data(row[4] if is_nominal else row[3]),
     828                        'valor_agregado': check_val_data(row[1]),
     829                        'impuesto_producto': check_val_data(row[2]),
     830                        'subvencion_productos': check_val_data(row[3]),
    707831                    })
    708                     continue
    709 
    710                 if is_produccion:
    711                     # Gestión de datos para el Índice por Producción
    712                     PIBProduccion.objects.update_or_create(pib=real_pib, defaults={
     832                elif is_actividad:
     833                    # Gestión de datos para el ïndice por Actividad Económica
     834                    PIBActividad.objects.update_or_create(pib=real_pib, defaults={
    713835                        'base': base,
    714                         'valor_agregado': check_val_data(row[6] if is_nominal else row[5]),
    715                         'impuesto_producto': check_val_data(row[7] if is_nominal else row[6]),
    716                         'subvencion_productos': check_val_data(row[8] if is_nominal else row[7]),
     836                        'trimestre': check_val_data(row[1]),
     837                        'total_consolidado': check_val_data(row[2]),
     838                        'total_petrolera': check_val_data(row[3]),
     839                        'total_no_petrolera': check_val_data(row[4]),
     840                        'mineria': check_val_data(row[5]),
     841                        'manufactura': check_val_data(row[6]),
     842                        'electricidad_agua': check_val_data(row[7]),
     843                        'construccion': check_val_data(row[8]),
     844                        'comercio_servicios': check_val_data(row[9]),
     845                        'transporte_almacenamiento': check_val_data(row[10]),
     846                        'comunicaciones': check_val_data(row[11]),
     847                        'instituciones_seguros': check_val_data(row[12]),
     848                        'servicios_alquiler': check_val_data(row[13]),
     849                        'servicios_comunitarios': check_val_data(row[14]),
     850                        'produccion_servicios': check_val_data(row[15]),
     851                        'resto': check_val_data(row[16]),
     852                        'sifmi': check_val_data(row[17]),
     853                        'neto_producto': check_val_data(row[18])
    717854                    })
    718                 else:
    719                     # Gestión de datos para el Índice por Demanda
    720                     PIBDemanda.objects.update_or_create(pib=real_pib, defaults=defaults_demanda)
    721                     continue
     855                elif is_sector:
     856                    # Gestión de datos para el Índice por Sector Institucional
     857                    PIBInstitucion.objects.update_or_create(pib=real_pib, defaults={
     858                        'base': base,
     859                        'trimestre': check_val_data(row[1]),
     860                        'publico': check_val_data(row[2]),
     861                        'privado': check_val_data(row[3])
     862                        })
    722863
    723864            except Exception as e:
     
    740881@python_2_unicode_compatible
    741882class PIBDemanda(models.Model):
     883    """!
     884    Clase que contiene los registros del PIB correspondientes al dominio Enfoque Demanda tanto
     885    del tipo Real como Nominal
     886
     887    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     888    @author Edgar A. Linares (elinares at cenditel.gob.ve)
     889    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     890    @date 05-12-2016
     891    @date 05-04-2017
     892    @version 1.0.0
     893    """
     894
    742895    gasto_consumo = models.DecimalField(
    743896        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Gasto de consumo final")
     
    766919@python_2_unicode_compatible
    767920class PIBProduccion(models.Model):
     921    """!
     922    Clase que contiene los registros del PIB correspondientes al dominio Enfoque Oferta tanto
     923    del tipo Real como Nominal
     924   
     925    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     926    @author Edgar A. Linares (elinares at cenditel.gob.ve)
     927    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     928    @date 05-12-2016
     929    @date 05-04-2017
     930    @version 1.0.0
     931    """
     932
    768933    valor_agregado = models.DecimalField(
    769934        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Valor agregado a precios básicos")
     
    788953@python_2_unicode_compatible
    789954class PIBActividad(models.Model):
     955    """!
     956    Clase que contiene los registros del PIB correspondientes al dominio Actividad Económica
     957   
     958    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     959    @author Edgar A. Linares (elinares at cenditel.gob.ve)
     960    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     961    @date 05-12-2016
     962    @date 05-04-2017
     963    @version 1.0.0
     964    """
     965
    790966    trimestre = models.CharField(max_length=1, null=True, blank=True, verbose_name=_('Trimestre'))
    791967
     
    8751051        super(PIBActividad, self).save(*args, **kwargs)
    8761052
     1053@python_2_unicode_compatible
     1054class PIBInstitucion(models.Model):
     1055    """!
     1056    Clase que contiene los registros del PIB correspondientes al dominio Sector Institucional
     1057   
     1058    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     1059    @author Edgar A. Linares (elinares at cenditel.gob.ve)
     1060    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     1061    @date 05-12-2016
     1062    @date 05-04-2017
     1063    @version 1.0.0
     1064    """
     1065   
     1066    trimestre = models.CharField(max_length=1, null=True, blank=True, verbose_name=_('Trimestre'))
     1067
     1068    publico = models.DecimalField(
     1069        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Publico")
     1070    )
     1071
     1072    privado = models.DecimalField(
     1073        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Privado")
     1074    )
     1075
     1076    base = models.BooleanField(default=False, verbose_name=_("Indicador base"))
     1077
     1078    pib = models.ForeignKey(PIB, verbose_name=_('Producto Interno Bruto'))
     1079
     1080    class Meta:
     1081        verbose_name = _('PIB sobre las Instituciones')
    8771082
    8781083#-----------------------------Económico Real - Demanda Global
  • economico/templates/economico.pib.html

    r8ad3344 rf093433  
    4343                </div>
    4444            </div>
    45             <div class="row separador-row">
    46                 <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xs-offset-2 col-sm-offset-2 col-md-offset-2 col-lg-offset-2">
    47                     <label class="control-label">{% trans 'Período' %}</label>
    48                 </div>
    49                 <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1">
    50                     <label for="{{ form.periodo_anho_ini.auto_id }}" class="control-label">{{ form.periodo_anho_ini.label }}</label>
    51                 </div>
    52                 <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2">
    53                     {{ form.periodo_anho_ini }}
    54                 </div>
    55                 <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1">
    56                     <label for="{{ form.periodo_anho_fin.auto_id }}" class="control-label">{{ form.periodo_anho_fin.label }}</label>
    57                 </div>
    58                 <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2">
    59                     {{ form.periodo_anho_fin }}
    60                 </div>
    61             </div>
    62             {% include 'base.down.up.files.html' with app='economico' mod='PIB' %}
     45            <!--Modificado el 05-04-2017 Edgar Linares -->
     46            <hr>
     47            <div id ="periodos" style='display:none;'>
     48                <div class="row separador-row">
     49                    <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xs-offset-4 col-sm-offset-4 col-md-offset-4 col-lg-offset-4">                       
     50                    </div>
     51                    <div id ="trimestral1" style='display:none;' class="col-xs-2 col-sm-2 col-md-2 col-lg-2">
     52                        <label class="control-label">{% trans 'Trimestral' %}</label>
     53                    </div>
     54                    <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2">
     55                        <label class="control-label">{% trans 'Año' %}</label>
     56                    </div>
     57                </div>
     58                <div class="row separador-row">
     59                    <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xs-offset-2 col-sm-offset-2 col-md-offset-2 col-lg-offset-2">
     60                        <label class="control-label">{% trans 'Período' %}</label>
     61                    </div>
     62                    <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2">
     63                        <label class="control-label">{{ form.periodo_trimestre_ini.label }}</label>
     64                    </div>
     65                    <div id ="trimestral2" style='display:none;' class="col-xs-2 col-sm-2 col-md-2 col-lg-2">{{ form.periodo_trimestre_ini }}</div>
     66                    <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2">{{ form.periodo_anho_ini }}</div>
     67                </div>
     68                <div class="row separador-row">
     69                    <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xs-offset-4 col-sm-offset-4 col-md-offset-4 col-lg-offset-4">
     70                        <label class="control-label">{{ form.periodo_trimestre_fin.label }}</label>
     71                    </div>
     72                    <div id ="trimestral3" style='display:none;' class="col-xs-2 col-sm-2 col-md-2 col-lg-2">{{ form.periodo_trimestre_fin }}</div>
     73                    <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2">{{ form.periodo_anho_fin }}</div>
     74                </div>
     75            </div>
     76            <!-- -->
     77            <div id="enlaces" style='display:none;'>
     78                {% include 'base.down.up.files.html' with app='economico' mod='PIB' %}
     79            </div>
    6380        </div>
    6481    </div>
    6582{% endblock %}
    6683{% block extra_footer %}
    67     <script>
    68         var tipo = $("#{{ form.tipo.auto_id }}"), dominio = $("#{{ form.dominio.auto_id }}"),
    69             anho_base = $("#{{ form.anho_base.auto_id }}"), anho_ini = $("#{{ form.periodo_anho_ini.auto_id }}"),
    70             anho_fin = $("#{{ form.periodo_anho_fin.auto_id }}");
    71 
     84    <script>       
     85        var tipo = $("#{{ form.tipo.auto_id }}");
     86        var dominio = $("#{{ form.dominio.auto_id }}");
     87        var anho_base = $("#{{ form.anho_base.auto_id }}");
     88        var anho_ini = $("#{{ form.periodo_anho_ini.auto_id }}");
     89        var anho_fin = $("#{{ form.periodo_anho_fin.auto_id }}");
     90        var trimestre_ini = $("#{{ form.periodo_trimestre_ini.auto_id }}");
     91        var trimestre_fin = $("#{{ form.periodo_trimestre_fin.auto_id }}");
     92        var select_dominio = $('#id_dominio');
     93        var options_dominio = select_dominio.html();
     94        var tipo_ant = "";
    7295
    7396        function set_filters() {
     97            /**
     98            * @brief Realiza cambios en la vista ocasionados por modificaciones
     99            * en los formularios. Almacena los valores de los parámetros que serán usados
     100            * en el modelo
     101            *
     102            * @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
     103            * @author Edgar A. Linares (elinares at cenditel.gob.ve)
     104            * @copyright GNU/GPLv2
     105            * @date 05-04-2017
     106            */
    74107            var filters = $("#filters"), json_filter = '';
    75108
    76             if (tipo.val()) {
     109            if (tipo.val()) {               
    77110                if (tipo.val() == 'R') {
    78                     json_filter += "\"nominal__isnull\": \"true\",";
     111                    json_filter += "\"real__isnull\": \"false\",";
     112                    if (tipo_ant != tipo.val())
     113                        select_dominio.html(options_dominio);
    79114                }
    80115                else {
    81116                    json_filter += "\"nominal__isnull\": \"false\",";
     117                    if (tipo_ant != tipo.val()){
     118                        $("#id_dominio option[value='AE']").remove();
     119                        $("#id_dominio option[value='SI']").remove();
     120                    }
    82121                }
    83122            }
     
    89128                    json_filter += "\"pibproduccion__isnull\": \"false\",";
    90129                }
     130                // Modificado el 06-04-2017 por Edgar A. Linares
     131                else if (dominio.val() == 'AE') {
     132                    json_filter += "\"pibactividad__isnull\": \"false\",";
     133                }
     134                else if (dominio.val() == 'SI') {
     135                    json_filter += "\"pibsector__isnull\": \"false\",";
     136                }
     137            }
     138            if (tipo.val() == 'R' && (dominio.val() == 'AE' || dominio.val() == 'SI')) {
     139                document.getElementById("periodos").style.display = 'block';
     140                document.getElementById("trimestral1").style.display = 'block';
     141                document.getElementById("trimestral2").style.display = 'block';
     142                document.getElementById("trimestral3").style.display = 'block';
     143            }
     144            else if (tipo.val() && dominio.val()) {
     145                document.getElementById("periodos").style.display = 'block';
     146                document.getElementById("trimestral1").style.display = 'none';
     147                document.getElementById("trimestral2").style.display = 'none';
     148                document.getElementById("trimestral3").style.display = 'none';
     149            }
     150            else {
     151                document.getElementById("periodos").style.display = 'none';
     152                document.getElementById("trimestral1").style.display = 'none';
     153                document.getElementById("trimestral2").style.display = 'none';
     154                document.getElementById("trimestral3").style.display = 'none';
     155            }
     156            if (dominio.val() && anho_ini.val() && anho_fin.val()){
     157                if ( (dominio.val() == 'ED' || dominio.val() == 'EO') &&
     158                     anho_fin.val() >= anho_ini.val() ) {
     159                    document.getElementById("enlaces").style.display = 'block';
     160                }
     161                else if ( (dominio.val() == 'AE' || dominio.val() == 'SI') &&
     162                        (anho_fin.val() >= anho_ini.val()) &&
     163                        trimestre_ini.val() && trimestre_fin.val() ) {
     164                    if ( (anho_fin.val() == anho_ini.val()) &&
     165                        (trimestre_fin.val() >= trimestre_ini.val()) )
     166                        document.getElementById("enlaces").style.display = 'block';
     167                    else if (anho_fin.val() > anho_ini.val())
     168                        document.getElementById("enlaces").style.display = 'block';
     169                    else
     170                        document.getElementById("enlaces").style.display = 'none';
     171                }
     172                else {
     173                    document.getElementById("enlaces").style.display = 'none';
     174               }
    91175            }
    92176            if (anho_base.val()) {
     
    99183                json_filter += "\"anho__lte\": \"" + anho_fin.val() + "\",";
    100184            }
    101 
     185            if (trimestre_ini.val()) {
     186                json_filter += "\"trimestre__gte\": \"" + trimestre_ini.val() + "\",";
     187            }
     188            if (trimestre_fin.val()) {
     189                json_filter += "\"trimestre__lte\": \"" + trimestre_fin.val() + "\",";
     190            }
     191            tipo_ant = tipo.val();
    102192            if (json_filter) {
    103193                json_filter = json_filter.slice(0, -1);
     
    112202            anho_ini.on('change', function() { set_filters() });
    113203            anho_fin.on('change', function() { set_filters() });
     204            trimestre_ini.on('change', function() { set_filters() });
     205            trimestre_fin.on('change', function() { set_filters() });
    114206        });
    115207    </script>
  • economico/views.py

    r8abcf1c rf093433  
    2121
    2222from .forms import (
    23     RealPreciosForm, RealPIBForm, RealDemandaGlobalForm, RealOfertaGlobalForm, MonetarioAgregadosForm, MonetarioOperacionesInterbancariasForm,
     23    RealPreciosForm, PIBForm, RealDemandaGlobalForm, RealOfertaGlobalForm, MonetarioAgregadosForm, MonetarioOperacionesInterbancariasForm,
    2424    MonetarioTasasInteresForm, MonetarioInstrumentoPoliticaForm, ExternoBalanzaComercialForm, ExternoReservaCambioForm,
    2525    ExternoCuentaCapitalForm, FiscalForm, CapitalForm
     
    6565
    6666    @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve)
    67     @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
    68     @date 19-09-2016
     67    @author Edgar A. Linares (elinares at cenditel.gob.ve)
     68    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     69    @date 19-09-2016
     70    @date 05-04-2017
    6971    @param request <b>{object}</b> Objeto que obtiene la petición
    7072    @return Devuelve el response con el formulario de datos para el registro de PIB
    7173    """
    72     form = RealPIBForm()
     74    form = PIBForm()
    7375
    7476    return render(request, 'economico.pib.html', {
Nota: Vea TracChangeset para ayuda en el uso del visor de conjuntos de cambios.