// // 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 "AppDelegate.h" #import "pdfCreator.h" #import "RASingleton.h" #import "QRCodeGenerator.h" #import "config.h" #import "ImageUtils.h" #import "RAConvertor.h" #import "ActiveViewController.h" #import "RANetwork.h" #import "RADataProvider.h" @interface OLDataProvider () @end @implementation OLDataProvider +(NSString*) get_portfolio_price:(NSString*) contact_id item_id:(int) item_id price:(int)price_id db:(sqlite3*)db { NSString * sqlQuery = [NSString stringWithFormat:@"select decrypt(price) from model_price where item_id=%d and price_name in (select name from price where type=%d) ",item_id,price_id]; NSString* ret=@"No Price."; 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 *price = (char*)sqlite3_column_text(statement, 0); if(price==nil) price=""; NSString *nsprice = [[NSString alloc]initWithUTF8String:price]; double dp= [nsprice doubleValue]; ret=[NSString stringWithFormat:@"%.2f",dp]; } sqlite3_finalize(statement); } return ret; // // [iSalesDB close_db:db]; // // return nil; //// if(dprice==DBL_MAX) //// ret= nil; //// else //// ret= [NSNumber numberWithDouble:dprice]; //// return ret; } + (NSString *)portfolio_img:(NSString *)item_id db:(sqlite3 *)db { NSString* ret= nil; NSString *sqlQuery = nil; // sqlQuery = [NSString stringWithFormat:@"select i.url from product m LEFT join model_image i on m.product_id = i.product_id where m.item_id=%@ order by i.default_img desc, i._id asc limit 1;",item_id];// select i.url from model m sqlQuery = [NSString stringWithFormat:@"select i.url from model_image as i where item_id = %@ and i.type<=1 order by i.default_img desc, i.type desc limit 1;",item_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 *imgurl = (char*)sqlite3_column_text(statement, 0); if(imgurl==nil) imgurl=""; NSString *nsimgurl = [[NSString alloc]initWithUTF8String:imgurl]; ret=nsimgurl; } sqlite3_finalize(statement); } else { ret=@""; } // [iSalesDB close_db:db]; // DebugLog(@"data string: %@",ret ); return ret; } +(NSMutableDictionary*) prepare_portfolio_data:(NSMutableDictionary*) params { // assert(params[@"contact_id"]!=nil); assert(params[@"user"]!=nil); NSMutableDictionary* values=params[@"replaceValue"]; // 离线下发的参数 //生成portfolio pdf需要的数据 NSMutableDictionary* data = [[NSMutableDictionary alloc]init]; data[@"npd_url"]=COMPANY_WEB; NSDateFormatter * formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"MMMM yyyy"]; NSString* date = [formatter stringFromDate:[NSDate date]]; data[@"create_month"]=date; data[@"company_name"]=COMPANY_FULL_NAME; data[@"catalog_name"]=params[@"catalog_name"]; data[@"PAGE_INDEX"]=@"Page $.{CURRENT_PAGE}.$ of $.{TOTAL_PAGE}.$"; data[@"TOTAL_PAGE"]=0; data[@"CURRENT_PAGE"]=0; NSMutableDictionary* grid = [[NSMutableDictionary alloc]init]; BOOL show_group_by = [[params objectForKey:@"show_group_by"] boolValue]; bool show_stockout=[params[@"show_stockout"] boolValue]; NSString *sql = nil; // v1.90 more color NSString *group_by = @""; if(values==nil) { if (show_group_by) { group_by = @"group by b.product_group "; } sql=[NSString stringWithFormat:@"select a.product_id,a.name,a.description,a.price,a.sheet_discount,a.qty,a.is_percentage,a.item_id,a.fashion_id,a.line_note,a.percent,a._id,b.availability,b.color,b.legcolor,b.demension,b.seat_height,b.material,b.box_dim,b.volume,b.weight,stockuom,b.load_ability,b.fabric_content,b.assembling,b.made_in,b.more_color from (select _id, product_id,name,description,ifnull(sheet_price,'null') as price,sheet_discount,ifnull(available_qty,'null') as qty,percentage as is_percentage,item_id,fashion_id,line_note,percent from offline_portfolio where product_id in(%@)) a left join (select * from product where product_id in(%@)) b on a.product_id=b.product_id %@ order by a.name",params[@"product_ids"],params[@"product_ids"],group_by]; } else { if (show_group_by) { group_by = @"group by product_group "; } sql=[NSString stringWithFormat:@"select product_id,name,description,null,null,null,null,item_id,null,null,null,-1,availability,color,legcolor,demension,seat_height,material,box_dim,volume,weight,stockuom,load_ability,fabric_content,assembling,made_in,more_color from product where product_id in(%@) %@ order by name",params[@"product_ids"],group_by]; } __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; sqlite3 *db = [iSalesDB get_db]; // NSDictionary *resultDic = [iSalesDB jk_query:sql db:db close:NO 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); NSString *s_price = [self textAtColumn:3 statement:stmt]; double discount = sqlite3_column_double(stmt,4); int qty = sqlite3_column_int(stmt, 5); NSString *s_qty = [self textAtColumn:5 statement:stmt]; int is_percentage = sqlite3_column_int(stmt, 6); NSString *s_is_percentage = [self textAtColumn:6 statement:stmt]; int item_id = sqlite3_column_int(stmt, 7); // int fashion_id = sqlite3_column_int(stmt, 8); NSString *line_note = [self textAtColumn:9 statement:stmt]; NSString *s_percent = [self textAtColumn:10 statement:stmt]; double percent = sqlite3_column_double(stmt, 10); // int portfolio_id = sqlite3_column_int(stmt, 11); NSString *s_availability = [self textAtColumn:12 statement:stmt]; int availability = sqlite3_column_int(stmt, 12); NSString *color = [self textAtColumn:13 statement:stmt]; NSString *legcolor = [self textAtColumn:14 statement:stmt]; NSString *demension = [self textAtColumn:15 statement:stmt]; NSString *seat_height = [self textAtColumn:16 statement:stmt]; NSString *material = [self textAtColumn:17 statement:stmt]; NSString *box_dim = [self textAtColumn:18 statement:stmt]; NSString *s_volume = [self textAtColumn:19 statement:stmt]; double volume = sqlite3_column_double(stmt, 19); NSString *s_weight = [self textAtColumn:20 statement:stmt]; double weight = sqlite3_column_double(stmt, 20); NSString *s_model_set = [self textAtColumn:21 statement:stmt]; int model_set = sqlite3_column_int(stmt, 21); NSString *s_load_ability = [self textAtColumn:22 statement:stmt]; double load_ability = sqlite3_column_double(stmt, 22); NSString *fabric_content = [self textAtColumn:23 statement:stmt]; NSString *assembling = [self textAtColumn:24 statement:stmt]; NSString *made_in = [self textAtColumn:25 statement:stmt]; NSInteger more_color_int = sqlite3_column_int(stmt, 26); NSString* gprice = [self get_portfolio_price :params[@"contact_id"] item_id:item_id price:[params[@"regular_price"] intValue] db:db]; float bprice=0; NSDictionary* bundle=[self model_bundle:item_id db:db compute_part:false contactID:params[@"contact_id"] user:params[@"user"]]; for(int b=0;b< [bundle[@"count"] intValue];b++) { NSDictionary* bi=bundle[[NSString stringWithFormat:@"item_%d",b]]; bprice+= [bi[@"modulus"] intValue] * [bi[@"unit_price"] floatValue]; } if(gprice!=nil) gprice = [NSString stringWithFormat:@"%.2f",[gprice floatValue]+bprice]; if(s_percent.length==0||is_percentage==0) { percent=100.0; if([s_qty isEqualToString:@"null"]) qty=availability; } else { qty=availability; } qty=qty*percent/100+0.5; for(int i=0;i<[values[@"count"] intValue];i++) { NSMutableDictionary * valueitem=values[[NSString stringWithFormat:@"item_%d",i]];; if([valueitem[@"product_id"] intValue]==product_id) { line_note=valueitem[@"line_note"]; qty=[valueitem[@"available_qty"] intValue]; if([[valueitem allKeys] containsObject:@"available_qty"]) s_qty=[NSString stringWithFormat:@"%d",qty]; else s_qty=@"null"; if(valueitem[@"regular_price"]!=nil) gprice=[NSString stringWithFormat:@"%.2f",[valueitem[@"regular_price"] floatValue]]; s_price=valueitem[@"special_price"]; price=[valueitem[@"special_price"] floatValue]; discount=0; // v1.90 more_color_int = [[valueitem objectForKey:@"more_color"] integerValue]; } } if(is_percentage==0&&qty==0&&!show_stockout) { return; } if((is_percentage!=0||s_is_percentage.length!=0)&&qty==0&&!show_stockout) { return; } NSString* set_price=@""; if([params[@"entered_price"] boolValue]) { if (s_price==nil ) { // set_price=[NSString stringWithFormat:@"Special: $ %@",gprice]; } else { if(price*(1-discount/100.0)!=gprice.floatValue) set_price=[NSString stringWithFormat:@"Special: $ %.2f",price*(1-discount/100.0)]; } } NSString* get_price=@""; { // NSNumber* price = [self get_model_default_price:appDelegate.contact_id product_id:nil item_id:@(item_id) db:db]; // DebugLog(@"price time interval"); // [self printTimeIntervalBetween:price_date and:[NSDate date]]; if(gprice==nil) get_price=@"Price:No Price."; else get_price=[NSString stringWithFormat:@"Price: $ %@",gprice]; } // NSString *qty_null = [self textAtColumn:5 statement:stmt]; // if ([qty_null isEqualToString:@"null"]) { // qty=availability; // } // // NSString *qty_percent_null = [self textAtColumn:6 statement:stmt]; // if ([qty_percent_null isEqualToString:@"null"]) { // percentage=1; // } NSString * str_availability=[NSString stringWithFormat:@"Availability: %d",(int)qty]; NSString * str_color=[NSString stringWithFormat:@"Color: %@",color]; NSString * str_model_set=[NSString stringWithFormat:@"Set: Sold in QTY of %d",model_set]; NSString * str_legcolor=[NSString stringWithFormat:@"Leg Color: %@",legcolor]; NSString * str_demension=[NSString stringWithFormat:@"Dimension: %@",demension]; NSString * str_seat_height=[NSString stringWithFormat:@"Seat Height: %@",seat_height]; NSString * str_meterial=[NSString stringWithFormat:@"Meterial: %@",material]; NSString * str_box_dim=[NSString stringWithFormat:@"Box Dimension: %@",box_dim]; NSString * str_volume=[NSString stringWithFormat:@"Volume: %.2f",volume]; NSString * str_weight=[NSString stringWithFormat:@"Weight: %.2f",weight]; NSString * str_load_ability=[NSString stringWithFormat:@"Load Ability: %.2f",load_ability]; NSString * str_fabric_content=[NSString stringWithFormat:@"Fabric Content: %@",fabric_content]; NSString * str_assembling=[NSString stringWithFormat:@"Assembling: %@",assembling]; NSString * str_made_in=[NSString stringWithFormat:@"Made In: %@",made_in]; NSString * str_line_note=[NSString stringWithFormat:@"Line Note: %@",line_note]; if([params[@"availability"] boolValue]==false) str_availability=@""; else { if ([s_qty isEqualToString:@"null"] && [s_availability isEqualToString:@"0"]) str_availability=@"Availability: In Production"; } if([params[@"color"] boolValue]==false || color.length==0 ) str_color=@""; if([params[@"set"] boolValue]==false || s_model_set.length==0 ) str_model_set=@""; if([params[@"leg_color"] boolValue]==false || legcolor.length==0 ) str_legcolor=@""; if([params[@"dimension"] boolValue]==false || demension.length==0 ) str_demension=@""; if([params[@"seat_height"] boolValue]==false || seat_height.length==0 ) str_seat_height=@""; if([params[@"material"] boolValue]==false || material.length==0 ) str_meterial=@""; if([params[@"box_dimension"] boolValue]==false || box_dim.length==0 ) str_box_dim=@""; if([params[@"volume"] boolValue]==false || s_volume.length==0 ) str_volume=@""; if([params[@"weight"] boolValue]==false || s_weight.length==0 ) str_weight=@""; if([params[@"load_ability"] boolValue]==false || s_load_ability.length==0 ) str_load_ability=@""; if([params[@"fabric_content"] boolValue]==false || fabric_content.length==0 ) str_fabric_content=@""; if([params[@"assembling"] boolValue]==false || assembling.length==0 ) str_assembling=@""; if([params[@"made"] boolValue]==false || made_in.length==0 ) str_made_in=@""; if([params[@"show_line_note"] boolValue]==false || line_note.length==0 ) str_line_note=@""; NSMutableArray* arr_detail=[[NSMutableArray alloc]init]; [arr_detail addObject:str_availability]; [arr_detail addObject:str_color]; [arr_detail addObject:str_model_set]; [arr_detail addObject:str_legcolor]; [arr_detail addObject:str_demension]; [arr_detail addObject:str_seat_height]; [arr_detail addObject:str_meterial]; [arr_detail addObject:str_box_dim]; [arr_detail addObject:str_volume]; [arr_detail addObject:str_weight]; [arr_detail addObject:str_load_ability]; [arr_detail addObject:str_fabric_content]; [arr_detail addObject:str_assembling]; [arr_detail addObject:str_made_in]; [arr_detail addObject:str_line_note]; // NSString* detail =[NSString stringWithFormat:@"%@",[RAUtils arr2string:arr_detail separator:@" " trim:true]]; NSString* detail =[RAConvertor arr2string:arr_detail separator:@" " trim:true]; //model image; NSString* img_path = [self portfolio_img:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] db:db]; // qr image NSString* qrpath=nil; if([params[@"show_barcode"] boolValue]) { NSString* temp = NSTemporaryDirectory(); NSString* filename =[NSString stringWithFormat:@"%@.png", [[NSUUID UUID] UUIDString]]; qrpath=[temp stringByAppendingPathComponent:filename]; UIImage* qrimg=[QRCodeGenerator qrImageForString:name imageSize:240]; [UIImagePNGRepresentation(qrimg)writeToFile: qrpath atomically:YES]; } NSString *more_color_path = [[NSBundle mainBundle] pathForResource:@"more_color_64" ofType:@"png"]; NSMutableDictionary *item = [[NSMutableDictionary alloc] init]; item[@"img"]=img_path; item[@"img_qr"]=qrpath; item[@"special_price"]=set_price; item[@"price"]=get_price; item[@"name"]=name; item[@"description"]=description; item[@"detail"]=detail; item[@"img"]=img_path; if (show_group_by && more_color_int != 0) { item[@"more_color"] = more_color_path; } // @{ // //@"linenotes": line_note, //// @"product_id": product_id_string, //// @"available_qty": @(qty), //// @"available_percent" : @(percent), //// @"description": [NSString stringWithFormat:@"%@\n%@",name,description], //// @"item_id": [NSString stringWithFormat:@"%d",item_id], //// @"fashion_id": [NSString stringWithFormat:@"%d",product_id], // @"": , // @"": , // @"": , // @"": , // @"": , // @"": , // @"": // }.mutableCopy; // if (percentage) { // [item removeObjectForKey:@"available_qty"]; // } else { // [item removeObjectForKey:@"available_percent"]; // } // // NSString *qty_null = [self textAtColumn:5 statement:stmt]; // if ([qty_null isEqualToString:@"null"]) { // [item removeObjectForKey:@"available_qty"]; // } [dic setObject:item forKey:[NSString stringWithFormat:@"item_%ld",*count]]; [dic setValue:[NSNumber numberWithLong:++(*count)] forKey:@"count"]; }]; [iSalesDB close_db:db]; // [dic setValue:[NSNumber numberWithBool:appDelegate.can_see_price] forKey:@"can_see_price"]; // [dic setValue:@"" forKey:@"email_content"]; // [dic setValue:[dic objectForKey:@"count"] forKey:@"total_count"]; // [dic setValue:@"Regular Mode" forKey:@"mode"]; // // NSMutableDictionary* cell = [[NSMutableDictionary alloc]init]; // cell[@"count"]=[NSNumber numberWithInt:10]; grid[@"cell0"]=dic; data[@"grid0"]=grid; return data; } +(NSMutableDictionary*) get_pdftemplate:(NSString*) template { NSString *default_path = [[NSBundle mainBundle] pathForResource:template ofType:nil]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cache_folder=[paths objectAtIndex:0]; NSString *template_path = [cache_folder stringByAppendingPathComponent:[NSString stringWithFormat:@"offline_data/%@",template]]; BOOL bdir=NO; NSFileManager* fileManager = [NSFileManager defaultManager]; if(PDF_DEBUG) { NSData *data = [NSData dataWithContentsOfFile:default_path]; NSMutableDictionary *ret = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy]; return ret; } if(! [fileManager fileExistsAtPath:template_path isDirectory:&bdir] ) { NSError * error=nil; if(![fileManager copyItemAtPath:default_path toPath:template_path error:&error]) { return nil; } } NSData *data = [NSData dataWithContentsOfFile:template_path]; NSMutableDictionary *ret = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy]; return ret; } +(NSMutableDictionary*) query_login:(NSString*) user db:(sqlite3*) db { NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; 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,can_update_contact_info,first_name from offline_login where lower(username)='%@' ",user.lowercaseString ]; 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]; // int can_update_contact_info = sqlite3_column_int(statement, 13); char *first_name = (char*)sqlite3_column_text(statement, 14); if(first_name==nil) first_name=""; NSString *nsfirst_name= [[NSString alloc]initWithUTF8String:first_name]; // [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:[NSNumber numberWithBool:can_update_contact_info] forKey:@"can_update_contact_info"]; // // [header setValue:nsusername forKey:@"username"]; // // NSError* error=nil; // // NSString* statusFilter =[NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"offline_status_filter_cadedate" ofType:@"json"] encoding:NSUTF8StringEncoding error:&error]; // [header setValue:statusFilter forKey:@"statusFilter"]; // // // // int wish_count = [iSalesDB get_recordcount:db table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"]; // [header setObject:[NSString stringWithFormat:@"%d",wish_count] forKey:@"wish_count"]; // // // int portfolio_count = [iSalesDB get_recordcount:db table:@"portfoliolist" where:@"1=1"]; // // [header setObject:[NSString stringWithFormat:@"%d",wish_count] forKey:@"portfolio_count"]; // int portfolio_count = [iSalesDB get_recordcount:db table:@"offline_portfolio" where:@"is_delete is NULL or is_delete != 1"]; // [header setObject:[NSString stringWithFormat:@"%d",portfolio_count] forKey:@"portfolio_count"]; // // [ret setObject:header forKey:@"header"]; [ret setValue:nsfirst_name forKey:@"first_name"]; } sqlite3_finalize(statement); } DebugLog(@"data string: %@",[RAConvertor dict2string:ret] ); return ret; } +(NSMutableDictionary*) prepare_salesorder_data:(NSString*) order_code user:(NSString*) user type:(int) type { assert(user!=nil); // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; NSMutableDictionary* data = [[NSMutableDictionary alloc]init]; data[@"npd_url"]=COMPANY_WEB; NSDateFormatter * formatter = [[NSDateFormatter alloc]init]; [formatter setDateFormat:@"MM/dd/yyyy HH:mm:ss"]; NSString* date = [formatter stringFromDate:[NSDate date]]; data[@"print_date"]=date; data[@"company_name"]=COMPANY_FULL_NAME; data[@"PAGE_INDEX"]=@"Page $.{CURRENT_PAGE}.$ of $.{TOTAL_PAGE}.$"; data[@"TOTAL_PAGE"]=0; data[@"CURRENT_PAGE"]=0; // [formatter setDateFormat:@"MM/dd/yyyy"]; // date = [formatter stringFromDate:[NSDate date]]; // data[@"creat_date"]=date; NSString* temp = NSTemporaryDirectory(); NSString* filename =[NSString stringWithFormat:@"%@.png", [[NSUUID UUID] UUIDString]]; NSString* qrpath=[temp stringByAppendingPathComponent:filename]; UIImage* qrimg=[ImageUtils generateBarCode:order_code width:480 height:44];//[QRCodeGenerator qrImageForString:order_code imageSize:240]; // bool bwrite= [UIImagePNGRepresentation(qrimg)writeToFile: qrpath atomically:YES]; data[@"img_barcode"]=qrpath; data[@"so_id"]=order_code; data[@"company"]=COMPANY_FULL_NAME; // 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 so_id=%@) o left join offline_contact c on o.customer_cid=c.contact_id",order_code]; NSString *sql = [NSString stringWithFormat:@"select erpOrderStatus,sender_name,sender_ext,sender_phone,sender_fax,sender_email,warehouse_name,billing_name,billing_ext,billing_phone,billing_fax,billing_email,receive_name,receive_ext,receive_phone,receive_fax,receive_email,poNumber,sales_rep,carrier,vendor_no,terms,sales_terms,port_destination,etd,sign_picpath,status,create_time,shipping,lift_gate_value,handling_fee_value,billing_contact,receive_contact,general_notes,customer_cid from offline_order where so_id='%@'",order_code]; sqlite3 *db = [iSalesDB get_db]; data[@"print_by"]= [self query_login:user db:db][@"first_name"]; sqlite3_stmt * statement; NSMutableDictionary* datasource = [[NSMutableDictionary alloc]init]; NSMutableDictionary* row0 = [[NSMutableDictionary alloc]init]; row0[@"count"]=[NSNumber numberWithInt:1]; datasource[@"row0"]=row0; NSString* print_status=@""; NSString* order_type=@"Offline Quote"; if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { int erpOrderStatus = sqlite3_column_int(statement, 0); int status = sqlite3_column_int(statement, 26); if(status==2) { switch (erpOrderStatus) { case 10: // order_type=@"Quoted Order"; print_status=@"Quote"; break; case 11: print_status=@"Booked"; break; case 12: print_status=@"Picked"; break; case 13: print_status=@"Shipped"; break; case 14: print_status=@"Closed"; break; case 15: print_status=@"Canceled"; break; case 16: print_status=@"All"; break; case 18: print_status=@"Processing"; break; default: break; } } else{ switch (status) { case 0: { print_status=@"Quote"; break; } case 1: { print_status=@"Saved"; break; } case 3: { //canceled print_status=@"Canceled"; break; } default: break; } } NSString* sender_name = [self textAtColumn:1 statement:statement]; NSString* sender_ext = [self textAtColumn:2 statement:statement]; NSString* sender_phone = [self textAtColumn:3 statement:statement]; NSString* sender_fax = [self textAtColumn:4 statement:statement]; NSString* sender_email = [self textAtColumn:5 statement:statement]; NSString* warehouse_name = [self textAtColumn:6 statement:statement]; NSString* billing_name = [self textAtColumn:7 statement:statement]; NSString* billing_ext = [self textAtColumn:8 statement:statement]; NSString* billing_phone = [self textAtColumn:9 statement:statement]; if(billing_phone.length>0) billing_phone= [@"TEL: " stringByAppendingString:billing_phone]; NSString* billing_fax = [self textAtColumn:10 statement:statement]; if(billing_fax.length>0) billing_fax= [@"FAX: " stringByAppendingString:billing_fax]; NSMutableArray* billto_arr0 = [[NSMutableArray alloc]init]; [billto_arr0 addObject:billing_phone]; [billto_arr0 addObject:billing_fax]; NSString* billing_pf=[RAConvertor arr2string:billto_arr0 separator:@" " trim:true]; NSString* billing_email = [self textAtColumn:11 statement:statement]; if(billing_email.length>0) billing_email= [@"EMAIL: " stringByAppendingString:billing_email]; NSString* billing_contact = [self textAtColumn:31 statement:statement]; if(billing_contact.length>0) billing_contact= [@"ATTN: " stringByAppendingString:billing_contact]; NSString* receive_name = [self textAtColumn:12 statement:statement]; NSString* receive_ext = [self textAtColumn:13 statement:statement]; NSString* receive_phone = [self textAtColumn:14 statement:statement]; if(receive_phone.length>0) receive_phone= [@"TEL: " stringByAppendingString:receive_phone]; NSString* receive_fax = [self textAtColumn:15 statement:statement]; if(receive_fax.length>0) receive_fax= [@"FAX: " stringByAppendingString:receive_fax]; NSMutableArray* receive_arr0 = [[NSMutableArray alloc]init]; [receive_arr0 addObject:receive_phone]; [receive_arr0 addObject:receive_fax]; NSString* receive_email = [self textAtColumn:16 statement:statement]; NSString* receive_pf=[RAConvertor arr2string:billto_arr0 separator:@" " trim:true]; if(receive_email.length>0) receive_email= [@"EMAIL: " stringByAppendingString:receive_email]; NSString* receive_contact = [self textAtColumn:32 statement:statement]; if(receive_contact.length>0) receive_contact= [@"ATTN: " stringByAppendingString:receive_contact]; NSString* poNumber = [self textAtColumn:17 statement:statement]; NSString* sales_rep = [self textAtColumn:18 statement:statement]; NSString* carrier = [self textAtColumn:19 statement:statement]; NSString* vendor_no = [self textAtColumn:20 statement:statement]; NSString* terms = [self textAtColumn:21 statement:statement]; NSString* sales_terms = [self textAtColumn:22 statement:statement]; NSString* port_destination = [self textAtColumn:23 statement:statement]; NSString* etd = [self textAtColumn:24 statement:statement]; NSString* sign_picpath = [self textAtColumn:25 statement:statement]; if(sign_picpath.length==0) sign_picpath=nil; NSString* create_date = [self textAtColumn:27 statement:statement]; create_date=[self changeDateTime:create_date Formate:@"yyyy-MM-dd HH:mm:ss" withFormate:@"MM/dd/yyyy"]; NSString* general_notes=[self textAtColumn:33 statement:statement]; NSString *customerID = [self textAtColumn:34 statement:statement]; if (customerID.length == 0) { customerID = nil; } // itemjson[@"ln#"]=[NSString stringWithFormat:@"%d.%d",count+1,1]; // fee_row0[@"item_0"]=@{@"name":@"Payments/Credits:" ,@"value": [NSString stringWithFormat:@"%.2f",credits]}; if(general_notes.length>0) { NSMutableDictionary* row2 = [[NSMutableDictionary alloc]init]; row2[@"item_0"]=@{@"g_notes":general_notes }; row2[@"count"]=[NSNumber numberWithInt:1]; datasource[@"row2"]=row2; } NSMutableArray* billto_arr = [[NSMutableArray alloc]init]; [billto_arr addObject:billing_ext]; [billto_arr addObject:billing_pf]; [billto_arr addObject:billing_contact]; [billto_arr addObject:billing_email]; NSString* billto=[RAConvertor arr2string:billto_arr separator:@"\r\n" trim:true]; NSMutableArray* receive_arr = [[NSMutableArray alloc]init]; [receive_arr addObject:receive_ext]; [receive_arr addObject:receive_pf]; [receive_arr addObject:receive_contact]; [receive_arr addObject:receive_email]; NSString* receive=[RAConvertor arr2string:receive_arr separator:@"\r\n" trim:true]; float shipping = sqlite3_column_double(statement, 28); float lift_gate_value = sqlite3_column_double(statement, 29); float handling_fee_value = sqlite3_column_double(statement, 30); data[@"company"]=sender_name; data[@"shipfrom_addr"]=sender_ext; data[@"shipfrom_phone"]=sender_phone; data[@"shipfrom_fax"]=sender_fax; data[@"shipfrom_email"]=sender_email; data[@"warehouse_name"]=warehouse_name; data[@"bill_to_name"]=billing_name; data[@"bill_to_ext"]=billto; data[@"ship_to_name"]=receive_name; data[@"ship_to_ext"]=receive; data[@"po_no"]=poNumber; data[@"rep"]=sales_rep; data[@"e_schdule"]=etd; data[@"sales_terms"]=sales_terms; data[@"port_destination"]=port_destination; data[@"terms"]=terms; data[@"truck_carrier"]=carrier; data[@"vendor_no"]=vendor_no; data[@"customer_sign"]=sign_picpath; data[@"print_status"]=print_status; data[@"create_date"]=create_date; NSString *sql_cart=[ 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,modify_time from offline_cart where so_no='%@') c left join product m on c.product_id=m.product_id ",order_code];; sqlite3_stmt * statement_cart; // NSDate *date1 = [NSDate date]; int count=0; // int cart_count=0; float credits=0; int dbresult=sqlite3_prepare_v2(db, [sql_cart UTF8String], -1, &statement_cart, nil); if ( dbresult== SQLITE_OK) { NSMutableDictionary* row1 = [[NSMutableDictionary alloc]init]; int row1count=0; while (sqlite3_step(statement_cart) == SQLITE_ROW) { // NSDate *row_date = [NSDate date]; NSMutableDictionary* itemjson = [[NSMutableDictionary alloc] init]; // int product_id = sqlite3_column_int(statement_cart, 0); char *str_price = (char*)sqlite3_column_text(statement_cart, 1); int item_id = sqlite3_column_int(statement_cart, 7); double discount = sqlite3_column_double(statement_cart, 2); NSString* Price=nil; if(str_price==nil) { // NSNumber* price= [self get_model_default_price:appDelegate.contact_id product_id:product_id db:db]; // NSDate *price_date = [NSDate date]; NSNumber* price = [self get_model_default_price:customerID user:user product_id:nil item_id:@(item_id) db:db]; // DebugLog(@"price time interval"); // [self printTimeIntervalBetween:price_date and:[NSDate date]]; if(price==nil) Price=@"No Price."; else Price=[NSString stringWithFormat:@"%.2f",price.floatValue]; } else { Price=[NSString stringWithFormat:@"%.2f",[[[NSString alloc]initWithUTF8String:str_price] floatValue]]; } float dunitprice=0; int item_count = sqlite3_column_int(statement_cart, 3); NSString* Amount=@""; if(![Price isEqualToString:@"No Price."]) { dunitprice=[Price floatValue]; dunitprice=dunitprice* (1-discount/100.0); Price=[NSString stringWithFormat:@"%.2f",dunitprice]; credits+=dunitprice*item_count; Amount=[NSString stringWithFormat:@"%.2f",dunitprice*item_count]; } else { Price=@""; } // char *line_note = (char*)sqlite3_column_text(statement_cart, 4); // NSString *nsline_note=nil; // if(line_note!=nil) // nsline_note= [[NSString alloc]initWithUTF8String:line_note]; char *name = (char*)sqlite3_column_text(statement_cart, 5); NSString *nsname=nil; if(name!=nil) nsname= [[NSString alloc]initWithUTF8String:name]; char *description = (char*)sqlite3_column_text(statement_cart, 6); NSString *nsdescription=nil; if(description!=nil) nsdescription= [[NSString alloc]initWithUTF8String:description]; // int stockUom = sqlite3_column_int(statement_cart, 8); // int _id = sqlite3_column_int(statement_cart, 9); // NSDate *subtotal_date = [NSDate date]; // NSDictionary* bsubtotaljson=[self model_subtotal:item_id count:item_count db:db compute_part:true]; // DebugLog(@"subtotal_date time interval"); // [self printTimeIntervalBetween:subtotal_date and:[NSDate date]]; // double cuft=[bsubtotaljson[@"cuft"] doubleValue]; // double weight=[bsubtotaljson[@"weight"] doubleValue]; // int carton=[bsubtotaljson[@"carton"] intValue]; // cart_count+=[bsubtotaljson[@"items"] allKeys].count; // itemjson[@"img_url"]= [self model_category_img:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] model_name:nil db:db]; // NSDate *img_date = [NSDate date]; itemjson[@"img_url"] = [self item_image:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] db:db]; // DebugLog(@"img_date time interval"); // [self printTimeIntervalBetween:img_date and:[NSDate date]]; itemjson[@"model"]=nsname; // itemjson[@"cuft"]=[NSNumber numberWithDouble:cuft]; // itemjson[@"weight"]=[NSNumber numberWithDouble:weight]; // itemjson[@"carton"]=[NSNumber numberWithInt:carton]; // itemjson[@"cart_item_id"]=[NSNumber numberWithInt:_id].stringValue; // itemjson[@"check"]=@"true"; // itemjson[@"product_id"]=[NSNumber numberWithInt:product_id].stringValue; itemjson[@"count"]=[NSString stringWithFormat:@"%d",item_count]; itemjson[@"unit_price"]=Price; itemjson[@"amount"]=Amount; // itemjson[@"discount"]=[NSNumber numberWithInt:discount]; itemjson[@"description"]=[NSString stringWithFormat:@"%@",nsdescription ]; // itemjson[@"stockUom"]=[NSNumber numberWithInt:stockUom]; // itemjson[@"note"]=nsline_note; // NSDate *date2 = [NSDate date]; // itemjson[@"combine"]=[self model_bundle:item_id db:db compute_part:false]; // DebugLog(@"model_bundle time interval"); // [self printTimeIntervalBetween:date2 and:[NSDate date]]; itemjson[@"ln#"]=[NSString stringWithFormat:@"%d.%d",count+1,1]; row1[[NSString stringWithFormat:@"item_%d", row1count] ]=itemjson; row1count++; NSDictionary* combine =[self model_bundle:item_id db:db compute_part:false contactID:customerID user:user]; for(int c=0;c<[combine[@"count"] intValue];c++) { NSMutableDictionary* combine_item=[combine[[NSString stringWithFormat:@"item_%d",c]] mutableCopy]; combine_item[@"count"]=[NSString stringWithFormat:@"%d",[combine_item[@"modulus"] intValue]*item_count]; // combine_item[@"count"]=[NSNumber numberWithInt:[combine_item[@"modulus"] intValue]*item_count]; double combine_amount=[combine_item[@"modulus"] intValue]*item_count* [combine_item[@"unit_price"] floatValue]; credits+=combine_amount; combine_item[@"amount"]=[NSString stringWithFormat:@"%.2f",combine_amount]; combine_item[@"ln#"]=[NSString stringWithFormat:@"%d.%d",count+1,c+2]; row1[[NSString stringWithFormat:@"item_%d", row1count] ]=combine_item; row1count++; } count++; // DebugLog(@"row time interval"); // [self printTimeIntervalBetween:row_date and:[NSDate date]]; } row1[@"count"]=[NSNumber numberWithInt:row1count]; datasource[@"row1"]=row1; data[@"table_model"]=datasource; sqlite3_finalize(statement_cart); } NSMutableDictionary* fee = [[NSMutableDictionary alloc]init]; NSMutableDictionary* fee_row0 = [[NSMutableDictionary alloc]init]; // itemjson[@"ln#"]=[NSString stringWithFormat:@"%d.%d",count+1,1]; // fee_row0[@"item_0"]=@{@"name":@"Payments/Credits:" ,@"value": [NSString stringWithFormat:@"%.2f",credits]}; // if(credits>0) fee_row0[@"item_0"]=@{@"name":@"Payments/Credits:" ,@"value": [NSString stringWithFormat:@"%.2f",credits]}; // else // fee_row0[@"item_0"]=@{@"name":@"Payments/Credits:" ,@"value": @""}; if(shipping>0) fee_row0[@"item_1"]=@{@"name":@"Shipping:" ,@"value": [NSString stringWithFormat:@"%.2f",shipping]}; else fee_row0[@"item_1"]=@{@"name":@"Shipping:" ,@"value": @""}; if(lift_gate_value>0) fee_row0[@"item_2"]=@{@"name":@"Lift Gate Fee:" ,@"value": [NSString stringWithFormat:@"%.2f",lift_gate_value]}; else fee_row0[@"item_2"]=@{@"name":@"Lift Gate Fee:" ,@"value": @""}; if(handling_fee_value>0) fee_row0[@"item_3"]=@{@"name":@"Handling Fee:" ,@"value": [NSString stringWithFormat:@"%.2f",handling_fee_value]}; else fee_row0[@"item_3"]=@{@"name":@"Handling Fee:" ,@"value": @""}; float total = credits+shipping+lift_gate_value+handling_fee_value; if(total>0) fee_row0[@"item_4"]=@{@"name":@"Total:" ,@"value": [NSString stringWithFormat:@"%.2f",total]}; else fee_row0[@"item_4"]=@{@"name":@"Total:" ,@"value": @""}; fee_row0[@"count"]=[NSNumber numberWithInt:5]; fee[@"row0"]=fee_row0; data[@"table_fee"]=fee; // 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"]; // // // // 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]; // // // // 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]; // // // // 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]; // // // // 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]; // // // // 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]; data[@"order_type"]=order_type; /* 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) { double dp= [nsprice doubleValue]; item[nsname]= [NSString stringWithFormat:@"%.2f",dp]; } } else { item[nsname]= @"No Price"; } // int type= sqlite3_column_int(statement, 2); //item[@"type"]=@"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=[RAConvertor 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 upc_code:(NSString *) upc_code { NSString* ret= nil; sqlite3 *db = [iSalesDB get_db]; NSString *sqlQuery = nil; if(product_id==nil) if(upc_code==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 upc_code = '%@' or upc_code like '%@;%%' or upc_code like '%%;%@;%%' or upc_code like '%%;%@';",upc_code,upc_code,upc_code,upc_code];// 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; } + (NSString *) categoryIdOfProduct:(NSString *)product_id name:(NSString *)product_name { NSString *sql = nil; if (product_id != nil) { sql = [NSString stringWithFormat:@"select category from product where product_id = '%@';",product_id]; } else { sql = [NSString stringWithFormat:@"select category from product where name = '%@';",product_name]; } NSString *result_set = [iSalesDB jk_queryText:sql]; result_set = [result_set stringByReplacingOccurrencesOfString:@"%" withString:@""]; result_set = [result_set stringByReplacingOccurrencesOfString:@"#" withString:@""]; return result_set; } //+(NSDictionary*) offline_model :(NSMutableDictionary *) params //{ // // // assert(params[@"user"]!=nil); // // // // NSString* model_name = [params valueForKey:@"product_name"]; // // NSString* product_id = [params valueForKey:@"product_id"]; // // NSString* category = [params valueForKey:@"category"]; // // NSString *default_category_id = [self model_default_category:product_id model_name:model_name]; // if(category==nil) { // category = default_category_id; // } else { // // NSArray *arr_0 = [category componentsSeparatedByString:@","]; // // 参数重有多个category id // if (arr_0.count > 1) { // NSArray *arr_1 = [[self categoryIdOfProduct:product_id name:model_name] componentsSeparatedByString:@","]; // // // 取交集 // NSMutableSet *set_0 = [NSMutableSet setWithArray:arr_0]; // NSMutableSet *set_1 = [NSMutableSet setWithArray:arr_1]; // [set_0 intersectSet:set_1]; // // if (set_0.count == 1) { // category = (NSString *)[set_0 anyObject]; // } else { // if ([set_0 containsObject:default_category_id]) { // category = default_category_id; // } else { // category = (NSString *)[set_0 anyObject]; // } // } // } // } // // 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,seat_dimension,product_content_writing 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,seat_dimension,product_content_writing 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 = @"Out of Stock"; // // [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]; // if ([nseta isEqualToString:@"null"]) { // nseta = @""; // } // if (availability <= 0) { // [img_section setValue:nseta forKey:@"ETA"]; // } // // // int item_id = sqlite3_column_int(statement, 26); // NSString *seat_dimension = [self textAtColumn:27 statement:statement]; // NSString *content_writing = [self textAtColumn:28 statement:statement]; // // 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 setObject:content_writing forKey:@"product_content_writing"]; // [img_section setValue:Price forKey:@"price"]; // [img_section setValue:nsname forKey:@"model_name"]; // [img_section setValue:nsdescription forKey:@"model_descrition"]; // // if (appDelegate.order_code) { // 离线order code即so# // // NSString *cartQtySql = [NSString stringWithFormat:@"select c.item_count from offline_cart as c left join offline_order as o on c.so_no = o.so_id where o.so_id = '%@' and c.item_id = %d;",appDelegate.order_code,item_id]; // __block int cartQTY = 0; // [iSalesDB jk_query:cartQtySql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { // // cartQTY = sqlite3_column_int(stmt, 0); // // }]; // // if (cartQTY > 0) { // [img_section setObject:[NSNumber numberWithInt:cartQTY] forKey:@"Model QTY in cart"]; // } // } // // [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:@"Seat Dimension" value:seat_dimension] 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_priceKvItem: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"]; // } //// DebugLog(@"count:%d",count); // // // [iSalesDB close_db:db]; // DebugLog(@"data string: %@",[RAConvertor 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]; // search by factory code 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,m.more_color 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 %@;",params[@"orderCode"], 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,m.more_color 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'%%%@%%' or lower(made_in) like '%%%@%%' or lower(material) like '%%%@%%' or lower(packaging) like '%%%@%%') and m.is_active = 1 order by m.name %@ ;",params[@"orderCode"], keyword,keyword,keyword,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); int more_color = sqlite3_column_int(statement, 7); 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"]; if (more_color == 0) { [item setObject:@(false) forKey:@"more_color"]; } else if (more_color == 1) { [item setObject:@(true) forKey:@"more_color"]; } [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); } DebugLog(@"count:%d",count); [iSalesDB close_db:db]; DebugLog(@"data string: %@",[RAConvertor 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]; // //// [iSalesDB disable_trigger] // [iSalesDB disable_trigger]; // [iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"]; // [iSalesDB execSql:@"delete from offline_order where status=0;"]; // // [iSalesDB enable_trigger]; //// [iSalesDB enable_trigger] // // // // 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]; // // [iSalesDB disable_trigger]; // [iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"]; // [iSalesDB execSql:@"delete from offline_order where status=0;"]; // [iSalesDB enable_trigger]; // // NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; // NSString *customer_name = [self translateSingleQuote:params[@"customer_name"]]; // 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=[RAConvertor 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,billing_cid,billing_name,billing_ext,billing_contact,billing_phone,billing_fax,billing_email,sales_terms) values('%@',0,'%@','%@','%@','%@','%@','%@','%@','%@',1,'%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','FOB')",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,customer_cid,customer_name,customer_contact_ext,customer_contact,customer_phone,customer_fax,customer_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 [RAConvertor dict2data:ret]; // //} +(NSData*) offline_editorder :(NSMutableDictionary *) params { //assert(params[@"order_code"]); // assert(params[@"order_code"]); NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSString* orderCode = [params valueForKey:@"orderCode"]; NSString* app_order_code= params[@"appDelegate.order_code"]; // UIApplication * app = [UIApplication sharedApplication]; // AppDelegate *appDelegate = (AppDelegate *)[app delegate]; if(![app_order_code isEqualToString:orderCode]&& app_order_code!=0) { [iSalesDB disable_trigger]; [iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"]; [iSalesDB execSql:@"delete from offline_order where status=0;"]; [iSalesDB enable_trigger]; } sqlite3 *db = [iSalesDB get_db]; int cart_count=[self query_ordercartcount:orderCode db:db]; int wish_count=[iSalesDB get_recordcount:db table:@"wishlist" where:@"is_delete is NULL or is_delete != 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 [RAConvertor dict2data:ret]; } +(NSData*) offline_add2cart :(NSMutableDictionary *) params; { assert(params[@"can_create_backorder"]!=nil); 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]; } // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; NSString* product_id=params[@"product_id"]; NSString* orderCode=params[@"orderCode"]; NSString *qty = params[@"qty"]; NSArray* arr_id=[RAConvertor string2arr:product_id separator:@","]; NSArray *qty_arr = [RAConvertor string2arr:qty separator:@","]; __block int number_of_outOfStock = 0; for(int i=0;i availability) { // 库存不够 update = NO; number_of_outOfStock++; } }]; } if (update) { sql=[NSString stringWithFormat:@"update offline_cart set item_count=item_count+?,create_time = datetime('now', 'localtime') where _id=?"]; sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil); sqlite3_bind_text(stmt,1,[[NSString stringWithFormat:@"%ld",item_qty] UTF8String],(int)[[NSString stringWithFormat:@"%ld",item_qty] length],NULL); sqlite3_bind_text(stmt,2,[[NSString stringWithFormat:@"%d",_id] UTF8String],(int)[[NSString stringWithFormat:@"%d",_id] length],NULL); shouldStep = YES; } } } if (shouldStep) { if (sqlite3_step(stmt) == SQLITE_ERROR) { [iSalesDB execSql:@"ROLLBACK" db:db]; ret[@"result"]=[NSNumber numberWithInt:RESULT_ERROR ]; [iSalesDB close_db:db]; DebugLog(@"add to cart error"); return [RAConvertor dict2data:ret]; } } } int cart_count=[iSalesDB get_recordcount:db table:@"offline_cart" where:[NSString stringWithFormat:@"so_no='%@'",orderCode]]; int wish_count=[iSalesDB get_recordcount:db table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"]; ret[@"wish_count"]=[NSNumber numberWithInt:wish_count ]; ret[@"cart_count"]=[NSNumber numberWithInt:cart_count ]; ret[@"result"]=[NSNumber numberWithInt:RESULT_TRUE ]; if (![params[@"can_create_backorder"] boolValue]) { if (number_of_outOfStock > 0) { ret[@"result"]=[NSNumber numberWithInt:8]; ret[@"err_msg"] = @"Out of Stock.\nNo more quantity available.\nPlease try again after sync."; /*[NSString stringWithFormat:@"%d item is out of stock",number_of_outOfStock]*/ } } [iSalesDB execSql:@"END TRANSACTION" db:db]; [iSalesDB close_db:db]; return [RAConvertor dict2data:ret]; } +(NSDictionary*) model_bundle:(int) item_id db:(sqlite3*)db compute_part:(bool)compute contactID:(NSString *)contactID user:(NSString*)user { // UIApplication * app = [UIApplication sharedApplication]; // AppDelegate *appDelegate = (AppDelegate *)[app delegate]; NSMutableDictionary* ret = [[NSMutableDictionary alloc]init]; NSString *sqlQuery = [NSString stringWithFormat:@"select b.item_id,b.qty,c.name,c.description,b.unit_price,b.use_unitprice from (select item_id,qty,decrypt(unit_price) as unit_price,use_unitprice from bundle where product_item_id=%d) b left join catalog c on b.item_id=c.item_id;",item_id]; sqlite3_stmt * statement; int count=0; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { while (sqlite3_step(statement) == SQLITE_ROW) { NSMutableDictionary* itemjson = [[NSMutableDictionary alloc]init]; int bitem_id = sqlite3_column_int(statement, 0); int bitem_qty = sqlite3_column_int(statement, 1); char *name = (char*)sqlite3_column_text(statement, 2); if(name==nil) name=""; NSString* nsname=[[NSString alloc]initWithUTF8String:name]; char *description = (char*)sqlite3_column_text(statement, 3); if(description==nil) description=""; NSString* nsdescription=[[NSString alloc]initWithUTF8String:description]; double unit_price = sqlite3_column_double(statement, 4); int use_unitprice = sqlite3_column_int(statement, 5); if(use_unitprice!=1) { unit_price=[self get_model_default_price:contactID user:user product_id:nil item_id:@(bitem_id) db:db].doubleValue; } itemjson[@"model"]=nsname; itemjson[@"description"]=nsdescription; itemjson[@"unit_price"]=[NSString stringWithFormat:@"%.2f",unit_price]; itemjson[@"modulus"]=[NSNumber numberWithInt:bitem_qty]; itemjson[@"item_id"]=[NSNumber numberWithInt:bitem_id].stringValue; if(compute) { itemjson[@"combine"]=[self model_bundle:bitem_id db:db compute_part:compute contactID:contactID user:user]; } ret[[NSString stringWithFormat:@"item_%d",count]]=itemjson; count++; } sqlite3_finalize(statement); } ret[@"count"]=@(count); if(count==0) return nil; else return ret; } +(NSDictionary*) model_subtotal:(int) item_id count:(int)count db:(sqlite3*)db compute_part:(bool)compute { //compute: add part to subtotal; NSMutableDictionary * dict_item = [[NSMutableDictionary alloc]init]; dict_item[@(item_id)]=@"1"; NSMutableDictionary* ret = [[NSMutableDictionary alloc]init]; double cuft=0; double weight=0; int carton=0; int impack=0; NSString *sqlQuery = [NSString stringWithFormat:@"select ulength ,uwidth ,uheight ,uweight ,mlength ,mwidth ,mheight ,mweigth ,ilength ,iwidth ,iheight , iweight ,pcs ,mpack ,ipack,ucbf,icbf,mcbf from catalog where item_id=%d;",item_id]; sqlite3_stmt * statement; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { if (sqlite3_step(statement) == SQLITE_ROW) { double ulength = sqlite3_column_double(statement, 0); double uwidth = sqlite3_column_double(statement, 1); double uheight = sqlite3_column_double(statement, 2); double uweight = sqlite3_column_double(statement, 3); double mlength = sqlite3_column_double(statement, 4); double mwidth = sqlite3_column_double(statement, 5); double mheight = sqlite3_column_double(statement, 6); double mweight = sqlite3_column_double(statement, 7); double ilength = sqlite3_column_double(statement, 8); double iwidth = sqlite3_column_double(statement, 9); double iheight = sqlite3_column_double(statement, 10); double iweight = sqlite3_column_double(statement, 11); // int pcs = sqlite3_column_int(statement,12); int mpack = sqlite3_column_int(statement, 13); impack = mpack; int ipack = sqlite3_column_int(statement, 14); double ucbf = sqlite3_column_double(statement, 15); // double icbf = sqlite3_column_double(statement, 16); // double mcbf = sqlite3_column_double(statement, 17); if(ipack==0) { carton= count/mpack ; weight = mweight*carton; cuft= carton*(mlength*mwidth*mheight); int remain=count%mpack; if(remain==0) { //do nothing; } else { carton++; weight += uweight*remain; cuft += (ulength*uwidth*uheight)*remain; } } else { carton = count/(mpack*ipack); weight = mweight*carton; cuft= carton*(mlength*mwidth*mheight); int remain=count%(mpack*ipack); if(remain==0) { // do nothing; } else { carton++; int icarton =remain/ipack; int iremain=remain%ipack; weight += iweight*icarton; cuft += (ilength*iwidth*iheight)*icarton; if(iremain==0) { //do nothing; } else { weight += uweight*iremain; cuft += (ulength*uwidth*uheight)*iremain; } } } #if defined(BUILD_NPD) || defined(BUILD_USAI) || defined(BUILD_UWAVER)|| defined (BUILD_CONTRAST) cuft=ucbf*count; weight= uweight*count; #endif #if defined(BUILD_HOMER) || defined(BUILD_GATIT) cuft=ucbf*count; weight= uweight*count; #endif } sqlite3_finalize(statement); } if(compute) { NSArray * arr_count=nil; NSArray * arr_bundle=[self model_bundle:item_id db:db count:&arr_count]; for(int i=0;i= item_count ? NO : YES]; // } //// NSDate *date2 = [NSDate date]; // itemjson[@"combine"]=[self model_bundle:item_id db:db compute_part:false contactID:appDelegate.contact_id]; //// DebugLog(@"model_bundle time interval"); //// [self printTimeIntervalBetween:date2 and:[NSDate date]]; // // ret[[NSString stringWithFormat:@"item_%d",count]]=itemjson; // count++; // //// DebugLog(@"row time interval"); //// [self printTimeIntervalBetween:row_date and:[NSDate date]]; // } // // // ret[@"result"]=[NSNumber numberWithInt:RESULT_TRUE ]; // sqlite3_finalize(statement); // } // // // DebugLog(@"request cart total time interval"); // [self printTimeIntervalBetween:date1 and:[NSDate date]]; // // // //int cart_count=[iSalesDB get_recordcount:db table:@"offline_cart" where:[NSString stringWithFormat:@"so_no='%@'",orderCode]]; // // 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[@"count"]=[NSNumber numberWithInt:count ]; // // ret[@"mode"]=@"Regular Mode"; // // [iSalesDB close_db:db]; // // NSString *general_note = [iSalesDB jk_queryText:[NSString stringWithFormat:@"select general_notes from offline_order where so_id = '%@';",orderCode]]; // // DebugLog(@"general notes :%@",general_note); // // ret[@"general_note"]= general_note; // // return [RAConvertor dict2data:ret]; //} +(NSData*) offline_login :(NSMutableDictionary *) params { NSString* user = [params valueForKey:@"user"]; NSString* password = [params valueForKey:@"password"]; NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; 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,can_update_contact_info 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]; int can_update_contact_info = sqlite3_column_int(statement, 13); [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 setObject:@(YES) forKey:@"can_create_backorder"]; [header setValue:[NSNumber numberWithBool:can_update_contact_info] forKey:@"can_update_contact_info"]; [header setValue:nsusername forKey:@"username"]; NSError* error=nil; NSString* statusFilter =[NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"offline_status_filter_cadedate" ofType:@"json"] encoding:NSUTF8StringEncoding error:&error]; [header setValue:statusFilter forKey:@"statusFilter"]; int wish_count = [iSalesDB get_recordcount:db table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"]; [header setObject:[NSString stringWithFormat:@"%d",wish_count] forKey:@"wish_count"]; // int portfolio_count = [iSalesDB get_recordcount:db table:@"portfoliolist" where:@"1=1"]; // [header setObject:[NSString stringWithFormat:@"%d",wish_count] forKey:@"portfolio_count"]; int portfolio_count = [iSalesDB get_recordcount:db table:@"offline_portfolio" where:@"is_delete is NULL or is_delete != 1"]; [header setObject:[NSString stringWithFormat:@"%d",portfolio_count] forKey:@"portfolio_count"]; [ret setObject:header forKey:@"header"]; [ret setValue:nsmode forKey:@"mode"]; } sqlite3_finalize(statement); } [iSalesDB close_db:db]; DebugLog(@"data string: %@",[RAConvertor dict2string:ret] ); return [RAConvertor dict2data:ret]; } +(NSDictionary*) offline_contactinfo :(NSMutableDictionary *) params { assert(params[@"mode"]!=nil); NSString* contactId = [params valueForKey:@"contactId"]; NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSMutableDictionary* item = [[NSMutableDictionary alloc] init]; sqlite3 *db = [iSalesDB get_db]; NSString *sqlQuery = nil; { sqlQuery=[NSString stringWithFormat:@"select editable,company_name,country,addr,zipcode,state,city,contact_name,phone,contact_id,addr_1,addr_2,addr_3,addr_4,first_name,last_name,fax,email,img_0,img_1,img_2,price_type,notes,sales_rep,type,carrier from offline_contact where contact_id='%@'",contactId]; } DebugLog(@"offline_contactlist sql:%@",sqlQuery); sqlite3_stmt * statement; [ret setValue:@"2" forKey:@"result"]; int carrier = -1; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { //int i = 0; if (sqlite3_step(statement) == SQLITE_ROW) { [ret setValue:[NSNumber numberWithInt:AP_USER_AUTH ] forKey:@"result"]; // int editable = sqlite3_column_int(statement, 0); char *company_name = (char*)sqlite3_column_text(statement, 1); NSString *nscompany_name =nil; if(company_name==nil) nscompany_name=@""; else nscompany_name=[[NSString alloc]initWithUTF8String:company_name] ; char *country = (char*)sqlite3_column_text(statement, 2); if(country==nil) country=""; NSString *nscountry= [[NSString alloc]initWithUTF8String:country]; // char *addr = (char*)sqlite3_column_text(statement, 3); // if(addr==nil) // addr=""; // NSString *nsaddr= [[NSString alloc]initWithUTF8String:addr]; char *zipcode = (char*)sqlite3_column_text(statement, 4); if(zipcode==nil) zipcode=""; NSString *nszipcode= [[NSString alloc]initWithUTF8String:zipcode]; char *state = (char*)sqlite3_column_text(statement, 5); if(state==nil) state=""; NSString *nsstate= [[NSString alloc]initWithUTF8String:state]; char *city = (char*)sqlite3_column_text(statement, 6); if(city==nil) city=""; NSString *nscity= [[NSString alloc]initWithUTF8String:city]; // char *contact_name = (char*)sqlite3_column_text(statement, 7); // NSString *nscontact_name = nil; // if(contact_name==nil) // nscontact_name=@""; // else // nscontact_name= [[NSString alloc]initWithUTF8String:contact_name]; char *phone = (char*)sqlite3_column_text(statement, 8); NSString *nsphone = nil; if(phone==nil) nsphone=@""; else nsphone= [[NSString alloc]initWithUTF8String:phone]; // char *contact_id = (char*)sqlite3_column_text(statement, 9); // if(contact_id==nil) // contact_id=""; // NSString *nscontact_id= [[NSString alloc]initWithUTF8String:contact_id]; char *addr_1 = (char*)sqlite3_column_text(statement, 10); if(addr_1==nil) addr_1=""; NSString *nsaddr_1= [[NSString alloc]initWithUTF8String:addr_1]; char *addr_2 = (char*)sqlite3_column_text(statement, 11); if(addr_2==nil) addr_2=""; NSString *nsaddr_2= [[NSString alloc]initWithUTF8String:addr_2]; char *addr_3 = (char*)sqlite3_column_text(statement, 12); if(addr_3==nil) addr_3=""; NSString *nsaddr_3= [[NSString alloc]initWithUTF8String:addr_3]; char *addr_4 = (char*)sqlite3_column_text(statement, 13); if(addr_4==nil) addr_4=""; NSString *nsaddr_4= [[NSString alloc]initWithUTF8String:addr_4]; char *first_name = (char*)sqlite3_column_text(statement, 14); if(first_name==nil) first_name=""; NSString *nsfirst_name= [[NSString alloc]initWithUTF8String:first_name]; char *last_name = (char*)sqlite3_column_text(statement, 15); if(last_name==nil) last_name=""; NSString *nslast_name= [[NSString alloc]initWithUTF8String:last_name]; char *fax = (char*)sqlite3_column_text(statement, 16); NSString *nsfax = nil; if(fax==nil) nsfax=@""; else nsfax= [[NSString alloc]initWithUTF8String:fax]; char *email = (char*)sqlite3_column_text(statement, 17); NSString *nsemail = nil; if(email==nil) nsemail=@""; else nsemail= [[NSString alloc]initWithUTF8String:email]; char *img_0 = (char*)sqlite3_column_text(statement, 18); NSString *nsimg_0 = nil; if(img_0==nil) nsimg_0=@""; else nsimg_0= [[NSString alloc]initWithUTF8String:img_0]; [self copy_bcardImg:nsimg_0]; char *img_1 = (char*)sqlite3_column_text(statement, 19); NSString *nsimg_1 = nil; if(img_1==nil) nsimg_1=@""; else nsimg_1= [[NSString alloc]initWithUTF8String:img_1]; [self copy_bcardImg:nsimg_1]; char *img_2 = (char*)sqlite3_column_text(statement, 20); NSString *nsimg_2 = nil; if(img_2==nil) nsimg_2=@""; else nsimg_2= [[NSString alloc]initWithUTF8String:img_2]; [self copy_bcardImg:nsimg_2]; char *price_type = (char*)sqlite3_column_text(statement, 21); NSString *nsprice_type = nil; if(price_type==nil) nsprice_type=@""; else nsprice_type= [[NSString alloc]initWithUTF8String:price_type]; char *notes = (char*)sqlite3_column_text(statement, 22); NSString *nsnotes = nil; if(notes==nil) nsnotes=@""; else nsnotes= [[NSString alloc]initWithUTF8String:notes]; char *salesrep = (char*)sqlite3_column_text(statement, 23); NSString *nssalesrep = nil; if(salesrep==nil) nssalesrep=@""; else nssalesrep= [[NSString alloc]initWithUTF8String:salesrep]; NSString *contact_type = [self textAtColumn:24 statement:statement]; carrier = sqlite3_column_int(statement, 25); { // 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]; } NSMutableArray* arr_name= [[NSMutableArray alloc] init]; [arr_name addObject:nsfirst_name]; [arr_name addObject:nslast_name]; NSString *nscontact_name=[RAConvertor 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=[RAConvertor 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"]; [item setValue:contact_type forKey:@"customer_contact_type"]; // i++; } // UIApplication * app = [UIApplication sharedApplication]; // AppDelegate *appDelegate = (AppDelegate *)[app delegate]; [ret setValue:params[@"mode"] forKey:@"mode"]; [ret setValue:[NSNumber numberWithInt:1 ] forKey:@"count"]; sqlite3_finalize(statement); } [iSalesDB close_db:db]; NSString* scarrier = [self offline_getCarrier:carrier]; item[@"customer_truck_carrier"] = scarrier; [ret setObject:item forKey:@"customerInfo"]; DebugLog(@"data string: %@",[RAConvertor 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 [RAConvertor 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 [RAConvertor 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]; // } } if(! [fileManager fileExistsAtPath:img_cache isDirectory:&bdir]) { NSError *error = nil; bool bsuccess=[fileManager createDirectoryAtPath:img_cache withIntermediateDirectories:YES attributes:nil error:&error]; if(!bsuccess) { DebugLog(@"Create img_cache folder failed"); [ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"]; return [RAConvertor 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:@"%@.jpg",[[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 [RAConvertor 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 =nil; #ifdef BUILD_NPD 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 ; #else 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 i.default_img = %d order by aa limit 10 ;",category,OFFLINE_IMG_TYPE_CATEGORY]; #endif 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); } DebugLog(@"count:%d",count); // [iSalesDB close_db:db]; return ret; } +(NSDictionary*) model_priceKvItem:(NSString*) key value:(NSString*)value { NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; [ret setValue:key forKey:@"key"]; [ret setValue:value forKey:@"val"]; [ret setValue:@"price" forKey:@"type"]; 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=[RAConvertor string2arr:product_id separator:@","]; NSArray *item_count_arr = item_count_str ? [RAConvertor string2arr:item_count_str separator:@","] : nil; NSString* sqlQuery = [NSString stringWithFormat:@"insert into wishlist(product_id,qty) values(?,?);"]; // NSString *sql = @""; for(int i=0;i 0) { countryCode_id = params[@"country"]; NSDictionary *dic = [self offline_dealZipCode:zip_code]; countryCode = [dic valueForKey:@"country_code"]; if (!countryCode) { // countryCode = @"US"; NSString *code_id = params[@"country"]; countryCode = [self countryCodeByid:code_id]; } stateCode = [dic valueForKey:@"state_code"]; if (!stateCode.length) { stateCode = params[@"state"]; } city = [dic valueForKey:@"city"]; if (!city.length) { city = params[@"city"]; } // zip code NSMutableDictionary *zipDic = [[section_0 valueForKey:@"item_11"] mutableCopy]; [zipDic setValue:zipCode forKey:@"value"]; [section_0 setValue:zipDic forKey:@"item_11"]; } else { NSString *code_id = params[@"country"]; countryCode = [self countryCodeByid:code_id]; stateCode = params[@"state"]; city = params[@"city"]; } } } else { // default: US United States countryCode = @"US"; countryCode_id = @"228"; } // country NSDictionary *allCountry = [self offline_getAllCountryDefault:countryCode]; [self setValue:allCountry forItemKey:@"item_6" 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_12" valueKey:@"cadedate" inDictionary:section_0]; // city if (city) { NSMutableDictionary *cityDic = [[section_0 valueForKey:@"item_13"] mutableCopy]; [cityDic setValue:city forKey:@"value"]; [section_0 setValue:cityDic forKey:@"item_13"]; } // price type NSDictionary *priceDic = [self offline_getPrice]; [self setValue:priceDic forItemKey:@"item_2" valueKey:@"cadedate" inDictionary:section_0]; // contact type NSDictionary *contactTypeDic = [self offline_getContactTypeChecked:nil]; [self setValue:contactTypeDic forItemKey:@"item_3" valueKey:@"cadedate" inDictionary:section_0]; // Sales Rep NSDictionary *repDic = [self offline_getSalesRep:params[@"user"]]; [self setValue:repDic forItemKey:@"item_18" valueKey:@"cadedate" inDictionary:section_0]; #ifdef BUILD_CONTRAST //carrier NSDictionary *carrierDic = [self offline_getAllCarrier:params[@"carrier"]]; [self setValue:carrierDic forItemKey:@"item_19" valueKey:@"cadedate" inDictionary:section_0]; #endif [ret setValue:section_0 forKey:@"section_0"]; return [RAConvertor dict2data:ret]; } #pragma mark save + (NSData *)offline_saveContact:(NSDictionary *)params update:(BOOL)update isCustomer:(BOOL)isCustomer{ NSString *addr = nil; NSString *contact_name = nil; // int carrier = [params[@"carrier"] intValue]; 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 = [RAConvertor 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 = @""; } int carrier = [params[@"carrier"] intValue]; 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 = [RAConvertor 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; NSString *contact_type = [params objectForKey:@"type_name"]; if (!contact_type) { contact_type = @""; } contact_type = [self translateSingleQuote:contact_type]; // 判断更新时是否为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"]; } sync_dic[@"truck_carrier"] = [self offline_getCarrier: [sync_dic[@"carrier"] intValue]]; 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 = [RAConvertor 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 = '%@',type = '%@' ,carrier = %d 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_type,carrier,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 = [RAConvertor 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,type,carrier) values (1,'%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@',1,'%@',%d,%d,0,%d,0,1,'%@','%@','%@','%@',%d)",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,contact_type,carrier]; } 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 { assert(params[@"user"]!=nil); // { // "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; __block int carrierCode = -1; /*------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; __block NSString *contact_type; 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,type,carrier 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]; contact_type = [self textAtColumn:20 statement:stmt]; carrierCode = sqlite3_column_int(stmt, 21); }]; // 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"]; if (!countryCode) { NSString *code_id = params[@"country"]; countryCode = [self countryCodeByid:code_id]; } stateCode = [dic valueForKey:@"state_code"]; if (!stateCode.length) { stateCode = params[@"state"]; } city = [dic valueForKey:@"city"]; if (!city.length) { city = params[@"city"]; } // zip code NSMutableDictionary *zipDic = [[section_0 valueForKey:@"item_8"] mutableCopy]; [zipDic setValue:zipcode forKey:@"value"]; [section_0 setValue:zipDic forKey:@"item_8"]; } else { NSString *code_id = params[@"country"]; countryCode = [self countryCodeByid:code_id]; stateCode = params[@"state"]; city = params[@"city"]; } } } // 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 Contact Type // 19 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]; // Contact Rep NSDictionary *contactTypeDic = [self offline_getContactTypeChecked:contact_type]; [self setValue:contactTypeDic forItemKey:@"item_18" valueKey:@"cadedate" inDictionary:section_0]; // Sales Rep NSMutableDictionary *repDic = [[self offline_getSalesRep:params[@"user"]] 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_19" valueKey:@"cadedate" inDictionary:section_0]; #ifdef BUILD_CONTRAST //carrier NSString* scarrier = [self offline_getCarrier:carrierCode]; NSDictionary *carrierDic = [self offline_getAllCarrier:scarrier]; [self setValue:carrierDic forItemKey:@"item_20" valueKey:@"cadedate" inDictionary:section_0]; #endif [ret setValue:section_0 forKey:@"section_0"]; return [RAConvertor 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,m.category,m.more_color 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 %@ ;",params[@"orderCode"], 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 (params[@"user"] && price != nil) { NSArray *priceTypeArray = [self get_contact_default_price_type:nil user:params[@"user"] 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]; } // model name; NSString* modelname =params[@"modelName"]; if(modelname.length==0) { modelname=@""; } else { modelname = modelname.lowercaseString; modelname=[NSString stringWithFormat:@"and lower(name) like'%%%@%%'",modelname]; } //modelDescription NSString* modelDescription =params[@"modelDescription"]; if(modelDescription.length==0) { modelDescription=@""; } else { modelDescription = modelDescription.lowercaseString; modelDescription=[NSString stringWithFormat:@"and lower(description) like'%%%@%%'",modelDescription]; } // cate // category = [self translateSingleQuote:category]; // NSString *cateWhere = [NSString stringWithFormat:@"category like'%%#%@#%%'",category]; // cate mutiple selection NSString *category_id = params[@"category"]; 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]; } [cateWhere appendString:@"("]; for (int i = 0; i < cate_id_array.count; i++) { if (i == 0) { [cateWhere appendFormat:@"category like'%%#%@#%%'",cate_id_array[i]]; } else { [cateWhere appendFormat:@" or category like'%%#%@#%%'",cate_id_array[i]]; } } [cateWhere appendString:@")"]; } // 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,m.category,m.more_color from (select name,description,product_id,closeout,best_seller,category,more_color 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,modelname,modelDescription,price,params[@"orderCode"],order_best_seller,limit_str]; where =[NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ and is_active = 1",cateWhere,best_seller,alert,available_condition,qty,price]; } DebugLog(@"offline category where: %@",where); count = [iSalesDB get_recordcount:db table:@"product" where:where]; if (!params[@"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); NSString *categoryStr = [self textAtColumn:7 statement:statement]; int more_color = sqlite3_column_int(statement, 8); // Defaul Category ID __block NSString *categoryID = nil; NSString *defaultCateSQL = [NSString stringWithFormat:@"select default_category from product where product_id=%d;",product_id]; [iSalesDB jk_query:defaultCateSQL db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { char *default_category = (char*)sqlite3_column_text(stmt, 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:@""]; categoryID = nsdefault_category; }]; if (!categoryID.length) { NSString *cateIDs = params[@"category"]; NSArray *requestCategoryArr = [cateIDs componentsSeparatedByString:@","]; NSArray *itemCategoryArr = [categoryStr componentsSeparatedByString:@","]; for (NSString *cateID in requestCategoryArr) { BOOL needBreak = NO; for (NSString *itemCateIDBox in itemCategoryArr) { if (itemCateIDBox.length > 4) { NSString *itemCategoryID = [itemCateIDBox substringFromIndex:2]; itemCategoryID = [itemCategoryID substringToIndex:itemCategoryID.length - 2]; if ([itemCategoryID isEqualToString:cateID]) { needBreak = YES; categoryID = itemCategoryID; break; } } } if (needBreak) { break; } } } 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"]; if (more_color == 0) { [item setObject:@(false) forKey:@"more_color"]; } else if (more_color == 1) { [item setObject:@(true) forKey:@"more_color"]; } [item addEntriesFromDictionary:imgjson]; // [item setValue:nsurl forKey:@"img"]; [item setValue:nsname forKey:@"name"]; [item setValue:nsdescription forKey:@"description"]; if (categoryID) { [item setValue:categoryID forKey:@"item_category_id"]; } [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: %@",[RAConvertor 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; // assert(params[@"order_code"]); // params[@"user"] 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,m.more_color 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 %@ %@;",params[@"orderCode"], 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 (params[@"user"]) { NSArray *priceTypeArray = [self get_contact_default_price_type:nil user:params[@"user"] 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]; } // model name; NSString* modelname =params[@"modelName"]; if(modelname.length==0) { modelname=@""; } else { modelname = modelname.lowercaseString; modelname=[NSString stringWithFormat:@"and lower(name) like'%%%@%%'",modelname]; } //modelDescription NSString* modelDescription =params[@"modelDescription"]; if(modelDescription.length==0) { modelDescription=@""; } else { modelDescription = modelDescription.lowercaseString; modelDescription=[NSString stringWithFormat:@"and lower(description) like'%%%@%%'",modelDescription]; } //lower(description) like'%%%@%%' // 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];// 老子 [cateWhere appendString:@"("]; 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]; } } else if ([key1 isEqualToString:@"cid"]) { // 2017-03-10 修复Item Search父节点下没有子节点的情况下选中父节点查询没有结果 if ([[category0 objectForKey:@"cid"] isEqualToString:cate_id_array[i]]) { cate_id_array[i] = [category0 objectForKey:@"id"]; if (i == 0) { [cateWhere appendFormat:@"category like'%%#%@#%%'",cate_id_array[i]]; } else { [cateWhere appendFormat:@" or category like'%%#%@#%%'",cate_id_array[i]]; } [category0 setValue:[NSNumber numberWithInteger:1] forKey:@"check"]; [cateDic setValue:category0 forKey:key0]; } } } } } } [cateWhere appendString:@")"]; [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,m.more_color from (select name,description,product_id,closeout,best_seller,more_color 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,modelname,modelDescription,price,params[@"orderCode"],order_best_seller,limit_str]; // count where =[NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ %@ %@ and m.is_active = 1",cateWhere,best_seller,alert,available_condition,qty,modelname,modelDescription,price]; } where = [where stringByReplacingOccurrencesOfString:@"m." withString:@""]; count = [iSalesDB get_recordcount:db table:@"product" where:where]; if (!params[@"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); int more_color = sqlite3_column_int(statement, 7); 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"]; if (more_color == 0) { [item setObject:@(false) forKey:@"more_color"]; } else if (more_color == 1) { [item setObject:@(true) forKey:@"more_color"]; } [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: %@",[RAConvertor 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; NSString *result = [formatter stringFromDate:date]; return result ? result : @""; } + (NSString *)rchangeDateFormate:(NSString *)dateTime { return [self changeDateTime:dateTime Formate:@"MM/dd/yyyy" withFormate:@"yyyy-MM-dd"]; // return [self timeFormat:dateTime from:@"YYYY-MM-DD HH:mm:ss" to:@"MM/DD/YYYY HH:mm:ss"]; } + (NSString *)changeDateFormate:(NSString *)dateTime { return [self changeDateTime:dateTime Formate:@"yyyy-MM-dd" withFormate:@"MM/dd/yyyy"]; // return [self timeFormat:dateTime from:@"YYYY-MM-DD HH:mm:ss" to:@"MM/DD/YYYY HH:mm:ss"]; } + (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 { assert(params[@"mode"]!=nil); assert(params[@"user"]!=nil); 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,c.city,c.state,c.zipcode,c.country,o.must_call,discount 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,must_call,discount 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 = @""; NSString *customer_city = @""; NSString *customer_state = @""; NSString *customer_zipcode = @""; NSString *customer_country = @""; BOOL must_call = NO; double discount = 0; __block NSMutableDictionary *section_0 = [NSMutableDictionary dictionary]; __block NSMutableDictionary *section_1 = [NSMutableDictionary dictionary]; __block NSMutableDictionary *section_2 = [NSMutableDictionary dictionary]; __block NSMutableDictionary *section_3 = [NSMutableDictionary dictionary]; __block NSMutableDictionary *section_4 = [NSMutableDictionary dictionary]; __block NSMutableDictionary *price_data = [NSMutableDictionary dictionary]; 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; section_1 = @{ @"data":sign_url, @"title":@"Signature", @"type":@"sign_url" }.mutableCopy; [ret setObject:section_1 forKey:@"section_1"]; 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]; customer_city = [self textAtColumn:60 statement:statement]; customer_state = [self textAtColumn:61 statement:statement]; customer_zipcode = [self textAtColumn:62 statement:statement]; customer_country = [self textAtColumn:63 statement:statement]; must_call = [[self textAtColumn:64 statement:statement] boolValue]; discount =sqlite3_column_double(statement, 65); 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]; [arr_addr addObject:[NSString stringWithFormat:@"%@,",customer_city]]; [arr_addr addObject:customer_state]; [arr_addr addObject:customer_zipcode]; [arr_addr addObject:customer_country]; // NSString * customer_address = [RAConvertor arr2string:arr_addr separator:@" " trim:true]; NSString *customer_address = [NSString stringWithFormat:@"%@
%@, %@ %@ %@",nsaddr_1,customer_city,customer_state,customer_zipcode,customer_country]; 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; NSDictionary *shipping_item = @{ @"title":@"Shipping", @"value":shipping }; [price_data setObject:shipping_item forKey:@"item_1"]; 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]; NSString *liftgate_value = [NSString stringWithFormat:@"$%.2f",lift_gate]; if (sqlite3_column_int(statement, 57)) { // ret[@"Liftgate Fee(No loading dock)"] = @"Shipping To Be Quoted"; liftgate_value = @"Shipping To Be Quoted"; } NSDictionary *liftgate_item = @{ @"title":@"Liftgate Fee(No loading dock)", @"value":liftgate_value }; [price_data setObject:liftgate_item forKey:@"item_2"]; // if ([nslogist isEqualToString:@"WILL CALL"]) { // [ret removeObjectForKey:@"Shipping"]; // [ret removeObjectForKey:@"Liftgate Fee(No loading dock)"]; // } // // if (have_lift_gate) { // [ret removeObjectForKey:@"Liftgate Fee(No loading dock)"]; // } char *general_notes = (char*)sqlite3_column_text(statement, 14); if(general_notes==nil) general_notes= ""; NSString *nsgeneral_notes= [NSString stringWithFormat:@"MUST MAKE APPOINTMENT BEFORE DELIVERY = %@;
%@",must_call ? @"YES" : @"NO",[[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; // id -> show __block NSString *show_pay_type = nspayment_type; [iSalesDB jk_query:[NSString stringWithFormat:@"select pay_type from payment_type where type_id = '%@';",nspayment_type] db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { char *show_typ_ch = (char*)sqlite3_column_text(stmt, 0); if (show_typ_ch != NULL) { show_pay_type = [NSString stringWithUTF8String:show_typ_ch]; } }]; if([nspayment_type isEqualToString:@"Credit Card"] || [nspayment_type isEqualToString:@"Visa/Master"]) { 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:@"Payment_Type" withString:show_pay_type]; 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]; shipToAddr = [shipToAddr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"
"]; shipToAddr = [shipToAddr stringByReplacingOccurrencesOfString:@"\r" withString:@"
"]; // 手动输入的可能是\r 或 \n shipToAddr = [shipToAddr stringByReplacingOccurrencesOfString:@"\n" withString:@"
"]; 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]; shipFromAddr = [shipFromAddr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"
"]; shipFromAddr = [shipFromAddr stringByReplacingOccurrencesOfString:@"\r" withString:@"
"]; shipFromAddr = [shipFromAddr stringByReplacingOccurrencesOfString:@"\n" withString:@"
"]; 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]; freightBillToAddr = [freightBillToAddr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"
"]; freightBillToAddr = [freightBillToAddr stringByReplacingOccurrencesOfString:@"\r" withString:@"
"]; freightBillToAddr = [freightBillToAddr stringByReplacingOccurrencesOfString:@"\n" withString:@"
"]; 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]; merchandiseBillToAddr = [merchandiseBillToAddr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"
"]; merchandiseBillToAddr = [merchandiseBillToAddr stringByReplacingOccurrencesOfString:@"\r" withString:@"
"]; merchandiseBillToAddr = [merchandiseBillToAddr stringByReplacingOccurrencesOfString:@"\n" withString:@"
"]; 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]; returnToAddr = [returnToAddr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"
"]; returnToAddr = [returnToAddr stringByReplacingOccurrencesOfString:@"\r" withString:@"
"]; returnToAddr = [returnToAddr stringByReplacingOccurrencesOfString:@"\n" withString:@"
"]; 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]; NSString *handling_fee_value = [NSString stringWithFormat:@"$%.2f",handlingFee]; if (sqlite3_column_int(statement, 58)) { // ret[@"Handling Fee"] = @"Shipping To Be Quoted"; handling_fee_value = @"Shipping To Be Quoted"; } NSDictionary *handling_fee_item = @{ @"title":@"Handling Fee", @"value":handling_fee_value }; [price_data setObject:handling_fee_item forKey:@"item_3"]; // // customer info customerID = [self textAtColumn:36 statement:statement]; // mode ret[@"mode"] = params[@"mode"]; // model_count ret[@"model_count"] = @(0); } sqlite3_finalize(statement); } [iSalesDB close_db:db]; NSMutableDictionary *contactInfo = [[[self offline_contactinfo:[@{@"contactId":customerID,@"mode":params[@"mode"]} 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 NSMutableDictionary *model_data = [NSMutableDictionary dictionary]; __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:customerID user:params[@"user"] 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 contactID:customerID user:params[@"user"]]; // 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) { NSDictionary *total_item = @{ @"title":@"Total", @"value":[NSString stringWithFormat:@"$%.2f",totalPrice*(1-(discount/100.0))] }; NSDictionary *discount_item = @{ @"title":@"Order Discount", @"value":[NSString stringWithFormat:@"%d%% off",(int)discount] }; [price_data setObject:discount_item forKey:@"item_4"]; [price_data setObject:total_item forKey:@"item_5"]; } else { NSDictionary *total_item = @{ @"title":@"Total", @"value":[NSString stringWithFormat:@"$%.2f",totalPrice] }; [price_data setObject:total_item forKey:@"item_4"]; } [price_data setObject:@(price_data.allKeys.count) forKey:@"count"]; section_4 = @{ @"data":price_data, @"title":@"Price Info", @"type":@"price_info" }.mutableCopy; ret[@"section_4"] = section_4; // ret[@"order_info"]= orderinfo; section_0 = @{ @"data":orderinfo, @"title":@"Order Info", @"type":@"order_info" }.mutableCopy; ret[@"section_0"] = section_0; // ret[@"more_order_info"] = moreInfo; section_2 = @{ @"data":moreInfo, @"title":@"More Info", @"type":@"more_order_info" }.mutableCopy; ret[@"section_2"] = section_2; ret[@"count"] = @(5); return [RAConvertor dict2data:ret]; } #pragma mark order list + (NSString *)orderStatus:(int)status erpStatus:(int)erpStatus{ NSString *nsstatus = @""; switch (status) { case 0: { nsstatus=@"Temp Order"; break; } case 1: { nsstatus=@"Saved Order"; break; } case 2: { nsstatus = [self orderStatus:erpStatus erpStatus:-1]; break; } case 3: case 15: { nsstatus=@"Cancelled"; break; } case 10: { nsstatus=@"Quote Submitted"; break; } case 11: { nsstatus=@"Sales Order Submitted"; break; } case 12: { nsstatus=@"Processing"; break; } case 13: { nsstatus=@"Shipped"; break; } case 14: { nsstatus=@"Closed"; break; } case -11: { nsstatus = @"Ready For Submit"; break; } default: break; } return nsstatus; } + (double) orderTotalPrice:(NSString *)so_id user:(NSString*) user db:(sqlite3 *)db1 close:(BOOL)close { double total = 0; __block double payments_and_credist = 0; __block double allItemPrice = 0; // sqlite3 *db1 = [iSalesDB get_db]; if (so_id) { // 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",so_id]; NSString *modelSql = [NSString stringWithFormat:@"select product_id,price,discount,item_count,item_id,customer_cid from (select c.product_id,decrypt(c.str_price) as price,c.discount,c.item_count,c.item_id,o.customer_cid from offline_cart as c left join offline_order as o on c.so_no = o.so_id where c.so_no='%@');",so_id]; // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; [iSalesDB jk_query:modelSql db:db1 close:NO 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 discount = sqlite3_column_int(stmt, 2); int item_count = sqlite3_column_int(stmt, 3); // int item_id = sqlite3_column_int(stmt, 7); int item_id = sqlite3_column_int(stmt, 4); char *customer_cid = (char *)sqlite3_column_text(stmt, 5); NSString *customerID = [NSString stringWithUTF8String:customer_cid]; NSString* Price=nil; if(str_price==nil) { NSNumber* price = [self get_model_default_price:customerID user:user 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]]; } itemjson[@"combine"]=[self model_bundle:item_id db:db1 compute_part:false contactID:customerID user:user]; itemjson[@"The unit price"]=Price; itemjson[@"product_id"] = [NSString stringWithFormat:@"%d",product_id]; itemjson[@"QTY"] = [NSString stringWithFormat:@"%d",item_count]; 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) payments_and_credist= payments_and_credist*(1-order_discount/100.0); // total total = payments_and_credist + lift_gate + shippingFee + handlingFee; if (close) { [iSalesDB close_db:db1]; } return total; } +(NSData*) offline_orderlist :(NSMutableDictionary *) params { assert(params[@"user"]!=nil); NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; int limit = [[params valueForKey:@"limit"] intValue]; int offset = [[params valueForKey:@"offset"] intValue]; NSString* keyword = [params valueForKey:@"keyWord"]; keyword = [self translateSingleQuote:keyword]; // 转义单引号 NSString *orderStatus = [params valueForKey:@"orderStatus"]; NSString* where=@"1 = 1"; if(keyword.length>0) 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] intValue]; if (status_value <= 1 || status_value == 3 || status_value == 15) { if (status_value == 15 || status_value == 3) { where = [where stringByAppendingString:[NSString stringWithFormat:@" and (o.status = 3 or o.erpOrderStatus = 15)"]]; } else { 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 intValue]; if (status_value <= 1 || status_value == 3 || status_value == 15) { if (status_value == 15 || status_value == 3) { where = [where stringByAppendingString:[NSString stringWithFormat:@" %@ (o.status = 3 or o.erpOrderStatus = 15)",condition]]; } else { 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.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] user:params[@"user"] 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; int statusCode = status; if (statusCode == 2) { statusCode = erpStatus; } else if (statusCode == 3) { statusCode = 15; } item[@"orderStatus"]= [NSString stringWithFormat:@"%d",statusCode]; 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 [RAConvertor 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 [RAConvertor 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]; // 去除第一个, if (product_id.length > 1) { product_id = [product_id substringFromIndex:1]; } if (item_count_str.length > 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 [RAConvertor 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 [RAConvertor dict2data:dic]; } #pragma mark set order discount //+(NSDictionary*) offline_cartsetallprice :(NSMutableDictionary *) params //{ // DebugLog(@"cart set price params: %@",params); // // "cartitem_id" = 1; // // discount = "0.000000"; // // "item_note" = ""; // // price = "269.000000"; // NSString *order_code = [self valueInParams:params key:@"orderCode"]; // //NSString *notes = [self valueInParams:params key:@"item_note"]; // NSString *discount = [self valueInParams:params key:@"app_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 discount = %f where so_no = '%@'",discount.doubleValue,order_code]; // // 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 [RAConvertor dict2data:dic]; // return dic; // //} +(NSDictionary*) offline_setorderdiscount :(NSMutableDictionary *) params { DebugLog(@"order set discount params: %@",params); // "cartitem_id" = 1; // discount = "0.000000"; // "item_note" = ""; // price = "269.000000"; NSString *order_code = [self valueInParams:params key:@"orderCode"]; //NSString *notes = [self valueInParams:params key:@"item_note"]; NSString *discount = [self valueInParams:params key:@"app_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]; // } // // sqlite3 *db = [iSalesDB get_db]; // double total_price = [self orderTotalPrice:params[@"orderCode"] user:params[@"user"] db:db close:YES]; // price = [self translateSingleQuote:[AESCrypt fastencrypt:price]]; //NSString *sql = [NSString stringWithFormat:@"update offline_order set discount = %f, total_price=%f where so_id = '%@'",discount.doubleValue,total_price*(1-discount.doubleValue/100.0),order_code]; NSString *sql = [NSString stringWithFormat:@"update offline_order set discount = %f where so_id = '%@'",discount.doubleValue,order_code]; 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 [RAConvertor dict2data:dic]; return dic; } +(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 [RAConvertor 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 [RAConvertor dict2data:dic]; } #pragma mark set qty +(NSData*) offline_cartsetqty :(NSMutableDictionary *) params { assert(params[@"can_create_backorder"]!=nil); NSMutableDictionary *dic = [NSMutableDictionary dictionary]; NSString *_id = [self valueInParams:params key:@"cartitem_id"]; int item_count = [params[@"inputInt"] intValue]; // 购买检查数量大于库存 // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; if (!params[@"can_create_backorder"]) { NSString *checkSql = [NSString stringWithFormat:@"select p.availability from product as p left join offline_cart as c on c.item_id = p.item_id where c._id = %@;",_id]; __block BOOL out_of_stock = NO; [iSalesDB jk_query:checkSql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { int availability = sqlite3_column_int(stmt, 0); if (availability < item_count) { out_of_stock = YES; } }]; if (out_of_stock) { // 缺货 [dic setValue:[NSNumber numberWithInteger:8] forKey:@"result"]; [dic setObject:@"Item is out of stock" forKey:@"err_msg"]; return [RAConvertor dict2data:dic]; } } 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]; [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 [RAConvertor 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 { assert(params[@"user"]!=nil); assert(params[@"contact_id"]!=nil); 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:params[@"contact_id"] user:params[@"user"] 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 contactID:params[@"contact_id"] user:params[@"user"]]; 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;bc0) { NSDictionary *discount_dict = @{ @"align" : @"right", @"aname" : @"Order Discount", @"control" : @"text", @"name" : @"orderDiscount", // @"type" : @"price", @"value" : [NSString stringWithFormat:@"%d%% off",(int)discount] }; [dic setValue:discount_dict forKey:[NSString stringWithFormat:@"item_%d",item_count++]]; } NSDictionary *total_price_dic = @{ @"align" : @"right", @"aname" : @"Total", @"control" : @"text", @"name" : @"totalPrice", @"type" : @"price", @"value" : [NSString stringWithFormat:@"%.2f",totalPrice] }; [dic setValue:total_price_dic forKey:[NSString stringWithFormat:@"item_%d",item_count++]]; NSDictionary *total_cuft_dic = @{ @"align" : @"right", @"aname" : @"Total Cuft", @"control" : @"text", @"name" : @"", @"value" : [NSString stringWithFormat:@"%.2f",totalCuft] }; [dic setValue:total_cuft_dic forKey:[NSString stringWithFormat:@"item_%d",item_count++]]; NSDictionary *total_weight_dic = @{ @"align" : @"right", @"aname" : @"Total Weight", @"control" : @"text", @"name" : @"", @"value" : [NSString stringWithFormat:@"%.2f",totalWeight] }; [dic setValue:total_weight_dic forKey:[NSString stringWithFormat:@"item_%d",item_count++]]; NSDictionary *total_carton_dic = @{ @"align" : @"right", @"aname" : @"Total Carton", @"control" : @"text", @"name" : @"", @"value" : [NSString stringWithFormat:@"%d",totalCarton] }; [dic setValue:total_carton_dic forKey:[NSString stringWithFormat:@"item_%d",item_count++]]; [dic setValue:[NSNumber numberWithInteger:item_count] forKey:@"count"]; return dic; } + (NSDictionary *)signatureDic:(NSDictionary *)params db:(sqlite3 *)db { NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; // setting NSDictionary *setting = params[@"setting"]; NSNumber *hide = setting[@"SignatureHide"]; [dic setValue:hide forKey:@"hide"]; [dic setValue:@"Signature" forKey:@"title"]; __block NSString *pic_path = @""; NSString *sql = [NSString stringWithFormat:@"select sign_picpath from offline_order where so_id = '%@';",orderCode]; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { pic_path = [self textAtColumn:0 statement:stmt]; }]; NSDictionary *pic_dic = @{ @"aname" : @"Signature", @"avalue" :pic_path, @"control" : @"signature", @"name" : @"sign_picpath", @"value" : pic_path }; [dic setValue:pic_dic forKey:@"item_0"]; [dic setValue:[NSNumber numberWithInteger:1] forKey:@"count"]; return dic; } + (NSDictionary *)shippingMethodDic:(NSMutableDictionary *)params db:(sqlite3 *)db { NSMutableDictionary *dic = [NSMutableDictionary dictionary]; // setting NSDictionary *setting = params[@"setting"]; NSNumber *hide = setting[@"ShippingMethodHide"]; [dic setValue:hide forKey:@"hide"]; NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; NSString *sql = [NSString stringWithFormat:@"select logist,lift_gate,logistic_note,carrier from offline_order where so_id = '%@';",orderCode]; __block NSString *logist = @""; __block NSString *carrier = @""; __block NSString *lift_gate = @""; __block int lift_gate_integer = 0; __block NSString *logistic_note = @""; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { logist = [self textAtColumn:0 statement:stmt]; lift_gate_integer = sqlite3_column_int(stmt, 1); logistic_note = [self textAtColumn:2 statement:stmt]; carrier = [self textAtColumn:3 statement:stmt]; }]; [dic setValue:[NSNumber numberWithInteger:1] forKey:@"count"]; [dic setValue:@"Shipping Method" forKey:@"title"]; // val_0 int PERSONAL_PICK_UP_check = 0; int USE_MY_CARRIER_check = 0; NSString *logistic_note_text = @""; int will_call_check = 0; if (logist && [logist isEqualToString:@"WILL CALL"]) { will_call_check = 1; if ([logistic_note containsString:@"PERSONAL PICK UP"]) { PERSONAL_PICK_UP_check = 1; } else if ([logistic_note containsString:@"USE MY CARRIER"]) { USE_MY_CARRIER_check = 1; NSArray *logistic_note_array = [logistic_note componentsSeparatedByString:@"\n\t"]; logistic_note = [logistic_note_array firstObject]; if (logistic_note_array.count > 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"; } } // carrier = [self valueInParams:params key:@"carrier"]; // if([carrier 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"]; #ifdef BUILD_CONTRAST [params setValue:carrier forKey:@"carrier"]; #endif } // NSString *Sql = [NSString stringWithFormat: @"select carrier from offline_contact where contact_id = %d;",contact_id]; // NSString * code = [iSalesDB jk_queryText:Sql]; // [self offline_getCarrierCode:offline_getCarrierCode]; NSDictionary *carrierDic = [self offline_OrderCarrier:params[@"orderCode"] db:db]; NSDictionary *val_1 = @{ @"check" : [NSNumber numberWithInteger:common_carrier_check], @"sub_item" : @{ @"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 }, #ifdef BUILD_CONTRAST @"count" : [NSNumber numberWithInteger:2], @"item_1" : @{ @"aname" : @"Carrier", @"cadedate" :carrierDic, @"control" : @"enum", @"name" : @"carrier", @"required" : @"false", @"value" : @"", @"single_select" : @"true" } #else @"count" : [NSNumber numberWithInteger:1] #endif }, @"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"]; if ([logist isEqualToString:@"WILL CALL"]) { [dic removeObjectForKey:@"lift_gate"]; } 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]; [ret removeObjectForKey:@"result"]; // 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 numberWithLong: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"; } __block NSMutableDictionary *cadedate = [NSMutableDictionary dictionary]; // create table if not exists payment_type (_id integer primary key,type_id text,pay_type text,sort int); NSString *pay_type_sql = @"select type_id,pay_type,sort_id from payment_type order by sort_id asc"; [iSalesDB jk_query:pay_type_sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSString *type_id = [self textAtColumn:0 statement:stmt]; NSString *type = [self textAtColumn:1 statement:stmt]; NSMutableDictionary *val = @{ @"check" : [payType isEqualToString:type_id] ? @(1) : @(0), @"value" : type, @"value_id" : type_id }.mutableCopy; if ([type_id.lowercaseString isEqualToString:@"Visa/Master".lowercaseString] || [type_id.lowercaseString isEqualToString:@"Credit Card".lowercaseString]) { NSDictionary *sub_item =nil; #ifdef BUILD_CONTRAST sub_item = @{ @"count" : @(3), @"item_0" : @{ @"aname" : @"Number", @"control" : @"edit", @"keyboard" : @"int", @"length" : @"16", @"name" : @"credit_card_number", @"required" : @"false", @"value" : cardNumber }, @"item_1" : @{ @"aname" : @"Expiration Date", @"control" : @"monthpicker", @"name" : @"credit_card_expiration", @"required" : @"false", @"type" : @"date", @"value" : [month isEqualToString:@""] || [year isEqualToString:@""] ? @"" : [NSString stringWithFormat:@"%@/%@",month,year] }, @"item_2" : @{ @"aname" : @"Security Code", @"control" : @"edit", @"keyboard" : @"int", @"length" : @"4", @"name" : @"credit_card_security_code", @"required" : @"false", @"value" : securityCode }, }; #else 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" : @"VISA"/*@(0)*/ }, @"val_1" : @{ @"check" : [cardType isEqualToString:@"MASTER CARD"] ? @(1) : @(0), @"value" : @"MASTER CARD", @"value_id" : @"MASTER CARD"/*@(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" } }; #endif; [val setObject:sub_item forKey:@"sub_item"]; } [cadedate setObject:val forKey:[NSString stringWithFormat:@"val_%ld",(*count)]]; [cadedate setObject:[NSNumber numberWithInteger:(++*count)] forKey:@"count"]; }]; // "section_2" NSMutableDictionary *dic = @{ @"count" : @(1), @"item_0" : @{ @"aname" : @"Payment", @"required" : required, @"cadedate" : cadedate, // @{ // @"count" : @(6), // @"val_3" : @{ // @"check" : [payType isEqualToString:@"Check"] ? @(1) : @(0), // @"value" : @"Check", // @"value_id" : @"Check" // }, // @"val_2" : @{ // @"check" : [payType isEqualToString:@"Cash"] ? @(1) : @(0), // @"value" : @"Cash", // @"value_id" : @"Cash" // }, // @"val_1" : @{ // @"check" : [payType isEqualToString:@"NET 30"] ? @(1) : @(0), // @"value" : @"NET 60", // @"value_id" : @"NET 30" // }, // @"val_4" : @{ // @"check" : [payType isEqualToString:@"Wire Transfer"] ? @(1) : @(0), // @"value" : @"Wire Transfer", // @"value_id" : @"Wire Transfer" // }, // @"val_0" : @{ // @"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" : @"Visa/Master", // @"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; } + (BOOL)orderOutOfStock:(NSDictionary *)params db:(sqlite3 *)db{ // params NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; // 缺货检查 NSString *out_of_stock_SQL = [NSString stringWithFormat:@"select p.availability,c.item_count from product as p left join offline_cart as c on p.product_id = c.product_id where c.so_no = '%@';",orderCode]; __block BOOL outOfStock = NO; sqlite3 *database = db; if (!db) { database = [iSalesDB get_db]; } [iSalesDB jk_query:out_of_stock_SQL db:database close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { int availability = sqlite3_column_int(stmt, 0); int item_qty = sqlite3_column_int(stmt, 1); outOfStock = outOfStock || (availability < item_qty ? YES : NO); }]; if (!db) { [iSalesDB close_db:database]; } return outOfStock; } +(NSData*) offline_placeorder :(NSMutableDictionary *) params { assert(params[@"user"]!=nil); assert(params[@"contact_id"]!=nil); assert(params[@"can_create_backorder"]!=nil); sqlite3 *db = [iSalesDB get_db]; // params NSString *orderCode = [self valueInParams:params key:@"orderCode"]; orderCode = [self translateSingleQuote:orderCode]; // 缺货检查 // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; if (![params[@"can_create_backorder"] boolValue]) { BOOL out_of_stock = [self orderOutOfStock:params db:db]; if (out_of_stock) { [iSalesDB close_db:db]; NSMutableDictionary *resultDic = [NSMutableDictionary dictionary]; [resultDic setObject:[NSString stringWithFormat:@"some item(s) are out of stock,please remove them from cart before placing order with %@ or try again after sync",COMPANY_SHORT_NAME] forKey:@"err_msg"]; [resultDic setObject:[NSNumber numberWithInt:8] forKey:@"result"]; return [RAConvertor dict2data:resultDic]; } } // 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; // 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 [RAConvertor 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; // } NSString *country_code = nil; NSString *zipCode = nil; NSString *stateCode = nil; NSString *city = nil; if ([params.allKeys containsObject:@"refresh_trigger"]) { if([params[@"refresh_trigger"] isEqualToString:@"country"]) { // choose country NSString *code_id = params[@"country"]; country_code = [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) { NSDictionary *dic = [self offline_dealZipCode:zip_code]; country_code = [dic valueForKey:@"country_code"]; if (!country_code) { // country_code = @"US"; NSString *code_id = params[@"country"]; country_code = [self countryCodeByid:code_id]; } stateCode = [dic valueForKey:@"state_code"]; if(!stateCode.length) { stateCode = params[@"state"]; } city = [dic valueForKey:@"city"]; if (!city.length) { city = params[@"city"]; } // zip code // NSMutableDictionary *zipDic = [[section_0 valueForKey:@"item_11"] mutableCopy]; // [zipDic setValue:zipCode forKey:@"value"]; // [section_0 setValue:zipDic forKey:@"item_11"]; } else { NSString *code_id = params[@"country"]; country_code = [self countryCodeByid:code_id]; stateCode = params[@"state"]; city = params[@"city"]; } } } 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_6"] 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_7"] add:YES] forKey:@"item_2"]; // Address 1* [new_section_0 setObject:section_0[@"item_8"] forKey:@"item_3"]; // Address 2 [new_section_0 setObject:section_0[@"item_9"] forKey:@"item_4"]; // Address 3 [new_section_0 setObject:section_0[@"item_10"] forKey:@"item_5"]; // Address 4 NSMutableDictionary *zip_code_dic = [self anameDealWithStarAtItem:section_0[@"item_11"] add:YES]; // [zip_code_dic removeObjectForKey:@"refresh"]; [zip_code_dic setValue:zipCode ? zipCode :@"" forKey:@"value"]; [new_section_0 setObject:zip_code_dic forKey:@"item_6"]; // Zip Code* [new_section_0 setObject:[self anameDealWithStarAtItem:section_0[@"item_12"] add:YES] forKey:@"item_7"]; // State/Province* [new_section_0 setObject:[self anameDealWithStarAtItem:section_0[@"item_13"] add:YES] forKey:@"item_8"]; // City* NSDictionary *cityDic = [[new_section_0 objectForKey:@"item_8"] mutableCopy]; [cityDic setValue:city ? city : @"" forKey:@"value"]; [new_section_0 setObject:cityDic forKey:@"item_8"]; [new_section_0 setObject:section_0[@"item_14"] forKey:@"item_9"]; // Contact First Name [new_section_0 setObject:section_0[@"item_15"] forKey:@"item_10"]; // Contact Last Name [new_section_0 setObject:section_0[@"item_5"] forKey:@"item_11"]; // Phone* [new_section_0 setObject:section_0[@"item_16"] forKey:@"item_12"]; // Fax [new_section_0 setObject:[self anameDealWithStarAtItem:section_0[@"item_4"] add:NO] forKey:@"item_13"]; // Email [new_section_0 setObject:section_0[@"title"] forKey:@"title"]; // country NSString *countryCode = country_code == nil ? @"US" : country_code; 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:stateCode] 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 [RAConvertor 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]; if (order_id.length) { 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 [RAConvertor dict2data:dic]; } #pragma mark sign order +(NSData*) offline_signorder :(NSMutableDictionary *) params { //参考 offline_saveBusinesscard DebugLog(@"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 [RAConvertor 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* schedule_date = [self valueInParams:param key:@"schedule_date_str"]; if (schedule_date.length==0 ) { schedule_date = @""; } else { schedule_date = [self rchangeDateFormate:schedule_date]; schedule_date = [NSString stringWithFormat:@"schedule_date = '%@',",schedule_date]; } 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]; if (receive_cid.length) { receive_cid = [NSString stringWithFormat:@"receive_cid = '%@',",receive_cid]; } NSString *receive_name = [self valueInParams:param key:@"receive_name" translateSingleQuote:YES]; if (receive_name.length) { receive_name = [NSString stringWithFormat:@"receive_name = '%@',",receive_name]; } NSString *receive_ext = [self valueInParams:param key:@"receive_ext" translateSingleQuote:YES]; if (receive_ext.length) { receive_ext = [NSString stringWithFormat:@"receive_ext = '%@',",receive_ext]; } NSString *receive_contact = [self valueInParams:param key:@"receive_contact" translateSingleQuote:YES]; if (receive_contact.length) { receive_contact = [NSString stringWithFormat:@"receive_contact = '%@',",receive_contact]; } NSString *receive_phone = [self valueInParams:param key:@"receive_phone" translateSingleQuote:YES]; if (receive_phone.length) { receive_phone = [NSString stringWithFormat:@"receive_phone = '%@',",receive_phone]; } NSString *receive_email = [self valueInParams:param key:@"receive_email" translateSingleQuote:YES]; if (receive_email.length) { receive_email = [NSString stringWithFormat:@"receive_email = '%@',",receive_email]; } NSString *receive_fax = [self valueInParams:param key:@"receive_fax" translateSingleQuote:YES]; if (receive_fax.length) { receive_fax = [NSString stringWithFormat:@"receive_fax = '%@',",receive_fax]; } NSString *sender_cid = [self valueInParams:param key:@"sender_cid" translateSingleQuote:YES]; if (sender_cid.length) { sender_cid = [NSString stringWithFormat:@"sender_cid = '%@',",sender_cid]; } NSString *sender_name = [self valueInParams:param key:@"sender_name" translateSingleQuote:YES]; if (sender_name.length) { sender_name = [NSString stringWithFormat:@"sender_name = '%@',",sender_name]; } NSString *sender_ext = [self valueInParams:param key:@"sender_ext" translateSingleQuote:YES]; if (sender_ext.length) { sender_ext = [NSString stringWithFormat:@"sender_ext = '%@',",sender_ext]; } NSString *sender_contact = [self valueInParams:param key:@"sender_contact" translateSingleQuote:YES]; if(sender_contact.length) { sender_contact = [NSString stringWithFormat:@"sender_contact = '%@',",sender_contact]; } NSString *sender_phone = [self valueInParams:param key:@"sender_phone" translateSingleQuote:YES]; if (sender_phone.length) { sender_phone = [NSString stringWithFormat:@"sender_phone = '%@',",sender_phone]; } NSString *sender_fax = [self valueInParams:param key:@"sender_fax" translateSingleQuote:YES]; if (sender_fax.length) { sender_fax = [NSString stringWithFormat:@"sender_fax = '%@',",sender_fax]; } NSString *sender_email = [self valueInParams:param key:@"sender_email" translateSingleQuote:YES]; if (sender_email.length) { sender_email = [NSString stringWithFormat:@"sender_email = '%@',",sender_email]; } NSString *shipping_billto_cid = [self valueInParams:param key:@"shipping_billto_cid" translateSingleQuote:YES]; if (shipping_billto_cid.length) { shipping_billto_cid = [NSString stringWithFormat:@"shipping_billto_cid = '%@',",shipping_billto_cid]; } NSString *shipping_billto_name = [self valueInParams:param key:@"shipping_billto_name" translateSingleQuote:YES]; if (shipping_billto_name.length) { shipping_billto_name = [NSString stringWithFormat:@"shipping_billto_name = '%@',",shipping_billto_name]; } NSString *shipping_billto_ext = [self valueInParams:param key:@"shipping_billto_ext" translateSingleQuote:YES]; if (shipping_billto_ext.length) { shipping_billto_ext = [NSString stringWithFormat:@"shipping_billto_ext = '%@',",shipping_billto_ext]; } NSString *shipping_billto_contact = [self valueInParams:param key:@"shipping_billto_contact" translateSingleQuote:YES]; if (shipping_billto_contact.length) { shipping_billto_contact = [NSString stringWithFormat:@"shipping_billto_contact = '%@',",shipping_billto_contact]; } NSString *shipping_billto_phone = [self valueInParams:param key:@"shipping_billto_phone" translateSingleQuote:YES]; if (shipping_billto_phone.length) { shipping_billto_phone = [NSString stringWithFormat:@"shipping_billto_phone = '%@',",shipping_billto_phone]; } NSString *shipping_billto_fax = [self valueInParams:param key:@"shipping_billto_fax" translateSingleQuote:YES]; if (shipping_billto_fax.length) { shipping_billto_fax = [NSString stringWithFormat:@"shipping_billto_fax = '%@',",shipping_billto_fax]; } NSString *shipping_billto_email = [self valueInParams:param key:@"shipping_billto_email" translateSingleQuote:YES]; if (shipping_billto_email.length) { shipping_billto_email = [NSString stringWithFormat:@"shipping_billto_email = '%@',",shipping_billto_email]; } NSString *billing_cid = [self valueInParams:param key:@"billing_cid" translateSingleQuote:YES]; if (billing_cid.length) { billing_cid = [NSString stringWithFormat:@"billing_cid = '%@',",billing_cid]; } NSString *billing_name = [self valueInParams:param key:@"billing_name" translateSingleQuote:YES]; if (billing_name.length) { billing_name = [NSString stringWithFormat:@"billing_name = '%@',",billing_name]; } NSString *billing_ext = [self valueInParams:param key:@"billing_ext" translateSingleQuote:YES]; if (billing_ext.length) { billing_ext = [NSString stringWithFormat:@"billing_ext = '%@',",billing_ext]; } NSString *billing_contact = [self valueInParams:param key:@"billing_contact" translateSingleQuote:YES]; if (billing_contact.length) { billing_contact = [NSString stringWithFormat:@"billing_contact = '%@',",billing_contact]; } NSString *billing_phone = [self valueInParams:param key:@"billing_phone" translateSingleQuote:YES]; if (billing_phone.length) { billing_phone = [NSString stringWithFormat:@"billing_phone = '%@',",billing_phone]; } NSString *billing_fax = [self valueInParams:param key:@"billing_fax" translateSingleQuote:YES]; if (billing_fax.length) { billing_fax = [NSString stringWithFormat:@"billing_fax = '%@',",billing_fax]; } NSString *billing_email = [self valueInParams:param key:@"billing_email" translateSingleQuote:YES]; if (billing_email.length) { billing_email = [NSString stringWithFormat:@"billing_email = '%@',",billing_email]; } NSString *returnto_cid = [self valueInParams:param key:@"returnto_cid" translateSingleQuote:YES]; if (returnto_cid.length) { returnto_cid = [NSString stringWithFormat:@"returnto_cid = '%@',",returnto_cid]; } NSString *returnto_name = [self valueInParams:param key:@"returnto_name" translateSingleQuote:YES]; if (returnto_name.length) { returnto_name = [NSString stringWithFormat:@"returnto_name = '%@',",returnto_name]; } NSString *returnto_ext = [self valueInParams:param key:@"returnto_ext" translateSingleQuote:YES]; if (returnto_ext.length) { returnto_ext = [NSString stringWithFormat:@"returnto_ext = '%@',",returnto_ext]; } NSString *returnto_contact = [self valueInParams:param key:@"returnto_contact" translateSingleQuote:YES]; if (returnto_contact.length) { returnto_contact = [NSString stringWithFormat:@"returnto_contact = '%@',",returnto_contact]; } NSString *returnto_phone = [self valueInParams:param key:@"returnto_phone" translateSingleQuote:YES]; if (returnto_phone.length) { returnto_phone = [NSString stringWithFormat:@"returnto_phone = '%@',",returnto_phone]; } NSString *returnto_fax = [self valueInParams:param key:@"returnto_fax" translateSingleQuote:YES]; if (returnto_fax.length) { returnto_fax = [NSString stringWithFormat:@"returnto_fax = '%@',",returnto_fax]; } NSString *returnto_email = [self valueInParams:param key:@"returnto_email" translateSingleQuote:YES]; if (returnto_email.length) { 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* carrier = [self offline_getCarrier:[param[@"carrier"] intValue]]; NSString* scarrier = [NSString stringWithFormat:@"carrier = '%@',",carrier]; NSString *sync_sql = @""; if (submit) { param[@"truck_carrier"]=carrier; 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:[RAConvertor dict2string:param]]; sync_sql = [NSString stringWithFormat:@",sync_data = '%@' ",sync_data]; } NSString *orderSql = [NSString stringWithFormat:@"update offline_order set %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ so_id = '%@' %@ where so_id = '%@';",schedule_date, 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,scarrier,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 [RAConvertor 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_add2cartbymodelQR :(NSMutableDictionary *) params { NSString *orderCode = [params objectForKey:@"orderCode"]; NSDictionary *newParams = @{ @"product_id" : params[@"product_id_string"], @"orderCode" : orderCode, @"can_create_backorder":params[@"can_create_backorder"] }; return [self offline_add2cart:[newParams mutableCopy]]; } +(NSData*) offline_add2cartbyupc :(NSMutableDictionary *) params { NSString *orderCode = [params objectForKey:@"orderCode"]; NSString *upccode = [params objectForKey:@"upc_code"]; // product_name = [self translateSingleQuote:product_name]; // NSArray *product_name_array = [product_name componentsSeparatedByString:@","]; // bool search_upc = [params[@"search_upc"] boolValue]; sqlite3 *db = [iSalesDB get_db]; __block NSMutableString *product_id_string = [NSMutableString string]; // NSString *name = [product_name_array objectAtIndex:i]; NSString *sql =nil; sql= [NSString stringWithFormat:@"select product_id from product where upc_code = '%@' or upc_code like '%@;%%' or upc_code like '%%;%@;%%' or upc_code like '%%;%@';",upccode,upccode,upccode,upccode]; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { int product_id = sqlite3_column_int(stmt, 0); [product_id_string appendFormat:@"%d",product_id]; }]; if (!orderCode) { orderCode = @""; } NSDictionary *newParams = @{ @"product_id" : product_id_string, @"orderCode" : orderCode, @"can_create_backorder":params[@"can_create_backorder"] }; [iSalesDB close_db:db]; return [self offline_add2cart:[newParams mutableCopy]]; } +(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:@","]; bool search_upc = [params[@"search_upc"] boolValue]; 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 =nil; if(search_upc) sql= [NSString stringWithFormat:@"select product_id from product where upc_code = '%@' or upc_code like '%@;%%' or upc_code like '%%;%@;%%' or upc_code like '%%;%@';",name,name,name,name]; else 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]; } }]; } if (!orderCode) { orderCode = @""; } NSDictionary *newParams = @{ @"product_id" : product_id_string, @"orderCode" : orderCode, @"can_create_backorder":params[@"can_create_backorder"] }; [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]; [iSalesDB disable_trigger]; [iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"]; [iSalesDB execSql:@"delete from offline_order where status=0;"]; [iSalesDB enable_trigger]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[NSNumber numberWithInteger:2] forKey:@"result"]; return [RAConvertor 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 [RAConvertor 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 =params[@"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,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,sales_terms) select '%@',1,submit_as,internal_notes,sales_rep,'%@',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,sales_terms 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 [RAConvertor 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 [RAConvertor dict2data:ret]; } #pragma mark move wish list to cart + (NSData*)offline_movewish2cart:(NSMutableDictionary *)params { assert(params[@"can_create_backorder"]!=nil); // cart中存在的Model在wish list move to cart之后,cart中Model数量为1 // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; NSString *collectId = params[@"collectId"]; NSString *sql = [NSString stringWithFormat:@"select w.product_id,w.qty,p.availability,w._id from wishlist as w left join product as p on w.product_id = p.product_id where w._id in (%@);",collectId]; __block NSString *product_id = @""; __block NSString *qty = @""; __block int number_of_outOfStock = 0; __block NSMutableArray *delete_collectId = [NSMutableArray array]; [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); int availability = sqlite3_column_int(stmt, 2); int _id = sqlite3_column_int(stmt, 3); if (![params[@"can_create_backorder"] boolValue]) { // 库存小于购买量为缺货 if (availability >= item_qty) { product_id = [product_id stringByAppendingString:[NSString stringWithFormat:@",%d",productId]]; qty = [qty stringByAppendingString:[NSString stringWithFormat:@",%d",item_qty]]; [delete_collectId addObject:[NSString stringWithFormat:@"%d",_id]]; } else { number_of_outOfStock++; } } else { product_id = [product_id stringByAppendingString:[NSString stringWithFormat:@",%d",productId]]; qty = [qty stringByAppendingString:[NSString stringWithFormat:@",%d",item_qty]]; [delete_collectId addObject:[NSString stringWithFormat:@"%d",_id]]; } }]; NSMutableDictionary *retDic = nil; if (![params[@"can_create_backorder"] boolValue]) { if (delete_collectId.count == 0) { retDic = [NSMutableDictionary dictionary]; retDic[@"result"] = [NSNumber numberWithInteger:8]; retDic[@"err_msg"] = [NSString stringWithFormat:@"%d item is out of stock",number_of_outOfStock]; return [RAConvertor dict2data:retDic]; } } if (product_id.length > 1) { product_id = [product_id substringFromIndex:1]; } if (qty.length > 1) { qty = [qty substringFromIndex:1]; } NSString *orderCode = params[@"orderCode"]; if (!orderCode) { orderCode = @""; } NSDictionary *newParams = @{ @"product_id" : product_id, @"orderCode" : orderCode, @"qty" : qty, @"can_create_backorder":params[@"can_create_backorder"] }; NSData *data = [self offline_add2cart:newParams.mutableCopy]; retDic = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy]; if ([retDic[@"result"] integerValue] == RESULT_TRUE) { NSMutableDictionary* wish_return = [[self offline_deletewishlist:@{@"collectId" : [delete_collectId componentsJoinedByString:@","]}.mutableCopy] mutableCopy]; NSInteger ret = [wish_return[@"result"] intValue]; retDic[@"wish_count"]=wish_return[@"wish_count"]; retDic[@"result"] = [NSNumber numberWithInteger:ret]; } if (![params[@"can_create_backorder"] boolValue]) { if (number_of_outOfStock > 0) { retDic[@"result"] = [NSNumber numberWithInteger:8]; retDic[@"err_msg"] = [NSString stringWithFormat:@"%d item is out of stock",number_of_outOfStock]; } } return [RAConvertor dict2data:retDic]; } #pragma mark - portfolio + (NSData *)offline_portfolioList:(NSMutableDictionary *)params { // assert(params[@"contact_id"]!=nil); assert(params[@"user"]!=nil); assert(params[@"can_see_price"]!=nil); int sort = [[params valueForKey:@"sort"] intValue]; int offset = [[params valueForKey:@"offset"] intValue]; int limit = [[params valueForKey:@"limit"] intValue]; NSString *orderBy = @""; switch (sort) { case 0:{ orderBy = @"p.modify_time desc"; } break; case 1:{ orderBy = @"modify_time asc"; } break; case 2:{ orderBy = @"p.name asc"; } break; case 3:{ orderBy = @"p.name desc"; } break; case 4:{ orderBy = @"p.description asc"; } break; case 5: { orderBy = @"m.default_category asc"; } default: break; } // NSString *sql = [NSString stringWithFormat:@"select p.product_id,p.name,p.description,ifnull(p.sheet_price,'null'),p.sheet_discount,ifnull(p.available_qty,'null'),p.percentage,p.item_id,p.fashion_id,i.url,p.line_note,p.percent from offline_portfolio as p left join model_image as i on i.product_id = p.product_id where i.type = 1 and (p.is_delete is null or p.is_delete = 0) group by p.product_id order by %@ limit %d offset %d;",orderBy,limit,offset]; NSString *sql = [NSString stringWithFormat:@"select * from (select p.product_id,p.name,p.description,ifnull(p.sheet_price,'null'),p.sheet_discount,ifnull(p.available_qty,'null'),p.percentage,p.item_id,p.fashion_id,i.url,p.line_note,p.percent,p.modify_time from offline_portfolio as p left join model_image as i on i.product_id = p.product_id where i.type = 1 and (p.is_delete is null or p.is_delete = 0) group by p.product_id limit %d offset %d) as p left join product as m on p.product_id = m.product_id order by %@;",limit,offset,orderBy]; __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; sqlite3 *db = [iSalesDB get_db]; NSDictionary *resultDic = [iSalesDB jk_query:sql db:db close:NO 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); NSString *price_null = [self textAtColumn:3 statement:stmt]; if ([price_null isEqualToString:@"null"]) { price = [[self get_model_default_price:params[@"contact_id"] user:params[@"user"] product_id:nil item_id:@(item_id) db:db] doubleValue]; } NSMutableDictionary *item = @{ @"linenotes": line_note, @"check": @(1), @"product_id": product_id_string, @"available_qty": @(qty), @"available_percent" : @(percent), @"description": [NSString stringWithFormat:@"%@\n%@",name,description], @"item_id": [NSString stringWithFormat:@"%d",item_id], @"fashion_id": [NSString stringWithFormat:@"%d",product_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"]; } NSString *qty_null = [self textAtColumn:5 statement:stmt]; if ([qty_null isEqualToString:@"null"]) { [item removeObjectForKey:@"available_qty"]; } [dic setObject:item forKey:[NSString stringWithFormat:@"item_%ld",*count]]; [dic setValue:[NSNumber numberWithLong:++(*count)] forKey:@"count"]; }]; if ([[resultDic objectForKey:@"result"] integerValue] == RESULT_FALSE) { [dic setValue:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"]; [dic setValue:[NSNumber numberWithInteger:0] forKey:@"count"]; } [iSalesDB close_db:db]; [dic setValue:[NSNumber numberWithBool:[params[@"can_see_price"] boolValue]] forKey:@"can_see_price"]; [dic setValue:@"" forKey:@"email_content"]; [dic setValue:[dic objectForKey:@"count"] forKey:@"total_count"]; [dic setValue:@"Regular Mode" forKey:@"mode"]; return [RAConvertor dict2data:dic]; } + (int)model_QTY:(NSString *)product_id db:(sqlite3 *)db { __block int qty = 0; NSString *sql = [NSString stringWithFormat:@"select availability from product where product_id = %@;",product_id]; [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { qty = sqlite3_column_int(stmt, 0); }]; return qty; } + (NSData *)offline_savePDF:(NSMutableDictionary *)params direct:(BOOL)direct contact_id:(NSString* ) contact_id { NSMutableDictionary *resultDictionary = [NSMutableDictionary dictionary]; [resultDictionary setObject:@"Regular Mode" forKey:@"mode"]; // NSMutableDictionary * values = params[@"replaceValue"]; NSNumber *tear_sheet_id = [params objectForKey:@"tearsheetsId"]; // _id NSString *tear_name = [self valueInParams:params key:@"pdfName"]; NSString *tear_note = [self valueInParams:params key:@"pdfNote"]; NSString *configureParams = [self valueInParams:params key:@"configureParams"]; NSString *pdf_path = @""; if (direct) { configureParams = [self valueInParams:params key:@"pdfUrl"]; } else { pdf_path = [self valueInParams:params key:@"pdfPath"]; } NSString *create_user = [self valueInParams:params key:@"user"]; NSString *product_ids = [self valueInParams:params key:@"product_ids"]; NSString *item_ids = [self valueInParams:params key:@"item_ids"]; // model info // NSString *sql = [NSString stringWithFormat:@"select product_id,ifnull(sheet_price,'null'),ifnull(sheet_discount,'null'),ifnull(available_qty,'null'),percentage,item_id,line_note,percent from offline_portfolio where product_id in (%@);",product_ids]; // V1.90 more color NSString *sql = [NSString stringWithFormat:@"select p.product_id,ifnull(p.sheet_price,'null'),ifnull(p.sheet_discount,'null'),ifnull(p.available_qty,'null'),p.percentage,p.item_id,p.line_note,p.percent,m.more_color from offline_portfolio as p left join product as m on p.product_id = m.product_id where p.product_id in (%@);",product_ids]; __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; __block NSMutableString *product_ids_string = [NSMutableString string]; // configure参数 // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; sqlite3 *db = [iSalesDB get_db]; NSDictionary *resultDic = [iSalesDB jk_query:sql db:db close:NO 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]; double price = sqlite3_column_double(stmt, 1); double discount = sqlite3_column_double(stmt,2); int qty = sqlite3_column_int(stmt, 3); int percentage = sqlite3_column_int(stmt, 4); int item_id = sqlite3_column_int(stmt, 5); NSString *line_note = [self textAtColumn:6 statement:stmt]; double percent = sqlite3_column_double(stmt, 7); int more_color = sqlite3_column_int(stmt, 8); NSString *price_null = [self textAtColumn:1 statement:stmt]; /* if ([price_null isEqualToString:@"null"]) { price = [[self get_model_default_price:appDelegate.contact_id product_id:nil item_id:@(item_id) db:db] doubleValue]; } */ [product_ids_string appendFormat:@"%@,",product_id_string]; // Regular Price int regular_price = [[params objectForKey:@"regular_price"] intValue]; NSString *regular_price_str = [self get_portfolio_price:contact_id item_id:item_id price:regular_price db:db]; // QTY NSString *qty_null = [self textAtColumn:3 statement:stmt]; if ([qty_null isEqualToString:@"null"]) { // 查available qty = [self model_QTY:product_id_string db:db]; } if (percentage) { qty = qty * percent / 100; } // Special Price if ([price_null isEqualToString:@"null"]) { // price = regular price price = [regular_price_str doubleValue]; } NSString *discount_null = [self textAtColumn:2 statement:stmt]; if (![discount_null isEqualToString:@"null"]) { price = price * (1 - discount / 100.0); } NSMutableDictionary *item = @{ @"line_note": line_note, @"product_id": product_id_string, @"available_qty": @(qty), @"more_color":@(more_color), @"item_id": [NSString stringWithFormat:@"%d",item_id], @"regular_price" : regular_price_str, @"special_price" : [NSString stringWithFormat:@"%.2f",price] }.mutableCopy; [dic setObject:item forKey:[NSString stringWithFormat:@"item_%ld",*count]]; [dic setValue:[NSNumber numberWithLong:++(*count)] forKey:@"count"]; }]; [iSalesDB close_db:db]; if (product_ids_string.length > 0) { [product_ids_string deleteCharactersInRange:NSMakeRange(product_ids_string.length - 1, 1)]; } if ([[resultDic objectForKey:@"result"] integerValue] != RESULT_TRUE) { [resultDictionary setObject:[resultDic objectForKey:@"result"] forKey:@"result"]; return [RAConvertor dict2data:resultDictionary]; } NSString *model_info = [RAConvertor dict2string:dic]; // 创建PDF // 在preview情况下保存,则不需要新建了 if (direct) { NSMutableDictionary *tear_sheet_params = params; // if (tear_sheet_id) { // tear_sheet_params = values; // } NSData *pdfData = [self offline_request_tearsheet:tear_sheet_params]; // 新建PDF,获取本地路径 NSDictionary *pdfInfo = [NSJSONSerialization JSONObjectWithData:pdfData options:NSJSONReadingMutableContainers error:nil]; pdf_path = [pdfInfo objectForKey:@"pdf_path"]; if ([[pdfInfo objectForKey:@"result"] integerValue] == RESULT_TRUE) { resultDictionary = pdfInfo.mutableCopy; } else { // 创建PDF失败 return pdfData; } } else { // pdf_path 就是本地路径 [resultDictionary setObject:pdf_path forKey:@"pdf_path"]; } // 将文件移动到PDF Cache文件夹 NSString *newPath = [pdf_path lastPathComponent]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachefolder = [paths objectAtIndex:0]; NSString *pdfFolder = [cachefolder stringByAppendingPathComponent:@"pdf_cache"]; newPath = [pdfFolder stringByAppendingPathComponent:newPath]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error = nil; [fileManager moveItemAtPath:pdf_path toPath:newPath error:&error]; if (error) { // 移动文件失败 [resultDictionary setObject:[NSNumber numberWithInt:RESULT_FALSE] forKey:@"result"]; return [RAConvertor dict2data:resultDictionary]; } [resultDictionary setObject:newPath forKey:@"pdf_path"]; pdf_path = [newPath lastPathComponent]; // 保存信息 // [params setObject:[params objectForKey:@"product_ids"] forKey:@"productIds"]; NSString *off_params = [RAConvertor dict2string:params]; // configureParams = [configureParams stringByAppendingFormat:@"productIds=%@",product_ids_string]; pdf_path = [self translateSingleQuote:pdf_path]; create_user = [self translateSingleQuote:create_user]; tear_note = [self translateSingleQuote:tear_note]; tear_name = [self translateSingleQuote:tear_name]; model_info = [self translateSingleQuote:model_info]; configureParams = [self translateSingleQuote:configureParams]; off_params = [self translateSingleQuote:off_params]; NSString *save_pdf_sql = [NSString stringWithFormat:@"insert into offline_pdf (pdf_path,create_user,tear_note,tear_name,model_info,configureParams,is_local,off_params) values ('%@','%@','%@','%@','%@','%@',1,'%@');",pdf_path,create_user,tear_note,tear_name,model_info,configureParams,off_params]; if (tear_sheet_id) { int _id = [tear_sheet_id intValue]; save_pdf_sql = [NSString stringWithFormat:@"update offline_pdf set pdf_path = '%@' where _id = %d;",pdf_path,_id]; } int result = [iSalesDB execSql:save_pdf_sql]; [resultDictionary setObject:[NSNumber numberWithInt:result] forKey:@"result"]; // BOOL remove_Item = [[params objectForKey:@"remove_item"] boolValue]; if (remove_Item) { // portfolioId [self offline_removePortfolio:@{@"portfolioId" : item_ids}.mutableCopy]; } return [RAConvertor dict2data:resultDictionary]; } + (NSData *)offline_direct_save_TearSheet:(NSMutableDictionary *)params { return [self offline_savePDF:params direct:YES contact_id:params[@"contact_id"]]; } + (NSData *)offline_save_TearSheet:(NSMutableDictionary *)params { return [self offline_savePDF:params direct:NO contact_id:params[@"contact_id"]]; } + (NSData *)offline_pdfList:(NSMutableDictionary *)params { int offset = [[params valueForKey:@"offset"] intValue]; int limit = [[params valueForKey:@"limit"] intValue]; NSString *keyword = [params valueForKey:@"keyWord"]; NSString *where = @"where is_delete is null or is_delete = 0"; if (keyword.length) { keyword = [self translateSingleQuote:keyword]; where = [NSString stringWithFormat:@"where (is_delete is null or is_delete = 0 ) and lower(create_user) like '%%%@%%' or lower(tear_note) like '%%%@%%' or lower(tear_name) like '%%%@%%'",keyword.lowercaseString,keyword.lowercaseString,keyword.lowercaseString]; } NSString *sql = [NSString stringWithFormat:@"select tear_name,tear_note,createtime,create_user,pdf_path,_id,model_info,off_params from offline_pdf %@ order by createtime desc limit %d offset %d;",where,limit,offset];// tearsheets_id ---> _id __block NSMutableDictionary *dic = [NSMutableDictionary dictionary]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachefolder = [paths objectAtIndex:0]; NSString *pdfFolder = [cachefolder stringByAppendingPathComponent:@"pdf_cache"]; [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 *path = [self textAtColumn:4 statement:stmt]; NSString *model_info = [self textAtColumn:6 statement:stmt]; NSString *off_params = [self textAtColumn:7 statement:stmt]; path = [pdfFolder stringByAppendingPathComponent:path]; BOOL bdir=NO; NSFileManager* fileManager = [NSFileManager defaultManager]; if(! [fileManager fileExistsAtPath:path isDirectory:&bdir]|| bdir) { //pdf文件不存在 path=nil; } time = [self changeDateTimeFormate:time]; time = [time stringByAppendingString:@" PST"]; int sheet_id = sqlite3_column_int(stmt, 5); NSMutableDictionary *item = [[NSMutableDictionary alloc] init]; item[@"tearsheetsId"]=@(sheet_id); item[@"pdf_path"]=path; item[@"create_time"]=time; item[@"create_user"]=user; item[@"tear_note"]=note; item[@"tear_name"]=name; item[@"isLocalFile"]=[NSNumber numberWithBool:YES]; item[@"model_info"]=model_info; item[@"off_params"]=off_params; [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 [RAConvertor dict2data:dic]; } + (NSData *)offline_add2Portfolio:(NSMutableDictionary *)params { NSString *prodct_ids = [params objectForKey:@"product_id"]; // NSString *user = [params objectForKey:@"user"]; // NSString *sql = [NSString stringWithFormat:@"insert into offline_portfolio (product_id,name,description,item_id) select * from (select p.product_id,p.name,p.description,p.item_id from product as p where p.product_id in (%@) and (select count(0) from offline_portfolio where product_id in (%@) and (is_delete is null or is_delete = 0)) = 0);",prodct_ids,prodct_ids]; NSString *sql = [NSString stringWithFormat:@"insert into offline_portfolio (product_id,name,description,item_id) select * from (select p.product_id,p.name,p.description,p.item_id from product as p where p.product_id in (%@) and p.product_id not in (select product_id from offline_portfolio));insert into offline_portfolio (product_id,name,description,item_id,is_delete) select * from (select p.product_id,p.name,p.description,p.item_id,0 from product as p left join offline_portfolio as f on p.product_id = f.product_id where p.product_id in (%@) and p.product_id in (select product_id from offline_portfolio) and f.is_delete = 1);delete from offline_portfolio where (select count(0) from offline_portfolio where product_id in (%@)) > 1 and is_delete = 1;",prodct_ids,prodct_ids,prodct_ids]; int result = [iSalesDB execSql:sql]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; [dic setValue:[NSNumber numberWithInteger:result] forKey:@"result"]; if (result == RESULT_TRUE) { /*NSArray *product_id_arr = [prodct_ids componentsSeparatedByString:@","]; [dic setValue:[NSNumber numberWithInteger:product_id_arr.count] forKey:@"portfolio_count"];*/ sqlite3 *db = [iSalesDB get_db]; int count = [iSalesDB get_recordcount:db table:@"offline_portfolio" where:@"is_delete is null or is_delete = 0"]; [dic setValue:[NSNumber numberWithInteger:count] forKey:@"portfolio_count"]; [iSalesDB close_db:db]; } [dic setValue:@"Regular Mode" forKey:@"mode"]; return [RAConvertor dict2data:dic]; } + (NSData *)offline_createTearSheet:(NSMutableDictionary *)params { NSMutableDictionary *dic = [self dictionaryFileName:@"TearSheet.json"]; [dic setObject:[params objectForKey:@"product_ids"] forKey:@"product_ids"]; [dic setObject:[params objectForKey:@"item_ids"] forKey:@"item_ids"]; NSMutableDictionary *section_0 = [[dic objectForKey:@"section_0"] mutableCopy]; NSDictionary *company_item = @{ @"control": @"text", @"keyboard": @"text", @"name": @"company_name", @"value": COMPANY_FULL_NAME, @"aname": @"Company Name" }; [section_0 setObject:company_item forKey:@"item_0"]; [dic setObject:section_0 forKey:@"section_0"]; // Regurlar Price NSMutableDictionary *section1 = [[dic objectForKey:@"section_1"] mutableCopy]; NSMutableDictionary *price = [[section1 objectForKey:@"item_2"] mutableCopy]; __block NSMutableDictionary *cadedate = [NSMutableDictionary dictionary]; __block long val_count = 0; NSString *sql = @"select name,type,order_by from price order by order_by"; [iSalesDB jk_query:sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSString *name = [self textAtColumn:0 statement:stmt]; int type = sqlite3_column_int(stmt, 1); int order_by = sqlite3_column_int(stmt, 2); // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; NSDictionary *price_dic = @{ @"value" : name, @"value_id" : [NSNumber numberWithInteger:type], @"check" : order_by == 0 ? @(1) : @(0) }; [cadedate setObject:price_dic forKey:[NSString stringWithFormat:@"val_%ld",val_count]]; val_count = ++(*count); } failure:^(NSMutableDictionary *container, NSString *err_msg) { val_count = 0; }]; [cadedate setObject:@{@"value" : @"None", @"value_id" : @(0)} forKey:[NSString stringWithFormat:@"val_%ld",val_count]]; val_count++; [cadedate setObject:[NSNumber numberWithInteger:val_count] forKey:@"count"]; [price setObject:cadedate forKey:@"cadedate"]; [section1 setObject:price forKey:@"item_2"]; [dic setObject:section1 forKey:@"section_1"]; return [RAConvertor dict2data:dic]; } + (NSData *)offline_model_qty:(NSMutableDictionary *)params { NSString *product_id = [params objectForKey:@"fashionId"]; NSString *sql = [NSString stringWithFormat:@"select availability from product where product_id = %@;",product_id]; __block int result = RESULT_TRUE; __block int qty = 0; [iSalesDB jk_query:sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { qty = sqlite3_column_int(stmt, 0); } failure:^(NSMutableDictionary *container, NSString *err_msg) { result = RESULT_FALSE; }]; NSMutableDictionary *dic = @{ @"err_msg" : result == RESULT_FALSE ? @"Failed." : @"Success.", @"mode" : @"Regular Mode", @"quantity_available" : @(qty), @"result" : @(result), }.mutableCopy; return [RAConvertor dict2data:dic]; } + (NSData *)offline_editPortfolio:(NSMutableDictionary *)params { NSString *item_ids = [params objectForKey:@"item_id"]; NSString *line_notes = [params objectForKey:@"notes"]; NSString *price_str = [params objectForKey:@"price"]; NSString *discount_str = [params objectForKey:@"discount"]; NSString *percent = [params objectForKey:@"available_percent"]; NSString *qty = [params objectForKey:@"available_qty"]; NSString *sql = [NSString stringWithFormat:@"update offline_portfolio set "]; int dot = 0; if (line_notes) { line_notes = [self translateSingleQuote:line_notes]; line_notes = [NSString stringWithFormat:@"line_note = '%@'",line_notes]; sql = [sql stringByAppendingString:line_notes]; dot = 1; } else { line_notes = @""; } if (price_str) { if (dot) { price_str = [NSString stringWithFormat:@",sheet_price = %@",price_str]; } else { price_str = [NSString stringWithFormat:@"sheet_price = %@",price_str]; dot = 1; } sql = [sql stringByAppendingString:price_str]; } else { price_str = @""; } if (discount_str) { if (dot) { discount_str = [NSString stringWithFormat:@",sheet_discount = %@",discount_str]; } else { discount_str = [NSString stringWithFormat:@"sheet_discount = %@",discount_str]; dot = 1; } sql = [sql stringByAppendingString:discount_str]; } else { discount_str = @""; } if (percent) { if (dot) { percent = [NSString stringWithFormat:@",percent = %@,percentage = 1",percent]; } else { percent = [NSString stringWithFormat:@"percent = %@,percentage = 1",percent]; dot = 1; } sql = [sql stringByAppendingString:percent]; } else { percent = @""; } if (qty) { if (dot) { qty = [NSString stringWithFormat:@",available_qty = %@,percentage = 0",qty]; } else { qty = [NSString stringWithFormat:@"available_qty = %@,percentage = 0",qty]; dot = 1; } sql = [sql stringByAppendingString:qty]; } else { qty = @""; } NSString *where = [NSString stringWithFormat:@" where item_id in (%@) and (is_delete is null or is_delete = 0);",item_ids]; sql = [sql stringByAppendingString:where]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; int result = [iSalesDB execSql:sql]; [dic setObject:[NSNumber numberWithInt:result] forKey:@"result"]; [dic setObject:@"Regular Mode" forKey:@"mode"]; return [RAConvertor dict2data:dic]; } + (NSData *)offline_removePortfolio:(NSMutableDictionary *)params { NSString *portfolio_ids = [params objectForKey:@"portfolioId"]; NSMutableDictionary *dic = [NSMutableDictionary dictionary]; sqlite3 *db = [iSalesDB get_db]; NSString *sql = [NSString stringWithFormat:@"update offline_portfolio set is_delete = 1 where item_id in (%@) and (is_delete is null or is_delete = 0);",portfolio_ids]; int result = [iSalesDB execSql:sql db:db]; [dic setObject:[NSNumber numberWithInt:result] forKey:@"result"]; [dic setObject:@"Regular Mode" forKey:@"mode"]; int count = [iSalesDB get_recordcount:db table:@"offline_portfolio" where:@"(is_delete is null or is_delete = 0)"]; [dic setObject:[NSNumber numberWithInt:count] forKey:@"portfolio_count"]; [iSalesDB close_db:db]; return [RAConvertor dict2data:dic]; } + (void)offline_removePDFWithName:(NSString *)name { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachefolder = [paths objectAtIndex:0]; NSString *pdfFolder = [cachefolder stringByAppendingPathComponent:@"pdf_cache"]; NSString *path = [pdfFolder stringByAppendingPathComponent:name]; NSFileManager *fileManager = [NSFileManager defaultManager]; [fileManager removeItemAtPath:path error:nil]; } + (void)offline_clear_PDFCache { NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); NSString *cachefolder = [paths objectAtIndex:0]; NSString *pdfFolder = [cachefolder stringByAppendingPathComponent:@"pdf_cache"]; NSArray *pdf_files = [fileManager contentsOfDirectoryAtPath:pdfFolder error:nil]; for (NSString *path in pdf_files) { [self offline_removePDFWithName:[path lastPathComponent]]; } } + (NSData *)offline_removePDF:(NSMutableDictionary *)params { NSMutableDictionary *dic = [NSMutableDictionary dictionary]; NSInteger tearsheetsId = [[params objectForKey:@"tearsheetsId"] integerValue]; NSString *user = [params objectForKey:@"user"]; NSString *create_user = [iSalesDB jk_queryText:[NSString stringWithFormat:@"select create_user from offline_pdf where _id = %ld;",(long)tearsheetsId]]; // tearsheets_id ---> _id if (![create_user isEqualToString:user]) { [dic setObject:[NSNumber numberWithInt:RESULT_FALSE] forKey:@"result"]; [dic setObject:@"Regular Mode" forKey:@"mode"]; [dic setObject:@"Only Delete Your Owns" forKey:@"err_msg"]; return [RAConvertor dict2data:dic]; } NSString *is_local_sql = [NSString stringWithFormat:@"select is_local,pdf_path from offline_pdf where _id = %ld and create_user = '%@';",(long)tearsheetsId,[self translateSingleQuote:user]]; __block int is_local = 0; __block NSString *path = @""; [iSalesDB jk_query:is_local_sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { is_local = sqlite3_column_int(stmt, 0); path = [self textAtColumn:1 statement:stmt]; }]; NSString *sql = [NSString stringWithFormat:@"update offline_pdf set is_delete = 1 where _id = %ld and create_user = '%@';",(long)tearsheetsId,[self translateSingleQuote:user]]; if (is_local == 1) { sql = [NSString stringWithFormat:@"delete from offline_pdf where _id = %ld and create_user = '%@';",(long)tearsheetsId,[self translateSingleQuote:user]]; // 删除文件 [self offline_removePDFWithName:path]; } int result = [iSalesDB execSql:sql]; [dic setObject:[NSNumber numberWithInt:result] forKey:@"result"]; [dic setObject:@"Regular Mode" forKey:@"mode"]; return [RAConvertor dict2data:dic]; } +(NSMutableDictionary*) preparePortfolio:(NSString* ) serial params:(NSMutableDictionary*) add_params { // assert(add_params[@"contact_id"]!=nil); assert(add_params[@"user"]!=nil); NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; NSString* ver = [defaults stringForKey:@"OfflineVer"] ; NSString* where=@"1=1"; if (ver!=nil) { where=@"is_dirty=1"; } NSString *sqlQuery =[NSString stringWithFormat:@"select _id,product_id,name,description,item_id,fashion_id,ifnull(available_qty,'null'),ifnull(percentage,'null'),ifnull(percent,'null'),ifnull(sheet_price,'null'),sheet_discount,img,line_note,is_delete,createtime,modify_time from offline_portfolio where %@",where]; [ret setValue:[NSNumber numberWithInt:AP_USER_NOT_AUTH ] forKey:@"result"]; // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; sqlite3 *db = [iSalesDB get_db]; NSDictionary *queryDic = [iSalesDB jk_query:sqlQuery db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSMutableDictionary *item = [NSMutableDictionary dictionary]; NSInteger _id = sqlite3_column_int(stmt, 0); NSInteger product_id = sqlite3_column_int(stmt, 1); NSString *name = [self textAtColumn:2 statement:stmt]; NSString *desc = [self textAtColumn:3 statement:stmt]; NSInteger item_id = sqlite3_column_int(stmt, 4); NSInteger fashion_id = sqlite3_column_int(stmt, 5); NSInteger qty = sqlite3_column_int(stmt, 6); NSInteger is_percent = sqlite3_column_int(stmt, 7); double percent = sqlite3_column_double(stmt, 8); double price = sqlite3_column_double(stmt, 9); double discount = sqlite3_column_double(stmt, 10); NSString *img = [self textAtColumn:11 statement:stmt]; NSString *line_note = [self textAtColumn:12 statement:stmt]; NSInteger is_delete = sqlite3_column_int(stmt, 13); NSString *create_time = [self textAtColumn:14 statement:stmt]; NSString *modify_time = [self textAtColumn:15 statement:stmt]; NSString *price_null = [self textAtColumn:9 statement:stmt]; if ([price_null isEqualToString:@"null"]) { price = [[self get_model_default_price:add_params[@"contact_id"] user:add_params[@"user"] product_id:nil item_id:@(item_id) db:db] doubleValue]; } NSString *qty_null = [self textAtColumn:6 statement:stmt]; NSString *is_percent_null = [self textAtColumn:7 statement:stmt]; NSString *percent_null = [self textAtColumn:8 statement:stmt]; [item setValue:[NSNumber numberWithInteger:_id] forKey:@"_id"]; [item setValue:[NSNumber numberWithInteger:product_id] forKey:@"product_id"]; [item setValue:[NSNumber numberWithInteger:item_id] forKey:@"item_id"]; [item setValue:[NSNumber numberWithInteger:fashion_id] forKey:@"fashion_id"]; [item setValue:[NSNumber numberWithInteger:is_delete] forKey:@"is_delete"]; if ([qty_null isEqualToString:@"null"]) { // [item setValue:@"null" forKey:@"available_qty"]; } else { [item setValue:[NSNumber numberWithInteger:qty] forKey:@"available_qty"]; } if ([is_percent_null isEqualToString:@"null"]) { // [item setValue:@"null" forKey:@"percentage"]; } else { [item setValue:[NSNumber numberWithInteger:is_percent] forKey:@"percentage"]; } if ([percent_null isEqualToString:@"null"]) { // [item setValue:@"null" forKey:@"percent"]; } else { [item setValue:[NSNumber numberWithDouble:percent] forKey:@"percent"]; } [item setValue:[NSNumber numberWithDouble:price] forKey:@"sheet_price"]; [item setValue:[NSNumber numberWithDouble:discount] forKey:@"sheet_discount"]; [item setValue:name forKey:@"name"]; [item setValue:desc forKey:@"description"]; [item setValue:img forKey:@"img"]; [item setValue:line_note forKey:@"line_note"]; [item setValue:create_time forKey:@"createtime"]; [item setValue:modify_time forKey:@"modifytime"]; [ret setObject:item forKey:[NSString stringWithFormat:@"item_%ld",(*count)++]]; [ret setObject:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"]; [ret setObject:[NSNumber numberWithInteger:*count] forKey:@"count"]; }]; [iSalesDB close_db:db]; if ([[queryDic objectForKey:@"result"] integerValue] == RESULT_FALSE) { [ret setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"]; } return ret; } +(NSMutableDictionary*) preparePDF:(NSString* ) serial { NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults]; NSString* ver = [defaults stringForKey:@"OfflineVer"] ; NSString* where=@"1=1"; if (ver!=nil) { where=@"is_dirty=1"; } NSString *sqlQuery =[NSString stringWithFormat:@"select _id,ifnull(tearsheets_id,'null'),pdf_path,create_user,tear_note,tear_name,model_info,createtime,modify_time,configureParams,off_params,is_delete,is_local from offline_pdf where %@",where]; [ret setValue:[NSNumber numberWithInt:AP_USER_NOT_AUTH ] forKey:@"result"]; [iSalesDB jk_query:sqlQuery completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { NSMutableDictionary *item = [NSMutableDictionary dictionary]; NSInteger _id = sqlite3_column_int(stmt, 0); NSInteger tearsheets_id = sqlite3_column_int(stmt, 1); NSString *pdf_path = [self textAtColumn:2 statement:stmt]; NSString *create_user = [self textAtColumn:3 statement:stmt]; NSString *tear_note = [self textAtColumn:4 statement:stmt]; NSString *tear_name = [self textAtColumn:5 statement:stmt]; NSString *model_info = [self textAtColumn:6 statement:stmt]; NSString *createtime = [self textAtColumn:7 statement:stmt]; NSString *modifytime = [self textAtColumn:8 statement:stmt]; NSString *urlParams = [self textAtColumn:9 statement:stmt]; NSString *off_params = [self textAtColumn:10 statement:stmt]; NSString *uuid = [NSUUID UUID].UUIDString; int is_delete = sqlite3_column_int(stmt, 11); NSString *tearsheet_id_null = [self textAtColumn:1 statement:stmt]; int is_local = sqlite3_column_int(stmt, 12); [item setObject:[NSNumber numberWithInteger:_id] forKey:@"_id"]; if (![tearsheet_id_null isEqualToString:@"null"]) { [item setObject:[NSNumber numberWithInteger:tearsheets_id] forKey:@"tearsheets_id"]; } [item setObject:pdf_path forKey:@"pdf_path"]; [item setObject:create_user forKey:@"create_user"]; [item setObject:tear_note forKey:@"tear_note"]; [item setObject:tear_name forKey:@"tear_name"]; [item setObject:model_info forKey:@"model_info"]; [item setObject:createtime forKey:@"createtime"]; [item setObject:modifytime forKey:@"modifytime"]; [item setObject:urlParams forKey:@"urlParams"]; [item setObject:off_params forKey:@"off_params"]; [item setObject:uuid forKey:@"pdf_token"]; [item setObject:[NSNumber numberWithInt:is_delete] forKey:@"is_delete"]; NSDictionary *off_Params_dic = [RAConvertor string2dict:off_params]; [item setObject:[off_Params_dic objectForKey:@"product_ids"] forKey:@"product_ids"]; if (!is_local && !is_delete) { // 已经同步过的,并且没被删除,就不需要上传。 } else { [ret setObject:item forKey:[NSString stringWithFormat:@"item_%ld",(*count)++]]; } [ret setObject:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"]; [ret setObject:[NSNumber numberWithInteger:*count] forKey:@"count"]; } failure:^(NSMutableDictionary *container, NSString *err_msg) { [ret setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"]; }]; return ret; } #pragma mark 2020 +(void) offline_contactlist :(NSMutableDictionary *) params completionHandler:(resultHandler)result { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ sqlite3 *db = [iSalesDB get_db]; NSString* contactType = [params valueForKey:@"contactType"]; // contactType = "Sales_Order_Customer"; if (contactType) { contactType = [NSString stringWithFormat:@"%@ = 1",contactType]; } else { contactType = @"1 = 1"; } NSString* keyword = [params valueForKey:@"keyword"]; // search 时才有 DebugLog(@"offline contact list keyword: %@",keyword); // advanced search NSString* contact_name = [params valueForKey:@"contact_name"]; // "contact_name" if (contact_name) { contact_name = [contact_name stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; contact_name = [NSString stringWithFormat:@"and lower(contact_name) like '%%%@%%'",contact_name.lowercaseString]; } else { contact_name = @""; } NSString* customer_phone = [params valueForKey:@"customer_phone"]; // "customer_phone" if (customer_phone) { customer_phone = [customer_phone stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; customer_phone = [NSString stringWithFormat:@"and lower(decrypt(phone)) like '%%%@%%'",customer_phone.lowercaseString]; } else { customer_phone = @""; } NSString* customer_fax = [params valueForKey:@"customer_fax"]; // "customer_fax" if (customer_fax) { customer_fax = [customer_fax stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; customer_fax = [NSString stringWithFormat:@"and lower(fax) like '%%%@%%'",customer_fax.lowercaseString]; } else { customer_fax = @""; } NSString* customer_zipcode = [params valueForKey:@"customer_zipcode"]; // "customer_zipcode" if (customer_zipcode) { customer_zipcode = [customer_zipcode stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; customer_zipcode = [NSString stringWithFormat:@"and lower(zipcode) like '%%%@%%'",customer_zipcode.lowercaseString]; } else { customer_zipcode = @""; } NSString* customer_sales_rep = [params valueForKey:@"customer_sales_rep"]; // "customer_sales_rep" if (customer_sales_rep) { customer_zipcode = [customer_zipcode stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; customer_sales_rep = [NSString stringWithFormat:@"and lower(sales_rep) like '%%%@%%'",customer_sales_rep.lowercaseString]; } else { customer_sales_rep = @""; } NSString* customer_state = [params valueForKey:@"customer_state"]; // "customer_state" if (customer_state) { customer_state = [customer_state stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; customer_state = [NSString stringWithFormat:@"and lower(state) like '%%%@%%'",customer_state.lowercaseString]; } else { customer_state = @""; } NSString* customer_name = [params valueForKey:@"customer_name"]; // "customer_name" 也就是company name if (customer_name) { customer_name = [customer_name stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; customer_name = [NSString stringWithFormat:@"and lower(decrypt(company_name)) like '%%%@%%'",customer_name.lowercaseString]; } else { customer_name = @""; } NSString* customer_country = [params valueForKey:@"customer_country"]; // "customer_country" if (customer_country) { customer_country = [customer_country stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; customer_country = [NSString stringWithFormat:@"and lower(country) like '%%%@%%'",customer_country.lowercaseString]; } else { customer_country = @""; } NSString* customer_cid = [params valueForKey:@"customer_cid"]; // "customer_cid" if (customer_cid) { customer_cid = [customer_cid stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; customer_cid = [NSString stringWithFormat:@"and lower(contact_id) like '%%%@%%'",customer_cid.lowercaseString]; } else { customer_cid = @""; } NSString* customer_city = [params valueForKey:@"customer_city"]; // "customer_city" if (customer_city) { customer_city = [customer_city stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; customer_city = [NSString stringWithFormat:@"and lower(city) like '%%%@%%'",customer_city.lowercaseString]; } else { customer_city = @""; } NSString* customer_address = [params valueForKey:@"customer_address"]; // "customer_address" if (customer_address) { customer_address = [customer_address stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; customer_address = [NSString stringWithFormat:@"and lower(decrypt(addr)) like '%%%@%%'",customer_address.lowercaseString]; } else { customer_address = @""; } NSString* customer_email = [params valueForKey:@"customer_email"]; // "customer_email" if (customer_email) { customer_email = [customer_email stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; customer_email = [NSString stringWithFormat:@"and lower(email) like '%%%@%%'",customer_email.lowercaseString]; } else { customer_email = @""; } NSString *price_name = [params valueForKey:@"price_name"]; if (price_name) { if ([price_name containsString:@","]) { // 首先从 price表中查处name NSArray *pArray = [price_name componentsSeparatedByString:@","]; NSMutableString *mutablePStr = [NSMutableString stringWithFormat:@"SELECT name FROM price where type = %@ ",pArray[0]]; for (int i = 1;i < pArray.count;i++) { NSString *p = pArray[i]; [mutablePStr appendFormat:@" or type = %@ ",p]; } [mutablePStr appendString:@";"]; __block NSMutableArray *price_name_array = [NSMutableArray array]; [iSalesDB jk_query:mutablePStr db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { char *name = (char *)sqlite3_column_text(stmt, 0); if (!name) name = ""; [price_name_array addObject:[self translateSingleQuote:[NSString stringWithUTF8String:name]]]; }]; // 再根据name 拼sql NSMutableString *mutable_price_name = [NSMutableString string]; [mutable_price_name appendFormat:@" and( price_type like '%%%@%%' ",price_name_array[0]]; for (int i = 1; i < price_name_array.count; i++) { [mutable_price_name appendFormat:@" or price_type like '%%%@%%' ",price_name_array[i]]; } [mutable_price_name appendString:@")"]; price_name = mutable_price_name; } else { price_name = [price_name stringByReplacingOccurrencesOfString:@" " withString:@""]; if ([price_name isEqualToString:@""]) { price_name = @""; } else { __block NSString *price; price_name = [self translateSingleQuote:price_name]; [iSalesDB jk_query:[NSString stringWithFormat:@"SELECT name FROM price where type = %@ ;",price_name] db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { char *p = (char *)sqlite3_column_text(stmt, 0); if (p == NULL) { p = ""; } price = [NSString stringWithUTF8String:p]; }]; if ([price isEqualToString:@""]) { price_name = @""; } else { price = [self translateSingleQuote:price]; price_name = [NSString stringWithFormat:@"and price_type like '%%%@%%'",price]; } } } } else { price_name = @""; } int limit = [[params valueForKey:@"limit"] intValue]; int offset = [[params valueForKey:@"offset"] intValue]; NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSString *where = [NSString stringWithFormat:@" %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ and is_active=1 ",contactType,contact_name,customer_phone,customer_fax,customer_zipcode,customer_sales_rep,customer_state,customer_name,customer_country,customer_cid,customer_city,customer_address,customer_email,price_name]; NSString *sql = [NSString stringWithFormat:@"select editable,company_name,country,addr,zipcode,state,city,contact_name,phone,contact_id,addr_1,addr_2,addr_3,addr_4,first_name,last_name,fax,email from offline_contact where %@ order by decrypt(company_name) limit %d offset %d",where,limit,offset]; // int result= [iSalesDB AddExFunction:db]; int count =0; NSString *sqlQuery = nil; if(keyword.length==0) { // sqlQuery=[NSString stringWithFormat:@"select editable,company_name,country,addr,zipcode,state,city,contact_name,phone,contact_id,addr_1,addr_2,addr_3,addr_4,first_name,last_name,fax,email from offline_contact where %@=1 order by decrypt(company_name) limit %d offset %d",contactType , limit, offset]; // count=[iSalesDB get_recordcount:db table:@"offline_contact" where:[NSString stringWithFormat:@"%@='1",contactType]]; sqlQuery = sql; count = [iSalesDB get_recordcount:db table:@"offline_contact" where:where]; } else { // NSString* encrypt_keyword= [AESCrypt fastencrypt:keyword]; keyword = keyword.lowercaseString; keyword = [keyword stringByReplacingOccurrencesOfString:@"'" withString:@"''"]; sqlQuery=[NSString stringWithFormat:@"select editable,company_name,country,addr,zipcode,state,city,contact_name,phone,contact_id,addr_1,addr_2,addr_3,addr_4,first_name,last_name,fax,email from offline_contact where %@ and (lower(contact_id ) like'%%%@%%' or lower(decrypt(company_name)) like '%%%@%%' or lower(decrypt(phone)) like '%%%@%%' or lower(decrypt(addr)) like '%%%@%%') and is_active=1 order by decrypt(company_name) limit %d offset %d",contactType , keyword,keyword,keyword,keyword,limit, offset]; count=[iSalesDB get_recordcount:db table:@"offline_contact" where:[NSString stringWithFormat:@"%@=1 and (lower(contact_id ) like'%@' or lower(company_name) like'%@') and is_active=1",contactType,keyword,keyword]]; } DebugLog(@"offline_contactlist sql:%@",sqlQuery); sqlite3_stmt * statement; [ret setValue:@"2" forKey:@"result"]; [ret setValue:[NSNumber numberWithInt:count ] forKey:@"total"]; // sqlQuery = @"select editable,decrypt(company_name),country,addr,zipcode,state,city,contact_name,phone,contact_id,addr_1,addr_2,addr_3,addr_4,first_name,last_name,fax,email from offline_contact where Sales_Order_Customer = 1 and is_active=1 order by decrypt(company_name) limit 25 offset 0"; int i = 0; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { while (sqlite3_step(statement) == SQLITE_ROW) { [ret setValue:[NSNumber numberWithInt:AP_USER_AUTH ] forKey:@"result"]; NSMutableDictionary* item = [[NSMutableDictionary alloc] init]; int editable = sqlite3_column_int(statement, 0); char *company_name = (char*)sqlite3_column_text(statement, 1); NSString *nscompany_name =nil; if(company_name==nil) nscompany_name=@""; else nscompany_name= [[NSString alloc]initWithUTF8String:company_name] ; char *country = (char*)sqlite3_column_text(statement, 2); if(country==nil) country=""; NSString *nscountry= [[NSString alloc]initWithUTF8String:country]; // char *addr = (char*)sqlite3_column_text(statement, 3); // if(addr==nil) // addr=""; // NSString *nsaddr= [[NSString alloc]initWithUTF8String:addr]; char *zipcode = (char*)sqlite3_column_text(statement, 4); if(zipcode==nil) zipcode=""; NSString *nszipcode= [[NSString alloc]initWithUTF8String:zipcode]; char *state = (char*)sqlite3_column_text(statement, 5); if(state==nil) state=""; NSString *nsstate= [[NSString alloc]initWithUTF8String:state]; char *city = (char*)sqlite3_column_text(statement, 6); if(city==nil) city=""; NSString *nscity= [[NSString alloc]initWithUTF8String:city]; // char *contact_name = (char*)sqlite3_column_text(statement, 7); // NSString *nscontact_name = nil; // if(contact_name==nil) // nscontact_name=@""; // else // nscontact_name= [[NSString alloc]initWithUTF8String:contact_name]; char *phone = (char*)sqlite3_column_text(statement, 8); NSString *nsphone = nil; if(phone==nil) nsphone=@""; else nsphone= [[NSString alloc]initWithUTF8String:phone]; char *contact_id = (char*)sqlite3_column_text(statement, 9); if(contact_id==nil) contact_id=""; NSString *nscontact_id= [[NSString alloc]initWithUTF8String:contact_id]; char *addr_1 = (char*)sqlite3_column_text(statement, 10); if(addr_1==nil) addr_1=""; NSString *nsaddr_1= [[NSString alloc]initWithUTF8String:addr_1]; char *addr_2 = (char*)sqlite3_column_text(statement, 11); if(addr_2==nil) addr_2=""; NSString *nsaddr_2= [[NSString alloc]initWithUTF8String:addr_2]; char *addr_3 = (char*)sqlite3_column_text(statement, 12); if(addr_3==nil) addr_3=""; NSString *nsaddr_3= [[NSString alloc]initWithUTF8String:addr_3]; char *addr_4 = (char*)sqlite3_column_text(statement, 13); if(addr_4==nil) addr_4=""; NSString *nsaddr_4= [[NSString alloc]initWithUTF8String:addr_4]; char *first_name = (char*)sqlite3_column_text(statement, 14); if(first_name==nil) first_name=""; NSString *nsfirst_name= [[NSString alloc]initWithUTF8String:first_name]; char *last_name = (char*)sqlite3_column_text(statement, 15); if(last_name==nil) last_name=""; NSString *nslast_name= [[NSString alloc]initWithUTF8String:last_name]; char *fax = (char*)sqlite3_column_text(statement, 16); NSString *nsfax = nil; if(fax==nil) nsfax=@""; else { nsfax= [[NSString alloc]initWithUTF8String:fax]; if(nsfax.length>0) 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=[RAConvertor 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 = [RAConvertor 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++; } sqlite3_finalize(statement); } [iSalesDB close_db:db]; DebugLog(@"data string: %@",[RAConvertor dict2string:ret] ); dispatch_async(dispatch_get_main_queue(), ^{ UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; [ret setValue:appDelegate.mode forKey:@"mode"]; [ret setValue:[NSNumber numberWithInt:i ] forKey:@"count"]; result(ret); }); return ; }); } //+(void) offline_contactinfo :(NSMutableDictionary *) params completionHandler:(resultHandler)result //{ // // dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // // NSString* contactId = [params valueForKey:@"contactId"]; // // // NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; // // // // // // // sqlite3 *db = [iSalesDB get_db]; // // // // // // NSString *sqlQuery = nil; // // // { // sqlQuery=[NSString stringWithFormat:@"select editable,company_name,country,addr,zipcode,state,city,contact_name,phone,contact_id,addr_1,addr_2,addr_3,addr_4,first_name,last_name,fax,email,img_0,img_1,img_2,price_type,notes,sales_rep,type from offline_contact where contact_id='%@'",contactId]; // // } // // // DebugLog(@"offline_contactlist sql:%@",sqlQuery); // sqlite3_stmt * statement; // // // [ret setValue:@"2" forKey:@"result"]; // // // if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) // { // // //int i = 0; // if (sqlite3_step(statement) == SQLITE_ROW) // { // // [ret setValue:[NSNumber numberWithInt:AP_USER_AUTH ] forKey:@"result"]; // // NSMutableDictionary* item = [[NSMutableDictionary alloc] init]; // // // // int editable = sqlite3_column_int(statement, 0); // // // char *company_name = (char*)sqlite3_column_text(statement, 1); // NSString *nscompany_name =nil; // if(company_name==nil) // nscompany_name=@""; // else // nscompany_name=[[NSString alloc]initWithUTF8String:company_name] ; // // // char *country = (char*)sqlite3_column_text(statement, 2); // if(country==nil) // country=""; // NSString *nscountry= [[NSString alloc]initWithUTF8String:country]; // // // // char *addr = (char*)sqlite3_column_text(statement, 3); // // if(addr==nil) // // addr=""; // // NSString *nsaddr= [[NSString alloc]initWithUTF8String:addr]; // // // char *zipcode = (char*)sqlite3_column_text(statement, 4); // if(zipcode==nil) // zipcode=""; // NSString *nszipcode= [[NSString alloc]initWithUTF8String:zipcode]; // // // char *state = (char*)sqlite3_column_text(statement, 5); // if(state==nil) // state=""; // NSString *nsstate= [[NSString alloc]initWithUTF8String:state]; // // char *city = (char*)sqlite3_column_text(statement, 6); // if(city==nil) // city=""; // NSString *nscity= [[NSString alloc]initWithUTF8String:city]; // // // char *contact_name = (char*)sqlite3_column_text(statement, 7); // // NSString *nscontact_name = nil; // // if(contact_name==nil) // // nscontact_name=@""; // // else // // nscontact_name= [[NSString alloc]initWithUTF8String:contact_name]; // // char *phone = (char*)sqlite3_column_text(statement, 8); // NSString *nsphone = nil; // if(phone==nil) // nsphone=@""; // else // nsphone= [[NSString alloc]initWithUTF8String:phone]; // // // // char *contact_id = (char*)sqlite3_column_text(statement, 9); // // if(contact_id==nil) // // contact_id=""; // // NSString *nscontact_id= [[NSString alloc]initWithUTF8String:contact_id]; // // char *addr_1 = (char*)sqlite3_column_text(statement, 10); // if(addr_1==nil) // addr_1=""; // NSString *nsaddr_1= [[NSString alloc]initWithUTF8String:addr_1]; // // char *addr_2 = (char*)sqlite3_column_text(statement, 11); // if(addr_2==nil) // addr_2=""; // NSString *nsaddr_2= [[NSString alloc]initWithUTF8String:addr_2]; // // // char *addr_3 = (char*)sqlite3_column_text(statement, 12); // if(addr_3==nil) // addr_3=""; // NSString *nsaddr_3= [[NSString alloc]initWithUTF8String:addr_3]; // // // char *addr_4 = (char*)sqlite3_column_text(statement, 13); // if(addr_4==nil) // addr_4=""; // NSString *nsaddr_4= [[NSString alloc]initWithUTF8String:addr_4]; // // // char *first_name = (char*)sqlite3_column_text(statement, 14); // if(first_name==nil) // first_name=""; // NSString *nsfirst_name= [[NSString alloc]initWithUTF8String:first_name]; // // // char *last_name = (char*)sqlite3_column_text(statement, 15); // if(last_name==nil) // last_name=""; // NSString *nslast_name= [[NSString alloc]initWithUTF8String:last_name]; // // char *fax = (char*)sqlite3_column_text(statement, 16); // NSString *nsfax = nil; // if(fax==nil) // nsfax=@""; // else // nsfax= [[NSString alloc]initWithUTF8String:fax]; // // char *email = (char*)sqlite3_column_text(statement, 17); // NSString *nsemail = nil; // if(email==nil) // nsemail=@""; // else // nsemail= [[NSString alloc]initWithUTF8String:email]; // // char *img_0 = (char*)sqlite3_column_text(statement, 18); // NSString *nsimg_0 = nil; // if(img_0==nil) // nsimg_0=@""; // else // nsimg_0= [[NSString alloc]initWithUTF8String:img_0]; // // [self copy_bcardImg:nsimg_0]; // // char *img_1 = (char*)sqlite3_column_text(statement, 19); // NSString *nsimg_1 = nil; // if(img_1==nil) // nsimg_1=@""; // else // nsimg_1= [[NSString alloc]initWithUTF8String:img_1]; // [self copy_bcardImg:nsimg_1]; // // // char *img_2 = (char*)sqlite3_column_text(statement, 20); // NSString *nsimg_2 = nil; // if(img_2==nil) // nsimg_2=@""; // else // nsimg_2= [[NSString alloc]initWithUTF8String:img_2]; // [self copy_bcardImg:nsimg_2]; // // char *price_type = (char*)sqlite3_column_text(statement, 21); // NSString *nsprice_type = nil; // if(price_type==nil) // nsprice_type=@""; // else // nsprice_type= [[NSString alloc]initWithUTF8String:price_type]; // // // char *notes = (char*)sqlite3_column_text(statement, 22); // NSString *nsnotes = nil; // if(notes==nil) // nsnotes=@""; // else // nsnotes= [[NSString alloc]initWithUTF8String:notes]; // // // char *salesrep = (char*)sqlite3_column_text(statement, 23); // NSString *nssalesrep = nil; // if(salesrep==nil) // nssalesrep=@""; // else // nssalesrep= [[NSString alloc]initWithUTF8String:salesrep]; // // NSString *contact_type = [self textAtColumn:24 statement:statement]; // // // { // // 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]; // // } // // NSMutableArray* arr_name= [[NSMutableArray alloc] init]; // // [arr_name addObject:nsfirst_name]; // [arr_name addObject:nslast_name]; // // NSString *nscontact_name=[RAConvertor 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=[RAConvertor 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"]; // [item setValue:contact_type forKey:@"customer_contact_type"]; // // // [ret setObject:item forKey:@"customerInfo"]; // // i++; // // // // } // // // // // sqlite3_finalize(statement); // } // // // // [iSalesDB close_db:db]; // // // // // DebugLog(@"data string: %@",[RAConvertor dict2string:ret] ); // dispatch_async(dispatch_get_main_queue(), ^{ // UIApplication * app = [UIApplication sharedApplication]; // AppDelegate *appDelegate = (AppDelegate *)[app delegate]; // [ret setValue:appDelegate.mode forKey:@"mode"]; // [ret setValue:[NSNumber numberWithInt:1 ] forKey:@"count"]; // result(ret); // }); // // return ; // }); //} + (void)categoryList:(NSMutableDictionary *)params limited:(BOOL)limited completionHandler:(resultHandler)result { AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; NSString* order_code= appDelegate.order_code; NSString* user = appDelegate.user; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 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,m.category,m.more_color 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 %@ ;",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 (user && price != nil) { NSArray *priceTypeArray = [self get_contact_default_price_type:nil user:user 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]; // cate mutiple selection NSString *category_id = params[@"category"]; 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]; } [cateWhere appendString:@"("]; for (int i = 0; i < cate_id_array.count; i++) { if (i == 0) { [cateWhere appendFormat:@"category like'%%#%@#%%'",cate_id_array[i]]; } else { [cateWhere appendFormat:@" or category like'%%#%@#%%'",cate_id_array[i]]; } } [cateWhere appendString:@")"]; } // 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,m.category,m.more_color from (select name,description,product_id,closeout,best_seller,category,more_color 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,order_code,order_best_seller,limit_str]; where =[NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ and is_active = 1",cateWhere,best_seller,alert,available_condition,qty,price]; } DebugLog(@"offline category where: %@",where); count = [iSalesDB get_recordcount:db table:@"product" where:where]; if (!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); NSString *categoryStr = [self textAtColumn:7 statement:statement]; int more_color = sqlite3_column_int(statement, 8); // Defaul Category ID __block NSString *categoryID = nil; NSString *defaultCateSQL = [NSString stringWithFormat:@"select default_category from product where product_id=%d;",product_id]; [iSalesDB jk_query:defaultCateSQL db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { char *default_category = (char*)sqlite3_column_text(stmt, 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:@""]; categoryID = nsdefault_category; }]; if (!categoryID.length) { NSString *cateIDs = params[@"category"]; NSArray *requestCategoryArr = [cateIDs componentsSeparatedByString:@","]; NSArray *itemCategoryArr = [categoryStr componentsSeparatedByString:@","]; for (NSString *cateID in requestCategoryArr) { BOOL needBreak = NO; for (NSString *itemCateIDBox in itemCategoryArr) { if (itemCateIDBox.length > 4) { NSString *itemCategoryID = [itemCateIDBox substringFromIndex:2]; itemCategoryID = [itemCategoryID substringToIndex:itemCategoryID.length - 2]; if ([itemCategoryID isEqualToString:cateID]) { needBreak = YES; categoryID = itemCategoryID; break; } } } if (needBreak) { break; } } } 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"]; if (more_color == 0) { [item setObject:@(false) forKey:@"more_color"]; } else if (more_color == 1) { [item setObject:@(true) forKey:@"more_color"]; } [item addEntriesFromDictionary:imgjson]; // [item setValue:nsurl forKey:@"img"]; [item setValue:nsname forKey:@"name"]; [item setValue:nsdescription forKey:@"description"]; if (categoryID) { [item setValue:categoryID forKey:@"item_category_id"]; } [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: %@",[RAConvertor dict2string:ret] ); dispatch_async(dispatch_get_main_queue(), ^{ // UIApplication * app = [UIApplication sharedApplication]; // AppDelegate *appDelegate = (AppDelegate *)[app delegate]; // [ret setValue:appDelegate.mode forKey:@"mode"]; // [ret setValue:[NSNumber numberWithInt:1 ] forKey:@"count"]; result(ret); }); }); // NSString* orderCode = [params valueForKey:@"orderCode"]; } +(void) offline_category :(NSMutableDictionary *) params completionHandler:(resultHandler)result { [self categoryList:params limited:YES completionHandler:result]; } + (void) search:(NSMutableDictionary *)params limited:(BOOL)limited completionHandler:(resultHandler)result { UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; NSString* order_code = appDelegate.order_code; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString* keyword = [params valueForKey:@"keyword"]; keyword=keyword.lowercaseString; bool exactMatch = [[params valueForKey:@"exactMatch"] boolValue]; // search by factory code 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]]; 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,m.more_color 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 %@;",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,m.more_color 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'%%%@%%' or lower(made_in) like '%%%@%%' or lower(material) like '%%%@%%' or lower(packaging) like '%%%@%%') and m.is_active = 1 order by m.name %@ ;",order_code, keyword,keyword,keyword,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); int more_color = sqlite3_column_int(statement, 7); 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"]; if (more_color == 0) { [item setObject:@(false) forKey:@"more_color"]; } else if (more_color == 1) { [item setObject:@(true) forKey:@"more_color"]; } [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); } DebugLog(@"count:%d",count); [iSalesDB close_db:db]; DebugLog(@"data string: %@",[RAConvertor dict2string:ret] ); dispatch_async(dispatch_get_main_queue(), ^{ result(ret); }); }); } +(void) offline_search:(NSMutableDictionary *) params completionHandler:(resultHandler)result { [self search:params limited:YES completionHandler:result]; } //+ (void) itemsearch:(NSMutableDictionary *)params limited:(BOOL)limited completionHandler:(resultHandler)result //{ // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; // NSString* order_code = appDelegate.order_code; // NSString* user = appDelegate.user; // dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 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,m.more_color 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 %@ %@;",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 (user) { // NSArray *priceTypeArray = [self get_contact_default_price_type:nil user:user 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];// 老子 // // [cateWhere appendString:@"("]; // 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]; // // } // // } else if ([key1 isEqualToString:@"cid"]) { // 2017-03-10 修复Item Search父节点下没有子节点的情况下选中父节点查询没有结果 // // if ([[category0 objectForKey:@"cid"] isEqualToString:cate_id_array[i]]) { // // cate_id_array[i] = [category0 objectForKey:@"id"]; // if (i == 0) { // [cateWhere appendFormat:@"category like'%%#%@#%%'",cate_id_array[i]]; // } else { // [cateWhere appendFormat:@" or category like'%%#%@#%%'",cate_id_array[i]]; // } // [category0 setValue:[NSNumber numberWithInteger:1] forKey:@"check"]; // [cateDic setValue:category0 forKey:key0]; // // } // // } // // } // // } // // } // // } // [cateWhere appendString:@")"]; // // [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,m.more_color from (select name,description,product_id,closeout,best_seller,more_color 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,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 (!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); // int more_color = sqlite3_column_int(statement, 7); // 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"]; // // if (more_color == 0) { // [item setObject:@(false) forKey:@"more_color"]; // } else if (more_color == 1) { // [item setObject:@(true) forKey:@"more_color"]; // } // // [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: %@",[RAConvertor dict2string:ret] ); // // DebugLog(@"data string: %@",[RAConvertor dict2string:ret] ); // dispatch_async(dispatch_get_main_queue(), ^{ // // result(ret); // }); // // }); // // // //} //+(void) offline_itemsearch :(NSMutableDictionary *) params completionHandler:(resultHandler)result //{ // [self itemsearch:params limited:YES completionHandler:result]; //} +(void) offline_commoneditor_partialrefresh :(NSMutableDictionary *) params completionHandler:(resultHandler)result { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSString* offline_command=params[@"offline_Command"]; NSMutableDictionary* ret=nil; if([offline_command isEqualToString:@"model_NIYMAL"]) { NSString* category = params[@"category"]; ret = [[self refresh_model_NIYMAL:category] mutableCopy]; } dispatch_async(dispatch_get_main_queue(), ^{ result(ret); }); }); } +(void) offline_wishlist :(NSMutableDictionary *) params completionHandler:(resultHandler)result; { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ int sort = [[params objectForKey:@"sort"] intValue]; NSString *sort_str = @""; switch (sort) { case 0:{ sort_str = @"order by w.modify_time desc"; } break; case 1:{ sort_str = @"order by w.modify_time asc"; } break; case 2:{ sort_str = @"order by m.name asc"; } break; case 3:{ sort_str = @"order by m.name desc"; } break; case 4:{ sort_str = @"order by m.description asc"; } break; default: break; } // NSString* user = appDelegate.user; sqlite3 *db = [iSalesDB get_db]; // order by w.create_time NSString* sqlQuery = [NSString stringWithFormat:@"select w.product_id,m.name||'\n'||m.description,w._id,w.qty from wishlist as w left join product as m on w.product_id=m.product_id where w.is_delete is NULL or w.is_delete != 1 %@ ",sort_str]; // NSString* sqlQuery = [NSString stringWithFormat:@"select m.product_id,(m.name||'\n'||m.description) as des,w._id from product as m,wishlist as w where m.product_id = w.product_id %@",sort_str]; sqlite3_stmt * statement; NSDate *date1 = [NSDate date]; // NSDate *date2 = nil; NSMutableDictionary* ret=[[NSMutableDictionary alloc]init]; int count=0; if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) { while (sqlite3_step(statement) == SQLITE_ROW) { NSMutableDictionary* item=[[NSMutableDictionary alloc]init]; int product_id = sqlite3_column_double(statement, 0); char *description = (char*)sqlite3_column_text(statement, 1); if(description==nil) description= ""; NSString *nsdescription= [[NSString alloc]initWithUTF8String:description]; int item_id = sqlite3_column_double(statement, 2); NSDate *date_image = [NSDate date]; NSString *nsurl=[self model_category_img:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:product_id]] model_name:nil db:db]; printf("image : "); [self printTimeIntervalBetween:date_image and:[NSDate date]]; // char *url = (char*)sqlite3_column_text(statement, 3); // if(url==nil) // url=""; // NSString *nsurl = [[NSString alloc]initWithUTF8String:url]; int qty = sqlite3_column_int(statement, 3); item[@"cart_count"] = [NSNumber numberWithInt:qty]; item[@"product_id"]= [NSString stringWithFormat:@"%d",product_id]; item[@"item_id"]= [NSString stringWithFormat:@"%d",item_id]; item[@"description"]= nsdescription; item[@"img"]= nsurl; ret[[NSString stringWithFormat:@"item_%d",count]]= item; count++; } printf("total time:"); [self printTimeIntervalBetween:date1 and:[NSDate date]]; ret[@"count"]= [NSNumber numberWithInt:count]; ret[@"total_count"]= [NSNumber numberWithInt:count]; // ret[@"wish_count"]= [NSNumber numberWithInt:count]; ret[@"result"]= [NSNumber numberWithInt:2]; sqlite3_finalize(statement); } [iSalesDB close_db:db]; dispatch_async(dispatch_get_main_queue(), ^{ UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; appDelegate.wish_count =count; [appDelegate update_count_mark]; result(ret); }); }); } +(void) offline_add2wishlist :(NSMutableDictionary *) params completionHandler:(resultHandler)result { // UIApplication * app = [UIApplication sharedApplication]; // AppDelegate *appDelegate = (AppDelegate *)[app delegate]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 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=[RAConvertor string2arr:product_id separator:@","]; NSArray *item_count_arr = item_count_str ? [RAConvertor string2arr:item_count_str separator:@","] : nil; NSString* sqlQuery = [NSString stringWithFormat:@"insert into wishlist(product_id,qty) values(?,?);"]; // NSString *sql = @""; for(int i=0;i 1) { NSArray *arr_1 = [[self categoryIdOfProduct:product_id name:model_name] componentsSeparatedByString:@","]; // 取交集 NSMutableSet *set_0 = [NSMutableSet setWithArray:arr_0]; NSMutableSet *set_1 = [NSMutableSet setWithArray:arr_1]; [set_0 intersectSet:set_1]; if (set_0.count == 1) { category = (NSString *)[set_0 anyObject]; } else { if ([set_0 containsObject:default_category_id]) { category = default_category_id; } else { category = (NSString *)[set_0 anyObject]; } } } } 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) if(model_name==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,seat_dimension,product_content_writing from product where upc_code = '%@' or upc_code like '%@;%%' or upc_code like '%%;%@;%%' or upc_code like '%%;%@';",upc_code,upc_code,upc_code,upc_code]; // 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,seat_dimension,product_content_writing 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,seat_dimension,product_content_writing 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 = @"Out of Stock"; [img_section setValue:Availability forKey:@"Availability"]; [img_section setValue:[NSString stringWithFormat:@"%d",stockUcom] forKey:@"stockUom"]; char *eta = (char*)sqlite3_column_text(statement, 25); if(eta==nil) eta=""; NSString *nseta = [[NSString alloc]initWithUTF8String:eta]; if ([nseta isEqualToString:@"null"]) { nseta = @""; } if (availability <= 0) { [img_section setValue:nseta forKey:@"ETA"]; } int item_id = sqlite3_column_int(statement, 26); NSString *seat_dimension = [self textAtColumn:27 statement:statement]; NSString *content_writing = [self textAtColumn:28 statement:statement]; NSString* Price=nil; if(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:contact_id user:user product_id:nil item_id:@(item_id) db:db]; if(price==nil) Price=@"No Price."; else Price=[NSString stringWithFormat:@"%.2f",price.floatValue]; } [img_section setObject:content_writing forKey:@"product_content_writing"]; [img_section setValue:Price forKey:@"price"]; [img_section setValue:nsname forKey:@"model_name"]; [img_section setValue:nsdescription forKey:@"model_descrition"]; if (order_code) { // 离线order code即so# NSString *cartQtySql = [NSString stringWithFormat:@"select c.item_count from offline_cart as c left join offline_order as o on c.so_no = o.so_id where o.so_id = '%@' and c.item_id = %d;",order_code,item_id]; __block int cartQTY = 0; [iSalesDB jk_query:cartQtySql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) { cartQTY = sqlite3_column_int(stmt, 0); }]; if (cartQTY > 0) { [img_section setObject:[NSNumber numberWithInt:cartQTY] forKey:@"Model QTY in cart"]; } } [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:@"Seat Dimension" value:seat_dimension] 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:contact_id item_id:item_id user:user islogin:bLogin 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_priceKvItem: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"]; } // DebugLog(@"count:%d",count); [iSalesDB close_db:db]; DebugLog(@"data string: %@",[RAConvertor dict2string:ret] ); dispatch_async(dispatch_get_main_queue(), ^{ result(ret); }); }); } //+(void) offline_deletewishlist :(NSMutableDictionary *) params completionHandler:(resultHandler)result; //{ // // UIApplication * app = [UIApplication sharedApplication]; // AppDelegate *appDelegate = (AppDelegate *)[app delegate]; // dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // NSMutableDictionary* ret=[[NSMutableDictionary alloc]init]; // sqlite3 *db = [iSalesDB get_db]; // NSString* collectId=params[@"collectId"]; // // // // // // NSString* sqlQuery = [NSString stringWithFormat:@"delete from wishlist where _id in (%@);",collectId]; // NSString* sqlQuery = [NSString stringWithFormat:@"update wishlist set is_delete = 1 where _id in (%@);",collectId]; // [iSalesDB execSql:sqlQuery db:db]; // int count=[iSalesDB get_recordcount:db table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"]; // [iSalesDB close_db:db]; // // // ret[@"result"]= [NSNumber numberWithInt:2]; // dispatch_async(dispatch_get_main_queue(), ^{ // // appDelegate.wish_count =count; // // [appDelegate update_count_mark]; // result(ret); // }); // // }); //} +(void) offline_logout :(NSMutableDictionary *) params completionHandler:(resultHandler)result { UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [iSalesDB disable_trigger]; [iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"]; [iSalesDB execSql:@"delete from offline_order where status=0;"]; [iSalesDB enable_trigger]; dispatch_async(dispatch_get_main_queue(), ^{ // // 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]; result(ret); }); }); } +(void) offline_createorder :(NSMutableDictionary *) params completionHandler:(resultHandler)result { // iSalesDB. // UIApplication * app = [UIApplication sharedApplication]; // AppDelegate *appDelegate = (AppDelegate *)[app delegate]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [iSalesDB disable_trigger]; [iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"]; [iSalesDB execSql:@"delete from offline_order where status=0;"]; [iSalesDB enable_trigger]; NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; NSString *customer_name = [self translateSingleQuote:params[@"customer_name"]]; 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=[RAConvertor 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]; }]; // default carrier NSString *carrier_sql = [NSString stringWithFormat:@"select name from carrier where code_id = (select carrier from offline_contact where contact_id = '%@');",customer_cid]; __block NSString *carrier = @""; [iSalesDB jk_query:carrier_sql db:db close:NO completion:^(sqlite3_stmt *statment, NSMutableDictionary *container, long *count) { carrier = [self textAtColumn:0 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,billing_cid,billing_name,billing_ext,billing_contact,billing_phone,billing_fax,billing_email,sales_terms,carrier) values('%@',0,'%@','%@','%@','%@','%@','%@','%@','%@',1,'%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','FOB','%@')",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,customer_cid,customer_name,customer_contact_ext,customer_contact,customer_phone,customer_fax,customer_email,carrier]; int result_code =[iSalesDB execSql:sql_neworder db:db]; [ret setValue:[NSNumber numberWithInt:result_code] 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]; dispatch_async(dispatch_get_main_queue(), ^{ result(ret); }); }); } +(void) offline_requestcart :(NSMutableDictionary *) params completionHandler:(resultHandler)result; { UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; bool can_create_backorder= appDelegate.can_create_backorder; NSString* user = appDelegate.user; NSString* contact_id = appDelegate.contact_id; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSMutableDictionary* ret = [[NSMutableDictionary alloc] init]; sqlite3 *db = [iSalesDB get_db]; NSString* orderCode=params[@"orderCode"]; int sort = [[params objectForKey:@"sort"] intValue]; NSString *sort_str = @""; switch (sort) { case 0:{ sort_str = @"order by c.modify_time desc"; } break; case 1:{ sort_str = @"order by c.modify_time asc"; } break; case 2:{ sort_str = @"order by m.name asc"; } break; case 3:{ sort_str = @"order by m.name desc"; } break; case 4:{ sort_str = @"order by m.description asc"; } break; default: break; } NSString* sqlorder = [ NSString stringWithFormat:@"select discount from offline_order where so_id='%@'",orderCode]; sqlite3_stmt * statement1; double orderdiscount=0; int dbresult1=sqlite3_prepare_v2(db, [sqlorder UTF8String], -1, &statement1, nil); if ( dbresult1== SQLITE_OK) { if (sqlite3_step(statement1) == SQLITE_ROW) { // NSDate *row_date = [NSDate date]; NSMutableDictionary* itemjson = [[NSMutableDictionary alloc] init]; orderdiscount = sqlite3_column_double(statement1, 0); } sqlite3_finalize(statement1); } NSString *sqlQuery = [ 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,m.availability from (select _id,product_id,decrypt(str_price) as price,discount,item_count,line_note,item_id,modify_time from offline_cart where so_no='%@') c left join product m on c.product_id=m.product_id %@",orderCode,sort_str ]; // NSString *sqlQuery = [ NSString stringWithFormat:@"select c.product_id,decrypt(c.str_price),c.discount,c.item_count,c.line_note,m.name,m.description,c.item_id,m.stockUom,c._id from offline_cart c left join product m on c.product_id=m.product_id where c.so_no='%@'",orderCode ]; // NSString *sqlQuery = @"select * from (select decrypt(str_price) from offline_cart) c"; DebugLog(@"offline_login sql:%@",sqlQuery); sqlite3_stmt * statement; [ret setValue:[NSNumber numberWithInt:AP_USER_NOT_AUTH ] forKey:@"result"]; NSDate *date1 = [NSDate date]; int count=0; int cart_count=0; int dbresult=sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil); if ( dbresult== SQLITE_OK) { while (sqlite3_step(statement) == SQLITE_ROW) { // NSDate *row_date = [NSDate date]; NSMutableDictionary* itemjson = [[NSMutableDictionary alloc] init]; int product_id = sqlite3_column_int(statement, 0); char *str_price = (char*)sqlite3_column_text(statement, 1); int item_id = sqlite3_column_int(statement, 7); NSString* Price=nil; if(str_price==nil) { // NSNumber* price= [self get_model_default_price:appDelegate.contact_id product_id:product_id db:db]; // NSDate *price_date = [NSDate date]; NSNumber* price = [self get_model_default_price:contact_id user:user product_id:nil item_id:@(item_id) db:db]; // DebugLog(@"price time interval"); // [self printTimeIntervalBetween:price_date and:[NSDate date]]; 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(statement, 2); int item_count = sqlite3_column_int(statement, 3); char *line_note = (char*)sqlite3_column_text(statement, 4); NSString *nsline_note=nil; if(line_note!=nil) nsline_note= [[NSString alloc]initWithUTF8String:line_note]; char *name = (char*)sqlite3_column_text(statement, 5); NSString *nsname=nil; if(name!=nil) nsname= [[NSString alloc]initWithUTF8String:name]; char *description = (char*)sqlite3_column_text(statement, 6); NSString *nsdescription=nil; if(description!=nil) nsdescription= [[NSString alloc]initWithUTF8String:description]; int stockUom = sqlite3_column_int(statement, 8); int _id = sqlite3_column_int(statement, 9); int availability = sqlite3_column_int(statement, 10); // NSDate *subtotal_date = [NSDate date]; NSDictionary* bsubtotaljson=[self model_subtotal:item_id count:item_count db:db compute_part:true]; // DebugLog(@"subtotal_date time interval"); // [self printTimeIntervalBetween:subtotal_date and:[NSDate date]]; double cuft=[bsubtotaljson[@"cuft"] doubleValue]; double weight=[bsubtotaljson[@"weight"] doubleValue]; int carton=[bsubtotaljson[@"carton"] intValue]; cart_count+=[bsubtotaljson[@"items"] allKeys].count; int mpack =[bsubtotaljson[@"mpack"] intValue]; // itemjson[@"img_url"]= [self model_category_img:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] model_name:nil db:db]; // NSDate *img_date = [NSDate date]; itemjson[@"img_url"] = [self item_image:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] db:db]; // DebugLog(@"img_date time interval"); // [self printTimeIntervalBetween:img_date and:[NSDate date]]; itemjson[@"model"]=nsname; itemjson[@"cuft"]=[NSNumber numberWithDouble:cuft]; itemjson[@"weight"]=[NSNumber numberWithDouble:weight]; itemjson[@"carton"]=[NSNumber numberWithInt:carton]; itemjson[@"cart_item_id"]=[NSNumber numberWithInt:_id].stringValue; itemjson[@"check"]=@"true"; itemjson[@"product_id"]=[NSNumber numberWithInt:product_id].stringValue; itemjson[@"count"]=[NSNumber numberWithInt:item_count]; itemjson[@"unit_price"]=Price; itemjson[@"discount"]=[NSNumber numberWithInt:discount]; itemjson[@"description"]=[NSString stringWithFormat:@"%@\n%@",nsname,nsdescription ]; itemjson[@"stockUom"]=[NSNumber numberWithInt:stockUom]; itemjson[@"mpack"]=[NSNumber numberWithInt:mpack]; itemjson[@"note"]=nsline_note; if (!can_create_backorder) { itemjson[@"is_out_of_stock"] = [NSNumber numberWithBool:availability >= item_count ? NO : YES]; } // NSDate *date2 = [NSDate date]; itemjson[@"combine"]=[self model_bundle:item_id db:db compute_part:false contactID:contact_id user:user]; // DebugLog(@"model_bundle time interval"); // [self printTimeIntervalBetween:date2 and:[NSDate date]]; ret[[NSString stringWithFormat:@"item_%d",count]]=itemjson; count++; // DebugLog(@"row time interval"); // [self printTimeIntervalBetween:row_date and:[NSDate date]]; } ret[@"result"]=[NSNumber numberWithInt:RESULT_TRUE ]; sqlite3_finalize(statement); } DebugLog(@"request cart total time interval"); [self printTimeIntervalBetween:date1 and:[NSDate date]]; //int cart_count=[iSalesDB get_recordcount:db table:@"offline_cart" where:[NSString stringWithFormat:@"so_no='%@'",orderCode]]; int wish_count=[iSalesDB get_recordcount:db table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"]; ret[@"wish_count"]=[NSNumber numberWithInt:wish_count ]; ret[@"cart_count"]=[NSNumber numberWithInt:cart_count ]; ret[@"count"]=[NSNumber numberWithInt:count ]; if(orderdiscount>0) ret[@"orderDiscount"]=@(orderdiscount); ret[@"mode"]=@"Regular Mode"; [iSalesDB close_db:db]; NSString *general_note = [iSalesDB jk_queryText:[NSString stringWithFormat:@"select general_notes from offline_order where so_id = '%@';",orderCode]]; DebugLog(@"general notes :%@",general_note); ret[@"general_note"]= general_note; dispatch_async(dispatch_get_main_queue(), ^{ result(ret); }); }); } @end