/* solo bodegas activas y facturables */
SET TERM ^ ;

CREATE OR ALTER procedure EXISTENCIAS_WEB (
    ARTICULO varchar(15),
    FECHA date)
returns (
    BODEGA varchar(2),
    AGENCIA integer,
    EXISTENCIA numeric(18,2),
    RESERVADO numeric(18,2),
    DISPONIBLE numeric(18,2),
    ORDENADO numeric(18,2),
    NOMBOD varchar(30))
AS
declare variable ordenc numeric(18,4);
declare variable pedido numeric(18,4);
declare variable item integer;
declare variable id integer;
declare variable und varchar(8);
declare variable cant numeric(18,4);
declare variable factor2 numeric(18,4);
begin
for select bode_cod, sucu_id, bode_nom from bodega where bode_Activa = 'S' and bode_factura = 'S' order by bode_cod
    into :bodega, :agencia, :nombod
    do
    begin
    execute procedure saldo_inventario (:articulo, :bodega, :fecha) returning_values (:Existencia);
    select sum(ORID_ENTREGAR)
      from ORDENINVENTARIO_DETALLE OD, ordenes_inventario O
      where O.ORIN_ID = OD.ORIN_ID and ARTI_COD = :ARTICULO and ORIN_FECHA <= :FECHA and ORIN_FECLLEGA >= :FECHA and ORID_ANULADO = 'N' and OD.BODE_COD = :BODEGA
      into :ORDENADO;
    if (ORDENADO is null) then
        ORDENADO = 0;
    ORDENC = 0;
    for select O.ORDC_ID, OCDE_ITEM, OCDE_CANT * OCDE_FACTOR
        from ORDENES_COMPRA O, ORDENES_COMPRA_DETALLE OD
        where O.ORDC_ID = OD.ORDC_ID and OD.ARTI_COD = :ARTICULO and (ORDC_FECHA+ORDC_VALIDEZ) >= :FECHA and ORDC_FECHA <= :FECHA and OCDE_ANULADO = 'N' and OD.BODE_COD = :BODEGA
        into :ID, :ITEM, :CANT
        do
        begin
        execute procedure FALTANTE(23, 21, ID, ITEM) returning_values (PEDIDO, UND, FACTOR2);
        if (PEDIDO * FACTOR2 = CANT) then /* SI NO SE HA FACTURADO MIRE A VER SI SE REMISIONO */
            execute procedure FALTANTE(23, 22, ID, ITEM) returning_values (PEDIDO, UND, FACTOR2);
        if (PEDIDO is null) then
            PEDIDO = 0;
        ORDENC = ORDENC + PEDIDO * FACTOR2;
        end
    ORDENADO = ORDENADO + ORDENC;
    select sum(RSDE_LIBERAR)
      from RESERVAS_DETALLE RD, RESERVAS R
      where R.RESE_ID = RD.RESE_ID and ARTI_COD = :ARTICULO and RESE_FECHA <= :FECHA and RESE_VENCE >= :FECHA and RD.BODE_COD = :BODEGA and RSDE_ANULADO = 'N'
      into :RESERVADO;
    if (RESERVADO is null) then
        RESERVADO = 0;
    PEDIDO = 0;
    for select P.PEDI_ID, PEDE_ITEM, PEDE_CANT * PEDE_FACTOR
        from PEDIDOS P, PEDIDOS_DETALLE PD
        where P.PEDI_ID = PD.PEDI_ID and PD.ARTI_COD = :ARTICULO and PEDI_VENCE >= :FECHA and PEDI_FECHA <= :FECHA and PEDE_ANULADO = 'N' and BODE_COD = :BODEGA
        into :ID, :ITEM, :CANT
        do
        begin
        execute procedure FALTANTE(34, 31, ID, ITEM) returning_values (ORDENC, UND, FACTOR2);
        if (ORDENC * FACTOR2 = CANT) then /* SI NO SE HA FACTURADO MIRE A VER SI SE REMISIONO */
            execute procedure FALTANTE(34, 32, ID, ITEM) returning_values (ORDENC, UND, FACTOR2);
        if (ORDENC is null) then
            ORDENC = 0;
        PEDIDO = PEDIDO + ORDENC * FACTOR2;
        end
    RESERVADO = RESERVADO + PEDIDO;
    DISPONIBLE = EXISTENCIA - RESERVADO;
    suspend;
    end
end^

SET TERM ; ^



