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
    ) 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
    from TBRELATORIO_WEB e where e.id = :RELATORIO_ID;

    for
        select
            ID,
            SQL,
            STATUS,
            DESCRICAO
        from TBRELATORIO_WEB_SQL e where e.relatorio_id = :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.relatorio_id = :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.relatorio_id = :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.relatorio_id = :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.relatorio_web_id = :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.relatorio_id = :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 ; ^

