{ ------------------------------------------------------------------ PROGRAMA : COPRMT025 OBJETIVO : Capturar, Consultar y Eliminar registros de la Tabla de Requisiciones. PROGRAMADOR : Ing. Juan Soto FECHA REALIZACION : Marzo 19, 1997 FECHA MODIFICACION: Febrero 23, 2016. ------------------------------------------------------------------ } IMPORT os GLOBALS "coprgb000.4gl" DEFINE c_cuenta SMALLINT DEFINE cantidad_fur, multiplo DECIMAL(12,2), p_res,pmultiplo,ult_orden INTEGER, nocalcula CHAR(1), actualiza CHAR(2), proveedor_sugerido VARCHAR(100) DEFINE adicional RECORD detalle1, detalle2, detalle3 CHAR(70) END RECORD, ktipo_cliente,ksec_cliente INT, cliente,knombre VARCHAR(100) DEFINE d_tipos,mensaje,f_tipos,l_file,filepath,extension,extension_foto,tmp_dirfoto STRING, tmpdir_file,tipos_foto,dir_file,dir_foto CHAR(60) , fdocumento,ffoto BYTE MAIN DEFER INTERRUPT CALL STARTLOG("coprmt025.log") CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT TO "decomarmol" AS "MSSQL" USER usuarios USING clave CALL coprmt025() END MAIN FUNCTION coprmt025() CLEAR SCREEN OPTIONS FORM LINE 8, ERROR LINE 23, COMMENT LINE 21, PROMPT LINE 25 #CALL defecto(impresor) RETURNING imprime,letras.*, archivo OPEN FORM cofmmt025 FROM "cofmmt025" DISPLAY FORM cofmmt025 MENU "OPCIONES" ON ACTION Adicionar CLEAR FORM LET actualiza = "NO" CALL copcad025() ON ACTION Consultar LET actualiza = "SI" CLEAR FORM CALL copcmf025() ON ACTION Salir DELETE FROM cotb00042 WHERE num_req = 0 AND us_crea = suser_sname() AND status_t IS NULL EXIT MENU END MENU END FUNCTION FUNCTION copcad025() DEFINE tiene_Dato CHAR(2) # Captura los datos que va a contener el registro DIALOG ATTRIBUTE(UNBUFFERED) INPUT BY NAME requisi2.*,salida ATTRIBUTE(WITHOUT DEFAULTS) BEFORE INPUT LET d_tipos="PDF" LET f_tipos="*.pdf *.jpg *.png *.doc *.xls" LET tipos_foto ="*.jpg *.png" LET mensaje=%"Elige Documento" IF actualiza = "NO" THEN LET dir_file = NULL LOCATE fdocumento IN MEMORY END IF LOCATE ffoto IN MEMORY IF actualiza = "NO" THEN IF tiene_dato IS NULL THEN LET tiene_dato = "NO" END IF LET requisi2.num_req = 0 LET requisi2.departamento = NULL LET requisi2.cod_emp_sec = NULL LET requisi2.fech_req = TODAY LET requisi2.prioridad='NORMAL' LET requisi2.num_oc=NULL IF tiene_Dato = "NO" THEN CALL arr_requisi2.clear() END IF SELECT a.departamento,a.num_emp,b.nom_dpto,RTRIM(c.nom1_emp)||' '||ISNULL(c.apell1_emp,' ') INTO requisi2.departamento,requisi2.cod_emp_sec,descrip2 FROM seg0001 a,adtb00001 b,adtb00003 c WHERE a.usuario = usuarios AND a.departamento = b.departamento AND a.num_emp = c.num_emp DISPLAY BY NAME requisi2.departamento,requisi2.cod_emp_sec,descrip2 END IF LET salida = "PDF" ON ACTION bdocumento LET dir_file = NULL CALL ui.Interface.frontCall("standard","openfile", [dir_file,d_tipos,f_tipos,mensaje], [filepath] ) IF filepath IS NOT NULL THEN LET dir_file = os.Path.basename(filepath) CALL fgl_getfile(filepath,dir_file) CALL fdocumento.readFile(dir_file) DISPLAY BY NAME dir_file LET extension = os.Path.extension(dir_file) END IF ON ACTION busca_depto CALL busca_dpto() RETURNING requisi2.departamento,descrip1 DISPLAY BY NAME descrip1,requisi2.departamento ON ACTION busca_emp CALL busca_emp() RETURNING requisi2.cod_emp_sec,descrip2 LET identifica = null IF existe = "S" THEN IF not int_flag THEN DISPLAY BY NAME descrip2,requisi2.cod_emp_sec NEXT FIELD uso END IF LET int_flag = false END IF IF int_flag THEN LET int_flag = FALSE END IF BEFORE FIELD fech_req LET requisi2.fech_req = today DISPLAY BY NAME requisi2.fech_req AFTER FIELD fech_req IF requisi2.fech_req < today THEN LET numero_msg = 369 CALL msg(numero_msg) NEXT FIELD fech_req END IF AFTER FIELD cod_emp_sec IF requisi2.cod_emp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento ELSE SELECT RTRIM(a.nom1_emp)||' '||ISNULL(a.apell1_emp,' ') INTO descrip2 FROM adtb00003 a,adtb00001 b WHERE a.num_emp = requisi2.cod_emp_sec and b.departamento = requisi2.departamento and a.departamento = b.departamento IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 371 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF DISPLAY BY NAME descrip2 END IF AFTER FIELD prioridad IF requisi2.prioridad IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD prioridad END IF AFTER FIELD num_oc LET ktipo_cliente = NULL LET ksec_cliente=NULL LET knombre=NULL IF requisi2.num_oc IS NOT NULL AND requisi2.num_oc <> 0 THEN SELECT a.tipo_cliente,a.sec_cliente,b.nombre INTO ktipo_cliente,ksec_cliente,knombre FROM prtb00012 a,vetb00004 b WHERE a.num_oc = requisi2.num_oc AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND a.status_t IS NULL IF STATUS = NOTFOUND THEN CALL fgl_Winmessage("INFO","ORDEN NO EXISTE","INFO") NEXT FIELD num_oc END IF LET cliente = ktipo_cliente USING "&&","-",ksec_cliente USING "&&&&&&&&"," ",knombre CLIPPED DISPLAY BY NAME cliente END IF AFTER FIELD uso IF requisi2.uso IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD uso END IF AFTER INPUT IF int_flag THEN LET numero_msg = 2 CALL msg(numero_msg) LET int_flag = false RETURN END IF IF requisi2.departamento IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD departamento END IF IF requisi2.cod_emp_sec IS NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF SELECT RTRIM(a.nom1_emp)||' '||ISNULL(a.apell1_emp,' ') INTO descrip2 FROM adtb00003 a,adtb00001 b WHERE a.num_emp = requisi2.cod_emp_sec and b.departamento = requisi2.departamento and a.departamento = b.departamento IF status >= 0 THEN IF status = notfound THEN LET numero_msg = 371 CALL msg(numero_msg) NEXT FIELD cod_emp_sec END IF ELSE CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF LET descrip2 = descrip2 clipped," ",descrip1 clipped DISPLAY BY NAME descrip2 IF requisi2.num_oc IS NOT NULL AND requisi2.num_oc <> 0 THEN IF actualiza = "SI" THEN LET opt = fgl_winquestion("ORDEN","SE ACTUALIZARAN LOS ITEMS DE ESTA REQUISICION CON LOS QUE TIENE LA ORDEN DE PEDIDOS, DESEAS REALIZAR ESTA OPERACION?","NO","NO|YES","QUESTION",0) IF opt = "YES" THEN CALL busca_det_orden() END IF ELSE CALL busca_det_orden() END IF ELSE IF actualiza = "SI" THEN CALL busca_det_req() END IF END IF END INPUT # Captura de los articulos requeridos INPUT ARRAY arr_requisi2 FROM s_requisi2.* #ATTRIBUTE (WITHOUT DEFAULTS) BEFORE INPUT IF actualiza = "NO" AND tiene_dato = "NO" THEN CALL arr_requisi2.clear() END IF LET tiene_dato = "SI" ON ACTION bdownload IF arr_requisi2[arr_curr()].foto IS NOT NULL THEN # LET dir_foto = usuarios CLIPPED,dir_Foto CLIPPED LET filepath = "foto.jpg" CALL ui.Interface.frontCall("standard","savefile", [dir_foto,d_tipos,tipos_foto,mensaje], [filepath] ) CALL arr_requisi2[arr_curr()].foto.writeFile(dir_foto) IF filepath IS NOT NULL THEN CALL fgl_putfile(dir_foto,filepath) CALL fgl_Winmessage("info","Download Terminado","info") END IF END IF ON ACTION bfoto LET curr = arr_curr() LET dir_foto = NULL LET ffoto = null CALL ui.Interface.frontCall("standard","openfile", [dir_foto,d_tipos,tipos_foto,mensaje], [filepath] ) IF actualiza = "SI" THEN IF filepath IS NOT NULL THEN LET dir_foto = os.Path.basename(filepath) LET extension_foto = os.Path.extension(filepath) LET dir_foto = usuarios CLIPPED,dir_foto CLIPPED LET tmp_dirfoto = "TMP\\",dir_foto CLIPPED DISPLAY BY NAME filepath CALL fgl_getfile(filepath,tmp_dirfoto) # CALL FGL_WINMESSAGE("INFO",filepath,"info") CALL ffoto.readfile(tmp_dirfoto) DISPLAY tmp_dirfoto TO s_requisi2[scr_line()].ruta_file LET arr_requisi2[curr].foto = ffoto LET arr_requisi2[curr].ruta_file=dir_foto CLIPPED END IF ELSE LOCATE arr_requisi2[curr].foto IN MEMORY LET dir_foto = os.Path.basename(filepath) LET extension_foto = os.Path.extension(filepath) LET dir_foto = usuarios CLIPPED,dir_foto CLIPPED LET tmp_dirfoto = "TMP\\",dir_foto CLIPPED DISPLAY BY NAME filepath CALL fgl_getfile(filepath,tmp_dirfoto) # CALL FGL_WINMESSAGE("INFO",filepath,"info") CALL arr_requisi2[curr].foto.readfile(tmp_dirfoto) DISPLAY tmp_dirfoto TO s_requisi2[scr_line()].ruta_file # LET arr_requisi2[curr].foto = ffoto LET arr_requisi2[curr].ruta_file=dir_foto CLIPPED END IF ON ACTION producto LET curr = arr_curr() IF arr_requisi2[curr].tipo_inv IS NULL THEN CALL msg(16) NEXT FIELD tipo_inv END IF CALL busca_mt(arr_requisi2[curr].tipo_inv) RETURNING arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo,arr_requisi2[curr].cod_tipo, arr_requisi2[curr].cod_sec,arr_requisi2[curr].descrip_esp,arr_requisi2[curr].unidad_med IF arr_requisi2[curr].tipo_inv = 'MICELANEOS' AND arr_requisi2[curr].cod_n = 0 THEN CALL fgl_winmessage("INFO","NO EXISTEN PRODUCTOS CON ESA CONDICION, VAS A CREARLO","INFO") CALL crea_producto() RETURNING arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo,arr_requisi2[curr].cod_tipo, arr_requisi2[curr].cod_sec,arr_requisi2[curr].descrip_esp,arr_requisi2[curr].unidad_med END IF DISPLAY arr_requisi2[curr].cod_n TO s_requisi2[scr_l].cod_n DISPLAY arr_requisi2[curr].cod_grupo TO s_requisi2[scr_l].cod_grupo DISPLAY arr_requisi2[curr].cod_tipo TO s_requisi2[scr_l].cod_tipo DISPLAY arr_requisi2[curr].cod_sec TO s_requisi2[scr_l].cod_sec DISPLAY arr_requisi2[curr].descrip_esp TO s_requisi2[scr_l].descrip_esp DISPLAY arr_requisi2[curr].unidad_med TO s_requisi2[scr_l].unidad_med LET c_cuenta = arr_requisi2.getLength() CALL repite2() IF verdad = "S" THEN NEXT FIELD cod_n END IF IF verdad = "N" OR verdad is null THEN NEXT FIELD cantidad END IF LET proveedor_sugerido = NULL IF arr_requisi2[curr].cod_sec IS NOT NULL THEN CALL busca_proveedor() END IF AFTER ROW IF actualiza ="NO" THEN IF arr_requisi2[curr].ruta_file IS NOT NULL THEN LET tmp_dirfoto = "tmp\\",arr_requisi2[arr_curr()].ruta_file CLIPPED CALL arr_requisi2[arr_curr()].foto.writeFile(tmp_dirfoto) DISPLAY tmp_dirfoto TO filepath ELSE IF arr_requisi2[arr_curr()].ruta_file IS NULL AND arr_requisi2[arr_curr()].cod_sec IS NOT NULL THEN LOCATE arr_requisi2[arr_curr()].foto IN MEMORY END IF END IF END IF BEFORE ROW LET nocalcula = "N" LET curr = arr_curr() LET scr_l = scr_line() # LOCATE arr_requisi2[curr].foto IN MEMORY IF actualiza = "SI" THEN # LOCATE arr_requisi2[curr].foto IN MEMORY IF arr_requisi2[curr].ruta_file IS NOT NULL THEN CALL ui.Interface.frontCall("standard","getenv", ["HOMEPATH"], [l_file] ) LET dir_foto =arr_requisi2[curr].ruta_file LET l_file = "c:",l_file CLIPPED,"\\",dir_foto CLIPPED # CALL fgl_Winmessage("info",dir_foto,"info") CALL arr_requisi2[curr].foto.writeFile(dir_foto) DISPLAY dir_foto TO filepath END IF ELSE IF arr_requisi2[curr].ruta_file IS NOT NULL THEN LET tmp_dirfoto = "tmp\\",arr_requisi2[curr].ruta_file CLIPPED CALL arr_requisi2[curr].foto.writeFile(tmp_dirfoto) DISPLAY tmp_dirfoto TO filepath ELSE LOCATE arr_requisi2[curr].foto IN MEMORY END IF END IF AFTER FIELD cod_sec IF arr_requisi2[curr].cod_n is not null AND arr_requisi2[curr].cod_grupo is not null AND arr_requisi2[curr].cod_tipo is not null AND arr_requisi2[curr].cod_sec is not null THEN CALL producto(arr_requisi2[curr].tipo_inv,arr_requisi2[curr].cod_n,arr_requisi2[curr].cod_grupo, arr_requisi2[curr].cod_tipo,arr_requisi2[curr].cod_sec) RETURNING arr_requisi2[curr].descrip_esp,arr_requisi2[curr].unidad_med DISPLAY arr_requisi2[curr].descrip_esp TO s_requisi2[scr_l].descrip_esp DISPLAY arr_requisi2[curr].unidad_med TO s_requisi2[scr_l].unidad_med DISPLAY BY NAME arr_requisi2[curr].unidad_med DISPLAY BY NAME arr_requisi2[curr].descrip_esp LET arr_requisi[curr].cod_n = arr_requisi2[curr].cod_n LET arr_requisi[curr].cod_grupo = arr_requisi2[curr].cod_grupo LET arr_requisi[curr].cod_tipo = arr_requisi2[curr].cod_tipo LET arr_requisi[curr].cod_sec = arr_requisi2[curr].cod_sec LET verdad = "N" CALL repite2() IF verdad = "S" THEN LET verdad = "N" NEXT FIELD cod_n END IF END IF AFTER FIELD cantidad IF arr_requisi2[curr].cantidad IS NULL THEN IF arr_requisi2[curr].cod_n IS NOT NULL THEN LET numero_msg = 16 CALL msg(numero_msg) NEXT FIELD cantidad END IF END IF IF nocalcula = "N" THEN IF arr_requisi2[curr].cod_n = 1 THEN SELECT UNIQUE a.cantidad INTO cantidad_fur FROM cotb00004 a WHERE a.cod_n = arr_requisi2[curr].cod_n AND a.cod_grupo = arr_requisi2[curr].cod_grupo AND a.cod_tipo = arr_requisi2[curr].cod_tipo AND a.cod_sec = arr_requisi2[curr].cod_sec IF STATUS != NOTFOUND THEN IF arr_requisi2[curr].cantidad > cantidad_fur THEN LET multiplo = arr_requisi2[curr].cantidad / cantidad_fur LET pmultiplo = multiplo USING "#####" LET arr_requisi2[curr].cantidad = cantidad_fur * pmultiplo ELSE LET arr_requisi2[curr].cantidad = cantidad_fur END IF END IF DISPLAY arr_requisi2[curr].cantidad TO s_requisi2[scr_l].cantidad END IF END IF LET proveedor_sugerido = NULL IF arr_requisi2[curr].cod_sec IS NOT NULL THEN CALL busca_proveedor() END IF AFTER FIELD tipo_inv IF arr_requisi2[curr].tipo_inv IS NOT NULL THEN IF requisi2.num_oc IS NOT NULL THEN LET arr_requisi2[curr].tipo_inv = 'PRODUCTO TERMINADOS' END IF END IF ON ACTION guardar IF actualiza = "NO" THEN LET opt = fgl_winquestion("ADICIONA","ESTA SEGURO DE ADICIONAR ESTA REQUISICION?","NO","YES|NO","QUESTION",0) IF opt = "YES" THEN LET proveedor_sugerido = NULL FOR idx = 1 TO arr_requisi2.getLength() IF arr_requisi2[idx].cod_sec IS NOT NULL THEN CALL busca_proveedor() END IF END FOR BEGIN WORK INSERT INTO cotb00006 (fech_req,departamento,cod_emp_sec,uso,prioridad,us_crea,fech_crea,num_oc,tipo_cliente,sec_cliente,nombre_cliente, observacion,nombre_file,documento,proveedor) VALUES ( requisi2.fech_req, requisi2.departamento, requisi2.cod_emp_sec, requisi2.uso, requisi2.prioridad, suser_sname(),getdate(),requisi2.num_oc,ktipo_cliente,ksec_cliente,knombre, requisi2.observacion,dir_file,fdocumento,proveedor_sugerido) # Asigna el numero serial de la requisicion cabecera para luego asignarsela # a cada uno de los registros detalle de la requisicion. LET requi = SQLCA.SQLERRD[2] LET requisi2.num_req = SQLCA.SQLERRD[2] DISPLAY BY NAME requisi2.num_req IF dir_file IS NOT NULL THEN LET dir_file = requisi2.num_req USING "&&&&&&&&",".",extension CLIPPED UPDATE cotb00006 SET nombre_file = dir_file WHERE num_req = requisi2.num_req END IF FOR idx = 1 TO arr_requisi2.getLength() IF arr_requisi2[idx].cod_n IS NOT NULL AND arr_requisi2[idx].cod_grupo IS NOT NULL AND arr_requisi2[idx].cod_tipo IS NOT NULL AND arr_requisi2[idx].cod_sec IS NOT NULL THEN INSERT INTO cotb00008 (num_req ,tipo_inv ,cod_n ,cod_grupo ,cod_tipo ,cod_sec ,cantidad ,us_crea ,fech_crea ,procesada ,documento ,ruta_file ) VALUES (requi,arr_requisi2[idx].tipo_inv, arr_requisi2[idx].cod_n, arr_requisi2[idx].cod_grupo, arr_requisi2[idx].cod_tipo, arr_requisi2[idx].cod_sec, arr_requisi2[idx].cantidad, suser_sname(),getdate(),'N',arr_requisi2[idx].foto, arr_requisi2[idx].ruta_file) CALL integridad() IF bandera = 1 THEN LET bandera = 0 RETURN END IF END IF END FOR COMMIT WORK CALL configureoutput(salida) RETURNING HANDLER START REPORT print_req TO XML HANDLER handler FOR idx = 1 TO arr_requisi2.getLength() OUTPUT TO REPORT print_req(requisi2.*, descrip1, descrip2, descrip3, arr_requisi2[idx].* ) END FOR FINISH REPORT print_req call arr_requisi2.clear() # LET commandprompt = "del ",dir_file CLIPPED # RUN commandprompt LET numero_msg = 1 CALL msg(numero_msg) LET procedimiento = "{ call sp_enviacorreo(?,?,?,?) }" CLIPPED LET vendedoremail = 'gespinal@marmotech.com.do;jsoto@marmotech.com.do' LET subject = "ADICION RQUISICION COMPRAS ",requisi2.num_req USING "&&&&&&&" LET cuerpo_correo="