Files
MBS/WEBSERVICES/productos - Copy.4gl

241 lines
8.6 KiB
Plaintext

IMPORT util
IMPORT os
FUNCTION productos(tipo_inventario)
DEFINE xfecha_conteo DATE
DEFINE tipo_inventario VARCHAR(50)
DEFINE p 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,
existencia DEC(12,5),
consumo DEC(12,5),
costo DEC(12,5),
precio DEC(12,2),
ordenes DEC(12,5),
despachado DEC(12,5),
disponible DEC(12,5),
dias SMALLINT,
fecha CHAR(10),
fecha_conteo CHAR(10)
END RECORD #,
#existencia DYNAMIC ARRAY OF RECORD
# codid INT,
# bodega SMALLINT,
# cantidad FLOAT,
# fecha DATE
#END RECORD
END RECORD,
r_foto DYNAMIC ARRAY OF RECORD
foto STRING
END RECORD,
i int,
selec,s1 STRING,
fecha,fecha_ini DATE
LET fecha = TODAY
LET fecha_ini = fecha - 90
IF tipo_inventario = "productos" THEN
SELECT a.fecha_conteo INTO xfecha_conteo FROM intb00044 a
WHERE a.tipo_inventario = tipo_inventario AND a.disponible = "SI"
LET selec =
"SELECT a.codid,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.descrip_esp,a.unidad_med,d.factor_conv,'0',",
"'0', '0','0','0','0' ",
" FROM iptb00002 a,iptb00001 d where a.status_t is null and ",
" 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.control_existencia='SI' "
LET s1 =
"SELECT a.codid,b.bodega,SUM(b.cantidad_2) FROM iptb00006 b,iptb00002 a 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 ",
"a.control_existencia='SI' ",
" group by a.codid,b.bodega ",
" having SUM(b.cantidad_2) > 0 "
{"SELECT a.codid,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.descrip_esp,a.unidad_med,d.factor_conv,SUM(b.cantidad_2),",
"ISNULL((SELECT SUM(iptb00006.cantidad_2) FROM iptb00006 ", #CONSUMO PRODUCTO
" WHERE a.cod_n = cod_n AND a.cod_grupo=cod_grupo AND a.cod_tipo = cod_tipo AND a.cod_sec = cod_sec AND ",
" COD_MOV IN (30,31,55,56) and iptb00006.fecha between '",fecha_ini,"' and '",fecha,"' and status_t IS NULL ),0),",
" ISNULL(c.material+c.gastos+c.labor,0),ISNULL(x7.precio,0),",
" ISNULL((SELECT SUM(x1.cantidad) ", # CANTIDAD ORDENES
" FROM prtb00013 x1,prtb00012 x2 ",
" WHERE x1.num_oc = x2.num_oc AND ",
" x2.cerrada = 'N' AND ",
" x2.status_t IS NULL AND ",
" (x1.cod_n = a.cod_n AND ",
" x1.cod_grupo=a.cod_grupo AND ",
" x1.cod_tipo=a.cod_tipo AND ",
" x1.cod_sec=a.cod_sec ) ",
" ),0), ",
" ISNULL(( SELECT SUM(x5.cantidad_2) ", # DESPACHADO
" FROM prtb00013 x3,prtb00012 x4,iptb00006 x5,iptb00005 x6 ",
" WHERE (x3.num_oc = x4.num_oc) AND ",
" x4.cerrada = 'N' AND ",
" x4.status_t IS NULL AND ",
" (x3.cod_n = a.cod_n AND ",
" x3.cod_grupo=a.cod_grupo AND ",
" x3.cod_tipo=a.cod_tipo AND ",
" x3.cod_sec=a.cod_sec) AND ",
" (x3.cod_n = x5.cod_n AND ",
" x3.cod_grupo=x5.cod_grupo AND ",
" x3.cod_tipo=x5.cod_tipo AND ",
" x3.cod_sec=x5.cod_Sec) AND ",
" x5.cod_mov = x6.cod_mov AND ",
" (x6.control_despacho = 'SI' OR x6.control_devolucion = 'SI') AND ",
" x3.num_oc = x5.num_oc AND ",
" x5.status_t IS NULL ",
"),0),a.foto_producto ",
" FROM iptb00002 a LEFT OUTER JOIN vetb00025 x7 ON ",
" (a.cod_n = x7.cod_n AND ",
" a.cod_grupo = x7.cod_grupo AND ",
" a.cod_tipo = x7.cod_tipo AND ",
" a.cod_Sec = x7.cod_Sec) AND ",
" x7.ventas = '3' ",
" INNER JOIN iptb00001 d ON ",
" (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) ",
" ,iptb00006 b left OUTER JOIN iptb00004 c ON ",
" (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 ",
" c.ano =", year(fecha),") ",
" 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 ",
" a.status_t IS NULL ",
" GROUP BY d.factor_conv,a.codid,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.unidad_med,c.material,c.gastos,c.labor,a.descrip_esp,x7.precio,a.foto_producto "
}
END IF
IF tipo_inventario = "materia_prima" THEN
SELECT a.fecha_conteo INTO xfecha_conteo FROM intb00044 a
WHERE a.tipo_inventario = tipo_inventario AND a.disponible = "SI"
LET selec =
"SELECT a.codid,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.descrip_esp,a.unidad_med,'1','0','0',",
" '0','0',' ' ",
" FROM intb00001 a where a.status_t is null "
LET s1 =
"SELECT a.codid,b.bodega,SUM(b.cantidad_2) FROM intb00006 b,intb00001 a 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",
" group by a.codid,b.bodega ",
" having SUM(b.cantidad_2) > 0 "
DISPLAY "TIPO INVENTARIO ",tipo_inventario
END IF
IF tipo_inventario = "repuestos" THEN
SELECT a.fecha_conteo INTO xfecha_conteo FROM intb00044 a
WHERE a.tipo_inventario = tipo_inventario AND a.disponible = "SI"
LET selec =
"SELECT a.codid,a.cod_n,a.cod_grupo,a.cod_tipo,a.cod_Sec,a.descrip_esp,a.unidad_med,'1','0','0',",
" '0','0',' ' ",
" FROM irtb00002 a where a.status_t is null "
LET s1 =
"SELECT a.codid,b.bodega,SUM(b.cantidad_2) FROM irtb00006 b,irtb00002 a 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",
" group by a.codid,b.bodega ",
" having SUM(b.cantidad_2) > 0 "
END IF
PREPARE comando FROM selec
DECLARE c2 CURSOR FOR comando
LET i = 1
FOREACH c2 INTO p.productos[i].*
IF p.productos[i].codid IS NOT NULL THEN
LET p.productos[i].costo=0
LET p.productos[i].disponible = p.productos[i].existencia - (p.productos[i].ordenes+p.productos[i].despachado)
IF p.productos[i].consumo < 0 THEN
LET p.productos[i].consumo = p.productos[i].consumo * -1
END IF
IF p.productos[i].consumo > 0 THEN
LET p.productos[i].dias =(p.productos[i].disponible/ p.productos[i].consumo) * 90
ELSE
LET p.productos[i].dias=0
END IF
IF p.productos[i].descripcion IS NULL THEN
LET p.productos[i].descripcion = "NO TIENE"
END IF
IF p.productos[i].unidad_med IS NULL THEN
LET p.productos[i].unidad_med='UD'
END if
# IF pproductos[i].fullpath IS NOT NULL THEN
# IF os.path.exists(producto.fullpath) THEN
# LET producto.nombre_file=os.Path.basename(producto.fullpath)
# LET producto.nombre_file=producto.nombre_file CLIPPED
# CALL producto.foto.readFile(producto.fullpath)
# END IF
# END IF
# CALL fotos(producto.fullpath) RETURNING s1
LET p.productos[i].fecha=TODAY USING "dd/mm/yyyy"
# LET p.r_foto[i].foto = s1
# IF p.existencia[i].cantidad IS NULL THEN
# LET p.existencia[i].cantidad=0
# END IF
LET p.productos[i].fecha_conteo = xfecha_conteo
LET i = i + 1
END IF
END FOREACH
DISPLAY "productos ",p.productos.getLength()
LET i = 1
#PREPARE comando2 FROM s1
#DECLARE c3 CURSOR FOR comando2
#FOREACH c3 INTO p.existencia[i].*
# LET i = i+1
# END FOREACH
RETURN util.JSON.stringify(p)
END FUNCTION
FUNCTION fotos(fullpath)
DEFINE filename, s STRING,
fullpath VARCHAR(100)
DEFINE r_photo RECORD
i BYTE
END RECORD
# primero asignar la variable fullpath con el nombre mas el path-default o como sea en tu caso
#CALL os.path.join(images_cat_path CLIPPED,pname) RETURNING fullpath
# después dependiendo de si el archivo existe o no armar el string para enviar al cliente
IF os.path.exists(fullpath) THEN
LOCATE r_photo.i IN MEMORY
CALL r_photo.i.readFile(fullpath)
LET s=util.JSON.stringify(r_photo)
FREE r_photo.i
ELSE
LET s="FILE_NOT_FOUND"
END IF
RETURN s
END FUNCTION