IMPORT util IMPORT os FUNCTION productos(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 IF p.credenciales.codn >0 THEN 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 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.cod_n= ",p.credenciales.codn,") and a.status_t IS NULL AND ", "a.control_existencia='SI' ORDER BY a.codid " LET s1 = "SELECT a.codid,b.bodega,c.descripcion,ISNULL(SUM(b.cantidad_2),0),d.cod_seccion,d.cod_tramo,d.cod_fila,d.cod_pos FROM iptb00006 b,iptb00002 a,intb00009 c,iptb00062 d WHERE (a.cod_n = b.cod_n and a.cod_n =",p.credenciales.codn, " 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 " ELSE 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 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' ORDER BY a.codid " LET s1 = "SELECT a.codid,b.bodega,c.descripcion,ISNULL(SUM(b.cantidad_2),0),d.cod_seccion,d.cod_tramo,d.cod_fila,d.cod_pos FROM iptb00006 b,iptb00002 a,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 END IF IF p.credenciales.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','NO','0','0',", " '0','0',' ' ", " FROM intb00001 a where a.status_t is null " LET s1 = "SELECT a.codid,b.bodega,SUM(b.cantidad_2),0,0,0,0 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 ",p.credenciales.tipo_inventario END IF IF p.credenciales.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','NO','0','0',", " '0','0',' ' ", " FROM irtb00002 a where a.status_t is null " LET s1 = "SELECT a.codid,b.bodega,SUM(b.cantidad_2),0,0,0,0 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 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 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