Beispiel #1
0
        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;
        }