/* DEVUELVA CODIGO INTERNO DEL ARTICULO */
SET TERM ^ ;

CREATE OR ALTER procedure TRAE_ARTICULO_MOVILV2 (
    CODIGO varchar(20),
    VEND integer,
    CLIENTE varchar(20),
    SUCUCLI varchar(10),
    IDPEDWEB integer)
returns (
    ARTICULO varchar(20),
    DES varchar(60),
    DESCORTA varchar(30),
    UNIDAD varchar(8),
    IVA numeric(9,2),
    CONSUMO numeric(18,2),
    EXISTEN numeric(18,2),
    LISTA integer,
    PRECIO numeric(18,2),
    NOMLISTA varchar(30),
    NUMREP integer,
    CODREP char(2),
    VALEXISTEVENTART char(1),
    CONTEXISTART char(1),
    DTO1 numeric(9,2),
    DTO2 numeric(9,2),
    DTO3 numeric(9,2),
    CONTROLEXISPED char(2))
as
declare variable DIG integer;
declare variable CODBOD varchar(2);
declare variable FECHA date;
declare variable FECHAAUX date;
declare variable EXISTOT varchar(6);
declare variable RESERPEDWEB char(2);
declare variable RESERVADO numeric(18,2);
declare variable EXISPED char(2);
declare variable EXRESERV varchar(10);
declare variable VALIDEZ integer;
declare variable CANTPEDWEB numeric(18,4);
declare variable CANT numeric(18,4);
declare variable GRUPO varchar(30);
declare variable SUBGR varchar(30);
declare variable MARCA varchar(30);
BEGIN
EXECUTE PROCEDURE lee_configuracion ('FACTURACION', 'PEDIDOS', 'VALIDAR EXISTENCIA TOTAL O SOLO EN LA BODEGA INDICADA EN EL PUNTO DE VENTA') returning_values (:EXISTOT);
EXECUTE PROCEDURE lee_configuracion ('FACTURACION', 'PEDIDOS', 'VALIDAR EXISTENCIAS DESDE EL PEDIDO') returning_values (:EXISPED);
execute procedure lee_configuracion('FACTURACION','DOCUMENTOS','PERMITIR VARIAS OCURRENCIAS DEL MISMO ARTICULO EN UN DOCUMENTO') returning_values(:codrep);
EXECUTE PROCEDURE LEE_CONFIGURACION ('FACTURACION', 'ARTICULOS', 'REDONDEO AL MULTIPLO DE DIEZ EN PRECIOS') returning_values (DIG);
execute procedure lee_configuracion('INVENTARIO','EXISTENCIAS','ACCION A TOMAR SI LA EXISTENCIA ESTA RESERVADA') returning_values(:exreserv);
execute procedure LEE_CONFIGURACION('FACTURACION', 'PEDIDOS', 'DIAS DE VALIDEZ') returning_values (VALIDEZ);
execute procedure LEE_CONFIGURACION('FACTURACION', 'PEDIDOS', 'RESERVAR MERCANCIA CON PEDIDO WEB SIN CONFIRMAR') returning_values (:RESERPEDWEB);
if (EXISPED = 'NO') then
    BEGIN
    SELECT ARTI_EVEXIS FROM ARTICULO WHERE ARTI_COD = :CODIGO INTO :VALEXISTEVENTART;
    if (VALEXISTEVENTART = 'S') then
        EXISPED = 'SI';
    END
CONTROLEXISPED = EXISPED;
SELECT LIPR_COD FROM CLIENTE_SUCURSALES WHERE TERC_NIT = :CLIENTE AND CLCU_COD = :SUCUCLI INTO :LISTA;
if ((LISTA IS NULL) or (LISTA = 0)) then
    SELECT FIRST 1 LIPR_COD FROM LISTA_PRECIOS L, USUARIO U WHERE USER_COD = USER AND ((L.SUCU_ID = U.sucu_id) or (L.SUCU_ID = 0) or (U.SUCU_ID = 0)) AND LIPR_PREDET = 'S'
        INTO :LISTA;
