
declare @uid varchar(500)
declare @idPadre int
declare @idfuncionalidad int
select @uid=uid from seg_usuario where id = 1
declare @categoria as integer
set @categoria=(select max(id)from rep_categoria where categoria='Reportes'and id_categoria=0 )
--1.agregar los reportes que no estan en alguna categoria y dejarla por defecto en reportes
INSERT INTO [rep_reporte_categoria]
([uid],[eid],[fechaModificacion],[fechaCreacion],[active] ,[reporte_categoria],[id_categoria],[id_reporte])
select @uid ,'01' ,getdate(),getdate() ,1 ,'Reportes' ,@categoria ,rep.id from rep_reporte rep where not id in(select id_reporte from view_rep_reporte_categoria)and rep.id >0

--2. Inactivar registros que se usan actualmente para esos permisos

update gui_funcionalidad set active=0 
where id in (select gui.id from gui_funcionalidad gui inner join rep_reporte rep on gui.funcionalidad=rep.reporte where gui.id_tipoFuncionalidad =7) and id_tipoFuncionalidad =7 and funcionalidad_codigo is null


select @idfuncionalidad=id from view_gui_funcionalidad 
where id_tipofuncionalidad=3 and url='/forms/rep/rep_indicador.aspx' and id_funcionalidad 
in(select id from view_gui_funcionalidad where funcionalidad='aplicacion' and esmenu=1 and id_funcionalidad in
(select id from view_gui_funcionalidad where funcionalidad='configuracion' and esmenu=1 and id_funcionalidad=0 and id_tipofuncionalidad=6))

if not exists(select * from gui_funcionalidad where funcionalidad='Reportes' and esMenu=0 and id_tipoFuncionalidad=7 and id_funcionalidad=@idfuncionalidad )
begin
insert into gui_funcionalidad
(uid,eid,funcionalidad,funcionalidad_codigo,esMenu,id_tipoFuncionalidad,id_funcionalidad,active)
select @uid,'01','Reportes','',0,7,@idfuncionalidad,1
end
set @idPadre=(select max(id) from view_gui_funcionalidad where funcionalidad='Reportes' and esMenu=0 and id_tipoFuncionalidad=7 and id_funcionalidad=@idfuncionalidad )
print @idPadre

insert into gui_funcionalidad
(uid,eid,funcionalidad,funcionalidad_codigo,esMenu,id_tipoFuncionalidad,active)
select @uid,'01',categoria,id,0,7,1
from rep_categoria 
where active=1 and id>0

update gui_funcionalidad
set id_funcionalidad=A.id
from gui_funcionalidad
inner join rep_categoria on rep_categoria.id=cast(gui_funcionalidad.funcionalidad_codigo as int)
inner join view_gui_funcionalidad A on rep_categoria.id_categoria=cast(A.funcionalidad_codigo as int)
where  gui_funcionalidad.id_tipofuncionalidad=7
and A.id_tipofuncionalidad=7 
and  gui_funcionalidad.id<>@idPadre 

insert into gui_funcionalidad
(uid,eid,funcionalidad,funcionalidad_codigo,esMenu,orden,id_tipoFuncionalidad,active)
select @uid,'01',rep_reporte_reporte,id,0,1,7,1
from view_rep_reporte_categoria
where active=1


update gui_funcionalidad
set id_funcionalidad=A.id
from gui_funcionalidad
inner join rep_reporte_categoria on rep_reporte_categoria.id=cast(gui_funcionalidad.funcionalidad_codigo as int)
inner join view_gui_funcionalidad A on rep_reporte_categoria.id_categoria=cast(A.funcionalidad_codigo as int)
where gui_funcionalidad.id_tipofuncionalidad=7
and A.id_tipofuncionalidad=7 and gui_funcionalidad.orden=1

--identifica los permisos viejos para los reportes en cada perfil
if exists(select * from seg_perfil_funcionalidad segper 
inner join rep_reporte rep on rep.id_funcionalidad = segper.id_funcionalidad
inner join gui_funcionalidad guivieja on guivieja.id = segper.id_funcionalidad
inner join view_gui_funcionalidad nueva on nueva.funcionalidad=rep.reporte
where nueva.id_tipofuncionalidad=7 and segper.active=1 and rep.id>0 )
begin
--reasigna los permisos de los reportes de cada perifl
INSERT INTO [seg_perfil_funcionalidad]
([uid],[eid],[fechaModificacion],[fechaCreacion],[active],[perfil_funcionalidad],[id_perfil],[id_funcionalidad])
select @uid,'01',getdate(),getdate(),1,'',segper.id_perfil,nueva.id  
from seg_perfil_funcionalidad segper 
inner join rep_reporte rep on rep.id_funcionalidad = segper.id_funcionalidad
inner join gui_funcionalidad guivieja on guivieja.id = segper.id_funcionalidad
inner join view_gui_funcionalidad nueva on nueva.funcionalidad=rep.reporte
where nueva.id_tipofuncionalidad=7 and segper.active=1 and rep.id > 0
--elimina los permisos viejos
update  seg_perfil_funcionalidad set active=0
where id in(select segper.id
from seg_perfil_funcionalidad segper 
inner join rep_reporte rep on rep.id_funcionalidad = segper.id_funcionalidad
inner join gui_funcionalidad guivieja on guivieja.id = segper.id_funcionalidad
inner join view_gui_funcionalidad nueva on nueva.funcionalidad=rep.reporte
where nueva.id_tipofuncionalidad=7 and segper.active=1 and guivieja.id_tipofuncionalidad=7 and rep.id > 0 and guivieja.funcionalidad_codigo is null
)
end

--vincula las funcionalidades en los reportes 
update rep_reporte
set id_funcionalidad=A.id
from rep_reporte
inner join rep_reporte_categoria on rep_reporte_categoria.id_reporte = rep_reporte.id
inner join view_gui_funcionalidad A on rep_reporte_categoria.id=cast(A.funcionalidad_codigo as int)
where A.id_tipofuncionalidad=7 and A.orden=1

--identificar que no haya categorias id_funcionalidad=0
if exists(select * from view_gui_funcionalidad where id_tipoFuncionalidad=7 and id_funcionalidad in (select id from gui_funcionalidad where active=0)    )
begin
--asigna las funcionalidaddes de las categorias con el @idpadre
update gui_funcionalidad
set id_funcionalidad= @idPadre 
where id in(select id from view_gui_funcionalidad where id_tipoFuncionalidad=7 and id_funcionalidad in (select id from gui_funcionalidad where active=0))
end

---eliminar permisos viejos de los reportes (solo los que sean de id_tipofuncionalidad=7 y que en el campo funcionalidad_codigo este vacio)
update gui_funcionalidad set active=0 where id_tipoFuncionalidad =7 and not id in(select id_funcionalidad from rep_reporte)and funcionalidad_codigo is null
