209 lines
6.5 KiB
Plaintext
209 lines
6.5 KiB
Plaintext
IMPORT util
|
|
|
|
-- Tipos reutilizables para evitar duplicar la definición de campos
|
|
TYPE t_master RECORD
|
|
ventas CHAR(1),
|
|
cotizacion_no INT,
|
|
num_oc INT,
|
|
fecha_oc DATE,
|
|
orden_compra CHAR(15),
|
|
sec_vend SMALLINT,
|
|
nombreVendedor VARCHAR(100),
|
|
tipo_cliente SMALLINT,
|
|
sec_cliente SMALLINT,
|
|
cliente VARCHAR(100),
|
|
direccion CHAR(80),
|
|
telefono CHAR(20),
|
|
fax CHAR(20),
|
|
fecha_entrega DATE,
|
|
cond_pago SMALLINT,
|
|
cantidad_i DEC(8, 2),
|
|
precio_i DEC(8, 2),
|
|
cantidad_mo DEC(10, 2),
|
|
precio_mo DEC(10, 2),
|
|
transporte DEC(10, 2),
|
|
itbis DEC(10, 2),
|
|
ubicacion VARCHAR(170),
|
|
estado_orden CHAR(10),
|
|
fecha_cierre DATE,
|
|
observacion VARCHAR(100),
|
|
nombre_file2 VARCHAR(100)
|
|
END RECORD
|
|
|
|
TYPE t_detalle RECORD
|
|
num_oc INT,
|
|
secuencia SMALLINT,
|
|
area SMALLINT,
|
|
cod_n SMALLINT,
|
|
cod_grupo SMALLINT,
|
|
cod_tipo SMALLINT,
|
|
cod_sec SMALLINT,
|
|
descripcion VARCHAR(100),
|
|
precio DEC(10, 2),
|
|
cantidad_1 DEC(12, 4),
|
|
cantidad DEC(12, 5),
|
|
descuento DEC(10, 2),
|
|
fecha_compromiso DATE,
|
|
estado_produccion VARCHAR(20),
|
|
observacion VARCHAR(100),
|
|
id_kit INT
|
|
END RECORD
|
|
|
|
FUNCTION ordenesCocinas(data)
|
|
DEFINE
|
|
i SMALLINT,
|
|
idx SMALLINT,
|
|
data STRING
|
|
|
|
DEFINE credenciales RECORD
|
|
usuario VARCHAR(50),
|
|
clave VARCHAR(50),
|
|
orden INT
|
|
END RECORD
|
|
|
|
-- Estructura de salida: ORDEN { master, [detalle] }
|
|
DEFINE o RECORD
|
|
ordenes DYNAMIC ARRAY OF RECORD
|
|
master t_master,
|
|
detalle DYNAMIC ARRAY OF t_detalle
|
|
END RECORD,
|
|
menajes RECORD
|
|
cod_msg INT,
|
|
descripcion STRING
|
|
END RECORD
|
|
END RECORD
|
|
|
|
-- Registros temporales donde cae cada FETCH antes de copiarlo al arreglo
|
|
DEFINE orden_master t_master
|
|
DEFINE orden_detalle t_detalle
|
|
DEFINE v_num_oc INT
|
|
|
|
CALL util.JSON.parse(data, credenciales)
|
|
DISPLAY "USUARIO ", credenciales.usuario, " clave ", credenciales.clave
|
|
|
|
CONNECT TO "smarmotech" USER credenciales.usuario USING credenciales.clave
|
|
IF STATUS < 0 THEN
|
|
LET o.menajes.cod_msg = 400
|
|
LET o.menajes.descripcion = "USUARIO NO VALIDO ", SQLCA.SQLERRM
|
|
DISCONNECT CURRENT
|
|
RETURN util.JSON.stringify(o)
|
|
END IF
|
|
|
|
DISPLAY "DATOS: ", credenciales.orden
|
|
|
|
-- Cursor maestro: una fila por orden de cocina (cod_n = 52)
|
|
-- NOTA: aqui van 25 columnas para 25 campos del maestro.
|
|
-- En tu version original habia un a.num_oc repetido al final
|
|
-- (26 columnas vs 25 campos), que lo quite.
|
|
DECLARE buscaOrden CURSOR FOR
|
|
SELECT DISTINCT
|
|
a.ventas,
|
|
a.cotizacion_no,
|
|
a.num_oc,
|
|
a.fecha_oc,
|
|
RTRIM(a.nombre_file),
|
|
a.sec_vend,
|
|
RTRIM(c.nom1_emp) || ' '|| RTRIM(c.apell1_emp),
|
|
a.tipo_cliente,
|
|
a.sec_cliente,
|
|
RTRIM(d.nombre),
|
|
RTRIM(a.direccion),
|
|
a.telefono,
|
|
a.fax,
|
|
a.fecha_entrega,
|
|
ISNULL(a.cond_pago, 0),
|
|
ISNULL(a.cantidad_i, 0),
|
|
ISNULL(a.precio_i, 0),
|
|
ISNULL(a.cantidad_mo, 0),
|
|
ISNULL(a.precio_mo, 0),
|
|
a.transporte,
|
|
a.itbis,
|
|
RTRIM(a.ubicacion),
|
|
a.cerrada,
|
|
a.fecha_cierre,
|
|
a.observacion,
|
|
a.nombre_file2
|
|
FROM prtb00012 a
|
|
INNER JOIN adtb00003 c ON c.num_emp = a.sec_vend
|
|
INNER JOIN prtb00013 k ON k.num_oc = a.num_oc,
|
|
vetb00004 d
|
|
WHERE k.cod_n IN (52,56,40,43)
|
|
AND a.cerrada = 'N'
|
|
AND a.tipo_cliente = d.tipo_cliente
|
|
AND a.sec_cliente = d.sec_cliente
|
|
AND a.status_t IS NULL
|
|
|
|
-- Cursor de detalle: items de UNA sola orden, parametrizado por v_num_oc.
|
|
-- Se declara una sola vez; el valor de v_num_oc se lee al abrir el FOREACH.
|
|
DECLARE u27 CURSOR FOR
|
|
SELECT
|
|
b.num_oc,
|
|
b.secuencia,
|
|
b.area,
|
|
b.cod_n,
|
|
b.cod_grupo,
|
|
b.cod_tipo,
|
|
b.cod_sec,
|
|
RTRIM(k.descrip_esp),
|
|
b.precio,
|
|
b.cantidad,
|
|
c.cantidad_1,
|
|
b.descuento,
|
|
b.fecha_compromiso,
|
|
b.estado_produccion,
|
|
b.observacion,
|
|
b.id_kit
|
|
FROM prtb00012 a,
|
|
prtb00013 b
|
|
INNER JOIN iptb00002 k
|
|
ON k.cod_n = b.cod_n
|
|
AND k.cod_grupo = b.cod_grupo
|
|
AND k.cod_tipo = b.cod_tipo
|
|
AND k.cod_sec = b.cod_sec,
|
|
prtb00023 c
|
|
WHERE a.num_oc = b.num_oc
|
|
AND b.num_oc = v_num_oc
|
|
AND b.num_oc = c.num_oc
|
|
AND a.cerrada = 'N'
|
|
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.status_t IS NULL
|
|
|
|
LET idx = 0
|
|
CALL o.ordenes.clear()
|
|
|
|
FOREACH buscaOrden INTO orden_master.*
|
|
LET idx = idx + 1
|
|
|
|
-- Estado de la orden
|
|
IF orden_master.estado_orden = 'N' THEN
|
|
LET orden_master.estado_orden = 'ABIERTA'
|
|
ELSE
|
|
LET orden_master.estado_orden = 'CERRADA'
|
|
END IF
|
|
|
|
-- Copio el maestro a su posicion en el arreglo de ordenes
|
|
LET o.ordenes[idx].master.* = orden_master.*
|
|
|
|
-- Parametro para traer el detalle de ESTA orden
|
|
LET v_num_oc = orden_master.num_oc
|
|
|
|
-- Detalle anidado dentro de la orden actual
|
|
LET i = 0
|
|
FOREACH u27 INTO orden_detalle.*
|
|
LET i = i + 1
|
|
LET o.ordenes[idx].detalle[i].* = orden_detalle.*
|
|
END FOREACH
|
|
END FOREACH
|
|
|
|
FREE u27
|
|
FREE buscaOrden
|
|
|
|
DISCONNECT CURRENT
|
|
LET o.menajes.cod_msg = 200
|
|
LET o.menajes.descripcion = 'OPERACION EXITOSA'
|
|
RETURN util.JSON.stringify(o)
|
|
END FUNCTION
|