SELECT LIPR_NOM FROM LISTA_PRECIOS WHERE LIPR_COD = :LISTA INTO :NOMLISTA;
if (LISTA > 0) then
    BEGIN
    select ARTI_EXIST, arti_des, arti_descorta, grup_cod, subg_cod, arti_unidad, taiv_porc, marc_cod, ARTI_CONSUMO
        from articulo a, tarifa_iva t
        where a.taiv_cod = t.taiv_cod and ARTI_COD = :CODIGO and ESAR_COD = 'A'
        INTO CONTEXISTART, :DES, :DESCORTA, :GRUPO, :SUBGR, :UNIDAD, :IVA, :MARCA, :CONSUMO;
    if (DES IS NULL) then
        begin
        select B.ARTI_COD, ARTI_EXIST, arti_des, arti_descorta, grup_cod, subg_cod, arti_unidad, taiv_porc, marc_cod, ARTI_CONSUMO
            from articulo a, tarifa_iva t, barras_articulo b
            where a.arti_cod = b.arti_cod and a.taiv_cod = t.taiv_cod and b.coba_cod = :CODIGO and ESAR_COD = 'A'
            INTO :CODIGO, :CONTEXISTART, :DES, :DESCORTA, :GRUPO, :SUBGR, :UNIDAD, :IVA, :MARCA, :CONSUMO;
        end

    if (DES IS NOT NULL) then
      BEGIN
        articulo = codigo;
        DTO1 = 0;
        DTO2 = 0;
        DTO3 = 0;
        EXECUTE PROCEDURE NOMBRE_ASCII(DES) returning_values (DES);
        if ((:grupo is null)or (:grupo = '') ) then
            begin
            SELECT GRUP_NOM FROM GRUPO G WHERE GRUP_COD = :GRUPO INTO GRUPO;
            EXECUTE PROCEDURE NOMBRE_ASCII(GRUPO) returning_values (GRUPO);
            end
        if ((:marca is null)or (:marca = '') ) then
            begin
            SELECT MARC_NOM FROM MARCAS WHERE MARC_COD = :MARCA INTO MARCA;
            EXECUTE PROCEDURE NOMBRE_ASCII(SUBGR) returning_values (SUBGR);
            end
        if ((:subgr is null)or(:subgr = '')) then
            begin
            SELECT SUBG_NOM FROM SUBGRUPO WHERE SUBG_COD = :SUBGR AND GRUP_COD = :GRUPO INTO :SUBGR;
            EXECUTE PROCEDURE NOMBRE_ASCII(MARCA) returning_values (MARCA);
            end
        PRECIO = 0;
        SELECT prar_fijo PRECIO FROM precios_articulo WHERE arti_cod = :CODIGO and lipr_cod = :LISTA INTO :PRECIO;
        EXECUTE PROCEDURE redondee(PRECIO, DIG) returning_values (PRECIO);
        SELECT FIRST 1 BODE_COD FROM punto_venta PT, VENDEDORES V WHERE ((PT.sucu_id = V.sucu_id) or (V.sucu_id = 0))  AND V.vend_cod = :VEND INTO :CODBOD;
        FECHA = CAST('NOW' AS DATE);
        if ((:CONTEXISTART = 'N') OR (:exisped = 'NO')) then
          EXISTEN = 99999;
        ELSE
          BEGIN
          if (EXISTOT = 'TOTAL') then
            EXECUTE PROCEDURE saldo_total_inventario (:CODIGO, :FECHA) returning_values (:EXISTEN);
          ELSE
            EXECUTE PROCEDURE saldo_inventario (:CODIGO, :CODBOD, :FECHA) returning_values (:EXISTEN);
          END
        if (:exreserv = 'PROHIBIR') then
            BEGIN
            RESERVADO = 0;
            SELECT SUM(RESERVADO) FROM EXISTENCIAS_UNIDAD(:CODIGO, :FECHA, :UNIDAD) WHERE ((BODEGA = :CODBOD) or (:existot = 'TOTAL'))
                INTO :RESERVADO;
            if (RESERPEDWEB = 'SI') then
              BEGIN
                CANTPEDWEB = 0;
                FECHAAUX = :FECHA - :VALIDEZ;
                for select PD.pewd_cant * PD.pewd_factor from PEDIDO_WEB P, pedido_web_detalle PD, EVENTOS_VENTAS E, ARTICULO A
                  where P.pewe_id = PD.pewe_id and PD.arti_cod = :CODIGO and P.pewe_fecha >= (:FECHAAUX) AND PEWE_FECHA <= :FECHA
                  AND P.pewe_idped = 0 AND ((P.PEWE_EVENTO = E.EVVE_ID) or (P.PEWE_EVENTO IS NULL)) AND PD.arti_cod = A.arti_cod
                  AND ((E.EVVE_EXIS = 'S') or (E.EVVE_EXIS IS NULL) or (A.arti_evexis = 'S')) AND PEWD_ANULADO = 'N'
                  AND ((PD.bode_cod = :codbod) or (:EXISTOT = 'TOTAL')) into :CANT
                  do
                  begin
                  CANTPEDWEB = CANTPEDWEB + CANT;
                  end
                RESERVADO = RESERVADO + CANTPEDWEB;
              END
            EXISTEN = EXISTEN - RESERVADO;
            END
        SELECT COUNT(ARTI_COD) FROM PEDIDO_WEB_DETALLE WHERE ARTI_COD = :codigo AND PEWE_ID = :idpedweb into :NUMREP;
        SUSPEND;
      END
    END
END^

SET TERM ; ^



