// // OLDataProvider.m // iSales-NPD // // Created by Ray on 2/2/16. // Copyright © 2016 United Software Applications, Inc. All rights reserved. // #import "OLDataProvider.h" #import "iSalesDB.h" #import "RAUtils.h" #import "AESCrypt.h" #import "AppDelegate.h" #import "ZipArchive.h" #import "UIProgressView+AFNetworking.h" #import "AFHTTPSessionManager.h" #import "AppDelegate.h" @interface OLDataProvider () @end @implementation OLDataProvider +(NSString*) get_offline_soid:(sqlite3*)db { NSString* soid=nil; NSDateFormatter* formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"yyMMdd"]; NSString* date = [formatter stringFromDate:[NSDate date]]; for(int i=1;i<999;i++) { soid=[NSString stringWithFormat:@"OFF%@%4d",date,i]; soid= [soid stringByReplacingOccurrencesOfString:@" " withString:@"0"]; int count=[iSalesDB get_recordcount:db table:@"offline_order" where:[NSString stringWithFormat:@"so_id='%@'",soid]]; if(count==0) return soid; } return nil; } +(NSArray*) enumOfflineOrder { NSMutableArray* ret = [[NSMutableArray alloc] init]; sqlite3 *db = [iSalesDB get_db]; NSString *sqlQuery =@"select so_id from offline_order where status=-11;"; sqlite3_stmt * statement; int dbresult=sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil); if ( dbresult== SQLITE_OK) { while (sqlite3_step(statement) == SQLITE_ROW) { char *so_id = (char*)sqlite3_column_text(statement, 0); NSString* nsso_id=nil; if(so_id!=nil) { nsso_id= [[NSString alloc]initWithUTF8String:so_id]; } [ret addObject:nsso_id]; } sqlite3_finalize(statement); } [iSalesDB close_db:db]; return ret; } +(void) uploadFile:(NSString*) file { NSData* data = [NSData dataWithContentsOfFile: file]; UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; AFHTTPRequestSerializer* serializer=[AFHTTPRequestSerializer serializer] ; NSMutableDictionary* params = [[NSMutableDictionary alloc] init]; if(appDelegate.user!=nil) [params setValue:appDelegate.user forKey:@"user"]; // if(appDelegate.contact_id!=nil) // [params setValue:appDelegate.contact_id forKey:@"contactId"]; if(appDelegate.password!=nil) [params setValue:appDelegate.password forKey:@"password"]; NSMutableURLRequest *request = [serializer multipartFormRequestWithMethod:@"POST" URLString:URL_UPLOAD_OFFLINE parameters:params constructingBodyWithBlock:^(id formData) { [formData appendPartWithFileData:data name:@"upfile" fileName:[file lastPathComponent] mimeType:@"application/zip"]; } error:nil]; AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; NSProgress *progress = nil; NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { NSString* err_msg = [error localizedDescription]; NSLog(@"%@",err_msg);// [self.view updateWithMessage:[NSString stringWithFormat:@"Error : %@!", error.debugDescription]]; NSMutableString *str = [[NSMutableString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"data string: %@",str); [RAUtils message_alert:@"Can not connect to server please try again." title:@"Upload Image" controller:self] ; } else { NSLog(@"response "); NSData *data = [NSJSONSerialization dataWithJSONObject:(NSDictionary*)responseObject options:kNilOptions error:nil]; // 再将NSData转为字符串 NSString *jsonStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; // NSMutableString *str = [[NSMutableString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding]; NSLog(@"data string: %@",jsonStr); NSDictionary* json = responseObject; if([[json valueForKey:@"result"] intValue]==2) { // NSString* img_url_down = json[@"img_url_aname"]; // NSString* img_url_up = json[@"img_url"]; } else { [RAUtils message_alert:[json valueForKey:@"err_msg"] title:@"Upload file" controller:nil] ; } } // [waitalert dismissWithClickedButtonIndex:0 animated:FALSE]; }]; // [self.uploadProgress setProgressWithUploadProgressOfTask:uploadTask animated:true]; // [uploadTask resume]; } +(NSDictionary *) prepareUpload:(NSArray*) arr_order { NSString* serial= [[NSUUID UUID] UUIDString]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachefolder = [paths objectAtIndex:0]; NSString *upfolder = [cachefolder stringByAppendingPathComponent:@"upload_data"]; upfolder = [upfolder stringByAppendingPathComponent:serial]; NSFileManager* fileManager = [NSFileManager defaultManager]; BOOL bdir=YES; if(! [fileManager fileExistsAtPath:upfolder isDirectory:&bdir]) { NSError *error = nil; bool bsuccess=[fileManager createDirectoryAtPath:upfolder withIntermediateDirectories:YES attributes:nil error:&error]; if(!bsuccess) DebugLog(@"Create UPLOAD folder failed"); } NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; ret[@"contact"]=[self prepareContact:serial]; ret[@"wishlist"]=[self prepareWishlist:serial]; ret[@"order"]=[self prepareOrder:serial soid:arr_order]; NSString* str= [RAUtils dict2string:ret]; NSString * jsonpath= [upfolder stringByAppendingPathComponent:@"json.json"]; NSString * zippath= [upfolder stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.zip",serial]]; NSError *error=nil; [str writeToFile:jsonpath atomically:true encoding:NSUTF8StringEncoding error:&error]; NSArray* arr_files=[RAUtils allFilesAtPath:upfolder]; ZipArchive* zip = [[ZipArchive alloc] init]; BOOL result = [zip CreateZipFile2:zippath Password:@"usai2010"]; for(int i=0;i0) { double dp= [nsprice doubleValue]; item[nsname]= [NSString stringWithFormat:@"%.2f",dp]; } } else { item[nsname]= @"No Price"; } // item[nsname]= nsprice; ret[[NSString stringWithFormat:@"item_%d",count]]= item; count++; } ret[@"count"]= [NSNumber numberWithInt:count]; sqlite3_finalize(statement); } // [iSalesDB close_db:db]; return ret; } //+(NSNumber*) get_model_default_price:(NSString*) contact_id product_id:(int) product_id db:(sqlite3*)db //{ // NSArray* arr1 = [self get_user_all_price_type:db]; // NSArray* arr2 = [self get_contact_default_price_type:contact_id db:db]; // // // NSSet *set1 = [NSSet setWithArray:arr1]; // // NSMutableSet *set2 = [[NSSet setWithArray:arr2] mutableCopy]; // // [set2 intersectsSet:set1]; // // // // // // NSArray *retarr = [set2 allObjects]; // // NSString* whereprice=nil; // if(contact_id==nil) // whereprice=[RAUtils arr2string:arr1 separator:@"," trim:true brackets:@"'"]; // else // whereprice=[RAUtils arr2string:arr2 separator:@"," trim:true brackets:@"'"]; // // // // sqlite3 *db = [iSalesDB get_db]; // // NSString* sqlQuery = [NSString stringWithFormat:@"select price from model_price where product_id='%d' and price_name in(%@);",product_id,whereprice]; // sqlite3_stmt * statement; // // // NSNumber* ret = nil; // double dprice=DBL_MAX; // if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) // { // // // while (sqlite3_step(statement) == SQLITE_ROW) // { // // // double val = sqlite3_column_double(statement, 0); // char *price = (char*)sqlite3_column_text(statement, 0); // if(price!=nil) // { // NSString* nsprice = [[NSString alloc]initWithUTF8String:price]; // nsprice=[AESCrypt fastdecrypt:nsprice]; // if(nsprice.length>0) // { // double dp= [nsprice doubleValue]; // if(dp0) { double dp= [nsprice doubleValue]; if(dp0) ret=[RAUtils string2arr:nsprice_type separator:OFFLINE_ARRAY_SEPARATOR]; else ret=nil; } sqlite3_finalize(statement); } // [iSalesDB close_db:db]; return ret; } +(NSString*) model_category_img :(NSString *) product_id model_name:(NSString *) model_name db:(sqlite3*)db { NSString* ret= nil; // sqlite3 *db = [iSalesDB get_db]; NSString *sqlQuery = nil; //select url,type from model_image where product_id=%d and type=1 order by default_img desc , _id asc limit 1;",product_id // sqlQuery = [NSString stringWithFormat:@"select i.url from product m LEFT join model_image i on m.product_id = i.product_id where m.name=%@ order by i.default_img desc, i._id asc limit 1;",model_name];// select i.url from model m LEFT join model_image i on m.product_id = i.product_id where m.name=%@ order by i.default_img desc, i._id asc limit 1; // sqlQuery = [NSString stringWithFormat:@"select i.url from product m LEFT join model_image i on m.product_id = i.product_id where m.product_id=%@ order by i.default_img desc, i._id asc limit 1;",product_id];// select i.url from model m if(product_id==nil && model_name) sqlQuery = [NSString stringWithFormat:@"select i.url from model_image i where product_id in (select product_id from product where name='%@') order by i.default_img desc, i._id asc limit 1;",model_name];// select i.url from model m LEFT join model_image i on m.product_id = i.product_id where m.name=%@ order by i.default_img desc, i._id asc limit 1; else if (product_id) sqlQuery = [NSString stringWithFormat:@"select i.url from model_image i where i.product_id=%@ order by i.default_img desc, i._id asc limit 1;",product_id];// select i.url from model m sqlite3_stmt * statement; // int count=0; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { char *imgurl = (char*)sqlite3_column_text(statement, 0); if(imgurl==nil) imgurl=""; NSString *nsimgurl = [[NSString alloc]initWithUTF8String:imgurl]; ret=nsimgurl; } sqlite3_finalize(statement); } else { [ret setValue:@"8" forKey:@"result"]; } // [iSalesDB close_db:db]; DebugLog(@"data string: %@",ret ); return ret; } +(NSString*) model_default_category :(NSString *) product_id model_name:(NSString *) model_name { NSString* ret= nil; sqlite3 *db = [iSalesDB get_db]; NSString *sqlQuery = nil; if(product_id==nil) sqlQuery = [NSString stringWithFormat:@"select default_category from product where name='%@';",model_name];// select default_category from model where name='%@'; else sqlQuery = [NSString stringWithFormat:@"select default_category from product where product_id=%@;",product_id]; // select default_category from model where product_id=%@; sqlite3_stmt * statement; // int count=0; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { char *default_category = (char*)sqlite3_column_text(statement, 0); if(default_category==nil) default_category=""; NSString *nsdefault_category = [[NSString alloc]initWithUTF8String:default_category]; nsdefault_category=[nsdefault_category stringByReplacingOccurrencesOfString:@"%#" withString:@""]; nsdefault_category=[nsdefault_category stringByReplacingOccurrencesOfString:@"#%" withString:@""]; ret=nsdefault_category; } sqlite3_finalize(statement); } else { [ret setValue:@"8" forKey:@"result"]; } [iSalesDB close_db:db]; DebugLog(@"data string: %@",ret ); return ret; } +(NSDictionary*) offline_model :(NSMutableDictionary *) params { NSString* model_name = [params valueForKey:@"product_name"]; NSString* product_id = [params valueForKey:@"product_id"]; NSString* category = [params valueForKey:@"category"]; if(category==nil) category = [self model_default_category:product_id model_name:model_name]; NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; sqlite3 *db = [iSalesDB get_db]; int count = [iSalesDB get_recordcount:db table:@"product" where:[NSString stringWithFormat:@"category like'#%%%@%%#'",category]]; NSString *sqlQuery = nil; if(product_id==nil) sqlQuery = [NSString stringWithFormat:@"select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging,ETA,item_id from product where name='%@';",model_name]; // select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging from model where name='%@'; else sqlQuery = [NSString stringWithFormat:@"select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging,ETA,item_id from product where product_id=%@;",product_id]; // select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging from model where product_id=%@; sqlite3_stmt * statement; [ret setValue:@"2" forKey:@"result"]; [ret setValue:@"3" forKey:@"detail_section_count"]; // int count=0; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { // NSMutableDictionary* item = [[NSMutableDictionary alloc] init]; char *name = (char*)sqlite3_column_text(statement, 0); if(name==nil) name=""; NSString *nsname = [[NSString alloc]initWithUTF8String:name]; char *description = (char*)sqlite3_column_text(statement, 1); if(description==nil) description=""; NSString *nsdescription = [[NSString alloc]initWithUTF8String:description]; int product_id = sqlite3_column_int(statement, 2); char *color = (char*)sqlite3_column_text(statement, 3); if(color==nil) color=""; // NSString *nscolor = [[NSString alloc]initWithUTF8String:color]; // // char *legcolor = (char*)sqlite3_column_text(statement, 4); // if(legcolor==nil) // legcolor=""; // NSString *nslegcolor = [[NSString alloc]initWithUTF8String:legcolor]; // // int availability = sqlite3_column_int(statement, 5); // int incoming_stock = sqlite3_column_int(statement, 6); char *demension = (char*)sqlite3_column_text(statement, 7); if(demension==nil) demension=""; NSString *nsdemension = [[NSString alloc]initWithUTF8String:demension]; // ,,,,,,,,, char *seat_height = (char*)sqlite3_column_text(statement, 8); if(seat_height==nil) seat_height=""; NSString *nsseat_height = [[NSString alloc]initWithUTF8String:seat_height]; char *material = (char*)sqlite3_column_text(statement, 9); if(material==nil) material=""; NSString *nsmaterial = [[NSString alloc]initWithUTF8String:material]; char *box_dim = (char*)sqlite3_column_text(statement, 10); if(box_dim==nil) box_dim=""; NSString *nsbox_dim = [[NSString alloc]initWithUTF8String:box_dim]; char *volume = (char*)sqlite3_column_text(statement, 11); if(volume==nil) volume=""; NSString *nsvolume = [[NSString alloc]initWithUTF8String:volume]; double weight = sqlite3_column_double(statement, 12); char *model_set = (char*)sqlite3_column_text(statement, 13); if(model_set==nil) model_set=""; NSString *nsmodel_set = [[NSString alloc]initWithUTF8String:model_set]; char *load_ability = (char*)sqlite3_column_text(statement, 14); if(load_ability==nil) load_ability=""; NSString *nsload_ability = [[NSString alloc]initWithUTF8String:load_ability]; char *default_category = (char*)sqlite3_column_text(statement, 15); if(default_category==nil) default_category=""; NSString *nsdefault_category = [[NSString alloc]initWithUTF8String:default_category]; char *fabric_content = (char*)sqlite3_column_text(statement, 16); if(fabric_content==nil) fabric_content=""; NSString *nsfabric_content = [[NSString alloc]initWithUTF8String:fabric_content]; char *assembling = (char*)sqlite3_column_text(statement, 17); if(assembling==nil) assembling=""; NSString *nsassembling = [[NSString alloc]initWithUTF8String:assembling]; char *made_in = (char*)sqlite3_column_text(statement, 18); if(made_in==nil) made_in=""; NSString *nsmade_in = [[NSString alloc]initWithUTF8String:made_in]; char *special_remarks = (char*)sqlite3_column_text(statement, 19); if(special_remarks==nil) special_remarks=""; NSString *nsspecial_remarks = [[NSString alloc]initWithUTF8String:special_remarks]; int stockUcom = sqlite3_column_double(statement, 20); char *product_group = (char*)sqlite3_column_text(statement, 21); if(product_group==nil) product_group=""; NSString *nsproduct_group = [[NSString alloc]initWithUTF8String:product_group]; // char *fashion_selector = (char*)sqlite3_column_text(statement, 22); // if(fashion_selector==nil) // fashion_selector=""; // NSString *nsfashion_selector = [[NSString alloc]initWithUTF8String:fashion_selector]; char *selector_field = (char*)sqlite3_column_text(statement, 22); if(selector_field==nil) selector_field=""; NSString *nsselector_field = [[NSString alloc]initWithUTF8String:selector_field]; char *property_field = (char*)sqlite3_column_text(statement, 23); if(property_field==nil) property_field=""; NSString *nsproperty_field = [[NSString alloc]initWithUTF8String:property_field]; char *packaging = (char*)sqlite3_column_text(statement, 24); if(packaging==nil) packaging=""; NSString *nspackaging = [[NSString alloc]initWithUTF8String:packaging]; [ret setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"]; NSMutableDictionary* img_section = [[NSMutableDictionary alloc] init]; [img_section setValue:[NSString stringWithFormat:@"%d",incoming_stock] forKey:@"incoming_stock"]; NSString* model_s_img = [self model_category_img:[NSString stringWithFormat:@"%d",product_id] model_name:model_name db:db]; [img_section setValue:model_s_img forKey:@"model_s_img"]; [img_section setObject:[self model_img:product_id db:db] forKey:@"images"]; [img_section setObject:[self model_property:product_id field:nsproperty_field db:db] forKey:@"property"]; [img_section setObject:[self model_selector:nsproduct_group field:nsselector_field db:db] forKey:@"selector"]; NSString* Availability=nil; if(availability>0) Availability=[NSString stringWithFormat:@"%d",availability]; else Availability = @"In Production"; [img_section setValue:Availability forKey:@"Availability"]; [img_section setValue:[NSString stringWithFormat:@"%d",stockUcom] forKey:@"stockUom"]; AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; char *eta = (char*)sqlite3_column_text(statement, 25); if(eta==nil) eta=""; NSString *nseta = [[NSString alloc]initWithUTF8String:eta]; [img_section setValue:nseta forKey:@"ETA"]; int item_id = sqlite3_column_int(statement, 26); NSString* Price=nil; if(appDelegate.bLogin==false) Price=@"Must Sign in."; else { // NSNumber* price= [self get_model_default_price:appDelegate.contact_id product_id:product_id db:db]; NSNumber* price = [self get_model_default_price:appDelegate.contact_id product_id:nil item_id:@(item_id) db:db]; if(price==nil) Price=@"No Price."; else Price=[NSString stringWithFormat:@"%.2f",price.floatValue]; } [img_section setValue:Price forKey:@"price"]; [img_section setValue:nsname forKey:@"model_name"]; [img_section setValue:nsdescription forKey:@"model_descrition"]; [ret setObject:img_section forKey:@"img_section"]; NSMutableDictionary* detail0_section = [[NSMutableDictionary alloc] init]; int detail0_item_count=0; [detail0_section setObject:[self model_kvItem:@"Dimension" value:nsdemension] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Seat Height" value:nsseat_height] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Material" value:nsmaterial] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Box dimension" value:nsbox_dim] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Volume" value:nsvolume] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Weight" value:[NSString stringWithFormat:@"%0.2f",weight]] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Set" value:nsmodel_set] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Load ability" value:nsload_ability] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Fabric Content" value:nsfabric_content] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Assembling" value:nsassembling] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Made in" value:nsmade_in] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Special Remarks" value:nsspecial_remarks] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; [detail0_section setObject:[self model_kvItem:@"Packaging" value:nspackaging] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; // NSDictionary* pricejson=[self get_model_all_price:appDelegate.contact_id product_id:product_id db:db]; NSDictionary* pricejson = [self get_model_all_price:appDelegate.contact_id item_id:item_id db:db]; for(int l=0;l<[pricejson[@"count"] intValue];l++) { NSDictionary* price_item = pricejson[[NSString stringWithFormat:@"item_%d",l]]; [detail0_section setObject:[self model_kvItem:price_item.allKeys[0] value:price_item.allValues[0]] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]]; } [detail0_section setValue:[NSString stringWithFormat:@"%d",detail0_item_count] forKey:@"count"]; [detail0_section setValue:@"kv" forKey:@"type"]; [detail0_section setValue:@"Product Information" forKey:@"title"]; [ret setObject:detail0_section forKey:@"detail_0"]; NSMutableDictionary* detail1_section = [[self model_NIYMAL:category db:db] mutableCopy]; // [detail1_section setValue:@"detail" forKey:@"target"]; // [detail1_section setValue:@"popup" forKey:@"action"]; // [detail1_section setValue:@"content" forKey:@"type"]; // [detail1_section setValue:@"New Items You May Also Like" forKey:@"title"]; // [detail1_section setValue:@"model_NIYMAL" forKey:@"data_interface"]; // [detail1_section setValue:@"true" forKey:@"single_row"]; // [detail1_section setValue:@"true" forKey:@"partial_refresh"]; [ret setObject:detail1_section forKey:@"detail_1"]; NSMutableDictionary* detail2_section = [[NSMutableDictionary alloc]init]; [detail2_section setValue:@"detail" forKey:@"target"]; [detail2_section setValue:@"popup" forKey:@"action"]; [detail2_section setValue:@"content" forKey:@"type"]; [detail2_section setValue:@"Recently Viewed" forKey:@"title"]; [detail2_section setValue:@"true" forKey:@"single_row"]; [detail2_section setValue:@"local" forKey:@"data"]; [ret setObject:detail2_section forKey:@"detail_2"]; } sqlite3_finalize(statement); } else { [ret setValue:@"8" forKey:@"result"]; } NSLog(@"count:%d",count); [iSalesDB close_db:db]; DebugLog(@"data string: %@",[RAUtils dict2string:ret] ); return ret; } + (NSDictionary *) search:(NSMutableDictionary *)params limited:(BOOL)limited { NSString* orderCode = [params valueForKey:@"orderCode"]; NSString* keyword = [params valueForKey:@"keyword"]; keyword=keyword.lowercaseString; bool exactMatch = [[params valueForKey:@"exactMatch"] boolValue]; int limit = [[params valueForKey:@"limit"] intValue]; int offset = [[params valueForKey:@"offset"] intValue]; NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSString *limit_str = @""; if (limited) { limit_str = [NSString stringWithFormat:@"limit %d offset %d ",limit,offset]; } sqlite3 *db = [iSalesDB get_db]; int count = [iSalesDB get_recordcount:db table:@"product" where:[NSString stringWithFormat:@"(lower(name) like'%%%@%%' or lower(description) like'%%%@%%') and is_active = 1",keyword,keyword]]; UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; NSString *sqlQuery = nil; if(exactMatch ) sqlQuery=[NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete from product m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id where lower(name) like'%@%%' and m.is_active = 1 order by m.name %@;",appDelegate.order_code, keyword,limit_str]; // select m.name,m.description,m.product_id,w._id,m.closeout from model m left join wishlist w on m.product_id=w.product_id where lower(name) like'%@%%' order by m.name limit %d offset %d ; else sqlQuery=[NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete from product m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id where (lower(name) like'%%%@%%' or lower(description) like'%%%@%%') and m.is_active = 1 order by m.name %@ ;",appDelegate.order_code, keyword,keyword,limit_str];// select m.name,m.description,m.product_id,w._id,m.closeout from model m left join wishlist w on m.product_id=w.product_id where lower(name) like'%%%@%%' or DebugLog(@"offline_search sql:%@",sqlQuery); sqlite3_stmt * statement; [ret setValue:@"2" forKey:@"result"]; [ret setValue:[NSString stringWithFormat:@"%d",count] forKey:@"item_total_count"]; NSMutableDictionary* items = [[NSMutableDictionary alloc] init]; // int count=0; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { int i=0; while (sqlite3_step(statement) == SQLITE_ROW) { NSMutableDictionary* item = [[NSMutableDictionary alloc] init]; // char *name = (char*)sqlite3_column_text(statement, 1); // NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name]; char *name = (char*)sqlite3_column_text(statement, 0); NSString *nsname = [[NSString alloc]initWithUTF8String:name]; char *description = (char*)sqlite3_column_text(statement, 1); NSString *nsdescription = [[NSString alloc]initWithUTF8String:description]; int product_id = sqlite3_column_int(statement, 2); // char *url = (char*)sqlite3_column_text(statement, 3); // if(url==nil) // url=""; // NSString *nsurl = [[NSString alloc]initWithUTF8String:url]; int wid = sqlite3_column_int(statement, 3); int closeout = sqlite3_column_int(statement, 4); int cid = sqlite3_column_int(statement, 5); int wisdelete = sqlite3_column_int(statement, 6); NSMutableDictionary* imgjson=[self category_img:product_id db:db]; if(wid !=0 && wisdelete != 1) [item setValue:@"true" forKey:@"wish_exists"]; else [item setValue:@"false" forKey:@"wish_exists"]; if(closeout==0) [item setValue:@"false" forKey:@"is_closeout"]; else [item setValue:@"true" forKey:@"is_closeout"]; if(cid==0) [item setValue:@"false" forKey:@"cart_exists"]; else [item setValue:@"true" forKey:@"cart_exists"]; [item addEntriesFromDictionary:imgjson]; // [item setValue:nsurl forKey:@"img"]; [item setValue:nsname forKey:@"fash_name"]; [item setValue:nsdescription forKey:@"description"]; [item setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"]; [items setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]]; i++; } [items setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"]; [ret setObject:items forKey:@"items"]; sqlite3_finalize(statement); } NSLog(@"count:%d",count); [iSalesDB close_db:db]; DebugLog(@"data string: %@",[RAUtils dict2string:ret] ); return ret; } +(NSDictionary*) offline_search:(NSMutableDictionary *) params { return [self search:params limited:YES]; } +(NSDictionary*) offline_logout :(NSMutableDictionary *) params { UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; appDelegate.disable_trigger=true; [iSalesDB execSql:@"delete from offline_order where status=0;"]; appDelegate.disable_trigger=false; // // NSString* user = [params valueForKey:@"user"]; // // NSString* password = [params valueForKey:@"password"]; NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; ret[@"result"]=[NSNumber numberWithInt:2 ]; appDelegate.cart_count = 0;//[[jsobj valueForKey:@"cart_count"] intValue]; appDelegate.wish_count =0;//[[jsobj valueForKey:@"wish_count"] intValue]; appDelegate.port_count =0;//[[jsobj valueForKey:@"portfolio_count"] intValue]; [appDelegate update_count_mark]; appDelegate.can_show_price =false; appDelegate.can_see_price =false; appDelegate.can_create_portfolio =false; appDelegate.can_create_order =false; appDelegate.can_cancel_order =false; appDelegate.can_set_cart_price =false; appDelegate.can_delete_order =false; appDelegate.can_submit_order =false; appDelegate.can_set_tearsheet_price =false; appDelegate.can_update_contact_info = false; appDelegate.save_order_logout = false; appDelegate.submit_order_logout = false; appDelegate.alert_sold_in_quantities = false; appDelegate.ipad_perm =nil ; appDelegate.user_type = USER_ROLE_UNKNOWN; appDelegate.OrderFilter= nil; [appDelegate SetSo:nil]; [appDelegate set_main_button_panel]; // sqlite3 *db = [iSalesDB get_db]; // // // // // // NSString *sqlQuery = [NSString stringWithFormat:@"select can_show_price,can_see_price,contact_id,user_type,can_cancel_order,can_set_cart_price,can_create_portfolio,can_delete_order,can_submit_order,can_set_tearsheet_price,can_create_order,mode,username from offline_login where lower(username)='%@' and password='%@'",user.lowercaseString ,[AESCrypt encrypt:password password:@"usai"]]; // // // // // DebugLog(@"offline_login sql:%@",sqlQuery); // sqlite3_stmt * statement; // // // [ret setValue:[NSNumber numberWithInt:AP_USER_NOT_AUTH ] forKey:@"result"]; // // // if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) // { // // // if (sqlite3_step(statement) == SQLITE_ROW) // { // // [ret setValue:[NSNumber numberWithInt:AP_USER_AUTH ] forKey:@"result"]; // NSMutableDictionary* header = [[NSMutableDictionary alloc] init]; // // // // int can_show_price = sqlite3_column_int(statement, 0); // int can_see_price = sqlite3_column_int(statement, 1); // // char *contact_id = (char*)sqlite3_column_text(statement, 2); // if(contact_id==nil) // contact_id=""; // NSString *nscontact_id= [[NSString alloc]initWithUTF8String:contact_id]; // // int user_type = sqlite3_column_int(statement, 3); // // int can_cancel_order = sqlite3_column_int(statement, 4); // int can_set_cart_price = sqlite3_column_int(statement, 5); // int can_create_portfolio = sqlite3_column_int(statement, 6); // int can_delete_order = sqlite3_column_int(statement, 7); // int can_submit_order = sqlite3_column_int(statement, 8); // int can_set_tearsheet_price = sqlite3_column_int(statement, 9); // int can_create_order = sqlite3_column_int(statement, 10); // // // char *mode = (char*)sqlite3_column_text(statement, 11); // if(mode==nil) // mode=""; // NSString *nsmode= [[NSString alloc]initWithUTF8String:mode]; // // // char *username = (char*)sqlite3_column_text(statement, 12); // if(username==nil) // username=""; // NSString *nsusername= [[NSString alloc]initWithUTF8String:username]; // // // [header setValue:[NSNumber numberWithBool:can_show_price] forKey:@"can_show_price"]; // [header setValue:[NSNumber numberWithBool:can_see_price] forKey:@"can_see_price"]; // [header setValue:nscontact_id forKey:@"contact_id"]; // [header setValue:[NSNumber numberWithBool:user_type] forKey:@"user_type"]; // [header setValue:[NSNumber numberWithBool:can_cancel_order] forKey:@"can_cancel_order"]; // [header setValue:[NSNumber numberWithBool:can_set_cart_price] forKey:@"can_set_cart_price"]; // [header setValue:[NSNumber numberWithBool:can_create_portfolio] forKey:@"can_create_portfolio"]; // [header setValue:[NSNumber numberWithBool:can_delete_order] forKey:@"can_delete_order"]; // [header setValue:[NSNumber numberWithBool:can_submit_order] forKey:@"can_submit_order"]; // [header setValue:[NSNumber numberWithBool:can_set_tearsheet_price] forKey:@"can_set_tearsheet_price"]; // [header setValue:[NSNumber numberWithBool:can_create_order] forKey:@"can_create_order"]; // // [header setValue:nsusername forKey:@"username"]; // // // [ret setObject:header forKey:@"header"]; // [ret setValue:nsmode forKey:@"mode"]; // // // } // // // // sqlite3_finalize(statement); // } // // // // [iSalesDB close_db:db]; // // // // // DebugLog(@"data string: %@",[RAUtils dict2string:ret] ); return ret; } +(NSData*) offline_createorder :(NSMutableDictionary *) params { UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; appDelegate.disable_trigger=true; [iSalesDB execSql:@"delete from offline_order where status=0;"]; appDelegate.disable_trigger=false; NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSString* customer_cid = [self translateSingleQuote:params[@"customer_cid"]]; // NSString* customer_address1 = [self translateSingleQuote:params[@"customer_address1"]]; // NSString* customer_address2 = [self translateSingleQuote:params[@"customer_address2"]]; // NSString* customer_address3 = [self translateSingleQuote:params[@"customer_address3"]]; // NSString* customer_address4 = [self translateSingleQuote:params[@"customer_address4"]]; // NSString* customer_city = [self translateSingleQuote:params[@"customer_city"]]; NSString* customer_contact = [self translateSingleQuote:params[@"customer_contact"]]; // NSString* customer_contact_ext = [self translateSingleQuote:params[@"customer_contact_ext"]]; // NSString* customer_contact_notes = [self translateSingleQuote:params[@"customer_contact_notes"]]; // NSString* customer_country = [self translateSingleQuote:params[@"customer_country"]]; NSString* customer_email = [self translateSingleQuote:params[@"customer_email"]]; NSString* customer_fax = [self translateSingleQuote:params[@"customer_fax"]]; NSString* customer_first_name = [self translateSingleQuote:params[@"customer_first_name"]]; NSString* customer_last_name = [self translateSingleQuote:params[@"customer_last_name"]]; // NSString* customer_name = [self translateSingleQuote:params[@"customer_name"]]; NSString* customer_phone = [self translateSingleQuote:params[@"customer_phone"]]; // NSString* customer_price_type = [self translateSingleQuote:params[@"customer_price_type"]]; NSString* customer_sales_rep = [self translateSingleQuote:params[@"customer_sales_rep"]]; // NSString* customer_state = [self translateSingleQuote:params[@"customer_state"]]; // NSString* customer_zipcode = [self translateSingleQuote:params[@"customer_zipcode"]]; NSString* create_by = [self translateSingleQuote:params[@"user"]]; NSMutableArray* arr_name= [[NSMutableArray alloc] init]; [arr_name addObject:customer_first_name]; [arr_name addObject:customer_last_name]; NSString *contact_name=[RAUtils arr2string:arr_name separator:@" " trim:true]; // default ship from NSString *ship_from_default_sql = @"select contact_id,decrypt(company_name),decrypt(addr_1),first_name || ' ' || last_name,email,fax,decrypt(phone) from offline_contact where contact_id = 'NPD';"; __block NSString *cid = @""; __block NSString *name = @""; __block NSString *ext = @""; __block NSString *contact = @""; __block NSString *email = @""; __block NSString *fax = @""; __block NSString *phone = @""; sqlite3 *db = [iSalesDB get_db]; [iSalesDB jk_query:ship_from_default_sql db:db close:NO completion:^(sqlite3_stmt *statment, NSMutableDictionary *container, long *count) { cid = [self textAtColumn:0 statement:statment]; name = [self textAtColumn:1 statement:statment]; ext = [self textAtColumn:2 statement:statment]; contact = [self textAtColumn:3 statement:statment]; email = [self textAtColumn:4 statement:statment]; fax = [self textAtColumn:5 statement:statment]; phone = [self textAtColumn:6 statement:statment]; }]; NSString* so_id = [self get_offline_soid:db]; if(so_id==nil) so_id=[NSString stringWithFormat:@"OFFLINE%@",[NSUUID UUID].UUIDString ]; NSString* sql_neworder=[NSString stringWithFormat:@"insert into offline_order(so_id,status,customer_cid,customer_contact,customer_email,customer_fax,customer_phone,sales_rep,create_by,customer_contact,must_call,sender_cid,sender_name,sender_ext,sender_contact,sender_phone,sender_fax,sender_email) values('%@',0,'%@','%@','%@','%@','%@','%@','%@','%@',1,'%@','%@','%@','%@','%@','%@','%@')",so_id,customer_cid,customer_contact,customer_email,customer_fax,customer_phone,customer_sales_rep,create_by ,contact_name,cid,name,ext,contact,phone,fax,email]; int result =[iSalesDB execSql:sql_neworder db:db]; [ret setValue:[NSNumber numberWithInt:result] forKey:@"result"]; //insert into offline_order(so_id,status,contact_id,sales_rep,create_by,customer_contact) select 'OFFLINE'||hex(randomblob(16)),-1,contact_id,sales_rep,company_name from offline_contact where contact_id='99FURO0002' //soId int _id=[iSalesDB get_insertid:@"offline_order" db:db]; NSString *sqlQuery = [NSString stringWithFormat:@"select so_id from offline_order where _id=%d ",_id]; sqlite3_stmt * statement; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { // char *name = (char*)sqlite3_column_text(statement, 1); // NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name]; //ret = sqlite3_column_int(statement, 0); char *soId = (char*)sqlite3_column_text(statement, 0); if(soId==nil) soId=""; NSString *nssoId = [[NSString alloc]initWithUTF8String:soId]; [ret setValue:nssoId forKey:@"soId"]; [ret setValue:nssoId forKey:@"orderCode"]; } sqlite3_finalize(statement); } [ret setValue:[NSNumber numberWithInt:0] forKey:@"orderStatus"]; [ret setValue:@"Regular Mode" forKey:@"mode"]; [iSalesDB close_db:db]; return [RAUtils dict2data:ret]; } +(NSData*) offline_editorder :(NSMutableDictionary *) params { NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSString* orderCode = [params valueForKey:@"orderCode"]; UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; if(![appDelegate.order_code isEqualToString:orderCode]&& appDelegate.order_code.length!=0) { appDelegate.disable_trigger=true; [iSalesDB execSql:@"delete from offline_order where status=0;"]; appDelegate.disable_trigger=false; } sqlite3 *db = [iSalesDB get_db]; int cart_count=[self query_ordercartcount:orderCode db:db]; int wish_count=[iSalesDB get_recordcount:db table:@"offline_wishlist" where:@"1=1"]; ret[@"wish_count"]=[NSNumber numberWithInt:wish_count ]; ret[@"cart_count"]=[NSNumber numberWithInt:cart_count ]; ret[@"result"]=[NSNumber numberWithInt:RESULT_TRUE ]; [iSalesDB close_db:db]; return [RAUtils dict2data:ret]; } +(NSData*) offline_add2cart :(NSMutableDictionary *) params; { NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; sqlite3 *db = [iSalesDB get_db]; [iSalesDB execSql:@"BEGIN TRANSACTION" db:db]; int count =0; if(params[@"count"]!=nil) { count = [params[@"count"] intValue]; } NSString* product_id=params[@"product_id"]; NSString* orderCode=params[@"orderCode"]; NSString *qty = params[@"qty"]; NSArray* arr_id=[RAUtils string2arr:product_id separator:@","]; NSArray *qty_arr = [RAUtils string2arr:qty separator:@","]; for(int i=0;i%@",nscompany_name]; nsphone=[AESCrypt fastdecrypt:nsphone]; // nsphone=[NSString stringWithFormat:@"TEL:%@",nsphone]; nsaddr_1=[AESCrypt fastdecrypt:nsaddr_1]; // nsaddr_1=[NSString stringWithFormat:@"TEL:%@",nsphone]; } NSMutableArray* arr_name= [[NSMutableArray alloc] init]; [arr_name addObject:nsfirst_name]; [arr_name addObject:nslast_name]; NSString *nscontact_name=[RAUtils arr2string:arr_name separator:@" " trim:true]; NSMutableArray* arr_ext= [[NSMutableArray alloc] init]; [arr_ext addObject:nsaddr_1]; [arr_ext addObject:nsaddr_2]; [arr_ext addObject:nsaddr_3]; [arr_ext addObject:nsaddr_4]; [arr_ext addObject:@"\r\n"]; [arr_ext addObject:nscity]; [arr_ext addObject:nsstate]; [arr_ext addObject:nszipcode]; [arr_ext addObject:nscountry]; NSString *nsext=[RAUtils arr2string:arr_ext separator:@", " trim:true]; nsext=[nsext stringByReplacingOccurrencesOfString:@", \r\n," withString:@"\r\n"]; [item setValue:nsimg_2 forKey:@"business_card_2"]; [item setValue:nsimg_0 forKey:@"business_card_0"]; [item setValue:nscountry forKey:@"customer_country"]; [item setValue:nsphone forKey:@"customer_phone"]; [item setValue:nsimg_1 forKey:@"business_card_1"]; [item setValue:nscompany_name forKey:@"customer_name"]; [item setValue:nsprice_type forKey:@"customer_price_type"]; [item setValue:nsfirst_name forKey:@"customer_first_name"]; [item setValue:nsext forKey:@"customer_contact_ext"]; [item setValue:nszipcode forKey:@"customer_zipcode"]; [item setValue:nsaddr_1 forKey:@"customer_address1"]; [item setValue:nsaddr_2 forKey:@"customer_address2"]; [item setValue:nsaddr_3 forKey:@"customer_address3"]; [item setValue:nsaddr_4 forKey:@"customer_address4"]; [item setValue:nsnotes forKey:@"customer_contact_notes"]; [item setValue:nslast_name forKey:@"customer_last_name"]; [item setValue:nscity forKey:@"customer_city"]; [item setValue:nsstate forKey:@"customer_state"]; [item setValue:nssalesrep forKey:@"customer_sales_rep"]; [item setValue:contactId forKey:@"customer_cid"]; [item setValue:nscontact_name forKey:@"customer_contact"]; [item setValue:nsfax forKey:@"customer_fax"]; [item setValue:nsemail forKey:@"customer_email"]; [ret setObject:item forKey:@"customerInfo"]; // i++; } UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; [ret setValue:appDelegate.mode forKey:@"mode"]; [ret setValue:[NSNumber numberWithInt:1 ] forKey:@"count"]; sqlite3_finalize(statement); } [iSalesDB close_db:db]; DebugLog(@"data string: %@",[RAUtils dict2string:ret] ); return ret; } + (bool) copy_bcardImg:(NSString*) filename { if(filename.length==0) return false; // NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; bool ret=false; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachefolder = [paths objectAtIndex:0]; // NSString* from_subpath= [fromPath stringByReplacingOccurrencesOfString:cachefolder withString:@""]; NSString *offline_createimg = [cachefolder stringByAppendingPathComponent:@"offline_createimg"]; NSString *img_cache = [cachefolder stringByAppendingPathComponent:@"img_cache"]; NSString * fromPath= [offline_createimg stringByAppendingPathComponent:filename]; NSString * toPath= [img_cache stringByAppendingPathComponent:filename]; // NSString *savedImagePath=[offline_createimg stringByAppendingPathComponent:filename]; // // NSString *cacheImagePath=[img_cache stringByAppendingPathComponent:filename]; NSFileManager* fileManager = [NSFileManager defaultManager]; BOOL bdir=NO; if(! [fileManager fileExistsAtPath:toPath isDirectory:&bdir]) { NSError *error = nil; if(![fileManager copyItemAtPath:fromPath toPath:toPath error:&error]) { ret=false; } else { ret=true; } // NSError *error = nil; // bool bsuccess=[fileManager createDirectoryAtPath:offline_createimg withIntermediateDirectories:YES attributes:nil error:&error]; // // if(!bsuccess) // { // DebugLog(@"Create offline_createimg folder failed"); // [ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"]; // return [RAUtils dict2data:ret]; // } // if(bsuccess) // { // sqlite3 *db = [self get_db]; // // [self execSql:[NSString stringWithFormat:@"insert into img_cache(name) values('%@')",name] db:db]; // [iSalesDB close_db:db]; // } } return ret; // // bool bsuccess=[image writeToFile:savedImagePath atomically:YES]; // if(bsuccess) // { // NSError *error = nil; // if(![fileManager copyItemAtPath:savedImagePath toPath:cacheImagePath error:&error]) // { // [ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"]; // } // else // { // [ret setValue:[NSNumber numberWithInt:RESULT_TRUE] forKey:@"result"]; // // ret[@"img_url_aname"]=filename; // ret[@"img_url"]=savedImagePath; // } // } } +(NSData *) offline_saveBusinesscard:(NSData *) image { NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachefolder = [paths objectAtIndex:0]; NSString *offline_createimg = [cachefolder stringByAppendingPathComponent:@"offline_createimg"]; NSString *img_cache = [cachefolder stringByAppendingPathComponent:@"img_cache"]; NSFileManager* fileManager = [NSFileManager defaultManager]; BOOL bdir=YES; if(! [fileManager fileExistsAtPath:offline_createimg isDirectory:&bdir]) { NSError *error = nil; bool bsuccess=[fileManager createDirectoryAtPath:offline_createimg withIntermediateDirectories:YES attributes:nil error:&error]; if(!bsuccess) { DebugLog(@"Create offline_createimg folder failed"); [ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"]; return [RAUtils dict2data:ret]; } // if(bsuccess) // { // sqlite3 *db = [self get_db]; // // [self execSql:[NSString stringWithFormat:@"insert into img_cache(name) values('%@')",name] db:db]; // [iSalesDB close_db:db]; // } } // NSData *imagedata=UIImagePNGRepresentation(self.imgview.image); //JEPG格式 //NSData *imagedata=UIImageJEPGRepresentation(m_imgFore,1.0); NSString* filename =[NSString stringWithFormat:@"%@.png",[[NSUUID UUID] UUIDString]]; NSString *savedImagePath=[offline_createimg stringByAppendingPathComponent:filename]; NSString *cacheImagePath=[img_cache stringByAppendingPathComponent:filename]; bool bsuccess=[image writeToFile:savedImagePath atomically:YES]; if(bsuccess) { NSError *error = nil; if(![fileManager copyItemAtPath:savedImagePath toPath:cacheImagePath error:&error]) { [ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"]; } else { [ret setValue:[NSNumber numberWithInt:RESULT_TRUE] forKey:@"result"]; ret[@"img_url_aname"]=filename; ret[@"img_url"]=filename; } } else { [ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"]; } return [RAUtils dict2data:ret]; } +(NSDictionary*) model_NIYMAL:(NSString*) category db:(sqlite3 *)db { // MODEL DETAIL NEW ITEM YOU MAY ALSO LIKE category = [category substringToIndex:3]; NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSMutableDictionary* params = [[NSMutableDictionary alloc] init]; params[@"category"]= category; ret[@"params"]= params; [ret setValue:@"detail" forKey:@"target"]; [ret setValue:@"popup" forKey:@"action"]; [ret setValue:@"content" forKey:@"type"]; [ret setValue:@"New Items You May Also Like" forKey:@"title"]; [ret setValue:@"model_NIYMAL" forKey:@"data_interface"]; [ret setValue:@"true" forKey:@"single_row"]; [ret setValue:@"true" forKey:@"partial_refresh"]; // sqlite3 *db = [iSalesDB get_db]; // int count = [iSalesDB get_recordcount:db table:@"model" where:[NSString stringWithFormat:@"category like'#%%%@%%#'",category]]; NSString *sqlQuery = [NSString stringWithFormat:@"select m.name,m.product_id,i.url,random() as aa from product m LEFT join model_image i on m.product_id = i.product_id where m.category like'%%#%@#%%' and m.category like'%%#005#%%' and i.default_img = %d order by aa limit 10 ;",category,OFFLINE_IMG_TYPE_CATEGORY]; // select m.name,m.product_id,i.url,random() as aa from model m LEFT join model_image i on m.product_id = i.product_id where m.category like'%%#%@#%%' and m.category like'%%#005#%%' and i.default_img = %d order by aa limit 10 ; sqlite3_stmt * statement; int count = 0; [ret setValue:[NSString stringWithFormat:@"%d",count] forKey:@"count"]; // int count=0; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { int i=0; while (sqlite3_step(statement) == SQLITE_ROW) { NSMutableDictionary* item = [[NSMutableDictionary alloc] init]; // char *name = (char*)sqlite3_column_text(statement, 1); // NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name]; char *name = (char*)sqlite3_column_text(statement, 0); NSString *nsname = [[NSString alloc]initWithUTF8String:name]; int product_id = sqlite3_column_int(statement, 1); char *url = (char*)sqlite3_column_text(statement, 2); if(url==nil) url=""; NSString *nsurl = [[NSString alloc]initWithUTF8String:url]; [item setValue:nsurl forKey:@"picture_path"]; [item setValue:nsname forKey:@"fash_name"]; [item setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"]; [item setValue:category forKey:@"category"]; [ret setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]]; i++; } [ret setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"]; sqlite3_finalize(statement); } NSLog(@"count:%d",count); // [iSalesDB close_db:db]; return ret; } +(NSDictionary*) model_kvItem:(NSString*) key value:(NSString*)value { NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; [ret setValue:key forKey:@"key"]; [ret setValue:value forKey:@"val"]; return ret; } +(NSDictionary*) model_property :(int)product_id field:(NSString*) field db:(sqlite3 *)db { NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; [ret setValue:@"0" forKey:@"img_count"]; // sqlite3 *db = [iSalesDB get_db]; NSString *sqlQuery = [NSString stringWithFormat:@"select %@,property_display from product where product_id=%d ;",field,product_id]; // select %@,property_display from model where product_id=%d ; sqlite3_stmt * statement; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { int i=0; if (sqlite3_step(statement) == SQLITE_ROW) { NSMutableDictionary* item = [[NSMutableDictionary alloc] init]; // char *name = (char*)sqlite3_column_text(statement, 1); // NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name]; char *value = (char*)sqlite3_column_text(statement, 0); if(value==nil) value=""; NSString *nsvalue = [[NSString alloc]initWithUTF8String:value]; char *key = (char*)sqlite3_column_text(statement, 1); if(key==nil) key=""; NSString *nskey = [[NSString alloc]initWithUTF8String:key]; [item setValue:nsvalue forKey:@"val"]; [item setValue:nskey forKey:@"key"]; [ret setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]]; [ret setValue:@"1" forKey:@"count"]; i++; } sqlite3_finalize(statement); } // [iSalesDB close_db:db]; return ret; } +(NSDictionary*) model_selector :(NSString*)product_group field:(NSString*) field db:(sqlite3*)db { NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; [ret setValue:@"0" forKey:@"count"]; // sqlite3 *db = [iSalesDB get_db]; NSString *sqlQuery = [NSString stringWithFormat:@"select %@,selector_display,product_id,category from product where product_group='%@' order by name;",field,product_group]; // select %@,selector_display,product_id,category from model where product_group='%@' order by name; sqlite3_stmt * statement; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { int i=0; while (sqlite3_step(statement) == SQLITE_ROW) { NSMutableDictionary* item = [[NSMutableDictionary alloc] init]; // char *name = (char*)sqlite3_column_text(statement, 1); // NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name]; char *value = (char*)sqlite3_column_text(statement, 0); if(value==nil) value=""; NSString *nsvalue = [[NSString alloc]initWithUTF8String:value]; char *selector_display = (char*)sqlite3_column_text(statement, 1); if(selector_display==nil) selector_display=""; NSString *nsselector_display = [[NSString alloc]initWithUTF8String:selector_display]; int product_id = sqlite3_column_int(statement, 2); char *category = (char*)sqlite3_column_text(statement, 3); if(category==nil) category=""; NSString *nscategory = [[NSString alloc]initWithUTF8String:category]; NSString* url = [self model_category_img:[NSNumber numberWithInt:product_id].stringValue model_name:nil db:db];//[self category_img:product_id]; [item setValue:nsvalue forKey:@"title"]; [item setValue:url forKey:@"pic_url"]; NSMutableDictionary* params=[[NSMutableDictionary alloc] init]; [params setValue:@"2" forKey:@"count"]; NSMutableDictionary* param0=[[NSMutableDictionary alloc] init]; [param0 setValue:[NSNumber numberWithInt:product_id ] forKey:@"val"]; [param0 setValue:@"product_id" forKey:@"name"]; NSMutableDictionary* param1=[[NSMutableDictionary alloc] init]; [param1 setValue:nscategory forKey:@"val"]; [param1 setValue:@"category" forKey:@"name"]; [params setObject:param0 forKey:@"param_0"]; [params setObject:param1 forKey:@"param_1"]; [item setObject:params forKey:@"params"]; [ret setValue:nsselector_display forKey:@"name"]; [ret setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]]; i++; } [ret setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"]; [ret setValue:@"switch" forKey:@"action"]; sqlite3_finalize(statement); } // [iSalesDB close_db:db]; return ret; } +(NSMutableDictionary*) category_img :(int)product_id db:(sqlite3 *)db { // model 在 category search 显示的图片。 NSMutableDictionary* ret =[[NSMutableDictionary alloc]init]; // sqlite3 *db = [iSalesDB get_db]; NSString *sqlQuery = [NSString stringWithFormat:@"select url,type from model_image where product_id=%d and type<2 order by default_img desc , _id asc limit 2;",product_id]; sqlite3_stmt * statement; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { while (sqlite3_step(statement) == SQLITE_ROW) { char *url = (char*)sqlite3_column_text(statement, 0); if(url==nil) url=""; int type = sqlite3_column_int(statement, 1); if(type==0) [ret setValue:[[NSString alloc]initWithUTF8String:url] forKey:@"img"]; else [ret setValue:[[NSString alloc]initWithUTF8String:url] forKey:@"img_big"]; } sqlite3_finalize(statement); } // [iSalesDB close_db:db]; return ret; } +(int) product_itemid:(int)product_id db:(sqlite3*)db { int item_id=-1; NSString *sqlQuery = [NSString stringWithFormat:@"select item_id from product where product_id=%d;",product_id]; sqlite3_stmt * statement; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { item_id = sqlite3_column_int(statement, 0); } sqlite3_finalize(statement); } return item_id; } +(NSArray*) model_bundle:(int)item_id db:(sqlite3*)db count:(NSArray**)count //DEPRECATED(1_5) { // NSString* ret = @""; NSMutableArray* arr_bundle = [[NSMutableArray alloc]init]; NSMutableArray* arr_count = [[NSMutableArray alloc]init]; NSString *sqlQuery = [NSString stringWithFormat:@"select item_id,qty from bundle where product_item_id=%d;",item_id]; sqlite3_stmt * statement; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { while (sqlite3_step(statement) == SQLITE_ROW) { int bitem_id = sqlite3_column_int(statement, 0); int bitem_qty = sqlite3_column_int(statement, 1); [arr_bundle addObject:[NSNumber numberWithInt:bitem_id] ]; [arr_count addObject:[NSNumber numberWithInt:bitem_qty] ]; } // ret=[RAUtils arr2string:arr_bundle separator:@";" trim:true]; sqlite3_finalize(statement); } // if(ret==nil) // ret=@""; *count=arr_count; return arr_bundle; } +(int) model_stockUom :(int)product_id db:(sqlite3*)db { // get default sold qty, return -1 if model not found; int ret = -1; NSString *sqlQuery = [NSString stringWithFormat:@"select stockUom from product where product_id=%d;",product_id];// select stockUom from model where product_id=%d; sqlite3_stmt * statement; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { ret = sqlite3_column_int(statement, 0); } sqlite3_finalize(statement); } return ret; } +(NSDictionary*) model_img :(int)product_id db:(sqlite3*)db { NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; [ret setValue:@"0" forKey:@"img_count"]; // sqlite3 *db = [iSalesDB get_db]; NSString *sqlQuery = [NSString stringWithFormat:@"select url from model_image where product_id=%d and type=1;",product_id]; sqlite3_stmt * statement; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { int i=0; while (sqlite3_step(statement) == SQLITE_ROW) { NSMutableDictionary* item = [[NSMutableDictionary alloc] init]; // char *name = (char*)sqlite3_column_text(statement, 1); // NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name]; char *url = (char*)sqlite3_column_text(statement, 0); if(url==nil) url=""; NSString *nsurl = [[NSString alloc]initWithUTF8String:url]; [item setValue:nsurl forKey:@"s"]; [item setValue:nsurl forKey:@"l"]; [ret setObject:item forKey:[NSString stringWithFormat:@"img_%d",i]]; i++; } [ret setValue:[NSString stringWithFormat:@"%d",i] forKey:@"img_count"]; sqlite3_finalize(statement); } // [iSalesDB close_db:db]; return ret; } + (NSDictionary *) offline_add2wishlist:(NSMutableDictionary *)params { UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; NSMutableDictionary* ret=[[NSMutableDictionary alloc]init]; sqlite3 *db = [iSalesDB get_db]; [iSalesDB execSql:@"BEGIN TRANSACTION" db:db]; NSString* product_id=params[@"product_id"]; NSString *item_count_str = params[@"item_count"]; NSArray* arr=[RAUtils string2arr:product_id separator:@","]; NSArray *item_count_arr = item_count_str ? [RAUtils string2arr:item_count_str separator:@","] : nil; NSString* sqlQuery = [NSString stringWithFormat:@"insert into wishlist(product_id,qty) values(?,?);"]; // NSString *sql = @""; for(int i=0;i0) nsfax= [NSString stringWithFormat:@"FAX:%@",nsfax]; } char *email = (char*)sqlite3_column_text(statement, 17); NSString *nsemail = nil; if(email==nil) nsemail=@""; else { nsemail= [[NSString alloc]initWithUTF8String:email]; if(nsemail.length>0) nsemail= [NSString stringWithFormat:@"EMAIL:%@",nsemail]; // nsemail= [NSString stringWithFormat:@"EMAIL:%@",[[NSString alloc]initWithUTF8String:email]]; } NSMutableArray* arr_name= [[NSMutableArray alloc] init]; [arr_name addObject:nsfirst_name]; [arr_name addObject:nslast_name]; NSString *nscontact_name=[RAUtils arr2string:arr_name separator:@" " trim:true]; NSMutableArray* arr_addr = [[NSMutableArray alloc] init]; { // decrypt nscompany_name=[AESCrypt fastdecrypt:nscompany_name]; nscompany_name=[NSString stringWithFormat:@"%@",nscompany_name]; nsphone=[AESCrypt fastdecrypt:nsphone]; nsphone=[NSString stringWithFormat:@"TEL:%@",nsphone]; nsaddr_1=[AESCrypt fastdecrypt:nsaddr_1]; // nsaddr_1=[NSString stringWithFormat:@"TEL:%@",nsphone]; } [arr_addr addObject:nscompany_name]; [arr_addr addObject:nscontact_name]; [arr_addr addObject:@"
"]; [arr_addr addObject:nsaddr_1]; [arr_addr addObject:nsaddr_2]; [arr_addr addObject:nsaddr_3]; [arr_addr addObject:nsaddr_4]; //[arr_addr addObject:nsaddr]; [arr_addr addObject:nszipcode]; [arr_addr addObject:nscity]; [arr_addr addObject:nsstate]; [arr_addr addObject:nscountry]; [arr_addr addObject:@"
"]; [arr_addr addObject:nsphone]; [arr_addr addObject:nsfax]; [arr_addr addObject:nsemail]; NSString * name = [RAUtils arr2string:arr_addr separator:@", " trim:true]; name=[name stringByReplacingOccurrencesOfString:@",
," withString:@"
"]; [item setValue:name forKey:@"name"]; [item setValue:nscontact_id forKey:@"contact_id"]; [item setValue:editable==1?@"true":@"false" forKey:@"can_update"]; [ret setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]]; i++; } UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; [ret setValue:appDelegate.mode forKey:@"mode"]; [ret setValue:[NSNumber numberWithInt:i ] forKey:@"count"]; sqlite3_finalize(statement); } [iSalesDB close_db:db]; DebugLog(@"data string: %@",[RAUtils dict2string:ret] ); return ret; } #pragma mark contact Advanced search +(NSData *) offline_contactAdvancedSearch:(NSMutableDictionary *) params { NSMutableDictionary *contactAdvanceDic = [self dictionaryFileName:@"contactAdvanceSearch.json"]; return [RAUtils dict2data:contactAdvanceDic]; } #pragma mark create new contact + (NSData *)offline_createContact:(NSMutableDictionary *)params { NSString *path = [[NSBundle mainBundle] pathForResource:@"createContact.json" ofType:nil]; NSData *data = [NSData dataWithContentsOfFile:path]; NSMutableDictionary *ret = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy]; NSMutableDictionary *section_0 = [[ret objectForKey:@"section_0"] mutableCopy]; NSString *countryCode = nil; NSString *countryCode_id = nil; NSString *stateCode = nil; NSString *city = nil; NSString *zipCode = nil; if ([params.allKeys containsObject:@"refresh_trigger"]) { if([params[@"refresh_trigger"] isEqualToString:@"country"]) { // choose country NSString *code_id = params[@"country"]; countryCode_id = code_id; countryCode = [self countryCodeByid:code_id]; } else if ([params[@"refresh_trigger"] isEqualToString:@"zipcode"]) { // zipcode NSString *zip_code = params[@"zipcode"]; // 剔除全部为空格 int spaceCount = 0; for (int i = 0; i < zip_code.length; i++) { if ([zip_code characterAtIndex:i] == ' ') { spaceCount++; } } if (spaceCount == zip_code.length) { zip_code = @""; } zipCode = zip_code; if (zipCode.length > 0) { countryCode_id = params[@"country"]; NSDictionary *dic = [self offline_dealZipCode:zip_code]; countryCode = [dic valueForKey:@"country_code"]; if (!countryCode) { countryCode = @"US"; } stateCode = [dic valueForKey:@"state_code"]; city = [dic valueForKey:@"city"]; // zip code NSMutableDictionary *zipDic = [[section_0 valueForKey:@"item_10"] mutableCopy]; [zipDic setValue:zipCode forKey:@"value"]; [section_0 setValue:zipDic forKey:@"item_10"]; } } } else { // default: US United States countryCode = @"US"; countryCode_id = @"228"; } // country NSDictionary *allCountry = [self offline_getAllCountryDefault:countryCode]; [self setValue:allCountry forItemKey:@"item_5" valueKey:@"cadedate" inDictionary:section_0]; // state NSDictionary *allState = [self offline_getStateByCountryCode:countryCode checkedState:stateCode]; // NSDictionary *allState = [self offline_getStateByCountryCodeId:countryCode_id checkedState:stateCode]; [self setValue:allState forItemKey:@"item_11" valueKey:@"cadedate" inDictionary:section_0]; // city if (city) { NSMutableDictionary *cityDic = [[section_0 valueForKey:@"item_12"] mutableCopy]; [cityDic setValue:city forKey:@"value"]; [section_0 setValue:cityDic forKey:@"item_12"]; } // price type NSDictionary *priceDic = [self offline_getPrice]; [self setValue:priceDic forItemKey:@"item_2" valueKey:@"cadedate" inDictionary:section_0]; // Sales Rep NSDictionary *repDic = [self offline_getSalesRep]; [self setValue:repDic forItemKey:@"item_17" valueKey:@"cadedate" inDictionary:section_0]; [ret setValue:section_0 forKey:@"section_0"]; return [RAUtils dict2data:ret]; } #pragma mark save + (NSData *)offline_saveContact:(NSDictionary *)params update:(BOOL)update isCustomer:(BOOL)isCustomer{ NSString *addr = nil; NSString *contact_name = nil; NSString *companyName = [params objectForKey:@"company"]; if (companyName) { companyName = [AESCrypt fastencrypt:companyName]; } else { companyName = @""; } DebugLog(@"company"); companyName = [self translateSingleQuote:companyName]; NSString *addr1 = [params objectForKey:@"address"]; NSString *addr2 = [params objectForKey:@"address2"]; NSString *addr3 = [params objectForKey:@"address_3"]; NSString *addr4 = [params objectForKey:@"address_4"]; if (!addr2) { addr2 = @""; } if (!addr3) { addr3 = @""; } if (!addr4) { addr4 = @""; } if (!addr1) { addr1 = @""; } DebugLog(@"addr"); addr = [RAUtils arr2string:@[addr1,addr2,addr3,addr4] separator:@" " trim:true]; addr = [AESCrypt fastencrypt:addr]; addr = [self translateSingleQuote:addr]; if (addr1 && ![addr1 isEqualToString:@""]) { addr1 = [AESCrypt fastencrypt:addr1]; } addr1 = [self translateSingleQuote:addr1]; addr2 = [self translateSingleQuote:addr2]; addr3 = [self translateSingleQuote:addr3]; addr4 = [self translateSingleQuote:addr4]; NSString *country = [params objectForKey:@"country"]; if (country) { country = [self countryNameByCountryCodeId:country]; } else { country = @""; } DebugLog(@"country"); country = [self translateSingleQuote:country]; NSString *state = [params objectForKey:@"state"]; if (!state) { state = @""; } DebugLog(@"state"); state = [self translateSingleQuote:state]; NSString *city = [params objectForKey:@"city"]; if (!city) { city = @""; } city = [self translateSingleQuote:city]; NSString *zipcode = [params objectForKey:@"zipcode"]; if (!zipcode) { zipcode = @""; } DebugLog(@"zip"); zipcode = [self translateSingleQuote:zipcode]; NSString *fistName = [params objectForKey:@"firstname"]; if (!fistName) { fistName = @""; } NSString *lastName = [params objectForKey:@"lastname"]; if (!lastName) { lastName = @""; } contact_name = [RAUtils arr2string:@[fistName,lastName] separator:@" " trim:true]; DebugLog(@"contact_name"); contact_name = [self translateSingleQuote:contact_name]; fistName = [self translateSingleQuote:fistName]; lastName = [self translateSingleQuote:lastName]; NSString *phone = [params objectForKey:@"phone"]; if (phone) { phone = [AESCrypt fastencrypt:phone]; } else { phone = @""; } DebugLog(@"PHONE"); phone = [self translateSingleQuote:phone]; NSString *fax = [params objectForKey:@"fax"]; if (!fax) { fax = @""; } DebugLog(@"FAX"); fax = [self translateSingleQuote:fax]; NSString *email = [params objectForKey:@"email"]; if (!email) { email = @""; } DebugLog(@"EMAIL:%@",email); email = [self translateSingleQuote:email]; NSString *notes = [params objectForKey:@"contact_notes"]; if (!notes) { notes = @""; } DebugLog(@"NOTE:%@",notes); notes = [self translateSingleQuote:notes]; NSString *price = [params objectForKey:@"price_name"]; if (price) { price = [self priceNameByPriceId:price]; } else { price = @""; } DebugLog(@"PRICE"); price = [self translateSingleQuote:price]; NSString *salesRep = [params objectForKey:@"sales_rep"]; if (salesRep) { salesRep = [self salesRepCodeById:salesRep]; } else { salesRep = @""; } salesRep = [self translateSingleQuote:salesRep]; NSString *img = [params objectForKey:@"business_card"]; NSArray *array = [img componentsSeparatedByString:@","]; NSString *img_0 = array[0]; if (!img_0) { img_0 = @""; } img_0 = [self translateSingleQuote:img_0]; NSString *img_1 = array[1]; if (!img_1) { img_1 = @""; } img_1 = [self translateSingleQuote:img_1]; NSString *img_2 = array[2]; if (!img_2) { img_2 = @""; } img_2 = [self translateSingleQuote:img_2]; NSString *contact_id = [NSUUID UUID].UUIDString; // 判断更新时是否为customer if (update) { contact_id = [params objectForKey:@"contact_id"]; if (!contact_id) { contact_id = @""; } NSString *checkCustomerSql = [NSString stringWithFormat:@"select Sales_Order_Customer from offline_contact where contact_id = '%@';",contact_id]; __block int customer = 0; [iSalesDB jk_query:checkCustomerSql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { customer = sqlite3_column_int(stmt, 0); }]; isCustomer = customer ? YES : NO; } NSMutableDictionary *sync_dic = [params mutableCopy]; if (isCustomer) { [sync_dic setValue:@"Sales_Order_Customer" forKey:@"contactType"]; } else { [sync_dic setValue:@"Sales_Order_Ship_To" forKey:@"contactType"]; } NSString *sync_data = nil; NSString *sql = nil; if (update){ contact_id = [params objectForKey:@"contact_id"]; if (!contact_id) { contact_id = @""; } [sync_dic setValue:contact_id forKey:@"contact_id"]; // sync_data = [AESCrypt fastencrypt:[RAUtils dict2string:sync_dic]]; sync_data = [RAUtils dict2string:sync_dic]; sync_data = [self translateSingleQuote:sync_data]; sql = [NSString stringWithFormat:@"update offline_contact set company_name = '%@',addr_1 = '%@',addr_2 = '%@',addr_3 = '%@',addr_4 = '%@',country = '%@',state = '%@',city = '%@',zipcode = '%@',first_name = '%@',last_name = '%@',phone = '%@',fax = '%@',email = '%@',notes = '%@',price_type = '%@',sales_rep = '%@',img_0 = '%@',img_1 = '%@',img_2 = '%@',sync_data = '%@',contact_name = '%@',addr = '%@' where contact_id = '%@';",companyName,addr1,addr2,addr3,addr4,country,state,city,zipcode,fistName,lastName,phone,fax,email,notes,price,salesRep,img_0,img_1,img_2,sync_data,contact_name,addr,contact_id]; } else { contact_id = [self translateSingleQuote:contact_id]; [sync_dic setValue:contact_id forKey:@"contact_id"]; // sync_data = [AESCrypt fastencrypt:[RAUtils dict2string:sync_dic]]; sync_data = [RAUtils dict2string:sync_dic]; sync_data = [self translateSingleQuote:sync_data]; sql = [NSString stringWithFormat:@"insert into offline_contact (is_active,company_name,addr_1,addr_2,addr_3,addr_4,country,state,city,zipcode,first_name,last_name,phone,fax,email,notes,price_type,sales_rep,img_0,img_1,img_2,editable,contact_id,Sales_Order_Customer,Sales_Order_Freight_Bill_To,Sales_Order_Ship_From,Sales_Order_Merchandise_Bill_To,Contact_Return_To,Sales_Order_Ship_To,sync_data,contact_name,addr) values (1,'%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@',1,'%@',%d,%d,0,%d,0,1,'%@','%@','%@')",companyName,addr1,addr2,addr3,addr4,country,state,city,zipcode,fistName,lastName,phone,fax,email,notes,price,salesRep,img_0,img_1,img_2,contact_id,isCustomer ? 1 : 0,isCustomer ? 1 : 0,isCustomer ? 1 : 0,sync_data,contact_name,addr]; } int result = [iSalesDB execSql:sql]; // NSString *retStr = [NSString stringWithFormat:@"{\"result\":%d,\"min_ver\":\"160409\",\"mode\":\"Regular Mode\"}",result]; NSString *retStr = [NSString stringWithFormat:@"{\"result\":%d,\"mode\":\"Regular Mode\"}",result]; return [retStr dataUsingEncoding:NSUTF8StringEncoding]; } #pragma mark save new contact +(NSData *) offline_saveNewContact:(NSMutableDictionary *) params { return [self offline_saveContact:params update:NO isCustomer:YES]; } #pragma mark edit contact +(NSData *) offline_editContact:(NSMutableDictionary *) params { // { // "contact_id" = "CE0D2445-3C1F-40EC-B94C-A39A6900FBDA"; // password = 123456; // user = EvanK; // } NSString *path = [[NSBundle mainBundle] pathForResource:@"editContact.json" ofType:nil]; NSData *data = [NSData dataWithContentsOfFile:path]; NSMutableDictionary *ret = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy]; NSMutableDictionary *section_0 = [[ret objectForKey:@"section_0"] mutableCopy]; NSString *countryCode = nil; NSString *countryCode_id = nil; NSString *stateCode = nil; /*------contact infor------*/ __block NSString *country = nil; __block NSString *company_name = nil; __block NSString *contact_id = params[@"contact_id"]; __block NSString *addr_1,*addr_2,*addr_3,*addr_4; __block NSString *zipcode = nil; __block NSString *state = nil; // state_code __block NSString *city = nil; // __block NSString *firt_name,*last_name; __block NSString *phone,*fax,*email; __block NSString *notes,*price_type,*sales_rep; __block NSString *img_0,*img_1,*img_2; contact_id = [self translateSingleQuote:contact_id]; NSString *sql = [NSString stringWithFormat:@"select country,company_name,addr_1,addr_2,addr_3,addr_4,zipcode,state,city,first_name,last_name,phone,fax,email,notes,price_type,sales_rep,img_0,img_1,img_2 from offline_contact where contact_id = '%@';",contact_id]; [iSalesDB jk_query:sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { country = [self textAtColumn:0 statement:stmt]; // country name company_name = [self textAtColumn:1 statement:stmt]; addr_1 = [self textAtColumn:2 statement:stmt]; addr_2 = [self textAtColumn:3 statement:stmt]; addr_3 = [self textAtColumn:4 statement:stmt]; addr_4 = [self textAtColumn:5 statement:stmt]; zipcode = [self textAtColumn:6 statement:stmt]; state = [self textAtColumn:7 statement:stmt]; // state code city = [self textAtColumn:8 statement:stmt]; firt_name = [self textAtColumn:9 statement:stmt]; last_name = [self textAtColumn:10 statement:stmt]; phone = [self textAtColumn:11 statement:stmt]; fax = [self textAtColumn:12 statement:stmt]; email = [self textAtColumn:13 statement:stmt]; notes = [self textAtColumn:14 statement:stmt]; price_type = [self textAtColumn:15 statement:stmt]; // name sales_rep = [self textAtColumn:16 statement:stmt]; // code img_0 = [self textAtColumn:17 statement:stmt]; img_1 = [self textAtColumn:18 statement:stmt]; img_2 = [self textAtColumn:19 statement:stmt]; }]; // decrypt if (company_name) { company_name = [AESCrypt fastdecrypt:company_name]; } if (addr_1) { addr_1 = [AESCrypt fastdecrypt:addr_1]; } if (phone) { phone = [AESCrypt fastdecrypt:phone]; } NSString *countrySql = [NSString stringWithFormat:@"select code from offline_country where name = '%@';",[self translateSingleQuote:country]]; countryCode = [iSalesDB jk_queryText:countrySql]; stateCode = state; if ([params.allKeys containsObject:@"refresh_trigger"]) { if ([params[@"refresh_trigger"] isEqualToString:@"country"]) { NSString *code_id = params[@"country"]; countryCode_id = code_id; countryCode = [self countryCodeByid:code_id]; } else if ([params[@"refresh_trigger"] isEqualToString:@"zipcode"]) { NSString *zip_code = params[@"zipcode"]; // 剔除全部为空格 int spaceCount = 0; for (int i = 0; i < zip_code.length; i++) { if ([zip_code characterAtIndex:i] == ' ') { spaceCount++; } } if (spaceCount == zip_code.length) { zip_code = @""; } if (zipcode.length > 0) { zipcode = zip_code; countryCode_id = params[@"country"]; NSDictionary *dic = [self offline_dealZipCode:zip_code]; countryCode = [dic valueForKey:@"country_code"]; stateCode = [dic valueForKey:@"state_code"]; city = [dic valueForKey:@"city"]; // zip code NSMutableDictionary *zipDic = [[section_0 valueForKey:@"item_8"] mutableCopy]; [zipDic setValue:zipcode forKey:@"value"]; [section_0 setValue:zipDic forKey:@"item_8"]; } } } // 0 Country // 1 Company Name // 2 Contact ID // 3 Picture // 4 Address 1 // 5 Address 2 // 6 Address 3 // 7 Address 4 // 8 Zip Code // 9 State/Province // 10 City // 11 Contact First Name // 12 Contact Last Name // 13 Phone // 14 Fax // 15 Email // 16 Contact Notes // 17 Price Type // 18 Sales Rep // country NSDictionary *allCountry = [self offline_getAllCountryDefault:countryCode]; [self setValue:allCountry forItemKey:@"item_0" valueKey:@"cadedate" inDictionary:section_0]; // company [self setValue:company_name forItemKey:@"item_1" valueKey:@"value" inDictionary:section_0]; // contact_id [self setValue:contact_id forItemKey:@"item_2" valueKey:@"value" inDictionary:section_0]; // picture NSString *img_avalue = [NSString stringWithFormat:@"%@,%@,%@",img_0,img_1,img_2]; [self setValue:img_avalue forItemKey:@"item_3" valueKey:@"avalue" inDictionary:section_0]; [self setValue:img_0 forItemKey:@"item_3" valueKey:@"img_url_aname_0" inDictionary:section_0]; [self setValue:img_1 forItemKey:@"item_3" valueKey:@"img_url_aname_1" inDictionary:section_0]; [self setValue:img_2 forItemKey:@"item_3" valueKey:@"img_url_aname_2" inDictionary:section_0]; [self setValue:img_0 forItemKey:@"item_3" valueKey:@"img_url_0" inDictionary:section_0]; [self setValue:img_1 forItemKey:@"item_3" valueKey:@"img_url_1" inDictionary:section_0]; [self setValue:img_2 forItemKey:@"item_3" valueKey:@"img_url_2" inDictionary:section_0]; // addr 1 2 3 4 [self setValue:addr_1 forItemKey:@"item_4" valueKey:@"value" inDictionary:section_0]; [self setValue:addr_2 forItemKey:@"item_5" valueKey:@"value" inDictionary:section_0]; [self setValue:addr_3 forItemKey:@"item_6" valueKey:@"value" inDictionary:section_0]; [self setValue:addr_4 forItemKey:@"item_7" valueKey:@"value" inDictionary:section_0]; // zip code [self setValue:zipcode forItemKey:@"item_8" valueKey:@"value" inDictionary:section_0]; // state NSDictionary *allState = [self offline_getStateByCountryCode:countryCode checkedState:stateCode]; [self setValue:allState forItemKey:@"item_9" valueKey:@"cadedate" inDictionary:section_0]; // city [self setValue:city forItemKey:@"item_10" valueKey:@"value" inDictionary:section_0]; // first last [self setValue:firt_name forItemKey:@"item_11" valueKey:@"value" inDictionary:section_0]; [self setValue:last_name forItemKey:@"item_12" valueKey:@"value" inDictionary:section_0]; // phone fax email [self setValue:phone forItemKey:@"item_13" valueKey:@"value" inDictionary:section_0]; [self setValue:fax forItemKey:@"item_14" valueKey:@"value" inDictionary:section_0]; [self setValue:email forItemKey:@"item_15" valueKey:@"value" inDictionary:section_0]; // notes [self setValue:notes forItemKey:@"item_16" valueKey:@"value" inDictionary:section_0]; // price NSMutableDictionary *priceDic = [[self offline_getPrice] mutableCopy]; for (NSString *key in priceDic.allKeys) { if ([key containsString:@"val_"]) { NSMutableDictionary *dic = [priceDic[key] mutableCopy]; if ([dic[@"value"] isEqualToString:price_type]) { [dic setValue:[NSNumber numberWithInteger:1] forKey:@"check"]; [priceDic setValue:dic forKey:key]; } } } [self setValue:priceDic forItemKey:@"item_17" valueKey:@"cadedate" inDictionary:section_0]; // Sales Rep NSMutableDictionary *repDic = [[self offline_getSalesRep] mutableCopy]; for (NSString *key in repDic.allKeys) { if ([key containsString:@"val_"]) { NSMutableDictionary *dic = [repDic[key] mutableCopy]; NSString *value = dic[@"value"]; NSString *code = [[[value componentsSeparatedByString:@"-"] firstObject] stringByReplacingOccurrencesOfString:@" " withString:@""]; if (code && [code isEqualToString:sales_rep]) { [dic setValue:[NSNumber numberWithInteger:1] forKey:@"check"]; [repDic setValue:dic forKey:key]; } } } [self setValue:repDic forItemKey:@"item_18" valueKey:@"cadedate" inDictionary:section_0]; [ret setValue:section_0 forKey:@"section_0"]; return [RAUtils dict2data:ret]; } #pragma mark save contact +(NSData *) offline_saveContact:(NSMutableDictionary *) params { return [self offline_saveContact:params update:YES isCustomer:YES]; } #pragma mark category + (void)check:(NSString *)ck valueKey:(NSString *)valueKey inDictionary:(NSMutableDictionary *)dic{ if (ck) { NSMutableDictionary *res = [self mutableDictionary:valueKey inDictionary:dic]; for (NSString *key in res.allKeys) { if (![key isEqualToString:@"count"]) { NSMutableDictionary *val = [self mutableDictionary:key inDictionary:res]; [val setValue:[NSNumber numberWithInteger:0] forKey:@"check"]; if ([val[@"value"] isEqualToString:ck]) { [val setValue:[NSNumber numberWithInteger:1] forKey:@"check"]; } [res setValue:val forKey:key]; } } [dic setValue:res forKey:valueKey]; } } + (NSDictionary *)categoryList:(NSMutableDictionary *)params limited:(BOOL)limited { // NSString* orderCode = [params valueForKey:@"orderCode"]; AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; NSString* category = [params valueForKey:@"category"]; if (!category || [category isEqualToString:@""]) { category = @"%"; } category = [self translateSingleQuote:category]; int limit = [[params valueForKey:@"limit"] intValue]; int offset = [[params valueForKey:@"offset"] intValue]; // NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSString *limit_str = @""; if (limited) { limit_str = [NSString stringWithFormat:@"limit %d offset %d ",limit,offset]; } NSMutableDictionary *ret = [self dictionaryFileName:@"category.json"]; NSMutableDictionary *filter = [[ret objectForKey:@"filter"] mutableCopy]; sqlite3 *db = [iSalesDB get_db]; // [iSalesDB AddExFunction:db]; int count; NSString *where = [NSString stringWithFormat:@"category like'%%#%@#%%' and is_active = 1",category]; NSString *sqlQuery = [NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete from product m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id where m.category like'%%#%@#%%' and m.is_active = 1 order by m.name %@ ;",appDelegate.order_code, category,limit_str]; double price_min = 0; double price_max = 0; if ([params.allKeys containsObject:@"alert"]) { // alert [self check:params[@"alert"] valueKey:@"alert" inDictionary:filter]; NSString *alert = params[@"alert"]; if ([alert isEqualToString:@"Display All"]) { alert = [NSString stringWithFormat:@""]; } else { alert = [self translateSingleQuote:alert]; alert = [NSString stringWithFormat:@"and alert = '%@'",alert]; } // available [self check:params[@"available"] valueKey:@"availability" inDictionary:filter]; NSString *available = params[@"available"]; NSString *available_condition; if ([available isEqualToString:@"Display All"]) { available_condition = @""; } else if ([available isEqualToString:@"Available Now"]) { available_condition = @"and availability > 0"; } else { available_condition = @"and availability == 0"; } // best seller [self check:params[@"bestseller"] valueKey:@"best_seller" inDictionary:filter]; NSString *best_seller = @""; NSString *order_best_seller = @"m.name asc"; if ([params[@"bestseller"] isEqualToString:@"Yes"]) { best_seller = @"and best_seller > 0"; order_best_seller = @"m.best_seller desc,m.name asc"; } // price [self check:params[@"price"] valueKey:@"price" inDictionary:filter]; NSString *price = params[@"price"]; price_min = 0; price_max = MAXFLOAT; if (appDelegate.user) { NSArray *priceTypeArray = [self get_contact_default_price_type:nil db:db]; NSMutableString *priceName = [NSMutableString string]; for (int i = 0; i < priceTypeArray.count; i++) { NSString *pricetype = priceTypeArray[i]; pricetype = [self translateSingleQuote:pricetype]; if (i == 0) { [priceName appendFormat:@"'%@'",pricetype]; } else { [priceName appendFormat:@",'%@'",pricetype]; } } if ([price isEqualToString:@"Display All"]) { price = [NSString stringWithFormat:@""]; } else if([price containsString:@"+"]){ price = [price stringByReplacingOccurrencesOfString:@"+" withString:@""]; price_min = [price doubleValue]; price = [NSString stringWithFormat:@"and item_id in (select DISTINCT item_id from model_price where price_name in (%@) and cast(decrypt(price) as double) >= %.2lf and cast(decrypt(price) as double) <= %.2lf)",priceName,price_min,price_max]; } else { NSArray *priceArray = [price componentsSeparatedByString:@"-"]; price_min = [[priceArray objectAtIndex:0] doubleValue]; price_max = [[priceArray objectAtIndex:1] doubleValue]; price = [NSString stringWithFormat:@"and item_id in (select DISTINCT item_id from model_price where price_name in (%@) and cast(decrypt(price) as double) >= %.2lf and cast(decrypt(price) as double) <= %.2lf)",priceName,price_min,price_max]; } } else { price = @""; } // sold_by_qty : Sold in quantities of %@ [self check:params[@"sold_by_qty"] valueKey:@"qty" inDictionary:filter]; NSString *qty = params[@"sold_by_qty"]; if ([qty isEqualToString:@"Display All"]) { qty = @""; } else { qty = [self translateSingleQuote:qty]; qty = [NSString stringWithFormat:@"and model_set = 'Sold in quantities of %@'",qty]; } // cate category = [self translateSingleQuote:category]; NSString *cateWhere = [NSString stringWithFormat:@"category like'%%#%@#%%'",category]; // where bestseller > 0 order by bestseller desc // sql query: alert availability(int) best_seller(int) price qty sqlQuery = [NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete from (select name,description,product_id,closeout,best_seller from product where %@ %@ %@ %@ %@ %@ and is_active = 1) m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id order by %@ %@;",cateWhere,best_seller,alert,available_condition,qty,price,appDelegate.order_code,order_best_seller,limit_str]; where =[NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ and is_active = 1",cateWhere,best_seller,alert,available_condition,qty,price]; } count = [iSalesDB get_recordcount:db table:@"product" where:where]; if (!appDelegate.user) { [filter setValue:@{@"count" : @(0)} forKey:@"price"]; } [ret setValue:filter forKey:@"filter"]; DebugLog(@"offline_category sql:%@",sqlQuery); sqlite3_stmt * statement; [ret setValue:@"2" forKey:@"result"]; [ret setValue:[NSString stringWithFormat:@"%d",count] forKey:@"item_total_count"]; NSMutableDictionary* items = [[NSMutableDictionary alloc] init]; // int count=0; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { int i=0; while (sqlite3_step(statement) == SQLITE_ROW) { NSMutableDictionary* item = [[NSMutableDictionary alloc] init]; char *name = (char*)sqlite3_column_text(statement, 0); if(name==nil) name=""; NSString *nsname = [[NSString alloc]initWithUTF8String:name]; char *description = (char*)sqlite3_column_text(statement, 1); if(description==nil) description=""; NSString *nsdescription = [[NSString alloc]initWithUTF8String:description]; int product_id = sqlite3_column_int(statement, 2); int wid = sqlite3_column_int(statement, 3); int closeout = sqlite3_column_int(statement, 4); int cid = sqlite3_column_int(statement, 5); int wisdelete = sqlite3_column_int(statement, 6); NSMutableDictionary* imgjson=[self category_img:product_id db:db]; if(wid !=0 && wisdelete != 1) [item setValue:@"true" forKey:@"wish_exists"]; else [item setValue:@"false" forKey:@"wish_exists"]; if(closeout==0) [item setValue:@"false" forKey:@"is_closeout"]; else [item setValue:@"true" forKey:@"is_closeout"]; if(cid==0) [item setValue:@"false" forKey:@"cart_exists"]; else [item setValue:@"true" forKey:@"cart_exists"]; [item addEntriesFromDictionary:imgjson]; // [item setValue:nsurl forKey:@"img"]; [item setValue:nsname forKey:@"name"]; [item setValue:nsdescription forKey:@"description"]; [item setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"]; [items setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]]; i++; } [items setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"]; [ret setObject:items forKey:@"items"]; sqlite3_finalize(statement); } else { DebugLog(@"nothing..."); } DebugLog(@"count:%d",count); [iSalesDB close_db:db]; DebugLog(@"data string: %@",[RAUtils dict2string:ret] ); return ret; } +(NSDictionary*) offline_category :(NSMutableDictionary *) params { return [self categoryList:params limited:YES]; } # pragma mark item search + (NSDictionary *) itemsearch:(NSMutableDictionary *)params limited:(BOOL)limited { AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; BOOL filterSearch = ![params.allKeys containsObject:@"covertype"]; NSMutableDictionary *ret = [self dictionaryFileName:@"category.json"]; NSMutableDictionary *filter = [[ret objectForKey:@"filter"] mutableCopy]; // category NSDictionary *category_menu = [self offline_category_menu]; [filter setValue:category_menu forKey:@"category"]; NSString* where= nil; NSString* orderby= @"m.name"; if (!filterSearch) { int covertype = [[params valueForKey:@"covertype"] intValue]; switch (covertype) { case 0: { where=@"m.category like'%%#005#%%'"; break; } case 1: { where=@"m.alert like '%QS%'"; break; } case 2: { where=@"m.availability>0"; break; } case 3: { where=@"m.best_seller>0"; orderby=@"m.best_seller desc,m.name asc"; break; } default: where=@"1=1"; break; } } int limit = [[params valueForKey:@"limit"] intValue]; int offset = [[params valueForKey:@"offset"] intValue]; NSString *limit_str = @""; if (limited) { limit_str = [NSString stringWithFormat:@"limit %d offset %d",limit,offset]; } sqlite3 *db = [iSalesDB get_db]; // [iSalesDB AddExFunction:db]; int count; NSString *sqlQuery = nil; where = [where stringByAppendingString:@" and m.is_active = 1"]; sqlQuery=[NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete from product m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id where %@ order by %@ %@;",appDelegate.order_code, where,orderby,limit_str]; double price_min = 0; double price_max = 0; if (filterSearch) { // alert [self check:params[@"alert"] valueKey:@"alert" inDictionary:filter]; NSString *alert = params[@"alert"]; if ([alert isEqualToString:@"Display All"]) { alert = [NSString stringWithFormat:@""]; } else { alert = [self translateSingleQuote:alert]; alert = [NSString stringWithFormat:@"and alert = '%@'",alert]; } // available [self check:params[@"available"] valueKey:@"availability" inDictionary:filter]; NSString *available = params[@"available"]; NSString *available_condition; if ([available isEqualToString:@"Display All"]) { available_condition = @""; } else if ([available isEqualToString:@"Available Now"]) { available_condition = @"and availability > 0"; } else { available_condition = @"and availability == 0"; } // best seller [self check:params[@"bestseller"] valueKey:@"best_seller" inDictionary:filter]; NSString *best_seller = @""; NSString *order_best_seller = @"m.name asc"; if ([params[@"bestseller"] isEqualToString:@"Yes"]) { best_seller = @"and best_seller > 0"; order_best_seller = @"m.best_seller desc,m.name asc"; } // price [self check:params[@"price"] valueKey:@"price" inDictionary:filter]; NSString *price = params[@"price"]; price_min = 0; price_max = MAXFLOAT; if (appDelegate.user) { NSArray *priceTypeArray = [self get_contact_default_price_type:nil db:db]; NSMutableString *priceName = [NSMutableString string]; for (int i = 0; i < priceTypeArray.count; i++) { NSString *pricetype = priceTypeArray[i]; pricetype = [self translateSingleQuote:pricetype]; if (i == 0) { [priceName appendFormat:@"'%@'",pricetype]; } else { [priceName appendFormat:@",'%@'",pricetype]; } } if ([price isEqualToString:@"Display All"]) { price = [NSString stringWithFormat:@""]; } else if([price containsString:@"+"]){ price = [price stringByReplacingOccurrencesOfString:@"+" withString:@""]; price_min = [price doubleValue]; price = [NSString stringWithFormat:@"and item_id in (select DISTINCT item_id from model_price where price_name in (%@) and cast(decrypt(price) as double) >= %.2lf and cast(decrypt(price) as double) <= %.2lf)",priceName,price_min,price_max]; } else { NSArray *priceArray = [price componentsSeparatedByString:@"-"]; price_min = [[priceArray objectAtIndex:0] doubleValue]; price_max = [[priceArray objectAtIndex:1] doubleValue]; price = [NSString stringWithFormat:@"and item_id in (select DISTINCT item_id from model_price where price_name in (%@) and cast(decrypt(price) as double) >= %.2lf and cast(decrypt(price) as double) <= %.2lf)",priceName,price_min,price_max]; } } else { price = @""; } // sold_by_qty : Sold in quantities of %@ [self check:params[@"sold_by_qty"] valueKey:@"qty" inDictionary:filter]; NSString *qty = params[@"sold_by_qty"]; if ([qty isEqualToString:@"Display All"]) { qty = @""; } else { qty = [self translateSingleQuote:qty]; qty = [NSString stringWithFormat:@"and model_set = 'Sold in quantities of %@'",qty]; } // category NSString *category_id = params[@"ctgId"]; NSMutableArray *cate_id_array = nil; NSMutableString *cateWhere = [NSMutableString string]; if ([category_id isEqualToString:@""] || !category_id) { [cateWhere appendString:@"1 = 1"]; } else { if ([category_id containsString:@","]) { cate_id_array = [[category_id componentsSeparatedByString:@","] mutableCopy]; } else { cate_id_array = [@[category_id] mutableCopy]; } /*-----------*/ NSMutableDictionary *cateDic = [[filter objectForKey:@"category"] mutableCopy]; for (int i = 0; i < cate_id_array.count; i++) { for (NSString *key0 in cateDic.allKeys) { if ([key0 containsString:@"category_"]) { NSMutableDictionary *category0 = [[cateDic objectForKey:key0] mutableCopy]; for (NSString *key1 in category0.allKeys) { if ([key1 containsString:@"category_"]) { NSMutableDictionary *category1 = [[category0 objectForKey:key1] mutableCopy]; [category1 setValue:[NSNumber numberWithInteger:0] forKey:@"check"]; if ([[category1 objectForKey:@"cid"] isEqualToString:cate_id_array[i]]) { cate_id_array[i] = [category1 objectForKey:@"id"]; if (i == 0) { [cateWhere appendFormat:@"category like'%%#%@#%%'",cate_id_array[i]]; } else { [cateWhere appendFormat:@"or category like'%%#%@#%%'",cate_id_array[i]]; } [category1 setValue:[NSNumber numberWithInteger:1] forKey:@"check"]; [category0 setValue:category1 forKey:key1]; [cateDic setValue:category0 forKey:key0]; } } } } } } [filter setValue:cateDic forKey:@"category"]; } // where bestseller > 0 order by bestseller desc // sql query: alert availability(int) best_seller(int) price qty sqlQuery = [NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete from (select name,description,product_id,closeout,best_seller from product where %@ %@ %@ %@ %@ %@ and is_active = 1) m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id order by %@ %@;", cateWhere,best_seller,alert,available_condition,qty,price,appDelegate.order_code,order_best_seller,limit_str]; // count where =[NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ and m.is_active = 1",cateWhere,best_seller,alert,available_condition,qty,price]; } where = [where stringByReplacingOccurrencesOfString:@"m." withString:@""]; count = [iSalesDB get_recordcount:db table:@"product" where:where]; if (!appDelegate.user) { [filter setValue:@{@"count" : @(0)} forKey:@"price"]; } [ret setValue:filter forKey:@"filter"]; DebugLog(@"offline_itemsearch sql:%@",sqlQuery); sqlite3_stmt * statement; [ret setValue:@"2" forKey:@"result"]; [ret setValue:[NSString stringWithFormat:@"%d",count] forKey:@"item_total_count"]; NSMutableDictionary* items = [[NSMutableDictionary alloc] init]; // int count=0; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { int i=0; while (sqlite3_step(statement) == SQLITE_ROW) { NSMutableDictionary* item = [[NSMutableDictionary alloc] init]; char *name = (char*)sqlite3_column_text(statement, 0); NSString *nsname = [[NSString alloc]initWithUTF8String:name]; char *description = (char*)sqlite3_column_text(statement, 1); NSString *nsdescription = [[NSString alloc]initWithUTF8String:description]; int product_id = sqlite3_column_int(statement, 2); int wid = sqlite3_column_int(statement, 3); int closeout = sqlite3_column_int(statement, 4); int cid = sqlite3_column_int(statement, 5); int wisdelete = sqlite3_column_int(statement, 6); NSMutableDictionary* imgjson=[self category_img:product_id db:db]; if(wid !=0 && wisdelete != 1) [item setValue:@"true" forKey:@"wish_exists"]; else [item setValue:@"false" forKey:@"wish_exists"]; if(closeout==0) [item setValue:@"false" forKey:@"is_closeout"]; else [item setValue:@"true" forKey:@"is_closeout"]; if(cid==0) [item setValue:@"false" forKey:@"cart_exists"]; else [item setValue:@"true" forKey:@"cart_exists"]; [item addEntriesFromDictionary:imgjson]; // [item setValue:nsurl forKey:@"img"]; [item setValue:nsname forKey:@"fash_name"]; [item setValue:nsdescription forKey:@"description"]; [item setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"]; [items setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]]; i++; } [items setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"]; [ret setObject:items forKey:@"items"]; sqlite3_finalize(statement); } [iSalesDB close_db:db]; DebugLog(@"data string: %@",[RAUtils dict2string:ret] ); return ret; } +(NSDictionary*) offline_itemsearch:(NSMutableDictionary *) params { return [self itemsearch:params limited:YES]; } #pragma mark order detail + (NSString *)replaceHtml:(NSString *)html String:(NSString *)str0 withString:(NSString *)str1 { if (str1.length == 0) { str1 = @" "; } NSString *str = [html stringByReplacingOccurrencesOfString:str0 withString:str1]; return str; } +(NSString*) timeFormat:(NSString*)datetime from:(NSString*) from to:(NSString*) to { NSDateFormatter *fromformatter = [[NSDateFormatter alloc] init]; [fromformatter setDateFormat:from]; NSDate *date = [fromformatter dateFromString:datetime]; NSDateFormatter * toformatter = [[NSDateFormatter alloc] init ]; [toformatter setDateFormat:to]; NSString * ret = [toformatter stringFromDate:date]; return ret; } + (NSString *)changeDateTime:(NSString *)dateTime Formate:(NSString *)formate withFormate:(NSString *)newFormate { // 把毫秒去掉 if ([dateTime containsString:@"."]) { dateTime = [[dateTime componentsSeparatedByString:@"."] firstObject]; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = formate; // [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];; NSDate *date = [formatter dateFromString:dateTime]; formatter.dateFormat = newFormate; return [formatter stringFromDate:date]; } + (NSString *)changeDateTimeFormate:(NSString *)dateTime { return [self changeDateTime:dateTime Formate:@"yyyy-MM-dd HH:mm:ss" withFormate:@"MM/dd/yyyy HH:mm:ss"]; // return [self timeFormat:dateTime from:@"YYYY-MM-DD HH:mm:ss" to:@"MM/DD/YYYY HH:mm:ss"]; } +(NSData*) offline_orderdetail :(NSMutableDictionary *) params { DebugLog(@"offline oderdetail params: %@",params); AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; int orderId = [params[@"orderId"] intValue]; NSMutableDictionary* ret = [self dictionaryFileName:@"orderDetail.json"]; // decrypt card number and card security code // NSString* sql=[NSString stringWithFormat:@"select o._id,o.so_id,o.poNumber,o.create_time,o.status,o.TotalCuft,o.TotalWeight,o.TotalCarton,decrypt(c.company_name),o.customer_contact,decrypt(c.addr_1),c.addr_2,c.addr_3,c.addr_4,o.logist,o.shipping,o.lift_gate_value,o.general_notes,o.internal_notes,o.paymentType,o.lift_gate,o.receive_name,o.receive_contact,o.receive_ext,o.sender_name,o.sender_contact,o.sender_ext,o.shipping_billto_name,o.shipping_billto_contact,o.shipping_billto_ext,o.billing_name,o.billing_contact,o.billing_ext,o.returnto_name,o.returnto_contact,o.returnto_ext,o.handling_fee_value,o.paymentsAndCredits,o.total_price,o.customer_cid,o.credit_card_first_name,o.credit_card_last_name,o.credit_card_address1,o.credit_card_address2,o.credit_card_zipcode,o.credit_card_type,decrypt(o.credit_card_number),decrypt(o.credit_card_security_code),o.credit_card_expiration,o.credit_card_city,o.credit_card_state,o.shipNull,o.erpOrderStatus from (select _id,so_id,poNumber,create_time,status,TotalCuft,TotalWeight,TotalCarton,customer_cid,customer_contact,logist,shipping,lift_gate_value,general_notes,internal_notes,paymentType,lift_gate,receive_name,receive_contact,receive_ext,sender_name,sender_contact,sender_ext,shipping_billto_name,shipping_billto_contact,shipping_billto_ext,billing_name,billing_contact,billing_ext,returnto_name,returnto_contact,returnto_ext,handling_fee_value,paymentsAndCredits,total_price,customer_cid,credit_card_first_name,credit_card_last_name,credit_card_address1,credit_card_address2,credit_card_zipcode,credit_card_type,credit_card_number,credit_card_security_code,credit_card_expiration,credit_card_city,credit_card_state,ifnull(shipping,'ship_null') as shipNull,erpOrderStatus from offline_order where _id=%d) o left join offline_contact c on o.customer_cid=c.contact_id",orderId ]; NSString *sql = [NSString stringWithFormat:@"select o._id,o.so_id,o.poNumber,o.create_time,o.status,decrypt(c.company_name),o.customer_contact,decrypt(c.addr_1),c.addr_2,c.addr_3,c.addr_4,o.logist,o.shipping,o.lift_gate_value,o.general_notes,o.internal_notes,o.paymentType,o.lift_gate,o.receive_name,o.receive_contact,o.receive_ext,o.sender_name,o.sender_contact,o.sender_ext,o.shipping_billto_name,o.shipping_billto_contact,o.shipping_billto_ext,o.billing_name,o.billing_contact,o.billing_ext,o.returnto_name,o.returnto_contact,o.returnto_ext,o.handling_fee_value,o.paymentsAndCredits,o.total_price,o.customer_cid,o.credit_card_first_name,o.credit_card_last_name,o.credit_card_address1,o.credit_card_address2,o.credit_card_zipcode,o.credit_card_type,decrypt(o.credit_card_number),decrypt(o.credit_card_security_code),decrypt(o.credit_card_expiration_month),o.credit_card_city,o.credit_card_state,o.shipNull,o.erpOrderStatus,decrypt(o.credit_card_expiration_year),o.sign_picpath,o.customer_contact,o.customer_email,o.customer_phone,o.customer_fax,o.editable,o.lift_null,o.handling_null,o.ship_via from (select _id,so_id,poNumber,create_time,status,customer_cid,customer_contact,logist,shipping,lift_gate_value,general_notes,internal_notes,paymentType,lift_gate,receive_name,receive_contact,receive_ext,sender_name,sender_contact,sender_ext,shipping_billto_name,shipping_billto_contact,shipping_billto_ext,billing_name,billing_contact,billing_ext,returnto_name,returnto_contact,returnto_ext,handling_fee_value,paymentsAndCredits,total_price,customer_cid,credit_card_first_name,credit_card_last_name,credit_card_address1,credit_card_address2,credit_card_zipcode,credit_card_type,credit_card_number,credit_card_security_code,credit_card_expiration_month,credit_card_city,credit_card_state,ifnull(shipping,'ship_null') as shipNull,erpOrderStatus,credit_card_expiration_year,sign_picpath,customer_contact,customer_email,customer_phone,customer_fax,order_id is null as editable,lift_gate_value is null as lift_null,handling_fee_value is null as handling_null,ship_via from offline_order where _id=%d) o left join offline_contact c on o.customer_cid=c.contact_id",orderId]; sqlite3 *db = [iSalesDB get_db]; sqlite3_stmt * statement; NSString *customerID = @""; // 在查询结果中还需要调用offline_contactinfo,需要使用,其中要打开db 就会lock,故而将其置于外面,在close db后在调用 NSString *nssoid = @""; NSString* orderinfo = @""; NSString *moreInfo = @""; double handlingFee = 0; double payments_and_credist = 0; double totalPrice = 0; double shippingFee = 0; double lift_gate = 0; NSString *customer_contact = @""; NSString *customer_email = @""; NSString *customer_fax = @""; NSString *customer_phone = @""; if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { int order_id = sqlite3_column_int(statement, 0); NSString *sign_url = [self textAtColumn:51 statement:statement]; ret[@"sign_url"] = sign_url; customer_contact = [self textAtColumn:52 statement:statement]; customer_email = [self textAtColumn:53 statement:statement]; customer_phone = [self textAtColumn:54 statement:statement]; customer_fax = [self textAtColumn:55 statement:statement]; int offline_edit=sqlite3_column_int(statement, 56); ret[@"offline_edit"]= [NSNumber numberWithInt:offline_edit]; char *soid = (char*)sqlite3_column_text(statement, 1); if(soid==nil) soid= ""; nssoid= [[NSString alloc]initWithUTF8String:soid]; // so# ret[@"so#"] = nssoid; char *poNumber = (char*)sqlite3_column_text(statement, 2); if(poNumber==nil) poNumber= ""; NSString *nspoNumber= [[NSString alloc]initWithUTF8String:poNumber]; char *create_time = (char*)sqlite3_column_text(statement, 3); if(create_time==nil) create_time= ""; NSString *nscreate_time= [[NSString alloc]initWithUTF8String:create_time]; nscreate_time = [[self changeDateTimeFormate:nscreate_time] stringByAppendingString:@" PST"];// 与在线统一 int status = sqlite3_column_int(statement, 4); int erpStatus = sqlite3_column_int(statement, 49); NSString* nsstatus = [self orderStatus:status erpStatus:erpStatus]; // status if (status > 1 && status != 3) { status = erpStatus; } else if (status == 3) { status = 15; } ret[@"orderStatus"] = [NSNumber numberWithInteger:status]; ret[@"order_status"] = nsstatus; char *company_name = (char*)sqlite3_column_text(statement, 5); if(company_name==nil) company_name= ""; NSString *nscompany_name= [[NSString alloc]initWithUTF8String:company_name]; // company name ret[@"company_name"] = nscompany_name; char *customer_contact = (char*)sqlite3_column_text(statement, 6); if(customer_contact==nil) customer_contact= ""; NSString *nscustomer_contact= [[NSString alloc]initWithUTF8String:customer_contact]; char *addr_1 = (char*)sqlite3_column_text(statement, 7); if(addr_1==nil) addr_1=""; NSString *nsaddr_1= [[NSString alloc]initWithUTF8String:addr_1]; char *addr_2 = (char*)sqlite3_column_text(statement, 8); if(addr_2==nil) addr_2=""; NSString *nsaddr_2= [[NSString alloc]initWithUTF8String:addr_2]; char *addr_3 = (char*)sqlite3_column_text(statement, 9); if(addr_3==nil) addr_3=""; NSString *nsaddr_3= [[NSString alloc]initWithUTF8String:addr_3]; char *addr_4 = (char*)sqlite3_column_text(statement, 10); if(addr_4==nil) addr_4=""; NSString *nsaddr_4= [[NSString alloc]initWithUTF8String:addr_4]; NSMutableArray* arr_addr = [[NSMutableArray alloc] init]; [arr_addr addObject:nsaddr_1]; [arr_addr addObject:nsaddr_2]; [arr_addr addObject:nsaddr_3]; [arr_addr addObject:nsaddr_4]; NSString * customer_address = [RAUtils arr2string:arr_addr separator:@"
" trim:true]; char *logist = (char*)sqlite3_column_text(statement, 11); if(logist==nil) logist= ""; NSString *nslogist=[[NSString alloc]initWithUTF8String:logist]; if (status == -11 || status == 10 || status == 11) { nslogist = [self textAtColumn:59 statement:statement]; }; NSString *shipping = [NSString stringWithFormat:@"$%.2f",sqlite3_column_double(statement, 12)]; if ([[self textAtColumn:48 statement:statement] isEqualToString:@"ship_null"]) { shipping = @"Shipping To Be Quoted"; } else { shippingFee = sqlite3_column_double(statement, 12); } // Shipping ret[@"Shipping"] = shipping; int have_lift_gate = sqlite3_column_int(statement, 17); lift_gate = sqlite3_column_double(statement, 13); // Liftgate Fee(No loading dock) if (!have_lift_gate) { lift_gate = 0; } ret[@"Liftgate Fee(No loading dock)"] = [NSString stringWithFormat:@"$%.2f",lift_gate]; if (sqlite3_column_int(statement, 57)) { ret[@"Liftgate Fee(No loading dock)"] = @"Shipping To Be Quoted"; } char *general_notes = (char*)sqlite3_column_text(statement, 14); if(general_notes==nil) general_notes= ""; NSString *nsgeneral_notes=[[NSString alloc]initWithUTF8String:general_notes]; char *internal_notes = (char*)sqlite3_column_text(statement, 15); if(internal_notes==nil) internal_notes= ""; NSString *nsinternal_notes=[[NSString alloc]initWithUTF8String:internal_notes]; char *payment_type = (char*)sqlite3_column_text(statement, 16); if(payment_type==nil) payment_type= ""; NSString *nspayment_type=[[NSString alloc]initWithUTF8String:payment_type]; // order info orderinfo = [self textFileName:@"order_info.html"]; orderinfo = [self replaceHtml:orderinfo String:@"SO_or_nbsp" withString:nssoid]; orderinfo = [self replaceHtml:orderinfo String:@"PO_or_nbsp" withString:nspoNumber]; orderinfo = [self replaceHtml:orderinfo String:@"OrderDate_or_nbsp" withString:nscreate_time]; orderinfo = [self replaceHtml:orderinfo String:@"OrderStatus_or_nbsp" withString:nsstatus]; orderinfo = [self replaceHtml:orderinfo String:@"CustomerInfo_or_nbsp" withString:nscompany_name]; orderinfo = [self replaceHtml:orderinfo String:@"CustomerName_or_nbsp" withString:nscustomer_contact]; orderinfo = [self replaceHtml:orderinfo String:@"CustomerAddress_or_nbsp" withString:customer_address]; orderinfo = [self replaceHtml:orderinfo String:@"ShippingMethod_or_nbsp" withString:nslogist]; orderinfo = [self replaceHtml:orderinfo String:@"Shipping_or_nbsp" withString:shipping]; orderinfo = [self replaceHtml:orderinfo String:@"LiftgateFee_or_nbsp" withString:[NSString stringWithFormat:@"%.2f",lift_gate]]; orderinfo = [self replaceHtml:orderinfo String:@"GeneralNotes_or_nbsp" withString:nsgeneral_notes]; orderinfo = [self replaceHtml:orderinfo String:@"InternalNotes_or_nbsp" withString:nsinternal_notes]; NSString *payment = nil; if([nspayment_type isEqualToString:@"Credit Card"]) { payment = [self textFileName:@"creditcardpayment.html"]; NSString *card_first_name = [self textAtColumn:37 statement:statement]; NSString *card_last_name = [self textAtColumn:38 statement:statement]; NSString *card_addr1 = [self textAtColumn:39 statement:statement]; NSString *card_addr2 = [self textAtColumn:40 statement:statement]; NSString *card_zipcode = [self textAtColumn:41 statement:statement]; NSString *card_type = [self textAtColumn:42 statement:statement]; if (card_type.length > 0) { // 显示星号 card_type = @"****"; } NSString *card_number = [self textAtColumn:43 statement:statement]; // 只显示最后四位 if (card_number.length > 0 && card_number.length > 4) { for (int i = 0; i < card_number.length - 4; i++) { card_number = [card_number stringByReplacingCharactersInRange:NSMakeRange(i, 1) withString:@"*"]; } } else { card_number = @""; } NSString *card_security_code = [self textAtColumn:44 statement:statement]; NSString *card_expiration_month = [self textAtColumn:45 statement:statement]; NSString *card_expiration_year = [self textAtColumn:50 statement:statement]; NSString *card_expiration = [NSString stringWithFormat:@"%@/%@",card_expiration_month,card_expiration_year]; if (card_expiration_month.length && card_expiration_year.length) { // 显示星号 card_expiration = @"****"; } NSString *card_city = [self textAtColumn:46 statement:statement]; NSString *card_state = [self textAtColumn:47 statement:statement]; payment = [self replaceHtml:payment String:@"CardNumber_or_nbsp" withString:card_number]; payment = [self replaceHtml:payment String:@"CardType_or_nbsp" withString:card_type]; payment = [self replaceHtml:payment String:@"CardExpireDate_or_nbsp" withString:card_expiration]; payment = [self replaceHtml:payment String:@"BillingFirstName_or_nbsp" withString:card_first_name]; payment = [self replaceHtml:payment String:@"BillingLastName_or_nbsp" withString:card_last_name]; payment = [self replaceHtml:payment String:@"BillingAddr1_or_nbsp" withString:card_addr1]; payment = [self replaceHtml:payment String:@"BillingAddr2_or_nbsp" withString:card_addr2]; payment = [self replaceHtml:payment String:@"BillingCity_or_nbsp" withString:card_city]; payment = [self replaceHtml:payment String:@"BillingState_or_nbsp" withString:card_state]; payment = [self replaceHtml:payment String:@"BillingZipCode_or_nbsp" withString:card_zipcode]; } else { payment=[self textFileName:@"normalpayment.html"]; payment = [self replaceHtml:payment String:@"PAYMENTTYPE_PLACEHOLDER" withString:nspayment_type]; } orderinfo=[self replaceHtml:orderinfo String:@"Payment_info_or_nbsp" withString:payment]; ret[@"result"]= [NSNumber numberWithInt:2]; // more info moreInfo = [self textFileName:@"more_info.html"]; /*****ship to******/ // ShipToCompany_or_  NSString *shipToCompany = [self textAtColumn:18 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"ShipToCompany_or_" withString:shipToCompany]; NSString *shipToName = [self textAtColumn:19 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"ShipToName_or_" withString:shipToName]; NSString *shipToAddr = [self textAtColumn:20 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"ShipToAddress_or_" withString:shipToAddr]; /*****ship from******/ // ShipFromCompany_or_  NSString *shipFromCompany = [self textAtColumn:21 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"ShipFromCompany_or_" withString:shipFromCompany]; NSString *shipFromName = [self textAtColumn:22 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"ShipFromName_or_" withString:shipFromName]; NSString *shipFromAddr = [self textAtColumn:23 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"ShipFromAddress_or_" withString:shipFromAddr]; /*****freight to******/ // FreightBillToCompany_or_  NSString *freightBillToCompany = [self textAtColumn:24 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"FreightBillToCompany_or_" withString:freightBillToCompany]; NSString *freightBillToName = [self textAtColumn:25 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"FreightBillToName_or_" withString:freightBillToName]; NSString *freightBillToAddr = [self textAtColumn:26 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"FreightBillToAddress_or_" withString:freightBillToAddr]; /*****merchandise to******/ // MerchandiseBillToCompany_or_  NSString *merchandiseBillToCompany = [self textAtColumn:27 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"MerchandiseBillToCompany_or_" withString:merchandiseBillToCompany]; NSString *merchandiseBillToName = [self textAtColumn:28 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"MerchandiseBillToName_or_" withString:merchandiseBillToName]; NSString *merchandiseBillToAddr = [self textAtColumn:29 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"MerchandiseBillToAddress_or_" withString:merchandiseBillToAddr]; /*****return to******/ // ReturnToCompany_or_  NSString *returnToCompany = [self textAtColumn:30 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"ReturnToCompany_or_" withString:returnToCompany]; NSString *returnToName = [self textAtColumn:31 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"ReturnToName_or_" withString:returnToName]; NSString *returnToAddr = [self textAtColumn:32 statement:statement]; moreInfo = [self replaceHtml:moreInfo String:@"ReturnToAddress_or_" withString:returnToAddr]; // // DebugLog(@"more info : %@",moreInfo); // handling fee handlingFee = sqlite3_column_double(statement, 33); ret[@"Handling Fee"] = [NSString stringWithFormat:@"$%.2f",handlingFee]; if (sqlite3_column_int(statement, 58)) { ret[@"Handling Fee"] = @"Shipping To Be Quoted"; } // // customer info customerID = [self textAtColumn:36 statement:statement]; // mode ret[@"mode"] = appDelegate.mode; // model_count ret[@"model_count"] = @(0); } sqlite3_finalize(statement); } [iSalesDB close_db:db]; NSMutableDictionary *contactInfo = [[[self offline_contactinfo:[@{@"contactId":customerID} mutableCopy]] objectForKey:@"customerInfo"] mutableCopy]; // "customer_email" = "Shui Hu"; // "customer_fax" = ""; // "customer_first_name" = F; // "customer_last_name" = L; // "customer_name" = ",da He Xiang Dong Liu A"; // "customer_phone" = "Hey Xuan Feng"; contactInfo[@"customer_phone"] = customer_phone; contactInfo[@"customer_fax"] = customer_fax; contactInfo[@"customer_email"] = customer_email; NSString *first_name = @""; NSString *last_name = @""; if ([customer_contact isEqualToString:@""]) { } else if ([customer_contact containsString:@" "]) { NSInteger first_space_index = [customer_contact rangeOfString:@" "].location; first_name = [customer_contact substringToIndex:first_space_index]; last_name = [customer_contact substringFromIndex:first_space_index + 1]; } contactInfo[@"customer_first_name"] = first_name; contactInfo[@"customer_last_name"] = last_name; ret[@"customerInfo"] = contactInfo; // models if (nssoid) { __block double TotalCuft = 0; __block double TotalWeight = 0; __block int TotalCarton = 0; __block double allItemPrice = 0; NSString *modelSql = [NSString stringWithFormat:@"select c.product_id,c.price,c.discount,c.item_count,c.line_note,m.name,m.description,c.item_id,m.stockUom,c._id from (select _id,product_id,decrypt(str_price) as price,discount,item_count,line_note,item_id from offline_cart where so_no='%@') c left join product m on c.product_id=m.product_id",nssoid]; sqlite3 *db1 = [iSalesDB get_db]; [iSalesDB jk_query:modelSql db:db1 close:YES completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSMutableDictionary* itemjson = [[NSMutableDictionary alloc] init]; int product_id = sqlite3_column_int(stmt, 0); char *str_price = (char*)sqlite3_column_text(stmt, 1); int item_id = sqlite3_column_int(stmt, 7); NSString* Price=nil; if(str_price==nil) { NSNumber* price = [self get_model_default_price:appDelegate.contact_id product_id:nil item_id:@(item_id) db:db1]; if(price==nil) Price=@"No Price."; else Price=[NSString stringWithFormat:@"%.2f",price.floatValue]; } else { Price=[NSString stringWithFormat:@"%.2f",[[[NSString alloc]initWithUTF8String:str_price] floatValue]]; } double discount = sqlite3_column_double(stmt, 2); int item_count = sqlite3_column_int(stmt, 3); char *line_note = (char*)sqlite3_column_text(stmt, 4); NSString *nsline_note=nil; if(line_note!=nil) nsline_note= [[NSString alloc]initWithUTF8String:line_note]; // char *name = (char*)sqlite3_column_text(stmt, 5); // NSString *nsname = nil; // if(name!=nil) // nsname= [[NSString alloc]initWithUTF8String:name]; NSString *nsname = [self textAtColumn:5 statement:stmt]; // char *description = (char*)sqlite3_column_text(stmt, 6); // NSString *nsdescription=nil; // if(description!=nil) // nsdescription= [[NSString alloc]initWithUTF8String:description]; NSString *nsdescription = [self textAtColumn:6 statement:stmt]; // int stockUom = sqlite3_column_int(stmt, 8); // int _id = sqlite3_column_int(stmt, 9); NSDictionary* bsubtotaljson=[self model_subtotal:item_id count:item_count db:db1 compute_part:true]; double cuft=[bsubtotaljson[@"cuft"] doubleValue]; double weight=[bsubtotaljson[@"weight"] doubleValue]; int carton=[bsubtotaljson[@"carton"] intValue]; TotalCuft += cuft; TotalWeight += weight; TotalCarton += carton; itemjson[@"combine"]=[self model_bundle:item_id db:db1 compute_part:false]; // itemjson[@"img"]= [self model_category_img:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] model_name:nil db:db1]; itemjson[@"img"] = [self item_image:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] db:db1]; itemjson[@"Item Number"]=[NSString stringWithFormat:@"%@\n%@",nsname,nsdescription ]; itemjson[@"note"]=nsline_note; itemjson[@"origin_price"] = Price; // Price = [NSString stringWithFormat:@"%f",[Price doubleValue] * (1.0 - discount / 100.0)]; itemjson[@"The unit price"] = [NSString stringWithFormat:@"%f",[Price doubleValue] * (1.0 - discount / 100.0)]; itemjson[@"order_item_status"] = @""; // 暂时不处理 itemjson[@"product_id"] = [NSString stringWithFormat:@"%d",product_id]; itemjson[@"QTY"] = [NSString stringWithFormat:@"%d",item_count]; itemjson[@"discount"] = [NSNumber numberWithDouble:discount]; double subTotal = item_count * [Price doubleValue] * (1.0 - discount / 100.0); if(itemjson[@"combine"] != nil) { // int citem=0; int bcount=[[itemjson[@"combine"] valueForKey:@"count"] intValue]; for(int bc=0;bc0) where=[where stringByAppendingString:[NSString stringWithFormat:@" and (lower(o.so_id) like '%%%@%%' or lower(o.sales_rep) like '%%%@%%' or lower(decrypt(c.company_name)) like '%%%@%%' or lower(o.create_by) like '%%%@%%')",keyword.lowercaseString,keyword.lowercaseString,keyword.lowercaseString,keyword.lowercaseString]]; if (orderStatus.length > 0) { NSArray *order_status_array = [orderStatus componentsSeparatedByString:@","]; if (order_status_array.count == 1) { int status_value = [[order_status_array firstObject] integerValue]; if (status_value <= 1 || status_value == 3) { where = [where stringByAppendingString:[NSString stringWithFormat:@" and o.status = %d",status_value]]; } else { where = [where stringByAppendingString:[NSString stringWithFormat:@" and o.erpOrderStatus = %d",status_value]]; } } else if (order_status_array.count > 1) { for (int i = 0; i < order_status_array.count;i++) { NSString *status = order_status_array[i]; NSString *condition = @" or"; if (i == 0) { condition = @" and ("; } // where = [where stringByAppendingString:[NSString stringWithFormat:@"%@ o.status = %@",condition,status]]; int status_value = [status integerValue]; if (status_value <= 1 || status_value == 3) { where = [where stringByAppendingString:[NSString stringWithFormat:@"%@ o.status = %d",condition,status_value]]; } else { where = [where stringByAppendingString:[NSString stringWithFormat:@" %@ o.erpOrderStatus = %d",condition,status_value]]; } } where = [where stringByAppendingString:@" )"]; } } NSString* sqlQuery=[NSString stringWithFormat:@"SELECT o._id,o.so_id,o.status,o.sales_rep,o.create_by,decrypt(c.company_name),o.create_time,o.total_price,o.customer_contact,o.erpOrderStatus,o.order_id is null from offline_order o left join offline_contact c on o.customer_cid=c.contact_id where %@ order by o.modify_time desc,o.create_time desc limit %d offset %d" ,where, limit, offset]; // DebugLog(@"order list sql: %@",sqlQuery); sqlite3 *db = [iSalesDB get_db]; sqlite3_stmt * statement; [iSalesDB execSql:@"BEGIN TRANSACTION" db:db]; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { int count=0; while (sqlite3_step(statement) == SQLITE_ROW) { NSMutableDictionary* item=[[NSMutableDictionary alloc]init]; int order_id = sqlite3_column_double(statement, 0); char *soid = (char*)sqlite3_column_text(statement, 1); if(soid==nil) soid= ""; NSString *nssoid= [[NSString alloc]initWithUTF8String:soid]; int status = sqlite3_column_double(statement, 2); int erpStatus = sqlite3_column_double(statement, 9); char *sales_rep = (char*)sqlite3_column_text(statement, 3); if(sales_rep==nil) sales_rep= ""; NSString *nssales_rep= [[NSString alloc]initWithUTF8String:sales_rep]; char *create_by = (char*)sqlite3_column_text(statement, 4); if(create_by==nil) create_by= ""; NSString *nscreate_by= [[NSString alloc]initWithUTF8String:create_by]; char *company_name = (char*)sqlite3_column_text(statement, 5); if(company_name==nil) company_name= ""; NSString *nscompany_name= [[NSString alloc]initWithUTF8String:company_name]; char *create_time = (char*)sqlite3_column_text(statement, 6); if(create_time==nil) create_time= ""; NSString *nscreate_time= [[NSString alloc]initWithUTF8String:create_time]; nscreate_time = [self changeDateTimeFormate:nscreate_time]; // 与在线统一 // double total_price = sqlite3_column_double(statement, 7); double total_price = [self orderTotalPrice:[NSString stringWithUTF8String:soid] db:db close:NO]; NSString *customer_contact = [self textAtColumn:8 statement:statement]; NSString* nsstatus = [self orderStatus:status erpStatus:erpStatus]; int offline_edit = sqlite3_column_int(statement, 10); // ": "JH", // "": "$8307.00", // "": "MOB1608050001", // "": "ArpithaT", // "": "1st Stage Property Transformations", // "": "JANICE SUTTON", // "": 2255, // "": "08/02/2016 09:49:18", // "": 1, // "": "Saved Order" // "": "1470384050483", // "model_count": "6 / 28" item[@"sales_rep"]= nssales_rep; item[@"price"]= [NSString stringWithFormat:@"$%.2f",total_price]; item[@"so#"]= nssoid; item[@"create_by"]= nscreate_by; item[@"customer_name"]= nscompany_name; item[@"customer_contact"] = customer_contact; item[@"order_id"]= [NSString stringWithFormat:@"%d",order_id]; item[@"purchase_time"]= nscreate_time; item[@"orderStatus"]= [NSString stringWithFormat:@"%d",status]; item[@"order_status"]= nsstatus; item[@"order_code"]= nssoid;//[NSString stringWithFormat:@"%d",order_id]; item[@"offline_edit"] = [NSNumber numberWithInt:offline_edit]; // item[@"model_count"] ret[[NSString stringWithFormat:@"item_%d",count]]= item; count++; } ret[@"count"]= [NSNumber numberWithInt:count]; //ret[@"total_count"]= [NSNumber numberWithInt:count]; // ret[@"wish_count"]= [NSNumber numberWithInt:count]; ret[@"result"]= [NSNumber numberWithInt:2]; ret[@"can_see_price"] = [NSNumber numberWithBool:YES]; ret[@"time_zone"] = @"PST"; sqlite3_finalize(statement); } int total_count = [iSalesDB get_recordcount:db table:@"offline_order o left join offline_contact c on o.customer_cid=c.contact_id" where:where]; ret[@"total_count"] = [NSNumber numberWithInteger:total_count]; [iSalesDB execSql:@"END TRANSACTION" db:db]; [iSalesDB close_db:db]; return [RAUtils dict2data:ret]; } #pragma mark update gnotes +(NSData*) offline_updategnotes :(NSMutableDictionary *) params { DebugLog(@"params: %@",params); // comments = Meyoyoyoyoyoyoy; // orderCode = MOB1608110001; // password = 123456; // user = EvanK; NSString *sql = [NSString stringWithFormat:@"update offline_order set general_notes = '%@' where so_id = '%@';",[self valueInParams:params key:@"comments" translateSingleQuote:YES],[self valueInParams:params key:@"orderCode" translateSingleQuote:YES]]; int ret = [iSalesDB execSql:sql]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"]; [dic setValue:@"Regular Mode" forKey:@"mode"]; // [dic setValue:@"160409" forKey:@"min_ver"]; return [RAUtils dict2data:dic]; } #pragma mark move to wishlist +(NSData*) offline_movecart2wish :(NSMutableDictionary *) params { NSString *_id = [self valueInParams:params key:@"cartItemId"]; NSString *orderCode = [self valueInParams:params key:@"orderCode"]; _id = [NSString stringWithFormat:@"(%@)",_id]; NSString *sql = [NSString stringWithFormat:@"select product_id,item_count,item_id from offline_cart where so_no = '%@' and _id in %@;",orderCode,_id]; sqlite3 *db = [iSalesDB get_db]; __block NSString *product_id = @""; __block NSString *item_count_str = @""; // __block NSString *item_id = nil; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { // product_id = [self textAtColumn:0 statement:stmt]; int item_count = sqlite3_column_int(stmt, 1); // item_id = [self textAtColumn:2 statement:stmt]; NSString *p_id = [self textAtColumn:0 statement:stmt]; NSString *count_str = [NSString stringWithFormat:@"%d",item_count]; if (p_id.length) { product_id = [product_id stringByAppendingString:[NSString stringWithFormat:@",%@",p_id]]; item_count_str = [item_count_str stringByAppendingString:[NSString stringWithFormat:@",%@",count_str]]; } }]; [iSalesDB close_db:db]; // 去除第一个, product_id = [product_id substringFromIndex:1]; item_count_str = [item_count_str substringFromIndex:1]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; dic = [self offline_add2wishlist:@{@"product_id" : product_id,@"item_count" : item_count_str}.mutableCopy].mutableCopy; // NSString *insertIntoWishlistSql = [NSString stringWithFormat:@"insert into wishlist (product_id,item_id,qty) values (%@,%@,%d);",product_id,item_id,item_count]; // int ret = [iSalesDB execSql:insertIntoWishlistSql db:db]; sqlite3 *db1 = [iSalesDB get_db]; int wish_count = [iSalesDB get_recordcount:db1 table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"]; [dic setValue:@"Regular Mode" forKey:@"mode"]; [dic setValue:[NSNumber numberWithInteger:wish_count] forKey:@"wish_count"]; // 删除 NSString *deleteSql = [NSString stringWithFormat:@"delete from offline_cart where _id in %@;",_id]; int ret = [iSalesDB execSql:deleteSql db:db1]; [dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"]; [iSalesDB close_db:db1]; return [RAUtils dict2data:dic]; } #pragma mark cart delete +(NSData*) offline_cartremove :(NSMutableDictionary *) params { // cartItemId = 548; // orderCode = MOB1608110001; NSString *_id = [self valueInParams:params key:@"cartItemId"]; NSString *orderCode = [self valueInParams:params key:@"orderCode"]; _id = [NSString stringWithFormat:@"(%@)",_id]; NSString *sql = [NSString stringWithFormat:@"delete from offline_cart where so_no = '%@' and _id in %@ ;",orderCode,_id]; int ret = [iSalesDB execSql:sql]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"]; [dic setValue:@"Regular Mode" forKey:@"mode"]; // [dic setValue:@"160409" forKey:@"min_ver"]; return [RAUtils dict2data:dic]; } #pragma mark set price +(NSData*) offline_cartsetprice :(NSMutableDictionary *) params { DebugLog(@"cart set price params: %@",params); // "cartitem_id" = 1; // discount = "0.000000"; // "item_note" = ""; // price = "269.000000"; NSString *_id = [self valueInParams:params key:@"cartitem_id"]; NSString *notes = [self valueInParams:params key:@"item_note"]; NSString *discount = [self valueInParams:params key:@"discount"]; NSString *price = [self valueInParams:params key:@"price"]; // bool badd_price_changed=false; // sqlite3* db=[iSalesDB get_db]; // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; // NSNumber* default_price = [self get_model_default_price:appDelegate.contact_id product_id:nil item_id:_id db:db]; // NSRange range; // range = [notes rangeOfString:@"PRICE MODIFIED"]; // // if((default_price.doubleValue!=price.doubleValue || discount.intValue!=0 ) && range.location == NSNotFound) // badd_price_changed=true; // [iSalesDB close_db:db]; // // if(badd_price_changed) // { // notes=[NSString stringWithFormat:@"%@\n%@",@"PRICE MODIFIED",notes]; // } // price = [self translateSingleQuote:[AESCrypt fastencrypt:price]]; NSString *sql = [NSString stringWithFormat:@"update offline_cart set str_price = '%@',discount = %f, line_note='%@' where _id = %@",price,discount.doubleValue,notes,_id]; int ret = [iSalesDB execSql:sql]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"]; [dic setValue:@"Regular Mode" forKey:@"mode"]; // [dic setValue:@"160409" forKey:@"min_ver"]; return [RAUtils dict2data:dic]; } #pragma mark set line notes +(NSData*) offline_cartsetlnotes :(NSMutableDictionary *) params { NSString *_id = [self valueInParams:params key:@"cartitem_id"]; NSString *notes = [self valueInParams:params key:@"notes"]; notes = [self translateSingleQuote:notes]; NSString *sql = [NSString stringWithFormat:@"update offline_cart set line_note = '%@' where _id = %@",notes,_id]; int ret = [iSalesDB execSql:sql]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"]; [dic setValue:@"Regular Mode" forKey:@"mode"]; // [dic setValue:@"160409" forKey:@"min_ver"]; return [RAUtils dict2data:dic]; } #pragma mark set qty +(NSData*) offline_cartsetqty :(NSMutableDictionary *) params { NSString *_id = [self valueInParams:params key:@"cartitem_id"]; int item_count = [params[@"inputInt"] integerValue]; NSString *sql = [NSString stringWithFormat:@"update offline_cart set item_count = %d where _id = %@;",item_count,_id]; int ret = [iSalesDB execSql:sql]; __block int item_id = 0; [iSalesDB jk_query:[NSString stringWithFormat:@"select item_id from offline_cart where _id = %@;",_id] completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { item_id = sqlite3_column_int(stmt, 0); }]; sqlite3 *db = [iSalesDB get_db]; NSDictionary* bsubtotaljson=[self model_subtotal:item_id count:item_count db:db compute_part:true]; [iSalesDB close_db:db]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"]; [dic setValue:@"Regular Mode" forKey:@"mode"]; // [dic setValue:@"160409" forKey:@"min_ver"]; [dic setValue:bsubtotaljson[@"cuft"] forKey:@"cuft"]; [dic setValue:bsubtotaljson[@"weight"] forKey:@"weight"]; [dic setValue:bsubtotaljson[@"carton"] forKey:@"carton"]; return [RAUtils dict2data:dic]; } #pragma mark place order + (NSDictionary *)infoName:(NSString *)name aname:(NSString *)aname control:(NSString *)control keyboard:(NSString *)keyboard value:(id)value { NSMutableDictionary *dic = [NSMutableDictionary dictionary]; if (aname) { [dic setValue:aname forKey:@"aname"]; } if (control) { [dic setValue:control forKey:@"control"]; } if (keyboard) { [dic setValue:keyboard forKey:@"keyboard"]; } if (name) { [dic setValue:name forKey:@"name"]; } if (value) { [dic setValue:value forKey:@"value"]; } return dic; } + (NSDictionary *)customerDic:(NSDictionary *) params db:(sqlite3 *)db { NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; __block NSMutableDictionary *customer_dic = [NSMutableDictionary dictionary]; NSString *customerSql = [NSString stringWithFormat:@"select c.contact_id,c.img_0,c.img_1,c.img_2,decrypt(c.company_name),decrypt(c.addr_1),c.addr_2,c.addr_3,c.addr_4,c.first_name,c.last_name,o.customer_email,o.customer_phone,o.customer_fax,c.zipcode,c.city,c.state,c.country,o.customer_contact from offline_contact as c join offline_order as o on c.contact_id = o.customer_cid where o.so_id = '%@';",orderCode]; [iSalesDB jk_query:customerSql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSString *contact_id = [self textAtColumn:0 statement:stmt]; NSString *img0 = [self textAtColumn:1 statement:stmt]; NSString *img1 = [self textAtColumn:2 statement:stmt]; NSString *img2 = [self textAtColumn:3 statement:stmt]; NSString *company_name = [self textAtColumn:4 statement:stmt]; NSString *addr1 = [self textAtColumn:5 statement:stmt]; NSString *addr2 = [self textAtColumn:6 statement:stmt]; NSString *addr3 = [self textAtColumn:7 statement:stmt]; NSString *addr4 = [self textAtColumn:8 statement:stmt]; // NSString *first_name = [self textAtColumn:9 statement:stmt]; // NSString *last_name = [self textAtColumn:10 statement:stmt]; NSString *email = [self textAtColumn:11 statement:stmt]; NSString *phone = [self textAtColumn:12 statement:stmt]; NSString *fax = [self textAtColumn:13 statement:stmt]; NSString *zipcode = [self textAtColumn:14 statement:stmt]; NSString *city = [self textAtColumn:15 statement:stmt]; NSString *state = [self textAtColumn:16 statement:stmt]; NSString *country = [self textAtColumn:17 statement:stmt]; NSString *name = [self textAtColumn:18 statement:stmt]; // contact id NSMutableDictionary *contact_id_dic = [NSMutableDictionary dictionary]; [contact_id_dic setValue:@"Contact ID" forKey:@"aname"]; [contact_id_dic setValue:@"text" forKey:@"control"]; [contact_id_dic setValue:@"text" forKey:@"keyboard"]; [contact_id_dic setValue:@"customer_cid" forKey:@"name"]; [contact_id_dic setValue:@"true" forKey:@"required"]; [contact_id_dic setValue:contact_id forKey:@"value"]; [customer_dic setValue:contact_id_dic forKey:@"item_0"]; // business card NSMutableDictionary *business_card_dic = [NSMutableDictionary dictionary]; [business_card_dic setValue:@"Business Card" forKey:@"aname"]; [business_card_dic setValue:@"img" forKey:@"control"]; [business_card_dic setValue:@"1" forKey:@"disable"]; [business_card_dic setValue:img0 forKey:@"img_url_0"]; [business_card_dic setValue:img1 forKey:@"img_url_1"]; [business_card_dic setValue:img2 forKey:@"img_url_2"]; [business_card_dic setValue:img0 forKey:@"img_url_aname_0"]; [business_card_dic setValue:img1 forKey:@"img_url_aname_1"]; [business_card_dic setValue:img2 forKey:@"img_url_aname_2"]; [business_card_dic setValue:@"business_card" forKey:@"name"]; [customer_dic setValue:business_card_dic forKey:@"item_1"]; // fax NSDictionary *fax_dic = [self infoName:@"customer_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax]; [customer_dic setValue:fax_dic forKey:@"item_10"]; // zipcode NSDictionary *zipcode_dic = [self infoName:@"customer_zipcode" aname:@"Zipcode" control:@"text" keyboard:nil value:zipcode]; [customer_dic setValue:zipcode_dic forKey:@"item_11"]; // city NSDictionary *city_dic = [self infoName:@"customer_city" aname:@"City" control:@"text" keyboard:nil value:city]; [customer_dic setValue:city_dic forKey:@"item_12"]; // state NSDictionary *state_dic = [self infoName:@"customer_state" aname:@"State" control:@"text" keyboard:nil value:state]; [customer_dic setValue:state_dic forKey:@"item_13"]; // country NSDictionary *country_dic = [self infoName:@"customer_country" aname:@"Country" control:@"text" keyboard:nil value:country]; [customer_dic setValue:country_dic forKey:@"item_14"]; // company name NSDictionary *company_dic = [self infoName:@"customer_name" aname:@"Company Name" control:@"text" keyboard:nil value:company_name]; [customer_dic setValue:company_dic forKey:@"item_2"]; // addr_1 NSDictionary *addr1_dic = [self infoName:@"customer_address1" aname:@"Address_1" control:@"text" keyboard:nil value:addr1]; [customer_dic setValue:addr1_dic forKey:@"item_3"]; // addr_2 NSDictionary *addr2_dic = [self infoName:@"customer_address2" aname:@"Address_2" control:@"text" keyboard:nil value:addr2]; [customer_dic setValue:addr2_dic forKey:@"item_4"]; // addr_3 NSDictionary *addr3_dic = [self infoName:@"customer_address3" aname:@"Address_3" control:@"text" keyboard:nil value:addr3]; [customer_dic setValue:addr3_dic forKey:@"item_5"]; // addr_4 NSDictionary *addr4_dic = [self infoName:@"customer_address4" aname:@"Address_4" control:@"text" keyboard:nil value:addr4]; [customer_dic setValue:addr4_dic forKey:@"item_6"]; // Contact NSDictionary *contact_dic = [self infoName:@"customer_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:name]; [customer_dic setValue:contact_dic forKey:@"item_7"]; // email NSDictionary *email_dic = [self infoName:@"customer_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email]; [customer_dic setValue:email_dic forKey:@"item_8"]; // phone NSDictionary *phone_dic = [self infoName:@"customer_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone]; [customer_dic setValue:phone_dic forKey:@"item_9"]; // title [customer_dic setValue:@"Customer" forKey:@"title"]; // count [customer_dic setValue:[NSNumber numberWithInteger:15] forKey:@"count"]; }]; // setting NSDictionary *setting = params[@"setting"]; NSNumber *hide = setting[@"CustomerHide"]; [customer_dic setValue:hide forKey:@"hide"]; return customer_dic; } + (NSDictionary *)shipToDic:(NSDictionary *)params db:(sqlite3 *)db { __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; // setting NSDictionary *setting = params[@"setting"]; NSNumber *hide = setting[@"ShipToHide"]; [dic setValue:hide forKey:@"hide"]; NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; NSString *sql = [NSString stringWithFormat:@"select receive_cid,receive_name,receive_ext,receive_contact,receive_email,receive_fax,receive_phone from offline_order where so_id = '%@';",orderCode]; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSString *cid = [self textAtColumn:0 statement:stmt]; NSString *name = [self textAtColumn:1 statement:stmt]; NSString *ext = [self textAtColumn:2 statement:stmt]; NSString *contact = [self textAtColumn:3 statement:stmt]; NSString *email = [self textAtColumn:4 statement:stmt]; NSString *fax = [self textAtColumn:5 statement:stmt]; NSString *phone = [self textAtColumn:6 statement:stmt]; // count [dic setValue:[NSNumber numberWithInteger:8] forKey:@"count"]; // title [dic setValue:@"Ship To" forKey:@"title"]; // choose NSMutableDictionary *choose_dic = [NSMutableDictionary dictionary]; [choose_dic setValue:@"choose" forKey:@"aname"]; [choose_dic setValue:@"multi_action" forKey:@"control"]; [choose_dic setValue:[NSNumber numberWithInteger:3] forKey:@"count"]; NSDictionary *same_as_customer_dic = @{@"aname" : @"Same as customer", @"key_map" : @{@"receive_cid" : @"customer_cid", @"receive_contact" : @"customer_contact", @"receive_email" : @"customer_email", @"receive_ext" : @"customer_contact_ext", @"receive_fax" : @"customer_fax", @"receive_name" : @"customer_name", @"receive_phone" : @"customer_phone"}, @"refresh" : [NSNumber numberWithInteger:1], @"type" : @"pull"}; [choose_dic setValue:same_as_customer_dic forKey:@"item_0"]; NSDictionary *create_new_ship_to_dic = @{@"aname" : @"Create new ship to", @"name" : @"Add new address", @"refresh" : [NSNumber numberWithInteger:1], @"value" : @"new_addr" }; [choose_dic setValue:create_new_ship_to_dic forKey:@"item_1"]; NSDictionary *select_ship_to_dic = @{@"aname" : @"Select ship to", @"key_map" : @{@"receive_cid" : @"customer_cid", @"receive_contact" : @"customer_contact", @"receive_email" : @"customer_email", @"receive_ext" : @"customer_contact_ext", @"receive_fax" : @"customer_fax", @"receive_name" : @"customer_name", @"receive_phone" : @"customer_phone"}, @"name" : @"select_ship_to", @"refresh" : [NSNumber numberWithInteger:1], @"value" : @"Sales_Order_Ship_To"}; [choose_dic setValue:select_ship_to_dic forKey:@"item_2"]; [dic setValue:choose_dic forKey:@"item_0"]; // contact id NSMutableDictionary *contact_id_dic = [[self infoName:@"receive_cid" aname:@"Contact ID" control:@"edit" keyboard:@"text" value:cid] mutableCopy]; [contact_id_dic setValue:@"1" forKey:@"disable"]; [contact_id_dic setValue:@"true" forKey:@"required"]; [dic setValue:contact_id_dic forKey:@"item_1"]; // company name NSDictionary *company_name_dic = [self infoName:@"receive_name" aname:@"Company Name" control:@"edit" keyboard:@"text" value:name]; [dic setValue:company_name_dic forKey:@"item_2"]; // address NSMutableDictionary *ext_dic = [self infoName:@"receive_ext" aname:@"Address" control:@"text_view" keyboard:@"text" value:ext].mutableCopy; NSNumber *required = setting[@"ShippingToAddressRequire"]; if ([required integerValue]) { [ext_dic setValue:@"true" forKey:@"required"]; } [dic setValue:ext_dic forKey:@"item_3"]; // contact NSDictionary *contact_dic = [self infoName:@"receive_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:contact]; [dic setValue:contact_dic forKey:@"item_4"]; // phone NSDictionary *phone_dic = [self infoName:@"receive_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone]; [dic setValue:phone_dic forKey:@"item_5"]; // fax NSDictionary *fax_dic = [self infoName:@"receive_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax]; [dic setValue:fax_dic forKey:@"item_6"]; // email NSDictionary *email_dic = [self infoName:@"receive_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email]; [dic setValue:email_dic forKey:@"item_7"]; }]; return dic; } + (NSDictionary *)shipFromDic:(NSDictionary *)params db:(sqlite3 *)db { __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; // setting NSDictionary *setting = params[@"setting"]; NSNumber *hide = setting[@"ShipFromHide"]; [dic setValue:hide forKey:@"hide"]; NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; NSString *sql = [NSString stringWithFormat:@"select sender_cid,sender_name,sender_ext,sender_contact,sender_email,sender_fax,sender_phone from offline_order where so_id = '%@';",orderCode]; NSString *ship_from_default_sql = @"select contact_id,decrypt(company_name),decrypt(addr_1),first_name || ' ' || last_name,email,fax,phone from offline_contact where contact_id = 'NPD';"; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { __block NSString *cid = [self textAtColumn:0 statement:stmt]; __block NSString *name = [self textAtColumn:1 statement:stmt]; __block NSString *ext = [self textAtColumn:2 statement:stmt]; __block NSString *contact = [self textAtColumn:3 statement:stmt]; __block NSString *email = [self textAtColumn:4 statement:stmt]; __block NSString *fax = [self textAtColumn:5 statement:stmt]; __block NSString *phone = [self textAtColumn:6 statement:stmt]; if (!cid.length) { [iSalesDB jk_query:ship_from_default_sql db:db close:NO completion:^(sqlite3_stmt *statment, NSMutableDictionary *container, long *count) { cid = [self textAtColumn:0 statement:statment]; name = [self textAtColumn:1 statement:statment]; ext = [self textAtColumn:2 statement:statment]; contact = [self textAtColumn:3 statement:statment]; email = [self textAtColumn:4 statement:statment]; fax = [self textAtColumn:5 statement:statment]; phone = [self textAtColumn:6 statement:statment]; }]; } // count [dic setValue:[NSNumber numberWithInteger:8] forKey:@"count"]; // title [dic setValue:@"Ship From" forKey:@"title"]; // hide [dic setValue:[NSNumber numberWithInteger:1] forKey:@"hide"]; // choose NSMutableDictionary *choose_dic = [NSMutableDictionary dictionary]; [choose_dic setValue:@"choose" forKey:@"aname"]; [choose_dic setValue:@"multi_action" forKey:@"control"]; [choose_dic setValue:[NSNumber numberWithInteger:1] forKey:@"count"]; NSDictionary *select_ship_from_dic = @{@"aname" : @"Select ship from", @"key_map" : @{@"sender_cid" : @"customer_cid", @"sender_contact" : @"customer_contact", @"sender_email" : @"customer_email", @"sender_ext" : @"customer_contact_ext", @"sender_fax" : @"customer_fax", @"sender_name" : @"customer_name", @"sender_phone" : @"customer_phone"}, @"name" : @"select_cid", @"refresh" : [NSNumber numberWithInteger:0], @"value" : @"Sales_Order_Ship_From"}; [choose_dic setValue:select_ship_from_dic forKey:@"item_0"]; [dic setValue:choose_dic forKey:@"item_0"]; // contact id NSDictionary *contact_id_dic = [[self infoName:@"sender_cid" aname:@"Contact ID" control:@"edit" keyboard:@"text" value:cid] mutableCopy]; [contact_id_dic setValue:@"1" forKey:@"disable"]; [contact_id_dic setValue:@"true" forKey:@"required"]; [dic setValue:contact_id_dic forKey:@"item_1"]; // company name NSDictionary *company_name_dic = [self infoName:@"sender_name" aname:@"Company Name" control:@"edit" keyboard:@"text" value:name]; [dic setValue:company_name_dic forKey:@"item_2"]; // address NSDictionary *ext_dic = [self infoName:@"sender_ext" aname:@"Address" control:@"text_view" keyboard:@"text" value:ext]; [dic setValue:ext_dic forKey:@"item_3"]; // contact NSDictionary *contact_dic = [self infoName:@"sender_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:contact]; [dic setValue:contact_dic forKey:@"item_4"]; // phone NSDictionary *phone_dic = [self infoName:@"sender_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone]; [dic setValue:phone_dic forKey:@"item_5"]; // fax NSDictionary *fax_dic = [self infoName:@"sender_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax]; [dic setValue:fax_dic forKey:@"item_6"]; // email NSDictionary *email_dic = [self infoName:@"sender_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email]; [dic setValue:email_dic forKey:@"item_7"]; }]; return dic; } + (NSDictionary *)freightBillToDic:(NSDictionary *) params db:(sqlite3 *)db { __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; // setting NSDictionary *setting = params[@"setting"]; NSNumber *hide = setting[@"FreightBillToHide"]; [dic setValue:hide forKey:@"hide"]; NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; NSString *sql = [NSString stringWithFormat:@"select shipping_billto_cid,shipping_billto_name,shipping_billto_ext,shipping_billto_contact,shipping_billto_email,shipping_billto_fax,shipping_billto_phone from offline_order where so_id = '%@';",orderCode]; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSString *cid = [self textAtColumn:0 statement:stmt]; NSString *name = [self textAtColumn:1 statement:stmt]; NSString *ext = [self textAtColumn:2 statement:stmt]; NSString *contact = [self textAtColumn:3 statement:stmt]; NSString *email = [self textAtColumn:4 statement:stmt]; NSString *fax = [self textAtColumn:5 statement:stmt]; NSString *phone = [self textAtColumn:6 statement:stmt]; // count [dic setValue:[NSNumber numberWithInteger:8] forKey:@"count"]; // title [dic setValue:@"Freight Bill To" forKey:@"title"]; // hide [dic setValue:[NSNumber numberWithInteger:1] forKey:@"hide"]; // choose NSMutableDictionary *choose_dic = [NSMutableDictionary dictionary]; [choose_dic setValue:@"choose" forKey:@"aname"]; [choose_dic setValue:@"multi_action" forKey:@"control"]; [choose_dic setValue:[NSNumber numberWithInteger:4] forKey:@"count"]; NSDictionary *same_as_ship_to_dic = @{@"aname" : @"Same as ship to", @"key_map" : @{@"shipping_billto_cid" : @"receive_cid", @"shipping_billto_contact" : @"receive_contact", @"shipping_billto_email" : @"receive_email", @"shipping_billto_ext" : @"receive_ext", @"shipping_billto_fax" : @"receive_fax", @"shipping_billto_name" : @"receive_name", @"shipping_billto_phone" : @"receive_phone"}, @"type" : @"pull"}; [choose_dic setValue:same_as_ship_to_dic forKey:@"item_0"]; NSDictionary *same_as_customer_dic = @{@"aname" : @"Same as customer", @"type" : @"pull", @"key_map" : @{@"shipping_billto_cid" : @"customer_cid", @"shipping_billto_contact" : @"customer_contact", @"shipping_billto_email" : @"customer_email", @"shipping_billto_ext" : @"customer_contact_ext", @"shipping_billto_fax" : @"customer_fax", @"shipping_billto_name" : @"customer_name", @"shipping_billto_phone" : @"customer_phone"} }; [choose_dic setValue:same_as_customer_dic forKey:@"item_1"]; NSDictionary *same_as_ship_from_dic = @{@"aname" : @"Same as ship from", @"key_map" : @{@"shipping_billto_cid" : @"sender_cid", @"shipping_billto_contact" : @"sender_contact", @"shipping_billto_email" : @"sender_email", @"shipping_billto_ext" : @"sender_ext", @"shipping_billto_fax" : @"sender_fax", @"shipping_billto_name" : @"sender_name", @"shipping_billto_phone" : @"sender_phone"}, @"type" : @"pull" }; [choose_dic setValue:same_as_ship_from_dic forKey:@"item_2"]; NSDictionary *select_freight_bill_to_dic = @{ @"aname" : @"Select freight bill to", @"name" : @"select_cid", @"refresh" : [NSNumber numberWithInteger:0], @"value" : @"Sales_Order_Freight_Bill_To", @"key_map" : @{ @"shipping_billto_cid" : @"customer_cid", @"shipping_billto_contact" : @"customer_contact", @"shipping_billto_email" : @"customer_email", @"shipping_billto_ext" : @"customer_contact_ext", @"shipping_billto_fax" : @"customer_fax", @"shipping_billto_name" : @"customer_name", @"shipping_billto_phone" : @"customer_phone" } }; [choose_dic setValue:select_freight_bill_to_dic forKey:@"item_3"]; [dic setValue:choose_dic forKey:@"item_0"]; // contact id NSDictionary *contact_id_dic = [[self infoName:@"shipping_billto_cid" aname:@"Contact ID" control:@"edit" keyboard:@"text" value:cid] mutableCopy]; [contact_id_dic setValue:@"1" forKey:@"disable"]; [contact_id_dic setValue:@"true" forKey:@"required"]; [dic setValue:contact_id_dic forKey:@"item_1"]; // company name NSDictionary *company_name_dic = [self infoName:@"shipping_billto_name" aname:@"Company Name" control:@"edit" keyboard:@"text" value:name]; [dic setValue:company_name_dic forKey:@"item_2"]; // address NSMutableDictionary *ext_dic = [self infoName:@"shipping_billto_ext" aname:@"Address" control:@"text_view" keyboard:@"text" value:ext].mutableCopy; NSNumber *ext_required = setting[@"FreightBillToAddressRequire"]; if ([ext_required integerValue]) { [ext_dic setValue:@"true" forKey:@"required"]; } [dic setValue:ext_dic forKey:@"item_3"]; // contact NSDictionary *contact_dic = [self infoName:@"shipping_billto_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:contact]; [dic setValue:contact_dic forKey:@"item_4"]; // phone NSDictionary *phone_dic = [self infoName:@"shipping_billto_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone]; [dic setValue:phone_dic forKey:@"item_5"]; // fax NSDictionary *fax_dic = [self infoName:@"shipping_billto_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax]; [dic setValue:fax_dic forKey:@"item_6"]; // email NSDictionary *email_dic = [self infoName:@"shipping_billto_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email]; [dic setValue:email_dic forKey:@"item_7"]; }]; return dic; } + (NSDictionary *)merchandiseBillToDic:(NSDictionary *)params db:(sqlite3 *)db { __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; // setting NSDictionary *setting = params[@"setting"]; NSNumber *hide = setting[@"MerchandiseBillToHide"]; [dic setValue:hide forKey:@"hide"]; NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; NSString *sql = [NSString stringWithFormat:@"select billing_cid,billing_name,billing_ext,billing_contact,billing_email,billing_fax,billing_phone from offline_order where so_id = '%@';",orderCode]; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSString *cid = [self textAtColumn:0 statement:stmt]; NSString *name = [self textAtColumn:1 statement:stmt]; NSString *ext = [self textAtColumn:2 statement:stmt]; NSString *contact = [self textAtColumn:3 statement:stmt]; NSString *email = [self textAtColumn:4 statement:stmt]; NSString *fax = [self textAtColumn:5 statement:stmt]; NSString *phone = [self textAtColumn:6 statement:stmt]; // count [dic setValue:[NSNumber numberWithInteger:8] forKey:@"count"]; // title [dic setValue:@"Merchandise Bill To" forKey:@"title"]; // hide [dic setValue:[NSNumber numberWithInteger:1] forKey:@"hide"]; // choose NSMutableDictionary *choose_dic = [NSMutableDictionary dictionary]; [choose_dic setValue:@"choose" forKey:@"aname"]; [choose_dic setValue:@"multi_action" forKey:@"control"]; [choose_dic setValue:[NSNumber numberWithInteger:3] forKey:@"count"]; NSDictionary *same_as_ship_to_dic = @{@"aname" : @"Same as ship to", @"key_map" : @{@"billing_cid" : @"receive_cid", @"billing_contact" : @"receive_contact", @"billing_email" : @"receive_email", @"billing_ext" : @"receive_ext", @"billing_fax" : @"receive_fax", @"billing_name" : @"receive_name", @"billing_phone" : @"receive_phone"}, @"type" : @"pull"}; [choose_dic setValue:same_as_ship_to_dic forKey:@"item_0"]; NSDictionary *same_as_customer_dic = @{@"aname" : @"Same as customer", @"type" : @"pull", @"key_map" : @{@"billing_cid" : @"customer_cid", @"billing_contact" : @"customer_contact", @"billing_email" : @"customer_email", @"billing_ext" : @"customer_contact_ext", @"billing_fax" : @"customer_fax", @"billing_name" : @"customer_name", @"billing_phone" : @"customer_phone"} }; [choose_dic setValue:same_as_customer_dic forKey:@"item_1"]; NSDictionary *select_bill_to_dic = @{ @"aname" : @"Select bill to", @"name" : @"select_cid", @"refresh" : [NSNumber numberWithInteger:0], @"value" : @"Sales_Order_Merchandise_Bill_To", @"key_map" : @{ @"billing_cid" : @"customer_cid", @"billing_contact" : @"customer_contact", @"billing_email" : @"customer_email", @"billing_ext" : @"customer_contact_ext", @"billing_fax" : @"customer_fax", @"billing_name" : @"customer_name", @"billing_phone" : @"customer_phone" } }; [choose_dic setValue:select_bill_to_dic forKey:@"item_2"]; [dic setValue:choose_dic forKey:@"item_0"]; // contact id NSDictionary *contact_id_dic = [[self infoName:@"billing_cid" aname:@"Contact ID" control:@"edit" keyboard:@"text" value:cid] mutableCopy]; [contact_id_dic setValue:@"1" forKey:@"disable"]; [contact_id_dic setValue:@"true" forKey:@"required"]; [dic setValue:contact_id_dic forKey:@"item_1"]; // company name NSDictionary *company_name_dic = [self infoName:@"billing_name" aname:@"Company Name" control:@"edit" keyboard:@"text" value:name]; [dic setValue:company_name_dic forKey:@"item_2"]; // address NSMutableDictionary *ext_dic = [self infoName:@"billing_ext" aname:@"Address" control:@"text_view" keyboard:@"text" value:ext].mutableCopy; NSNumber *ext_required = setting[@"MerchandiseBillToAddressRequire"]; if ([ext_required integerValue]) { [ext_dic setValue:@"true" forKey:@"required"]; } [dic setValue:ext_dic forKey:@"item_3"]; // contact NSDictionary *contact_dic = [self infoName:@"billing_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:contact]; [dic setValue:contact_dic forKey:@"item_4"]; // phone NSDictionary *phone_dic = [self infoName:@"billing_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone]; [dic setValue:phone_dic forKey:@"item_5"]; // fax NSDictionary *fax_dic = [self infoName:@"billing_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax]; [dic setValue:fax_dic forKey:@"item_6"]; // email NSDictionary *email_dic = [self infoName:@"billing_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email]; [dic setValue:email_dic forKey:@"item_7"]; }]; return dic; } + (NSDictionary *)returnToDic:(NSDictionary *)params db:(sqlite3 *)db { __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; // setting NSDictionary *setting = params[@"setting"]; NSNumber *hide = setting[@"ReturnToHide"]; [dic setValue:hide forKey:@"hide"]; NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; NSString *sql = [NSString stringWithFormat:@"select returnto_cid,returnto_name,returnto_ext,returnto_contact,returnto_email,returnto_fax,returnto_phone from offline_order where so_id = '%@';",orderCode]; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSString *cid = [self textAtColumn:0 statement:stmt]; NSString *name = [self textAtColumn:1 statement:stmt]; NSString *ext = [self textAtColumn:2 statement:stmt]; NSString *contact = [self textAtColumn:3 statement:stmt]; NSString *email = [self textAtColumn:4 statement:stmt]; NSString *fax = [self textAtColumn:5 statement:stmt]; NSString *phone = [self textAtColumn:6 statement:stmt]; // count [dic setValue:[NSNumber numberWithInteger:8] forKey:@"count"]; // title [dic setValue:@"Return To" forKey:@"title"]; // hide [dic setValue:[NSNumber numberWithInteger:1] forKey:@"hide"]; // choose NSMutableDictionary *choose_dic = [NSMutableDictionary dictionary]; [choose_dic setValue:@"choose" forKey:@"aname"]; [choose_dic setValue:@"multi_action" forKey:@"control"]; [choose_dic setValue:[NSNumber numberWithInteger:2] forKey:@"count"]; NSDictionary *same_as_ship_from_dic = @{@"aname" : @"Same as ship from", @"key_map" : @{@"returnto_cid" : @"sender_cid", @"returnto_contact" : @"sender_contact", @"returnto_email" : @"sender_email", @"returnto_ext" : @"sender_ext", @"returnto_fax" : @"sender_fax", @"returnto_name" : @"sender_name", @"returnto_phone" : @"sender_phone"}, @"type" : @"pull"}; [choose_dic setValue:same_as_ship_from_dic forKey:@"item_0"]; NSDictionary *select_return_to_dic = @{ @"aname" : @"Select return to", @"name" : @"select_cid", @"refresh" : [NSNumber numberWithInteger:0], @"value" : @"Contact_Return_To", @"key_map" : @{ @"returnto_cid" : @"customer_cid", @"returnto_contact" : @"customer_contact", @"returnto_email" : @"customer_email", @"returnto_ext" : @"customer_contact_ext", @"returnto_fax" : @"customer_fax", @"returnto_name" : @"customer_name", @"returnto_phone" : @"customer_phone" } }; [choose_dic setValue:select_return_to_dic forKey:@"item_1"]; [dic setValue:choose_dic forKey:@"item_0"]; // contact id NSDictionary *contact_id_dic = [[self infoName:@"returnto_cid" aname:@"Contact ID" control:@"edit" keyboard:@"text" value:cid] mutableCopy]; [contact_id_dic setValue:@"1" forKey:@"disable"]; [contact_id_dic setValue:@"true" forKey:@"required"]; [dic setValue:contact_id_dic forKey:@"item_1"]; // company name NSDictionary *company_name_dic = [self infoName:@"returnto_name" aname:@"Company Name" control:@"edit" keyboard:@"text" value:name]; [dic setValue:company_name_dic forKey:@"item_2"]; // address NSDictionary *ext_dic = [self infoName:@"returnto_ext" aname:@"Address" control:@"text_view" keyboard:@"text" value:ext]; [dic setValue:ext_dic forKey:@"item_3"]; // contact NSDictionary *contact_dic = [self infoName:@"returnto_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:contact]; [dic setValue:contact_dic forKey:@"item_4"]; // phone NSDictionary *phone_dic = [self infoName:@"returnto_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone]; [dic setValue:phone_dic forKey:@"item_5"]; // fax NSDictionary *fax_dic = [self infoName:@"returnto_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax]; [dic setValue:fax_dic forKey:@"item_6"]; // email NSDictionary *email_dic = [self infoName:@"returnto_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email]; [dic setValue:email_dic forKey:@"item_7"]; }]; return dic; } + (NSDictionary *)modelInfoDic:(NSDictionary *)params db:(sqlite3 *)db { NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; __block double TotalCuft = 0; __block double TotalWeight = 0; __block int TotalCarton = 0; __block double payments = 0; // setting NSDictionary *setting = params[@"setting"]; NSNumber *hide = setting[@"ModelInformationHide"]; [dic setValue:hide forKey:@"hide"]; NSString *sql = [NSString stringWithFormat:@"select c.item_id,c.item_count,m.stockUom,c.price,c.discount,m.name,m.description,c.line_note,m.availability from (select _id,product_id,decrypt(str_price) as price,discount,item_count,line_note,item_id from offline_cart where so_no='%@') c left join product m on c.product_id=m.product_id;",orderCode]; AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSMutableDictionary *model_dic = [NSMutableDictionary dictionary]; // item id int item_id = sqlite3_column_int(stmt, 0); // count int item_count = sqlite3_column_int(stmt, 1); // stockUom int stockUom = sqlite3_column_int(stmt, 2); // unit price NSString *str_price = [self textAtColumn:3 statement:stmt]; NSString* Price=nil; if([str_price isEqualToString:@""]) { NSNumber* price = [self get_model_default_price:appDelegate.contact_id product_id:nil item_id:@(item_id) db:db]; if(price==nil) Price=@"No Price."; else Price=[NSString stringWithFormat:@"%.2f",price.floatValue]; } else { Price=[NSString stringWithFormat:@"%.2f",[str_price floatValue]]; } // discount double discount = sqlite3_column_double(stmt, 4); // name NSString *name = [self textAtColumn:5 statement:stmt]; // description NSString *description = [self textAtColumn:6 statement:stmt]; description = [NSString stringWithFormat:@"%@\n%@",name,description ]; // line note NSString *line_note = [self textAtColumn:7 statement:stmt]; int avaulability = sqlite3_column_int(stmt, 8); // img NSString *img = [self item_image:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] db:db]; NSDictionary *combine = [self model_bundle:item_id db:db compute_part:false]; double subTotal = item_count * [Price doubleValue] * (1.0 - discount / 100.0); if(combine != nil) { // int citem=0; int bcount=[[combine valueForKey:@"count"] intValue]; for(int bc=0;bc 1) { logistic_note_text = [logistic_note_array lastObject]; } } } NSMutableDictionary *val_0 = [NSMutableDictionary dictionary]; [val_0 setValue:[NSNumber numberWithInteger:will_call_check] forKey:@"check"]; [val_0 setValue:@"WILL CALL(requires 24 hours advance notice)" forKey:@"value"]; [val_0 setValue:@"WILL CALL" forKey:@"value_id"]; NSMutableDictionary *val0_subItem = [NSMutableDictionary dictionary]; [val0_subItem setValue:[NSNumber numberWithInteger:1] forKey:@"count"]; NSDictionary *val0_subItem_item0 = @{ @"aname" : @"Option", @"cadedate" : @{ @"count" : [NSNumber numberWithInteger:2], @"val_0" : @{ @"check" : [NSNumber numberWithInteger:PERSONAL_PICK_UP_check], @"refresh" : [NSNumber numberWithInteger:0], @"value" : @"PERSONAL PICK UP", @"value_id" : @"PERSONAL PICK UP" }, @"val_1" : @{ @"check" : [NSNumber numberWithInteger:USE_MY_CARRIER_check], @"refresh" : [NSNumber numberWithInteger:0], @"sub_item" : @{ @"count" : [NSNumber numberWithInteger:1], @"item_0" : @{ @"aname" : @"BOL", @"control" : @"edit", @"keyboard" : @"text", @"name" : @"logist_note_text", @"refresh" : [NSNumber numberWithInteger:0], @"required" : @"false", @"value" : logistic_note_text } }, @"value" : @"USE MY CARRIER", @"value_id" : @"USE MY CARRIER" } }, @"control" : @"enum", @"name" : @"logistic_note", @"required" : @"true", @"single_select" : @"true" }; [val0_subItem setValue:val0_subItem_item0 forKey:@"item_0"]; [val_0 setValue:val0_subItem forKey:@"sub_item"]; // val_1 lift_gate = [self valueInParams:params key:@"lift_gate"]; if([lift_gate isEqualToString:@""]) { if (lift_gate_integer == 1) { lift_gate = @"true"; } else { lift_gate = @"false"; } } int common_carrier_check = 0; if (logist && [logist isEqualToString:@"COMMON CARRIER"]) { common_carrier_check = 1; [params setValue:lift_gate forKey:@"lift_gate"]; } NSDictionary *val_1 = @{ @"check" : [NSNumber numberWithInteger:common_carrier_check], @"sub_item" : @{ @"count" : [NSNumber numberWithInteger:1], @"item_0" : @{ @"aname" : @"Do you have Loading Dock Available ? Slide to green for YES", @"control" : @"switch", @"name" : @"lift_gate", @"refresh" : [NSNumber numberWithInteger:1], @"required" : @"true", @"value" : lift_gate } }, @"value" : @"COMMON CARRIER", @"value_id" : @"COMMON CARRIER" }; // cadedate NSDictionary *cadedate = @{ @"count" : [NSNumber numberWithInteger:2], @"val_0" : val_0, @"val_1" : val_1 }; // item_0 NSMutableDictionary *item_0 = @{ @"aname" : @"Shipping", @"cadedate" : cadedate, @"control" : @"enum", @"name" : @"logist", @"refresh" : [NSNumber numberWithInteger:1], @"single_select" : @"true", }.mutableCopy; NSNumber *required = setting[@"ShippingMethodRequire"]; if ([required integerValue]) { [item_0 setValue:@"true" forKey:@"required"]; } [dic setValue:item_0 forKey:@"item_0"]; return dic; } + (NSDictionary *)submitAsDic:(NSDictionary *)params db:(sqlite3 *)db { NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; NSString *sql = [NSString stringWithFormat:@"select submit_as from offline_order where so_id = '%@';",orderCode]; __block int submit_as_integer = 0; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { submit_as_integer = sqlite3_column_int(stmt, 0); }]; int check11 = 0; int check10 = 0; if (submit_as_integer == 11) { check11 = 1; } if (submit_as_integer == 10) { check10 = 1; } // section_0 NSMutableDictionary *dic = @{ @"count" : @(1), @"item_0" : @{ @"aname" : @"Submit Order As", @"cadedate" : @{ @"count" : @(2), @"val_0" : @{ @"check" : [NSNumber numberWithInteger:check11], @"value" : @"Sales Order", @"value_id" : @(11) }, @"val_1" : @{ @"check" : [NSNumber numberWithInteger:check10], @"value" : @"Quote", @"value_id" : @(10) } }, @"control" : @"enum", @"name" : @"erpOrderStatus", @"required" : @"true", @"single_select" : @"true" }, @"title" : @"Order Type" }.mutableCopy; // setting NSDictionary *setting = params[@"setting"]; NSNumber *hide = setting[@"OrderTypeHide"]; [dic setValue:hide forKey:@"hide"]; return dic; } + (NSDictionary *)offline_getStateByCountryCode:(NSString *)countryCode checkedState:(NSString *)state_code db:(sqlite3 *)db { countryCode = [self translateSingleQuote:countryCode]; NSString *sqlQuery = [NSString stringWithFormat:@"select _id,name,code,country_code from offline_state where country_code = '%@';",countryCode]; NSMutableDictionary *ret = [[iSalesDB jk_query:sqlQuery db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { char *name = (char *) sqlite3_column_text(stmt, 1); // value char *code = (char *) sqlite3_column_text(stmt, 2); // value_id if (name == NULL) { name = ""; } if (code == NULL) { code = ""; } NSMutableDictionary *stateDic = [NSMutableDictionary dictionaryWithCapacity:2]; [stateDic setValue:[NSString stringWithUTF8String:name] forKey:@"value"]; [stateDic setValue:[NSString stringWithUTF8String:code] forKey:@"value_id"]; [stateDic setValue:[NSNumber numberWithInt:0] forKey:@"check"]; if (state_code && [[NSString stringWithUTF8String:code] isEqualToString:state_code]) { [stateDic setValue:[NSNumber numberWithInt:1] forKey:@"check"]; } NSString *key = [NSString stringWithFormat:@"val_%ld",(*count)++]; [container setValue:stateDic forKey:key]; }] mutableCopy]; // failure 可以不用了,一样的 if (ret.allKeys.count == 0) { NSMutableDictionary *stateDic = [NSMutableDictionary dictionaryWithCapacity:2]; [stateDic setValue:@"Other" forKey:@"value"]; [stateDic setValue:@"" forKey:@"value_id"]; [stateDic setValue:[NSNumber numberWithInt:0] forKey:@"check"]; if (state_code && [@"" isEqualToString:state_code]) { [stateDic setValue:[NSNumber numberWithInt:1] forKey:@"check"]; } NSString *key = [NSString stringWithFormat:@"val_0"]; [ret setValue:stateDic forKey:key]; } [ret setValue:[NSNumber numberWithInt:ret.allKeys.count] forKey:@"count"]; return ret; } + (NSDictionary *)paymentInfoDic:(NSDictionary *)params db:(sqlite3 *)db { NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; NSString *sql = [NSString stringWithFormat:@"select paymentType,credit_card_first_name,credit_card_last_name,credit_card_address1,credit_card_address2,credit_card_zipcode,credit_card_type,decrypt(credit_card_number),decrypt(credit_card_security_code),decrypt(credit_card_expiration_month),decrypt(credit_card_expiration_year),credit_card_city,credit_card_state from offline_order where so_id = '%@';",orderCode]; __block NSString *payType = @""; __block NSString *firstName = @""; __block NSString *lastName = @""; __block NSString *addr1 = @""; __block NSString *addr2 = @""; __block NSString *zipcode = @""; __block NSString *cardType = @""; __block NSString *cardNumber = @""; __block NSString *securityCode = @""; __block NSString *month = @""; __block NSString *year = @""; __block NSString *city = @""; __block NSString *state = @""; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { payType = [self textAtColumn:0 statement:stmt]; firstName = [self textAtColumn:1 statement:stmt]; lastName = [self textAtColumn:2 statement:stmt]; addr1 = [self textAtColumn:3 statement:stmt]; addr2 = [self textAtColumn:4 statement:stmt]; zipcode = [self textAtColumn:5 statement:stmt]; cardType = [self textAtColumn:6 statement:stmt]; cardNumber = [self textAtColumn:7 statement:stmt]; securityCode = [self textAtColumn:8 statement:stmt]; month = [self textAtColumn:9 statement:stmt]; year = [self textAtColumn:10 statement:stmt]; city = [self textAtColumn:11 statement:stmt]; state = [self textAtColumn:12 statement:stmt]; }]; NSString *required = @"true"; // setting NSDictionary *setting = params[@"setting"]; NSNumber *requiredNumber = setting[@"PaymentRequire"]; if ([requiredNumber integerValue]) { required = @"true"; } else { required = @"false"; } // "section_2" NSMutableDictionary *dic = @{ @"count" : @(1), @"item_0" : @{ @"aname" : @"Payment", @"required" : required, @"cadedate" : @{ @"count" : @(6), @"val_0" : @{ @"check" : [payType isEqualToString:@"Check"] ? @(1) : @(0), @"value" : @"Check", @"value_id" : @"Check" }, @"val_1" : @{ @"check" : [payType isEqualToString:@"Cash"] ? @(1) : @(0), @"value" : @"Cash", @"value_id" : @"Cash" }, @"val_2" : @{ @"check" : [payType isEqualToString:@"NET 30"] ? @(1) : @(0), @"value" : @"NET 30", @"value_id" : @"NET 30" }, @"val_3" : @{ @"check" : [payType isEqualToString:@"Wire Transfer"] ? @(1) : @(0), @"value" : @"Wire Transfer", @"value_id" : @"Wire Transfer" }, @"val_4" : @{ @"check" : [payType isEqualToString:@"Credit Card"] ? @(1) : @(0), @"sub_item" : @{ @"count" : @(3), @"item_0" : @{ @"aname" : @"choose", @"control" : @"multi_action", @"count" : @(1), @"item_0" : @{ @"aname" : @"Same as customer", @"key_map" : @{ @"credit_card_address1" : @"customer_address1", @"credit_card_address2" : @"customer_address2", @"credit_card_city" : @"customer_city", @"credit_card_first_name" : @"customer_first_name", @"credit_card_last_name" : @"customer_last_name", @"credit_card_state" : @"customer_state", @"credit_card_zipcode" : @"customer_zipcode" }, @"type" : @"pull" } }, @"item_1" : @{ @"aname" : @"", @"color" : @"red", @"control" : @"text", @"name" : @"", @"value" : @"USA Credit cards only" }, @"item_2" : @{ @"aname" : @"Fill", @"cadedate" : @{ @"count" : @(2), @"val_0" : @{ @"check" : @(1), @"sub_item" : @{ @"count" : @(11), @"item_0" : @{ @"aname" : @"Type", @"cadedate" : @{ @"count" : @(2), @"val_0" : @{ @"check" : [cardType isEqualToString:@"VISA"] ? @(1) : @(0), @"value" : @"VISA", @"value_id" : @(0) }, @"val_1" : @{ @"check" : [cardType isEqualToString:@"MASTER CARD"] ? @(1) : @(0), @"value" : @"MASTER CARD", @"value_id" : @(1) } }, @"control" : @"enum", @"name" : @"credit_card_type", @"required" : @"true", @"single_select" : @"true" }, @"item_1" : @{ @"aname" : @"Number", @"control" : @"edit", @"keyboard" : @"int", @"length" : @"16", @"name" : @"credit_card_number", @"required" : @"true", @"value" : cardNumber }, @"item_10" : @{ @"aname" : @"State", @"cadedate" : [self offline_getStateByCountryCode:@"US" checkedState:state db:db], @"control" : @"enum", @"enum" : @"true", @"name" : @"credit_card_state", @"required" : @"true", @"single_select" : @"true" }, @"item_2" : @{ @"aname" : @"Expiration Date", @"control" : @"monthpicker", @"name" : @"credit_card_expiration", @"required" : @"true", @"type" : @"date", @"value" : [month isEqualToString:@""] || [year isEqualToString:@""] ? @"" : [NSString stringWithFormat:@"%@/%@",month,year] }, @"item_3" : @{ @"aname" : @"Security Code", @"control" : @"edit", @"keyboard" : @"int", @"length" : @"3", @"name" : @"credit_card_security_code", @"required" : @"true", @"value" : securityCode }, @"item_4" : @{ @"aname" : @"First Name", @"control" : @"edit", @"keyboard" : @"text", @"name" : @"credit_card_first_name", @"required" : @"true", @"value" : firstName }, @"item_5" : @{ @"aname" : @"Last Name", @"control" : @"edit", @"keyboard" : @"text", @"name" : @"credit_card_last_name", @"required" : @"true", @"value" : lastName }, @"item_6" : @{ @"aname" : @"Address 1", @"control" : @"edit", @"keyboard" : @"text", @"name" : @"credit_card_address1", @"required" : @"true", @"value" : addr1 }, @"item_7" : @{ @"aname" : @"Address 2", @"control" : @"edit", @"keyboard" : @"text", @"name" : @"credit_card_address2", @"value" : addr2 }, @"item_8" : @{ @"aname" : @"zip code", @"control" : @"edit", @"keyboard" : @"text", @"name" : @"credit_card_zipcode", @"required" : @"true", @"value" : zipcode }, @"item_9" : @{ @"aname" : @"City", @"control" : @"edit", @"keyboard" : @"text", @"name" : @"credit_card_city", @"required" : @"true", @"value" : city } }, @"value" : @"Fill Now", @"value_id" : @"" }, @"val_1" : @{ @"check" : @(0), @"value" : @"Fill Later", @"value_id" : @"" } }, @"control" : @"enum", @"name" : @"", @"single_select" : @"true" } }, @"value" : @"Credit Card", @"value_id" : @"Credit Card" }, @"val_5" : @{ @"check" : [payType isEqualToString:@"FOLLOW EXISTING"] ? @(1) : @(0), @"value" : @"FOLLOW EXISTING PAYMENT TYPE", @"value_id" : @"FOLLOW EXISTING" } }, @"control" : @"enum", @"name" : @"paymentType", @"single_select" : @"true" }, @"title" : @"Payment Information" }.mutableCopy; NSNumber *hide = setting[@"PaymentInformationHide"]; [dic setValue:hide forKey:@"hide"]; return dic; } +(NSData*) offline_placeorder :(NSMutableDictionary *) params { sqlite3 *db = [iSalesDB get_db]; // UISetting NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachefolder = [paths objectAtIndex:0]; NSString *img_cache = [cachefolder stringByAppendingPathComponent:@"offline_data/UISetting.json"]; NSData* json =nil; json=[NSData dataWithContentsOfFile:img_cache]; NSError *error=nil; NSMutableDictionary* menu = [[NSJSONSerialization JSONObjectWithData:json options:NSJSONReadingMutableLeaves error:&error] mutableCopy]; NSDictionary *setting = [menu objectForKey:@"placeOrder"]; [params setObject:setting forKey:@"setting"]; int section_count = 0; // params NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; // 0 Order Type 1 Shipping Method 2 Payment Information __block NSMutableDictionary *ret = [self dictionaryFileName:@"placeOrderTemplate.json"]; // 0 Order Type NSString *key0 = [NSString stringWithFormat:@"section_%d",section_count++]; NSDictionary *order_type_dic = [self submitAsDic:params db:db]; [ret setValue:order_type_dic forKey:key0]; // 1 Shipping Method NSString *key1 = [NSString stringWithFormat:@"section_%d",section_count++]; NSMutableDictionary *shipping_method_dic = [[self shippingMethodDic:params db:db] mutableCopy]; [ret setValue:shipping_method_dic forKey:key1]; // 2 Payment Information NSString *key2 = [NSString stringWithFormat:@"section_%d",section_count++]; NSDictionary *payment_info_dic = [self paymentInfoDic:params db:db]; [ret setValue:payment_info_dic forKey:key2]; // 3 Customer NSString *key3 = [NSString stringWithFormat:@"section_%d",section_count++]; NSDictionary *customer_dic = [self customerDic:params db:db]; [ret setValue:customer_dic forKey:key3]; // 4 Ship To NSString *key4 = [NSString stringWithFormat:@"section_%d",section_count++]; NSDictionary *ship_to_dic = [self shipToDic:params db:db]; [ret setValue:ship_to_dic forKey:key4]; // 5 Ship From NSNumber *shipFromDisable = setting[@"ShipFromDisabled"]; if (![shipFromDisable integerValue]) { NSString *key5 = [NSString stringWithFormat:@"section_%d",section_count++]; NSDictionary *ship_from_dic = [self shipFromDic:params db:db]; [ret setValue:ship_from_dic forKey:key5]; } // 6 Freight Bill To NSNumber *freightBillToDisable = setting[@"FreightBillToDisabled"]; if (![freightBillToDisable integerValue]) { NSString *key6 = [NSString stringWithFormat:@"section_%d",section_count++]; NSDictionary *freight_bill_to = [self freightBillToDic:params db:db]; [ret setValue:freight_bill_to forKey:key6]; } // 7 Merchandise Bill To NSNumber *merchandiseBillToDisable = setting[@"MerchandiseBillToDisabled"]; if (![merchandiseBillToDisable integerValue]) { NSString *key7 = [NSString stringWithFormat:@"section_%d",section_count++]; NSDictionary *merchandise_bill_to_dic = [self merchandiseBillToDic:params db:db]; [ret setValue:merchandise_bill_to_dic forKey:key7]; } // 8 Return To NSNumber *returnToDisable = setting[@"ReturnToDisabled"]; if (![returnToDisable integerValue]) { NSString *key8 = [NSString stringWithFormat:@"section_%d",section_count++]; NSDictionary *return_to_dic = [self returnToDic:params db:db]; [ret setValue:return_to_dic forKey:key8]; } // 9 Model Information NSString *key9 = [NSString stringWithFormat:@"section_%d",section_count++]; NSMutableDictionary *model_info_dic = [[self modelInfoDic:params db:db] mutableCopy]; NSDictionary *toOrderTotal = [model_info_dic valueForKey:@"toOrderTotal"]; [model_info_dic removeObjectForKey:@"toOrderTotal"]; [ret setValue:model_info_dic forKey:key9]; // 10 Remarks Content NSString *key10 = [NSString stringWithFormat:@"section_%d",section_count++]; NSDictionary *remarks_content_dic = [self remarksContentDic:params db:db]; [ret setValue:remarks_content_dic forKey:key10]; // 11 Order Total NSString *key11 = [NSString stringWithFormat:@"section_%d",section_count++]; NSDictionary *order_total_dic = [self orderTotalDic:params otherTotal:toOrderTotal db:db]; [ret setValue:order_total_dic forKey:key11]; // 12 Signature NSString *key12 = [NSString stringWithFormat:@"section_%d",section_count++]; NSDictionary *sign_dic = [self signatureDic:params db:db]; [ret setValue:sign_dic forKey:key12]; [ret setValue:@(section_count) forKey:@"section_count"]; [iSalesDB close_db:db]; return [RAUtils dict2data:ret]; // return nil; } #pragma mark addr editor + (NSMutableDictionary *)anameDealWithStarAtItem:(NSDictionary *)item add:(BOOL)add { NSMutableDictionary *new_item = [item mutableCopy]; [new_item setValue:add ? @"true" : @"false" forKey:@"required"]; return new_item; } +(NSData*) offline_addreditor :(NSMutableDictionary *) params { // "is_subaction" = true; // orderCode = MOB1608240002; // password = 123456; // "subaction_tag" = 1; // user = EvanK; // { // "is_subaction" = true; // orderCode = MOB1608240002; // password = 123456; // "refresh_trigger" = zipcode; // "subaction_tag" = 1; // user = EvanK; // } NSMutableDictionary * ret = [self dictionaryFileName:@"createContact.json"]; [ret removeObjectForKey:@"up_params"]; [ret setObject:@"New Address" forKey:@"title"]; NSDictionary * section_0 = [ret objectForKey:@"section_0"]; NSMutableDictionary *new_section_0 = [NSMutableDictionary dictionary]; [new_section_0 setObject:[NSNumber numberWithInteger:14] forKey:@"count"]; NSMutableDictionary *country_dic = [section_0[@"item_5"] mutableCopy]; [country_dic removeObjectForKey:@"refresh"]; [country_dic removeObjectForKey:@"restore"]; [new_section_0 setObject:country_dic forKey:@"item_0"]; // Country [new_section_0 setObject:section_0[@"item_0"] forKey:@"item_1"]; // company name* [new_section_0 setObject:[self anameDealWithStarAtItem:section_0[@"item_6"] add:YES] forKey:@"item_2"]; // Address 1* [new_section_0 setObject:section_0[@"item_7"] forKey:@"item_3"]; // Address 2 [new_section_0 setObject:section_0[@"item_8"] forKey:@"item_4"]; // Address 3 [new_section_0 setObject:section_0[@"item_9"] forKey:@"item_5"]; // Address 4 NSMutableDictionary *zip_code_dic = [self anameDealWithStarAtItem:section_0[@"item_10"] add:YES]; [zip_code_dic removeObjectForKey:@"refresh"]; [new_section_0 setObject:zip_code_dic forKey:@"item_6"]; // Zip Code* [new_section_0 setObject:[self anameDealWithStarAtItem:section_0[@"item_11"] add:YES] forKey:@"item_7"]; // State/Province* [new_section_0 setObject:[self anameDealWithStarAtItem:section_0[@"item_12"] add:YES] forKey:@"item_8"]; // City* [new_section_0 setObject:section_0[@"item_13"] forKey:@"item_9"]; // Contact First Name [new_section_0 setObject:section_0[@"item_14"] forKey:@"item_10"]; // Contact Last Name [new_section_0 setObject:section_0[@"item_4"] forKey:@"item_11"]; // Phone* [new_section_0 setObject:section_0[@"item_15"] forKey:@"item_12"]; // Fax [new_section_0 setObject:[self anameDealWithStarAtItem:section_0[@"item_3"] add:NO] forKey:@"item_13"]; // Email [new_section_0 setObject:section_0[@"title"] forKey:@"title"]; // country NSString *countryCode = @"US"; NSDictionary *allCountry = [self offline_getAllCountryDefault:countryCode]; [self setValue:allCountry forItemKey:@"item_0" valueKey:@"cadedate" inDictionary:new_section_0]; // state NSMutableDictionary *allState = [[self offline_getStateByCountryCode:countryCode checkedState:nil] mutableCopy]; NSDictionary *tmpDic = @{ @"value" : @"Other", @"value_id" : @"", @"check" : [NSNumber numberWithInteger:0] }; for (int i = 0; i < allState.allKeys.count; i++) { NSString *key = [NSString stringWithFormat:@"val_%d",i]; NSDictionary *tmp = allState[key]; [allState setValue:tmpDic forKey:key]; tmpDic = tmp; } [allState setValue:[NSNumber numberWithInteger:allState.allKeys.count - 1] forKey:@"count"]; [self setValue:allState forItemKey:@"item_7" valueKey:@"cadedate" inDictionary:new_section_0]; [ret setValue:new_section_0 forKey:@"section_0"]; return [RAUtils dict2data:ret]; } #pragma mark save addr +(NSData*) offline_saveaddr :(NSMutableDictionary *) params { // NSString *companyName = [self valueInParams:params key:@"company"]; // NSString *addr1 = [self valueInParams:params key:@"address"]; // NSString *addr2 = [self valueInParams:params key:@"address2"]; // NSString *addr3 = [self valueInParams:params key:@"address_3"]; // NSString *addr4 = [self valueInParams:params key:@"address_4"]; // NSString *countryId = [self valueInParams:params key:@"country"]; // NSString *stateCode = [self valueInParams:params key:@"state"]; // NSString *city = [self valueInParams:params key:@"city"]; // NSString *zipCode = [self valueInParams:params key:@"zipcode"]; // NSString *firstName = [self valueInParams:params key:@"firstname"]; // NSString *lastName = [self valueInParams:params key:@"lastname"]; // NSString *phone = [self valueInParams:params key:@"phone"]; // NSString *fax = [self valueInParams:params key:@"fax"]; // NSString *email = [self valueInParams:params key:@"email"]; return [self offline_saveContact:params update:NO isCustomer:NO]; } #pragma mark cancel order +(NSData*) offline_cancelorder :(NSMutableDictionary *) params { // NSString *orderCode = [self valueInParams:params key:@"orderCode"]; NSString *order_id = [self valueInParams:params key:@"orderId"]; // NSString *sql = [NSString stringWithFormat:@"update offline_order set status = 2,erpOrderStatus = 15 where so_id = '%@';",orderCode]; NSString *sql = [NSString stringWithFormat:@"update offline_order set status = 2,erpOrderStatus = 15 where _id = %@;",order_id]; int ret = [iSalesDB execSql:sql]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"]; [dic setValue:@"Regular Mode" forKey:@"mode"]; // [dic setValue:@"160409" forKey:@"min_ver"]; return [RAUtils dict2data:dic]; } #pragma mark sign order +(NSData*) offline_signorder :(NSMutableDictionary *) params { //参考 offline_saveBusinesscard NSLog(@"sign order params: %@",params); // orderCode = MOB1608240002; // picpath = "16360511-BA55-4D66-9112-EF9DEA4A14F0.png"; NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; NSString *picPath = [self valueInParams:params key:@"picpath"]; picPath = [self translateSingleQuote:picPath]; NSString *sql = [NSString stringWithFormat:@"update offline_order set sign_picpath = '%@' where so_id = '%@';",picPath,orderCode]; int ret = [iSalesDB execSql:sql]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"]; [dic setValue:@"Regular Mode" forKey:@"mode"]; // [dic setValue:@"160409" forKey:@"min_ver"]; return [RAUtils dict2data:dic]; } #pragma mark save order + (NSString *)valueInParams:(NSDictionary *)params key:(NSString *)key translateSingleQuote:(BOOL)translate { NSString *ret = [self valueInParams:params key:key]; if (translate) { ret = [self translateSingleQuote:ret]; } return ret; } + (NSData *)saveorder:(NSMutableDictionary *)param submit:(BOOL)submit { NSString *so_id = [self valueInParams:param key:@"orderCode" translateSingleQuote:YES]; NSString *general_notes = [self valueInParams:param key:@"comments" translateSingleQuote:YES]; general_notes = [NSString stringWithFormat:@"general_notes = '%@',",general_notes] ; NSString *internal_notes = [self valueInParams:param key:@"internal_notes" translateSingleQuote:YES]; internal_notes = [NSString stringWithFormat:@"internal_notes = '%@',",internal_notes]; NSString *poNumber = [self valueInParams:param key:@"poNumber" translateSingleQuote:YES]; poNumber = [NSString stringWithFormat:@"poNumber = '%@',",poNumber]; NSString *must_call = [self valueInParams:param key:@"must_call"]; // false int must_call_integer = [must_call isEqualToString:@"true"] ? 1 : 0; must_call = [NSString stringWithFormat:@"must_call = %d,",must_call_integer]; NSString *sign_picpath = [self valueInParams:param key:@"sign_picpath" translateSingleQuote:YES]; sign_picpath = [NSString stringWithFormat:@"sign_picpath = '%@',",sign_picpath]; NSString *total_price = [self valueInParams:param key:@"totalPrice"]; if (![total_price isEqualToString:@""]) { total_price = [NSString stringWithFormat:@"total_price = %@,",total_price]; } else { total_price = @""; } NSString *paymentsAndCredits = [self valueInParams:param key:@"paymentsAndCredits"]; if ([paymentsAndCredits isEqualToString:@""]) { paymentsAndCredits = @""; } else { paymentsAndCredits = [NSString stringWithFormat:@"paymentsAndCredits = %@,",paymentsAndCredits]; } NSString *handling_fee_value = [self valueInParams:param key:@"handling_fee_value"]; if ([handling_fee_value isEqualToString:@""]) { handling_fee_value = @""; } else if ([handling_fee_value isEqualToString:@"Shipping To Be Quoted"]) { handling_fee_value = @""; } else { handling_fee_value = [NSString stringWithFormat:@"handling_fee_value = %@,",handling_fee_value]; } NSString *handling_fee_placeholder = handling_fee_value; NSString *lift_gate = [self valueInParams:param key:@"lift_gate"]; // false int lift_gate_integer = [lift_gate isEqualToString:@"true"] ? 1 : 0; lift_gate = [NSString stringWithFormat:@"lift_gate = %d,",lift_gate_integer]; NSString *lift_gate_value = [self valueInParams:param key:@"lift_gate_value"]; // Shipping To Be Quoted NSString *lift_gate_placeholder = @""; if ([lift_gate_value isEqualToString:@""]) { lift_gate_placeholder = @""; } else if ([lift_gate_value isEqualToString:@"Shipping To Be Quoted"]) { lift_gate_placeholder = @""; } else { lift_gate_placeholder = [NSString stringWithFormat:@"lift_gate_value = %@,",lift_gate_value]; } NSString *logist = [self valueInParams:param key:@"logist" translateSingleQuote:YES]; logist = [NSString stringWithFormat:@"logist = '%@',",logist]; NSString *logistic_note_text = [self valueInParams:param key:@"logist_note_text" translateSingleQuote:YES]; NSString *logistic_note = [self valueInParams:param key:@"logistic_note" translateSingleQuote:YES]; logistic_note = [logistic_note isEqualToString:@"USE MY CARRIER"] ? [NSString stringWithFormat:@"logistic_note = '%@\n\t%@',",logistic_note,logistic_note_text] : [NSString stringWithFormat:@"logistic_note = '%@',",logistic_note]; // NSString *erpOrderStatus = [self valueInParams:param key:@"erpOrderStatus"]; NSNumber *erpOrderStatus_number = [param objectForKey:@"erpOrderStatus"]; NSString *erpOrderStatus = !erpOrderStatus_number ? @"" : [NSString stringWithFormat:@"submit_as = %@,",erpOrderStatus_number]; // submit as NSString *paymentType = [self valueInParams:param key:@"paymentType" translateSingleQuote:YES]; paymentType = [NSString stringWithFormat:@"paymentType = '%@',",paymentType]; NSString *credit_card_address1 = [self valueInParams:param key:@"credit_card_address1" translateSingleQuote:YES]; credit_card_address1 = [NSString stringWithFormat:@"credit_card_address1 = '%@',",credit_card_address1]; NSString *credit_card_address2 = [self valueInParams:param key:@"credit_card_address2" translateSingleQuote:YES]; credit_card_address2 = [NSString stringWithFormat:@"credit_card_address2 = '%@',",credit_card_address2]; NSString *credit_card_city = [self valueInParams:param key:@"credit_card_city" translateSingleQuote:YES]; credit_card_city = [NSString stringWithFormat:@"credit_card_city = '%@',",credit_card_city]; NSString *credit_card_expiration = [self valueInParams:param key:@"credit_card_expiration" translateSingleQuote:YES]; NSString *credit_card_first_name = [self valueInParams:param key:@"credit_card_first_name" translateSingleQuote:YES]; credit_card_first_name = [NSString stringWithFormat:@"credit_card_first_name = '%@',",credit_card_first_name]; NSString *credit_card_last_name = [self valueInParams:param key:@"credit_card_last_name" translateSingleQuote:YES]; credit_card_last_name = [NSString stringWithFormat:@"credit_card_last_name = '%@',",credit_card_last_name]; NSString *credit_card_number = [self valueInParams:param key:@"credit_card_number" translateSingleQuote:YES]; BOOL number_nil = [credit_card_number isEqualToString:@""]; if (!number_nil) { credit_card_number = [AESCrypt fastencrypt:credit_card_number]; } credit_card_number = [NSString stringWithFormat:@"credit_card_number = '%@',",credit_card_number]; NSString *credit_card_security_code = [self valueInParams:param key:@"credit_card_security_code" translateSingleQuote:YES]; BOOL security_code_nil = [credit_card_security_code isEqualToString:@""]; if (!security_code_nil) { credit_card_security_code = [AESCrypt fastencrypt:credit_card_security_code]; } credit_card_security_code = [NSString stringWithFormat:@"credit_card_security_code = '%@',",credit_card_security_code]; NSString *credit_card_state = [self valueInParams:param key:@"credit_card_state" translateSingleQuote:YES]; credit_card_state = [NSString stringWithFormat:@"credit_card_state = '%@',",credit_card_state]; NSNumber *card_type_number = [param objectForKey:@"credit_card_type"]; NSString *credit_card_type = [NSString stringWithFormat:@"credit_card_type = '%@',",[card_type_number integerValue] == 0 ? @"VISA" : @"MASTER CARD"]; NSString *credit_card_zipcode = [self valueInParams:param key:@"credit_card_zipcode" translateSingleQuote:YES]; credit_card_zipcode = [NSString stringWithFormat:@"credit_card_zipcode = '%@',",credit_card_zipcode]; NSString *credit_card_expiration_year = [[credit_card_expiration componentsSeparatedByString:@"/"] lastObject]; credit_card_expiration_year = [AESCrypt fastencrypt:credit_card_expiration_year]; credit_card_expiration_year = [NSString stringWithFormat:@"credit_card_expiration_year = '%@',",credit_card_expiration_year]; NSString *credit_card_expiration_month = [[credit_card_expiration componentsSeparatedByString:@"/"] firstObject]; credit_card_expiration_month = [AESCrypt fastencrypt:credit_card_expiration_month]; credit_card_expiration_month = [NSString stringWithFormat:@"credit_card_expiration_month = '%@',",credit_card_expiration_month]; NSString *customer_cid = [self valueInParams:param key:@"customer_cid" translateSingleQuote:YES]; NSString *contact_id = customer_cid; customer_cid = [NSString stringWithFormat:@"customer_cid = '%@',",customer_cid]; NSString *customer_contact = [self valueInParams:param key:@"customer_contact" translateSingleQuote:YES]; NSString *contact_contact = [NSString stringWithFormat:@"contact_name = '%@',",customer_contact]; customer_contact = [NSString stringWithFormat:@"customer_contact = '%@',",customer_contact]; NSString *customer_email = [self valueInParams:param key:@"customer_email" translateSingleQuote:YES]; NSString *contact_email = [NSString stringWithFormat:@"email = '%@',",customer_email]; customer_email = [NSString stringWithFormat:@"customer_email = '%@',",customer_email]; NSString *customer_phone = [self valueInParams:param key:@"customer_phone" translateSingleQuote:YES]; NSString *contact_phone = [NSString stringWithFormat:@"phone = '%@',",[AESCrypt fastencrypt:customer_phone]]; customer_phone = [NSString stringWithFormat:@"customer_phone = '%@',",customer_phone]; NSString *customer_fax = [self valueInParams:param key:@"customer_fax" translateSingleQuote:YES]; NSString *contact_fax = [NSString stringWithFormat:@"fax = '%@',",customer_fax]; customer_fax = [NSString stringWithFormat:@"customer_fax = '%@',",customer_fax]; // NSString *customer_name = [self valueInParams:param key:@"customer_name" translateSingleQuote:YES]; customer_name = [NSString stringWithFormat:@"company_name = '%@',",[AESCrypt fastencrypt:customer_name]]; NSString *customer_address1 = [self valueInParams:param key:@"customer_address1" translateSingleQuote:YES]; customer_address1 = [NSString stringWithFormat:@"addr_1 = '%@',",[AESCrypt fastencrypt:customer_address1]]; NSString *customer_address2 = [self valueInParams:param key:@"customer_address2" translateSingleQuote:YES]; customer_address2 = [NSString stringWithFormat:@"addr_2 = '%@',",customer_address2]; NSString *customer_address3 = [self valueInParams:param key:@"customer_address3" translateSingleQuote:YES]; customer_address3 = [NSString stringWithFormat:@"addr_3 = '%@',",customer_address3]; NSString *customer_address4 = [self valueInParams:param key:@"customer_address4" translateSingleQuote:YES]; customer_address4 = [NSString stringWithFormat:@"addr_4 = '%@',",customer_address4]; NSString *customer_country = [self valueInParams:param key:@"customer_country" translateSingleQuote:YES]; customer_country = [NSString stringWithFormat:@"country = '%@',",customer_country]; NSString *customer_state = [self valueInParams:param key:@"customer_state" translateSingleQuote:YES]; customer_state = [NSString stringWithFormat:@"state = '%@',",customer_state]; NSString *customer_city = [self valueInParams:param key:@"customer_city" translateSingleQuote:YES]; customer_city = [NSString stringWithFormat:@"city = '%@',",customer_city]; NSString *customer_zipcode = [self valueInParams:param key:@"customer_zipcode" translateSingleQuote:YES]; customer_zipcode = [NSString stringWithFormat:@"zipcode = '%@'",customer_zipcode]; NSString *contactSql = [NSString stringWithFormat:@"update offline_contact set %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ where contact_id = '%@'",contact_contact,contact_email,contact_phone,contact_fax,customer_name,customer_address1,customer_address2,customer_address3,customer_address4,customer_country,customer_state,customer_city,customer_zipcode,contact_id]; NSString *receive_cid = [self valueInParams:param key:@"receive_cid" translateSingleQuote:YES]; receive_cid = [NSString stringWithFormat:@"receive_cid = '%@',",receive_cid]; NSString *receive_name = [self valueInParams:param key:@"receive_name" translateSingleQuote:YES]; receive_name = [NSString stringWithFormat:@"receive_name = '%@',",receive_name]; NSString *receive_ext = [self valueInParams:param key:@"receive_ext" translateSingleQuote:YES]; receive_ext = [NSString stringWithFormat:@"receive_ext = '%@',",receive_ext]; NSString *receive_contact = [self valueInParams:param key:@"receive_contact" translateSingleQuote:YES]; receive_contact = [NSString stringWithFormat:@"receive_contact = '%@',",receive_contact]; NSString *receive_phone = [self valueInParams:param key:@"receive_phone" translateSingleQuote:YES]; receive_phone = [NSString stringWithFormat:@"receive_phone = '%@',",receive_phone]; NSString *receive_email = [self valueInParams:param key:@"receive_email" translateSingleQuote:YES]; receive_email = [NSString stringWithFormat:@"receive_email = '%@',",receive_email]; NSString *receive_fax = [self valueInParams:param key:@"receive_fax" translateSingleQuote:YES]; receive_fax = [NSString stringWithFormat:@"receive_fax = '%@',",receive_fax]; NSString *sender_cid = [self valueInParams:param key:@"sender_cid" translateSingleQuote:YES]; sender_cid = [NSString stringWithFormat:@"sender_cid = '%@',",sender_cid]; NSString *sender_name = [self valueInParams:param key:@"sender_name" translateSingleQuote:YES]; sender_name = [NSString stringWithFormat:@"sender_name = '%@',",sender_name]; NSString *sender_ext = [self valueInParams:param key:@"sender_ext" translateSingleQuote:YES]; sender_ext = [NSString stringWithFormat:@"sender_ext = '%@',",sender_ext]; NSString *sender_contact = [self valueInParams:param key:@"sender_contact" translateSingleQuote:YES]; sender_contact = [NSString stringWithFormat:@"sender_contact = '%@',",sender_contact]; NSString *sender_phone = [self valueInParams:param key:@"sender_phone" translateSingleQuote:YES]; sender_phone = [NSString stringWithFormat:@"sender_phone = '%@',",sender_phone]; NSString *sender_fax = [self valueInParams:param key:@"sender_fax" translateSingleQuote:YES]; sender_fax = [NSString stringWithFormat:@"sender_fax = '%@',",sender_fax]; NSString *sender_email = [self valueInParams:param key:@"sender_email" translateSingleQuote:YES]; sender_email = [NSString stringWithFormat:@"sender_email = '%@',",sender_email]; NSString *shipping_billto_cid = [self valueInParams:param key:@"shipping_billto_cid" translateSingleQuote:YES]; shipping_billto_cid = [NSString stringWithFormat:@"shipping_billto_cid = '%@',",shipping_billto_cid]; NSString *shipping_billto_name = [self valueInParams:param key:@"shipping_billto_name" translateSingleQuote:YES]; shipping_billto_name = [NSString stringWithFormat:@"shipping_billto_name = '%@',",shipping_billto_name]; NSString *shipping_billto_ext = [self valueInParams:param key:@"shipping_billto_ext" translateSingleQuote:YES]; shipping_billto_ext = [NSString stringWithFormat:@"shipping_billto_ext = '%@',",shipping_billto_ext]; NSString *shipping_billto_contact = [self valueInParams:param key:@"shipping_billto_contact" translateSingleQuote:YES]; shipping_billto_contact = [NSString stringWithFormat:@"shipping_billto_contact = '%@',",shipping_billto_contact]; NSString *shipping_billto_phone = [self valueInParams:param key:@"shipping_billto_phone" translateSingleQuote:YES]; shipping_billto_phone = [NSString stringWithFormat:@"shipping_billto_phone = '%@',",shipping_billto_phone]; NSString *shipping_billto_fax = [self valueInParams:param key:@"shipping_billto_fax" translateSingleQuote:YES]; shipping_billto_fax = [NSString stringWithFormat:@"shipping_billto_fax = '%@',",shipping_billto_fax]; NSString *shipping_billto_email = [self valueInParams:param key:@"shipping_billto_email" translateSingleQuote:YES]; shipping_billto_email = [NSString stringWithFormat:@"shipping_billto_email = '%@',",shipping_billto_email]; NSString *billing_cid = [self valueInParams:param key:@"billing_cid" translateSingleQuote:YES]; billing_cid = [NSString stringWithFormat:@"billing_cid = '%@',",billing_cid]; NSString *billing_name = [self valueInParams:param key:@"billing_name" translateSingleQuote:YES]; billing_name = [NSString stringWithFormat:@"billing_name = '%@',",billing_name]; NSString *billing_ext = [self valueInParams:param key:@"billing_ext" translateSingleQuote:YES]; billing_ext = [NSString stringWithFormat:@"billing_ext = '%@',",billing_ext]; NSString *billing_contact = [self valueInParams:param key:@"billing_contact" translateSingleQuote:YES]; billing_contact = [NSString stringWithFormat:@"billing_contact = '%@',",billing_contact]; NSString *billing_phone = [self valueInParams:param key:@"billing_phone" translateSingleQuote:YES]; billing_phone = [NSString stringWithFormat:@"billing_phone = '%@',",billing_phone]; NSString *billing_fax = [self valueInParams:param key:@"billing_fax" translateSingleQuote:YES]; billing_fax = [NSString stringWithFormat:@"billing_fax = '%@',",billing_fax]; NSString *billing_email = [self valueInParams:param key:@"billing_email" translateSingleQuote:YES]; billing_email = [NSString stringWithFormat:@"billing_email = '%@',",billing_email]; NSString *returnto_cid = [self valueInParams:param key:@"returnto_cid" translateSingleQuote:YES]; returnto_cid = [NSString stringWithFormat:@"returnto_cid = '%@',",returnto_cid]; NSString *returnto_name = [self valueInParams:param key:@"returnto_name" translateSingleQuote:YES]; returnto_name = [NSString stringWithFormat:@"returnto_name = '%@',",returnto_name]; NSString *returnto_ext = [self valueInParams:param key:@"returnto_ext" translateSingleQuote:YES]; returnto_ext = [NSString stringWithFormat:@"returnto_ext = '%@',",returnto_ext]; NSString *returnto_contact = [self valueInParams:param key:@"returnto_contact" translateSingleQuote:YES]; returnto_contact = [NSString stringWithFormat:@"returnto_contact = '%@',",returnto_contact]; NSString *returnto_phone = [self valueInParams:param key:@"returnto_phone" translateSingleQuote:YES]; returnto_phone = [NSString stringWithFormat:@"returnto_phone = '%@',",returnto_phone]; NSString *returnto_fax = [self valueInParams:param key:@"returnto_fax" translateSingleQuote:YES]; returnto_fax = [NSString stringWithFormat:@"returnto_fax = '%@',",returnto_fax]; NSString *returnto_email = [self valueInParams:param key:@"returnto_email" translateSingleQuote:YES]; returnto_email = [NSString stringWithFormat:@"returnto_email = '%@',",returnto_email]; NSString *order_status = @"status = 1,"; if (submit) { order_status = @"status = -11,"; } // NSString *sync_data = [AESCrypt fastencrypt:[RAUtils dict2string:param]]; NSString *sync_sql = @""; if (submit) { NSString *sales_rep = [iSalesDB jk_queryText:[NSString stringWithFormat:@"select sales_rep from offline_order where so_id = '%@';",so_id]]; [param setValue:sales_rep forKey:@"sales_rep"]; NSString *sync_data = [self translateSingleQuote:[RAUtils dict2string:param]]; sync_sql = [NSString stringWithFormat:@",sync_data = '%@' ",sync_data]; } NSString *orderSql = [NSString stringWithFormat:@"update offline_order set %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ so_id = '%@' %@ where so_id = '%@';",order_status,general_notes,internal_notes,poNumber,must_call,sign_picpath,total_price,paymentsAndCredits,handling_fee_placeholder,lift_gate,lift_gate_placeholder,logist,logistic_note,erpOrderStatus,paymentType,credit_card_address1,credit_card_address2,credit_card_city,credit_card_first_name,credit_card_last_name,credit_card_number,credit_card_security_code,credit_card_state,credit_card_type,credit_card_zipcode,credit_card_expiration_year,credit_card_expiration_month,customer_cid,customer_contact,customer_email,customer_phone,customer_fax,receive_cid,receive_name,receive_ext,receive_contact,receive_phone,receive_email,receive_fax,sender_cid,sender_name,sender_ext,sender_contact,sender_phone,sender_fax,sender_email,shipping_billto_cid,shipping_billto_name,shipping_billto_ext,shipping_billto_contact,shipping_billto_phone,shipping_billto_fax,shipping_billto_email,billing_cid,billing_name,billing_ext,billing_contact,billing_phone,billing_fax,billing_email,returnto_cid,returnto_name,returnto_ext,returnto_contact,returnto_phone,returnto_fax,returnto_email,so_id,sync_sql,so_id]; DebugLog(@"save order contactSql: %@",contactSql); DebugLog(@"save order orderSql: %@",orderSql); // int contact_ret = [iSalesDB execSql:contactSql]; int order_ret = [iSalesDB execSql:orderSql]; int ret = order_ret; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"]; [dic setValue:@"Regular Mode" forKey:@"mode"]; // [dic setValue:@"160409" forKey:@"min_ver"]; [dic setObject:so_id forKey:@"so#"]; return [RAUtils dict2data:dic]; } +(NSData*) offline_saveorder :(NSMutableDictionary *) param { // id foo = nil; // NSMutableArray *a = @[].mutableCopy; // [a addObject:foo]; return [self saveorder:param submit:NO]; } #pragma mark add to cart by name +(NSData*) offline_add2cartbyname :(NSMutableDictionary *) params { NSString *orderCode = [params objectForKey:@"orderCode"]; NSString *product_name = [params objectForKey:@"product_name"]; product_name = [self translateSingleQuote:product_name]; NSArray *product_name_array = [product_name componentsSeparatedByString:@","]; sqlite3 *db = [iSalesDB get_db]; __block NSMutableString *product_id_string = [NSMutableString string]; for (int i = 0; i < product_name_array.count; i++) { NSString *name = [product_name_array objectAtIndex:i]; NSString *sql = [NSString stringWithFormat:@"select product_id from product where name = '%@';",name]; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { int product_id = sqlite3_column_int(stmt, 0); if (i == product_name_array.count - 1) { [product_id_string appendFormat:@"%d",product_id]; } else { [product_id_string appendFormat:@"%d,",product_id]; } }]; } NSDictionary *newParams = @{ @"product_id" : product_id_string, @"orderCode" : orderCode }; [iSalesDB close_db:db]; return [self offline_add2cart:[newParams mutableCopy]]; } #pragma mark reset order +(NSData*) offline_resetorder :(NSMutableDictionary *) params { UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; appDelegate.disable_trigger=true; [iSalesDB execSql:@"delete from offline_order where status=0;"]; appDelegate.disable_trigger=false; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[NSNumber numberWithInteger:2] forKey:@"result"]; return [RAUtils dict2data:dic]; } #pragma mark submit order +(NSData*) offline_submitorder :(NSMutableDictionary *) params; { return [self saveorder:params submit:YES]; } #pragma mark copy order +(NSData*) offline_copyorder :(NSMutableDictionary *) params; { NSMutableDictionary *ret = @{}.mutableCopy; NSString *order_code = [self valueInParams:params key:@"code" translateSingleQuote:YES]; sqlite3 *db = [iSalesDB get_db]; [iSalesDB execSql:@"BEGIN TRANSACTION" db:db]; // 首先查看联系人是否active NSString *customer_sql = [NSString stringWithFormat:@"select is_active from offline_contact where contact_id in (select customer_cid from offline_order where so_id = '%@');",order_code]; __block int customer_is_active = 1; [iSalesDB jk_query:customer_sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { customer_is_active = sqlite3_column_int(stmt, 0); }]; if (!customer_is_active) { [ret setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"]; [iSalesDB execSql:@"END TRANSACTION" db:db]; [iSalesDB close_db:db]; return [RAUtils dict2data:ret]; } // new order // NSString *new_order_code = [NSString stringWithFormat:@"OFFLINE%@",[NSUUID UUID].UUIDString]; NSString *new_order_code = [self get_offline_soid:db]; NSString *user = ((AppDelegate *)[UIApplication sharedApplication].delegate).user; user = [self translateSingleQuote:user]; NSString *insert_order_sql = [NSString stringWithFormat:@"insert into offline_order (so_id,status,submit_as,internal_notes,sales_rep,create_by,total_price,logist,lift_gate,logistic_note,customer_cid,customer_contact,customer_email,customer_phone,customer_fax,receive_cid,receive_name,receive_ext,receive_contact,receive_phone,receive_fax,receive_email,sender_cid,sender_name,sender_ext,sender_contact,sender_phone,sender_fax,sender_email,shipping_billto_cid,shipping_billto_name,shipping_billto_ext,shipping_billto_contact,shipping_billto_phone,shipping_billto_fax,shipping_billto_email,billing_cid,billing_name,billing_ext,billing_contact,billing_phone,billing_fax,billing_email,returnto_cid,returnto_name,returnto_ext,returnto_contact,returnto_phone,returnto_fax,returnto_email,must_call,poNumber,comments,comments_ext) select '%@',1,submit_as,internal_notes,sales_rep,'%@',total_price,logist,lift_gate,logistic_note,customer_cid,customer_contact,customer_email,customer_phone,customer_fax,receive_cid,receive_name,receive_ext,receive_contact,receive_phone,receive_fax,receive_email,sender_cid,sender_name,sender_ext,sender_contact,sender_phone,sender_fax,sender_email,shipping_billto_cid,shipping_billto_name,shipping_billto_ext,shipping_billto_contact,shipping_billto_phone,shipping_billto_fax,shipping_billto_email,billing_cid,billing_name,billing_ext,billing_contact,billing_phone,billing_fax,billing_email,returnto_cid,returnto_name,returnto_ext,returnto_contact,returnto_phone,returnto_fax,returnto_email,must_call,poNumber,comments,comments_ext from offline_order where so_id = '%@';",new_order_code,user,order_code]; // ,paymentsAndCredits,shipping,lift_gate_value,handling_fee_value __block int result = 1; result = [iSalesDB execSql:insert_order_sql db:db]; if (!result) { [ret setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"]; [iSalesDB execSql:@"END TRANSACTION" db:db]; [iSalesDB close_db:db]; return [RAUtils dict2data:ret]; } // 查询product_id 及其对应的 is_active,若is_active = 0,那么就忽略之 // __block NSString *product_id = @""; __weak typeof(self) weakSelf = self; NSString *product_id_sql = [NSString stringWithFormat:@"select product_id,is_active from product WHERE product_id in (select product_id from offline_cart where so_no = '%@');",order_code]; [iSalesDB jk_query:product_id_sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { int is_active = sqlite3_column_int(stmt, 1); if (is_active) { // product_id = [product_id stringByAppendingString:[NSString stringWithFormat:@",%@",[weakSelf textAtColumn:0 statement:stmt]]]; NSString *product_id = [weakSelf textAtColumn:0 statement:stmt]; NSString *insert_cart_sql = [NSString stringWithFormat:@"insert into offline_cart (so_no,orderitem_id,product_id,item_id,item_count,bundle_item,type) select '%@',orderitem_id,product_id,item_id,item_count,bundle_item,type from offline_cart where product_id = %@ and so_no = '%@'",new_order_code,product_id,order_code]; result = result && [iSalesDB execSql:insert_cart_sql db:db]; } }]; // product_id = [product_id substringFromIndex:1]; // // [self offline_add2cart:@{}.mutableCopy]; [iSalesDB execSql:@"END TRANSACTION" db:db]; [iSalesDB close_db:db]; if (result) { [ret setObject:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"]; } else { [ret setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"]; } [ret setObject:new_order_code forKey:@"so_id"]; return [RAUtils dict2data:ret]; } #pragma mark move wish list to cart + (NSData*)offline_movewish2cart:(NSMutableDictionary *)params { NSString *collectId = params[@"collectId"]; NSString *sql = [NSString stringWithFormat:@"select product_id,qty from wishlist where _id in (%@);",collectId]; __block NSString *product_id = @""; __block NSString *qty = @""; [iSalesDB jk_query:sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { int productId = sqlite3_column_int(stmt, 0); int item_qty = sqlite3_column_int(stmt, 1); product_id = [product_id stringByAppendingString:[NSString stringWithFormat:@",%d",productId]]; qty = [qty stringByAppendingString:[NSString stringWithFormat:@",%d",item_qty]]; }]; product_id = [product_id substringFromIndex:1]; qty = [qty substringFromIndex:1]; NSDictionary *newParams = @{ @"product_id" : product_id, @"orderCode" : params[@"orderCode"], @"qty" : qty }; NSData *data = [self offline_add2cart:newParams.mutableCopy]; NSMutableDictionary *retDic = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy]; if ([retDic[@"result"] integerValue] == RESULT_TRUE) { // NSString *deleteSQL = [NSString stringWithFormat:@"delete from wishlist where _id in (%@);",collectId]; // // int ret = [iSalesDB execSql:deleteSQL]; int ret = [[[self offline_deletewishlist:@{@"collectId" : collectId}.mutableCopy] valueForKey:@"result"] integerValue]; retDic[@"result"] = [NSNumber numberWithInteger:ret]; } return [RAUtils dict2data:retDic]; } #pragma mark - portfolio + (NSData *)offline_portfolioList:(NSMutableDictionary *)params { // { // "result": 2, // "min_ver": "160514", // "count": 1, // "can_see_price": true, // "item_0": { // "linenotes": "恢复肌肤就不会就附近", // "check": 1, // "product_id": "3732", // "available_qty": 787, // "description": "108237-SH-B\nCharlotte Fabric Chair Black Legs, Shark", // "item_id": "13405", // "fashion_id": "4858", // "img": "http://192.168.0.112:8080/site//u/NPD/20151211/108237-SH-B_2916_s.jpg", // "tear_sheet_discount": "20.00", // "tear_sheet_price": "3109.00" // }, // "email_content": "", // "total_count": 1, // "mode": "Regular Mode" // } int sort = [[params valueForKey:@"sort"] integerValue]; int offset = [[params valueForKey:@"offset"] integerValue]; int limit = [[params valueForKey:@"limit"] integerValue]; NSString *orderBy = @""; switch (sort) { case 0:{ orderBy = @"modifytime desc"; } break; case 1:{ orderBy = @"modifytime asc"; } break; case 2:{ orderBy = @"name asc"; } break; case 3:{ orderBy = @"name desc"; } break; case 4:{ orderBy = @"description asc"; } break; default: break; } NSString *sql = [NSString stringWithFormat:@"select product_id,name,description,sheet_price,sheet_discount,available_qty,percentage,item_id,fashion_id,img,line_note,percent from offline_portfolio order by %@ limit %d offset %d;",orderBy,limit,offset]; __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [iSalesDB jk_query:sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { [dic setValue:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"]; int product_id = sqlite3_column_int(stmt, 0); NSString *product_id_string = [NSString stringWithFormat:@"%d",product_id]; NSString *name = [self textAtColumn:1 statement:stmt]; NSString *description = [self textAtColumn:2 statement:stmt]; double price = sqlite3_column_double(stmt, 3); double discount = sqlite3_column_double(stmt,4); int qty = sqlite3_column_int(stmt, 5); int percentage = sqlite3_column_int(stmt, 6); int item_id = sqlite3_column_int(stmt, 7); int fashion_id = sqlite3_column_int(stmt, 8); NSString *img_path = [self textAtColumn:9 statement:stmt]; NSString *line_note = [self textAtColumn:10 statement:stmt]; double percent = sqlite3_column_double(stmt, 11); NSMutableDictionary *item = @{ @"linenotes": line_note, @"check": @(1), @"product_id": product_id_string, @"available_qty": @(qty), @"available_percent" : @(percent), @"description": description, @"item_id": [NSString stringWithFormat:@"%d",item_id], @"fashion_id": [NSString stringWithFormat:@"%d",fashion_id], @"img": img_path, @"tear_sheet_discount": [NSString stringWithFormat:@"%f",discount], @"tear_sheet_price": [NSString stringWithFormat:@"%f",price] }.mutableCopy; if (percentage) { [item removeObjectForKey:@"available_qty"]; } else { [item removeObjectForKey:@"available_percent"]; } [dic setObject:item forKey:[NSString stringWithFormat:@"item_%ld",*count]]; [dic setValue:[NSNumber numberWithLong:++(*count)] forKey:@"count"]; } failure:^(NSMutableDictionary *container, NSString *err_msg) { [dic setValue:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"]; [dic setValue:[NSNumber numberWithInteger:0] forKey:@"count"]; }]; AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; [dic setValue:[NSNumber numberWithBool:appDelegate.can_see_price] forKey:@"can_see_price"]; [dic setValue:@"" forKey:@"emial_content"]; [dic setValue:[dic objectForKey:@"count"] forKey:@"total_count"]; [dic setValue:@"Regular Mode" forKey:@"mode"]; return [RAUtils dict2data:dic]; } + (NSData *)offline_direct_save_TearSheet:(NSMutableDictionary *)params { return nil; } + (NSData *)offline_pdfList:(NSMutableDictionary *)params { int offset = [[params valueForKey:@"offset"] integerValue]; int limit = [[params valueForKey:@"limit"] integerValue]; NSString *keyword = [params valueForKey:@"keyWord"]; NSString *where = @""; if (keyword.length) { } NSString *sql = [NSString stringWithFormat:@"select tear_name,tear_note,createtime,create_user,pdf_path,tearsheets_id from offline_pdf %@ order by createtime desc;",where]; __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [iSalesDB jk_query:sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSString *name = [self textAtColumn:0 statement:stmt]; NSString *note = [self textAtColumn:1 statement:stmt]; NSString *time = [self textAtColumn:2 statement:stmt]; NSString *user = [self textAtColumn:3 statement:stmt]; NSString *patch = [self textAtColumn:4 statement:stmt]; time = [self changeDateTimeFormate:time]; time = [time stringByAppendingString:@" PST"]; int sheet_id = sqlite3_column_int(stmt, 0); NSMutableDictionary *item = @{ @"tearsheetsId": @(sheet_id), @"pdf_path": patch, @"create_time": time, @"create_user": user, @"tear_note": note, @"tear_name": name }.mutableCopy; [dic setObject:item forKey:[NSString stringWithFormat:@"item_%ld",*count]]; [dic setValue:[NSNumber numberWithLong:++(*count)] forKey:@"count"]; } failure:^(NSMutableDictionary *container, NSString *err_msg) { [dic setValue:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"]; [dic setValue:[NSNumber numberWithInteger:0] forKey:@"count"]; }]; [dic setValue:@"Regular Mode" forKey:@"mode"]; return [RAUtils dict2data:dic]; } @end