private void Apply_Click(object sender, RoutedEventArgs e)
        {
            // Проверка заполнения полей
            if (BalanceProducts.SelectedIndex == -1 || PartnersBox.SelectedIndex == -1 || this.AmountBox.Text == "")
            {
                this.Warning.Visibility = Visibility.Visible;
                return;
            }

            int amount   = Int32.Parse(this.AmountBox.Text);
            var product  = BalanceProducts.SelectedItem.ToString();
            var supplier = PartnersBox.SelectedItem.ToString();

            BalanceChange import = new BalanceChange(product, supplier, amount, this.ChangeType);

            // обновляем остаток на складе при наличии места
            if (!ChangeBalance(import))
            {
                return;
            }

            if (this.ImportId != -1)
            {
                EditNode(import);
            }
            else
            {
                AddNode(import);
            }

            this.DialogResult = true;
        }
        private void EditNode(BalanceChange import)
        {
            var xmlDoc = XDocument.Load(this.filename);

            // Редактируем выбранный элемент
            XElement node = xmlDoc.Root.Elements().ElementAt(this.ImportId);

            node.Element("Наименование").Value = import.Product;
            node.Element("Поставщик").Value    = import.Supplier;
            node.Element("Клиент").Value       = import.Supplier;
            node.Element("Кол-во").Value       = import.Amount.ToString();

            xmlDoc.Save(this.filename);
        }
        private bool ChangeBalance(BalanceChange change)
        {
            var xmlDoc = XDocument.Load("Data/BalanceList.xml");

            // Редактируем выбранный элемент
            foreach (var node in xmlDoc.Root.Elements())
            {
                if (node.Element("Наименование").Value == change.Product)
                {
                    int balanceAmount   = Int32.Parse(node.Element("Кол-во").Value);
                    int balanceCapacity = Int32.Parse(node.Element("Вместимость").Value);
                    // При загрузке
                    if (change.Type == 1)
                    {
                        if (change.Amount + balanceAmount <= balanceCapacity)
                        {
                            node.Element("Кол-во").Value = (change.Amount + Int32.Parse(node.Element("Кол-во").Value)).ToString();
                        }
                        else
                        {
                            MessageBox.Show("Лимит склада по товару превышен");
                            return(false);
                        }
                    }
                    // При отгрузке
                    else
                    {
                        if (balanceAmount - change.Amount >= 0)
                        {
                            node.Element("Кол-во").Value = (Int32.Parse(node.Element("Кол-во").Value) - change.Amount).ToString();
                        }
                        else
                        {
                            MessageBox.Show("На складе недостаточно товара");
                            return(false);
                        }
                    }
                }
            }

            xmlDoc.Save("Data/BalanceList.xml");
            return(true);
        }
        private void AddNode(BalanceChange import)
        {
            XmlDocument xDoc = new XmlDocument();

            xDoc.Load(this.filename);
            XmlElement xRoot = xDoc.DocumentElement;

            // создаем новый элемент
            XmlElement prodElem = xDoc.CreateElement("Товар");
            XmlElement nameElem = xDoc.CreateElement("Наименование");
            XmlElement supplierElem;

            if (import.Type == 1)
            {
                supplierElem = xDoc.CreateElement("Поставщик");
            }
            else
            {
                supplierElem = xDoc.CreateElement("Клиент");
            }
            XmlElement amountElem = xDoc.CreateElement("Кол-во");

            // создаем текстовые значения для элементов
            XmlText nameText     = xDoc.CreateTextNode(import.Product);
            XmlText supplierText = xDoc.CreateTextNode(import.Supplier);
            XmlText amountText   = xDoc.CreateTextNode(import.Amount.ToString());

            //добавляем текст в узлы
            nameElem.AppendChild(nameText);
            supplierElem.AppendChild(supplierText);
            amountElem.AppendChild(amountText);

            // добавляем дочерние узлы
            prodElem.AppendChild(nameElem);
            prodElem.AppendChild(supplierElem);
            prodElem.AppendChild(amountElem);
            xRoot.AppendChild(prodElem);
            xDoc.Save(this.filename);
        }