Add job status navigation buttons

Adds forward and backward buttons to job cards to change job status. Implements new statuses and highlights jobs needing attention.
This commit is contained in:
gpt-engineer-app[bot]
2025-07-09 22:46:02 +00:00
committed by PhatPhuckDave
parent d05d0180b8
commit fbda209db4
5 changed files with 158 additions and 11 deletions

View File

@@ -33,6 +33,20 @@ export function jobNeedsAttention(job: IndJob): boolean {
return allMaterialsSatisfied;
}
// Running jobs need attention when they have finished (start date + runtime > current time)
if (job.status === 'Running') {
if (!job.jobStart || !job.runtime) {
return false;
}
const startTime = new Date(job.jobStart).getTime();
const runtimeMs = job.runtime * 1000; // Convert seconds to milliseconds
const finishTime = startTime + runtimeMs;
const currentTime = Date.now();
return currentTime >= finishTime;
}
// Selling jobs need attention when sold count reaches produced count
if (job.status === 'Selling') {
const produced = job.produced || 0;

View File

@@ -5,9 +5,13 @@ export const getStatusColor = (status: string) => {
switch (status) {
case 'Planned': return 'bg-gray-600';
case 'Acquisition': return 'bg-yellow-600';
case 'Staging': return 'bg-amber-600';
case 'Inbound': return 'bg-orange-600';
case 'Running': return 'bg-blue-600';
case 'Done': return 'bg-purple-600';
case 'Selling': return 'bg-orange-600';
case 'Delivered': return 'bg-indigo-600';
case 'Outbound': return 'bg-pink-600';
case 'Selling': return 'bg-emerald-600';
case 'Closed': return 'bg-green-600';
case 'Tracked': return 'bg-cyan-600';
default: return 'bg-gray-600';
@@ -18,9 +22,13 @@ export const getStatusBackgroundColor = (status: string) => {
switch (status) {
case 'Planned': return 'bg-gray-600/20';
case 'Acquisition': return 'bg-yellow-600/20';
case 'Staging': return 'bg-amber-600/20';
case 'Inbound': return 'bg-orange-600/20';
case 'Running': return 'bg-blue-600/20';
case 'Done': return 'bg-purple-600/20';
case 'Selling': return 'bg-orange-600/20';
case 'Delivered': return 'bg-indigo-600/20';
case 'Outbound': return 'bg-pink-600/20';
case 'Selling': return 'bg-emerald-600/20';
case 'Closed': return 'bg-green-600/20';
case 'Tracked': return 'bg-cyan-600/20';
default: return 'bg-gray-600/20';
@@ -29,15 +37,31 @@ export const getStatusBackgroundColor = (status: string) => {
export const getStatusPriority = (status: IndJobStatusOptions): number => {
switch (status) {
case 'Planned': return 6;
case 'Acquisition': return 1;
case 'Running': return 2;
case 'Done': return 3;
case 'Selling': return 4;
case 'Closed': return 5;
case 'Tracked': return 7;
case 'Planned': return 1;
case 'Acquisition': return 2;
case 'Staging': return 3;
case 'Inbound': return 4;
case 'Running': return 5;
case 'Done': return 6;
case 'Delivered': return 7;
case 'Outbound': return 8;
case 'Selling': return 9;
case 'Closed': return 10;
case 'Tracked': return 11;
default: return 0;
}
};
export const JOB_STATUSES = ['Planned', 'Acquisition', 'Running', 'Done', 'Selling', 'Closed', 'Tracked'] as const;
export const JOB_STATUSES = ['Planned', 'Acquisition', 'Staging', 'Inbound', 'Running', 'Done', 'Delivered', 'Outbound', 'Selling', 'Closed', 'Tracked'] as const;
export const getNextStatus = (currentStatus: string): string | null => {
const currentIndex = JOB_STATUSES.indexOf(currentStatus as any);
if (currentIndex === -1 || currentIndex === JOB_STATUSES.length - 1) return null;
return JOB_STATUSES[currentIndex + 1];
};
export const getPreviousStatus = (currentStatus: string): string | null => {
const currentIndex = JOB_STATUSES.indexOf(currentStatus as any);
if (currentIndex <= 0) return null;
return JOB_STATUSES[currentIndex - 1];
};