ALTER TABLE TBREMESSA_ITEM_ALOCACAO
    ADD QUANTIDADE_ORIGINAL NUMERIC(15,4);

update TBREMESSA_ITEM_ALOCACAO  set QUANTIDADE_ORIGINAL = QUANTIDADE;

ALTER TABLE TBRELATORIO_WEB
    ADD CABECALHO_CSV INTEGER DEFAULT 1;

update TBRELATORIO_WEB s set s.cabecalho_csv = 1;

SET TERM ^ ;

CREATE OR ALTER procedure SP_DUPLICAR_RELATORIO_WEB (
    RELATORIO_ID integer)
returns (
    NEW_ID integer,
    NEW_CODIGO integer)
as
declare variable NEW_SQL_ID integer;
declare variable ID integer;
declare variable SQL blob sub_type 1 segment size 80;
declare variable STATUS integer;
declare variable DESCRICAO varchar(500);
begin
    NEW_ID = gen_id(GTBRELATORIO_WEB, 1);
    NEW_CODIGO = 28000 + NEW_ID;

    insert into TBRELATORIO_WEB (
        ID,
        NOME,
        DESCRICAO,
        TIPO,
        TEMPLATE_ID,
        STATUS,
        MENU_GRUPO,
        ZEBRADO,
        TOTALIZADOR,
        PAISAGEM,
        VERSAO,
        FONTE_WEB,
        FONTE_EXP,
        ACORDEON,
        FILTRO,
        JS,
        LARGURA,
        COMPRIMENTO,
        EXECUTAR_COMANDOS,
        CODIGO,
        MOSTRAR_GRAFICO,
        MOSTRAR_TABELA,
        UPDATE_TEG,
        JS3,
        CABECALHO_CSV
    ) select
        :NEW_ID as ID,
        NOME,
        DESCRICAO,
        TIPO,
        TEMPLATE_ID,
        STATUS,
        MENU_GRUPO,
        ZEBRADO,
        TOTALIZADOR,
        PAISAGEM,
        VERSAO,
        FONTE_WEB,
        FONTE_EXP,
        ACORDEON,
        FILTRO,
        JS,
        LARGURA,
        COMPRIMENTO,
        EXECUTAR_COMANDOS,
        :NEW_CODIGO as CODIGO,
        MOSTRAR_GRAFICO,
        MOSTRAR_TABELA,
        UPDATE_TEG,
        JS3,
        CABECALHO_CSV
    from TBRELATORIO_WEB e where e.CODIGO = :RELATORIO_ID;

    for
        select
            ID,
            SQL,
            STATUS,
            DESCRICAO
        from TBRELATORIO_WEB_SQL e where e.CODIGO = :RELATORIO_ID
    into
        :ID,
        :SQL,
        :STATUS,
        :DESCRICAO
    do begin

        NEW_SQL_ID = gen_id(GTBRELATORIO_WEB_SQL, 1);

        insert into TBRELATORIO_WEB_SQL (
            ID,
            SQL,
            RELATORIO_ID,
            STATUS,
            DESCRICAO,
            CODIGO
        ) select first 1
            :NEW_SQL_ID ID,
            SQL,
            :NEW_ID RELATORIO_ID,
            STATUS,
            DESCRICAO,
            :NEW_CODIGO
        from TBRELATORIO_WEB_SQL e where e.id = :ID;

        insert into TBRELATORIO_WEB_DETALHE (
            ID,
            RELATORIO_ID,
            PERCENTUAL,
            DESCRICAO,
            CLASSE,
            CAMPO,
            ORDEM,
            MASCARA,
            VISIVEL,
            COR,
            TOTALIZAR,
            CASAS,
            "INDEX",
            AGRUPAR,
            TOTAL_GRUPO,
            TOTAL_TIPO,
            FORMULA,
            PREFIX,
            SUFIX,
            COL_TAMANHO,
            URL_LINK,
            SQL_ID,
            INDICE,
            PREFIXT,
            SUFIXT,
            CODIGO
        ) select
            gen_id(GTBRELATORIO_WEB_DETALHE, 1) ID,
            :NEW_ID RELATORIO_ID,
            PERCENTUAL,
            DESCRICAO,
            CLASSE,
            CAMPO,
            ORDEM,
            MASCARA,
            VISIVEL,
            COR,
            TOTALIZAR,
            CASAS,
            "INDEX",
            AGRUPAR,
            TOTAL_GRUPO,
            TOTAL_TIPO,
            FORMULA,
            PREFIX,
            SUFIX,
            COL_TAMANHO,
            URL_LINK,
            :NEW_SQL_ID SQL_ID,
            INDICE,
            PREFIXT,
            SUFIXT,
            :NEW_CODIGO
        from TBRELATORIO_WEB_DETALHE e where e.CODIGO = :RELATORIO_ID;

    end

    insert into TBRELATORIO_WEB_GRUPOS (
        ID,
        RELATORIO_ID,
        JSON,
        CODIGO
    )
    select
        gen_id(GTBRELATORIO_WEB_GRUPOS, 1) ID,
        :NEW_ID RELATORIO_ID,
        JSON,
        :NEW_CODIGO
    from TBRELATORIO_WEB_GRUPOS e where e.CODIGO = :RELATORIO_ID;

    insert into TBRELATORIO_WEB_PARAMETRO (
        "id",
        RELATORIO_ID,
        DESCRICAO,
        PARAMETRO,
        TIPO,
        STATUS,
        TIPO_PARAMETRO,
        TTITLE,
        ITENS,
        VALOR_PADRAO,
        CONSULTA,
        CAMPO,
        SQL,
        RECEBER_DO_USUARIO,
        VALOR,
        COMPRIMENTO,
        OBRIGATORIO,
        TIPO_SQL,
        SQL_LIKE,
        ORDEM,
        CODIGO
    )
    select
        gen_id(GTBRELATORIO_WEB_PARAMETRO, 1) id,
        :NEW_ID RELATORIO_ID,
        DESCRICAO,
        PARAMETRO,
        TIPO,
        STATUS,
        TIPO_PARAMETRO,
        TTITLE,
        ITENS,
        VALOR_PADRAO,
        CONSULTA,
        CAMPO,
        SQL,
        RECEBER_DO_USUARIO,
        VALOR,
        COMPRIMENTO,
        OBRIGATORIO,
        TIPO_SQL,
        SQL_LIKE,
        ORDEM,
        :NEW_CODIGO
    from TBRELATORIO_WEB_PARAMETRO e where e.CODIGO = :RELATORIO_ID;


    insert into TBRELATORIO_WEB_MENUS (ID,RELATORIO_WEB_ID,MENU_ID, CODIGO)
    select
        gen_id(GTBRELATORIO_WEB_MENUS, 1) id,:NEW_ID RELATORIO_WEB_ID,MENU_ID, :NEW_CODIGO
    from TBRELATORIO_WEB_MENUS q where q.CODIGO = :RELATORIO_ID;

    insert into TBRELATORIO_WEB_GRAFICO (
        ID,
        DESCRICAO,
        SCRIPT,
        RELATORIO_ID,
        CODIGO
    )
    select
        gen_id(GTBRELATORIO_WEB_GRAFICO, 1) id,
        DESCRICAO,
        SCRIPT,
        RELATORIO_ID,
        :NEW_CODIGO
    from TBRELATORIO_WEB_GRAFICO s
    where s.CODIGO = :RELATORIO_ID;

    UPDATE OR INSERT INTO TBRELATORIO_WEB_USUARIO (USUARIO_ID, RELATORIO_ID, CODIGO) VALUES (fn_current_user_id(), :NEW_ID, :NEW_CODIGO) MATCHING (USUARIO_ID, CODIGO);

   suspend;
