private void ConfirmButton_Click(object sender, EventArgs e)
        {
            if (container is CurrentOrderLayout)
            {
                CurrentOrderLayout thisLayout    = (CurrentOrderLayout)container;
                OrderFragment      orderFragment = thisLayout.OrderFragment;

                OrderItemModel model = GetOrderItemModel(variationId, orderFragment);

                UpdateOrder(orderFragment, model, true);

                Reset();
            }
        }
        private void UpdateOrder(OrderFragment orderFragment, OrderItemModel model, bool addComponents)
        {
            if (addComponents)
            {
                foreach (OrderItemComponentModel componentModel in components.Values)
                {
                    model.AddComponentModel(componentModel);
                }
            }

            if (currentOrderItemId == 0)
            {
                for (int i = 0; i < currentQuantity; i++)
                {
                    OrderItemModel newModel = model.Clone();

                    if (i != 0)
                    {
                        newModel.Id = newOrderItemId++;
                    }

                    foreach (OrderItemComponentModel componentModel in newModel.ComponentModels)
                    {
                        if (i == 0)
                        {
                            break;
                        }

                        componentModel.Id = newOrderItemComponentId++;

                        foreach (OrderItemComponentComponentModel subComponent in componentModel.Components)
                        {
                            subComponent.ParentId = componentModel.Id;
                        }
                    }

                    orderFragment.AddOrderItem(newModel);
                    orderFragment.AddOrderItemModel(newModel);
                }
            }
            else
            {
                orderFragment.UnlockOrderItem();
                orderFragment.UpdateOrderItem(model);
            }
        }
        private OrderItemModel GetOrderItemModel(int variationId, OrderFragment orderFragment)
        {
            int orderId = orderFragment.CurrentOrderId;

            int id;

            if (currentOrderItemId == 0)
            {
                //id = svc.CreateNewOrderItem(orderId, variationId, currentInOutId, currentDiscountId);
                id = newOrderItemId++;
            }
            else
            {
                id = currentOrderItemId;
            }

            OrderItemModel model = new OrderItemModel(id, orderId, variationId, currentInOutId, currentDiscountId, State.None);

            return(model);
        }
        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;
                }
                }
            }
        }