Index: base/constant.py
===================================================================
--- base/constant.py	(revision 2037da0756d5d659d2b9779a9eaa167748659068)
+++ base/constant.py	(revision c079de32d5f012e252fbe160514208e7ae7c8a15)
@@ -36,5 +36,5 @@
 
 ## Asunto del mensaje de información sobre la carga de datos
-EMAIL_SUBJECT_LOAD_DATA = "Gestión de Datos - SEIVEN"
+EMAIL_SUBJECT_LOAD_DATA = "Gestion de Datos - SEIVEN"
 
 ## Asunto del mensaje de información sobre la carga de datos
Index: economico/forms.py
===================================================================
--- economico/forms.py	(revision 40567da9b8cbb16db63a5eeec0ba1203a899781b)
+++ economico/forms.py	(revision c079de32d5f012e252fbe160514208e7ae7c8a15)
@@ -189,5 +189,5 @@
     def __init__(self, *args, **kwargs):
         super(AnhoIniForm, self).__init__(*args, **kwargs)
-        self.fields['periodo_anho_ini'].choices = cargar_anho_base(anho_inicial='2007')
+        self.fields['periodo_anho_ini'].choices = cargar_anho_base(anho_inicial='1970')
 
 
@@ -214,5 +214,5 @@
     def __init__(self, *args, **kwargs):
         super(AnhoFinForm, self).__init__(*args, **kwargs)
-        self.fields['periodo_anho_fin'].choices = cargar_anho_base(anho_inicial='2007')
+        self.fields['periodo_anho_fin'].choices = cargar_anho_base(anho_inicial='1970')
 
 
Index: economico/models.py
===================================================================
--- economico/models.py	(revision 40567da9b8cbb16db63a5eeec0ba1203a899781b)
+++ economico/models.py	(revision c079de32d5f012e252fbe160514208e7ae7c8a15)
@@ -19,13 +19,15 @@
 from django.utils.translation import ugettext_lazy as _
 from django.db.models import Q
-from datetime import datetime, timedelta
+from datetime import datetime, date, time, timedelta
 from itertools import islice , cycle
 
 from base.constant import (
-    DOMINIO, PERIODICIDAD, TRIMESTRES, MESES, ECONOMICO_SUB_AREA, CONVERT_MES, EMAIL_SUBJECT_LOAD_DATA,
+    DOMINIO, PERIODICIDAD, TRIMESTRES, MESES, ECONOMICO_SUB_AREA, CONVERT_MES, EMAIL_SUBJECT_LOAD_DATA,EMAIL_SUBJECT_CM_RESULT,
     TIPO_BALANZA_COMERCIAL, DOMINIO_BALANZA_COMERCIAL, BALANZA_DATOS, INVERSION_CARTERA, SECTOR_DEUDA
 )
 from base.functions import enviar_correo, check_val_data
 from base.models import AnhoBase
+
+import calendar
 
 import pyexcel
