{
---------------------------------------------------------------------------- 
 PROGRAMA          : ADPRMT022
 OBJETIVO          : Modificar y Eliminar registros de la
                     Tabla de Maestra de Empleados
 PROGRAMADOR       : Ing. Betania Guerrero Perez
 FECHA REALIZACION : Noviembre 19, 1993
----------------------------------------------------------------------------
}
GLOBALS "adprgb000.4gl" 
DEFINE tipo_sexo CHAR(9)
DEFINE p_sexo CHAR(1)
DEFINE m_descrip LIKE adtb00040.plan_descrip
DEFINE corp1 RECORD LIKE adtb00042.*

FUNCTION adprmt022() 

   CLEAR SCREEN 
   OPTIONS
        FORM LINE 9,
        ERROR LINE 24,
        COMMENT LINE 23

   OPEN FORM adfmmt022 FROM "adfmmt022"
   DISPLAY FORM adfmmt022
   CALL pantalla() 
   DISPLAY "adprmt022" AT 4,3 ATTRIBUTE(RED) 
   DISPLAY "Maestra de Empleados" AT 6,33 ATTRIBUTE(BLACK)
   
   MENU "OPCIONES"
       COMMAND "Consultar-modificar"
               "<Esc> Realiza Busqueda     <Ctrl-C> Cancela Operacion"
           let int_flag = false
           CALL adpcmf022()
       COMMAND "Salir" "Retorna Menu Anterior"
           EXIT MENU
     END MENU
END FUNCTION

FUNCTION adpcmf022() 
## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA CONSULTA Y
## MODIFICACION DE REGISTROS

  DEFINE ant RECORD
   num_emp   SMALLINT,
   departamento SMALLINT,
   nivel_emp  SMALLINT,
   cod_puesto SMALLINT
  END RECORD

 # WHENEVER ERROR CONTINUE
    CONSTRUCT criterio ON a.num_emp,a.departamento FROM num_emp,departamento

    IF int_flag THEN   
       LET numero_msg = 2 
       CALL msg(numero_msg) 
       LET int_flag = FALSE
       RETURN
    END IF

    LET SELEC =
       "SELECT UNIQUE a.* FROM adtb00003 a ",
       "WHERE (a.status_t is null OR a.status_t NOT IN('T','E')) AND ",
       criterio clipped," ORDER BY a.num_emp "

    PREPARE busca FROM selec
    DECLARE datos SCROLL CURSOR FOR busca
    OPEN datos 

   FETCH FIRST datos INTO emplea.*

     IF STATUS = NOTFOUND THEN
        LET numero_msg = 3 
        CALL msg(numero_msg) 
        RETURN
     END IF
      CALL selecta1()

  MENU "OPCION"
    COMMAND "Siguiente"
            "Presenta en pantalla el proximo registro encontrado"
            FETCH NEXT datos INTO emplea.*
            IF STATUS = NOTFOUND THEN
               LET numero_msg = 4 
               CALL msg(numero_msg) 
            END IF

            LET tipo_sexo = " "
            CALL selecta1()

    COMMAND "Anterior"
            "Presenta en pantalla el registro anterior encontrado"
            FETCH PREVIOUS datos INTO emplea.*
            IF STATUS = NOTFOUND THEN
               LET numero_msg = 5 
               CALL msg(numero_msg) 
            END IF

            LET tipo_sexo = " "
            CALL selecta1()

    COMMAND "Primero"
            "Presenta en pantalla el primer registro encontrado"
            FETCH FIRST datos INTO emplea.*
            CALL selecta1()

            LET tipo_sexo = " "
            LET numero_msg = 5 
            CALL msg(numero_msg) 

     COMMAND "Ultimo"
            "Presenta en pantalla el ultimo registro encontrado"
             FETCH LAST datos INTO emplea.*
             CALL selecta1()

             LET tipo_sexo = " "
             LET numero_msg = 4 
             CALL msg(numero_msg) 

     COMMAND "Escoger" "<Esc> Actualiza Registro    <Ctrl-C> Cancela Operacion"

## SE SELECCIONAN LOS CAMPOS QUE PUEDEN SER MODIFICABLES
              
      INPUT BY NAME emplea.departamento,emplea.nivel_emp,emplea.cod_puesto,
                    emplea.cod_plan,emplea.monto_asegurado,
                    emplea.clase_emp,emplea.monto_seg_dental,
                    emplea.calle,emplea.casa_num,emplea.barrio,
                    emplea.urbanizacion,emplea.cedula,emplea.serie,
                    emplea.telefono,emplea.fech_nac,emplea.cod_nac,
                    emplea.estado_civil,emplea.tipo_sangre,emplea.sueldo_ac,
                    emplea.nomina,emplea.paga_seg,emplea.cod_seg1,
                    emplea.cod_seg2,emplea.cod_seg3,p_sexo,
                    corp1.dep_corp WITHOUT DEFAULTS
       
