Conjunto eb828eb en seiven
- Fecha y hora:
- 21/08/2017 12:03:26 (hace 7 años)
- Branches:
- master
- Children:
- 59a11e4
- Parents:
- 71c82f7 (diferencia), e39619b (diferencia)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent. - Ficheros:
-
- 3 editados
Leyenda
- No modificado
- Añadido
- Eliminado
-
base/templates/base.template.html
r595c7b5 r35822b1 26 26 <!-- seccion para el contenido del sistema --> 27 27 <section class="content" style="padding:auto 0;"> 28 {% for message in messages %} 29 {% if message %} 30 <div class="row"> 31 <div class="col-md-12 box-half-center"> 32 <div class="alert alert-warning"> 33 <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button> 34 <strong>{% trans 'Alerta' %}!</strong> {{ message }} 35 </div> 36 </div> 37 </div> 38 {% endif %} 39 {% endfor %} 28 40 <div class="row"> 29 41 {% if request.user.is_authenticated %} -
economico/models.py
r64cb313 re39619b 27 27 ) 28 28 from base.functions import enviar_correo, check_val_data 29 from base.models import AnhoBase 29 30 30 31 import pyexcel … … 43 44 class Precios(models.Model): 44 45 ## Año base del registro 45 anho_base = models. CharField(max_length=4, null=True)46 anho_base = models.ForeignKey(AnhoBase, null=True) 46 47 47 48 ## Año al que pertenece el(los) registro(s) … … 59 60 ## Registro del mes y año 60 61 fecha = models.DateField(null=True, verbose_name=_("Fecha")) 61 62 class Meta:63 unique_together = ("anho", "mes")64 62 65 63 def gestion_init(self, *args, **kwargs): … … 68 66 69 67 @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) 68 @author Ing. Luis Barrios (lbarrios at cenditel.gob.ve) 70 69 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 71 70 @date 05-12-2016 71 @date 09-08-2017 72 72 @param self <b>{object}</b> Objeto que instancia la clase 73 73 @param args <b>{tupla}</b> Tupla con argumentos opcionales … … 90 90 [ 91 91 {'tag': str(_('Año')), 'cabecera': True}, {'tag': str(_('Mes')), 'cabecera': True}, {'tag': str(_('INPC')), 'cabecera': True}, 92 92 93 {'tag': str(_('(1) Alimentos y Bebidas no Alcoholicas')), 'cabecera': True}, 93 94 {'tag': str(_('(2) Bebidas Alcoholicas y Tabaco')), 'cabecera': True}, … … 103 104 {'tag': str(_('(12) Restaurant y Hotel')), 'cabecera': True}, 104 105 {'tag': str(_('(13) Bienes y Servicios Diversos')), 'cabecera': True}, 106 105 107 {'tag': str(_('Bienes durables')), 'cabecera': True}, 106 108 {'tag': str(_('Bienes semidurables')), 'cabecera': True}, 107 109 {'tag': str(_('Bienes no durables')), 'cabecera': True}, 110 108 111 {'tag': str(_('Bienes')), 'cabecera': True}, 109 112 {'tag': str(_('Agrícolas')), 'cabecera': True}, … … 111 114 {'tag': str(_('Agroindustrial')), 'cabecera': True}, 112 115 {'tag': str(_('Otros manufacturados')), 'cabecera': True}, 116 113 117 {'tag': str(_('Total Servicios')), 'cabecera': True}, 114 118 {'tag': str(_('Servicios Básicos')), 'cabecera': True}, 115 119 {'tag': str(_('Otros Servicios')), 'cabecera': True}, 120 116 121 {'tag': str(_('Núcleo Inflacionario (NI)')), 'cabecera': True}, 117 122 {'tag': str(_('Alimentos Elaborados')), 'cabecera': True}, … … 119 124 {'tag': str(_('Bienes industriales excepto alimentos y textiles')), 'cabecera': True}, 120 125 {'tag': str(_('Servicios no administrados')), 'cabecera': True}, 126 121 127 {'tag': str(_('Controlados')), 'cabecera': True}, 122 128 {'tag': str(_('No Controlados')), 'cabecera': True} … … 127 133 dominio, data_type = str(_('INPC')), 'N' 128 134 129 # Condición para filtrar y mostrar la información según la selección del usuario135 ## Condición para filtrar y mostrar la información según la selección del usuario 130 136 if 'dominio' in kwargs: 131 137 if kwargs['dominio'] == 'N': 132 138 kwargs['dominio'] = None 133 139 kwargs['ciudad'] = kwargs.pop('dominio') 140 lst=['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'] 141 x = int (kwargs['fecha__month__lte']) - int (kwargs['fecha__month__gte']) + 1 + 12 * (int(kwargs['fecha__year__lte']) - int(kwargs['fecha__year__gte'])) 142 for i, val in enumerate(lst): 143 if lst[int(kwargs['fecha__month__gte'])-1] in val: 144 desired = list( islice( cycle( lst), i, i+x)) 145 tmp=0 146 lolo=int (kwargs['fecha__year__gte']) 147 aux=1 148 for a in desired: 149 aux1='' 150 if a == 'Diciembre': 151 aux1=lolo+tmp 152 tmp=tmp+1 153 else: 154 aux1=lolo+tmp 155 aux=aux+1 156 fields.append([ {'tag': str(_(str(aux1))),'cabecera': True}, {'tag': str(_(str(a))),'cabecera': True}]) 157 134 158 else: 135 159 dominio, data_type = str(_('Ciudad')), 'C' 136 160 kwargs['ciudad__in'] = kwargs.pop('dominio') 137 161 kwargs['ciudad__in'] = [d for d in DOMINIO[1:][0]] 138 # Agrega la columna correspondiente a las ciudades162 ## Agrega la columna correspondiente a las ciudades 139 163 fields[0].insert(2, {'tag': '', 'cabecera': True}) 140 fields[1].insert(2, {'tag': dominio, 'cabecera': True}) 141 142 elif not 'dominio' in kwargs or not kwargs['dominio'] == 'C': 143 exclude_fields.append('ciudad') 144 145 if 'anho_base' in kwargs: 146 precios_base = {'anho': kwargs['anho_base']} 147 if 'ciudad__in' in kwargs: 148 precios_base.update({'ciudad__in': kwargs['ciudad__in']}) 149 else: 150 precios_base = {} 151 152 ## Estrae los registros asociados a descargar en archivo 153 for p in Precios.objects.filter(Q(**kwargs) | Q(**precios_base)): 154 mes = str(_("Enero")) 155 for m in CONVERT_MES: 156 if CONVERT_MES[m] == p.mes: 157 mes = str(m) 158 159 # Registros de Año y Mes 160 registros = [{'tag': p.anho}, {'tag': mes}] 161 162 # Registros por ciudad si es solicitado 163 if data_type == 'C': 164 for d in DOMINIO[1:]: 165 if d[0] == p.ciudad: 166 registros.append({'tag': str(d[1])}) 167 168 # Índice Nacional de Precios al Consumidor 169 registros.append({'tag': str(p.inpc)}) 170 171 #Asigna los índices por grupo 172 grp = p.preciosgrupo_set.get() 173 for g in grp._meta.get_fields(): 174 if not g.attname in exclude_fields: 175 registros.append({'tag': str(grp.__getattribute__(g.attname))}) 176 177 # Asigna los indices por sector de origen 178 sec = p.preciossector_set.get() 179 for s in sec._meta.get_fields(): 180 if not s.attname in exclude_fields: 181 registros.append({'tag': str(sec.__getattribute__(s.attname))}) 182 183 # Asigna los indices por naturaleza y durabilidad 184 nat = p.preciosnaturaleza_set.get() 185 for n in nat._meta.get_fields(): 186 if not n.attname in exclude_fields: 187 registros.append({'tag': str(nat.__getattribute__(n.attname))}) 188 189 # Asigna los ínidces por servicio 190 ser = p.preciosservicios_set.get() 191 for sv in ser._meta.get_fields(): 192 if not sv.attname in exclude_fields: 193 registros.append({'tag': str(ser.__getattribute__(sv.attname))}) 194 195 # Asigna los ínidces por núcleo inflacionario 196 inf = p.preciosinflacionario_set.get() 197 for ni in inf._meta.get_fields(): 198 if not ni.attname in exclude_fields: 199 registros.append({'tag': str(inf.__getattribute__(ni.attname))}) 200 201 202 # Asigna los ínidces por productos controlados y no controlados 203 prd = p.preciosproductos_set.get() 204 for pr in prd._meta.get_fields(): 205 if not pr.attname in exclude_fields: 206 registros.append({'tag': str(prd.__getattribute__(pr.attname))}) 207 208 # Agrega los datos a la nueva fila del archivo a generar 209 fields.append(registros) 164 fields[1].insert(2, {'tag': dominio, 'cabecera': True, 'row':2}) 165 166 lst=['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'] 167 lst1=['Caracas','Maracay','Ciudad Guayana','Barcelona - Pto la Cruz','Valencia','Barquisimeto','Maracaibo','Mérida','Maturín','San Cristóbal','Resto Nacional'] 168 169 x = int (kwargs['fecha__month__lte']) - int (kwargs['fecha__month__gte']) + 1 + 12 * (int(kwargs['fecha__year__lte']) - int(kwargs['fecha__year__gte'])) 170 for i, val in enumerate(lst): 171 if lst[int(kwargs['fecha__month__gte'])-1] in val: 172 desired = list( islice( cycle( lst), i, i+x)) 173 tmp=0 174 lolo=int (kwargs['fecha__year__gte']) 175 aux,aux2=1,0 176 for a in desired: 177 aux1='' 178 if a == 'Diciembre': 179 aux1=lolo+tmp 180 tmp=tmp+1 181 else: 182 aux1=lolo+tmp 183 aux=aux+1 184 for q in range(0,11): 185 if lst1[q] == 'Caracas': 186 fields.append([ {'tag': str(_(str(aux1))),'combine_row':11 ,'cabecera': True, 'row':0}, {'tag': str(_(str(a))), 'combine_row':11,'cabecera': True,'row':1},{'tag': str(_(str(lst1[q]))),'cabecera': True}]) 187 else: 188 fields.append([{'tag':''},{'tag':''},{'tag': str(_(str(lst1[q]))),'cabecera': True}]) 210 189 211 190 return {'fields': fields, 'output': 'precios'} … … 216 195 217 196 @author Ing. Roldan Vargas (rvargas at cenditel.gob.ve) 197 @author Ing. Luis Barrios (lbarrios at cenditel.gob.ve) 218 198 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 219 199 @date 05-12-2016 200 @date 09-08-2017 220 201 @param self <b>{object}</b> Objeto que instancia la clase 221 202 @param file <b>{string}</b> Ruta y nombre del archivo a gestionar … … 226 207 """ 227 208 load_file = pyexcel.get_book(bookdict=kwargs['file_content'])[0] 228 anho_base, i, col_ini, errors, result, message = '', 0, 2, '', True, ''209 anho_base, i, col_ini, errors, result, message = self.anho_base, 0, 2, '', True, '' 229 210 load_data_msg = str(_("Datos Cargados")) 230 211 231 if 'dominio' in kwargs: 232 if (kwargs['dominio'] == 'C' and load_file.row[1][2] == 'INPC') or (kwargs['dominio'] == 'N' and load_file.row[1][2] != 'INPC'): 233 result = False 234 if 'anho_base' in kwargs and kwargs['anho_base'] != load_file.row[2][0]: 235 result = False 236 if not result: 237 return {'result': False, 'message': str(_("El documento a cargar no es válido o no corresponde a los parámetros seleccionados"))} 212 self.anho_base=AnhoBase.objects.get(id=kwargs['anho_base']) 238 213 239 214 for row in load_file.row[2:]: 240 215 try: 241 # Asigna el año base del registro 242 anho_b = anho_base = row[0] if i == 0 else anho_base 243 244 # Asigna el año de la fila que se esta procesando 245 anho = row[0] 246 247 # Asigna el número de mes 248 mes = [CONVERT_MES[m] for m in CONVERT_MES if m.find(row[1]) >= 0][0] 249 250 # Asigna la ciudad si el dominio no es nacional 251 ciudad = row[2] if 'dominio' in kwargs and kwargs['dominio'] == 'C' else None 252 253 # Asigna el INPC total para el año base 216 ## Asigna el año de la fila que se esta procesando 217 if row[0]!= '': 218 anho = row[0] 219 220 ## Asigna el número de mes 221 if row[1]!= '': 222 mes = CONVERT_MES[row[1]] 223 224 ## Condición que indica si el registro corresponde al año base 225 base = True if i == 0 else False 226 227 ## Asigna la ciudad si el dominio no es nacional 228 ciudad = CONVERT_DOMINIO[row[2]] if 'dominio' in kwargs and kwargs['dominio'] == 'C' else None 229 230 ## Asigna el INPC total para el año base 254 231 inpc = row[3] if ciudad else row[2] 255 232 256 # Condición que indica si el registro corresponde al año base 257 base = True if i == 0 else False 258 259 # Registro de año y mes para los filtros 233 ## Registro de año y mes para los filtros 260 234 fecha = datetime(int(anho), int(mes), 1) 261 235 262 # Condiciones para filtrar la información a cargar según las especificaciones del usuario 263 if 'anho_base' in kwargs and kwargs['anho_base'] != load_file.row[2][0]: 264 continue 265 if 'fecha__month__gte' in kwargs and 'fecha__month__lte' in kwargs and kwargs[ 266 'fecha__month__lte'] < mes < kwargs['fecha__month__gte']: 267 continue 268 elif 'fecha__month__gte' in kwargs and mes < kwargs['fecha__month__gte']: 269 continue 270 elif 'fecha__month__lte' in kwargs and mes > kwargs['fecha__month__lte']: 271 continue 272 if 'fecha__year__gte' in kwargs and 'fecha__year__lte' in kwargs and kwargs[ 273 'fecha__year__lte'] < anho < kwargs['fecha__year__gte']: 274 continue 275 elif 'fecha__year__gte' in kwargs and anho < kwargs['fecha__year__gte']: 276 continue 277 elif 'fecha__year__lte' in kwargs and anho > kwargs['fecha__year__lte']: 278 continue 279 280 # Gestión para los datos básicos de precios 236 ## Gestión para los datos básicos de precios 281 237 real_p, created = Precios.objects.update_or_create( 282 238 anho=anho, mes=mes, ciudad=ciudad, fecha=fecha, 283 defaults={ 'anho_base': anho_b, 'inpc': inpc }239 defaults={ 'anho_base': self.anho_base, 'inpc': inpc } 284 240 ) 285 241 286 287 # Gestión de datos para el Índice por Grupos 242 ## Gestión de datos para el Índice por Grupos 288 243 PreciosGrupo.objects.update_or_create(real_precios=real_p, defaults={ 289 244 'base': base, … … 303 258 }) 304 259 305 # Gestión de datos para el Índice por Sector de Origen260 ## Gestión de datos para el Índice por Sector de Origen 306 261 PreciosSector.objects.update_or_create(real_precios=real_p, defaults={ 307 262 'base': base, … … 311 266 }) 312 267 313 # Gestión de datos para el Índice por Naturaleza y Durabilidad268 ## Gestión de datos para el Índice por Naturaleza y Durabilidad 314 269 PreciosNaturaleza.objects.update_or_create(real_precios=real_p, defaults={ 315 270 'base': base, … … 321 276 }) 322 277 323 # Gestión de datos para el Índice por Servicios278 ## Gestión de datos para el Índice por Servicios 324 279 PreciosServicios.objects.update_or_create(real_precios=real_p, defaults={ 325 280 'base': base, … … 329 284 }) 330 285 331 # Gestion de datos para el Índice por Núcleo Inflacionario286 ## Gestion de datos para el Índice por Núcleo Inflacionario 332 287 PreciosInflacionario.objects.update_or_create(real_precios=real_p, defaults={ 333 288 'base': base, … … 339 294 }) 340 295 341 # Gestión de datos para el Índice de Productos Controlados y No Controlados296 ## Gestión de datos para el Índice de Productos Controlados y No Controlados 342 297 PreciosProductos.objects.update_or_create(real_precios=real_p, defaults={ 343 298 'base': base, … … 412 367 ) 413 368 414 re taurant_hotel = models.DecimalField(369 restaurant_hotel = models.DecimalField( 415 370 max_digits=18, decimal_places=2, default=0.0, verbose_name=_("(12) Restaurant y Hotel") 416 371 ) … … 565 520 566 521 ## Año base del registro 567 anho_base = models.CharField(max_length=4, null=True)522 anho_base = models.ForeignKey(AnhoBase, null=True) 568 523 569 524 ## Año al que pertenece el(los) registro(s) 570 525 anho = models.CharField(max_length=4, verbose_name=_("Año")) 526 527 ## Número del trimestre al que pertenece el registro 528 trimestre = models.CharField(max_length=1, null=True, blank=True, verbose_name=_('Trimestre')) 571 529 572 530 ## Valor de los registros si son nominales, en caso contrario almacena False … … 656 614 {'tag': '', 'cabecera': True}, 657 615 {'tag': '', 'cabecera': True}, 658 {'tag': str(PIBActividad._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 1 8, 'cabecera': True}616 {'tag': str(PIBActividad._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 17, 'cabecera': True} 659 617 ], 660 618 [ … … 662 620 {'tag': str(PIBActividad._meta.get_field('total_consolidado').verbose_name), 'color': 'indigo', 'text_color': 'white', 'cabecera': True}, 663 621 {'tag': str(PIBActividad._meta.get_field('total_petrolera').verbose_name), 'color': 'green', 'text_color': 'white', 'cabecera': True}, 664 {'tag': str(PIBActividad._meta.get_field('total_no_petrolera').verbose_name), 'color': 'ocean_blue', 'text_color': 'white', 'c ombine': 2, 'cabecera': True},622 {'tag': str(PIBActividad._meta.get_field('total_no_petrolera').verbose_name), 'color': 'ocean_blue', 'text_color': 'white', 'cabecera': True}, 665 623 {'tag': str(PIBActividad._meta.get_field('mineria').verbose_name), 'color': 'gray25', 'text_color': 'white', 'cabecera': True}, 666 624 {'tag': str(PIBActividad._meta.get_field('manufactura').verbose_name), 'cabecera': True}, … … 679 637 ] 680 638 ] 681 # Asigna el nombre del archivo a descargar639 ## Asigna el nombre del archivo a descargar 682 640 nombre_archivo = 'PIB-Actividad_economica' 683 641 … … 696 654 ] 697 655 ] 698 # Asigna el nombre del archivo a descargar656 ## Asigna el nombre del archivo a descargar 699 657 nombre_archivo = 'PIB-Institucional' 700 658 … … 709 667 diff_anhos = int(kwargs['anho__lte']) - int(kwargs['anho__gte']) + 1 710 668 if any('trimestre' in index for index in kwargs): 711 fields[1].insert(1, {'tag': str(PIB Actividad._meta.get_field('trimestre').verbose_name), 'cabecera': True})712 # Almacena los datos de año y trimestre inicial provenientes del formulario669 fields[1].insert(1, {'tag': str(PIB._meta.get_field('trimestre').verbose_name), 'cabecera': True}) 670 ## Almacena los datos de año y trimestre inicial provenientes del formulario 713 671 anho_ini = int(kwargs['anho__gte']) 714 672 trimestre_ini = int(kwargs['trimestre__gte']) 715 673 716 # Genera los años y trimestres correspondientes a los parámetros del formulario674 ## Genera los años y trimestres correspondientes a los parámetros del formulario 717 675 registros = [] 718 676 while True: 719 677 registros = [({'tag': anho_ini})] 720 678 registros.append({'tag': trimestre_ini}) 721 # Agrega los datos a la nueva fila del archivo a generar679 ## Agrega los datos a la nueva fila del archivo a generar 722 680 fields.append(registros) 723 681 if (anho_ini == int(kwargs['anho__lte']) and trimestre_ini == int(kwargs['trimestre__lte'])): … … 728 686 trimestre_ini += 1 729 687 else: 730 # Almacena los años de los registros a descargar688 ## Almacena los años de los registros a descargar 731 689 for i in range(diff_anhos): 732 690 registros = [({'tag': int(kwargs['anho__gte']) + i})] 733 # Agrega los datos a la nueva fila del archivo a generar691 ## Agrega los datos a la nueva fila del archivo a generar 734 692 fields.append(registros) 735 693 ## Devuelve los datos correspondientes al archivo a descargar y el nombre de ese archivo … … 754 712 755 713 load_file = pyexcel.get_book(bookdict=kwargs['file_content'])[0] 756 anho _base, i, col_ini, errors, result, message, is_nominal = '', 0, 2, '', False, '', False714 anhos_base, anho_b, errors, result, message, is_nominal = [], None, '', False, '', False 757 715 is_demanda, is_produccion, is_actividad, is_sector = False, False, False, False 758 716 load_data_msg = str(_("Datos Cargados")) … … 794 752 'message': str(_("El documento a cargar no es válido o no corresponde a los parámetros seleccionados")) 795 753 } 796 797 754 755 if not is_nominal: 756 ## Se crea una lista con los años base del modelo 757 anhos_base = [int(anhos.anho) for anhos in AnhoBase.objects.all()] 758 #Se almacena el año base suministrado en el formulario 759 anho_b = AnhoBase.objects.get(id=kwargs['anho_base']) 760 798 761 ## En base al archivo cargado, se validan y cargan a la base de datos los valores contenidos en el archivo 799 762 for row in load_file.row[2:]: 800 763 try: 801 # Asigna el año base del registro 802 anho_b = int(kwargs['anho_base']) 803 804 # Posición inicial desde la cual se van a comenzar a registrar los datos en los modelos asociados 764 ## Obtención del año a registrar 805 765 anho = row[0] 806 766 807 # Condición que indica si el registro corresponde al año base808 base = True if i == 0else False809 810 # Almacena el valor en caso de tratarse del archivo PIB-Nominal_demanda o False en caso contrario767 ## Condición que indica si el registro corresponde al año base 768 base = True if anho in anhos_base else False 769 770 ## Almacena el valor en caso de tratarse del archivo PIB-Nominal_demanda o False en caso contrario 811 771 nominal = row[1] if (is_nominal and is_demanda) else None 812 772 813 # Gestión para los datos básicos de pib 814 real_pib, created = PIB.objects.update_or_create(anho=anho, anho_base=anho_b, nominal=nominal) 773 ## Almacena el valor del trimestre en caso de contener esta columna 774 trimestre = row[1] if (is_actividad or is_sector) else None 775 776 ## Gestión para los datos básicos de pib 777 real_pib, created = PIB.objects.update_or_create(anho=anho, anho_base=anho_b, trimestre=trimestre, nominal=nominal) 815 778 816 779 if is_demanda: 817 # Gestión de datos para el Índice por Demanda780 ## Gestión de datos para el Índice por Demanda 818 781 PIBDemanda.objects.update_or_create(pib=real_pib, defaults={ 819 782 'base': base, … … 824 787 }) 825 788 elif is_produccion: 826 # Gestión de datos para el Índice por Producción789 ## Gestión de datos para el Índice por Producción 827 790 PIBProduccion.objects.update_or_create(pib=real_pib, defaults={ 828 791 'base': base, … … 832 795 }) 833 796 elif is_actividad: 834 # Gestión de datos para el ïndice por Actividad Económica797 ## Gestión de datos para el ïndice por Actividad Económica 835 798 PIBActividad.objects.update_or_create(pib=real_pib, defaults={ 836 799 'base': base, 837 'trimestre': check_val_data(row[1]),838 800 'total_consolidado': check_val_data(row[2]), 839 801 'total_petrolera': check_val_data(row[3]), … … 855 817 }) 856 818 elif is_sector: 857 # Gestión de datos para el Índice por Sector Institucional819 ## Gestión de datos para el Índice por Sector Institucional 858 820 PIBInstitucion.objects.update_or_create(pib=real_pib, defaults={ 859 821 'base': base, 860 'trimestre': check_val_data(row[1]),861 822 'publico': check_val_data(row[2]), 862 823 'privado': check_val_data(row[3]) … … 865 826 except Exception as e: 866 827 errors += "- %s\n" % str(e) 867 i += 1868 828 869 829 if errors: … … 965 925 """ 966 926 967 trimestre = models.CharField(max_length=1, null=True, blank=True, verbose_name=_('Trimestre'))968 969 927 total_consolidado = models.DecimalField( 970 928 max_digits=18, decimal_places=2, default=0.0, verbose_name=_("PIB Consolidado") … … 1064 1022 @version 1.0.0 1065 1023 """ 1066 1067 trimestre = models.CharField(max_length=1, null=True, blank=True, verbose_name=_('Trimestre'))1068 1024 1069 1025 publico = models.DecimalField( … … 1088 1044 1089 1045 ## Año base del registro 1090 anho_base = models. CharField(max_length=4, null=True)1046 anho_base = models.ForeignKey(AnhoBase, null=True) 1091 1047 1092 1048 ## Año al que pertenece el(los) registro(s) … … 1170 1126 anho_base, errors, result, message = '', '', True, '' 1171 1127 load_data_msg = str(_("Datos Cargados")) 1128 1129 self.anho_base=AnhoBase.objects.get(id=kwargs['anho_base']) 1130 1172 1131 for row in range(1,len(load_file.row_range())): 1173 1132 1174 1133 try: 1175 real_demanda , created = DemandaGlobal.objects.update_or_create(anho=load_file[row,0], anho_base= kwargs['anho_base'], trimestre=load_file[row,1], demanda_global= load_file[row,2]+load_file[row,7])1134 real_demanda , created = DemandaGlobal.objects.update_or_create(anho=load_file[row,0], anho_base=self.anho_base, trimestre=load_file[row,1], demanda_global= load_file[row,2]+load_file[row,7]) 1176 1135 ## Se crea o actualiza el objeto de Demanda Agregada Interna luego de validar el valor en la hoja de calculo 1177 1136 … … 1199 1158 1200 1159 ## Envia correo electronico al usuario indicando el estatus de la carga de datos 1201 enviar_correo(user.email, 'gestion.informacion.load.mail', EMAIL_SUBJECT_ CM_RESULT, {1160 enviar_correo(user.email, 'gestion.informacion.load.mail', EMAIL_SUBJECT_LOAD_DATA, { 1202 1161 'load_data_msg': load_data_msg, 'administrador': administrador, 'admin_email': admin_email, 1203 1162 'errors': errors … … 1255 1214 1256 1215 ## Año base del registro 1257 anho_base = models. CharField(max_length=4, null=True)1216 anho_base = models.ForeignKey(AnhoBase, null=True) 1258 1217 1259 1218 ## Año al que pertenece el(los) registro(s) … … 1373 1332 class AgregadosBase(models.Model): 1374 1333 """! 1375 Clase que contiene los registros comunes de los modelos relacionados con laSub-área Agregados Monetarios1334 Clase que contiene los registros comunes de los modelos relacionados con el Sub-área Agregados Monetarios 1376 1335 1377 1336 @author Edgar A. Linares (elinares at cenditel.gob.ve) … … 1381 1340 """ 1382 1341 1342 ## Fecha a la que pertenece el registro 1343 fecha = models.DateField(null=True, verbose_name=_("Fecha")) 1344 1383 1345 ## Semana a la que pertenece el registro 1384 semana = models.CharField( max_length=2, verbose_name=_("Semana"))1346 semana = models.CharField(null=True, max_length=2, verbose_name=_("Semana")) 1385 1347 1386 1348 ## Mes al que pertenece el registro 1387 mes = models.CharField( max_length=2, choices=MESES[1:], verbose_name=_("Mes"))1349 mes = models.CharField(null=True, max_length=2, choices=MESES[1:], verbose_name=_("Mes")) 1388 1350 1389 1351 ## Año al que pertenece el registro 1390 anho = models.CharField( max_length=4, verbose_name=_("Año"))1352 anho = models.CharField(null=True, max_length=4, verbose_name=_("Año")) 1391 1353 1392 1354 class Meta: … … 1430 1392 [ 1431 1393 {'tag': '', 'cabecera': True}, 1432 {'tag': str( ReservasBancarias._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 1,'cabecera': True}1394 {'tag': str(AgregadosReservas._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 1,'cabecera': True} 1433 1395 ], 1434 1396 [ 1435 {'tag': str( ReservasBancarias._meta.get_field('fecha').verbose_name), 'cabecera': True},1436 {'tag': str( ReservasBancarias._meta.get_field('reservas_bancarias').verbose_name), 'cabecera': True}1397 {'tag': str(AgregadosBase._meta.get_field('fecha').verbose_name), 'cabecera': True}, 1398 {'tag': str(AgregadosReservas._meta.get_field('reservas_bancarias').verbose_name), 'cabecera': True} 1437 1399 ] 1438 1400 ] … … 1443 1405 [ 1444 1406 {'tag': '', 'cabecera': True}, 1445 {'tag': str( MonetariaUsos._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 4,'cabecera': True}1407 {'tag': str(AgregadosUsos._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 4,'cabecera': True} 1446 1408 ], 1447 1409 [ 1448 1410 {'tag': str(AgregadosBase._meta.get_field('semana').verbose_name), 'cabecera': True}, 1449 {'tag': str( MonetariaUsos._meta.get_field('depositos_bcu').verbose_name), 'cabecera': True},1450 {'tag': str( MonetariaUsos._meta.get_field('depositos_rsb').verbose_name), 'cabecera': True},1451 {'tag': str( MonetariaUsos._meta.get_field('depositos_ep').verbose_name), 'cabecera': True},1452 {'tag': str( MonetariaUsos._meta.get_field('monedas_billetes').verbose_name), 'cabecera': True}1411 {'tag': str(AgregadosUsos._meta.get_field('depositos_bcu').verbose_name), 'cabecera': True}, 1412 {'tag': str(AgregadosUsos._meta.get_field('depositos_rsb').verbose_name), 'cabecera': True}, 1413 {'tag': str(AgregadosUsos._meta.get_field('depositos_ep').verbose_name), 'cabecera': True}, 1414 {'tag': str(AgregadosUsos._meta.get_field('monedas_billetes').verbose_name), 'cabecera': True} 1453 1415 ] 1454 1416 ] … … 1459 1421 [ 1460 1422 {'tag': '', 'cabecera': True}, 1461 {'tag': str( MonetariaFuentes._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 6,'cabecera': True}1423 {'tag': str(AgregadosFuentes._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 6,'cabecera': True} 1462 1424 ], 1463 1425 [ 1464 1426 {'tag': str(AgregadosBase._meta.get_field('semana').verbose_name), 'cabecera': True}, 1465 {'tag': str( MonetariaFuentes._meta.get_field('reservas_internacionales').verbose_name), 'cabecera': True},1466 {'tag': str( MonetariaFuentes._meta.get_field('sector_publico').verbose_name), 'cabecera': True},1467 {'tag': str( MonetariaFuentes._meta.get_field('sector_financiero').verbose_name), 'cabecera': True},1468 {'tag': str( MonetariaFuentes._meta.get_field('credito_bcv').verbose_name), 'cabecera': True},1469 {'tag': str( MonetariaFuentes._meta.get_field('otras_cuentas').verbose_name), 'cabecera': True},1470 {'tag': str( MonetariaFuentes._meta.get_field('capital_pagado_reservas').verbose_name), 'cabecera': True}1427 {'tag': str(AgregadosFuentes._meta.get_field('reservas_internacionales').verbose_name), 'cabecera': True}, 1428 {'tag': str(AgregadosFuentes._meta.get_field('sector_publico').verbose_name), 'cabecera': True}, 1429 {'tag': str(AgregadosFuentes._meta.get_field('sector_financiero').verbose_name), 'cabecera': True}, 1430 {'tag': str(AgregadosFuentes._meta.get_field('credito_bcv').verbose_name), 'cabecera': True}, 1431 {'tag': str(AgregadosFuentes._meta.get_field('otras_cuentas').verbose_name), 'cabecera': True}, 1432 {'tag': str(AgregadosFuentes._meta.get_field('capital_pagado_reservas').verbose_name), 'cabecera': True} 1471 1433 ] 1472 1434 ] 1473 1435 nombre_archivo = 'Base_monetaria_fuentes' 1474 ## Colocar en el archivo de salida las fechas excepto fines de semana segun la selección del usuario1475 if any('fecha' in index for index in kwargs):1476 inicio =datetime.strptime(kwargs['fecha__gte'], "%d/%m/%Y")1477 fin =datetime.strptime(kwargs['fecha__lte'], "%d/%m/%Y")1436 if any('reservas_bancarias' in index for index in kwargs): 1437 ## Si el dominio es reservas bancarias, se agregan al archivo las fechas por días excepto fines de semana 1438 inicio = datetime.strptime(kwargs['fecha__gte'], "%d/%m/%Y") 1439 fin = datetime.strptime(kwargs['fecha__lte'], "%d/%m/%Y") 1478 1440 delta = timedelta(days=1) 1479 1441 while inicio <= fin: 1480 1442 if inicio.weekday() < 5: 1481 fields.append([ {'tag': str(_(str(inicio.strftime('%d/%m/%Y'))))}]) 1482 inicio+= delta 1483 ## Devuelve los datos correspondientes al archivo a descargar y el nombre de ese archivo 1443 fields.append([{'tag': str(_(str(inicio.strftime('%d/%m/%Y'))))}]) 1444 inicio += delta 1445 else: 1446 ## Para los demás dominios, se agregan al archivo las fechas por semanas dentro de las fechas indicadas 1447 inicio = datetime.strptime(kwargs['fecha__gte'], "%d/%m/%Y") 1448 if inicio.weekday() != 4: 1449 inicio = inicio - timedelta(inicio.weekday()) + timedelta(days=4) 1450 fin = datetime.strptime(kwargs['fecha__lte'], "%d/%m/%Y") 1451 if fin.weekday() != 4: 1452 fin = fin - timedelta(fin.weekday()) + timedelta(days=4) 1453 1454 while inicio <= fin: 1455 fields.append([{'tag': str(_(str(inicio.strftime("%d/%m/%Y"))))}]) 1456 inicio += timedelta(weeks=1) 1457 ## Devuelve los datos correspondientes al archivo a descargar y el nombre de ese archivo 1484 1458 return {'fields': fields, 'output': nombre_archivo} 1485 1459 … … 1501 1475 load_file = pyexcel.get_book(bookdict=kwargs['file_content'])[0] 1502 1476 errors, result, message = '', False, '' 1503 is_reservas_bancarias, is_liquidez_monetaria, is_monetaria_usos, is_monetaria_fuentes = True, True, True, True1477 is_reservas_bancarias, is_liquidez_monetaria, is_monetaria_usos, is_monetaria_fuentes = False, False, False, False 1504 1478 load_data_msg = str(_("Datos Cargados")) 1505 1479 … … 1520 1494 if is_liquidez_monetaria and (load_file.row[0][1] == str(AgregadosMonetarios._meta.verbose_name)): 1521 1495 result = True 1522 elif is_reservas_bancarias and (load_file.row[0][1] == str( ReservasBancarias._meta.verbose_name)):1496 elif is_reservas_bancarias and (load_file.row[0][1] == str(AgregadosReservas._meta.verbose_name)): 1523 1497 result = True 1524 elif is_monetaria_usos and (load_file.row[0][1] == str( MonetariaUsos._meta.verbose_name)):1498 elif is_monetaria_usos and (load_file.row[0][1] == str(AgregadosUsos._meta.verbose_name)): 1525 1499 result = True 1526 elif is_monetaria_fuentes and (load_file.row[0][1] == str( MonetariaFuentes._meta.verbose_name)):1500 elif is_monetaria_fuentes and (load_file.row[0][1] == str(AgregadosFuentes._meta.verbose_name)): 1527 1501 result = True 1528 1502 … … 1541 1515 for row in load_file.row[2:]: 1542 1516 try: 1543 # Asigna la semana del registro 1544 semana = row[0] if not is_reservas_bancarias else None 1545 1546 # Asigna el mes del registro 1547 mes = 10 1548 1549 # Asigna el año del registro 1550 anho = 100 1551 1552 # Asigna la fecha del registro 1553 fecha = fecha=datetime.strptime(row[0], "%d/%m/%Y") 1554 #datetime(int(anho), int(mes), 1) if is_reservas_bancarias else 1000 1555 1556 # Gestión para los datos básicos de Agregados Monetarios 1557 agregados, created = AgregadosBase.objects.update_or_create(semana=semana, mes=mes, anho=anho) 1517 ## Asigna la fecha del registro 1518 fecha = datetime.strptime(row[0], "%d/%m/%Y") 1519 1520 ## Separa la fecha para obtener mes y año 1521 f = row[0].split('/') 1522 1523 ## Obtiene la semana respecto al año 1524 semana = fecha.isocalendar()[1] 1525 1526 ## Gestión para los datos básicos de Agregados Monetarios 1527 agregados, created = AgregadosBase.objects.update_or_create(fecha=fecha, semana=semana, mes=f[1], anho=f[2]) 1558 1528 1559 1529 if is_liquidez_monetaria: 1560 1530 ## Gestión de datos para la categoría Agregados Monetarios 1561 AgregadosMonetarios.objects.update_or_create(agregados = agregados, default ={1562 'monedas_billetes': che k_val_data(row[1]),1563 'depositos_vista': che k_val_data(row[2]),1564 'depositos_ahorro': che k_val_data(row[3]),1565 'depositos_plazo': che k_val_data(row[4]),1566 'cuasidinero': che k_val_data(row[5]),1567 'cedulas_hipotecarias': che k_val_data(row[6])1531 AgregadosMonetarios.objects.update_or_create(agregados = agregados, defaults={ 1532 'monedas_billetes': check_val_data(row[1]), 1533 'depositos_vista': check_val_data(row[2]), 1534 'depositos_ahorro': check_val_data(row[3]), 1535 'depositos_plazo': check_val_data(row[4]), 1536 'cuasidinero': check_val_data(row[5]), 1537 'cedulas_hipotecarias': check_val_data(row[6]) 1568 1538 }) 1569 1539 elif is_reservas_bancarias: 1570 1540 ## Gestión de datos para la categoría Reservas Bancarias 1571 ReservasBancarias.objects.update_or_create(agregados = agregados, default={ 1572 'fecha': fecha, 1573 'reservas_bancarias': chek_val_data(row[1]) 1541 AgregadosReservas.objects.update_or_create(agregados = agregados, defaults={ 1542 'reservas_bancarias': check_val_data(row[1]) 1574 1543 }) 1575 1544 elif is_monetaria_usos: 1576 1545 ## Gestión de datos para la categoría Base Monetaria Usos 1577 MonetariaUsos.objects.update_or_create(agregados = agregados, default={1578 'depositos_bcu': che k_val_data(row[1]),1579 'depositos_rsb': che k_val_data(row[2]),1580 'depositos_ep': che k_val_data(row[3]),1581 'monedas_billetes': che k_val_data(row[4])1546 AgregadosUsos.objects.update_or_create(agregados = agregados, defaults={ 1547 'depositos_bcu': check_val_data(row[1]), 1548 'depositos_rsb': check_val_data(row[2]), 1549 'depositos_ep': check_val_data(row[3]), 1550 'monedas_billetes': check_val_data(row[4]) 1582 1551 }) 1583 1552 elif is_monetaria_fuentes: 1584 1553 ## Gestión de datos para la categoría Base Monetaria Fuentes 1585 MonetariaFuentes.objects.update_or_create(agregados = agregados, default={1586 'reservas_internacionales': che k_val_data(row[1]),1587 'sector_publico': che k_val_data(row[2]),1588 'sector_financiero': che k_val_data(row[3]),1589 'credito_bcv': che k_val_data(row[4]),1590 'otras_cuentas': che k_val_data(row[5]),1591 'capital_pagado_reservas': che k_val_data(row[6])1554 AgregadosFuentes.objects.update_or_create(agregados = agregados, defaults={ 1555 'reservas_internacionales': check_val_data(row[1]), 1556 'sector_publico': check_val_data(row[2]), 1557 'sector_financiero': check_val_data(row[3]), 1558 'credito_bcv': check_val_data(row[4]), 1559 'otras_cuentas': check_val_data(row[5]), 1560 'capital_pagado_reservas': check_val_data(row[6]) 1592 1561 }) 1593 1562 except Exception as e: … … 1654 1623 1655 1624 @python_2_unicode_compatible 1656 class ReservasBancarias(models.Model):1625 class AgregadosReservas(models.Model): 1657 1626 """! 1658 1627 Clase que contiene los registros de la categoría reservas bancarias de la sub-área Agregados Monetarios … … 1663 1632 @version 1.0.0 1664 1633 """ 1665 1666 ## Fecha a la que pertenece el registro1667 fecha = models.DateField(null=True, verbose_name=_("Fecha"))1668 1634 1669 1635 ## Reservas Bancarias … … 1679 1645 1680 1646 @python_2_unicode_compatible 1681 class MonetariaUsos(models.Model):1647 class AgregadosUsos(models.Model): 1682 1648 """! 1683 1649 Clase que contiene los registros de la categoría base monetaria usos de la sub-área Agregados Monetarios … … 1716 1682 1717 1683 @python_2_unicode_compatible 1718 class MonetariaFuentes(models.Model):1684 class AgregadosFuentes(models.Model): 1719 1685 """! 1720 1686 Clase que contiene los registros de la categoría base monetaria fuentes de la sub-área Agregados Monetarios … … 1778 1744 1779 1745 ## Semana a la que pertenece el registro 1780 semana = models.CharField( max_length=2, verbose_name=_("Semana"))1746 semana = models.CharField(null=True, max_length=2, verbose_name=_("Semana")) 1781 1747 1782 1748 ## Mes al que pertenece el registro 1783 mes = models.CharField( max_length=2, choices=MESES[1:], verbose_name=_("Mes"))1749 mes = models.CharField(null=True, max_length=2, choices=MESES[1:], verbose_name=_("Mes")) 1784 1750 1785 1751 ## Año al que pertenece el registro 1786 anho = models.CharField( max_length=4, verbose_name=_("Año"))1752 anho = models.CharField(null=True, max_length=4, verbose_name=_("Año")) 1787 1753 1788 1754 class Meta: … … 1808 1774 [ 1809 1775 {'tag': '', 'cabecera': True}, 1810 {'tag': str( PrincipalesBancos._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 3, 'cabecera': True}1776 {'tag': str(TasasBancos._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 3, 'cabecera': True} 1811 1777 ], 1812 1778 [ 1813 1779 {'tag': str(TasasInteres._meta.get_field('semana').verbose_name), 'cabecera': True}, 1814 {'tag': str( PrincipalesBancos._meta.get_field('operaciones_activas').verbose_name), 'cabecera': True},1815 {'tag': str( PrincipalesBancos._meta.get_field('depositos_90_dias').verbose_name), 'cabecera': True},1816 {'tag': str( PrincipalesBancos._meta.get_field('depositos_ahorro').verbose_name), 'cabecera': True}1780 {'tag': str(TasasBancos._meta.get_field('operaciones_activas').verbose_name), 'cabecera': True}, 1781 {'tag': str(TasasBancos._meta.get_field('depositos_90_dias').verbose_name), 'cabecera': True}, 1782 {'tag': str(TasasBancos._meta.get_field('depositos_ahorro').verbose_name), 'cabecera': True} 1817 1783 ] 1818 1784 ] … … 1824 1790 [ 1825 1791 {'tag': '', 'cabecera': True}, 1826 {'tag': str( _('Tasas de Bancos Comerciales y Universales')), 'color': 'orange', 'text_color': 'white', 'combine': 4, 'cabecera': True},1792 {'tag': str(TasaActiva._meta.verbose_name), 'color': 'orange', 'text_color': 'white', 'combine': 4, 'cabecera': True}, 1827 1793 {'tag': str(_('Por Actividad Económica')), 'color': 'green', 'text_color': 'white', 'combine': 13, 'cabecera': True}, 1828 1794 {'tag': str(_('Condición Jurídica')), 'color': 'ocean_blue', 'text_color': 'white', 'combine': 2, 'cabecera': True} … … 1875 1841 ## Asigna el nombre del archivo a descargar 1876 1842 nombre_archivo = 'Tasas_pasiva' 1877 ## Colocar en el archivo de salida las fechas excepto fines de semana segun la selección del usuario 1878 if any('fecha' in index for index in kwargs): 1879 inicio=datetime.strptime(kwargs['fecha__gte'], "%d/%m/%Y") 1880 fin=datetime.strptime(kwargs['fecha__lte'], "%d/%m/%Y") 1843 1844 if any('tasa_pb' in index for index in kwargs): 1845 ## Para el dominio Principales Bancos, se agregan al archivo las fechas por semanas dentro de las fechas indicadas 1846 inicio = datetime.strptime(kwargs['fecha__gte'], "%d/%m/%Y") 1847 if inicio.weekday() != 4: 1848 inicio = inicio - timedelta(inicio.weekday()) + timedelta(days=4) 1849 fin = datetime.strptime(kwargs['fecha__lte'], "%d/%m/%Y") 1850 if fin.weekday() != 4: 1851 fin = fin - timedelta(fin.weekday()) + timedelta(days=4) 1852 1853 while inicio <= fin: 1854 fields.append([{'tag': str(_(str(inicio.strftime("%d/%m/%Y"))))}]) 1855 inicio += timedelta(weeks=1) 1856 else: 1857 ## Para los demás dominios, se agregan al archivo las fechas por días excepto fines de semana 1858 inicio = datetime.strptime(kwargs['fecha__gte'], "%d/%m/%Y") 1859 fin = datetime.strptime(kwargs['fecha__lte'], "%d/%m/%Y") 1881 1860 delta = timedelta(days=1) 1882 1861 while inicio <= fin: 1883 1862 if inicio.weekday() < 5: 1884 fields.append([ {'tag': str(_(str(inicio.strftime('%d/%m/%Y'))))}]) 1885 inicio+= delta 1863 fields.append([{'tag': str(_(str(inicio.strftime('%d/%m/%Y'))))}]) 1864 inicio += delta 1865 1886 1866 ## Devuelve los datos correspondientes al archivo a descargar y el nombre de ese archivo 1887 1867 return {'fields': fields, 'output': nombre_archivo} … … 1919 1899 1920 1900 ## Valida que el archivo corresponde a lo indicado en los parámetros del formulario 1921 if is_tasa_pb and (load_file.row[0][1] == str( PrincipalesBancos._meta.verbose_name)):1901 if is_tasa_pb and (load_file.row[0][1] == str(TasasBancos._meta.verbose_name)): 1922 1902 result = True 1923 elif is_tasa_activa and (load_file.row[0][1] == str( _('Tasas de Bancos Comerciales y Universales'))):1903 elif is_tasa_activa and (load_file.row[0][1] == str(TasaActiva._meta.verbose_name)): 1924 1904 result = True 1925 1905 elif is_tasa_pasiva and (load_file.row[0][1] == str(TasaPasiva._meta.verbose_name)): … … 1940 1920 for row in load_file.row[2:]: 1941 1921 try: 1942 ## Asigna la semana del registro1943 semana = 11944 #row[0] if is_tasa_pb else None1945 1946 ## Asigna el mes del registro1947 mes = None1948 1949 ## Asigna el año del registro1950 anho = None1951 1952 1922 ## Asigna la fecha del registro 1953 1923 fecha = datetime.strptime(row[0], "%d/%m/%Y") 1954 1924 1925 ## Separa la fecha para obtener mes y año 1926 f = row[0].split('/') 1927 1928 ## Obtiene la semana respecto al año 1929 semana = fecha.isocalendar()[1] 1930 1955 1931 ## Gestión para los datos básicos de Tasas de Interés 1956 tasas, created = TasasInteres.objects.update_or_create(fecha=fecha, semana=semana, mes= mes, anho=anho)1932 tasas, created = TasasInteres.objects.update_or_create(fecha=fecha, semana=semana, mes=f[1], anho=f[2]) 1957 1933 1958 1934 if is_tasa_pb: 1959 1935 ## Gestión de datos para la categoría Seis Principales Bancos 1960 PrincipalesBancos.objects.update_or_create(tasas=tasas, defaults={1936 TasasBancos.objects.update_or_create(tasas=tasas, defaults={ 1961 1937 'operaciones_activas': check_val_data(row[1]), 1962 1938 'depositos_90_dias': check_val_data(row[2]), … … 1975 1951 'servicios': check_val_data(row[8]), 1976 1952 'creditos_hipotecarios': check_val_data(row[9]), 1977 'transporte_al imento': check_val_data(row[10]),1953 'transporte_almacenamiento': check_val_data(row[10]), 1978 1954 'turismo': check_val_data(row[11]), 1979 1955 'comunicaciones': check_val_data(row[12]), … … 2015 1991 2016 1992 @python_2_unicode_compatible 2017 class PrincipalesBancos(models.Model):1993 class TasasBancos(models.Model): 2018 1994 """! 2019 1995 Clase que contiene los registros de la categoría Seis Principales Bancos de la sub-área Tasas de Interés … … 2156 2132 2157 2133 class Meta: 2158 verbose_name = _('Tasa de Interés Activa')2134 verbose_name = _('Tasas de Bancos Comerciales y Universales') 2159 2135 2160 2136 @python_2_unicode_compatible … … 2218 2194 2219 2195 class Meta: 2220 verbose_name = _('Tasa de Interés Activa')2196 verbose_name = _('Tasa de Interés Pasiva') 2221 2197 2222 2198 #-----------------------------Economía - Externo - Reservas, Tipo de Cambio … … 2420 2396 2421 2397 ## Año base del registro 2422 anho_base = models. CharField(max_length=4, null=True)2398 anho_base = models.ForeignKey(AnhoBase, null=True) 2423 2399 2424 2400 ## Año al que pertenece el(los) registro(s) … … 2531 2507 anho_base = kwargs['anho_base'] if 'anho_base' in kwargs else '' 2532 2508 2533 # Almacena los datos de año y trimestre inicial provenientes del formulario2509 ## Almacena los datos de año y trimestre inicial provenientes del formulario 2534 2510 anho_ini = int(kwargs['anho__gte']) 2535 2511 trimestre_ini = int(kwargs['trimestre__gte']) 2536 2512 2537 # Genera los años y trimestres correspondientes a los parámetros del formulario2513 ## Genera los años y trimestres correspondientes a los parámetros del formulario 2538 2514 registros = [] 2539 2515 while True: … … 2642 2618 registros.append({'tag':balanza_datos_is.privado_petroleo}) 2643 2619 registros.append({'tag':balanza_datos_is.privado_no_petroleo}) 2644 # Agrega los datos a la nueva fila del archivo a generar2620 ## Agrega los datos a la nueva fila del archivo a generar 2645 2621 fields.append(registros) 2646 2622 if (anho_ini == int(kwargs['anho__lte']) and trimestre_ini == int(kwargs['trimestre__lte'])): … … 2796 2772 2797 2773 2798 # Envia correo electronico al usuario indicando el estatus de la carga de datos2774 ## Envia correo electronico al usuario indicando el estatus de la carga de datos 2799 2775 enviar_correo(user.email, 'gestion.informacion.load.mail', EMAIL_SUBJECT_LOAD_DATA, { 2800 2776 'load_data_msg': load_data_msg, 'administrador': administrador, 'admin_email': admin_email, … … 3059 3035 fields.append(sub_header) 3060 3036 3061 # Almacena los datos de año y trimestre inicial provenientes del formulario3037 ## Almacena los datos de año y trimestre inicial provenientes del formulario 3062 3038 anho_ini = int(kwargs['anho__gte']) 3063 3039 trimestre_ini = int(kwargs['trimestre__gte']) … … 3066 3042 registros = [({'tag': anho_ini})] 3067 3043 registros.append({'tag': trimestre_ini}) 3068 # Agrega los datos a la nueva fila del archivo a generar3044 ## Agrega los datos a la nueva fila del archivo a generar 3069 3045 if(kwargs['dominio']=='BP'): 3070 3046 cuenta_capital_base = CuentaCapitalBalanzaBase.objects.filter(anho=anho_ini,trimestre=trimestre_ini) … … 3357 3333 3358 3334 3359 # Envia correo electronico al usuario indicando el estatus de la carga de datos3335 ## Envia correo electronico al usuario indicando el estatus de la carga de datos 3360 3336 enviar_correo(user.email, 'gestion.informacion.load.mail', EMAIL_SUBJECT_LOAD_DATA, { 3361 3337 'load_data_msg': load_data_msg, 'administrador': administrador, 'admin_email': admin_email, -
usuario/views.py
r3e5ebf9 r71c82f7 22 22 from django.contrib.auth.models import User 23 23 from django.contrib.messages.views import SuccessMessageMixin 24 from django.core import urlresolvers 24 from django.core import urlresolvers, signing 25 25 from django.core.urlresolvers import reverse_lazy, reverse 26 26 from django.http import HttpResponseRedirect … … 32 32 from base.constant import REGISTRO_MESSAGE, UPDATE_MESSAGE, EMAIL_SUBJECT_REGISTRO, CADUCIDAD_LINK_REGISTRO 33 33 from base.functions import enviar_correo, calcular_diferencia_fechas 34 from base.models import Institucion 34 35 from .forms import AutenticarForm, RegistroForm, OlvidoClaveForm, ModificarClaveForm, PerfilForm 35 36 … … 38 39 from .models import UserProfile 39 40 41 date_now = datetime.now() 40 42 logger = logging.getLogger("usuario") 41 43 … … 151 153 usr = User.objects.get(username=username) 152 154 153 ## Asigna un enlace de verificación para el olvido de clave 154 link = request.build_absolute_uri("%s?userid=%s&key=%s" % ( 155 ## Fecha (cifrada) en la que se genero el enlace para la modificacion de contraseña 156 date_link_signed = signing.dumps("%s-%s-%s" % (date_now.year, date_now.month, date_now.day)) 157 158 link = request.build_absolute_uri("%s?userid=%s&key=%s&date=%s" % ( 155 159 urlresolvers.reverse('confirmar_modificar_clave'), 156 username, hash_user(usr, is_reset=True).decode() 160 username, hash_user(usr, is_reset=True).decode(), 161 date_link_signed 157 162 )) 158 163 … … 195 200 userid = request.GET.get('userid', None) 196 201 key = request.GET.get('key', None) 202 date_link_generate = request.GET.get('date', None) 197 203 verificado = False 198 204 mensaje = str(_("El usuario ha sido verificado")) 199 205 modificar_clave_url = None 200 206 201 if userid and key and User.objects.filter(username=userid):207 if userid and key and date_link_generate and User.objects.filter(username=userid): 202 208 user = User.objects.get(username=userid) 203 if calcular_diferencia_fechas(user.date_joined) <= CADUCIDAD_LINK_REGISTRO: 209 210 ## Fecha (descifrada) en la que se genero el enlace para la modificacion de contraseña 211 link_date = datetime.strptime(signing.loads(date_link_generate), "%Y-%m-%d") 212 213 if calcular_diferencia_fechas(link_date) <= CADUCIDAD_LINK_REGISTRO: 204 214 if key.strip() == hash_user(user, is_reset=True).decode(): 205 215 modificar_clave_url = "%s?userid=%s&key=%s" % ( … … 244 254 perfil.save() 245 255 messages.info(request, _("Su contraseña ha sido modificada correctamente")) 246 256 alert = str(_("La contraseña fue modificada satisfactoriamente")) 247 257 logger.info(str(_("El usuario [%s] modificó su contraseña por olvido") % username)) 248 return HttpResponseRedirect(urlresolvers.reverse("acceso")) 258 form = AutenticarForm() 259 return render(request, 'base.template.html', {'form': form, 'alert': alert}) 260 #return HttpResponseRedirect(urlresolvers.reverse("acceso")) 249 261 250 262 return render(request, 'usuario.modificar.clave.html', {'form': form, 'fortaleza_clave': True, 'username': username}) … … 372 384 @version 1.0.0 373 385 """ 374 model = User Profile386 model = User #UserProfile 375 387 form_class = PerfilForm 376 388 template_name = 'usuario.update.html' … … 403 415 @return Retorna el formulario validado y modifica los datos de perfil del usuario 404 416 """ 405 """ 417 406 418 self.object = form.save(commit=False) 407 usuario = self.request.user 408 usr = User.objects.get(username=usuario) 409 institucion = Institucion.objects.get(nombre=form.cleaned_data['institucion']) 410 cargo = Cargo.objects.get(nombre=form.cleaned_data['cargo']) 411 correo = form.cleaned_data['correo'].lower() 412 nombre, apellido = form.cleaned_data['nombre'], form.cleaned_data['apellido'] 413 if usr.first_name!=nombre: usr.first_name = nombre 414 if usr.last_name!=apellido: usr.last_name = apellido 415 if usr.email!=correo: usr.email = correo 416 usr.save() 417 form.instance.user = usr 418 form.instance.institucion = institucion 419 form.instance.cargo = cargo 419 usr = User.objects.get(username=self.object.username) 420 self.object.password = usr.password 421 if self.object.first_name != form.cleaned_data['nombre']: 422 self.object.first_name = form.cleaned_data['nombre'] 423 if self.object.last_name != form.cleaned_data['apellido']: 424 self.object.last_name = form.cleaned_data['apellido'] 425 if self.object.email != form.cleaned_data['correo']: 426 self.object.email = form.cleaned_data['correo'] 427 if form.cleaned_data.get('password', None): 428 self.object.set_password(form.cleaned_data['password']) 429 420 430 self.object.save() 421 431 422 logger.info(u"Se han actualizado los datos del usuario [%s]" % usuario) 423 """ 424 return super(ModificarPerfilView, self).form_valid(form) 432 if UserProfile.objects.filter(user__username=str(self.object.username)): 433 perfil = UserProfile.objects.get(user__username=str(self.object.username)) 434 perfil.ocupacion = form.cleaned_data['ocupacion'] 435 perfil.institucion = Institucion.objects.get(nombre=form.cleaned_data['institucion']) 436 perfil.save() 437 438 messages.info(self.request, UPDATE_MESSAGE) 439 440 return HttpResponseRedirect(self.get_success_url())
Nota: Vea TracChangeset
para ayuda en el uso del visor de conjuntos de cambios.