public void CriarEmail(Lookup referenteA, ParticipantesDoProcesso PartProcesso)
        {
            Guid fromUserId;

            if (!Guid.TryParse(SDKore.Configuration.ConfigurationManager.GetSettingValue("Intelbras.Usuario.EnvioEmail", true), out fromUserId))
            {
                throw new ApplicationException("O parâmetro 'Intelbras.Usuario.EnvioEmail' não foi possível converte em GUID.");
            }

            SolicitacaoBeneficio Solicitacao = RepositoryService.SolicitacaoBeneficio.Retrieve(referenteA.Id);

            String msg = string.Empty;

            var email = new Domain.Model.Email(NomeDaOrganizacao, _isOffline);

            email.Assunto = Solicitacao.Canal.Name + " - " + Solicitacao.Nome + " - " + Solicitacao.TipoSolicitacao.Name + " - " + Solicitacao.DataCriacao.Value;


            msg  = "Canal: " + Solicitacao.Canal.Name;
            msg += "</br>Nome da Solicitação: " + Solicitacao.Nome;
            msg += "</brTipo da Solicitação: " + Solicitacao.TipoSolicitacao.Name;
            msg += "</brValor: " + Solicitacao.ValorSolicitado.Value;
            msg += "</brDescrição: " + Solicitacao.Descricao;
            msg += "</brStatus da Solicitação : " + Solicitacao.StatusSolicitacao.Value;

            email.Mensagem = msg;
            email.De       = new Lookup[1];
            email.De[0]    = new Lookup {
                Id = fromUserId, Type = SDKore.Crm.Util.Utility.GetEntityName <Domain.Model.Usuario>()
            };
            email.ReferenteA = new Lookup {
                Id = referenteA.Id, Type = referenteA.Type
            };

            if (PartProcesso.Equipe != null)
            {
                List <TeamMembership> lstTeam = RepositoryService.TeamMembership.ListarPor(PartProcesso.Equipe.Id);
                email.Para = new Lookup[lstTeam.Count()];
                int i = 0;

                foreach (TeamMembership team in lstTeam)
                {
                    email.Para[i] = new Lookup {
                        Id = team.Usuario, Type = SDKore.Crm.Util.Utility.GetEntityName <Domain.Model.Usuario>()
                    };
                    i++;
                }
            }

            if (PartProcesso.Usuario != null)
            {
                email.Para    = new Lookup[1];
                email.Para[0] = new Lookup {
                    Id = PartProcesso.Usuario.Id, Type = PartProcesso.Usuario.Type
                };
            }

            if (PartProcesso.Contato != null)
            {
                email.Para    = new Lookup[1];
                email.Para[0] = new Lookup {
                    Id = PartProcesso.Contato.Id, Type = PartProcesso.Contato.Type
                };
            }

            email.Direcao = false;
            email.ID      = RepositoryService.Email.Create(email);

            RepositoryService.Email.EnviarEmail(email.ID.Value);
        }
        public bool CriarTarefa(Lookup referenteA, string tiposolicitacaonome, string descricao, string ParecerAnterior, ParticipantesDoProcesso PartProcesso)
        {
            Guid   idProprietario   = Guid.Empty;
            string tipoProprietario = "";

            Model.Tarefa task = new Model.Tarefa(NomeDaOrganizacao, _isOffline);
            Model.SolicitacaoBeneficio tmpSolBen = new SolicitacaoBeneficio(NomeDaOrganizacao, _isOffline);
            Model.SolicitacaoCadastro  tmpSolCad = new SolicitacaoCadastro(NomeDaOrganizacao, _isOffline);

            List <RelacionamentoCanal> lstRelacionamento = new List <RelacionamentoCanal>();

            task.Assunto              = "Plugin - " + referenteA.Name;
            task.ReferenteA           = new Lookup(referenteA.Id, referenteA.Type);
            task.Assunto              = PartProcesso.Papel.Name + " - " + tiposolicitacaonome;
            task.Ordem                = PartProcesso.Ordem;
            task.PareceresAnteriores  = ParecerAnterior;
            task.DescricaoSolicitacao = descricao;
            task.Conclusao            = DateTime.Now.AddDays(1).AddHours(3);

            TipoDeAtividade tmpTipoDeAtividade = RepositoryService.TipoDeAtividade.ObterPorPapel(PartProcesso.Papel.Id);

            if (tmpTipoDeAtividade == null)
            {
                throw new ArgumentException("Tipo de Atividade do Participante Não Encontrado! : " + PartProcesso.Papel.Name + " : " + PartProcesso.Papel.Id.ToString());
            }

            if (tmpTipoDeAtividade.ID.HasValue)
            {
                task.TipoDeAtividade = new Lookup(tmpTipoDeAtividade.ID.Value, "itbc_tipoatividade");
            }

            if (PartProcesso.Equipe != null)
            {
                idProprietario   = PartProcesso.Equipe.Id;
                tipoProprietario = PartProcesso.Equipe.Type;
            }

            if (PartProcesso.Usuario != null)
            {
                idProprietario   = PartProcesso.Usuario.Id;
                tipoProprietario = PartProcesso.Usuario.Type;
            }

            if (PartProcesso.Contato != null)
            {
                idProprietario   = PartProcesso.Contato.Id;
                tipoProprietario = PartProcesso.Contato.Type;
            }

            if (PartProcesso.PapelNoCanal.HasValue)
            {
                if (referenteA.Type.ToLower().Equals(SDKore.Crm.Util.Utility.GetEntityName <SolicitacaoCadastro>().ToLower()))
                {
                    tmpSolCad         = RepositoryService.SolicitacaoCadastro.Retrieve(referenteA.Id);
                    lstRelacionamento = RepositoryService.RelacionamentoDoCanal.ListarPor(tmpSolCad.Canal.Id);
                }
                if (referenteA.Type.ToLower().Equals(SDKore.Crm.Util.Utility.GetEntityName <SolicitacaoBeneficio>().ToLower()))
                {
                    tmpSolBen         = RepositoryService.SolicitacaoBeneficio.Retrieve(referenteA.Id);
                    lstRelacionamento = RepositoryService.RelacionamentoDoCanal.ListarPor(tmpSolBen.Canal.Id);
                }


                if (PartProcesso.PapelNoCanal.Value == (int)Domain.Enum.ParticipanteDoCanal.PapelNoCanal.DiretorDeUnidade)
                {
                    if (lstRelacionamento.First <RelacionamentoCanal>().Supervisor == null)
                    {
                        throw new ArgumentException("Diretor da Unidade Não encontrado. Não é possivel criar o próximo passo de Tarefa!");
                    }

                    Usuario _usuario = new Intelbras.CRM2013.Domain.Servicos.UsuarioService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).ObterPor(lstRelacionamento.First <RelacionamentoCanal>().Supervisor.Id);

                    if (_usuario == null)
                    {
                        throw new ArgumentException("Não foi encontrado o usuário.");
                    }

                    if (_usuario.Gerente == null)
                    {
                        throw new ArgumentException("Gerente do Supervisor não confiurado.Operação cancelada.");
                    }

                    //Descemos mais um nivel para pegar o gerente do gerente
                    _usuario = new Intelbras.CRM2013.Domain.Servicos.UsuarioService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).ObterPor(_usuario.Gerente.Id);

                    if (_usuario == null)
                    {
                        throw new ArgumentException("Não foi encontrado o usuário.");
                    }

                    if (_usuario.Gerente == null)
                    {
                        throw new ArgumentException("Gerente do Supervisor não confiurado.Operação cancelada.");
                    }

                    idProprietario   = _usuario.Gerente.Id;
                    tipoProprietario = _usuario.Gerente.Type;
                }

                if (PartProcesso.PapelNoCanal.Value == (int)Domain.Enum.ParticipanteDoCanal.PapelNoCanal.GerenteNacionalGerenteDeDistribuicao)
                {
                    if (lstRelacionamento.First <RelacionamentoCanal>().Supervisor == null)
                    {
                        throw new ArgumentException("Gerente Nacional Gerente De Distribuicao Não encontrado. Não é possivel criar o próximo passo de Tarefa!");
                    }

                    Usuario _usuario = new Intelbras.CRM2013.Domain.Servicos.UsuarioService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline).ObterPor(lstRelacionamento.First <RelacionamentoCanal>().Supervisor.Id);

                    if (_usuario == null)
                    {
                        throw new ArgumentException("Não foi encontrado o usuário.");
                    }

                    if (_usuario.Gerente == null)
                    {
                        throw new ArgumentException("Gerente do Supervisor não confiurado.Operação cancelada.");
                    }

                    idProprietario   = _usuario.Gerente.Id;
                    tipoProprietario = _usuario.Gerente.Type;
                }

                if (PartProcesso.PapelNoCanal.Value == (int)Domain.Enum.ParticipanteDoCanal.PapelNoCanal.KeyAccountRepresentante)
                {
                    if (lstRelacionamento.First <RelacionamentoCanal>().Supervisor != null)
                    {
                        idProprietario   = lstRelacionamento.First <RelacionamentoCanal>().Supervisor.Id;
                        tipoProprietario = lstRelacionamento.First <RelacionamentoCanal>().Supervisor.Type;
                    }
                    else
                    {
                        throw new ArgumentException("Key Account Representante Não encontrado. Não é possivel criar o próximo passo de Tarefa!");
                    }
                }

                if (PartProcesso.PapelNoCanal.Value == (int)Domain.Enum.ParticipanteDoCanal.PapelNoCanal.SupervisorDeVendas)
                {
                    if (lstRelacionamento.First <RelacionamentoCanal>().Supervisor != null)
                    {
                        idProprietario   = lstRelacionamento.First <RelacionamentoCanal>().Supervisor.Id;
                        tipoProprietario = lstRelacionamento.First <RelacionamentoCanal>().Supervisor.Type;
                    }
                    else
                    {
                        throw new ArgumentException("Supervisor De Vendas Não encontrado. Não é possivel criar o próximo passo de Tarefa!");
                    }
                }
            }

            Guid idTask = RepositoryService.Tarefa.Create(task);

            if (idTask != Guid.Empty)
            {
                new Domain.Servicos.UtilService(RepositoryService.NomeDaOrganizacao, RepositoryService.IsOffline, RepositoryService.Provider).MudarProprietarioRegistro(tipoProprietario, idProprietario, "task", idTask);
            }
            return(true);
        }