From 05499e489013acf169fc67b17ec1e0360759a6e1 Mon Sep 17 00:00:00 2001 From: Jissin Mathew Date: Tue, 26 May 2026 16:29:03 +0530 Subject: [PATCH] Fix Create Service Submenu - Added heading "Create Service" to submenu for clearer user guidance. - Ensured console clears before service creation for consistent UI behavior. - Filtered active inventory items before selection to avoid showing inactive items. - Updated prompts with improved formatting and spacing (e.g., labour cost input, success message). - Refactored selectInventoryItems: - Added "Select Required Items" heading for clarity. - Skipped null or inactive items during listing. - Improved empty inventory message ("No Items Present, Inventory empty"). - Enhanced success and error messages with consistent line breaks. - Simplified logic for item selection and exit handling. Fixes #1747 --- .../views/AdminMenu.cpp | 8 +- .../views/MenuHelper.h | 104 +++++++++--------- 2 files changed, 56 insertions(+), 56 deletions(-) diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp index 9c6105d..abec3a6 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/AdminMenu.cpp @@ -386,17 +386,19 @@ Returns: void AdminMenu::createService() { util::clear(); + std::cout << "Create Service\n"; std::string serviceName; double labourCost; std::cout << "Enter the service name: "; util::read(serviceName); util::Map currentInventoryItems = m_controller.getInventoryItems(); + util::Map activeInventoryItems = filterActiveItems(currentInventoryItems); util::Vector selectedInventoryItems; - selectInventoryItems(currentInventoryItems,selectedInventoryItems); - std::cout << "Enter the labour cost: "; + selectInventoryItems(activeInventoryItems,selectedInventoryItems); + std::cout << "\nEnter the labour cost: "; util::read(labourCost); m_controller.createService(serviceName, selectedInventoryItems, labourCost); - std::cout << "Service created sucessfully.\n"; + std::cout << "\nService created sucessfully.\n\n"; util::pressEnter(); } diff --git a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h index b2f8fd3..a09950d 100644 --- a/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h +++ b/Trenser.VehicleServiceSystem/Trenser.VehicleServiceSystem/views/MenuHelper.h @@ -93,65 +93,63 @@ Returns: */ inline void selectInventoryItems(util::Map& currentInventoryItems, util::Vector& selectedInventoryItems) { - bool doRun = true, hasInventoryItems = false; - util::Map currentInventoryMap; - int currentIndex = 1; - int choice; - if (currentInventoryItems.getSize() == 0) - { - std::cout << "Inventory empty."; - } - while (doRun) -{ - bool hasInventoryItems = false; - int currentIndex = 1; - currentInventoryMap.clear(); - std::cout << std::left - << std::setw(6) << "Index" - << std::setw(12) << "Item ID" - << std::setw(20) << "Part Name" - << std::setw(10) << "Price" - << std::setw(10) << "Quantity" - << std::endl; - for (int iterator = 0; iterator < currentInventoryItems.getSize(); iterator++) + bool doRun = true; + util::Map currentInventoryMap; + int choice; + if (currentInventoryItems.getSize() == 0) { - const InventoryItem* currentInventoryItem = currentInventoryItems.getValueAt(iterator); - if (currentInventoryItem->getState() == util::State::INACTIVE) - { - continue; - } - std::cout << std::left - << std::setw(6) << currentIndex - << std::setw(12) << currentInventoryItem->getId() - << std::setw(20) << currentInventoryItem->getPartName() - << std::setw(10) << currentInventoryItem->getPrice() - << std::setw(10) << currentInventoryItem->getQuantity() - << std::endl; - - hasInventoryItems = true; - currentInventoryMap.insert(currentIndex++, currentInventoryItem); - } - if (!hasInventoryItems) - { - std::cout << "No items present in the inventory." << std::endl; - doRun = false; - break; + std::cout << "No Items Present, Inventory empty.\n"; + return; } - std::cout << "Select the item (Index) or enter -1 to exit: "; - util::read(choice); - - if (choice == -1) -{ - doRun = false; + while (doRun) + { + std::cout << "\nSelect Required Items\n"; + bool hasInventoryItems = false; + int currentIndex = 1; + currentInventoryMap.clear(); + std::cout << std::left + << std::setw(6) << "Index" + << std::setw(12) << "Item ID" + << std::setw(20) << "Part Name" + << std::setw(10) << "Price" + << std::setw(10) << "Quantity" + << std::endl; + for (int iterator = 0; iterator < currentInventoryItems.getSize(); iterator++) + { + const InventoryItem* currentInventoryItem = currentInventoryItems.getValueAt(iterator); + if (currentInventoryItem == nullptr || currentInventoryItem->getState() == util::State::INACTIVE) + { + continue; + } + std::cout << std::left + << std::setw(6) << currentIndex + << std::setw(12) << currentInventoryItem->getId() + << std::setw(20) << currentInventoryItem->getPartName() + << std::setw(10) << currentInventoryItem->getPrice() + << std::setw(10) << currentInventoryItem->getQuantity() + << std::endl; + currentInventoryMap.insert(currentIndex++, currentInventoryItem); + hasInventoryItems = true; } - else if (currentInventoryMap.find(choice) != -1) -{ - selectedInventoryItems.push_back(currentInventoryMap.getValueAt(choice)->getId()); - std::cout << "Item added successfully." << std::endl; + if (!hasInventoryItems) + { + break; + } + std::cout << "Select the item (Index) or enter -1 to exit: "; + util::read(choice); + + if (choice == -1) + { + doRun = false; + } + else if (currentInventoryMap.find(choice) != -1) + { + selectedInventoryItems.push_back(currentInventoryMap.getValueAt(currentInventoryMap.find(choice))->getId()); + std::cout << "Item added successfully.\n" << std::endl; } else { - std::cout << "Enter a valid integer." << std::endl; + std::cout << "Enter a valid integer.\n" << std::endl; } } }