2
# -*- coding: utf-8 -*-
3
"""Calculo de consolidado"""
5
import cgitb ; cgitb.enable()
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")
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()
20
# aparentemente no sería necesaria la función FLUSH de PHP
21
print "<h3>Calculando consolidado..."
22
calcular_consolidado(ano)
24
print "<h3>Rellenando consolidado"
25
rellenar_consolidado()
27
print "<h2>Proceso finalizado</h2>"
28
htm.boton("Volver","consol.php")
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"
36
dat.cursor.execute(sql)
37
cuentas = datos.Tabla("cuentas")
38
cuentas.orden = " rubro "
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"]
47
nombre = fila["nombre"]
48
# OJO, hay una diferencia entre el largo de nombre en CUENTAS y en CONSOLIDADO
50
consolidado.registro["nombre"] = nombre
51
consolidado.registro["nivel"] = fila["nivel"]
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']
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()
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 "
92
for fila in consolidado.resultado:
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()
115
for fila in consolidado.resultado:
116
monto = monto + fila[mMes]
117
#nivel = fila["nivel"]
119
# rubro = fila["rubro"]
120
# largo = len(mSub) - 1
121
# if rubro[0:largo] == mSub:
122
# monto = monto + fila[mMes]
124
form = cgi.FieldStorage()
126
if form.has_key("accion"):
127
accion = form.getvalue("accion")
128
if accion == 'calcular':
131
htm.error_parametros("alianza.py?accion=principal")