Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md
This commit is contained in:
@@ -0,0 +1,800 @@
|
||||
{
|
||||
------------------------------------------------------------------
|
||||
PROGRAMA : NOPRMT007
|
||||
OBJETIVO : Captura y Modifica registros de la
|
||||
Tabla de Novedades de la Nomina
|
||||
PROGRAMADOR : Ing. Juan Soto
|
||||
FECHA REALIZACION : Noviembre 5, 1993.
|
||||
------------------------------------------------------------------
|
||||
}
|
||||
GLOBALS "noprgb000.4gl"
|
||||
DEFINE apellido CHAR(30)
|
||||
DEFINE p_cantidad, total1, total2, salario_diario, salario_hora, factor
|
||||
DECIMAL(12, 2)
|
||||
DEFINE nomina, p_depart, p_nivel, p_puesto INTEGER
|
||||
DEFINE
|
||||
k SMALLINT,
|
||||
ptipo VARCHAR(1),
|
||||
titulo_dep_act, titulo_dep_afecta VARCHAR(100)
|
||||
MAIN
|
||||
DEFER INTERRUPT
|
||||
#WHENEVER ERROR CONTINUE
|
||||
CALL ARG_VAL(1) RETURNING usuarios
|
||||
CALL ARG_VAL(2) RETURNING clave
|
||||
|
||||
CONNECT TO "smarmotech" USER usuarios USING clave
|
||||
SELECT a.* INTO p_companias.* FROM companias a
|
||||
CALL noprmt007()
|
||||
END MAIN
|
||||
|
||||
FUNCTION noprmt007()
|
||||
|
||||
CLEAR SCREEN
|
||||
OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 23
|
||||
|
||||
LET formulario = formulario CLIPPED, "nofmmt007"
|
||||
OPEN FORM nofmmt007 FROM "nofmmt007"
|
||||
DISPLAY FORM nofmmt007
|
||||
#CALL pantalla()
|
||||
#DISPLAY "noprmt007" AT 4,3
|
||||
#DISPLAY "Novedades de la Nomina" AT 6,29
|
||||
CALL nopcad007()
|
||||
END FUNCTION
|
||||
|
||||
FUNCTION nopcad007()
|
||||
## AQUI SE PROCEDE A CAPTURAR LA INFORMACION
|
||||
# WHENEVER ERROR CONTINUE
|
||||
|
||||
DIALOG ATTRIBUTE(UNBUFFERED)
|
||||
|
||||
INPUT BY NAME novedad.num_nomi, novedad.tipo_emp, novedad.veces
|
||||
ATTRIBUTE(WITHOUT DEFAULTS = TRUE)
|
||||
|
||||
AFTER FIELD tipo_emp
|
||||
IF novedad.num_nomi IS NOT NULL THEN
|
||||
LET ptipo = novedad.tipo_emp
|
||||
LET nomina = novedad.num_nomi
|
||||
LET selec10 =
|
||||
"SELECT CONVERT(char(10),a.fecha_del,101),convert(char(10),a.fecha_al,101),a.h_normal ",
|
||||
"FROM notb00010 AS a ",
|
||||
" WHERE a.num_nomi = ",
|
||||
novedad.num_nomi USING "<<<<",
|
||||
" and ",
|
||||
" a.tipo_emp = '",
|
||||
novedad.tipo_emp,
|
||||
"' and ",
|
||||
" a.status_t is null "
|
||||
|
||||
PREPARE busca_fecha FROM selec10
|
||||
|
||||
EXECUTE busca_fecha
|
||||
INTO novedad.fecha_del,
|
||||
novedad.fecha_al,
|
||||
per_nomi.h_normal
|
||||
|
||||
IF status = NOTFOUND THEN
|
||||
LET numero_msg = 3
|
||||
CALL msg(numero_msg)
|
||||
# NEXT FIELD num_nomi
|
||||
END IF
|
||||
IF novedad.tipo_emp IS NOT NULL THEN
|
||||
IF novedad.tipo_emp = "Q" THEN
|
||||
LET descr = "QUINCENAL"
|
||||
END IF
|
||||
IF novedad.tipo_emp = "J" THEN
|
||||
LET descr = "JORNALES"
|
||||
END IF
|
||||
|
||||
IF novedad.tipo_emp = "S" THEN
|
||||
LET descr = "SEMANAL"
|
||||
END IF
|
||||
IF novedad.tipo_emp = "V" THEN
|
||||
LET descr = "VENDEDOR"
|
||||
END IF
|
||||
END IF
|
||||
ELSE
|
||||
LET numero_msg = 16
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD num_nomi
|
||||
END IF
|
||||
DISPLAY BY NAME descr, novedad.fecha_del, novedad.fecha_al
|
||||
|
||||
END INPUT
|
||||
|
||||
CONSTRUCT BY NAME criterio ON d.cod_mov
|
||||
|
||||
AFTER CONSTRUCT
|
||||
|
||||
LET selec =
|
||||
"SELECT d.cod_mov,d.descrip_mov,d.cantidad_cia,d.modifica,d.clase_mov,d.cantidad_cia ",
|
||||
"FROM notb00002 AS d LEFT OUTER JOIN notb00007 AS c ",
|
||||
" on c.cod_mov = d.cod_mov ",
|
||||
" AND c.num_nomi = ",
|
||||
novedad.num_nomi USING "<<<<",
|
||||
" and ",
|
||||
"c.tipo_emp = '",
|
||||
novedad.tipo_emp,
|
||||
"' ",
|
||||
"WHERE d.status_t is null and c.status_t IS NULL and ",
|
||||
criterio CLIPPED,
|
||||
" ORDER BY d.cod_mov "
|
||||
|
||||
PREPARE busca FROM selec
|
||||
DECLARE datos SCROLL CURSOR FOR busca
|
||||
|
||||
LET idx = 1
|
||||
|
||||
FOREACH datos
|
||||
INTO novedad.cod_mov,
|
||||
novedad.descrip_mov,
|
||||
novedad.cantidad_cia,
|
||||
mov_nomi.modifica,
|
||||
mov_nomi.clase_mov,
|
||||
mov_nomi.cantidad_cia
|
||||
|
||||
DISPLAY BY NAME novedad.cod_mov, novedad.descrip_mov
|
||||
## SE INTRODUCEN LOS DATOS DEL ARREGLO Y CHEQUEA QUE LOS MOVIMIENTOS EXISTAN
|
||||
## EN EL CATALOGO DE MOVIMIENTOS.
|
||||
|
||||
CALL arr_novedad.clear()
|
||||
|
||||
# Busqueda de los empleados que tiene el movimiento que esta en memoria
|
||||
LET selec1 =
|
||||
"SELECT DISTINCT A.num_nomi FROM notb00007 A WHERE ",
|
||||
" A.num_nomi = ",
|
||||
novedad.num_nomi USING "<<<<",
|
||||
" and A.tipo_emp ='",
|
||||
novedad.tipo_emp,
|
||||
"' and ",
|
||||
" A.cod_mov = ",
|
||||
novedad.cod_mov,
|
||||
" AND a.status_t IS NULL "
|
||||
PREPARE busca_nomina FROM selec1
|
||||
|
||||
EXECUTE busca_nomina
|
||||
|
||||
# IF status = notfound THEN
|
||||
# LET nomina = novedad.num_nomi - 1
|
||||
# END IF
|
||||
LET selec2 =
|
||||
"SELECT UNIQUE a.num_emp,a.departamento,ISNULL(b.departamento_afecta,a.departamento), a.nivel_emp,a.cod_puesto, ",
|
||||
"a.nom1_emp,b.cantidad,b.valor,b.num_trx,a.sueldo_ac ",
|
||||
"FROM notb00007 b,adtb00003 a,notb00002 c ",
|
||||
"WHERE ",
|
||||
" b.num_nomi = ",
|
||||
nomina USING "<<<<",
|
||||
" and ",
|
||||
" a.num_emp = b.num_emp and ",
|
||||
" a.nomina = '",
|
||||
novedad.tipo_emp,
|
||||
"' and ",
|
||||
" b.cod_mov = ",
|
||||
novedad.cod_mov,
|
||||
" and ",
|
||||
" b.cod_mov = c.cod_mov and ",
|
||||
" (a.status_t is null or ",
|
||||
" a.status_t = 'I') and b.status_t IS NULL ",
|
||||
" ORDER BY a.num_emp "
|
||||
|
||||
PREPARE comando1 FROM selec2
|
||||
DECLARE buscate CURSOR FOR comando1
|
||||
|
||||
LET idx = 1
|
||||
|
||||
FOREACH buscate INTO arr_novedad[idx].*
|
||||
IF status = NOTFOUND THEN
|
||||
LET numero_msg = 3
|
||||
CALL msg(numero_msg)
|
||||
EXIT FOREACH
|
||||
END IF
|
||||
|
||||
SELECT nom1_emp, apell1_emp
|
||||
INTO nombre, apellido
|
||||
FROM adtb00003
|
||||
WHERE num_emp = arr_novedad[idx].num_emp
|
||||
|
||||
LET arr_novedad[idx].descrip1 =
|
||||
nombre CLIPPED, " ", apellido CLIPPED
|
||||
IF novedad.veces > 0 THEN
|
||||
LET arr_novedad[idx].cantidad =
|
||||
arr_novedad[idx].cantidad * 2
|
||||
LET arr_novedad[idx].valor =
|
||||
arr_novedad[idx].valor * novedad.veces
|
||||
END IF
|
||||
{ ESTA EN COMENTARIO EL CALCULO DEL VALOR DE LAS HORAS EXTRAS PORQUE SI POR ALGUN MOTIVO SE GUARDA EN
|
||||
LA TABLA DE NOVEDADES EL VALOR ERRADO, CUANDO SE BUSCA Y SE CALCULA EL USUARIO VA A PENSAR QUE ESTA CORRECTO
|
||||
EL VALOR GUARDADO CALCULADO, ES MEJOR QUE SE PRESENTE EL VALOR Y CUANDO EL USUARIO PASE POR EL CAMPO CANTIDAD
|
||||
SE REALICE EL CALCULO
|
||||
IF mov_nomi.clase_mov ='E' OR novedad.cod_mov = 1 THEN
|
||||
LET salario_diario =arr_novedad[idx].sueldo_act/23.83
|
||||
|
||||
LET factor = (mov_nomi.cantidad_cia/100)+1
|
||||
DISPLAY "empleado a ",arr_novedad[idx].num_emp," ",salario_diario," ",salario_hora," ",mov_nomi.cantidad_cia
|
||||
LET salario_hora = (salario_diario / 8)*factor
|
||||
DISPLAY "empleado b ",arr_novedad[idx].num_emp," ",salario_hora
|
||||
LET arr_novedad[idx].valor = salario_hora * arr_novedad[idx].cantidad
|
||||
END IF
|
||||
}
|
||||
LET idx = idx + 1
|
||||
END FOREACH
|
||||
|
||||
FREE busca_nomina
|
||||
FREE buscate
|
||||
|
||||
LET total1 = 0
|
||||
LET total2 = 0
|
||||
DISPLAY BY NAME total1, total2
|
||||
IF mov_nomi.modifica = 'SI' THEN
|
||||
INPUT ARRAY arr_novedad WITHOUT DEFAULTS FROM consart.*
|
||||
ON ACTION depto
|
||||
LET curr1 = arr_curr()
|
||||
CALL busca_depto()
|
||||
RETURNING arr_novedad[curr1]
|
||||
.departamento_afecta,
|
||||
titulo_dep_afecta
|
||||
BEFORE ROW
|
||||
LET curr1 = arr_curr()
|
||||
LET scr_l = scr_line()
|
||||
AFTER FIELD departamento_afecta
|
||||
IF arr_novedad[curr1]
|
||||
.departamento_afecta IS NULL THEN
|
||||
LET arr_novedad[curr1].departamento_afecta =
|
||||
arr_novedad[curr1].departamento
|
||||
DISPLAY arr_novedad[curr1]
|
||||
.departamento_afecta
|
||||
TO consart.departamento_afecta
|
||||
END IF
|
||||
|
||||
IF arr_novedad[curr1]
|
||||
.departamento_afecta IS NOT NULL THEN
|
||||
SELECT a.nom_dpto
|
||||
INTO titulo_dep_afecta
|
||||
FROM adtb00001 a
|
||||
WHERE a.departamento
|
||||
=
|
||||
arr_novedad[curr1]
|
||||
.departamento_afecta
|
||||
AND a.status_t IS NULL
|
||||
IF STATUS = NOTFOUND THEN
|
||||
CALL msg(3)
|
||||
NEXT FIELD departamento_afecta
|
||||
END IF
|
||||
DISPLAY BY NAME titulo_dep_afecta
|
||||
END IF
|
||||
IF arr_novedad[curr1]
|
||||
.departamento IS NOT NULL THEN
|
||||
SELECT a.nom_dpto
|
||||
INTO titulo_dep_act
|
||||
FROM adtb00001 a
|
||||
WHERE a.departamento
|
||||
=
|
||||
arr_novedad[curr1].departamento
|
||||
AND a.status_t IS NULL
|
||||
|
||||
DISPLAY BY NAME titulo_dep_act
|
||||
END IF
|
||||
AFTER FIELD num_emp
|
||||
|
||||
IF arr_novedad[curr1].num_emp IS NOT NULL THEN
|
||||
LET control = "N"
|
||||
CALL repetido()
|
||||
IF control = "S" THEN
|
||||
NEXT FIELD num_emp
|
||||
END IF
|
||||
|
||||
SELECT nom1_emp,
|
||||
apell1_emp,
|
||||
departamento,
|
||||
nivel_emp,
|
||||
cod_puesto,
|
||||
sueldo_ac
|
||||
INTO nombre,
|
||||
apellido,
|
||||
p_depart,
|
||||
p_nivel,
|
||||
p_puesto,
|
||||
arr_novedad[curr1].sueldo_act
|
||||
FROM adtb00003
|
||||
WHERE num_emp
|
||||
=
|
||||
arr_novedad[curr1].num_emp
|
||||
AND (status_t IS NULL
|
||||
OR status_t = "I")
|
||||
|
||||
IF status = NOTFOUND THEN
|
||||
LET numero_msg = 34
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD num_emp
|
||||
END IF
|
||||
|
||||
LET arr_novedad[curr1].departamento =
|
||||
p_depart
|
||||
LET arr_novedad[curr1].cod_puesto = p_puesto
|
||||
LET arr_novedad[curr1].nivel_emp = p_nivel
|
||||
LET arr_novedad[curr1].descrip1 =
|
||||
nombre CLIPPED, " ", apellido CLIPPED
|
||||
|
||||
DISPLAY arr_novedad[curr1].departamento
|
||||
TO consart[scr_l].departamento
|
||||
DISPLAY arr_novedad[curr1].nivel_emp
|
||||
TO consart[scr_l].nivel_emp
|
||||
DISPLAY arr_novedad[curr1].cod_puesto
|
||||
TO consart[scr_l].cod_puesto
|
||||
DISPLAY arr_novedad[curr1].descrip1
|
||||
TO consart[scr_l].descrip1
|
||||
DISPLAY arr_novedad[curr1].num_trx
|
||||
TO consart[scr_l].num_trx
|
||||
DISPLAY arr_novedad[curr1].sueldo_act
|
||||
TO consart[scr_l].sueldo_act
|
||||
|
||||
{ ESTE CONTROL ERA CUANDO EL PROGRAMA DE GENERACION DE NOMINAS
|
||||
NO TENIA LA CARACTERISITCAS DE GENERAR LOS CODIGOS AUNQU LO
|
||||
PUSIERAS EN AMBAS TABLAS (FIJO Y NOVEDAD)
|
||||
|
||||
SELECT cod_mov FROM notb00003
|
||||
WHERE cod_mov = novedad.cod_mov and
|
||||
num_emp = arr_novedad[curr1].num_emp and
|
||||
status_t is null
|
||||
|
||||
IF status != notfound THEN
|
||||
LET numero_msg = 196
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD num_emp
|
||||
END IF
|
||||
}
|
||||
END IF
|
||||
|
||||
AFTER FIELD cantidad
|
||||
IF arr_novedad[curr1].cantidad IS NOT NULL THEN
|
||||
LET total1 = 0
|
||||
LET salario_diario = 0
|
||||
LET salario_hora = 0
|
||||
LET factor = 0
|
||||
FOR i = 1 TO arr_novedad.getLength()
|
||||
IF arr_novedad[i].valor IS NULL THEN
|
||||
LET arr_novedad[i].valor = 0
|
||||
END IF
|
||||
LET total1 =
|
||||
total1 + arr_novedad[i].cantidad
|
||||
END FOR
|
||||
IF mov_nomi.clase_mov = 'E'
|
||||
OR novedad.cod_mov = 1 THEN
|
||||
LET salario_diario =
|
||||
arr_novedad[curr1].sueldo_act
|
||||
/ 23.83
|
||||
|
||||
LET factor =
|
||||
(mov_nomi.cantidad_cia / 100) + 1
|
||||
# DISPLAY "empleado a ",arr_novedad[curr1].num_emp," s diario ",salario_diario," s hora ",
|
||||
# salario_hora," ",factor
|
||||
LET salario_hora =
|
||||
(salario_diario / 8) * factor
|
||||
# DISPLAY "empleado b ",arr_novedad[curr1].num_emp," ",salario_hora
|
||||
LET arr_novedad[curr1].valor =
|
||||
salario_hora
|
||||
* arr_novedad[curr1].cantidad
|
||||
NEXT FIELD sueldo_Act
|
||||
END IF
|
||||
END IF
|
||||
DISPLAY BY NAME total1 ATTRIBUTE(BOLD)
|
||||
AFTER FIELD valor
|
||||
IF arr_novedad[curr1].valor IS NOT NULL THEN
|
||||
LET total2 = 0
|
||||
FOR i = 1 TO arr_count()
|
||||
IF arr_novedad[i].valor IS NULL THEN
|
||||
LET arr_novedad[i].valor = 0
|
||||
END IF
|
||||
LET total2 =
|
||||
total2 + arr_novedad[i].valor
|
||||
END FOR
|
||||
END IF
|
||||
DISPLAY BY NAME total2 ATTRIBUTE(BOLD)
|
||||
AFTER INPUT
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = FALSE
|
||||
CLEAR FORM
|
||||
RETURN
|
||||
END IF
|
||||
LET opt =
|
||||
fgl_winquestion(
|
||||
"Actualiza",
|
||||
"Desa Adicionar Informacion?",
|
||||
"yes",
|
||||
"yes|no",
|
||||
"question",
|
||||
0)
|
||||
|
||||
IF opt = "no" THEN
|
||||
CONTINUE INPUT
|
||||
END IF
|
||||
|
||||
## SI NO EXISTE NINGUN PROBLEMA EN LA ENTRADA DE INFORMACION SE PROCEDE
|
||||
## A INSERTAR EL REGISTRO
|
||||
|
||||
BEGIN WORK
|
||||
DELETE FROM notb00007
|
||||
WHERE num_nomi = nomina
|
||||
AND cod_mov = novedad.cod_mov
|
||||
AND tipo_emp = novedad.tipo_emp
|
||||
IF STATUS < 0 THEN
|
||||
ROLLBACK WORK
|
||||
EXIT PROGRAM
|
||||
END IF
|
||||
|
||||
# Cuando el movimiento se va a faccionar en cuotas
|
||||
IF novedad.veces > 0 THEN
|
||||
LET k = 1
|
||||
WHILE k <= novedad.veces
|
||||
LET novedad.num_nomi1 =
|
||||
novedad.num_nomi + 1
|
||||
DELETE FROM notb00007
|
||||
WHERE num_nomi = novedad.num_nomi
|
||||
AND cod_mov = novedad.cod_mov
|
||||
AND tipo_emp = novedad.tipo_emp
|
||||
IF STATUS < 0 THEN
|
||||
ROLLBACK WORK
|
||||
|
||||
EXIT PROGRAM
|
||||
END IF
|
||||
|
||||
FOR idx = 1 TO arr_count()
|
||||
IF arr_novedad[idx]
|
||||
.num_emp IS NOT NULL THEN
|
||||
LET p_cantidad =
|
||||
arr_novedad[idx].cantidad
|
||||
/ novedad.veces
|
||||
LET p_valor =
|
||||
arr_novedad[idx].valor
|
||||
/ novedad.veces
|
||||
IF arr_novedad[idx]
|
||||
.departamento_afecta IS NULL THEN
|
||||
LET arr_novedad[idx]
|
||||
.departamento_afecta =
|
||||
arr_novedad[idx]
|
||||
.departamento
|
||||
|
||||
END IF
|
||||
IF arr_novedad[idx]
|
||||
.valor IS NULL THEN
|
||||
ROLLBACK WORK
|
||||
CALL msg(16)
|
||||
NEXT FIELD valor
|
||||
END IF
|
||||
INSERT INTO notb00007(
|
||||
num_nomi,
|
||||
tipo_emp,
|
||||
num_emp,
|
||||
departamento,
|
||||
nivel_emp,
|
||||
cod_puesto,
|
||||
cod_mov,
|
||||
cantidad,
|
||||
valor,
|
||||
us_crea,
|
||||
fech_crea,
|
||||
departamento_afecta)
|
||||
VALUES(novedad.num_nomi,
|
||||
novedad.tipo_emp,
|
||||
arr_novedad[idx]
|
||||
.num_emp,
|
||||
arr_novedad[idx]
|
||||
.departamento,
|
||||
arr_novedad[idx]
|
||||
.nivel_emp,
|
||||
arr_novedad[idx]
|
||||
.cod_puesto,
|
||||
novedad.cod_mov,
|
||||
p_cantidad,
|
||||
p_valor,
|
||||
SUSER_SNAME(),
|
||||
GETDATE(),
|
||||
arr_novedad[idx]
|
||||
.departamento_afecta)
|
||||
IF STATUS < 0 THEN
|
||||
ROLLBACK WORK
|
||||
|
||||
EXIT PROGRAM
|
||||
END IF
|
||||
|
||||
END IF
|
||||
END FOR
|
||||
LET k = k + 1
|
||||
END WHILE
|
||||
END IF
|
||||
|
||||
# Inserta las novedades normales
|
||||
FOR idx = 1 TO arr_count()
|
||||
IF arr_novedad[idx].num_emp IS NOT NULL THEN
|
||||
LET p_cantidad =
|
||||
arr_novedad[idx].cantidad
|
||||
LET p_valor = arr_novedad[idx].valor
|
||||
IF novedad.veces > 0 THEN
|
||||
LET p_cantidad =
|
||||
arr_novedad[idx].cantidad
|
||||
/ novedad.veces
|
||||
LET p_valor =
|
||||
arr_novedad[idx].valor
|
||||
/ novedad.veces
|
||||
END IF
|
||||
IF arr_novedad[idx]
|
||||
.departamento_afecta IS NULL THEN
|
||||
LET arr_novedad[idx]
|
||||
.departamento_afecta =
|
||||
arr_novedad[idx].departamento
|
||||
|
||||
END IF
|
||||
IF arr_novedad[idx].valor IS NULL THEN
|
||||
ROLLBACK WORK
|
||||
CALL msg(16)
|
||||
NEXT FIELD valor
|
||||
END IF
|
||||
|
||||
INSERT INTO notb00007(
|
||||
num_nomi,
|
||||
tipo_emp,
|
||||
num_emp,
|
||||
departamento,
|
||||
nivel_emp,
|
||||
cod_puesto,
|
||||
cod_mov,
|
||||
cantidad,
|
||||
valor,
|
||||
us_crea,
|
||||
fech_crea,
|
||||
departamento_afecta)
|
||||
VALUES(novedad.num_nomi,
|
||||
novedad.tipo_emp,
|
||||
arr_novedad[idx].num_emp,
|
||||
arr_novedad[idx].departamento,
|
||||
arr_novedad[idx].nivel_emp,
|
||||
arr_novedad[idx].cod_puesto,
|
||||
novedad.cod_mov,
|
||||
p_cantidad,
|
||||
p_valor,
|
||||
SUSER_SNAME(),
|
||||
GETDATE(),
|
||||
arr_novedad[idx]
|
||||
.departamento_afecta)
|
||||
|
||||
IF STATUS < 0 THEN
|
||||
ROLLBACK WORK
|
||||
|
||||
EXIT PROGRAM
|
||||
END IF
|
||||
END IF
|
||||
END FOR
|
||||
EXIT INPUT
|
||||
END INPUT
|
||||
|
||||
LET numero_msg = 13
|
||||
CALL msg(numero_msg)
|
||||
# Se puso el EXIT WHILE porque cuando hay mas de una nomina en la tabla
|
||||
# de novedades no salia al final de los empleados digitados
|
||||
ELSE
|
||||
DISPLAY ARRAY arr_novedad TO consart.*
|
||||
|
||||
END IF
|
||||
EXIT FOREACH
|
||||
END FOREACH
|
||||
IF mov_nomi.modifica = "SI" THEN
|
||||
COMMIT WORK
|
||||
END IF
|
||||
END CONSTRUCT
|
||||
|
||||
ON ACTION cancel
|
||||
CALL msg(2)
|
||||
EXIT PROGRAM
|
||||
|
||||
END DIALOG
|
||||
|
||||
END FUNCTION
|
||||
{
|
||||
FUNCTION nopcmf007()
|
||||
## AQUI SE PREPARA PARA LA CAPTURA DEL CRITERIO DE SELECCION PARA LA
|
||||
## MODIFICACION DE REGISTROS.
|
||||
|
||||
# WHENEVER ERROR CONTINUE
|
||||
CONSTRUCT BY NAME criterio ON b.num_nomi,b.tipo_emp,a.cod_mov
|
||||
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = FALSE
|
||||
RETURN
|
||||
END IF
|
||||
|
||||
LET SELEC1 = " SELECT UNIQUE b.num_nomi,b.tipo_emp,c.fecha_del, ",
|
||||
"c.fecha_al,a.num_emp,a.departamento,a.nivel_emp, ",
|
||||
"a.cod_puesto,a.nom1_emp,a.apell1_emp ",
|
||||
" FROM adtb00003 a,notb00007 b,notb00010 c where ",
|
||||
" a.num_emp = b.num_emp and ",
|
||||
" a.departamento = b.departamento and ",
|
||||
" b.num_nomi = c.num_nomi and ",
|
||||
" b.tipo_emp = c.tipo_emp and ",
|
||||
" (a.status_t is null or ",
|
||||
" a.status_t = 'I') and ",
|
||||
criterio clipped,
|
||||
" ORDER BY 2,1,5,6"
|
||||
|
||||
PREPARE busca1 FROM selec1
|
||||
DECLARE datos1 SCROLL CURSOR FOR busca1
|
||||
OPEN datos1
|
||||
|
||||
LET idx = 1
|
||||
WHILE status != NOTFOUND
|
||||
FETCH datos1 INTO novedad.*
|
||||
|
||||
IF status = NOTFOUND THEN
|
||||
EXIT WHILE
|
||||
END IF
|
||||
|
||||
LET descrip1 = novedad.nom1_emp clipped," ",novedad.apell1_emp clipped
|
||||
IF novedad.tipo_emp = "Q" THEN LET descr = "QUINCENAL" END IF
|
||||
IF novedad.tipo_emp = "S" THEN LET descr = "SEMANAL" END IF
|
||||
IF novedad.tipo_emp = "V" THEN LET descr = "VENDEDOR" END IF
|
||||
DISPLAY BY NAME novedad.num_nomi,novedad.tipo_emp,descr,novedad.fecha_del,
|
||||
novedad.fecha_al,novedad.num_emp,novedad.departamento,
|
||||
novedad.nivel_emp,novedad.cod_puesto,descrip1
|
||||
|
||||
## SE PROCEDE A MODIFICAR LOS DATOS DEL ARREGLO Y CHEQUEA QUE LOS MOVIMIENTOS
|
||||
## EXISTAN EN EL CATALOGO DE MOVIMIENTOS.
|
||||
|
||||
FOR idx = 1 to 3
|
||||
LET arr_novedad[idx].cod_mov = NULL
|
||||
LET arr_novedad[idx].descrip_mov = NULL
|
||||
LET arr_novedad[idx].cantidad = NULL
|
||||
LET arr_novedad[idx].valor = NULL
|
||||
|
||||
DISPLAY arr_novedad[idx].cod_mov to consart[idx].cod_mov
|
||||
DISPLAY arr_novedad[idx].descrip_mov to consart[idx].descrip_mov
|
||||
DISPLAY arr_novedad[idx].cantidad to consart[idx].cantidad
|
||||
DISPLAY arr_novedad[idx].valor to consart[idx].valor
|
||||
END FOR
|
||||
|
||||
DECLARE buscate1 CURSOR FOR
|
||||
SELECT c.cod_mov,d.descrip_mov,c.cantidad,c.valor
|
||||
FROM notb00007 c,notb00002 d
|
||||
WHERE c.cod_mov = d.cod_mov and
|
||||
c.num_emp = novedad.num_emp and
|
||||
c.departamento = novedad.departamento and
|
||||
c.num_nomi = novedad.num_nomi and
|
||||
c.tipo_emp = novedad.tipo_emp and
|
||||
c.status_t is null
|
||||
ORDER BY 1
|
||||
|
||||
LET idx = 1
|
||||
|
||||
FOREACH buscate1 INTO arr_novedad[idx].*
|
||||
IF status = NOTFOUND THEN
|
||||
LET numero_msg = 3
|
||||
CALL msg(numero_msg)
|
||||
EXIT FOREACH
|
||||
END IF
|
||||
LET idx = idx + 1
|
||||
END FOREACH
|
||||
CALL set_count(idx - 1)
|
||||
|
||||
INPUT ARRAY arr_novedad WITHOUT DEFAULTS FROM consart.*
|
||||
|
||||
## VENTANA QUE BUSCA LOS MOVIMIENTOS
|
||||
ON KEY (CONTROL-W)
|
||||
LET curr1 = arr_curr()
|
||||
LET scr_l = scr_line()
|
||||
CASE
|
||||
WHEN INFIELD (cod_mov)
|
||||
CALL busca_movimientos()
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = FALSE
|
||||
NEXT FIELD cod_mov
|
||||
END IF
|
||||
IF status = NOTFOUND THEN
|
||||
LET numero_msg = 34
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD cod_mov
|
||||
END IF
|
||||
SELECT descrip_mov INTO mov_nomi.descrip_mov
|
||||
FROM notb00002
|
||||
WHERE cod_mov = arr_novedad[curr1].cod_mov and
|
||||
status_t is null
|
||||
|
||||
LET arr_novedad[curr1].cod_mov = arr_fijo[curr1].cod_mov
|
||||
LET arr_novedad[curr1].descrip_mov = mov_nomi.descrip_mov
|
||||
DISPLAY arr_novedad[curr1].cod_mov to consart[scr_l].cod_mov
|
||||
DISPLAY arr_novedad[curr1].descrip_mov to consart[scr_l].descrip_mov
|
||||
LET control = "N"
|
||||
CALL repetido()
|
||||
IF control = "S" THEN
|
||||
NEXT FIELD cod_mov
|
||||
END IF
|
||||
NEXT FIELD cantidad
|
||||
END CASE
|
||||
|
||||
AFTER FIELD cod_mov
|
||||
LET curr1 = arr_curr()
|
||||
LET scr_l = scr_line()
|
||||
|
||||
IF arr_novedad[curr1].cod_mov IS NOT NULL THEN
|
||||
LET control = "N"
|
||||
CALL repetido()
|
||||
IF control = "S" THEN
|
||||
NEXT FIELD cod_mov
|
||||
END IF
|
||||
|
||||
SELECT descrip_mov INTO mov_nomi.descrip_mov
|
||||
FROM notb00002
|
||||
WHERE cod_mov = arr_novedad[curr1].cod_mov and
|
||||
status_t is null
|
||||
|
||||
IF status = NOTFOUND THEN
|
||||
LET numero_msg = 34
|
||||
CALL msg(numero_msg)
|
||||
NEXT FIELD cod_mov
|
||||
END IF
|
||||
|
||||
LET arr_novedad[curr1].descrip_mov = mov_nomi.descrip_mov
|
||||
DISPLAY arr_novedad[curr1].descrip_mov to consart[scr_l].descrip_mov
|
||||
END IF
|
||||
|
||||
AFTER INPUT
|
||||
IF int_flag THEN
|
||||
LET numero_msg = 2
|
||||
CALL msg(numero_msg)
|
||||
LET int_flag = FALSE
|
||||
CLEAR FORM
|
||||
RETURN
|
||||
END IF
|
||||
EXIT INPUT
|
||||
END INPUT
|
||||
|
||||
|
||||
DELETE FROM notb00007 where num_nomi = novedad.num_nomi and
|
||||
tipo_emp = novedad.tipo_emp and
|
||||
num_emp = novedad.num_emp
|
||||
|
||||
FOR idx = 1 to arr_count()
|
||||
IF arr_novedad[idx].cod_mov is not null THEN
|
||||
|
||||
INSERT INTO notb00007 VALUES (novedad.num_nomi,novedad.tipo_emp,
|
||||
novedad.num_emp,novedad.departamento,novedad.nivel_emp,
|
||||
novedad.cod_puesto,arr_novedad[idx].cod_mov,
|
||||
arr_novedad[idx].cantidad,arr_novedad[idx].valor,null,
|
||||
SUSER_SNAME(),GETDATE(),null,null)
|
||||
END IF
|
||||
END FOR
|
||||
|
||||
LET numero_msg = 13
|
||||
CALL msg(numero_msg)
|
||||
IF status < 0 THEN
|
||||
CALL integridad()
|
||||
END IF
|
||||
END WHILE
|
||||
END FUNCTION
|
||||
}
|
||||
## VERIFICA QUE NO SE REPITAN LOS MOVIMIENTOS
|
||||
FUNCTION repetido()
|
||||
DEFINE movi_ant RECORD
|
||||
num_emp SMALLINT
|
||||
END RECORD
|
||||
|
||||
LET movi_ant.num_emp = arr_novedad[curr1].num_emp
|
||||
|
||||
FOR idx = 1 TO arr_count()
|
||||
IF idx != curr1 THEN
|
||||
IF arr_novedad[idx].num_emp IS NOT NULL THEN
|
||||
IF arr_novedad[idx].num_emp = movi_ant.num_emp THEN
|
||||
LET numero_msg = 135
|
||||
CALL msg(numero_msg)
|
||||
LET control = "S"
|
||||
ELSE
|
||||
IF control != "S" THEN
|
||||
LET control = "N"
|
||||
END IF
|
||||
END IF
|
||||
END IF
|
||||
END IF
|
||||
END FOR
|
||||
END FUNCTION
|
||||
Reference in New Issue
Block a user