コード例 #1
0
        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();
        }
コード例 #2
0
        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();
        }