/*Заносим обычное блюдо, если его нет или оно уже БылаПечать!="0"*/ public bool AddToOrder(OrderItem item) { if (item.Modifiers.Any()) { AddComponent(item); return true; } if (FindId(item.Id) == null) { AddComponent(item); return true; } var flag = true; foreach (var component in _components) { var d = (OrderItem)component; if (d.BilaPechat == "0" && d.Id == item.Id) flag = false; } if (flag) { AddComponent(item); return true; } return false; }
//При нажатии в меню добавляем блюдо в чек private void AddLineToOrderScreen(OrderItem line, bool print, bool addDish, bool children) { ListItem pointer; var flag = false; var marker = GetMarker(print,children); //Выходим, если стол красный "CALCULATE" if (_dg.Calc && addDish) { MessageBox.Show(this.Device, "Этот стол рассчитан!", MessageBoxButtons.OKAY, null, null); return; } //Если Reload, то сюда не попадаем //OrderXmlParser занес ордер в CurrentOrder //TagGuid = Guid.NewGuid().ToString() if (addDish) { string idD; var currentOrder = (ORDERMAN_Lib.Models.Order)_dg.CurrentOrder.Children().ElementAt(0); try { //todo оставить два idD Если первый, то будем использовать родной Ид idD = currentOrder.FindIdTagGuid(marker + line.Id).Id; idD = line.TagGuid; flag = true; } catch (Exception) { idD = line.Id;//Попадаем если такого блюда еще нет, используем родной Id } _dg.TestidD = idD; var dictionary = BuilModifiers(line.Id); var order = new OrderItem { Kolichestvo = line.Kolichestvo, Name = line.Name, Id = line.Id, TagGuid = marker + idD,//line.TagGuid, BilaPechat = line.BilaPechat, Predchek = line.Predchek, Price = _dg.Menu.FindId(line.Id).Price, Modifiers = dictionary, PercentDiscaunt = line.PercentDiscaunt, SumDiscaunt = line.SumDiscaunt }; //Дубль без модификаторов недобовляем if(!currentOrder.AddToOrder(order)) return; //false - не добавился //Через рекорд сэты, так-как добавляются по одному за одно нажатие _lstOrders.Group.Append(this.RecordSets[marker + order.Id]); pointer = _lstOrders.Group.Last(); if(flag) pointer.Tag = order.TagGuid; //Смотрим обязательные модификаторы if (SeeRequiredModificators(GetModifikators(line.Id))) { PopUpChildren(pointer.Tag.ToString(), pointer); } return; } /*Вывод из счета проверим возможность из рекорд сета, лезит один раз*/ //var ord = (IPublicComposite)_dg.CurrentOrder.Children().ElementAt(0); //var element = (OrderItem)ord.FindId(line.Id); //Если есть выделенные модификаторы, будем красить var modifiers = (IModifiers)_dg.CurrentOrder.FindModifiersTagGuid(line.TagGuid); var flagChecked = false; if (modifiers != null) { _modifiers = modifiers.GetModifiers(); if(_modifiers != null) flagChecked = _modifiers.Any(q => q.Value.Select); } RecordSet record; if (flagChecked && marker != RecSets.MarkerOrder.PRINTOFF.ToString()) { record = marker == RecSets.MarkerOrder.POPUPORDER.ToString() ? this.RecordSets[RecSets.MarkerOrder.POPUPORDERChecked.ToString() + line.Id] : this.RecordSets[RecSets.MarkerOrder.PRINTOFFPOPUPChecked.ToString() + line.Id]; } else record = this.RecordSets[marker + line.Id]; //todo Если без модификаторов черный/зеленый/красный //PRINTON - зеленый (счетчик черный?) без gesture //Default черный с gesture //PRINTOFF красный if (_modifiers == null) { record = this.RecordSets[RecSets.MarkerOrder.Default.ToString() + line.Id]; } string name; if (!_recDictionary.TryGetValue(record.Name, out name) && line.Kolichestvo == "1") { _recDictionary.Add(record.Name, "so-so"); _lstOrders.Group.Append(record); return; } //Динамически из счета var item = new ListItem(_lstOrders.Group.Definition); item.Cells[0].Value = line.Kolichestvo; //Получим номер для вывода через StringTables (в line.Name - текстовое имя, если отказаться от таблиц) item.Cells[1].Value = this.RecordSets[marker + line.Id].First().Cells[1].Value;//line.Name; item.Tag = Guid.NewGuid().ToString(); //line.TagGuid; //Засовываем в Tag старый Ид или новое значение line.TagGuid = item.Tag.ToString(); if (flagChecked && marker != RecSets.MarkerOrder.PRINTOFF.ToString()) { item.TemplateName = marker == RecSets.MarkerOrder.POPUPORDER.ToString() ? RecSets.MarkerOrder.POPUPORDERChecked.ToString() : RecSets.MarkerOrder.PRINTOFFPOPUPChecked.ToString(); } else item.TemplateName = marker; //todo if (_modifiers == null) item.TemplateName = RecSets.MarkerOrder.Default.ToString(); _lstOrders.Group.Add(item); }
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 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; }