CREATE OR ALTER PROCEDURE SPU_COPIA_MODELO_GERAL (
    ID1 INTEGER,
    ID2 INTEGER,
    DESCRICAO_1 VARCHAR(50),
    USUARIO_ID INTEGER)
RETURNS (
    CODIGO INTEGER,
    DESCRICAO VARCHAR(50),
    FAMILIA_ALTERNATIVA INTEGER,
    FAMILIA_CODIGO INTEGER,
    GRADE_CODIGO INTEGER,
    MATRIZ_CODIGO INTEGER,
    STATUS CHAR(1),
    LINHA_CODIGO INTEGER,
    TIPOPRODUTO_CODIGO INTEGER,
    CLASSIFICACAO VARCHAR(10),
    UNIDADEMEDIDA_SIGLA VARCHAR(3),
    MODELO_PAI INTEGER,
    DENSIDADE INTEGER,
    ESPESSURA NUMERIC(10,1),
    TIPO_TAG VARCHAR(10),
    ACRESCIMO NUMERIC(15,2),
    PRIORIDADE INTEGER,
    GERAR_REMESSA CHAR(1),
    HORAS_BLOQUEIO INTEGER,
    HORAS_TOLERANCIA INTEGER,
    COR_ID INTEGER,
    TAMANHO INTEGER,
    T01 CHAR(1),
    T02 CHAR(1),
    T03 CHAR(1),
    T04 CHAR(1),
    T05 CHAR(1),
    T06 CHAR(1),
    T07 CHAR(1),
    T08 CHAR(1),
    T09 CHAR(1),
    T10 CHAR(1),
    T11 CHAR(1),
    T12 CHAR(1),
    T13 CHAR(1),
    T14 CHAR(1),
    T15 CHAR(1),
    T16 CHAR(1),
    T17 CHAR(1),
    T18 CHAR(1),
    T19 CHAR(1),
    T20 CHAR(1),
    OBSERVACAO BLOB SUB_TYPE 0 SEGMENT SIZE 80)
AS
BEGIN

FOR Select A.CODIGO, A.DESCRICAO, A.FAMILIA_ALTERNATIVA, A.FAMILIA_CODIGO,
    A.GRADE_CODIGO, A.MATRIZ_CODIGO, A.STATUS, A.LINHA_CODIGO, A.TIPOPRODUTO_CODIGO,
    A.T01, A.T02, A.T03, A.T04, A.T05, A.T06, A.T07, A.T08, A.T09, A.T10,
    A.T11, A.T12, A.T13, A.T14, A.T15, A.T16, A.T17, A.T18, A.T19, A.T20,
    (Select B.Observacao from TbModelo_Observacao B Where B.Modelo_Codigo = A.Codigo),
    CLASSIFICACAO, UNIDADEMEDIDA_SIGLA, MODELO_PAI, DENSIDADE, ESPESSURA,
    TIPO_TAG, ACRESCIMO, PRIORIDADE, GERAR_REMESSA, HORAS_BLOQUEIO, HORAS_TOLERANCIA,
    COR_ID,TAMANHO
From TbModelo A
Left join TbModelo_Padrao P On P.Modelo_Id = A.Codigo
Where A.Codigo = :ID1

INTO :CODIGO, :DESCRICAO, :FAMILIA_ALTERNATIVA, :FAMILIA_CODIGO,
     :GRADE_CODIGO, :MATRIZ_CODIGO, :STATUS, :LINHA_CODIGO, :TIPOPRODUTO_CODIGO,
     :T01, :T02, :T03, :T04, :T05, :T06, :T07, :T08, :T09, :T10,
     :T11, :T12, :T13, :T14, :T15, :T16, :T17, :T18, :T19, :T20, :OBSERVACAO,
     :CLASSIFICACAO, :UNIDADEMEDIDA_SIGLA, :MODELO_PAI, :DENSIDADE, :ESPESSURA,
     :TIPO_TAG, :ACRESCIMO, :PRIORIDADE, :GERAR_REMESSA, :HORAS_BLOQUEIO,
     :HORAS_TOLERANCIA, :COR_ID, :TAMANHO

DO

    IF (:CODIGO > 0) then
         BEGIN

            UPDATE or INSERT INTO TBMODELO (
            CODIGO, DESCRICAO, FAMILIA_ALTERNATIVA, FAMILIA_CODIGO, GRADE_CODIGO,
            MATRIZ_CODIGO, STATUS, LINHA_CODIGO, TIPOPRODUTO_CODIGO,
            T01, T02, T03, T04, T05, T06, T07, T08, T09, T10,
            T11, T12, T13, T14, T15, T16, T17, T18, T19, T20,
            CLASSIFICACAO, UNIDADEMEDIDA_SIGLA, MODELO_PAI, DENSIDADE,
            ESPESSURA, TIPO_TAG, ACRESCIMO, PRIORIDADE, GERAR_REMESSA,
            HORAS_BLOQUEIO, HORAS_TOLERANCIA, USUARIO_CODIGO) VALUES (
           :ID2, :DESCRICAO_1, :FAMILIA_ALTERNATIVA, :FAMILIA_CODIGO, :GRADE_CODIGO,
           :MATRIZ_CODIGO, :STATUS, :LINHA_CODIGO, :TIPOPRODUTO_CODIGO,
           :T01, :T02, :T03, :T04, :T05, :T06, :T07, :T08, :T09, :T10,
           :T11, :T12, :T13, :T14, :T15, :T16, :T17, :T18, :T19, :T20,
           :CLASSIFICACAO, :UNIDADEMEDIDA_SIGLA, :MODELO_PAI, :DENSIDADE,
           :ESPESSURA, :TIPO_TAG, :ACRESCIMO, :PRIORIDADE, :GERAR_REMESSA,
           :HORAS_BLOQUEIO, :HORAS_TOLERANCIA, :USUARIO_ID)
            MATCHING (CODIGO);
    
         UPDATE or INSERT
         INTO TBMODELO_OBSERVACAO (MODELO_CODIGO, OBSERVACAO)
         VALUES (:ID2, :OBSERVACAO) MATCHING (MODELO_CODIGO);

         if (:COR_ID > 0 and :TAMANHO > 0) then
            Begin
             UPDATE or INSERT
             INTO TBMODELO_PADRAO (MODELO_ID, COR_ID, TAMANHO)
             VALUES (:ID2, :COR_ID, :TAMANHO) MATCHING (MODELO_ID);
            End

         END

SUSPEND;
END;