public AcessoKonviva RetornarUnidadeCorreta(AcessoKonviva acessoKonviva)
        {
            var deParaService = new DeParaDeUnidadeDoKonvivaService(RepositoryService);

            if (acessoKonviva.Conta != null)
            {
                var canal = RepositoryService.Conta.Retrieve(acessoKonviva.Conta.Id);
                return(deParaService.ObterUnidadeKonvivaDeParaCom(acessoKonviva, canal, null));
            }
            else
            {
                var contato = RepositoryService.Contato.Retrieve(acessoKonviva.Contato.Id);
                return(deParaService.ObterUnidadeKonvivaDeParaCom(acessoKonviva, null, contato));
            }
        }
        public void CriarAcessoKonvivaPadrao(Guid contatoId)
        {
            Contato contatoM = RepositoryService.Contato.Retrieve(contatoId);

            if (contatoM == null)
            {
                throw new ArgumentException("(CRM) Contato não existente");
            }

            AcessoKonviva acessoKonviva = RepositoryService.AcessoKonviva.ObterPorContato(contatoId, Domain.Enum.StateCode.Ativo);

            if (acessoKonviva != null)
            {
                throw new ArgumentException("(CRM) Usuário Konviva Duplicado!");
            }

            acessoKonviva = new AcessoKonviva(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline);

            acessoKonviva.Contato = new Lookup(contatoM.ID.Value, "");

            //Nova regra de atribuição de Unidade Konviva
            if (contatoM.AssociadoA != null && contatoM.AssociadoA.Type == SDKore.Crm.Util.Utility.GetEntityName <Conta>())
            {
                acessoKonviva.Conta = new Lookup(contatoM.AssociadoA.Id, contatoM.AssociadoA.Type);
                acessoKonviva       = new DeParaDeUnidadeDoKonvivaService(RepositoryService).ObterUnidadeKonvivaDeParaCom(acessoKonviva, RepositoryService.Conta.Retrieve(acessoKonviva.Conta.Id), null);
            }
            else
            {
                acessoKonviva = new DeParaDeUnidadeDoKonvivaService(RepositoryService).ObterUnidadeKonvivaDeParaCom(acessoKonviva, null, contatoM);
            }

            if (acessoKonviva.UnidadeKonviva == null && this.organizacaoPadrao.HasValue)
            {
                acessoKonviva.UnidadeKonviva       = new Lookup(this.organizacaoPadrao.Value, "");
                acessoKonviva.DeParaUnidadeKonviva = null;
            }

            //reseta o perfil para apenas aluno selecionado
            acessoKonviva = this.ResetarPerfilKonviva(acessoKonviva);

            //TODO NOME KONVIVA VER PADRAO DO DOCUMENTOS
            acessoKonviva.Nome = acessoKonviva.Contato.Name;

            RepositoryService.AcessoKonviva.Create(acessoKonviva);
        }
        public void MudarCanal(Contato contato, Guid?canalId)
        {
            AcessoKonviva acessoKonviva = this.ObterPorContato(contato.ID.Value, Enum.StateCode.Ativo);

            if (acessoKonviva != null)
            {
                acessoKonviva = this.ResetarPerfilKonviva(acessoKonviva);
                acessoKonviva.IntegrarNoPlugin = false;

                if (canalId.HasValue)
                {
                    acessoKonviva.Conta = new SDKore.DomainModel.Lookup(canalId.Value, SDKore.Crm.Util.Utility.GetEntityName <Conta>());
                    acessoKonviva       = new DeParaDeUnidadeDoKonvivaService(RepositoryService).ObterUnidadeKonvivaDeParaCom(acessoKonviva, RepositoryService.Conta.Retrieve(canalId.Value), null);
                }
                else
                {
                    acessoKonviva.AddNullProperty("Conta");
                    acessoKonviva = new DeParaDeUnidadeDoKonvivaService(RepositoryService).ObterUnidadeKonvivaDeParaCom(acessoKonviva, null, contato);
                }

                this.Persistir(acessoKonviva);
            }
        }