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