home *** CD-ROM | disk | FTP | other *** search
/ OpenStep (Enterprise) / OpenStepENTCD.toast / OEDEV / EODEV.Z / Member.m < prev    next >
Encoding:
Text File  |  1996-08-23  |  2.5 KB  |  94 lines

  1. /*
  2.         Copyright (c) 1996, NeXT Software, Inc.
  3.         All rights reserved.
  4.  
  5.         You may freely copy, distribute and reuse the code in this example.
  6.         NeXT disclaims any warranty of any kind, expressed or implied,
  7.         as to its fitness for any particular use.
  8. */
  9. #import <BusinessLogic/Member.h>
  10. #import <BusinessLogic/Guest.h>
  11. #import <BusinessLogic/CreditCard.h>
  12. #import <BusinessLogic/NSObjectAdditions.h>
  13.  
  14. @implementation Member
  15.  
  16. - (void)awakeFromInsertionInEditingContext:(EOEditingContext *)ctx
  17. {
  18.     // set default values
  19.     // Default membership date to today
  20.     if (!memberSince) 
  21.         memberSince = [[NSCalendarDate date] retain];
  22.  
  23.     if (!guests)
  24.         guests = [NSMutableArray new];
  25.  
  26.     [super awakeFromInsertionInEditingContext:ctx];
  27. }
  28.  
  29. - (Member *)member {
  30.     // We are a member (not a guest) so we return ourselves
  31.     return self;
  32. }
  33.  
  34. - (NSArray *)allRentals
  35. {
  36.     NSEnumerator *guestEnumerator = [guests objectEnumerator];
  37.     NSMutableArray *array = [NSMutableArray array];
  38.     Guest *next;
  39.  
  40.     [array addObjectsFromArray:[super allRentals]];
  41.     while(next = [guestEnumerator nextObject])
  42.         [array addObjectsFromArray:[next allRentals]];
  43.  
  44.     return array;
  45. }
  46.  
  47. - (void)dealloc
  48. {
  49.     [city release];
  50.     [memberSince release];
  51.     [phone release];
  52.     [state release];
  53.     [streetAddress release];
  54.     [zip release];
  55.     [creditCard release];
  56.     [guests release];
  57.     [super dealloc];
  58. }
  59.  
  60. - (BOOL)hasCreditCard
  61. {
  62.     return (creditCard) ? YES : NO;
  63. }
  64.  
  65. - (NSDecimalNumber *)costRestriction
  66. {
  67.     return [self hasCreditCard] ? [creditCard limit] : [NSDecimalNumber zero];
  68. }
  69.  
  70. // Give guests a 20% increase in rental limits
  71. - (void)boostRestrictions
  72. {
  73.     NSDecimalNumber *rate = [NSDecimalNumber decimalNumberWithString:@"1.50"];  // 50% boost
  74.     int i;
  75.     
  76.     for (i = [guests count] - 1; i >= 0; i--) {
  77.         Guest *guest = [guests objectAtIndex:i];
  78.         [guest setCostRestriction:[[guest costRestriction] decimalNumberByMultiplyingBy:rate]];
  79.     }
  80. }
  81.  
  82. - (NSString *)inverseForRelationshipKey:(NSString *)relationshipKey
  83. {
  84.     // It's normally not necessary to explicitly define this method,
  85.     // since the EOModel does it for us (via EOClassDescription).  In
  86.     // this case EORelationship can't spot the inverse because we don't
  87.     // join on the same set of keys in the member and creditCard relationships
  88.     if ([relationshipKey isEqual:@"creditCard"])
  89.         return @"member";
  90.     return [super inverseForRelationshipKey:relationshipKey];
  91. }
  92.  
  93. @end
  94.