430 lines
14 KiB
Plaintext
430 lines
14 KiB
Plaintext
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 |