CREATE OR ALTER PROCEDURE SPU_COPIA_MODELO_COR1_NEW (
    ID1 INTEGER,
    ID2 INTEGER,
    DESCRICAO_1 VARCHAR(50),
    USUARIO_ID INTEGER)
RETURNS (
    MODELO_ID INTEGER,
    COR_ID INTEGER,
    TAMANHO INTEGER,
    PERFIL VARCHAR(10),
    STATUS_PRODUTO CHAR(1),
    BLQ_PED CHAR(1),
    PERCENTUAL_TALAO INTEGER,
    STATUS CHAR(10),
    PERCENTUAL_REPRESENTATIVIDADE NUMERIC(15,2))
AS
DECLARE VARIABLE CODIGO_EAN       INTEGER;
DECLARE VARIABLE INTERVALO_EAN    VARCHAR(1);
DECLARE VARIABLE PREFIXO_EAN      VARCHAR(13);
DECLARE VARIABLE GERAR_CODIGO_EAN VARCHAR(1);
BEGIN

    GERAR_CODIGO_EAN = COALESCE((SELECT FIRST 1 B.GERAR_EAN FROM TBFAMILIA B, TBMODELO A WHERE B.CODIGO = A.FAMILIA_ALTERNATIVA AND A.CODIGO = :ID1),0);
    PREFIXO_EAN      = (FN_PARAMETRO('SISTEMA.PREFIXO_CODIGO_EAN'));
    INTERVALO_EAN    = (FN_PARAMETRO('SISTEMA.EAN_AUTO_INTERVALO'));

    FOR
        SELECT
            A.MODELO_ID,
            A.COR_ID,
            A.PERCENTUAL_TALAO,
            A.STATUS,
            A.PERCENTUAL_REPRESENTATIVIDADE,
            COALESCE((SELECT FIRST 1 P.STATUS FROM TBPRODUTO P WHERE P.MODELO_CODIGO = A.MODELO_ID AND P.COR_CODIGO = C.CODIGO), '1') AS STATUS_PRODUTO

        FROM TBMODELO_COR A, TBCOR C
        WHERE A.COR_ID = C.CODIGO
--        AND C.STATUS = '1'
        AND A.MODELO_ID = :ID1

    INTO
        :MODELO_ID,
        :COR_ID,
        :PERCENTUAL_TALAO,
        :STATUS,
        :PERCENTUAL_REPRESENTATIVIDADE,
        :STATUS_PRODUTO

    DO
    BEGIN
        IF (:MODELO_ID > 0 /*AND :STATUS_PRODUTO = '1'*/) THEN
        BEGIN
            UPDATE OR INSERT INTO TBMODELO_COR (MODELO_ID, COR_ID, PERCENTUAL_TALAO, STATUS, PERCENTUAL_REPRESENTATIVIDADE, STATUS_PRODUTO)
                VALUES (:ID2, :COR_ID, :PERCENTUAL_TALAO, :STATUS, :PERCENTUAL_REPRESENTATIVIDADEE, :STATUS_PRODUTO)
                MATCHING (MODELO_ID, COR_ID);
        
            IF(:GERAR_CODIGO_EAN = '1')THEN
            BEGIN
               FOR
                SELECT
                    D.TAMANHO
                  FROM SP_GRADE_MODELO(:ID1,'M') D
                INTO :TAMANHO DO
                BEGIN
                    IF(:INTERVALO_EAN = '1')THEN
                    BEGIN
                        :CODIGO_EAN = FN_GERAR_EAN(:PREFIXO_EAN,:INTERVALO_EAN,0);
                    END
                    ELSE
                    BEGIN
                        :CODIGO_EAN = FN_LPAD(GEN_ID(GTBEAN, 1),4,'0');
                    END

                    INSERT INTO TBEAN (PREFIXO, CODIGO, MODELO_ID, COR_ID, TAMANHO)
                       VALUES (:PREFIXO_EAN, :CODIGO_EAN, :ID2, :COR_ID, :TAMANHO);
                END
            END
        END
    END

    FOR
        SELECT
            M.MODELO_ID,
            M.COR_ID,
            M.TAMANHO,
            M.PERFIL,
            M.BLQ_PED

        FROM TBMODELO_BLOQUEIO M
        WHERE M.MODELO_ID = :ID1

    INTO
        :MODELO_ID,
        :COR_ID,
        :TAMANHO,
        :PERFIL,
        :BLQ_PED

    DO
    BEGIN
        IF (:MODELO_ID > 0) THEN
        BEGIN
            UPDATE OR INSERT INTO TBMODELO_BLOQUEIO (MODELO_ID, COR_ID, TAMANHO, PERFIL, BLQ_PED)
                VALUES (:ID2, :COR_ID, :TAMANHO, :PERFIL, :BLQ_PED)
                MATCHING (MODELO_ID, COR_ID, TAMANHO);
        END
    END
END;