private KitchenOrderModel GetKitchenTableModel(Int32 tableId)
        {
            KitchenOrderModel model = new KitchenOrderModel();

            Services.Item   item, itemMenu;
            List <LineItem> subItems;
            CheckPrint      orderModel;

            try {
                model.Table      = _orderService.GetTable(tableId);
                model.TableOrder = _orderService.GetTableOrder(tableId);
                model.Table.Name = model.Table.Name;

                if (model.TableOrder != null && model.TableOrder.Checks != null)
                {
                    model.Checks = new List <CheckPrint>();
                    IEnumerable <Services.Check> checks = model.TableOrder.Checks.Where(m => m.Status == (Int32)CommonUnit.CheckStatus.Ordered);
                    foreach (Services.Check checkItem in checks)
                    {
                        orderModel       = new CheckPrint();
                        orderModel.Check = checkItem;
                        orderModel.Items = new List <LineItem>();

                        // If no printers - webSocket not running, or no connection to webSocket
                        if (SessionData.printers != null)
                        {
                            orderModel.PrinterPOSWidth = SessionData.printerPOSWidth;
                        }

                        List <Services.ChecksMenu> menus = _orderService.GetMenuItems(checkItem.id);
                        List <ChecksMenuProduct>   products;

                        foreach (Services.ChecksMenu menuItem in menus)
                        {
                            itemMenu = _itemService.GetItem(menuItem.MenuId);
                            products = _orderService.GetProducts(menuItem.id);
                            subItems = new List <LineItem>();
                            if (products.Any())
                            {
                                foreach (Services.ChecksMenuProduct productItem in products)
                                {
                                    foreach (Services.ChecksMenuProductItem associatedItem in productItem.ChecksMenuProductItems)
                                    {
                                        item = _itemService.GetItemProductAssosiationsById(associatedItem.ItemId);
                                        if (item != null)
                                        {
                                            subItems.Add(new LineItem()
                                            {
                                                Description = item.Name
                                            });
                                        }
                                    }
                                }
                            }
                            orderModel.Items.Add(new LineItem()
                            {
                                Description = itemMenu.Name, id = itemMenu.id, Alerted = menuItem.Alerts.Any(m => m.CheckMenuId == menuItem.id), CheckMenuId = menuItem.id, SubItems = subItems
                            });
                        }
                        model.Checks.Add(orderModel);
                    }
                }
                return(model);
            }
            catch (Exception ex) {
                base.Log(ex);
            }
            finally {
            }
            return(null);
        }
        private CheckPrint GetCheckPrintModel(Int32 checkId, String type, Int32 split, Decimal adjustment)
        {
            Services.Item   item, itemMenu;
            CheckPrint      model;
            Decimal         tax = SessionData.customer.Tax.HasValue ? (Decimal)SessionData.customer.Tax / 100 : 0;
            Decimal         price = 0, menuPrice = 0;
            List <LineItem> subItems;

            try {
                model             = new CheckPrint();
                model.Items       = new List <LineItem>();
                model.Check       = _orderService.GetCheck(checkId);
                model.CreatedDate = model.Check.DateCreated;

                // If no printers - webSocket not running, or no connection to webSocket
                if (SessionData.printers != null)
                {
                    model.PrinterPOSWidth = SessionData.printerPOSWidth;
                }

                List <Services.ChecksMenu> menus = _orderService.GetMenuItems(checkId);
                List <ChecksMenuProduct>   products;
                model.Summary = 0;
                model.Split   = split;
                foreach (Services.ChecksMenu menuItem in menus)
                {
                    itemMenu       = _itemService.GetItem(menuItem.MenuId);
                    menuPrice      = (Decimal)itemMenu.ItemPrices.OrderByDescending(m => m.DateCreated).Take(1).Select(m => m.Price).FirstOrDefault();
                    model.Summary += menuPrice;
                    products       = _orderService.GetProducts(menuItem.id);
                    subItems       = new List <LineItem>();
                    foreach (Services.ChecksMenuProduct productItem in products)
                    {
                        foreach (Services.ChecksMenuProductItem associatedItem in productItem.ChecksMenuProductItems)
                        {
                            item = _itemService.GetItemProductAssosiationsById(associatedItem.ItemId);
                            if (item != null)
                            {
                                price          = (Decimal)item.ItemPrices.OrderByDescending(m => m.DateCreated).Take(1).Select(m => m.Price).FirstOrDefault();
                                model.Summary += price;
                                subItems.Add(new LineItem()
                                {
                                    Description = item.Name, Price = price, id = item.id
                                });
                            }
                        }
                    }
                    model.Items.Add(new LineItem()
                    {
                        Description = itemMenu.Name, Price = menuPrice, id = itemMenu.id, SubItems = subItems
                    });
                }

                model.TaxPercent = 0;
                if (EnumHelper <CommonUnit.CheckType> .Parse(type) == CommonUnit.CheckType.Guest)
                {
                    model.TaxPercent = tax;
                }
                model.Tax = Math.Round(model.Summary * model.TaxPercent, 2);

                model.AdjustmentPercent = adjustment / 100;
                model.Adjustment        = Math.Round(model.Summary * model.AdjustmentPercent, 2);
                model.Subtotal          = model.Summary + model.Adjustment;
                model.Total             = Math.Round(model.Summary + model.Tax + model.Adjustment, 2);
                model.SplitValues       = Utility.SplitAmount(model.Total, model.Split);
            }
            catch (Exception ex) {
                base.Log(ex);
                return(null);
            }
            finally {
            }
            return(model);
        }