#import "Aprica.h"
// Aprica2
// copyright Pirmin Braun 1997-2007 - pirmin@pirmin.de
// all Rights reserved;
@implementation PBWOLookup
ACCESSm(lifFileName,setLifFileName)
ACCESSm(newCMQName,setNewCMQName)
- (void)dealloc;
{ [lifFileName release];
[newCMQName release];
[super dealloc];
}
- (void)gatherSelectedObjectsAndGoto:(BOOL)gotoSelObj;{}- (void)gotoRow:(int)r;{}- (void)createDefaultLayout;
{ LMAN(lmatv);
int i,j;
NSArray *a = [allAttr allValues];
PBDDTable *ago = [MYDD tableNamedCheap:@"_AGENERAL_O"];
PBDDTable *vid_g = [MYDD tableNamedCheap:@"_VID_GENERAL"];
for(i=0,j=[a count];i<j;i++){ PBDDAttribute *pba = [a oai:i];
NSString *s = [pba dbName];
int tt = [pba targetTyp];
//diese attribute ausnehmen; sie kommen ins System-Tab
if(![ago plainAttrNamed:s] && ![vid_g plainAttrNamed:s]){ if(tt==ATBU || tt==ATTVCPD || tt==ATPORTLET)continue;
if([lmatv count]>=7)break;
[lmatv addObjectUniq:s];
}
}
[lmatv sort];
[lifDict setSecureObject:lmatv forKey:SC_LIF_TV];
}
- (void)createFullyQualifiedLif;
{ if(![_SESSION use_lif_from]){ // existiert schon ein voll qualifizierter Pfad, dort wieder hinschreiben
NSString *s = [NSSWF @"%@/LayoutsUsers/%@/%@/%@.lif",MANDANTPATH,CURRENTUSER,[self name],[self lifFileName]];
[self saveLif:lifDict path:s];
}
}
- (NSString *)layoutInfoPathForRead;
{ NSString *s;
NSString *userName = [_SESSION use_lif_from];
if(!userName)userName = CURRENTUSER;
// user und komplett qualifiziert
s = [NSSWF @"%@/LayoutsUsers/%@/%@/%@.lif",MANDANTPATH,userName,[self name],[self lifFileName]];
if([myFM fileExistsAtPath:s])return s;
// user und so wie table heisst
s = [NSSWF @"%@/LayoutsUsers/%@/%@/%@.lif",MANDANTPATH,userName,[self name],[myTable dbName]];
if([myFM fileExistsAtPath:s])return s;
// Administrator und komplett qualifiziert
s = [NSSWF @"%@/LayoutsUsers/Administrator/%@/%@.lif",MANDANTPATH,[self name],[self lifFileName]];
if([myFM fileExistsAtPath:s])return s;
// Administrator und so wie table heisst
return [NSSWF @"%@/LayoutsUsers/Administrator/%@/%@.lif",MANDANTPATH,[self name],[myTable dbName]];
}
- (void)reconfigureLif;
{ [self setTvcSortCol:nil];
[self loadLif];
[self buildUpTVAndRegisters]; //macht u.a. builduptv und dort die Sortiereinstellungen aus dem lif
[self setSoseq:[[_SESSION moduleSoseq] ofk:[self lifFileName]]];
}
- (void)saveSoseq;
{// von von QueryPortlet oder Spaltenklick gesetzt wurde
NSString *s = soseq;
if(!s)s = @"";
[[_SESSION moduleSoseq] setObject:s forKey:[self lifFileName]];
[_SESSION saveSoseq];
}
- (void)reconfigureMyTable;
{ hasStatisticFields = ([myTable hasStatisticFields]);
[self determineAttributes];
[self reconfigureLif];
}
- (void)setMyTable:(PBDDTable *)t;
{ if(![t iE:myTable]){ [myTable release];
myTable = [t retain];
[self setLifFileName:newCMQName]; //wurde als erstes gesetzt
[self reconfigureMyTable]; // schliesst reconfigureLif mit ein
}else{ if(![lifFileName iE:newCMQName]){ [self setLifFileName:newCMQName];
[self reconfigureLif]; //weniger zu tun
}
}
}
- (void)setUpWithBundle:(PBWOBundle *)b;
{ if(!b)return;
[self setBundle:b]; //wg. name
if([_SESSION lang]){ NSString *s = [b guiName1];
if(!FILLED(s))s=[b guiName];
[self setGuiName:s];
}else{ [self setGuiName:[b guiName]];
}
isPosition = NO; //master-detail -> detail
hasPositionsnr = NO;
wasDuplicate = NO;
[self setCallingModul:nil];
[_APP executeScriptNamed:[NSSWF @"%@/didSetUpWithBundle",[self name]] datasource:self parmDict:parmDict];
}
- (void)saveLif:(NSMutableDictionary *)dict path:(NSString *)path;
{ LMD;
NSArray *a = [dict allKeys];
int i,j;
if(!callingModul)return;
[myFM createAllDirsAtPath:[path stringByDeletingLastPathComponent]];
for(i=0,j=[a count];i<j;i++){ NSString *k = [a oai:i];
if(![k hasSecureSuffix:@"|System"])[lmd setObject:[dict ofk:k] forKey:k];
}
[[self lifStringWithDict:lmd] WTF:path];
}
- (void)saveLif;
{ if(![_SESSION use_lif_from]){ // existiert schon ein voll qualifizierter Pfad, dort wieder hinschreiben
NSString *s = [NSSWF @"%@/LayoutsUsers/%@/%@/%@.lif",MANDANTPATH,CURRENTUSER,[self name],[self lifFileName]];
if([myFM fileExistsAtPath:s]){ [self saveLif:lifDict path:s];
return;
}
// sonst ins default (tablename) LIF schreiben; auch bei createDefaultLif hier;
// zum erzeugen eines voll qualifizierten LIF muss extra in LIF Verwaltung auf save geklickt werden
s = [NSSWF @"%@/LayoutsUsers/%@/%@/%@.lif",MANDANTPATH,CURRENTUSER,[self name],[myTable dbName]];
[self saveLif:lifDict path:s];
}
}
- (WOElement *)loadMyLif;
{ NSString *s = [NSSWF @"%@/LayoutsUsers/%@/%@/%@.lif",MANDANTPATH,CURRENTUSER,[self name],[self lifFileName]];
[self setLastLifPath:s];
[self setLifEditArea:[NSSWCOF s]];
return self;
}
- (WOElement *)saveAsMyLif;
{// erst testen, ob ok
NSString *c=lifEditArea;
if(FILLED(c)){ NSString *s = [NSSWF @"%@/LayoutsUsers/%@/%@/%@.lif",MANDANTPATH,CURRENTUSER,[self name],[self lifFileName]];
[myFM createAllDirsAtPath:[s stringByDeletingLastPathComponent]];
[c WTF:s];
}
return self;
}
- (NSString *)callingModulName;
{ return [NSSWF TRANSLATION(@"%@ nachschlagen für %@ in %@"),[[callingModul waitingForName]guiName],[[callingModul selObj] descri],[callingModul guiName]];
}
- (NSString *)fieldIDToFocusOn;
{ if([self isConfigMode])return nil;
// immer auf erste Zeile pos.; mit tab/shift tab vor/zurueck, mit Schlapp uebernehmen
return @"target53";
}
- (int)pageLeng;
{ int pl;
pl = [[[_APP configDict]ofk:@"rowsonpagel"]intValue];
if(!pl)pl=20;
return pl;
}
- (void)getActions;
{// nix tun
}
- (void)performInitialSearch;
{// nix tun
}
- (void)buildUpTVAndRegisters;
{ NSArray *lifTV;
int i,j;
[visibleTVAttr removeAllObjects];
[colWidthDict removeAllObjects];
[allTVAttr removeAllObjects];
[[self _subcomponents] removeAllObjects];
[allTVAttr addObjectsFromArray:[allAttr allValues]]; //f. config-Sicht
[self addNamedIconsToAllTVAttr]; //dummy Attribute f. namedIcons reinmachen
lifTV = [lifDict ofk:SC_LIF_TV]; //Auswahl u. Reihenfolge der Spalten
if(lifTV){ for(i=0,j=[lifTV count];i<j;i++){ //enthaelt namen NSString *s = [lifTV oai:i];
PBDDAttribute *pba;
if([s hasSecurePrefix:NI_PREFIX]){ pba = [MYDD minimalAttributeNamed:s];
[pba setGuiName:s];
[pba setLength:1];
}else{ NSArray *a1 = [s componentsSeparatedByString:@":"];
if([a1 count]>1){ int customWidth = [[a1 oai:1]intValue];
NSString *k = [a1 firstObject];
if(customWidth < 0)customWidth = 0;
if(customWidth > 400)customWidth = 400;
pba = [allAttr ofk:k];
[colWidthDict setObject:NSS(customWidth) forKey:k];
}else{ pba = [allAttr ofk:s];
}
}
if(!pba)continue; //gar kein attr.
if(![pba isAuthorized])continue;
[visibleTVAttr addObject:pba];
if([visibleTVAttr count] >= NUM_OF_COL_TO_SHOW)break;
}
}else{ [allTVAttr sortUsingSelector:@selector(compareForSequence:)]; //damit wichtigste felder vorne sind
for(i=0,j=[allTVAttr count];i<NUM_OF_COL_TO_SHOW && i<j;i++){ [visibleTVAttr addObject:[allTVAttr oai:i]];
}
}
[self buildUpTV:visibleTVAttr];
}
- (void)tvNewRowOffsetActed;
{//zu dem satz springen; dort seite beginnen
BOOL maOffsetChanged = NO;
if(tvNewRowOffset>countCombinedQ)tvNewRowOffset=countCombinedQ - [self pageLeng]; //obere grenze
if(tvNewRowOffset<0)tvNewRowOffset=0;
// offset innerhalb countCombinedQ; muss noch richtig gemacht werden
// feststellen, ob innerhalb der gefetchten saetze
if(!((tvNewRowOffset >= maOffset) && (tvNewRowOffset < (maOffset + fetchLimit)))){// neues maOffset bestimmen und fetchen
maOffset = (int)(tvNewRowOffset / fetchLimit) * fetchLimit;
[self neuSuchen]; //mit lastCombinedQ
maOffsetChanged = YES;
}
currentPage = (tvNewRowOffset - maOffset) / [self pageLeng];
tvNewRowOffset = maOffset + (currentPage * [self pageLeng]);
}
- (WOElement *)editLine:(int)line columnName:(NSString *)columnName;
{// bei click uebernehmen, bei ESC-Modus Editieren
// uebernMode voellig egal
int r = currentPage * [self pageLeng] + line;
if([ma count]){ PBEO *eo;
if(r>=[ma count])r=[ma count]-1;
if(r<0)r=0;
eo = [ma oai:r];
if([[[[self context] request] formValueForKey:@"isESC"]iE:@"ESC"]){ PBWOEditor *e = [_SESSION instanceForBundleNamed:[myTable dbName]];
if(!e){ LOGI(TRANSLATION(@"keine Berechtigung."));
return self;
}
if(r>=[ma count])r=[ma count]-1;
if(r<0)r=0;
SUCH_EXTERNAL(e,[[ma oai:r]pkq]);
}else{ [[self callingModul] takeString:[eo primaryKey]];
[[self callingModul] executeDidTakeValuesFromRequest];
[self setNextModul:[self callingModul]];
[self setCallingModul:nil]; //cleared auch callingMQ
}
}
return self;
}
@end