public OrderEditWindow(Window owner, CustomerListViewItem customer, Album album) { m_sourceListViewItem = customer; m_customer = customer.Source; m_customerItem = customer; m_album = album; m_settings = RegistrySettings.GetInstance(); m_orders = new List<Order>(0); InitializeComponent(); Owner = owner; KeyUp += OnKeyUp; FillOrdersTable(); }
private void ShowAlbumCutomersDetails(Album a) { #region приготовить view var view = lvDetails.View as GridView; lvDetails.Items.Clear(); view.Columns.Clear(); view.Columns.Add(new GridViewColumn { Width = 45, Header = "Код", DisplayMemberBinding = new Binding("Id") }); view.Columns.Add(new GridViewColumn { Width = 250, Header = "Имя", DisplayMemberBinding = new Binding("FullName"), }); view.Columns.Add(new GridViewColumn { Width = 100, Header = "Комиссия", DisplayMemberBinding = new Binding("AccountType"), }); // view.Columns.Add(new GridViewColumn // { // Width = 110, // Header = "Позиций в заказе", // DisplayMemberBinding = new Binding("OrderedItemsCount"), // }); view.Columns.Add(new GridViewColumn { Width = 110, Header = "Сумма заказа", DisplayMemberBinding = new Binding("CleanSum") { Converter = s_currencyVisualiser }, }); view.Columns.Add(new GridViewColumn { Width = 110, Header = "Комиссия", DisplayMemberBinding = new Binding("CommissionSum") { Converter = s_currencyVisualiser }, }); view.Columns.Add(new GridViewColumn { Width = 110, Header = "Итог", DisplayMemberBinding = new Binding("TotalSum") { Converter = s_roundedCurrencyVisualiser }, }); view.Columns.Add(new GridViewColumn { Width = 90, Header = "Статус", DisplayMemberBinding = new Binding("Status") { Converter = s_currencyVisualiser }, }); #endregion var bgw = new BackgroundWorker {WorkerReportsProgress = true}; bgw.ProgressChanged += (sender, args) => { if (m_waitingWindow != null) { m_waitingWindow.SetState(args.UserState.ToString()); } }; bgw.DoWork += (sender, args) => { var worker = sender as BackgroundWorker; var album = args.Argument as Album; var orderRepository = DbManger.GetInstance().GetOrderRepository(); var customersRepository = DbManger.GetInstance().GetCustomersRepository(); var payments = DbManger.GetInstance().GetPaymentsRepository(); List<Order> albumOrders = null; worker.ReportProgress(0, "Получение заказов для альбома"); try { albumOrders = orderRepository.GetOrdersForAlbum(album); } catch (Exception exception) { m_logger.ErrorException(exception); throw new BgWorkerException("Не удалось получить заказы альбома из БД."); } var result = new List<CustomerListViewItem>(); foreach (IGrouping<int, Order> ordersGroup in albumOrders.GroupBy(order => order.CustomerId)) { Customer custObj; try { worker.ReportProgress(0, "Получение данных о заказчике."); custObj = customersRepository.GetById(ordersGroup.Key); } catch (Exception exception) { m_logger.ErrorException(exception); throw new BgWorkerException("Ошибка получения данных из БД"); } if (custObj == null) { m_logger.ErrorFormat( "Обнаружено нарушение целостности БД!. Для заказа '{0}' не удалось найти покупателя", ordersGroup.Key); continue; } if (custObj.GetCommissionInfo() == null) { throw new BgWorkerException(String.Format("Ошибка: Для покупателя '{0}' неверно установлена ставка комиссии.", custObj.GetFullName())); } // создание объекта записи в таблице var clvi = new CustomerListViewItem(custObj);// {OrderedItemsCount = 0}; foreach (Order order in ordersGroup) { Product productInfo = null; long totalProductOrders; worker.ReportProgress(0, "Получение информации о продукте"); try { productInfo = order.GetOrderedProduct(); // посчитать сколько всего заказано этого товара totalProductOrders = orderRepository.GetProductTotalOrderedAmount(productInfo); } catch (Exception exception) { m_logger.ErrorException(exception); continue; } // добавляем к сумме заказа стоимость очередной позиции (кол-во на стоимость единицы) clvi.CleanSum += order.Amount * productInfo.Price; clvi.HasPartialPosition = (totalProductOrders < productInfo.MinAmount && totalProductOrders > 0) || (totalProductOrders == 0); } if (clvi.CleanSum == 0) continue; payments.AllForCustomerInAlbum(custObj, SelectedAlbum) .ForEach(payment => clvi.Payment += payment.Amount); result.Add(clvi); } result.Sort((x, y) => String.Compare(x.FullName, y.FullName, StringComparison.CurrentCultureIgnoreCase)); args.Result = result; }; bgw.RunWorkerCompleted += (sender, args) => { var worker = sender as BackgroundWorker; if (worker != null) { lock (m_workersPool) { m_workersPool.Remove(worker); } } if (m_waitingWindow != null) { m_waitingWindow.Close(); m_waitingWindow = null; } if (args.Cancelled) return; if (args.Error != null) { this.ShowError(args.Error.Message); return; } var list = args.Result as List<CustomerListViewItem>; if (list != null) { foreach (var clvi in list) { lvDetails.Items.Add(clvi); } } }; lock (m_workersPool) { m_workersPool.Add(bgw); } bgw.RunWorkerAsync(a); m_waitingWindow = new WaitingWindow(this); m_waitingWindow.ShowDialog(); }