ALTER TABLE TMPPROGRAMACAO_REGISTRO_JUST
    ADD PROGRAMACAO_ID INTEGER,
    ADD OPERADOR_ID INTEGER,
    ADD REQUISICAO_ID INTEGER;

create view vwusuario_localizacao ( usuario_id,  LOCALIZACAO_ID)
as
select
    usuario_id,
    fn_array(valor_ext, LINHA_CORRENTE,',') as LOCALIZACAO_ID
from(
    select
         u.usuario_id,
         u.valor_ext,
        (select count(OSPLIT) from split(u.valor_ext,',')) as QTD
    
    from tbcontrole_usuario u
    where u.id = 127
    and char_length(trim(u.valor_ext)) > 1
) a, SP_GERAR_LINHAS(a.QTD);

CREATE OR ALTER procedure SPU_LOCALIZACAO_USUARIO (
    USUARIO_ID integer,
    LOCALIZACAO_ID integer,
    TIPO integer)
as
declare variable LOCALIZACAO varchar(7000);
begin

    select
        list(localizacao_id,',') as LOCALIZACAO
    from(
        select distinct
            coalesce(localizacao_id,0) as localizacao_id
        from(
            select
                fn_lpad(localizacao_id,2,'0') localizacao_id
            from vwusuario_localizacao l
            where l.usuario_id = :USUARIO_ID
            and iif(:TIPO = 2, localizacao_id <> :LOCALIZACAO_ID, true)
    
            union all
    
            select
                fn_lpad(cast(:LOCALIZACAO_ID as integer),2,'0') localizacao_id
            from rdb$database where :TIPO = 1
    
        ) where localizacao_id > 0 order by localizacao_id
    ) into :LOCALIZACAO;

    LOCALIZACAO = coalesce(LOCALIZACAO,'');

    UPDATE OR INSERT INTO TBCONTROLE_USUARIO (USUARIO_ID, ID, VALOR_EXT) VALUES (:USUARIO_ID ,127, :LOCALIZACAO) MATCHING (USUARIO_ID, ID);

end;

COMMENT ON PARAMETER SPU_LOCALIZACAO_USUARIO.TIPO IS
'1 - insert, 2 - delete';


