{ ------------------------------------------------------------------------ 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="", "",datos_recibo.nombre CLIPPED,"" LET cuerpo_correo =cuerpo_correo, "", "" 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, "", "", "", "", "" END FOREACH # FINISH REPORT cheque LET cuerpo_correo = cuerpo_correo CLIPPED,"" LET cuerpo_correo = cuerpo_correo CLIPPED,"" LET cuerpo_correo = cuerpo_correo CLIPPED,"
CODIGODESCRIPCIONCANTIDADVALORACUMULADO
",datos_recibo.cod_mov,"",datos_Recibo.descrip_mov CLIPPED," ",datos_recibo.cantidad USING "###.##","",datos_recibo.valor USING "#,###,###.##" , "",datos_recibo.acumulado USING "##,###,###.##","
INGRESOS :",xingresos USING "##,###,###.##","
DESCUENTOS:",xdescuentos USING "##,###,###.##","
NETO :",xingresos+xdescuentos USING "##,###,###.##","
" 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