#import "Aprica.h"
// Aprica2
// copyright Pirmin Braun 1997-2007 - pirmin@pirmin.de
// all Rights reserved;
@implementation PBWOPosEditor
ACCESSm(lifFileName,setLifFileName)
- (NSString *)name;
{ return @"PBWOPosEditor"; // es darf mehrere geben, lifs sollen aber gleich bleiben
}
- (void)dealloc;
{ [lifFileName release];
[super dealloc];
}
- (void)createDefaultLayout;
{ NSArray *a = [[[allAttr allValues]sortedArrayUsingSelector:@selector(compareForSequence:)]valuesForKey:@"dbName"];
[lifDict setSecureObject:[a arrayToIndex:7] forKey:SC_LIF_TV];
}
- (NSString *)layoutInfoPathForRead;
{ NSString *s;
NSString *userName = [_SESSION use_lif_from];
if(!userName)userName = CURRENTUSER;
s = [NSSWF @"%@/LayoutsUsers/%@/%@/%@.lif",MANDANTPATH,userName,[self name],[self lifFileName]];
if([myFM fileExistsAtPath:s])return s;
return [NSSWF @"%@/LayoutsUsers/Administrator/%@/%@.lif",MANDANTPATH,[self name],[self lifFileName]];
}
- (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;
{// wenn von QueryPortlet oder Spaltenklick gesetzt wurde
NSString *s = soseq;
if(!s)s = @"";
[[_SESSION moduleSoseq] setObject:s forKey:[self lifFileName]];
[_SESSION saveSoseq];
}
- (void)reconfigureMyTable;
{ hasPositionsnr = NO;
if([myTable plainAttrNamed:@"positionsnr"]){ hasPositionsnr = YES; //wird dann autom. hochgezaehlt
}
[self determineAttributes];
[self reconfigureLif];
}
- (void)setMyTable:(PBDDTable *)t andMasterEO:(PBEO *)eo;
{// dies ist die Aufruf-Methode
NSString *newLifFileName = [NSSWF @"%@_%@",[callingModul name],[t dbName]];
[selObj undo]; //aus snapshot wieder in variablen
[self setPendingAction:pa_non];
[self setNeedsSave:NO];
[ma removeAllObjects];
[self setMasterEO:eo];
create_ButtonIsDisabled = NO;
duplicate_ButtonIsDisabled = NO;
delete_ButtonIsDisabled = NO;
allFieldsDisabled = NO;
[hiddenFieldNames removeAllObjects];
[disabledFieldNames removeAllObjects];
[enabledFieldNames removeAllObjects];
[self setStaticQ:nil];
if(![t iE:myTable]){ [myTable release];
myTable = [t retain];
[self setLifFileName:newLifFileName];
[self reconfigureMyTable];
}else{ if(![lifFileName iE:newLifFileName]){ [self setLifFileName:newLifFileName];
[self reconfigureLif]; //weniger zu tun
}
}
[self setNameForScript:[myTable dbName]];
if(masterEO){ [self setMasterEntityName:[masterEO entityName]];
[self setCallingMQ:[PBSQLQualifier qualifierWithString:[NSSWF @"masterkey = '%@'",[masterEO primaryKey]]]];
[self takeObjects:[_APP getEOs:[myTable dbName] qualifier:callingMQ offset:0 count:1000 soa:soa]]; //sortiert bei bedarf im speicher
// hier noch ein Script-Exit fuer Konfigurationseingriffe: anzeigemodus setzen, Buttons an/aus, Spaltentitel umbenennen columnWithName
[_APP executeScriptNamed:@"PBWOPosEditor/didSetMyTable" datasource:self parmDict:parmDict];
[_APP executeScriptNamed:[NSSWF @"%@/didBuildUp",nameForScript] datasource:self parmDict:parmDict];
[_APP executeScriptNamed:[NSSWF @"%@/didSetUpWithBundle",nameForScript] datasource:self parmDict:parmDict];
}else{ [self _selObjChanged];
}
}
- (void)neuSuchen;
{ [self takeObjects:[_APP getEOs:[myTable dbName] qualifier:callingMQ offset:0 count:1000 soa:soa]]; //sortiert bei bedarf im speicher
}
- (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 = YES; //master-detail -> detail
hasPositionsnr = NO;
wasDuplicate = NO;
[self setCallingModul:nil];
}
- (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]){ [self saveLif:lifDict path:[NSSWF @"%@/LayoutsUsers/%@/%@/%@.lif",MANDANTPATH,CURRENTUSER,[self name],[self lifFileName]]];
}
}
- (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;
}
- init;
{ if(!(self = [super init]))return nil;
pageLeng = [[[_APP configDict]ofk:@"rowsonpagepos"]intValue];
if(pageLeng < 3)pageLeng=10;
return self;
}
- (NSString *)callingModulName;
{ return [NSSWF TRANSLATION(@"%@ von %@ %@ %@"),[myTable guiName],[callingModul guiName],[masterEO primaryKey],[masterEO descri]];
}
- (int)pageLeng;
{ return pageLeng;
}
- (void)getActions;
{// nix tun
}
- (void)performInitialSearch;
{// nix tun
}
- (void)buildUpTVAndRegisters;
{ NSArray *lifTV;
int i,j;
NSMutableArray *pa = [NSMutableArray arrayWithCapacity:10];
[visibleTVAttr removeAllObjects];
[colWidthDict removeAllObjects];
[allTVAttr removeAllObjects];
[clearOnSelObjChanged removeAllObjects];
[refreshOnSelObjChanged 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];
[boxDict removeAllObjects];
[boxNameArray removeAllObjects];
assoIDCounter = 0;
[self filterAttrNames:[lifDict ofk:SC_LIF_COMMON] pa:pa]; //in pa stehen dann nur noch die bekannten, die es als attribute auch gibt
[self buildUpFields:pa forTitle:SC_LIF_COMMON];
[self rebuildFassosByName];
[_APP executeScriptNamed:[NSSWF @"%@/didBuildUp",nameForScript] datasource:self parmDict:parmDict];
}
- (void)buildUpTV:(NSArray *)aa;
{ int i,j;
PBDDAttribute *pba;
NSString *dbn;
PBWOAsso *pbas;
PBWOTVCCol *column;
// LMAN(editAssos);
// int raster = [_APP raster];
// int editWidth = [_APP editWidth];
// int bezWidth = [_APP bezWidth];
//columns aufbauen
//reentrant f. redrawAfterLeaveConfig
//LOGS(@"builduptv");
//reihenfolge beibehalten aus LIF
[columns removeAllObjects];
for(i=0,j=[aa count];i<j;i++){ BOOL isNI;
pba = [aa oai:i];
if(!FILLED(pba))continue; //wg. EON
dbn = [pba dbName];
isNI = [dbn hasSecurePrefix:NI_PREFIX]; //named Icon
if(!isNI){ if([pba targetTyp] != ATTVCSELOBJ)continue;
if(![pba isVisible]){ continue;
}
}
if([columns count] < 30){ if(isNI){ pbas = [self assoForNIFrom:dbn];
[pbas setWidth:LINEHEIGHT]; //masse vom lif interessieren hier nicht
[pbas setHeight:LINEHEIGHT];
}else{ pbas = [[PBWOAsso alloc]initWith:self andAttr:pba];
}
column = [[PBWOTVCCol alloc]initWithWOAsso:pbas];
[columns addObject:column];
[pbas release];
[column release];
//Edit-Assos
/*
pbas = [[PBWOAsso alloc]initWith:self andAttr:pba];
[pbas setNoDescr:YES];
[pbas determineSizeDwp:0 ewp:raster * editWidth bwp:raster * bezWidth];
[column setEAsso:pbas];
[editAssos addObject:pbas];
[pbas release];
*/
}
}
[fassos removeAllObjects];
// [fassos addObjectsFromArray:editAssos]; //damit kommen nur die Edit-Assos in die fassos u. fassosByName
// [self rebuildFassosByName];
}
- (NSString *)cmqName;
{//fuer generischen Lookup
return [NSSWF @"%@_%@_%@_%@",[waitingForName refdTableName],[self name],[callingModul name],[waitingForName dbName]];
}
- (NSArray *)selectedBox;
{// fuer prepareForDisplay
return fassos;
}
- (void)prepareBoxesforDisplay;
{ int i,j;
for(i=0,j=[fassos count];i<j;i++){ PBWOAsso *pbas = [fassos oai:i];
[pbas targetToVal]; //Assos holen Values von ihren targets
}
}
- (void)tvNewRowOffsetActed;
{//zu dem satz springen; dort seite beginnen
if(tvNewRowOffset>[ma count])tvNewRowOffset=[ma count] - [self pageLeng]; //obere grenze
if(tvNewRowOffset<0)tvNewRowOffset=0;
currentPage = tvNewRowOffset / [self pageLeng];
tvNewRowOffset = (currentPage * [self pageLeng]);
}
- (NSString *)objCountS;
{ int i;
if(![self paNon])return EON;
if(selObj)return [NSSWF TRANSLATION(@"%i. von %i"),(selRow)+1,[ma count]];
if((i=[selectedObjects count]))return [NSSWF @"%i markiert von %i",i,[ma count]];
return NSS([ma count]);
}
@end