Files
MBS/PROYECTO/ctdir/prprmt002.4gl
T

387 lines
11 KiB
Plaintext

{
-----------------------------------------------------------------------------
PROGRAMA : PRPRMT002
OBJETIVO : Registro de Horas en Personal Administrativo
REALIZADO POR : Tadeo A. Ferreras F.
FECHA : Sept. 14, 1994
-----------------------------------------------------------------------------
}
GLOBALS "prprgb000.4gl"
DEFINE i,valor_cheque1,p_num_doc,aplicar INTEGER
DEFINE valor_nc,nc_pend,valor_ctrl,p_total,val_pen,valor2 DECIMAL(12,2)
DEFINE fecha1 DATE
DEFINE nombre_cta CHAR(30)
DEFINE tipo_doc1 CHAR(2)
DEFINE opc CHAR(1)
####### Funcion para agregar un recibo de pago
FUNCTION prprmt002()
OPTIONS
FORM LINE 8,
ERROR LINE 24,
COMMENT LINE 22,
PROMPT LINE 23
CALL pantalla()
OPEN FORM prfmmt002 FROM "prfmmt002"
DISPLAY FORM prfmmt002
DISPLAY "prprmt002" AT 4,3
DISPLAY "Registro Horas del Personal No Prod." AT 6,22
MENU "OPCION"
COMMAND "Adicionar"
"<Esc> Adiciona Registro <Supr> Cancela Operacion"
CLEAR FORM
CALL prpcad002()
COMMAND "Consultar-modificar"
"<Esc> Busca Registro <Supr> Cancela Operacion"
CALL prpcmf002()
COMMAND "Salir"
EXIT MENU
END MENU
END FUNCTION
FUNCTION prpcad002()
INPUT BY NAME prtb03.num_semana,prtb03.departamento,prtb03.num_emp
BEFORE FIELD num_semana
LET prtb03.num_semana = prtb02.num_semana
DISPLAY BY NAME prtb03.num_semana
AFTER FIELD num_semana
IF prtb02.num_semana IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_semana
END IF
SELECT a.semana_del,a.semana_al INTO prtb02.semana_del,prtb02.semana_al
FROM prtb00002 a
WHERE a.status_t IS NULL AND a.num_semana = prtb03.num_semana
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_semana
END IF
DISPLAY BY NAME prtb02.semana_del,prtb02.semana_al
LET prtb02.num_semana = prtb03.num_semana
NEXT FIELD num_emp
AFTER FIELD num_emp
IF prtb03.num_emp IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
SELECT a.nom1_emp,a.apell1_emp,a.departamento,b.nom_dpto
INTO nom1_emp,apell1_emp,prtb03.departamento,nom_dpto
FROM adtb00003 a,adtb00001 b
WHERE a.num_emp=prtb03.num_emp AND (a.status_t IS NULL OR
a.status_t IN("T","I")) AND a.departamento = b.departamento
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_emp
END IF
LET nom_emp = nom1_emp CLIPPED," ",apell1_emp CLIPPED
DISPLAY BY NAME nom_emp,prtb03.departamento,nom_dpto
SELECT UNIQUE a.num_semana,a.departamento,a.num_emp,b.nom_dpto
FROM prtb00003 a,adtb00001 b
WHERE a.departamento=b.departamento AND a.departamento=prtb03.departamento AND
a.num_emp = prtb03.num_emp AND a.num_semana = prtb03.num_semana AND
a.status_t IS NULL
IF STATUS != NOTFOUND THEN
LET numero_msg = 12
CALL msg(numero_msg)
RETURN
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET fecha1 = prtb02.semana_del
FOR i = 1 TO 7
LET arr_hora[i].fecha = fecha1
LET arr_hora[i].hn_ind= 0
LET arr_hora[i].he_ind= 0
LET fecha1 = fecha1 + 1
END FOR
CALL SET_COUNT(i)
INPUT ARRAY arr_hora WITHOUT DEFAULTS FROM sc_hora.*
BEFORE ROW
LET curr = ARR_CURR()
LET fila = SCR_LINE()
AFTER FIELD fecha
IF arr_hora[curr].fecha > prtb02.semana_al OR
arr_hora[curr].fecha < prtb02.semana_del OR
arr_hora[curr].fecha > today THEN
LET numero_msg = 99
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
DELETE FROM prtb00003
WHERE @num_semana = prtb03.num_semana AND
@departamento= prtb03.departamento AND
@num_emp = prtb03.num_emp
FOR j = 1 TO 7
IF arr_hora[j].hn_ind IS NULL THEN
LET arr_hora[curr].hn_ind = 0
END IF
IF arr_hora[j].he_ind IS NULL THEN
LET arr_hora[curr].he_ind = 0
END IF
IF arr_hora[j].hn_ind > 0 OR arr_hora[j].he_ind > 0 THEN
INSERT INTO prtb00003 VALUES(prtb03.num_semana,prtb03.departamento,
prtb03.num_emp,arr_hora[j].fecha,
arr_hora[j].hn_ind,arr_hora[j].he_ind,
NULL,USER,CURRENT,NULL,NULL)
END IF
END FOR
LET numero_msg = 1
CALL msg(numero_msg)
FOR j = 1 TO 7
LET arr_hora[j].fecha = NULL
LET arr_hora[j].hn_ind = NULL
LET arr_hora[j].he_ind = NULL
END FOR
END FUNCTION
FUNCTION prpcmf002()
INPUT BY NAME prtb03.num_semana
AFTER FIELD num_semana
IF prtb02.num_semana IS NULL THEN
LET numero_msg = 16
CALL msg(numero_msg)
NEXT FIELD num_semana
END IF
SELECT a.semana_del,a.semana_al INTO prtb02.semana_del,prtb02.semana_al
FROM prtb00002 a
WHERE a.status_t IS NULL AND a.num_semana = prtb03.num_semana
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD num_semana
END IF
DISPLAY BY NAME prtb02.semana_del,prtb02.semana_al
END INPUT
CONSTRUCT CRITERIO ON a.departamento,a.num_emp FROM departamento,num_emp
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
LET selec =
"SELECT UNIQUE a.departamento,a.num_emp,b.nom_dpto,c.nom1_emp,c.apell1_emp ",
"FROM prtb00003 a,adtb00001 b,adtb00003 c ",
"WHERE a.departamento = b.departamento AND a.num_emp = c.num_emp AND ",
" a.status_t IS NULL AND a.num_semana = ? AND ",criterio CLIPPED,
" ORDER BY 1,2 "
PREPARE comando FROM selec
DECLARE busco SCROLL CURSOR FOR comando
OPEN busco USING prtb03.num_semana
FETCH FIRST busco INTO prtb03.departamento,prtb03.num_emp,nom_dpto,
nom1_emp,apell1_emp
IF STATUS = NOTFOUND THEN
LET numero_msg = 3
CALL msg(numero_msg)
RETURN
END IF
LET nom_emp = nom1_emp CLIPPED," ",apell1_emp CLIPPED
DISPLAY BY NAME prtb03.departamento,prtb03.num_emp,nom_dpto,nom_emp
MENU "Mant."
COMMAND "Siguiente"
"Ver Proximo registro que satisface condicion"
FETCH NEXT busco INTO prtb03.departamento,prtb03.num_emp,nom_dpto,
nom1_emp,apell1_emp
IF STATUS = NOTFOUND THEN
LET numero_msg = 4
CALL msg(numero_msg)
END IF
LET nom_emp = nom1_emp CLIPPED," ",apell1_emp CLIPPED
DISPLAY BY NAME prtb03.departamento,prtb03.num_emp,nom_dpto,nom_emp
COMMAND "Anterior"
"Ver registro anterior que satisface condicion"
FETCH PREVIOUS busco INTO prtb03.departamento,prtb03.num_emp,nom_dpto,
nom1_emp,apell1_emp
IF STATUS = NOTFOUND THEN
LET numero_msg = 5
CALL msg(numero_msg)
END IF
LET nom_emp = nom1_emp CLIPPED," ",apell1_emp CLIPPED
DISPLAY BY NAME prtb03.departamento,prtb03.num_emp,nom_dpto,nom_emp
COMMAND "Primero"
"Ver Primer registro que satisface condicion"
FETCH FIRST busco INTO prtb03.departamento,prtb03.num_emp,nom_dpto,
nom1_emp,apell1_emp
LET numero_msg = 5
CALL msg(numero_msg)
LET nom_emp = nom1_emp CLIPPED," ",apell1_emp CLIPPED
DISPLAY BY NAME prtb03.departamento,prtb03.num_emp,nom_dpto,nom_emp
COMMAND "Ultimo"
"Ver Ultimo registro que satisface condicion"
FETCH LAST busco INTO prtb03.departamento,prtb03.num_emp,nom_dpto,
nom1_emp,apell1_emp
LET numero_msg = 4
CALL msg(numero_msg)
LET nom_emp = nom1_emp CLIPPED," ",apell1_emp CLIPPED
DISPLAY BY NAME prtb03.departamento,prtb03.num_emp,nom_dpto,nom_emp
COMMAND "Escoger"
"Ver y/o registro que satisface condicion"
DECLARE busca2 CURSOR FOR
SELECT a.fecha,a.hn_ind,a.he_ind FROM prtb00003 a
WHERE a.num_semana = prtb03.num_semana AND
a.departamento = prtb03.departamento AND
a.num_emp = prtb03.num_emp AND
a.status_t IS NULL ORDER BY 1
LET idx = 1
LET idx1 = 0
FOREACH busca2 INTO arr_hora[idx].*
LET idx = idx + 1
LET idx1= idx1+ 1
END FOREACH
CALL SET_COUNT(idx -1)
INPUT ARRAY arr_hora WITHOUT DEFAULTS FROM sc_hora.*
BEFORE ROW
LET curr = ARR_CURR()
LET fila = SCR_LINE()
AFTER FIELD fecha
IF arr_hora[curr].fecha > prtb02.semana_al OR
arr_hora[curr].fecha < prtb02.semana_del OR
arr_hora[curr].fecha > today THEN
LET numero_msg = 99
CALL msg(numero_msg)
NEXT FIELD fecha
END IF
END INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = FALSE
RETURN
END IF
PROMPT "Toda La Informacion Esta Correcta [S/N]...?" FOR CHAR opcion1
LET opcion1 = UPSHIFT(opcion1)
IF opcion1 = "S" THEN
DELETE FROM prtb00003
WHERE @num_semana = prtb03.num_semana AND
@departamento= prtb03.departamento AND
@num_emp = prtb03.num_emp
FOR j = 1 TO 7
IF arr_hora[j].hn_ind IS NULL THEN
LET arr_hora[curr].hn_ind = 0
END IF
IF arr_hora[j].he_ind IS NULL THEN
LET arr_hora[curr].he_ind = 0
END IF
IF arr_hora[j].hn_ind > 0 OR arr_hora[j].he_ind > 0 THEN
INSERT INTO prtb00003 VALUES(prtb03.num_semana,prtb03.departamento,
prtb03.num_emp,arr_hora[j].fecha,
arr_hora[j].hn_ind, arr_hora[j].he_ind,
NULL,USER,CURRENT,NULL,NULL)
END IF
END FOR
END IF
FOR j = 1 TO 7
LET arr_hora[j].fecha = NULL
LET arr_hora[j].hn_ind = NULL
LET arr_hora[j].he_ind = NULL
END FOR
LET numero_msg = 13
CALL msg(numero_msg)
COMMAND KEY ("L") "eLiminar"
"Opcion para eliminar registro que satisface condicion"
UPDATE prtb00003 SET (status_t,us_mod,fech_mod) = ("E",USER,CURRENT)
WHERE @num_semana = prtb03.num_semana AND
@departamento= prtb03.departamento AND
@num_emp = prtb03.num_emp
LET numero_msg = 39
CALL msg(numero_msg)
COMMAND "Retornar"
CLEAR FORM
EXIT MENU
END MENU
END FUNCTION