end
^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER procedure SPI_REMESSA_ITEM_ALOCACAO (
    REMESSA_ID integer,
    AGRUPAMENTO_ID integer)
as
declare variable ITEM_ID integer;
declare variable ESTABELECIMENTO_ID integer;
declare variable LOCALIZACAO_ID integer;
declare variable TABELA_ID integer;
declare variable TAB_ITEM_ID integer;
declare variable REMESSA integer;
declare variable TALAO integer;
declare variable PRODUTO_ID integer;
declare variable TAMANHO integer;
declare variable QUANTIDADE numeric(18,5);
declare variable TIPO char(1);
declare variable SALDO numeric(18,5);
declare variable DATAHORA date;
declare variable USUARIO integer;
declare variable QUANTIDADE_ORIGINAL numeric(18,5);
begin

    select first 1
        s.id
    from TBREMESSA_ITEM_ALOCACAO s
    where s.remessa = :REMESSA_ID
    and (QUANTIDADE_ORIGINAL <> QUANTIDADE or s.tab_item_id > 0)
    into :ITEM_ID;
    
    ITEM_ID = coalesce(ITEM_ID,0);
    
    if(ITEM_ID > 0)then
    begin
        exception "..." 'ITENS DA ALOCACAO DA REMESSA COM PEDIDOS VINCULADOS';
    end
    
    FOR
        select
            P.estabelecimento_codigo ESTABELECIMENTO_ID,
            P.localizacao_codigo LOCALIZACAO_ID,
            0 TABELA_ID,
            0 TAB_ITEM_ID,
            P.remessa REMESSA,
            P.controle TALAO,
            P.produto_codigo PRODUTO_ID,
            p.tamanho TAMANHO,
            p.quantidade_pedido QUANTIDADE,
            'R' TIPO,
            p.quantidade_pedido SALDO,
            current_date DATAHORA,
            fn_current_user_id() USUARIO,
            p.quantidade_pedido QUANTIDADE_ORIGINAL
        
        FROM tbpedido_item_processado P, tbremessa R
        WHERE P.remessa = :REMESSA_ID
        AND R.numero = P.remessa
        ORDER BY P.remessa_acumulado_controle
    into
        ESTABELECIMENTO_ID,
        LOCALIZACAO_ID,
        TABELA_ID,
        TAB_ITEM_ID,
        REMESSA,
        TALAO,
        PRODUTO_ID,
        TAMANHO,
        QUANTIDADE,
        TIPO,
        SALDO,
        DATAHORA,
        USUARIO,
        QUANTIDADE_ORIGINAL
    do begin
    
       INSERT INTO TBREMESSA_ITEM_ALOCACAO (
            ESTABELECIMENTO_ID,
            LOCALIZACAO_ID,
            TABELA_ID,
            TAB_ITEM_ID,
            REMESSA,
            TALAO,
            PRODUTO_ID,
            TAMANHO,
            QUANTIDADE,
            TIPO,
            SALDO,
            USUARIO,
            QUANTIDADE_ORIGINAL,
            AGRUPAMENTO_ID
       ) VALUES (
            :ESTABELECIMENTO_ID,
            :LOCALIZACAO_ID,
            :TABELA_ID,
            :TAB_ITEM_ID,
            :REMESSA,
            :TALAO,
            :PRODUTO_ID,
            :TAMANHO,
            :QUANTIDADE,
            :TIPO,
            :SALDO,
            :USUARIO,
            :QUANTIDADE_ORIGINAL,
            :AGRUPAMENTO_ID
       );

    end

end
^

SET TERM ; ^

