using System; using System.Collections.ObjectModel; using System.Linq; using Xamarin.Essentials; using Xamarin.Forms; namespace Project1503 { public partial class InventoryPage : ContentPage { private ObservableCollection items; private ObservableCollection historyItems; // Add a property for filtering private string searchQuery; public string SearchQuery { get { return searchQuery; } set { searchQuery = value; } } public Command SearchCommand { get; set; } public InventoryPage() { InitializeComponent(); items = LoadItemsFromPreferences(); historyItems = LoadHistoryFromPreferences(); listView.ItemsSource = items; // Initialize the search command SearchCommand = new Command(UpdateSearchResults); BindingContext = this; } private ObservableCollection LoadItemsFromPreferences() { var serializedItems = Preferences.Get("inventoryItems", string.Empty); return string.IsNullOrWhiteSpace(serializedItems) ? new ObservableCollection() : Newtonsoft.Json.JsonConvert.DeserializeObject>(serializedItems); } private ObservableCollection LoadHistoryFromPreferences() { var serializedHistory = Preferences.Get("inventoryHistory", string.Empty); return string.IsNullOrWhiteSpace(serializedHistory) ? new ObservableCollection() : Newtonsoft.Json.JsonConvert.DeserializeObject>(serializedHistory); } private void SaveItemsToPreferences() { var serializedItems = Newtonsoft.Json.JsonConvert.SerializeObject(items); Preferences.Set("inventoryItems", serializedItems); } private void SaveHistoryToPreferences() { var serializedHistory = Newtonsoft.Json.JsonConvert.SerializeObject(historyItems); Preferences.Set("inventoryHistory", serializedHistory); } private void SaveHistoryItem(string action, InventoryItemModel item) { var historyItem = new HistoryItemModel { Action = action, ItemName = item.ItemName, TagNumber = item.TagNumber, ShelfNumber = item.ShelfNumber, Quantity = item.Quantity, Description = item.Description, DateAdded = DateTime.Now }; historyItems.Add(historyItem); SaveHistoryToPreferences(); } private void RemoveHistoryItem(InventoryItemModel item) { var historyItem = new HistoryItemModel { Action = "Delete", ItemName = item.ItemName, TagNumber = item.TagNumber, ShelfNumber = item.ShelfNumber, Quantity = item.Quantity, Description = item.Description, DateAdded = DateTime.Now }; historyItems.Add(historyItem); SaveHistoryToPreferences(); } private async void OnAddButtonClicked(object sender, EventArgs e) { // Prompt the user to enter details for the new item var itemName = await DisplayPromptAsync("Add Item", "Enter item name", maxLength: 50); if (string.IsNullOrWhiteSpace(itemName)) return; // User canceled or entered an empty name var tagNumber = await DisplayPromptAsync("Add Item", "Enter tag number", maxLength: 20); var shelfNumber = await DisplayPromptAsync("Add Item", "Enter shelf number", maxLength: 20); var quantity = await DisplayPromptAsync("Add Item", "Enter quantity", maxLength: 20); var description = await DisplayPromptAsync("Add Item", "Enter description", maxLength: 100); var newItem = new InventoryItemModel { ItemName = itemName, TagNumber = tagNumber, ShelfNumber = shelfNumber, Quantity = quantity, Description = description, DateAdded = DateTime.Now }; items.Add(newItem); SaveItemsToPreferences(); SaveHistoryItem("Add", newItem); } private async void OnItemSelected(object sender, SelectedItemChangedEventArgs e) { if (e.SelectedItem == null) return; var selectedItem = (InventoryItemModel)e.SelectedItem; var result = await DisplayAlert("Item Details", $"Name: {selectedItem.ItemName}\n" + $"Tag Number: {selectedItem.TagNumber}\n" + $"Shelf Number: {selectedItem.ShelfNumber}\n" + $"Quantity: {selectedItem.Quantity}\n" + $"Description: {selectedItem.Description}\n" + $"Date of Addition: {selectedItem.DateAdded}", "Delete", "Cancel"); if (result) { items.Remove(selectedItem); SaveItemsToPreferences(); RemoveHistoryItem(selectedItem); } ((ListView)sender).SelectedItem = null; } private void UpdateSearchResults(string query) { SearchQuery = query; if (string.IsNullOrWhiteSpace(SearchQuery)) { // Reset the list to show all items listView.ItemsSource = items; } else { // Filter items based on the search query var filteredItems = items.Where(item => item.ItemName.ToLower().Contains(SearchQuery.ToLower()) || item.TagNumber.ToLower().Contains(SearchQuery.ToLower()) || item.ShelfNumber.ToLower().Contains(SearchQuery.ToLower()) || item.Quantity.ToLower().Contains(SearchQuery.ToLower()) || item.Description.ToLower().Contains(SearchQuery.ToLower()) ).ToList(); listView.ItemsSource = new ObservableCollection(filteredItems); } } } public class InventoryItemModel { public string ItemName { get; set; } public string TagNumber { get; set; } public string ShelfNumber { get; set; } public string Quantity { get; set; } public string Description { get; set; } public DateTime DateAdded { get; set; } } }