public override void ExportCustomerOrders(Customer customer) { var orderRepository = DbManger.GetInstance().GetOrderRepository(); var productRepository = DbManger.GetInstance().GetProductRepository(); // var ratesRepository = DbManger.GetInstance().GetRatesRepository(); var customerExport = new StringBuilder(); customerExport.AppendLine(String.Format("{0}", customer.GetFullName().ToUpper())); customerExport.AppendLine(); // информация о комиссии пользователя // ManagedRate comission; List<Order> orders; try { // comission = ratesRepository.GetById(customer.AccountTypeId); orders = orderRepository.GetOrdersForCustomerFromAlbum(customer, WorkingAlbum); } catch (Exception exception) { m_logger.ErrorException(exception); throw new ApplicationException("Ошибка: Не удалось выполнить чтение из БД"); } int positionNum = 1; decimal cleanSum = 0; foreach (Order order in orders) { if (!IsIncludingEmpty && order.Amount == 0) continue; Product productInfo = null; OnProgressChanged("Получение информации о продукте"); string partialIndicator = ""; try { productInfo = productRepository.GetById(order.ProductId); var total = orderRepository.GetProductTotalOrderedAmount(productInfo); if (total < productInfo.MinAmount) { if (!IsIncludingPartial) { continue; } else partialIndicator = "(!)"; } } catch (Exception exception) { m_logger.ErrorException(exception); continue; } decimal sum = order.Amount * productInfo.Price; cleanSum += sum; customerExport.AppendLine(String.Format("{0} {1}. {2} {3}: {4:C}", positionNum, partialIndicator, productInfo.Title, order.Amount, sum)); positionNum++; } var comission = customer.GetCommissionInfo(); var comissionValue = cleanSum*(comission.Rate/100); var summary = cleanSum*(1 + (comission.Rate/100)); customerExport.AppendLine(String.Format("Сумма: {0:C2}", cleanSum)); customerExport.AppendLine(String.Format("{0}: {1:C2}", comission.Comment, comissionValue)); var delivery = customer.GetDeliveryInfo(); if (delivery != null && delivery.IsActive) { if ((delivery.IsConditional && delivery.MinimumOrderSummaryCondition > summary) || delivery.IsConditional == false) { summary += delivery.Price; customerExport.AppendLine(String.Format("Доставка: {0:C0}", delivery.Price)); } } customerExport.AppendLine(String.Format("Итог: {0:C0}", summary)); System.IO.File.WriteAllText(m_filename, customerExport.ToString(), Encoding.UTF8); }
public override void ExportCustomerOrders(Customer customer) { if (!System.IO.File.Exists(CustomerOrderTemplate)) { throw new ApplicationException("Файл шаблона для данного документа не найден!"); } const string itemsTableBookmark = @"customer_orders_table"; const string customerNameBookmark = @"customer_name"; const string dateBookmark = @"current_date"; const string clearSumBookmark = @"clear_sum"; const string comissionSumBookmark = @"comission"; const string totalSumBookmark = @"total"; const string addressBookmark = @"customer_address"; const string deliveryBookmark = @"delivery_value"; var orderRepo = DbManger.GetInstance().GetOrderRepository(); var prodRepo = DbManger.GetInstance().GetProductRepository(); // var ratesRepo = DbManger.GetInstance().GetRatesRepository(); // ManagedRate comission; // try // { // comission = ratesRepo.GetById(customer.AccountTypeId); // } // catch (Exception e) // { // m_log.ErrorException(e); // throw new ApplicationException("Ошибка. Не удалось получить ставку покупателя."); // } if(customer.GetCommissionInfo() == null) throw new ApplicationException("Ошибка. Не удалось получить ставку покупателя."); List<Order> orders; try { orders = orderRepo.GetOrdersForCustomerFromAlbum(customer, WorkingAlbum); } catch (Exception e) { m_log.ErrorException(e); throw new ApplicationException("Не удалось получить список заказов для покупателя."); } Word.Application word; try { word = new Word.Application(); } catch (Exception e) { m_log.ErrorException(e); throw new ApplicationException("Не удалось запустить MS Word. Пожалуйста удостоверьтесь, что установлена версия MS MSWord не ниже 2007."); } // word.Visible = true; var doc = word.Documents.Open(CustomerOrderTemplate); if (!doc.Bookmarks.Exists(itemsTableBookmark)) { m_log.ErrorFormat("Content bookmark '{0}' not found in template!", itemsTableBookmark); doc.Close(); word.Quit(); throw new ApplicationException(String.Format("Шаблон '{0}' некорректен!", CustomerOrderTemplate)); } var range = doc.Bookmarks[itemsTableBookmark].Range; if (range.Tables.Count == 0) { m_log.ErrorFormat("Content bookmark '{0}' is not containing table to fill!", itemsTableBookmark); doc.Close(); word.Quit(); throw new ApplicationException(String.Format("Шаблон '{0}' некорректен!", CustomerOrderTemplate)); } var table = range.Tables[1]; int row = 2; decimal clearSum = 0; for (int i = 0; i < orders.Count; i++) { var order = orders[i]; if (order.Amount == 0 && !IsIncludingEmpty) continue; //string partialIndicator = ""; Product p; try { p = prodRepo.GetById(order.ProductId); if (p == null) { continue; } var total = orderRepo.GetProductTotalOrderedAmount(p); if (total < p.MinAmount) { if (!IsIncludingPartial) { continue; } // else partialIndicator = "(!)"; } } catch (Exception e) { m_log.ErrorException(e); throw new ApplicationException("Ошибка БД."); } var title = p.GenericUrl.Length > 0 ? String.Format("{0} ({1})", p.Title, p.GenericUrl) : p.Title; table.Rows.Add(); table.Cell(row, 1).Range.Text = (row - 1).ToString(); table.Cell(row, 2).Range.Text = title; table.Cell(row, 3).Range.Text = p.Price.ToString("C2"); table.Cell(row, 4).Range.Text = order.Amount.ToString(); table.Cell(row, 5).Range.Text = (p.Price*order.Amount).ToString("C2"); clearSum += (p.Price*order.Amount); row++; } try { table.Rows[row].Delete(); } catch (Exception) { } var comission = customer.GetCommissionInfo(); var comissionValue = (clearSum*(comission.Rate/100)); var summary = clearSum*(1 + comission.Rate/100); decimal deliveryPrice = 0; var delivery = customer.GetDeliveryInfo(); if (delivery != null && delivery.IsActive) { if ((delivery.IsConditional && delivery.MinimumOrderSummaryCondition > summary) || delivery.IsConditional == false) { summary += delivery.Price; deliveryPrice = delivery.Price; } } if (doc.Bookmarks.Exists(customerNameBookmark)) { doc.Bookmarks[customerNameBookmark].Range.Text = customer.GetFullName(); } if (doc.Bookmarks.Exists(dateBookmark)) { doc.Bookmarks[dateBookmark].Range.Text = DateTime.Now.ToLongDateString(); } if (doc.Bookmarks.Exists(clearSumBookmark)) { doc.Bookmarks[clearSumBookmark].Range.Text = String.Format("Сумма: {0:C2}", clearSum); } if (doc.Bookmarks.Exists(comissionSumBookmark)) { doc.Bookmarks[comissionSumBookmark].Range.Text = String.Format("{0}: {1:C2}", comission.Comment, comissionValue); } if (doc.Bookmarks.Exists(deliveryBookmark)) { doc.Bookmarks[deliveryBookmark].Range.Text = String.Format("Доставка: {0:C0}", deliveryPrice); } if (doc.Bookmarks.Exists(totalSumBookmark)) { doc.Bookmarks[totalSumBookmark].Range.Text = String.Format("Итого: {0:C0}", summary); } if (doc.Bookmarks.Exists(addressBookmark)) { doc.Bookmarks[addressBookmark].Range.Text = customer.Address; } doc.SaveAs(m_filename); doc.Close(); word.Quit(); }
public override void ExportCustomerOrders(Customer customer) { ClearDocument(); var orderRepository = DbManger.GetInstance().GetOrderRepository(); var productRepository = DbManger.GetInstance().GetProductRepository(); // var ratesRepository = DbManger.GetInstance().GetRatesRepository(); if (customer.GetCommissionInfo() == null) throw new ApplicationException("Для покупателя неверно установлена ставка комиссии!"); // информация о комиссии пользователя // ManagedRate comission; List<Order> orders; try { // comission = ratesRepository.GetById(customer.AccountTypeId); orders = orderRepository.GetOrdersForCustomerFromAlbum(customer, WorkingAlbum); } catch (Exception exception) { m_logger.ErrorException(exception); throw new ApplicationException("Ошибка: Не удалось выполнить чтение из БД"); } // прелоад информации о способе доставки customer.GetDeliveryInfo(); var orderInfo = new CustomerOrderInfo(customer); foreach (Order order in orders) { if (!IsIncludingEmpty && order.Amount == 0) continue; Product productInfo; OnProgressChanged("Получение информации о продукте"); string partialIndicator = ""; try { productInfo = productRepository.GetById(order.ProductId); var total = orderRepository.GetProductTotalOrderedAmount(productInfo); if (total < productInfo.MinAmount) { if (!IsIncludingPartial) { continue; } partialIndicator = "(!)"; } } catch (Exception exception) { m_logger.ErrorException(exception); continue; } orderInfo.Items.Add(new CustomerOrderItem { Amount = order.Amount, Price = productInfo.Price, IsPartial = partialIndicator.Length > 0, Title = productInfo.Title }); } m_document.Dispatcher.Invoke(DispatcherPriority.Normal, new Action<object>(o => { var borderThick = new Thickness(1); var borderColor = Brushes.LightGray; var corders = (CustomerOrderInfo) o; m_document.Blocks.Add( new Paragraph(new Run(corders.Customer.GetFullName().ToUpper())) { FontSize = 16, FontWeight = FontWeights.Bold }); var table = new Table { CellSpacing = 3, FontSize = 12 }; const int numberOfColumns = 5; for (int x = 0; x < numberOfColumns; x++) { table.Columns.Add(new TableColumn()); table.Columns[x].Background = x % 2 == 0 ? Brushes.White : Brushes.WhiteSmoke; } table.Columns[0].Width = new GridLength(30); table.Columns[1].Width = new GridLength(400); table.Columns[2].Width = new GridLength(100); table.Columns[3].Width = new GridLength(60); table.Columns[4].Width = new GridLength(100); var rowGroup = new TableRowGroup(); table.RowGroups.Add(rowGroup); var row = new TableRow { FontWeight = FontWeights.Bold }; rowGroup.Rows.Add(row); #region Table title row.Cells.Add(new TableCell(new Paragraph(new Run("№"))) { TextAlignment = TextAlignment.Center, Padding = new Thickness(5), BorderThickness = borderThick, BorderBrush = borderColor }); row.Cells.Add(new TableCell(new Paragraph(new Run("Наименование"))) { TextAlignment = TextAlignment.Center, Padding = new Thickness(5), BorderThickness = borderThick, BorderBrush = borderColor }); row.Cells.Add(new TableCell(new Paragraph(new Run("Цена"))) { TextAlignment = TextAlignment.Center, Padding = new Thickness(5), BorderThickness = borderThick, BorderBrush = borderColor }); row.Cells.Add(new TableCell(new Paragraph(new Run("Кол-во"))) { TextAlignment = TextAlignment.Center, Padding = new Thickness(5), BorderThickness = borderThick, BorderBrush = borderColor }); row.Cells.Add(new TableCell(new Paragraph(new Run("Сумма"))) { TextAlignment = TextAlignment.Center, Padding = new Thickness(5), BorderThickness = borderThick, BorderBrush = borderColor }); #endregion var rowNum = 1; decimal summary = 0; foreach (var order in corders.Items) { summary += order.Total; row = new TableRow { Background = rowNum % 2 == 0 ? Brushes.WhiteSmoke : Brushes.White }; rowGroup.Rows.Add(row); row.Cells.Add(new TableCell(new Paragraph(new Run(rowNum.ToString()))) { TextAlignment = TextAlignment.Center, Padding = new Thickness(5), BorderThickness = borderThick, BorderBrush = borderColor }); row.Cells.Add(new TableCell(new Paragraph(new Run(order.Title))) { TextAlignment = TextAlignment.Left, Padding = new Thickness(5), BorderThickness = borderThick, BorderBrush = borderColor }); row.Cells.Add(new TableCell(new Paragraph(new Run(order.Price.ToString("C2")))) { TextAlignment = TextAlignment.Center, Padding = new Thickness(5), BorderThickness = borderThick, BorderBrush = borderColor }); row.Cells.Add(new TableCell(new Paragraph(new Run(order.Amount.ToString()))) { TextAlignment = TextAlignment.Center, Padding = new Thickness(5), BorderThickness = borderThick, BorderBrush = borderColor }); row.Cells.Add(new TableCell(new Paragraph(new Run(order.Total.ToString("C2")))) { TextAlignment = TextAlignment.Center, Padding = new Thickness(5), BorderThickness = borderThick, BorderBrush = borderColor }); rowNum++; } var commission = corders.Customer.GetCommissionInfo(); var comissionValue = summary * (commission.Rate / 100); var total = summary * (1 + (commission.Rate / 100)); var delivery = corders.Customer.GetDeliveryInfo(); var p = new Paragraph(new Run(String.Format("Сумма: {0}", summary.ToString("C2")))) { FontSize = 13, FontWeight = FontWeights.Bold }; p.Inlines.Add(new LineBreak()); p.Inlines.Add(new Run(String.Format("Сбор ({0}): {1:C2}", commission.Comment, comissionValue)) { FontSize = 13, FontWeight = FontWeights.Bold }); p.Inlines.Add(new LineBreak()); if (delivery != null && delivery.IsActive) { if ((delivery.IsConditional && delivery.MinimumOrderSummaryCondition > summary) || delivery.IsConditional == false) { total += delivery.Price; p.Inlines.Add(new Run(String.Format("Доставка: {0:C2}", delivery.Price)) { FontSize = 13, FontWeight = FontWeights.Bold }); p.Inlines.Add(new LineBreak()); } } p.Inlines.Add(new Run(String.Format("Итог: {0:C0}", total)) { FontSize = 13, FontWeight = FontWeights.Bold }); p.Inlines.Add(new LineBreak()); m_document.Blocks.Add(table); m_document.Blocks.Add(p); m_document.Tag = corders.Customer.GetFullName(); }), orderInfo); }