using Gestor.Application.Helpers; using Gestor.Application.Servicos; using Gestor.Common.Validation; using Gestor.Model.Common; using Gestor.Model.Domain.Generic; using Gestor.Model.Domain.Relatorios; using Gestor.Model.Domain.Seguros; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Runtime.CompilerServices; using System.Threading.Tasks; namespace Gestor.Application.ViewModels.Generic { public class DialogCopiarPermissaoViewModel : BaseSegurosViewModel { private Usuario _selectedUsuario; private Tuple, Usuario, List, List, List> _usuarioParameter; public Usuario SelectedUsuario { get { return this._selectedUsuario; } set { this._selectedUsuario = value; this.WorkOnSelectedUsuario(value); base.OnPropertyChanged("SelectedUsuario"); } } public Tuple, Usuario, List, List, List> UsuarioParameter { get { return this._usuarioParameter; } set { this._usuarioParameter = value; base.OnPropertyChanged("UsuarioParameter"); } } public DialogCopiarPermissaoViewModel() { this.UsuarioParameter = new Tuple, Usuario, List, List, List>(null, null, null, null, null); } private async Task> GetPermissoes(Usuario usuario) { List permissaoUsuarios = new List(); IEnumerable tipoTelas = Enum.GetValues(typeof(TipoTela)).Cast(); IEnumerable str = from v in tipoTelas select v.ToString(); List list = ( from x in str orderby x select x).ToList(); List permissaoUsuarios1 = await this.ServicoPermissUsuario.PermissUsuario(usuario); list.ForEach((string x) => { TipoTela tipoTela = (TipoTela)Enum.Parse(typeof(TipoTela), x); if (!string.Equals(ValidationHelper.GetCategory(tipoTela), "seguros", StringComparison.CurrentCultureIgnoreCase) && !string.Equals(ValidationHelper.GetCategory(tipoTela), "ferramentas", StringComparison.CurrentCultureIgnoreCase)) { return; } long id = (long)0; bool consultar = true; bool incluir = true; bool alterar = true; bool excluir = true; if (permissaoUsuarios1.Count > 0 && permissaoUsuarios1.Any((PermissaoUsuario y) => y.get_Tela() == tipoTela)) { id = permissaoUsuarios1.First((PermissaoUsuario y) => y.get_Tela() == tipoTela).get_Id(); consultar = permissaoUsuarios1.First((PermissaoUsuario y) => y.get_Tela() == tipoTela).get_Consultar(); incluir = permissaoUsuarios1.First((PermissaoUsuario y) => y.get_Tela() == tipoTela).get_Incluir(); alterar = permissaoUsuarios1.First((PermissaoUsuario y) => y.get_Tela() == tipoTela).get_Alterar(); excluir = permissaoUsuarios1.First((PermissaoUsuario y) => y.get_Tela() == tipoTela).get_Excluir(); } PermissaoUsuario permissaoUsuario = new PermissaoUsuario(); permissaoUsuario.set_Id(id); permissaoUsuario.set_Tela(tipoTela); permissaoUsuario.set_Consultar(consultar); permissaoUsuario.set_Incluir(incluir); permissaoUsuario.set_Alterar(alterar); permissaoUsuario.set_Excluir(excluir); permissaoUsuarios.Add(permissaoUsuario); }); List permissaoUsuarios2 = permissaoUsuarios; list = null; return permissaoUsuarios2; } private async Task> GetPermissoesArquivoDigital(Usuario usuario) { List permissaoArquivoDigitals = new List(); IEnumerable tipoArquivoDigitals = Enum.GetValues(typeof(TipoArquivoDigital)).Cast(); IEnumerable str = from v in tipoArquivoDigitals select v.ToString(); List list = ( from x in str orderby x select x).ToList(); List permissaoArquivoDigitals1 = await this.ServicoPermissArquivoDigital.PermissArquivoDigital(usuario); list.ForEach((string x) => { TipoArquivoDigital tipoArquivoDigital = (TipoArquivoDigital)Enum.Parse(typeof(TipoArquivoDigital), x); long id = (long)0; bool consultar = true; bool incluir = true; bool excluir = true; if (permissaoArquivoDigitals1.Count > 0 && permissaoArquivoDigitals1.Any((PermissaoArquivoDigital y) => y.get_Tela() == tipoArquivoDigital)) { id = permissaoArquivoDigitals1.First((PermissaoArquivoDigital y) => y.get_Tela() == tipoArquivoDigital).get_Id(); consultar = permissaoArquivoDigitals1.First((PermissaoArquivoDigital y) => y.get_Tela() == tipoArquivoDigital).get_Consultar(); incluir = permissaoArquivoDigitals1.First((PermissaoArquivoDigital y) => y.get_Tela() == tipoArquivoDigital).get_Incluir(); excluir = permissaoArquivoDigitals1.First((PermissaoArquivoDigital y) => y.get_Tela() == tipoArquivoDigital).get_Excluir(); } PermissaoArquivoDigital permissaoArquivoDigital = new PermissaoArquivoDigital(); permissaoArquivoDigital.set_Id(id); permissaoArquivoDigital.set_Tela(tipoArquivoDigital); permissaoArquivoDigital.set_Consultar(consultar); permissaoArquivoDigital.set_Incluir(incluir); permissaoArquivoDigital.set_Excluir(excluir); permissaoArquivoDigitals.Add(permissaoArquivoDigital); }); List permissaoArquivoDigitals2 = permissaoArquivoDigitals; list = null; return permissaoArquivoDigitals2; } private async Task> GetRestricoes(Usuario usuario) { List restricaoUsuarios = new List(); IEnumerable tipoRestricaos = Enum.GetValues(typeof(TipoRestricao)).Cast(); IEnumerable str = from v in tipoRestricaos select v.ToString(); List list = ( from x in str orderby x select x).ToList(); List restricaoUsuarios1 = await this.ServicoRestriUsuario.BuscarRestricoes(usuario.get_Id()); List restricaoUsuarios2 = restricaoUsuarios1; list.ForEach((string x) => { TipoRestricao tipoRestricao = (TipoRestricao)Enum.Parse(typeof(TipoRestricao), x); long id = (long)0; bool restricao = false; if (restricaoUsuarios2.Count > 0 && restricaoUsuarios2.Any((RestricaoUsuario y) => y.get_Tipo() == tipoRestricao)) { id = restricaoUsuarios2.First((RestricaoUsuario y) => y.get_Tipo() == tipoRestricao).get_Id(); restricao = restricaoUsuarios2.First((RestricaoUsuario y) => y.get_Tipo() == tipoRestricao).get_Restricao(); } RestricaoUsuario restricaoUsuario = new RestricaoUsuario(); restricaoUsuario.set_Id(id); restricaoUsuario.set_Tipo(tipoRestricao); restricaoUsuario.set_Restricao(restricao); restricaoUsuarios.Add(restricaoUsuario); }); List restricaoUsuarios3 = restricaoUsuarios; list = null; return restricaoUsuarios3; } private async Task> GetRestricoesCamposRelatorios(Usuario usuario) { List restricaoUsuarioCamposRelatorios = new List(); List parametrosRelatorios = new List(); foreach (Relatorio relatorio in Enum.GetValues(typeof(Relatorio)).Cast()) { switch (relatorio) { case 0: case 1: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 2: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 3: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 4: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 5: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 6: case 16: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 7: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 8: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 9: case 10: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 11: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 12: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 13: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 14: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 15: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 17: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 18: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 19: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 20: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 23: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 27: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } case 29: { parametrosRelatorios.AddRange(Funcoes.ColunasRelatorio(relatorio, new List())); continue; } default: { continue; } } } List restricaoUsuarioCamposRelatorios1 = await this.ServicoRestriUsuario.BuscarRestricoesCamposRelatorios(usuario.get_Id()); List restricaoUsuarioCamposRelatorios2 = restricaoUsuarioCamposRelatorios1; parametrosRelatorios.ForEach((ParametrosRelatorio x) => { long id = (long)0; bool restricao = false; if (restricaoUsuarioCamposRelatorios2.Count > 0 && restricaoUsuarioCamposRelatorios2.Any((RestricaoUsuarioCamposRelatorios y) => { if (y.get_Campo() != x.get_Header()) { return false; } return y.get_Relatorio() == x.get_Relatorio(); })) { id = restricaoUsuarioCamposRelatorios2.First((RestricaoUsuarioCamposRelatorios y) => { if (y.get_Campo() != x.get_Header()) { return false; } return y.get_Relatorio() == x.get_Relatorio(); }).get_Id(); restricao = restricaoUsuarioCamposRelatorios2.First((RestricaoUsuarioCamposRelatorios y) => { if (y.get_Campo() != x.get_Header()) { return false; } return y.get_Relatorio() == x.get_Relatorio(); }).get_Restricao(); } RestricaoUsuarioCamposRelatorios restricaoUsuarioCamposRelatorio = new RestricaoUsuarioCamposRelatorios(); restricaoUsuarioCamposRelatorio.set_Id(id); restricaoUsuarioCamposRelatorio.set_Campo(x.get_Header()); restricaoUsuarioCamposRelatorio.set_Relatorio(x.get_Relatorio()); restricaoUsuarioCamposRelatorio.set_Restricao(restricao); restricaoUsuarioCamposRelatorios.Add(restricaoUsuarioCamposRelatorio); }); List restricaoUsuarioCamposRelatorios3 = restricaoUsuarioCamposRelatorios; parametrosRelatorios = null; return restricaoUsuarioCamposRelatorios3; } private async void WorkOnSelectedUsuario(Usuario value) { if (value != null && value.get_Id() != 0) { List permissoes = await this.GetPermissoes(value); Usuario usuario = value; List restricoes = await this.GetRestricoes(value); List permissoesArquivoDigital = await this.GetPermissoesArquivoDigital(value); List restricoesCamposRelatorios = await this.GetRestricoesCamposRelatorios(value); this.UsuarioParameter = new Tuple, Usuario, List, List, List>(permissoes, usuario, restricoes, permissoesArquivoDigital, restricoesCamposRelatorios); permissoes = null; usuario = null; restricoes = null; permissoesArquivoDigital = null; } } } }