static void AddEmailToSend(Email email) { if (!emailRepository.CanSendByTimeout(email.Recipient.EmailAddress, email.Order, email.OrderDocumentType)) { logger.Error("{0} Попытка отправить почту до истечения минимального времени до повторной отправки", GetThreadInfo()); throw new Exception("Отправка на один и тот же адрес возможна раз в 10 минут"); } logger.Debug("{0} Запись в базу информации о письме", GetThreadInfo()); using (var uow = UnitOfWorkFactory.CreateWithNewRoot <StoredEmail>($"[ES]Добавление письма на отправку")) { //Заполнение нового письма данными switch (email.OrderDocumentType) { case OrderDocumentType.Bill: uow.Root.Order = uow.GetById <Order>(email.Order); break; case OrderDocumentType.BillWSForDebt: uow.Root.OrderWithoutShipmentForDebt = uow.GetById <OrderWithoutShipmentForDebt>(email.Order); break; case OrderDocumentType.BillWSForAdvancePayment: uow.Root.OrderWithoutShipmentForAdvancePayment = uow.GetById <OrderWithoutShipmentForAdvancePayment>(email.Order); break; case OrderDocumentType.BillWSForPayment: uow.Root.OrderWithoutShipmentForPayment = uow.GetById <OrderWithoutShipmentForPayment>(email.Order); break; } uow.Root.DocumentType = email.OrderDocumentType; uow.Root.SendDate = DateTime.Now; uow.Root.StateChangeDate = DateTime.Now; uow.Root.HtmlText = email.HtmlText; uow.Root.Text = email.Text; uow.Root.Title = email.Title; uow.Root.State = StoredEmailStates.WaitingToSend; uow.Root.SenderName = email.Sender.Title; uow.Root.SenderAddress = email.Sender.EmailAddress; uow.Root.RecipientName = email.Recipient.Title; uow.Root.RecipientAddress = email.Recipient.EmailAddress; uow.Root.ManualSending = email.ManualSending; uow.Root.Author = email.AuthorId != 0 ? uow.GetById <Employee>(email.AuthorId) : null; try { uow.Save(); } catch (Exception ex) { logger.Debug(string.Format("{1} Ошибка при сохранении. Ошибка: {0}", ex.Message, GetThreadInfo())); throw ex; } email.StoredEmailId = uow.Root.Id; emailsQueue.Add(email); logger.Debug("{0} Письмо добавлено в очередь на отправку. Писем в очереди: {1}", GetThreadInfo(), emailsQueue.Count); logger.Debug("{0} Закончил работу.", GetThreadInfo()); } }
private void UpdateEmails() { List <StoredEmail> storedEmails; using (IUnitOfWork uow = UnitOfWorkFactory.CreateWithoutRoot()) { storedEmails = uow.Session.QueryOver <StoredEmail>() .Where(Restrictions.Eq( Projections.Property <StoredEmail>(x => x.Order.Id), document.Order.Id)) .And(Restrictions.Eq( Projections.Property <StoredEmail>(x => x.DocumentType), document.Type)) .List().ToList(); } ytreeviewStoredEmails.ItemsDataSource = storedEmails; buttonSendEmail.Sensitive = document.Type == OrderDocumentType.Bill && emailRepository.CanSendByTimeout(yvalidatedentryEmail.Text, document.Order.Id, OrderDocumentType.Bill) && document.Order.Id > 0; }