278 lines
7.8 KiB
Plaintext
278 lines
7.8 KiB
Plaintext
GLOBALS
|
|
DEFINE numero_msg SMALLINT,
|
|
idx INT
|
|
DEFINE criterio,selec1 STRING
|
|
END GLOBALS
|
|
FUNCTION busca_puesto()
|
|
|
|
DEFINE buscar_puesto DYNAMIC ARRAY OF RECORD
|
|
cod_puesto SMALLINT,
|
|
nom_puesto VARCHAR(50)
|
|
END RECORD,
|
|
xcod_puesto SMALLINT,
|
|
xdescripcion VARCHAR(50)
|
|
|
|
OPEN WINDOW busqueda1 AT 10,10 WITH FORM "adfmwd002"
|
|
ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last)
|
|
CONSTRUCT criterio ON a.nom_puesto FROM nom_puesto
|
|
IF INT_FLAG THEN
|
|
CLOSE WINDOW busqueda1
|
|
LET INT_FLAG = FALSE
|
|
RETURN 0,' '
|
|
END IF
|
|
LET selec1 = "SELECT a.cod_puesto,a.nom_puesto FROM adtb00004 a ",
|
|
" WHERE ",
|
|
" a.status_t is null AND ",
|
|
criterio clipped,
|
|
" ORDER BY a.cod_puesto "
|
|
|
|
PREPARE ppuesto FROM selec1
|
|
DECLARE cpuesto CURSOR FOR ppuesto
|
|
|
|
|
|
LET idx = 1
|
|
FOREACH cpuesto INTO buscar_puesto[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)
|
|
DISPLAY ARRAY buscar_puesto TO s_puesto.*
|
|
AFTER DISPLAY
|
|
LET idx = arr_curr()
|
|
LET xcod_puesto = buscar_puesto[idx].cod_puesto
|
|
LET xdescripcion = buscar_puesto[idx].nom_puesto
|
|
EXIT DISPLAY
|
|
END DISPLAY
|
|
CLOSE WINDOW busqueda1
|
|
|
|
RETURN xcod_puesto,xdescripcion
|
|
END FUNCTION
|
|
FUNCTION busca_depto()
|
|
DEFINE buscar_depto DYNAMIC ARRAY OF RECORD
|
|
departamento SMALLINT,
|
|
nom_dpto VARCHAR(50)
|
|
END RECORD,
|
|
xdepto SMALLINT,
|
|
xnombre VARCHAR(50)
|
|
|
|
OPEN WINDOW busqueda AT 10,10 WITH FORM "adfmwd001"
|
|
ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last)
|
|
CONSTRUCT criterio ON adtb00001.nom_dpto FROM adtb00001.nom_dpto
|
|
|
|
LET selec1 = "SELECT departamento,nom_dpto FROM adtb00001 ",
|
|
" WHERE ",
|
|
" status_t is null AND ",
|
|
criterio clipped,
|
|
"ORDER BY 1 "
|
|
|
|
PREPARE busco FROM selec1
|
|
DECLARE local CURSOR FOR busco
|
|
|
|
LET idx = 1
|
|
FOREACH local INTO buscar_depto[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)
|
|
DISPLAY ARRAY buscar_depto TO s_depto.*
|
|
|
|
LET idx = arr_curr()
|
|
LET xdepto = buscar_depto[idx].departamento
|
|
LET xnombre = buscar_depto[idx].nom_dpto
|
|
|
|
CLOSE WINDOW busqueda
|
|
RETURN xdepto,xnombre
|
|
END FUNCTION
|
|
|
|
## VENTANA PARA DESPLEGAR LOS NIVELES EDUCATIVOS
|
|
FUNCTION busca_educacion()
|
|
|
|
DEFINE buscar_educacion DYNAMIC ARRAY OF RECORD
|
|
cod_educa SMALLINT,
|
|
nom_educa VARCHAR(50)
|
|
END RECORD,
|
|
xeducacion SMALLINT,
|
|
xnombre VARCHAR(50)
|
|
|
|
OPEN WINDOW busqueda2 AT 10,10 WITH FORM "adfmwd011"
|
|
ATTRIBUTE (BORDER,FORM LINE FIRST + 2, comment line last)
|
|
CONSTRUCT criterio ON adtb00005.nom_educa FROM adtb00005.nom_educa
|
|
|
|
LET selec1 = "SELECT cod_educa,nom_educa FROM adtb00005 ",
|
|
" WHERE ",
|
|
" status_t is null AND ",
|
|
criterio clipped,
|
|
"ORDER BY 1 "
|
|
|
|
PREPARE busca2 FROM selec1
|
|
DECLARE local2 CURSOR FOR busca2
|
|
|
|
LET idx = 1
|
|
FOREACH local2 INTO buscar_educacion[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)
|
|
DISPLAY ARRAY buscar_educacion TO s_educa.*
|
|
LET idx = arr_curr()
|
|
LET xeducacion = buscar_educacion[idx].cod_educa
|
|
LET xnombre = buscar_educacion[idx].nom_educa
|
|
|
|
CLOSE WINDOW busqueda2
|
|
RETURN xeducacion,xnombre
|
|
END FUNCTION
|
|
|
|
FUNCTION codigos_nomina()
|
|
DEFINE id SMALLINT, descripcion CHAR(30),
|
|
pcodigo ui.ComboBox
|
|
|
|
|
|
LET pcodigo = ui.ComboBox.forName("formonly.cod_mov")
|
|
|
|
DECLARE bcodigos CURSOR FOR
|
|
SELECT a.cod_mov,a.descrip_mov FROM notb00002 a WHERE a.status_t IS NULL
|
|
ORDER BY a.descrip_mov
|
|
CALL pcodigo.clear()
|
|
|
|
FOREACH bcodigos INTO id,descripcion
|
|
CALL pcodigo.additem(id,descripcion)
|
|
END FOREACH
|
|
|
|
END FUNCTION
|
|
|
|
FUNCTION codigos_accion()
|
|
DEFINE id SMALLINT, descripcion CHAR(30),
|
|
|
|
pcodigo ui.ComboBox
|
|
|
|
|
|
LET pcodigo = ui.ComboBox.forName("adtb00020.cod_mto")
|
|
|
|
DECLARE ccodigos CURSOR FOR
|
|
SELECT a.cod_mto,a.desc_mto FROM adtb00009 a WHERE a.status_t IS NULL
|
|
ORDER BY a.desc_mto
|
|
|
|
CALL pcodigo.clear()
|
|
|
|
FOREACH ccodigos INTO id,descripcion
|
|
CALL pcodigo.additem(id,descripcion)
|
|
END FOREACH
|
|
|
|
END FUNCTION
|
|
FUNCTION calcula_salarios(ptipo_nomina,xnum_emp,fecha_liquida)
|
|
DEFINE pvalor,valor_total,promedio_ano_actual, promedio_ano_anterior,m_valor_total,incentivos,
|
|
sueldo_promedio,salario_dia,sueldo_acumulado
|
|
DECIMAL(12,2),
|
|
ptipo_nomina VARCHAR(1),
|
|
xnum_emp INT,
|
|
fecha_liquida DATE
|
|
|
|
LET promedio_ano_actual = 0
|
|
LET promedio_ano_anterior = 0
|
|
LET m_valor_total = 0
|
|
|
|
# Busqueda del sueldo en la tabla actual
|
|
DECLARE busca_salario CURSOR FOR
|
|
SELECT SUM(a.valor),a.fecha FROM notb00008 a,notb00002 b
|
|
WHERE a.num_emp = xnum_emp AND
|
|
a.cod_mov =b.cod_mov AND
|
|
b.vacaciones = "SI" AND
|
|
a.valor != 0 AND
|
|
a.fecha <= fecha_liquida
|
|
GROUP BY a.fecha
|
|
ORDER BY a.fecha DESC
|
|
|
|
LET idx = 1
|
|
LET valor_total = 0
|
|
FOREACH busca_salario INTO pvalor
|
|
|
|
LET valor_total = valor_total + pvalor
|
|
IF ptipo_nomina = "Q" OR ptipo_nomina = 'J' THEN
|
|
IF idx = 24 THEN
|
|
SELECT a.monto INTO incentivos
|
|
FROM notbingresos a
|
|
WHERE a.num_emp = xnum_emp
|
|
|
|
IF incentivos IS NOT NULL THEN
|
|
LET valor_total = valor_total + (incentivos * idx)
|
|
LET incentivos = 0
|
|
END IF
|
|
|
|
EXIT FOREACH
|
|
END IF
|
|
ELSE
|
|
IF idx = 52 THEN
|
|
EXIT FOREACH
|
|
END IF
|
|
END IF
|
|
|
|
LET idx = idx + 1
|
|
END FOREACH
|
|
IF idx = 0 OR idx IS NULL THEN
|
|
LET idx = 1
|
|
END IF
|
|
IF ptipo_nomina = "S" THEN
|
|
IF idx = 52 THEN
|
|
LET idx = idx - 1
|
|
END IF
|
|
LET idx = idx /4
|
|
END IF
|
|
IF ptipo_nomina = "Q" THEN
|
|
LET idx = idx / 2
|
|
END IF
|
|
LET sueldo_acumulado = valor_total
|
|
LET valor_total = valor_total / idx
|
|
|
|
LET sueldo_promedio = valor_total
|
|
LET salario_dia = sueldo_promedio / 23.83
|
|
# DISPLAY "sueldo dia ",salario_dia," PROM ",sueldo_promedio," IDX ",idx, " v total ",valor_total
|
|
RETURN salario_dia,sueldo_acumulado
|
|
END FUNCTION
|
|
FUNCTION busca_foto()
|
|
DEFINE imagenom,filepath,filedestino STRING,
|
|
foto_emp BYTE,
|
|
xsecuencia INT
|
|
|
|
SELECT a.secuencia INTO xsecuencia FROM adtb00048 a
|
|
IF xsecuencia IS NULL THEN
|
|
LET xsecuencia = 0
|
|
END IF
|
|
LET xsecuencia = xsecuencia +1
|
|
UPDATE adtb00048 SET secuencia = xsecuencia
|
|
|
|
# LET imagenom = "*.*"
|
|
CALL ui.interface.frontcall("standard","openfile",[imagenom,"*","*.png *.jpg *.bmp *.gif","Busca Imagen"],filepath)
|
|
IF filepath IS NOT NULL THEN
|
|
LOCATE foto_Emp IN MEMORY
|
|
LET filedestino = xsecuencia USING "&&&&&&",".jpg"
|
|
#LET filedestino = "F:\\FOURJS\\GAS22006\\pic\\NOMINA\\"
|
|
# LET filedestino = filedestino CLIPPED,"\\",emplea.num_emp USING "&&&&&",".jpg"
|
|
# CALL FGL_WINMESSAGE("W",filedestino,"stop")
|
|
CALL fgl_getfile(filepath,filedestino)
|
|
CALL comprimeImagen(filedestino,' -resize 300x300 ')
|
|
CALL foto_emp.readFile(filedestino)
|
|
|
|
|
|
DISPLAY filedestino TO foto_solicita
|
|
|
|
END IF
|
|
RETURN foto_emp,filedestino
|
|
END FUNCTION |