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
This commit is contained in:
@@ -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<std::string, const InventoryItem*> currentInventoryItems = m_controller.getInventoryItems();
|
||||
util::Map<std::string, const InventoryItem*> activeInventoryItems = filterActiveItems(currentInventoryItems);
|
||||
util::Vector<std::string> 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();
|
||||
}
|
||||
|
||||
|
||||
@@ -93,16 +93,17 @@ Returns:
|
||||
*/
|
||||
inline void selectInventoryItems(util::Map<std::string, const InventoryItem*>& currentInventoryItems, util::Vector<std::string>& selectedInventoryItems)
|
||||
{
|
||||
bool doRun = true, hasInventoryItems = false;
|
||||
bool doRun = true;
|
||||
util::Map<int, const InventoryItem*> currentInventoryMap;
|
||||
int currentIndex = 1;
|
||||
int choice;
|
||||
if (currentInventoryItems.getSize() == 0)
|
||||
{
|
||||
std::cout << "Inventory empty.";
|
||||
std::cout << "No Items Present, Inventory empty.\n";
|
||||
return;
|
||||
}
|
||||
while (doRun)
|
||||
{
|
||||
{
|
||||
std::cout << "\nSelect Required Items\n";
|
||||
bool hasInventoryItems = false;
|
||||
int currentIndex = 1;
|
||||
currentInventoryMap.clear();
|
||||
@@ -116,7 +117,7 @@ inline void selectInventoryItems(util::Map<std::string, const InventoryItem*>& c
|
||||
for (int iterator = 0; iterator < currentInventoryItems.getSize(); iterator++)
|
||||
{
|
||||
const InventoryItem* currentInventoryItem = currentInventoryItems.getValueAt(iterator);
|
||||
if (currentInventoryItem->getState() == util::State::INACTIVE)
|
||||
if (currentInventoryItem == nullptr || currentInventoryItem->getState() == util::State::INACTIVE)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -127,31 +128,28 @@ inline void selectInventoryItems(util::Map<std::string, const InventoryItem*>& c
|
||||
<< std::setw(10) << currentInventoryItem->getPrice()
|
||||
<< std::setw(10) << currentInventoryItem->getQuantity()
|
||||
<< std::endl;
|
||||
|
||||
hasInventoryItems = true;
|
||||
currentInventoryMap.insert(currentIndex++, currentInventoryItem);
|
||||
hasInventoryItems = true;
|
||||
}
|
||||
if (!hasInventoryItems)
|
||||
{
|
||||
std::cout << "No items present in the inventory." << std::endl;
|
||||
doRun = false;
|
||||
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(choice)->getId());
|
||||
std::cout << "Item added successfully." << std::endl;
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user