PBWOLookup.m


max21 Unternehmensgruppe
#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&uuml;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
Foto