Files
MBS/PROYECTO/nodir/noprrp008.4gl
T

592 lines
22 KiB
Plaintext

{
------------------------------------------------------------------------
FORMULARIO : NOPRRP008
OBJETIVO : Reporte para imprimir los Volantes
PROGRAMADOR : Ing. Juan Soto.
FECHA REALIZACION : Noviembre 5, 1993
MODIFICADO POR : Ing. Juan Soto
FECHA : Marzo 11, 2003
DESCRIPCION : Volante de Los empleados por pagar la nomina automatica
en el BANCO POPULAR, EL CODIGO DE LA EMPRESA ES EL 3563.
-----------------------------------------------------------------------------
}
IMPORT JAVA javax.mail.Session
GLOBALS "noprgb000.4gl"
DEFINE genera CHAR(2),
xingresos,xdescuentos DEC(12,2),
num_Doc,email_err,cuenta_envio,num_nomi_ant INT,
estado_Envio VARCHAR(50),
vendedorEmail,emailCC VARCHAR(60),cuerpo_correo VARCHAR(2000),
subject VARCHAR(100), perfil,procedimiento VARCHAR(60),nombre_file,nombre_empleado VARCHAR(80)
DEFINE xusername,xsmtphost,xsmtpport,xpassword,respuesta,mensajes STRING
DEFINE meses ARRAY[12] OF CHAR(15)
DEFINE criterio10 CHAR(200)
MAIN
DEFER INTERRUPT
CALL STARTLOG("volantes.txt")
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
CALL ARG_VAL(3) RETURNING impresor
CONNECT to "smarmotech" USER usuarios USING clave
SELECT a.* INTO p_companias.* FROM companias a
CALL noprrp008()
END MAIN
#"file:///f:/master/IMAGENES/LOGO.JPG"
#"file:///C://Users//jsoto//Documents//PROYECTOS//BDL320//MARMOTECH//PROYECTO//bin//IMAGENES//LOGO_DCM.PNG"
FUNCTION noprrp008()
DEFINE handler om.SaxDocumentHandler, -- return value from fgl_report_commitCurrentSettings()
r_filename STRING, -- filename of Report Design Document including .4rp extension
r_output STRING, -- output format option
preview INTEGER -- TRUE/FALSE, to set preview option
DEFINE datos_recibo RECORD
num_emp LIKE adtb00003.num_emp,
departamento LIKE adtb00003.departamento,
nivel_emp LIKE adtb00003.nivel_emp,
cod_puesto LIKE adtb00003.cod_puesto,
nom1_emp LIKE adtb00003.nom1_emp,
apell1_emp LIKE adtb00003.nom1_emp,
nom2_emp LIKE adtb00003.nom1_emp,
apell2_emp LIKE adtb00003.nom1_emp,
cod_mov LIKE notb00008.cod_mov,
descrip_mov LIKE notb00002.segundo_enc,
tipo_d CHAR(1),
cantidad LIKE notb00008.cantidad,
valor LIKE notb00008.valor,
cuenta_no LIKE adtb00003.cuenta_no,
email CHAR(100),
nombre CHAR(80),
numero INTEGER,
fecha DATE,
acumulado DECIMAL(12,2),
neto DECIMAL(12,2)
END RECORD,
retorne BOOLEAN
OPTIONS
FORM LINE 9,
ERROR LINE 24,
COMMENT LINE 22
# Desplegue de pantalla y de formulario para la captura de informacion
#CALL pantalla()
#LET formulario = formulario CLIPPED,"nofmrp008"
OPEN FORM nofmrp008 FROM "nofmrp008"
DISPLAY FORM nofmrp008
#DISPLAY "noprrp008" AT 4,2 ATTRIBUTE(RED)
#DISPLAY "Volantes de Nomina" AT 6,31 ATTRIBUTE(BLACK)
INITIALIZE c_entra TO null
#Captura de informacion para el reporte: banco,numero de nomina,cheque_no
INPUT BY NAME c_entra.*,genera,imp_form
BEFORE INPUT
NEXT FIELD num_nomi
AFTER FIELD tipo_emp
IF c_entra.tipo_emp = "Q" THEN
LET c_entra.nombre_tipo = "QUINCENAL"
END IF
IF c_entra.tipo_emp = "S" THEN
LET c_entra.nombre_tipo = "SEMANAL"
END IF
IF c_entra.tipo_emp = "V" THEN
LET c_entra.nombre_tipo = "VENDEDORES"
END IF
# ESTE VALOR LO TENIA AL 18/09/2019 LET fecha_inicial = "01/01/2007"
LET fecha_inicial = "01/01/2010"
SELECT COUNT(*) INTO cuenta_emp FROM adtb00003
WHERE (status_t IS NULL OR
status_t = "I") AND nomina = c_entra.tipo_emp AND cuenta_no IS NOT NULL
# Monto Nomina
# Del monto total de la nomina se quitaran las fichas mas abajo mencionadas porque ellos tienen
# Problemas de credito en el banco.
SELECT SUM(a.valor) INTO p_valor FROM notb00008 a,adtb00003 b
WHERE a.num_nomi = c_entra.num_nomi AND
a.tipo_emp = c_entra.tipo_emp AND
a.cod_mov not in (100,101,102,98,50,54) AND
a.clase_mov not in ("F") AND
# a.num_emp NOT IN (560,564,609,614)
a.num_emp = b.num_emp AND b.cuenta_no IS NOT NULL AND
a.status_t IS NULL
DISPLAY BY NAME c_entra.nombre_tipo ATTRIBUTE (BOLD)
SELECT tipo_emp,CAST(fecha_del AS CHAR(10)),CAST(fecha_al AS CHAR(10))
INTO datos_peri.* FROM notb00010
WHERE num_nomi = c_entra.num_nomi and
tipo_emp = c_entra.tipo_emp
IF status = notfound THEN
LET numero_msg = 3
CALL msg(numero_msg)
NEXT FIELD tipo_emp
END IF
DISPLAY BY NAME datos_peri.* ATTRIBUTE(BOLD)
AFTER INPUT
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
EXIT INPUT
END INPUT
CONSTRUCT BY NAME criterio10 ON a.departamento,a.num_emp
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
LET num_Doc = 0
LET selec10 =
"SELECT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ",
"a.nom1_emp,a.apell1_emp,a.nom2_emp,a.apell2_emp, ",
"b.cod_mov,c.ch_encabeza,b.clase_mov,ISNULL(b.cantidad,0),b.valor, ",
"a.cuenta_no,a.email ",
"FROM adtb00003 a,notb00008 b, notb00002 c ",
"WHERE a.num_emp = b.num_emp and ",
"b.num_nomi = ? and ",
"b.tipo_emp = ? and ",
"b.cod_mov = c.cod_mov and ",
criterio10 clipped," AND b.clase_mov not in ('F','T') and b.status_t is null ",
"ORDER BY a.departamento,a.num_emp,b.clase_mov DESC,b.cod_mov"
PREPARE comando FROM selec10
DECLARE busca CURSOR FOR comando
OPEN busca USING c_entra.num_nomi,c_entra.tipo_emp
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
LET r_filename = 'noprrp008.4rp'
IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
LET r_output='SVG'
LET preview=1
CALL fgl_report_selectDevice(r_output) -- changing default
CALL fgl_report_selectPreview(preview) -- changing default
LET handler = fgl_report_commitCurrentSettings() -- commit changes
END IF
--run the report
IF handler IS NOT NULL THEN -- report engine was configured ok
START REPORT cheque TO XML HANDLER handler
LET i = 1
LET idx = 1
LET siguie = "S"
#LET emp_ant = 0
#LET cuarta = "N"
WHILE STATUS != NOTFOUND
FETCH busca INTO datos_recibo.*
IF status = notfound THEN
EXIT WHILE
END IF
IF int_flag THEN
LET numero_msg = 2
CALL msg(numero_msg)
LET int_flag = false
RETURN
END IF
IF genera = "EM" AND datos_recibo.email IS NOT NULL THEN
CONTINUE WHILE
END IF
LET datos_recibo.nombre = datos_recibo.nom1_emp clipped," ",
datos_recibo.nom2_emp clipped," ",
datos_recibo.apell1_emp clipped," ",
datos_recibo.apell2_emp clipped
LET datos_recibo.acumulado = 0
# Busqueda de acumulados
SELECT a.* FROM notb00014 a
WHERE a.cod_mov = datos_recibo.cod_mov
IF STATUS != NOTFOUND THEN
SELECT sum(valor) INTO datos_recibo.acumulado FROM notb00008
WHERE num_emp = datos_recibo.num_emp and
cod_mov = datos_recibo.cod_mov and
fecha <= datos_peri.fecha_a AND
status_t IS NULL
ELSE
SELECT sum(valor) INTO datos_recibo.acumulado FROM notb00008
WHERE num_emp = datos_recibo.num_emp and
cod_mov = datos_recibo.cod_mov and
fecha >= fecha_inicial and
fecha <= datos_peri.fecha_a AND
status_t IS NULL
END IF
IF datos_recibo.cod_mov = 12 THEN
LET p_valor = 0
SELECT valor INTO p_valor FROM notb00008
WHERE num_nomi = c_entra.num_nomi and tipo_emp = c_entra.tipo_emp and
num_emp = datos_recibo.num_emp and
cod_mov = 110 AND status_t IS NULL
LET datos_recibo.valor = datos_recibo.valor + p_valor
END IF
# Busque del valor neto del empleado para que el programa tenga la oportunidad
# de buscar el valor en letras del cheque
SELECT sum(a.valor) INTO datos_recibo.neto FROM notb00008 a
WHERE
a.num_nomi = c_entra.num_nomi and
a.tipo_emp = c_entra.tipo_emp and
a.cod_mov not in (100,101,102,98,50,54) and
a.num_emp = datos_recibo.num_emp and
a.departamento = datos_recibo.departamento and clase_mov not in ('F') AND
a.status_t IS NULL
#-------------------------------------------------------------------------
LET datos_recibo.numero = c_entra.num_nomi
OUTPUT TO REPORT cheque(datos_recibo.*)
LET siguie = "N"
END WHILE
FINISH REPORT cheque
#CALL fgl_winmessage("r",imprime,"stop")
#RUN imprime
END IF
IF genera = "EM" THEN
#SELECT DISTINCT a.num_nomi INTO num_nomi_ant FROM volantes a
# IF num_nomi_ant = c_entra.num_nomi THEN
# LET respuesta = fgl_winquestion("VOLANTES","DESEA LIMPIAR LA TABLA DE LOS VOLANTES","QUESTION","YES|NO","NO",0)
# IF respuesta = "YES" THEN
DELETE FROM volantes
# END IF
# ELSE
# DELETE FROM volantes
# END IF
LET xusername ='nominas@marmotech.com.do'
LET xsmtphost ='smtp.office365.com'
LET xsmtpport = '587'
LET xpassword = 'Nuevo2018'
LET cuenta_Envio = 1
# LET procedimiento = "{ ? =call dbo.sp_enviacorreo_emp(?,?,?,?,?) }" CLIPPED
LET procedimiento = "{ call dbo.sp_enviacorreo_emp(?,?,?,?,?) }" CLIPPED
PREPARE smt FROM procedimiento
LET num_Doc = 0
LET selec =
"SELECT DISTINCT a.num_emp,a.departamento,a.nivel_emp,a.cod_puesto, ",
"a.nom1_emp,a.apell1_emp,a.nom2_emp,a.apell2_emp,RTRIM(a.email) ",
"FROM adtb00003 a,notb00008 b ",
"WHERE a.num_emp = b.num_emp and ",
"b.num_nomi = ? and ",
"b.tipo_emp = ? and ",
"a.email IS NOT NULL AND ",
"a.num_emp NOT IN (select k.num_emp FROM volantes k) AND ",
criterio10 clipped," AND b.clase_mov not in ('F','T') and b.status_t is null ",
"ORDER BY a.departamento DESC,a.num_emp "
PREPARE comando_emp1 FROM selec
DECLARE empleados CURSOR FOR comando_emp1
OPEN empleados USING c_entra.num_nomi,c_entra.tipo_emp
# LET perfil ='pnominas'
LET idx = 1
FOREACH empleados INTO datos_recibo.num_emp,datos_recibo.departamento,datos_recibo.nivel_emp,
datos_recibo.cod_puesto,datos_recibo.nom1_emp,datos_recibo.apell1_emp,
datos_recibo.nom2_emp,datos_recibo.apell2_emp,datos_recibo.email
-- configure report engine; the functions prefixed fgl that are called here are part of the GRW API
# LET r_filename = 'noprrp008.4rp'
# IF idx > 90 AND idx <= 180 THEN
# LET perfil = 'pnominas_1'
# END IF
# IF idx > 180 AND idx <= 270 THEN
# LET perfil = 'pnominas_2'
# END IF
LET xingresos = 0
LET xdescuentos=0
# LET subject = datos_recibo.nom1_emp CLIPPED," ",datos_recibo.apell1_emp CLIPPED,"(",datos_recibo.num_emp USING "<<<<",")"
LET subject = "MARMOTECH, S. A. VOLANTE PAGO CORRESPONDIENTE AL PERIODO DEL ",datos_peri.fecha_d,
" AL ",datos_peri.fecha_a
LET datos_recibo.nombre = datos_recibo.nom1_emp clipped," ",
datos_recibo.nom2_emp clipped," ",
datos_recibo.apell1_emp clipped," ",
datos_recibo.apell2_emp clipped
LET cuerpo_correo="<!DOCTYPE html><body>", "<b>",datos_recibo.nombre CLIPPED,"</b>"
LET cuerpo_correo =cuerpo_correo, "<table border='1'><tr><th>CODIGO</th><th>DESCRIPCION</th><th>CANTIDAD</th><th>VALOR</th>",
"<th>ACUMULADO</th></tr>"
LET nombre_file = "VOL",datos_recibo.num_emp USING "<<<<",".pdf"
# IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file
# LET r_output='PDF'
# CALL fgl_report_selectDevice(r_output) -- changing default
# CALL fgl_report_selectPreview(false)
# CALL fgl_report_setOutputFileName(nombre_file)
-- changing default
# LET handler = fgl_report_commitCurrentSettings() -- commit changes
#END IF
--run the report
#IF handler IS NOT NULL THEN -- report engine was configured ok
# START REPORT cheque TO XML HANDLER HANDLER
# END IF
LET datos_recibo.acumulado = 0
DECLARE busca_em CURSOR FOR
SELECT a.cod_mov,a.ch_encabeza,b.cantidad,b.valor FROM notb00002 a,notb00008 b
WHERE a.cod_mov = b.cod_mov AND
b.num_emp = datos_recibo.num_emp AND
b.num_nomi = c_entra.num_nomi AND
b.tipo_emp = c_entra.tipo_emp AND
b.clase_mov NOT IN ('F','T')
ORDER BY a.cod_mov
FOREACH busca_em INTO datos_recibo.cod_mov,datos_recibo.descrip_mov,datos_recibo.cantidad,
datos_recibo.valor
# Busqueda de acumulados
SELECT a.* FROM notb00014 a
WHERE a.cod_mov = datos_recibo.cod_mov
IF STATUS != NOTFOUND THEN
SELECT sum(valor) INTO datos_recibo.acumulado FROM notb00008
WHERE num_emp = datos_recibo.num_emp and
cod_mov = datos_recibo.cod_mov and
fecha <= datos_peri.fecha_a AND
status_t IS NULL
ELSE
SELECT sum(valor) INTO datos_recibo.acumulado FROM notb00008
WHERE num_emp = datos_recibo.num_emp and
cod_mov = datos_recibo.cod_mov and
fecha >= fecha_inicial and
fecha <= datos_peri.fecha_a AND
status_t IS NULL
END IF
IF datos_recibo.cod_mov = 12 THEN
LET p_valor = 0
SELECT valor INTO p_valor FROM notb00008
WHERE num_nomi = c_entra.num_nomi and tipo_emp = c_entra.tipo_emp and
num_emp = datos_recibo.num_emp and
cod_mov = 110 AND status_t IS NULL
LET datos_recibo.valor = datos_recibo.valor + p_valor
END IF
# Busque del valor neto del empleado para que el programa tenga la oportunidad
# de buscar el valor en letras del cheque
SELECT sum(a.valor) INTO datos_recibo.neto FROM notb00008 a
WHERE
a.num_nomi = c_entra.num_nomi and
a.tipo_emp = c_entra.tipo_emp and
a.cod_mov not in (100,101,102,98,50,54) and
a.num_emp = datos_recibo.num_emp and
a.departamento = datos_recibo.departamento and clase_mov not in ('F') AND
a.status_t IS NULL
#-------------------------------------------------------------------------
LET datos_recibo.numero = c_entra.num_nomi
IF datos_recibo.valor > 0 THEN
LET xingresos = xingresos + datos_recibo.valor
ELSE
LET xdescuentos = xdescuentos+datos_recibo.valor
END IF
# OUTPUT TO REPORT cheque(datos_recibo.*)
IF datos_recibo.cantidad IS NULL THEN
LET datos_recibo.cantidad = 0
END IF
LET cuerpo_correo=cuerpo_correo CLIPPED, "<tr><td>",datos_recibo.cod_mov,"</td>",
"<td>",datos_Recibo.descrip_mov CLIPPED,"</td>",
"<td> ",datos_recibo.cantidad USING "###.##","</td>",
"<td>",datos_recibo.valor USING "#,###,###.##" , "</td>",
"<td>",datos_recibo.acumulado USING "##,###,###.##","</td></tr>"
END FOREACH
# FINISH REPORT cheque
LET cuerpo_correo = cuerpo_correo CLIPPED,"<tr><th>INGRESOS :",xingresos USING "##,###,###.##","</th></tr>"
LET cuerpo_correo = cuerpo_correo CLIPPED,"<tr><th>DESCUENTOS:",xdescuentos USING "##,###,###.##","</th></tr>"
LET cuerpo_correo = cuerpo_correo CLIPPED,"<tr><th>NETO :",xingresos+xdescuentos USING "##,###,###.##","</th></tr></table></body>"
LET vendedoremail = datos_recibo.email
# LET vendedoremail = 'jsoto@marmotech.com.do'
LET nombre_file = "volante.pdf"
# EXECUTE smt USING email_err INOUT,vendedorEmail IN,emailCC IN,subject IN,cuerpo_correo IN,perfil IN
# EXECUTE smt USING vendedorEmail IN,emailCC IN,subject IN,cuerpo_correo IN,perfil IN
# los parametros son TO:, SUBJECT:, CUERPO:, ATTACHMENT
#LET cuerpo_correo = "ESTE ES EL PROBLEMA"
CALL enviaemail(vendedorEmail,subject,cuerpo_correo,NULL,xusername,xsmtphost,xsmtpport,xpassword) #RETURNING retorne
# IF NOT retorne THEN
# LET estado_Envio = 'ERROR ENVIO'
# ELSE
LET estado_envio = 'ENVIO SATISFACTORIO'
# END IF
LET nombre_empleado = datos_recibo.nom1_emp CLIPPED," ",datos_recibo.apell1_emp CLIPPED
INSERT INTO volantes
(num_nomi
,num_emp
,tipo_emp
,nombre
,correo
,estado
,perfil
,fecha_envio
,fecha_envio_sistema
,detalle)
VALUES
(c_entra.num_nomi, datos_recibo.num_emp,c_entra.tipo_emp, nombre_empleado,
datos_recibo.email,estado_envio,perfil,c_entra.fecha,
getdate(),'NO ESPECIFICADO')
LET cuenta_envio = cuenta_envio + 1
LET idx = idx +1
END FOREACH
LET mensajes= "NUMERO DE EMAILS ENVIADOS ",cuenta_envio USING "<<<"
CALL fgl_winmessage("INFO",mensajes,"INFO")
END IF
END FUNCTION
REPORT cheque(x)
DEFINE x RECORD
num_emp LIKE adtb00003.num_emp,
departamento LIKE adtb00003.departamento,
nivel_emp LIKE adtb00003.nivel_emp,
cod_puesto LIKE adtb00003.cod_puesto,
nom1_emp LIKE adtb00003.nom1_emp,
apell1_emp LIKE adtb00003.nom1_emp,
nom2_emp LIKE adtb00003.nom1_emp,
apell2_emp LIKE adtb00003.nom1_emp,
cod_mov LIKE notb00008.cod_mov,
descrip_mov LIKE notb00002.segundo_enc,
tipo_d CHAR(1),
cantidad LIKE notb00008.cantidad,
valor LIKE notb00008.valor,
cuenta_no LIKE adtb00003.cuenta_no,
email CHAR(100),
nombre CHAR(80),
numero INTEGER,
fecha DATE,
acumulado DECIMAL(12,2),
neto DECIMAL(12,2)
END RECORD
DEFINE ano CHAR(4)
DEFINE nombre_mes CHAR(10)
DEFINE k,in_mes INTEGER,
fecha_emision CHAR(50) ,
t_monto,t_desc,p_monto DECIMAL(12,2)
FORMAT
BEFORE GROUP OF x.num_emp
LET num_doc = num_doc + 1
LET t_desc = 0
LET t_monto = 0
LET in_mes = month(today)
CALL busca_mes()
LET nombre_mes = meses[in_mes]
LET p_monto = x.neto
LET ano = year(today) using "&&&&"
LET fecha_emision = day(today) using "&&",nombre_mes clipped,
ano
PRINTX c_entra.nombre_tipo,
datos_peri.fecha_d,
x.num_emp,
x.nombre,
datos_peri.fecha_a,
fecha_emision,num_doc
ON EVERY ROW
IF x.tipo_d = "I" OR x.tipo_d ="E" THEN
LET t_monto = t_monto + x.valor
END IF
IF x.tipo_d = "D" THEN
LET t_desc = t_desc + x.valor
END IF
PRINTX x.*,t_monto,t_desc
AFTER GROUP OF x.num_emp
SKIP TO TOP OF PAGE
{AFTER GROUP OF x.num_emp
SKIP 1 LINE
PRINT " VISION MISION "
PRINT "--------------------------------------------------------------------------------------------------------------"
PRINT "Ser Lider de Calidad Mundial en la Extracci, |Marmotech es la Empresa que aporta el "
PRINT "Industrializaci y Comercializaci de Rocas |Elemento Natural a las necesidades de nuestros clientes en "
PRINT "Dimensionadas en Republica Dominicana, |la construcci, ambientaci, decoraci y arquitectura de"
PRINT "asegurando una sostenida credibilidad en el |obras, tanto en nuestro pa como en el extranjero, "
PRINT "mercado local y externo a trav de productos y |a trav del uso de la alta tecnolog y del Talento Humano"
PRINT "servicios de alta calidad y rentabilidad, mediante|Calificado"
PRINT "el uso sustentable de nuestros Recursos Naturales |"
PRINT "--------------------------------------------------------------------------------------------------------------"
}
# Limpieza del arreglo
#ON LAST ROW
# UPDATE notb00010 set status_t = "P",
# us_mod = usuarios,
# fech_mod = getdate(),
# monto_nomina = p_valor
# WHERE num_nomi = c_entra.num_nomi and
# tipo_emp = c_entra.tipo_emp
END REPORT
FUNCTION busca_mes()
LET meses[1] = "ENERO"
LET meses[2] = "FEBRERO"
LET meses[3] = "MARZO"
LET meses[4] = "ABRIL"
LET meses[5] = "MAYO"
LET meses[6] = "JUNIO"
LET meses[7] = "JULIO"
LET meses[8] = "AGOSTO"
LET meses[9] = "SEPTIEMBRE"
LET meses[10] = "OCTUBRE"
LET meses[11] = "NOVIEMBRE"
LET meses[12] = "DICIEMBRE"
END FUNCTION