1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Rutina de cálculo de antigüedad retroactiva"""
import cgi
import cgitb; cgitb.enable()
import funciones
import datos
import pagina
import htm
import calc_sueldos
import csv
import StringIO
def sel_empleado():
""" Seleccionar empleado """
pag = pagina.Pagina("Cálculo retroactivo de antigüedad", 2)
print(htm.h2("Selección de empleado"))
print(htm.button("Exportar todo","calc_ant_ret.py?accion=exportar"))
print(htm.button("Volver","geined.py?accion=sueldos"))
empleados = datos.Tabla("empleados")
cat_empleados = datos.Tabla("cat_empleados")
empleados.orden = 'nombre'
empleados.filtrar()
htm.encabezado_tabla(["Nombre", "Categoría", "Notas", "Acciones"])
for fila in empleados.resultado:
ident = fila['id']
print("<tr class='fila_datos'>")
print(htm.td(fila['nombre']))
cat_empleados.ir_a(fila["categoria_id"])
categoria = cat_empleados.registro['categoria']
print(htm.td(categoria))
print(htm.td(fila['notas']))
print(htm.td(
htm.button("Seleccionar", "calc_ant_ret.py?empleado_id=" +
str(ident))))
print('</tr>')
htm.fin_tabla()
print(htm.button('Volver', 'geined.py?accion=salarios'))
pag.fin()
def listado(frm):
"""Listado de reliquidación"""
# Buscar al empleado
empleado_id = frm.getvalue("empleado_id")
# Buscar categoría de empleado
empleados = datos.Tabla("empleados")
empleados.ir_a(empleado_id)
cat_empleado_id = empleados.registro["categoria_id"]
# carga parámetros actuales de valor hora
salario = datos.Tabla("salario")
salario.filtro = "cat_empleado_id=" + str(cat_empleado_id)
salario.orden = "fecha desc"
salario.filtrar()
ficto_semanal = salario.registro["ficto_semanal"]
# ficto_hora_reloj = ficto_semanal / 4.29
# Recorre la base de datos de liquidaciones
liquidaciones = datos.Tabla("liquidacion")
liquidaciones.orden = "fecha"
liquidaciones.filtrar()
det_liquidacion = datos.Tabla("det_liquidacion")
# Va liquidación x liquidación
pag = pagina.Pagina("Lista de antigüedades retroactivas", 4)
print(htm.h2(empleados.registro["nombre"]))
print(htm.div(htm.boton("Volver", "geined.py?accion=sueldos"),
clase="barra"))
htm.encabezado_tabla(["Fecha", "Liquidacion", "Liquidado", "A liquidar"])
# presenta la tabla de antigëdades no liquidadas
total_antig = 0
for liquidacion in liquidaciones.resultado:
liq_id = liquidacion["id"]
det_liquidacion.filtro = "liquidacion_id=" + str(liq_id) + " AND " \
+ "empleado_id=" + str(empleado_id)
det_liquidacion.filtrar()
for detalle in det_liquidacion.resultado:
if detalle["antiguedad"] == 0:
print("<tr class='fila_datos'>")
print(htm.td(liquidacion['fecha']))
print(htm.td(liquidacion["corresponde"]))
print(htm.td(detalle["antiguedad"]))
# reliquida las horas de ese mes según el valor hora ACTUAL
detalle["ficto_semanal"] = ficto_semanal
sueldo = calc_sueldos.Sueldo(detalle)
# calcula la antigüedad para ese mes
print(htm.td(funciones.moneda(sueldo.antiguedad), "right"))
total_antig = total_antig + sueldo.antiguedad
# lo agrega a una tabla ad-hoc
print("</tr>")
htm.fin_tabla()
print(htm.h2("Total: " + funciones.moneda(total_antig)))
# da la opción de guardar, exportar a openoffice o salir
pag.fin()
def exp_csv():
"""Rutina para exportar a archivo CSV"""
# Bases de datos
empleados = datos.Tabla("empleados")
salario = datos.Tabla("salario")
liquidaciones = datos.Tabla("liquidacion")
det_liquidacion = datos.Tabla("det_liquidacion")
# Armar datos
empleados.orden = "nombre"
liquidaciones.orden = "fecha"
empleados.filtrar()
liquidaciones.filtrar()
# Salida
salida = StringIO.StringIO()
filename = "antig.csv"
ant_csv = csv.DictWriter(salida, ["Empleado", "Fecha", "Liquidacion",
"Monto"])
total_ant = 0
for empleado in empleados.resultado:
total_emp = 0
# carga parámetros actuales de valor hora
salario.filtro = "cat_empleado_id=" + str(empleado["categoria_id"])
salario.orden = "fecha desc"
salario.filtrar()
ficto_semanal = salario.registro["ficto_semanal"]
# Va liquidación x liquidación
for liquidacion in liquidaciones.resultado:
det_liquidacion.filtro = "liquidacion_id=" + \
str(liquidacion["id"]) + " AND " \
+ "empleado_id=" + str(empleado["id"])
det_liquidacion.filtrar()
for detalle in det_liquidacion.resultado:
if detalle["antiguedad"] == 0:
# reliquida las horas de ese mes según el valor hora ACTUAL
detalle["ficto_semanal"] = ficto_semanal
sueldo = calc_sueldos.Sueldo(detalle)
# calcula la antigüedad para ese mes
ant_csv.writerow({"Empleado":empleado["nombre"], \
"Fecha":funciones.mysql_a_fecha(liquidacion["fecha"]), \
"Liquidacion":liquidacion["corresponde"],\
"Monto":funciones.to_decimal(sueldo.antiguedad)})
total_emp = total_emp + sueldo.antiguedad
ant_csv.writerow({"Empleado":"SubTotal",
"Monto":funciones.to_decimal(total_emp)})
total_ant = total_ant + total_emp
total_emp = 0
ant_csv.writerow({"Empleado":"TOTAL",
"Monto":funciones.to_decimal(total_ant)})
HEADERS = '\r\n'.join([
"Content-type: %s;",
"Content-Disposition: attachment; filename=%s",
"Content-Title: %s",
"Content-Length: %i",
"\r\n", # empty line to end headers
])
print(HEADERS % ('text/csv', filename, filename, len(salida.getvalue())))
print(salida.getvalue())
salida.close()
if __name__ == "__main__":
form = cgi.FieldStorage()
accion = form.getvalue("accion", "listado")
if accion == "listado":
if "empleado_id" not in form:
sel_empleado()
else:
listado(form)
elif accion == "seleccionar":
sel_empleado()
elif accion == "exportar":
exp_csv()
else:
sel_empleado()
|