- Fecha y hora:
- 14/12/2016 15:13:24 (hace 7 años)
- Branches:
- master, carga
- Children:
- 4df042e
- Parents:
- 3ccd153
- Ubicación:
- economico
- Ficheros:
-
- 3 editados
Leyenda
- No modificado
- Añadido
- Eliminado
-
economico/models.py
r3ccd153 r8ad3344 61 61 unique_together = ("anho", "mes") 62 62 63 def gestion_init(self, *args, **kwargs): #ciudad=None, anho_base=None, mes_ini=None, mes_fin=None, anho_ini=None, anho_fin=None63 def gestion_init(self, *args, **kwargs): 64 64 """! 65 65 Método que permite descargar un archivo con los datos a gestionar … … 345 345 346 346 except Exception as e: 347 errors = errors +"- %s\n" % str(e)347 errors += "- %s\n" % str(e) 348 348 349 349 i += 1 … … 351 351 if errors: 352 352 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")) 354 354 355 355 … … 546 546 class Meta: 547 547 verbose_name = _("Índice de Productos Controlados y no Controlados") 548 549 550 # ------------ Económico Real - PIB -------------------- 551 @python_2_unicode_compatible 552 class 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 740 class 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 766 class 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 788 class 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 60 60 </div> 61 61 </div> 62 {% include 'base.down.up.files.html' %}62 {% include 'base.down.up.files.html' with app='economico' mod='PIB' %} 63 63 </div> 64 64 </div> 65 65 {% 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 72 72 form = RealPIBForm() 73 73 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 }) 75 77 76 78
Nota: Vea TracChangeset
para ayuda en el uso del visor de conjuntos de cambios.