//
// OLDataProvider.m
// iSales-NPD
//
// Created by Ray on 2/2/16.
// Copyright © 2016 United Software Applications, Inc. All rights reserved.
//
#import "OLDataProvider.h"
#import "iSalesDB.h"
#import "RAUtils.h"
#import "AESCrypt.h"
//#import "AppDelegate.h"
#import "ZipArchive.h"
#import "AppDelegate.h"
#import "pdfCreator.h"
#import "RASingleton.h"
#import "QRCodeGenerator.h"
#import "config.h"
#import "ImageUtils.h"
#import "RAConvertor.h"
#import "ActiveViewController.h"
#import "RANetwork.h"
#import "RADataProvider.h"
@interface OLDataProvider ()
@end
@implementation OLDataProvider
+(NSString*) get_portfolio_price:(NSString*) contact_id item_id:(int) item_id price:(int)price_id db:(sqlite3*)db
{
NSString * sqlQuery = [NSString stringWithFormat:@"select decrypt(price) from model_price where item_id=%d and price_name in (select name from price where type=%d) ",item_id,price_id];
NSString* ret=@"No Price.";
sqlite3_stmt * statement;
// int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
char *price = (char*)sqlite3_column_text(statement, 0);
if(price==nil)
price="";
NSString *nsprice = [[NSString alloc]initWithUTF8String:price];
double dp= [nsprice doubleValue];
ret=[NSString stringWithFormat:@"%.2f",dp];
}
sqlite3_finalize(statement);
}
return ret;
// // [iSalesDB close_db:db];
//
// return nil;
//// if(dprice==DBL_MAX)
//// ret= nil;
//// else
//// ret= [NSNumber numberWithDouble:dprice];
//// return ret;
}
+ (NSString *)portfolio_img:(NSString *)item_id db:(sqlite3 *)db
{
NSString* ret= nil;
NSString *sqlQuery = nil;
// sqlQuery = [NSString stringWithFormat:@"select i.url from product m LEFT join model_image i on m.product_id = i.product_id where m.item_id=%@ order by i.default_img desc, i._id asc limit 1;",item_id];// select i.url from model m
sqlQuery = [NSString stringWithFormat:@"select i.url from model_image as i where item_id = %@ and i.type<=1 order by i.default_img desc, i.type desc limit 1;",item_id];
sqlite3_stmt * statement;
// int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
char *imgurl = (char*)sqlite3_column_text(statement, 0);
if(imgurl==nil)
imgurl="";
NSString *nsimgurl = [[NSString alloc]initWithUTF8String:imgurl];
ret=nsimgurl;
}
sqlite3_finalize(statement);
}
else
{
ret=@"";
}
// [iSalesDB close_db:db];
// DebugLog(@"data string: %@",ret );
return ret;
}
+(NSMutableDictionary*) prepare_portfolio_data:(NSMutableDictionary*) params
{
// assert(params[@"contact_id"]!=nil);
assert(params[@"user"]!=nil);
NSMutableDictionary* values=params[@"replaceValue"]; // 离线下发的参数
//生成portfolio pdf需要的数据
NSMutableDictionary* data = [[NSMutableDictionary alloc]init];
data[@"npd_url"]=COMPANY_WEB;
NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"MMMM yyyy"];
NSString* date = [formatter stringFromDate:[NSDate date]];
data[@"create_month"]=date;
data[@"company_name"]=COMPANY_FULL_NAME;
data[@"catalog_name"]=params[@"catalog_name"];
data[@"PAGE_INDEX"]=@"Page $.{CURRENT_PAGE}.$ of $.{TOTAL_PAGE}.$";
data[@"TOTAL_PAGE"]=0;
data[@"CURRENT_PAGE"]=0;
NSMutableDictionary* grid = [[NSMutableDictionary alloc]init];
BOOL show_group_by = [[params objectForKey:@"show_group_by"] boolValue];
bool show_stockout=[params[@"show_stockout"] boolValue];
NSString *sql = nil;
// v1.90 more color
NSString *group_by = @"";
if(values==nil)
{
if (show_group_by) {
group_by = @"group by b.product_group ";
}
sql=[NSString stringWithFormat:@"select a.product_id,a.name,a.description,a.price,a.sheet_discount,a.qty,a.is_percentage,a.item_id,a.fashion_id,a.line_note,a.percent,a._id,b.availability,b.color,b.legcolor,b.demension,b.seat_height,b.material,b.box_dim,b.volume,b.weight,stockuom,b.load_ability,b.fabric_content,b.assembling,b.made_in,b.more_color from (select _id, product_id,name,description,ifnull(sheet_price,'null') as price,sheet_discount,ifnull(available_qty,'null') as qty,percentage as is_percentage,item_id,fashion_id,line_note,percent from offline_portfolio where product_id in(%@)) a left join (select * from product where product_id in(%@)) b on a.product_id=b.product_id %@ order by a.name",params[@"product_ids"],params[@"product_ids"],group_by];
}
else
{
if (show_group_by) {
group_by = @"group by product_group ";
}
sql=[NSString stringWithFormat:@"select product_id,name,description,null,null,null,null,item_id,null,null,null,-1,availability,color,legcolor,demension,seat_height,material,box_dim,volume,weight,stockuom,load_ability,fabric_content,assembling,made_in,more_color from product where product_id in(%@) %@ order by name",params[@"product_ids"],group_by];
}
__block NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
sqlite3 *db = [iSalesDB get_db];
// NSDictionary *resultDic =
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
// [dic setValue:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"];
int product_id = sqlite3_column_int(stmt, 0);
// NSString *product_id_string = [NSString stringWithFormat:@"%d",product_id];
NSString *name = [self textAtColumn:1 statement:stmt];
NSString *description = [self textAtColumn:2 statement:stmt];
double price = sqlite3_column_double(stmt, 3);
NSString *s_price = [self textAtColumn:3 statement:stmt];
double discount = sqlite3_column_double(stmt,4);
int qty = sqlite3_column_int(stmt, 5);
NSString *s_qty = [self textAtColumn:5 statement:stmt];
int is_percentage = sqlite3_column_int(stmt, 6);
NSString *s_is_percentage = [self textAtColumn:6 statement:stmt];
int item_id = sqlite3_column_int(stmt, 7);
// int fashion_id = sqlite3_column_int(stmt, 8);
NSString *line_note = [self textAtColumn:9 statement:stmt];
NSString *s_percent = [self textAtColumn:10 statement:stmt];
double percent = sqlite3_column_double(stmt, 10);
// int portfolio_id = sqlite3_column_int(stmt, 11);
NSString *s_availability = [self textAtColumn:12 statement:stmt];
int availability = sqlite3_column_int(stmt, 12);
NSString *color = [self textAtColumn:13 statement:stmt];
NSString *legcolor = [self textAtColumn:14 statement:stmt];
NSString *demension = [self textAtColumn:15 statement:stmt];
NSString *seat_height = [self textAtColumn:16 statement:stmt];
NSString *material = [self textAtColumn:17 statement:stmt];
NSString *box_dim = [self textAtColumn:18 statement:stmt];
NSString *s_volume = [self textAtColumn:19 statement:stmt];
double volume = sqlite3_column_double(stmt, 19);
NSString *s_weight = [self textAtColumn:20 statement:stmt];
double weight = sqlite3_column_double(stmt, 20);
NSString *s_model_set = [self textAtColumn:21 statement:stmt];
int model_set = sqlite3_column_int(stmt, 21);
NSString *s_load_ability = [self textAtColumn:22 statement:stmt];
double load_ability = sqlite3_column_double(stmt, 22);
NSString *fabric_content = [self textAtColumn:23 statement:stmt];
NSString *assembling = [self textAtColumn:24 statement:stmt];
NSString *made_in = [self textAtColumn:25 statement:stmt];
NSInteger more_color_int = sqlite3_column_int(stmt, 26);
NSString* gprice = [self get_portfolio_price :params[@"contact_id"] item_id:item_id price:[params[@"regular_price"] intValue] db:db];
float bprice=0;
NSDictionary* bundle=[self model_bundle:item_id db:db compute_part:false contactID:params[@"contact_id"] user:params[@"user"]];
for(int b=0;b< [bundle[@"count"] intValue];b++)
{
NSDictionary* bi=bundle[[NSString stringWithFormat:@"item_%d",b]];
bprice+= [bi[@"modulus"] intValue] * [bi[@"unit_price"] floatValue];
}
if(gprice!=nil)
gprice = [NSString stringWithFormat:@"%.2f",[gprice floatValue]+bprice];
if(s_percent.length==0||is_percentage==0)
{
percent=100.0;
if([s_qty isEqualToString:@"null"])
qty=availability;
}
else
{
qty=availability;
}
qty=qty*percent/100+0.5;
for(int i=0;i<[values[@"count"] intValue];i++)
{
NSMutableDictionary * valueitem=values[[NSString stringWithFormat:@"item_%d",i]];;
if([valueitem[@"product_id"] intValue]==product_id)
{
line_note=valueitem[@"line_note"];
qty=[valueitem[@"available_qty"] intValue];
if([[valueitem allKeys] containsObject:@"available_qty"])
s_qty=[NSString stringWithFormat:@"%d",qty];
else
s_qty=@"null";
if(valueitem[@"regular_price"]!=nil)
gprice=[NSString stringWithFormat:@"%.2f",[valueitem[@"regular_price"] floatValue]];
s_price=valueitem[@"special_price"];
price=[valueitem[@"special_price"] floatValue];
discount=0;
// v1.90
more_color_int = [[valueitem objectForKey:@"more_color"] integerValue];
}
}
if(is_percentage==0&&qty==0&&!show_stockout)
{
return;
}
if((is_percentage!=0||s_is_percentage.length!=0)&&qty==0&&!show_stockout)
{
return;
}
NSString* set_price=@"";
if([params[@"entered_price"] boolValue])
{
if (s_price==nil ) {
// set_price=[NSString stringWithFormat:@"Special: $ %@",gprice];
}
else
{
if(price*(1-discount/100.0)!=gprice.floatValue)
set_price=[NSString stringWithFormat:@"Special: $ %.2f",price*(1-discount/100.0)];
}
}
NSString* get_price=@"";
{
// NSNumber* price = [self get_model_default_price:appDelegate.contact_id product_id:nil item_id:@(item_id) db:db];
// DebugLog(@"price time interval");
// [self printTimeIntervalBetween:price_date and:[NSDate date]];
if(gprice==nil)
get_price=@"Price:No Price.";
else
get_price=[NSString stringWithFormat:@"Price: $ %@",gprice];
}
// NSString *qty_null = [self textAtColumn:5 statement:stmt];
// if ([qty_null isEqualToString:@"null"]) {
// qty=availability;
// }
//
// NSString *qty_percent_null = [self textAtColumn:6 statement:stmt];
// if ([qty_percent_null isEqualToString:@"null"]) {
// percentage=1;
// }
NSString * str_availability=[NSString stringWithFormat:@"Availability: %d",(int)qty];
NSString * str_color=[NSString stringWithFormat:@"Color: %@",color];
NSString * str_model_set=[NSString stringWithFormat:@"Set: Sold in QTY of %d",model_set];
NSString * str_legcolor=[NSString stringWithFormat:@"Leg Color: %@",legcolor];
NSString * str_demension=[NSString stringWithFormat:@"Dimension: %@",demension];
NSString * str_seat_height=[NSString stringWithFormat:@"Seat Height: %@",seat_height];
NSString * str_meterial=[NSString stringWithFormat:@"Meterial: %@",material];
NSString * str_box_dim=[NSString stringWithFormat:@"Box Dimension: %@",box_dim];
NSString * str_volume=[NSString stringWithFormat:@"Volume: %.2f",volume];
NSString * str_weight=[NSString stringWithFormat:@"Weight: %.2f",weight];
NSString * str_load_ability=[NSString stringWithFormat:@"Load Ability: %.2f",load_ability];
NSString * str_fabric_content=[NSString stringWithFormat:@"Fabric Content: %@",fabric_content];
NSString * str_assembling=[NSString stringWithFormat:@"Assembling: %@",assembling];
NSString * str_made_in=[NSString stringWithFormat:@"Made In: %@",made_in];
NSString * str_line_note=[NSString stringWithFormat:@"Line Note: %@",line_note];
if([params[@"availability"] boolValue]==false)
str_availability=@"";
else
{
if ([s_qty isEqualToString:@"null"] && [s_availability isEqualToString:@"0"])
str_availability=@"Availability: In Production";
}
if([params[@"color"] boolValue]==false || color.length==0 )
str_color=@"";
if([params[@"set"] boolValue]==false || s_model_set.length==0 )
str_model_set=@"";
if([params[@"leg_color"] boolValue]==false || legcolor.length==0 )
str_legcolor=@"";
if([params[@"dimension"] boolValue]==false || demension.length==0 )
str_demension=@"";
if([params[@"seat_height"] boolValue]==false || seat_height.length==0 )
str_seat_height=@"";
if([params[@"material"] boolValue]==false || material.length==0 )
str_meterial=@"";
if([params[@"box_dimension"] boolValue]==false || box_dim.length==0 )
str_box_dim=@"";
if([params[@"volume"] boolValue]==false || s_volume.length==0 )
str_volume=@"";
if([params[@"weight"] boolValue]==false || s_weight.length==0 )
str_weight=@"";
if([params[@"load_ability"] boolValue]==false || s_load_ability.length==0 )
str_load_ability=@"";
if([params[@"fabric_content"] boolValue]==false || fabric_content.length==0 )
str_fabric_content=@"";
if([params[@"assembling"] boolValue]==false || assembling.length==0 )
str_assembling=@"";
if([params[@"made"] boolValue]==false || made_in.length==0 )
str_made_in=@"";
if([params[@"show_line_note"] boolValue]==false || line_note.length==0 )
str_line_note=@"";
NSMutableArray* arr_detail=[[NSMutableArray alloc]init];
[arr_detail addObject:str_availability];
[arr_detail addObject:str_color];
[arr_detail addObject:str_model_set];
[arr_detail addObject:str_legcolor];
[arr_detail addObject:str_demension];
[arr_detail addObject:str_seat_height];
[arr_detail addObject:str_meterial];
[arr_detail addObject:str_box_dim];
[arr_detail addObject:str_volume];
[arr_detail addObject:str_weight];
[arr_detail addObject:str_load_ability];
[arr_detail addObject:str_fabric_content];
[arr_detail addObject:str_assembling];
[arr_detail addObject:str_made_in];
[arr_detail addObject:str_line_note];
// NSString* detail =[NSString stringWithFormat:@"%@",[RAUtils arr2string:arr_detail separator:@" " trim:true]];
NSString* detail =[RAConvertor arr2string:arr_detail separator:@" " trim:true];
//model image;
NSString* img_path = [self portfolio_img:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] db:db];
// qr image
NSString* qrpath=nil;
if([params[@"show_barcode"] boolValue])
{
NSString* temp = NSTemporaryDirectory();
NSString* filename =[NSString stringWithFormat:@"%@.png", [[NSUUID UUID] UUIDString]];
qrpath=[temp stringByAppendingPathComponent:filename];
UIImage* qrimg=[QRCodeGenerator qrImageForString:name imageSize:240];
[UIImagePNGRepresentation(qrimg)writeToFile: qrpath atomically:YES];
}
NSString *more_color_path = [[NSBundle mainBundle] pathForResource:@"more_color_64" ofType:@"png"];
NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
item[@"img"]=img_path;
item[@"img_qr"]=qrpath;
item[@"special_price"]=set_price;
item[@"price"]=get_price;
item[@"name"]=name;
item[@"description"]=description;
item[@"detail"]=detail;
item[@"img"]=img_path;
if (show_group_by && more_color_int != 0) {
item[@"more_color"] = more_color_path;
}
// @{
// //@"linenotes": line_note,
//// @"product_id": product_id_string,
//// @"available_qty": @(qty),
//// @"available_percent" : @(percent),
//// @"description": [NSString stringWithFormat:@"%@\n%@",name,description],
//// @"item_id": [NSString stringWithFormat:@"%d",item_id],
//// @"fashion_id": [NSString stringWithFormat:@"%d",product_id],
// @"": ,
// @"": ,
// @"": ,
// @"": ,
// @"": ,
// @"": ,
// @"":
// }.mutableCopy;
// if (percentage) {
// [item removeObjectForKey:@"available_qty"];
// } else {
// [item removeObjectForKey:@"available_percent"];
// }
//
// NSString *qty_null = [self textAtColumn:5 statement:stmt];
// if ([qty_null isEqualToString:@"null"]) {
// [item removeObjectForKey:@"available_qty"];
// }
[dic setObject:item forKey:[NSString stringWithFormat:@"item_%ld",*count]];
[dic setValue:[NSNumber numberWithLong:++(*count)] forKey:@"count"];
}];
[iSalesDB close_db:db];
// [dic setValue:[NSNumber numberWithBool:appDelegate.can_see_price] forKey:@"can_see_price"];
// [dic setValue:@"" forKey:@"email_content"];
// [dic setValue:[dic objectForKey:@"count"] forKey:@"total_count"];
// [dic setValue:@"Regular Mode" forKey:@"mode"];
//
// NSMutableDictionary* cell = [[NSMutableDictionary alloc]init];
// cell[@"count"]=[NSNumber numberWithInt:10];
grid[@"cell0"]=dic;
data[@"grid0"]=grid;
return data;
}
+(NSMutableDictionary*) get_pdftemplate:(NSString*) template
{
NSString *default_path = [[NSBundle mainBundle] pathForResource:template ofType:nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cache_folder=[paths objectAtIndex:0];
NSString *template_path = [cache_folder stringByAppendingPathComponent:[NSString stringWithFormat:@"offline_data/%@",template]];
BOOL bdir=NO;
NSFileManager* fileManager = [NSFileManager defaultManager];
if(PDF_DEBUG)
{
NSData *data = [NSData dataWithContentsOfFile:default_path];
NSMutableDictionary *ret = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy];
return ret;
}
if(! [fileManager fileExistsAtPath:template_path isDirectory:&bdir] )
{
NSError * error=nil;
if(![fileManager copyItemAtPath:default_path toPath:template_path error:&error])
{
return nil;
}
}
NSData *data = [NSData dataWithContentsOfFile:template_path];
NSMutableDictionary *ret = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy];
return ret;
}
+(NSMutableDictionary*) query_login:(NSString*) user db:(sqlite3*) db
{
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSString *sqlQuery = [NSString stringWithFormat:@"select can_show_price,can_see_price,contact_id,user_type,can_cancel_order,can_set_cart_price,can_create_portfolio,can_delete_order,can_submit_order,can_set_tearsheet_price,can_create_order,mode,username,can_update_contact_info,first_name from offline_login where lower(username)='%@' ",user.lowercaseString ];
DebugLog(@"offline_login sql:%@",sqlQuery);
sqlite3_stmt * statement;
[ret setValue:[NSNumber numberWithInt:AP_USER_NOT_AUTH ] forKey:@"result"];
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
// [ret setValue:[NSNumber numberWithInt:AP_USER_AUTH ] forKey:@"result"];
// NSMutableDictionary* header = [[NSMutableDictionary alloc] init];
// int can_show_price = sqlite3_column_int(statement, 0);
// int can_see_price = sqlite3_column_int(statement, 1);
// char *contact_id = (char*)sqlite3_column_text(statement, 2);
// if(contact_id==nil)
// contact_id="";
// NSString *nscontact_id= [[NSString alloc]initWithUTF8String:contact_id];
// int user_type = sqlite3_column_int(statement, 3);
// int can_cancel_order = sqlite3_column_int(statement, 4);
// int can_set_cart_price = sqlite3_column_int(statement, 5);
// int can_create_portfolio = sqlite3_column_int(statement, 6);
// int can_delete_order = sqlite3_column_int(statement, 7);
// int can_submit_order = sqlite3_column_int(statement, 8);
// int can_set_tearsheet_price = sqlite3_column_int(statement, 9);
// int can_create_order = sqlite3_column_int(statement, 10);
// char *mode = (char*)sqlite3_column_text(statement, 11);
// if(mode==nil)
// mode="";
// NSString *nsmode= [[NSString alloc]initWithUTF8String:mode];
// char *username = (char*)sqlite3_column_text(statement, 12);
// if(username==nil)
// username="";
// NSString *nsusername= [[NSString alloc]initWithUTF8String:username];
// int can_update_contact_info = sqlite3_column_int(statement, 13);
char *first_name = (char*)sqlite3_column_text(statement, 14);
if(first_name==nil)
first_name="";
NSString *nsfirst_name= [[NSString alloc]initWithUTF8String:first_name];
[ret setValue:nsfirst_name forKey:@"first_name"];
}
sqlite3_finalize(statement);
}
#ifdef DEBUG
DebugLog(@"data string: %@",[RAConvertor dict2string:ret] );
#endif
return ret;
}
+(NSMutableDictionary*) prepare_salesorder_data:(NSString*) order_code user:(NSString*) user type:(int) type
{
assert(user!=nil);
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSMutableDictionary* data = [[NSMutableDictionary alloc]init];
data[@"npd_url"]=COMPANY_WEB;
NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"MM/dd/yyyy HH:mm:ss"];
NSString* date = [formatter stringFromDate:[NSDate date]];
data[@"print_date"]=date;
data[@"company_name"]=COMPANY_FULL_NAME;
data[@"PAGE_INDEX"]=@"Page $.{CURRENT_PAGE}.$ of $.{TOTAL_PAGE}.$";
data[@"TOTAL_PAGE"]=0;
data[@"CURRENT_PAGE"]=0;
// [formatter setDateFormat:@"MM/dd/yyyy"];
// date = [formatter stringFromDate:[NSDate date]];
// data[@"creat_date"]=date;
NSString* temp = NSTemporaryDirectory();
NSString* filename =[NSString stringWithFormat:@"%@.png", [[NSUUID UUID] UUIDString]];
NSString* qrpath=[temp stringByAppendingPathComponent:filename];
UIImage* qrimg=[ImageUtils generateBarCode:order_code width:480 height:44];//[QRCodeGenerator qrImageForString:order_code imageSize:240];
// bool bwrite=
[UIImagePNGRepresentation(qrimg)writeToFile: qrpath atomically:YES];
data[@"img_barcode"]=qrpath;
data[@"so_id"]=order_code;
data[@"company"]=COMPANY_FULL_NAME;
// NSString *sql = [NSString stringWithFormat:@"select o._id,o.so_id,o.poNumber,o.create_time,o.status,decrypt(c.company_name),o.customer_contact,decrypt(c.addr_1),c.addr_2,c.addr_3,c.addr_4,o.logist,o.shipping,o.lift_gate_value,o.general_notes,o.internal_notes,o.paymentType,o.lift_gate,o.receive_name,o.receive_contact,o.receive_ext,o.sender_name,o.sender_contact,o.sender_ext,o.shipping_billto_name,o.shipping_billto_contact,o.shipping_billto_ext,o.billing_name,o.billing_contact,o.billing_ext,o.returnto_name,o.returnto_contact,o.returnto_ext,o.handling_fee_value,o.paymentsAndCredits,o.total_price,o.customer_cid,o.credit_card_first_name,o.credit_card_last_name,o.credit_card_address1,o.credit_card_address2,o.credit_card_zipcode,o.credit_card_type,decrypt(o.credit_card_number),decrypt(o.credit_card_security_code),decrypt(o.credit_card_expiration_month),o.credit_card_city,o.credit_card_state,o.shipNull,o.erpOrderStatus,decrypt(o.credit_card_expiration_year),o.sign_picpath,o.customer_contact,o.customer_email,o.customer_phone,o.customer_fax,o.editable,o.lift_null,o.handling_null,o.ship_via from (select _id,so_id,poNumber,create_time,status,customer_cid,customer_contact,logist,shipping,lift_gate_value,general_notes,internal_notes,paymentType,lift_gate,receive_name,receive_contact,receive_ext,sender_name,sender_contact,sender_ext,shipping_billto_name,shipping_billto_contact,shipping_billto_ext,billing_name,billing_contact,billing_ext,returnto_name,returnto_contact,returnto_ext,handling_fee_value,paymentsAndCredits,total_price,customer_cid,credit_card_first_name,credit_card_last_name,credit_card_address1,credit_card_address2,credit_card_zipcode,credit_card_type,credit_card_number,credit_card_security_code,credit_card_expiration_month,credit_card_city,credit_card_state,ifnull(shipping,'ship_null') as shipNull,erpOrderStatus,credit_card_expiration_year,sign_picpath,customer_contact,customer_email,customer_phone,customer_fax,order_id is null as editable,lift_gate_value is null as lift_null,handling_fee_value is null as handling_null,ship_via from offline_order where so_id=%@) o left join offline_contact c on o.customer_cid=c.contact_id",order_code];
NSString *sql = [NSString stringWithFormat:@"select erpOrderStatus,sender_name,sender_ext,sender_phone,sender_fax,sender_email,warehouse_name,billing_name,billing_ext,billing_phone,billing_fax,billing_email,receive_name,receive_ext,receive_phone,receive_fax,receive_email,poNumber,sales_rep,carrier,vendor_no,terms,sales_terms,port_destination,etd,sign_picpath,status,create_time,shipping,lift_gate_value,handling_fee_value,billing_contact,receive_contact,general_notes,customer_cid,discount from offline_order where so_id='%@'",order_code];
sqlite3 *db = [iSalesDB get_db];
data[@"print_by"]= [self query_login:user db:db][@"first_name"];
sqlite3_stmt * statement;
NSMutableDictionary* datasource = [[NSMutableDictionary alloc]init];
NSMutableDictionary* row0 = [[NSMutableDictionary alloc]init];
row0[@"count"]=[NSNumber numberWithInt:1];
datasource[@"row0"]=row0;
NSString* print_status=@"";
NSString* order_type=@"Offline Quote";
if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
int erpOrderStatus = sqlite3_column_int(statement, 0);
int status = sqlite3_column_int(statement, 26);
if(status==2)
{
switch (erpOrderStatus) {
case 10:
// order_type=@"Quoted Order";
print_status=@"Quote";
break;
case 11:
print_status=@"Booked";
break;
case 12:
print_status=@"Picked";
break;
case 13:
print_status=@"Shipped";
break;
case 14:
print_status=@"Closed";
break;
case 15:
print_status=@"Canceled";
break;
case 16:
print_status=@"All";
break;
case 18:
print_status=@"Processing";
break;
default:
break;
}
}
else{
switch (status) {
case 0:
{
print_status=@"Quote";
break;
}
case 1:
{
print_status=@"Saved";
break;
}
case 3:
{
//canceled
print_status=@"Canceled";
break;
}
default:
break;
}
}
NSString* sender_name = [self textAtColumn:1 statement:statement];
NSString* sender_ext = [self textAtColumn:2 statement:statement];
NSString* sender_phone = [self textAtColumn:3 statement:statement];
NSString* sender_fax = [self textAtColumn:4 statement:statement];
NSString* sender_email = [self textAtColumn:5 statement:statement];
NSString* warehouse_name = [self textAtColumn:6 statement:statement];
NSString* billing_name = [self textAtColumn:7 statement:statement];
NSString* billing_ext = [self textAtColumn:8 statement:statement];
NSString* billing_phone = [self textAtColumn:9 statement:statement];
if(billing_phone.length>0)
billing_phone= [@"TEL: " stringByAppendingString:billing_phone];
NSString* billing_fax = [self textAtColumn:10 statement:statement];
if(billing_fax.length>0)
billing_fax= [@"FAX: " stringByAppendingString:billing_fax];
NSMutableArray* billto_arr0 = [[NSMutableArray alloc]init];
[billto_arr0 addObject:billing_phone];
[billto_arr0 addObject:billing_fax];
NSString* billing_pf=[RAConvertor arr2string:billto_arr0 separator:@" " trim:true];
NSString* billing_email = [self textAtColumn:11 statement:statement];
if(billing_email.length>0)
billing_email= [@"EMAIL: " stringByAppendingString:billing_email];
NSString* billing_contact = [self textAtColumn:31 statement:statement];
if(billing_contact.length>0)
billing_contact= [@"ATTN: " stringByAppendingString:billing_contact];
NSString* receive_name = [self textAtColumn:12 statement:statement];
NSString* receive_ext = [self textAtColumn:13 statement:statement];
NSString* receive_phone = [self textAtColumn:14 statement:statement];
if(receive_phone.length>0)
receive_phone= [@"TEL: " stringByAppendingString:receive_phone];
NSString* receive_fax = [self textAtColumn:15 statement:statement];
if(receive_fax.length>0)
receive_fax= [@"FAX: " stringByAppendingString:receive_fax];
NSMutableArray* receive_arr0 = [[NSMutableArray alloc]init];
[receive_arr0 addObject:receive_phone];
[receive_arr0 addObject:receive_fax];
NSString* receive_email = [self textAtColumn:16 statement:statement];
NSString* receive_pf=[RAConvertor arr2string:billto_arr0 separator:@" " trim:true];
if(receive_email.length>0)
receive_email= [@"EMAIL: " stringByAppendingString:receive_email];
NSString* receive_contact = [self textAtColumn:32 statement:statement];
if(receive_contact.length>0)
receive_contact= [@"ATTN: " stringByAppendingString:receive_contact];
NSString* poNumber = [self textAtColumn:17 statement:statement];
NSString* sales_rep = [self textAtColumn:18 statement:statement];
NSString* carrier = [self textAtColumn:19 statement:statement];
NSString* vendor_no = [self textAtColumn:20 statement:statement];
NSString* terms = [self textAtColumn:21 statement:statement];
NSString* sales_terms = [self textAtColumn:22 statement:statement];
NSString* port_destination = [self textAtColumn:23 statement:statement];
NSString* etd = [self textAtColumn:24 statement:statement];
NSString* sign_picpath = [self textAtColumn:25 statement:statement];
if(sign_picpath.length==0)
sign_picpath=nil;
NSString* create_date = [self textAtColumn:27 statement:statement];
create_date=[self changeDateTime:create_date Formate:@"yyyy-MM-dd HH:mm:ss" withFormate:@"MM/dd/yyyy"];
NSString* general_notes=[self textAtColumn:33 statement:statement];
NSString *customerID = [self textAtColumn:34 statement:statement];
if (customerID.length == 0) {
customerID = nil;
}
if(general_notes.length>0)
{
NSMutableDictionary* row2 = [[NSMutableDictionary alloc]init];
row2[@"item_0"]=@{@"g_notes":general_notes };
row2[@"count"]=[NSNumber numberWithInt:1];
datasource[@"row2"]=row2;
}
NSMutableArray* billto_arr = [[NSMutableArray alloc]init];
[billto_arr addObject:billing_ext];
[billto_arr addObject:billing_pf];
[billto_arr addObject:billing_contact];
[billto_arr addObject:billing_email];
NSString* billto=[RAConvertor arr2string:billto_arr separator:@"\r\n" trim:true];
NSMutableArray* receive_arr = [[NSMutableArray alloc]init];
[receive_arr addObject:receive_ext];
[receive_arr addObject:receive_pf];
[receive_arr addObject:receive_contact];
[receive_arr addObject:receive_email];
NSString* receive=[RAConvertor arr2string:receive_arr separator:@"\r\n" trim:true];
float shipping = sqlite3_column_double(statement, 28);
float lift_gate_value = sqlite3_column_double(statement, 29);
float handling_fee_value = sqlite3_column_double(statement, 30);
float order_discount=sqlite3_column_double(statement, 35);
data[@"company"]=sender_name;
data[@"shipfrom_addr"]=sender_ext;
data[@"shipfrom_phone"]=sender_phone;
data[@"shipfrom_fax"]=sender_fax;
data[@"shipfrom_email"]=sender_email;
data[@"warehouse_name"]=warehouse_name;
data[@"bill_to_name"]=billing_name;
data[@"bill_to_ext"]=billto;
data[@"ship_to_name"]=receive_name;
data[@"ship_to_ext"]=receive;
data[@"po_no"]=poNumber;
data[@"rep"]=sales_rep;
data[@"e_schdule"]=etd;
data[@"sales_terms"]=sales_terms;
data[@"port_destination"]=port_destination;
data[@"terms"]=terms;
data[@"truck_carrier"]=carrier;
data[@"vendor_no"]=vendor_no;
data[@"customer_sign"]=sign_picpath;
data[@"print_status"]=print_status;
data[@"create_date"]=create_date;
NSString *sql_cart=[ NSString stringWithFormat:@"select c.product_id,c.price,c.discount,c.item_count,c.line_note,m.name,m.description,c.item_id,m.stockUom,c._id from (select _id,product_id,decrypt(str_price) as price,discount,item_count,line_note,item_id,modify_time from offline_cart where so_no='%@') c left join product m on c.product_id=m.product_id ",order_code];;
sqlite3_stmt * statement_cart;
// NSDate *date1 = [NSDate date];
int count=0;
// int cart_count=0;
float credits=0;
int dbresult=sqlite3_prepare_v2(db, [sql_cart UTF8String], -1, &statement_cart, nil);
if ( dbresult== SQLITE_OK)
{
NSMutableDictionary* row1 = [[NSMutableDictionary alloc]init];
int row1count=0;
while (sqlite3_step(statement_cart) == SQLITE_ROW)
{
// NSDate *row_date = [NSDate date];
NSMutableDictionary* itemjson = [[NSMutableDictionary alloc] init];
// int product_id = sqlite3_column_int(statement_cart, 0);
char *str_price = (char*)sqlite3_column_text(statement_cart, 1);
int item_id = sqlite3_column_int(statement_cart, 7);
double discount = sqlite3_column_double(statement_cart, 2);
NSString* Price=nil;
if(str_price==nil)
{
// NSNumber* price= [self get_model_default_price:appDelegate.contact_id product_id:product_id db:db];
// NSDate *price_date = [NSDate date];
NSNumber* price = [self get_model_default_price:customerID user:user product_id:nil item_id:@(item_id) db:db];
// DebugLog(@"price time interval");
// [self printTimeIntervalBetween:price_date and:[NSDate date]];
if(price==nil)
Price=@"No Price.";
else
Price=[NSString stringWithFormat:@"%.2f",price.floatValue];
}
else
{
Price=[NSString stringWithFormat:@"%.2f",[[[NSString alloc]initWithUTF8String:str_price] floatValue]];
}
float dunitprice=0;
int item_count = sqlite3_column_int(statement_cart, 3);
NSString* Amount=@"";
if(![Price isEqualToString:@"No Price."])
{
dunitprice=[Price floatValue];
dunitprice=dunitprice* (1-discount/100.0);
Price=[NSString stringWithFormat:@"%.2f",dunitprice];
credits+=dunitprice*item_count;
Amount=[NSString stringWithFormat:@"%.2f",dunitprice*item_count];
}
else
{
Price=@"";
}
// char *line_note = (char*)sqlite3_column_text(statement_cart, 4);
// NSString *nsline_note=nil;
// if(line_note!=nil)
// nsline_note= [[NSString alloc]initWithUTF8String:line_note];
char *name = (char*)sqlite3_column_text(statement_cart, 5);
NSString *nsname=nil;
if(name!=nil)
nsname= [[NSString alloc]initWithUTF8String:name];
char *description = (char*)sqlite3_column_text(statement_cart, 6);
NSString *nsdescription=nil;
if(description!=nil)
nsdescription= [[NSString alloc]initWithUTF8String:description];
// int stockUom = sqlite3_column_int(statement_cart, 8);
// int _id = sqlite3_column_int(statement_cart, 9);
// NSDate *subtotal_date = [NSDate date];
// NSDictionary* bsubtotaljson=[self model_subtotal:item_id count:item_count db:db compute_part:true];
// DebugLog(@"subtotal_date time interval");
// [self printTimeIntervalBetween:subtotal_date and:[NSDate date]];
// double cuft=[bsubtotaljson[@"cuft"] doubleValue];
// double weight=[bsubtotaljson[@"weight"] doubleValue];
// int carton=[bsubtotaljson[@"carton"] intValue];
// cart_count+=[bsubtotaljson[@"items"] allKeys].count;
// itemjson[@"img_url"]= [self model_category_img:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] model_name:nil db:db];
// NSDate *img_date = [NSDate date];
itemjson[@"img_url"] = [self item_image:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] db:db];
// DebugLog(@"img_date time interval");
// [self printTimeIntervalBetween:img_date and:[NSDate date]];
itemjson[@"model"]=nsname;
// itemjson[@"cuft"]=[NSNumber numberWithDouble:cuft];
// itemjson[@"weight"]=[NSNumber numberWithDouble:weight];
// itemjson[@"carton"]=[NSNumber numberWithInt:carton];
// itemjson[@"cart_item_id"]=[NSNumber numberWithInt:_id].stringValue;
// itemjson[@"check"]=@"true";
// itemjson[@"product_id"]=[NSNumber numberWithInt:product_id].stringValue;
itemjson[@"count"]=[NSString stringWithFormat:@"%d",item_count];
itemjson[@"unit_price"]=Price;
itemjson[@"amount"]=Amount;
// itemjson[@"discount"]=[NSNumber numberWithInt:discount];
itemjson[@"description"]=[NSString stringWithFormat:@"%@",nsdescription ];
// itemjson[@"stockUom"]=[NSNumber numberWithInt:stockUom];
// itemjson[@"note"]=nsline_note;
// NSDate *date2 = [NSDate date];
// itemjson[@"combine"]=[self model_bundle:item_id db:db compute_part:false];
// DebugLog(@"model_bundle time interval");
// [self printTimeIntervalBetween:date2 and:[NSDate date]];
itemjson[@"ln#"]=[NSString stringWithFormat:@"%d.%d",count+1,1];
row1[[NSString stringWithFormat:@"item_%d", row1count] ]=itemjson;
row1count++;
NSDictionary* combine =[self model_bundle:item_id db:db compute_part:false contactID:customerID user:user];
for(int c=0;c<[combine[@"count"] intValue];c++)
{
NSMutableDictionary* combine_item=[combine[[NSString stringWithFormat:@"item_%d",c]] mutableCopy];
combine_item[@"count"]=[NSString stringWithFormat:@"%d",[combine_item[@"modulus"] intValue]*item_count];
// combine_item[@"count"]=[NSNumber numberWithInt:[combine_item[@"modulus"] intValue]*item_count];
double combine_amount=[combine_item[@"modulus"] intValue]*item_count* [combine_item[@"unit_price"] floatValue];
credits+=combine_amount;
combine_item[@"amount"]=[NSString stringWithFormat:@"%.2f",combine_amount];
combine_item[@"ln#"]=[NSString stringWithFormat:@"%d.%d",count+1,c+2];
row1[[NSString stringWithFormat:@"item_%d", row1count] ]=combine_item;
row1count++;
}
count++;
// DebugLog(@"row time interval");
// [self printTimeIntervalBetween:row_date and:[NSDate date]];
}
row1[@"count"]=[NSNumber numberWithInt:row1count];
datasource[@"row1"]=row1;
data[@"table_model"]=datasource;
sqlite3_finalize(statement_cart);
}
NSMutableDictionary* fee = [[NSMutableDictionary alloc]init];
NSMutableDictionary* fee_row0 = [[NSMutableDictionary alloc]init];
// if(credits>0)
fee_row0[@"item_0"]=@{@"name":@"Payments/Credits:" ,@"value": [NSString stringWithFormat:@"%.2f",credits]};
// else
// fee_row0[@"item_0"]=@{@"name":@"Payments/Credits:" ,@"value": @""};
if(shipping>0)
fee_row0[@"item_1"]=@{@"name":@"Shipping:" ,@"value": [NSString stringWithFormat:@"%.2f",shipping]};
else
fee_row0[@"item_1"]=@{@"name":@"Shipping:" ,@"value": @""};
if(lift_gate_value>0)
fee_row0[@"item_2"]=@{@"name":@"Lift Gate Fee:" ,@"value": [NSString stringWithFormat:@"%.2f",lift_gate_value]};
else
fee_row0[@"item_2"]=@{@"name":@"Lift Gate Fee:" ,@"value": @""};
if(handling_fee_value>0)
fee_row0[@"item_3"]=@{@"name":@"Handling Fee:" ,@"value": [NSString stringWithFormat:@"%.2f",handling_fee_value]};
else
fee_row0[@"item_3"]=@{@"name":@"Handling Fee:" ,@"value": @""};
#ifdef BUILD_CONTRAST
if(order_discount>0)
fee_row0[@"item_4"]=@{@"name":@"Order discount:" ,@"value": [NSString stringWithFormat:@"-%.2f",credits*(order_discount/100.0)]};
else
fee_row0[@"item_4"]=@{@"name":@"Order discount:" ,@"value": @""};
float total = credits*(1-order_discount/100.0)+shipping+lift_gate_value+handling_fee_value;
if(total>0)
fee_row0[@"item_5"]=@{@"name":@"Total:" ,@"value": [NSString stringWithFormat:@"%.2f",total]};
else
fee_row0[@"item_5"]=@{@"name":@"Total:" ,@"value": @""};
fee_row0[@"count"]=[NSNumber numberWithInt:6];
#else
float total = credits+shipping+lift_gate_value+handling_fee_value;
if(total>0)
fee_row0[@"item_4"]=@{@"name":@"Total:" ,@"value": [NSString stringWithFormat:@"%.2f",total]};
else
fee_row0[@"item_4"]=@{@"name":@"Total:" ,@"value": @""};
fee_row0[@"count"]=[NSNumber numberWithInt:5];
#endif
fee[@"row0"]=fee_row0;
data[@"table_fee"]=fee;
// NSString *sign_url = [self textAtColumn:51 statement:statement];
// ret[@"sign_url"] = sign_url;
//
// customer_contact = [self textAtColumn:52 statement:statement];
// customer_email = [self textAtColumn:53 statement:statement];
// customer_phone = [self textAtColumn:54 statement:statement];
// customer_fax = [self textAtColumn:55 statement:statement];
//
//
// int offline_edit=sqlite3_column_int(statement, 56);
//
// ret[@"offline_edit"]= [NSNumber numberWithInt:offline_edit];
//
// char *soid = (char*)sqlite3_column_text(statement, 1);
// if(soid==nil)
// soid= "";
// nssoid= [[NSString alloc]initWithUTF8String:soid];
// // so#
// ret[@"so#"] = nssoid;
//
// char *poNumber = (char*)sqlite3_column_text(statement, 2);
// if(poNumber==nil)
// poNumber= "";
// NSString *nspoNumber= [[NSString alloc]initWithUTF8String:poNumber];
//
//
//
// char *create_time = (char*)sqlite3_column_text(statement, 3);
// if(create_time==nil)
// create_time= "";
// NSString *nscreate_time= [[NSString alloc]initWithUTF8String:create_time];
// nscreate_time = [[self changeDateTimeFormate:nscreate_time] stringByAppendingString:@" PST"];// 与在线统一
//
// int status = sqlite3_column_int(statement, 4);
// int erpStatus = sqlite3_column_int(statement, 49);
// NSString* nsstatus = [self orderStatus:status erpStatus:erpStatus];
//
// // status
// if (status > 1 && status != 3) {
// status = erpStatus;
// } else if (status == 3) {
// status = 15;
// }
// ret[@"orderStatus"] = [NSNumber numberWithInteger:status];
// ret[@"order_status"] = nsstatus;
//
//
// char *company_name = (char*)sqlite3_column_text(statement, 5);
// if(company_name==nil)
// company_name= "";
// NSString *nscompany_name= [[NSString alloc]initWithUTF8String:company_name];
// // company name
// ret[@"company_name"] = nscompany_name;
//
// char *customer_contact = (char*)sqlite3_column_text(statement, 6);
// if(customer_contact==nil)
// customer_contact= "";
// NSString *nscustomer_contact= [[NSString alloc]initWithUTF8String:customer_contact];
//
//
// char *addr_1 = (char*)sqlite3_column_text(statement, 7);
// if(addr_1==nil)
// addr_1="";
// NSString *nsaddr_1= [[NSString alloc]initWithUTF8String:addr_1];
//
// char *addr_2 = (char*)sqlite3_column_text(statement, 8);
// if(addr_2==nil)
// addr_2="";
// NSString *nsaddr_2= [[NSString alloc]initWithUTF8String:addr_2];
//
//
// char *addr_3 = (char*)sqlite3_column_text(statement, 9);
// if(addr_3==nil)
// addr_3="";
// NSString *nsaddr_3= [[NSString alloc]initWithUTF8String:addr_3];
//
//
// char *addr_4 = (char*)sqlite3_column_text(statement, 10);
// if(addr_4==nil)
// addr_4="";
// NSString *nsaddr_4= [[NSString alloc]initWithUTF8String:addr_4];
//
// NSMutableArray* arr_addr = [[NSMutableArray alloc] init];
// [arr_addr addObject:nsaddr_1];
// [arr_addr addObject:nsaddr_2];
// [arr_addr addObject:nsaddr_3];
// [arr_addr addObject:nsaddr_4];
// NSString * customer_address = [RAUtils arr2string:arr_addr separator:@"
" trim:true];
//
//
// char *logist = (char*)sqlite3_column_text(statement, 11);
// if(logist==nil)
// logist= "";
// NSString *DebugLogist=[[NSString alloc]initWithUTF8String:logist];
// if (status == -11 || status == 10 || status == 11) {
// DebugLogist = [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:DebugLogist];
// orderinfo = [self replaceHtml:orderinfo String:@"Shipping_or_nbsp" withString:shipping];
// orderinfo = [self replaceHtml:orderinfo String:@"LiftgateFee_or_nbsp" withString:[NSString stringWithFormat:@"%.2f",lift_gate]];
// orderinfo = [self replaceHtml:orderinfo String:@"GeneralNotes_or_nbsp" withString:nsgeneral_notes];
// orderinfo = [self replaceHtml:orderinfo String:@"InternalNotes_or_nbsp" withString:nsinternal_notes];
//
// NSString *payment = nil;
// if([nspayment_type isEqualToString:@"Credit Card"])
// {
// payment = [self textFileName:@"creditcardpayment.html"];
//
// NSString *card_first_name = [self textAtColumn:37 statement:statement];
// NSString *card_last_name = [self textAtColumn:38 statement:statement];
// NSString *card_addr1 = [self textAtColumn:39 statement:statement];
// NSString *card_addr2 = [self textAtColumn:40 statement:statement];
// NSString *card_zipcode = [self textAtColumn:41 statement:statement];
// NSString *card_type = [self textAtColumn:42 statement:statement];
// if (card_type.length > 0) { // 显示星号
// card_type = @"****";
// }
// NSString *card_number = [self textAtColumn:43 statement:statement]; // 只显示最后四位
// if (card_number.length > 0 && card_number.length > 4) {
// for (int i = 0; i < card_number.length - 4; i++) {
// card_number = [card_number stringByReplacingCharactersInRange:NSMakeRange(i, 1) withString:@"*"];
// }
// } else {
// card_number = @"";
// }
// NSString *card_security_code = [self textAtColumn:44 statement:statement];
// NSString *card_expiration_month = [self textAtColumn:45 statement:statement];
// NSString *card_expiration_year = [self textAtColumn:50 statement:statement];
// NSString *card_expiration = [NSString stringWithFormat:@"%@/%@",card_expiration_month,card_expiration_year];
// if (card_expiration_month.length && card_expiration_year.length) { // 显示星号
// card_expiration = @"****";
// }
//
//
// NSString *card_city = [self textAtColumn:46 statement:statement];
// NSString *card_state = [self textAtColumn:47 statement:statement];
//
// payment = [self replaceHtml:payment String:@"CardNumber_or_nbsp" withString:card_number];
// payment = [self replaceHtml:payment String:@"CardType_or_nbsp" withString:card_type];
// payment = [self replaceHtml:payment String:@"CardExpireDate_or_nbsp" withString:card_expiration];
// payment = [self replaceHtml:payment String:@"BillingFirstName_or_nbsp" withString:card_first_name];
// payment = [self replaceHtml:payment String:@"BillingLastName_or_nbsp" withString:card_last_name];
// payment = [self replaceHtml:payment String:@"BillingAddr1_or_nbsp" withString:card_addr1];
// payment = [self replaceHtml:payment String:@"BillingAddr2_or_nbsp" withString:card_addr2];
// payment = [self replaceHtml:payment String:@"BillingCity_or_nbsp" withString:card_city];
// payment = [self replaceHtml:payment String:@"BillingState_or_nbsp" withString:card_state];
// payment = [self replaceHtml:payment String:@"BillingZipCode_or_nbsp" withString:card_zipcode];
//
//
// }
// else
// {
// payment=[self textFileName:@"normalpayment.html"];
// payment = [self replaceHtml:payment String:@"PAYMENTTYPE_PLACEHOLDER" withString:nspayment_type];
// }
// orderinfo=[self replaceHtml:orderinfo String:@"Payment_info_or_nbsp" withString:payment];
//
// ret[@"result"]= [NSNumber numberWithInt:2];
//
// // more info
// moreInfo = [self textFileName:@"more_info.html"];
//
//
// // ShipToCompany_or_ 
// NSString *shipToCompany = [self textAtColumn:18 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"ShipToCompany_or_" withString:shipToCompany];
// NSString *shipToName = [self textAtColumn:19 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"ShipToName_or_" withString:shipToName];
// NSString *shipToAddr = [self textAtColumn:20 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"ShipToAddress_or_" withString:shipToAddr];
//
//
// // ShipFromCompany_or_ 
// NSString *shipFromCompany = [self textAtColumn:21 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"ShipFromCompany_or_" withString:shipFromCompany];
// NSString *shipFromName = [self textAtColumn:22 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"ShipFromName_or_" withString:shipFromName];
// NSString *shipFromAddr = [self textAtColumn:23 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"ShipFromAddress_or_" withString:shipFromAddr];
//
//
// // FreightBillToCompany_or_ 
// NSString *freightBillToCompany = [self textAtColumn:24 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"FreightBillToCompany_or_" withString:freightBillToCompany];
// NSString *freightBillToName = [self textAtColumn:25 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"FreightBillToName_or_" withString:freightBillToName];
// NSString *freightBillToAddr = [self textAtColumn:26 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"FreightBillToAddress_or_" withString:freightBillToAddr];
//
//
// // MerchandiseBillToCompany_or_ 
// NSString *merchandiseBillToCompany = [self textAtColumn:27 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"MerchandiseBillToCompany_or_" withString:merchandiseBillToCompany];
// NSString *merchandiseBillToName = [self textAtColumn:28 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"MerchandiseBillToName_or_" withString:merchandiseBillToName];
// NSString *merchandiseBillToAddr = [self textAtColumn:29 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"MerchandiseBillToAddress_or_" withString:merchandiseBillToAddr];
//
//
// // ReturnToCompany_or_ 
// NSString *returnToCompany = [self textAtColumn:30 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"ReturnToCompany_or_" withString:returnToCompany];
// NSString *returnToName = [self textAtColumn:31 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"ReturnToName_or_" withString:returnToName];
// NSString *returnToAddr = [self textAtColumn:32 statement:statement];
// moreInfo = [self replaceHtml:moreInfo String:@"ReturnToAddress_or_" withString:returnToAddr];
// //
//
// // DebugLog(@"more info : %@",moreInfo);
//
// // handling fee
// handlingFee = sqlite3_column_double(statement, 33);
// ret[@"Handling Fee"] = [NSString stringWithFormat:@"$%.2f",handlingFee];
// if (sqlite3_column_int(statement, 58)) {
// ret[@"Handling Fee"] = @"Shipping To Be Quoted";
// }
// //
//
// // customer info
// customerID = [self textAtColumn:36 statement:statement];
//
// // mode
// ret[@"mode"] = appDelegate.mode;
//
// // model_count
// ret[@"model_count"] = @(0);
}
sqlite3_finalize(statement);
}
[iSalesDB close_db:db];
data[@"order_type"]=order_type;
#ifdef DEBUG
DebugLog(@"debug sales order data:%@", [RAConvertor dict2string:data]);
#endif
return data;
}
+(NSData*) offline_request_salesorder :(NSMutableDictionary *) params
{
assert(params[@"user"]!=nil);
NSString* template_file=nil;
switch([params[@"thumb"] intValue])
{
case 0:
template_file= @"so.json";
break;
case 1:
template_file= @"so_thumb.json";
break;
default:
template_file= @"so.json";
}
NSMutableDictionary* data = [self prepare_salesorder_data:params[@"order_code"] user:params[@"user"] type:[params[@"thumb"] intValue]];
NSMutableDictionary* template = [self get_pdftemplate:template_file];
if(data[@"table_model"][@"row2"]==nil)
template[@"pages"][@"page_0"][@"contents"][@"item_0"][@"rows"][@"count"]=[NSNumber numberWithInt:1];
NSString* file=[pdfCreator CreatePdf: template dataSource:data];
DebugLog(@"%@",file);
// return nil;
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 [RAConvertor dict2data:dic];
}
[dic setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"];
dic[@"isLocalFile"]=@"true";
return [RAConvertor dict2data:dic];
}
+(NSData*) offline_request_tearsheet :(NSMutableDictionary *) params
{
// assert(params[@"contact_id"]!=nil);
// assert(params[@"user"]!=nil);
if(params[@"user"]==nil)
{
AppDelegate *appDelegate = nil;
//some UI methods ej
appDelegate=(AppDelegate*)[[UIApplication sharedApplication] delegate];
if(appDelegate.user!=nil)
[params setValue:appDelegate.user forKey:@"user"];
}
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 [RAConvertor dict2data:dic];
}
[dic setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"];
dic[@"isLocalFile"]=@"true";
return [RAConvertor 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) saveScanSubmitList:(NSMutableDictionary*) submitlist
{
if(submitlist==nil)
return;
NSString *userdir = [OLDataProvider getUserPath];
NSString *submitlistPath = [userdir stringByAppendingPathComponent:@"submitlist.json"];
[RAUtils dicttofile:submitlistPath dict:submitlist];
}
+(void) saveScanOrderList:(NSMutableDictionary*) orderlist
{
if(orderlist==nil)
return;
NSString *userdir = [OLDataProvider getUserPath];
NSString *orderlistPath = [userdir stringByAppendingPathComponent:@"orderlist.json"];
[RAUtils dicttofile:orderlistPath dict:orderlist];
}
+(NSMutableDictionary*) getScanSubmitList
{
NSString *userdir = [OLDataProvider getUserPath];
NSString *submitlistPath = [userdir stringByAppendingPathComponent:@"submitlist.json"];
NSMutableDictionary* submitlist = nil;
if (![[NSFileManager defaultManager] fileExistsAtPath:submitlistPath]) {
submitlist = [NSMutableDictionary new];
}
else
{
submitlist=[[RAUtils dictfromfile:submitlistPath] mutableCopy];
}
return submitlist;
}
//+(NSMutableDictionary*) getScanOrderList:(NSString*)userdir{
//// NSString *userdir = [self getUserPath:user];
// NSMutableDictionary* orderlist = nil;
// NSString *orderlistPath = [userdir stringByAppendingPathComponent:@"orderlist.json"];
//
// if (![[NSFileManager defaultManager] fileExistsAtPath:orderlistPath]) {
//
//
// orderlist = [NSMutableDictionary new];
//
// // [orderlist addObject:appDelegate.order_code];
// // [RAUtils dicttofile:orderlistPath dict:orderlist];
//
// }
// else
// {
// orderlist=[[RAUtils dictfromfile:orderlistPath] mutableCopy];
//
// // [orderlist insertObject:appDelegate.order_code atIndex:0];
//
// // [RAUtils dicttofile:orderlistPath dict:orderlist];
// }
// return orderlist;
//}
+(NSMutableDictionary*) getScanOrderList{
NSString *userdir = [OLDataProvider getUserPath];
NSMutableDictionary* orderlist = nil;
NSString *orderlistPath = [userdir stringByAppendingPathComponent:@"orderlist.json"];
if (![[NSFileManager defaultManager] fileExistsAtPath:orderlistPath]) {
orderlist = [NSMutableDictionary new];
// [orderlist addObject:appDelegate.order_code];
// [RAUtils dicttofile:orderlistPath dict:orderlist];
}
else
{
orderlist=[[RAUtils dictfromfile:orderlistPath] mutableCopy];
// [orderlist insertObject:appDelegate.order_code atIndex:0];
// [RAUtils dicttofile:orderlistPath dict:orderlist];
}
return orderlist;
}
+(void) save2submitScanOrder:(NSString*) soid company:(NSString*) company
{
// NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// NSString *documents = [paths objectAtIndex:0];
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
// NSString *userdir = [OLDataProvider getUserPath];
NSMutableDictionary* orderlist = [self getScanOrderList];
// NSString *orderlistPath = [userdir stringByAppendingPathComponent:@"orderlist.json"];
int count = [orderlist[@"count"] intValue];
if(count==0)
{
// order list 为空,不用维护
#ifdef RA_NOTIFICATION
[ActiveViewController Notify:@"CartViewController,ScanOrderListViewController" Message:RA_NOTIFICATION_RELOAD_DATA];
#else
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
[((MainViewController*)appDelegate.main_vc) reloadCart:true immediately:false];
#endif
return;
}
// if (![[NSFileManager defaultManager] fileExistsAtPath:orderlistPath]) {
//
// // order list 为空,不用维护
//
//
// // [orderlist addObject:appDelegate.order_code];
// // [RAUtils dicttofile:orderlistPath dict:orderlist];
//
// }
// else
// {
// orderlist=[[RAUtils dictfromfile:orderlistPath] mutableCopy];
//
// // [orderlist insertObject:appDelegate.order_code atIndex:0];
//
// // [RAUtils dicttofile:orderlistPath dict:orderlist];
// }
//==================== order list 删除
NSMutableDictionary* newlist = [NSMutableDictionary new];
NSMutableDictionary* submititem =nil;
int newcount = 0;
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"]=@"price";
// item[nsname]= nsprice;
ret[[NSString stringWithFormat:@"item_%d",count]]= item;
count++;
}
ret[@"count"]= [NSNumber numberWithInt:count];
sqlite3_finalize(statement);
}
// [iSalesDB close_db:db];
return ret;
}
//+(NSNumber*) get_model_default_price:(NSString*) contact_id product_id:(int) product_id db:(sqlite3*)db
//{
// NSArray* arr1 = [self get_user_all_price_type:db];
// NSArray* arr2 = [self get_contact_default_price_type:contact_id db:db];
//
// // NSSet *set1 = [NSSet setWithArray:arr1];
// // NSMutableSet *set2 = [[NSSet setWithArray:arr2] mutableCopy];
// // [set2 intersectsSet:set1];
// //
// //
// // NSArray *retarr = [set2 allObjects];
//
// NSString* whereprice=nil;
// if(contact_id==nil)
// whereprice=[RAUtils arr2string:arr1 separator:@"," trim:true brackets:@"'"];
// else
// whereprice=[RAUtils arr2string:arr2 separator:@"," trim:true brackets:@"'"];
//
//
// // sqlite3 *db = [iSalesDB get_db];
//
// NSString* sqlQuery = [NSString stringWithFormat:@"select price from model_price where product_id='%d' and price_name in(%@);",product_id,whereprice];
// sqlite3_stmt * statement;
//
//
// NSNumber* ret = nil;
// double dprice=DBL_MAX;
// if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
// {
//
//
// while (sqlite3_step(statement) == SQLITE_ROW)
// {
//
// // double val = sqlite3_column_double(statement, 0);
// char *price = (char*)sqlite3_column_text(statement, 0);
// if(price!=nil)
// {
// NSString* nsprice = [[NSString alloc]initWithUTF8String:price];
// nsprice=[AESCrypt fastdecrypt:nsprice];
// if(nsprice.length>0)
// {
// double dp= [nsprice doubleValue];
// if(dp0)
{
double dp= [nsprice doubleValue];
if(dp0)
ret=[RAConvertor string2arr:nsprice_type separator:OFFLINE_ARRAY_SEPARATOR];
else
ret=nil;
}
sqlite3_finalize(statement);
}
// [iSalesDB close_db:db];
return ret;
}
+(NSString*) model_category_img :(NSString *) product_id model_name:(NSString *) model_name db:(sqlite3*)db
{
NSString* ret= nil;
// sqlite3 *db = [iSalesDB get_db];
NSString *sqlQuery = nil;
//select url,type from model_image where product_id=%d and type=1 order by default_img desc , _id asc limit 1;",product_id
// sqlQuery = [NSString stringWithFormat:@"select i.url from product m LEFT join model_image i on m.product_id = i.product_id where m.name=%@ order by i.default_img desc, i._id asc limit 1;",model_name];// select i.url from model m LEFT join model_image i on m.product_id = i.product_id where m.name=%@ order by i.default_img desc, i._id asc limit 1;
// sqlQuery = [NSString stringWithFormat:@"select i.url from product m LEFT join model_image i on m.product_id = i.product_id where m.product_id=%@ order by i.default_img desc, i._id asc limit 1;",product_id];// select i.url from model m
if(product_id==nil && model_name)
sqlQuery = [NSString stringWithFormat:@"select i.url from model_image i where product_id in (select product_id from product where name='%@') order by i.default_img desc, i._id asc limit 1;",model_name];// select i.url from model m LEFT join model_image i on m.product_id = i.product_id where m.name=%@ order by i.default_img desc, i._id asc limit 1;
else if (product_id)
sqlQuery = [NSString stringWithFormat:@"select i.url from model_image i where i.product_id=%@ order by i.default_img desc, i._id asc limit 1;",product_id];// select i.url from model m
sqlite3_stmt * statement;
// int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
char *imgurl = (char*)sqlite3_column_text(statement, 0);
if(imgurl==nil)
imgurl="";
NSString *nsimgurl = [[NSString alloc]initWithUTF8String:imgurl];
ret=nsimgurl;
}
sqlite3_finalize(statement);
}
else
{
[ret setValue:@"8" forKey:@"result"];
}
// [iSalesDB close_db:db];
DebugLog(@"data string: %@",ret );
return ret;
}
+(NSString*) model_default_category :(NSString *) product_id model_name:(NSString *) model_name upc_code:(NSString *) upc_code
{
NSString* ret= nil;
sqlite3 *db = [iSalesDB get_db];
NSString *sqlQuery = nil;
if(product_id==nil)
if(upc_code==nil)
sqlQuery = [NSString stringWithFormat:@"select default_category from product where name='%@';",model_name];// select default_category from model where name='%@';
else
sqlQuery = [NSString stringWithFormat:@"select default_category from product where upc_code = '%@' or upc_code like '%@;%%' or upc_code like '%%;%@;%%' or upc_code like '%%;%@';",upc_code,upc_code,upc_code,upc_code];// select default_category from model where name='%@';
else
sqlQuery = [NSString stringWithFormat:@"select default_category from product where product_id=%@;",product_id]; // select default_category from model where product_id=%@;
sqlite3_stmt * statement;
// int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
char *default_category = (char*)sqlite3_column_text(statement, 0);
if(default_category==nil)
default_category="";
NSString *nsdefault_category = [[NSString alloc]initWithUTF8String:default_category];
nsdefault_category=[nsdefault_category stringByReplacingOccurrencesOfString:@"%#" withString:@""];
nsdefault_category=[nsdefault_category stringByReplacingOccurrencesOfString:@"#%" withString:@""];
ret=nsdefault_category;
}
sqlite3_finalize(statement);
}
else
{
[ret setValue:@"8" forKey:@"result"];
}
[iSalesDB close_db:db];
DebugLog(@"data string: %@",ret );
return ret;
}
+ (NSString *) categoryIdOfProduct:(NSString *)product_id name:(NSString *)product_name {
NSString *sql = nil;
if (product_id != nil) {
sql = [NSString stringWithFormat:@"select category from product where product_id = '%@';",product_id];
} else {
sql = [NSString stringWithFormat:@"select category from product where name = '%@';",product_name];
}
NSString *result_set = [iSalesDB jk_queryText:sql];
result_set = [result_set stringByReplacingOccurrencesOfString:@"%" withString:@""];
result_set = [result_set stringByReplacingOccurrencesOfString:@"#" withString:@""];
return result_set;
}
//+(NSDictionary*) offline_model :(NSMutableDictionary *) params
//{
//
//
// assert(params[@"user"]!=nil);
//
//
//
// NSString* model_name = [params valueForKey:@"product_name"];
//
// NSString* product_id = [params valueForKey:@"product_id"];
//
// NSString* category = [params valueForKey:@"category"];
//
// NSString *default_category_id = [self model_default_category:product_id model_name:model_name];
// if(category==nil) {
// category = default_category_id;
// } else {
//
// NSArray *arr_0 = [category componentsSeparatedByString:@","];
// // 参数重有多个category id
// if (arr_0.count > 1) {
// NSArray *arr_1 = [[self categoryIdOfProduct:product_id name:model_name] componentsSeparatedByString:@","];
//
// // 取交集
// NSMutableSet *set_0 = [NSMutableSet setWithArray:arr_0];
// NSMutableSet *set_1 = [NSMutableSet setWithArray:arr_1];
// [set_0 intersectSet:set_1];
//
// if (set_0.count == 1) {
// category = (NSString *)[set_0 anyObject];
// } else {
// if ([set_0 containsObject:default_category_id]) {
// category = default_category_id;
// } else {
// category = (NSString *)[set_0 anyObject];
// }
// }
// }
// }
//
// NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
//
//
//
//
//
//
// sqlite3 *db = [iSalesDB get_db];
//
//// int count = [iSalesDB get_recordcount:db table:@"product" where:[NSString stringWithFormat:@"category like'#%%%@%%#'",category]];
//
//
// NSString *sqlQuery = nil;
//
// if(product_id==nil)
// sqlQuery = [NSString stringWithFormat:@"select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging,ETA,item_id,seat_dimension,product_content_writing from product where name='%@';",model_name]; // select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging from model where name='%@';
// else
//
// sqlQuery = [NSString stringWithFormat:@"select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging,ETA,item_id,seat_dimension,product_content_writing from product where product_id=%@;",product_id]; // select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging from model where product_id=%@;
//
//
// sqlite3_stmt * statement;
// [ret setValue:@"2" forKey:@"result"];
// [ret setValue:@"3" forKey:@"detail_section_count"];
//
// // int count=0;
// if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
// {
//
//
// if (sqlite3_step(statement) == SQLITE_ROW)
// {
// // NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
//
//
// char *name = (char*)sqlite3_column_text(statement, 0);
// if(name==nil)
// name="";
// NSString *nsname = [[NSString alloc]initWithUTF8String:name];
//
// char *description = (char*)sqlite3_column_text(statement, 1);
// if(description==nil)
// description="";
// NSString *nsdescription = [[NSString alloc]initWithUTF8String:description];
//
//
// int product_id = sqlite3_column_int(statement, 2);
//
//
// char *color = (char*)sqlite3_column_text(statement, 3);
// if(color==nil)
// color="";
// // NSString *nscolor = [[NSString alloc]initWithUTF8String:color];
// //
// // char *legcolor = (char*)sqlite3_column_text(statement, 4);
// // if(legcolor==nil)
// // legcolor="";
// // NSString *nslegcolor = [[NSString alloc]initWithUTF8String:legcolor];
// //
// //
// int availability = sqlite3_column_int(statement, 5);
// //
// int incoming_stock = sqlite3_column_int(statement, 6);
//
//
// char *demension = (char*)sqlite3_column_text(statement, 7);
// if(demension==nil)
// demension="";
// NSString *nsdemension = [[NSString alloc]initWithUTF8String:demension];
//
//
//
// // ,,,,,,,,,
//
//
// char *seat_height = (char*)sqlite3_column_text(statement, 8);
// if(seat_height==nil)
// seat_height="";
// NSString *nsseat_height = [[NSString alloc]initWithUTF8String:seat_height];
//
//
// char *material = (char*)sqlite3_column_text(statement, 9);
// if(material==nil)
// material="";
// NSString *nsmaterial = [[NSString alloc]initWithUTF8String:material];
//
// char *box_dim = (char*)sqlite3_column_text(statement, 10);
// if(box_dim==nil)
// box_dim="";
// NSString *nsbox_dim = [[NSString alloc]initWithUTF8String:box_dim];
//
// char *volume = (char*)sqlite3_column_text(statement, 11);
// if(volume==nil)
// volume="";
// NSString *nsvolume = [[NSString alloc]initWithUTF8String:volume];
//
// double weight = sqlite3_column_double(statement, 12);
//
// char *model_set = (char*)sqlite3_column_text(statement, 13);
// if(model_set==nil)
// model_set="";
// NSString *nsmodel_set = [[NSString alloc]initWithUTF8String:model_set];
//
// char *load_ability = (char*)sqlite3_column_text(statement, 14);
// if(load_ability==nil)
// load_ability="";
// NSString *nsload_ability = [[NSString alloc]initWithUTF8String:load_ability];
//
//// char *default_category = (char*)sqlite3_column_text(statement, 15);
//// if(default_category==nil)
//// default_category="";
//// NSString *nsdefault_category = [[NSString alloc]initWithUTF8String:default_category];
//
//
// char *fabric_content = (char*)sqlite3_column_text(statement, 16);
// if(fabric_content==nil)
// fabric_content="";
// NSString *nsfabric_content = [[NSString alloc]initWithUTF8String:fabric_content];
//
// char *assembling = (char*)sqlite3_column_text(statement, 17);
// if(assembling==nil)
// assembling="";
// NSString *nsassembling = [[NSString alloc]initWithUTF8String:assembling];
//
// char *made_in = (char*)sqlite3_column_text(statement, 18);
// if(made_in==nil)
// made_in="";
// NSString *nsmade_in = [[NSString alloc]initWithUTF8String:made_in];
//
//
// char *special_remarks = (char*)sqlite3_column_text(statement, 19);
// if(special_remarks==nil)
// special_remarks="";
// NSString *nsspecial_remarks = [[NSString alloc]initWithUTF8String:special_remarks];
//
//
// int stockUcom = sqlite3_column_double(statement, 20);
//
// char *product_group = (char*)sqlite3_column_text(statement, 21);
// if(product_group==nil)
// product_group="";
// NSString *nsproduct_group = [[NSString alloc]initWithUTF8String:product_group];
//
// // char *fashion_selector = (char*)sqlite3_column_text(statement, 22);
// // if(fashion_selector==nil)
// // fashion_selector="";
// // NSString *nsfashion_selector = [[NSString alloc]initWithUTF8String:fashion_selector];
//
// char *selector_field = (char*)sqlite3_column_text(statement, 22);
// if(selector_field==nil)
// selector_field="";
// NSString *nsselector_field = [[NSString alloc]initWithUTF8String:selector_field];
//
// char *property_field = (char*)sqlite3_column_text(statement, 23);
// if(property_field==nil)
// property_field="";
// NSString *nsproperty_field = [[NSString alloc]initWithUTF8String:property_field];
//
//
//
// char *packaging = (char*)sqlite3_column_text(statement, 24);
// if(packaging==nil)
// packaging="";
// NSString *nspackaging = [[NSString alloc]initWithUTF8String:packaging];
//
// [ret setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"];
//
// NSMutableDictionary* img_section = [[NSMutableDictionary alloc] init];
// [img_section setValue:[NSString stringWithFormat:@"%d",incoming_stock] forKey:@"incoming_stock"];
// NSString* model_s_img = [self model_category_img:[NSString stringWithFormat:@"%d",product_id] model_name:model_name db:db];
//
// [img_section setValue:model_s_img forKey:@"model_s_img"];
// [img_section setObject:[self model_img:product_id db:db] forKey:@"images"];
// [img_section setObject:[self model_property:product_id field:nsproperty_field db:db] forKey:@"property"];
// [img_section setObject:[self model_selector:nsproduct_group field:nsselector_field db:db] forKey:@"selector"];
//
//
//
//
//
// NSString* Availability=nil;
// if(availability>0)
// Availability=[NSString stringWithFormat:@"%d",availability];
// else
// Availability = @"Out of Stock";
//
// [img_section setValue:Availability forKey:@"Availability"];
// [img_section setValue:[NSString stringWithFormat:@"%d",stockUcom] forKey:@"stockUom"];
//
// AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
//
//
// char *eta = (char*)sqlite3_column_text(statement, 25);
// if(eta==nil)
// eta="";
// NSString *nseta = [[NSString alloc]initWithUTF8String:eta];
// if ([nseta isEqualToString:@"null"]) {
// nseta = @"";
// }
// if (availability <= 0) {
// [img_section setValue:nseta forKey:@"ETA"];
// }
//
//
// int item_id = sqlite3_column_int(statement, 26);
// NSString *seat_dimension = [self textAtColumn:27 statement:statement];
// NSString *content_writing = [self textAtColumn:28 statement:statement];
//
// NSString* Price=nil;
// if(appDelegate.bLogin==false)
// Price=@"Must Sign in.";
// else
// {
//// NSNumber* price= [self get_model_default_price:appDelegate.contact_id product_id:product_id db:db];
// NSNumber* price = [self get_model_default_price:appDelegate.contact_id product_id:nil item_id:@(item_id) db:db];
// if(price==nil)
// Price=@"No Price.";
// else
// Price=[NSString stringWithFormat:@"%.2f",price.floatValue];
// }
//
// [img_section setObject:content_writing forKey:@"product_content_writing"];
// [img_section setValue:Price forKey:@"price"];
// [img_section setValue:nsname forKey:@"model_name"];
// [img_section setValue:nsdescription forKey:@"model_descrition"];
//
// if (appDelegate.order_code) { // 离线order code即so#
//
// NSString *cartQtySql = [NSString stringWithFormat:@"select c.item_count from offline_cart as c left join offline_order as o on c.so_no = o.so_id where o.so_id = '%@' and c.item_id = %d;",appDelegate.order_code,item_id];
// __block int cartQTY = 0;
// [iSalesDB jk_query:cartQtySql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
//
// cartQTY = sqlite3_column_int(stmt, 0);
//
// }];
//
// if (cartQTY > 0) {
// [img_section setObject:[NSNumber numberWithInt:cartQTY] forKey:@"Model QTY in cart"];
// }
// }
//
// [ret setObject:img_section forKey:@"img_section"];
//
// NSMutableDictionary* detail0_section = [[NSMutableDictionary alloc] init];
// int detail0_item_count=0;
//
// [detail0_section setObject:[self model_kvItem:@"Dimension" value:nsdemension] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Seat Height" value:nsseat_height] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Seat Dimension" value:seat_dimension] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Material" value:nsmaterial] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Box dimension" value:nsbox_dim] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Volume" value:nsvolume] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Weight" value:[NSString stringWithFormat:@"%0.2f",weight]] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Set" value:nsmodel_set] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Load ability" value:nsload_ability] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Fabric Content" value:nsfabric_content] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Assembling" value:nsassembling] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Made in" value:nsmade_in] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Special Remarks" value:nsspecial_remarks] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// [detail0_section setObject:[self model_kvItem:@"Packaging" value:nspackaging] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
//
//
//// NSDictionary* pricejson=[self get_model_all_price:appDelegate.contact_id product_id:product_id db:db];
// NSDictionary* pricejson = [self get_model_all_price:appDelegate.contact_id item_id:item_id db:db];
// for(int l=0;l<[pricejson[@"count"] intValue];l++)
// {
// NSDictionary* price_item = pricejson[[NSString stringWithFormat:@"item_%d",l]];
// [detail0_section setObject:[self model_priceKvItem:price_item.allKeys[0] value:price_item.allValues[0]] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// }
//
//
//
//
// [detail0_section setValue:[NSString stringWithFormat:@"%d",detail0_item_count] forKey:@"count"];
// [detail0_section setValue:@"kv" forKey:@"type"];
// [detail0_section setValue:@"Product Information" forKey:@"title"];
//
// [ret setObject:detail0_section forKey:@"detail_0"];
//
//
// NSMutableDictionary* detail1_section = [[self model_NIYMAL:category db:db] mutableCopy];
// // [detail1_section setValue:@"detail" forKey:@"target"];
// // [detail1_section setValue:@"popup" forKey:@"action"];
// // [detail1_section setValue:@"content" forKey:@"type"];
// // [detail1_section setValue:@"New Items You May Also Like" forKey:@"title"];
// // [detail1_section setValue:@"model_NIYMAL" forKey:@"data_interface"];
// // [detail1_section setValue:@"true" forKey:@"single_row"];
// // [detail1_section setValue:@"true" forKey:@"partial_refresh"];
// [ret setObject:detail1_section forKey:@"detail_1"];
//
//
//
//
// NSMutableDictionary* detail2_section = [[NSMutableDictionary alloc]init];
// [detail2_section setValue:@"detail" forKey:@"target"];
// [detail2_section setValue:@"popup" forKey:@"action"];
// [detail2_section setValue:@"content" forKey:@"type"];
// [detail2_section setValue:@"Recently Viewed" forKey:@"title"];
// [detail2_section setValue:@"true" forKey:@"single_row"];
// [detail2_section setValue:@"local" forKey:@"data"];
// [ret setObject:detail2_section forKey:@"detail_2"];
// }
//
//
//
//
// sqlite3_finalize(statement);
// }
// else
// {
// [ret setValue:@"8" forKey:@"result"];
// }
//// DebugLog(@"count:%d",count);
//
//
// [iSalesDB close_db:db];
// DebugLog(@"data string: %@",[RAConvertor dict2string:ret] );
//
// return ret;
//}
+ (NSDictionary *) search:(NSMutableDictionary *)params limited:(BOOL)limited {
// NSString* orderCode = [params valueForKey:@"orderCode"];
NSString* keyword = [params valueForKey:@"keyword"];
keyword=keyword.lowercaseString;
bool exactMatch = [[params valueForKey:@"exactMatch"] boolValue]; // search by factory code
int limit = [[params valueForKey:@"limit"] intValue];
int offset = [[params valueForKey:@"offset"] intValue];
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSString *limit_str = @"";
if (limited) {
limit_str = [NSString stringWithFormat:@"limit %d offset %d ",limit,offset];
}
sqlite3 *db = [iSalesDB get_db];
int count = [iSalesDB get_recordcount:db table:@"product" where:[NSString stringWithFormat:@"(lower(name) like'%%%@%%' or lower(description) like'%%%@%%') and is_active = 1",keyword,keyword]];
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
NSString *sqlQuery = nil;
if(exactMatch )
sqlQuery=[NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete,m.more_color from product m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id where lower(name) like'%@%%' and m.is_active = 1 order by m.name %@;",params[@"orderCode"], keyword,limit_str]; // select m.name,m.description,m.product_id,w._id,m.closeout from model m left join wishlist w on m.product_id=w.product_id where lower(name) like'%@%%' order by m.name limit %d offset %d ;
else
sqlQuery=[NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete,m.more_color from product m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id where (lower(name) like'%%%@%%' or lower(description) like'%%%@%%' or lower(made_in) like '%%%@%%' or lower(material) like '%%%@%%' or lower(packaging) like '%%%@%%') and m.is_active = 1 order by m.name %@ ;",params[@"orderCode"], keyword,keyword,keyword,keyword,keyword,limit_str];// select m.name,m.description,m.product_id,w._id,m.closeout from model m left join wishlist w on m.product_id=w.product_id where lower(name) like'%%%@%%' or
DebugLog(@"offline_search sql:%@",sqlQuery);
sqlite3_stmt * statement;
[ret setValue:@"2" forKey:@"result"];
[ret setValue:[NSString stringWithFormat:@"%d",count] forKey:@"item_total_count"];
NSMutableDictionary* items = [[NSMutableDictionary alloc] init];
// int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
int i=0;
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
// char *name = (char*)sqlite3_column_text(statement, 1);
// NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
char *name = (char*)sqlite3_column_text(statement, 0);
NSString *nsname = [[NSString alloc]initWithUTF8String:name];
char *description = (char*)sqlite3_column_text(statement, 1);
NSString *nsdescription = [[NSString alloc]initWithUTF8String:description];
int product_id = sqlite3_column_int(statement, 2);
// char *url = (char*)sqlite3_column_text(statement, 3);
// if(url==nil)
// url="";
// NSString *nsurl = [[NSString alloc]initWithUTF8String:url];
int wid = sqlite3_column_int(statement, 3);
int closeout = sqlite3_column_int(statement, 4);
int cid = sqlite3_column_int(statement, 5);
int wisdelete = sqlite3_column_int(statement, 6);
int more_color = sqlite3_column_int(statement, 7);
NSMutableDictionary* imgjson=[self category_img:product_id db:db];
if(wid !=0 && wisdelete != 1)
[item setValue:@"true" forKey:@"wish_exists"];
else
[item setValue:@"false" forKey:@"wish_exists"];
if(closeout==0)
[item setValue:@"false" forKey:@"is_closeout"];
else
[item setValue:@"true" forKey:@"is_closeout"];
if(cid==0)
[item setValue:@"false" forKey:@"cart_exists"];
else
[item setValue:@"true" forKey:@"cart_exists"];
if (more_color == 0) {
[item setObject:@(false) forKey:@"more_color"];
} else if (more_color == 1) {
[item setObject:@(true) forKey:@"more_color"];
}
[item addEntriesFromDictionary:imgjson];
// [item setValue:nsurl forKey:@"img"];
[item setValue:nsname forKey:@"fash_name"];
[item setValue:nsdescription forKey:@"description"];
[item setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"];
[items setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]];
i++;
}
[items setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"];
[ret setObject:items forKey:@"items"];
sqlite3_finalize(statement);
}
DebugLog(@"count:%d",count);
[iSalesDB close_db:db];
#ifdef DEBUG
DebugLog(@"data string: %@",[RAConvertor dict2string:ret] );
#endif
return ret;
}
+(NSDictionary*) offline_search:(NSMutableDictionary *) params
{
return [self search:params limited:YES];
}
//+(NSDictionary*) offline_logout :(NSMutableDictionary *) params
//{
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
//
//// [iSalesDB disable_trigger]
// [iSalesDB disable_trigger];
// [iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"];
// [iSalesDB execSql:@"delete from offline_order where status=0;"];
//
// [iSalesDB enable_trigger];
//// [iSalesDB enable_trigger]
// //
// // NSString* user = [params valueForKey:@"user"];
// //
// // NSString* password = [params valueForKey:@"password"];
//
//
//
// NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
//
// ret[@"result"]=[NSNumber numberWithInt:2 ];
//
//
//
// appDelegate.cart_count = 0;//[[jsobj valueForKey:@"cart_count"] intValue];
// appDelegate.wish_count =0;//[[jsobj valueForKey:@"wish_count"] intValue];
// appDelegate.port_count =0;//[[jsobj valueForKey:@"portfolio_count"] intValue];
//
// [appDelegate update_count_mark];
//
//
// appDelegate.can_show_price =false;
// appDelegate.can_see_price =false;
// appDelegate.can_create_portfolio =false;
// appDelegate.can_create_order =false;
//
//
// appDelegate.can_cancel_order =false;
// appDelegate.can_set_cart_price =false;
// appDelegate.can_delete_order =false;
// appDelegate.can_submit_order =false;
// appDelegate.can_set_tearsheet_price =false;
// appDelegate.can_update_contact_info = false;
//
// appDelegate.save_order_logout = false;
// appDelegate.submit_order_logout = false;
// appDelegate.alert_sold_in_quantities = false;
//
// appDelegate.ipad_perm =nil ;
// appDelegate.user_type = USER_ROLE_UNKNOWN;
// appDelegate.OrderFilter= nil;
// [appDelegate SetSo:nil];
// [appDelegate set_main_button_panel];
//
//
// // sqlite3 *db = [iSalesDB get_db];
// //
// //
// //
// //
// //
// // NSString *sqlQuery = [NSString stringWithFormat:@"select can_show_price,can_see_price,contact_id,user_type,can_cancel_order,can_set_cart_price,can_create_portfolio,can_delete_order,can_submit_order,can_set_tearsheet_price,can_create_order,mode,username from offline_login where lower(username)='%@' and password='%@'",user.lowercaseString ,[AESCrypt encrypt:password password:@"usai"]];
// //
// //
// //
// //
// // DebugLog(@"offline_login sql:%@",sqlQuery);
// // sqlite3_stmt * statement;
// //
// //
// // [ret setValue:[NSNumber numberWithInt:AP_USER_NOT_AUTH ] forKey:@"result"];
// //
// //
// // if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
// // {
// //
// //
// // if (sqlite3_step(statement) == SQLITE_ROW)
// // {
// //
// // [ret setValue:[NSNumber numberWithInt:AP_USER_AUTH ] forKey:@"result"];
// // NSMutableDictionary* header = [[NSMutableDictionary alloc] init];
// //
// //
// //
// // int can_show_price = sqlite3_column_int(statement, 0);
// // int can_see_price = sqlite3_column_int(statement, 1);
// //
// // char *contact_id = (char*)sqlite3_column_text(statement, 2);
// // if(contact_id==nil)
// // contact_id="";
// // NSString *nscontact_id= [[NSString alloc]initWithUTF8String:contact_id];
// //
// // int user_type = sqlite3_column_int(statement, 3);
// //
// // int can_cancel_order = sqlite3_column_int(statement, 4);
// // int can_set_cart_price = sqlite3_column_int(statement, 5);
// // int can_create_portfolio = sqlite3_column_int(statement, 6);
// // int can_delete_order = sqlite3_column_int(statement, 7);
// // int can_submit_order = sqlite3_column_int(statement, 8);
// // int can_set_tearsheet_price = sqlite3_column_int(statement, 9);
// // int can_create_order = sqlite3_column_int(statement, 10);
// //
// //
// // char *mode = (char*)sqlite3_column_text(statement, 11);
// // if(mode==nil)
// // mode="";
// // NSString *nsmode= [[NSString alloc]initWithUTF8String:mode];
// //
// //
// // char *username = (char*)sqlite3_column_text(statement, 12);
// // if(username==nil)
// // username="";
// // NSString *nsusername= [[NSString alloc]initWithUTF8String:username];
// //
// //
// // [header setValue:[NSNumber numberWithBool:can_show_price] forKey:@"can_show_price"];
// // [header setValue:[NSNumber numberWithBool:can_see_price] forKey:@"can_see_price"];
// // [header setValue:nscontact_id forKey:@"contact_id"];
// // [header setValue:[NSNumber numberWithBool:user_type] forKey:@"user_type"];
// // [header setValue:[NSNumber numberWithBool:can_cancel_order] forKey:@"can_cancel_order"];
// // [header setValue:[NSNumber numberWithBool:can_set_cart_price] forKey:@"can_set_cart_price"];
// // [header setValue:[NSNumber numberWithBool:can_create_portfolio] forKey:@"can_create_portfolio"];
// // [header setValue:[NSNumber numberWithBool:can_delete_order] forKey:@"can_delete_order"];
// // [header setValue:[NSNumber numberWithBool:can_submit_order] forKey:@"can_submit_order"];
// // [header setValue:[NSNumber numberWithBool:can_set_tearsheet_price] forKey:@"can_set_tearsheet_price"];
// // [header setValue:[NSNumber numberWithBool:can_create_order] forKey:@"can_create_order"];
// //
// // [header setValue:nsusername forKey:@"username"];
// //
// //
// // [ret setObject:header forKey:@"header"];
// // [ret setValue:nsmode forKey:@"mode"];
// //
// //
// // }
// //
// //
// //
// // sqlite3_finalize(statement);
// // }
// //
// //
// //
// // [iSalesDB close_db:db];
// //
// //
// //
// //
// // DebugLog(@"data string: %@",[RAUtils dict2string:ret] );
//
// return ret;
//}
//+(NSData*) offline_createorder :(NSMutableDictionary *) params
//{
//
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
//
// [iSalesDB disable_trigger];
// [iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"];
// [iSalesDB execSql:@"delete from offline_order where status=0;"];
// [iSalesDB enable_trigger];
//
// NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
// NSString *customer_name = [self translateSingleQuote:params[@"customer_name"]];
// NSString* customer_cid = [self translateSingleQuote:params[@"customer_cid"]];
//// NSString* customer_address1 = [self translateSingleQuote:params[@"customer_address1"]];
// // NSString* customer_address2 = [self translateSingleQuote:params[@"customer_address2"]];
// // NSString* customer_address3 = [self translateSingleQuote:params[@"customer_address3"]];
// // NSString* customer_address4 = [self translateSingleQuote:params[@"customer_address4"]];
// // NSString* customer_city = [self translateSingleQuote:params[@"customer_city"]];
// NSString* customer_contact = [self translateSingleQuote:params[@"customer_contact"]];
// NSString* customer_contact_ext = [self translateSingleQuote:params[@"customer_contact_ext"]];
// // NSString* customer_contact_notes = [self translateSingleQuote:params[@"customer_contact_notes"]];
// // NSString* customer_country = [self translateSingleQuote:params[@"customer_country"]];
// NSString* customer_email = [self translateSingleQuote:params[@"customer_email"]];
// NSString* customer_fax = [self translateSingleQuote:params[@"customer_fax"]];
// NSString* customer_first_name = [self translateSingleQuote:params[@"customer_first_name"]];
// NSString* customer_last_name = [self translateSingleQuote:params[@"customer_last_name"]];
// // NSString* customer_name = [self translateSingleQuote:params[@"customer_name"]];
// NSString* customer_phone = [self translateSingleQuote:params[@"customer_phone"]];
// // NSString* customer_price_type = [self translateSingleQuote:params[@"customer_price_type"]];
// NSString* customer_sales_rep = [self translateSingleQuote:params[@"customer_sales_rep"]];
// // NSString* customer_state = [self translateSingleQuote:params[@"customer_state"]];
// // NSString* customer_zipcode = [self translateSingleQuote:params[@"customer_zipcode"]];
// NSString* create_by = [self translateSingleQuote:params[@"user"]];
//
// NSMutableArray* arr_name= [[NSMutableArray alloc] init];
//
// [arr_name addObject:customer_first_name];
// [arr_name addObject:customer_last_name];
//
// NSString *contact_name=[RAConvertor arr2string:arr_name separator:@" " trim:true];
//
// // default ship from
// NSString *ship_from_default_sql = @"select contact_id,decrypt(company_name),decrypt(addr_1),first_name || ' ' || last_name,email,fax,decrypt(phone) from offline_contact where contact_id = 'NPD';";
//
// __block NSString *cid = @"";
// __block NSString *name = @"";
// __block NSString *ext = @"";
// __block NSString *contact = @"";
// __block NSString *email = @"";
// __block NSString *fax = @"";
// __block NSString *phone = @"";
//
// sqlite3 *db = [iSalesDB get_db];
//
// [iSalesDB jk_query:ship_from_default_sql db:db close:NO completion:^(sqlite3_stmt *statment, NSMutableDictionary *container, long *count) {
//
// cid = [self textAtColumn:0 statement:statment];
// name = [self textAtColumn:1 statement:statment];
// ext = [self textAtColumn:2 statement:statment];
// contact = [self textAtColumn:3 statement:statment];
// email = [self textAtColumn:4 statement:statment];
// fax = [self textAtColumn:5 statement:statment];
// phone = [self textAtColumn:6 statement:statment];
//
// }];
//
// NSString* so_id = [self get_offline_soid:db];
// if(so_id==nil)
// so_id=[NSString stringWithFormat:@"OFFLINE%@",[NSUUID UUID].UUIDString ];
//
// NSString* sql_neworder=[NSString stringWithFormat:@"insert into offline_order(so_id,status,customer_cid,customer_contact,customer_email,customer_fax,customer_phone,sales_rep,create_by,customer_contact,must_call,sender_cid,sender_name,sender_ext,sender_contact,sender_phone,sender_fax,sender_email,billing_cid,billing_name,billing_ext,billing_contact,billing_phone,billing_fax,billing_email,sales_terms) values('%@',0,'%@','%@','%@','%@','%@','%@','%@','%@',1,'%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','FOB')",so_id,customer_cid,customer_contact,customer_email,customer_fax,customer_phone,customer_sales_rep,create_by ,contact_name,cid,name,ext,contact,phone,fax,email,customer_cid,customer_name,customer_contact_ext,customer_contact,customer_phone,customer_fax,customer_email];
//
//
//
// int result =[iSalesDB execSql:sql_neworder db:db];
// [ret setValue:[NSNumber numberWithInt:result] forKey:@"result"];
//
//
//
// //insert into offline_order(so_id,status,contact_id,sales_rep,create_by,customer_contact) select 'OFFLINE'||hex(randomblob(16)),-1,contact_id,sales_rep,company_name from offline_contact where contact_id='99FURO0002'
// //soId
// int _id=[iSalesDB get_insertid:@"offline_order" db:db];
//
//
//
//
//
// NSString *sqlQuery = [NSString stringWithFormat:@"select so_id from offline_order where _id=%d ",_id];
// sqlite3_stmt * statement;
//
// if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
// {
// if (sqlite3_step(statement) == SQLITE_ROW)
// {
// // char *name = (char*)sqlite3_column_text(statement, 1);
// // NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
//
// //ret = sqlite3_column_int(statement, 0);
//
// char *soId = (char*)sqlite3_column_text(statement, 0);
// if(soId==nil)
// soId="";
// NSString *nssoId = [[NSString alloc]initWithUTF8String:soId];
// [ret setValue:nssoId forKey:@"soId"];
// [ret setValue:nssoId forKey:@"orderCode"];
//
// }
// sqlite3_finalize(statement);
// }
//
// [ret setValue:[NSNumber numberWithInt:0] forKey:@"orderStatus"];
// [ret setValue:@"Regular Mode" forKey:@"mode"];
//
//
// [iSalesDB close_db:db];
//
// return [RAConvertor dict2data:ret];
//
//}
+(NSData*) offline_editorder :(NSMutableDictionary *) params
{
//assert(params[@"order_code"]);
// assert(params[@"order_code"]);
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSString* orderCode = [params valueForKey:@"orderCode"];
NSString* app_order_code= params[@"appDelegate.order_code"];
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
if(![app_order_code isEqualToString:orderCode]&& app_order_code!=0)
{
[iSalesDB disable_trigger];
[iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"];
[iSalesDB execSql:@"delete from offline_order where status=0;"];
[iSalesDB enable_trigger];
}
sqlite3 *db = [iSalesDB get_db];
int cart_count=[self query_ordercartcount:orderCode db:db];
int wish_count=[iSalesDB get_recordcount:db table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"];
ret[@"wish_count"]=[NSNumber numberWithInt:wish_count ];
ret[@"cart_count"]=[NSNumber numberWithInt:cart_count ];
ret[@"result"]=[NSNumber numberWithInt:RESULT_TRUE ];
[iSalesDB close_db:db];
return [RAConvertor dict2data:ret];
}
+(NSData*) offline_add2cart :(NSMutableDictionary *) params;
{
assert(params[@"can_create_backorder"]!=nil);
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
sqlite3 *db = [iSalesDB get_db];
[iSalesDB execSql:@"BEGIN TRANSACTION" db:db];
int count =0;
if(params[@"count"]!=nil)
{
count = [params[@"count"] intValue];
}
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSString* product_id=params[@"product_id"];
NSString* orderCode=params[@"orderCode"];
NSString *qty = params[@"qty"];
NSArray* arr_id=[RAConvertor string2arr:product_id separator:@","];
NSArray *qty_arr = [RAConvertor string2arr:qty separator:@","];
__block int number_of_outOfStock = 0;
for(int i=0;i availability) { // 库存不够
update = NO;
number_of_outOfStock++;
}
}];
}
if (update) {
sql=[NSString stringWithFormat:@"update offline_cart set item_count=item_count+?,create_time = datetime('now', 'localtime') where _id=?"];
sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);
sqlite3_bind_text(stmt,1,[[NSString stringWithFormat:@"%ld",item_qty] UTF8String],(int)[[NSString stringWithFormat:@"%ld",item_qty] length],NULL);
sqlite3_bind_text(stmt,2,[[NSString stringWithFormat:@"%d",_id] UTF8String],(int)[[NSString stringWithFormat:@"%d",_id] length],NULL);
shouldStep = YES;
}
}
}
if (shouldStep) {
if (sqlite3_step(stmt) == SQLITE_ERROR) {
[iSalesDB execSql:@"ROLLBACK" db:db];
ret[@"result"]=[NSNumber numberWithInt:RESULT_ERROR ];
[iSalesDB close_db:db];
DebugLog(@"add to cart error");
return [RAConvertor dict2data:ret];
}
}
}
int cart_count=[iSalesDB get_recordcount:db table:@"offline_cart" where:[NSString stringWithFormat:@"so_no='%@'",orderCode]];
int wish_count=[iSalesDB get_recordcount:db table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"];
ret[@"wish_count"]=[NSNumber numberWithInt:wish_count ];
ret[@"cart_count"]=[NSNumber numberWithInt:cart_count ];
ret[@"result"]=[NSNumber numberWithInt:RESULT_TRUE ];
if (![params[@"can_create_backorder"] boolValue]) {
if (number_of_outOfStock > 0) {
ret[@"result"]=[NSNumber numberWithInt:8];
ret[@"err_msg"] = @"Out of Stock.\nNo more quantity available.\nPlease try again after sync.";
/*[NSString stringWithFormat:@"%d item is out of stock",number_of_outOfStock]*/
}
}
[iSalesDB execSql:@"END TRANSACTION" db:db];
[iSalesDB close_db:db];
return [RAConvertor dict2data:ret];
}
+(NSDictionary*) model_bundle:(int) item_id db:(sqlite3*)db compute_part:(bool)compute contactID:(NSString *)contactID user:(NSString*)user
{
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
NSMutableDictionary* ret = [[NSMutableDictionary alloc]init];
NSString *sqlQuery = [NSString stringWithFormat:@"select b.item_id,b.qty,c.name,c.description,b.unit_price,b.use_unitprice from (select item_id,qty,decrypt(unit_price) as unit_price,use_unitprice from bundle where product_item_id=%d) b left join catalog c on b.item_id=c.item_id;",item_id];
sqlite3_stmt * statement;
int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* itemjson = [[NSMutableDictionary alloc]init];
int bitem_id = sqlite3_column_int(statement, 0);
int bitem_qty = sqlite3_column_int(statement, 1);
char *name = (char*)sqlite3_column_text(statement, 2);
if(name==nil)
name="";
NSString* nsname=[[NSString alloc]initWithUTF8String:name];
char *description = (char*)sqlite3_column_text(statement, 3);
if(description==nil)
description="";
NSString* nsdescription=[[NSString alloc]initWithUTF8String:description];
double unit_price = sqlite3_column_double(statement, 4);
int use_unitprice = sqlite3_column_int(statement, 5);
if(use_unitprice!=1)
{
unit_price=[self get_model_default_price:contactID user:user product_id:nil item_id:@(bitem_id) db:db].doubleValue;
}
itemjson[@"model"]=nsname;
itemjson[@"description"]=nsdescription;
itemjson[@"unit_price"]=[NSString stringWithFormat:@"%.2f",unit_price];
itemjson[@"modulus"]=[NSNumber numberWithInt:bitem_qty];
itemjson[@"item_id"]=[NSNumber numberWithInt:bitem_id].stringValue;
if(compute)
{
itemjson[@"combine"]=[self model_bundle:bitem_id db:db compute_part:compute contactID:contactID user:user];
}
ret[[NSString stringWithFormat:@"item_%d",count]]=itemjson;
count++;
}
sqlite3_finalize(statement);
}
ret[@"count"]=@(count);
if(count==0)
return nil;
else
return ret;
}
+(NSDictionary*) model_subtotal:(int) item_id count:(int)count db:(sqlite3*)db compute_part:(bool)compute
{
//compute: add part to subtotal;
NSMutableDictionary * dict_item = [[NSMutableDictionary alloc]init];
dict_item[@(item_id)]=@"1";
NSMutableDictionary* ret = [[NSMutableDictionary alloc]init];
double cuft=0;
double weight=0;
int carton=0;
int impack=0;
NSString *sqlQuery = [NSString stringWithFormat:@"select ulength ,uwidth ,uheight ,uweight ,mlength ,mwidth ,mheight ,mweigth ,ilength ,iwidth ,iheight , iweight ,pcs ,mpack ,ipack,ucbf,icbf,mcbf from catalog where item_id=%d;",item_id];
sqlite3_stmt * statement;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
double ulength = sqlite3_column_double(statement, 0);
double uwidth = sqlite3_column_double(statement, 1);
double uheight = sqlite3_column_double(statement, 2);
double uweight = sqlite3_column_double(statement, 3);
double mlength = sqlite3_column_double(statement, 4);
double mwidth = sqlite3_column_double(statement, 5);
double mheight = sqlite3_column_double(statement, 6);
double mweight = sqlite3_column_double(statement, 7);
double ilength = sqlite3_column_double(statement, 8);
double iwidth = sqlite3_column_double(statement, 9);
double iheight = sqlite3_column_double(statement, 10);
double iweight = sqlite3_column_double(statement, 11);
// int pcs = sqlite3_column_int(statement,12);
int mpack = sqlite3_column_int(statement, 13);
impack = mpack;
int ipack = sqlite3_column_int(statement, 14);
double ucbf = sqlite3_column_double(statement, 15);
// double icbf = sqlite3_column_double(statement, 16);
// double mcbf = sqlite3_column_double(statement, 17);
if(ipack==0)
{
carton= count/mpack ;
weight = mweight*carton;
cuft= carton*(mlength*mwidth*mheight);
int remain=count%mpack;
if(remain==0)
{
//do nothing;
}
else
{
carton++;
weight += uweight*remain;
cuft += (ulength*uwidth*uheight)*remain;
}
}
else
{
carton = count/(mpack*ipack);
weight = mweight*carton;
cuft= carton*(mlength*mwidth*mheight);
int remain=count%(mpack*ipack);
if(remain==0)
{
// do nothing;
}
else
{
carton++;
int icarton =remain/ipack;
int iremain=remain%ipack;
weight += iweight*icarton;
cuft += (ilength*iwidth*iheight)*icarton;
if(iremain==0)
{
//do nothing;
}
else
{
weight += uweight*iremain;
cuft += (ulength*uwidth*uheight)*iremain;
}
}
}
#if defined(BUILD_NPD) || defined(BUILD_USAI) || defined(BUILD_UWAVER)|| defined (BUILD_CONTRAST)
cuft=ucbf*count;
weight= uweight*count;
#endif
#if defined(BUILD_HOMER) || defined(BUILD_GATIT)
cuft=ucbf*count;
weight= uweight*count;
#endif
}
sqlite3_finalize(statement);
}
if(compute)
{
NSArray * arr_count=nil;
NSArray * arr_bundle=[self model_bundle:item_id db:db count:&arr_count];
for(int i=0;i= item_count ? NO : YES];
// }
//// NSDate *date2 = [NSDate date];
// itemjson[@"combine"]=[self model_bundle:item_id db:db compute_part:false contactID:appDelegate.contact_id];
//// DebugLog(@"model_bundle time interval");
//// [self printTimeIntervalBetween:date2 and:[NSDate date]];
//
// ret[[NSString stringWithFormat:@"item_%d",count]]=itemjson;
// count++;
//
//// DebugLog(@"row time interval");
//// [self printTimeIntervalBetween:row_date and:[NSDate date]];
// }
//
//
// ret[@"result"]=[NSNumber numberWithInt:RESULT_TRUE ];
// sqlite3_finalize(statement);
// }
//
//
// DebugLog(@"request cart total time interval");
// [self printTimeIntervalBetween:date1 and:[NSDate date]];
//
//
// //int cart_count=[iSalesDB get_recordcount:db table:@"offline_cart" where:[NSString stringWithFormat:@"so_no='%@'",orderCode]];
//
// int wish_count=[iSalesDB get_recordcount:db table:@"offline_wishlist" where:@"1=1"];
// ret[@"wish_count"]=[NSNumber numberWithInt:wish_count ];
// ret[@"cart_count"]=[NSNumber numberWithInt:cart_count ];
// ret[@"count"]=[NSNumber numberWithInt:count ];
//
// ret[@"mode"]=@"Regular Mode";
//
// [iSalesDB close_db:db];
//
// NSString *general_note = [iSalesDB jk_queryText:[NSString stringWithFormat:@"select general_notes from offline_order where so_id = '%@';",orderCode]];
//
// DebugLog(@"general notes :%@",general_note);
//
// ret[@"general_note"]= general_note;
//
// return [RAConvertor dict2data:ret];
//}
+(NSData*) offline_login :(NSMutableDictionary *) params
{
NSString* user = [params valueForKey:@"user"];
NSString* password = [params valueForKey:@"password"];
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
sqlite3 *db = [iSalesDB get_db];
NSString *sqlQuery = [NSString stringWithFormat:@"select can_show_price,can_see_price,contact_id,user_type,can_cancel_order,can_set_cart_price,can_create_portfolio,can_delete_order,can_submit_order,can_set_tearsheet_price,can_create_order,mode,username,can_update_contact_info from offline_login where lower(username)='%@' and password='%@'",user.lowercaseString ,[AESCrypt encrypt:password password:@"usai"]];
DebugLog(@"offline_login sql:%@",sqlQuery);
sqlite3_stmt * statement;
[ret setValue:[NSNumber numberWithInt:AP_USER_NOT_AUTH ] forKey:@"result"];
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
[ret setValue:[NSNumber numberWithInt:AP_USER_AUTH ] forKey:@"result"];
NSMutableDictionary* header = [[NSMutableDictionary alloc] init];
int can_show_price = sqlite3_column_int(statement, 0);
int can_see_price = sqlite3_column_int(statement, 1);
char *contact_id = (char*)sqlite3_column_text(statement, 2);
if(contact_id==nil)
contact_id="";
NSString *nscontact_id= [[NSString alloc]initWithUTF8String:contact_id];
int user_type = sqlite3_column_int(statement, 3);
int can_cancel_order = sqlite3_column_int(statement, 4);
int can_set_cart_price = sqlite3_column_int(statement, 5);
int can_create_portfolio = sqlite3_column_int(statement, 6);
int can_delete_order = sqlite3_column_int(statement, 7);
int can_submit_order = sqlite3_column_int(statement, 8);
int can_set_tearsheet_price = sqlite3_column_int(statement, 9);
int can_create_order = sqlite3_column_int(statement, 10);
char *mode = (char*)sqlite3_column_text(statement, 11);
if(mode==nil)
mode="";
NSString *nsmode= [[NSString alloc]initWithUTF8String:mode];
char *username = (char*)sqlite3_column_text(statement, 12);
if(username==nil)
username="";
NSString *nsusername= [[NSString alloc]initWithUTF8String:username];
int can_update_contact_info = sqlite3_column_int(statement, 13);
[header setValue:[NSNumber numberWithBool:can_show_price] forKey:@"can_show_price"];
[header setValue:[NSNumber numberWithBool:can_see_price] forKey:@"can_see_price"];
[header setValue:nscontact_id forKey:@"contact_id"];
[header setValue:[NSNumber numberWithBool:user_type] forKey:@"user_type"];
[header setValue:[NSNumber numberWithBool:can_cancel_order] forKey:@"can_cancel_order"];
[header setValue:[NSNumber numberWithBool:can_set_cart_price] forKey:@"can_set_cart_price"];
[header setValue:[NSNumber numberWithBool:can_create_portfolio] forKey:@"can_create_portfolio"];
[header setValue:[NSNumber numberWithBool:can_delete_order] forKey:@"can_delete_order"];
[header setValue:[NSNumber numberWithBool:can_submit_order] forKey:@"can_submit_order"];
[header setValue:[NSNumber numberWithBool:can_set_tearsheet_price] forKey:@"can_set_tearsheet_price"];
[header setValue:[NSNumber numberWithBool:can_create_order] forKey:@"can_create_order"];
[header setObject:@(YES) forKey:@"can_create_backorder"];
[header setValue:[NSNumber numberWithBool:can_update_contact_info] forKey:@"can_update_contact_info"];
[header setValue:nsusername forKey:@"username"];
NSError* error=nil;
NSString* statusFilter =[NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"offline_status_filter_cadedate" ofType:@"json"] encoding:NSUTF8StringEncoding error:&error];
[header setValue:statusFilter forKey:@"statusFilter"];
int wish_count = [iSalesDB get_recordcount:db table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"];
[header setObject:[NSString stringWithFormat:@"%d",wish_count] forKey:@"wish_count"];
// int portfolio_count = [iSalesDB get_recordcount:db table:@"portfoliolist" where:@"1=1"];
// [header setObject:[NSString stringWithFormat:@"%d",wish_count] forKey:@"portfolio_count"];
int portfolio_count = [iSalesDB get_recordcount:db table:@"offline_portfolio" where:@"is_delete is NULL or is_delete != 1"];
[header setObject:[NSString stringWithFormat:@"%d",portfolio_count] forKey:@"portfolio_count"];
[ret setObject:header forKey:@"header"];
[ret setValue:nsmode forKey:@"mode"];
}
sqlite3_finalize(statement);
}
[iSalesDB close_db:db];
#ifdef DEBUG
DebugLog(@"data string: %@",[RAConvertor dict2string:ret] );
#endif
return [RAConvertor dict2data:ret];
}
+(NSDictionary*) offline_contactinfo :(NSMutableDictionary *) params
{
assert(params[@"mode"]!=nil);
NSString* contactId = [params valueForKey:@"contactId"];
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
sqlite3 *db = [iSalesDB get_db];
NSString *sqlQuery = nil;
{
sqlQuery=[NSString stringWithFormat:@"select editable,company_name,country,addr,zipcode,state,city,contact_name,phone,contact_id,addr_1,addr_2,addr_3,addr_4,first_name,last_name,fax,email,img_0,img_1,img_2,price_type,notes,sales_rep,type,carrier from offline_contact where contact_id='%@'",contactId];
}
DebugLog(@"offline_contactlist sql:%@",sqlQuery);
sqlite3_stmt * statement;
[ret setValue:@"2" forKey:@"result"];
int carrier = -1;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
//int i = 0;
if (sqlite3_step(statement) == SQLITE_ROW)
{
[ret setValue:[NSNumber numberWithInt:AP_USER_AUTH ] forKey:@"result"];
// int editable = sqlite3_column_int(statement, 0);
char *company_name = (char*)sqlite3_column_text(statement, 1);
NSString *nscompany_name =nil;
if(company_name==nil)
nscompany_name=@"";
else
nscompany_name=[[NSString alloc]initWithUTF8String:company_name] ;
char *country = (char*)sqlite3_column_text(statement, 2);
if(country==nil)
country="";
NSString *nscountry= [[NSString alloc]initWithUTF8String:country];
// char *addr = (char*)sqlite3_column_text(statement, 3);
// if(addr==nil)
// addr="";
// NSString *nsaddr= [[NSString alloc]initWithUTF8String:addr];
char *zipcode = (char*)sqlite3_column_text(statement, 4);
if(zipcode==nil)
zipcode="";
NSString *nszipcode= [[NSString alloc]initWithUTF8String:zipcode];
char *state = (char*)sqlite3_column_text(statement, 5);
if(state==nil)
state="";
NSString *nsstate= [[NSString alloc]initWithUTF8String:state];
char *city = (char*)sqlite3_column_text(statement, 6);
if(city==nil)
city="";
NSString *nscity= [[NSString alloc]initWithUTF8String:city];
// char *contact_name = (char*)sqlite3_column_text(statement, 7);
// NSString *nscontact_name = nil;
// if(contact_name==nil)
// nscontact_name=@"";
// else
// nscontact_name= [[NSString alloc]initWithUTF8String:contact_name];
char *phone = (char*)sqlite3_column_text(statement, 8);
NSString *nsphone = nil;
if(phone==nil)
nsphone=@"";
else
nsphone= [[NSString alloc]initWithUTF8String:phone];
// char *contact_id = (char*)sqlite3_column_text(statement, 9);
// if(contact_id==nil)
// contact_id="";
// NSString *nscontact_id= [[NSString alloc]initWithUTF8String:contact_id];
char *addr_1 = (char*)sqlite3_column_text(statement, 10);
if(addr_1==nil)
addr_1="";
NSString *nsaddr_1= [[NSString alloc]initWithUTF8String:addr_1];
char *addr_2 = (char*)sqlite3_column_text(statement, 11);
if(addr_2==nil)
addr_2="";
NSString *nsaddr_2= [[NSString alloc]initWithUTF8String:addr_2];
char *addr_3 = (char*)sqlite3_column_text(statement, 12);
if(addr_3==nil)
addr_3="";
NSString *nsaddr_3= [[NSString alloc]initWithUTF8String:addr_3];
char *addr_4 = (char*)sqlite3_column_text(statement, 13);
if(addr_4==nil)
addr_4="";
NSString *nsaddr_4= [[NSString alloc]initWithUTF8String:addr_4];
char *first_name = (char*)sqlite3_column_text(statement, 14);
if(first_name==nil)
first_name="";
NSString *nsfirst_name= [[NSString alloc]initWithUTF8String:first_name];
char *last_name = (char*)sqlite3_column_text(statement, 15);
if(last_name==nil)
last_name="";
NSString *nslast_name= [[NSString alloc]initWithUTF8String:last_name];
char *fax = (char*)sqlite3_column_text(statement, 16);
NSString *nsfax = nil;
if(fax==nil)
nsfax=@"";
else
nsfax= [[NSString alloc]initWithUTF8String:fax];
char *email = (char*)sqlite3_column_text(statement, 17);
NSString *nsemail = nil;
if(email==nil)
nsemail=@"";
else
nsemail= [[NSString alloc]initWithUTF8String:email];
char *img_0 = (char*)sqlite3_column_text(statement, 18);
NSString *nsimg_0 = nil;
if(img_0==nil)
nsimg_0=@"";
else
nsimg_0= [[NSString alloc]initWithUTF8String:img_0];
[self copy_bcardImg:nsimg_0];
char *img_1 = (char*)sqlite3_column_text(statement, 19);
NSString *nsimg_1 = nil;
if(img_1==nil)
nsimg_1=@"";
else
nsimg_1= [[NSString alloc]initWithUTF8String:img_1];
[self copy_bcardImg:nsimg_1];
char *img_2 = (char*)sqlite3_column_text(statement, 20);
NSString *nsimg_2 = nil;
if(img_2==nil)
nsimg_2=@"";
else
nsimg_2= [[NSString alloc]initWithUTF8String:img_2];
[self copy_bcardImg:nsimg_2];
char *price_type = (char*)sqlite3_column_text(statement, 21);
NSString *nsprice_type = nil;
if(price_type==nil)
nsprice_type=@"";
else
nsprice_type= [[NSString alloc]initWithUTF8String:price_type];
char *notes = (char*)sqlite3_column_text(statement, 22);
NSString *nsnotes = nil;
if(notes==nil)
nsnotes=@"";
else
nsnotes= [[NSString alloc]initWithUTF8String:notes];
char *salesrep = (char*)sqlite3_column_text(statement, 23);
NSString *nssalesrep = nil;
if(salesrep==nil)
nssalesrep=@"";
else
nssalesrep= [[NSString alloc]initWithUTF8String:salesrep];
NSString *contact_type = [self textAtColumn:24 statement:statement];
carrier = sqlite3_column_int(statement, 25);
{
// decrypt
nscompany_name=[AESCrypt fastdecrypt:nscompany_name];
// nscompany_name=[NSString stringWithFormat:@"%@",nscompany_name];
nsphone=[AESCrypt fastdecrypt:nsphone];
// nsphone=[NSString stringWithFormat:@"TEL:%@",nsphone];
nsaddr_1=[AESCrypt fastdecrypt:nsaddr_1];
// nsaddr_1=[NSString stringWithFormat:@"TEL:%@",nsphone];
}
NSMutableArray* arr_name= [[NSMutableArray alloc] init];
[arr_name addObject:nsfirst_name];
[arr_name addObject:nslast_name];
NSString *nscontact_name=[RAConvertor arr2string:arr_name separator:@" " trim:true];
NSMutableArray* arr_ext= [[NSMutableArray alloc] init];
[arr_ext addObject:nsaddr_1];
[arr_ext addObject:nsaddr_2];
[arr_ext addObject:nsaddr_3];
[arr_ext addObject:nsaddr_4];
[arr_ext addObject:@"\r\n"];
[arr_ext addObject:nscity];
[arr_ext addObject:nsstate];
[arr_ext addObject:nszipcode];
[arr_ext addObject:nscountry];
NSString *nsext=[RAConvertor arr2string:arr_ext separator:@", " trim:true];
nsext=[nsext stringByReplacingOccurrencesOfString:@", \r\n," withString:@"\r\n"];
[item setValue:nsimg_2 forKey:@"business_card_2"];
[item setValue:nsimg_0 forKey:@"business_card_0"];
[item setValue:nscountry forKey:@"customer_country"];
[item setValue:nsphone forKey:@"customer_phone"];
[item setValue:nsimg_1 forKey:@"business_card_1"];
[item setValue:nscompany_name forKey:@"customer_name"];
[item setValue:nsprice_type forKey:@"customer_price_type"];
[item setValue:nsfirst_name forKey:@"customer_first_name"];
[item setValue:nsext forKey:@"customer_contact_ext"];
[item setValue:nszipcode forKey:@"customer_zipcode"];
[item setValue:nsaddr_1 forKey:@"customer_address1"];
[item setValue:nsaddr_2 forKey:@"customer_address2"];
[item setValue:nsaddr_3 forKey:@"customer_address3"];
[item setValue:nsaddr_4 forKey:@"customer_address4"];
[item setValue:nsnotes forKey:@"customer_contact_notes"];
[item setValue:nslast_name forKey:@"customer_last_name"];
[item setValue:nscity forKey:@"customer_city"];
[item setValue:nsstate forKey:@"customer_state"];
[item setValue:nssalesrep forKey:@"customer_sales_rep"];
[item setValue:contactId forKey:@"customer_cid"];
[item setValue:nscontact_name forKey:@"customer_contact"];
[item setValue:nsfax forKey:@"customer_fax"];
[item setValue:nsemail forKey:@"customer_email"];
[item setValue:contact_type forKey:@"customer_contact_type"];
// i++;
}
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
[ret setValue:params[@"mode"] forKey:@"mode"];
[ret setValue:[NSNumber numberWithInt:1 ] forKey:@"count"];
sqlite3_finalize(statement);
}
[iSalesDB close_db:db];
NSString* scarrier = [self offline_getCarrier:carrier];
item[@"customer_truck_carrier"] = scarrier;
[ret setObject:item forKey:@"customerInfo"];
#ifdef DEBUG
DebugLog(@"data string: %@",[RAConvertor dict2string:ret] );
#endif
return ret;
}
+ (bool) copy_bcardImg:(NSString*) filename
{
if(filename.length==0)
return false;
// NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
bool ret=false;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachefolder = [paths objectAtIndex:0];
// NSString* from_subpath= [fromPath stringByReplacingOccurrencesOfString:cachefolder withString:@""];
NSString *offline_createimg = [cachefolder stringByAppendingPathComponent:@"offline_createimg"];
NSString *img_cache = [cachefolder stringByAppendingPathComponent:@"img_cache"];
NSString * fromPath= [offline_createimg stringByAppendingPathComponent:filename];
NSString * toPath= [img_cache stringByAppendingPathComponent:filename];
// NSString *savedImagePath=[offline_createimg stringByAppendingPathComponent:filename];
//
// NSString *cacheImagePath=[img_cache stringByAppendingPathComponent:filename];
NSFileManager* fileManager = [NSFileManager defaultManager];
BOOL bdir=NO;
if(! [fileManager fileExistsAtPath:toPath isDirectory:&bdir])
{
NSError *error = nil;
if(![fileManager copyItemAtPath:fromPath toPath:toPath error:&error])
{
ret=false;
}
else
{
ret=true;
}
// NSError *error = nil;
// bool bsuccess=[fileManager createDirectoryAtPath:offline_createimg withIntermediateDirectories:YES attributes:nil error:&error];
//
// if(!bsuccess)
// {
// DebugLog(@"Create offline_createimg folder failed");
// [ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"];
// return [RAConvertor dict2data:ret];
// }
// if(bsuccess)
// {
// sqlite3 *db = [self get_db];
//
// [self execSql:[NSString stringWithFormat:@"insert into img_cache(name) values('%@')",name] db:db];
// [iSalesDB close_db:db];
// }
}
return ret;
//
// bool bsuccess=[image writeToFile:savedImagePath atomically:YES];
// if(bsuccess)
// {
// NSError *error = nil;
// if(![fileManager copyItemAtPath:savedImagePath toPath:cacheImagePath error:&error])
// {
// [ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"];
// }
// else
// {
// [ret setValue:[NSNumber numberWithInt:RESULT_TRUE] forKey:@"result"];
//
// ret[@"img_url_aname"]=filename;
// ret[@"img_url"]=savedImagePath;
// }
// }
}
+(NSData *) offline_saveBusinesscard:(NSData *) image
{
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachefolder = [paths objectAtIndex:0];
NSString *offline_createimg = [cachefolder stringByAppendingPathComponent:@"offline_createimg"];
NSString *img_cache = [cachefolder stringByAppendingPathComponent:@"img_cache"];
NSFileManager* fileManager = [NSFileManager defaultManager];
BOOL bdir=YES;
if(! [fileManager fileExistsAtPath:offline_createimg isDirectory:&bdir])
{
NSError *error = nil;
bool bsuccess=[fileManager createDirectoryAtPath:offline_createimg withIntermediateDirectories:YES attributes:nil error:&error];
if(!bsuccess)
{
DebugLog(@"Create offline_createimg folder failed");
[ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"];
return [RAConvertor dict2data:ret];
}
// if(bsuccess)
// {
// sqlite3 *db = [self get_db];
//
// [self execSql:[NSString stringWithFormat:@"insert into img_cache(name) values('%@')",name] db:db];
// [iSalesDB close_db:db];
// }
}
if(! [fileManager fileExistsAtPath:img_cache isDirectory:&bdir])
{
NSError *error = nil;
bool bsuccess=[fileManager createDirectoryAtPath:img_cache withIntermediateDirectories:YES attributes:nil error:&error];
if(!bsuccess)
{
DebugLog(@"Create img_cache folder failed");
[ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"];
return [RAConvertor dict2data:ret];
}
// if(bsuccess)
// {
// sqlite3 *db = [self get_db];
//
// [self execSql:[NSString stringWithFormat:@"insert into img_cache(name) values('%@')",name] db:db];
// [iSalesDB close_db:db];
// }
}
// NSData *imagedata=UIImagePNGRepresentation(self.imgview.image);
//JEPG格式
// NSData *imagedata=UIImageJEPGRepresentation(m_imgFore,1.0);
NSString* filename =[NSString stringWithFormat:@"%@.jpg",[[NSUUID UUID] UUIDString]];
NSString *savedImagePath=[offline_createimg stringByAppendingPathComponent:filename];
NSString *cacheImagePath=[img_cache stringByAppendingPathComponent:filename];
bool bsuccess=[image writeToFile:savedImagePath atomically:YES];
if(bsuccess)
{
NSError *error = nil;
if(![fileManager copyItemAtPath:savedImagePath toPath:cacheImagePath error:&error])
{
[ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"];
}
else
{
[ret setValue:[NSNumber numberWithInt:RESULT_TRUE] forKey:@"result"];
ret[@"img_url_aname"]=filename;
ret[@"img_url"]=filename;
}
}
else
{
[ret setValue:[NSNumber numberWithInt:RESULT_ERROR] forKey:@"result"];
}
return [RAConvertor dict2data:ret];
}
+(NSDictionary*) model_NIYMAL:(NSString*) category db:(sqlite3 *)db
{
// MODEL DETAIL NEW ITEM YOU MAY ALSO LIKE
category = [category substringToIndex:3];
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
params[@"category"]= category;
ret[@"params"]= params;
[ret setValue:@"detail" forKey:@"target"];
[ret setValue:@"popup" forKey:@"action"];
[ret setValue:@"content" forKey:@"type"];
[ret setValue:@"New Items You May Also Like" forKey:@"title"];
[ret setValue:@"model_NIYMAL" forKey:@"data_interface"];
[ret setValue:@"true" forKey:@"single_row"];
[ret setValue:@"true" forKey:@"partial_refresh"];
// sqlite3 *db = [iSalesDB get_db];
// int count = [iSalesDB get_recordcount:db table:@"model" where:[NSString stringWithFormat:@"category like'#%%%@%%#'",category]];
NSString *sqlQuery =nil;
#ifdef BUILD_NPD
sqlQuery=[NSString stringWithFormat:@"select m.name,m.product_id,i.url,random() as aa from product m LEFT join model_image i on m.product_id = i.product_id where m.category like'%%#%@#%%' and m.category like'%%#005#%%' and i.default_img = %d order by aa limit 10 ;",category,OFFLINE_IMG_TYPE_CATEGORY]; // select m.name,m.product_id,i.url,random() as aa from model m LEFT join model_image i on m.product_id = i.product_id where m.category like'%%#%@#%%' and m.category like'%%#005#%%' and i.default_img = %d order by aa limit 10 ;
#else
sqlQuery=[NSString stringWithFormat:@"select m.name,m.product_id,i.url,random() as aa from product m LEFT join model_image i on m.product_id = i.product_id where m.category like'%%#%@#%%' and i.default_img = %d order by aa limit 10 ;",category,OFFLINE_IMG_TYPE_CATEGORY];
#endif
sqlite3_stmt * statement;
int count = 0;
[ret setValue:[NSString stringWithFormat:@"%d",count] forKey:@"count"];
// int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
int i=0;
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
// char *name = (char*)sqlite3_column_text(statement, 1);
// NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
char *name = (char*)sqlite3_column_text(statement, 0);
NSString *nsname = [[NSString alloc]initWithUTF8String:name];
int product_id = sqlite3_column_int(statement, 1);
char *url = (char*)sqlite3_column_text(statement, 2);
if(url==nil)
url="";
NSString *nsurl = [[NSString alloc]initWithUTF8String:url];
[item setValue:nsurl forKey:@"picture_path"];
[item setValue:nsname forKey:@"fash_name"];
[item setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"];
[item setValue:category forKey:@"category"];
[ret setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]];
i++;
}
[ret setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"];
sqlite3_finalize(statement);
}
DebugLog(@"count:%d",count);
// [iSalesDB close_db:db];
return ret;
}
+(NSDictionary*) model_priceKvItem:(NSString*) key value:(NSString*)value
{
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
[ret setValue:key forKey:@"key"];
[ret setValue:value forKey:@"val"];
[ret setValue:@"price" forKey:@"type"];
return ret;
}
+(NSDictionary*) model_kvItem:(NSString*) key value:(NSString*)value
{
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
[ret setValue:key forKey:@"key"];
[ret setValue:value forKey:@"val"];
return ret;
}
+(NSDictionary*) model_property :(int)product_id field:(NSString*) field db:(sqlite3 *)db
{
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
[ret setValue:@"0" forKey:@"img_count"];
// sqlite3 *db = [iSalesDB get_db];
NSString *sqlQuery = [NSString stringWithFormat:@"select %@,property_display from product where product_id=%d ;",field,product_id]; // select %@,property_display from model where product_id=%d ;
sqlite3_stmt * statement;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
int i=0;
if (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
// char *name = (char*)sqlite3_column_text(statement, 1);
// NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
char *value = (char*)sqlite3_column_text(statement, 0);
if(value==nil)
value="";
NSString *nsvalue = [[NSString alloc]initWithUTF8String:value];
char *key = (char*)sqlite3_column_text(statement, 1);
if(key==nil)
key="";
NSString *nskey = [[NSString alloc]initWithUTF8String:key];
[item setValue:nsvalue forKey:@"val"];
[item setValue:nskey forKey:@"key"];
[ret setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]];
[ret setValue:@"1" forKey:@"count"];
i++;
}
sqlite3_finalize(statement);
}
// [iSalesDB close_db:db];
return ret;
}
+(NSDictionary*) model_selector :(NSString*)product_group field:(NSString*) field db:(sqlite3*)db
{
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
[ret setValue:@"0" forKey:@"count"];
// sqlite3 *db = [iSalesDB get_db];
NSString *sqlQuery = [NSString stringWithFormat:@"select %@,selector_display,product_id,category from product where product_group='%@' order by name;",field,product_group]; // select %@,selector_display,product_id,category from model where product_group='%@' order by name;
sqlite3_stmt * statement;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
int i=0;
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
// char *name = (char*)sqlite3_column_text(statement, 1);
// NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
char *value = (char*)sqlite3_column_text(statement, 0);
if(value==nil)
value="";
NSString *nsvalue = [[NSString alloc]initWithUTF8String:value];
char *selector_display = (char*)sqlite3_column_text(statement, 1);
if(selector_display==nil)
selector_display="";
NSString *nsselector_display = [[NSString alloc]initWithUTF8String:selector_display];
int product_id = sqlite3_column_int(statement, 2);
char *category = (char*)sqlite3_column_text(statement, 3);
if(category==nil)
category="";
NSString *nscategory = [[NSString alloc]initWithUTF8String:category];
NSString* url = [self model_category_img:[NSNumber numberWithInt:product_id].stringValue model_name:nil db:db];//[self category_img:product_id];
[item setValue:nsvalue forKey:@"title"];
[item setValue:url forKey:@"pic_url"];
NSMutableDictionary* params=[[NSMutableDictionary alloc] init];
[params setValue:@"2" forKey:@"count"];
NSMutableDictionary* param0=[[NSMutableDictionary alloc] init];
[param0 setValue:[NSNumber numberWithInt:product_id ] forKey:@"val"];
[param0 setValue:@"product_id" forKey:@"name"];
NSMutableDictionary* param1=[[NSMutableDictionary alloc] init];
[param1 setValue:nscategory forKey:@"val"];
[param1 setValue:@"category" forKey:@"name"];
[params setObject:param0 forKey:@"param_0"];
[params setObject:param1 forKey:@"param_1"];
[item setObject:params forKey:@"params"];
[ret setValue:nsselector_display forKey:@"name"];
[ret setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]];
i++;
}
[ret setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"];
[ret setValue:@"switch" forKey:@"action"];
sqlite3_finalize(statement);
}
// [iSalesDB close_db:db];
return ret;
}
+(NSMutableDictionary*) category_img :(int)product_id db:(sqlite3 *)db
{
// model 在 category search 显示的图片。
NSMutableDictionary* ret =[[NSMutableDictionary alloc]init];
// sqlite3 *db = [iSalesDB get_db];
NSString *sqlQuery = [NSString stringWithFormat:@"select url,type from model_image where product_id=%d and type<2 order by default_img desc , _id asc limit 2;",product_id];
sqlite3_stmt * statement;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
char *url = (char*)sqlite3_column_text(statement, 0);
if(url==nil)
url="";
int type = sqlite3_column_int(statement, 1);
if(type==0)
[ret setValue:[[NSString alloc]initWithUTF8String:url] forKey:@"img"];
else
[ret setValue:[[NSString alloc]initWithUTF8String:url] forKey:@"img_big"];
}
sqlite3_finalize(statement);
}
// [iSalesDB close_db:db];
return ret;
}
+(int) product_itemid:(int)product_id db:(sqlite3*)db
{
int item_id=-1;
NSString *sqlQuery = [NSString stringWithFormat:@"select item_id from product where product_id=%d;",product_id];
sqlite3_stmt * statement;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
item_id = sqlite3_column_int(statement, 0);
}
sqlite3_finalize(statement);
}
return item_id;
}
+(NSArray*) model_bundle:(int)item_id db:(sqlite3*)db count:(NSArray**)count //DEPRECATED(1_5)
{
// NSString* ret = @"";
NSMutableArray* arr_bundle = [[NSMutableArray alloc]init];
NSMutableArray* arr_count = [[NSMutableArray alloc]init];
NSString *sqlQuery = [NSString stringWithFormat:@"select item_id,qty from bundle where product_item_id=%d;",item_id];
sqlite3_stmt * statement;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
int bitem_id = sqlite3_column_int(statement, 0);
int bitem_qty = sqlite3_column_int(statement, 1);
[arr_bundle addObject:[NSNumber numberWithInt:bitem_id] ];
[arr_count addObject:[NSNumber numberWithInt:bitem_qty] ];
}
// ret=[RAUtils arr2string:arr_bundle separator:@";" trim:true];
sqlite3_finalize(statement);
}
// if(ret==nil)
// ret=@"";
*count=arr_count;
return arr_bundle;
}
+(int) model_stockUom :(int)product_id db:(sqlite3*)db
{
// get default sold qty, return -1 if model not found;
int ret = -1;
NSString *sqlQuery = [NSString stringWithFormat:@"select stockUom from product where product_id=%d;",product_id];// select stockUom from model where product_id=%d;
sqlite3_stmt * statement;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
ret = sqlite3_column_int(statement, 0);
}
sqlite3_finalize(statement);
}
return ret;
}
+(NSDictionary*) model_img :(int)product_id db:(sqlite3*)db
{
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
[ret setValue:@"0" forKey:@"img_count"];
// sqlite3 *db = [iSalesDB get_db];
NSString *sqlQuery = [NSString stringWithFormat:@"select url from model_image where product_id=%d and type=1;",product_id];
sqlite3_stmt * statement;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
int i=0;
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
// char *name = (char*)sqlite3_column_text(statement, 1);
// NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
char *url = (char*)sqlite3_column_text(statement, 0);
if(url==nil)
url="";
NSString *nsurl = [[NSString alloc]initWithUTF8String:url];
[item setValue:nsurl forKey:@"s"];
[item setValue:nsurl forKey:@"l"];
[ret setObject:item forKey:[NSString stringWithFormat:@"img_%d",i]];
i++;
}
[ret setValue:[NSString stringWithFormat:@"%d",i] forKey:@"img_count"];
sqlite3_finalize(statement);
}
// [iSalesDB close_db:db];
return ret;
}
+ (NSDictionary *) offline_add2wishlist:(NSMutableDictionary *)params {
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
NSMutableDictionary* ret=[[NSMutableDictionary alloc]init];
sqlite3 *db = [iSalesDB get_db];
[iSalesDB execSql:@"BEGIN TRANSACTION" db:db];
NSString* product_id=params[@"product_id"];
NSString *item_count_str = params[@"item_count"];
NSArray* arr=[RAConvertor string2arr:product_id separator:@","];
NSArray *item_count_arr = item_count_str ? [RAConvertor string2arr:item_count_str separator:@","] : nil;
NSString* sqlQuery = [NSString stringWithFormat:@"insert into wishlist(product_id,qty) values(?,?);"];
// NSString *sql = @"";
for(int i=0;i 0) {
countryCode_id = params[@"country"];
NSDictionary *dic = [self offline_dealZipCode:zip_code];
countryCode = [dic valueForKey:@"country_code"];
if (!countryCode) {
// countryCode = @"US";
NSString *code_id = params[@"country"];
countryCode = [self countryCodeByid:code_id];
}
stateCode = [dic valueForKey:@"state_code"];
if (!stateCode.length) {
stateCode = params[@"state"];
}
city = [dic valueForKey:@"city"];
if (!city.length) {
city = params[@"city"];
}
// zip code
NSMutableDictionary *zipDic = [[section_0 valueForKey:@"item_11"] mutableCopy];
[zipDic setValue:zipCode forKey:@"value"];
[section_0 setValue:zipDic forKey:@"item_11"];
} else {
NSString *code_id = params[@"country"];
countryCode = [self countryCodeByid:code_id];
stateCode = params[@"state"];
city = params[@"city"];
}
}
} else {
// default: US United States
countryCode = @"US";
countryCode_id = @"228";
}
// country
NSDictionary *allCountry = [self offline_getAllCountryDefault:countryCode];
[self setValue:allCountry forItemKey:@"item_6" valueKey:@"cadedate" inDictionary:section_0];
// state
NSDictionary *allState = [self offline_getStateByCountryCode:countryCode checkedState:stateCode];
// NSDictionary *allState = [self offline_getStateByCountryCodeId:countryCode_id checkedState:stateCode];
[self setValue:allState forItemKey:@"item_12" valueKey:@"cadedate" inDictionary:section_0];
// city
if (city) {
NSMutableDictionary *cityDic = [[section_0 valueForKey:@"item_13"] mutableCopy];
[cityDic setValue:city forKey:@"value"];
[section_0 setValue:cityDic forKey:@"item_13"];
}
// price type
NSDictionary *priceDic = [self offline_getPrice];
[self setValue:priceDic forItemKey:@"item_2" valueKey:@"cadedate" inDictionary:section_0];
// contact type
NSDictionary *contactTypeDic = [self offline_getContactTypeChecked:nil];
[self setValue:contactTypeDic forItemKey:@"item_3" valueKey:@"cadedate" inDictionary:section_0];
// Sales Rep
NSDictionary *repDic = [self offline_getSalesRep:params[@"user"]];
[self setValue:repDic forItemKey:@"item_18" valueKey:@"cadedate" inDictionary:section_0];
#ifdef BUILD_CONTRAST
//carrier
NSDictionary *carrierDic = [self offline_getAllCarrier:params[@"carrier"]];
[self setValue:carrierDic forItemKey:@"item_19" valueKey:@"cadedate" inDictionary:section_0];
#endif
[ret setValue:section_0 forKey:@"section_0"];
return [RAConvertor dict2data:ret];
}
#pragma mark save
+ (NSData *)offline_saveContact:(NSDictionary *)params update:(BOOL)update isCustomer:(BOOL)isCustomer{
NSString *addr = nil;
NSString *contact_name = nil;
// int carrier = [params[@"carrier"] intValue];
NSString *companyName = [params objectForKey:@"company"];
if (companyName) {
companyName = [AESCrypt fastencrypt:companyName];
} else {
companyName = @"";
}
DebugLog(@"company");
companyName = [self translateSingleQuote:companyName];
NSString *addr1 = [params objectForKey:@"address"];
NSString *addr2 = [params objectForKey:@"address2"];
NSString *addr3 = [params objectForKey:@"address_3"];
NSString *addr4 = [params objectForKey:@"address_4"];
if (!addr2) {
addr2 = @"";
}
if (!addr3) {
addr3 = @"";
}
if (!addr4) {
addr4 = @"";
}
if (!addr1) {
addr1 = @"";
}
DebugLog(@"addr");
addr = [RAConvertor arr2string:@[addr1,addr2,addr3,addr4] separator:@" " trim:true];
addr = [AESCrypt fastencrypt:addr];
addr = [self translateSingleQuote:addr];
if (addr1 && ![addr1 isEqualToString:@""]) {
addr1 = [AESCrypt fastencrypt:addr1];
}
addr1 = [self translateSingleQuote:addr1];
addr2 = [self translateSingleQuote:addr2];
addr3 = [self translateSingleQuote:addr3];
addr4 = [self translateSingleQuote:addr4];
NSString *country = [params objectForKey:@"country"];
if (country) {
country = [self countryNameByCountryCodeId:country];
} else {
country = @"";
}
int carrier = [params[@"carrier"] intValue];
DebugLog(@"country");
country = [self translateSingleQuote:country];
NSString *state = [params objectForKey:@"state"];
if (!state) {
state = @"";
}
DebugLog(@"state");
state = [self translateSingleQuote:state];
NSString *city = [params objectForKey:@"city"];
if (!city) {
city = @"";
}
city = [self translateSingleQuote:city];
NSString *zipcode = [params objectForKey:@"zipcode"];
if (!zipcode) {
zipcode = @"";
}
DebugLog(@"zip");
zipcode = [self translateSingleQuote:zipcode];
NSString *fistName = [params objectForKey:@"firstname"];
if (!fistName) {
fistName = @"";
}
NSString *lastName = [params objectForKey:@"lastname"];
if (!lastName) {
lastName = @"";
}
contact_name = [RAConvertor arr2string:@[fistName,lastName] separator:@" " trim:true];
DebugLog(@"contact_name");
contact_name = [self translateSingleQuote:contact_name];
fistName = [self translateSingleQuote:fistName];
lastName = [self translateSingleQuote:lastName];
NSString *phone = [params objectForKey:@"phone"];
if (phone) {
phone = [AESCrypt fastencrypt:phone];
} else {
phone = @"";
}
DebugLog(@"PHONE");
phone = [self translateSingleQuote:phone];
NSString *fax = [params objectForKey:@"fax"];
if (!fax) {
fax = @"";
}
DebugLog(@"FAX");
fax = [self translateSingleQuote:fax];
NSString *email = [params objectForKey:@"email"];
if (!email) {
email = @"";
}
DebugLog(@"EMAIL:%@",email);
email = [self translateSingleQuote:email];
NSString *notes = [params objectForKey:@"contact_notes"];
if (!notes) {
notes = @"";
}
DebugLog(@"NOTE:%@",notes);
notes = [self translateSingleQuote:notes];
NSString *price = [params objectForKey:@"price_name"];
if (price) {
price = [self priceNameByPriceId:price];
} else {
price = @"";
}
DebugLog(@"PRICE");
price = [self translateSingleQuote:price];
NSString *salesRep = [params objectForKey:@"sales_rep"];
if (salesRep) {
salesRep = [self salesRepCodeById:salesRep];
} else {
salesRep = @"";
}
salesRep = [self translateSingleQuote:salesRep];
NSString *img = [params objectForKey:@"business_card"];
NSArray *array = [img componentsSeparatedByString:@","];
NSString *img_0 = array[0];
if (!img_0) {
img_0 = @"";
}
img_0 = [self translateSingleQuote:img_0];
NSString *img_1 = array[1];
if (!img_1) {
img_1 = @"";
}
img_1 = [self translateSingleQuote:img_1];
NSString *img_2 = array[2];
if (!img_2) {
img_2 = @"";
}
img_2 = [self translateSingleQuote:img_2];
NSString *contact_id = [NSUUID UUID].UUIDString;
NSString *contact_type = [params objectForKey:@"type_name"];
if (!contact_type) {
contact_type = @"";
}
contact_type = [self translateSingleQuote:contact_type];
// 判断更新时是否为customer
if (update) {
contact_id = [params objectForKey:@"contact_id"];
if (!contact_id) {
contact_id = @"";
}
NSString *checkCustomerSql = [NSString stringWithFormat:@"select Sales_Order_Customer from offline_contact where contact_id = '%@';",contact_id];
__block int customer = 0;
[iSalesDB jk_query:checkCustomerSql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
customer = sqlite3_column_int(stmt, 0);
}];
isCustomer = customer ? YES : NO;
}
NSMutableDictionary *sync_dic = [params mutableCopy];
if (isCustomer) {
[sync_dic setValue:@"Sales_Order_Customer" forKey:@"contactType"];
} else {
[sync_dic setValue:@"Sales_Order_Ship_To" forKey:@"contactType"];
}
sync_dic[@"truck_carrier"] = [self offline_getCarrier: [sync_dic[@"carrier"] intValue]];
NSString *sync_data = nil;
NSString *sql = nil;
if (update){
contact_id = [params objectForKey:@"contact_id"];
if (!contact_id) {
contact_id = @"";
}
[sync_dic setValue:contact_id forKey:@"contact_id"];
// sync_data = [AESCrypt fastencrypt:[RAUtils dict2string:sync_dic]];
sync_data = [RAConvertor dict2string:sync_dic];
sync_data = [self translateSingleQuote:sync_data];
sql = [NSString stringWithFormat:@"update offline_contact set company_name = '%@',addr_1 = '%@',addr_2 = '%@',addr_3 = '%@',addr_4 = '%@',country = '%@',state = '%@',city = '%@',zipcode = '%@',first_name = '%@',last_name = '%@',phone = '%@',fax = '%@',email = '%@',notes = '%@',price_type = '%@',sales_rep = '%@',img_0 = '%@',img_1 = '%@',img_2 = '%@',sync_data = '%@',contact_name = '%@',addr = '%@',type = '%@' ,carrier = %d where contact_id = '%@';",companyName,addr1,addr2,addr3,addr4,country,state,city,zipcode,fistName,lastName,phone,fax,email,notes,price,salesRep,img_0,img_1,img_2,sync_data,contact_name,addr,contact_type,carrier,contact_id];
} else {
contact_id = [self translateSingleQuote:contact_id];
[sync_dic setValue:contact_id forKey:@"contact_id"];
// sync_data = [AESCrypt fastencrypt:[RAUtils dict2string:sync_dic]];
sync_data = [RAConvertor dict2string:sync_dic];
sync_data = [self translateSingleQuote:sync_data];
sql = [NSString stringWithFormat:@"insert into offline_contact (is_active,company_name,addr_1,addr_2,addr_3,addr_4,country,state,city,zipcode,first_name,last_name,phone,fax,email,notes,price_type,sales_rep,img_0,img_1,img_2,editable,contact_id,Sales_Order_Customer,Sales_Order_Freight_Bill_To,Sales_Order_Ship_From,Sales_Order_Merchandise_Bill_To,Contact_Return_To,Sales_Order_Ship_To,sync_data,contact_name,addr,type,carrier) values (1,'%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@',1,'%@',%d,%d,0,%d,0,1,'%@','%@','%@','%@',%d)",companyName,addr1,addr2,addr3,addr4,country,state,city,zipcode,fistName,lastName,phone,fax,email,notes,price,salesRep,img_0,img_1,img_2,contact_id,isCustomer ? 1 : 0,isCustomer ? 1 : 0,isCustomer ? 1 : 0,sync_data,contact_name,addr,contact_type,carrier];
}
int result = [iSalesDB execSql:sql];
// NSString *retStr = [NSString stringWithFormat:@"{\"result\":%d,\"min_ver\":\"160409\",\"mode\":\"Regular Mode\"}",result];
NSString *retStr = [NSString stringWithFormat:@"{\"result\":%d,\"mode\":\"Regular Mode\"}",result];
return [retStr dataUsingEncoding:NSUTF8StringEncoding];
}
#pragma mark save new contact
+(NSData *) offline_saveNewContact:(NSMutableDictionary *) params
{
return [self offline_saveContact:params update:NO isCustomer:YES];
}
#pragma mark edit contact
+(NSData *) offline_editContact:(NSMutableDictionary *) params
{
assert(params[@"user"]!=nil);
// {
// "contact_id" = "CE0D2445-3C1F-40EC-B94C-A39A6900FBDA";
// password = 123456;
// user = EvanK;
// }
NSString *path = [[NSBundle mainBundle] pathForResource:@"editContact.json" ofType:nil];
NSData *data = [NSData dataWithContentsOfFile:path];
NSMutableDictionary *ret = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy];
NSMutableDictionary *section_0 = [[ret objectForKey:@"section_0"] mutableCopy];
NSString *countryCode = nil;
NSString *countryCode_id = nil;
NSString *stateCode = nil;
__block int carrierCode = -1;
/*------contact infor------*/
__block NSString *country = nil;
__block NSString *company_name = nil;
__block NSString *contact_id = params[@"contact_id"];
__block NSString *addr_1,*addr_2,*addr_3,*addr_4;
__block NSString *zipcode = nil;
__block NSString *state = nil; // state_code
__block NSString *city = nil; //
__block NSString *firt_name,*last_name;
__block NSString *phone,*fax,*email;
__block NSString *notes,*price_type,*sales_rep;
__block NSString *img_0,*img_1,*img_2;
__block NSString *contact_type;
contact_id = [self translateSingleQuote:contact_id];
NSString *sql = [NSString stringWithFormat:@"select country,company_name,addr_1,addr_2,addr_3,addr_4,zipcode,state,city,first_name,last_name,phone,fax,email,notes,price_type,sales_rep,img_0,img_1,img_2,type,carrier from offline_contact where contact_id = '%@';",contact_id];
[iSalesDB jk_query:sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
country = [self textAtColumn:0 statement:stmt]; // country name
company_name = [self textAtColumn:1 statement:stmt];
addr_1 = [self textAtColumn:2 statement:stmt];
addr_2 = [self textAtColumn:3 statement:stmt];
addr_3 = [self textAtColumn:4 statement:stmt];
addr_4 = [self textAtColumn:5 statement:stmt];
zipcode = [self textAtColumn:6 statement:stmt];
state = [self textAtColumn:7 statement:stmt]; // state code
city = [self textAtColumn:8 statement:stmt];
firt_name = [self textAtColumn:9 statement:stmt];
last_name = [self textAtColumn:10 statement:stmt];
phone = [self textAtColumn:11 statement:stmt];
fax = [self textAtColumn:12 statement:stmt];
email = [self textAtColumn:13 statement:stmt];
notes = [self textAtColumn:14 statement:stmt];
price_type = [self textAtColumn:15 statement:stmt]; // name
sales_rep = [self textAtColumn:16 statement:stmt]; // code
img_0 = [self textAtColumn:17 statement:stmt];
img_1 = [self textAtColumn:18 statement:stmt];
img_2 = [self textAtColumn:19 statement:stmt];
contact_type = [self textAtColumn:20 statement:stmt];
carrierCode = sqlite3_column_int(stmt, 21);
}];
// decrypt
if (company_name) {
company_name = [AESCrypt fastdecrypt:company_name];
}
if (addr_1) {
addr_1 = [AESCrypt fastdecrypt:addr_1];
}
if (phone) {
phone = [AESCrypt fastdecrypt:phone];
}
NSString *countrySql = [NSString stringWithFormat:@"select code from offline_country where name = '%@';",[self translateSingleQuote:country]];
countryCode = [iSalesDB jk_queryText:countrySql];
stateCode = state;
if ([params.allKeys containsObject:@"refresh_trigger"]) {
if ([params[@"refresh_trigger"] isEqualToString:@"country"]) {
NSString *code_id = params[@"country"];
countryCode_id = code_id;
countryCode = [self countryCodeByid:code_id];
} else if ([params[@"refresh_trigger"] isEqualToString:@"zipcode"]) {
NSString *zip_code = params[@"zipcode"];
// 剔除全部为空格
int spaceCount = 0;
for (int i = 0; i < zip_code.length; i++) {
if ([zip_code characterAtIndex:i] == ' ') {
spaceCount++;
}
}
if (spaceCount == zip_code.length) {
zip_code = @"";
}
if (zipcode.length > 0) {
zipcode = zip_code;
countryCode_id = params[@"country"];
NSDictionary *dic = [self offline_dealZipCode:zip_code];
countryCode = [dic valueForKey:@"country_code"];
if (!countryCode) {
NSString *code_id = params[@"country"];
countryCode = [self countryCodeByid:code_id];
}
stateCode = [dic valueForKey:@"state_code"];
if (!stateCode.length) {
stateCode = params[@"state"];
}
city = [dic valueForKey:@"city"];
if (!city.length) {
city = params[@"city"];
}
// zip code
NSMutableDictionary *zipDic = [[section_0 valueForKey:@"item_8"] mutableCopy];
[zipDic setValue:zipcode forKey:@"value"];
[section_0 setValue:zipDic forKey:@"item_8"];
} else {
NSString *code_id = params[@"country"];
countryCode = [self countryCodeByid:code_id];
stateCode = params[@"state"];
city = params[@"city"];
}
}
}
// 0 Country
// 1 Company Name
// 2 Contact ID
// 3 Picture
// 4 Address 1
// 5 Address 2
// 6 Address 3
// 7 Address 4
// 8 Zip Code
// 9 State/Province
// 10 City
// 11 Contact First Name
// 12 Contact Last Name
// 13 Phone
// 14 Fax
// 15 Email
// 16 Contact Notes
// 17 Price Type
// 18 Contact Type
// 19 Sales Rep
// country
NSDictionary *allCountry = [self offline_getAllCountryDefault:countryCode];
[self setValue:allCountry forItemKey:@"item_0" valueKey:@"cadedate" inDictionary:section_0];
// company
[self setValue:company_name forItemKey:@"item_1" valueKey:@"value" inDictionary:section_0];
// contact_id
[self setValue:contact_id forItemKey:@"item_2" valueKey:@"value" inDictionary:section_0];
// picture
NSString *img_avalue = [NSString stringWithFormat:@"%@,%@,%@",img_0,img_1,img_2];
[self setValue:img_avalue forItemKey:@"item_3" valueKey:@"avalue" inDictionary:section_0];
[self setValue:img_0 forItemKey:@"item_3" valueKey:@"img_url_aname_0" inDictionary:section_0];
[self setValue:img_1 forItemKey:@"item_3" valueKey:@"img_url_aname_1" inDictionary:section_0];
[self setValue:img_2 forItemKey:@"item_3" valueKey:@"img_url_aname_2" inDictionary:section_0];
[self setValue:img_0 forItemKey:@"item_3" valueKey:@"img_url_0" inDictionary:section_0];
[self setValue:img_1 forItemKey:@"item_3" valueKey:@"img_url_1" inDictionary:section_0];
[self setValue:img_2 forItemKey:@"item_3" valueKey:@"img_url_2" inDictionary:section_0];
// addr 1 2 3 4
[self setValue:addr_1 forItemKey:@"item_4" valueKey:@"value" inDictionary:section_0];
[self setValue:addr_2 forItemKey:@"item_5" valueKey:@"value" inDictionary:section_0];
[self setValue:addr_3 forItemKey:@"item_6" valueKey:@"value" inDictionary:section_0];
[self setValue:addr_4 forItemKey:@"item_7" valueKey:@"value" inDictionary:section_0];
// zip code
[self setValue:zipcode forItemKey:@"item_8" valueKey:@"value" inDictionary:section_0];
// state
NSDictionary *allState = [self offline_getStateByCountryCode:countryCode checkedState:stateCode];
[self setValue:allState forItemKey:@"item_9" valueKey:@"cadedate" inDictionary:section_0];
// city
[self setValue:city forItemKey:@"item_10" valueKey:@"value" inDictionary:section_0];
// first last
[self setValue:firt_name forItemKey:@"item_11" valueKey:@"value" inDictionary:section_0];
[self setValue:last_name forItemKey:@"item_12" valueKey:@"value" inDictionary:section_0];
// phone fax email
[self setValue:phone forItemKey:@"item_13" valueKey:@"value" inDictionary:section_0];
[self setValue:fax forItemKey:@"item_14" valueKey:@"value" inDictionary:section_0];
[self setValue:email forItemKey:@"item_15" valueKey:@"value" inDictionary:section_0];
// notes
[self setValue:notes forItemKey:@"item_16" valueKey:@"value" inDictionary:section_0];
// price
NSMutableDictionary *priceDic = [[self offline_getPrice] mutableCopy];
for (NSString *key in priceDic.allKeys) {
if ([key containsString:@"val_"]) {
NSMutableDictionary *dic = [priceDic[key] mutableCopy];
if ([dic[@"value"] isEqualToString:price_type]) {
[dic setValue:[NSNumber numberWithInteger:1] forKey:@"check"];
[priceDic setValue:dic forKey:key];
}
}
}
[self setValue:priceDic forItemKey:@"item_17" valueKey:@"cadedate" inDictionary:section_0];
// Contact Rep
NSDictionary *contactTypeDic = [self offline_getContactTypeChecked:contact_type];
[self setValue:contactTypeDic forItemKey:@"item_18" valueKey:@"cadedate" inDictionary:section_0];
// Sales Rep
NSMutableDictionary *repDic = [[self offline_getSalesRep:params[@"user"]] mutableCopy];
for (NSString *key in repDic.allKeys) {
if ([key containsString:@"val_"]) {
NSMutableDictionary *dic = [repDic[key] mutableCopy];
NSString *value = dic[@"value"];
NSString *code = [[[value componentsSeparatedByString:@"-"] firstObject] stringByReplacingOccurrencesOfString:@" " withString:@""];
if (code && [code isEqualToString:sales_rep]) {
[dic setValue:[NSNumber numberWithInteger:1] forKey:@"check"];
[repDic setValue:dic forKey:key];
}
}
}
[self setValue:repDic forItemKey:@"item_19" valueKey:@"cadedate" inDictionary:section_0];
#ifdef BUILD_CONTRAST
//carrier
NSString* scarrier = [self offline_getCarrier:carrierCode];
NSDictionary *carrierDic = [self offline_getAllCarrier:scarrier];
[self setValue:carrierDic forItemKey:@"item_20" valueKey:@"cadedate" inDictionary:section_0];
#endif
[ret setValue:section_0 forKey:@"section_0"];
return [RAConvertor dict2data:ret];
}
#pragma mark save contact
+(NSData *) offline_saveContact:(NSMutableDictionary *) params
{
return [self offline_saveContact:params update:YES isCustomer:YES];
}
#pragma mark category
+ (void)check:(NSString *)ck valueKey:(NSString *)valueKey inDictionary:(NSMutableDictionary *)dic{
if (ck) {
NSMutableDictionary *res = [self mutableDictionary:valueKey inDictionary:dic];
for (NSString *key in res.allKeys) {
if (![key isEqualToString:@"count"]) {
NSMutableDictionary *val = [self mutableDictionary:key inDictionary:res];
[val setValue:[NSNumber numberWithInteger:0] forKey:@"check"];
if ([val[@"value"] isEqualToString:ck]) {
[val setValue:[NSNumber numberWithInteger:1] forKey:@"check"];
}
[res setValue:val forKey:key];
}
}
[dic setValue:res forKey:valueKey];
}
}
+ (NSDictionary *)categoryList:(NSMutableDictionary *)params limited:(BOOL)limited {
// NSString* orderCode = [params valueForKey:@"orderCode"];
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSString* category = [params valueForKey:@"category"];
if (!category || [category isEqualToString:@""]) {
category = @"%";
}
category = [self translateSingleQuote:category];
int limit = [[params valueForKey:@"limit"] intValue];
int offset = [[params valueForKey:@"offset"] intValue];
// NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSString *limit_str = @"";
if (limited) {
limit_str = [NSString stringWithFormat:@"limit %d offset %d ",limit,offset];
}
NSMutableDictionary *ret = [self dictionaryFileName:@"category.json"];
NSMutableDictionary *filter = [[ret objectForKey:@"filter"] mutableCopy];
sqlite3 *db = [iSalesDB get_db];
// [iSalesDB AddExFunction:db];
int count;
NSString *where = [NSString stringWithFormat:@"category like'%%#%@#%%' and is_active = 1",category];
NSString *sqlQuery = [NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete,m.category,m.more_color from product m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id where m.category like'%%#%@#%%' and m.is_active = 1 order by m.name %@ ;",params[@"orderCode"], category,limit_str];
double price_min = 0;
double price_max = 0;
if ([params.allKeys containsObject:@"alert"]) {
// alert
[self check:params[@"alert"] valueKey:@"alert" inDictionary:filter];
NSString *alert = params[@"alert"];
if ([alert isEqualToString:@"Display All"]) {
alert = [NSString stringWithFormat:@""];
} else {
alert = [self translateSingleQuote:alert];
alert = [NSString stringWithFormat:@"and alert = '%@'",alert];
}
// available
[self check:params[@"available"] valueKey:@"availability" inDictionary:filter];
NSString *available = params[@"available"];
NSString *available_condition;
if ([available isEqualToString:@"Display All"]) {
available_condition = @"";
} else if ([available isEqualToString:@"Available Now"]) {
available_condition = @"and availability > 0";
} else {
available_condition = @"and availability == 0";
}
// best seller
[self check:params[@"bestseller"] valueKey:@"best_seller" inDictionary:filter];
NSString *best_seller = @"";
NSString *order_best_seller = @"m.name asc";
if ([params[@"bestseller"] isEqualToString:@"Yes"]) {
best_seller = @"and best_seller > 0";
order_best_seller = @"m.best_seller desc,m.name asc";
}
// price
[self check:params[@"price"] valueKey:@"price" inDictionary:filter];
NSString *price = params[@"price"];
price_min = 0;
price_max = MAXFLOAT;
if (params[@"user"] && price != nil) {
NSArray *priceTypeArray = [self get_contact_default_price_type:nil user:params[@"user"] db:db];
NSMutableString *priceName = [NSMutableString string];
for (int i = 0; i < priceTypeArray.count; i++) {
NSString *pricetype = priceTypeArray[i];
pricetype = [self translateSingleQuote:pricetype];
if (i == 0) {
[priceName appendFormat:@"'%@'",pricetype];
} else {
[priceName appendFormat:@",'%@'",pricetype];
}
}
if ([price isEqualToString:@"Display All"]) {
price = [NSString stringWithFormat:@""];
} else if([price containsString:@"+"]){
price = [price stringByReplacingOccurrencesOfString:@"+" withString:@""];
price_min = [price doubleValue];
price = [NSString stringWithFormat:@"and item_id in (select DISTINCT item_id from model_price where price_name in (%@) and cast(decrypt(price) as double) >= %.2lf and cast(decrypt(price) as double) <= %.2lf)",priceName,price_min,price_max];
} else {
NSArray *priceArray = [price componentsSeparatedByString:@"-"];
price_min = [[priceArray objectAtIndex:0] doubleValue];
price_max = [[priceArray objectAtIndex:1] doubleValue];
price = [NSString stringWithFormat:@"and item_id in (select DISTINCT item_id from model_price where price_name in (%@) and cast(decrypt(price) as double) >= %.2lf and cast(decrypt(price) as double) <= %.2lf)",priceName,price_min,price_max];
}
} else {
price = @"";
}
// sold_by_qty : Sold in quantities of %@
[self check:params[@"sold_by_qty"] valueKey:@"qty" inDictionary:filter];
NSString *qty = params[@"sold_by_qty"];
if ([qty isEqualToString:@"Display All"]) {
qty = @"";
} else {
qty = [self translateSingleQuote:qty];
qty = [NSString stringWithFormat:@"and model_set = 'Sold in quantities of %@'",qty];
}
// model name;
NSString* modelname =params[@"modelName"];
if(modelname.length==0)
{
modelname=@"";
}
else
{
modelname = modelname.lowercaseString;
modelname=[NSString stringWithFormat:@"and lower(name) like'%%%@%%'",modelname];
}
//modelDescription
NSString* modelDescription =params[@"modelDescription"];
if(modelDescription.length==0)
{
modelDescription=@"";
}
else
{
modelDescription = modelDescription.lowercaseString;
modelDescription=[NSString stringWithFormat:@"and lower(description) like'%%%@%%'",modelDescription];
}
// cate
// category = [self translateSingleQuote:category];
// NSString *cateWhere = [NSString stringWithFormat:@"category like'%%#%@#%%'",category];
// cate mutiple selection
NSString *category_id = params[@"category"];
NSMutableArray *cate_id_array = nil;
NSMutableString *cateWhere = [NSMutableString string];
if ([category_id isEqualToString:@""] || !category_id) {
[cateWhere appendString:@"1 = 1"];
} else {
if ([category_id containsString:@","]) {
cate_id_array = [[category_id componentsSeparatedByString:@","] mutableCopy];
} else {
cate_id_array = [@[category_id] mutableCopy];
}
[cateWhere appendString:@"("];
for (int i = 0; i < cate_id_array.count; i++) {
if (i == 0) {
[cateWhere appendFormat:@"category like'%%#%@#%%'",cate_id_array[i]];
} else {
[cateWhere appendFormat:@" or category like'%%#%@#%%'",cate_id_array[i]];
}
}
[cateWhere appendString:@")"];
}
// where bestseller > 0 order by bestseller desc
// sql query: alert availability(int) best_seller(int) price qty
sqlQuery = [NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete,m.category,m.more_color from (select name,description,product_id,closeout,best_seller,category,more_color from product where %@ %@ %@ %@ %@ %@ %@ %@ and is_active = 1) m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id order by %@ %@;",cateWhere,best_seller,alert,available_condition,qty,modelname,modelDescription,price,params[@"orderCode"],order_best_seller,limit_str];
where =[NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ and is_active = 1",cateWhere,best_seller,alert,available_condition,qty,price];
}
DebugLog(@"offline category where: %@",where);
count = [iSalesDB get_recordcount:db table:@"product" where:where];
if (!params[@"user"]) {
[filter setValue:@{@"count" : @(0)} forKey:@"price"];
}
[ret setValue:filter forKey:@"filter"];
DebugLog(@"offline_category sql:%@",sqlQuery);
sqlite3_stmt * statement;
[ret setValue:@"2" forKey:@"result"];
[ret setValue:[NSString stringWithFormat:@"%d",count] forKey:@"item_total_count"];
NSMutableDictionary* items = [[NSMutableDictionary alloc] init];
// int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
int i=0;
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
char *name = (char*)sqlite3_column_text(statement, 0);
if(name==nil)
name="";
NSString *nsname = [[NSString alloc]initWithUTF8String:name];
char *description = (char*)sqlite3_column_text(statement, 1);
if(description==nil)
description="";
NSString *nsdescription = [[NSString alloc]initWithUTF8String:description];
int product_id = sqlite3_column_int(statement, 2);
int wid = sqlite3_column_int(statement, 3);
int closeout = sqlite3_column_int(statement, 4);
int cid = sqlite3_column_int(statement, 5);
int wisdelete = sqlite3_column_int(statement, 6);
NSString *categoryStr = [self textAtColumn:7 statement:statement];
int more_color = sqlite3_column_int(statement, 8);
// Defaul Category ID
__block NSString *categoryID = nil;
NSString *defaultCateSQL = [NSString stringWithFormat:@"select default_category from product where product_id=%d;",product_id];
[iSalesDB jk_query:defaultCateSQL db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
char *default_category = (char*)sqlite3_column_text(stmt, 0);
if(default_category==nil)
default_category="";
NSString *nsdefault_category = [[NSString alloc]initWithUTF8String:default_category];
nsdefault_category=[nsdefault_category stringByReplacingOccurrencesOfString:@"%#" withString:@""];
nsdefault_category=[nsdefault_category stringByReplacingOccurrencesOfString:@"#%" withString:@""];
categoryID = nsdefault_category;
}];
if (!categoryID.length) {
NSString *cateIDs = params[@"category"];
NSArray *requestCategoryArr = [cateIDs componentsSeparatedByString:@","];
NSArray *itemCategoryArr = [categoryStr componentsSeparatedByString:@","];
for (NSString *cateID in requestCategoryArr) {
BOOL needBreak = NO;
for (NSString *itemCateIDBox in itemCategoryArr) {
if (itemCateIDBox.length > 4) {
NSString *itemCategoryID = [itemCateIDBox substringFromIndex:2];
itemCategoryID = [itemCategoryID substringToIndex:itemCategoryID.length - 2];
if ([itemCategoryID isEqualToString:cateID]) {
needBreak = YES;
categoryID = itemCategoryID;
break;
}
}
}
if (needBreak) {
break;
}
}
}
NSMutableDictionary* imgjson=[self category_img:product_id db:db];
if(wid !=0 && wisdelete != 1)
[item setValue:@"true" forKey:@"wish_exists"];
else
[item setValue:@"false" forKey:@"wish_exists"];
if(closeout==0)
[item setValue:@"false" forKey:@"is_closeout"];
else
[item setValue:@"true" forKey:@"is_closeout"];
if(cid==0)
[item setValue:@"false" forKey:@"cart_exists"];
else
[item setValue:@"true" forKey:@"cart_exists"];
if (more_color == 0) {
[item setObject:@(false) forKey:@"more_color"];
} else if (more_color == 1) {
[item setObject:@(true) forKey:@"more_color"];
}
[item addEntriesFromDictionary:imgjson];
// [item setValue:nsurl forKey:@"img"];
[item setValue:nsname forKey:@"name"];
[item setValue:nsdescription forKey:@"description"];
if (categoryID) {
[item setValue:categoryID forKey:@"item_category_id"];
}
[item setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"];
[items setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]];
i++;
}
[items setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"];
[ret setObject:items forKey:@"items"];
sqlite3_finalize(statement);
} else {
DebugLog(@"nothing...");
}
DebugLog(@"count:%d",count);
[iSalesDB close_db:db];
#ifdef DEBUG
DebugLog(@"data string: %@",[RAConvertor dict2string:ret] );
#endif
return ret;
}
+(NSDictionary*) offline_category :(NSMutableDictionary *) params
{
return [self categoryList:params limited:YES];
}
# pragma mark item search
+ (NSDictionary *) itemsearch:(NSMutableDictionary *)params limited:(BOOL)limited {
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
// assert(params[@"order_code"]);
// params[@"user"]
BOOL filterSearch = ![params.allKeys containsObject:@"covertype"];
NSMutableDictionary *ret = [self dictionaryFileName:@"category.json"];
NSMutableDictionary *filter = [[ret objectForKey:@"filter"] mutableCopy];
// category
NSDictionary *category_menu = [self offline_category_menu];
[filter setValue:category_menu forKey:@"category"];
NSString* where= nil;
NSString* orderby= @"m.name";
if (!filterSearch) {
int covertype = [[params valueForKey:@"covertype"] intValue];
switch (covertype) {
case 0:
{
where=@"m.category like'%%#005#%%'";
break;
}
case 1:
{
where=@"m.alert like '%QS%'";
break;
}
case 2:
{
where=@"m.availability>0";
break;
}
case 3:
{
where=@"m.best_seller>0";
orderby=@"m.best_seller desc,m.name asc";
break;
}
default:
where=@"1=1";
break;
}
}
int limit = [[params valueForKey:@"limit"] intValue];
int offset = [[params valueForKey:@"offset"] intValue];
NSString *limit_str = @"";
if (limited) {
limit_str = [NSString stringWithFormat:@"limit %d offset %d",limit,offset];
}
sqlite3 *db = [iSalesDB get_db];
// [iSalesDB AddExFunction:db];
int count;
NSString *sqlQuery = nil;
where = [where stringByAppendingString:@" and m.is_active = 1"];
sqlQuery=[NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete,m.more_color from product m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id where %@ order by %@ %@;",params[@"orderCode"], where,orderby,limit_str];
double price_min = 0;
double price_max = 0;
if (filterSearch) {
// alert
[self check:params[@"alert"] valueKey:@"alert" inDictionary:filter];
NSString *alert = params[@"alert"];
if ([alert isEqualToString:@"Display All"]) {
alert = [NSString stringWithFormat:@""];
} else {
alert = [self translateSingleQuote:alert];
alert = [NSString stringWithFormat:@"and alert = '%@'",alert];
}
// available
[self check:params[@"available"] valueKey:@"availability" inDictionary:filter];
NSString *available = params[@"available"];
NSString *available_condition;
if ([available isEqualToString:@"Display All"]) {
available_condition = @"";
} else if ([available isEqualToString:@"Available Now"]) {
available_condition = @"and availability > 0";
} else {
available_condition = @"and availability == 0";
}
// best seller
[self check:params[@"bestseller"] valueKey:@"best_seller" inDictionary:filter];
NSString *best_seller = @"";
NSString *order_best_seller = @"m.name asc";
if ([params[@"bestseller"] isEqualToString:@"Yes"]) {
best_seller = @"and best_seller > 0";
order_best_seller = @"m.best_seller desc,m.name asc";
}
// price
[self check:params[@"price"] valueKey:@"price" inDictionary:filter];
NSString *price = params[@"price"];
price_min = 0;
price_max = MAXFLOAT;
if (params[@"user"]) {
NSArray *priceTypeArray = [self get_contact_default_price_type:nil user:params[@"user"] db:db];
NSMutableString *priceName = [NSMutableString string];
for (int i = 0; i < priceTypeArray.count; i++) {
NSString *pricetype = priceTypeArray[i];
pricetype = [self translateSingleQuote:pricetype];
if (i == 0) {
[priceName appendFormat:@"'%@'",pricetype];
} else {
[priceName appendFormat:@",'%@'",pricetype];
}
}
if ([price isEqualToString:@"Display All"]) {
price = [NSString stringWithFormat:@""];
} else if([price containsString:@"+"]){
price = [price stringByReplacingOccurrencesOfString:@"+" withString:@""];
price_min = [price doubleValue];
price = [NSString stringWithFormat:@"and item_id in (select DISTINCT item_id from model_price where price_name in (%@) and cast(decrypt(price) as double) >= %.2lf and cast(decrypt(price) as double) <= %.2lf)",priceName,price_min,price_max];
} else {
NSArray *priceArray = [price componentsSeparatedByString:@"-"];
price_min = [[priceArray objectAtIndex:0] doubleValue];
price_max = [[priceArray objectAtIndex:1] doubleValue];
price = [NSString stringWithFormat:@"and item_id in (select DISTINCT item_id from model_price where price_name in (%@) and cast(decrypt(price) as double) >= %.2lf and cast(decrypt(price) as double) <= %.2lf)",priceName,price_min,price_max];
}
} else {
price = @"";
}
// sold_by_qty : Sold in quantities of %@
[self check:params[@"sold_by_qty"] valueKey:@"qty" inDictionary:filter];
NSString *qty = params[@"sold_by_qty"];
if ([qty isEqualToString:@"Display All"]) {
qty = @"";
} else {
qty = [self translateSingleQuote:qty];
qty = [NSString stringWithFormat:@"and model_set = 'Sold in quantities of %@'",qty];
}
// model name;
NSString* modelname =params[@"modelName"];
if(modelname.length==0)
{
modelname=@"";
}
else
{
modelname = modelname.lowercaseString;
modelname=[NSString stringWithFormat:@"and lower(name) like'%%%@%%'",modelname];
}
//modelDescription
NSString* modelDescription =params[@"modelDescription"];
if(modelDescription.length==0)
{
modelDescription=@"";
}
else
{
modelDescription = modelDescription.lowercaseString;
modelDescription=[NSString stringWithFormat:@"and lower(description) like'%%%@%%'",modelDescription];
}
//lower(description) like'%%%@%%'
// category
NSString *category_id = params[@"ctgId"];
NSMutableArray *cate_id_array = nil;
NSMutableString *cateWhere = [NSMutableString string];
if ([category_id isEqualToString:@""] || !category_id) {
[cateWhere appendString:@"1 = 1"];
} else {
if ([category_id containsString:@","]) {
cate_id_array = [[category_id componentsSeparatedByString:@","] mutableCopy];
} else {
cate_id_array = [@[category_id] mutableCopy];
}
/*-----------*/
NSMutableDictionary *cateDic = [[filter objectForKey:@"category"] mutableCopy];// 老子
[cateWhere appendString:@"("];
for (int i = 0; i < cate_id_array.count; i++) {
for (NSString *key0 in cateDic.allKeys) {
if ([key0 containsString:@"category_"]) {
NSMutableDictionary *category0 = [[cateDic objectForKey:key0] mutableCopy]; // 儿子
for (NSString *key1 in category0.allKeys) {
if ([key1 containsString:@"category_"]) {
NSMutableDictionary *category1 = [[category0 objectForKey:key1] mutableCopy]; // 孙子
[category1 setValue:[NSNumber numberWithInteger:0] forKey:@"check"];
if ([[category1 objectForKey:@"cid"] isEqualToString:cate_id_array[i]]) {
cate_id_array[i] = [category1 objectForKey:@"id"];
if (i == 0) {
[cateWhere appendFormat:@"category like'%%#%@#%%'",cate_id_array[i]];
} else {
[cateWhere appendFormat:@" or category like'%%#%@#%%'",cate_id_array[i]];
}
[category1 setValue:[NSNumber numberWithInteger:1] forKey:@"check"];
[category0 setValue:category1 forKey:key1];
[cateDic setValue:category0 forKey:key0];
}
} else if ([key1 isEqualToString:@"cid"]) { // 2017-03-10 修复Item Search父节点下没有子节点的情况下选中父节点查询没有结果
if ([[category0 objectForKey:@"cid"] isEqualToString:cate_id_array[i]]) {
cate_id_array[i] = [category0 objectForKey:@"id"];
if (i == 0) {
[cateWhere appendFormat:@"category like'%%#%@#%%'",cate_id_array[i]];
} else {
[cateWhere appendFormat:@" or category like'%%#%@#%%'",cate_id_array[i]];
}
[category0 setValue:[NSNumber numberWithInteger:1] forKey:@"check"];
[cateDic setValue:category0 forKey:key0];
}
}
}
}
}
}
[cateWhere appendString:@")"];
[filter setValue:cateDic forKey:@"category"];
}
// where bestseller > 0 order by bestseller desc
// sql query: alert availability(int) best_seller(int) price qty
sqlQuery = [NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete,m.more_color from (select name,description,product_id,closeout,best_seller,more_color from product where %@ %@ %@ %@ %@ %@ %@ %@ and is_active = 1) m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id order by %@ %@;", cateWhere,best_seller,alert,available_condition,qty,modelname,modelDescription,price,params[@"orderCode"],order_best_seller,limit_str];
// count
where =[NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ %@ %@ and m.is_active = 1",cateWhere,best_seller,alert,available_condition,qty,modelname,modelDescription,price];
}
where = [where stringByReplacingOccurrencesOfString:@"m." withString:@""];
count = [iSalesDB get_recordcount:db table:@"product" where:where];
if (!params[@"user"]) {
[filter setValue:@{@"count" : @(0)} forKey:@"price"];
}
[ret setValue:filter forKey:@"filter"];
DebugLog(@"offline_itemsearch sql:%@",sqlQuery);
sqlite3_stmt * statement;
[ret setValue:@"2" forKey:@"result"];
[ret setValue:[NSString stringWithFormat:@"%d",count] forKey:@"item_total_count"];
NSMutableDictionary* items = [[NSMutableDictionary alloc] init];
// int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
int i=0;
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
char *name = (char*)sqlite3_column_text(statement, 0);
NSString *nsname = [[NSString alloc]initWithUTF8String:name];
char *description = (char*)sqlite3_column_text(statement, 1);
NSString *nsdescription = [[NSString alloc]initWithUTF8String:description];
int product_id = sqlite3_column_int(statement, 2);
int wid = sqlite3_column_int(statement, 3);
int closeout = sqlite3_column_int(statement, 4);
int cid = sqlite3_column_int(statement, 5);
int wisdelete = sqlite3_column_int(statement, 6);
int more_color = sqlite3_column_int(statement, 7);
NSMutableDictionary* imgjson=[self category_img:product_id db:db];
if(wid !=0 && wisdelete != 1)
[item setValue:@"true" forKey:@"wish_exists"];
else
[item setValue:@"false" forKey:@"wish_exists"];
if(closeout==0)
[item setValue:@"false" forKey:@"is_closeout"];
else
[item setValue:@"true" forKey:@"is_closeout"];
if(cid==0)
[item setValue:@"false" forKey:@"cart_exists"];
else
[item setValue:@"true" forKey:@"cart_exists"];
if (more_color == 0) {
[item setObject:@(false) forKey:@"more_color"];
} else if (more_color == 1) {
[item setObject:@(true) forKey:@"more_color"];
}
[item addEntriesFromDictionary:imgjson];
// [item setValue:nsurl forKey:@"img"];
[item setValue:nsname forKey:@"fash_name"];
[item setValue:nsdescription forKey:@"description"];
[item setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"];
[items setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]];
i++;
}
[items setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"];
[ret setObject:items forKey:@"items"];
sqlite3_finalize(statement);
}
[iSalesDB close_db:db];
#ifdef DEBUG
DebugLog(@"data string: %@",[RAConvertor dict2string:ret] );
#endif
return ret;
}
+(NSDictionary*) offline_itemsearch:(NSMutableDictionary *) params
{
return [self itemsearch:params limited:YES];
}
#pragma mark order detail
+ (NSString *)replaceHtml:(NSString *)html String:(NSString *)str0 withString:(NSString *)str1 {
if (str1.length == 0) {
str1 = @" ";
}
NSString *str = [html stringByReplacingOccurrencesOfString:str0 withString:str1];
return str;
}
+(NSString*) timeFormat:(NSString*)datetime from:(NSString*) from to:(NSString*) to
{
NSDateFormatter *fromformatter = [[NSDateFormatter alloc] init];
[fromformatter setDateFormat:from];
NSDate *date = [fromformatter dateFromString:datetime];
NSDateFormatter * toformatter = [[NSDateFormatter alloc] init ];
[toformatter setDateFormat:to];
NSString * ret = [toformatter stringFromDate:date];
return ret;
}
+ (NSString *)changeDateTime:(NSString *)dateTime Formate:(NSString *)formate withFormate:(NSString *)newFormate {
// 把毫秒去掉
if ([dateTime containsString:@"."]) {
dateTime = [[dateTime componentsSeparatedByString:@"."] firstObject];
}
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = formate;
// [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];;
NSDate *date = [formatter dateFromString:dateTime];
formatter.dateFormat = newFormate;
NSString *result = [formatter stringFromDate:date];
return result ? result : @"";
}
+ (NSString *)rchangeDateFormate:(NSString *)dateTime {
return [self changeDateTime:dateTime Formate:@"MM/dd/yyyy" withFormate:@"yyyy-MM-dd"];
// return [self timeFormat:dateTime from:@"YYYY-MM-DD HH:mm:ss" to:@"MM/DD/YYYY HH:mm:ss"];
}
+ (NSString *)changeDateFormate:(NSString *)dateTime {
return [self changeDateTime:dateTime Formate:@"yyyy-MM-dd" withFormate:@"MM/dd/yyyy"];
// return [self timeFormat:dateTime from:@"YYYY-MM-DD HH:mm:ss" to:@"MM/DD/YYYY HH:mm:ss"];
}
+ (NSString *)changeDateTimeFormate:(NSString *)dateTime {
return [self changeDateTime:dateTime Formate:@"yyyy-MM-dd HH:mm:ss" withFormate:@"MM/dd/yyyy HH:mm:ss"];
// return [self timeFormat:dateTime from:@"YYYY-MM-DD HH:mm:ss" to:@"MM/DD/YYYY HH:mm:ss"];
}
+(NSData*) offline_orderdetail :(NSMutableDictionary *) params
{
assert(params[@"mode"]!=nil);
assert(params[@"user"]!=nil);
DebugLog(@"offline oderdetail params: %@",params);
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
int orderId = [params[@"orderId"] intValue];
NSMutableDictionary* ret = [self dictionaryFileName:@"orderDetail.json"];
// decrypt card number and card security code
// NSString* sql=[NSString stringWithFormat:@"select o._id,o.so_id,o.poNumber,o.create_time,o.status,o.TotalCuft,o.TotalWeight,o.TotalCarton,decrypt(c.company_name),o.customer_contact,decrypt(c.addr_1),c.addr_2,c.addr_3,c.addr_4,o.logist,o.shipping,o.lift_gate_value,o.general_notes,o.internal_notes,o.paymentType,o.lift_gate,o.receive_name,o.receive_contact,o.receive_ext,o.sender_name,o.sender_contact,o.sender_ext,o.shipping_billto_name,o.shipping_billto_contact,o.shipping_billto_ext,o.billing_name,o.billing_contact,o.billing_ext,o.returnto_name,o.returnto_contact,o.returnto_ext,o.handling_fee_value,o.paymentsAndCredits,o.total_price,o.customer_cid,o.credit_card_first_name,o.credit_card_last_name,o.credit_card_address1,o.credit_card_address2,o.credit_card_zipcode,o.credit_card_type,decrypt(o.credit_card_number),decrypt(o.credit_card_security_code),o.credit_card_expiration,o.credit_card_city,o.credit_card_state,o.shipNull,o.erpOrderStatus from (select _id,so_id,poNumber,create_time,status,TotalCuft,TotalWeight,TotalCarton,customer_cid,customer_contact,logist,shipping,lift_gate_value,general_notes,internal_notes,paymentType,lift_gate,receive_name,receive_contact,receive_ext,sender_name,sender_contact,sender_ext,shipping_billto_name,shipping_billto_contact,shipping_billto_ext,billing_name,billing_contact,billing_ext,returnto_name,returnto_contact,returnto_ext,handling_fee_value,paymentsAndCredits,total_price,customer_cid,credit_card_first_name,credit_card_last_name,credit_card_address1,credit_card_address2,credit_card_zipcode,credit_card_type,credit_card_number,credit_card_security_code,credit_card_expiration,credit_card_city,credit_card_state,ifnull(shipping,'ship_null') as shipNull,erpOrderStatus from offline_order where _id=%d) o left join offline_contact c on o.customer_cid=c.contact_id",orderId ];
NSString *sql = [NSString stringWithFormat:@"select o._id,o.so_id,o.poNumber,o.create_time,o.status,decrypt(c.company_name),o.customer_contact,decrypt(c.addr_1),c.addr_2,c.addr_3,c.addr_4,o.logist,o.shipping,o.lift_gate_value,o.general_notes,o.internal_notes,o.paymentType,o.lift_gate,o.receive_name,o.receive_contact,o.receive_ext,o.sender_name,o.sender_contact,o.sender_ext,o.shipping_billto_name,o.shipping_billto_contact,o.shipping_billto_ext,o.billing_name,o.billing_contact,o.billing_ext,o.returnto_name,o.returnto_contact,o.returnto_ext,o.handling_fee_value,o.paymentsAndCredits,o.total_price,o.customer_cid,o.credit_card_first_name,o.credit_card_last_name,o.credit_card_address1,o.credit_card_address2,o.credit_card_zipcode,o.credit_card_type,decrypt(o.credit_card_number),decrypt(o.credit_card_security_code),decrypt(o.credit_card_expiration_month),o.credit_card_city,o.credit_card_state,o.shipNull,o.erpOrderStatus,decrypt(o.credit_card_expiration_year),o.sign_picpath,o.customer_contact,o.customer_email,o.customer_phone,o.customer_fax,o.editable,o.lift_null,o.handling_null,o.ship_via,c.city,c.state,c.zipcode,c.country,o.must_call,discount from (select _id,so_id,poNumber,create_time,status,customer_cid,customer_contact,logist,shipping,lift_gate_value,general_notes,internal_notes,paymentType,lift_gate,receive_name,receive_contact,receive_ext,sender_name,sender_contact,sender_ext,shipping_billto_name,shipping_billto_contact,shipping_billto_ext,billing_name,billing_contact,billing_ext,returnto_name,returnto_contact,returnto_ext,handling_fee_value,paymentsAndCredits,total_price,customer_cid,credit_card_first_name,credit_card_last_name,credit_card_address1,credit_card_address2,credit_card_zipcode,credit_card_type,credit_card_number,credit_card_security_code,credit_card_expiration_month,credit_card_city,credit_card_state,ifnull(shipping,'ship_null') as shipNull,erpOrderStatus,credit_card_expiration_year,sign_picpath,customer_contact,customer_email,customer_phone,customer_fax,order_id is null as editable,lift_gate_value is null as lift_null,handling_fee_value is null as handling_null,ship_via,must_call,discount from offline_order where _id=%d) o left join offline_contact c on o.customer_cid=c.contact_id",orderId];
sqlite3 *db = [iSalesDB get_db];
sqlite3_stmt * statement;
NSString *customerID = @""; // 在查询结果中还需要调用offline_contactinfo,需要使用,其中要打开db 就会lock,故而将其置于外面,在close db后在调用
NSString *nssoid = @"";
NSString* orderinfo = @"";
NSString *moreInfo = @"";
double handlingFee = 0;
double payments_and_credist = 0;
double totalPrice = 0;
double shippingFee = 0;
double lift_gate = 0;
NSString *customer_contact = @"";
NSString *customer_email = @"";
NSString *customer_fax = @"";
NSString *customer_phone = @"";
NSString *customer_city = @"";
NSString *customer_state = @"";
NSString *customer_zipcode = @"";
NSString *customer_country = @"";
BOOL must_call = NO;
double discount = 0;
__block NSMutableDictionary *section_0 = [NSMutableDictionary dictionary];
__block NSMutableDictionary *section_1 = [NSMutableDictionary dictionary];
__block NSMutableDictionary *section_2 = [NSMutableDictionary dictionary];
__block NSMutableDictionary *section_3 = [NSMutableDictionary dictionary];
__block NSMutableDictionary *section_4 = [NSMutableDictionary dictionary];
__block NSMutableDictionary *price_data = [NSMutableDictionary dictionary];
if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
// int order_id = sqlite3_column_int(statement, 0);
NSString *sign_url = [self textAtColumn:51 statement:statement];
// ret[@"sign_url"] = sign_url;
section_1 = @{
@"data":sign_url,
@"title":@"Signature",
@"type":@"sign_url"
}.mutableCopy;
[ret setObject:section_1 forKey:@"section_1"];
customer_contact = [self textAtColumn:52 statement:statement];
customer_email = [self textAtColumn:53 statement:statement];
customer_phone = [self textAtColumn:54 statement:statement];
customer_fax = [self textAtColumn:55 statement:statement];
customer_city = [self textAtColumn:60 statement:statement];
customer_state = [self textAtColumn:61 statement:statement];
customer_zipcode = [self textAtColumn:62 statement:statement];
customer_country = [self textAtColumn:63 statement:statement];
must_call = [[self textAtColumn:64 statement:statement] boolValue];
discount =sqlite3_column_double(statement, 65);
int offline_edit=sqlite3_column_int(statement, 56);
ret[@"offline_edit"]= [NSNumber numberWithInt:offline_edit];
char *soid = (char*)sqlite3_column_text(statement, 1);
if(soid==nil)
soid= "";
nssoid= [[NSString alloc]initWithUTF8String:soid];
// so#
ret[@"so#"] = nssoid;
char *poNumber = (char*)sqlite3_column_text(statement, 2);
if(poNumber==nil)
poNumber= "";
NSString *nspoNumber= [[NSString alloc]initWithUTF8String:poNumber];
char *create_time = (char*)sqlite3_column_text(statement, 3);
if(create_time==nil)
create_time= "";
NSString *nscreate_time= [[NSString alloc]initWithUTF8String:create_time];
nscreate_time = [[self changeDateTimeFormate:nscreate_time] stringByAppendingString:@" PST"];// 与在线统一
int status = sqlite3_column_int(statement, 4);
int erpStatus = sqlite3_column_int(statement, 49);
NSString* nsstatus = [self orderStatus:status erpStatus:erpStatus];
// status
if (status > 1 && status != 3) {
status = erpStatus;
} else if (status == 3) {
status = 15;
}
ret[@"orderStatus"] = [NSNumber numberWithInteger:status];
ret[@"order_status"] = nsstatus;
char *company_name = (char*)sqlite3_column_text(statement, 5);
if(company_name==nil)
company_name= "";
NSString *nscompany_name= [[NSString alloc]initWithUTF8String:company_name];
// company name
ret[@"company_name"] = nscompany_name;
char *customer_contact = (char*)sqlite3_column_text(statement, 6);
if(customer_contact==nil)
customer_contact= "";
NSString *nscustomer_contact= [[NSString alloc]initWithUTF8String:customer_contact];
char *addr_1 = (char*)sqlite3_column_text(statement, 7);
if(addr_1==nil)
addr_1="";
NSString *nsaddr_1= [[NSString alloc]initWithUTF8String:addr_1];
char *addr_2 = (char*)sqlite3_column_text(statement, 8);
if(addr_2==nil)
addr_2="";
NSString *nsaddr_2= [[NSString alloc]initWithUTF8String:addr_2];
char *addr_3 = (char*)sqlite3_column_text(statement, 9);
if(addr_3==nil)
addr_3="";
NSString *nsaddr_3= [[NSString alloc]initWithUTF8String:addr_3];
char *addr_4 = (char*)sqlite3_column_text(statement, 10);
if(addr_4==nil)
addr_4="";
NSString *nsaddr_4= [[NSString alloc]initWithUTF8String:addr_4];
NSMutableArray* arr_addr = [[NSMutableArray alloc] init];
[arr_addr addObject:nsaddr_1];
[arr_addr addObject:nsaddr_2];
[arr_addr addObject:nsaddr_3];
[arr_addr addObject:nsaddr_4];
[arr_addr addObject:[NSString stringWithFormat:@"%@,",customer_city]];
[arr_addr addObject:customer_state];
[arr_addr addObject:customer_zipcode];
[arr_addr addObject:customer_country];
// NSString * customer_address = [RAConvertor arr2string:arr_addr separator:@" " trim:true];
NSString *customer_address = [NSString stringWithFormat:@"%@
%@, %@ %@ %@",nsaddr_1,customer_city,customer_state,customer_zipcode,customer_country];
char *logist = (char*)sqlite3_column_text(statement, 11);
if(logist==nil)
logist= "";
NSString *DebugLogist=[[NSString alloc]initWithUTF8String:logist];
if (/*status == -11 || */status == 10 || status == 11) {
DebugLogist = [self textAtColumn:59 statement:statement];
};
NSString *shipping = [NSString stringWithFormat:@"$%.2f",sqlite3_column_double(statement, 12)];
if ([[self textAtColumn:48 statement:statement] isEqualToString:@"ship_null"]) {
shipping = @"Shipping To Be Quoted";
} else {
shippingFee = sqlite3_column_double(statement, 12);
}
// Shipping
// ret[@"Shipping"] = shipping;
NSDictionary *shipping_item = @{
@"title":@"Shipping",
@"value":shipping
};
[price_data setObject:shipping_item forKey:@"item_1"];
int have_lift_gate = sqlite3_column_int(statement, 17);
lift_gate = sqlite3_column_double(statement, 13);
// Liftgate Fee(No loading dock)
if (!have_lift_gate) {
lift_gate = 0;
}
// ret[@"Liftgate Fee(No loading dock)"] = [NSString stringWithFormat:@"$%.2f",lift_gate];
NSString *liftgate_value = [NSString stringWithFormat:@"$%.2f",lift_gate];
if (sqlite3_column_int(statement, 57)) {
// ret[@"Liftgate Fee(No loading dock)"] = @"Shipping To Be Quoted";
liftgate_value = @"Shipping To Be Quoted";
}
NSDictionary *liftgate_item = @{
@"title":@"Liftgate Fee(No loading dock)",
@"value":liftgate_value
};
[price_data setObject:liftgate_item forKey:@"item_2"];
// if ([DebugLogist isEqualToString:@"WILL CALL"]) {
// [ret removeObjectForKey:@"Shipping"];
// [ret removeObjectForKey:@"Liftgate Fee(No loading dock)"];
// }
//
// if (have_lift_gate) {
// [ret removeObjectForKey:@"Liftgate Fee(No loading dock)"];
// }
char *general_notes = (char*)sqlite3_column_text(statement, 14);
if(general_notes==nil)
general_notes= "";
NSString *nsgeneral_notes= [NSString stringWithFormat:@"MUST MAKE APPOINTMENT BEFORE DELIVERY = %@;
%@",must_call ? @"YES" : @"NO",[[NSString alloc]initWithUTF8String:general_notes]];
char *internal_notes = (char*)sqlite3_column_text(statement, 15);
if(internal_notes==nil)
internal_notes= "";
NSString *nsinternal_notes=[[NSString alloc]initWithUTF8String:internal_notes];
char *payment_type = (char*)sqlite3_column_text(statement, 16);
if(payment_type==nil)
payment_type= "";
NSString *nspayment_type=[[NSString alloc]initWithUTF8String:payment_type];
// order info
orderinfo = [self textFileName:@"order_info.html"];
orderinfo = [self replaceHtml:orderinfo String:@"SO_or_nbsp" withString:nssoid];
orderinfo = [self replaceHtml:orderinfo String:@"PO_or_nbsp" withString:nspoNumber];
orderinfo = [self replaceHtml:orderinfo String:@"OrderDate_or_nbsp" withString:nscreate_time];
orderinfo = [self replaceHtml:orderinfo String:@"OrderStatus_or_nbsp" withString:nsstatus];
orderinfo = [self replaceHtml:orderinfo String:@"CustomerInfo_or_nbsp" withString:nscompany_name];
orderinfo = [self replaceHtml:orderinfo String:@"CustomerName_or_nbsp" withString:nscustomer_contact];
orderinfo = [self replaceHtml:orderinfo String:@"CustomerAddress_or_nbsp" withString:customer_address];
orderinfo = [self replaceHtml:orderinfo String:@"ShippingMethod_or_nbsp" withString:DebugLogist];
orderinfo = [self replaceHtml:orderinfo String:@"Shipping_or_nbsp" withString:shipping];
orderinfo = [self replaceHtml:orderinfo String:@"LiftgateFee_or_nbsp" withString:[NSString stringWithFormat:@"%.2f",lift_gate]];
orderinfo = [self replaceHtml:orderinfo String:@"GeneralNotes_or_nbsp" withString:nsgeneral_notes];
orderinfo = [self replaceHtml:orderinfo String:@"InternalNotes_or_nbsp" withString:nsinternal_notes];
NSString *payment = nil;
// id -> show
__block NSString *show_pay_type = nspayment_type;
[iSalesDB jk_query:[NSString stringWithFormat:@"select pay_type from payment_type where type_id = '%@';",nspayment_type] db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
char *show_typ_ch = (char*)sqlite3_column_text(stmt, 0);
if (show_typ_ch != NULL) {
show_pay_type = [NSString stringWithUTF8String:show_typ_ch];
}
}];
if([nspayment_type isEqualToString:@"Credit Card"] || [nspayment_type isEqualToString:@"Visa/Master"])
{
payment = [self textFileName:@"creditcardpayment.html"];
NSString *card_first_name = [self textAtColumn:37 statement:statement];
NSString *card_last_name = [self textAtColumn:38 statement:statement];
NSString *card_addr1 = [self textAtColumn:39 statement:statement];
NSString *card_addr2 = [self textAtColumn:40 statement:statement];
NSString *card_zipcode = [self textAtColumn:41 statement:statement];
NSString *card_type = [self textAtColumn:42 statement:statement];
if (card_type.length > 0) { // 显示星号
card_type = @"****";
}
NSString *card_number = [self textAtColumn:43 statement:statement]; // 只显示最后四位
if (card_number.length > 0 && card_number.length > 4) {
for (int i = 0; i < card_number.length - 4; i++) {
card_number = [card_number stringByReplacingCharactersInRange:NSMakeRange(i, 1) withString:@"*"];
}
} else {
card_number = @"";
}
// NSString *card_security_code = [self textAtColumn:44 statement:statement];
NSString *card_expiration_month = [self textAtColumn:45 statement:statement];
NSString *card_expiration_year = [self textAtColumn:50 statement:statement];
NSString *card_expiration = [NSString stringWithFormat:@"%@/%@",card_expiration_month,card_expiration_year];
if (card_expiration_month.length && card_expiration_year.length) { // 显示星号
card_expiration = @"****";
}
NSString *card_city = [self textAtColumn:46 statement:statement];
NSString *card_state = [self textAtColumn:47 statement:statement];
payment = [self replaceHtml:payment String:@"Payment_Type" withString:show_pay_type];
payment = [self replaceHtml:payment String:@"CardNumber_or_nbsp" withString:card_number];
payment = [self replaceHtml:payment String:@"CardType_or_nbsp" withString:card_type];
payment = [self replaceHtml:payment String:@"CardExpireDate_or_nbsp" withString:card_expiration];
payment = [self replaceHtml:payment String:@"BillingFirstName_or_nbsp" withString:card_first_name];
payment = [self replaceHtml:payment String:@"BillingLastName_or_nbsp" withString:card_last_name];
payment = [self replaceHtml:payment String:@"BillingAddr1_or_nbsp" withString:card_addr1];
payment = [self replaceHtml:payment String:@"BillingAddr2_or_nbsp" withString:card_addr2];
payment = [self replaceHtml:payment String:@"BillingCity_or_nbsp" withString:card_city];
payment = [self replaceHtml:payment String:@"BillingState_or_nbsp" withString:card_state];
payment = [self replaceHtml:payment String:@"BillingZipCode_or_nbsp" withString:card_zipcode];
}
else
{
payment=[self textFileName:@"normalpayment.html"];
payment = [self replaceHtml:payment String:@"PAYMENTTYPE_PLACEHOLDER" withString:nspayment_type];
}
orderinfo=[self replaceHtml:orderinfo String:@"Payment_info_or_nbsp" withString:payment];
ret[@"result"]= [NSNumber numberWithInt:2];
// more info
moreInfo = [self textFileName:@"more_info.html"];
/*****ship to******/
// ShipToCompany_or_ 
NSString *shipToCompany = [self textAtColumn:18 statement:statement];
moreInfo = [self replaceHtml:moreInfo String:@"ShipToCompany_or_" withString:shipToCompany];
NSString *shipToName = [self textAtColumn:19 statement:statement];
moreInfo = [self replaceHtml:moreInfo String:@"ShipToName_or_" withString:shipToName];
NSString *shipToAddr = [self textAtColumn:20 statement:statement];
shipToAddr = [shipToAddr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"
"];
shipToAddr = [shipToAddr stringByReplacingOccurrencesOfString:@"\r" withString:@"
"]; // 手动输入的可能是\r 或 \n
shipToAddr = [shipToAddr stringByReplacingOccurrencesOfString:@"\n" withString:@"
"];
moreInfo = [self replaceHtml:moreInfo String:@"ShipToAddress_or_" withString:shipToAddr];
/*****ship from******/
// ShipFromCompany_or_ 
NSString *shipFromCompany = [self textAtColumn:21 statement:statement];
moreInfo = [self replaceHtml:moreInfo String:@"ShipFromCompany_or_" withString:shipFromCompany];
NSString *shipFromName = [self textAtColumn:22 statement:statement];
moreInfo = [self replaceHtml:moreInfo String:@"ShipFromName_or_" withString:shipFromName];
NSString *shipFromAddr = [self textAtColumn:23 statement:statement];
shipFromAddr = [shipFromAddr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"
"];
shipFromAddr = [shipFromAddr stringByReplacingOccurrencesOfString:@"\r" withString:@"
"];
shipFromAddr = [shipFromAddr stringByReplacingOccurrencesOfString:@"\n" withString:@"
"];
moreInfo = [self replaceHtml:moreInfo String:@"ShipFromAddress_or_" withString:shipFromAddr];
/*****freight to******/
// FreightBillToCompany_or_ 
NSString *freightBillToCompany = [self textAtColumn:24 statement:statement];
moreInfo = [self replaceHtml:moreInfo String:@"FreightBillToCompany_or_" withString:freightBillToCompany];
NSString *freightBillToName = [self textAtColumn:25 statement:statement];
moreInfo = [self replaceHtml:moreInfo String:@"FreightBillToName_or_" withString:freightBillToName];
NSString *freightBillToAddr = [self textAtColumn:26 statement:statement];
freightBillToAddr = [freightBillToAddr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"
"];
freightBillToAddr = [freightBillToAddr stringByReplacingOccurrencesOfString:@"\r" withString:@"
"];
freightBillToAddr = [freightBillToAddr stringByReplacingOccurrencesOfString:@"\n" withString:@"
"];
moreInfo = [self replaceHtml:moreInfo String:@"FreightBillToAddress_or_" withString:freightBillToAddr];
/*****merchandise to******/
// MerchandiseBillToCompany_or_ 
NSString *merchandiseBillToCompany = [self textAtColumn:27 statement:statement];
moreInfo = [self replaceHtml:moreInfo String:@"MerchandiseBillToCompany_or_" withString:merchandiseBillToCompany];
NSString *merchandiseBillToName = [self textAtColumn:28 statement:statement];
moreInfo = [self replaceHtml:moreInfo String:@"MerchandiseBillToName_or_" withString:merchandiseBillToName];
NSString *merchandiseBillToAddr = [self textAtColumn:29 statement:statement];
merchandiseBillToAddr = [merchandiseBillToAddr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"
"];
merchandiseBillToAddr = [merchandiseBillToAddr stringByReplacingOccurrencesOfString:@"\r" withString:@"
"];
merchandiseBillToAddr = [merchandiseBillToAddr stringByReplacingOccurrencesOfString:@"\n" withString:@"
"];
moreInfo = [self replaceHtml:moreInfo String:@"MerchandiseBillToAddress_or_" withString:merchandiseBillToAddr];
/*****return to******/
// ReturnToCompany_or_ 
NSString *returnToCompany = [self textAtColumn:30 statement:statement];
moreInfo = [self replaceHtml:moreInfo String:@"ReturnToCompany_or_" withString:returnToCompany];
NSString *returnToName = [self textAtColumn:31 statement:statement];
moreInfo = [self replaceHtml:moreInfo String:@"ReturnToName_or_" withString:returnToName];
NSString *returnToAddr = [self textAtColumn:32 statement:statement];
returnToAddr = [returnToAddr stringByReplacingOccurrencesOfString:@"\r\n" withString:@"
"];
returnToAddr = [returnToAddr stringByReplacingOccurrencesOfString:@"\r" withString:@"
"];
returnToAddr = [returnToAddr stringByReplacingOccurrencesOfString:@"\n" withString:@"
"];
moreInfo = [self replaceHtml:moreInfo String:@"ReturnToAddress_or_" withString:returnToAddr];
//
// DebugLog(@"more info : %@",moreInfo);
// handling fee
handlingFee = sqlite3_column_double(statement, 33);
// ret[@"Handling Fee"] = [NSString stringWithFormat:@"$%.2f",handlingFee];
NSString *handling_fee_value = [NSString stringWithFormat:@"$%.2f",handlingFee];
if (sqlite3_column_int(statement, 58)) {
// ret[@"Handling Fee"] = @"Shipping To Be Quoted";
handling_fee_value = @"Shipping To Be Quoted";
}
NSDictionary *handling_fee_item = @{
@"title":@"Handling Fee",
@"value":handling_fee_value
};
[price_data setObject:handling_fee_item forKey:@"item_3"];
//
// customer info
customerID = [self textAtColumn:36 statement:statement];
// mode
ret[@"mode"] = params[@"mode"];
// model_count
ret[@"model_count"] = @(0);
}
sqlite3_finalize(statement);
}
[iSalesDB close_db:db];
NSMutableDictionary *contactInfo = [[[self offline_contactinfo:[@{@"contactId":customerID,@"mode":params[@"mode"]} mutableCopy]] objectForKey:@"customerInfo"] mutableCopy];
// "customer_email" = "Shui Hu";
// "customer_fax" = "";
// "customer_first_name" = F;
// "customer_last_name" = L;
// "customer_name" = ",da He Xiang Dong Liu A";
// "customer_phone" = "Hey Xuan Feng";
contactInfo[@"customer_phone"] = customer_phone;
contactInfo[@"customer_fax"] = customer_fax;
contactInfo[@"customer_email"] = customer_email;
NSString *first_name = @"";
NSString *last_name = @"";
if ([customer_contact isEqualToString:@""]) {
} else if ([customer_contact containsString:@" "]) {
NSInteger first_space_index = [customer_contact rangeOfString:@" "].location;
first_name = [customer_contact substringToIndex:first_space_index];
last_name = [customer_contact substringFromIndex:first_space_index + 1];
}
contactInfo[@"customer_first_name"] = first_name;
contactInfo[@"customer_last_name"] = last_name;
ret[@"customerInfo"] = contactInfo;
// models
if (nssoid) {
__block NSMutableDictionary *model_data = [NSMutableDictionary dictionary];
__block double TotalCuft = 0;
__block double TotalWeight = 0;
__block int TotalCarton = 0;
__block double allItemPrice = 0;
NSString *modelSql = [NSString stringWithFormat:@"select c.product_id,c.price,c.discount,c.item_count,c.line_note,m.name,m.description,c.item_id,m.stockUom,c._id from (select _id,product_id,decrypt(str_price) as price,discount,item_count,line_note,item_id from offline_cart where so_no='%@') c left join product m on c.product_id=m.product_id",nssoid];
sqlite3 *db1 = [iSalesDB get_db];
[iSalesDB jk_query:modelSql db:db1 close:YES completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSMutableDictionary* itemjson = [[NSMutableDictionary alloc] init];
int product_id = sqlite3_column_int(stmt, 0);
char *str_price = (char*)sqlite3_column_text(stmt, 1);
int item_id = sqlite3_column_int(stmt, 7);
NSString* Price=nil;
if(str_price==nil)
{
NSNumber* price = [self get_model_default_price:customerID user:params[@"user"] product_id:nil item_id:@(item_id) db:db1];
if(price==nil)
Price=@"No Price.";
else
Price=[NSString stringWithFormat:@"%.2f",price.floatValue];
}
else
{
Price=[NSString stringWithFormat:@"%.2f",[[[NSString alloc]initWithUTF8String:str_price] floatValue]];
}
double discount = sqlite3_column_double(stmt, 2);
int item_count = sqlite3_column_int(stmt, 3);
char *line_note = (char*)sqlite3_column_text(stmt, 4);
NSString *nsline_note=nil;
if(line_note!=nil)
nsline_note= [[NSString alloc]initWithUTF8String:line_note];
// char *name = (char*)sqlite3_column_text(stmt, 5);
// NSString *nsname = nil;
// if(name!=nil)
// nsname= [[NSString alloc]initWithUTF8String:name];
NSString *nsname = [self textAtColumn:5 statement:stmt];
// char *description = (char*)sqlite3_column_text(stmt, 6);
// NSString *nsdescription=nil;
// if(description!=nil)
// nsdescription= [[NSString alloc]initWithUTF8String:description];
NSString *nsdescription = [self textAtColumn:6 statement:stmt];
// int stockUom = sqlite3_column_int(stmt, 8);
// int _id = sqlite3_column_int(stmt, 9);
NSDictionary* bsubtotaljson=[self model_subtotal:item_id count:item_count db:db1 compute_part:true];
double cuft=[bsubtotaljson[@"cuft"] doubleValue];
double weight=[bsubtotaljson[@"weight"] doubleValue];
int carton=[bsubtotaljson[@"carton"] intValue];
TotalCuft += cuft;
TotalWeight += weight;
TotalCarton += carton;
itemjson[@"combine"]=[self model_bundle:item_id db:db1 compute_part:false contactID:customerID user:params[@"user"]];
// itemjson[@"img"]= [self model_category_img:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] model_name:nil db:db1];
itemjson[@"img"] = [self item_image:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] db:db1];
itemjson[@"Item Number"]=[NSString stringWithFormat:@"%@\n%@",nsname,nsdescription ];
itemjson[@"note"]=nsline_note;
itemjson[@"origin_price"] = Price;
// Price = [NSString stringWithFormat:@"%f",[Price doubleValue] * (1.0 - discount / 100.0)];
itemjson[@"The unit price"] = [NSString stringWithFormat:@"%f",[Price doubleValue] * (1.0 - discount / 100.0)];
itemjson[@"order_item_status"] = @""; // 暂时不处理
itemjson[@"product_id"] = [NSString stringWithFormat:@"%d",product_id];
itemjson[@"QTY"] = [NSString stringWithFormat:@"%d",item_count];
itemjson[@"discount"] = [NSNumber numberWithDouble:discount];
double subTotal = item_count * [Price doubleValue] * (1.0 - discount / 100.0);
if(itemjson[@"combine"] != nil)
{
// int citem=0;
int bcount=[[itemjson[@"combine"] valueForKey:@"count"] intValue];
for(int bc=0;bc0)
{
NSDictionary *total_item = @{
@"title":@"Total",
@"value":[NSString stringWithFormat:@"$%.2f",payments_and_credist*(1-(discount/100.0))+ lift_gate + shippingFee + handlingFee]
};
NSDictionary *discount_item = @{
@"title":@"Order Discount",
@"value":[NSString stringWithFormat:@"%d%% off",(int)discount]
};
[price_data setObject:discount_item forKey:@"item_4"];
[price_data setObject:total_item forKey:@"item_5"];
}
else
{
NSDictionary *total_item = @{
@"title":@"Total",
@"value":[NSString stringWithFormat:@"$%.2f",totalPrice]
};
[price_data setObject:total_item forKey:@"item_4"];
}
[price_data setObject:@(price_data.allKeys.count) forKey:@"count"];
section_4 = @{
@"data":price_data,
@"title":@"Price Info",
@"type":@"price_info"
}.mutableCopy;
ret[@"section_4"] = section_4;
// ret[@"order_info"]= orderinfo;
section_0 = @{
@"data":orderinfo,
@"title":@"Order Info",
@"type":@"order_info"
}.mutableCopy;
ret[@"section_0"] = section_0;
// ret[@"more_order_info"] = moreInfo;
section_2 = @{
@"data":moreInfo,
@"title":@"More Info",
@"type":@"more_order_info"
}.mutableCopy;
ret[@"section_2"] = section_2;
ret[@"count"] = @(5);
return [RAConvertor dict2data:ret];
}
#pragma mark order list
+ (NSString *)orderStatus:(int)status erpStatus:(int)erpStatus{
NSString *nsstatus = @"";
switch (status) {
case 0:
{
nsstatus=@"Temp Order";
break;
}
case 1:
{
nsstatus=@"Saved Order";
break;
}
case 2: {
nsstatus = [self orderStatus:erpStatus erpStatus:-1];
break;
}
case 3:
case 15:
{
nsstatus=@"Cancelled";
break;
}
case 10:
{
nsstatus=@"Quote Submitted";
break;
}
case 11:
{
nsstatus=@"Sales Order Submitted";
break;
}
case 12:
{
nsstatus=@"Processing";
break;
}
case 13:
{
nsstatus=@"Shipped";
break;
}
case 14:
{
nsstatus=@"Closed";
break;
}
case -11:
{
nsstatus = @"Ready For Submit";
break;
}
default:
break;
}
return nsstatus;
}
+ (double) orderTotalPrice:(NSString *)so_id user:(NSString*) user db:(sqlite3 *)db1 close:(BOOL)close
{
double total = 0;
__block double payments_and_credist = 0;
__block double allItemPrice = 0;
// sqlite3 *db1 = [iSalesDB get_db];
if (so_id) {
// NSString *modelSql = [NSString stringWithFormat:@"select c.product_id,c.price,c.discount,c.item_count,c.line_note,m.name,m.description,c.item_id,m.stockUom,c._id from (select _id,product_id,decrypt(str_price) as price,discount,item_count,line_note,item_id from offline_cart where so_no='%@') c left join product m on c.product_id=m.product_id",so_id];
NSString *modelSql = [NSString stringWithFormat:@"select product_id,price,discount,item_count,item_id,customer_cid from (select c.product_id,decrypt(c.str_price) as price,c.discount,c.item_count,c.item_id,o.customer_cid from offline_cart as c left join offline_order as o on c.so_no = o.so_id where c.so_no='%@');",so_id];
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[iSalesDB jk_query:modelSql db:db1 close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSMutableDictionary* itemjson = [[NSMutableDictionary alloc] init];
int product_id = sqlite3_column_int(stmt, 0);
char *str_price = (char*)sqlite3_column_text(stmt, 1);
int discount = sqlite3_column_int(stmt, 2);
int item_count = sqlite3_column_int(stmt, 3);
// int item_id = sqlite3_column_int(stmt, 7);
int item_id = sqlite3_column_int(stmt, 4);
char *customer_cid = (char *)sqlite3_column_text(stmt, 5);
NSString *customerID = [NSString stringWithUTF8String:customer_cid];
NSString* Price=nil;
if(str_price==nil)
{
NSNumber* price = [self get_model_default_price:customerID user:user product_id:nil item_id:@(item_id) db:db1];
if(price==nil)
Price=@"No Price.";
else
Price=[NSString stringWithFormat:@"%.2f",price.floatValue];
}
else
{
Price=[NSString stringWithFormat:@"%.2f",[[[NSString alloc]initWithUTF8String:str_price] floatValue]];
}
itemjson[@"combine"]=[self model_bundle:item_id db:db1 compute_part:false contactID:customerID user:user];
itemjson[@"The unit price"]=Price;
itemjson[@"product_id"] = [NSString stringWithFormat:@"%d",product_id];
itemjson[@"QTY"] = [NSString stringWithFormat:@"%d",item_count];
double subTotal = item_count * [Price doubleValue] * (1.0 - discount / 100.0);
if(itemjson[@"combine"] != nil)
{
// int citem=0;
int bcount=[[itemjson[@"combine"] valueForKey:@"count"] intValue];
for(int bc=0;bc0)
payments_and_credist= payments_and_credist*(1-order_discount/100.0);
// total
total = payments_and_credist + lift_gate + shippingFee + handlingFee;
if (close) {
[iSalesDB close_db:db1];
}
return total;
}
+(NSData*) offline_orderlist :(NSMutableDictionary *) params
{
assert(params[@"user"]!=nil);
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
int limit = [[params valueForKey:@"limit"] intValue];
int offset = [[params valueForKey:@"offset"] intValue];
NSString* keyword = [params valueForKey:@"keyWord"];
keyword = [self translateSingleQuote:keyword]; // 转义单引号
NSString *orderStatus = [params valueForKey:@"orderStatus"];
NSString* where=@"1 = 1";
if(keyword.length>0)
where=[where stringByAppendingString:[NSString stringWithFormat:@" and (lower(o.so_id) like '%%%@%%' or lower(o.sales_rep) like '%%%@%%' or lower(decrypt(c.company_name)) like '%%%@%%' or lower(o.create_by) like '%%%@%%')",keyword.lowercaseString,keyword.lowercaseString,keyword.lowercaseString,keyword.lowercaseString]];
if (orderStatus.length > 0) {
NSArray *order_status_array = [orderStatus componentsSeparatedByString:@","];
if (order_status_array.count == 1) {
int status_value = [[order_status_array firstObject] intValue];
if (status_value <= 1 || status_value == 3 || status_value == 15) {
if (status_value == 15 || status_value == 3) {
where = [where stringByAppendingString:[NSString stringWithFormat:@" and (o.status = 3 or o.erpOrderStatus = 15)"]];
} else {
where = [where stringByAppendingString:[NSString stringWithFormat:@" and o.status = %d",status_value]];
}
} else {
where = [where stringByAppendingString:[NSString stringWithFormat:@" and o.erpOrderStatus = %d",status_value]];
}
} else if (order_status_array.count > 1) {
for (int i = 0; i < order_status_array.count;i++) {
NSString *status = order_status_array[i];
NSString *condition = @" or";
if (i == 0) {
condition = @" and (";
}
// where = [where stringByAppendingString:[NSString stringWithFormat:@"%@ o.status = %@",condition,status]];
int status_value = [status intValue];
if (status_value <= 1 || status_value == 3 || status_value == 15) {
if (status_value == 15 || status_value == 3) {
where = [where stringByAppendingString:[NSString stringWithFormat:@" %@ (o.status = 3 or o.erpOrderStatus = 15)",condition]];
} else {
where = [where stringByAppendingString:[NSString stringWithFormat:@"%@ o.status = %d",condition,status_value]];
}
} else {
where = [where stringByAppendingString:[NSString stringWithFormat:@" %@ o.erpOrderStatus = %d",condition,status_value]];
}
}
where = [where stringByAppendingString:@" )"];
}
}
NSString* sqlQuery=[NSString stringWithFormat:@"SELECT o._id,o.so_id,o.status,o.sales_rep,o.create_by,decrypt(c.company_name),o.create_time,o.total_price,o.customer_contact,o.erpOrderStatus,o.order_id is null from offline_order o left join offline_contact c on o.customer_cid=c.contact_id where %@ order by o.create_time desc limit %d offset %d" ,where, limit, offset];
// DebugLog(@"order list sql: %@",sqlQuery);
sqlite3 *db = [iSalesDB get_db];
sqlite3_stmt * statement;
[iSalesDB execSql:@"BEGIN TRANSACTION" db:db];
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
int count=0;
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* item=[[NSMutableDictionary alloc]init];
int order_id = sqlite3_column_double(statement, 0);
char *soid = (char*)sqlite3_column_text(statement, 1);
if(soid==nil)
soid= "";
NSString *nssoid= [[NSString alloc]initWithUTF8String:soid];
int status = sqlite3_column_double(statement, 2);
int erpStatus = sqlite3_column_double(statement, 9);
char *sales_rep = (char*)sqlite3_column_text(statement, 3);
if(sales_rep==nil)
sales_rep= "";
NSString *nssales_rep= [[NSString alloc]initWithUTF8String:sales_rep];
char *create_by = (char*)sqlite3_column_text(statement, 4);
if(create_by==nil)
create_by= "";
NSString *nscreate_by= [[NSString alloc]initWithUTF8String:create_by];
char *company_name = (char*)sqlite3_column_text(statement, 5);
if(company_name==nil)
company_name= "";
NSString *nscompany_name= [[NSString alloc]initWithUTF8String:company_name];
char *create_time = (char*)sqlite3_column_text(statement, 6);
if(create_time==nil)
create_time= "";
NSString *nscreate_time= [[NSString alloc]initWithUTF8String:create_time];
nscreate_time = [self changeDateTimeFormate:nscreate_time]; // 与在线统一
// double total_price = sqlite3_column_double(statement, 7);
double total_price = [self orderTotalPrice:[NSString stringWithUTF8String:soid] user:params[@"user"] db:db close:NO];
NSString *customer_contact = [self textAtColumn:8 statement:statement];
NSString* nsstatus = [self orderStatus:status erpStatus:erpStatus];
int offline_edit = sqlite3_column_int(statement, 10);
// ": "JH",
// "": "$8307.00",
// "": "MOB1608050001",
// "": "ArpithaT",
// "": "1st Stage Property Transformations",
// "": "JANICE SUTTON",
// "": 2255,
// "": "08/02/2016 09:49:18",
// "": 1,
// "": "Saved Order"
// "": "1470384050483",
// "model_count": "6 / 28"
item[@"sales_rep"]= nssales_rep;
item[@"price"]= [NSString stringWithFormat:@"$%.2f",total_price];
item[@"so#"]= nssoid;
item[@"create_by"]= nscreate_by;
item[@"customer_name"]= nscompany_name;
item[@"customer_contact"] = customer_contact;
item[@"order_id"]= [NSString stringWithFormat:@"%d",order_id];
item[@"purchase_time"]= nscreate_time;
int statusCode = status;
if (statusCode == 2) {
statusCode = erpStatus;
} else if (statusCode == 3) {
statusCode = 15;
}
item[@"orderStatus"]= [NSString stringWithFormat:@"%d",statusCode];
item[@"order_status"]= nsstatus;
item[@"order_code"]= nssoid;//[NSString stringWithFormat:@"%d",order_id];
item[@"offline_edit"] = [NSNumber numberWithInt:offline_edit];
// item[@"model_count"]
ret[[NSString stringWithFormat:@"item_%d",count]]= item;
count++;
}
ret[@"count"]= [NSNumber numberWithInt:count];
//ret[@"total_count"]= [NSNumber numberWithInt:count];
// ret[@"wish_count"]= [NSNumber numberWithInt:count];
ret[@"result"]= [NSNumber numberWithInt:2];
ret[@"can_see_price"] = [NSNumber numberWithBool:YES];
ret[@"time_zone"] = @"PST";
sqlite3_finalize(statement);
}
int total_count = [iSalesDB get_recordcount:db table:@"offline_order o left join offline_contact c on o.customer_cid=c.contact_id" where:where];
ret[@"total_count"] = [NSNumber numberWithInteger:total_count];
[iSalesDB execSql:@"END TRANSACTION" db:db];
[iSalesDB close_db:db];
return [RAConvertor dict2data:ret];
}
#pragma mark update gnotes
+(NSData*) offline_updategnotes :(NSMutableDictionary *) params
{
DebugLog(@"params: %@",params);
// comments = Meyoyoyoyoyoyoy;
// orderCode = MOB1608110001;
// password = 123456;
// user = EvanK;
NSString *sql = [NSString stringWithFormat:@"update offline_order set general_notes = '%@' where so_id = '%@';",[self valueInParams:params key:@"comments" translateSingleQuote:YES],[self valueInParams:params key:@"orderCode" translateSingleQuote:YES]];
int ret = [iSalesDB execSql:sql];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"];
[dic setValue:@"Regular Mode" forKey:@"mode"];
// [dic setValue:@"160409" forKey:@"min_ver"];
return [RAConvertor dict2data:dic];
}
#pragma mark move to wishlist
+(NSData*) offline_movecart2wish :(NSMutableDictionary *) params
{
NSString *_id = [self valueInParams:params key:@"cartItemId"];
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
_id = [NSString stringWithFormat:@"(%@)",_id];
NSString *sql = [NSString stringWithFormat:@"select product_id,item_count,item_id from offline_cart where so_no = '%@' and _id in %@;",orderCode,_id];
sqlite3 *db = [iSalesDB get_db];
__block NSString *product_id = @"";
__block NSString *item_count_str = @"";
// __block NSString *item_id = nil;
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
// product_id = [self textAtColumn:0 statement:stmt];
int item_count = sqlite3_column_int(stmt, 1);
// item_id = [self textAtColumn:2 statement:stmt];
NSString *p_id = [self textAtColumn:0 statement:stmt];
NSString *count_str = [NSString stringWithFormat:@"%d",item_count];
if (p_id.length) {
product_id = [product_id stringByAppendingString:[NSString stringWithFormat:@",%@",p_id]];
item_count_str = [item_count_str stringByAppendingString:[NSString stringWithFormat:@",%@",count_str]];
}
}];
[iSalesDB close_db:db];
// 去除第一个,
if (product_id.length > 1) {
product_id = [product_id substringFromIndex:1];
}
if (item_count_str.length > 1) {
item_count_str = [item_count_str substringFromIndex:1];
}
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
dic = [self offline_add2wishlist:@{@"product_id" : product_id,@"item_count" : item_count_str}.mutableCopy].mutableCopy;
// NSString *insertIntoWishlistSql = [NSString stringWithFormat:@"insert into wishlist (product_id,item_id,qty) values (%@,%@,%d);",product_id,item_id,item_count];
// int ret = [iSalesDB execSql:insertIntoWishlistSql db:db];
sqlite3 *db1 = [iSalesDB get_db];
int wish_count = [iSalesDB get_recordcount:db1 table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"];
[dic setValue:@"Regular Mode" forKey:@"mode"];
[dic setValue:[NSNumber numberWithInteger:wish_count] forKey:@"wish_count"];
// 删除
NSString *deleteSql = [NSString stringWithFormat:@"delete from offline_cart where _id in %@;",_id];
int ret = [iSalesDB execSql:deleteSql db:db1];
[dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"];
[iSalesDB close_db:db1];
return [RAConvertor dict2data:dic];
}
#pragma mark cart delete
+(NSData*) offline_cartremove :(NSMutableDictionary *) params
{
// cartItemId = 548;
// orderCode = MOB1608110001;
NSString *_id = [self valueInParams:params key:@"cartItemId"];
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
_id = [NSString stringWithFormat:@"(%@)",_id];
NSString *sql = [NSString stringWithFormat:@"delete from offline_cart where so_no = '%@' and _id in %@ ;",orderCode,_id];
int ret = [iSalesDB execSql:sql];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"];
[dic setValue:@"Regular Mode" forKey:@"mode"];
// [dic setValue:@"160409" forKey:@"min_ver"];
return [RAConvertor dict2data:dic];
}
#pragma mark set order discount
//+(NSDictionary*) offline_cartsetallprice :(NSMutableDictionary *) params
//{
// DebugLog(@"cart set price params: %@",params);
// // "cartitem_id" = 1;
// // discount = "0.000000";
// // "item_note" = "";
// // price = "269.000000";
// NSString *order_code = [self valueInParams:params key:@"orderCode"];
// //NSString *notes = [self valueInParams:params key:@"item_note"];
// NSString *discount = [self valueInParams:params key:@"app_discount"];
//// NSString *price = [self valueInParams:params key:@"price"];
//
// // bool badd_price_changed=false;
// // sqlite3* db=[iSalesDB get_db];
// // AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
// // NSNumber* default_price = [self get_model_default_price:appDelegate.contact_id product_id:nil item_id:_id db:db];
// // NSRange range;
// // range = [notes rangeOfString:@"PRICE MODIFIED"];
// //
// // if((default_price.doubleValue!=price.doubleValue || discount.intValue!=0 ) && range.location == NSNotFound)
// // badd_price_changed=true;
// // [iSalesDB close_db:db];
// //
// // if(badd_price_changed)
// // {
// // notes=[NSString stringWithFormat:@"%@\n%@",@"PRICE MODIFIED",notes];
// // }
// //
//
//
//// price = [self translateSingleQuote:[AESCrypt fastencrypt:price]];
//
// NSString *sql = [NSString stringWithFormat:@"update offline_cart set discount = %f where so_no = '%@'",discount.doubleValue,order_code];
//
// int ret = [iSalesDB execSql:sql];
//
// NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// [dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"];
// [dic setValue:@"Regular Mode" forKey:@"mode"];
// // [dic setValue:@"160409" forKey:@"min_ver"];
//
//// return [RAConvertor dict2data:dic];
// return dic;
//
//}
+(NSDictionary*) offline_setorderdiscount :(NSMutableDictionary *) params
{
DebugLog(@"order set discount params: %@",params);
// "cartitem_id" = 1;
// discount = "0.000000";
// "item_note" = "";
// price = "269.000000";
NSString *order_code = [self valueInParams:params key:@"orderCode"];
//NSString *notes = [self valueInParams:params key:@"item_note"];
NSString *discount = [self valueInParams:params key:@"app_discount"];
// NSString *price = [self valueInParams:params key:@"price"];
// bool badd_price_changed=false;
// sqlite3* db=[iSalesDB get_db];
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
// NSNumber* default_price = [self get_model_default_price:appDelegate.contact_id product_id:nil item_id:_id db:db];
// NSRange range;
// range = [notes rangeOfString:@"PRICE MODIFIED"];
//
// if((default_price.doubleValue!=price.doubleValue || discount.intValue!=0 ) && range.location == NSNotFound)
// badd_price_changed=true;
// [iSalesDB close_db:db];
//
// if(badd_price_changed)
// {
// notes=[NSString stringWithFormat:@"%@\n%@",@"PRICE MODIFIED",notes];
// }
//
// sqlite3 *db = [iSalesDB get_db];
// double total_price = [self orderTotalPrice:params[@"orderCode"] user:params[@"user"] db:db close:YES];
// price = [self translateSingleQuote:[AESCrypt fastencrypt:price]];
//NSString *sql = [NSString stringWithFormat:@"update offline_order set discount = %f, total_price=%f where so_id = '%@'",discount.doubleValue,total_price*(1-discount.doubleValue/100.0),order_code];
NSString *sql = [NSString stringWithFormat:@"update offline_order set discount = %f where so_id = '%@'",discount.doubleValue,order_code];
int ret = [iSalesDB execSql:sql];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"];
[dic setValue:@"Regular Mode" forKey:@"mode"];
// [dic setValue:@"160409" forKey:@"min_ver"];
// return [RAConvertor dict2data:dic];
return dic;
}
+(NSData*) offline_cartsetprice :(NSMutableDictionary *) params
{
DebugLog(@"cart set price params: %@",params);
// "cartitem_id" = 1;
// discount = "0.000000";
// "item_note" = "";
// price = "269.000000";
NSString *_id = [self valueInParams:params key:@"cartitem_id"];
NSString *notes = [self valueInParams:params key:@"item_note"];
NSString *discount = [self valueInParams:params key:@"discount"];
NSString *price = [self valueInParams:params key:@"price"];
// bool badd_price_changed=false;
// sqlite3* db=[iSalesDB get_db];
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
// NSNumber* default_price = [self get_model_default_price:appDelegate.contact_id product_id:nil item_id:_id db:db];
// NSRange range;
// range = [notes rangeOfString:@"PRICE MODIFIED"];
//
// if((default_price.doubleValue!=price.doubleValue || discount.intValue!=0 ) && range.location == NSNotFound)
// badd_price_changed=true;
// [iSalesDB close_db:db];
//
// if(badd_price_changed)
// {
// notes=[NSString stringWithFormat:@"%@\n%@",@"PRICE MODIFIED",notes];
// }
//
price = [self translateSingleQuote:[AESCrypt fastencrypt:price]];
NSString *sql = [NSString stringWithFormat:@"update offline_cart set str_price = '%@',discount = %f, line_note='%@' where _id = %@",price,discount.doubleValue,notes,_id];
int ret = [iSalesDB execSql:sql];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"];
[dic setValue:@"Regular Mode" forKey:@"mode"];
// [dic setValue:@"160409" forKey:@"min_ver"];
return [RAConvertor dict2data:dic];
}
#pragma mark set line notes
+(NSData*) offline_cartsetlnotes :(NSMutableDictionary *) params
{
NSString *_id = [self valueInParams:params key:@"cartitem_id"];
NSString *notes = [self valueInParams:params key:@"notes"];
notes = [self translateSingleQuote:notes];
NSString *sql = [NSString stringWithFormat:@"update offline_cart set line_note = '%@' where _id = %@",notes,_id];
int ret = [iSalesDB execSql:sql];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"];
[dic setValue:@"Regular Mode" forKey:@"mode"];
// [dic setValue:@"160409" forKey:@"min_ver"];
return [RAConvertor dict2data:dic];
}
#pragma mark set qty
+(NSData*) offline_cartsetqty :(NSMutableDictionary *) params
{
assert(params[@"can_create_backorder"]!=nil);
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
NSString *_id = [self valueInParams:params key:@"cartitem_id"];
int item_count = [params[@"inputInt"] intValue];
// 购买检查数量大于库存
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
if (!params[@"can_create_backorder"]) {
NSString *checkSql = [NSString stringWithFormat:@"select p.availability from product as p left join offline_cart as c on c.item_id = p.item_id where c._id = %@;",_id];
__block BOOL out_of_stock = NO;
[iSalesDB jk_query:checkSql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
int availability = sqlite3_column_int(stmt, 0);
if (availability < item_count) {
out_of_stock = YES;
}
}];
if (out_of_stock) { // 缺货
[dic setValue:[NSNumber numberWithInteger:8] forKey:@"result"];
[dic setObject:@"Item is out of stock" forKey:@"err_msg"];
return [RAConvertor dict2data:dic];
}
}
NSString *sql = [NSString stringWithFormat:@"update offline_cart set item_count = %d where _id = %@;",item_count,_id];
int ret = [iSalesDB execSql:sql];
__block int item_id = 0;
[iSalesDB jk_query:[NSString stringWithFormat:@"select item_id from offline_cart where _id = %@;",_id] completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
item_id = sqlite3_column_int(stmt, 0);
}];
sqlite3 *db = [iSalesDB get_db];
NSDictionary* bsubtotaljson=[self model_subtotal:item_id count:item_count db:db compute_part:true];
[iSalesDB close_db:db];
[dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"];
[dic setValue:@"Regular Mode" forKey:@"mode"];
// [dic setValue:@"160409" forKey:@"min_ver"];
[dic setValue:bsubtotaljson[@"cuft"] forKey:@"cuft"];
[dic setValue:bsubtotaljson[@"weight"] forKey:@"weight"];
[dic setValue:bsubtotaljson[@"carton"] forKey:@"carton"];
return [RAConvertor dict2data:dic];
}
#pragma mark place order
+ (NSDictionary *)infoName:(NSString *)name aname:(NSString *)aname control:(NSString *)control keyboard:(NSString *)keyboard value:(id)value {
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
if (aname) {
[dic setValue:aname forKey:@"aname"];
}
if (control) {
[dic setValue:control forKey:@"control"];
}
if (keyboard) {
[dic setValue:keyboard forKey:@"keyboard"];
}
if (name) {
[dic setValue:name forKey:@"name"];
}
if (value) {
[dic setValue:value forKey:@"value"];
}
return dic;
}
+ (NSDictionary *)customerDic:(NSDictionary *) params db:(sqlite3 *)db {
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
__block NSMutableDictionary *customer_dic = [NSMutableDictionary dictionary];
NSString *customerSql = [NSString stringWithFormat:@"select c.contact_id,c.img_0,c.img_1,c.img_2,decrypt(c.company_name),decrypt(c.addr_1),c.addr_2,c.addr_3,c.addr_4,c.first_name,c.last_name,o.customer_email,o.customer_phone,o.customer_fax,c.zipcode,c.city,c.state,c.country,o.customer_contact from offline_contact as c join offline_order as o on c.contact_id = o.customer_cid where o.so_id = '%@';",orderCode];
[iSalesDB jk_query:customerSql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSString *contact_id = [self textAtColumn:0 statement:stmt];
NSString *img0 = [self textAtColumn:1 statement:stmt];
NSString *img1 = [self textAtColumn:2 statement:stmt];
NSString *img2 = [self textAtColumn:3 statement:stmt];
NSString *company_name = [self textAtColumn:4 statement:stmt];
NSString *addr1 = [self textAtColumn:5 statement:stmt];
NSString *addr2 = [self textAtColumn:6 statement:stmt];
NSString *addr3 = [self textAtColumn:7 statement:stmt];
NSString *addr4 = [self textAtColumn:8 statement:stmt];
// NSString *first_name = [self textAtColumn:9 statement:stmt];
// NSString *last_name = [self textAtColumn:10 statement:stmt];
NSString *email = [self textAtColumn:11 statement:stmt];
NSString *phone = [self textAtColumn:12 statement:stmt];
NSString *fax = [self textAtColumn:13 statement:stmt];
NSString *zipcode = [self textAtColumn:14 statement:stmt];
NSString *city = [self textAtColumn:15 statement:stmt];
NSString *state = [self textAtColumn:16 statement:stmt];
NSString *country = [self textAtColumn:17 statement:stmt];
NSString *name = [self textAtColumn:18 statement:stmt];
// contact id
NSMutableDictionary *contact_id_dic = [NSMutableDictionary dictionary];
[contact_id_dic setValue:@"Contact ID" forKey:@"aname"];
[contact_id_dic setValue:@"text" forKey:@"control"];
[contact_id_dic setValue:@"text" forKey:@"keyboard"];
[contact_id_dic setValue:@"customer_cid" forKey:@"name"];
[contact_id_dic setValue:@"true" forKey:@"required"];
[contact_id_dic setValue:contact_id forKey:@"value"];
[customer_dic setValue:contact_id_dic forKey:@"item_0"];
// business card
NSMutableDictionary *business_card_dic = [NSMutableDictionary dictionary];
[business_card_dic setValue:@"Business Card" forKey:@"aname"];
[business_card_dic setValue:@"img" forKey:@"control"];
[business_card_dic setValue:@"1" forKey:@"disable"];
[business_card_dic setValue:img0 forKey:@"img_url_0"];
[business_card_dic setValue:img1 forKey:@"img_url_1"];
[business_card_dic setValue:img2 forKey:@"img_url_2"];
[business_card_dic setValue:img0 forKey:@"img_url_aname_0"];
[business_card_dic setValue:img1 forKey:@"img_url_aname_1"];
[business_card_dic setValue:img2 forKey:@"img_url_aname_2"];
[business_card_dic setValue:@"business_card" forKey:@"name"];
[customer_dic setValue:business_card_dic forKey:@"item_1"];
// fax
NSDictionary *fax_dic = [self infoName:@"customer_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax];
[customer_dic setValue:fax_dic forKey:@"item_10"];
// zipcode
NSDictionary *zipcode_dic = [self infoName:@"customer_zipcode" aname:@"Zipcode" control:@"text" keyboard:nil value:zipcode];
[customer_dic setValue:zipcode_dic forKey:@"item_11"];
// city
NSDictionary *city_dic = [self infoName:@"customer_city" aname:@"City" control:@"text" keyboard:nil value:city];
[customer_dic setValue:city_dic forKey:@"item_12"];
// state
NSDictionary *state_dic = [self infoName:@"customer_state" aname:@"State" control:@"text" keyboard:nil value:state];
[customer_dic setValue:state_dic forKey:@"item_13"];
// country
NSDictionary *country_dic = [self infoName:@"customer_country" aname:@"Country" control:@"text" keyboard:nil value:country];
[customer_dic setValue:country_dic forKey:@"item_14"];
// company name
NSDictionary *company_dic = [self infoName:@"customer_name" aname:@"Company Name" control:@"text" keyboard:nil value:company_name];
[customer_dic setValue:company_dic forKey:@"item_2"];
// addr_1
NSDictionary *addr1_dic = [self infoName:@"customer_address1" aname:@"Address_1" control:@"text" keyboard:nil value:addr1];
[customer_dic setValue:addr1_dic forKey:@"item_3"];
// addr_2
NSDictionary *addr2_dic = [self infoName:@"customer_address2" aname:@"Address_2" control:@"text" keyboard:nil value:addr2];
[customer_dic setValue:addr2_dic forKey:@"item_4"];
// addr_3
NSDictionary *addr3_dic = [self infoName:@"customer_address3" aname:@"Address_3" control:@"text" keyboard:nil value:addr3];
[customer_dic setValue:addr3_dic forKey:@"item_5"];
// addr_4
NSDictionary *addr4_dic = [self infoName:@"customer_address4" aname:@"Address_4" control:@"text" keyboard:nil value:addr4];
[customer_dic setValue:addr4_dic forKey:@"item_6"];
// Contact
NSDictionary *contact_dic = [self infoName:@"customer_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:name];
[customer_dic setValue:contact_dic forKey:@"item_7"];
// email
NSDictionary *email_dic = [self infoName:@"customer_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email];
[customer_dic setValue:email_dic forKey:@"item_8"];
// phone
NSDictionary *phone_dic = [self infoName:@"customer_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone];
[customer_dic setValue:phone_dic forKey:@"item_9"];
// title
[customer_dic setValue:@"Customer" forKey:@"title"];
// count
[customer_dic setValue:[NSNumber numberWithInteger:15] forKey:@"count"];
}];
// setting
NSDictionary *setting = params[@"setting"];
NSNumber *hide = setting[@"CustomerHide"];
[customer_dic setValue:hide forKey:@"hide"];
return customer_dic;
}
+ (NSDictionary *)shipToDic:(NSDictionary *)params db:(sqlite3 *)db {
__block NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// setting
NSDictionary *setting = params[@"setting"];
NSNumber *hide = setting[@"ShipToHide"];
[dic setValue:hide forKey:@"hide"];
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
NSString *sql = [NSString stringWithFormat:@"select receive_cid,receive_name,receive_ext,receive_contact,receive_email,receive_fax,receive_phone from offline_order where so_id = '%@';",orderCode];
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSString *cid = [self textAtColumn:0 statement:stmt];
NSString *name = [self textAtColumn:1 statement:stmt];
NSString *ext = [self textAtColumn:2 statement:stmt];
NSString *contact = [self textAtColumn:3 statement:stmt];
NSString *email = [self textAtColumn:4 statement:stmt];
NSString *fax = [self textAtColumn:5 statement:stmt];
NSString *phone = [self textAtColumn:6 statement:stmt];
// count
[dic setValue:[NSNumber numberWithInteger:8] forKey:@"count"];
// title
[dic setValue:@"Ship To" forKey:@"title"];
// choose
NSMutableDictionary *choose_dic = [NSMutableDictionary dictionary];
[choose_dic setValue:@"choose" forKey:@"aname"];
[choose_dic setValue:@"multi_action" forKey:@"control"];
[choose_dic setValue:[NSNumber numberWithInteger:3] forKey:@"count"];
NSDictionary *same_as_customer_dic = @{@"aname" : @"Same as customer",
@"key_map" : @{@"receive_cid" : @"customer_cid",
@"receive_contact" : @"customer_contact",
@"receive_email" : @"customer_email",
@"receive_ext" : @"customer_contact_ext",
@"receive_fax" : @"customer_fax",
@"receive_name" : @"customer_name",
@"receive_phone" : @"customer_phone"},
@"refresh" : [NSNumber numberWithInteger:1],
@"type" : @"pull"};
[choose_dic setValue:same_as_customer_dic forKey:@"item_0"];
NSDictionary *create_new_ship_to_dic = @{@"aname" : @"Create new ship to",
@"name" : @"Add new address",
@"refresh" : [NSNumber numberWithInteger:1],
@"value" : @"new_addr"
};
[choose_dic setValue:create_new_ship_to_dic forKey:@"item_1"];
NSDictionary *select_ship_to_dic = @{@"aname" : @"Select ship to",
@"key_map" : @{@"receive_cid" : @"customer_cid",
@"receive_contact" : @"customer_contact",
@"receive_email" : @"customer_email",
@"receive_ext" : @"customer_contact_ext",
@"receive_fax" : @"customer_fax",
@"receive_name" : @"customer_name",
@"receive_phone" : @"customer_phone"},
@"name" : @"select_ship_to",
@"refresh" : [NSNumber numberWithInteger:1],
@"value" : @"Sales_Order_Ship_To"};
[choose_dic setValue:select_ship_to_dic forKey:@"item_2"];
[dic setValue:choose_dic forKey:@"item_0"];
// contact id
NSMutableDictionary *contact_id_dic = [[self infoName:@"receive_cid" aname:@"Contact ID" control:@"edit" keyboard:@"text" value:cid] mutableCopy];
[contact_id_dic setValue:@"1" forKey:@"disable"];
[contact_id_dic setValue:@"true" forKey:@"required"];
[dic setValue:contact_id_dic forKey:@"item_1"];
// company name
NSDictionary *company_name_dic = [self infoName:@"receive_name" aname:@"Company Name" control:@"edit" keyboard:@"text" value:name];
[dic setValue:company_name_dic forKey:@"item_2"];
// address
NSMutableDictionary *ext_dic = [self infoName:@"receive_ext" aname:@"Address" control:@"text_view" keyboard:@"text" value:ext].mutableCopy;
NSNumber *required = setting[@"ShippingToAddressRequire"];
if ([required integerValue]) {
[ext_dic setValue:@"true" forKey:@"required"];
}
[dic setValue:ext_dic forKey:@"item_3"];
// contact
NSDictionary *contact_dic = [self infoName:@"receive_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:contact];
[dic setValue:contact_dic forKey:@"item_4"];
// phone
NSDictionary *phone_dic = [self infoName:@"receive_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone];
[dic setValue:phone_dic forKey:@"item_5"];
// fax
NSDictionary *fax_dic = [self infoName:@"receive_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax];
[dic setValue:fax_dic forKey:@"item_6"];
// email
NSDictionary *email_dic = [self infoName:@"receive_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email];
[dic setValue:email_dic forKey:@"item_7"];
}];
return dic;
}
+ (NSDictionary *)shipFromDic:(NSDictionary *)params db:(sqlite3 *)db {
__block NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// setting
NSDictionary *setting = params[@"setting"];
NSNumber *hide = setting[@"ShipFromHide"];
[dic setValue:hide forKey:@"hide"];
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
NSString *sql = [NSString stringWithFormat:@"select sender_cid,sender_name,sender_ext,sender_contact,sender_email,sender_fax,sender_phone from offline_order where so_id = '%@';",orderCode];
NSString *ship_from_default_sql = @"select contact_id,decrypt(company_name),decrypt(addr_1),first_name || ' ' || last_name,email,fax,phone from offline_contact where contact_id = 'NPD';";
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
__block NSString *cid = [self textAtColumn:0 statement:stmt];
__block NSString *name = [self textAtColumn:1 statement:stmt];
__block NSString *ext = [self textAtColumn:2 statement:stmt];
__block NSString *contact = [self textAtColumn:3 statement:stmt];
__block NSString *email = [self textAtColumn:4 statement:stmt];
__block NSString *fax = [self textAtColumn:5 statement:stmt];
__block NSString *phone = [self textAtColumn:6 statement:stmt];
if (!cid.length) {
[iSalesDB jk_query:ship_from_default_sql db:db close:NO completion:^(sqlite3_stmt *statment, NSMutableDictionary *container, long *count) {
cid = [self textAtColumn:0 statement:statment];
name = [self textAtColumn:1 statement:statment];
ext = [self textAtColumn:2 statement:statment];
contact = [self textAtColumn:3 statement:statment];
email = [self textAtColumn:4 statement:statment];
fax = [self textAtColumn:5 statement:statment];
phone = [self textAtColumn:6 statement:statment];
}];
}
// count
[dic setValue:[NSNumber numberWithInteger:8] forKey:@"count"];
// title
[dic setValue:@"Ship From" forKey:@"title"];
// hide
[dic setValue:[NSNumber numberWithInteger:1] forKey:@"hide"];
// choose
NSMutableDictionary *choose_dic = [NSMutableDictionary dictionary];
[choose_dic setValue:@"choose" forKey:@"aname"];
[choose_dic setValue:@"multi_action" forKey:@"control"];
[choose_dic setValue:[NSNumber numberWithInteger:1] forKey:@"count"];
NSDictionary *select_ship_from_dic = @{@"aname" : @"Select ship from",
@"key_map" : @{@"sender_cid" : @"customer_cid",
@"sender_contact" : @"customer_contact",
@"sender_email" : @"customer_email",
@"sender_ext" : @"customer_contact_ext",
@"sender_fax" : @"customer_fax",
@"sender_name" : @"customer_name",
@"sender_phone" : @"customer_phone"},
@"name" : @"select_cid",
@"refresh" : [NSNumber numberWithInteger:0],
@"value" : @"Sales_Order_Ship_From"};
[choose_dic setValue:select_ship_from_dic forKey:@"item_0"];
[dic setValue:choose_dic forKey:@"item_0"];
// contact id
NSDictionary *contact_id_dic = [[self infoName:@"sender_cid" aname:@"Contact ID" control:@"edit" keyboard:@"text" value:cid] mutableCopy];
[contact_id_dic setValue:@"1" forKey:@"disable"];
[contact_id_dic setValue:@"true" forKey:@"required"];
[dic setValue:contact_id_dic forKey:@"item_1"];
// company name
NSDictionary *company_name_dic = [self infoName:@"sender_name" aname:@"Company Name" control:@"edit" keyboard:@"text" value:name];
[dic setValue:company_name_dic forKey:@"item_2"];
// address
NSDictionary *ext_dic = [self infoName:@"sender_ext" aname:@"Address" control:@"text_view" keyboard:@"text" value:ext];
[dic setValue:ext_dic forKey:@"item_3"];
// contact
NSDictionary *contact_dic = [self infoName:@"sender_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:contact];
[dic setValue:contact_dic forKey:@"item_4"];
// phone
NSDictionary *phone_dic = [self infoName:@"sender_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone];
[dic setValue:phone_dic forKey:@"item_5"];
// fax
NSDictionary *fax_dic = [self infoName:@"sender_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax];
[dic setValue:fax_dic forKey:@"item_6"];
// email
NSDictionary *email_dic = [self infoName:@"sender_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email];
[dic setValue:email_dic forKey:@"item_7"];
}];
return dic;
}
+ (NSDictionary *)freightBillToDic:(NSDictionary *) params db:(sqlite3 *)db {
__block NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// setting
NSDictionary *setting = params[@"setting"];
NSNumber *hide = setting[@"FreightBillToHide"];
[dic setValue:hide forKey:@"hide"];
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
NSString *sql = [NSString stringWithFormat:@"select shipping_billto_cid,shipping_billto_name,shipping_billto_ext,shipping_billto_contact,shipping_billto_email,shipping_billto_fax,shipping_billto_phone from offline_order where so_id = '%@';",orderCode];
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSString *cid = [self textAtColumn:0 statement:stmt];
NSString *name = [self textAtColumn:1 statement:stmt];
NSString *ext = [self textAtColumn:2 statement:stmt];
NSString *contact = [self textAtColumn:3 statement:stmt];
NSString *email = [self textAtColumn:4 statement:stmt];
NSString *fax = [self textAtColumn:5 statement:stmt];
NSString *phone = [self textAtColumn:6 statement:stmt];
// count
[dic setValue:[NSNumber numberWithInteger:8] forKey:@"count"];
// title
[dic setValue:@"Freight Bill To" forKey:@"title"];
// hide
[dic setValue:[NSNumber numberWithInteger:1] forKey:@"hide"];
// choose
NSMutableDictionary *choose_dic = [NSMutableDictionary dictionary];
[choose_dic setValue:@"choose" forKey:@"aname"];
[choose_dic setValue:@"multi_action" forKey:@"control"];
[choose_dic setValue:[NSNumber numberWithInteger:4] forKey:@"count"];
NSDictionary *same_as_ship_to_dic = @{@"aname" : @"Same as ship to",
@"key_map" : @{@"shipping_billto_cid" : @"receive_cid",
@"shipping_billto_contact" : @"receive_contact",
@"shipping_billto_email" : @"receive_email",
@"shipping_billto_ext" : @"receive_ext",
@"shipping_billto_fax" : @"receive_fax",
@"shipping_billto_name" : @"receive_name",
@"shipping_billto_phone" : @"receive_phone"},
@"type" : @"pull"};
[choose_dic setValue:same_as_ship_to_dic forKey:@"item_0"];
NSDictionary *same_as_customer_dic = @{@"aname" : @"Same as customer",
@"type" : @"pull",
@"key_map" : @{@"shipping_billto_cid" : @"customer_cid",
@"shipping_billto_contact" : @"customer_contact",
@"shipping_billto_email" : @"customer_email",
@"shipping_billto_ext" : @"customer_contact_ext",
@"shipping_billto_fax" : @"customer_fax",
@"shipping_billto_name" : @"customer_name",
@"shipping_billto_phone" : @"customer_phone"}
};
[choose_dic setValue:same_as_customer_dic forKey:@"item_1"];
NSDictionary *same_as_ship_from_dic = @{@"aname" : @"Same as ship from",
@"key_map" : @{@"shipping_billto_cid" : @"sender_cid",
@"shipping_billto_contact" : @"sender_contact",
@"shipping_billto_email" : @"sender_email",
@"shipping_billto_ext" : @"sender_ext",
@"shipping_billto_fax" : @"sender_fax",
@"shipping_billto_name" : @"sender_name",
@"shipping_billto_phone" : @"sender_phone"},
@"type" : @"pull"
};
[choose_dic setValue:same_as_ship_from_dic forKey:@"item_2"];
NSDictionary *select_freight_bill_to_dic = @{
@"aname" : @"Select freight bill to",
@"name" : @"select_cid",
@"refresh" : [NSNumber numberWithInteger:0],
@"value" : @"Sales_Order_Freight_Bill_To",
@"key_map" : @{
@"shipping_billto_cid" : @"customer_cid",
@"shipping_billto_contact" : @"customer_contact",
@"shipping_billto_email" : @"customer_email",
@"shipping_billto_ext" : @"customer_contact_ext",
@"shipping_billto_fax" : @"customer_fax",
@"shipping_billto_name" : @"customer_name",
@"shipping_billto_phone" : @"customer_phone"
}
};
[choose_dic setValue:select_freight_bill_to_dic forKey:@"item_3"];
[dic setValue:choose_dic forKey:@"item_0"];
// contact id
NSDictionary *contact_id_dic = [[self infoName:@"shipping_billto_cid" aname:@"Contact ID" control:@"edit" keyboard:@"text" value:cid] mutableCopy];
[contact_id_dic setValue:@"1" forKey:@"disable"];
[contact_id_dic setValue:@"true" forKey:@"required"];
[dic setValue:contact_id_dic forKey:@"item_1"];
// company name
NSDictionary *company_name_dic = [self infoName:@"shipping_billto_name" aname:@"Company Name" control:@"edit" keyboard:@"text" value:name];
[dic setValue:company_name_dic forKey:@"item_2"];
// address
NSMutableDictionary *ext_dic = [self infoName:@"shipping_billto_ext" aname:@"Address" control:@"text_view" keyboard:@"text" value:ext].mutableCopy;
NSNumber *ext_required = setting[@"FreightBillToAddressRequire"];
if ([ext_required integerValue]) {
[ext_dic setValue:@"true" forKey:@"required"];
}
[dic setValue:ext_dic forKey:@"item_3"];
// contact
NSDictionary *contact_dic = [self infoName:@"shipping_billto_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:contact];
[dic setValue:contact_dic forKey:@"item_4"];
// phone
NSDictionary *phone_dic = [self infoName:@"shipping_billto_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone];
[dic setValue:phone_dic forKey:@"item_5"];
// fax
NSDictionary *fax_dic = [self infoName:@"shipping_billto_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax];
[dic setValue:fax_dic forKey:@"item_6"];
// email
NSDictionary *email_dic = [self infoName:@"shipping_billto_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email];
[dic setValue:email_dic forKey:@"item_7"];
}];
return dic;
}
+ (NSDictionary *)merchandiseBillToDic:(NSDictionary *)params db:(sqlite3 *)db {
__block NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// setting
NSDictionary *setting = params[@"setting"];
NSNumber *hide = setting[@"MerchandiseBillToHide"];
[dic setValue:hide forKey:@"hide"];
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
NSString *sql = [NSString stringWithFormat:@"select billing_cid,billing_name,billing_ext,billing_contact,billing_email,billing_fax,billing_phone from offline_order where so_id = '%@';",orderCode];
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSString *cid = [self textAtColumn:0 statement:stmt];
NSString *name = [self textAtColumn:1 statement:stmt];
NSString *ext = [self textAtColumn:2 statement:stmt];
NSString *contact = [self textAtColumn:3 statement:stmt];
NSString *email = [self textAtColumn:4 statement:stmt];
NSString *fax = [self textAtColumn:5 statement:stmt];
NSString *phone = [self textAtColumn:6 statement:stmt];
// count
[dic setValue:[NSNumber numberWithInteger:8] forKey:@"count"];
// title
[dic setValue:@"Merchandise Bill To" forKey:@"title"];
// hide
[dic setValue:[NSNumber numberWithInteger:1] forKey:@"hide"];
// choose
NSMutableDictionary *choose_dic = [NSMutableDictionary dictionary];
[choose_dic setValue:@"choose" forKey:@"aname"];
[choose_dic setValue:@"multi_action" forKey:@"control"];
[choose_dic setValue:[NSNumber numberWithInteger:3] forKey:@"count"];
NSDictionary *same_as_ship_to_dic = @{@"aname" : @"Same as ship to",
@"key_map" : @{@"billing_cid" : @"receive_cid",
@"billing_contact" : @"receive_contact",
@"billing_email" : @"receive_email",
@"billing_ext" : @"receive_ext",
@"billing_fax" : @"receive_fax",
@"billing_name" : @"receive_name",
@"billing_phone" : @"receive_phone"},
@"type" : @"pull"};
[choose_dic setValue:same_as_ship_to_dic forKey:@"item_0"];
NSDictionary *same_as_customer_dic = @{@"aname" : @"Same as customer",
@"type" : @"pull",
@"key_map" : @{@"billing_cid" : @"customer_cid",
@"billing_contact" : @"customer_contact",
@"billing_email" : @"customer_email",
@"billing_ext" : @"customer_contact_ext",
@"billing_fax" : @"customer_fax",
@"billing_name" : @"customer_name",
@"billing_phone" : @"customer_phone"}
};
[choose_dic setValue:same_as_customer_dic forKey:@"item_1"];
NSDictionary *select_bill_to_dic = @{
@"aname" : @"Select bill to",
@"name" : @"select_cid",
@"refresh" : [NSNumber numberWithInteger:0],
@"value" : @"Sales_Order_Merchandise_Bill_To",
@"key_map" : @{
@"billing_cid" : @"customer_cid",
@"billing_contact" : @"customer_contact",
@"billing_email" : @"customer_email",
@"billing_ext" : @"customer_contact_ext",
@"billing_fax" : @"customer_fax",
@"billing_name" : @"customer_name",
@"billing_phone" : @"customer_phone"
}
};
[choose_dic setValue:select_bill_to_dic forKey:@"item_2"];
[dic setValue:choose_dic forKey:@"item_0"];
// contact id
NSDictionary *contact_id_dic = [[self infoName:@"billing_cid" aname:@"Contact ID" control:@"edit" keyboard:@"text" value:cid] mutableCopy];
[contact_id_dic setValue:@"1" forKey:@"disable"];
[contact_id_dic setValue:@"true" forKey:@"required"];
[dic setValue:contact_id_dic forKey:@"item_1"];
// company name
NSDictionary *company_name_dic = [self infoName:@"billing_name" aname:@"Company Name" control:@"edit" keyboard:@"text" value:name];
[dic setValue:company_name_dic forKey:@"item_2"];
// address
NSMutableDictionary *ext_dic = [self infoName:@"billing_ext" aname:@"Address" control:@"text_view" keyboard:@"text" value:ext].mutableCopy;
NSNumber *ext_required = setting[@"MerchandiseBillToAddressRequire"];
if ([ext_required integerValue]) {
[ext_dic setValue:@"true" forKey:@"required"];
}
[dic setValue:ext_dic forKey:@"item_3"];
// contact
NSDictionary *contact_dic = [self infoName:@"billing_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:contact];
[dic setValue:contact_dic forKey:@"item_4"];
// phone
NSDictionary *phone_dic = [self infoName:@"billing_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone];
[dic setValue:phone_dic forKey:@"item_5"];
// fax
NSDictionary *fax_dic = [self infoName:@"billing_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax];
[dic setValue:fax_dic forKey:@"item_6"];
// email
NSDictionary *email_dic = [self infoName:@"billing_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email];
[dic setValue:email_dic forKey:@"item_7"];
}];
return dic;
}
+ (NSDictionary *)returnToDic:(NSDictionary *)params db:(sqlite3 *)db {
__block NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// setting
NSDictionary *setting = params[@"setting"];
NSNumber *hide = setting[@"ReturnToHide"];
[dic setValue:hide forKey:@"hide"];
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
NSString *sql = [NSString stringWithFormat:@"select returnto_cid,returnto_name,returnto_ext,returnto_contact,returnto_email,returnto_fax,returnto_phone from offline_order where so_id = '%@';",orderCode];
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSString *cid = [self textAtColumn:0 statement:stmt];
NSString *name = [self textAtColumn:1 statement:stmt];
NSString *ext = [self textAtColumn:2 statement:stmt];
NSString *contact = [self textAtColumn:3 statement:stmt];
NSString *email = [self textAtColumn:4 statement:stmt];
NSString *fax = [self textAtColumn:5 statement:stmt];
NSString *phone = [self textAtColumn:6 statement:stmt];
// count
[dic setValue:[NSNumber numberWithInteger:8] forKey:@"count"];
// title
[dic setValue:@"Return To" forKey:@"title"];
// hide
[dic setValue:[NSNumber numberWithInteger:1] forKey:@"hide"];
// choose
NSMutableDictionary *choose_dic = [NSMutableDictionary dictionary];
[choose_dic setValue:@"choose" forKey:@"aname"];
[choose_dic setValue:@"multi_action" forKey:@"control"];
[choose_dic setValue:[NSNumber numberWithInteger:2] forKey:@"count"];
NSDictionary *same_as_ship_from_dic = @{@"aname" : @"Same as ship from",
@"key_map" : @{@"returnto_cid" : @"sender_cid",
@"returnto_contact" : @"sender_contact",
@"returnto_email" : @"sender_email",
@"returnto_ext" : @"sender_ext",
@"returnto_fax" : @"sender_fax",
@"returnto_name" : @"sender_name",
@"returnto_phone" : @"sender_phone"},
@"type" : @"pull"};
[choose_dic setValue:same_as_ship_from_dic forKey:@"item_0"];
NSDictionary *select_return_to_dic = @{
@"aname" : @"Select return to",
@"name" : @"select_cid",
@"refresh" : [NSNumber numberWithInteger:0],
@"value" : @"Contact_Return_To",
@"key_map" : @{
@"returnto_cid" : @"customer_cid",
@"returnto_contact" : @"customer_contact",
@"returnto_email" : @"customer_email",
@"returnto_ext" : @"customer_contact_ext",
@"returnto_fax" : @"customer_fax",
@"returnto_name" : @"customer_name",
@"returnto_phone" : @"customer_phone"
}
};
[choose_dic setValue:select_return_to_dic forKey:@"item_1"];
[dic setValue:choose_dic forKey:@"item_0"];
// contact id
NSDictionary *contact_id_dic = [[self infoName:@"returnto_cid" aname:@"Contact ID" control:@"edit" keyboard:@"text" value:cid] mutableCopy];
[contact_id_dic setValue:@"1" forKey:@"disable"];
[contact_id_dic setValue:@"true" forKey:@"required"];
[dic setValue:contact_id_dic forKey:@"item_1"];
// company name
NSDictionary *company_name_dic = [self infoName:@"returnto_name" aname:@"Company Name" control:@"edit" keyboard:@"text" value:name];
[dic setValue:company_name_dic forKey:@"item_2"];
// address
NSDictionary *ext_dic = [self infoName:@"returnto_ext" aname:@"Address" control:@"text_view" keyboard:@"text" value:ext];
[dic setValue:ext_dic forKey:@"item_3"];
// contact
NSDictionary *contact_dic = [self infoName:@"returnto_contact" aname:@"Contact" control:@"edit" keyboard:@"text" value:contact];
[dic setValue:contact_dic forKey:@"item_4"];
// phone
NSDictionary *phone_dic = [self infoName:@"returnto_phone" aname:@"Phone" control:@"edit" keyboard:@"text" value:phone];
[dic setValue:phone_dic forKey:@"item_5"];
// fax
NSDictionary *fax_dic = [self infoName:@"returnto_fax" aname:@"Fax" control:@"edit" keyboard:@"text" value:fax];
[dic setValue:fax_dic forKey:@"item_6"];
// email
NSDictionary *email_dic = [self infoName:@"returnto_email" aname:@"Email" control:@"edit" keyboard:@"text" value:email];
[dic setValue:email_dic forKey:@"item_7"];
}];
return dic;
}
+ (NSDictionary *)modelInfoDic:(NSDictionary *)params db:(sqlite3 *)db
{
assert(params[@"user"]!=nil);
assert(params[@"contact_id"]!=nil);
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
__block NSMutableDictionary *dic = [NSMutableDictionary dictionary];
__block double TotalCuft = 0;
__block double TotalWeight = 0;
__block int TotalCarton = 0;
__block double payments = 0;
// setting
NSDictionary *setting = params[@"setting"];
NSNumber *hide = setting[@"ModelInformationHide"];
[dic setValue:hide forKey:@"hide"];
NSString *sql = [NSString stringWithFormat:@"select c.item_id,c.item_count,m.stockUom,c.price,c.discount,m.name,m.description,c.line_note,m.availability from (select _id,product_id,decrypt(str_price) as price,discount,item_count,line_note,item_id from offline_cart where so_no='%@') c left join product m on c.product_id=m.product_id;",orderCode];
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSMutableDictionary *model_dic = [NSMutableDictionary dictionary];
// item id
int item_id = sqlite3_column_int(stmt, 0);
// count
int item_count = sqlite3_column_int(stmt, 1);
// stockUom
int stockUom = sqlite3_column_int(stmt, 2);
// unit price
NSString *str_price = [self textAtColumn:3 statement:stmt];
NSString* Price=nil;
if([str_price isEqualToString:@""])
{
NSNumber* price = [self get_model_default_price:params[@"contact_id"] user:params[@"user"] product_id:nil item_id:@(item_id) db:db];
if(price==nil)
Price=@"No Price.";
else
Price=[NSString stringWithFormat:@"%.2f",price.floatValue];
}
else
{
Price=[NSString stringWithFormat:@"%.2f",[str_price floatValue]];
}
// discount
double discount = sqlite3_column_double(stmt, 4);
// name
NSString *name = [self textAtColumn:5 statement:stmt];
// description
NSString *description = [self textAtColumn:6 statement:stmt];
description = [NSString stringWithFormat:@"%@\n%@",name,description ];
// line note
NSString *line_note = [self textAtColumn:7 statement:stmt];
int avaulability = sqlite3_column_int(stmt, 8);
// img
NSString *img = [self item_image:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] db:db];
NSDictionary *combine = [self model_bundle:item_id db:db compute_part:false contactID:params[@"contact_id"] user:params[@"user"]];
double subTotal = item_count * [Price doubleValue] * (1.0 - discount / 100.0);
if(combine != nil)
{
// int citem=0;
int bcount=[[combine valueForKey:@"count"] intValue];
for(int bc=0;bc0)
{
NSDictionary *discount_dict = @{
@"align" : @"right",
@"aname" : @"Order Discount",
@"control" : @"text",
@"name" : @"orderDiscount",
// @"type" : @"price",
@"value" : [NSString stringWithFormat:@"%d%% off",(int)discount]
};
[dic setValue:discount_dict forKey:[NSString stringWithFormat:@"item_%d",item_count++]];
}
NSDictionary *total_price_dic = @{
@"align" : @"right",
@"aname" : @"Total",
@"control" : @"text",
@"name" : @"totalPrice",
@"type" : @"price",
@"value" : [NSString stringWithFormat:@"%.2f",totalPrice]
};
[dic setValue:total_price_dic forKey:[NSString stringWithFormat:@"item_%d",item_count++]];
NSDictionary *total_cuft_dic = @{
@"align" : @"right",
@"aname" : @"Total Cuft",
@"control" : @"text",
@"name" : @"",
@"value" : [NSString stringWithFormat:@"%.2f",totalCuft]
};
[dic setValue:total_cuft_dic forKey:[NSString stringWithFormat:@"item_%d",item_count++]];
NSDictionary *total_weight_dic = @{
@"align" : @"right",
@"aname" : @"Total Weight",
@"control" : @"text",
@"name" : @"",
@"value" : [NSString stringWithFormat:@"%.2f",totalWeight]
};
[dic setValue:total_weight_dic forKey:[NSString stringWithFormat:@"item_%d",item_count++]];
NSDictionary *total_carton_dic = @{
@"align" : @"right",
@"aname" : @"Total Carton",
@"control" : @"text",
@"name" : @"",
@"value" : [NSString stringWithFormat:@"%d",totalCarton]
};
[dic setValue:total_carton_dic forKey:[NSString stringWithFormat:@"item_%d",item_count++]];
[dic setValue:[NSNumber numberWithInteger:item_count] forKey:@"count"];
return dic;
}
+ (NSDictionary *)signatureDic:(NSDictionary *)params db:(sqlite3 *)db {
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// setting
NSDictionary *setting = params[@"setting"];
NSNumber *hide = setting[@"SignatureHide"];
[dic setValue:hide forKey:@"hide"];
[dic setValue:@"Signature" forKey:@"title"];
__block NSString *pic_path = @"";
NSString *sql = [NSString stringWithFormat:@"select sign_picpath from offline_order where so_id = '%@';",orderCode];
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
pic_path = [self textAtColumn:0 statement:stmt];
}];
NSDictionary *pic_dic = @{
@"aname" : @"Signature",
@"avalue" :pic_path,
@"control" : @"signature",
@"name" : @"sign_picpath",
@"value" : pic_path
};
[dic setValue:pic_dic forKey:@"item_0"];
[dic setValue:[NSNumber numberWithInteger:1] forKey:@"count"];
return dic;
}
+ (NSDictionary *)shippingMethodDic:(NSMutableDictionary *)params db:(sqlite3 *)db {
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// setting
NSDictionary *setting = params[@"setting"];
NSNumber *hide = setting[@"ShippingMethodHide"];
[dic setValue:hide forKey:@"hide"];
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
NSString *sql = [NSString stringWithFormat:@"select logist,lift_gate,logistic_note,carrier from offline_order where so_id = '%@';",orderCode];
__block NSString *logist = @"";
__block NSString *carrier = @"";
__block NSString *lift_gate = @"";
__block int lift_gate_integer = 0;
__block NSString *logistic_note = @"";
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
logist = [self textAtColumn:0 statement:stmt];
lift_gate_integer = sqlite3_column_int(stmt, 1);
logistic_note = [self textAtColumn:2 statement:stmt];
carrier = [self textAtColumn:3 statement:stmt];
}];
[dic setValue:[NSNumber numberWithInteger:1] forKey:@"count"];
[dic setValue:@"Shipping Method" forKey:@"title"];
// val_0
int PERSONAL_PICK_UP_check = 0;
int USE_MY_CARRIER_check = 0;
NSString *logistic_note_text = @"";
int will_call_check = 0;
if (logist && [logist isEqualToString:@"WILL CALL"]) {
will_call_check = 1;
if ([logistic_note containsString:@"PERSONAL PICK UP"]) {
PERSONAL_PICK_UP_check = 1;
} else if ([logistic_note containsString:@"USE MY CARRIER"]) {
USE_MY_CARRIER_check = 1;
NSArray *logistic_note_array = [logistic_note componentsSeparatedByString:@"\n\t"];
logistic_note = [logistic_note_array firstObject];
if (logistic_note_array.count > 1) {
logistic_note_text = [logistic_note_array lastObject];
}
}
}
NSMutableDictionary *val_0 = [NSMutableDictionary dictionary];
[val_0 setValue:[NSNumber numberWithInteger:will_call_check] forKey:@"check"];
[val_0 setValue:@"WILL CALL(requires 24 hours advance notice)" forKey:@"value"];
[val_0 setValue:@"WILL CALL" forKey:@"value_id"];
NSMutableDictionary *val0_subItem = [NSMutableDictionary dictionary];
[val0_subItem setValue:[NSNumber numberWithInteger:1] forKey:@"count"];
NSDictionary *val0_subItem_item0 = @{
@"aname" : @"Option",
@"cadedate" : @{
@"count" : [NSNumber numberWithInteger:2],
@"val_0" : @{
@"check" : [NSNumber numberWithInteger:PERSONAL_PICK_UP_check],
@"refresh" : [NSNumber numberWithInteger:0],
@"value" : @"PERSONAL PICK UP",
@"value_id" : @"PERSONAL PICK UP"
},
@"val_1" : @{
@"check" : [NSNumber numberWithInteger:USE_MY_CARRIER_check],
@"refresh" : [NSNumber numberWithInteger:0],
@"sub_item" : @{
@"count" : [NSNumber numberWithInteger:1],
@"item_0" : @{
@"aname" : @"BOL",
@"control" : @"edit",
@"keyboard" : @"text",
@"name" : @"logist_note_text",
@"refresh" : [NSNumber numberWithInteger:0],
@"required" : @"false",
@"value" : logistic_note_text
}
},
@"value" : @"USE MY CARRIER",
@"value_id" : @"USE MY CARRIER"
}
},
@"control" : @"enum",
@"name" : @"logistic_note",
@"required" : @"true",
@"single_select" : @"true"
};
[val0_subItem setValue:val0_subItem_item0 forKey:@"item_0"];
[val_0 setValue:val0_subItem forKey:@"sub_item"];
// val_1
lift_gate = [self valueInParams:params key:@"lift_gate"];
if([lift_gate isEqualToString:@""]) {
if (lift_gate_integer == 1) {
lift_gate = @"true";
} else {
lift_gate = @"false";
}
}
// carrier = [self valueInParams:params key:@"carrier"];
// if([carrier isEqualToString:@""]) {
//
// if (lift_gate_integer == 1) {
// lift_gate = @"true";
// } else {
// lift_gate = @"false";
// }
//
// }
int common_carrier_check = 0;
if (logist && [logist isEqualToString:@"COMMON CARRIER"]) {
common_carrier_check = 1;
[params setValue:lift_gate forKey:@"lift_gate"];
#ifdef BUILD_CONTRAST
[params setValue:carrier forKey:@"carrier"];
#endif
}
// NSString *Sql = [NSString stringWithFormat: @"select carrier from offline_contact where contact_id = %d;",contact_id];
// NSString * code = [iSalesDB jk_queryText:Sql];
// [self offline_getCarrierCode:offline_getCarrierCode];
NSDictionary *carrierDic = [self offline_OrderCarrier:params[@"orderCode"] db:db];
NSDictionary *val_1 = @{
@"check" : [NSNumber numberWithInteger:common_carrier_check],
@"sub_item" : @{
@"item_0" : @{
@"aname" : @"Do you have Loading Dock Available ? Slide to green for YES",
@"control" : @"switch",
@"name" : @"lift_gate",
@"refresh" : [NSNumber numberWithInteger:1],
@"required" : @"true",
@"value" : lift_gate
},
#ifdef BUILD_CONTRAST
@"count" : [NSNumber numberWithInteger:2],
@"item_1" : @{
@"aname" : @"Carrier",
@"cadedate" :carrierDic,
@"control" : @"enum",
@"name" : @"carrier",
@"required" : @"false",
@"value" : @"",
@"single_select" : @"true"
}
#else
@"count" : [NSNumber numberWithInteger:1]
#endif
},
@"value" : @"COMMON CARRIER",
@"value_id" : @"COMMON CARRIER"
};
// cadedate
NSDictionary *cadedate = @{
@"count" : [NSNumber numberWithInteger:2],
@"val_0" : val_0,
@"val_1" : val_1
};
// item_0
NSMutableDictionary *item_0 = @{
@"aname" : @"Shipping",
@"cadedate" : cadedate,
@"control" : @"enum",
@"name" : @"logist",
@"refresh" : [NSNumber numberWithInteger:1],
@"single_select" : @"true",
}.mutableCopy;
NSNumber *required = setting[@"ShippingMethodRequire"];
if ([required integerValue]) {
[item_0 setValue:@"true" forKey:@"required"];
}
[dic setValue:item_0 forKey:@"item_0"];
if ([logist isEqualToString:@"WILL CALL"]) {
[dic removeObjectForKey:@"lift_gate"];
}
return dic;
}
+ (NSDictionary *)submitAsDic:(NSDictionary *)params db:(sqlite3 *)db {
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
NSString *sql = [NSString stringWithFormat:@"select submit_as from offline_order where so_id = '%@';",orderCode];
__block int submit_as_integer = 0;
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
submit_as_integer = sqlite3_column_int(stmt, 0);
}];
int check11 = 0;
int check10 = 0;
if (submit_as_integer == 11) {
check11 = 1;
}
if (submit_as_integer == 10) {
check10 = 1;
}
// section_0
NSMutableDictionary *dic = @{
@"count" : @(1),
@"item_0" : @{
@"aname" : @"Submit Order As",
@"cadedate" : @{
@"count" : @(2),
@"val_0" : @{
@"check" : [NSNumber numberWithInteger:check11],
@"value" : @"Sales Order",
@"value_id" : @(11)
},
@"val_1" : @{
@"check" : [NSNumber numberWithInteger:check10],
@"value" : @"Quote",
@"value_id" : @(10)
}
},
@"control" : @"enum",
@"name" : @"erpOrderStatus",
@"required" : @"true",
@"single_select" : @"true"
},
@"title" : @"Order Type"
}.mutableCopy;
// setting
NSDictionary *setting = params[@"setting"];
NSNumber *hide = setting[@"OrderTypeHide"];
[dic setValue:hide forKey:@"hide"];
return dic;
}
+ (NSDictionary *)offline_getStateByCountryCode:(NSString *)countryCode checkedState:(NSString *)state_code db:(sqlite3 *)db {
countryCode = [self translateSingleQuote:countryCode];
NSString *sqlQuery = [NSString stringWithFormat:@"select _id,name,code,country_code from offline_state where country_code = '%@';",countryCode];
NSMutableDictionary *ret = [[iSalesDB jk_query:sqlQuery db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
char *name = (char *) sqlite3_column_text(stmt, 1); // value
char *code = (char *) sqlite3_column_text(stmt, 2); // value_id
if (name == NULL) {
name = "";
}
if (code == NULL) {
code = "";
}
NSMutableDictionary *stateDic = [NSMutableDictionary dictionaryWithCapacity:2];
[stateDic setValue:[NSString stringWithUTF8String:name] forKey:@"value"];
[stateDic setValue:[NSString stringWithUTF8String:code] forKey:@"value_id"];
[stateDic setValue:[NSNumber numberWithInt:0] forKey:@"check"];
if (state_code && [[NSString stringWithUTF8String:code] isEqualToString:state_code]) {
[stateDic setValue:[NSNumber numberWithInt:1] forKey:@"check"];
}
NSString *key = [NSString stringWithFormat:@"val_%ld",(*count)++];
[container setValue:stateDic forKey:key];
}] mutableCopy];
[ret removeObjectForKey:@"result"];
// failure 可以不用了,一样的
if (ret.allKeys.count == 0) {
NSMutableDictionary *stateDic = [NSMutableDictionary dictionaryWithCapacity:2];
[stateDic setValue:@"Other" forKey:@"value"];
[stateDic setValue:@"" forKey:@"value_id"];
[stateDic setValue:[NSNumber numberWithInt:0] forKey:@"check"];
if (state_code && [@"" isEqualToString:state_code]) {
[stateDic setValue:[NSNumber numberWithInt:1] forKey:@"check"];
}
NSString *key = [NSString stringWithFormat:@"val_0"];
[ret setValue:stateDic forKey:key];
}
[ret setValue:[NSNumber numberWithLong:ret.allKeys.count] forKey:@"count"];
return ret;
}
+ (NSDictionary *)paymentInfoDic:(NSDictionary *)params db:(sqlite3 *)db {
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
NSString *sql = [NSString stringWithFormat:@"select paymentType,credit_card_first_name,credit_card_last_name,credit_card_address1,credit_card_address2,credit_card_zipcode,credit_card_type,decrypt(credit_card_number),decrypt(credit_card_security_code),decrypt(credit_card_expiration_month),decrypt(credit_card_expiration_year),credit_card_city,credit_card_state from offline_order where so_id = '%@';",orderCode];
__block NSString *payType = @"";
__block NSString *firstName = @"";
__block NSString *lastName = @"";
__block NSString *addr1 = @"";
__block NSString *addr2 = @"";
__block NSString *zipcode = @"";
__block NSString *cardType = @"";
__block NSString *cardNumber = @"";
__block NSString *securityCode = @"";
__block NSString *month = @"";
__block NSString *year = @"";
__block NSString *city = @"";
__block NSString *state = @"";
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
payType = [self textAtColumn:0 statement:stmt];
firstName = [self textAtColumn:1 statement:stmt];
lastName = [self textAtColumn:2 statement:stmt];
addr1 = [self textAtColumn:3 statement:stmt];
addr2 = [self textAtColumn:4 statement:stmt];
zipcode = [self textAtColumn:5 statement:stmt];
cardType = [self textAtColumn:6 statement:stmt];
cardNumber = [self textAtColumn:7 statement:stmt];
securityCode = [self textAtColumn:8 statement:stmt];
month = [self textAtColumn:9 statement:stmt];
year = [self textAtColumn:10 statement:stmt];
city = [self textAtColumn:11 statement:stmt];
state = [self textAtColumn:12 statement:stmt];
}];
NSString *required = @"true";
// setting
NSDictionary *setting = params[@"setting"];
NSNumber *requiredNumber = setting[@"PaymentRequire"];
if ([requiredNumber integerValue]) {
required = @"true";
} else {
required = @"false";
}
__block NSMutableDictionary *cadedate = [NSMutableDictionary dictionary];
// create table if not exists payment_type (_id integer primary key,type_id text,pay_type text,sort int);
NSString *pay_type_sql = @"select type_id,pay_type,sort_id from payment_type order by sort_id asc";
[iSalesDB jk_query:pay_type_sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSString *type_id = [self textAtColumn:0 statement:stmt];
NSString *type = [self textAtColumn:1 statement:stmt];
NSMutableDictionary *val = @{
@"check" : [payType isEqualToString:type_id] ? @(1) : @(0),
@"value" : type,
@"value_id" : type_id
}.mutableCopy;
if ([type_id.lowercaseString isEqualToString:@"Visa/Master".lowercaseString] || [type_id.lowercaseString isEqualToString:@"Credit Card".lowercaseString]) {
NSDictionary *sub_item =nil;
#ifdef BUILD_CONTRAST
sub_item = @{
@"count" : @(3),
@"item_0" : @{
@"aname" : @"Number",
@"control" : @"edit",
@"keyboard" : @"int",
@"length" : @"16",
@"name" : @"credit_card_number",
@"required" : @"false",
@"value" : cardNumber
},
@"item_1" : @{
@"aname" : @"Expiration Date",
@"control" : @"monthpicker",
@"name" : @"credit_card_expiration",
@"required" : @"false",
@"type" : @"date",
@"value" : [month isEqualToString:@""] || [year isEqualToString:@""] ? @"" : [NSString stringWithFormat:@"%@/%@",month,year]
},
@"item_2" : @{
@"aname" : @"Security Code",
@"control" : @"edit",
@"keyboard" : @"int",
@"length" : @"4",
@"name" : @"credit_card_security_code",
@"required" : @"false",
@"value" : securityCode
},
};
#else
sub_item= @{
@"count" : @(3),
@"item_0" : @{
@"aname" : @"choose",
@"control" : @"multi_action",
@"count" : @(1),
@"item_0" : @{
@"aname" : @"Same as customer",
@"key_map" : @{
@"credit_card_address1" : @"customer_address1",
@"credit_card_address2" : @"customer_address2",
@"credit_card_city" : @"customer_city",
@"credit_card_first_name" : @"customer_first_name",
@"credit_card_last_name" : @"customer_last_name",
@"credit_card_state" : @"customer_state",
@"credit_card_zipcode" : @"customer_zipcode"
},
@"type" : @"pull"
}
},
@"item_1" : @{
@"aname" : @"",
@"color" : @"red",
@"control" : @"text",
@"name" : @"",
@"value" : @"USA Credit cards only"
},
@"item_2" : @{
@"aname" : @"Fill",
@"cadedate" : @{
@"count" : @(2),
@"val_0" : @{
@"check" : @(1),
@"sub_item" : @{
@"count" : @(11),
@"item_0" : @{
@"aname" : @"Type",
@"cadedate" : @{
@"count" : @(2),
@"val_0" : @{
@"check" : [cardType isEqualToString:@"VISA"] ? @(1) : @(0),
@"value" : @"VISA",
@"value_id" : @"VISA"/*@(0)*/
},
@"val_1" : @{
@"check" : [cardType isEqualToString:@"MASTER CARD"] ? @(1) : @(0),
@"value" : @"MASTER CARD",
@"value_id" : @"MASTER CARD"/*@(1)*/
}
},
@"control" : @"enum",
@"name" : @"credit_card_type",
@"required" : @"true",
@"single_select" : @"true"
},
@"item_1" : @{
@"aname" : @"Number",
@"control" : @"edit",
@"keyboard" : @"int",
@"length" : @"16",
@"name" : @"credit_card_number",
@"required" : @"true",
@"value" : cardNumber
},
@"item_10" : @{
@"aname" : @"State",
@"cadedate" : [self offline_getStateByCountryCode:@"US" checkedState:state db:db],
@"control" : @"enum",
@"enum" : @"true",
@"name" : @"credit_card_state",
@"required" : @"true",
@"single_select" : @"true"
},
@"item_2" : @{
@"aname" : @"Expiration Date",
@"control" : @"monthpicker",
@"name" : @"credit_card_expiration",
@"required" : @"true",
@"type" : @"date",
@"value" : [month isEqualToString:@""] || [year isEqualToString:@""] ? @"" : [NSString stringWithFormat:@"%@/%@",month,year]
},
@"item_3" : @{
@"aname" : @"Security Code",
@"control" : @"edit",
@"keyboard" : @"int",
@"length" : @"3",
@"name" : @"credit_card_security_code",
@"required" : @"true",
@"value" : securityCode
},
@"item_4" : @{
@"aname" : @"First Name",
@"control" : @"edit",
@"keyboard" : @"text",
@"name" : @"credit_card_first_name",
@"required" : @"true",
@"value" : firstName
},
@"item_5" : @{
@"aname" : @"Last Name",
@"control" : @"edit",
@"keyboard" : @"text",
@"name" : @"credit_card_last_name",
@"required" : @"true",
@"value" : lastName
},
@"item_6" : @{
@"aname" : @"Address 1",
@"control" : @"edit",
@"keyboard" : @"text",
@"name" : @"credit_card_address1",
@"required" : @"true",
@"value" : addr1
},
@"item_7" : @{
@"aname" : @"Address 2",
@"control" : @"edit",
@"keyboard" : @"text",
@"name" : @"credit_card_address2",
@"value" : addr2
},
@"item_8" : @{
@"aname" : @"zip code",
@"control" : @"edit",
@"keyboard" : @"text",
@"name" : @"credit_card_zipcode",
@"required" : @"true",
@"value" : zipcode
},
@"item_9" : @{
@"aname" : @"City",
@"control" : @"edit",
@"keyboard" : @"text",
@"name" : @"credit_card_city",
@"required" : @"true",
@"value" : city
}
},
@"value" : @"Fill Now",
@"value_id" : @""
},
@"val_1" : @{
@"check" : @(0),
@"value" : @"Fill Later",
@"value_id" : @""
}
},
@"control" : @"enum",
@"name" : @"",
@"single_select" : @"true"
}
};
#endif
[val setObject:sub_item forKey:@"sub_item"];
}
[cadedate setObject:val forKey:[NSString stringWithFormat:@"val_%ld",(*count)]];
[cadedate setObject:[NSNumber numberWithInteger:(++*count)] forKey:@"count"];
}];
// "section_2"
NSMutableDictionary *dic = @{
@"count" : @(1),
@"item_0" : @{
@"aname" : @"Payment",
@"required" : required,
@"cadedate" : cadedate,
// @{
// @"count" : @(6),
// @"val_3" : @{
// @"check" : [payType isEqualToString:@"Check"] ? @(1) : @(0),
// @"value" : @"Check",
// @"value_id" : @"Check"
// },
// @"val_2" : @{
// @"check" : [payType isEqualToString:@"Cash"] ? @(1) : @(0),
// @"value" : @"Cash",
// @"value_id" : @"Cash"
// },
// @"val_1" : @{
// @"check" : [payType isEqualToString:@"NET 30"] ? @(1) : @(0),
// @"value" : @"NET 60",
// @"value_id" : @"NET 30"
// },
// @"val_4" : @{
// @"check" : [payType isEqualToString:@"Wire Transfer"] ? @(1) : @(0),
// @"value" : @"Wire Transfer",
// @"value_id" : @"Wire Transfer"
// },
// @"val_0" : @{
// @"check" : [payType isEqualToString:@"Credit Card"] ? @(1) : @(0),
// @"sub_item" : @{
// @"count" : @(3),
// @"item_0" : @{
// @"aname" : @"choose",
// @"control" : @"multi_action",
// @"count" : @(1),
// @"item_0" : @{
// @"aname" : @"Same as customer",
// @"key_map" : @{
// @"credit_card_address1" : @"customer_address1",
// @"credit_card_address2" : @"customer_address2",
// @"credit_card_city" : @"customer_city",
// @"credit_card_first_name" : @"customer_first_name",
// @"credit_card_last_name" : @"customer_last_name",
// @"credit_card_state" : @"customer_state",
// @"credit_card_zipcode" : @"customer_zipcode"
// },
// @"type" : @"pull"
// }
// },
// @"item_1" : @{
// @"aname" : @"",
// @"color" : @"red",
// @"control" : @"text",
// @"name" : @"",
// @"value" : @"USA Credit cards only"
// },
// @"item_2" : @{
// @"aname" : @"Fill",
// @"cadedate" : @{
// @"count" : @(2),
// @"val_0" : @{
// @"check" : @(1),
// @"sub_item" : @{
// @"count" : @(11),
// @"item_0" : @{
// @"aname" : @"Type",
// @"cadedate" : @{
// @"count" : @(2),
// @"val_0" : @{
// @"check" : [cardType isEqualToString:@"VISA"] ? @(1) : @(0),
// @"value" : @"VISA",
// @"value_id" : @(0)
// },
// @"val_1" : @{
// @"check" : [cardType isEqualToString:@"MASTER CARD"] ? @(1) : @(0),
// @"value" : @"MASTER CARD",
// @"value_id" : @(1)
// }
// },
// @"control" : @"enum",
// @"name" : @"credit_card_type",
// @"required" : @"true",
// @"single_select" : @"true"
// },
// @"item_1" : @{
// @"aname" : @"Number",
// @"control" : @"edit",
// @"keyboard" : @"int",
// @"length" : @"16",
// @"name" : @"credit_card_number",
// @"required" : @"true",
// @"value" : cardNumber
// },
// @"item_10" : @{
// @"aname" : @"State",
// @"cadedate" : [self offline_getStateByCountryCode:@"US" checkedState:state db:db],
// @"control" : @"enum",
// @"enum" : @"true",
// @"name" : @"credit_card_state",
// @"required" : @"true",
// @"single_select" : @"true"
// },
// @"item_2" : @{
// @"aname" : @"Expiration Date",
// @"control" : @"monthpicker",
// @"name" : @"credit_card_expiration",
// @"required" : @"true",
// @"type" : @"date",
// @"value" : [month isEqualToString:@""] || [year isEqualToString:@""] ? @"" : [NSString stringWithFormat:@"%@/%@",month,year]
// },
// @"item_3" : @{
// @"aname" : @"Security Code",
// @"control" : @"edit",
// @"keyboard" : @"int",
// @"length" : @"3",
// @"name" : @"credit_card_security_code",
// @"required" : @"true",
// @"value" : securityCode
// },
// @"item_4" : @{
// @"aname" : @"First Name",
// @"control" : @"edit",
// @"keyboard" : @"text",
// @"name" : @"credit_card_first_name",
// @"required" : @"true",
// @"value" : firstName
// },
// @"item_5" : @{
// @"aname" : @"Last Name",
// @"control" : @"edit",
// @"keyboard" : @"text",
// @"name" : @"credit_card_last_name",
// @"required" : @"true",
// @"value" : lastName
// },
// @"item_6" : @{
// @"aname" : @"Address 1",
// @"control" : @"edit",
// @"keyboard" : @"text",
// @"name" : @"credit_card_address1",
// @"required" : @"true",
// @"value" : addr1
// },
// @"item_7" : @{
// @"aname" : @"Address 2",
// @"control" : @"edit",
// @"keyboard" : @"text",
// @"name" : @"credit_card_address2",
// @"value" : addr2
// },
// @"item_8" : @{
// @"aname" : @"zip code",
// @"control" : @"edit",
// @"keyboard" : @"text",
// @"name" : @"credit_card_zipcode",
// @"required" : @"true",
// @"value" : zipcode
// },
// @"item_9" : @{
// @"aname" : @"City",
// @"control" : @"edit",
// @"keyboard" : @"text",
// @"name" : @"credit_card_city",
// @"required" : @"true",
// @"value" : city
// }
// },
// @"value" : @"Fill Now",
// @"value_id" : @""
// },
// @"val_1" : @{
// @"check" : @(0),
// @"value" : @"Fill Later",
// @"value_id" : @""
// }
// },
// @"control" : @"enum",
// @"name" : @"",
// @"single_select" : @"true"
// }
// },
// @"value" : @"Visa/Master",
// @"value_id" : @"Credit Card"
// },
// @"val_5" : @{
// @"check" : [payType isEqualToString:@"FOLLOW EXISTING"] ? @(1) : @(0),
// @"value" : @"FOLLOW EXISTING PAYMENT TYPE",
// @"value_id" : @"FOLLOW EXISTING"
// }
// },
@"control" : @"enum",
@"name" : @"paymentType",
@"single_select" : @"true"
},
@"title" : @"Payment Information"
}.mutableCopy;
NSNumber *hide = setting[@"PaymentInformationHide"];
[dic setValue:hide forKey:@"hide"];
return dic;
}
+ (BOOL)orderOutOfStock:(NSDictionary *)params db:(sqlite3 *)db{
// params
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
// 缺货检查
NSString *out_of_stock_SQL = [NSString stringWithFormat:@"select p.availability,c.item_count from product as p left join offline_cart as c on p.product_id = c.product_id where c.so_no = '%@';",orderCode];
__block BOOL outOfStock = NO;
sqlite3 *database = db;
if (!db) {
database = [iSalesDB get_db];
}
[iSalesDB jk_query:out_of_stock_SQL db:database close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
int availability = sqlite3_column_int(stmt, 0);
int item_qty = sqlite3_column_int(stmt, 1);
outOfStock = outOfStock || (availability < item_qty ? YES : NO);
}];
if (!db) {
[iSalesDB close_db:database];
}
return outOfStock;
}
+(NSData*) offline_placeorder :(NSMutableDictionary *) params
{
assert(params[@"user"]!=nil);
assert(params[@"contact_id"]!=nil);
assert(params[@"can_create_backorder"]!=nil);
sqlite3 *db = [iSalesDB get_db];
// params
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
// 缺货检查
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
if (![params[@"can_create_backorder"] boolValue]) {
BOOL out_of_stock = [self orderOutOfStock:params db:db];
if (out_of_stock) {
[iSalesDB close_db:db];
NSMutableDictionary *resultDic = [NSMutableDictionary dictionary];
[resultDic setObject:[NSString stringWithFormat:@"some item(s) are out of stock,please remove them from cart before placing order with %@ or try again after sync",COMPANY_SHORT_NAME] forKey:@"err_msg"];
[resultDic setObject:[NSNumber numberWithInt:8] forKey:@"result"];
return [RAConvertor dict2data:resultDic];
}
}
// UISetting
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachefolder = [paths objectAtIndex:0];
NSString *img_cache = [cachefolder stringByAppendingPathComponent:@"offline_data/UISetting.json"];
NSData* json =nil;
json=[NSData dataWithContentsOfFile:img_cache];
NSError *error=nil;
NSMutableDictionary* menu = [[NSJSONSerialization JSONObjectWithData:json options:NSJSONReadingMutableLeaves error:&error] mutableCopy];
NSDictionary *setting = [menu objectForKey:@"placeOrder"];
[params setObject:setting forKey:@"setting"];
int section_count = 0;
// 0 Order Type 1 Shipping Method 2 Payment Information
__block NSMutableDictionary *ret = [self dictionaryFileName:@"placeOrderTemplate.json"];
// 0 Order Type
NSString *key0 = [NSString stringWithFormat:@"section_%d",section_count++];
NSDictionary *order_type_dic = [self submitAsDic:params db:db];
[ret setValue:order_type_dic forKey:key0];
// 1 Shipping Method
NSString *key1 = [NSString stringWithFormat:@"section_%d",section_count++];
NSMutableDictionary *shipping_method_dic = [[self shippingMethodDic:params db:db] mutableCopy];
[ret setValue:shipping_method_dic forKey:key1];
// 2 Payment Information
NSString *key2 = [NSString stringWithFormat:@"section_%d",section_count++];
NSDictionary *payment_info_dic = [self paymentInfoDic:params db:db];
[ret setValue:payment_info_dic forKey:key2];
// 3 Customer
NSString *key3 = [NSString stringWithFormat:@"section_%d",section_count++];
NSDictionary *customer_dic = [self customerDic:params db:db];
[ret setValue:customer_dic forKey:key3];
// 4 Ship To
NSString *key4 = [NSString stringWithFormat:@"section_%d",section_count++];
NSDictionary *ship_to_dic = [self shipToDic:params db:db];
[ret setValue:ship_to_dic forKey:key4];
// 5 Ship From
NSNumber *shipFromDisable = setting[@"ShipFromDisabled"];
if (![shipFromDisable integerValue]) {
NSString *key5 = [NSString stringWithFormat:@"section_%d",section_count++];
NSDictionary *ship_from_dic = [self shipFromDic:params db:db];
[ret setValue:ship_from_dic forKey:key5];
}
// 6 Freight Bill To
NSNumber *freightBillToDisable = setting[@"FreightBillToDisabled"];
if (![freightBillToDisable integerValue]) {
NSString *key6 = [NSString stringWithFormat:@"section_%d",section_count++];
NSDictionary *freight_bill_to = [self freightBillToDic:params db:db];
[ret setValue:freight_bill_to forKey:key6];
}
// 7 Merchandise Bill To
NSNumber *merchandiseBillToDisable = setting[@"MerchandiseBillToDisabled"];
if (![merchandiseBillToDisable integerValue]) {
NSString *key7 = [NSString stringWithFormat:@"section_%d",section_count++];
NSDictionary *merchandise_bill_to_dic = [self merchandiseBillToDic:params db:db];
[ret setValue:merchandise_bill_to_dic forKey:key7];
}
// 8 Return To
NSNumber *returnToDisable = setting[@"ReturnToDisabled"];
if (![returnToDisable integerValue]) {
NSString *key8 = [NSString stringWithFormat:@"section_%d",section_count++];
NSDictionary *return_to_dic = [self returnToDic:params db:db];
[ret setValue:return_to_dic forKey:key8];
}
// 9 Model Information
NSString *key9 = [NSString stringWithFormat:@"section_%d",section_count++];
NSMutableDictionary *model_info_dic = [[self modelInfoDic:params db:db] mutableCopy];
NSDictionary *toOrderTotal = [model_info_dic valueForKey:@"toOrderTotal"];
[model_info_dic removeObjectForKey:@"toOrderTotal"];
[ret setValue:model_info_dic forKey:key9];
// 10 Remarks Content
NSString *key10 = [NSString stringWithFormat:@"section_%d",section_count++];
NSDictionary *remarks_content_dic = [self remarksContentDic:params db:db];
[ret setValue:remarks_content_dic forKey:key10];
// 11 Order Total
NSString *key11 = [NSString stringWithFormat:@"section_%d",section_count++];
NSDictionary *order_total_dic = [self orderTotalDic:params otherTotal:toOrderTotal db:db];
[ret setValue:order_total_dic forKey:key11];
// 12 Signature
NSString *key12 = [NSString stringWithFormat:@"section_%d",section_count++];
NSDictionary *sign_dic = [self signatureDic:params db:db];
[ret setValue:sign_dic forKey:key12];
[ret setValue:@(section_count) forKey:@"section_count"];
[iSalesDB close_db:db];
return [RAConvertor dict2data:ret];
// return nil;
}
#pragma mark addr editor
+ (NSMutableDictionary *)anameDealWithStarAtItem:(NSDictionary *)item add:(BOOL)add {
NSMutableDictionary *new_item = [item mutableCopy];
[new_item setValue:add ? @"true" : @"false" forKey:@"required"];
return new_item;
}
+(NSData*) offline_addreditor :(NSMutableDictionary *) params
{
// "is_subaction" = true;
// orderCode = MOB1608240002;
// password = 123456;
// "subaction_tag" = 1;
// user = EvanK;
// {
// "is_subaction" = true;
// orderCode = MOB1608240002;
// password = 123456;
// "refresh_trigger" = zipcode;
// "subaction_tag" = 1;
// user = EvanK;
// }
NSString *country_code = nil;
NSString *zipCode = nil;
NSString *stateCode = nil;
NSString *city = nil;
if ([params.allKeys containsObject:@"refresh_trigger"]) {
if([params[@"refresh_trigger"] isEqualToString:@"country"]) { // choose country
NSString *code_id = params[@"country"];
country_code = [self countryCodeByid:code_id];
} else if ([params[@"refresh_trigger"] isEqualToString:@"zipcode"]) { // zipcode
NSString *zip_code = params[@"zipcode"];
// 剔除全部为空格
int spaceCount = 0;
for (int i = 0; i < zip_code.length; i++) {
if ([zip_code characterAtIndex:i] == ' ') {
spaceCount++;
}
}
if (spaceCount == zip_code.length) {
zip_code = @"";
}
zipCode = zip_code;
if (zipCode.length > 0) {
NSDictionary *dic = [self offline_dealZipCode:zip_code];
country_code = [dic valueForKey:@"country_code"];
if (!country_code) {
// country_code = @"US";
NSString *code_id = params[@"country"];
country_code = [self countryCodeByid:code_id];
}
stateCode = [dic valueForKey:@"state_code"];
if(!stateCode.length) {
stateCode = params[@"state"];
}
city = [dic valueForKey:@"city"];
if (!city.length) {
city = params[@"city"];
}
// zip code
// NSMutableDictionary *zipDic = [[section_0 valueForKey:@"item_11"] mutableCopy];
// [zipDic setValue:zipCode forKey:@"value"];
// [section_0 setValue:zipDic forKey:@"item_11"];
} else {
NSString *code_id = params[@"country"];
country_code = [self countryCodeByid:code_id];
stateCode = params[@"state"];
city = params[@"city"];
}
}
}
NSMutableDictionary * ret = [self dictionaryFileName:@"createContact.json"];
// [ret removeObjectForKey:@"up_params"];
[ret setObject:@"New Address" forKey:@"title"];
NSDictionary * section_0 = [ret objectForKey:@"section_0"];
NSMutableDictionary *new_section_0 = [NSMutableDictionary dictionary];
[new_section_0 setObject:[NSNumber numberWithInteger:14] forKey:@"count"];
NSMutableDictionary *country_dic = [section_0[@"item_6"] mutableCopy];
// [country_dic removeObjectForKey:@"refresh"];
// [country_dic removeObjectForKey:@"restore"];
[new_section_0 setObject:country_dic forKey:@"item_0"]; // Country
[new_section_0 setObject:section_0[@"item_0"] forKey:@"item_1"]; // company name*
[new_section_0 setObject:[self anameDealWithStarAtItem:section_0[@"item_7"] add:YES] forKey:@"item_2"]; // Address 1*
[new_section_0 setObject:section_0[@"item_8"] forKey:@"item_3"]; // Address 2
[new_section_0 setObject:section_0[@"item_9"] forKey:@"item_4"]; // Address 3
[new_section_0 setObject:section_0[@"item_10"] forKey:@"item_5"]; // Address 4
NSMutableDictionary *zip_code_dic = [self anameDealWithStarAtItem:section_0[@"item_11"] add:YES];
// [zip_code_dic removeObjectForKey:@"refresh"];
[zip_code_dic setValue:zipCode ? zipCode :@"" forKey:@"value"];
[new_section_0 setObject:zip_code_dic forKey:@"item_6"]; // Zip Code*
[new_section_0 setObject:[self anameDealWithStarAtItem:section_0[@"item_12"] add:YES] forKey:@"item_7"]; // State/Province*
[new_section_0 setObject:[self anameDealWithStarAtItem:section_0[@"item_13"] add:YES] forKey:@"item_8"]; // City*
NSDictionary *cityDic = [[new_section_0 objectForKey:@"item_8"] mutableCopy];
[cityDic setValue:city ? city : @"" forKey:@"value"];
[new_section_0 setObject:cityDic forKey:@"item_8"];
[new_section_0 setObject:section_0[@"item_14"] forKey:@"item_9"]; // Contact First Name
[new_section_0 setObject:section_0[@"item_15"] forKey:@"item_10"]; // Contact Last Name
[new_section_0 setObject:section_0[@"item_5"] forKey:@"item_11"]; // Phone*
[new_section_0 setObject:section_0[@"item_16"] forKey:@"item_12"]; // Fax
[new_section_0 setObject:[self anameDealWithStarAtItem:section_0[@"item_4"] add:NO] forKey:@"item_13"]; // Email
[new_section_0 setObject:section_0[@"title"] forKey:@"title"];
// country
NSString *countryCode = country_code == nil ? @"US" : country_code;
NSDictionary *allCountry = [self offline_getAllCountryDefault:countryCode];
[self setValue:allCountry forItemKey:@"item_0" valueKey:@"cadedate" inDictionary:new_section_0];
// state
NSMutableDictionary *allState = [[self offline_getStateByCountryCode:countryCode checkedState:stateCode] mutableCopy];
// NSDictionary *tmpDic = @{
// @"value" : @"Other",
// @"value_id" : @"",
// @"check" : [NSNumber numberWithInteger:0]
// };
//
// for (int i = 0; i < allState.allKeys.count; i++) {
// NSString *key = [NSString stringWithFormat:@"val_%d",i];
//
// NSDictionary *tmp = allState[key];
// [allState setValue:tmpDic forKey:key];
// tmpDic = tmp;
// }
[allState setValue:[NSNumber numberWithInteger:allState.allKeys.count - 1] forKey:@"count"];
[self setValue:allState forItemKey:@"item_7" valueKey:@"cadedate" inDictionary:new_section_0];
[ret setValue:new_section_0 forKey:@"section_0"];
return [RAConvertor dict2data:ret];
}
#pragma mark save addr
+(NSData*) offline_saveaddr :(NSMutableDictionary *) params
{
// NSString *companyName = [self valueInParams:params key:@"company"];
// NSString *addr1 = [self valueInParams:params key:@"address"];
// NSString *addr2 = [self valueInParams:params key:@"address2"];
// NSString *addr3 = [self valueInParams:params key:@"address_3"];
// NSString *addr4 = [self valueInParams:params key:@"address_4"];
// NSString *countryId = [self valueInParams:params key:@"country"];
// NSString *stateCode = [self valueInParams:params key:@"state"];
// NSString *city = [self valueInParams:params key:@"city"];
// NSString *zipCode = [self valueInParams:params key:@"zipcode"];
// NSString *firstName = [self valueInParams:params key:@"firstname"];
// NSString *lastName = [self valueInParams:params key:@"lastname"];
// NSString *phone = [self valueInParams:params key:@"phone"];
// NSString *fax = [self valueInParams:params key:@"fax"];
// NSString *email = [self valueInParams:params key:@"email"];
return [self offline_saveContact:params update:NO isCustomer:NO];
}
#pragma mark cancel order
+(NSData*) offline_cancelorder :(NSMutableDictionary *) params
{
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
NSString *order_id = [self valueInParams:params key:@"orderId"];
NSString *sql = [NSString stringWithFormat:@"update offline_order set status = 2,erpOrderStatus = 15 where so_id = '%@';",orderCode];
if (order_id.length) {
sql = [NSString stringWithFormat:@"update offline_order set status = 2,erpOrderStatus = 15 where _id = %@;",order_id];
}
int ret = [iSalesDB execSql:sql];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"];
[dic setValue:@"Regular Mode" forKey:@"mode"];
// [dic setValue:@"160409" forKey:@"min_ver"];
return [RAConvertor dict2data:dic];
}
#pragma mark sign order
+(NSData*) offline_signorder :(NSMutableDictionary *) params
{
//参考 offline_saveBusinesscard
DebugLog(@"sign order params: %@",params);
// orderCode = MOB1608240002;
// picpath = "16360511-BA55-4D66-9112-EF9DEA4A14F0.png";
NSString *orderCode = [self valueInParams:params key:@"orderCode"];
orderCode = [self translateSingleQuote:orderCode];
NSString *picPath = [self valueInParams:params key:@"picpath"];
picPath = [self translateSingleQuote:picPath];
NSString *sql = [NSString stringWithFormat:@"update offline_order set sign_picpath = '%@' where so_id = '%@';",picPath,orderCode];
int ret = [iSalesDB execSql:sql];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"];
[dic setValue:@"Regular Mode" forKey:@"mode"];
// [dic setValue:@"160409" forKey:@"min_ver"];
return [RAConvertor dict2data:dic];
}
#pragma mark save order
+ (NSString *)valueInParams:(NSDictionary *)params key:(NSString *)key translateSingleQuote:(BOOL)translate {
NSString *ret = [self valueInParams:params key:key];
if (translate) {
ret = [self translateSingleQuote:ret];
}
return ret;
}
+ (NSData *)saveorder:(NSMutableDictionary *)param submit:(BOOL)submit {
NSString *so_id = [self valueInParams:param key:@"orderCode" translateSingleQuote:YES];
NSString *general_notes = [self valueInParams:param key:@"comments" translateSingleQuote:YES];
general_notes = [NSString stringWithFormat:@"general_notes = '%@',",general_notes] ;
NSString* schedule_date = [self valueInParams:param key:@"schedule_date_str"];
if (schedule_date.length==0 ) {
schedule_date = @"";
} else {
schedule_date = [self rchangeDateFormate:schedule_date];
schedule_date = [NSString stringWithFormat:@"schedule_date = '%@',",schedule_date];
}
NSString *internal_notes = [self valueInParams:param key:@"internal_notes" translateSingleQuote:YES];
internal_notes = [NSString stringWithFormat:@"internal_notes = '%@',",internal_notes];
NSString *poNumber = [self valueInParams:param key:@"poNumber" translateSingleQuote:YES];
poNumber = [NSString stringWithFormat:@"poNumber = '%@',",poNumber];
NSString *must_call = [self valueInParams:param key:@"must_call"]; // false
int must_call_integer = [must_call isEqualToString:@"true"] ? 1 : 0;
must_call = [NSString stringWithFormat:@"must_call = %d,",must_call_integer];
NSString *sign_picpath = [self valueInParams:param key:@"sign_picpath" translateSingleQuote:YES];
sign_picpath = [NSString stringWithFormat:@"sign_picpath = '%@',",sign_picpath];
NSString *total_price = [self valueInParams:param key:@"totalPrice"];
if (![total_price isEqualToString:@""]) {
total_price = [NSString stringWithFormat:@"total_price = %@,",total_price];
} else {
total_price = @"";
}
NSString *paymentsAndCredits = [self valueInParams:param key:@"paymentsAndCredits"];
if ([paymentsAndCredits isEqualToString:@""]) {
paymentsAndCredits = @"";
} else {
paymentsAndCredits = [NSString stringWithFormat:@"paymentsAndCredits = %@,",paymentsAndCredits];
}
NSString *handling_fee_value = [self valueInParams:param key:@"handling_fee_value"];
if ([handling_fee_value isEqualToString:@""]) {
handling_fee_value = @"";
} else if ([handling_fee_value isEqualToString:@"Shipping To Be Quoted"]) {
handling_fee_value = @"";
} else {
handling_fee_value = [NSString stringWithFormat:@"handling_fee_value = %@,",handling_fee_value];
}
NSString *handling_fee_placeholder = handling_fee_value;
NSString *lift_gate = [self valueInParams:param key:@"lift_gate"]; // false
int lift_gate_integer = [lift_gate isEqualToString:@"true"] ? 1 : 0;
lift_gate = [NSString stringWithFormat:@"lift_gate = %d,",lift_gate_integer];
NSString *lift_gate_value = [self valueInParams:param key:@"lift_gate_value"]; // Shipping To Be Quoted
NSString *lift_gate_placeholder = @"";
if ([lift_gate_value isEqualToString:@""]) {
lift_gate_placeholder = @"";
} else if ([lift_gate_value isEqualToString:@"Shipping To Be Quoted"]) {
lift_gate_placeholder = @"";
} else {
lift_gate_placeholder = [NSString stringWithFormat:@"lift_gate_value = %@,",lift_gate_value];
}
NSString *logist = [self valueInParams:param key:@"logist" translateSingleQuote:YES];
logist = [NSString stringWithFormat:@"logist = '%@',",logist];
NSString *logistic_note_text = [self valueInParams:param key:@"logist_note_text" translateSingleQuote:YES];
NSString *logistic_note = [self valueInParams:param key:@"logistic_note" translateSingleQuote:YES];
logistic_note = [logistic_note isEqualToString:@"USE MY CARRIER"] ? [NSString stringWithFormat:@"logistic_note = '%@\n\t%@',",logistic_note,logistic_note_text] : [NSString stringWithFormat:@"logistic_note = '%@',",logistic_note];
// NSString *erpOrderStatus = [self valueInParams:param key:@"erpOrderStatus"];
NSNumber *erpOrderStatus_number = [param objectForKey:@"erpOrderStatus"];
NSString *erpOrderStatus = !erpOrderStatus_number ? @"" : [NSString stringWithFormat:@"submit_as = %@,",erpOrderStatus_number]; // submit as
NSString *paymentType = [self valueInParams:param key:@"paymentType" translateSingleQuote:YES];
paymentType = [NSString stringWithFormat:@"paymentType = '%@',",paymentType];
NSString *credit_card_address1 = [self valueInParams:param key:@"credit_card_address1" translateSingleQuote:YES];
credit_card_address1 = [NSString stringWithFormat:@"credit_card_address1 = '%@',",credit_card_address1];
NSString *credit_card_address2 = [self valueInParams:param key:@"credit_card_address2" translateSingleQuote:YES];
credit_card_address2 = [NSString stringWithFormat:@"credit_card_address2 = '%@',",credit_card_address2];
NSString *credit_card_city = [self valueInParams:param key:@"credit_card_city" translateSingleQuote:YES];
credit_card_city = [NSString stringWithFormat:@"credit_card_city = '%@',",credit_card_city];
NSString *credit_card_expiration = [self valueInParams:param key:@"credit_card_expiration" translateSingleQuote:YES];
NSString *credit_card_first_name = [self valueInParams:param key:@"credit_card_first_name" translateSingleQuote:YES];
credit_card_first_name = [NSString stringWithFormat:@"credit_card_first_name = '%@',",credit_card_first_name];
NSString *credit_card_last_name = [self valueInParams:param key:@"credit_card_last_name" translateSingleQuote:YES];
credit_card_last_name = [NSString stringWithFormat:@"credit_card_last_name = '%@',",credit_card_last_name];
NSString *credit_card_number = [self valueInParams:param key:@"credit_card_number" translateSingleQuote:YES];
BOOL number_nil = [credit_card_number isEqualToString:@""];
if (!number_nil) {
credit_card_number = [AESCrypt fastencrypt:credit_card_number];
}
credit_card_number = [NSString stringWithFormat:@"credit_card_number = '%@',",credit_card_number];
NSString *credit_card_security_code = [self valueInParams:param key:@"credit_card_security_code" translateSingleQuote:YES];
BOOL security_code_nil = [credit_card_security_code isEqualToString:@""];
if (!security_code_nil) {
credit_card_security_code = [AESCrypt fastencrypt:credit_card_security_code];
}
credit_card_security_code = [NSString stringWithFormat:@"credit_card_security_code = '%@',",credit_card_security_code];
NSString *credit_card_state = [self valueInParams:param key:@"credit_card_state" translateSingleQuote:YES];
credit_card_state = [NSString stringWithFormat:@"credit_card_state = '%@',",credit_card_state];
NSNumber *card_type_number = [param objectForKey:@"credit_card_type"];
NSString *credit_card_type = [NSString stringWithFormat:@"credit_card_type = '%@',",[card_type_number integerValue] == 0 ? @"VISA" : @"MASTER CARD"];
NSString *credit_card_zipcode = [self valueInParams:param key:@"credit_card_zipcode" translateSingleQuote:YES];
credit_card_zipcode = [NSString stringWithFormat:@"credit_card_zipcode = '%@',",credit_card_zipcode];
NSString *credit_card_expiration_year = [[credit_card_expiration componentsSeparatedByString:@"/"] lastObject];
credit_card_expiration_year = [AESCrypt fastencrypt:credit_card_expiration_year];
credit_card_expiration_year = [NSString stringWithFormat:@"credit_card_expiration_year = '%@',",credit_card_expiration_year];
NSString *credit_card_expiration_month = [[credit_card_expiration componentsSeparatedByString:@"/"] firstObject];
credit_card_expiration_month = [AESCrypt fastencrypt:credit_card_expiration_month];
credit_card_expiration_month = [NSString stringWithFormat:@"credit_card_expiration_month = '%@',",credit_card_expiration_month];
NSString *customer_cid = [self valueInParams:param key:@"customer_cid" translateSingleQuote:YES];
NSString *contact_id = customer_cid;
customer_cid = [NSString stringWithFormat:@"customer_cid = '%@',",customer_cid];
NSString *customer_contact = [self valueInParams:param key:@"customer_contact" translateSingleQuote:YES];
NSString *contact_contact = [NSString stringWithFormat:@"contact_name = '%@',",customer_contact];
customer_contact = [NSString stringWithFormat:@"customer_contact = '%@',",customer_contact];
NSString *customer_email = [self valueInParams:param key:@"customer_email" translateSingleQuote:YES];
NSString *contact_email = [NSString stringWithFormat:@"email = '%@',",customer_email];
customer_email = [NSString stringWithFormat:@"customer_email = '%@',",customer_email];
NSString *customer_phone = [self valueInParams:param key:@"customer_phone" translateSingleQuote:YES];
NSString *contact_phone = [NSString stringWithFormat:@"phone = '%@',",[AESCrypt fastencrypt:customer_phone]];
customer_phone = [NSString stringWithFormat:@"customer_phone = '%@',",customer_phone];
NSString *customer_fax = [self valueInParams:param key:@"customer_fax" translateSingleQuote:YES];
NSString *contact_fax = [NSString stringWithFormat:@"fax = '%@',",customer_fax];
customer_fax = [NSString stringWithFormat:@"customer_fax = '%@',",customer_fax];
//
NSString *customer_name = [self valueInParams:param key:@"customer_name" translateSingleQuote:YES];
customer_name = [NSString stringWithFormat:@"company_name = '%@',",[AESCrypt fastencrypt:customer_name]];
NSString *customer_address1 = [self valueInParams:param key:@"customer_address1" translateSingleQuote:YES];
customer_address1 = [NSString stringWithFormat:@"addr_1 = '%@',",[AESCrypt fastencrypt:customer_address1]];
NSString *customer_address2 = [self valueInParams:param key:@"customer_address2" translateSingleQuote:YES];
customer_address2 = [NSString stringWithFormat:@"addr_2 = '%@',",customer_address2];
NSString *customer_address3 = [self valueInParams:param key:@"customer_address3" translateSingleQuote:YES];
customer_address3 = [NSString stringWithFormat:@"addr_3 = '%@',",customer_address3];
NSString *customer_address4 = [self valueInParams:param key:@"customer_address4" translateSingleQuote:YES];
customer_address4 = [NSString stringWithFormat:@"addr_4 = '%@',",customer_address4];
NSString *customer_country = [self valueInParams:param key:@"customer_country" translateSingleQuote:YES];
customer_country = [NSString stringWithFormat:@"country = '%@',",customer_country];
NSString *customer_state = [self valueInParams:param key:@"customer_state" translateSingleQuote:YES];
customer_state = [NSString stringWithFormat:@"state = '%@',",customer_state];
NSString *customer_city = [self valueInParams:param key:@"customer_city" translateSingleQuote:YES];
customer_city = [NSString stringWithFormat:@"city = '%@',",customer_city];
NSString *customer_zipcode = [self valueInParams:param key:@"customer_zipcode" translateSingleQuote:YES];
customer_zipcode = [NSString stringWithFormat:@"zipcode = '%@'",customer_zipcode];
NSString *contactSql = [NSString stringWithFormat:@"update offline_contact set %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ where contact_id = '%@'",contact_contact,contact_email,contact_phone,contact_fax,customer_name,customer_address1,customer_address2,customer_address3,customer_address4,customer_country,customer_state,customer_city,customer_zipcode,contact_id];
NSString *receive_cid = [self valueInParams:param key:@"receive_cid" translateSingleQuote:YES];
if (receive_cid.length) {
receive_cid = [NSString stringWithFormat:@"receive_cid = '%@',",receive_cid];
}
NSString *receive_name = [self valueInParams:param key:@"receive_name" translateSingleQuote:YES];
if (receive_name.length) {
receive_name = [NSString stringWithFormat:@"receive_name = '%@',",receive_name];
}
NSString *receive_ext = [self valueInParams:param key:@"receive_ext" translateSingleQuote:YES];
if (receive_ext.length) {
receive_ext = [NSString stringWithFormat:@"receive_ext = '%@',",receive_ext];
}
NSString *receive_contact = [self valueInParams:param key:@"receive_contact" translateSingleQuote:YES];
if (receive_contact.length) {
receive_contact = [NSString stringWithFormat:@"receive_contact = '%@',",receive_contact];
}
NSString *receive_phone = [self valueInParams:param key:@"receive_phone" translateSingleQuote:YES];
if (receive_phone.length) {
receive_phone = [NSString stringWithFormat:@"receive_phone = '%@',",receive_phone];
}
NSString *receive_email = [self valueInParams:param key:@"receive_email" translateSingleQuote:YES];
if (receive_email.length) {
receive_email = [NSString stringWithFormat:@"receive_email = '%@',",receive_email];
}
NSString *receive_fax = [self valueInParams:param key:@"receive_fax" translateSingleQuote:YES];
if (receive_fax.length) {
receive_fax = [NSString stringWithFormat:@"receive_fax = '%@',",receive_fax];
}
NSString *sender_cid = [self valueInParams:param key:@"sender_cid" translateSingleQuote:YES];
if (sender_cid.length) {
sender_cid = [NSString stringWithFormat:@"sender_cid = '%@',",sender_cid];
}
NSString *sender_name = [self valueInParams:param key:@"sender_name" translateSingleQuote:YES];
if (sender_name.length) {
sender_name = [NSString stringWithFormat:@"sender_name = '%@',",sender_name];
}
NSString *sender_ext = [self valueInParams:param key:@"sender_ext" translateSingleQuote:YES];
if (sender_ext.length) {
sender_ext = [NSString stringWithFormat:@"sender_ext = '%@',",sender_ext];
}
NSString *sender_contact = [self valueInParams:param key:@"sender_contact" translateSingleQuote:YES];
if(sender_contact.length) {
sender_contact = [NSString stringWithFormat:@"sender_contact = '%@',",sender_contact];
}
NSString *sender_phone = [self valueInParams:param key:@"sender_phone" translateSingleQuote:YES];
if (sender_phone.length) {
sender_phone = [NSString stringWithFormat:@"sender_phone = '%@',",sender_phone];
}
NSString *sender_fax = [self valueInParams:param key:@"sender_fax" translateSingleQuote:YES];
if (sender_fax.length) {
sender_fax = [NSString stringWithFormat:@"sender_fax = '%@',",sender_fax];
}
NSString *sender_email = [self valueInParams:param key:@"sender_email" translateSingleQuote:YES];
if (sender_email.length) {
sender_email = [NSString stringWithFormat:@"sender_email = '%@',",sender_email];
}
NSString *shipping_billto_cid = [self valueInParams:param key:@"shipping_billto_cid" translateSingleQuote:YES];
if (shipping_billto_cid.length) {
shipping_billto_cid = [NSString stringWithFormat:@"shipping_billto_cid = '%@',",shipping_billto_cid];
}
NSString *shipping_billto_name = [self valueInParams:param key:@"shipping_billto_name" translateSingleQuote:YES];
if (shipping_billto_name.length) {
shipping_billto_name = [NSString stringWithFormat:@"shipping_billto_name = '%@',",shipping_billto_name];
}
NSString *shipping_billto_ext = [self valueInParams:param key:@"shipping_billto_ext" translateSingleQuote:YES];
if (shipping_billto_ext.length) {
shipping_billto_ext = [NSString stringWithFormat:@"shipping_billto_ext = '%@',",shipping_billto_ext];
}
NSString *shipping_billto_contact = [self valueInParams:param key:@"shipping_billto_contact" translateSingleQuote:YES];
if (shipping_billto_contact.length) {
shipping_billto_contact = [NSString stringWithFormat:@"shipping_billto_contact = '%@',",shipping_billto_contact];
}
NSString *shipping_billto_phone = [self valueInParams:param key:@"shipping_billto_phone" translateSingleQuote:YES];
if (shipping_billto_phone.length) {
shipping_billto_phone = [NSString stringWithFormat:@"shipping_billto_phone = '%@',",shipping_billto_phone];
}
NSString *shipping_billto_fax = [self valueInParams:param key:@"shipping_billto_fax" translateSingleQuote:YES];
if (shipping_billto_fax.length) {
shipping_billto_fax = [NSString stringWithFormat:@"shipping_billto_fax = '%@',",shipping_billto_fax];
}
NSString *shipping_billto_email = [self valueInParams:param key:@"shipping_billto_email" translateSingleQuote:YES];
if (shipping_billto_email.length) {
shipping_billto_email = [NSString stringWithFormat:@"shipping_billto_email = '%@',",shipping_billto_email];
}
NSString *billing_cid = [self valueInParams:param key:@"billing_cid" translateSingleQuote:YES];
if (billing_cid.length) {
billing_cid = [NSString stringWithFormat:@"billing_cid = '%@',",billing_cid];
}
NSString *billing_name = [self valueInParams:param key:@"billing_name" translateSingleQuote:YES];
if (billing_name.length) {
billing_name = [NSString stringWithFormat:@"billing_name = '%@',",billing_name];
}
NSString *billing_ext = [self valueInParams:param key:@"billing_ext" translateSingleQuote:YES];
if (billing_ext.length) {
billing_ext = [NSString stringWithFormat:@"billing_ext = '%@',",billing_ext];
}
NSString *billing_contact = [self valueInParams:param key:@"billing_contact" translateSingleQuote:YES];
if (billing_contact.length) {
billing_contact = [NSString stringWithFormat:@"billing_contact = '%@',",billing_contact];
}
NSString *billing_phone = [self valueInParams:param key:@"billing_phone" translateSingleQuote:YES];
if (billing_phone.length) {
billing_phone = [NSString stringWithFormat:@"billing_phone = '%@',",billing_phone];
}
NSString *billing_fax = [self valueInParams:param key:@"billing_fax" translateSingleQuote:YES];
if (billing_fax.length) {
billing_fax = [NSString stringWithFormat:@"billing_fax = '%@',",billing_fax];
}
NSString *billing_email = [self valueInParams:param key:@"billing_email" translateSingleQuote:YES];
if (billing_email.length) {
billing_email = [NSString stringWithFormat:@"billing_email = '%@',",billing_email];
}
NSString *returnto_cid = [self valueInParams:param key:@"returnto_cid" translateSingleQuote:YES];
if (returnto_cid.length) {
returnto_cid = [NSString stringWithFormat:@"returnto_cid = '%@',",returnto_cid];
}
NSString *returnto_name = [self valueInParams:param key:@"returnto_name" translateSingleQuote:YES];
if (returnto_name.length) {
returnto_name = [NSString stringWithFormat:@"returnto_name = '%@',",returnto_name];
}
NSString *returnto_ext = [self valueInParams:param key:@"returnto_ext" translateSingleQuote:YES];
if (returnto_ext.length) {
returnto_ext = [NSString stringWithFormat:@"returnto_ext = '%@',",returnto_ext];
}
NSString *returnto_contact = [self valueInParams:param key:@"returnto_contact" translateSingleQuote:YES];
if (returnto_contact.length) {
returnto_contact = [NSString stringWithFormat:@"returnto_contact = '%@',",returnto_contact];
}
NSString *returnto_phone = [self valueInParams:param key:@"returnto_phone" translateSingleQuote:YES];
if (returnto_phone.length) {
returnto_phone = [NSString stringWithFormat:@"returnto_phone = '%@',",returnto_phone];
}
NSString *returnto_fax = [self valueInParams:param key:@"returnto_fax" translateSingleQuote:YES];
if (returnto_fax.length) {
returnto_fax = [NSString stringWithFormat:@"returnto_fax = '%@',",returnto_fax];
}
NSString *returnto_email = [self valueInParams:param key:@"returnto_email" translateSingleQuote:YES];
if (returnto_email.length) {
returnto_email = [NSString stringWithFormat:@"returnto_email = '%@',",returnto_email];
}
NSString *order_status = @"status = 1,";
if (submit) {
order_status = @"status = -11,";
}
// NSString *sync_data = [AESCrypt fastencrypt:[RAUtils dict2string:param]];
NSString* carrier = [self offline_getCarrier:[param[@"carrier"] intValue]];
NSString* scarrier = [NSString stringWithFormat:@"carrier = '%@',",carrier];
NSString *sync_sql = @"";
if (submit) {
param[@"truck_carrier"]=carrier;
NSString *sales_rep = [iSalesDB jk_queryText:[NSString stringWithFormat:@"select sales_rep from offline_order where so_id = '%@';",so_id]];
[param setValue:sales_rep forKey:@"sales_rep"];
NSString *sync_data = [self translateSingleQuote:[RAConvertor dict2string:param]];
sync_sql = [NSString stringWithFormat:@",sync_data = '%@' ",sync_data];
}
NSString *orderSql = [NSString stringWithFormat:@"update offline_order set %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ so_id = '%@' %@ where so_id = '%@';",schedule_date, order_status,general_notes,internal_notes,poNumber,must_call,sign_picpath,total_price,paymentsAndCredits,handling_fee_placeholder,lift_gate,lift_gate_placeholder,logist,logistic_note,erpOrderStatus,paymentType,credit_card_address1,credit_card_address2,credit_card_city,credit_card_first_name,credit_card_last_name,credit_card_number,credit_card_security_code,credit_card_state,credit_card_type,credit_card_zipcode,credit_card_expiration_year,credit_card_expiration_month,customer_cid,customer_contact,customer_email,customer_phone,customer_fax,receive_cid,receive_name,receive_ext,receive_contact,receive_phone,receive_email,receive_fax,sender_cid,sender_name,sender_ext,sender_contact,sender_phone,sender_fax,sender_email,shipping_billto_cid,shipping_billto_name,shipping_billto_ext,shipping_billto_contact,shipping_billto_phone,shipping_billto_fax,shipping_billto_email,billing_cid,billing_name,billing_ext,billing_contact,billing_phone,billing_fax,billing_email,returnto_cid,returnto_name,returnto_ext,returnto_contact,returnto_phone,returnto_fax,returnto_email,scarrier,so_id,sync_sql,so_id];
DebugLog(@"save order contactSql: %@",contactSql);
DebugLog(@"save order orderSql: %@",orderSql);
// int contact_ret = [iSalesDB execSql:contactSql];
int order_ret = [iSalesDB execSql:orderSql];
int ret = order_ret;
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:[NSNumber numberWithInteger:ret] forKey:@"result"];
[dic setValue:@"Regular Mode" forKey:@"mode"];
// [dic setValue:@"160409" forKey:@"min_ver"];
[dic setObject:so_id forKey:@"so#"];
return [RAConvertor dict2data:dic];
}
+(NSData*) offline_saveorder :(NSMutableDictionary *) param
{
// id foo = nil;
// NSMutableArray *a = @[].mutableCopy;
// [a addObject:foo];
return [self saveorder:param submit:NO];
}
#pragma mark add to cart by name
+(NSData*) offline_add2cartbymodelQR :(NSMutableDictionary *) params
{
NSString *orderCode = [params objectForKey:@"orderCode"];
NSDictionary *newParams = @{
@"product_id" : params[@"product_id_string"],
@"orderCode" : orderCode,
@"can_create_backorder":params[@"can_create_backorder"]
};
return [self offline_add2cart:[newParams mutableCopy]];
}
+(NSData*) offline_add2cartbyupc :(NSMutableDictionary *) params
{
NSString *orderCode = [params objectForKey:@"orderCode"];
NSString *upccode = [params objectForKey:@"upc_code"];
// product_name = [self translateSingleQuote:product_name];
// NSArray *product_name_array = [product_name componentsSeparatedByString:@","];
// bool search_upc = [params[@"search_upc"] boolValue];
sqlite3 *db = [iSalesDB get_db];
__block NSMutableString *product_id_string = [NSMutableString string];
// NSString *name = [product_name_array objectAtIndex:i];
NSString *sql =nil;
sql= [NSString stringWithFormat:@"select product_id from product where upc_code = '%@' or upc_code like '%@;%%' or upc_code like '%%;%@;%%' or upc_code like '%%;%@';",upccode,upccode,upccode,upccode];
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
int product_id = sqlite3_column_int(stmt, 0);
[product_id_string appendFormat:@"%d",product_id];
}];
if (!orderCode) {
orderCode = @"";
}
NSDictionary *newParams = @{
@"product_id" : product_id_string,
@"orderCode" : orderCode,
@"can_create_backorder":params[@"can_create_backorder"]
};
[iSalesDB close_db:db];
return [self offline_add2cart:[newParams mutableCopy]];
}
+(NSData*) offline_add2cartbyname :(NSMutableDictionary *) params
{
NSString *orderCode = [params objectForKey:@"orderCode"];
NSString *product_name = [params objectForKey:@"product_name"];
product_name = [self translateSingleQuote:product_name];
NSArray *product_name_array = [product_name componentsSeparatedByString:@","];
bool search_upc = [params[@"search_upc"] boolValue];
sqlite3 *db = [iSalesDB get_db];
__block NSMutableString *product_id_string = [NSMutableString string];
for (int i = 0; i < product_name_array.count; i++) {
NSString *name = [product_name_array objectAtIndex:i];
NSString *sql =nil;
if(search_upc)
sql= [NSString stringWithFormat:@"select product_id from product where upc_code = '%@' or upc_code like '%@;%%' or upc_code like '%%;%@;%%' or upc_code like '%%;%@';",name,name,name,name];
else
sql= [NSString stringWithFormat:@"select product_id from product where name = '%@';",name];
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
int product_id = sqlite3_column_int(stmt, 0);
if (i == product_name_array.count - 1) {
[product_id_string appendFormat:@"%d",product_id];
} else {
[product_id_string appendFormat:@"%d,",product_id];
}
}];
}
if (!orderCode) {
orderCode = @"";
}
NSDictionary *newParams = @{
@"product_id" : product_id_string,
@"orderCode" : orderCode,
@"can_create_backorder":params[@"can_create_backorder"]
};
[iSalesDB close_db:db];
return [self offline_add2cart:[newParams mutableCopy]];
}
#pragma mark reset order
+(NSData*) offline_resetorder :(NSMutableDictionary *) params
{
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
[iSalesDB disable_trigger];
[iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"];
[iSalesDB execSql:@"delete from offline_order where status=0;"];
[iSalesDB enable_trigger];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:[NSNumber numberWithInteger:2] forKey:@"result"];
return [RAConvertor dict2data:dic];
}
#pragma mark submit order
+(NSData*) offline_submitorder :(NSMutableDictionary *) params;
{
return [self saveorder:params submit:YES];
}
#pragma mark copy order
+(NSData*) offline_copyorder :(NSMutableDictionary *) params;
{
NSMutableDictionary *ret = @{}.mutableCopy;
NSString *order_code = [self valueInParams:params key:@"code" translateSingleQuote:YES];
sqlite3 *db = [iSalesDB get_db];
[iSalesDB execSql:@"BEGIN TRANSACTION" db:db];
// 首先查看联系人是否active
NSString *customer_sql = [NSString stringWithFormat:@"select is_active from offline_contact where contact_id in (select customer_cid from offline_order where so_id = '%@');",order_code];
__block int customer_is_active = 1;
[iSalesDB jk_query:customer_sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
customer_is_active = sqlite3_column_int(stmt, 0);
}];
if (!customer_is_active) {
[ret setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"];
[iSalesDB execSql:@"END TRANSACTION" db:db];
[iSalesDB close_db:db];
return [RAConvertor dict2data:ret];
}
// new order
// NSString *new_order_code = [NSString stringWithFormat:@"OFFLINE%@",[NSUUID UUID].UUIDString];
NSString *new_order_code = [self get_offline_soid:db];
NSString *user =params[@"user"];// ((AppDelegate *)[UIApplication sharedApplication].delegate).user;
user = [self translateSingleQuote:user];
NSString *insert_order_sql = [NSString stringWithFormat:@"insert into offline_order (so_id,status,submit_as,internal_notes,sales_rep,create_by,logist,lift_gate,logistic_note,customer_cid,customer_contact,customer_email,customer_phone,customer_fax,receive_cid,receive_name,receive_ext,receive_contact,receive_phone,receive_fax,receive_email,sender_cid,sender_name,sender_ext,sender_contact,sender_phone,sender_fax,sender_email,shipping_billto_cid,shipping_billto_name,shipping_billto_ext,shipping_billto_contact,shipping_billto_phone,shipping_billto_fax,shipping_billto_email,billing_cid,billing_name,billing_ext,billing_contact,billing_phone,billing_fax,billing_email,returnto_cid,returnto_name,returnto_ext,returnto_contact,returnto_phone,returnto_fax,returnto_email,must_call,poNumber,comments,comments_ext,sales_terms) select '%@',1,submit_as,internal_notes,sales_rep,'%@',logist,lift_gate,logistic_note,customer_cid,customer_contact,customer_email,customer_phone,customer_fax,receive_cid,receive_name,receive_ext,receive_contact,receive_phone,receive_fax,receive_email,sender_cid,sender_name,sender_ext,sender_contact,sender_phone,sender_fax,sender_email,shipping_billto_cid,shipping_billto_name,shipping_billto_ext,shipping_billto_contact,shipping_billto_phone,shipping_billto_fax,shipping_billto_email,billing_cid,billing_name,billing_ext,billing_contact,billing_phone,billing_fax,billing_email,returnto_cid,returnto_name,returnto_ext,returnto_contact,returnto_phone,returnto_fax,returnto_email,must_call,poNumber,comments,comments_ext,sales_terms from offline_order where so_id = '%@';",new_order_code,user,order_code]; // ,paymentsAndCredits,shipping,lift_gate_value,handling_fee_value
__block int result = 1;
result = [iSalesDB execSql:insert_order_sql db:db];
if (!result) {
[ret setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"];
[iSalesDB execSql:@"END TRANSACTION" db:db];
[iSalesDB close_db:db];
return [RAConvertor dict2data:ret];
}
// 查询product_id 及其对应的 is_active,若is_active = 0,那么就忽略之
// __block NSString *product_id = @"";
__weak typeof(self) weakSelf = self;
NSString *product_id_sql = [NSString stringWithFormat:@"select product_id,is_active from product WHERE product_id in (select product_id from offline_cart where so_no = '%@');",order_code];
[iSalesDB jk_query:product_id_sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
int is_active = sqlite3_column_int(stmt, 1);
if (is_active) {
// product_id = [product_id stringByAppendingString:[NSString stringWithFormat:@",%@",[weakSelf textAtColumn:0 statement:stmt]]];
NSString *product_id = [weakSelf textAtColumn:0 statement:stmt];
NSString *insert_cart_sql = [NSString stringWithFormat:@"insert into offline_cart (so_no,orderitem_id,product_id,item_id,item_count,bundle_item,type) select '%@',orderitem_id,product_id,item_id,item_count,bundle_item,type from offline_cart where product_id = %@ and so_no = '%@'",new_order_code,product_id,order_code];
result = result && [iSalesDB execSql:insert_cart_sql db:db];
}
}];
// product_id = [product_id substringFromIndex:1];
//
// [self offline_add2cart:@{}.mutableCopy];
[iSalesDB execSql:@"END TRANSACTION" db:db];
[iSalesDB close_db:db];
if (result) {
[ret setObject:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"];
} else {
[ret setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"];
}
[ret setObject:new_order_code forKey:@"so_id"];
return [RAConvertor dict2data:ret];
}
#pragma mark move wish list to cart
+ (NSData*)offline_movewish2cart:(NSMutableDictionary *)params {
assert(params[@"can_create_backorder"]!=nil);
// cart中存在的Model在wish list move to cart之后,cart中Model数量为1
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSString *collectId = params[@"collectId"];
NSString *sql = [NSString stringWithFormat:@"select w.product_id,w.qty,p.availability,w._id from wishlist as w left join product as p on w.product_id = p.product_id where w._id in (%@);",collectId];
__block NSString *product_id = @"";
__block NSString *qty = @"";
__block int number_of_outOfStock = 0;
__block NSMutableArray *delete_collectId = [NSMutableArray array];
[iSalesDB jk_query:sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
int productId = sqlite3_column_int(stmt, 0);
int item_qty = sqlite3_column_int(stmt, 1);
int availability = sqlite3_column_int(stmt, 2);
int _id = sqlite3_column_int(stmt, 3);
if (![params[@"can_create_backorder"] boolValue]) {
// 库存小于购买量为缺货
if (availability >= item_qty) {
product_id = [product_id stringByAppendingString:[NSString stringWithFormat:@",%d",productId]];
qty = [qty stringByAppendingString:[NSString stringWithFormat:@",%d",item_qty]];
[delete_collectId addObject:[NSString stringWithFormat:@"%d",_id]];
} else {
number_of_outOfStock++;
}
} else {
product_id = [product_id stringByAppendingString:[NSString stringWithFormat:@",%d",productId]];
qty = [qty stringByAppendingString:[NSString stringWithFormat:@",%d",item_qty]];
[delete_collectId addObject:[NSString stringWithFormat:@"%d",_id]];
}
}];
NSMutableDictionary *retDic = nil;
if (![params[@"can_create_backorder"] boolValue]) {
if (delete_collectId.count == 0) {
retDic = [NSMutableDictionary dictionary];
retDic[@"result"] = [NSNumber numberWithInteger:8];
retDic[@"err_msg"] = [NSString stringWithFormat:@"%d item is out of stock",number_of_outOfStock];
return [RAConvertor dict2data:retDic];
}
}
if (product_id.length > 1) {
product_id = [product_id substringFromIndex:1];
}
if (qty.length > 1) {
qty = [qty substringFromIndex:1];
}
NSString *orderCode = params[@"orderCode"];
if (!orderCode) {
orderCode = @"";
}
NSDictionary *newParams = @{
@"product_id" : product_id,
@"orderCode" : orderCode,
@"qty" : qty,
@"can_create_backorder":params[@"can_create_backorder"]
};
NSData *data = [self offline_add2cart:newParams.mutableCopy];
retDic = [[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil] mutableCopy];
if ([retDic[@"result"] integerValue] == RESULT_TRUE) {
NSMutableDictionary* wish_return = [[self offline_deletewishlist:@{@"collectId" : [delete_collectId componentsJoinedByString:@","]}.mutableCopy] mutableCopy];
NSInteger ret = [wish_return[@"result"] intValue];
retDic[@"wish_count"]=wish_return[@"wish_count"];
retDic[@"result"] = [NSNumber numberWithInteger:ret];
}
if (![params[@"can_create_backorder"] boolValue]) {
if (number_of_outOfStock > 0) {
retDic[@"result"] = [NSNumber numberWithInteger:8];
retDic[@"err_msg"] = [NSString stringWithFormat:@"%d item is out of stock",number_of_outOfStock];
}
}
return [RAConvertor dict2data:retDic];
}
#pragma mark - portfolio
+ (NSData *)offline_portfolioList:(NSMutableDictionary *)params {
// assert(params[@"contact_id"]!=nil);
assert(params[@"user"]!=nil);
assert(params[@"can_see_price"]!=nil);
int sort = [[params valueForKey:@"sort"] intValue];
int offset = [[params valueForKey:@"offset"] intValue];
int limit = [[params valueForKey:@"limit"] intValue];
NSString *orderBy = @"";
switch (sort) {
case 0:{
orderBy = @"p.modify_time desc";
}
break;
case 1:{
orderBy = @"modify_time asc";
}
break;
case 2:{
orderBy = @"p.name asc";
}
break;
case 3:{
orderBy = @"p.name desc";
}
break;
case 4:{
orderBy = @"p.description asc";
}
break;
case 5: {
orderBy = @"m.default_category asc";
}
default:
break;
}
// NSString *sql = [NSString stringWithFormat:@"select p.product_id,p.name,p.description,ifnull(p.sheet_price,'null'),p.sheet_discount,ifnull(p.available_qty,'null'),p.percentage,p.item_id,p.fashion_id,i.url,p.line_note,p.percent from offline_portfolio as p left join model_image as i on i.product_id = p.product_id where i.type = 1 and (p.is_delete is null or p.is_delete = 0) group by p.product_id order by %@ limit %d offset %d;",orderBy,limit,offset];
NSString *sql = [NSString stringWithFormat:@"select * from (select p.product_id,p.name,p.description,ifnull(p.sheet_price,'null'),p.sheet_discount,ifnull(p.available_qty,'null'),p.percentage,p.item_id,p.fashion_id,i.url,p.line_note,p.percent,p.modify_time from offline_portfolio as p left join model_image as i on i.product_id = p.product_id where i.type = 1 and (p.is_delete is null or p.is_delete = 0) group by p.product_id limit %d offset %d) as p left join product as m on p.product_id = m.product_id order by %@;",limit,offset,orderBy];
__block NSMutableDictionary *dic = [NSMutableDictionary dictionary];
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
sqlite3 *db = [iSalesDB get_db];
NSDictionary *resultDic = [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
[dic setValue:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"];
int product_id = sqlite3_column_int(stmt, 0);
NSString *product_id_string = [NSString stringWithFormat:@"%d",product_id];
NSString *name = [self textAtColumn:1 statement:stmt];
NSString *description = [self textAtColumn:2 statement:stmt];
double price = sqlite3_column_double(stmt, 3);
double discount = sqlite3_column_double(stmt,4);
int qty = sqlite3_column_int(stmt, 5);
int percentage = sqlite3_column_int(stmt, 6);
int item_id = sqlite3_column_int(stmt, 7);
// int fashion_id = sqlite3_column_int(stmt, 8);
NSString *img_path = [self textAtColumn:9 statement:stmt];
NSString *line_note = [self textAtColumn:10 statement:stmt];
double percent = sqlite3_column_double(stmt, 11);
NSString *price_null = [self textAtColumn:3 statement:stmt];
if ([price_null isEqualToString:@"null"]) {
price = [[self get_model_default_price:params[@"contact_id"] user:params[@"user"] product_id:nil item_id:@(item_id) db:db] doubleValue];
}
NSMutableDictionary *item = @{
@"linenotes": line_note,
@"check": @(1),
@"product_id": product_id_string,
@"available_qty": @(qty),
@"available_percent" : @(percent),
@"description": [NSString stringWithFormat:@"%@\n%@",name,description],
@"item_id": [NSString stringWithFormat:@"%d",item_id],
@"fashion_id": [NSString stringWithFormat:@"%d",product_id],
@"img": img_path,
@"tear_sheet_discount": [NSString stringWithFormat:@"%f",discount],
@"tear_sheet_price": [NSString stringWithFormat:@"%f",price]
}.mutableCopy;
if (percentage) {
[item removeObjectForKey:@"available_qty"];
} else {
[item removeObjectForKey:@"available_percent"];
}
NSString *qty_null = [self textAtColumn:5 statement:stmt];
if ([qty_null isEqualToString:@"null"]) {
[item removeObjectForKey:@"available_qty"];
}
[dic setObject:item forKey:[NSString stringWithFormat:@"item_%ld",*count]];
[dic setValue:[NSNumber numberWithLong:++(*count)] forKey:@"count"];
}];
if ([[resultDic objectForKey:@"result"] integerValue] == RESULT_FALSE) {
[dic setValue:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"];
[dic setValue:[NSNumber numberWithInteger:0] forKey:@"count"];
}
[iSalesDB close_db:db];
[dic setValue:[NSNumber numberWithBool:[params[@"can_see_price"] boolValue]] forKey:@"can_see_price"];
[dic setValue:@"" forKey:@"email_content"];
[dic setValue:[dic objectForKey:@"count"] forKey:@"total_count"];
[dic setValue:@"Regular Mode" forKey:@"mode"];
return [RAConvertor dict2data:dic];
}
+ (int)model_QTY:(NSString *)product_id db:(sqlite3 *)db {
__block int qty = 0;
NSString *sql = [NSString stringWithFormat:@"select availability from product where product_id = %@;",product_id];
[iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
qty = sqlite3_column_int(stmt, 0);
}];
return qty;
}
+ (NSData *)offline_savePDF:(NSMutableDictionary *)params direct:(BOOL)direct contact_id:(NSString* ) contact_id
{
NSMutableDictionary *resultDictionary = [NSMutableDictionary dictionary];
[resultDictionary setObject:@"Regular Mode" forKey:@"mode"];
// NSMutableDictionary * values = params[@"replaceValue"];
NSNumber *tear_sheet_id = [params objectForKey:@"tearsheetsId"]; // _id
NSString *tear_name = [self valueInParams:params key:@"pdfName"];
NSString *tear_note = [self valueInParams:params key:@"pdfNote"];
NSString *configureParams = [self valueInParams:params key:@"configureParams"];
NSString *pdf_path = @"";
if (direct) {
configureParams = [self valueInParams:params key:@"pdfUrl"];
} else {
pdf_path = [self valueInParams:params key:@"pdfPath"];
}
NSString *create_user = [self valueInParams:params key:@"user"];
NSString *product_ids = [self valueInParams:params key:@"product_ids"];
NSString *item_ids = [self valueInParams:params key:@"item_ids"];
// model info
// NSString *sql = [NSString stringWithFormat:@"select product_id,ifnull(sheet_price,'null'),ifnull(sheet_discount,'null'),ifnull(available_qty,'null'),percentage,item_id,line_note,percent from offline_portfolio where product_id in (%@);",product_ids];
// V1.90 more color
NSString *sql = [NSString stringWithFormat:@"select p.product_id,ifnull(p.sheet_price,'null'),ifnull(p.sheet_discount,'null'),ifnull(p.available_qty,'null'),p.percentage,p.item_id,p.line_note,p.percent,m.more_color from offline_portfolio as p left join product as m on p.product_id = m.product_id where p.product_id in (%@);",product_ids];
__block NSMutableDictionary *dic = [NSMutableDictionary dictionary];
__block NSMutableString *product_ids_string = [NSMutableString string]; // configure参数
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
sqlite3 *db = [iSalesDB get_db];
NSDictionary *resultDic = [iSalesDB jk_query:sql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
[dic setValue:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"];
int product_id = sqlite3_column_int(stmt, 0);
NSString *product_id_string = [NSString stringWithFormat:@"%d",product_id];
double price = sqlite3_column_double(stmt, 1);
double discount = sqlite3_column_double(stmt,2);
int qty = sqlite3_column_int(stmt, 3);
int percentage = sqlite3_column_int(stmt, 4);
int item_id = sqlite3_column_int(stmt, 5);
NSString *line_note = [self textAtColumn:6 statement:stmt];
double percent = sqlite3_column_double(stmt, 7);
int more_color = sqlite3_column_int(stmt, 8);
NSString *price_null = [self textAtColumn:1 statement:stmt];
/* if ([price_null isEqualToString:@"null"]) {
price = [[self get_model_default_price:appDelegate.contact_id product_id:nil item_id:@(item_id) db:db] doubleValue];
}
*/
[product_ids_string appendFormat:@"%@,",product_id_string];
// Regular Price
int regular_price = [[params objectForKey:@"regular_price"] intValue];
NSString *regular_price_str = [self get_portfolio_price:contact_id item_id:item_id price:regular_price db:db];
// QTY
NSString *qty_null = [self textAtColumn:3 statement:stmt];
if ([qty_null isEqualToString:@"null"]) {
// 查available
qty = [self model_QTY:product_id_string db:db];
}
if (percentage) {
qty = qty * percent / 100;
}
// Special Price
if ([price_null isEqualToString:@"null"]) {
// price = regular price
price = [regular_price_str doubleValue];
}
NSString *discount_null = [self textAtColumn:2 statement:stmt];
if (![discount_null isEqualToString:@"null"]) {
price = price * (1 - discount / 100.0);
}
NSMutableDictionary *item = @{
@"line_note": line_note,
@"product_id": product_id_string,
@"available_qty": @(qty),
@"more_color":@(more_color),
@"item_id": [NSString stringWithFormat:@"%d",item_id],
@"regular_price" : regular_price_str,
@"special_price" : [NSString stringWithFormat:@"%.2f",price]
}.mutableCopy;
[dic setObject:item forKey:[NSString stringWithFormat:@"item_%ld",*count]];
[dic setValue:[NSNumber numberWithLong:++(*count)] forKey:@"count"];
}];
[iSalesDB close_db:db];
if (product_ids_string.length > 0) {
[product_ids_string deleteCharactersInRange:NSMakeRange(product_ids_string.length - 1, 1)];
}
if ([[resultDic objectForKey:@"result"] integerValue] != RESULT_TRUE) {
[resultDictionary setObject:[resultDic objectForKey:@"result"] forKey:@"result"];
return [RAConvertor dict2data:resultDictionary];
}
NSString *model_info = [RAConvertor dict2string:dic];
// 创建PDF
// 在preview情况下保存,则不需要新建了
if (direct) {
NSMutableDictionary *tear_sheet_params = params;
// if (tear_sheet_id) {
// tear_sheet_params = values;
// }
NSData *pdfData = [self offline_request_tearsheet:tear_sheet_params]; // 新建PDF,获取本地路径
NSDictionary *pdfInfo = [NSJSONSerialization JSONObjectWithData:pdfData options:NSJSONReadingMutableContainers error:nil];
pdf_path = [pdfInfo objectForKey:@"pdf_path"];
if ([[pdfInfo objectForKey:@"result"] integerValue] == RESULT_TRUE) {
resultDictionary = pdfInfo.mutableCopy;
} else { // 创建PDF失败
return pdfData;
}
} else {
// pdf_path 就是本地路径
[resultDictionary setObject:pdf_path forKey:@"pdf_path"];
}
// 将文件移动到PDF Cache文件夹
NSString *newPath = [pdf_path lastPathComponent];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachefolder = [paths objectAtIndex:0];
NSString *pdfFolder = [cachefolder stringByAppendingPathComponent:@"pdf_cache"];
newPath = [pdfFolder stringByAppendingPathComponent:newPath];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error = nil;
[fileManager moveItemAtPath:pdf_path toPath:newPath error:&error];
if (error) { // 移动文件失败
[resultDictionary setObject:[NSNumber numberWithInt:RESULT_FALSE] forKey:@"result"];
return [RAConvertor dict2data:resultDictionary];
}
[resultDictionary setObject:newPath forKey:@"pdf_path"];
pdf_path = [newPath lastPathComponent];
// 保存信息
// [params setObject:[params objectForKey:@"product_ids"] forKey:@"productIds"];
NSString *off_params = [RAConvertor dict2string:params];
// configureParams = [configureParams stringByAppendingFormat:@"productIds=%@",product_ids_string];
pdf_path = [self translateSingleQuote:pdf_path];
create_user = [self translateSingleQuote:create_user];
tear_note = [self translateSingleQuote:tear_note];
tear_name = [self translateSingleQuote:tear_name];
model_info = [self translateSingleQuote:model_info];
configureParams = [self translateSingleQuote:configureParams];
off_params = [self translateSingleQuote:off_params];
NSString *save_pdf_sql = [NSString stringWithFormat:@"insert into offline_pdf (pdf_path,create_user,tear_note,tear_name,model_info,configureParams,is_local,off_params) values ('%@','%@','%@','%@','%@','%@',1,'%@');",pdf_path,create_user,tear_note,tear_name,model_info,configureParams,off_params];
if (tear_sheet_id) {
int _id = [tear_sheet_id intValue];
save_pdf_sql = [NSString stringWithFormat:@"update offline_pdf set pdf_path = '%@' where _id = %d;",pdf_path,_id];
}
int result = [iSalesDB execSql:save_pdf_sql];
[resultDictionary setObject:[NSNumber numberWithInt:result] forKey:@"result"];
//
BOOL remove_Item = [[params objectForKey:@"remove_item"] boolValue];
if (remove_Item) {
// portfolioId
[self offline_removePortfolio:@{@"portfolioId" : item_ids}.mutableCopy];
}
return [RAConvertor dict2data:resultDictionary];
}
+ (NSData *)offline_direct_save_TearSheet:(NSMutableDictionary *)params {
return [self offline_savePDF:params direct:YES contact_id:params[@"contact_id"]];
}
+ (NSData *)offline_save_TearSheet:(NSMutableDictionary *)params {
return [self offline_savePDF:params direct:NO contact_id:params[@"contact_id"]];
}
+ (NSData *)offline_pdfList:(NSMutableDictionary *)params {
int offset = [[params valueForKey:@"offset"] intValue];
int limit = [[params valueForKey:@"limit"] intValue];
NSString *keyword = [params valueForKey:@"keyWord"];
NSString *where = @"where is_delete is null or is_delete = 0";
if (keyword.length) {
keyword = [self translateSingleQuote:keyword];
where = [NSString stringWithFormat:@"where (is_delete is null or is_delete = 0 ) and lower(create_user) like '%%%@%%' or lower(tear_note) like '%%%@%%' or lower(tear_name) like '%%%@%%'",keyword.lowercaseString,keyword.lowercaseString,keyword.lowercaseString];
}
NSString *sql = [NSString stringWithFormat:@"select tear_name,tear_note,createtime,create_user,pdf_path,_id,model_info,off_params from offline_pdf %@ order by createtime desc limit %d offset %d;",where,limit,offset];// tearsheets_id ---> _id
__block NSMutableDictionary *dic = [NSMutableDictionary dictionary];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachefolder = [paths objectAtIndex:0];
NSString *pdfFolder = [cachefolder stringByAppendingPathComponent:@"pdf_cache"];
[iSalesDB jk_query:sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSString *name = [self textAtColumn:0 statement:stmt];
NSString *note = [self textAtColumn:1 statement:stmt];
NSString *time = [self textAtColumn:2 statement:stmt];
NSString *user = [self textAtColumn:3 statement:stmt];
NSString *path = [self textAtColumn:4 statement:stmt];
NSString *model_info = [self textAtColumn:6 statement:stmt];
NSString *off_params = [self textAtColumn:7 statement:stmt];
path = [pdfFolder stringByAppendingPathComponent:path];
BOOL bdir=NO;
NSFileManager* fileManager = [NSFileManager defaultManager];
if(! [fileManager fileExistsAtPath:path isDirectory:&bdir]|| bdir)
{
//pdf文件不存在
path=nil;
}
time = [self changeDateTimeFormate:time];
time = [time stringByAppendingString:@" PST"];
int sheet_id = sqlite3_column_int(stmt, 5);
NSMutableDictionary *item = [[NSMutableDictionary alloc] init];
item[@"tearsheetsId"]=@(sheet_id);
item[@"pdf_path"]=path;
item[@"create_time"]=time;
item[@"create_user"]=user;
item[@"tear_note"]=note;
item[@"tear_name"]=name;
item[@"isLocalFile"]=[NSNumber numberWithBool:YES];
item[@"model_info"]=model_info;
item[@"off_params"]=off_params;
[dic setObject:item forKey:[NSString stringWithFormat:@"item_%ld",*count]];
[dic setValue:[NSNumber numberWithLong:++(*count)] forKey:@"count"];
} failure:^(NSMutableDictionary *container, NSString *err_msg) {
[dic setValue:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"];
[dic setValue:[NSNumber numberWithInteger:0] forKey:@"count"];
}];
[dic setValue:@"Regular Mode" forKey:@"mode"];
return [RAConvertor dict2data:dic];
}
+ (NSData *)offline_add2Portfolio:(NSMutableDictionary *)params {
NSString *prodct_ids = [params objectForKey:@"product_id"];
// NSString *user = [params objectForKey:@"user"];
// NSString *sql = [NSString stringWithFormat:@"insert into offline_portfolio (product_id,name,description,item_id) select * from (select p.product_id,p.name,p.description,p.item_id from product as p where p.product_id in (%@) and (select count(0) from offline_portfolio where product_id in (%@) and (is_delete is null or is_delete = 0)) = 0);",prodct_ids,prodct_ids];
NSString *sql = [NSString stringWithFormat:@"insert into offline_portfolio (product_id,name,description,item_id) select * from (select p.product_id,p.name,p.description,p.item_id from product as p where p.product_id in (%@) and p.product_id not in (select product_id from offline_portfolio));insert into offline_portfolio (product_id,name,description,item_id,is_delete) select * from (select p.product_id,p.name,p.description,p.item_id,0 from product as p left join offline_portfolio as f on p.product_id = f.product_id where p.product_id in (%@) and p.product_id in (select product_id from offline_portfolio) and f.is_delete = 1);delete from offline_portfolio where (select count(0) from offline_portfolio where product_id in (%@)) > 1 and is_delete = 1;",prodct_ids,prodct_ids,prodct_ids];
int result = [iSalesDB execSql:sql];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
[dic setValue:[NSNumber numberWithInteger:result] forKey:@"result"];
if (result == RESULT_TRUE) {
/*NSArray *product_id_arr = [prodct_ids componentsSeparatedByString:@","];
[dic setValue:[NSNumber numberWithInteger:product_id_arr.count] forKey:@"portfolio_count"];*/
sqlite3 *db = [iSalesDB get_db];
int count = [iSalesDB get_recordcount:db table:@"offline_portfolio" where:@"is_delete is null or is_delete = 0"];
[dic setValue:[NSNumber numberWithInteger:count] forKey:@"portfolio_count"];
[iSalesDB close_db:db];
}
[dic setValue:@"Regular Mode" forKey:@"mode"];
return [RAConvertor dict2data:dic];
}
+ (NSData *)offline_createTearSheet:(NSMutableDictionary *)params {
NSMutableDictionary *dic = [self dictionaryFileName:@"TearSheet.json"];
[dic setObject:[params objectForKey:@"product_ids"] forKey:@"product_ids"];
[dic setObject:[params objectForKey:@"item_ids"] forKey:@"item_ids"];
NSMutableDictionary *section_0 = [[dic objectForKey:@"section_0"] mutableCopy];
NSDictionary *company_item = @{
@"control": @"text",
@"keyboard": @"text",
@"name": @"company_name",
@"value": COMPANY_FULL_NAME,
@"aname": @"Company Name"
};
[section_0 setObject:company_item forKey:@"item_0"];
[dic setObject:section_0 forKey:@"section_0"];
// Regurlar Price
NSMutableDictionary *section1 = [[dic objectForKey:@"section_1"] mutableCopy];
NSMutableDictionary *price = [[section1 objectForKey:@"item_2"] mutableCopy];
__block NSMutableDictionary *cadedate = [NSMutableDictionary dictionary];
__block long val_count = 0;
NSString *sql = @"select name,type,order_by from price order by order_by";
[iSalesDB jk_query:sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSString *name = [self textAtColumn:0 statement:stmt];
int type = sqlite3_column_int(stmt, 1);
int order_by = sqlite3_column_int(stmt, 2);
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSDictionary *price_dic = @{
@"value" : name,
@"value_id" : [NSNumber numberWithInteger:type],
@"check" : order_by == 0 ? @(1) : @(0)
};
[cadedate setObject:price_dic forKey:[NSString stringWithFormat:@"val_%ld",val_count]];
val_count = ++(*count);
} failure:^(NSMutableDictionary *container, NSString *err_msg) {
val_count = 0;
}];
[cadedate setObject:@{@"value" : @"None",
@"value_id" : @(0)} forKey:[NSString stringWithFormat:@"val_%ld",val_count]];
val_count++;
[cadedate setObject:[NSNumber numberWithInteger:val_count] forKey:@"count"];
[price setObject:cadedate forKey:@"cadedate"];
[section1 setObject:price forKey:@"item_2"];
[dic setObject:section1 forKey:@"section_1"];
return [RAConvertor dict2data:dic];
}
+ (NSData *)offline_model_qty:(NSMutableDictionary *)params {
NSString *product_id = [params objectForKey:@"fashionId"];
NSString *sql = [NSString stringWithFormat:@"select availability from product where product_id = %@;",product_id];
__block int result = RESULT_TRUE;
__block int qty = 0;
[iSalesDB jk_query:sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
qty = sqlite3_column_int(stmt, 0);
} failure:^(NSMutableDictionary *container, NSString *err_msg) {
result = RESULT_FALSE;
}];
NSMutableDictionary *dic = @{
@"err_msg" : result == RESULT_FALSE ? @"Failed." : @"Success.",
@"mode" : @"Regular Mode",
@"quantity_available" : @(qty),
@"result" : @(result),
}.mutableCopy;
return [RAConvertor dict2data:dic];
}
+ (NSData *)offline_editPortfolio:(NSMutableDictionary *)params {
NSString *item_ids = [params objectForKey:@"item_id"];
NSString *line_notes = [params objectForKey:@"notes"];
NSString *price_str = [params objectForKey:@"price"];
NSString *discount_str = [params objectForKey:@"discount"];
NSString *percent = [params objectForKey:@"available_percent"];
NSString *qty = [params objectForKey:@"available_qty"];
NSString *sql = [NSString stringWithFormat:@"update offline_portfolio set "];
int dot = 0;
if (line_notes) {
line_notes = [self translateSingleQuote:line_notes];
line_notes = [NSString stringWithFormat:@"line_note = '%@'",line_notes];
sql = [sql stringByAppendingString:line_notes];
dot = 1;
} else {
line_notes = @"";
}
if (price_str) {
if (dot) {
price_str = [NSString stringWithFormat:@",sheet_price = %@",price_str];
} else {
price_str = [NSString stringWithFormat:@"sheet_price = %@",price_str];
dot = 1;
}
sql = [sql stringByAppendingString:price_str];
} else {
price_str = @"";
}
if (discount_str) {
if (dot) {
discount_str = [NSString stringWithFormat:@",sheet_discount = %@",discount_str];
} else {
discount_str = [NSString stringWithFormat:@"sheet_discount = %@",discount_str];
dot = 1;
}
sql = [sql stringByAppendingString:discount_str];
} else {
discount_str = @"";
}
if (percent) {
if (dot) {
percent = [NSString stringWithFormat:@",percent = %@,percentage = 1",percent];
} else {
percent = [NSString stringWithFormat:@"percent = %@,percentage = 1",percent];
dot = 1;
}
sql = [sql stringByAppendingString:percent];
} else {
percent = @"";
}
if (qty) {
if (dot) {
qty = [NSString stringWithFormat:@",available_qty = %@,percentage = 0",qty];
} else {
qty = [NSString stringWithFormat:@"available_qty = %@,percentage = 0",qty];
dot = 1;
}
sql = [sql stringByAppendingString:qty];
} else {
qty = @"";
}
NSString *where = [NSString stringWithFormat:@" where item_id in (%@) and (is_delete is null or is_delete = 0);",item_ids];
sql = [sql stringByAppendingString:where];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
int result = [iSalesDB execSql:sql];
[dic setObject:[NSNumber numberWithInt:result] forKey:@"result"];
[dic setObject:@"Regular Mode" forKey:@"mode"];
return [RAConvertor dict2data:dic];
}
+ (NSData *)offline_removePortfolio:(NSMutableDictionary *)params {
NSString *portfolio_ids = [params objectForKey:@"portfolioId"];
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
sqlite3 *db = [iSalesDB get_db];
NSString *sql = [NSString stringWithFormat:@"update offline_portfolio set is_delete = 1 where item_id in (%@) and (is_delete is null or is_delete = 0);",portfolio_ids];
int result = [iSalesDB execSql:sql db:db];
[dic setObject:[NSNumber numberWithInt:result] forKey:@"result"];
[dic setObject:@"Regular Mode" forKey:@"mode"];
int count = [iSalesDB get_recordcount:db table:@"offline_portfolio" where:@"(is_delete is null or is_delete = 0)"];
[dic setObject:[NSNumber numberWithInt:count] forKey:@"portfolio_count"];
[iSalesDB close_db:db];
return [RAConvertor dict2data:dic];
}
+ (void)offline_removePDFWithName:(NSString *)name {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachefolder = [paths objectAtIndex:0];
NSString *pdfFolder = [cachefolder stringByAppendingPathComponent:@"pdf_cache"];
NSString *path = [pdfFolder stringByAppendingPathComponent:name];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager removeItemAtPath:path error:nil];
}
+ (void)offline_clear_PDFCache {
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachefolder = [paths objectAtIndex:0];
NSString *pdfFolder = [cachefolder stringByAppendingPathComponent:@"pdf_cache"];
NSArray *pdf_files = [fileManager contentsOfDirectoryAtPath:pdfFolder error:nil];
for (NSString *path in pdf_files) {
[self offline_removePDFWithName:[path lastPathComponent]];
}
}
+ (NSData *)offline_removePDF:(NSMutableDictionary *)params {
NSMutableDictionary *dic = [NSMutableDictionary dictionary];
NSInteger tearsheetsId = [[params objectForKey:@"tearsheetsId"] integerValue];
NSString *user = [params objectForKey:@"user"];
NSString *create_user = [iSalesDB jk_queryText:[NSString stringWithFormat:@"select create_user from offline_pdf where _id = %ld;",(long)tearsheetsId]]; // tearsheets_id ---> _id
if (![create_user isEqualToString:user]) {
[dic setObject:[NSNumber numberWithInt:RESULT_FALSE] forKey:@"result"];
[dic setObject:@"Regular Mode" forKey:@"mode"];
[dic setObject:@"Only Delete Your Owns" forKey:@"err_msg"];
return [RAConvertor dict2data:dic];
}
NSString *is_local_sql = [NSString stringWithFormat:@"select is_local,pdf_path from offline_pdf where _id = %ld and create_user = '%@';",(long)tearsheetsId,[self translateSingleQuote:user]];
__block int is_local = 0;
__block NSString *path = @"";
[iSalesDB jk_query:is_local_sql completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
is_local = sqlite3_column_int(stmt, 0);
path = [self textAtColumn:1 statement:stmt];
}];
NSString *sql = [NSString stringWithFormat:@"update offline_pdf set is_delete = 1 where _id = %ld and create_user = '%@';",(long)tearsheetsId,[self translateSingleQuote:user]];
if (is_local == 1) {
sql = [NSString stringWithFormat:@"delete from offline_pdf where _id = %ld and create_user = '%@';",(long)tearsheetsId,[self translateSingleQuote:user]];
// 删除文件
[self offline_removePDFWithName:path];
}
int result = [iSalesDB execSql:sql];
[dic setObject:[NSNumber numberWithInt:result] forKey:@"result"];
[dic setObject:@"Regular Mode" forKey:@"mode"];
return [RAConvertor dict2data:dic];
}
+(NSMutableDictionary*) preparePortfolio:(NSString* ) serial params:(NSMutableDictionary*) add_params
{
// assert(add_params[@"contact_id"]!=nil);
assert(add_params[@"user"]!=nil);
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
NSString* ver = [defaults stringForKey:@"OfflineVer"] ;
NSString* where=@"1=1";
if (ver!=nil) {
where=@"is_dirty=1";
}
NSString *sqlQuery =[NSString stringWithFormat:@"select _id,product_id,name,description,item_id,fashion_id,ifnull(available_qty,'null'),ifnull(percentage,'null'),ifnull(percent,'null'),ifnull(sheet_price,'null'),sheet_discount,img,line_note,is_delete,createtime,modify_time from offline_portfolio where %@",where];
[ret setValue:[NSNumber numberWithInt:AP_USER_NOT_AUTH ] forKey:@"result"];
// AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
sqlite3 *db = [iSalesDB get_db];
NSDictionary *queryDic = [iSalesDB jk_query:sqlQuery db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSMutableDictionary *item = [NSMutableDictionary dictionary];
NSInteger _id = sqlite3_column_int(stmt, 0);
NSInteger product_id = sqlite3_column_int(stmt, 1);
NSString *name = [self textAtColumn:2 statement:stmt];
NSString *desc = [self textAtColumn:3 statement:stmt];
NSInteger item_id = sqlite3_column_int(stmt, 4);
NSInteger fashion_id = sqlite3_column_int(stmt, 5);
NSInteger qty = sqlite3_column_int(stmt, 6);
NSInteger is_percent = sqlite3_column_int(stmt, 7);
double percent = sqlite3_column_double(stmt, 8);
double price = sqlite3_column_double(stmt, 9);
double discount = sqlite3_column_double(stmt, 10);
NSString *img = [self textAtColumn:11 statement:stmt];
NSString *line_note = [self textAtColumn:12 statement:stmt];
NSInteger is_delete = sqlite3_column_int(stmt, 13);
NSString *create_time = [self textAtColumn:14 statement:stmt];
NSString *modify_time = [self textAtColumn:15 statement:stmt];
NSString *price_null = [self textAtColumn:9 statement:stmt];
if ([price_null isEqualToString:@"null"]) {
price = [[self get_model_default_price:add_params[@"contact_id"] user:add_params[@"user"] product_id:nil item_id:@(item_id) db:db] doubleValue];
}
NSString *qty_null = [self textAtColumn:6 statement:stmt];
NSString *is_percent_null = [self textAtColumn:7 statement:stmt];
NSString *percent_null = [self textAtColumn:8 statement:stmt];
[item setValue:[NSNumber numberWithInteger:_id] forKey:@"_id"];
[item setValue:[NSNumber numberWithInteger:product_id] forKey:@"product_id"];
[item setValue:[NSNumber numberWithInteger:item_id] forKey:@"item_id"];
[item setValue:[NSNumber numberWithInteger:fashion_id] forKey:@"fashion_id"];
[item setValue:[NSNumber numberWithInteger:is_delete] forKey:@"is_delete"];
if ([qty_null isEqualToString:@"null"]) {
// [item setValue:@"null" forKey:@"available_qty"];
} else {
[item setValue:[NSNumber numberWithInteger:qty] forKey:@"available_qty"];
}
if ([is_percent_null isEqualToString:@"null"]) {
// [item setValue:@"null" forKey:@"percentage"];
} else {
[item setValue:[NSNumber numberWithInteger:is_percent] forKey:@"percentage"];
}
if ([percent_null isEqualToString:@"null"]) {
// [item setValue:@"null" forKey:@"percent"];
} else {
[item setValue:[NSNumber numberWithDouble:percent] forKey:@"percent"];
}
[item setValue:[NSNumber numberWithDouble:price] forKey:@"sheet_price"];
[item setValue:[NSNumber numberWithDouble:discount] forKey:@"sheet_discount"];
[item setValue:name forKey:@"name"];
[item setValue:desc forKey:@"description"];
[item setValue:img forKey:@"img"];
[item setValue:line_note forKey:@"line_note"];
[item setValue:create_time forKey:@"createtime"];
[item setValue:modify_time forKey:@"modifytime"];
[ret setObject:item forKey:[NSString stringWithFormat:@"item_%ld",(*count)++]];
[ret setObject:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"];
[ret setObject:[NSNumber numberWithInteger:*count] forKey:@"count"];
}];
[iSalesDB close_db:db];
if ([[queryDic objectForKey:@"result"] integerValue] == RESULT_FALSE) {
[ret setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"];
}
return ret;
}
+(NSMutableDictionary*) preparePDF:(NSString* ) serial
{
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
NSString* ver = [defaults stringForKey:@"OfflineVer"] ;
NSString* where=@"1=1";
if (ver!=nil) {
where=@"is_dirty=1";
}
NSString *sqlQuery =[NSString stringWithFormat:@"select _id,ifnull(tearsheets_id,'null'),pdf_path,create_user,tear_note,tear_name,model_info,createtime,modify_time,configureParams,off_params,is_delete,is_local from offline_pdf where %@",where];
[ret setValue:[NSNumber numberWithInt:AP_USER_NOT_AUTH ] forKey:@"result"];
[iSalesDB jk_query:sqlQuery completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
NSMutableDictionary *item = [NSMutableDictionary dictionary];
NSInteger _id = sqlite3_column_int(stmt, 0);
NSInteger tearsheets_id = sqlite3_column_int(stmt, 1);
NSString *pdf_path = [self textAtColumn:2 statement:stmt];
NSString *create_user = [self textAtColumn:3 statement:stmt];
NSString *tear_note = [self textAtColumn:4 statement:stmt];
NSString *tear_name = [self textAtColumn:5 statement:stmt];
NSString *model_info = [self textAtColumn:6 statement:stmt];
NSString *createtime = [self textAtColumn:7 statement:stmt];
NSString *modifytime = [self textAtColumn:8 statement:stmt];
NSString *urlParams = [self textAtColumn:9 statement:stmt];
NSString *off_params = [self textAtColumn:10 statement:stmt];
NSString *uuid = [NSUUID UUID].UUIDString;
int is_delete = sqlite3_column_int(stmt, 11);
NSString *tearsheet_id_null = [self textAtColumn:1 statement:stmt];
int is_local = sqlite3_column_int(stmt, 12);
[item setObject:[NSNumber numberWithInteger:_id] forKey:@"_id"];
if (![tearsheet_id_null isEqualToString:@"null"]) {
[item setObject:[NSNumber numberWithInteger:tearsheets_id] forKey:@"tearsheets_id"];
}
[item setObject:pdf_path forKey:@"pdf_path"];
[item setObject:create_user forKey:@"create_user"];
[item setObject:tear_note forKey:@"tear_note"];
[item setObject:tear_name forKey:@"tear_name"];
[item setObject:model_info forKey:@"model_info"];
[item setObject:createtime forKey:@"createtime"];
[item setObject:modifytime forKey:@"modifytime"];
[item setObject:urlParams forKey:@"urlParams"];
[item setObject:off_params forKey:@"off_params"];
[item setObject:uuid forKey:@"pdf_token"];
[item setObject:[NSNumber numberWithInt:is_delete] forKey:@"is_delete"];
NSDictionary *off_Params_dic = [RAConvertor string2dict:off_params];
[item setObject:[off_Params_dic objectForKey:@"product_ids"] forKey:@"product_ids"];
if (!is_local && !is_delete) { // 已经同步过的,并且没被删除,就不需要上传。
} else {
[ret setObject:item forKey:[NSString stringWithFormat:@"item_%ld",(*count)++]];
}
[ret setObject:[NSNumber numberWithInteger:RESULT_TRUE] forKey:@"result"];
[ret setObject:[NSNumber numberWithInteger:*count] forKey:@"count"];
} failure:^(NSMutableDictionary *container, NSString *err_msg) {
[ret setObject:[NSNumber numberWithInteger:RESULT_FALSE] forKey:@"result"];
}];
return ret;
}
#pragma mark 2020
+(void) offline_contactlist :(NSMutableDictionary *) params completionHandler:(resultHandler)result
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sqlite3 *db = [iSalesDB get_db];
NSString* contactType = [params valueForKey:@"contactType"]; // contactType = "Sales_Order_Customer";
if (contactType) {
contactType = [NSString stringWithFormat:@"%@ = 1",contactType];
} else {
contactType = @"1 = 1";
}
NSString* keyword = [params valueForKey:@"keyword"]; // search 时才有
DebugLog(@"offline contact list keyword: %@",keyword);
// advanced search
NSString* contact_name = [params valueForKey:@"contact_name"]; // "contact_name"
if (contact_name) {
contact_name = [contact_name stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
contact_name = [NSString stringWithFormat:@"and lower(contact_name) like '%%%@%%'",contact_name.lowercaseString];
} else {
contact_name = @"";
}
NSString* customer_phone = [params valueForKey:@"customer_phone"]; // "customer_phone"
if (customer_phone) {
customer_phone = [customer_phone stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
customer_phone = [NSString stringWithFormat:@"and lower(decrypt(phone)) like '%%%@%%'",customer_phone.lowercaseString];
} else {
customer_phone = @"";
}
NSString* customer_fax = [params valueForKey:@"customer_fax"]; // "customer_fax"
if (customer_fax) {
customer_fax = [customer_fax stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
customer_fax = [NSString stringWithFormat:@"and lower(fax) like '%%%@%%'",customer_fax.lowercaseString];
} else {
customer_fax = @"";
}
NSString* customer_zipcode = [params valueForKey:@"customer_zipcode"]; // "customer_zipcode"
if (customer_zipcode) {
customer_zipcode = [customer_zipcode stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
customer_zipcode = [NSString stringWithFormat:@"and lower(zipcode) like '%%%@%%'",customer_zipcode.lowercaseString];
} else {
customer_zipcode = @"";
}
NSString* customer_sales_rep = [params valueForKey:@"customer_sales_rep"]; // "customer_sales_rep"
if (customer_sales_rep) {
customer_zipcode = [customer_zipcode stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
customer_sales_rep = [NSString stringWithFormat:@"and lower(sales_rep) like '%%%@%%'",customer_sales_rep.lowercaseString];
} else {
customer_sales_rep = @"";
}
NSString* customer_state = [params valueForKey:@"customer_state"]; // "customer_state"
if (customer_state) {
customer_state = [customer_state stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
customer_state = [NSString stringWithFormat:@"and lower(state) like '%%%@%%'",customer_state.lowercaseString];
} else {
customer_state = @"";
}
NSString* customer_name = [params valueForKey:@"customer_name"]; // "customer_name" 也就是company name
if (customer_name) {
customer_name = [customer_name stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
customer_name = [NSString stringWithFormat:@"and lower(decrypt(company_name)) like '%%%@%%'",customer_name.lowercaseString];
} else {
customer_name = @"";
}
NSString* customer_country = [params valueForKey:@"customer_country"]; // "customer_country"
if (customer_country) {
customer_country = [customer_country stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
customer_country = [NSString stringWithFormat:@"and lower(country) like '%%%@%%'",customer_country.lowercaseString];
} else {
customer_country = @"";
}
NSString* customer_cid = [params valueForKey:@"customer_cid"]; // "customer_cid"
if (customer_cid) {
customer_cid = [customer_cid stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
customer_cid = [NSString stringWithFormat:@"and lower(contact_id) like '%%%@%%'",customer_cid.lowercaseString];
} else {
customer_cid = @"";
}
NSString* customer_city = [params valueForKey:@"customer_city"]; // "customer_city"
if (customer_city) {
customer_city = [customer_city stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
customer_city = [NSString stringWithFormat:@"and lower(city) like '%%%@%%'",customer_city.lowercaseString];
} else {
customer_city = @"";
}
NSString* customer_address = [params valueForKey:@"customer_address"]; // "customer_address"
if (customer_address) {
customer_address = [customer_address stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
customer_address = [NSString stringWithFormat:@"and lower(decrypt(addr)) like '%%%@%%'",customer_address.lowercaseString];
} else {
customer_address = @"";
}
NSString* customer_email = [params valueForKey:@"customer_email"]; // "customer_email"
if (customer_email) {
customer_email = [customer_email stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
customer_email = [NSString stringWithFormat:@"and lower(email) like '%%%@%%'",customer_email.lowercaseString];
} else {
customer_email = @"";
}
NSString *price_name = [params valueForKey:@"price_name"];
if (price_name) {
if ([price_name containsString:@","]) {
// 首先从 price表中查处name
NSArray *pArray = [price_name componentsSeparatedByString:@","];
NSMutableString *mutablePStr = [NSMutableString stringWithFormat:@"SELECT name FROM price where type = %@ ",pArray[0]];
for (int i = 1;i < pArray.count;i++) {
NSString *p = pArray[i];
[mutablePStr appendFormat:@" or type = %@ ",p];
}
[mutablePStr appendString:@";"];
__block NSMutableArray *price_name_array = [NSMutableArray array];
[iSalesDB jk_query:mutablePStr db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
char *name = (char *)sqlite3_column_text(stmt, 0);
if (!name)
name = "";
[price_name_array addObject:[self translateSingleQuote:[NSString stringWithUTF8String:name]]];
}];
// 再根据name 拼sql
NSMutableString *mutable_price_name = [NSMutableString string];
[mutable_price_name appendFormat:@" and( price_type like '%%%@%%' ",price_name_array[0]];
for (int i = 1; i < price_name_array.count; i++) {
[mutable_price_name appendFormat:@" or price_type like '%%%@%%' ",price_name_array[i]];
}
[mutable_price_name appendString:@")"];
price_name = mutable_price_name;
} else {
price_name = [price_name stringByReplacingOccurrencesOfString:@" " withString:@""];
if ([price_name isEqualToString:@""]) {
price_name = @"";
} else {
__block NSString *price;
price_name = [self translateSingleQuote:price_name];
[iSalesDB jk_query:[NSString stringWithFormat:@"SELECT name FROM price where type = %@ ;",price_name] db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
char *p = (char *)sqlite3_column_text(stmt, 0);
if (p == NULL) {
p = "";
}
price = [NSString stringWithUTF8String:p];
}];
if ([price isEqualToString:@""]) {
price_name = @"";
} else {
price = [self translateSingleQuote:price];
price_name = [NSString stringWithFormat:@"and price_type like '%%%@%%'",price];
}
}
}
} else {
price_name = @"";
}
int limit = [[params valueForKey:@"limit"] intValue];
int offset = [[params valueForKey:@"offset"] intValue];
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSString *where = [NSString stringWithFormat:@" %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ %@ and is_active=1 ",contactType,contact_name,customer_phone,customer_fax,customer_zipcode,customer_sales_rep,customer_state,customer_name,customer_country,customer_cid,customer_city,customer_address,customer_email,price_name];
NSString *sql = [NSString stringWithFormat:@"select editable,company_name,country,addr,zipcode,state,city,contact_name,phone,contact_id,addr_1,addr_2,addr_3,addr_4,first_name,last_name,fax,email from offline_contact where %@ order by decrypt(company_name) limit %d offset %d",where,limit,offset];
// int result= [iSalesDB AddExFunction:db];
int count =0;
NSString *sqlQuery = nil;
if(keyword.length==0)
{
// sqlQuery=[NSString stringWithFormat:@"select editable,company_name,country,addr,zipcode,state,city,contact_name,phone,contact_id,addr_1,addr_2,addr_3,addr_4,first_name,last_name,fax,email from offline_contact where %@=1 order by decrypt(company_name) limit %d offset %d",contactType , limit, offset];
// count=[iSalesDB get_recordcount:db table:@"offline_contact" where:[NSString stringWithFormat:@"%@='1",contactType]];
sqlQuery = sql;
count = [iSalesDB get_recordcount:db table:@"offline_contact" where:where];
}
else
{
// NSString* encrypt_keyword= [AESCrypt fastencrypt:keyword];
keyword = keyword.lowercaseString;
keyword = [keyword stringByReplacingOccurrencesOfString:@"'" withString:@"''"];
sqlQuery=[NSString stringWithFormat:@"select editable,company_name,country,addr,zipcode,state,city,contact_name,phone,contact_id,addr_1,addr_2,addr_3,addr_4,first_name,last_name,fax,email from offline_contact where %@ and (lower(contact_id ) like'%%%@%%' or lower(decrypt(company_name)) like '%%%@%%' or lower(decrypt(phone)) like '%%%@%%' or lower(decrypt(addr)) like '%%%@%%') and is_active=1 order by decrypt(company_name) limit %d offset %d",contactType , keyword,keyword,keyword,keyword,limit, offset];
count=[iSalesDB get_recordcount:db table:@"offline_contact" where:[NSString stringWithFormat:@"%@=1 and (lower(contact_id ) like'%@' or lower(company_name) like'%@') and is_active=1",contactType,keyword,keyword]];
}
DebugLog(@"offline_contactlist sql:%@",sqlQuery);
sqlite3_stmt * statement;
[ret setValue:@"2" forKey:@"result"];
[ret setValue:[NSNumber numberWithInt:count ] forKey:@"total"];
// sqlQuery = @"select editable,decrypt(company_name),country,addr,zipcode,state,city,contact_name,phone,contact_id,addr_1,addr_2,addr_3,addr_4,first_name,last_name,fax,email from offline_contact where Sales_Order_Customer = 1 and is_active=1 order by decrypt(company_name) limit 25 offset 0";
int i = 0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
[ret setValue:[NSNumber numberWithInt:AP_USER_AUTH ] forKey:@"result"];
NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
int editable = sqlite3_column_int(statement, 0);
char *company_name = (char*)sqlite3_column_text(statement, 1);
NSString *nscompany_name =nil;
if(company_name==nil)
nscompany_name=@"";
else
nscompany_name= [[NSString alloc]initWithUTF8String:company_name] ;
char *country = (char*)sqlite3_column_text(statement, 2);
if(country==nil)
country="";
NSString *nscountry= [[NSString alloc]initWithUTF8String:country];
// char *addr = (char*)sqlite3_column_text(statement, 3);
// if(addr==nil)
// addr="";
// NSString *nsaddr= [[NSString alloc]initWithUTF8String:addr];
char *zipcode = (char*)sqlite3_column_text(statement, 4);
if(zipcode==nil)
zipcode="";
NSString *nszipcode= [[NSString alloc]initWithUTF8String:zipcode];
char *state = (char*)sqlite3_column_text(statement, 5);
if(state==nil)
state="";
NSString *nsstate= [[NSString alloc]initWithUTF8String:state];
char *city = (char*)sqlite3_column_text(statement, 6);
if(city==nil)
city="";
NSString *nscity= [[NSString alloc]initWithUTF8String:city];
// char *contact_name = (char*)sqlite3_column_text(statement, 7);
// NSString *nscontact_name = nil;
// if(contact_name==nil)
// nscontact_name=@"";
// else
// nscontact_name= [[NSString alloc]initWithUTF8String:contact_name];
char *phone = (char*)sqlite3_column_text(statement, 8);
NSString *nsphone = nil;
if(phone==nil)
nsphone=@"";
else
nsphone= [[NSString alloc]initWithUTF8String:phone];
char *contact_id = (char*)sqlite3_column_text(statement, 9);
if(contact_id==nil)
contact_id="";
NSString *nscontact_id= [[NSString alloc]initWithUTF8String:contact_id];
char *addr_1 = (char*)sqlite3_column_text(statement, 10);
if(addr_1==nil)
addr_1="";
NSString *nsaddr_1= [[NSString alloc]initWithUTF8String:addr_1];
char *addr_2 = (char*)sqlite3_column_text(statement, 11);
if(addr_2==nil)
addr_2="";
NSString *nsaddr_2= [[NSString alloc]initWithUTF8String:addr_2];
char *addr_3 = (char*)sqlite3_column_text(statement, 12);
if(addr_3==nil)
addr_3="";
NSString *nsaddr_3= [[NSString alloc]initWithUTF8String:addr_3];
char *addr_4 = (char*)sqlite3_column_text(statement, 13);
if(addr_4==nil)
addr_4="";
NSString *nsaddr_4= [[NSString alloc]initWithUTF8String:addr_4];
char *first_name = (char*)sqlite3_column_text(statement, 14);
if(first_name==nil)
first_name="";
NSString *nsfirst_name= [[NSString alloc]initWithUTF8String:first_name];
char *last_name = (char*)sqlite3_column_text(statement, 15);
if(last_name==nil)
last_name="";
NSString *nslast_name= [[NSString alloc]initWithUTF8String:last_name];
char *fax = (char*)sqlite3_column_text(statement, 16);
NSString *nsfax = nil;
if(fax==nil)
nsfax=@"";
else
{
nsfax= [[NSString alloc]initWithUTF8String:fax];
if(nsfax.length>0)
nsfax= [NSString stringWithFormat:@"FAX:%@",nsfax];
}
char *email = (char*)sqlite3_column_text(statement, 17);
NSString *nsemail = nil;
if(email==nil)
nsemail=@"";
else
{
nsemail= [[NSString alloc]initWithUTF8String:email];
if(nsemail.length>0)
nsemail= [NSString stringWithFormat:@"EMAIL:%@",nsemail];
// nsemail= [NSString stringWithFormat:@"EMAIL:%@",[[NSString alloc]initWithUTF8String:email]];
}
NSMutableArray* arr_name= [[NSMutableArray alloc] init];
[arr_name addObject:nsfirst_name];
[arr_name addObject:nslast_name];
NSString *nscontact_name=[RAConvertor arr2string:arr_name separator:@" " trim:true];
NSMutableArray* arr_addr = [[NSMutableArray alloc] init];
{
// decrypt
nscompany_name=[AESCrypt fastdecrypt:nscompany_name];
nscompany_name=[NSString stringWithFormat:@"%@",nscompany_name];
nsphone=[AESCrypt fastdecrypt:nsphone];
nsphone=[NSString stringWithFormat:@"TEL:%@",nsphone];
nsaddr_1=[AESCrypt fastdecrypt:nsaddr_1];
// nsaddr_1=[NSString stringWithFormat:@"TEL:%@",nsphone];
}
[arr_addr addObject:nscompany_name];
[arr_addr addObject:nscontact_name];
[arr_addr addObject:@"
"];
[arr_addr addObject:nsaddr_1];
[arr_addr addObject:nsaddr_2];
[arr_addr addObject:nsaddr_3];
[arr_addr addObject:nsaddr_4];
//[arr_addr addObject:nsaddr];
[arr_addr addObject:nszipcode];
[arr_addr addObject:nscity];
[arr_addr addObject:nsstate];
[arr_addr addObject:nscountry];
[arr_addr addObject:@"
"];
[arr_addr addObject:nsphone];
[arr_addr addObject:nsfax];
[arr_addr addObject:nsemail];
NSString * name = [RAConvertor arr2string:arr_addr separator:@", " trim:true];
name=[name stringByReplacingOccurrencesOfString:@",
," withString:@"
"];
[item setValue:name forKey:@"name"];
[item setValue:nscontact_id forKey:@"contact_id"];
[item setValue:editable==1?@"true":@"false" forKey:@"can_update"];
[ret setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]];
i++;
}
sqlite3_finalize(statement);
}
[iSalesDB close_db:db];
#ifdef DEBUG
DebugLog(@"data string: %@",[RAConvertor dict2string:ret] );
#endif
dispatch_async(dispatch_get_main_queue(), ^{
UIApplication * app = [UIApplication sharedApplication];
AppDelegate *appDelegate = (AppDelegate *)[app delegate];
[ret setValue:appDelegate.mode forKey:@"mode"];
[ret setValue:[NSNumber numberWithInt:i ] forKey:@"count"];
result(ret);
});
return ;
});
}
+ (void)categoryList:(NSMutableDictionary *)params limited:(BOOL)limited completionHandler:(resultHandler)result
{
AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
NSString* order_code= appDelegate.order_code;
NSString* user = appDelegate.user;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString* category = [params valueForKey:@"category"];
if (!category || [category isEqualToString:@""]) {
category = @"%";
}
category = [self translateSingleQuote:category];
int limit = [[params valueForKey:@"limit"] intValue];
int offset = [[params valueForKey:@"offset"] intValue];
// NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSString *limit_str = @"";
if (limited) {
limit_str = [NSString stringWithFormat:@"limit %d offset %d ",limit,offset];
}
NSMutableDictionary *ret = [self dictionaryFileName:@"category.json"];
NSMutableDictionary *filter = [[ret objectForKey:@"filter"] mutableCopy];
sqlite3 *db = [iSalesDB get_db];
// [iSalesDB AddExFunction:db];
int count;
NSString *where = [NSString stringWithFormat:@"category like'%%#%@#%%' and is_active = 1",category];
NSString *sqlQuery = [NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete,m.category,m.more_color from product m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id where m.category like'%%#%@#%%' and m.is_active = 1 order by m.name %@ ;",order_code, category,limit_str];
double price_min = 0;
double price_max = 0;
if ([params.allKeys containsObject:@"alert"]) {
// alert
[self check:params[@"alert"] valueKey:@"alert" inDictionary:filter];
NSString *alert = params[@"alert"];
if ([alert isEqualToString:@"Display All"]) {
alert = [NSString stringWithFormat:@""];
} else {
alert = [self translateSingleQuote:alert];
alert = [NSString stringWithFormat:@"and alert = '%@'",alert];
}
// available
[self check:params[@"available"] valueKey:@"availability" inDictionary:filter];
NSString *available = params[@"available"];
NSString *available_condition;
if ([available isEqualToString:@"Display All"]) {
available_condition = @"";
} else if ([available isEqualToString:@"Available Now"]) {
available_condition = @"and availability > 0";
} else {
available_condition = @"and availability == 0";
}
// best seller
[self check:params[@"bestseller"] valueKey:@"best_seller" inDictionary:filter];
NSString *best_seller = @"";
NSString *order_best_seller = @"m.name asc";
if ([params[@"bestseller"] isEqualToString:@"Yes"]) {
best_seller = @"and best_seller > 0";
order_best_seller = @"m.best_seller desc,m.name asc";
}
// price
[self check:params[@"price"] valueKey:@"price" inDictionary:filter];
NSString *price = params[@"price"];
price_min = 0;
price_max = MAXFLOAT;
if (user && price != nil) {
NSArray *priceTypeArray = [self get_contact_default_price_type:nil user:user db:db];
NSMutableString *priceName = [NSMutableString string];
for (int i = 0; i < priceTypeArray.count; i++) {
NSString *pricetype = priceTypeArray[i];
pricetype = [self translateSingleQuote:pricetype];
if (i == 0) {
[priceName appendFormat:@"'%@'",pricetype];
} else {
[priceName appendFormat:@",'%@'",pricetype];
}
}
if ([price isEqualToString:@"Display All"]) {
price = [NSString stringWithFormat:@""];
} else if([price containsString:@"+"]){
price = [price stringByReplacingOccurrencesOfString:@"+" withString:@""];
price_min = [price doubleValue];
price = [NSString stringWithFormat:@"and item_id in (select DISTINCT item_id from model_price where price_name in (%@) and cast(decrypt(price) as double) >= %.2lf and cast(decrypt(price) as double) <= %.2lf)",priceName,price_min,price_max];
} else {
NSArray *priceArray = [price componentsSeparatedByString:@"-"];
price_min = [[priceArray objectAtIndex:0] doubleValue];
price_max = [[priceArray objectAtIndex:1] doubleValue];
price = [NSString stringWithFormat:@"and item_id in (select DISTINCT item_id from model_price where price_name in (%@) and cast(decrypt(price) as double) >= %.2lf and cast(decrypt(price) as double) <= %.2lf)",priceName,price_min,price_max];
}
} else {
price = @"";
}
// sold_by_qty : Sold in quantities of %@
[self check:params[@"sold_by_qty"] valueKey:@"qty" inDictionary:filter];
NSString *qty = params[@"sold_by_qty"];
if ([qty isEqualToString:@"Display All"]) {
qty = @"";
} else {
qty = [self translateSingleQuote:qty];
qty = [NSString stringWithFormat:@"and model_set = 'Sold in quantities of %@'",qty];
}
// cate
// category = [self translateSingleQuote:category];
// NSString *cateWhere = [NSString stringWithFormat:@"category like'%%#%@#%%'",category];
// cate mutiple selection
NSString *category_id = params[@"category"];
NSMutableArray *cate_id_array = nil;
NSMutableString *cateWhere = [NSMutableString string];
if ([category_id isEqualToString:@""] || !category_id) {
[cateWhere appendString:@"1 = 1"];
} else {
if ([category_id containsString:@","]) {
cate_id_array = [[category_id componentsSeparatedByString:@","] mutableCopy];
} else {
cate_id_array = [@[category_id] mutableCopy];
}
[cateWhere appendString:@"("];
for (int i = 0; i < cate_id_array.count; i++) {
if (i == 0) {
[cateWhere appendFormat:@"category like'%%#%@#%%'",cate_id_array[i]];
} else {
[cateWhere appendFormat:@" or category like'%%#%@#%%'",cate_id_array[i]];
}
}
[cateWhere appendString:@")"];
}
// where bestseller > 0 order by bestseller desc
// sql query: alert availability(int) best_seller(int) price qty
sqlQuery = [NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete,m.category,m.more_color from (select name,description,product_id,closeout,best_seller,category,more_color from product where %@ %@ %@ %@ %@ %@ and is_active = 1) m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id order by %@ %@;",cateWhere,best_seller,alert,available_condition,qty,price,order_code,order_best_seller,limit_str];
where =[NSString stringWithFormat:@"%@ %@ %@ %@ %@ %@ and is_active = 1",cateWhere,best_seller,alert,available_condition,qty,price];
}
DebugLog(@"offline category where: %@",where);
count = [iSalesDB get_recordcount:db table:@"product" where:where];
if (!user) {
[filter setValue:@{@"count" : @(0)} forKey:@"price"];
}
[ret setValue:filter forKey:@"filter"];
DebugLog(@"offline_category sql:%@",sqlQuery);
sqlite3_stmt * statement;
[ret setValue:@"2" forKey:@"result"];
[ret setValue:[NSString stringWithFormat:@"%d",count] forKey:@"item_total_count"];
NSMutableDictionary* items = [[NSMutableDictionary alloc] init];
// int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
int i=0;
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
char *name = (char*)sqlite3_column_text(statement, 0);
if(name==nil)
name="";
NSString *nsname = [[NSString alloc]initWithUTF8String:name];
char *description = (char*)sqlite3_column_text(statement, 1);
if(description==nil)
description="";
NSString *nsdescription = [[NSString alloc]initWithUTF8String:description];
int product_id = sqlite3_column_int(statement, 2);
int wid = sqlite3_column_int(statement, 3);
int closeout = sqlite3_column_int(statement, 4);
int cid = sqlite3_column_int(statement, 5);
int wisdelete = sqlite3_column_int(statement, 6);
NSString *categoryStr = [self textAtColumn:7 statement:statement];
int more_color = sqlite3_column_int(statement, 8);
// Defaul Category ID
__block NSString *categoryID = nil;
NSString *defaultCateSQL = [NSString stringWithFormat:@"select default_category from product where product_id=%d;",product_id];
[iSalesDB jk_query:defaultCateSQL db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
char *default_category = (char*)sqlite3_column_text(stmt, 0);
if(default_category==nil)
default_category="";
NSString *nsdefault_category = [[NSString alloc]initWithUTF8String:default_category];
nsdefault_category=[nsdefault_category stringByReplacingOccurrencesOfString:@"%#" withString:@""];
nsdefault_category=[nsdefault_category stringByReplacingOccurrencesOfString:@"#%" withString:@""];
categoryID = nsdefault_category;
}];
if (!categoryID.length) {
NSString *cateIDs = params[@"category"];
NSArray *requestCategoryArr = [cateIDs componentsSeparatedByString:@","];
NSArray *itemCategoryArr = [categoryStr componentsSeparatedByString:@","];
for (NSString *cateID in requestCategoryArr) {
BOOL needBreak = NO;
for (NSString *itemCateIDBox in itemCategoryArr) {
if (itemCateIDBox.length > 4) {
NSString *itemCategoryID = [itemCateIDBox substringFromIndex:2];
itemCategoryID = [itemCategoryID substringToIndex:itemCategoryID.length - 2];
if ([itemCategoryID isEqualToString:cateID]) {
needBreak = YES;
categoryID = itemCategoryID;
break;
}
}
}
if (needBreak) {
break;
}
}
}
NSMutableDictionary* imgjson=[self category_img:product_id db:db];
if(wid !=0 && wisdelete != 1)
[item setValue:@"true" forKey:@"wish_exists"];
else
[item setValue:@"false" forKey:@"wish_exists"];
if(closeout==0)
[item setValue:@"false" forKey:@"is_closeout"];
else
[item setValue:@"true" forKey:@"is_closeout"];
if(cid==0)
[item setValue:@"false" forKey:@"cart_exists"];
else
[item setValue:@"true" forKey:@"cart_exists"];
if (more_color == 0) {
[item setObject:@(false) forKey:@"more_color"];
} else if (more_color == 1) {
[item setObject:@(true) forKey:@"more_color"];
}
[item addEntriesFromDictionary:imgjson];
// [item setValue:nsurl forKey:@"img"];
[item setValue:nsname forKey:@"name"];
[item setValue:nsdescription forKey:@"description"];
if (categoryID) {
[item setValue:categoryID forKey:@"item_category_id"];
}
[item setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"];
[items setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]];
i++;
}
[items setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"];
[ret setObject:items forKey:@"items"];
sqlite3_finalize(statement);
} else {
DebugLog(@"nothing...");
}
DebugLog(@"count:%d",count);
[iSalesDB close_db:db];
#ifdef DEBUG
DebugLog(@"data string: %@",[RAConvertor dict2string:ret] );
#endif
dispatch_async(dispatch_get_main_queue(), ^{
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
// [ret setValue:appDelegate.mode forKey:@"mode"];
// [ret setValue:[NSNumber numberWithInt:1 ] forKey:@"count"];
result(ret);
});
});
// NSString* orderCode = [params valueForKey:@"orderCode"];
}
+(void) offline_category :(NSMutableDictionary *) params completionHandler:(resultHandler)result
{
[self categoryList:params limited:YES completionHandler:result];
}
+ (void) search:(NSMutableDictionary *)params limited:(BOOL)limited completionHandler:(resultHandler)result
{
UIApplication * app = [UIApplication sharedApplication];
AppDelegate *appDelegate = (AppDelegate *)[app delegate];
NSString* order_code = appDelegate.order_code;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString* keyword = [params valueForKey:@"keyword"];
keyword=keyword.lowercaseString;
bool exactMatch = [[params valueForKey:@"exactMatch"] boolValue]; // search by factory code
int limit = [[params valueForKey:@"limit"] intValue];
int offset = [[params valueForKey:@"offset"] intValue];
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSString *limit_str = @"";
if (limited) {
limit_str = [NSString stringWithFormat:@"limit %d offset %d ",limit,offset];
}
sqlite3 *db = [iSalesDB get_db];
int count = [iSalesDB get_recordcount:db table:@"product" where:[NSString stringWithFormat:@"(lower(name) like'%%%@%%' or lower(description) like'%%%@%%') and is_active = 1",keyword,keyword]];
NSString *sqlQuery = nil;
if(exactMatch )
sqlQuery=[NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete,m.more_color from product m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id where lower(name) like'%@%%' and m.is_active = 1 order by m.name %@;",order_code, keyword,limit_str]; // select m.name,m.description,m.product_id,w._id,m.closeout from model m left join wishlist w on m.product_id=w.product_id where lower(name) like'%@%%' order by m.name limit %d offset %d ;
else
sqlQuery=[NSString stringWithFormat:@"select m.name,m.description,m.product_id,w._id,m.closeout,c._id,w.is_delete,m.more_color from product m left join wishlist w on m.product_id=w.product_id left join (select _id,product_id from offline_cart where so_no='%@') c on c.product_id=m.product_id where (lower(name) like'%%%@%%' or lower(description) like'%%%@%%' or lower(made_in) like '%%%@%%' or lower(material) like '%%%@%%' or lower(packaging) like '%%%@%%') and m.is_active = 1 order by m.name %@ ;",order_code, keyword,keyword,keyword,keyword,keyword,limit_str];// select m.name,m.description,m.product_id,w._id,m.closeout from model m left join wishlist w on m.product_id=w.product_id where lower(name) like'%%%@%%' or
DebugLog(@"offline_search sql:%@",sqlQuery);
sqlite3_stmt * statement;
[ret setValue:@"2" forKey:@"result"];
[ret setValue:[NSString stringWithFormat:@"%d",count] forKey:@"item_total_count"];
NSMutableDictionary* items = [[NSMutableDictionary alloc] init];
// int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
int i=0;
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
// char *name = (char*)sqlite3_column_text(statement, 1);
// NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
char *name = (char*)sqlite3_column_text(statement, 0);
NSString *nsname = [[NSString alloc]initWithUTF8String:name];
char *description = (char*)sqlite3_column_text(statement, 1);
NSString *nsdescription = [[NSString alloc]initWithUTF8String:description];
int product_id = sqlite3_column_int(statement, 2);
// char *url = (char*)sqlite3_column_text(statement, 3);
// if(url==nil)
// url="";
// NSString *nsurl = [[NSString alloc]initWithUTF8String:url];
int wid = sqlite3_column_int(statement, 3);
int closeout = sqlite3_column_int(statement, 4);
int cid = sqlite3_column_int(statement, 5);
int wisdelete = sqlite3_column_int(statement, 6);
int more_color = sqlite3_column_int(statement, 7);
NSMutableDictionary* imgjson=[self category_img:product_id db:db];
if(wid !=0 && wisdelete != 1)
[item setValue:@"true" forKey:@"wish_exists"];
else
[item setValue:@"false" forKey:@"wish_exists"];
if(closeout==0)
[item setValue:@"false" forKey:@"is_closeout"];
else
[item setValue:@"true" forKey:@"is_closeout"];
if(cid==0)
[item setValue:@"false" forKey:@"cart_exists"];
else
[item setValue:@"true" forKey:@"cart_exists"];
if (more_color == 0) {
[item setObject:@(false) forKey:@"more_color"];
} else if (more_color == 1) {
[item setObject:@(true) forKey:@"more_color"];
}
[item addEntriesFromDictionary:imgjson];
// [item setValue:nsurl forKey:@"img"];
[item setValue:nsname forKey:@"fash_name"];
[item setValue:nsdescription forKey:@"description"];
[item setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"];
[items setObject:item forKey:[NSString stringWithFormat:@"item_%d",i]];
i++;
}
[items setValue:[NSString stringWithFormat:@"%d",i] forKey:@"count"];
[ret setObject:items forKey:@"items"];
sqlite3_finalize(statement);
}
DebugLog(@"count:%d",count);
[iSalesDB close_db:db];
#ifdef DEBUG
DebugLog(@"data string: %@",[RAConvertor dict2string:ret] );
#endif
dispatch_async(dispatch_get_main_queue(), ^{
result(ret);
});
});
}
+(void) offline_search:(NSMutableDictionary *) params completionHandler:(resultHandler)result
{
[self search:params limited:YES completionHandler:result];
}
+(void) offline_commoneditor_partialrefresh :(NSMutableDictionary *) params completionHandler:(resultHandler)result
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSString* offline_command=params[@"offline_Command"];
NSMutableDictionary* ret=nil;
if([offline_command isEqualToString:@"model_NIYMAL"])
{
NSString* category = params[@"category"];
ret = [[self refresh_model_NIYMAL:category] mutableCopy];
}
dispatch_async(dispatch_get_main_queue(), ^{
result(ret);
});
});
}
+(void) offline_wishlist :(NSMutableDictionary *) params completionHandler:(resultHandler)result;
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
int sort = [[params objectForKey:@"sort"] intValue];
NSString *sort_str = @"";
switch (sort) {
case 0:{
sort_str = @"order by w.modify_time desc";
}
break;
case 1:{
sort_str = @"order by w.modify_time asc";
}
break;
case 2:{
sort_str = @"order by m.name asc";
}
break;
case 3:{
sort_str = @"order by m.name desc";
}
break;
case 4:{
sort_str = @"order by m.description asc";
}
break;
default:
break;
}
// NSString* user = appDelegate.user;
sqlite3 *db = [iSalesDB get_db];
// order by w.create_time
NSString* sqlQuery = [NSString stringWithFormat:@"select w.product_id,m.name||'\n'||m.description,w._id,w.qty from wishlist as w left join product as m on w.product_id=m.product_id where w.is_delete is NULL or w.is_delete != 1 %@ ",sort_str];
// NSString* sqlQuery = [NSString stringWithFormat:@"select m.product_id,(m.name||'\n'||m.description) as des,w._id from product as m,wishlist as w where m.product_id = w.product_id %@",sort_str];
sqlite3_stmt * statement;
NSDate *date1 = [NSDate date];
// NSDate *date2 = nil;
NSMutableDictionary* ret=[[NSMutableDictionary alloc]init];
int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
NSMutableDictionary* item=[[NSMutableDictionary alloc]init];
int product_id = sqlite3_column_double(statement, 0);
char *description = (char*)sqlite3_column_text(statement, 1);
if(description==nil)
description= "";
NSString *nsdescription= [[NSString alloc]initWithUTF8String:description];
int item_id = sqlite3_column_double(statement, 2);
NSDate *date_image = [NSDate date];
NSString *nsurl=[self model_category_img:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:product_id]] model_name:nil db:db];
printf("image : ");
[self printTimeIntervalBetween:date_image and:[NSDate date]];
// char *url = (char*)sqlite3_column_text(statement, 3);
// if(url==nil)
// url="";
// NSString *nsurl = [[NSString alloc]initWithUTF8String:url];
int qty = sqlite3_column_int(statement, 3);
item[@"cart_count"] = [NSNumber numberWithInt:qty];
item[@"product_id"]= [NSString stringWithFormat:@"%d",product_id];
item[@"item_id"]= [NSString stringWithFormat:@"%d",item_id];
item[@"description"]= nsdescription;
item[@"img"]= nsurl;
ret[[NSString stringWithFormat:@"item_%d",count]]= item;
count++;
}
printf("total time:");
[self printTimeIntervalBetween:date1 and:[NSDate date]];
ret[@"count"]= [NSNumber numberWithInt:count];
ret[@"total_count"]= [NSNumber numberWithInt:count];
// ret[@"wish_count"]= [NSNumber numberWithInt:count];
ret[@"result"]= [NSNumber numberWithInt:2];
sqlite3_finalize(statement);
}
[iSalesDB close_db:db];
dispatch_async(dispatch_get_main_queue(), ^{
UIApplication * app = [UIApplication sharedApplication];
AppDelegate *appDelegate = (AppDelegate *)[app delegate];
appDelegate.wish_count =count;
[appDelegate update_count_mark];
result(ret);
});
});
}
+(void) offline_add2wishlist :(NSMutableDictionary *) params completionHandler:(resultHandler)result
{
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSMutableDictionary* ret=[[NSMutableDictionary alloc]init];
sqlite3 *db = [iSalesDB get_db];
[iSalesDB execSql:@"BEGIN TRANSACTION" db:db];
NSString* product_id=params[@"product_id"];
NSString *item_count_str = params[@"item_count"];
NSArray* arr=[RAConvertor string2arr:product_id separator:@","];
NSArray *item_count_arr = item_count_str ? [RAConvertor string2arr:item_count_str separator:@","] : nil;
NSString* sqlQuery = [NSString stringWithFormat:@"insert into wishlist(product_id,qty) values(?,?);"];
// NSString *sql = @"";
for(int i=0;i 1) {
NSArray *arr_1 = [[self categoryIdOfProduct:product_id name:model_name] componentsSeparatedByString:@","];
// 取交集
NSMutableSet *set_0 = [NSMutableSet setWithArray:arr_0];
NSMutableSet *set_1 = [NSMutableSet setWithArray:arr_1];
[set_0 intersectSet:set_1];
if (set_0.count == 1) {
category = (NSString *)[set_0 anyObject];
} else {
if ([set_0 containsObject:default_category_id]) {
category = default_category_id;
} else {
category = (NSString *)[set_0 anyObject];
}
}
}
}
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
sqlite3 *db = [iSalesDB get_db];
// int count = [iSalesDB get_recordcount:db table:@"product" where:[NSString stringWithFormat:@"category like'#%%%@%%#'",category]];
NSString *sqlQuery = nil;
if(product_id==nil)
if(model_name==nil)
{
sqlQuery = [NSString stringWithFormat:@"select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging,ETA,item_id,seat_dimension,product_content_writing from product where upc_code = '%@' or upc_code like '%@;%%' or upc_code like '%%;%@;%%' or upc_code like '%%;%@';",upc_code,upc_code,upc_code,upc_code]; // select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging from model where name='%@';
}
else
{
sqlQuery = [NSString stringWithFormat:@"select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging,ETA,item_id,seat_dimension,product_content_writing from product where name='%@';",model_name]; // select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging from model where name='%@';
}
else
sqlQuery = [NSString stringWithFormat:@"select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging,ETA,item_id,seat_dimension,product_content_writing from product where product_id=%@;",product_id]; // select name,description,product_id,color,legcolor,availability,incoming_stock,demension,seat_height,material,box_dim,volume,weight,model_set,load_ability,default_category,fabric_content,assembling,made_in,special_remarks,stockUom,product_group,selector_field,property_field,packaging from model where product_id=%@;
sqlite3_stmt * statement;
[ret setValue:@"2" forKey:@"result"];
[ret setValue:@"3" forKey:@"detail_section_count"];
// int count=0;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
// NSMutableDictionary* item = [[NSMutableDictionary alloc] init];
char *name = (char*)sqlite3_column_text(statement, 0);
if(name==nil)
name="";
NSString *nsname = [[NSString alloc]initWithUTF8String:name];
char *description = (char*)sqlite3_column_text(statement, 1);
if(description==nil)
description="";
NSString *nsdescription = [[NSString alloc]initWithUTF8String:description];
int product_id = sqlite3_column_int(statement, 2);
char *color = (char*)sqlite3_column_text(statement, 3);
if(color==nil)
color="";
// NSString *nscolor = [[NSString alloc]initWithUTF8String:color];
//
// char *legcolor = (char*)sqlite3_column_text(statement, 4);
// if(legcolor==nil)
// legcolor="";
// NSString *nslegcolor = [[NSString alloc]initWithUTF8String:legcolor];
//
//
int availability = sqlite3_column_int(statement, 5);
//
int incoming_stock = sqlite3_column_int(statement, 6);
char *demension = (char*)sqlite3_column_text(statement, 7);
if(demension==nil)
demension="";
NSString *nsdemension = [[NSString alloc]initWithUTF8String:demension];
// ,,,,,,,,,
char *seat_height = (char*)sqlite3_column_text(statement, 8);
if(seat_height==nil)
seat_height="";
NSString *nsseat_height = [[NSString alloc]initWithUTF8String:seat_height];
char *material = (char*)sqlite3_column_text(statement, 9);
if(material==nil)
material="";
NSString *nsmaterial = [[NSString alloc]initWithUTF8String:material];
char *box_dim = (char*)sqlite3_column_text(statement, 10);
if(box_dim==nil)
box_dim="";
NSString *nsbox_dim = [[NSString alloc]initWithUTF8String:box_dim];
char *volume = (char*)sqlite3_column_text(statement, 11);
if(volume==nil)
volume="";
NSString *nsvolume = [[NSString alloc]initWithUTF8String:volume];
double weight = sqlite3_column_double(statement, 12);
char *model_set = (char*)sqlite3_column_text(statement, 13);
if(model_set==nil)
model_set="";
NSString *nsmodel_set = [[NSString alloc]initWithUTF8String:model_set];
char *load_ability = (char*)sqlite3_column_text(statement, 14);
if(load_ability==nil)
load_ability="";
NSString *nsload_ability = [[NSString alloc]initWithUTF8String:load_ability];
// char *default_category = (char*)sqlite3_column_text(statement, 15);
// if(default_category==nil)
// default_category="";
// NSString *nsdefault_category = [[NSString alloc]initWithUTF8String:default_category];
char *fabric_content = (char*)sqlite3_column_text(statement, 16);
if(fabric_content==nil)
fabric_content="";
NSString *nsfabric_content = [[NSString alloc]initWithUTF8String:fabric_content];
char *assembling = (char*)sqlite3_column_text(statement, 17);
if(assembling==nil)
assembling="";
NSString *nsassembling = [[NSString alloc]initWithUTF8String:assembling];
char *made_in = (char*)sqlite3_column_text(statement, 18);
if(made_in==nil)
made_in="";
NSString *nsmade_in = [[NSString alloc]initWithUTF8String:made_in];
char *special_remarks = (char*)sqlite3_column_text(statement, 19);
if(special_remarks==nil)
special_remarks="";
NSString *nsspecial_remarks = [[NSString alloc]initWithUTF8String:special_remarks];
int stockUcom = sqlite3_column_double(statement, 20);
char *product_group = (char*)sqlite3_column_text(statement, 21);
if(product_group==nil)
product_group="";
NSString *nsproduct_group = [[NSString alloc]initWithUTF8String:product_group];
// char *fashion_selector = (char*)sqlite3_column_text(statement, 22);
// if(fashion_selector==nil)
// fashion_selector="";
// NSString *nsfashion_selector = [[NSString alloc]initWithUTF8String:fashion_selector];
char *selector_field = (char*)sqlite3_column_text(statement, 22);
if(selector_field==nil)
selector_field="";
NSString *nsselector_field = [[NSString alloc]initWithUTF8String:selector_field];
char *property_field = (char*)sqlite3_column_text(statement, 23);
if(property_field==nil)
property_field="";
NSString *nsproperty_field = [[NSString alloc]initWithUTF8String:property_field];
char *packaging = (char*)sqlite3_column_text(statement, 24);
if(packaging==nil)
packaging="";
NSString *nspackaging = [[NSString alloc]initWithUTF8String:packaging];
[ret setValue:[NSString stringWithFormat:@"%d",product_id] forKey:@"product_id"];
NSMutableDictionary* img_section = [[NSMutableDictionary alloc] init];
[img_section setValue:[NSString stringWithFormat:@"%d",incoming_stock] forKey:@"incoming_stock"];
NSString* model_s_img = [self model_category_img:[NSString stringWithFormat:@"%d",product_id] model_name:model_name db:db];
[img_section setValue:model_s_img forKey:@"model_s_img"];
[img_section setObject:[self model_img:product_id db:db] forKey:@"images"];
[img_section setObject:[self model_property:product_id field:nsproperty_field db:db] forKey:@"property"];
[img_section setObject:[self model_selector:nsproduct_group field:nsselector_field db:db] forKey:@"selector"];
NSString* Availability=nil;
if(availability>0)
Availability=[NSString stringWithFormat:@"%d",availability];
else
Availability = @"Out of Stock";
[img_section setValue:Availability forKey:@"Availability"];
[img_section setValue:[NSString stringWithFormat:@"%d",stockUcom] forKey:@"stockUom"];
char *eta = (char*)sqlite3_column_text(statement, 25);
if(eta==nil)
eta="";
NSString *nseta = [[NSString alloc]initWithUTF8String:eta];
if ([nseta isEqualToString:@"null"]) {
nseta = @"";
}
if (availability <= 0) {
[img_section setValue:nseta forKey:@"ETA"];
}
int item_id = sqlite3_column_int(statement, 26);
NSString *seat_dimension = [self textAtColumn:27 statement:statement];
NSString *content_writing = [self textAtColumn:28 statement:statement];
NSString* Price=nil;
if(bLogin==false)
Price=@"Must Sign in.";
else
{
// NSNumber* price= [self get_model_default_price:appDelegate.contact_id product_id:product_id db:db];
NSNumber* price = [self get_model_default_price:contact_id user:user product_id:nil item_id:@(item_id) db:db];
if(price==nil)
Price=@"No Price.";
else
Price=[NSString stringWithFormat:@"%.2f",price.floatValue];
}
[img_section setObject:content_writing forKey:@"product_content_writing"];
[img_section setValue:Price forKey:@"price"];
[img_section setValue:nsname forKey:@"model_name"];
[img_section setValue:nsdescription forKey:@"model_descrition"];
if (order_code) { // 离线order code即so#
NSString *cartQtySql = [NSString stringWithFormat:@"select c.item_count from offline_cart as c left join offline_order as o on c.so_no = o.so_id where o.so_id = '%@' and c.item_id = %d;",order_code,item_id];
__block int cartQTY = 0;
[iSalesDB jk_query:cartQtySql db:db close:NO completion:^(sqlite3_stmt *stmt, NSMutableDictionary *container, long *count) {
cartQTY = sqlite3_column_int(stmt, 0);
}];
if (cartQTY > 0) {
[img_section setObject:[NSNumber numberWithInt:cartQTY] forKey:@"Model QTY in cart"];
}
}
[ret setObject:img_section forKey:@"img_section"];
NSMutableDictionary* detail0_section = [[NSMutableDictionary alloc] init];
int detail0_item_count=0;
[detail0_section setObject:[self model_kvItem:@"Dimension" value:nsdemension] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Seat Height" value:nsseat_height] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Seat Dimension" value:seat_dimension] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Material" value:nsmaterial] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Box dimension" value:nsbox_dim] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Volume" value:nsvolume] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Weight" value:[NSString stringWithFormat:@"%0.2f",weight]] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Set" value:nsmodel_set] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Load ability" value:nsload_ability] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Fabric Content" value:nsfabric_content] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Assembling" value:nsassembling] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Made in" value:nsmade_in] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Special Remarks" value:nsspecial_remarks] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
[detail0_section setObject:[self model_kvItem:@"Packaging" value:nspackaging] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
// NSDictionary* pricejson=[self get_model_all_price:appDelegate.contact_id product_id:product_id db:db];
NSDictionary* pricejson = [self get_model_all_price:contact_id item_id:item_id user:user islogin:bLogin db:db];
for(int l=0;l<[pricejson[@"count"] intValue];l++)
{
NSDictionary* price_item = pricejson[[NSString stringWithFormat:@"item_%d",l]];
[detail0_section setObject:[self model_priceKvItem:price_item.allKeys[0] value:price_item.allValues[0]] forKey:[NSString stringWithFormat:@"item_%d",detail0_item_count++]];
}
[detail0_section setValue:[NSString stringWithFormat:@"%d",detail0_item_count] forKey:@"count"];
[detail0_section setValue:@"kv" forKey:@"type"];
[detail0_section setValue:@"Product Information" forKey:@"title"];
[ret setObject:detail0_section forKey:@"detail_0"];
NSMutableDictionary* detail1_section = [[self model_NIYMAL:category db:db] mutableCopy];
// [detail1_section setValue:@"detail" forKey:@"target"];
// [detail1_section setValue:@"popup" forKey:@"action"];
// [detail1_section setValue:@"content" forKey:@"type"];
// [detail1_section setValue:@"New Items You May Also Like" forKey:@"title"];
// [detail1_section setValue:@"model_NIYMAL" forKey:@"data_interface"];
// [detail1_section setValue:@"true" forKey:@"single_row"];
// [detail1_section setValue:@"true" forKey:@"partial_refresh"];
[ret setObject:detail1_section forKey:@"detail_1"];
NSMutableDictionary* detail2_section = [[NSMutableDictionary alloc]init];
[detail2_section setValue:@"detail" forKey:@"target"];
[detail2_section setValue:@"popup" forKey:@"action"];
[detail2_section setValue:@"content" forKey:@"type"];
[detail2_section setValue:@"Recently Viewed" forKey:@"title"];
[detail2_section setValue:@"true" forKey:@"single_row"];
[detail2_section setValue:@"local" forKey:@"data"];
[ret setObject:detail2_section forKey:@"detail_2"];
}
sqlite3_finalize(statement);
}
else
{
[ret setValue:@"8" forKey:@"result"];
}
// DebugLog(@"count:%d",count);
[iSalesDB close_db:db];
#ifdef DEBUG
DebugLog(@"data string: %@",[RAConvertor dict2string:ret] );
#endif
dispatch_async(dispatch_get_main_queue(), ^{
result(ret);
});
});
}
//+(void) offline_deletewishlist :(NSMutableDictionary *) params completionHandler:(resultHandler)result;
//{
//
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
// dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// NSMutableDictionary* ret=[[NSMutableDictionary alloc]init];
// sqlite3 *db = [iSalesDB get_db];
// NSString* collectId=params[@"collectId"];
//
//
//
//
// // NSString* sqlQuery = [NSString stringWithFormat:@"delete from wishlist where _id in (%@);",collectId];
// NSString* sqlQuery = [NSString stringWithFormat:@"update wishlist set is_delete = 1 where _id in (%@);",collectId];
// [iSalesDB execSql:sqlQuery db:db];
// int count=[iSalesDB get_recordcount:db table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"];
// [iSalesDB close_db:db];
//
//
// ret[@"result"]= [NSNumber numberWithInt:2];
// dispatch_async(dispatch_get_main_queue(), ^{
//
// appDelegate.wish_count =count;
//
// [appDelegate update_count_mark];
// result(ret);
// });
//
// });
//}
+(void) offline_logout :(NSMutableDictionary *) params completionHandler:(resultHandler)result
{
UIApplication * app = [UIApplication sharedApplication];
AppDelegate *appDelegate = (AppDelegate *)[app delegate];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[iSalesDB disable_trigger];
[iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"];
[iSalesDB execSql:@"delete from offline_order where status=0;"];
[iSalesDB enable_trigger];
dispatch_async(dispatch_get_main_queue(), ^{
//
// NSString* user = [params valueForKey:@"user"];
//
// NSString* password = [params valueForKey:@"password"];
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
ret[@"result"]=[NSNumber numberWithInt:2 ];
appDelegate.cart_count = 0;//[[jsobj valueForKey:@"cart_count"] intValue];
appDelegate.wish_count =0;//[[jsobj valueForKey:@"wish_count"] intValue];
appDelegate.port_count =0;//[[jsobj valueForKey:@"portfolio_count"] intValue];
[appDelegate update_count_mark];
appDelegate.can_show_price =false;
appDelegate.can_see_price =false;
appDelegate.can_create_portfolio =false;
appDelegate.can_create_order =false;
appDelegate.can_cancel_order =false;
appDelegate.can_set_cart_price =false;
appDelegate.can_delete_order =false;
appDelegate.can_submit_order =false;
appDelegate.can_set_tearsheet_price =false;
appDelegate.can_update_contact_info = false;
appDelegate.save_order_logout = false;
appDelegate.submit_order_logout = false;
appDelegate.alert_sold_in_quantities = false;
appDelegate.ipad_perm =nil ;
appDelegate.user_type = USER_ROLE_UNKNOWN;
appDelegate.OrderFilter= nil;
[appDelegate SetSo:nil];
[appDelegate set_main_button_panel];
result(ret);
});
});
}
+(void) offline_createorder :(NSMutableDictionary *) params completionHandler:(resultHandler)result
{
// iSalesDB.
// UIApplication * app = [UIApplication sharedApplication];
// AppDelegate *appDelegate = (AppDelegate *)[app delegate];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[iSalesDB disable_trigger];
[iSalesDB execSql:@"delete from offline_cart where so_no in (select so_id from offline_order where status = 0);"];
[iSalesDB execSql:@"delete from offline_order where status=0;"];
[iSalesDB enable_trigger];
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
NSString *customer_name = [self translateSingleQuote:params[@"customer_name"]];
NSString* customer_cid = [self translateSingleQuote:params[@"customer_cid"]];
// NSString* customer_address1 = [self translateSingleQuote:params[@"customer_address1"]];
// NSString* customer_address2 = [self translateSingleQuote:params[@"customer_address2"]];
// NSString* customer_address3 = [self translateSingleQuote:params[@"customer_address3"]];
// NSString* customer_address4 = [self translateSingleQuote:params[@"customer_address4"]];
// NSString* customer_city = [self translateSingleQuote:params[@"customer_city"]];
NSString* customer_contact = [self translateSingleQuote:params[@"customer_contact"]];
NSString* customer_contact_ext = [self translateSingleQuote:params[@"customer_contact_ext"]];
// NSString* customer_contact_notes = [self translateSingleQuote:params[@"customer_contact_notes"]];
// NSString* customer_country = [self translateSingleQuote:params[@"customer_country"]];
NSString* customer_email = [self translateSingleQuote:params[@"customer_email"]];
NSString* customer_fax = [self translateSingleQuote:params[@"customer_fax"]];
NSString* customer_first_name = [self translateSingleQuote:params[@"customer_first_name"]];
NSString* customer_last_name = [self translateSingleQuote:params[@"customer_last_name"]];
// NSString* customer_name = [self translateSingleQuote:params[@"customer_name"]];
NSString* customer_phone = [self translateSingleQuote:params[@"customer_phone"]];
// NSString* customer_price_type = [self translateSingleQuote:params[@"customer_price_type"]];
NSString* customer_sales_rep = [self translateSingleQuote:params[@"customer_sales_rep"]];
// NSString* customer_state = [self translateSingleQuote:params[@"customer_state"]];
// NSString* customer_zipcode = [self translateSingleQuote:params[@"customer_zipcode"]];
NSString* create_by = [self translateSingleQuote:params[@"user"]];
NSMutableArray* arr_name= [[NSMutableArray alloc] init];
[arr_name addObject:customer_first_name];
[arr_name addObject:customer_last_name];
NSString *contact_name=[RAConvertor arr2string:arr_name separator:@" " trim:true];
// default ship from
NSString *ship_from_default_sql = @"select contact_id,decrypt(company_name),decrypt(addr_1),first_name || ' ' || last_name,email,fax,decrypt(phone) from offline_contact where contact_id = 'NPD';";
__block NSString *cid = @"";
__block NSString *name = @"";
__block NSString *ext = @"";
__block NSString *contact = @"";
__block NSString *email = @"";
__block NSString *fax = @"";
__block NSString *phone = @"";
sqlite3 *db = [iSalesDB get_db];
[iSalesDB jk_query:ship_from_default_sql db:db close:NO completion:^(sqlite3_stmt *statment, NSMutableDictionary *container, long *count) {
cid = [self textAtColumn:0 statement:statment];
name = [self textAtColumn:1 statement:statment];
ext = [self textAtColumn:2 statement:statment];
contact = [self textAtColumn:3 statement:statment];
email = [self textAtColumn:4 statement:statment];
fax = [self textAtColumn:5 statement:statment];
phone = [self textAtColumn:6 statement:statment];
}];
// default carrier
NSString *carrier_sql = [NSString stringWithFormat:@"select name from carrier where code_id = (select carrier from offline_contact where contact_id = '%@');",customer_cid];
__block NSString *carrier = @"";
[iSalesDB jk_query:carrier_sql db:db close:NO completion:^(sqlite3_stmt *statment, NSMutableDictionary *container, long *count) {
carrier = [self textAtColumn:0 statement:statment];
}];
NSString* so_id = [self get_offline_soid:db];
if(so_id==nil)
so_id=[NSString stringWithFormat:@"OFFLINE%@",[NSUUID UUID].UUIDString ];
NSString* sql_neworder=[NSString stringWithFormat:@"insert into offline_order(so_id,status,customer_cid,customer_contact,customer_email,customer_fax,customer_phone,sales_rep,create_by,customer_contact,must_call,sender_cid,sender_name,sender_ext,sender_contact,sender_phone,sender_fax,sender_email,billing_cid,billing_name,billing_ext,billing_contact,billing_phone,billing_fax,billing_email,sales_terms,carrier) values('%@',0,'%@','%@','%@','%@','%@','%@','%@','%@',1,'%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','%@','FOB','%@')",so_id,customer_cid,customer_contact,customer_email,customer_fax,customer_phone,customer_sales_rep,create_by ,contact_name,cid,name,ext,contact,phone,fax,email,customer_cid,customer_name,customer_contact_ext,customer_contact,customer_phone,customer_fax,customer_email,carrier];
int result_code =[iSalesDB execSql:sql_neworder db:db];
[ret setValue:[NSNumber numberWithInt:result_code] forKey:@"result"];
//insert into offline_order(so_id,status,contact_id,sales_rep,create_by,customer_contact) select 'OFFLINE'||hex(randomblob(16)),-1,contact_id,sales_rep,company_name from offline_contact where contact_id='99FURO0002'
//soId
int _id=[iSalesDB get_insertid:@"offline_order" db:db];
NSString *sqlQuery = [NSString stringWithFormat:@"select so_id from offline_order where _id=%d ",_id];
sqlite3_stmt * statement;
if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK)
{
if (sqlite3_step(statement) == SQLITE_ROW)
{
// char *name = (char*)sqlite3_column_text(statement, 1);
// NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
//ret = sqlite3_column_int(statement, 0);
char *soId = (char*)sqlite3_column_text(statement, 0);
if(soId==nil)
soId="";
NSString *nssoId = [[NSString alloc]initWithUTF8String:soId];
[ret setValue:nssoId forKey:@"soId"];
[ret setValue:nssoId forKey:@"orderCode"];
}
sqlite3_finalize(statement);
}
[ret setValue:[NSNumber numberWithInt:0] forKey:@"orderStatus"];
[ret setValue:@"Regular Mode" forKey:@"mode"];
[iSalesDB close_db:db];
dispatch_async(dispatch_get_main_queue(), ^{
result(ret);
});
});
}
+(void) offline_requestcart :(NSMutableDictionary *) params completionHandler:(resultHandler)result;
{
UIApplication * app = [UIApplication sharedApplication];
AppDelegate *appDelegate = (AppDelegate *)[app delegate];
bool can_create_backorder= appDelegate.can_create_backorder;
NSString* user = appDelegate.user;
NSString* contact_id = appDelegate.contact_id;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSMutableDictionary* ret = [[NSMutableDictionary alloc] init];
sqlite3 *db = [iSalesDB get_db];
NSString* orderCode=params[@"orderCode"];
int sort = [[params objectForKey:@"sort"] intValue];
NSString *sort_str = @"";
switch (sort) {
case 0:{
sort_str = @"order by c.modify_time desc";
}
break;
case 1:{
sort_str = @"order by c.modify_time asc";
}
break;
case 2:{
sort_str = @"order by m.name asc";
}
break;
case 3:{
sort_str = @"order by m.name desc";
}
break;
case 4:{
sort_str = @"order by m.description asc";
}
break;
default:
break;
}
NSString* sqlorder = [ NSString stringWithFormat:@"select discount from offline_order where so_id='%@'",orderCode];
sqlite3_stmt * statement1;
double orderdiscount=0;
int dbresult1=sqlite3_prepare_v2(db, [sqlorder UTF8String], -1, &statement1, nil);
if ( dbresult1== SQLITE_OK)
{
if (sqlite3_step(statement1) == SQLITE_ROW)
{
// NSDate *row_date = [NSDate date];
// NSMutableDictionary* itemjson = [[NSMutableDictionary alloc] init];
orderdiscount = sqlite3_column_double(statement1, 0);
}
sqlite3_finalize(statement1);
}
NSString *sqlQuery = [ NSString stringWithFormat:@"select c.product_id,c.price,c.discount,c.item_count,c.line_note,m.name,m.description,c.item_id,m.stockUom,c._id,m.availability from (select _id,product_id,decrypt(str_price) as price,discount,item_count,line_note,item_id,modify_time from offline_cart where so_no='%@') c left join product m on c.product_id=m.product_id %@",orderCode,sort_str ];
// NSString *sqlQuery = [ NSString stringWithFormat:@"select c.product_id,decrypt(c.str_price),c.discount,c.item_count,c.line_note,m.name,m.description,c.item_id,m.stockUom,c._id from offline_cart c left join product m on c.product_id=m.product_id where c.so_no='%@'",orderCode ];
// NSString *sqlQuery = @"select * from (select decrypt(str_price) from offline_cart) c";
DebugLog(@"offline_login sql:%@",sqlQuery);
sqlite3_stmt * statement;
[ret setValue:[NSNumber numberWithInt:AP_USER_NOT_AUTH ] forKey:@"result"];
NSDate *date1 = [NSDate date];
int count=0;
int cart_count=0;
int dbresult=sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil);
if ( dbresult== SQLITE_OK)
{
while (sqlite3_step(statement) == SQLITE_ROW)
{
// NSDate *row_date = [NSDate date];
NSMutableDictionary* itemjson = [[NSMutableDictionary alloc] init];
int product_id = sqlite3_column_int(statement, 0);
char *str_price = (char*)sqlite3_column_text(statement, 1);
int item_id = sqlite3_column_int(statement, 7);
NSString* Price=nil;
if(str_price==nil)
{
// NSNumber* price= [self get_model_default_price:appDelegate.contact_id product_id:product_id db:db];
// NSDate *price_date = [NSDate date];
NSNumber* price = [self get_model_default_price:contact_id user:user product_id:nil item_id:@(item_id) db:db];
// DebugLog(@"price time interval");
// [self printTimeIntervalBetween:price_date and:[NSDate date]];
if(price==nil)
Price=@"No Price.";
else
Price=[NSString stringWithFormat:@"%.2f",price.floatValue];
}
else
{
Price=[NSString stringWithFormat:@"%.2f",[[[NSString alloc]initWithUTF8String:str_price] floatValue]];
}
double discount = sqlite3_column_double(statement, 2);
int item_count = sqlite3_column_int(statement, 3);
char *line_note = (char*)sqlite3_column_text(statement, 4);
NSString *nsline_note=nil;
if(line_note!=nil)
nsline_note= [[NSString alloc]initWithUTF8String:line_note];
char *name = (char*)sqlite3_column_text(statement, 5);
NSString *nsname=nil;
if(name!=nil)
nsname= [[NSString alloc]initWithUTF8String:name];
char *description = (char*)sqlite3_column_text(statement, 6);
NSString *nsdescription=nil;
if(description!=nil)
nsdescription= [[NSString alloc]initWithUTF8String:description];
int stockUom = sqlite3_column_int(statement, 8);
int _id = sqlite3_column_int(statement, 9);
int availability = sqlite3_column_int(statement, 10);
// NSDate *subtotal_date = [NSDate date];
NSDictionary* bsubtotaljson=[self model_subtotal:item_id count:item_count db:db compute_part:true];
// DebugLog(@"subtotal_date time interval");
// [self printTimeIntervalBetween:subtotal_date and:[NSDate date]];
double cuft=[bsubtotaljson[@"cuft"] doubleValue];
double weight=[bsubtotaljson[@"weight"] doubleValue];
int carton=[bsubtotaljson[@"carton"] intValue];
cart_count+=[bsubtotaljson[@"items"] allKeys].count;
int mpack =[bsubtotaljson[@"mpack"] intValue];
// itemjson[@"img_url"]= [self model_category_img:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] model_name:nil db:db];
// NSDate *img_date = [NSDate date];
itemjson[@"img_url"] = [self item_image:[NSString stringWithFormat:@"%@",[NSNumber numberWithInt:item_id]] db:db];
// DebugLog(@"img_date time interval");
// [self printTimeIntervalBetween:img_date and:[NSDate date]];
itemjson[@"model"]=nsname;
itemjson[@"cuft"]=[NSNumber numberWithDouble:cuft];
itemjson[@"weight"]=[NSNumber numberWithDouble:weight];
itemjson[@"carton"]=[NSNumber numberWithInt:carton];
itemjson[@"cart_item_id"]=[NSNumber numberWithInt:_id].stringValue;
itemjson[@"check"]=@"true";
itemjson[@"product_id"]=[NSNumber numberWithInt:product_id].stringValue;
itemjson[@"count"]=[NSNumber numberWithInt:item_count];
itemjson[@"unit_price"]=Price;
itemjson[@"discount"]=[NSNumber numberWithInt:discount];
itemjson[@"description"]=[NSString stringWithFormat:@"%@\n%@",nsname,nsdescription ];
itemjson[@"stockUom"]=[NSNumber numberWithInt:stockUom];
itemjson[@"mpack"]=[NSNumber numberWithInt:mpack];
itemjson[@"note"]=nsline_note;
if (!can_create_backorder) {
itemjson[@"is_out_of_stock"] = [NSNumber numberWithBool:availability >= item_count ? NO : YES];
}
// NSDate *date2 = [NSDate date];
itemjson[@"combine"]=[self model_bundle:item_id db:db compute_part:false contactID:contact_id user:user];
// DebugLog(@"model_bundle time interval");
// [self printTimeIntervalBetween:date2 and:[NSDate date]];
ret[[NSString stringWithFormat:@"item_%d",count]]=itemjson;
count++;
// DebugLog(@"row time interval");
// [self printTimeIntervalBetween:row_date and:[NSDate date]];
}
ret[@"result"]=[NSNumber numberWithInt:RESULT_TRUE ];
sqlite3_finalize(statement);
}
DebugLog(@"request cart total time interval");
[self printTimeIntervalBetween:date1 and:[NSDate date]];
//int cart_count=[iSalesDB get_recordcount:db table:@"offline_cart" where:[NSString stringWithFormat:@"so_no='%@'",orderCode]];
int wish_count=[iSalesDB get_recordcount:db table:@"wishlist" where:@"is_delete is NULL or is_delete != 1"];
ret[@"wish_count"]=[NSNumber numberWithInt:wish_count ];
ret[@"cart_count"]=[NSNumber numberWithInt:cart_count ];
ret[@"count"]=[NSNumber numberWithInt:count ];
if(orderdiscount>0)
ret[@"orderDiscount"]=@(orderdiscount);
ret[@"mode"]=@"Regular Mode";
[iSalesDB close_db:db];
NSString *general_note = [iSalesDB jk_queryText:[NSString stringWithFormat:@"select general_notes from offline_order where so_id = '%@';",orderCode]];
DebugLog(@"general notes :%@",general_note);
ret[@"general_note"]= general_note;
dispatch_async(dispatch_get_main_queue(), ^{
result(ret);
});
});
}
@end