## VERIFICA QUE LOS CAMPOS MODIFICABLES NO ESTEN EN BLANCO

          AFTER FIELD dep_corp
               IF corp1.dep_corp IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD dep_corp   
               END IF
            
               SELECT a.nombre_depto
                 INTO corp1.nombre_depto
                 FROM adtb00042 a
                WHERE a.dep_corp = corp1.dep_corp
                  AND a.status_t IS NULL

               IF STATUS = NOTFOUND THEN
                  LET numero_msg = 3 
                  CALL msg(numero_msg) 
                  NEXT FIELD dep_corp   
               END IF

               DISPLAY BY NAME corp1.nombre_depto

          AFTER FIELD departamento
       
                IF emplea.departamento IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD departamento   
               END IF
       
     SELECT nom_dpto INTO depto.nom_dpto FROM adtb00001
     WHERE departamento = emplea.departamento

     DISPLAY BY NAME depto.nom_dpto
          AFTER FIELD cod_puesto  
       
                IF emplea.cod_puesto   IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD cod_puesto     
               END IF

     SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004
     WHERE @cod_puesto = emplea.cod_puesto

      DISPLAY BY NAME puesto.nom_puesto

          AFTER FIELD nivel_emp       
       
                IF emplea.nivel_emp IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD nivel_emp   
                END IF

          AFTER FIELD estado_civil 
                IF emplea.estado_civil IS NOT NULL THEN 
                   IF emplea.estado_civil = "S" THEN 
                      LET descr = "SOLTERO" 
                END IF 
                IF emplea.estado_civil = "C" THEN
                  LET descr = "CASADO"
                END IF
                ELSE
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD estado_civil
               END IF
               DISPLAY BY NAME descr

          AFTER FIELD sueldo_ac
       
                IF emplea.sueldo_ac IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD sueldo_ac   
               END IF

           AFTER FIELD cod_plan
       
                IF emplea.cod_plan IS NULL THEN 
                   LET numero_msg = 3
                   CALL msg(numero_msg) 
                   NEXT FIELD cod_plan   
                END IF
    
                LET m_descrip = null

                   SELECT a.plan_descrip 
                     INTO m_descrip
                     FROM adtb00040 a
                    WHERE a.cod_plan = emplea.cod_plan

                IF STATUS = NOTFOUND THEN
                  LET numero_msg = 3 
                  CALL msg(numero_msg) 
                  NEXT FIELD cod_plan   
               END IF

                 DISPLAY BY NAME m_descrip

          AFTER FIELD monto_asegurado
       
                IF emplea.monto_asegurado IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD monto_asegurado   
               END IF
          
          AFTER FIELD monto_seg_dental
       
                IF emplea.monto_seg_dental IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD monto_seg_dental   
               END IF
          
          AFTER FIELD clase_emp
       
                IF emplea.clase_emp IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD clase_emp   
               END IF
               
          AFTER FIELD fech_nac 
       
                IF emplea.fech_nac  IS NULL THEN 
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD fech_nac    
                END IF

                IF YEAR(emplea.fech_nac) >= YEAR(today) THEN
                   ERROR "FECHA INCORRECTA"
                   NEXT FIELD fech_nac
                END IF
   
          AFTER FIELD nomina
                IF emplea.nomina IS NULL THEN 
                   LET numero_msg = 16
                   CALL msg(numero_msg)
                   NEXT FIELD nomina
                END IF

                   IF emplea.nomina = "Q" THEN 
                      LET descrip = "QUINCENAL"
                   END IF 
                   IF emplea.nomina = "S" THEN
                     LET descrip = "SEMANAL"
                   END IF 
                   IF emplea.nomina = "V" THEN
                     LET descrip = "VENDEDOR"
                   END IF 
                   DISPLAY BY NAME descrip

        AFTER FIELD p_sexo
              IF p_sexo IS NULL THEN
                  LET numero_msg = 16 
                  CALL msg(numero_msg) 
                  NEXT FIELD p_sexo     
               END IF

               IF p_sexo = "M" THEN
                  LET tipo_sexo = "MASCULINO"
               ELSE
               IF p_sexo = "F" THEN
                  LET tipo_sexo = "FEMENINO"
               END IF
               END IF
               DISPLAY BY NAME tipo_sexo
  #### Verifica si el usuario presiono la tecla <Ctrl-C>   

      AFTER INPUT 
         IF int_flag THEN
         LET numero_msg = 2 
         CALL msg(numero_msg) 
         LET int_flag = FALSE
         CLEAR FORM 
         RETURN
      END IF
  END INPUT

