Files
MBS/WEBSERVICES/productosconteo.4gl
T

214 lines
7.4 KiB
Plaintext

IMPORT util
IMPORT os
FUNCTION productosconteo(pdata)
DEFINE xfecha_conteo DATE
DEFINE pdata STRING
DEFINE producto RECORD
codid INT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descripcion VARCHAR(100),
unidad_med VARCHAR(4),
factor_conv FLOAT,
despiece STRING,
existencia DEC(12,5),
consumo DEC(12,5),
costo DEC(12,5),
precio DEC(12,2),
ordenes DEC(12,5),
despachado DEC(12,5),
desglose VARCHAR(1),
reservada DEC(12,5),
disponible DEC(12,5),
transito DEC(12,5),
dias SMALLINT,
fecha CHAR(10),
fecha_conteo CHAR(10)
END RECORD
DEFINE existencia RECORD
codid INT,
bodega SMALLINT,
descripcion_bodega VARCHAR(100),
cantidad FLOAT,
cod_seccion INT,cod_tramo INT,cod_fila INT,cod_pos,
fecha DATE
END RECORD
DEFINE p RECORD
credenciales RECORD
usuario,clave,tipo_inventario VARCHAR(50),
codn INT
END RECORD,
productos DYNAMIC ARRAY OF RECORD
codid INT,
cod_n SMALLINT,
cod_grupo SMALLINT,
cod_tipo SMALLINT,
cod_sec SMALLINT,
descripcion VARCHAR(100),
unidad_med VARCHAR(4),
factor_conv FLOAT,
despiece STRING,
existencia DEC(12,5),
consumo DEC(12,5),
costo DEC(12,5),
precio DEC(12,2),
ordenes DEC(12,5),
despachado DEC(12,5),
desglose VARCHAR(1),
reservada DEC(12,5),
disponible DEC(12,5),
transito DEC(12,5),
dias SMALLINT,
fecha CHAR(10),
fecha_conteo CHAR(10)
END RECORD ,
existencia DYNAMIC ARRAY OF RECORD
codid INT,
bodega SMALLINT,
descripcion_bodega VARCHAR(100),
cantidad FLOAT,
cod_seccion INT,cod_tramo INT,cod_fila INT,cod_pos,
fecha DATE
END RECORD,
mensajes RECORD
cod_msg INT,
descripcion STRING
END RECORD
END RECORD,
i int,
selec,s1 STRING,
fecha,fecha_ini DATE
CALL util.JSON.parse(pdata,p)
IF STATUS < 0 THEN
LET p.mensajes.cod_msg=STATUS
LET p.mensajes.descripcion = 'ERROR EN CONEXION ',SQLCA.sqlerrm
RETURN util.JSON.stringify(p)
END IF
# DISPLAY "productos ",p.credenciales.usuario," ",p.credenciales.clave," ",p.credenciales.tipo_inventario
CONNECT TO "smarmotech" USER p.credenciales.usuario USING p.credenciales.clave
IF STATUS < 0 THEN
LET p.mensajes.cod_msg=STATUS
LET p.mensajes.descripcion = 'ERROR EN CONEXION ',SQLCA.sqlerrm
DISCONNECT CURRENT
RETURN util.JSON.stringify(p)
END IF
LET fecha = TODAY
LET fecha_ini = fecha - 90
IF p.credenciales.tipo_inventario = "productos" THEN
SELECT a.fecha_conteo INTO xfecha_conteo FROM intb00044 a
WHERE a.tipo_inventario = tipo_inventario AND a.disponible = "SI"
DISPLAY "ESTOY PRODUCTOS",p.credenciales.codn
LET selec =
"SELECT a.codid,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.descrip_esp,a.unidad_med,ISNULL(d.factor_conv,1),b.cod_n,
'0','0', '0','0','0','0',a.desglose ",
" FROM iptb00002 a,iptb00001 d INNER JOIN intb00015 e ON e.cod_n = d.cod_n and
e.cod_grupo = d.cod_grupo and e.cod_tipo = d.cod_tipo and e.cod_sec = d.cod_sec and
e.estado = 'Pendiente'
LEFT OUTER JOIN iptb00027 b ON d.cod_n = b.cod_n and
d.cod_grupo = b.cod_grupo and d.cod_tipo = b.cod_tipo and d.cod_sec = b.cod_sec
where ",
" (a.cod_n = d.cod_n and a.cod_grupo = d.cod_grupo and a.cod_tipo = d.cod_tipo and ",
" a.cod_sec = d.cod_sec) AND a.status_t IS NULL AND ",
"a.control_existencia='SI' AND e.semana_del = (SELECT MIN (a.semana_del) FROM intb00015 a WHERE semana_del >= GETDATE())",
" ORDER BY a.codid "
LET s1 =
"SELECT a.codid,b.bodega,c.descripcion,0"{ISNULL(SUM(b.cantidad_2),0)},",d.cod_seccion,d.cod_tramo,d.cod_fila,d.cod_pos
FROM iptb00006 b,iptb00002 a INNER JOIN intb00015 e ON e.cod_n = a.cod_n and
e.cod_grupo = a.cod_grupo and e.cod_tipo = a.cod_tipo and e.cod_sec = a.cod_sec and
e.estado='Pendiente' ,intb00009 c,iptb00062 d
WHERE (a.cod_n = b.cod_n and ",
" a.cod_grupo = b.cod_grupo and a.cod_tipo = b.cod_tipo and a.cod_sec = b.cod_sec) and b.status_t is null ",
" and (d.cod_n = a.cod_n and d.cod_grupo = a.cod_grupo and d.cod_tipo = a.cod_tipo and d.cod_Sec = a.cod_sec) ",
" and ",
"a.control_existencia='SI' AND a.dispositivo_movil='SI' and b.bodega = c.cod_bodega ",
" group by a.codid,b.bodega,c.descripcion,d.cod_seccion,d.cod_tramo,d.cod_fila,d.cod_pos ",
" having SUM(b.cantidad_2) > 0 "
END IF
PREPARE comando FROM selec
DECLARE c2 CURSOR FOR comando
LET i = 1
FOREACH c2 INTO producto.*
IF producto.cod_n IS NOT null THEN
IF p.credenciales.tipo_inventario = 'productos' THEN
LET producto.costo=0
# CALL disponibles(producto.cod_n,producto.cod_grupo,producto.cod_tipo,producto.cod_sec,TODAY)
# RETURNING producto.ordenes,producto.despachado,producto.transito,producto.existencia,
# producto.reservada
LET producto.disponible = producto.existencia - (producto.ordenes+producto.despachado+producto.reservada)
IF producto.disponible IS NULL THEN
LET producto.disponible=0
END IF
# DESPIECE
IF producto.despiece IS NULL THEN
LET producto.despiece = 'NO'
ELSE
LET producto.despiece = 'SI'
END IF
END IF
IF producto.consumo < 0 THEN
LET producto.consumo = producto.consumo * -1
END IF
IF producto.consumo > 0 THEN
LET producto.dias =(producto.disponible/ producto.consumo) * 90
ELSE
LET producto.dias=0
END IF
IF producto.descripcion IS NULL THEN
LET producto.descripcion = "NO TIENE"
END IF
IF producto.unidad_med IS NULL THEN
LET producto.unidad_med='UD'
END IF
LET producto.fecha=TODAY USING "dd/mm/yyyy"
LET producto.fecha_conteo = xfecha_conteo
LET p.productos[i].* = producto.*
LET i = i + 1
END IF
END FOREACH
DISPLAY "NUMERO DE PRODUCTOS ",i
LET i = 1
PREPARE comando2 FROM s1
DECLARE c3 CURSOR FOR comando2
FOREACH c3 INTO existencia.*
IF existencia.cantidad IS NOT NULL THEN
IF existencia.codid > 0 THEN
LET existencia.fecha = today
LET p.existencia[i].* = existencia.*
IF p.existencia[i].cantidad IS NULL THEN
LET p.existencia[i].cantidad=0
END IF
LET i = i+1
END IF
END IF
END FOREACH
DISPLAY "NUMERO DE PRODUCTOS EXISTENCIA ",i
DISCONNECT CURRENT
RETURN util.JSON.stringify(p)
END FUNCTION