private void createInquiry(Entities.MailMessage convertedMessage) { if (convertedMessage.Sender.Role == PersonRole.Client && !repository.Query <Inquiry>(x => x.Source) .Select(x => x.Source) .Any(convertedMessage.SameMessagePredicate)) { var receiver = convertedMessage.Receivers.First(); var ownerPerson = repository.Query <User>(x => x.Teams, x => x.RelatedPerson).FirstOrDefault(x => x.RelatedPerson.Id == receiver.Id); if (ownerPerson != null) { var inquiry = repository.Query <Inquiry>(x => x.Client, x => x.Owner) .FirstOrDefault( x => x.Client.Id == convertedMessage.Sender.Id && x.Owner.Id == ownerPerson.CurrentTeam.Id && !x.Archived); if (inquiry == null) { var newInquiry = inquiryFactory.CreateInquiry(convertedMessage); newInquiry.Owner = ownerPerson.CurrentTeam; repository.Save(newInquiry); } else { inquiry.ReferenceDate = null; repository.Save(inquiry); } } } }
/// <summary> /// Converts Input.MailMessage to Entities.MailMessage. /// If sender or receivers isn't exist then they will be added to repository /// If email forwarded then sender will be taken from body <see cref="MailMessageParserThunderbird"/> /// </summary> /// <param name="mailMessage">Input.MailMessage type of message</param> /// <returns>Entities.MailMessage type of message</returns> public Entities.MailMessage Convert(MailMessage mailMessage) { // If mail message is forwarded then Receiver will be person who forward mail and Sender taken from body if (isForwardedMailMessage(mailMessage)) { var parser = mailMessageParserFactory.GetMailMessageParser(mailMessage.UserAgent); mailMessage.Subject = parser.GetSubject(mailMessage.Subject); mailMessage.Receivers = new List<MailAddress>{mailMessage.Sender}; mailMessage.Sender = parser.GetSender(mailMessage); mailMessage.Body = parser.GetBody(mailMessage); } var returnMessage = new Entities.MailMessage { Body = mailMessage.Body, Date = mailMessage.Date, Subject = mailMessage.Subject, Receivers = new List<Person>() }; //find a Sender in Repository var sender = repository.Query<Person>().FirstOrDefault(x => x.Email == mailMessage.Sender.Address); returnMessage.Sender = sender ?? AddNewPersonToRepository(mailMessage.Sender, mailMessage.Date); //find Receivers in repository foreach (var receiver in mailMessage.Receivers) { var currentReceiver = repository.Query<Person>().FirstOrDefault(x => x.Email == receiver.Address); returnMessage.Receivers.Add(currentReceiver ?? AddNewPersonToRepository(receiver, mailMessage.Date)); } return returnMessage; }
/// <summary> /// Creates Inquiry from MailMessage and save it to repository. /// </summary> /// <param name="message">Source MailMessage for Inquiry</param> public Inquiry CreateInquiry(Entities.MailMessage message) { return(new Inquiry { Client = message.Sender, Description = message.Body, Source = message, Subject = message.Subject, ReferenceDate = null, }); }
/// <summary> /// Converts Input.MailMessage to Entities.MailMessage. /// If sender or receivers isn't exist then they will be added to repository /// If email forwarded then sender will be taken from body <see cref="MailMessageParserThunderbird"/> /// </summary> /// <param name="mailMessage">Input.MailMessage type of message</param> /// <returns>Entities.MailMessage type of message</returns> public Entities.MailMessage Convert(MailMessage mailMessage) { // If mail message is forwarded then Receiver will be person who forward mail and Sender taken from body if (isForwardedMailMessage(mailMessage)) { var parser = mailMessageParserFactory.GetMailMessageParser(mailMessage.UserAgent); mailMessage.Subject = parser.GetSubject(mailMessage.Subject); mailMessage.Receivers = new List <MailAddress> { mailMessage.Sender }; mailMessage.Sender = parser.GetSender(mailMessage); mailMessage.Body = parser.GetBody(mailMessage); } var returnMessage = new Entities.MailMessage { Body = mailMessage.Body, Date = mailMessage.Date, Subject = mailMessage.Subject, Receivers = new List <Person>() }; //find a Sender in Repository var sender = repository.Query <Person>().FirstOrDefault(x => x.Email == mailMessage.Sender.Address); returnMessage.Sender = sender ?? AddNewPersonToRepository(mailMessage.Sender, mailMessage.Date); //find Receivers in repository foreach (var receiver in mailMessage.Receivers) { var currentReceiver = repository.Query <Person>().FirstOrDefault(x => x.Email == receiver.Address); returnMessage.Receivers.Add(currentReceiver ?? AddNewPersonToRepository(receiver, mailMessage.Date)); } return(returnMessage); }
/// <summary> /// Converts Input.MailMessage to Entities.MailMessage. /// If sender or receivers isn't exist then they will be added to repository /// </summary> /// <param name="mailMessage">Input.MailMessage type of message</param> /// <returns>Entities.MailMessage type of message</returns> public Entities.MailMessage Convert(MailMessage mailMessage) { var returnMessage = new Entities.MailMessage { Body = mailMessage.Body, Date = mailMessage.Date, Subject = mailMessage.Subject, Receivers=new List<Person>() }; //find a Sender in Repository var sender = repository.Query<Person>().FirstOrDefault(x => x.Email == mailMessage.Sender.Address); if (sender!=null) { returnMessage.Sender = sender; } else //if cant find sender in repository then create him. { returnMessage.Sender = addNewPersonToRepository(mailMessage.Sender, mailMessage.Date); } //find Receivers in repository foreach (var receiver in mailMessage.Receivers) { var currentReceiver = repository.Query<Person>().FirstOrDefault(x => x.Email == receiver.Address); if (currentReceiver!=null) { returnMessage.Receivers.Add(currentReceiver); } else //if cant find receiver in repository then create him. { returnMessage.Receivers.Add(addNewPersonToRepository(receiver, mailMessage.Date)); } } return returnMessage; }