## AQUI SE ACTUALIZA EL REGISTRO

  UPDATE adtb00003 SET (departamento,cod_puesto,nivel_emp,nom1_emp,nom2_emp,
                        apell1_emp,apell2_emp,calle,casa_num,barrio,
                        urbanizacion,telefono,cedula,serie,cod_nac,estado_civil,
                        tipo_sangre,sueldo_ac,nomina,paga_seg,cod_plan,
                        monto_asegurado,monto_seg_dental,clase_emp,us_mod,fech_mod,
                        cod_seg1,cod_seg2,cod_seg3)=
                       (emplea.departamento,emplea.cod_puesto,emplea.nivel_emp,
                        emplea.nom1_emp,emplea.nom2_emp,emplea.apell1_emp,
                        emplea.apell2_emp,emplea.calle,emplea.casa_num,
                        emplea.barrio,emplea.urbanizacion,emplea.telefono,
                        emplea.cedula,emplea.serie,emplea.cod_nac,
                        emplea.estado_civil,emplea.tipo_sangre,emplea.sueldo_ac,
                        emplea.nomina,emplea.paga_seg,emplea.cod_plan,
                        emplea.monto_asegurado,emplea.monto_seg_dental,
                        emplea.clase_emp,USER,CURRENT,emplea.cod_seg1,
                        emplea.cod_seg2,emplea.cod_seg3)
  WHERE @num_emp = emplea.num_emp
           
  UPDATE adtb00021 SET sexo = p_sexo WHERE num_emp = emplea.num_emp AND
                                           cod_par = 0 AND sec_par = 0

  SELECT a.* 
    FROM adtb00043 a
   WHERE a.num_emp = emplea.num_emp

   IF STATUS = NOTFOUND THEN
     INSERT INTO adtb00043 VALUES (emplea.num_emp,corp1.dep_corp,null,
                                   user,current,null,null)
   ELSE
     UPDATE adtb00043 SET dep_corp = corp1.dep_corp,
                          us_mod   = user,
                          fech_mod = current
      WHERE @num_emp = emplea.num_emp
   END IF
 
  LET numero_msg = 13 
  CALL msg(numero_msg) 

  IF status < 0 THEN
     CALL integridad()
  END IF

## AQUI SE ELIMINAN LOS REGISTROS
  COMMAND KEY ("L") "eLiminar"

      UPDATE adtb00003 SET status_t = "E"
       WHERE num_emp = emplea.num_emp 

      UPDATE adtb00043 SET status_t = "E",
                           us_mod   = user,
                           fech_mod = current
       WHERE num_emp = emplea.num_emp
 
      LET numero_msg = 39
      CALL msg(numero_msg)

    COMMAND "Retornar" "Retorna al menu anterior" 
      CLEAR FORM 
      EXIT MENU
   END MENU
END FUNCTION

FUNCTION selecta1()

     SELECT a.sexo INTO p_sexo FROM adtb00021 a
     WHERE a.num_emp = emplea.num_emp AND a.cod_par = 0 AND a.sec_par = 0

     LET descrip1 = emplea.nom1_emp CLIPPED," ",emplea.nom2_emp CLIPPED," ",
                    emplea.apell1_emp CLIPPED," ",emplea.apell2_emp CLIPPED

     SELECT nom_dpto INTO depto.nom_dpto FROM adtb00001
     WHERE departamento = emplea.departamento

     SELECT @nom_puesto INTO puesto.nom_puesto FROM adtb00004
     WHERE @cod_puesto = emplea.cod_puesto

     LET m_descrip = null

     SELECT a.plan_descrip 
       INTO m_descrip
       FROM adtb00040 a
      WHERE a.cod_plan = emplea.cod_plan

     IF emplea.estado_civil = "S" THEN
        LET descr = "SOLTERO" 
     END IF
     IF emplea.estado_civil = "C" THEN
        LET descr = "CASADO"
     END IF

     IF p_sexo = "M" THEN
          LET tipo_sexo = "MASCULINO"
     END IF
     IF p_sexo = "F" THEN
         LET tipo_sexo = "FEMENINO"
     END IF

     IF emplea.nomina = "Q" THEN 
        LET descrip = "QUINCENAL"
     END IF 
     IF emplea.nomina = "S" THEN
        LET descrip = "SEMANAL"
     END IF 

     SELECT nom_nac INTO nacion.nom_nac FROM adtb00007
     WHERE cod_nac = emplea.cod_nac

     SELECT a.dep_corp
       INTO corp1.dep_corp
       FROM adtb00043 a
      WHERE a.num_emp = emplea.num_emp
        AND a.status_t IS NULL 

     SELECT a.nombre_depto
       INTO corp1.nombre_depto
       FROM adtb00042 a
      WHERE a.dep_corp = corp1.dep_corp
        AND a.status_t IS NULL 


     DISPLAY BY NAME emplea.num_emp,emplea.departamento,emplea.nivel_emp,
                     emplea.cod_puesto,descrip1,emplea.calle,emplea.casa_num,
                     emplea.barrio,emplea.urbanizacion,emplea.cedula,
                     emplea.serie,emplea.fech_nac,emplea.cod_nac,
                     emplea.licencia,emplea.telefono,emplea.estado_civil,
                     emplea.tipo_sangre,emplea.sueldo_ac,emplea.nomina,
                     emplea.fech_efec,descr,descrip,nacion.nom_nac,
                     depto.nom_dpto,puesto.nom_puesto,p_sexo,tipo_sexo,
                     emplea.paga_seg,emplea.cod_seg1,emplea.cod_seg2,
                     emplea.cod_seg3,emplea.cod_plan,m_descrip,
                     emplea.monto_asegurado,emplea.clase_emp,
                     emplea.monto_seg_dental,corp1.dep_corp,corp1.nombre_depto
END FUNCTION
