private void ArrangementListView_ItemSelected(object sender, SelectedItemChangedEventArgs e)
        {
            ListView lv = sender as ListView;

            if (lv == null || lv.SelectedItem == null)
            {
                return;
            }

            GetSimpleArrangementResponse item = lv.SelectedItem as GetSimpleArrangementResponse;

            //call GetArrangementsById() and populate form
            ((App)App.Current).GetArrangement(item.Arrangement.ArrangementId).ContinueWith(a => SelectedArrangementLoaded(lv, item, a.Result));
        }
        private void SelectedArrangementLoaded(ListView lv, GetSimpleArrangementResponse item, GetArrangementResponse response)
        {
            Device.BeginInvokeOnMainThread(() =>
            {
                Name.Text = response.Arrangement.ArrangementName;

                Location.Text = response.Arrangement.LocationName;

                SetPickerSelection(Designer, item.Arrangement.DesignerName);

                //fix these next 2
                Style.SelectedIndex = item.Arrangement._180or360 - 1;

                Container.SelectedIndex = item.Arrangement.Container - 1;

                //if this is a customer container, there may be a string "label" value
                //this won't be used in a "save arrangement" scenario, but would be a factor possibly
                //when this page is used to create an arrangement "on the fly" for a work order
                //where the arrangement in question uses a customer's container AND
                //that container has a "label" value.

                //CustomerContainerLabelEntry.Text = item.Arrangement.CustomerContainerLabel;

                arrangementList.Add(item);

                arrangementInventoryList = response.ArrangementList;

                //arrangementInventoryListOC.Clear();

                foreach (ArrangementInventoryItemDTO a in arrangementInventoryList)
                {
                    //arrangementInventoryListOC.Add(a);
                }

                //ArrangementItemsListView.ItemsSource = arrangementInventoryListOC;
                lv.SelectedItem = null;

                TabParent.LoadArrangmentImages(response.Images);
            });
        }
        public void OnSaveArrangementsClicked(object sender, EventArgs e)
        {
            try
            {
                string validationMessage = String.Empty;

                long arrangementId = 0;  //(long)((Button)sender).CommandParameter;

                if (!ValidateArrangement(ref validationMessage))
                {
                    DisplayAlert("Error", validationMessage, "Cancel");
                    return;
                }

                if (TabParent.ForWorkOrder)
                {
                    //get quantities from ArrangementItemsListView ItemsSource

                    AddArrangementRequest request = new AddArrangementRequest();
                    request.Arrangement = new ArrangementDTO();

                    request.Arrangement.ArrangementId = TabParent.CurrentArrangement != null ? TabParent.CurrentArrangement.Arrangement.ArrangementId : 0;

                    request.Arrangement.ArrangementName     = Name.Text;
                    request.Arrangement.DesignerName        = Designer.SelectedItem != null ? ((KeyValuePair <long, string>)Designer.SelectedItem).Value : String.Empty;
                    request.Arrangement._180or360           = Style.SelectedItem != null ? (int)((KeyValuePair <long, string>)Style.SelectedItem).Key : 1;
                    request.Arrangement.Container           = Container.SelectedItem != null ? (int)((KeyValuePair <long, string>)Style.SelectedItem).Key : 1; //1 = new container (db default)
                    request.Arrangement.CustomerContainerId = customerContainerId;
                    request.Arrangement.LocationName        = Location.Text;
                    request.Arrangement.UpdateDate          = DateTime.Now;
                    request.Arrangement.IsGift      = GiftCheckBox.IsChecked ? 1 : 0;
                    request.Arrangement.GiftMessage = GiftMessage.Text;

                    Random r = new Random();
                    long   tempArrangementId = r.Next(1, 100);

                    foreach (ArrangementInventoryItemDTO dto in arrangementInventoryList)
                    {
                        if (dto.ArrangementId != 0)
                        {
                            arrangementId = dto.ArrangementId;
                            break;
                        }

                        WorkOrderViewModel wovm = null;

                        if (((ObservableCollection <WorkOrderViewModel>)ArrangementItemsListView.ItemsSource).Where(a => a.InventoryId == dto.InventoryId).Any())
                        {
                            wovm         = ((ObservableCollection <WorkOrderViewModel>)ArrangementItemsListView.ItemsSource).Where(a => a.InventoryId == dto.InventoryId).First();
                            dto.Quantity = wovm.Quantity;
                        }
                    }

                    request.ArrangementInventory = arrangementInventoryList;

                    foreach (NotInInventoryDTO dto in notInInventoryList)
                    {
                        //group them for the work order
                        if (!dto.ArrangementId.HasValue || dto.ArrangementId == 0)
                        {
                            dto.ArrangementId = tempArrangementId;
                        }

                        WorkOrderViewModel wovm = null;

                        if (((ObservableCollection <WorkOrderViewModel>)ArrangementItemsListView.ItemsSource).Where(a => a.NotInInventoryId == dto.NotInInventoryId).Any())
                        {
                            wovm = ((ObservableCollection <WorkOrderViewModel>)ArrangementItemsListView.ItemsSource).Where(a => a.NotInInventoryId == dto.NotInInventoryId).First();
                            dto.NotInInventoryQuantity = wovm.Quantity;
                        }
                    }

                    request.NotInInventory = notInInventoryList;

                    request.Inventory = new InventoryDTO()
                    {
                        InventoryName       = String.IsNullOrEmpty(Name.Text) ? "Arrangement_" + Convert.ToString(tempArrangementId) : Name.Text,
                        InventoryTypeId     = 5,
                        ServiceCodeId       = 365,
                        NotifyWhenLowAmount = 0,
                        Quantity            = 1
                    };

                    MessagingCenter.Send <AddArrangementRequest>(request, "AddArrangementToWorkOrder");

                    if (!PopToPage("TabbedWorkOrderPage"))
                    {
                        Navigation.PopAsync();
                    }

                    return;
                }

                if (arrangementInventoryList.Count > 0)
                {
                    foreach (ArrangementInventoryItemDTO dto in arrangementInventoryList)
                    {
                        if (dto.ArrangementId != 0)
                        {
                            arrangementId = dto.ArrangementId;
                            break;
                        }

                        WorkOrderViewModel wovm = null;

                        if (((ObservableCollection <WorkOrderViewModel>)ArrangementItemsListView.ItemsSource).Where(a => a.InventoryId == dto.InventoryId).Any())
                        {
                            dto.Quantity = wovm.Quantity;
                        }
                    }

                    if (arrangementId == 0)
                    {
                        AddArrangementRequest request = new AddArrangementRequest();
                        request.Arrangement = new ArrangementDTO();
                        request.Arrangement.ArrangementName     = Name.Text;
                        request.Arrangement._180or360           = (int)((KeyValuePair <long, string>)Style.SelectedItem).Key;
                        request.Arrangement.Container           = (int)((KeyValuePair <long, string>)Container.SelectedItem).Key;
                        request.Arrangement.CustomerContainerId = null;
                        request.Arrangement.DesignerName        = ((KeyValuePair <long, string>)Designer.SelectedItem).Value;
                        request.Arrangement.LocationName        = Location.Text;
                        request.Arrangement.IsGift      = GiftCheckBox.IsChecked ? 1 : 0;
                        request.Arrangement.GiftMessage = GiftMessage.Text;

                        request.Arrangement.UpdateDate = DateTime.Now;
                        request.ArrangementInventory   = arrangementInventoryList.Where(a => a.InventoryId != 0).ToList(); // "Not In Inventory" items may have been added to the display list;

                        request.Inventory = new InventoryDTO()
                        {
                            InventoryName   = Name.Text,
                            InventoryTypeId = 5,
                        };

                        request.NotInInventory       = notInInventoryList;
                        request.ArrangementInventory = arrangementInventoryList.Where(a => a.InventoryId != 0).ToList();

                        arrangementId = ((App)App.Current).AddArrangement(request);

                        if (arrangementId > 0)
                        {
                            List <EOImgData> imageData = ((App)App.Current).GetImageData();

                            if (imageData.Count > 0)
                            {
                                foreach (EOImgData img in imageData)
                                {
                                    AddArrangementImageRequest imgRequest = new AddArrangementImageRequest()
                                    {
                                        ArrangementId = arrangementId,
                                        Image         = img.imgData
                                    };

                                    ((App)App.Current).AddArrangementImage(imgRequest);
                                }
                            }

                            DisplayAlert("Success", "New arrangement saved!", "OK");
                            ClearArrangements();
                        }
                        else
                        {
                            DisplayAlert("Error", "Problem saving arrangement", "OK");
                        }
                    }
                    else
                    {
                        GetSimpleArrangementResponse simpleArrangement = arrangementList.Where(a => a.Arrangement.ArrangementId == arrangementId).FirstOrDefault();

                        AddArrangementRequest request = new AddArrangementRequest();
                        request.Arrangement = new ArrangementDTO();
                        request.Arrangement.ArrangementId       = arrangementId;
                        request.Arrangement.ArrangementName     = Name.Text;
                        request.Arrangement._180or360           = (int)((KeyValuePair <long, string>)Style.SelectedItem).Key;
                        request.Arrangement.Container           = (int)((KeyValuePair <long, string>)Container.SelectedItem).Key;
                        request.Arrangement.CustomerContainerId = null;
                        request.Arrangement.DesignerName        = ((KeyValuePair <long, string>)Designer.SelectedItem).Value;
                        request.Arrangement.LocationName        = Location.Text;
                        request.Arrangement.UpdateDate          = DateTime.Now;
                        request.Arrangement.IsGift      = GiftCheckBox.IsChecked ? 1 : 0;
                        request.Arrangement.GiftMessage = GiftMessage.Text;

                        request.Inventory = simpleArrangement.Inventory;

                        request.ArrangementInventory = arrangementInventoryList;

                        request.NotInInventory = notInInventoryList;

                        arrangementId = ((App)App.Current).UpdateArrangement(request);

                        if (arrangementId == request.Arrangement.ArrangementId)
                        {
                            //only saves new images
                            List <EOImgData> imageData = ((App)App.Current).GetImageData();

                            if (imageData.Count > 0)
                            {
                                foreach (EOImgData img in imageData)
                                {
                                    AddArrangementImageRequest imgRequest = new AddArrangementImageRequest()
                                    {
                                        ArrangementId = arrangementId,
                                        Image         = img.imgData
                                    };

                                    ((App)App.Current).AddArrangementImage(imgRequest);
                                }
                            }

                            DisplayAlert("Success", "Arrangement updated!", "OK");
                            ClearArrangements();
                        }
                        else
                        {
                            DisplayAlert("Error", "Problem updating arrangement", "OK");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
            }
        }