Commits

Mariano Falcón  committed 87fa8bd

Gastos agregado a reporte

  • Participants
  • Parent commits bc98af3

Comments (0)

Files changed (4)

File cashflow/views.py

     GASTO = 1
     ENMANO = 2
     transacs_en_fechas = []
+    dic_tx_ing = {}
+    dic_tx_eg = {}
     txs = cuenta.transacciones.order_by('fecha')
     #txs = Transaccion.objects.order_by('fecha')
     for tx in txs:
         mesanio = (tx.fecha.month, tx.fecha.year)
         if tx.frecuencia == 0:
             if tx.tipo == 0:
+                dic_tx_ing[tx] = 0
                 info_mes[mesanio][INGRESO] += tx.monto
                 if tx.categoria:
                     info_cat[(tx.categoria, mesanio[0], mesanio[1])] += tx.monto
             else:
+                dic_tx_eg[tx] = 0
                 info_mes[mesanio][GASTO] += tx.monto
                 if tx.categoria:
                     info_cat[(tx.categoria, mesanio[0], mesanio[1])] += tx.monto
-            if mesanio in lista_m_a:
+            if mesanio in lista_m_a and tipo == 0: # corregir esta serie de negradas
+                dic_tx_ing[tx] += tx.monto
+                if tx not in transacs_en_fechas:
+                    transacs_en_fechas.append(tx)
+            elif mesanio in lista_m_a and tipo ==1:
+                dic_tx_eg[tx] += tx.monto
                 if tx not in transacs_en_fechas:
                     transacs_en_fechas.append(tx)
         elif tx.frecuencia == 4:
             dif = meses_dif + (anios_dif*12)
             rango = dif + 1
             #rango = dif + 2
+            if tx.tipo == 0:
+                dic_tx_ing[tx] = 0
+            else:
+                dic_tx_eg[tx] = 0
             for i in range(rango):
                 fch = tx.fecha+relativedelta.relativedelta(months=+i)
-                if (fch.month, fch.year) in lista_m_a:
-                    if tx not in transacs_en_fechas:
-                        transacs_en_fechas.append(tx)
                 if tx.tipo == 0:
                     info_mes[(fch.month,fch.year)][INGRESO] += tx.monto
                     if tx.categoria:
                     info_mes[(fch.month,fch.year)][GASTO] += tx.monto
                     if tx.categoria:
                         info_cat[(tx.categoria, fch.month, fch.year)] += tx.monto
+
+                if (fch.month, fch.year) in lista_m_a and tipo == 0:
+                    dic_tx_ing[tx] += tx.monto
+                    if tx not in transacs_en_fechas:
+                        transacs_en_fechas.append(tx)
+                elif (fch.month, fch.year) in lista_m_a and tipo == 1:
+                    dic_tx_eg[tx] += tx.monto
+                    if tx not in transacs_en_fechas:
+                        transacs_en_fechas.append(tx)
+
+
         elif tx.frecuencia == 5:
             meses_dif = relativedelta.relativedelta(tx.termina, tx.fecha).months
             if tx.termina.day < tx.fecha.day:
             dif = meses_dif + (anios_dif*12)
             rango = dif + 1
             #rango = dif + 2
+            if tx.tipo == 0:
+                dic_tx_ing[tx] = 0
+            else:
+                dic_tx_eg[tx] = 0
             for i in range(0, rango, 2): # lo unico que cambia de 4 ?
                 fch = tx.fecha+relativedelta.relativedelta(months=+i)
-                if (fch.month, fch.year) in lista_m_a:
-                    if tx not in transacs_en_fechas:
-                        transacs_en_fechas.append(tx)
                 if tx.tipo == 0:
+                    dic_tx_ing[tx] = 0
                     info_mes[(fch.month,fch.year)][INGRESO] += tx.monto
                     if tx.categoria:
                         info_cat[(tx.categoria, fch.month, fch.year)] += tx.monto
                     info_mes[(fch.month,fch.year)][GASTO] += tx.monto
                     if tx.categoria:
                         info_cat[(tx.categoria, fch.month, fch.year)] += tx.monto