@@ -91,4 +93,5 @@
             [
                 {'tag': str(_('Año')), 'cabecera': True}, {'tag': str(_('Mes')), 'cabecera': True}, {'tag': str(_('INPC')), 'cabecera': True},
+                
                 {'tag': str(_('(1) Alimentos y Bebidas no Alcoholicas')), 'cabecera': True},
                 {'tag': str(_('(2) Bebidas Alcoholicas y Tabaco')), 'cabecera': True},
@@ -104,7 +107,9 @@
                 {'tag': str(_('(12) Restaurant y Hotel')), 'cabecera': True},
                 {'tag': str(_('(13) Bienes y Servicios Diversos')), 'cabecera': True},
+
                 {'tag': str(_('Bienes durables')), 'cabecera': True},
                 {'tag': str(_('Bienes semidurables')), 'cabecera': True},
                 {'tag': str(_('Bienes no durables')), 'cabecera': True},
+
                 {'tag': str(_('Bienes')), 'cabecera': True},
                 {'tag': str(_('Agrícolas')), 'cabecera': True},
@@ -112,7 +117,9 @@
                 {'tag': str(_('Agroindustrial')), 'cabecera': True},
                 {'tag': str(_('Otros manufacturados')), 'cabecera': True},
+
                 {'tag': str(_('Total Servicios')), 'cabecera': True},
                 {'tag': str(_('Servicios Básicos')), 'cabecera': True},
                 {'tag': str(_('Otros Servicios')), 'cabecera': True},
+
                 {'tag': str(_('Núcleo Inflacionario (NI)')), 'cabecera': True},
                 {'tag': str(_('Alimentos Elaborados')), 'cabecera': True},
@@ -120,4 +127,5 @@
                 {'tag': str(_('Bienes industriales excepto alimentos y textiles')), 'cabecera': True},
                 {'tag': str(_('Servicios no administrados')), 'cabecera': True},
+
                 {'tag': str(_('Controlados')), 'cabecera': True},
                 {'tag': str(_('No Controlados')), 'cabecera': True}
@@ -133,4 +141,22 @@
                 kwargs['dominio'] = None
                 kwargs['ciudad'] = kwargs.pop('dominio')
+                lst=['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre']
+                x = int (kwargs['fecha__month__lte']) - int (kwargs['fecha__month__gte']) + 1 +  12 * (int(kwargs['fecha__year__lte']) - int(kwargs['fecha__year__gte']))
+                for i, val in enumerate(lst):
+                    if lst[int(kwargs['fecha__month__gte'])-1] in val:
+                        desired = list( islice( cycle( lst), i, i+x)) 
+                        tmp=0
+                        lolo=int (kwargs['fecha__year__gte'])
+                        aux=1
+                        for a in desired:
+                            aux1=''
+                            if a == 'Diciembre':
+                                aux1=lolo+tmp
+                                tmp=tmp+1
+                            else:
+                                aux1=lolo+tmp
+                            aux=aux+1
+                            fields.append([ {'tag': str(_(str(aux1)))}, {'tag': str(_(str(a)))}])
+
             else:
                 dominio, data_type = str(_('Ciudad')), 'C'
@@ -140,4 +166,30 @@
                 fields[0].insert(2, {'tag': '', 'cabecera': True})
                 fields[1].insert(2, {'tag': dominio, 'cabecera': True})
+
+                lst=['Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre']
+                lst1=['Caracas','Maracay','Ciudad Guayana','Barcelona -Pto la Cruz','Valencia','Barquisimeto','Maracaibo','Mérida','Maturín','San Cristóbal','Resto Nacional']
+
+                x = int (kwargs['fecha__month__lte']) - int (kwargs['fecha__month__gte']) + 1 +  12 * (int(kwargs['fecha__year__lte']) - int(kwargs['fecha__year__gte']))
+                for i, val in enumerate(lst):
+                    if lst[int(kwargs['fecha__month__gte'])-1] in val:
+                        desired = list( islice( cycle( lst), i, i+x)) 
+                        tmp=0
+                        lolo=int (kwargs['fecha__year__gte'])
+                        aux,aux2=1,0
+                        for a in desired:
+                            aux1=''
+                            if a == 'Diciembre':
+                                aux1=lolo+tmp
+                                tmp=tmp+1
+                            else:
+                                aux1=lolo+tmp
+                            aux=aux+1
+                            for q in range(0,11):
+                                if lst1[q] == 'Caracas':
+                                    fields.append([ {'tag': str(_(str(aux1))),'combine_row':11 }, {'tag': str(_(str(a))), 'combine_row1':11},{'tag': str(_(str(lst1[q])))}])
+                                else:
+                                    fields.append([{'tag':''},{'tag':''},{'tag': str(_(str(lst1[q])))}])
+
+
 
         elif not 'dominio' in kwargs or not kwargs['dominio'] == 'C':
@@ -1171,8 +1223,11 @@
         anho_base, errors, result, message = '', '', True, ''
         load_data_msg = str(_("Datos Cargados"))
+
+        self.anho_base=AnhoBase.objects.get(id=kwargs['anho_base'])
+        
         for row in range(1,len(load_file.row_range())):
             
             try:
-                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])
+                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])
                 ## Se crea  o actualiza el objeto de Demanda Agregada Interna luego de validar el valor en la hoja de calculo
 
@@ -1200,5 +1255,5 @@
 
         ## Envia correo electronico al usuario indicando el estatus de la carga de datos
