376 lines
9.3 KiB
Plaintext
376 lines
9.3 KiB
Plaintext
{
|
|
--------------------------------------------------------------------------
|
|
PROGRAMA : PRD00000
|
|
OBJETIVO : Este programa da mantenimiento a los periodos contables;
|
|
Agrega, Modifica periodos de un ano especifico.
|
|
REALIZADO POR : Ing. Juan Fco. Soto.
|
|
FECHA : Noviembre 3, 1992.
|
|
MODIFICADO POR: Tadeo A. Ferreras
|
|
FECHA : Noviembre 25, 1993.
|
|
OBJETIVO : Incluir dias de gracias para cada periodo mensual.
|
|
--------------------------------------------------------------------------
|
|
}
|
|
IMPORT util
|
|
SCHEMA smarmotech
|
|
GLOBALS
|
|
DEFINE CONTROL,genero CHAR(2)
|
|
DEFINE fecha date
|
|
DEFINE hore CHAR(5)
|
|
DEFINE p_mes,p_act,s_act,numero_msg,bandera ,idx smallint
|
|
DEFINE descripcion CHAR(60)
|
|
DEFINE mes1 ARRAY[12] OF CHAR(10)
|
|
|
|
DEFINE peri DYNAMIC ARRAY OF RECORD
|
|
descrip_mes CHAR(10),
|
|
fecha_inicio DATE,
|
|
fecha_corte DATE,
|
|
dias_habiles SMALLINT,
|
|
dias_gracia SMALLINT
|
|
END RECORD
|
|
|
|
DEFINE usuarios RECORD
|
|
us_crea LIKE prdtable.us_crea,
|
|
fech_crea LIKE prdtable.fech_crea,
|
|
us_mod LIKE prdtable.us_mod,
|
|
fech_mod LIKE prdtable.fech_mod
|
|
END RECORD
|
|
|
|
DEFINE p_ano LIKE prdtable.ano,
|
|
usuario,clave CHAR(80)
|
|
END GLOBALS
|
|
|
|
MAIN
|
|
DEFER INTERRUPT
|
|
CALL ARG_VAL(1) RETURNING usuario
|
|
CALL ARG_VAL(2) RETURNING clave
|
|
|
|
CONNECT to "smarmotech" USER usuario USING clave
|
|
CALL prd00000()
|
|
END MAIN
|
|
FUNCTION prd00000()
|
|
OPTIONS
|
|
FORM LINE 8,
|
|
ERROR LINE 24,
|
|
COMMENT LINE 22
|
|
|
|
|
|
OPEN FORM prdfm FROM "prdfm"
|
|
DISPLAY FORM prdfm
|
|
|
|
MENU
|
|
ON ACTION nuevo
|
|
|
|
CALL prdadd()
|
|
ON ACTION buscar
|
|
|
|
CLEAR FORM
|
|
CALL prdmod()
|
|
ON ACTION Salir
|
|
EXIT MENU
|
|
END MENU
|
|
END FUNCTION
|
|
|
|
FUNCTION prdadd()
|
|
#WHENEVER ERROR CONTINUE
|
|
|
|
SELECT count(*) FROM prdtable
|
|
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
|
|
LABEL vuelve:
|
|
LET p_ano = year(today)
|
|
INPUT BY NAME p_ano,genero WITHOUT DEFAULTS
|
|
|
|
AFTER FIELD p_ano
|
|
|
|
IF p_ano is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD p_ano
|
|
END IF
|
|
|
|
SELECT UNIQUE ano FROM prdtable WHERE ano = p_ano
|
|
|
|
IF status != notfound THEN
|
|
LET numero_msg = 12
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD p_ano
|
|
END IF
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
CLEAR FORM
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
IF genero = "SI" THEN
|
|
DISPLAY "g ",genero
|
|
CALL generaperiodos(p_ano)
|
|
ELSE
|
|
|
|
FOR idx = 1 to 12
|
|
CALL meses()
|
|
LET peri[idx].descrip_mes = mes1[idx]
|
|
LET peri[idx].fecha_inicio = MDY(idx,1,p_ano)
|
|
LET peri[idx].fecha_corte = NULL
|
|
END FOR
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
|
|
|
|
CALL set_count(idx-1)
|
|
INPUT ARRAY peri WITHOUT DEFAULTS FROM s_peri.*
|
|
|
|
BEFORE ROW
|
|
LET p_act = arr_curr()
|
|
LET s_act = scr_line()
|
|
AFTER FIELD fecha_inicio
|
|
|
|
IF peri[p_act].fecha_inicio is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha_inicio
|
|
END IF
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
FOR idx = 1 to 12
|
|
INSERT INTO prdtable VALUES (p_ano,idx,peri[idx].fecha_inicio,
|
|
peri[idx].fecha_corte,peri[idx].dias_habiles,
|
|
peri[idx].dias_gracia,usuario,GETDATE(),null,null)
|
|
CALL integridad()
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
END FOR
|
|
LET numero_msg = 1
|
|
CALL msg(numero_msg)
|
|
CLEAR FORM
|
|
GOTO vuelve
|
|
END FUNCTION
|
|
|
|
FUNCTION prdmod()
|
|
#WHENEVER ERROR CONTINUE
|
|
SELECT count(*) FROM prdtable
|
|
|
|
IF bandera = 1 THEN
|
|
LET bandera = 0
|
|
RETURN
|
|
END IF
|
|
|
|
LABEL vuelve:
|
|
LET p_ano = year(today)
|
|
INPUT BY NAME p_ano WITHOUT DEFAULTS
|
|
|
|
AFTER FIELD p_ano
|
|
|
|
IF p_ano is null THEN
|
|
LET numero_msg = 16
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD p_ano
|
|
END IF
|
|
|
|
SELECT UNIQUE ano FROM prdtable WHERE ano = p_ano
|
|
|
|
IF status = notfound THEN
|
|
LET numero_msg = 3
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD p_ano
|
|
END IF
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
{DECLARE datos CURSOR FOR
|
|
SELECT mes,fecha_inicio,fecha_corte,dias_habiles,dias_gracia,us_crea,
|
|
fech_crea,us_mod,fech_mod
|
|
FROM prdtable where ano = p_ano
|
|
ORDER BY 2
|
|
LET idx = 1
|
|
FOREACH datos INTO p_mes,peri[idx].fecha_inicio,peri[idx].fecha_corte,
|
|
peri[idx].dias_habiles,peri[idx].dias_gracia,usuarios.*
|
|
|
|
CALL meses()
|
|
LET peri[idx].descrip_mes = mes1[idx]
|
|
LET idx = idx + 1
|
|
END FOREACH}
|
|
FOR idx = 1 to 12
|
|
CALL meses()
|
|
LET peri[idx].descrip_mes = mes1[idx]
|
|
SELECT UNIQUE a.fecha_inicio,a.fecha_corte,a.dias_habiles,a.dias_gracia,
|
|
a.us_crea,a.fech_crea,a.us_mod,a.fech_mod
|
|
INTO peri[idx].fecha_inicio,peri[idx].fecha_corte,
|
|
peri[idx].dias_habiles,peri[idx].dias_gracia,usuarios.*
|
|
FROM prdtable a
|
|
WHERE a.ano = p_ano AND a.mes = idx
|
|
|
|
#LET peri[idx].fecha_corte = null
|
|
END FOR
|
|
SELECT max(a.us_crea),max(a.fech_crea),max(a.us_mod),max(a.fech_mod)
|
|
INTO usuarios.*
|
|
FROM prdtable a
|
|
WHERE a.ano = p_ano AND a.us_crea IS NOT NULL
|
|
|
|
DISPLAY BY NAME usuarios.*
|
|
CALL set_count(idx)
|
|
INPUT ARRAY peri WITHOUT DEFAULTS FROM s_peri.*
|
|
|
|
BEFORE ROW
|
|
LET p_act = arr_curr()
|
|
LET s_act = scr_line()
|
|
{AFTER FIELD fecha_corte
|
|
LET control = month(peri[p_act].fecha_corte)
|
|
IF p_act != control THEN
|
|
LET numero_msg = 56
|
|
CALL msg(numero_msg)
|
|
NEXT FIELD fecha_corte
|
|
END IF}
|
|
|
|
AFTER INPUT
|
|
IF int_flag THEN
|
|
LET numero_msg = 2
|
|
CALL msg(numero_msg)
|
|
CLEAR FORM
|
|
LET int_flag = false
|
|
RETURN
|
|
END IF
|
|
EXIT INPUT
|
|
END INPUT
|
|
BEGIN WORK
|
|
DELETE FROM prdtable WHERE @ano = p_ano
|
|
FOR idx = 1 to 12
|
|
IF peri[idx].fecha_inicio IS NOT NULL THEN
|
|
INSERT INTO prdtable VALUES (p_ano,idx,peri[idx].fecha_inicio,
|
|
peri[idx].fecha_corte,peri[idx].dias_habiles,
|
|
peri[idx].dias_gracia,usuario,GETDATE(),usuario,getdate())
|
|
END IF
|
|
END FOR
|
|
COMMIT WORK
|
|
LET numero_msg = 13
|
|
CALL msg(numero_msg)
|
|
END FUNCTION
|
|
|
|
FUNCTION integridad()
|
|
IF sqlca.sqlcode < 0 THEN
|
|
LET numero_msg = sqlca.sqlcode
|
|
CALL msg(numero_msg)
|
|
DISPLAY numero_msg AT 23,70
|
|
LET bandera = 1
|
|
SLEEP 2
|
|
RETURN
|
|
END IF
|
|
END FUNCTION
|
|
|
|
FUNCTION msg(numero_msg)
|
|
DEFINE numero_msg SMALLINT
|
|
DEFINE descripcion CHAR (60)
|
|
SELECT desc_msg INTO descripcion FROM msgtable
|
|
WHERE cod_msg = numero_msg
|
|
|
|
IF status = NOTFOUND THEN
|
|
LET numero_msg = 22
|
|
SELECT desc_msg INTO descripcion FROM msgtable
|
|
WHERE cod_msg = numero_msg
|
|
ERROR descripcion
|
|
ELSE
|
|
ERROR descripcion
|
|
LET numero_msg = 0
|
|
END IF
|
|
END FUNCTION
|
|
|
|
FUNCTION meses()
|
|
|
|
LET mes1[1] = "Enero"
|
|
LET mes1[2] = "Febrero"
|
|
LET mes1[3] = "Marzo"
|
|
LET mes1[4] = "Abril"
|
|
LET mes1[5] = "Mayo"
|
|
LET mes1[6] = "Junio"
|
|
LET mes1[7] = "Julio"
|
|
LET mes1[8] = "Agosto"
|
|
LET mes1[9] = "Septiembre"
|
|
LET mes1[10] = "Octubre"
|
|
LET mes1[11] = "Noviembre"
|
|
LET mes1[12] = "Diciembre"
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION pantalla()
|
|
DEFINE fecha CHAR(8),
|
|
hora char(5) ,
|
|
p_compania RECORD LIKE companias.*,
|
|
l SMALLINT
|
|
SELECT * INTO p_compania.*
|
|
FROM companias
|
|
LET l = (80 - LENGTH(p_compania.nombre))/2
|
|
LET fecha = today USING "dd/mm/yy"
|
|
LET hora = time
|
|
DISPLAY p_compania.nombre CLIPPED AT 4,l
|
|
ATTRIBUTE (REVERSE,YELLOW)
|
|
DISPLAY "prd00000" AT 4,3 ATTRIBUTE (BOLD)
|
|
DISPLAY fecha AT 4,70 ATTRIBUTE (YELLOW)
|
|
LET l = (80 - LENGTH("Mantenimento Fechas de corte Mensuales"))/2
|
|
DISPLAY "Mantinimento Fechas de corte Mensuales" AT 5,l
|
|
DISPLAY hora AT 6,73 ATTRIBUTE(YELLOW)
|
|
|
|
CALL fgl_drawbox(5,79,3,1)
|
|
CALL fgl_drawbox(1,79,22,1)
|
|
END FUNCTION
|
|
|
|
FUNCTION generaperiodos(pano)
|
|
|
|
DEFINE dia_fin,dia_inicio DATE
|
|
DEFINE pano SMALLINT
|
|
|
|
FOR idx = 1 to 12
|
|
CALL meses()
|
|
CALL calc_ult_dia_mes(pano,idx) RETURNING dia_fin
|
|
LET dia_inicio = MDY(idx,1,pano)
|
|
|
|
LET peri[idx].descrip_mes = mes1[idx]
|
|
LET peri[idx].fecha_inicio = dia_inicio
|
|
LET peri[idx].fecha_corte = dia_fin
|
|
END FOR
|
|
|
|
END FUNCTION
|
|
FUNCTION calc_ult_dia_mes(anio,mes)
|
|
|
|
DEFINE dia_fin DATE
|
|
DEFINE mes,anio SMALLINT
|
|
|
|
# calcula el mes siguiente
|
|
IF mes=12 THEN
|
|
LET mes=1
|
|
LET anio=anio+1
|
|
ELSE
|
|
LET mes=mes+1
|
|
END IF
|
|
|
|
# calcula el primer dia del mes siguiente
|
|
LET dia_fin=MDY(mes,1,anio)
|
|
|
|
# calcula el ultimo dia del mes actual
|
|
LET dia_fin=dia_fin-1 UNITS DAY
|
|
|
|
RETURN dia_fin
|
|
|
|
END FUNCTION
|