PBWOPosEditor.m


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