- Fecha y hora:
- 08/12/2016 17:14:04 (hace 7 años)
- Branches:
- master, carga
- Children:
- 2b509cc
- Parents:
- dc618c3
- Ubicación:
- economico
- Ficheros:
-
- 2 editados
Leyenda
- No modificado
- Añadido
- Eliminado
-
economico/models.py
ref6d66a re9477bd 15 15 from django.db import models 16 16 from django.utils import six 17 from django.conf import settings 17 18 from django.utils.encoding import python_2_unicode_compatible 18 19 from django.utils.translation import ugettext_lazy as _ 19 20 20 from base.constant import DOMINIO, PERIOCIDAD, TRIMESTRES, MESES, ECONOMICO_SUB_AREA 21 from base.constant import ( 22 DOMINIO, PERIOCIDAD, TRIMESTRES, MESES, ECONOMICO_SUB_AREA, CONVERT_MES, EMAIL_SUBJECT_LOAD_DATA 23 ) 24 from base.functions import enviar_correo, check_val_data 21 25 22 26 import pyexcel … … 26 30 __docstring__ = "DoxyGen" 27 31 32 administrador, admin_email = '', '' 33 if settings.ADMINS: 34 administrador = settings.ADMINS[0][0] 35 admin_email = settings.ADMINS[0][1] 36 28 37 29 38 @python_2_unicode_compatible … … 42 51 43 52 ## Ciudad del registro. La información registrada es solo para el tipo de dominio por ciudad 44 ciudad = models.CharField(max_length=3, choices=DOMINIO[1:], null=True, verbose_name=_("Ciudad")) 53 ciudad = models.CharField(max_length=3, choices=DOMINIO[1:], null=True, default=None, verbose_name=_("Ciudad")) 54 55 class Meta: 56 unique_together = ("anho", "mes") 45 57 46 58 def gestion_init(self, *args, **kwargs): #ciudad=None, anho_base=None, mes_ini=None, mes_fin=None, anho_ini=None, anho_fin=None 47 59 48 60 grupo_label = str(PreciosGrupo._meta.verbose_name) 49 grupo_count_fields = PreciosGrupo._meta.get_fields()[:- 3].__len__()61 grupo_count_fields = PreciosGrupo._meta.get_fields()[:-4].__len__() 50 62 sector_label = str(PreciosSector._meta.verbose_name) 51 sector_count_fields = PreciosSector._meta.get_fields()[:- 3].__len__()63 sector_count_fields = PreciosSector._meta.get_fields()[:-4].__len__() 52 64 naturaleza_label = str(PreciosNaturaleza._meta.verbose_name) 53 naturaleza_count_fields = PreciosNaturaleza._meta.get_fields()[:- 3].__len__()65 naturaleza_count_fields = PreciosNaturaleza._meta.get_fields()[:-4].__len__() 54 66 servicios_label = str(PreciosServicios._meta.verbose_name) 55 servicios_count_fields = PreciosServicios._meta.get_fields()[:- 3].__len__()67 servicios_count_fields = PreciosServicios._meta.get_fields()[:-4].__len__() 56 68 inflacionario_label = str(PreciosInflacionario._meta.verbose_name) 57 inflacionario_count_fields = PreciosInflacionario._meta.get_fields()[:- 3].__len__()69 inflacionario_count_fields = PreciosInflacionario._meta.get_fields()[:-4].__len__() 58 70 productos_label = str(PreciosProductos._meta.verbose_name) 59 productos_count_fields = PreciosProductos._meta.get_fields()[:- 3].__len__()71 productos_count_fields = PreciosProductos._meta.get_fields()[:-4].__len__() 60 72 fields = [ 61 73 [ … … 72 84 [] 73 85 ] 74 relations, data, exclude_fields = [], [], ['id', 'anho_base', 'real_precios_id' ]86 relations, data, exclude_fields = [], [], ['id', 'anho_base', 'real_precios_id', 'base'] 75 87 76 88 if not 'dominio' in kwargs or not kwargs['dominio'] == 'C': … … 149 161 return {'cabecera': fields, 'relations': relations, 'data': data, 'output': 'precios'} 150 162 151 def gestion_process(self, file, *args, **kwargs): 152 print(file) 163 def gestion_process(self, file, user, *args, **kwargs): 153 164 load_file = pyexcel.get_sheet(file_name=file) 154 print(load_file.content) 155 return {'result': True, 'message': str(_("archivo correcto"))} 165 anho_base, i, col_ini, errors, result, message = '', 0, 2, '', True, '' 166 load_data_msg = str(_("Datos Cargados")) 167 168 for row in load_file.row[2:]: 169 try: 170 # Asigna el año base del registro 171 anho_b = anho_base = row[0] if i == 0 else anho_base 172 173 # Asigna el año de la fila que se esta procesando 174 anho = row[0] 175 176 # Asigna el número de mes 177 mes = [CONVERT_MES[m] for m in CONVERT_MES if m.find(row[1]) >= 0][0] 178 179 # Asigna la ciudad si el dominio no es nacional 180 ciudad = row[2] if 'dominio' in kwargs and kwargs['dominio'] == 'C' else None 181 182 # Asigna el INPC total para el año base 183 inpc = row[3] if self.ciudad else row[2] 184 185 # Condición que indica si el registro corresponde al año base 186 base = True if i == 0 else False 187 188 # Gestión para los datos básicos de precios 189 real_p, created = Precios.objects.update_or_create(anho=anho, mes=mes, ciudad=ciudad, defaults={ 190 'anho_base': anho_b, 'inpc': inpc 191 }) 192 193 194 # Gestión de datos para el Índice por Grupos 195 PreciosGrupo.objects.update_or_create(real_precios=real_p, defaults={ 196 'base': base, 197 'alimento_bebida': check_val_data(row[4] if self.ciudad else row[3]), 198 'bebida_tabaco': check_val_data(row[5] if self.ciudad else row[4]), 199 'vestido_calzado': check_val_data(row[6] if self.ciudad else row[5]), 200 'alquiler_vivienda': check_val_data(row[7] if self.ciudad else row[6]), 201 'servicio_vivienda': check_val_data(row[8] if self.ciudad else row[7]), 202 'equipamiento_hogar': check_val_data(row[9] if self.ciudad else row[8]), 203 'salud': check_val_data(row[10] if self.ciudad else row[9]), 204 'transporte': check_val_data(row[11] if self.ciudad else row[10]), 205 'comunicaciones': check_val_data(row[12] if self.ciudad else row[11]), 206 'esparcimiento': check_val_data(row[13] if self.ciudad else row[12]), 207 'educacion': check_val_data(row[14] if self.ciudad else row[13]), 208 'restaurant_hotel': check_val_data(row[15] if self.ciudad else row[14]), 209 'bienes_servicios': check_val_data(row[16] if self.ciudad else row[15]) 210 }) 211 212 # Gestión de datos para el Índice por Sector de Origen 213 PreciosSector.objects.update_or_create(real_precios=real_p, defaults={ 214 'base': base, 215 'durables': check_val_data(row[17] if self.ciudad else row[16]), 216 'semi_durables': check_val_data(row[18] if self.ciudad else row[17]), 217 'no_durables': check_val_data(row[19] if self.ciudad else row[18]) 218 }) 219 220 # Gestión de datos para el Índice por Naturaleza y Durabilidad 221 PreciosNaturaleza.objects.update_or_create(real_precios=real_p, defaults={ 222 'base': base, 223 'bienes': check_val_data(row[20] if self.ciudad else row[19]), 224 'agricolas': check_val_data(row[21] if self.ciudad else row[20]), 225 'pesquero': check_val_data(row[22] if self.ciudad else row[21]), 226 'agroindustrial': check_val_data(row[23] if self.ciudad else row[22]), 227 'otros': check_val_data(row[24] if self.ciudad else row[23]) 228 }) 229 230 # Gestión de datos para el Índice por Servicios 231 PreciosServicios.objects.update_or_create(real_precios=real_p, defaults={ 232 'base': base, 233 'total': check_val_data(row[25] if self.ciudad else row[24]), 234 'basicos': check_val_data(row[26] if self.ciudad else row[25]), 235 'otros': check_val_data(row[27] if self.ciudad else row[26]) 236 }) 237 238 # Gestion de datos para el Índice por Núcleo Inflacionario 239 PreciosInflacionario.objects.update_or_create(real_precios=real_p, defaults={ 240 'base': base, 241 'nucleo': check_val_data(row[28] if self.ciudad else row[27]), 242 'alimentos': check_val_data(row[29] if self.ciudad else row[28]), 243 'textiles': check_val_data(row[30] if self.ciudad else row[29]), 244 'bienes': check_val_data(row[31] if self.ciudad else row[30]), 245 'servicios': check_val_data(row[32] if self.ciudad else row[31]) 246 }) 247 248 # Gestión de datos para el Índice de Productos Controlados y No Controlados 249 PreciosProductos.objects.update_or_create(real_precios=real_p, defaults={ 250 'base': base, 251 'controlados': check_val_data(row[33] if self.ciudad else row[32]), 252 'no_controlados': check_val_data(row[34] if self.ciudad else row[33]) 253 }) 254 255 except Exception as e: 256 errors = errors + "<li>%s</li>" % str(e) 257 258 i += 1 259 260 if errors: 261 message = str(_("Error procesando datos. Verifique su correo para detalles del error")) 262 load_data_msg = str(_("Error al procesar datos")) 263 264 265 ## Envia correo electronico al usuario indicando el estatus de la carga de datos 266 enviar_correo(user.email, 'gestion.informacion.load.mail', EMAIL_SUBJECT_LOAD_DATA, { 267 'load_data_msg': load_data_msg, 'administrador': administrador, 'admin_email': admin_email, 268 'errors': errors 269 }) 270 271 return {'result': result, 'message': message} 156 272 157 273 … … 211 327 ) 212 328 329 base = models.BooleanField(default=False, verbose_name=_("Indicador base")) 330 213 331 real_precios = models.ForeignKey(Precios, verbose_name=_("Sector Real")) 214 332 … … 232 350 ) 233 351 352 base = models.BooleanField(default=False, verbose_name=_("Indicador base")) 353 234 354 real_precios = models.ForeignKey(Precios, verbose_name=_("Sector Real")) 235 355 … … 260 380 max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Otros manufacturados") 261 381 ) 382 383 base = models.BooleanField(default=False, verbose_name=_("Indicador base")) 262 384 263 385 real_precios = models.ForeignKey(Precios, verbose_name=_("Sector Real")) … … 281 403 ) 282 404 405 base = models.BooleanField(default=False, verbose_name=_("Indicador base")) 406 283 407 real_precios = models.ForeignKey(Precios, verbose_name=_("Sector Real")) 284 408 … … 308 432 ) 309 433 434 base = models.BooleanField(default=False, verbose_name=_("Indicador base")) 435 310 436 real_precios = models.ForeignKey(Precios, verbose_name=_("Sector Real")) 311 437 … … 322 448 max_digits=18, decimal_places=2, default=0.0, verbose_name=_("No Controlados") 323 449 ) 450 451 base = models.BooleanField(default=False, verbose_name=_("Indicador base")) 324 452 325 453 real_precios = models.ForeignKey(Precios, verbose_name=_("Sector Real")) -
economico/templates/economico.precios.html
ref6d66a re9477bd 66 66 {% block extra_footer %} 67 67 <script> 68 /** 69 * Función que configura los filtros de acuerdo a la selección del usuario 70 */ 68 71 function set_filters() { 69 72 var filters = $("#filters"), json_filter = ''; … … 99 102 } 100 103 } 101 $(document).ready(function() {102 $('#{{ form.dominio.auto_id }}').on('change', function() {103 $(this).val().split('dominio: ' + $(this).val() + ",").join("");104 if ($(this).val() != "") {105 var filters = $("#filters");106 filters.val(filters.val() + 'dominio: ' + $(this).val() + ',');107 }108 });109 110 $('.download-file').on('click', function(e) {111 e.preventDefault();112 set_filters();113 });114 115 $('.upload-file').on('click', function(e) {116 e.preventDefault();117 118 var file = $("#file"), form_upload = $('#form-upload-file');119 file.click();120 file.on('change', function(e) {121 e.preventDefault();122 form_upload.ajaxForm({123 beforeSubmit: function(arr, $form, options) {124 set_filters();125 },126 type: 'post',127 dataType: 'json',128 success: function(response) {129 if (response.result) {130 bootbox.alert(response.message);131 }132 else {133 bootbox.alert(response.message);134 }135 },136 error: function(jqxhr, textStatus, error) {137 var err = textStatus + ", " + error;138 bootbox.alert( MSG_PETICION_AJAX_FALLIDA + err );139 console.log(MSG_PETICION_AJAX_FALLIDA + err);140 }141 });142 143 form_upload.submit();144 });145 146 });147 });148 104 </script> 149 105 {% endblock %}
Nota: Vea TracChangeset
para ayuda en el uso del visor de conjuntos de cambios.