due date working

This commit is contained in:
Seth Trowbridge 2025-11-07 09:00:58 -05:00
parent dfffa59094
commit ae89ac642e
4 changed files with 27 additions and 21 deletions

10
app.js
View File

@ -204,7 +204,7 @@ function Desks(inDesks)
// at least one but not all need fields are empty // at least one but not all need fields are empty
const caution = scan.need_empty.length>0 && scan.need_empty.length<desk.need.length; const caution = scan.need_empty.length>0 && scan.need_empty.length<desk.need.length;
work.push(DOM.tr( work.push(DOM.tr(
DOM.td(pass.name), DOM.td(pass.name),
desk.need.map((part, index, array)=> desk.need.map((part, index, array)=>
@ -236,7 +236,13 @@ function Desks(inDesks)
) )
); );
}), }),
DOM.td(Div.Icon("⇉")), DOM.td(
Div.Icon("⇉"),
scan.due_date ? Div.Part(
scan.due_date.toLocaleDateString(),
scan.due_date.toLocaleTimeString()
) : " "
),
desk.make.map((part, index, array)=> desk.make.map((part, index, array)=>
{ {
const partPass = part.pass.get(pass); const partPass = part.pass.get(pass);

View File

@ -27,7 +27,7 @@ export default CreateAllRooms({
}, },
desk:{ desk:{
d1:["Write page metas", ["admin", "write"], { }, "p1", "p2"], d1:["Write page metas", ["admin", "write"], { }, "p1", "p2"],
d2:["Build Page preview", ["admin", "dev" ], {p1:1, p2:1, p5:1}, "p3", "p4"], d2:["Build Page preview", ["admin", "dev" ], {p1:1, p2:1, p5:4}, "p3", "p4"],
d3:["Proof Page", ["admin", "write"], {p3:1, }, "p5" ] d3:["Proof Page", ["admin", "write"], {p3:1, }, "p5" ]
}, },
pass:{ pass:{

View File

@ -264,20 +264,13 @@ Loop parts:
} }
if(time > needMax) needMax = time; if(time > needMax) needMax = time;
if(!time) emptyNeed.push(i);
// estimation
if(time < estMin) estMin = time;
const projectedTime = time + desk.time[i];
estSum += desk.time[i];
if(projectedTime > estMax) estMax = projectedTime;
if(!time) emptyNeed.push(i)
} }
// update makeMin AND dirtyMakes // update makeMin AND dirtyMakes
for(let i=0; i<desk.make.length; i++) for(let i=0; i<desk.make.length; i++)
{ {
const [time, value, part] = lookup(desk.make[i]); const [time] = lookup(desk.make[i]);
if(time < makeMin) makeMin = time; if(time < makeMin) makeMin = time;
if(time < needMax) dirtyMake.push(i); if(time < needMax) dirtyMake.push(i);
@ -298,17 +291,24 @@ Loop parts:
} }
} }
if(time > makeMin) dirtyNeed.push(i); if(time > makeMin)
{
dirtyNeed.push(i);
// estimation
if(time < estMin) estMin = time;
const allottedTime = desk.time[i] * 1000 * 60 * 60;
const projectedTime = time + allottedTime;
estSum += allottedTime;
if(projectedTime > estMax) estMax = projectedTime;
}
} }
estSum += estMin;
let stamp = estSum;
if(estMax > estSum) if(estMax > estSum)
{ {
// use estMax stamp = estMax;
} }
else desk.pass.set(pass, {need_dirty:dirtyNeed, make_dirty:dirtyMake, need_empty:emptyNeed, make_empty:emptyMake, due_date:isFinite(stamp) ? new Date(stamp) : undefined})
{
// use estSum
}
desk.pass.set(pass, {need_dirty:dirtyNeed, make_dirty:dirtyMake, need_empty:emptyNeed, make_empty:emptyMake})
}; };

View File

@ -4,7 +4,7 @@ export type Desk = {name:string, id:string, need:Part[], time:number[], make:Par
export type Pass = {name:string, id:string, path:string, live:boolean, load:()=>Promise<void>, dump:()=>void}; export type Pass = {name:string, id:string, path:string, live:boolean, load:()=>Promise<void>, dump:()=>void};
export type Part = {name:string, id:string, pass:Map<Pass, {time:number, work:Work[], make:(user:User, data:string)=>Promise<void>}>, need:Desk[], make:Desk[], loop?:boolean}; export type Part = {name:string, id:string, pass:Map<Pass, {time:number, work:Work[], make:(user:User, data:string)=>Promise<void>}>, need:Desk[], make:Desk[], loop?:boolean};
export type Work = [time:number, data:string, user:User]; export type Work = [time:number, data:string, user:User];
export type Scan = {need_dirty:number[], make_dirty:number[], need_empty:number[], make_empty:number[]} export type Scan = {need_dirty:number[], make_dirty:number[], need_empty:number[], make_empty:number[], due_date?:Date}
export type GraphBuilder= export type GraphBuilder=
< <