Thnx voor je reactie. Hoe vind jij dat het beter kan?
Even de achtergrond van hetgene wat ik zoek:
De timewindows zijn contractuele afspraken met klanten.
En de elementen zijn bestellingen.
Het gaat er dus om wanneer de bestelling maximaal gereed moet zijn, en een weergave van de tijd tot voorgaand tijdstip en een procentuele weergave van deze verhouding.
[size=xsmall]
Toevoeging op 12/02/2011 15:00:48:[/size]
Hey...
Inmiddels 3 uur hersenslopend knutselen heeft een werkend iets opgeleverd (op het eerste deel dan, het berekenen van de eindtijd..)
De code is nog lang niet netjes, maar goed...
Hierbij een volledige copy & paste van de code.
<?PHP
function calc_sla_ssr($ticketnr)
{
global $db;
$uitkomst=0;
$sql = "SELECT active,date_open,date_close,ssr_id FROM tickets WHERE id=".$ticketnr;
$r1 = $db->sql_query($sql,true);
$sql = "SELECT servicelevel_window,doorlooptijd_werkuren FROM standard_changes WHERE id=".$r1->ssr_id;
$r2 = $db->sql_query($sql,true);
$tr = calc_tr_datum($ticketnr);
$uitkomst = round($uitkomst);
return $uitkomst;
}
function calc_tr_datum($ticketnr)
{
global $db;
$sql = "SELECT active,date_open,date_close,ssr_id FROM tickets WHERE id=".$ticketnr;
$r1 = $db->sql_query($sql,true);
$sql = "SELECT servicelevel_window,doorlooptijd_werkuren FROM standard_changes WHERE id=".$r1->ssr_id;
$r2 = $db->sql_query($sql,true);
$sql = "SELECT * FROM timewindows WHERE id=".$r2->servicelevel_window;
$r3 = $db->sql_query($sql,true);
$dag_van_start=date("N",$r1->date_open);
/* 1=Maandag, t/m 7=Zondag*/
$totaltime = scanday($r3,date("N",$r1->date_open),$r1->date_open,($r2->doorlooptijd_werkuren*60*60));
$totaltime = $_SESSION['tr'];
return $totaltime;
}
function scanday($r1,$daykind,$startscantime,$dlt)
{
// Doorloop een dag
$start=0;
$eind=0;
$target_resolution=0;
$deze_dag_berekenen=0;
if ($daykind==1)
{
$deze_dag_berekenen = $r1->ma_active;
$start = mktime($r1->ma_start,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
$eind = mktime($r1->ma_end,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
}
if ($daykind==2)
{
$deze_dag_berekenen = $r1->di_active;
$start = mktime($r1->di_start,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
$eind = mktime($r1->di_end,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
}
if ($daykind==3)
{
$deze_dag_berekenen = $r1->wo_active;
$start = mktime($r1->wo_start,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
$eind = mktime($r1->wo_end,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
}
if ($daykind==4)
{
$deze_dag_berekenen = $r1->do_active;
$start = mktime($r1->do_start,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
$eind = mktime($r1->do_end,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
}
if ($daykind==5)
{
$deze_dag_berekenen = $r1->vr_active;
$start = mktime($r1->vr_start,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
$eind = mktime($r1->vr_end,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
}
if ($daykind==6)
{
$deze_dag_berekenen = $r1->za_active;
$start = mktime($r1->za_start,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
$eind = mktime($r1->za_end,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
}
if ($daykind==7)
{
$deze_dag_berekenen = $r1->zo_active;
$start = mktime($r1->zo_start,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
$eind = mktime($r1->zo_end,0,0,date("m",$startscantime),date("d",$startscantime),date("Y",$startscantime));
}
if ($deze_dag_berekenen == 1)
{
if ($startscantime > $start)
{
// niet de hele dag pakken
$start = $startscantime;
}
if ($startscantime > $eind)
{
// door naar de volgende dag
$day_new=1;
if ($daykind < 7) { $day_new = $daykind+1; }
$start_new_day_at = mktime(0,0,0,date("m",$startscantime),date("d",$startscantime)+1,date("Y",$startscantime));
scanday($r1,$day_new,$start_new_day_at,$dlt);
}
if (($start+$dlt) < $eind)
{
// deze dag verloopt ie ergens
$target_resolution = $start+$dlt;
$_SESSION['tr'] = $target_resolution;
} else {
// door naar de volgende dag met herberekening 'time-left'
$day_new=1;
if ($daykind < 7) { $day_new = $daykind+1; }
$start_new_day_at = mktime(0,0,0,date("m",$start),date("d",$start)+1,date("Y",$start));
$dltdone = $eind-$start;
scanday($r1,$day_new,$start_new_day_at,$dlt-$dltdone);
}
} else {
// door naar de volgende dag
$day_new=1;
if ($daykind < 7) { $day_new = $daykind+1; }
$start_new_day_at = mktime(0,0,0,date("m",$startscantime),date("d",$startscantime)+1,date("Y",$startscantime));
scanday($r1,$day_new,$start_new_day_at,$dlt);
}
return $target_resolution;
}
?>