+                
+                if (fch.month, fch.year) in lista_m_a and tipo == 0:
+                    dic_tx_ing[tx] += tx.monto
+                    if tx not in transacs_en_fechas:
+                        transacs_en_fechas.append(tx)
+                
+                elif (fch.month, fch.year) in lista_m_a and tipo == 1:
+                    dic_tx_eg[tx] += tx.monto
+                    if tx not in transacs_en_fechas:
+                        transacs_en_fechas.append(tx)
+        
         elif tx.frecuencia == 6:
             meses_dif = relativedelta.relativedelta(tx.termina, tx.fecha).months
             if tx.termina.day < tx.fecha.day:
             dif = meses_dif + (anios_dif*12)
             rango = dif + 1
             #rango = dif + 2
+            if tx.tipo == 0:
+                dic_tx_ing[tx] = 0
+            else:
+                dic_tx_eg[tx] = 0
+
             for i in range(0, rango, 3): # lo unico que cambia de 4
                 fch = tx.fecha+relativedelta.relativedelta(months=+i)
-                if (fch.month, fch.year) in lista_m_a:
-                    if tx not in transacs_en_fechas:
-                        transacs_en_fechas.append(tx)
                 if tx.tipo == 0:
+                    dic_tx_ing[tx] = 0
                     info_mes[(fch.month,fch.year)][INGRESO] += tx.monto
                     if tx.categoria:
                         info_cat[(tx.categoria, fch.month, fch.year)] += tx.monto
                     info_mes[(fch.month,fch.year)][GASTO] += tx.monto
                     if tx.categoria:
                         info_cat[(tx.categoria, fch.month, fch.year)] += tx.monto
+                if (fch.month, fch.year) in lista_m_a and tipo == 0:
+                    dic_tx_ing[tx] += tx.monto
+                    if tx not in transacs_en_fechas:
+                        transacs_en_fechas.append(tx)
+                elif (fch.month, fch.year) in lista_m_a and tipo == 1:
+                    dic_tx_eg[tx] += tx.monto
+                    if tx not in transacs_en_fechas:
+                        transacs_en_fechas.append(tx)
+
             
     import operator
     thelist = []
 
     request.session['lista'] = lista
 
-    pdb.set_trace()
-    ingresos = []
-    gastos = []
+    ing_dic = {}
+    for key in dic_tx_ing.iterkeys():
+        if not key.categoria:
+            ing_dic[key] = key.monto
+        else:
+            if key.categoria in ing_dic:
+                ing_dic[key.categoria] += dic_tx_ing[key]
+            else:
+                 ing_dic[key.categoria] = dic_tx_ing[key]
+    chart_ing = [] 
+    for key in ing_dic.iterkeys():
+        chart_ing.append((key.nombre, ing_dic[key]))
+
+    '''
+    gastos_dic = {}
+    
+    for key in dic_tx_ing.iterkeys():
+        if not key.categoria:
+            ing_dic[key] = key.monto
+        else:
+            if key.categoria in ing_dic:
+                ing_dic[key.categoria] += dic_tx_ing[key]
+            else:
+                 ing_dic[key.categoria] = dic_tx_ing[key]
+    
+    chart_gastos = [] 
+    for key in ing_dic.iterkeys():
+        chart_ing.append((key.nombre, ing_dic[key]))
+
+    
     for cat in cats_en_fechas_ing:
         nombre = cat.nombre
-            
+        mon_tot = 0
+        for tx in transacs_en_fechas: # no
+            if tx.categoria == cat:
+                mont_tot += tx.monto
+        tx_ing_list.append(nombre, mon_tot)
+    '''
 
     context = {
         'fechas': lista_fechas, # [datetime.date] fechas en el rango
-        'info_mes': lista, # [(mes,anio):[in,eg,enma]] todas las fechas ordenadas
+        'info_mes': lista, # [[mes,anio, in,eg,enma]] todas las fechas ordenadas
         'txs': transacciones,
         'min': min, #datetime menor mes actual
         'max': max,
         'cats_eg': cats_en_fechas_eg,
         'cuentas': cuentas,
         'cuenta': cuenta,
+        'ingresos': chart_ing,
     }
     return render_to_response(
         'cashflow/reportes.html',

File pylse

Binary file modified.
     'django.contrib.messages',
     'django.contrib.admin',
     'cashflow',
-    'billable',
     'registration', 
     'south',
 )

