Conjunto de cambios 8ad3344 en seiven para economico


Ignorar:
Fecha y hora:
14/12/2016 15:13:24 (hace 7 años)
Autor:
Ing. Roldan D. Vargas G <rvargas@…>
Branches:
master, carga
Children:
4df042e
Parents:
3ccd153
Mensaje:

gestión de datos para producto interno bruto

Ubicación:
economico
Ficheros:
3 editados

Leyenda

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

    r3ccd153 r8ad3344  
    6161        unique_together = ("anho", "mes")
    6262
    63     def gestion_init(self, *args, **kwargs): #ciudad=None, anho_base=None, mes_ini=None, mes_fin=None, anho_ini=None, anho_fin=None
     63    def gestion_init(self, *args, **kwargs):
    6464        """!
    6565        Método que permite descargar un archivo con los datos a gestionar
     
    345345
    346346            except Exception as e:
    347                 errors = errors + "- %s\n" % str(e)
     347                errors += "- %s\n" % str(e)
    348348
    349349            i += 1
     
    351351        if errors:
    352352            message = str(_("Error procesando datos. Verifique su correo para detalles del error"))
    353             load_data_msg = str(_("Error al procesar datos"))
     353            load_data_msg = str(_("Error al procesar datos del área Económica - Real"))
    354354
    355355
     
    546546    class Meta:
    547547        verbose_name = _("Índice de Productos Controlados y no Controlados")
     548
     549
     550# ------------ Económico Real - PIB --------------------
     551@python_2_unicode_compatible
     552class PIB(models.Model):
     553    # Año base del registro
     554    anho_base =  models.CharField(max_length=4, null=True)
     555
     556    anho = models.CharField(max_length=4, verbose_name=_("Año"))
     557
     558    nominal = models.DecimalField(
     559        max_digits=18, decimal_places=2, default=None, null=True, blank=True, verbose_name=_("PIB Nominal")
     560    )
     561
     562    class Meta:
     563        verbose_name = _('Producto Interno Bruto (PIB)')
     564
     565    def gestion_init(self, *args, **kwargs):
     566        fields = [
     567            [
     568                {'tag': '', 'cabecera': True},
     569                {'tag': str(PIBDemanda._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 4,'cabecera': True},
     570                {'tag': str(PIBProduccion._meta.verbose_name), 'color': 'green', 'text_color': 'white', 'combine': 3, 'cabecera': True},
     571            ],
     572            [
     573                {'tag': str(_('Año')), 'cabecera': True}
     574            ]
     575        ]
     576        exclude_fields = ['id', 'anho', 'pib_id', 'base']
     577        is_nominal, is_demanda, is_produccion = True, True, True
     578
     579        if any('nominal' in index for index in kwargs):
     580            if kwargs['nominal__isnull'] == "true":
     581                kwargs['nominal__isnull'] = True
     582                is_nominal = False
     583            else:
     584                kwargs['nominal__isnull'] = False
     585
     586
     587        if is_nominal:
     588            fields[0].insert(1, {'tag': '', 'cabecera': True})
     589            fields[1].extend([{'tag': str(_("PIB Nominal")), 'cabecera': True}])
     590
     591        demanda = [
     592            {'tag': str(PIBDemanda._meta.get_field('gasto_consumo').verbose_name), 'cabecera': True},
     593            {'tag': str(PIBDemanda._meta.get_field('formacion_capital').verbose_name), 'cabecera': True},
     594            {'tag': str(PIBDemanda._meta.get_field('exportacion_bienes').verbose_name), 'cabecera': True},
     595            {'tag': str(PIBDemanda._meta.get_field('importacion_bienes').verbose_name), 'cabecera': True}
     596        ]
     597
     598        produccion = [
     599            {'tag': str(PIBProduccion._meta.get_field('valor_agregado').verbose_name), 'cabecera': True},
     600            {'tag': str(PIBProduccion._meta.get_field('impuesto_producto').verbose_name), 'cabecera': True},
     601            {'tag': str(PIBProduccion._meta.get_field('subvencion_productos').verbose_name), 'cabecera': True}
     602        ]
     603
     604        if any('pibdemanda' in index for index in kwargs):
     605            kwargs['pibdemanda__isnull'] = False
     606            kwargs['pibproduccion__isnull'] = True
     607            fields[1].extend(demanda)
     608            is_produccion = False
     609        elif any('pibproduccion' in index for index in kwargs):
     610            kwargs['pibdemanda__isnull'] = True
     611            kwargs['pibproduccion__isnull'] = False
     612            fields[1].extend(produccion)
     613            is_demanda = False
     614        else:
     615            fields[1].extend(demanda)
     616            fields[1].extend(produccion)
     617
     618        if 'anho_base' in kwargs:
     619            pib_base = {'anho_base': kwargs['anho_base']}
     620            kwargs.pop('anho_base')
     621        else:
     622            pib_base = {}
     623
     624        for pib in PIB.objects.filter(Q(**kwargs) | Q(**pib_base)).order_by('anho'):
     625            # Registros por año
     626            registros = [{'tag': pib.anho}]
     627
     628            if is_nominal:
     629                registros.append({'tag': str(pib.nominal) if pib.nominal else str(0.0)})
     630
     631            if is_demanda and pib.pibdemanda_set.all():
     632                # Asigna los índices por demanda
     633                dem = pib.pibdemanda_set.get()
     634                for d in dem._meta.get_fields():
     635                    if not d.attname in exclude_fields:
     636                        registros.append({'tag': str(dem.__getattribute__(d.attname))})
     637
     638            if is_produccion and pib.pibproduccion_set.all():
     639                # Asigna los índices por oferta
     640                prod = pib.pibproduccion_set.get()
     641                for p in prod._meta.get_fields():
     642                    if not p.attname in exclude_fields:
     643                        registros.append({'tag': str(prod.__getattribute__(p.attname))})
     644
     645            # Agrega los datos a la nueva fila del archivo a generar
     646            fields.append(registros)
     647
     648        return {'fields': fields, 'output': 'pib'}
     649
     650    def gestion_process(self, file, user, *args, **kwargs):
     651        load_file = pyexcel.get_sheet(file_name=file)
     652        anho_base, i, col_ini, errors, result, message, is_nominal = '', 0, 2, '', True, '', False
     653        is_demanda, is_produccion = True, True
     654        load_data_msg = str(_("Datos Cargados"))
     655
     656        if any('nominal' in index for index in kwargs):
     657            is_nominal = True
     658            if load_file.row[1][1] != str(_("PIB Nominal")):
     659                result = False
     660
     661        if any('pibdemanda' in index for index in kwargs):
     662            is_produccion =  False
     663        if any('pibproduccion' in index for index in kwargs):
     664            is_demanda = False
     665
     666        if not result:
     667            return {
     668                'result': False,
     669                'message': str(_("El documento a cargar no es válido o no corresponde a los parámetros seleccionados"))
     670            }
     671
     672        for row in load_file.row[2:]:
     673            try:
     674                # Asigna el año base del registro
     675                anho_b = anho_base = row[0] if i == 0 else anho_base
     676
     677                # Posición inicial desde la cual se van a comenzar a registrar los datos en los modelos asociados
     678                anho = row[0]
     679
     680                # Condición que indica si el registro corresponde al año base
     681                base = True if i == 0 else False
     682
     683                nominal = row[1] if is_nominal else None
     684
     685                # Gestión para los datos básicos de pib
     686                real_pib, created = PIB.objects.update_or_create(anho=anho, anho_base=anho_b, nominal=nominal)
     687
     688                defaults_demanda = {
     689                    'base': base,
     690                    'gasto_consumo': check_val_data(row[2] if is_nominal else row[1]),
     691                    'formacion_capital': check_val_data(row[3] if is_nominal else row[2]),
     692                    'exportacion_bienes': check_val_data(row[4] if is_nominal else row[3]),
     693                    'importacion_bienes': check_val_data(row[5] if is_nominal else row[4])
     694                }
     695
     696                if is_demanda:
     697                    # Gestión de datos para el Índice por Demanda
     698                    PIBDemanda.objects.update_or_create(pib=real_pib, defaults=defaults_demanda)
     699                else:
     700                    # Gestión de datos para el Índice por Producción
     701                    PIBProduccion.objects.update_or_create(pib=real_pib, defaults={
     702                        'base': base,
     703                        'valor_agregado': check_val_data(row[2] if is_nominal else row[1]),
     704                        'impuesto_producto': check_val_data(row[3] if is_nominal else row[2]),
     705                        'subvencion_productos': check_val_data(row[4] if is_nominal else row[3]),
     706                    })
     707                    continue
     708
     709                if is_produccion:
     710                    # Gestión de datos para el Índice por Producción
     711                    PIBProduccion.objects.update_or_create(pib=real_pib, defaults={
     712                        'base': base,
     713                        'valor_agregado': check_val_data(row[6] if is_nominal else row[5]),
     714                        'impuesto_producto': check_val_data(row[7] if is_nominal else row[6]),
     715                        'subvencion_productos': check_val_data(row[8] if is_nominal else row[7]),
     716                    })
     717                else:
     718                    # Gestión de datos para el Índice por Demanda
     719                    PIBDemanda.objects.update_or_create(pib=real_pib, defaults=defaults_demanda)
     720                    continue
     721
     722            except Exception as e:
     723                errors += "- %s\n" % str(e)
     724            i += 1
     725
     726        if errors:
     727            message = str(_("Error procesando datos. Verifique su correo para detalles del error"))
     728            load_data_msg = str(_("Error al procesar datos del área Económica - PIB"))
     729
     730        ## Envia correo electronico al usuario indicando el estatus de la carga de datos
     731        enviar_correo(user.email, 'gestion.informacion.load.mail', EMAIL_SUBJECT_LOAD_DATA, {
     732            'load_data_msg': load_data_msg, 'administrador': administrador, 'admin_email': admin_email,
     733            'errors': errors
     734        })
     735
     736        return {'result': result, 'message': message}
     737
     738
     739@python_2_unicode_compatible
     740class PIBDemanda(models.Model):
     741    gasto_consumo = models.DecimalField(
     742        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Gasto de consumo final")
     743    )
     744
     745    formacion_capital = models.DecimalField(
     746        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Formación Bruta de Capital")
     747    )
     748
     749    exportacion_bienes = models.DecimalField(
     750        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Exportación de bienes y servicios")
     751    )
     752
     753    importacion_bienes = models.DecimalField(
     754        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Menos importaciones de bienes y servicios")
     755    )
     756
     757    base = models.BooleanField(default=False, verbose_name=_("Indicador base"))
     758
     759    pib = models.ForeignKey(PIB, verbose_name=_('Producto Interno Bruto'))
     760
     761    class Meta:
     762        verbose_name = _('PIB sobre demanda')
     763
     764
     765@python_2_unicode_compatible
     766class PIBProduccion(models.Model):
     767    valor_agregado = models.DecimalField(
     768        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Valor agregado a precios básicos")
     769    )
     770
     771    impuesto_producto = models.DecimalField(
     772        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Impuestos sobre los productos")
     773    )
     774
     775    subvencion_productos = models.DecimalField(
     776        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Subvenciones sobre los productos")
     777    )
     778
     779    base = models.BooleanField(default=False, verbose_name=_("Indicador base"))
     780
     781    pib = models.ForeignKey(PIB, verbose_name=_('Producto Interno Bruto'))
     782
     783    class Meta:
     784        verbose_name = _('PIB sobre oferta')
     785
     786
     787@python_2_unicode_compatible
     788class PIBActividad(models.Model):
     789    trimestre = models.CharField(max_length=1, null=True, blank=True, verbose_name=_('Trimestre'))
     790
     791    total_consolidado = models.DecimalField(
     792        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("PIB Consolidado")
     793    )
     794
     795    total_petrolera = models.DecimalField(
     796        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Actividad Petrolera")
     797    )
     798
     799    total_no_petrolera = models.DecimalField(
     800        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Actividad No Petrolera")
     801    )
     802
     803    mineria = models.DecimalField(
     804        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Mineria")
     805    )
     806
     807    manufactura = models.DecimalField(
     808        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Manufactura")
     809    )
     810
     811    electricidad_agua = models.DecimalField(
     812        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Electricidad y Agua")
     813    )
     814
     815    construccion = models.DecimalField(
     816        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Construcción")
     817    )
     818
     819    comercio_servicios = models.DecimalField(
     820        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Comercio y Servicios de Reparación")
     821    )
     822
     823    transporte_almacenamiento = models.DecimalField(
     824        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Transporte y almacenamiento")
     825    )
     826
     827    comunicaciones = models.DecimalField(
     828        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Comunicaciones")
     829    )
     830
     831    instituciones_seguros = models.DecimalField(
     832        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Instituciones Financieras y Seguros")
     833    )
     834
     835    servicios_alquiler = models.DecimalField(
     836        max_digits=18, decimal_places=2, default=0.0,
     837        verbose_name=_("Servicios Inmobiliarios Empresariales y de Alquiler")
     838    )
     839
     840    servicios_comunitarios = models.DecimalField(
     841        max_digits=18, decimal_places=2, default=0.0,
     842        verbose_name=_("Serv. Comunitarios, Soc. Y Personales y Produc. de serv. Priv. no Lucrativos")
     843    )
     844
     845    produccion_servicios = models.DecimalField(
     846        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Producción servicios del Gobierno General")
     847    )
     848
     849    resto = models.DecimalField(
     850        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Resto")
     851    )
     852
     853    sifmi = models.DecimalField(
     854        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Menos Sifmi")
     855    )
     856
     857    neto_producto = models.DecimalField(
     858        max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Neto Sobre los Productos")
     859    )
     860
     861    base = models.BooleanField(default=False, verbose_name=_("Indicador base"))
     862
     863    pib = models.ForeignKey(PIB, verbose_name=_('Producto Interno Bruto'))
     864
     865    class Meta:
     866        verbose_name = _('PIB sobre la Actividad')
     867
     868    def save(self, *args, **kwargs):
     869        self.total_no_petrolera = self.mineria + self.manufactura + self.electricidad_agua + self.construccion + \
     870                                  self.comercio_servicios + self.transporte_almacenamiento + self.comunicaciones + \
     871                                  self.instituciones_seguros + self.servicios_alquiler + self.servicios_comunitarios + \
     872                                  self.produccion_servicios + self.resto + self.sifmi + self.neto_producto
     873        self.total_consolidado = self.total_petrolera + self.total_no_petrolera
     874        super(PIBActividad, self).save(*args, **kwargs)
  • economico/templates/economico.pib.html

    r38b751d r8ad3344  
    6060                </div>
    6161            </div>
    62             {% include 'base.down.up.files.html' %}
     62            {% include 'base.down.up.files.html' with app='economico' mod='PIB' %}
    6363        </div>
    6464    </div>
    6565{% endblock %}
     66{% 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
     72
     73        function set_filters() {
     74            var filters = $("#filters"), json_filter = '';
     75
     76            if (tipo.val()) {
     77                if (tipo.val() == 'R') {
     78                    json_filter += "\"nominal__isnull\": \"true\",";
     79                }
     80                else {
     81                    json_filter += "\"nominal__isnull\": \"false\",";
     82                }
     83            }
     84            if (dominio.val()) {
     85                if (dominio.val() == 'ED') {
     86                    json_filter += "\"pibdemanda__isnull\": \"false\",";
     87                }
     88                else if (dominio.val() == 'EO') {
     89                    json_filter += "\"pibproduccion__isnull\": \"false\",";
     90                }
     91            }
     92            if (anho_base.val()) {
     93                json_filter += "\"anho_base\": \"" + anho_base.val() + "\",";
     94            }
     95            if (anho_ini.val()) {
     96                json_filter += "\"anho__gte\": \"" + anho_ini.val() + "\",";
     97            }
     98            if (anho_fin.val()) {
     99                json_filter += "\"anho__lte\": \"" + anho_fin.val() + "\",";
     100            }
     101
     102            if (json_filter) {
     103                json_filter = json_filter.slice(0, -1);
     104                filters.val(json_filter);
     105            }
     106        }
     107
     108        $(document).ready(function() {
     109            tipo.on('change', function() { set_filters() });
     110            dominio.on('change', function() { set_filters() });
     111            anho_base.on('change', function() { set_filters() });
     112            anho_ini.on('change', function() { set_filters() });
     113            anho_fin.on('change', function() { set_filters() });
     114        });
     115    </script>
     116{% endblock %}
  • economico/views.py

    ref6d66a r8ad3344  
    7272    form = RealPIBForm()
    7373
    74     return render(request, 'economico.pib.html', {'form': form})
     74    return render(request, 'economico.pib.html', {
     75        'form': form, 'url_down': reverse('descargar_archivo'), 'url_up': reverse('cargar_archivo')
     76    })
    7577
    7678
Nota: Vea TracChangeset para ayuda en el uso del visor de conjuntos de cambios.