Conjunto de cambios 7ac2da6 en seiven para economico


Ignorar:
Fecha y hora:
25/05/2017 15:39:20 (hace 7 años)
Autor:
Luis Barrios <nikeven@…>
Branches:
master, carga
Children:
907e448
Parents:
8abcf1c
Mensaje:

realizada carga masiva de tipo de cambio y Reserva

Ubicación:
economico
Ficheros:
7 editados

Leyenda

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

    r8abcf1c r7ac2da6  
    2525
    2626from base.constant import (
    27 <<<<<<< HEAD
    2827    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
    3429)
    3530from base.functions import cargar_anho_base
  • economico/models.py

    re1fea74 r7ac2da6  
    1919from django.utils.translation import ugettext_lazy as _
    2020from django.db.models import Q
    21 from datetime import datetime
     21from datetime import datetime, timedelta
    2222from itertools import islice , cycle
    2323
     
    10441044
    10451045    class Meta:
    1046         verbose_name = _('Demanda Agragada Externa')
     1046        verbose_name = _('Demanda Agregada Externa')
    10471047
    10481048#-----------------------------Económico Real - Oferta Global
     
    11611161    )
    11621162
    1163     oferta_externa = models.ForeignKey(OfertaGlobal, verbose_name=_('Oferta GLobal'))
     1163    oferta_global = models.ForeignKey(OfertaGlobal, verbose_name=_('Oferta GLobal'))
    11641164
    11651165    class Meta:
    11661166        verbose_name = _('Oferta Externa')
     1167
     1168#-----------------------------Economía - Externo - Reservas, Tipo de Cambio
     1169
     1170@python_2_unicode_compatible
     1171class 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
     1263class 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  
    2323                            <li>
    2424                                <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>
    2825                            </li>
    2926                        </ul>
  • economico/templates/economico.oferta.global.html

    r252e445 r7ac2da6  
    6262                <div class="col-xs-2 col-sm-2 col-md-2 col-lg-2">{{ form.periodo_anho_fin }}</div>
    6363            </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>
    6667    </div>
    6768{% endblock %}
     
    8889            }
    8990            if (periodo_trimestre_ini.val()) {
    90                 json_filter += "\"fecha__month__gte\": \"" + periodo_trimestre_ini.val() + "\",";
     91                json_filter += "\"trimestre_ini\": \"" + periodo_trimestre_ini.val() + "\",";
    9192            }
    9293            if (periodo_trimestre_fin.val()) {
    93                 json_filter += "\"fecha__month__lte\": \"" + periodo_trimestre_fin.val() + "\",";
     94                json_filter += "\"trimestre_fin\": \"" + periodo_trimestre_fin.val() + "\",";
    9495            }
    9596            if (periodo_anho_ini.val()) {
    96                 json_filter += "\"fecha__year__gte\": \"" + periodo_anho_ini.val() + "\",";
     97                json_filter += "\"anho_ini\": \"" + periodo_anho_ini.val() + "\",";
    9798            }
    9899            if (periodo_anho_fin.val()) {
    99                 json_filter += "\"fecha__year__lte\": \"" + periodo_anho_fin.val() + "\",";
     100                json_filter += "\"anho_fin\": \"" + periodo_anho_fin.val() + "\",";
    100101            }
    101102
     
    103104                json_filter = json_filter.slice(0, -1);
    104105                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                }
    105135            }
    106136        }
  • economico/templates/economico.reservas.tipo.cambio.html

    r3957a55 r7ac2da6  
    1616                <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">
    1717                    <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>
    2818                </div>
    2919            </div>
     
    4737                    </div>
    4838                </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>
    5239            </div>
    5340            <div class="row separador-row">
     
    6148                    </div>
    6249                </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>
    6650            </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           
    6858        </div>
    6959    </div>
    7060{% endblock %}
    7161
     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  
    3131    url(r'^cargar-datos/gastos/$', economico_views.gastos, name='economico-gastos'),
    3232    url(r'^cargar-datos/endeudamiento/$', economico_views.endeudamiento, name='economico-endeudamiento'),
    33 <<<<<<< HEAD
    3433    url(r'^cargar-datos/oferta-global/$', economico_views.oferta_global, name='economico-oferta-global'),
    35 =======
    3634    url(r'^cargar-datos/cuenta-capital/$', economico_views.capital, name='economico-cuenta-capital'),
    37 >>>>>>> 8ec1e940e97a174e635684a32f42258a345e81c7
    3835]
    3936
  • economico/views.py

    r8abcf1c r7ac2da6  
    205205    form = ExternoReservaCambioForm()
    206206
    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    })
    208210
    209211
Nota: Vea TracChangeset para ayuda en el uso del visor de conjuntos de cambios.