Fix Technician Menu Complete Job UI Issues
- Cleared console before displaying Complete Job screen - Improved submenu header and formatting for clarity - Prevented table headers from showing when no jobs exist - Refined job completion flow with consistent messages Fixes #1782
This commit is contained in:
-1
@@ -26,7 +26,6 @@ Date:19-May-2026
|
||||
#include "User.h"
|
||||
#include "UserManagementService.h"
|
||||
#include "Utility.h"
|
||||
#include "ComboPackage.h"
|
||||
|
||||
/*
|
||||
Function: purchaseService
|
||||
|
||||
@@ -488,6 +488,28 @@ inline void displayInvoices(util::Map<std::string, const Invoice*> currentUserIn
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
/*
|
||||
Function: filterStartedJobCards
|
||||
Description: Filters the given list of job cards and returns only those with status STARTED.
|
||||
Parameters:
|
||||
- assignedJobCards: Map of job card IDs to JobCard pointers.
|
||||
Returns:
|
||||
- util::Map<std::string, const JobCard*> containing only job cards with status STARTED.
|
||||
*/
|
||||
inline util::Map<std::string, const JobCard*> filterStartedJobCards(util::Map<std::string, const JobCard*> assignedJobCards)
|
||||
{
|
||||
util::Map<std::string, const JobCard*> startedJobCards;
|
||||
for (int iterator = 0; iterator < assignedJobCards.getSize(); iterator++)
|
||||
{
|
||||
const JobCard* currentJobCard = assignedJobCards.getValueAt(iterator);
|
||||
if (currentJobCard && currentJobCard->getStatus() == util::ServiceJobStatus::STARTED)
|
||||
{
|
||||
startedJobCards.insert(currentJobCard->getId(), currentJobCard);
|
||||
}
|
||||
}
|
||||
return startedJobCards;
|
||||
}
|
||||
|
||||
/*
|
||||
Function: selectJobCardToComplete
|
||||
Description: Lists all incomplete job cards assigned to the technician and allows selection by index.
|
||||
@@ -497,11 +519,17 @@ Parameters:
|
||||
Returns:
|
||||
- std::string: ID of the selected job card, or empty string if none selected
|
||||
*/
|
||||
inline std::string selectJobCardToComplete(util::Map<std::string, const JobCard*>& assignedJobCards, util::Map<int, const JobCard*>& incompleteJobCards)
|
||||
inline std::string selectJobCardToComplete(util::Map<std::string, const JobCard*>& assignedJobCards)
|
||||
{
|
||||
util::Map<int, const JobCard* > incompleteJobCards;
|
||||
if (assignedJobCards.getSize() == 0)
|
||||
{
|
||||
std::cout << "No started jobs present to complete\n\n";
|
||||
return "";
|
||||
}
|
||||
int currentIndex = 1;
|
||||
int choice;
|
||||
bool hasIncompleteJobCard = false;
|
||||
std::cout << std::endl;
|
||||
std::cout << std::left
|
||||
<< std::setw(6) << "Index"
|
||||
<< std::setw(12) << "BookingID"
|
||||
@@ -520,14 +548,8 @@ inline std::string selectJobCardToComplete(util::Map<std::string, const JobCard*
|
||||
<< std::setw(20) << currentJobCard->getService()->getName()
|
||||
<< std::setw(12) << currentJobCard->getServiceId()
|
||||
<< std::endl;
|
||||
hasIncompleteJobCard = true;
|
||||
incompleteJobCards.insert(currentIndex++, currentJobCard);
|
||||
}
|
||||
}
|
||||
if (!hasIncompleteJobCard)
|
||||
{
|
||||
std::cout << "No pending jobs are present.\n";
|
||||
return "";
|
||||
}
|
||||
std::cout << "Select the Job Card to complete (Index): ";
|
||||
util::read(choice);
|
||||
@@ -540,6 +562,7 @@ inline std::string selectJobCardToComplete(util::Map<std::string, const JobCard*
|
||||
else
|
||||
{
|
||||
std::cout << "Invalid index.\n";
|
||||
std::cout << "Failed to complete jobs.\n\n";
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,18 +93,15 @@ Returns:
|
||||
*/
|
||||
void TechnicianMenu::completeJob()
|
||||
{
|
||||
util::clear();
|
||||
std::cout << "Complete Job\n";
|
||||
util::Map<std::string, const JobCard*> assignedJobCards = m_controller.getJobCardsByUser();
|
||||
util::Map<int, const JobCard*> incompleteJobCards;
|
||||
std::cout << "Jobs to be completed.\n";
|
||||
std::string selectedJobID = selectJobCardToComplete(assignedJobCards, incompleteJobCards);
|
||||
if (selectedJobID == "")
|
||||
{
|
||||
std::cout << "Failed to complete the job.\n";
|
||||
}
|
||||
else
|
||||
util::Map<std::string, const JobCard*> startedJobCards = filterStartedJobCards(assignedJobCards);
|
||||
std::string selectedJobID = selectJobCardToComplete(startedJobCards);
|
||||
if (!selectedJobID.empty())
|
||||
{
|
||||
m_controller.completeJob(selectedJobID);
|
||||
std::cout << "Job marked as completed.\n";
|
||||
std::cout << "\nJob marked as completed.\n\n";
|
||||
}
|
||||
util::pressEnter();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user