#import "Aprica.h"
// Aprica2
// copyright Pirmin Braun 1997-2007 - pirmin@pirmin.de
// all Rights reserved;
@implementation Application (_K_000014)
- (NSString *)einsatzPlanung:(PBWOEditor *)datasource;
{// bu_einsatzplanung1.script: alles ueber einen einzigen WOString
// PHP Style
// ressource steht in parmDict.inspectedRessource
int anz_tage = 70;
int zellen_breite = 20;
NSString *c_nix = @"#FFFFFF";
NSString *c_auf = @"#DDDDDD";
NSString *c_messe = @"#AAAAAA";
NSString *c_ab = @"#DDDDDD";
LMAN(alles); // hier kommt fertiges html rein
LMAN(dbls);
NSString *ress_pid = [[datasource parmDict] ofk:@"inspectedRessource"];
NSString *qf,*messef,*dblf,*mt,*termin_f;
NSArray *messe_array,*t_array=nil;
PBSQLQualifier *q;
NSArray *soa,*a;
NSString *s,*sql;
NSString *p_planung_ab = [[datasource parmDict]ofk:@"p_planung_ab"];
double selObj_ausf_von = [[[[[datasource selObj] vfk:@"ausf_von"] dbDateFromMySQLDate]secureSubstringToIndex:8]intValue];
double selObj_ausf_bis = [[[[[datasource selObj] vfk:@"ausf_bis"] dbDateFromMySQLDate]secureSubstringToIndex:8]intValue];
int i,j,i1,i2,j2;
if(!FILLEDNUM(ress_pid))return @"";
if(!FILLED(p_planung_ab))p_planung_ab = [_APP today];
// zugeordnete Taetigkeiten der inspected Resource feststellen
sql = @"select t.ausf_bis,t.ausf_von,t.bezeichnun,t.anzahl,t.pid,z.messe from me_ressourcen r,me_taetigkeiten t,me_z_r_t z where r.pid = '%@' and z.ressource = r.pid and z.taetigkeit = t.pid and t.ausf_bis >= %@ and t.ausf_von <= DATE_ADD('%@',INTERVAL %i DAY)"; sql = [NSSWF sql,ress_pid,p_planung_ab,p_planung_ab,anz_tage];
t_array = [_APP getArrayAsResultFrom:sql];
// Messen lesen
qf = @"ende_ab >= %@ and beginn_auf <= DATE_ADD('%@',INTERVAL %i DAY)"; qf = [NSSWF qf,p_planung_ab,p_planung_ab,anz_tage];
q = [PBSQLQualifier qualifierWithString:qf];
soa=[NSArray soaFrom:@"beginn_auf"];
messe_array=getEOsQSoa(@"messe",q,soa);
[alles addObject:@"<div style=\"width:1130;\">"];
// Messen zeichnen
messef = @"<div style=\"white-space : nowrap; cursor:pointer; background-color:%@; width:120; height:14; border-bottom:1px dotted Blue;\" onClick=\"{document.forms[0].messe_selected.value='%@'; sbm('action_script_clicked_messe');}\" title=\"zur Messe\">%@</div>"; [alles addObject:@"<div style=\"float:left;\">"];
[alles addObject:@"<div style=\"width:120; height:14; border-bottom:1px dotted Blue;\">Messe \\ Datum -> </div>"];
for(i=0,j=[messe_array count];i<j;i++){ PBEO *messe = [messe_array oai:i];
NSString *messe_key = [messe vfk:@"messe"],*bgColor;
if([messe_key iE:[[datasource masterEO] vfk:@"messe"]]){ bgColor = @"#AAAAAA";
}else{ bgColor = @"#F0F0F0";
}
s=[NSSWF messef,bgColor,messe_key,[messe vfk:@"messe_name"]];
[alles addObject:s];
}
[alles addObject:@"</div>"];
// Scrollbereich
[alles addObject:@"<div style=\"float:left; overflow-x:scroll; width:1000;\">"];
// Datumsleiste machen; Tage der Taetigkeit einfaerben
dblf = @"<div style=\"float:left; width:%i; height:15; position:relative; float:left; background-color:%@\" title=\"%@\"> %i</div>";
s = @"<div style=\"width:%i; float:left; height:15;\">";
s=[NSSWF s,anz_tage * zellen_breite];
[alles addObject:s];
for(i=0;i<anz_tage;i++){ PBDate *pbd = [PBDate dateWithDBString:p_planung_ab];
NSString *farbe = @"white";
long dt;
[pbd addDay:i];
[dbls addObject:pbd];
dt = [pbd dateAsLong];
if((dt >= selObj_ausf_von) && (dt <= selObj_ausf_bis) ){ farbe = @"red";
}
s=[NSSWF dblf,zellen_breite,farbe,[pbd dateAsUIString],[pbd day]];
[alles addObject:s];
}
[alles addObject:@"</div>"];
// Messen Termine
mt = @"<div style=\"width:%i; float:left; height:15;\">";
mt=[NSSWF mt,anz_tage * zellen_breite];
termin_f = @"<div style=\"float:left; cursor:crosshair; width:%i; height:15; position:relative; float:left; background-color:%@\" title=\"%@\" onClick=\"{document.forms[0].messe_selected.value='%@'; document.forms[0].date_selected.value='%@'; sbm('action_script_clicked_block');}\">%@</div>"; for(i=0,j=[messe_array count];i<j;i++){ PBEO *messe = [messe_array oai:i];
PBDate *pbd;
long beginn_auf = [[[messe vfk:@"beginn_auf"] secureSubstringToIndex:8]intValue];
long ende_auf = [[[messe vfk:@"ende_auf"] secureSubstringToIndex:8]intValue];
long beginn_ab = [[[messe vfk:@"beginn_ab"] secureSubstringToIndex:8]intValue];
long ende_ab = [[[messe vfk:@"ende_ab"] secureSubstringToIndex:8]intValue];
[alles addObject:mt];
for(i1=0;i1<anz_tage;i1++){ long dt;
NSString *tooltip,*gui,*farbe;
pbd = [dbls oai:i1];
dt = [pbd dateAsLong];
tooltip = @"hier ist nix mehr los";
farbe = c_nix;
gui = @"";
if(dt < beginn_auf){ }else{ if(dt <= ende_auf){ farbe = c_auf;
gui = @"+";
tooltip = @"aufbauen";
}else{ if(dt < beginn_ab){ farbe = c_messe;
gui = @"M";
tooltip = @"Messe laeuft";
}else{ if(dt <= ende_ab){ farbe = c_ab;
gui = @"-";
tooltip = @"abbauen";
}
}
}
}
// einfaerben t.ausf_bis,t.ausf_von,t.bezeichnun,t.anzahl
if(FILLED(t_array)){ for(i2=0,j2=[t_array count];i2<j2;i2++){ NSDictionary *t = [t_array oai:i2]; // Taetigkeit
if([[t vfk:@"messe"]iE:[messe primaryKey]]){ long ausf_von = [[[[t vfk:@"ausf_von"] dbDateFromMySQLDate]secureSubstringToIndex:8]intValue];
long ausf_bis = [[[[t vfk:@"ausf_bis"] dbDateFromMySQLDate]secureSubstringToIndex:8]intValue];
if(dt >= ausf_von){ if(dt <= ausf_bis){ tooltip = [t vfk:@"bezeichnun"];
if([[t vfk:@"pid"]iE:[[datasource selObj] vfk:@"pid"]]){ farbe = @"red";
}else{ farbe = @"yellow";
}
break;
}
}
}
}
}
s = [NSSWF termin_f,zellen_breite,farbe,tooltip,[messe vfk:@"messe"],[pbd dateAsDBString],gui];
[alles addObject:s];
}
[alles addObject:@"</div>"];
}
[alles addObject:@"</div></div><input name=\"date_selected\" type=\"hidden\"><input name=\"messe_selected\" type=\"hidden\">"];
// in TV taetigkeiten gelb machen, die von inspected Ressource ausgefuehrt werden
if(FILLED(t_array)){ LMD;
for(i=0,j=[t_array count];i<j;i++){ NSDictionary *d = [t_array oai:i];
NSString *t_pid = [d ofk:@"pid"];
if(!FILLED(t_pid))continue;
[lmd setObject:t_pid forKey:t_pid];
}
a = [datasource ma];
for(i=0,j=[a count];i<j;i++){ PBEO *eo = [a oai:i];
[eo setEoColor:@"white"];
if([lmd ofk:[eo primaryKey]])[eo setEoColor:@"yellow"];
}
}
return [alles componentsJoinedByString:@"\n"];
}
@end