create view sistema.view_usuarios as
select usuarios.id,
	usuarios.username,
	usuarios.foto,
	usuarios.nombres,
	usuarios.apellidos,
	usuarios.email,
	usuarios.fechaRegistro,
	usuarios.sesionActual,
	(select top(1) fechaIngreso from sistema.logs_ingresos where idUsuario = usuarios.id and estado = 1 order by fechaIngreso desc) ultimoIngreso,
	usuarios.estado,
	usuarios.bloqueado
from sistema.datos_usuarios usuarios;

create view sistema.view_tiposRol as
select tipos.id,
	tipos.tipo,
	tipos.fechaRegistro,
	tipos.estado
from sistema.cat_tiposRol tipos;

create view sistema.view_roles as
select roles.id,
	roles.rol,
	roles.idTipo,
	tipos.tipo,
	roles.fechaRegistro,
	roles.estado
from sistema.datos_roles roles
inner join sistema.cat_tiposRol tipos on roles.idTipo = tipos.id;

create view sistema.view_rolesUsuario as
select 0 id,
	config.idUsuario usuario,
	config.idRol,
	roles.rol,
	roles.idTipo,
	tipos.tipo
from sistema.config_rolesUsuario config
inner join sistema.datos_roles roles on config.idRol = roles.id
inner join sistema.cat_tiposRol tipos on roles.idTipo = tipos.id
where roles.estado = 1;

create view sistema.view_modulos as
select modulos.id,
	modulos.titulo,
	modulos.contenedor,
	modulos.descripcion,
	modulos.mantenimiento,
	modulos.estado,
	modulos.fechaRegistro,
	modulos.ultimaActualizacion
from sistema.datos_modulos modulos;

alter view sistema.view_apartados as
select apartados.idModulo modulo,
	apartados.id,
	apartados.icono,
	apartados.titulo,
	apartados.descripcion,
	apartados.tipo,
	apartados.nombreArchivo,
	modulos.contenedor,
	apartados.nivel,
	apartados.idSuperior superior,
	apartados.mantenimiento,
	apartados.estado,
	apartados.fechaRegistro,
	apartados.ultimaActualizacion,
	apartados.idUsuario
from sistema.det_apartados apartados
inner join sistema.datos_modulos modulos on apartados.idModulo = modulos.id

create view sistema.view_permisos as
select permisos.id,
	permisos.tipoContenedor,
	permisos.idContenedor contenedor,
	permisos.tipoAsignacion idTipoAsignacion,
	case when permisos.tipoAsignacion = 'rol' then 'Rol' else 'Usuario' end tipoAsignacion,
	permisos.idAsignacion,
	(case when permisos.tipoAsignacion = 'rol' then
		(select top(1) rol from sistema.datos_roles where id = permisos.idAsignacion)
	else
		(select top(1) nombres+' '+apellidos from sistema.datos_usuarios where id = permisos.idAsignacion)
	end) asignacion,
	permisos.tipoPermiso idTipoPermiso,
	case when permisos.tipoPermiso = 'LECTURA' then 'Lectura' else 'Escritura' end tipoPermiso,
	permisos.fechaRegistro,
	permisos.ultimaActualizacion,
	permisos.estado
from sistema.datos_permisos permisos;

create view sistema.view_empresas as
select empresas.id,
	empresas.codempresa,
	empresas.nombreEmpresa,
	empresas.principal,
	empresas.urlApi,
	empresas.apiKey,
	empresas.fechaRegistro,
	(usuarios.nombres + ' '+usuarios.apellidos) nombre_usuario,
	empresas.estado
from sistema.datos_empresas empresas
inner join sistema.datos_usuarios usuarios on empresas.idUsuario = usuarios.id;

create view sistema.view_rubrosEmpresa as
select config.idEmpresa empresa,
	config.id,
	config.idRubro,
	rubros.rubro,
	config.estado
from sistema.config_rubrosEmpresa config
inner join general.cat_rubrosEmpresa rubros on config.idRubro = rubros.id;

create view sistema.view_modulosEmpresa as
select config.idEmpresa empresa,
	config.id,
	config.idModulo,
	modulos.titulo modulo,
	config.estado
from sistema.config_modulosEmpresa config
inner join sistema.datos_modulos modulos on config.idModulo = modulos.id;

create view sistema.view_empresasModulos as
select empresas.id,
	empresas.codempresa,
	empresas.nombreEmpresa,
	config.idModulo,
	empresas.estado
from sistema.datos_empresas empresas
inner join sistema.config_modulosEmpresa config on empresas.id = config.idEmpresa and config.estado = 1;