private void inventoryItemToDisplayItem(InventoryItem invItem, DisplayItem displayItem)
        {
            var invCat = invItem.InventoryCategoryId != null?InventoryCategories.FirstOrDefault(ic => ic.InventoryCategoryId == invItem.InventoryCategoryId) : null;

            var vendor = invItem.VendorId != null?Vendors.FirstOrDefault(v => v.VendorId == invItem.VendorId) : null;

            bool isNeeded = invItem.QuantityOnHand.GetValueOrDefault() < invItem.MinimumQuantity.GetValueOrDefault();

            displayItem.Line1 = invItem.InventoryItemName;
            displayItem.Line2 = (invCat == null ? "" : invCat.CategoryName) + (vendor == null ? "" : $" - {vendor.VendorName}");
            displayItem.Line3 = $"In Stock: {invItem.QuantityOnHand.GetValueOrDefault()} | Min Qty: {invItem.MinimumQuantity.GetValueOrDefault()} | Needed: {(isNeeded ? (invItem.MinimumQuantity.GetValueOrDefault() - invItem.QuantityOnHand.GetValueOrDefault()) : 0)}";
            displayItem.Tag   = invItem;
            displayItem.Tag2  = isNeeded ? Color.Red : Color.LightGray;
        }
 public InventoryViewModel()
 {
     InventoryCategories = DataAccess.GetCategories();
     SelectedCategory    = new InventoryCategories();
 }
        async System.Threading.Tasks.Task ExecuteLoadInventoryCommand(bool reload)
        {
            if (IsBusy)
            {
                return;
            }

            if (!IsRefreshing)
            {
                IsBusy = true;
            }

            try
            {
                if (Vendors.Count < 1)
                {
                    Vendors.Add(new Vendor()
                    {
                        VendorName = "(All)"
                    });
                    OriginalVendors = (await DataService.GetItemsAsync <Vendor>("vendors")).Data;
                    OriginalVendors.OrderBy(v => v.VendorName).ToList().ForEach(d => Vendors.Add(d));
                }

                if (InventoryCategories.Count < 1)
                {
                    InventoryCategories.Add(new InventoryCategory()
                    {
                        CategoryName = "(All)"
                    });
                    OriginalCategories = (await DataService.GetItemsAsync <InventoryCategory>("inventoryCategories")).Data;
                    OriginalCategories.OrderBy(c => c.CategoryName).ToList().ForEach(d => InventoryCategories.Add(d));
                }

                Inventory.Clear();
                if (reload || _inventoryItems == null)
                {
                    _inventoryItems = (await DataService.GetItemsAsync <InventoryItem>("inventoryItems")).Data;
                }
                foreach (var item in _inventoryItems
                         .Where(i => SelectedVendor == null || SelectedVendor.VendorId == null || i.VendorId == SelectedVendor.VendorId)
                         .Where(i => SelectedCategory == null || SelectedCategory.InventoryCategoryId == null || i.InventoryCategoryId == SelectedCategory.InventoryCategoryId)
                         .OrderBy(i => i.InventoryItemName))
                {
                    bool isNeeded = item.QuantityOnHand.GetValueOrDefault() < item.MinimumQuantity.GetValueOrDefault();
                    if (!isNeeded && NeededOnly)
                    {
                        continue;
                    }
                    var dispItem = new DisplayItem();
                    inventoryItemToDisplayItem(item, dispItem);
                    Inventory.Add(dispItem);
                }
            }
            catch (Exception ex)
            {
                IsBusy       = false;
                IsRefreshing = false;
                ExceptionHelper.ShowException(ex);
            }
            finally
            {
                IsRefreshing = false;
                IsBusy       = false;
            }
        }