mirror of
https://github.com/gnustep/libs-gdl2.git
synced 2025-05-30 17:01:05 +00:00
* Documentation/GDL2Intro/Examples: Move to ...
* Examples: ... here. * Examples/GNUmakefile: Adapt to new location. * Documentation/GDL2Intro/GNUmakefile: Remove subproject. * Documentation/GDL2Intro/GDL2Intro.texi: Update references to new location. * Trading: Move to ... * Examples/Trading: ... here. * Examples/Trading/GNUmakefile: Adapte to new location. * Examples/GNUmakefile: Add Trading. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gdl2/trunk@27918 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
16a7167a05
commit
a73ec2fc35
32 changed files with 32 additions and 18 deletions
312
Examples/Trading/TradingData.m
Normal file
312
Examples/Trading/TradingData.m
Normal file
|
@ -0,0 +1,312 @@
|
|||
#include "TradingData.h"
|
||||
|
||||
#define PDEC2(x) \
|
||||
[NSDecimalNumber decimalNumberWithMantissa:x \
|
||||
exponent:-2 \
|
||||
isNegative:NO]
|
||||
|
||||
@implementation TradingData
|
||||
- (id) init
|
||||
{
|
||||
|
||||
self = [super init];
|
||||
|
||||
if (self)
|
||||
{
|
||||
ec = [[EOEditingContext alloc] init];
|
||||
|
||||
customerDS = [[EODatabaseDataSource alloc] initWithEditingContext:ec
|
||||
entityName:@"Customer"];
|
||||
customerGroupDS = [[EODatabaseDataSource alloc] initWithEditingContext:ec
|
||||
entityName:@"CustomerGroup"];
|
||||
productGroupDS = [[EODatabaseDataSource alloc] initWithEditingContext:ec
|
||||
entityName:@"ProductGroup"];
|
||||
productDS = [[EODatabaseDataSource alloc] initWithEditingContext:ec
|
||||
entityName:@"Product"];
|
||||
suppliersDS = [[EODatabaseDataSource alloc] initWithEditingContext:ec
|
||||
entityName:@"Supplier"];
|
||||
priceListDS = [[EODatabaseDataSource alloc] initWithEditingContext:ec
|
||||
entityName:@"PriceList"];
|
||||
priceListPosDS = [[EODatabaseDataSource alloc] initWithEditingContext:ec
|
||||
entityName:@"PriceListPos"];
|
||||
orderDS = [[EODatabaseDataSource alloc] initWithEditingContext:ec
|
||||
entityName:@"Order"];
|
||||
orderPosDS = [[EODatabaseDataSource alloc] initWithEditingContext:ec
|
||||
entityName:@"OrderPos"];
|
||||
}
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
- (void) dealloc
|
||||
{
|
||||
[ec release];
|
||||
[customerDS release];
|
||||
[customerGroupDS release];
|
||||
[productGroupDS release];
|
||||
[productDS release];
|
||||
[suppliersDS release];
|
||||
[priceListDS release];
|
||||
[priceListPosDS release];
|
||||
[orderDS release];
|
||||
[orderPosDS release];
|
||||
}
|
||||
|
||||
- (void) fillTables
|
||||
{
|
||||
id fsfSup, mysqlSup, postgreSup, publicSup, acmeSup;
|
||||
id implGrp, softGrp;
|
||||
id folkGrp;
|
||||
id rake, shovel, pitchfork, mysql, postgresql, sqlite, gnustep, gcc;
|
||||
id salePriceList;
|
||||
id customer;
|
||||
id order;
|
||||
|
||||
implGrp = [self addProductGroup:@"Implements of destruction"];
|
||||
softGrp = [self addProductGroup:@"Software"];
|
||||
|
||||
fsfSup = [self addSupplierNamed:@"The Free Software Foundation"];
|
||||
gnustep = [self addProduct:@"GNUstep"
|
||||
price:PDEC2(2595)
|
||||
supplier:fsfSup
|
||||
group:softGrp];
|
||||
gcc = [self addProduct:@"gcc"
|
||||
price:PDEC2(4995)
|
||||
supplier:fsfSup
|
||||
group:softGrp];
|
||||
mysqlSup = [self addSupplierNamed:@"MySQL AB"];
|
||||
mysql = [self addProduct:@"MySQL"
|
||||
price:PDEC2(3000)
|
||||
supplier:fsfSup
|
||||
group:softGrp];
|
||||
|
||||
|
||||
postgreSup = [self addSupplierNamed:@"The PostgreSQL Global Development Group"];
|
||||
postgresql = [self addProduct:@"PostgreSQL"
|
||||
price:PDEC2(3000)
|
||||
supplier:postgreSup
|
||||
group:softGrp];
|
||||
|
||||
|
||||
publicSup = [self addSupplierNamed:@"sqlite.org"];
|
||||
sqlite = [self addProduct:@"SQLite"
|
||||
price:PDEC2(1500)
|
||||
supplier:publicSup
|
||||
group:softGrp];
|
||||
|
||||
|
||||
acmeSup = [self addSupplierNamed:@"ACME"];
|
||||
shovel = [self addProduct:@"Shovel"
|
||||
price:PDEC2(1400)
|
||||
supplier:acmeSup
|
||||
group:implGrp];
|
||||
|
||||
rake = [self addProduct:@"Rake"
|
||||
price:PDEC2(1295)
|
||||
supplier:acmeSup
|
||||
group:implGrp];
|
||||
pitchfork = [self addProduct:@"Pitchfork"
|
||||
price:PDEC2(1800)
|
||||
supplier:acmeSup
|
||||
group:implGrp];
|
||||
|
||||
folkGrp = [self addCustomerGroup:@"Angry Townfolk"];
|
||||
|
||||
[self customer:[self addCustomer:@"Angry Townsperson1" group:folkGrp]
|
||||
order:rake
|
||||
quantity:3];
|
||||
[self customer:[self addCustomer:@"Angry Townsperson2" group:folkGrp]
|
||||
order:shovel];
|
||||
|
||||
[self customer:[self addCustomer:@"Angry Townsperson3" group:folkGrp]
|
||||
order:rake
|
||||
quantity:2];
|
||||
|
||||
customer = [self addCustomer:@"Test Customer1"];
|
||||
order = [self createOrderForCustomer:customer];
|
||||
|
||||
[self order:order product:mysql quantity:5];
|
||||
[self order:order product:postgresql quantity:1];
|
||||
[self order:order product:rake quantity:2];
|
||||
|
||||
[self customer:[self addCustomer:@"Test Customer2"]
|
||||
order:postgresql];
|
||||
[self customer:[self addCustomer:@"Test Customer3"]
|
||||
order:sqlite];
|
||||
|
||||
|
||||
salePriceList = [self addPriceList:@"Farm Supply Sale"
|
||||
forGroup:folkGrp];
|
||||
|
||||
[self addProduct:pitchfork
|
||||
price:PDEC2(1675)
|
||||
toPriceList:salePriceList];
|
||||
[self addProduct:rake
|
||||
price:PDEC2(800)
|
||||
toPriceList:salePriceList];
|
||||
[self addProduct:shovel
|
||||
price:PDEC2(995)
|
||||
toPriceList:salePriceList];
|
||||
|
||||
[self saveChanges];
|
||||
}
|
||||
|
||||
- (id) addPriceList:(NSString *)name
|
||||
forGroup:(id)grp
|
||||
{
|
||||
id record = [priceListDS createObject];
|
||||
[record takeValue:name forKey:@"name"];
|
||||
[record addObject:grp toBothSidesOfRelationshipWithKey:@"customerGroup"];
|
||||
return record;
|
||||
}
|
||||
|
||||
- (id) addProduct:(id)product
|
||||
price:(NSDecimalNumber *)price
|
||||
toPriceList:(id)priceList
|
||||
{
|
||||
id record = [priceListPosDS createObject];
|
||||
|
||||
[record addObject:product toBothSidesOfRelationshipWithKey:@"product"];
|
||||
[record takeValue:price forKey:@"price"];
|
||||
[record addObject:priceList toBothSidesOfRelationshipWithKey:@"priceList"];
|
||||
[priceListPosDS insertObject:record];
|
||||
return record;
|
||||
}
|
||||
|
||||
- (id) addProductGroup:(NSString *)productGroupName
|
||||
{
|
||||
id record = [productGroupDS createObject];
|
||||
|
||||
[record takeValue:productGroupName forKey:@"name"];
|
||||
|
||||
return record;
|
||||
}
|
||||
|
||||
- (id) addSupplierNamed:(NSString *)name
|
||||
{
|
||||
id record = [suppliersDS createObject];
|
||||
|
||||
[record takeValue:name forKey:@"name"];
|
||||
|
||||
[suppliersDS insertObject:record];
|
||||
|
||||
return record;
|
||||
}
|
||||
|
||||
- (id) addProduct:(NSString *)productName
|
||||
price:(NSDecimalNumber *)price
|
||||
supplier:(id)supplier
|
||||
group:(id)productGroup
|
||||
{
|
||||
id record = [productDS createObject];
|
||||
|
||||
[record takeValue:productName forKey:@"name"];
|
||||
[record takeValue:price forKey:@"price"];
|
||||
[record addObject:supplier toBothSidesOfRelationshipWithKey:@"supplier"];
|
||||
[record addObject:productGroup toBothSidesOfRelationshipWithKey:@"productGroup"];
|
||||
|
||||
[productDS insertObject:record];
|
||||
return record;
|
||||
}
|
||||
- (id) addCustomerGroup:(NSString *)name
|
||||
{
|
||||
id record = [customerGroupDS createObject];
|
||||
|
||||
[record takeValue:name forKey:@"name"];
|
||||
|
||||
[customerGroupDS insertObject:record];
|
||||
return record;
|
||||
}
|
||||
|
||||
- (id) addCustomer:(NSString *)name
|
||||
{
|
||||
return [self addCustomer:name group:nil];
|
||||
}
|
||||
|
||||
- (id) addCustomer:(NSString *)name
|
||||
group:(id)group
|
||||
{
|
||||
id record = [customerDS createObject];
|
||||
|
||||
[record takeValue:name forKey:@"name"];
|
||||
[record addObject:group toBothSidesOfRelationshipWithKey:@"customerGroup"];
|
||||
|
||||
[customerDS insertObject:record];
|
||||
return record;
|
||||
}
|
||||
|
||||
- (id) createOrderForCustomer:(id)customer
|
||||
{
|
||||
id order = [orderDS createObject];
|
||||
[order takeValue:[NSDate date] forKey:@"date"];
|
||||
[order addObject:customer toBothSidesOfRelationshipWithKey:@"customer"];
|
||||
[orderDS insertObject:order];
|
||||
return order;
|
||||
}
|
||||
|
||||
- (id) order:(id)order
|
||||
product:(id)product
|
||||
quantity:(int)quantity
|
||||
{
|
||||
id orderPos = [orderPosDS createObject];
|
||||
NSNumber *price = [product valueForKey:@"price"];
|
||||
NSNumber *qNum = [NSNumber numberWithInt:quantity];
|
||||
/* this should really not be in the database but in some business logic */
|
||||
NSNumber *value = [NSNumber numberWithDouble:((double)quantity) * [price doubleValue]];
|
||||
[orderPos addObject:product toBothSidesOfRelationshipWithKey:@"product"];
|
||||
[orderPos addObject:order toBothSidesOfRelationshipWithKey:@"order"];
|
||||
/* FIXME customer group pricing */
|
||||
[orderPos takeValue:price forKey:@"price"];
|
||||
[orderPos takeValue:qNum forKey:@"quantity"];
|
||||
[orderPos takeValue:value forKey:@"value"];
|
||||
|
||||
/* FIXME this should be a relationship to a pos table */
|
||||
[orderPos takeValue:[NSNumber numberWithInt:1] forKey:@"posnr"];
|
||||
return orderPos;
|
||||
}
|
||||
|
||||
- (id) customer:(id)customer
|
||||
order:(id)product
|
||||
{
|
||||
return [self customer:customer order:product quantity:1];
|
||||
}
|
||||
|
||||
- (id) customer:(id)customer
|
||||
order:(id)product
|
||||
quantity:(int)quantity
|
||||
{
|
||||
return [self customer:customer order:product quantity:quantity posNr:1];
|
||||
}
|
||||
|
||||
- (id) customer:(id)customer
|
||||
order:(id)product
|
||||
quantity:(int)quantity
|
||||
posNr:(int)posNr
|
||||
{
|
||||
id order = [orderDS createObject];
|
||||
id orderPos = [orderPosDS createObject];
|
||||
NSNumber *price = [product valueForKey:@"price"];
|
||||
NSNumber *qNum = [NSNumber numberWithInt:quantity];
|
||||
NSNumber *value = [NSNumber numberWithDouble:((double)quantity) * [price doubleValue]];
|
||||
|
||||
[order takeValue:[NSDate date] forKey:@"date"];
|
||||
[order addObject:customer toBothSidesOfRelationshipWithKey:@"customer"];
|
||||
|
||||
[orderPos addObject:order toBothSidesOfRelationshipWithKey:@"order"];
|
||||
/* FIXME customer group pricing */
|
||||
[orderPos takeValue:price forKey:@"price"];
|
||||
[orderPos takeValue:qNum forKey:@"quantity"];
|
||||
[orderPos takeValue:value forKey:@"value"];
|
||||
/* fixme this should be a relationship to a pos table */
|
||||
[orderPos takeValue:[NSNumber numberWithInt:posNr] forKey:@"posnr"];
|
||||
[orderPos addObject:product toBothSidesOfRelationshipWithKey:@"product"];
|
||||
|
||||
return order;
|
||||
}
|
||||
|
||||
- (void) saveChanges
|
||||
{
|
||||
[ec saveChanges];
|
||||
}
|
||||
|
||||
@end
|
Loading…
Add table
Add a link
Reference in a new issue