- Fecha y hora:
- 25/05/2017 15:39:20 (hace 7 años)
- Branches:
- master, carga
- Children:
- 907e448
- Parents:
- 8abcf1c
- Ubicación:
- economico
- Ficheros:
-
- 7 editados
Leyenda
- No modificado
- Añadido
- Eliminado
-
economico/forms.py
r8abcf1c r7ac2da6 25 25 26 26 from base.constant import ( 27 <<<<<<< HEAD28 27 DOMINIO_PRECIOS, DOMINIO_PIB, DOMINIO_AGREGADO_MONETARIO, TIPO_PIB, TIPO_DEMANDA_GLOBAL, TIPO_OFERTA_GLOBAL, TRIMESTRES, MESES, 29 DOMINIO_COMERCIAL, DOMINIO_CAMBIO 30 ======= 31 DOMINIO_PRECIOS, DOMINIO_PIB, DOMINIO_AGREGADO_MONETARIO, TIPO_PIB, TIPO_DEMANDA_GLOBAL, TRIMESTRES, MESES, 32 DOMINIO_COMERCIAL, DOMINIO_CAMBIO, DOMINIO_CUENTA_CAPITAL 33 >>>>>>> 8ec1e940e97a174e635684a32f42258a345e81c7 28 DOMINIO_CUENTA_CAPITAL,DOMINIO_CAMBIO,DOMINIO_COMERCIAL 34 29 ) 35 30 from base.functions import cargar_anho_base -
economico/models.py
re1fea74 r7ac2da6 19 19 from django.utils.translation import ugettext_lazy as _ 20 20 from django.db.models import Q 21 from datetime import datetime 21 from datetime import datetime, timedelta 22 22 from itertools import islice , cycle 23 23 … … 1044 1044 1045 1045 class Meta: 1046 verbose_name = _('Demanda Agr agada Externa')1046 verbose_name = _('Demanda Agregada Externa') 1047 1047 1048 1048 #-----------------------------Económico Real - Oferta Global … … 1161 1161 ) 1162 1162 1163 oferta_ externa= models.ForeignKey(OfertaGlobal, verbose_name=_('Oferta GLobal'))1163 oferta_global = models.ForeignKey(OfertaGlobal, verbose_name=_('Oferta GLobal')) 1164 1164 1165 1165 class Meta: 1166 1166 verbose_name = _('Oferta Externa') 1167 1168 #-----------------------------Economía - Externo - Reservas, Tipo de Cambio 1169 1170 @python_2_unicode_compatible 1171 class TipoCambio(models.Model): 1172 1173 ## Fecha del registro 1174 fecha = models.DateField(null=True, verbose_name=_("Fecha")) 1175 1176 ## Tasa de cambio para la compra 1177 tcn_compra = models.DecimalField(max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Tasa de cambio para la compra")) 1178 1179 ## Tasa de cambio para la venta 1180 tcn_venta = models.DecimalField(max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Tasa de cambio para la venta")) 1181 1182 def gestion_init(self, *args, **kwargs): 1183 """! 1184 Método que permite descargar un archivo con los datos a gestionar 1185 1186 @author Ing. Luis Barrios (lbarrios at cenditel.gob.ve) 1187 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 1188 @date 24-05-2017 1189 @param self <b>{object}</b> Objeto que instancia la clase 1190 @param args <b>{tupla}</b> Tupla con argumentos opcionales 1191 @param kwargs <b>{dic}</b> Diccionario con filtros opcionales 1192 @return Devuelve los datos a incluír en el archivo 1193 """ 1194 1195 fields = [ 1196 [ 1197 {'tag': str(_("Fecha")), 'color': 'indigo', 'text_color': 'white', 'cabecera': True}, 1198 {'tag': str(_("TCN Compra")), 'color': 'orange', 'text_color': 'white', 'cabecera': True}, 1199 {'tag': str(_("TCN Venta")), 'color': 'orange', 'text_color': 'white', 'cabecera': True}, 1200 ] 1201 ] 1202 1203 """ 1204 colocar en el archivo de salida las fechas excepto fines de semana segun la seleccion del usuario 1205 """ 1206 1207 inicio=datetime.strptime(kwargs['start_date'], "%d/%m/%Y") 1208 fin=datetime.strptime(kwargs['end_date'], "%d/%m/%Y") 1209 delta = timedelta(days=1) 1210 while inicio <= fin: 1211 if inicio.weekday() < 5: 1212 fields.append([ {'tag': str(_(str(inicio.strftime('%d/%m/%Y'))))}]) 1213 inicio+= delta 1214 1215 return {'fields': fields, 'output': 'tipo-cambio'} 1216 1217 1218 def gestion_process(self, file, user, *args, **kwargs): 1219 """! 1220 Método que permite cargar y gestionar datos 1221 1222 @author Ing. Luis Barrios (lbarrios at cenditel.gob.ve) 1223 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 1224 @date 24-05-2017 1225 @param self <b>{object}</b> Objeto que instancia la clase 1226 @param file <b>{string}</b> Ruta y nombre del archivo a gestionar 1227 @param user <b>{object}</b> Objeto que contiene los datos del usuario que realiza la acción 1228 @param args <b>{tupla}</b> Tupla con argumentos opcionales 1229 @param kwargs <b>{dic}</b> Diccionario con filtros opcionales 1230 @return Devuelve el resultado de la acción con su correspondiente mensaje 1231 """ 1232 ## aqui debo recorrer todo el archivo excel y verificar las celdas 1233 1234 load_file = pyexcel.get_sheet(file_name=file) 1235 errors, result, message = '', True, '' 1236 load_data_msg = str(_("Datos Cargados")) 1237 1238 1239 for row in load_file.row[1:]: 1240 try: 1241 fecha=datetime.strptime(row[0], "%d/%m/%Y") 1242 tipo_cambio , created = TipoCambio.objects.update_or_create(fecha=fecha, defaults={ 1243 'tcn_compra': check_val_data(row[1]), 1244 'tcn_venta': check_val_data(row[2]), 1245 }) 1246 except Exception as e: 1247 errors += "- %s\n" % str(e) 1248 1249 if errors: 1250 message = str(_("Error procesando datos. Verifique su correo para detalles del error")) 1251 load_data_msg = str(_("Error al procesar datos del area Economía - Externo - Tipo de Cambio")) 1252 1253 1254 ## Envia correo electronico al usuario indicando el estatus de la carga de datos 1255 enviar_correo(user.email, 'gestion.informacion.load.mail', EMAIL_SUBJECT_LOAD_DATA, { 1256 'load_data_msg': load_data_msg, 'administrador': administrador, 'admin_email': admin_email, 1257 'errors': errors 1258 }) 1259 1260 return {'result': result, 'message': message} 1261 1262 @python_2_unicode_compatible 1263 class ReservasInternacionales(models.Model): 1264 1265 ## Fecha del registro 1266 fecha = models.DateField(null=True, verbose_name=_("Fecha")) 1267 1268 ## Reserva Internacional 1269 ri= models.DecimalField(max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Reserva Internacional")) 1270 1271 ## Reserva Internacional BCV 1272 ri_bcv = models.DecimalField(max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Reserva Internacional BCV")) 1273 1274 ## Reserva Internacional FEM 1275 ri_fem = models.DecimalField(max_digits=18, decimal_places=2, default=0.0, verbose_name=_("Reserva Internacional FEM")) 1276 1277 def save(self, *args, **kwargs): 1278 self.ri = self.ri_bcv + self.ri_fem 1279 super(ReservasInternacionales, self).save(*args, **kwargs) 1280 1281 def gestion_init(self, *args, **kwargs): 1282 """! 1283 Método que permite descargar un archivo con los datos a gestionar 1284 1285 @author Ing. Luis Barrios (lbarrios at cenditel.gob.ve) 1286 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 1287 @date 24-05-2017 1288 @param self <b>{object}</b> Objeto que instancia la clase 1289 @param args <b>{tupla}</b> Tupla con argumentos opcionales 1290 @param kwargs <b>{dic}</b> Diccionario con filtros opcionales 1291 @return Devuelve los datos a incluír en el archivo 1292 """ 1293 1294 fields = [ 1295 [ 1296 {'tag': str(_("Fecha")), 'color': 'indigo', 'text_color': 'white', 'cabecera': True}, 1297 {'tag': str(_("RI_BCV")), 'color': 'orange', 'text_color': 'white', 'cabecera': True}, 1298 {'tag': str(_("RI_FEM")), 'color': 'orange', 'text_color': 'white', 'cabecera': True}, 1299 ] 1300 ] 1301 1302 """ 1303 colocar en el archivo de salida las fechas excepto fines de semana segun la seleccion del usuario 1304 """ 1305 1306 inicio=datetime.strptime(kwargs['start_date'], "%d/%m/%Y") 1307 fin=datetime.strptime(kwargs['end_date'], "%d/%m/%Y") 1308 delta = timedelta(days=1) 1309 diff = 0 1310 while inicio <= fin: 1311 if inicio.weekday() < 5: 1312 fields.append([ {'tag': str(_(str(inicio.strftime('%d/%m/%Y'))))}]) 1313 inicio+= delta 1314 1315 return {'fields': fields, 'output': 'ReservasInternacionales'} 1316 1317 def gestion_process(self, file, user, *args, **kwargs): 1318 """! 1319 Método que permite cargar y gestionar datos 1320 1321 @author Ing. Luis Barrios (lbarrios at cenditel.gob.ve) 1322 @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a> 1323 @date 24-05-2017 1324 @param self <b>{object}</b> Objeto que instancia la clase 1325 @param file <b>{string}</b> Ruta y nombre del archivo a gestionar 1326 @param user <b>{object}</b> Objeto que contiene los datos del usuario que realiza la acción 1327 @param args <b>{tupla}</b> Tupla con argumentos opcionales 1328 @param kwargs <b>{dic}</b> Diccionario con filtros opcionales 1329 @return Devuelve el resultado de la acción con su correspondiente mensaje 1330 """ 1331 load_file = pyexcel.get_sheet(file_name=file) 1332 errors, result, message = '', True, '' 1333 load_data_msg = str(_("Datos Cargados")) 1334 1335 1336 for row in load_file.row[1:]: 1337 try: 1338 1339 reservas_internacionales , created = ReservasInternacionales.objects.update_or_create( fecha=row[0], ri_bcv=check_val_data(row[1]), ri_fem=check_val_data(row[2]) ) 1340 1341 ## Se crea o actualiza el objeto de Demanda Agregada Interna luego de validar el valor en la hoja de calculo 1342 1343 1344 except Exception as e: 1345 errors += "- %s\n" % str(e) 1346 1347 if errors: 1348 message = str(_("Error procesando datos. Verifique su correo para detalles del error")) 1349 load_data_msg = str(_("Error al procesar datos del area Economía - Externo - Reservas")) 1350 1351 1352 ## Envia correo electronico al usuario indicando el estatus de la carga de datos 1353 enviar_correo(user.email, 'gestion.informacion.load.mail', EMAIL_SUBJECT_LOAD_DATA, { 1354 'load_data_msg': load_data_msg, 'administrador': administrador, 'admin_email': admin_email, 1355 'errors': errors 1356 }) 1357 1358 return {'result': result, 'message': message} -
economico/templates/economico.menu.area.html
r8abcf1c r7ac2da6 23 23 <li> 24 24 <a href="{% url 'economico-demanda-global' %}">{% trans 'Demanda Global' %}</a> 25 </li>26 <li>27 <a href="{% url 'economico-oferta-global' %}">{% trans 'Oferta Global' %}</a>28 25 </li> 29 26 </ul> -
economico/templates/economico.oferta.global.html
r252e445 r7ac2da6 62 62 <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2">{{ form.periodo_anho_fin }}</div> 63 63 </div> 64 {% include 'base.down.up.files.html' with app='economico' mod='OfertaGlobal' %} 65 </div> 64 <div id='oculto' style='display:none;'> 65 {% include 'base.down.up.files.html' with app='economico' mod='OfertaGlobal' %} 66 </div> 66 67 </div> 67 68 {% endblock %} … … 88 89 } 89 90 if (periodo_trimestre_ini.val()) { 90 json_filter += "\" fecha__month__gte\": \"" + periodo_trimestre_ini.val() + "\",";91 json_filter += "\"trimestre_ini\": \"" + periodo_trimestre_ini.val() + "\","; 91 92 } 92 93 if (periodo_trimestre_fin.val()) { 93 json_filter += "\" fecha__month__lte\": \"" + periodo_trimestre_fin.val() + "\",";94 json_filter += "\"trimestre_fin\": \"" + periodo_trimestre_fin.val() + "\","; 94 95 } 95 96 if (periodo_anho_ini.val()) { 96 json_filter += "\" fecha__year__gte\": \"" + periodo_anho_ini.val() + "\",";97 json_filter += "\"anho_ini\": \"" + periodo_anho_ini.val() + "\","; 97 98 } 98 99 if (periodo_anho_fin.val()) { 99 json_filter += "\" fecha__year__lte\": \"" + periodo_anho_fin.val() + "\",";100 json_filter += "\"anho_fin\": \"" + periodo_anho_fin.val() + "\","; 100 101 } 101 102 … … 103 104 json_filter = json_filter.slice(0, -1); 104 105 filters.val(json_filter); 106 } 107 108 /** 109 * Aquí se realiza las validaciones de la selección que realice el usuario. 110 */ 111 112 if (tipo.val()!='' && anho_base.val()!='' && periodo_trimestre_ini.val()!='' && periodo_trimestre_fin.val()!='' && periodo_anho_ini.val()!='' && periodo_anho_fin.val()!=''){ 113 114 if (tipo.val() == 'OG'){ 115 116 if (parseInt(periodo_anho_fin.val()) == parseInt(periodo_anho_ini.val()) && parseInt(periodo_trimestre_ini.val()) <= parseInt(periodo_trimestre_fin.val())){ 117 118 document.getElementById('oculto').style.display = 'block'; 119 } 120 121 else if (parseInt(periodo_anho_fin.val()) > parseInt(periodo_anho_ini.val())){ 122 123 document.getElementById('oculto').style.display = 'block'; 124 } 125 126 else{ 127 bootbox.alert('Verificar su selección'); 128 document.getElementById('oculto').style.display = 'none'; 129 } 130 } 131 else{ 132 bootbox.alert('Verificar su selección'); 133 document.getElementById('oculto').style.display = 'none'; 134 } 105 135 } 106 136 } -
economico/templates/economico.reservas.tipo.cambio.html
r3957a55 r7ac2da6 16 16 <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2 col-xs-offset-8 col-sm-offset-8 col-md-offset-8 col-lg-offset-8 text-center reservas"> 17 17 <label class="control-label">{% trans 'Diarias' %}</label> 18 </div>19 <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1 col-xs-offset-8 col-sm-offset-8 col-md-offset-8 col-lg-offset-8 text-center reservas"20 style="display:none">21 <label class="control-label">{% trans 'Semana' %}</label>22 </div>23 <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1 text-center reservas" style="display:none">24 <label class="control-label">{% trans 'Mes' %}</label>25 </div>26 <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1 text-center reservas" style="display:none">27 <label class="control-label">{% trans 'Año' %}</label>28 18 </div> 29 19 </div> … … 47 37 </div> 48 38 </div> 49 <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1 reservas" style="display:none">{{ form.periodo_semana_ini }}</div>50 <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1 reservas" style="display:none">{{ form.periodo_mes_ini }}</div>51 <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1 reservas" style="display:none">{{ form.periodo_anho_ini }}</div>52 39 </div> 53 40 <div class="row separador-row"> … … 61 48 </div> 62 49 </div> 63 <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1 reservas" style="display:none">{{ form.periodo_semana_ini }}</div>64 <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1 reservas" style="display:none">{{ form.periodo_mes_ini }}</div>65 <div class="col-xs-1 col-sm-1 col-md-1 col-lg-1 reservas" style="display:none">{{ form.periodo_anho_ini }}</div>66 50 </div> 67 {% include 'base.down.up.files.html' %} 51 <div id='TipoCambio' style='display:none;'> 52 {% include 'base.down.up.files.html' with app='economico' mod='TipoCambio' %} 53 </div> 54 <div id='ReservasInternacionales' style='display:none;'> 55 {% include 'base.down.up.files.html' with app='economico' mod='ReservasInternacionales' %} 56 </div> 57 68 58 </div> 69 59 </div> 70 60 {% endblock %} 71 61 62 {% block extra_footer %} 63 64 <script> 65 /** 66 * @brief El Script configura todos los filtros que seleccione el usuario y ademas de ello hace las validaciones pertinentes sobre dicha selección 67 * 68 * @author Ing. Luis Barrios (lbarrios at cenditel.gob.ve) 69 * @copyright GNU/GPLv2 70 * @date 25-05-2017 71 * @return me devuelve la seleccion que realiza el usuario luego de verificarla 72 */ 73 74 var dominio = $('#{{ form.dominio.auto_id }}'); 75 var start_date = $("#{{ form.start_date.auto_id }}"); 76 var end_date = $("#{{ form.end_date.auto_id }}"); 77 78 79 /** 80 * Función que configura los filtros de acuerdo a la selección del usuario 81 */ 82 function set_filters() { 83 var filters = $("#filters"), json_filter = ''; 84 85 if (dominio.val()) { 86 json_filter += "\"dominio\": \"" + dominio.val() + "\","; 87 } 88 if (start_date.val()) { 89 json_filter += "\"start_date\": \"" + start_date.val() + "\","; 90 } 91 if (end_date.val()) { 92 json_filter += "\"end_date\": \"" + end_date.val() + "\","; 93 } 94 95 if (json_filter) { 96 json_filter = json_filter.slice(0, -1); 97 filters.val(json_filter); 98 } 99 100 /** 101 * Aquí se realiza las validaciones de la selección que realice el usuario. 102 */ 103 104 if(dominio.val()=='TC'){ 105 if (Date.parse(start_date.val())<=Date.parse(end_date.val())){ 106 document.getElementById('TipoCambio').style.display = 'block'; 107 document.getElementById('ReservasInternacionales').style.display = 'none'; 108 } 109 else{ 110 bootbox.alert('La fecha inicial no puede mayor a la fecha final '); 111 document.getElementById('TipoCambio').style.display = 'none'; 112 document.getElementById('ReservasInternacionales').style.display = 'none'; 113 } 114 } 115 116 if(dominio.val()=='RI'){ 117 if (Date.parse(start_date.val())<=Date.parse(end_date.val())){ 118 document.getElementById('ReservasInternacionales').style.display = 'block'; 119 document.getElementById('TipoCambio').style.display = 'none'; 120 } 121 else{ 122 bootbox.alert('La fecha inicial no puede mayor a la fecha final '); 123 document.getElementById('TipoCambio').style.display = 'none'; 124 document.getElementById('ReservasInternacionales').style.display = 'none'; 125 } 126 } 127 if(dominio.val()==''){ 128 bootbox.alert('Debe seleccionar un Dominio'); 129 document.getElementById('TipoCambio').style.display = 'none'; 130 document.getElementById('ReservasInternacionales').style.display = 'none'; 131 } 132 } 133 /** 134 * A medida que se realizan las selecciones voy modificando los filtros 135 */ 136 $(document).ready(function() { 137 dominio.on('change', function() {set_filters()}); 138 start_date.on('change', function() { set_filters() }); 139 end_date.on('change', function() { set_filters() }); 140 end_date.on('keyup',function() { set_filters() }); 141 142 }); 143 </script> 144 {% endblock %} 145 -
economico/urls.py
r8abcf1c r7ac2da6 31 31 url(r'^cargar-datos/gastos/$', economico_views.gastos, name='economico-gastos'), 32 32 url(r'^cargar-datos/endeudamiento/$', economico_views.endeudamiento, name='economico-endeudamiento'), 33 <<<<<<< HEAD34 33 url(r'^cargar-datos/oferta-global/$', economico_views.oferta_global, name='economico-oferta-global'), 35 =======36 34 url(r'^cargar-datos/cuenta-capital/$', economico_views.capital, name='economico-cuenta-capital'), 37 >>>>>>> 8ec1e940e97a174e635684a32f42258a345e81c738 35 ] 39 36 -
economico/views.py
r8abcf1c r7ac2da6 205 205 form = ExternoReservaCambioForm() 206 206 207 return render(request, 'economico.reservas.tipo.cambio.html', {'form': form}) 207 return render(request, 'economico.reservas.tipo.cambio.html', { 208 'form': form, 'url_down': reverse('descargar_archivo'), 'url_up': reverse('cargar_archivo') 209 }) 208 210 209 211
Nota: Vea TracChangeset
para ayuda en el uso del visor de conjuntos de cambios.