-        enviar_correo(user.email, 'gestion.informacion.load.mail', EMAIL_SUBJECT_CM_RESULT, {
+        enviar_correo(user.email, 'gestion.informacion.load.mail', EMAIL_SUBJECT_LOAD_DATA, {
             'load_data_msg': load_data_msg, 'administrador': administrador, 'admin_email': admin_email,
             'errors': errors
Index: economico/templates/economico.precios.html
===================================================================
--- economico/templates/economico.precios.html	(revision fddad90cd56164057020a4c771898d2ce43b4c56)
+++ economico/templates/economico.precios.html	(revision c079de32d5f012e252fbe160514208e7ae7c8a15)
@@ -111,4 +111,25 @@
             periodo_anho_ini.on('change', function() { set_filters() });
             periodo_anho_fin.on('change', function() { set_filters() });
+
+            $('.fileinput-upload-button').click(function(event){
+                event.preventDefault();
+                var fdata = new FormData();
+                fdata.append('file',file.files[0]);
+                $.ajax({
+                    url: URL_CARGAR_ARCHIVO_CM+models,
+                    data: fdata,
+                    contentType: false,
+                    processData: false,
+                    type: 'POST',
+                    dataType: 'json',
+                    success: function(data){
+                        var msg = data.message ? data.result : data.error;
+                        bootbox.alert(msg);
+                    },
+                    error: function(error){
+                        console.log(error);
+                    }
+                });
+            });
         });
     </script>
Index: economico/templates/economico.reservas.tipo.cambio.html
===================================================================
--- economico/templates/economico.reservas.tipo.cambio.html	(revision 0dd457770683b1e6119067584ce6623d6eb57c92)
+++ economico/templates/economico.reservas.tipo.cambio.html	(revision c079de32d5f012e252fbe160514208e7ae7c8a15)
@@ -50,8 +50,8 @@
             </div>
             <div id='TipoCambio' style='display:none;'>
-                {% include 'base.down.up.files.html' with url_down='/gestion-informacion/ajax/descargar_archivo' url_up='/gestion-informacion/ajax/cargar_archivo' app='economico' mod='TipoCambio' %}    
+                {% include 'base.down.up.files.html' with app='economico' mod='TipoCambio'%}     
             </div>
             <div id='ReservasInternacionales' style='display:none;'>
-                {% include 'base.down.up.files.html' with url_down='/gestion-informacion/ajax/descargar_archivo' url_up='/gestion-informacion/ajax/cargar_archivo' app='economico' mod='ReservasInternacionales' %}   
+                {% include 'base.down.up.files.html' with app='economico' mod='ReservasInternacionales'%}  
             </div>
             
@@ -135,10 +135,30 @@
         */
             $(document).ready(function() {
-            dominio.on('change', function() {set_filters()});
-            start_date.on('change', function() { set_filters() });
-            end_date.on('change', function() { set_filters() });
-            end_date.on('keyup', function() { set_filters() });
+                dominio.on('change', function() {set_filters()});
+                start_date.on('change', function() { set_filters() });
+                end_date.on('change', function() { set_filters() });
+                end_date.on('keyup', function() { set_filters() });
 
-        });
+                $('.fileinput-upload-button').click(function(event){
+                event.preventDefault();
+                var fdata = new FormData();
+                fdata.append('file',file.files[0]);
+                $.ajax({
+                    url: URL_CARGAR_ARCHIVO_CM+models,
+                    data: fdata,
+                    contentType: false,
+                    processData: false,
+                    type: 'POST',
+                    dataType: 'json',
+                        success: function(data){
+                            var msg = data.message ? data.result : data.error;
+                            bootbox.alert(msg);
+                        },
+                        error: function(error){
+                            console.log(error);
+                        }
+                    });
+                });
+            });
     </script>
 {% endblock %}
Index: gestion_informacion/ajax.py
===================================================================
--- gestion_informacion/ajax.py	(revision 2037da0756d5d659d2b9779a9eaa167748659068)
+++ gestion_informacion/ajax.py	(revision c079de32d5f012e252fbe160514208e7ae7c8a15)
@@ -73,11 +73,11 @@
         modelo = apps.get_model(app, mod)
         workbook = xlwt.Workbook()
-        sheet = workbook.add_sheet("Datos")
+        sheet = workbook.add_sheet("Datos",cell_overwrite_ok=True)
         instance = modelo()
         datos = instance.gestion_init(**filter)
         i = 0
         for con in datos['fields']:
-            index_col = 0
-            style='align: horiz center;'
+            index_col= 0
+            style='align: horiz center; align: vert center;'
             for cabecera in con:
                 if 'color' in cabecera:    
@@ -87,7 +87,21 @@
                 font_bold = xlwt.easyxf(style)
                 sheet.write(i, index_col, cabecera['tag'], font_bold)
+                sheet.set_shrink()
+                
                 if 'cabecera' in cabecera:
                     sheet.col(i).width = int (333 * (len(cabecera['tag']) + 1))
-                index_col += 1
+                
+                if 'combine' in cabecera and cabecera['combine'] > 0:
+                    sheet.merge(i, i, index_col, (index_col + (cabecera['combine']-1)), font_bold)
+                    index_col = cabecera['combine'] + index_col
+
+                if 'dominio'in cabecera:
+                    sheet.write(i, 2, cabecera['tag'], font_bold)
+                if 'combine_row' in cabecera:
+                    sheet.write_merge(i, i+10, 0,0, cabecera['tag'],font_bold)
+                if 'combine_row1' in cabecera:
+                    sheet.write_merge(i, i+10, 1,1, cabecera['tag'],font_bold)
+                else:
+                    index_col += 1            
             i += 1
 
Index: seiven/database_config.py
===================================================================
--- seiven/database_config.py	(revision e4d39303aca69370a15b43d3d6df4c040cbfa786)
+++ seiven/database_config.py	(revision c079de32d5f012e252fbe160514208e7ae7c8a15)
@@ -4,5 +4,5 @@
         'ENGINE': 'django.db.backends.postgresql',
         'NAME': 'seiven',
-        'USER': 'postgres',
+        'USER': 'admin',
         'PASSWORD': '123456',
         'HOST': 'localhost',
Index: usuario.log.2017-07-17
===================================================================
--- usuario.log.2017-07-17	(revision c079de32d5f012e252fbe160514208e7ae7c8a15)
+++ usuario.log.2017-07-17	(revision c079de32d5f012e252fbe160514208e7ae7c8a15)
@@ -0,0 +1,3 @@
+2017-07-17 15:13:54,794 INFO     [modulo: views, funcion: acceso, linea: 99]. Acceso al sistema por el usuario [V17266285]
+2017-07-17 15:28:36,220 INFO     [modulo: views, funcion: salir, linea: 122]. El usuario [nikeven] salio del sistema
+2017-07-17 15:30:37,984 INFO     [modulo: views, funcion: acceso, linea: 99]. Acceso al sistema por el usuario [V17266285]
