SET TERM ^ ;

CREATE OR ALTER procedure SPU_COPIA_OPERACAO (
    CODIGO_ORIGEM varchar(3),
    CODIGO_NOVO varchar(3))
as
declare variable VID integer;
BEGIN

    IF (char_length(:CODIGO_ORIGEM) = 3 AND char_length(:CODIGO_NOVO) = 3) then
        Begin
        vID = GEN_ID(GTBOPERACAO,1);
        Insert into tboperacao (codigo, ID, descricao, tipo, geraconsumo, operacaoconsumo, controle_estoque, controle_estoque_externo, controle_faturamento, controle_devolucao, gera_comissao, gera_duplicata, exige_duplicata, exige_localizacao, exige_pedido, exige_oc, exige_nf_referencia, estoque, notafiscal, status, statusexclusao, usuario_codigo, data, atualiza_custo, servico, exige_custo, exige_custo_externo, transferencia, exige_ncm, bloqueia_item_oc, controle_revisao, nat_bc_cred, nat_receita, controle_consignacao, acerto, desperdicio, familias, ggf, observacao, fdi, tipo_desconto)
        Select :CODIGO_NOVO, :vID, descricao, tipo, geraconsumo, operacaoconsumo, controle_estoque, controle_estoque_externo, controle_faturamento, controle_devolucao, gera_comissao, gera_duplicata, exige_duplicata, exige_localizacao, exige_pedido, exige_oc, exige_nf_referencia, estoque, notafiscal, status, statusexclusao, usuario_codigo, data, atualiza_custo, servico, exige_custo, exige_custo_externo, transferencia, exige_ncm, bloqueia_item_oc, controle_revisao, nat_bc_cred, nat_receita, controle_consignacao, acerto, desperdicio, familias, ggf, observacao, fdi, tipo_desconto From tboperacao where codigo = :CODIGO_ORIGEM;
        Insert into tboperacao_vinculo_cfop (operacao_codigo, estabelecimento_codigo, cfop_codigo, uf, familia_codigo, tributacao_icms, icms, tributacao_ipi, tributacao_pis, tributacao_cofins, tributacao_simples, bloqueado, modalidade_st, aliquota_st, fci_revendedor, fci_industrializador, familia, icms_nao_contr, enquadramento_ipi)
        Select :CODIGO_NOVO, estabelecimento_codigo, cfop_codigo, uf, familia_codigo, tributacao_icms, icms, tributacao_ipi, tributacao_pis, tributacao_cofins, tributacao_simples, bloqueado, modalidade_st, aliquota_st, fci_revendedor, fci_industrializador, familia, icms_nao_contr, enquadramento_ipi From tboperacao_vinculo_cfop where operacao_codigo = :CODIGO_ORIGEM;
        Insert into tboperacao_vinculo_contabil (operacao_codigo, estabelecimento_codigo, id, conta_credito, conta_debito, valor_item, valor_icms, valor_ipi, valor_pis, valor_cofins, valor_icms_st, valor_acrescimos, valor_descontos, valor_ii, valor_iof, valor_pedagio_ilpub, retencao_pis, retencao_cofins, retencao_csll, retencao_inss, retencao_irrf, retencao_issqn, historico_contabil, tipo_credito, tipo_debito, valor_frete, valor_seguro)
        Select :CODIGO_NOVO, estabelecimento_codigo,  GEN_ID(GTBOPERACAO_VINCULO_CONTABIL,1), conta_credito, conta_debito, valor_item, valor_icms, valor_ipi, valor_pis, valor_cofins, valor_icms_st, valor_acrescimos, valor_descontos, valor_ii, valor_iof, valor_pedagio_ilpub, retencao_pis, retencao_cofins, retencao_csll, retencao_inss, retencao_irrf, retencao_issqn, historico_contabil, tipo_credito, tipo_debito, valor_frete, valor_seguro From tboperacao_vinculo_contabil where operacao_codigo = :CODIGO_ORIGEM;

           INSERT INTO TBHISTORICO (
           TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
          'TBOPERACAO', :vID,
          (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
          (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
          'CADASTRO DE OPERACAO DUPLICADA A PARTIR DA OPERACAO '||:CODIGO_ORIGEM);

        End ELSE
        Exception "..." 'PARAMETROS INVALIDOS PARA EXECUTAR ESSA COPIA!';

END
^

SET TERM ; ^

