BusinessFunctionModel.m 5.54 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
//
//  BusinessFunctionMode.m
//
//  Created by 杰 张 on 16/7/29
//  Copyright (c) 2016 __MyCompanyName__. All rights reserved.
//

#import "BusinessFunctionModel.h"


NSString *const kBusinessFunctionModeFunction = @"function";
NSString *const kBusinessFunctionModeHeaderTitle = @"headerTitle";


@interface BusinessFunctionModel ()

- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict;

@end

@implementation BusinessFunctionModel

@synthesize function = _function;
@synthesize headerTitle = _headerTitle;


+ (instancetype)modelObjectWithDictionary:(NSDictionary *)dict
{
    return [[self alloc] initWithDictionary:dict];
}

- (instancetype)initWithDictionary:(NSDictionary *)dict
{
    self = [super init];
    
    // This check serves to make sure that a non-NSDictionary object
    // passed into the model class doesn't break the parsing.
    if(self && [dict isKindOfClass:[NSDictionary class]]) {
        NSObject *receivedBusinessFunction = [dict objectForKey:kBusinessFunctionModeFunction];
        NSMutableArray *parsedBusinessFunction = [NSMutableArray array];
        if ([receivedBusinessFunction isKindOfClass:[NSArray class]]) {
            for (NSDictionary *item in (NSArray *)receivedBusinessFunction) {
                if ([item isKindOfClass:[NSDictionary class]]) {
                    [parsedBusinessFunction addObject:[BusinessFunction modelObjectWithDictionary:item]];
                }
            }
        } else if ([receivedBusinessFunction isKindOfClass:[NSDictionary class]]) {
            [parsedBusinessFunction addObject:[BusinessFunction modelObjectWithDictionary:(NSDictionary *)receivedBusinessFunction]];
        }
        
        self.function = [NSArray arrayWithArray:parsedBusinessFunction];
        self.headerTitle = [self objectOrNilForKey:kBusinessFunctionModeHeaderTitle fromDictionary:dict];
        
    }
    
    return self;
    
}

- (instancetype)initWithDictionaryPermissionControl:(NSDictionary *)dict {
    self = [super init];
    
    // This check serves to make sure that a non-NSDictionary object
    // passed into the model class doesn't break the parsing.
    if(self && [dict isKindOfClass:[NSDictionary class]]) {
        NSObject *receivedBusinessFunction = [dict objectForKey:kBusinessFunctionModeFunction];
        NSMutableArray *parsedBusinessFunction = [NSMutableArray array];
        if ([receivedBusinessFunction isKindOfClass:[NSArray class]]) {
            for (NSDictionary *item in (NSArray *)receivedBusinessFunction) {
                if ([item isKindOfClass:[NSDictionary class]]) {
                    BusinessFunction *function = [BusinessFunction modelObjectWithDictionary:item];
                    switch (function.type) {
                        case functionTypeSaleInput:
                        {
                            if (AppGlobal.permission.saleinput.read) {
                                [parsedBusinessFunction addObject:function];
                            }
                        }
                            break;
                            
                        default:
                            break;
                    }
                    
                }
            }
        } else if ([receivedBusinessFunction isKindOfClass:[NSDictionary class]]) {
            [parsedBusinessFunction addObject:[BusinessFunction modelObjectWithDictionary:(NSDictionary *)receivedBusinessFunction]];
        }
        
        self.function = [NSArray arrayWithArray:parsedBusinessFunction];
        self.headerTitle = [self objectOrNilForKey:kBusinessFunctionModeHeaderTitle fromDictionary:dict];
        
    }
    
    return self;
    
}
- (NSDictionary *)dictionaryRepresentation
{
    NSMutableDictionary *mutableDict = [NSMutableDictionary dictionary];
    NSMutableArray *tempArrayForFunction = [NSMutableArray array];
    for (NSObject *subArrayObject in self.function) {
        if([subArrayObject respondsToSelector:@selector(dictionaryRepresentation)]) {
            // This class is a model object
            [tempArrayForFunction addObject:[subArrayObject performSelector:@selector(dictionaryRepresentation)]];
        } else {
            // Generic object
            [tempArrayForFunction addObject:subArrayObject];
        }
    }
    [mutableDict setValue:[NSArray arrayWithArray:tempArrayForFunction] forKey:kBusinessFunctionModeFunction];
    [mutableDict setValue:self.headerTitle forKey:kBusinessFunctionModeHeaderTitle];
    
    return [NSDictionary dictionaryWithDictionary:mutableDict];
}

- (NSString *)description
{
    return [NSString stringWithFormat:@"%@", [self dictionaryRepresentation]];
}

#pragma mark - Helper Method
- (id)objectOrNilForKey:(id)aKey fromDictionary:(NSDictionary *)dict
{
    id object = [dict objectForKey:aKey];
    return [object isEqual:[NSNull null]] ? nil : object;
}


#pragma mark - NSCoding Methods

- (id)initWithCoder:(NSCoder *)aDecoder
{
    self = [super init];
    
    self.function = [aDecoder decodeObjectForKey:kBusinessFunctionModeFunction];
    self.headerTitle = [aDecoder decodeObjectForKey:kBusinessFunctionModeHeaderTitle];
    return self;
}

- (void)encodeWithCoder:(NSCoder *)aCoder
{
    
    [aCoder encodeObject:_function forKey:kBusinessFunctionModeFunction];
    [aCoder encodeObject:_headerTitle forKey:kBusinessFunctionModeHeaderTitle];
}

- (id)copyWithZone:(NSZone *)zone
{
    BusinessFunctionModel *copy = [[BusinessFunctionModel alloc] init];
    
    if (copy) {
        
        copy.function = [self.function copyWithZone:zone];
        copy.headerTitle = [self.headerTitle copyWithZone:zone];
    }
    
    return copy;
}


@end