public Order ReadOrder(XElement xElement)
 {
     var element = xElement.Element("Заказ");
     if (element == null) return null;
     var orders = new Order
         {
             OrderNumber = element.Attribute("НомерЗаказа").Value,
             NameGarcon = element.Attribute("Официант").Value,
             NameHall = element.Attribute("Зал").Value,
             NameTable = element.Attribute("Стол").Value,
             NamberOfQuests = element.Attribute("КоличествоГостей").Value,
             Name = element.Attribute("НомерЗаказа").Value
         };
     OrderItem item = null;
     foreach (var p in element.Elements("СтрокаЗаказа"))
     {
         //Надо добавить блюдо, к нему модификаторы из меню,
         //а затем изменить их согласно ордера
         if (p.Attribute("Модификатор").Value == "Нет")
         {
             item = new OrderItem
                    {
                        Id = p.Attribute("ТоварИД").Value,
                        NumberLine = p.Attribute("НомерСтроки").Value,
                        Name = p.Attribute("Товар").Value,
                        Kolichestvo = p.Attribute("Количество").Value,
                        Predchek = p.Attribute("БылПредчек").Value,
                        BilaPechat = p.Attribute("БылаПечать").Value,
                        Price = p.Attribute("Цена").Value,
                        TagGuid = Guid.NewGuid().ToString(),
                        Modifiers =
                    };
             orders.AddComponent(item);
         }
         else
         {
             if (item != null) item.Modifiers.Add(
                     p.Attribute("ТоварИД").Value,
                     new Modifier()
                     {
                         Name = p.Attribute("Товар").Value,
                         Select = false
                     });
         }
     }
     return orders;
 }
 public Order ReadOrder(XElement xElement, FrmOrders frmOrders)
 {
     var element = xElement.Element("Заказ");
     if (element == null) return null;
     var orders = new Order
     {
         OrderNumber = element.Attribute("Номер").Value,
         OrderNumberId = element.Attribute("IdOrder").Value,
         NameGarcon = element.Attribute("Официант").Value,
         NameHall = element.Attribute("Зал").Value,
         NameTable = element.Attribute("Стол").Value,
         NamberOfQuests = element.Attribute("КоличествоГостей").Value,
         Name = element.Attribute("Номер").Value,
     };
     //OrderItem item = null;
     var countTagGuid = 1;
     foreach (var p in element.Elements("СтрокаЗаказа"))
     {
         //Смотрим Стиль
         var kolichestvo = p.Attribute("Количество").Value;
         var bilaPechat = p.Attribute("БылаПечать").Value;
         var productId = p.Attribute("ТоварИД").Value;
         string templateName;
         //Выводим через RecordSet только с количеством "1", поэтому добавим только один такой
         if (kolichestvo == "1" && bilaPechat == "0")
         {
             var flag = p.Attribute("Модификатор").Value != "";
             templateName = flag ? RecSets.MarkerOrder.POPUPORDERChecked + productId : RecSets.MarkerOrder.POPUPORDER + productId;
         }
         else
         {
             templateName = countTagGuid.ToString(CultureInfo.InvariantCulture);
             countTagGuid++;
         }
         string tagGuid;
         try
         {
             //todo оставить два id
             tagGuid = orders.FindIdTagGuid(templateName).Id;
             tagGuid = countTagGuid.ToString(CultureInfo.InvariantCulture);
             countTagGuid++;
         }
         catch (Exception)
         {
             tagGuid = templateName;
         }
         var modifiers = frmOrders.BuilModifiers(productId);
         if(modifiers == null)
         {
             Logger.Info("Ошибка получения модификаторов для Ид: {0}. Строка: {1}. Заказ: {2}",
                 productId, p.ToString(), xElement.ToString());
         }
         var itemOrders = new OrderItem
         {
             Id = productId,
             NumberLine = p.Attribute("НомерСтроки").Value,
             Name = p.Attribute("Товар").Value,
             Kolichestvo = kolichestvo,
             Predchek = p.Attribute("БылПредчек").Value,
             BilaPechat = bilaPechat,
             Price = p.Attribute("Цена").Value,
             TagGuid = tagGuid,
             //Modifiers = frmOrders.BuilModifiers(p.Attribute("ТоварИД").Value),
             Modifiers = modifiers,
             SumDiscaunt = p.Attribute("СуммаСкидки").Value,
             PercentDiscaunt = p.Attribute("ПроцентСкидки").Value
         };
         //orders.AddComponent(item);
         //todo добавлено для многочековых столов, теперь стол расчитан небывает
         if (itemOrders.Predchek == "1") frmOrders._dg.Calc = true;
         var stringModifiers = p.Attribute("Модификатор").Value;
         if (stringModifiers != "")
         {
             char[] delimiterChars = {','};
             var modifier = stringModifiers.Split(delimiterChars);
             foreach (var s in modifier)
             {
                 for (var md = 0; md < itemOrders.Modifiers.Count; md++)
                 {
                     var string1 = s.Replace(" ", "");
                     var string2 = itemOrders.Modifiers.ElementAt(md).Value.Name.Replace(" ", "");
                     if (string1 == string2)
                     {
                         var key = itemOrders.Modifiers.ElementAt(md).Key;
                         var mod = itemOrders.Modifiers[key];
                         mod.Select = true;
                         itemOrders.Modifiers.Remove(key);
                         itemOrders.Modifiers.Add(key, mod);
                     }
                 }
             }
         }
         orders.AddComponent(itemOrders);
     }
     return orders;
 }
 public OrderXmlParser(Order currentOrder)
 {
     CurrentOrder = currentOrder;
 }
 public Order ReadOrderOldModificators(XElement xElement, FrmOrders frmOrders)
 {
     var element = xElement.Element("Заказ");
     if (element == null) return null;
     var orders = new Order
     {
         OrderNumber = element.Attribute("Номер").Value,
         OrderNumberId = element.Attribute("IdOrder").Value,
         NameGarcon = element.Attribute("Официант").Value,
         NameHall = element.Attribute("Зал").Value,
         NameTable = element.Attribute("Стол").Value,
         NamberOfQuests = element.Attribute("КоличествоГостей").Value,
         Name = element.Attribute("Номер").Value,
     };
     OrderItem item = null;
     var countTagGuid = 1;
     foreach (var p in element.Elements("СтрокаЗаказа"))
     {
         //Надо добавить блюдо, к нему модификаторы из меню,
         //а затем изменить их согласно ордера
         if (p.Attribute("Модификатор").Value == "Нет")
         {
             //Смотрим Стиль
             var kolichestvo = p.Attribute("Количество").Value;
             var bilaPechat = p.Attribute("БылаПечать").Value;
             var productId = p.Attribute("ТоварИД").Value;
             string templateName;
             //Выводим через RecordSet только с количеством "1", поэтому добавим только один такой
             if (kolichestvo == "1" && bilaPechat == "0")
             {
                 bool flag;
                 //Проверим наличие выделенных модификаторов и добавим Стиль
                 try
                 {
                     flag = p.ElementsAfterSelf().First().Attribute("Модификатор").Value == "Да";
                 }
                 catch (Exception)
                 {
                     flag = false;
                 }
                 templateName = flag ? RecSets.MarkerOrder.POPUPORDERChecked + productId : RecSets.MarkerOrder.POPUPORDER + productId;
             }
             else
             {
                 templateName = countTagGuid.ToString(CultureInfo.InvariantCulture);
                 countTagGuid++;
             }
             string tagGuid;
             try
             {
                 //todo оставить два id
                 tagGuid = orders.FindIdTagGuid(templateName).Id;
                 tagGuid = countTagGuid.ToString(CultureInfo.InvariantCulture);
                 countTagGuid++;
             }
             catch (Exception)
             {
                 tagGuid = templateName;
             }
             var modifiers = frmOrders.BuilModifiers(productId);
             if (modifiers == null)
             {
                 Logger.Info("Ошибка получения модификаторов для Ид: {0}. Строка: {1}. Заказ: {2}",
                     productId, p.ToString(), xElement.ToString());
             }
             item = new OrderItem
             {
                 Id = productId,
                 NumberLine = p.Attribute("НомерСтроки").Value,
                 Name = p.Attribute("Товар").Value,
                 Kolichestvo = kolichestvo,
                 Predchek = p.Attribute("БылПредчек").Value,
                 BilaPechat = bilaPechat,
                 Price = p.Attribute("Цена").Value,
                 TagGuid = tagGuid,
                 //Modifiers = frmOrders.BuilModifiers(p.Attribute("ТоварИД").Value),
                 Modifiers = modifiers,
                 SumDiscaunt = p.Attribute("СуммаСкидки").Value,
                 PercentDiscaunt = p.Attribute("ПроцентСкидки").Value
             };
             orders.AddComponent(item);
             //todo добавлено для многочековых столов, теперь стол расчитан небывает
             if (item.Predchek == "1") frmOrders._dg.Calc = true;
         }
         //Это модификатор. Изменяем модификаторы в CurrentOrder
         else
         {
             if (item == null) continue;
             try
             {
                 var str = item.Modifiers[p.Attribute("ТоварИД").Value];
                 item.Modifiers.Remove(p.Attribute("ТоварИД").Value);
                 str.Select = true;
                 item.Modifiers.Add(p.Attribute("ТоварИД").Value, str);
             }
             catch (Exception)
             {
                 Logger.Info("ERROR!! МОДИФИКАТОР ОТСУТСТВУЕТ блюдо {0}, модификатор {1}, Ид модификатора {2}",
                     item.Name, p.Attribute("Товар").Value, p.Attribute("ТоварИД").Value);
             }
         }
     }
     return orders;
 }