public void RehydrateOrderItem(OrderItemModel model)
        {
            currentOrderItemId     = model.Id;
            quantityButton.Enabled = false;

            positions.Clear();
            components.Clear();

            variationId = model.VariationId;

            FragmentRoute route = svc.SelectVariation(model.VariationId);

            if (route == FragmentRoute.Components)
            {
                foreach (OrderItemComponentModel component in model.ComponentModels)
                {
                    components.Add(component.ComponentId, component);

                    if (component.HasComponents)
                    {
                        editedComponents.Add(component);
                    }
                }

                positions.Add(new VariationPosition()
                {
                    PosType = PositionType.Components, Id = model.VariationId
                });
            }

            VariationModel newModel = new VariationModel(model.VariationId);
            int            parentId = newModel.ParentId;

            while (newModel.ParentId != 0)
            {
                positions.Insert(0, new VariationPosition()
                {
                    PosType = PositionType.Variations, Id = newModel.ParentId
                });
                newModel = new VariationModel(newModel.ParentId);
            }

            thisPosition = positions.Count - 1;

            if (route == FragmentRoute.Components)
            {
                DisplayComponents(model.VariationId, true, ComponentListMode.Variation);
            }
            else
            {
                confirmButton.Visibility = ViewStates.Visible;
                DisplayVariations(parentId);
            }

            currentDiscountId = model.DiscountId;

            DiscountModel discountModel = svc.GetDiscountModel(currentDiscountId);

            discountText.Text = discountModel.Description;

            currentInOutId = model.InOutStatus;

            if (currentInOutId == 1)
            {
                inOutText.Text = "Eat In";
            }
            else
            {
                inOutText.Text = "Take Away";
            }

            Show();
        }
        private void VariationsList_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
        {
            if (container is CurrentOrderLayout)
            {
                if (positions.Count - 1 > thisPosition)
                {
                    if ((int)e.Id != positions[thisPosition + 1].Id)
                    {
                        orderItemOverriden = true;
                        positions.RemoveRange(thisPosition + 1, positions.Count - thisPosition - 1);

                        components.Clear();
                    }
                    else
                    {
                        ++thisPosition;

                        if (positions[thisPosition].PosType == PositionType.Variations)
                        {
                            if (currentOrderItemId != 0 && positions.Count - 1 == thisPosition && !orderItemOverriden)
                            {
                                confirmButton.Visibility = ViewStates.Visible;
                            }
                            else
                            {
                                confirmButton.Visibility = ViewStates.Invisible;
                            }

                            DisplayVariations((int)e.Id);
                        }
                        else
                        {
                            DisplayComponents((int)e.Id, true, ComponentListMode.Variation);
                        }

                        return;
                    }
                }
                else if (positions.Count - 1 == thisPosition && (int)e.Id != positions[thisPosition].Id)
                {
                    orderItemOverriden       = true;
                    confirmButton.Visibility = ViewStates.Invisible;
                }

                FragmentRoute thisRoute = svc.SelectVariation((int)e.Id);

                switch (thisRoute)
                {
                default:
                {
                    CurrentOrderLayout thisLayout    = (CurrentOrderLayout)container;
                    OrderFragment      orderFragment = thisLayout.OrderFragment;

                    OrderItemModel model = GetOrderItemModel((int)e.Id, orderFragment);

                    UpdateOrder(orderFragment, model, false);

                    Reset();

                    break;
                }

                case FragmentRoute.Variations:
                {
                    ++thisPosition;
                    DisplayVariations((int)e.Id);

                    positions.Add(new VariationPosition()
                        {
                            PosType = PositionType.Variations, Id = (int)e.Id
                        });

                    break;
                }

                case FragmentRoute.Components:
                {
                    ++thisPosition;
                    DisplayComponents((int)e.Id, false, ComponentListMode.Variation);

                    positions.Add(new VariationPosition()
                        {
                            PosType = PositionType.Components, Id = (int)e.Id
                        });

                    break;
                }
                }
            }
        }