File templates/cashflow/reportes.html

 {% block title %}Reportes - {{ block.super }}{% endblock %}
 
 {% block extra_head %}
-    <!--[if IE]><script language="javascript" type="text/javascript" src="/media/js/excanvas.js"></script><![endif]-->
-    <script language="javascript" type="text/javascript" src="/media/js/jquery.jqplot.js"></script>
-    <link rel="stylesheet" type="text/css" href="/media/css/jquery.jqplot.css" />
-    <script type="text/javascript" src="/media/js/jqplot.categoryAxisRenderer.min.js"></script>
-    <script type="text/javascript" src="/media/js/jqplot.barRenderer.min.js"></script>
-    
-    <script class="code" type="text/javascript">$(document).ready(function(){
-    line1 = [1]; // 
-    line2 = [2];
-    plot3 = $.jqplot('chart1', [line1, line2], {
-    legend:{show:true, location:'ne'},
-    title:'Ingresos',
-    seriesColors: [ "#4bb2c5", "#c5b47f", "#EAA228", "#579575", "#839557", "#958c12",
-        "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc"],
-    seriesDefaults:{
-        renderer:$.jqplot.BarRenderer, 
-        rendererOptions:{barDirection:'horizontal', barPadding: 4, barMargin:12}, 
-        shadowAngle:135},
-    series:[
-        {label:'Cats'}, // Nombre ingreso (categoria o tx sinc cat)
-        {label:'Dogs'}
-    ],
-    axes:{
-        xaxis:{min:0}, 
-        //yaxis:{
-            //renderer:$.jqplot.CategoryAxisRenderer, 
-            //ticks:['Once', 'Twice', 'Three Times', 'More']
-        //}
-    }
+<script type="text/javascript" src="http://www.google.com/jsapi"></script>
+<script type="text/javascript">
+    google.load("visualization", "1", {packages:["corechart"]});
+    google.setOnLoadCallback(function() {
+        var dataIng = new google.visualization.DataTable();
+        dataIng.addColumn('string', 'Ingresos');
+        dataIng.addColumn('number', 'Monto');
+        dataIng.addRows({{ ingresos|length }});
+
+        {% for ing in ingresos %}  
+          //dataIng.setValue('fila(0)', columna(Ingresos=0), valor)
+            dataIng.setValue({{ forloop.counter0 }}, 0, '{{ ing.0 }}');
+            dataIng.setValue({{ forloop.counter0 }}, 1, {{ ing.1 }});
+        {% endfor %}
+
+        var chartIng = new
+        google.visualization.BarChart(document.getElementById('ingresos'));
+        chartIng.draw(dataIng, 
+                    {
+                        width: 620, height: 400, 
+                        legend:'Ingresos',
+                        colors:['red', 'green', 'blue', 'brown']
+                    }                    
+                   );
+        
+        {% comment %}
+        var dataEg = new google.visualization.DataTable();
+        dataEg.addColumn('string', 'Gastos');
+        dataEg.addColumn('number', 'Monto');
+        dataEg.addRows({{ egresos|length }});
+
+        {% for eg in egresos %}  
+          //dataEg.setValue('fila(0)', columna(Ingresos=0), valor)
+            dataEg.setValue({{ forloop.counter0 }}, 0, '{{ eg.0 }}');
+            dataEg.setValue({{ forloop.counter0 }}, 1, {{ eg.1 }});
+        {% endfor %}
+
+        var chartEg = new
+        google.visualization.BarChart(document.getElementById('gastos'));
+        chartEg.draw(dataEg, 
+                    {
+                        width: 620, height: 400, 
+                        legend:'Ingresos',
+                        colors:['blue', 'brown']
+                    }                    
+                   );
+        {% endcomment %}
+        
+        var dataBal = new google.visualization.DataTable();
+        dataBal.addColumn('string', 'Mes');
+        dataBal.addColumn('number', 'Ingresos');
+        dataBal.addColumn('number', 'Gastos');
+        dataBal.addColumn('number', 'Efectivo');
+        dataBal.addRows({{ info_mes|length }});
+
+        {% for mes in info_mes %}  
+          //dataIng.setValue('fila(0)', columna(Ingresos=0), valor)
+            dataBal.setValue({{ forloop.counter0 }}, 0, '{{ mes.0 }}');
+            dataBal.setValue({{ forloop.counter0 }}, 1, {{ mes.2 }});
+            dataBal.setValue({{ forloop.counter0 }}, 2, {{ mes.3 }});
+            dataBal.setValue({{ forloop.counter0 }}, 3, {{ mes.4 }});
+        {% endfor %}
+
+        var chartBal = new
+        google.visualization.AreaChart(document.getElementById('balance'));
+        chartBal.draw(dataBal, 
+                    {
+                        width: 620, height: 400, title: 'Balance Mensual', 
+                        colors:['green', 'red', 'blue']
+                    }                    
+                   );
+
     });
-});
-    </script>
-    <script class="code" type="text/javascript">$(document).ready(function(){
-    {% comment %}
-    Necesito la siguiente informacion para armar los graficos:
-    label: Nombre ingreso o categoria dentro de _fechas
-    line: De c/ingreso o categoria, la sumatoria dentro de _fechas
-    Ej: ingresos = [ ('sueldo', 1789), ('freelance', 5443),]
-    {% endcomment %}
-    line1 = [[1,1], [4,2], [9,3], [16,4]];
-    line2 = [[25,1], [12.5,2], [6.25,3], [3.125,4]];
-    plot3 = $.jqplot('chart2', [line1, line2], {
-    legend:{show:true, location:'ne'},
-    title:'Gastos',
-    seriesColors: [ "#4bb2c5", "#c5b47f", "#EAA228", "#579575", "#839557", "#958c12",
-        "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc"],
-    seriesDefaults:{
-        renderer:$.jqplot.BarRenderer, 
-        rendererOptions:{barDirection:'horizontal', barPadding: 6, barMargin:15}, 
-        shadowAngle:135},
-    series:[
-        {label:'Cats'},  
-        {label:'Dogs'}
-    ],
-    axes:{
-        xaxis:{min:0}, 
-        yaxis:{
-            renderer:$.jqplot.CategoryAxisRenderer, 
-            ticks:['Once', 'Twice', 'Three Times', 'More']
-        }
-    }
-    });
-});
-    </script>
-    <script class="code" type="text/javascript">$(document).ready(function(){
-    var line1 = [];
-    var line2 = [];
-    var line3 = [];
-    var meses = [];
-    {% for fecha in info_mes %}
-        line1.push({{ fecha.2 }});
-        line2.push({{ fecha.3 }});
-        line3.push({{ fecha.4 }});
-    {% endfor %}
-    {% for fecha in fechas %}
-        meses.push("{{ fecha|date:"F" }}");
-    {% endfor %}
-    plot2 = $.jqplot('chart3', [line1, line2, line3], {
-    legend:{show:true, location:'ne', xoffset:55},
-    title:'CashFlow',
-    seriesColors: [ "#008500", "#ff0000", "#1240ab"],
-    seriesDefaults:{
-        renderer:$.jqplot.BarRenderer, 
-        rendererOptions:{barPadding: 8, barMargin: 20}
-    },
-    series:[
-        {label:'Ingresos'}, 
-        {label:'Gastos'}, 
-        {label:'Efectivo'}
-    ],
-    axes:{
-        xaxis:{
-            renderer:$.jqplot.CategoryAxisRenderer, 
-            ticks: meses // Meses
-        }, 
-        yaxis:{min:0}
-    }
-    });
-});
-    </script>
+</script>
+
 {% endblock %}
 
 {% block main_content %}
     </div>
     <div id="main">
         <h1>Reportes</h1>
-        <div id="contenedor">        
-            <div id="chart1" class="graficos"></div>
-            <div id="chart2" class="graficos"></div>
+        <div id="contenedor">
+            <div id="ingresos"></div>
             <div id="cuentas">
                 <ul>
                 Cuentas:
                 {% for c in cuentas %}
-                    <li><a class="nav" href={% url cs_reportes cuenta.nombre %}>{{ cuenta.nombre }}</a></li>
+                    <li><a class="nav" href={% url cs_reportes c.nombre %}>{{ c.nombre }}</a></li>
                 {% endfor %}
                 </ul>
             </div>
-            <div id="chart3" class="chart"></div>
+            <div id="ingresos"></div>
+            <div id="balance"></div>
+
+
         </div>
     </div>
 {% endblock %}