GLOBALS "svglobals.4gl" DEFINE operacion STRING DEFINE tareas RECORD id_labor INT, sec_vend1 SMALLINT, nombre_trabajador VARCHAR(100), fecha_labor DATE, fecha_visita DATE, observacion_labor VARCHAR(100) END RECORD DEFINE arr_tareas DYNAMIC ARRAY OF RECORD id_labor1 INT, sec_vend11 SMALLINT, nombre_trabajador1 VARCHAR(100), fecha_labor1 DATE, fecha_visita1 DATE, observacion1 VARCHAR(100) END RECORD MAIN DEFER INTERRUPT CALL ARG_VAL(1) RETURNING usuarios CALL ARG_VAL(2) RETURNING clave CONNECT to "decomarmol" AS "MSSQL" USER usuarios USING clave SELECT a.* INTO p_compania.* FROM companias a CALL svprmt001() END MAIN FUNCTION svprmt001() OPEN FORM w1 FROM "svfmmt001" DISPLAY FORM w1 MENU ON ACTION nuevo LET operacion = "AD" CALL svprad001() ON ACTION modificar LET operacion="MF" CALL svprmf001() ON ACTION informacion CALL requisicion_pendiente() ON ACTION retornar RETURN END MENU END FUNCTION FUNCTION svprad001() DIALOG ATTRIBUTES(UNBUFFERED) INPUT BY NAME xsv.* ATTRIBUTE(WITHOUT DEFAULTS) ON ACTION empleado IF INFIELD(sec_vend) THEN CALL empleados() RETURNING xsv.sec_vend,xsv.vendedor DISPLAY BY NAME xsv.sec_vend,xsv.vendedor END IF BEFORE INPUT LET xsv.fecha = TODAY DISPLAY BY NAME xsv.fecha AFTER FIELD num_oc IF xsv.num_oc IS NOT NULL THEN SELECT a.nombre,RTRIM(b.calle)||' '||RTRIM(b.casa_num)||''||RTRIM(b.barrio)||' '|| RTRIM(b.urbanizacion), a.telefono,d.sec_vend,a.tipo_cliente,a.sec_cliente,e.nombre_proyecto INTO xsv.nombre,xsv.direccion,xsv.telefono,xsv.sec_vend,xsv.tipo_cliente,xsv.sec_cliente,xsv.proyecto FROM prtb00012 c,vetb00004 a,vetb00005 b LEFT OUTER JOIN vetb00028 d ON b.tipo_cliente = d.tipo_cliente AND b.sec_cliente = d.sec_cliente, vetb00050 e WHERE c.num_oc = xsv.num_oc AND c.tipo_cliente = a.tipo_cliente AND c.sec_cliente = a.sec_cliente AND a.tipo_cliente = b.tipo_cliente AND a.sec_cliente = b.sec_cliente AND c.cotizacion_no = e.cotizacion_no AND c.status_t IS NULL IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","ORDEN NO EXISTE","INFO") NEXT FIELD num_oc END IF NEXT FIELD nombre DISPLAY BY NAME xsv.tipo_cliente,xsv.sec_cliente,xsv.proyecto END IF AFTER FIELD sec_vend IF xsv.sec_vend IS NULL THEN CALL fgl_winmessage("INFO","CAMPO EN BLANCO","INFO") NEXT FIELD sec_vend END IF SELECT RTRIM(a.nom1_emp)||' '||a.apell1_emp INTO xsv.vendedor FROM adtb00003 a WHERE a.num_emp = xsv.sec_vend IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","VENDEDOR NO EXISTE","INFO") NEXT FIELD sec_vend END IF DISPLAY BY NAME xsv.vendedor END INPUT INPUT ARRAY arr_sv FROM scocina.* ATTRIBUTE(WITHOUT DEFAULTS) BEFORE INPUT LET arr_sv[1].items='Nevera' LET arr_sv[2].items='Estufa' LET arr_sv[3].items='Cooktop' LET arr_sv[4].items='Vinera' LET arr_sv[5].items='Extrator' LET arr_sv[6].items='Horno' LET arr_sv[7].items='Micro' LET arr_sv[8].items='Gaveta termica' LET arr_sv[9].items='Lavaplatos' DISPLAY arr_sv[1].items TO scocina[1].items AFTER INPUT END INPUT ON ACTION GUARDAR CALL guardar() CALL fgl_winmessage("INFO","ADICION EXITOSA","INFO") EXIT DIALOG ON ACTION CANCEL CALL fgl_Winmessage("INFO","OPERACION CANCELADA","INFO") EXIT PROGRAM END DIALOG END FUNCTION FUNCTION svprmf001() DEFINE opcion STRING DIALOG ATTRIBUTES(UNBUFFERED, FIELD ORDER FORM) CONSTRUCT criterio ON a.num_doc FROM num_doc ON ACTION buscar LET selec = "SELECT a.* FROM svtb00001 a WHERE ",criterio CLIPPED," AND a.status_t IS NULL" PREPARE comando FROM selec DECLARE busca_servicios SCROLL CURSOR FOR comando OPEN busca_servicios FETCH FIRST busca_servicios INTO xsv.* IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NO EXISTE SOLICITUD CON ESTA CONDICION","INFO") EXIT DIALOG END IF CALL busca_info() CALL busca_tareas() DISPLAY ARRAY arr_tareas to stareas.* END DISPLAY DISPLAY ARRAY arr_sv TO scocina.* END DISPLAY MENU ON ACTION siguiente FETCH NEXT busca_servicios INTO xsv.* IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NO EXISTEN MAS REGISTROS EN ESTA DIRECCION","INFO") END IF CALL busca_info() ON ACTION primero FETCH FIRST busca_servicios INTO xsv.* IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NO EXISTEN MAS REGISTROS EN ESTA DIRECCION","INFO") END IF CALL busca_info() ON ACTION ultimo FETCH LAST busca_servicios INTO xsv.* IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NO EXISTEN MAS REGISTROS EN ESTA DIRECCION","INFO") END IF CALL busca_info() ON ACTION anterior FETCH PREVIOUS busca_servicios INTO xsv.* IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","NO EXISTEN MAS REGISTROS EN ESTA DIRECCION","INFO") END IF CALL busca_info() ON ACTION asignar CALL seg000(usuarios,0,'svprmt001.asignar') RETURNING resultado IF NOT resultado THEN CALL fgl_winmessage("ERROR","USTED NO TIENE PERMISO PARA UTILIZAR OPCION","INFO") CONTINUE MENU END IF CALL asignar_tareas() ON ACTION Actualizar SELECT DISTINCT a.num_doc FROM svtb00003 a WHERE a.num_doc = xsv.num_doc IF STATUS <> NOTFOUND THEN CALL fgl_winmessage("INFO","NO PUEDE ACTUALIZAR SOLICITUD CON TAREAS ASIGNADAS","INFO") CONTINUE MENU END IF CALL svprad001() ON ACTION imprimir LET r_filename = "svprmt001.4rp" LET preview=1 IF fgl_report_loadCurrentSettings(r_filename) THEN -- load the .4rp file LET r_output='PDF' LET preview=true CALL fgl_report_selectDevice(r_output) -- changing default CALL fgl_report_selectPreview(preview) -- changing default LET handler = fgl_report_commitCurrentSettings() -- commit changes ELSE CALL fgl_Winmessage("ERROR","NO SE ENCONTRO 4RP","INFO") EXIT MENU END IF START REPORT hoja_servicio TO XML HANDLER handler FOR idx = 1 TO 9 OUTPUT TO REPORT hoja_servicio(arr_sv[idx].*) END FOR FINISH REPORT hoja_servicio ON ACTION anular LET opcion = fgl_winquestion("ELIMINAR","ESTA SEGURO DE ANULAR ESTA SOLICITUD?","NO","YES|NO","QUESTION",0) IF opcion = "YES" THEN UPDATE svtb00001 SET status_t ='E', us_mod = usuarios, fech_mod = getdate() WHERE num_Doc = xsv.num_doc CALL fgl_winmessage("INFO","REGISTRO ANULADO","INFO") EXIT MENU END IF ON ACTION salir EXIT MENU END MENU ON ACTION CANCEL LET INT_FLAG = FALSE RETURN END CONSTRUCT END DIALOG END FUNCTION FUNCTION guardar() IF operacion = "AD" THEN SELECT MAX(num_doc) INTO xsv.num_doc FROM svtb00001 IF xsv.num_doc IS NULL THEN LET xsv.num_doc = 0 END IF LET xsv.num_doc=xsv.num_doc+1 LET xsv.us_crea = usuarios LET xsv.fech_crea=current INSERT INTO svtb00001 VALUES (xsv.*) FOR idx=1 TO arr_sv.getLength() IF arr_sv[idx].items IS NOT NULL THEN INSERT INTO svtb00002 VALUES (xsv.num_doc,idx,arr_sv[idx].items,arr_sv[idx].aplica,arr_sv[idx].medida) END IF END FOR ELSE LET xsv.us_mod=usuarios LET xsv.fech_mod=current UPDATE svtb00001 SET svtb00001.* = xsv.* WHERE num_doc = xsv.num_doc SELECT DISTINCT a.num_doc FROM svtb00002 a WHERE a.num_Doc = xsv.num_doc IF STATUS <> NOTFOUND THEN FOR idx =1 TO arr_sv.getLength() UPDATE svtb00002 SET aplica = arr_sv[idx].aplica, medida = arr_sv[idx].medida WHERE num_Doc = xsv.num_doc AND items = arr_sv[idx].items END FOR ELSE FOR idx=1 TO arr_sv.getLength() IF arr_sv[idx].items IS NOT NULL THEN INSERT INTO svtb00002 VALUES (xsv.num_doc,idx,arr_sv[idx].items,arr_sv[idx].aplica,arr_sv[idx].medida) END IF END FOR END IF END IF END FUNCTION FUNCTION busca_info() DISPLAY BY NAME xsv.* DECLARE c1 CURSOR FOR SELECT a.items,a.aplica,a.medida,a.id FROM svtb00002 a WHERE a.num_Doc = xsv.num_doc ORDER BY a.id LET idx = 1 FOREACH c1 INTO arr_sv[idx].* LET idx = idx + 1 END FOREACH END FUNCTION FUNCTION asignar_tareas() CALL arr_tareas.clear() CALL busca_tareas() DIALOG ATTRIBUTES(UNBUFFERED, FIELD ORDER FORM) DISPLAY ARRAY arr_tareas to stareas.* END DISPLAY INPUT BY NAME tareas.* ON ACTION empleado IF INFIELD(sec_vend1) THEN CALL empleados() RETURNING tareas.sec_vend1,tareas.nombre_trabajador DISPLAY BY NAME tareas.sec_vend1,tareas.nombre_trabajador END IF BEFORE INPUT LET tareas.fecha_labor = TODAY DISPLAY BY NAME tareas.fecha_labor AFTER FIELD sec_vend1 IF tareas.sec_vend1 IS NULL THEN CALL fgl_winmessage("INFO","CAMPO EN BLANCO","INFO") NEXT FIELD sec_vend1 END IF SELECT RTRIM(a.nom1_emp)||' '||a.apell1_emp INTO tareas.nombre_trabajador FROM adtb00003 a WHERE a.num_emp = tareas.sec_vend1 IF STATUS = NOTFOUND THEN CALL fgl_winmessage("INFO","ASIGNADO NO EXISTE","INFO") NEXT FIELD sec_vend1 END IF DISPLAY BY NAME tareas.nombre_trabajador AFTER FIELD fecha_visita IF tareas.fecha_visita < tareas.fecha_labor THEN CALL fgl_winmessage("INFO","FECHA VISITA NO PUEDE SER MENOR A LA FECHA DE LA LABOR","INFO") NEXT FIELD fecha_visita END IF END INPUT ON ACTION CANCEL RETURN ON ACTION guardar_tarea CALL guardar_tareas() CALL busca_tareas() END DIALOG END FUNCTION FUNCTION guardar_tareas() SELECT MAX(a.id_labor) INTO tareas.id_labor FROM svtb00003 a WHERE a.num_doc = xsv.num_doc IF tareas.id_labor IS NULL THEN LET tareas.id_labor = 0 END IF LET tareas.id_labor = tareas.id_labor + 1 INSERT INTO svtb00003 (num_doc ,id_labor ,sec_vend1 ,nombre ,fecha_labor ,fecha_visita ,observacion ,us_crea ,fech_crea) VALUES (xsv.num_doc ,tareas.id_labor ,tareas.sec_vend1 ,tareas.nombre_trabajador ,tareas.fecha_labor ,tareas.fecha_visita ,tareas.observacion_labor ,usuarios ,getdate()) END FUNCTION FUNCTION busca_tareas() DECLARE busca_tareas CURSOR FOR SELECT a.id_labor,a.sec_vend1,a.nombre,a.fecha_labor,a.fecha_visita,a.observacion FROM svtb00003 a WHERE a.num_doc = xsv.num_doc LET idx = 1 FOREACH busca_tareas INTO arr_tareas[idx].* LET idx = idx + 1 END FOREACH END FUNCTION REPORT hoja_servicio(z) DEFINE fecha STRING DEFINE z RECORD items VARCHAR(20), aplica VARCHAR(10), medida VARCHAR(10) END RECORD FORMAT FIRST PAGE HEADER LET fecha = today ON EVERY ROW PRINTX xsv.*,p_compania.nombre,fecha,z.* END REPORT FUNCTION empleados() DEFINE cli_vend1 DYNAMIC ARRAY OF RECORD num_emp INT, nom1_emp VARCHAR(30), apell1_emp VARCHAR(30) END RECORD, num_emp INT, nombre_vendedor VARCHAR(100) OPEN WINDOW relacion AT 8,5 WITH FORM "vefmwd101" ATTRIBUTE (BORDER, COMMENT LINE LAST,FORM LINE FIRST + 1) CONSTRUCT criterio ON b.nom1_emp,b.apell1_emp FROM nom1_emp,apell1_emp IF int_flag THEN CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS CON ESTA CONDICION","INFO") LET int_flag = FALSE RETURN 0,' ' END IF LET selec = "SELECT b.num_emp,b.nom1_emp,b.apell1_emp ", "FROM adtb00003 b ", "WHERE b.status_t IS NULL AND ", criterio CLIPPED," ORDER BY b.nom1_emp " PREPARE comando1 FROM selec DECLARE vendedor CURSOR FOR comando1 LET idx = 1 FOREACH vendedor INTO cli_vend1[idx].* LET idx = idx + 1 END FOREACH CALL set_count(idx-1) DISPLAY ARRAY cli_vend1 TO s_empleados.* AFTER DISPLAY LET idx = arr_curr() LET num_emp = cli_vend1[idx].num_emp LET nombre_vendedor= cli_vend1[idx].nom1_emp CLIPPED,' ',cli_vend1[idx].apell1_emp CLIPPED IF INT_FLAG THEN CALL fgl_winmessage("INFO","OPERACION CANCELADA","INFO") RETURN 0,' ' END IF END DISPLAY CLOSE WINDOW relacion RETURN num_emp,nombre_vendedor END FUNCTION FUNCTION requisicion_pendiente() DEFINE arr_pendientes DYNAMIC ARRAY OF RECORD xnum_Doc INT, xnombre_cliente VARHCAR(100), xfecha DATE END RECORD DECLARE busca_pendientes CURSOR FOR SELECT a.* INTO xsv.* FROM svtb00001 a WHERE a.status_t IS NULL ORDER BY a.fecha LET idx = 1 FOREACH busca_pendientes END FUNCTION