Files
2026-09-22 20:38:51 -04:00

466 lines
15 KiB
Plaintext

GLOBALS
"svglobals.4gl"
DEFINE quejas RECORD
num_doc INT,
num_oc INT,
cotizacion_no INT,
tipo_cliente SMALLINT,
sec_cliente INT,
nombre VARCHAR(100),
rnc VARCHAR(11),
telefono CHAR(25),
fecha DATE,
correo VARCHAR(100),
sec_vend INT,
vendedor VARCHAR(50),
comentario VARCHAR(100),
via VARCHAR(60),
pcodn SMALLINT,
pcodgrupo SMALLINT,
pcodtipo SMALLINT,
pcodsec SMALLINT,
producto VARCHAR(100),
lote VARCHAR(100),
fecha_compra DATE,
sucid SMALLINT,
pestado1 VARCHAR(50)
END RECORD,
documento BYTE,
noexiste BOOLEAN
DEFINE representante VARCHAR(100),
arr_documentos DYNAMIC ARRAY OF RECORD
pnum_doc INT,
fecha DATE,
cliente VARCHAR(100),
pestado VARCHAR(50)
END RECORD,
respuesta STRING
DEFINE arr_quejas DYNAMIC ARRAY OF RECORD
factura INT,
fecha_factura DATE,
codigo VARCHAR(25),
descripcion VARCHAR(180),
cantidad DEC(12,5),
precio DEC(12,2),
descuento DEC(12,2),
valor DEC(12,2),
pcod_n SMALLINT,
pcod_grupo SMALLINT,
pcod_tipo SMALLINT,
pcod_sec SMALLINT,
sucid1 SMALLINT
END RECORD
MAIN
DEFER INTERRUPT
CALL ARG_VAL(1) RETURNING usuarios
CALL ARG_VAL(2) RETURNING clave
OPTIONS INPUT WRAP
CONNECT to "decomarmol" AS "IFMX" USER usuarios USING clave
CALL svprmt003()
END MAIN
FUNCTION svprmt003()
OPEN WINDOW w1 WITH FORM "svfmmt003"
MENU
ON ACTION adicionar
CALL svprad003()
ON ACTION consultar
CALL svprmf003()
ON ACTION salir
EXIT MENU
END MENU
END FUNCTION
FUNCTION svprad003()
DIALOG ATTRIBUTE(UNBUFFERED)
INPUT BY NAME quejas.*
BEFORE INPUT
CALL localidades()
LET quejas.fecha = TODAY
SELECT a.nom1_emp || ' '|| a.apell1_emp INTO representante FROM adtb00003 a,seg0001 b
WHERE b.usuario = usuarios AND a.num_emp = b.num_emp
DISPLAY BY NAME representante,usuarios,quejas.fecha
LET selec =
"SELECT TOP 20 a.num_doc,a.fecha,a.nombre,a.estado FROM svtb00004 a ",
"ORDER BY a.fecha "
PREPARE comando1 FROM selec
DECLARE busca_doc1 CURSOR FOR comando1
LET idx = 1
FOREACH busca_doc1 INTO arr_documentos[idx].*
LET idx = idx +1
END FOREACH
ON ACTION cliente
CALL busca_cliente() RETURNING quejas.tipo_cliente,quejas.sec_cliente,quejas.nombre
DISPLAY BY NAME quejas.tipo_cliente,quejas.sec_cliente,quejas.nombre
AFTER FIELD num_oc
IF quejas.num_oc IS NOT NULL THEN
CALL busca_datos()
END IF
AFTER FIELD sec_cliente
IF quejas.tipo_cliente IS NOT NULL THEN
DECLARE busca_doc CURSOR FOR
SELECT a.factura,a.fecha_factura,c.descrip_esp,b.cantidad,b.precio,
(b.precio*b.cantidad)*(b.cantidad_2/100),
b.cod_n,b.cod_grupo,b.cod_tipo,b.cod_Sec,a.sucid
FROM vetb00002 a,vetb00003 b,iptb00002 c
WHERE a.factura = b.factura AND b.cod_n = c.cod_n AND b.cod_grupo = c.cod_grupo AND b.cod_tipo = c.cod_tipo AND
b.cod_sec = c.cod_sec AND
a.tipo_cliente = quejas.tipo_cliente AND a.sec_cliente = quejas.sec_cliente
LET idx = 1
FOREACH busca_doc INTO arr_quejas[idx].factura,arr_quejas[idx].fecha_factura,
arr_quejas[idx].descripcion,arr_quejas[idx].cantidad,
arr_quejas[idx].precio,arr_quejas[idx].descuento,
arr_quejas[idx].pcod_n,arr_quejas[idx].pcod_grupo,
arr_quejas[idx].pcod_tipo,arr_quejas[idx].pcod_sec
LET arr_quejas[idx].codigo = arr_quejas[idx].pcod_n USING "&&&&","-",
arr_quejas[idx].pcod_grupo USING "&&&&","-",
arr_quejas[idx].pcod_tipo USING "&&&&&","-",arr_quejas[idx].pcod_sec USING "&&&&&"
LET arr_quejas[idx].valor = arr_quejas[idx].cantidad* arr_quejas[idx].precio
END FOREACH
END IF
AFTER INPUT
END INPUT
DISPLAY ARRAY arr_quejas TO squejas.*
BEFORE ROW
LET quejas.pcodn = arr_quejas[arr_curr()].pcod_n
LET quejas.pcodgrupo = arr_quejas[arr_curr()].pcod_grupo
LET quejas.pcodtipo = arr_quejas[arr_curr()].pcod_tipo
LET quejas.pcodsec = arr_quejas[arr_curr()].pcod_sec
LET quejas.producto = arr_quejas[arr_curr()].descripcion
LET quejas.sucid = arr_quejas[arr_curr()].sucid1
DISPLAY BY NAME quejas.pcodn,quejas.pcodgrupo,quejas.pcodtipo,quejas.pcodsec,
quejas.producto
END DISPLAY
DISPLAY ARRAY arr_documentos TO sdocumentos.*
END DISPLAY
ON ACTION guardar
CALL actualiza_datos()
ON ACTION CANCEL
EXIT PROGRAM
END DIALOG
CLOSE WINDOW w1
END FUNCTION
FUNCTION svprmf003()
DIALOG ATTRIBUTE(UNBUFFERED)
CONSTRUCT criterio ON a.num_doc,a.nombre,a.num_oc,a.cotizacion_no,a.rnc,a.telefono
FROM num_doc,nombre,num_oc,cotizacion_no,rnc,telefono
BEFORE CONSTRUCT
CALL localidades()
LET quejas.fecha = TODAY
SELECT a.nom1_emp || ' '|| a.apell1_emp INTO representante FROM adtb00003 a,seg0001 b
WHERE b.usuario = usuarios AND a.num_emp = b.num_emp
DISPLAY BY NAME representante,usuarios,quejas.fecha
LET selec =
"SELECT TOP 20 a.num_doc,a.fecha,a.nombre,a.estado FROM svtb00004 a ",
"ORDER BY a.fecha "
PREPARE comando11 FROM selec
DECLARE busca_doc11 CURSOR FOR comando11
LET idx = 1
FOREACH busca_doc11 INTO arr_documentos[idx].*
LET idx = idx +1
END FOREACH
ON ACTION buscar
LET selec = "SELECT a.num_doc
,a.num_oc
,a.cotizacion_no
,a.tipo_cliente
,a.sec_cliente
,a.nombre
,a.rnc
,a.telefono
,CONVERT(DATE,a.fecha,103)
,a.correo
,a.sec_vend
,RTRIM(b.nom1_emp)+ ' '+b.apell1_emp
,a.comentario
,a.via
,a.cod_n
,a.cod_grupo
,a.cod_tipo
,a.cod_sec
,a.producto
,a.lote
,CONVERT(DATE,a.fecha_compra,103)
,a.sucid
,a.estado
,a.us_crea
,a.fech_crea
FROM svtb00004 a LEFT OUTER JOIN adtb00003 b ON a.sec_vend = b.num_emp WHERE ",criterio CLIPPED
PREPARE comando10 FROM selec
DECLARE busca_f1 SCROLL CURSOR FOR comando10
OPEN busca_f1
FETCH FIRST busca_f1 INTO quejas.*
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS CON ESTA CONDICION","INFO")
RETURN
END IF
DISPLAY BY NAME quejas.*
MENU "NAVEGACION"
COMMAND "Siguiente"
FETCH NEXT busca_f1 INTO quejas.*
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS EN ESTA DIRECCION","INFO")
EXIT MENU
END IF
DISPLAY BY NAME quejas.*
COMMAND "Anterior"
FETCH PREVIOUS busca_f1 INTO quejas.*
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS EN ESTA DIRECCION","INFO")
EXIT MENU
END IF
DISPLAY BY NAME quejas.*
COMMAND "Primero"
FETCH FIRST busca_f1 INTO quejas.*
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS EN ESTA DIRECCION","INFO")
EXIT MENU
END IF
DISPLAY BY NAME quejas.*
COMMAND "Ultimo"
FETCH LAST busca_f1 INTO quejas.*
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","NO EXISTEN REGISTROS EN ESTA DIRECCION","INFO")
EXIT MENU
END IF
DISPLAY BY NAME quejas.*
COMMAND KEY("N") "ANULAR"
IF fgl_winquestion("INFO","ESTA SEGURO QUE DESEA ANULAR ESTA INFORMACION?","NO","YES|NO","QUESTION",0) THEN
UPDATE svtb00004 SET estado = 'ANULADO',us_mod =usuarios,fech_mod = getedate()
WHERE num_Doc = quejas.num_doc
END IF
COMMAND "Retornar"
EXIT MENU
END MENU
AFTER CONSTRUCT
IF INT_FLAG THEN
RETURN
LET INT_FLAG = FALSE
END IF
END CONSTRUCT
ON ACTION CANCEL
LET INT_FLAG = FALSE
RETURN
END DIALOG
END FUNCTION
FUNCTION busca_cliente()
DEFINE selec, criterio STRING,
arr_clientes DYNAMIC ARRAY OF RECORD
tipo_cliente SMALLINT,
sec_cliente INT,
nombre1 VARCHAR(100)
END RECORD,
ptipo_cliente SMALLINT,
psec_cliente INT,
pnombre VARCHAR(100)
OPEN WINDOW w2 WITH FORM "svfmwd001"
CONSTRUCT BY NAME criterio ON a.nombre,a.num_rnc
LET selec = "SELECT a.tipo_cliente,a.sec_cliente,a.nombre,a.num_rnc FROM vetb00004 a WHERE ",criterio CLIPPED,
" AND a.status_t IS NULL"
PREPARE comando FROM selec
DECLARE busca_cli CURSOR FOR comando
LET idx = 1
FOREACH busca_cli INTO arr_clientes[idx].*
LET idx = idx + 1
END FOREACH
DISPLAY ARRAY arr_clientes TO sclientes.*
AFTER DISPLAY
LET ptipo_cliente = arr_clientes[arr_curr()].tipo_cliente
LET psec_cliente = arr_clientes[arr_curr()].sec_cliente
LET pnombre = arr_clientes[arr_curr()].nombre1
EXIT DISPLAY
END DISPLAY
CLOSE WINDOW w2
RETURN ptipo_cliente,psec_cliente,pnombre
END FUNCTION
FUNCTION actualiza_datos()
DEFINE ultimo,prowid INT
SELECT a.num_Doc INTO ultimo FROM svtb00006 a
IF STATUS = NOTFOUND THEN
LET ultimo = 1
INSERT INTO svtb00006 (num_doc,us_crea,fech_crea) VALUES (ultimo,usuarios,getdate())
ELSE
LET ultimo = ultimo + 1
UPDATE svtb00006 SET num_doc = ultimo,us_crea = usuarios,fech_crea = getdate()
END IF
LET quejas.num_doc = ultimo
BEGIN WORK
INSERT INTO svtb00004
(num_doc
,fecha
,num_oc
,cotizacion_no
,tipo_cliente
,sec_cliente
,nombre
,rnc
,telefono
,correo
,sec_vend
,comentario
,via
,cod_n
,cod_grupo
,cod_tipo
,cod_sec
,producto
,lote
,fecha_compra
,sucid
,estado
,us_crea
,fech_crea)
VALUES
(quejas.num_doc
,quejas.fecha
,quejas.num_oc
,quejas.cotizacion_no
,quejas.tipo_cliente
,quejas.sec_cliente
,quejas.nombre
,quejas.rnc
,quejas.telefono
,quejas.correo
,quejas.sec_vend
,quejas.comentario
,quejas.via
,quejas.pcodn
,quejas.pcodgrupo
,quejas.pcodtipo
,quejas.pcodsec
,quejas.producto
,quejas.lote
,quejas.fecha_compra
,quejas.sucid
,'PENDIENTE'
,usuarios
,getdate()
)
LET prowid = 1
FOR idx = 1 TO arr_quejas.getLength()
IF arr_quejas[idx].factura IS NOT NULL THEN
IF arr_quejas[idx].pcod_sec IS NOT NULL THEN
INSERT INTO svtb00005
(num_doc
,factura
,fecha_factura
,codigo
,descripcion
,cantidad
,precio
,descuento
,valor
,cod_n
,cod_grupo
,cod_tipo
,cod_sec,
rowid)
VALUES
(quejas.num_doc
,arr_quejas[idx].factura
,arr_quejas[idx].fecha_factura
,arr_quejas[idx].codigo
,arr_quejas[idx].descripcion
,arr_quejas[idx].cantidad
,arr_quejas[idx].precio
,arr_quejas[idx].descuento
,arr_quejas[idx].valor
,arr_quejas[idx].pcod_n
,arr_quejas[idx].pcod_grupo
,arr_quejas[idx].pcod_tipo
,arr_quejas[idx].pcod_sec
,prowid)
LET prowid = prowid +1
END IF
END IF
END FOR
COMMIT WORK
CALL fgl_winmessage("INFO","ADICION EXITOSA","INFO")
END FUNCTION
FUNCTION busca_Datos()
SELECT a.tipo_cliente,a.sec_cliente,b.nombre,a.cotizacion_no,b.num_rnc,a.sec_vend,RTRIM(c.nom1_emp)||' '||c.apell1_Emp
INTO quejas.tipo_cliente,quejas.sec_cliente,quejas.nombre,quejas.cotizacion_no,quejas.rnc,
quejas.sec_vend,quejas.vendedor
FROM prtb00012 a,vetb00004 b,adtb00003 c
WHERE a.num_oc = quejas.num_oc AND a.tipo_cliente = b.tipo_cliente AND
a.sec_cliente = b.sec_cliente AND a.sec_vend = c.num_emp
IF STATUS = NOTFOUND THEN
CALL fgl_winmessage("INFO","ORDEN PEDIDOS NO EXISTE","INFO")
LET noexiste = TRUE
RETURN
ELSE
LET noexiste = FALSE
END IF
DISPLAY BY NAME quejas.tipo_cliente,quejas.sec_cliente,quejas.nombre,quejas.cotizacion_no,quejas.rnc,
quejas.sec_vend,quejas.vendedor
SELECT DISTINCT a.num_oc FROM svtb00004 a WHERE a.num_oc = quejas.num_oc AND a.estado <> 'ANULADO'
IF STATUS <> NOTFOUND THEN
LET respuesta = fgl_winquestion("EXISTE","NUMERO DE ORDEN TIENE DOCUMENTO DE QUEJAS, DESEAS ADICIONAR ESTE DE TODAS FORMAS?","NO","YES|NO","QUESTION",0)
IF respuesta = "NO" THEN
LET noexiste = TRUE
RETURN
END IF
END IF
END FUNCTION
FUNCTION localidades()
DEFINE klocalidad SMALLINT,kdescripcion CHAR(30),
plocalidad ui.combobox
LET plocalidad = ui.combobox.forname("formonly.sucid")
DECLARE busca_local CURSOR FOR
SELECT a.sucid,a.nombre_display FROM sucursales a WHERE localidad_venta = "SI"
CALL plocalidad.clear()
FOREACH busca_local INTO klocalidad,kdescripcion
CALL plocalidad.additem(klocalidad,kdescripcion)
END FOREACH
END FUNCTION