~marcelo-escobal/geined/Alianza

« back to all changes in this revision

Viewing changes to calccon.py

  • Committer: Cualquier Desarrollador
  • Date: 2010-01-29 21:15:22 UTC
  • Revision ID: desarrollo@marte-20100129211522-u97qh9o90mhdap04
Importación inicial

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python
 
2
# -*- coding: utf-8 -*-
 
3
"""Calculo de consolidado"""
 
4
import cgi
 
5
import cgitb ; cgitb.enable()
 
6
import funciones
 
7
import htm
 
8
import datos
 
9
def calcular(frm):
 
10
    """Calcula el consolidado y lo va mostrando en una página"""
 
11
    if frm.has_key("ano") == False:
 
12
        htm.error_parametros("consol.php")
 
13
    else:
 
14
        ano = frm["ano"].value
 
15
        pag = funciones.Pagina("Procesando consolidado", 4)
 
16
        print "<h2>Por favor espere a que finalice el proceso...</h2>"
 
17
        print "<h3>Reseteando consolidado..."
 
18
        resetear_consolidado()
 
19
        print "OK</h3>"
 
20
        # aparentemente no sería necesaria la función FLUSH de PHP
 
21
        print "<h3>Calculando consolidado..."
 
22
        calcular_consolidado(ano)
 
23
        print "OK</h3>"
 
24
        print "<h3>Rellenando consolidado"
 
25
        rellenar_consolidado()
 
26
        print "OK</h3>"
 
27
        print "<h2>Proceso finalizado</h2>"
 
28
        htm.boton("Volver","consol.php")
 
29
        pag.fin()
 
30
def resetear_consolidado():
 
31
    """Limpia la tabla consolidado y genera nueva vacía"""
 
32
    meses = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "setiembre", "octubre", "noviembre", "diciembre"]
 
33
    htm.h3("Vaciando tabla  de Consolidado...")
 
34
    sql = "TRUNCATE TABLE consolidado"
 
35
    dat = datos.Datos()
 
36
    dat.cursor.execute(sql)
 
37
    cuentas = datos.Tabla("cuentas")
 
38
    cuentas.orden = " rubro "
 
39
    cuentas.filtrar()
 
40
    consolidado = datos.Tabla("consolidado")
 
41
    htm.h3("Llenando con datos del Plan de Cuentas...")
 
42
    for fila in cuentas.resultado:
 
43
        consolidado.registro["rubro"] = fila["rubro"]
 
44
        if len(fila["nombre"]) < 39:
 
45
            consolidado.registro["nombre"] = fila["nombre"]
 
46
        else:
 
47
            nombre = fila["nombre"]
 
48
            # OJO, hay una diferencia entre el largo de nombre en CUENTAS y en CONSOLIDADO
 
49
            nombre = nombre[0:38]
 
50
            consolidado.registro["nombre"] = nombre
 
51
        consolidado.registro["nivel"] = fila["nivel"]
 
52
        for item in meses:
 
53
            consolidado.registro[item] = 0
 
54
        consolidado.insertar()
 
55
def calcular_consolidado(ano):
 
56
    """Calcula el consolidado"""
 
57
    # ajustar para que calcule PARA ESTE AÑO
 
58
    meses = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "setiembre", "octubre", "noviembre", "diciembre"]
 
59
    transacciones = datos.Tabla("transacciones")
 
60
    transacciones.filtro = " YEAR(fecha) = '"+ ano + "'"
 
61
    transacciones.orden = " fecha "
 
62
    transacciones.filtrar()
 
63
    cuentas = datos.Tabla("cuentas")
 
64
    consolidado = datos.Tabla("consolidado", clave="rubro")
 
65
    htm.h3("Generando datos para el consolidado")
 
66
    for fila in transacciones.resultado:    
 
67
        cuentas.ir_a(fila["cuenta_id"])
 
68
        fecha = htm.mysql_a_fecha(fila["fecha"])
 
69
        # extraer el mes,  ojo está en PHP
 
70
        mes = int(fecha[3:5]) - 1
 
71
        # mes = int(substr(strval(fecha), 3, 2))-1
 
72
        rubro = cuentas.registro['rubro']
 
73
        debe = fila['debe']
 
74
        haber = fila['haber']
 
75
        consolidado.buscar("rubro", str(rubro))
 
76
        valor = consolidado.registro[meses[mes]]
 
77
        saldo = valor + haber - debe 
 
78
        # rellenar sabana correspondiente a ese mes con el saldo + monto previo
 
79
        consolidado.registro[meses[mes]] = saldo
 
80
        consolidado.actualizar()
 
81
    htm.h3("Generando subtotales por rubro")
 
82
    rellenar_consolidado()
 
83
    htm.h3("Finalizado")
 
84
    htm.h3("=====================================")
 
85
def rellenar_consolidado():
 
86
    """Rellena de datos el consolidado"""
 
87
    meses = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "setiembre", "octubre", "noviembre", "diciembre"]
 
88
    consolidado = datos.Tabla("consolidado")
 
89
    consolidado.filtro = " nivel <> 0 "
 
90
    consolidado.filtrar()
 
91
    dat = datos.Datos()
 
92
    for fila in consolidado.resultado:
 
93
        nivel = fila["nivel"]
 
94
        rubro = str(fila["rubro"])
 
95
        for m in range(0, 11):
 
96
            # subrub = substr(rubro, 0, -nivel)
 
97
            subrub = rubro[0:-nivel]
 
98
            sql_sub = "SELECT SUM(" + meses[m] + ") as suma FROM consolidado WHERE (rubro LIKE '"
 
99
            sql_sub = sql_sub + subrub + "%') AND (nivel=0)"
 
100
            dat.cursor.execute(sql_sub)
 
101
            resultado = dat.cursor.fetchone()
 
102
            suma = resultado["suma"]
 
103
            sql_upd = "UPDATE consolidado SET "
 
104
            sql_upd = sql_upd + meses[m] + "= '" + str(suma) + "' WHERE rubro = '" + rubro + "'"
 
105
            dat.cursor.execute(sql_upd)
 
106
def sumar(mSub, mMes):
 
107
    """Suma los datos del consolidado correspondientes al mes"""
 
108
    consolidado = datos.Tabla("consolidado")
 
109
        # Posibilidad de cambiar la rutina a un SELECT sum(monto) AS monto FROM consolidado
 
110
        # WHERE (rubro LIKE mrub%) AND (nivel = 0)
 
111
        # de ese modo queda en SQL (+ rápido?)
 
112
    consolidado.filtro = " (rubro LIKE '" + str(mSub) + "%') AND (nivel=0) "
 
113
    consolidado.filtrar()
 
114
    monto = 0
 
115
    for fila in consolidado.resultado:
 
116
                monto = monto + fila[mMes]
 
117
        #nivel = fila["nivel"]
 
118
        #if nivel == 0:
 
119
        #    rubro = fila["rubro"]
 
120
        #    largo = len(mSub) - 1
 
121
        #    if rubro[0:largo] == mSub:
 
122
        #        monto = monto + fila[mMes]
 
123
    return monto
 
124
form = cgi.FieldStorage()
 
125
accion = "menu"
 
126
if form.has_key("accion"):
 
127
    accion = form.getvalue("accion")
 
128
if accion == 'calcular':
 
129
    calcular(form)
 
130
else:
 
131
    htm.error_parametros("alianza.py?accion=principal")