{ ----------------------------------------------------------------------------- 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" " Adiciona Registro Cancela Operacion" CLEAR FORM CALL prpcad002() COMMAND "Consultar-modificar" " Busca Registro 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