/// <summary> /// Inicia um novo chat entre o cliente e o corretor /// </summary> /// <param name="chatRepository"></param> /// <returns></returns> public Repository Start(Repository chatRepository) { using (db = new PinheiroSereniContext()) { try { ChatRepository r = (ChatRepository)chatRepository; #region identifica o corretor da vez r.corretor = r.corretorDaVez.obterCorretor(db.Chats, db.CorretorOnlines); #endregion #region verifica se tem sessão ativa para o corretor da vez var _s = from s in db.Sessaos where s.corretorId == r.corretor.corretorId && s.dt_desativacao == null && s.statusOperador.Equals("O") select s; #endregion #region Se o corretor da vez não tiver sessão ativa, procurar o primeiro corretor que esteja online if (_s.Count() == 0) { _s = from s in db.Sessaos where s.dt_desativacao == null && s.statusOperador.Equals("O") && s.corretorId != null orderby s.CorretorOnline.indexEscala select s; if (_s.Count() == 0) { throw new ArgumentNullException(); // não tem nenhum corretor online } else if (_s.Where(m => m.CorretorOnline.indexEscala >= r.corretor.indexEscala).Count() > 0) { _s = _s.Where(m => m.CorretorOnline.indexEscala >= r.corretor.indexEscala); } } #endregion r.corretor = db.CorretorOnlines.Find(_s.First().corretorId); r.sessionId = _s.First().sessaoId; r.sessao = _s.First(); #region Incluir cliente Prospect p = new Prospect() { email = ((ChatRepository)chatRepository).prospect.email.ToLower(), empreendimentoId = ((ChatRepository)chatRepository).prospect.empreendimentoId, nome = ((ChatRepository)chatRepository).prospect.nome, telefone = ((ChatRepository)chatRepository).prospect.telefone, isFolderDigital = "N", dt_cadastro = DateTime.Now }; if (db.Prospects.Find(r.prospect.email, r.prospect.empreendimentoId) == null) { db.Prospects.Add(p); } #endregion #region Incluir o Chat PinheiroSereni.Dominio.Entidades.Chat chat = new Dominio.Entidades.Chat() { sessaoId = r.sessionId, corretorId = r.corretor.corretorId, email = r.prospect.email, empreendimentoId = r.prospect.empreendimentoId, dt_inicio = DateTime.Now }; db.Chats.Add(chat); #endregion #region Incluir a mensagem de boas vindas ChatMessage msg = new ChatMessage() { messageId = Guid.NewGuid(), chatId = chat.chatId, corretorId = r.corretor.corretorId, dt_message = DateTime.Now, empreendimentoId = r.prospect.empreendimentoId, message = "Olá <b>" + r.prospect.nome + "</b>. Sou da equipe de vendas da Pinheiro Sereni Engenharia. Estou à disposição para ajudá-lo(a). Você já foi atendido(a) por um de nossos corretores?" }; db.ChatMessages.Add(msg); #endregion db.SaveChanges(); r.chat.chatId = chat.chatId; r.path_fotoCorretor = db.Parametros.Find((int)Parametros.PATH_FOTOCORRETOR).valor; return(r); } catch (ArgumentNullException ex) { chatRepository.mensagem = new Validate() { Code = 35, Message = MensagemPadrao.Message(35).ToString(), MessageBase = ex.Message }; } catch (ArgumentException ex) { chatRepository.mensagem = new Validate() { Code = 17, Message = MensagemPadrao.Message(17).ToString(), MessageBase = ex.Message }; } catch (Exception ex) { chatRepository.mensagem.Code = 17; chatRepository.mensagem.MessageBase = ex.Message; chatRepository.mensagem.Message = new PinheiroSereniException(ex.Message + " => " + ex.InnerException.Message, GetType().FullName).Message; } } return(chatRepository); }
public Repository ContabilizaClick(Repository chatRepository) { using (db = new PinheiroSereniContext()) { try { ChatRepository r = (ChatRepository)chatRepository; #region verifica se tem sessão ativa para o corretor da vez var _s = db.Sessaos.Take(1); #endregion r.corretor = db.CorretorOnlines.Find(25); // Supervisor Online r.sessionId = _s.First().sessaoId; r.sessao = _s.First(); #region Incluir cliente Prospect p = new Prospect() { email = ((ChatRepository)chatRepository).prospect.email.ToLower(), empreendimentoId = ((ChatRepository)chatRepository).prospect.empreendimentoId, nome = ((ChatRepository)chatRepository).prospect.nome, isFolderDigital = "N", dt_cadastro = DateTime.Now }; if (db.Prospects.Find(r.prospect.email, r.prospect.empreendimentoId) == null) { db.Prospects.Add(p); } #endregion #region Incluir o Chat PinheiroSereni.Dominio.Entidades.Chat chat = new Dominio.Entidades.Chat() { sessaoId = r.sessionId, corretorId = r.corretor.corretorId, email = r.prospect.email, empreendimentoId = r.prospect.empreendimentoId, dt_inicio = DateTime.Now, dt_fim = DateTime.Now.AddSeconds(1), typingClient = "N", typingOperator = "N" }; db.Chats.Add(chat); #endregion #region Incluir a mensagem de boas vindas ChatMessage msg = new ChatMessage() { messageId = Guid.NewGuid(), chatId = chat.chatId, email = r.prospect.email, dt_message = DateTime.Now, empreendimentoId = r.prospect.empreendimentoId, message = "[Contabilização de CHAT - Data do click: " + DateTime.Now.ToString("dd/MM/yyyy HH:mm") + "h. - IP do cliente: " + System.Web.HttpContext.Current.Request.UserHostAddress + " ]" }; db.ChatMessages.Add(msg); #endregion db.SaveChanges(); r.chat.chatId = chat.chatId; return(r); } catch (ArgumentNullException ex) { chatRepository.mensagem = new Validate() { Code = 35, Message = MensagemPadrao.Message(35).ToString(), MessageBase = ex.Message }; } catch (ArgumentException ex) { chatRepository.mensagem = new Validate() { Code = 17, Message = MensagemPadrao.Message(17).ToString(), MessageBase = ex.Message }; } catch (Exception ex) { chatRepository.mensagem.Code = 17; chatRepository.mensagem.MessageBase = ex.Message; chatRepository.mensagem.Message = new PinheiroSereniException(ex.Message + " => " + ex.InnerException.Message, GetType().FullName).Message; } } return(chatRepository); }