
CREATE OR ALTER procedure SPI_ESTOQUE_TRANSACAO_REGRA (
	
	regra_tipo integer,
    gp_id integer,
    perfil_up varchar(10),
    familia_id_consumo integer,
    familia_id_producao integer
	
    tabela varchar(32),
    tabela_nivel integer,
    tabela_id integer,
    estabelecimento_id integer,
    localizacao_id integer,
    data date,
    produto_id integer,
    tamanho integer,
    quantidade numeric(10,5),
    tipo char(1),
    consumo char(1),
    ccusto varchar(10),
    observacao varchar(100),
    transacao_id integer = null,
    documento integer = null,
    talao integer = 0,
	)
as
declare variable REGRAS integer;
declare variable tipo integer;
declare variable gp_id integer;
declare variable perfil_up varchar(40);
declare variable familia_id_consumo integer;
declare variable familia_id_producao integer;
declare variable localizacao_id_saida integer;
declare variable localizacao_id_entrada integer;
declare variable conferencia integer;
declare variable operacao_estoque_saida varchar(40);
declare variable operacao_estoque_entrada varchar(40);

declare variable usuario_id integer;
declare variable t01 numeric(10,5);
declare variable t02 numeric(10,5);
declare variable t03 numeric(10,5);
declare variable t04 numeric(10,5);
declare variable t05 numeric(10,5);
declare variable t06 numeric(10,5);
declare variable t07 numeric(10,5);
declare variable t08 numeric(10,5);
declare variable t09 numeric(10,5);
declare variable t10 numeric(10,5);
declare variable t11 numeric(10,5);
declare variable t12 numeric(10,5);
declare variable t13 numeric(10,5);
declare variable t14 numeric(10,5);
declare variable t15 numeric(10,5);
declare variable t16 numeric(10,5);
declare variable t17 numeric(10,5);
declare variable t18 numeric(10,5);
declare variable t19 numeric(10,5);
declare variable t20 numeric(10,5);
BEGIN

	for
		select
			count(id) over() REGRAS,
			TIPO,
			GP_ID,
			PERFIL_UP,
			FAMILIA_ID_CONSUMO,
			FAMILIA_ID_PRODUCAO,
			LOCALIZACAO_ID_SAIDA,
			LOCALIZACAO_ID_ENTRADA,
			CONFERENCIA,
			OPERACAO_ESTOQUE_SAIDA,
			OPERACAO_ESTOQUE_ENTRADA
		from tbestoque_transacao_regra r
		where r.tipo = :I_TIPO
		and   r.GP_ID = :I_GP_ID
		and   r.PERFIL_UP = :I_PERFIL_UP
		and   r.GP_ID = :I_GP_ID
		and   r.FAMILIA_ID_CONSUMO = :I_FAMILIA_ID_CONSUMO
		and   r.FAMILIA_ID_PRODUCAO = :I_FAMILIA_ID_PRODUCAO
	into
		:REGRAS,
		:TIPO,
		:GP_ID,
		:PERFIL_UP,
		:FAMILIA_ID_CONSUMO,
		:FAMILIA_ID_PRODUCAO,
		:LOCALIZACAO_ID_SAIDA,
		:LOCALIZACAO_ID_ENTRADA,
		:CONFERENCIA,
		:OPERACAO_ESTOQUE_SAIDA,
		:OPERACAO_ESTOQUE_ENTRADA
	do
	begin


	end
  

    USUARIO_ID = COALESCE((SELECT FIRST 1 CODIGO FROM TBUSUARIO U WHERE U.USUARIO = CURRENT_USER),0);

    IF ( COALESCE(TRANSACAO_ID,0) = 0 ) THEN
    BEGIN
        TRANSACAO_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);
    END

    IF ( COALESCE(DOCUMENTO,0) = 0 ) THEN
    BEGIN
        DOCUMENTO = TABELA_ID;
    END

    IF ( NOT COALESCE(QUANTIDADE,0) > 0 ) THEN
    BEGIN
        EXCEPTION "..." 'NAO É PERMITIDO QUANTIDADE ZERADA NA TRANSACAO DE ESTOQUE.';
    END

    TALAO = COALESCE(TALAO,0);

    T01 = IIF(TAMANHO = 01, QUANTIDADE, 0);
    T02 = IIF(TAMANHO = 02, QUANTIDADE, 0);
    T03 = IIF(TAMANHO = 03, QUANTIDADE, 0);
    T04 = IIF(TAMANHO = 04, QUANTIDADE, 0);
    T05 = IIF(TAMANHO = 05, QUANTIDADE, 0);
    T06 = IIF(TAMANHO = 06, QUANTIDADE, 0);
    T07 = IIF(TAMANHO = 07, QUANTIDADE, 0);
    T08 = IIF(TAMANHO = 08, QUANTIDADE, 0);
    T09 = IIF(TAMANHO = 09, QUANTIDADE, 0);
    T10 = IIF(TAMANHO = 10, QUANTIDADE, 0);
    T11 = IIF(TAMANHO = 11, QUANTIDADE, 0);
    T12 = IIF(TAMANHO = 12, QUANTIDADE, 0);
    T13 = IIF(TAMANHO = 13, QUANTIDADE, 0);
    T14 = IIF(TAMANHO = 14, QUANTIDADE, 0);
    T15 = IIF(TAMANHO = 15, QUANTIDADE, 0);
    T16 = IIF(TAMANHO = 16, QUANTIDADE, 0);
    T17 = IIF(TAMANHO = 17, QUANTIDADE, 0);
    T18 = IIF(TAMANHO = 18, QUANTIDADE, 0);
    T19 = IIF(TAMANHO = 19, QUANTIDADE, 0);
    T20 = IIF(TAMANHO = 20, QUANTIDADE, 0);


    INSERT INTO TBESTOQUE_TRANSACAO_ITEM (
        TABELA,
        TABELA_ID,
        TABELA_NIVEL,
        ESTABELECIMENTO_CODIGO,
        LOCALIZACAO_CODIGO,
        PRODUTO_CODIGO,
        CONTROLE,
        DATA,
        DOCUMENTO,
        NFS_ITEM_CONTROLE,
        NFE_ITEM_CONTROLE,
        OPERACAO_CODIGO,
        TIPO,
        QUANTIDADE,
        REMESSA_ITEM_CONTROLE,
        T01,
        T02,
        T03,
        T04,
        T05,
        T06,
        T07,
        T08,
        T09,
        T10,
        T11,
        T12,
        T13,
        T14,
        T15,
        T16,
        T17,
        T18,
        T19,
        T20,
        CUSTO_UNITARIO,
        TRANSACAO_CONTROLE,
        CONSUMO,
        USUARIO_CODIGO,
        USUARIO_DATA,
        TURNO_CODIGO,
        CENTRO_DE_CUSTO,
        OBSERVACAO,
        ESPUMACAO,
        CLASSIFICACAO,
        REVISAO_CONTROLE,
        EMPRESA_CODIGO,
        CUSTO_MEDIO
    ) VALUES(
        :TABELA,
        :TABELA_ID,
        :TABELA_NIVEL,
        :ESTABELECIMENTO_ID,
        :LOCALIZACAO_ID,
        :PRODUTO_ID,
        :TRANSACAO_ID,
        :DATA,
        :DOCUMENTO,
        0,
        0,
        :OPERACAO,
        :TIPO,
        :QUANTIDADE,
        :TALAO,
        :T01,
        :T02,
        :T03,
        :T04,
        :T05,
        :T06,
        :T07,
        :T08,
        :T09,
        :T10,
        :T11,
        :T12,
        :T13,
        :T14,
        :T15,
        :T16,
        :T17,
        :T18,
        :T19,
        :T20,
        0,
        0,
        :CONSUMO,
        :USUARIO_ID,
        CURRENT_DATE,
        0,
        :CCUSTO,
        :OBSERVACAO,
        '0',
        0,
        0,
        0,
        0
    );
END
^

SET TERM ; ^

COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TABELA IS
'Nome da tabela que realizou a transacao de estoque';

COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TABELA_ID IS
'Id da tabela que realizou a transacao de estoque';

COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.DATA IS
'Data da transacao de estoque ( Podera ser retroativa )';

COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TIPO IS
'Tipo de transacao para o estoque. E = Entrada; S = SAIDA';

COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.OPERACAO IS
'Codigo da operacao de estoque (Referente TBOPERACAO)';

COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.CONSUMO IS
'Identifica se eh operacao de consumo. 1 = SIM; 0 = NAO';

COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.CCUSTO IS
'Centro de custo responsavel pela transacao';

COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TRANSACAO_ID IS
'Id da transacao. NAO OBRIGATORIO';

COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.DOCUMENTO IS
'Numero do Documento de Identificacao. NAO OBRIGATORIO';

COMMENT ON PARAMETER SPI_ESTOQUE_TRANSACAO_REGRA.TALAO IS
'Id do talao. NAO OBRIGATORIO';

