// // CartViewController.m // RedAnt ERP Mobile // // Created by Ray on 14-6-6. // Copyright (c) 2014年 United Software Applications, Inc. All rights reserved. // #import "RAUtils.h" #import "CartViewController.h" #import "ModelItemCell.h" #import "RANetwork.h" //#import "CommonGridViewController.h" #import "CreateOrderViewController.h" #import "DetailViewController.h" #import "EditModelPriceViewController.h" #import "MainViewController.h" #import "LoginViewController.h" #import "ItemNotesViewController.h" #import "CartGeneralNotesViewController.h" #import "DefaultAppearance.h" #import "DefaultTableHeaderView.h" #import "SortItemViewController.h" #import "SortButton.h" #import "NotificationNameCenter.h" #import "Singleton.h" #import "JKMessageBoxController.h" #import "RAPDFViewController.h" #ifdef BACKORDER_PROCESS #import "RAOrderEditorViewController.h" #endif #define ALERT_FREE 1024 #define ALERT_DEL 1025 #define ALERT_SET_FREE 1026 #define ALERT_RESTORE_FREE 1027 @interface CartViewController () { CGRect cancelButtonFrame; } @property (nonatomic,strong) SortItemViewController *sortItemController; @property (nonatomic,assign) int sortIndex; @property (nonatomic,strong) SortButton *sortButton; @property (strong, nonatomic) IBOutlet UIButton *placeOrderButton; @property (strong, nonatomic) IBOutlet UIButton *cancelOrderButton; @property (nonatomic,strong) NSOperationQueue *dataOperationQueue; @property (strong, nonatomic) IBOutlet UIButton *emailButton; @property (strong, nonatomic) IBOutlet UIButton *printButton; @property (nonatomic,assign) BOOL currentOrderIsMerged; @property (nonatomic,strong) DefaultTableHeaderView *cartIndicatorBar; @property (nonatomic,assign) BOOL back_order_flag; @property (nonatomic,strong) NSDictionary *cart_json; @property (nonatomic,copy) NSString *print_url; @property (nonatomic,assign) BOOL available;///<所有Model均有库存,才能Place Order。 @end @implementation CartViewController - (NSOperationQueue *)dataOperationQueue { if (!_dataOperationQueue) { _dataOperationQueue = [[NSOperationQueue alloc] init]; _dataOperationQueue.maxConcurrentOperationCount = 1; } return _dataOperationQueue; } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } -(void) logout { [super logout]; [self.content_arr removeAllObjects]; self.cart_json = nil; } - (IBAction)OnEditSelectClick:(id)sender { NSMutableArray* arr_ids = [[NSMutableArray alloc] init]; long count = self.content_arr.count;//[[self.content_data valueForKey:@"count"] intValue]; if(count==0) { [RAUtils message_alert:@"No item in the cart" title:@"Cart" controller:self] ; return; } for(int i=0;i // }]; // } // else // { // [self reload_data]; //// self.total = 0; // } [[self navigationController] setNavigationBarHidden:YES animated:NO]; } - (void)checkProductAvailable:(NSArray *)contents { if (contents == nil) { self.available = NO; return; } [contents enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj isKindOfClass:[NSDictionary class]]) { NSDictionary *item_json = (NSDictionary *)obj; BOOL isAvailable = ![[item_json valueForKey:@"is_out_of_stock"] boolValue]; self.available = self.available && isAvailable; } }]; } - (void)clearContent { dispatch_async(dispatch_get_main_queue(), ^{ self.freejson = nil; self.notes = nil; self.content_arr = nil; self.currentOrderIsMerged = nil; self.cart_json = nil; [Singleton sharedInstance].currentOrderIsMerged = NO; self.print_url = nil; [self checkProductAvailable:self.content_arr]; [self refresh_total]; [self.itemListTable reloadData]; AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; appDelegate.cart_count = 0; [appDelegate update_count_mark]; }); } -(void) operation_reload_data { if (self.dataOperationQueue.operationCount > 1) { return; } AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate; if (appDelegate.order_code == nil || appDelegate.order_code.length == 0) { [self clearContent]; return; } __weak typeof(self) weakself = self; dispatch_async(dispatch_get_main_queue(), ^{ if(weakself.isrefreshing) return; weakself.available = YES; weakself.itemListTable.hidden = true; weakself.label_net_err.hidden=true; weakself.isrefreshing=true; // [self.content_data removeAllObjects]; // [self.itemListTable reloadData]; // UIRefreshControl *reF = (UIRefreshControl *)[self.view viewWithTag:200]; // // [reF endRefreshing]; // // reF.attributedTitle = [[NSAttributedString alloc]initWithString:@"Pull to refresh"]; weakself.mum.center = weakself.view.center; weakself.mum.hidden = YES; // [self.mum startAnimating]; DebugLog(@"reloading..."); UIAlertView *loadingView = [RAUtils waiting_alert:@"Please Wait" title:@"Loading"]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ DebugLog(@"BEGIN LOAD CART"); NSDictionary* cart_json = [RANetwork request_Cart:weakself.sortIndex]; dispatch_async(dispatch_get_main_queue(), ^{ // // [self.mum stopAnimating]; [loadingView dismissWithClickedButtonIndex:0 animated:YES]; // self.content_data = [cart_json mutableCopy]; #ifdef BACKORDER_PROCESS weakself.back_order_flag = [[cart_json objectForKey:@"back_order_version"] boolValue]; #else weakself.back_order_flag = NO; #endif if (!weakself.back_order_flag) { weakself.freejson = [cart_json objectForKey:@"freeGiveaway"]; weakself.notes = [cart_json valueForKey:@"general_note"]; weakself.content_arr = [RAUtils dictionary2array:cart_json count_fields:@"count" item_mark:@"item_" items_mark:nil]; weakself.currentOrderIsMerged = [[cart_json valueForKey:@"is_merged_order"] boolValue]; [Singleton sharedInstance].currentOrderIsMerged = weakself.currentOrderIsMerged; [weakself.itemListTable reloadData]; weakself.print_url = [cart_json valueForKey:@"cart_print_url"]; [weakself checkProductAvailable:weakself.content_arr]; [weakself refresh_total]; } else { // v1.94 weakself.freejson = [cart_json objectForKey:@"freeGiveaway"]; weakself.notes = [cart_json valueForKey:@"general_note"]; weakself.cart_json = cart_json; [weakself.itemListTable reloadData]; weakself.print_url = [cart_json valueForKey:@"cart_print_url"]; [weakself checkProductAvailable:weakself.content_arr]; } int result=[[cart_json valueForKey:@"result"] intValue]; if (weakself.dataOperationQueue.operationCount > 1) { weakself.isrefreshing=false; return; } if(result==2||result==1||result==0) { [weakself.edit_select_arr removeAllObjects]; weakself.itemListTable.hidden = false; // UIApplication * app = [UIApplication sharedApplication]; // AppDelegate *appDelegate = (AppDelegate *)[app delegate]; // appDelegate.cart_count =weakself.content_arr.count;//[[self.content_data valueForKey:@"count"] intValue]; weakself.itemListTable.hidden=false; if(weakself.onFinishLoad) weakself.onFinishLoad(); } else if(result==RESULT_NET_ERROR) { weakself.label_net_err.hidden=false; weakself.itemListTable.hidden=true; } else { if(result!=1) [RAUtils message_alert:[cart_json valueForKey:@"err_msg"] title:@"Loading Cart" controller:weakself] ; } weakself.isrefreshing=false; DebugLog(@"FINISH LOAD CART"); }); }); }); // [[self navigationController] setNavigationBarHidden:YES animated:NO]; } - (void) reload_data { __weak typeof(self) weakself = self; self.currentOrderIsMerged = NO; NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{ if (weakself) { __strong typeof(weakself) strongself = weakself; [strongself operation_reload_data]; } }]; [self.dataOperationQueue addOperation:operation]; } -(void)manually_refresh { UIRefreshControl *reF = (UIRefreshControl *)[self.view viewWithTag:200]; if(self.isrefreshing) { [reF endRefreshing]; return; } reF.attributedTitle = [[NSAttributedString alloc]initWithString:@"Refreshing"]; [self performSelector:@selector(ReloadData) withObject:nil afterDelay:1]; // DebugLog(@"refresh!!!!!!!!"); } -(void) ReloadData { UIRefreshControl *reF = (UIRefreshControl *)[self.view viewWithTag:200]; [reF endRefreshing]; reF.attributedTitle = [[NSAttributedString alloc]initWithString:@"Pull to refresh"]; [self reload_data]; } - (void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; [self layoutCartIndicatorBar]; } - (DefaultTableHeaderView *)setupCartIndicatorBar { NSString* value =[DefaultAppearance get_noneappearance_value:@"DefaultTableHeaderView" valuename:@"title_text_color"]; if(value==nil) value=@""; unsigned long color = strtoul([value UTF8String],0,16); DefaultTableHeaderView* myView = [[DefaultTableHeaderView alloc] initWithFrame:CGRectMake(0, 0, self.itemListTable.bounds.size.width, 40)]; // myView.backgroundColor = UIColorFromRGB(0x996633); myView.autoresizingMask = UIViewAutoresizingFlexibleWidth; myView.layer.shadowPath =[UIBezierPath bezierPathWithRect:myView.bounds].CGPath; myView.layer.shadowColor = [UIColor blackColor].CGColor; myView.layer.shadowOffset = CGSizeMake(0, 0); myView.layer.shadowOpacity = 0.5; myView.layer.shadowRadius = 2.0; self.sortButton.tag = 5678 + 0; [myView addSubview:self.sortButton]; UILabel *solabel = [[UILabel alloc] initWithFrame:CGRectMake(130, 9, 90, 22)]; solabel.tag = 5678 + 1; solabel.textColor=UIColorFromRGB(color); solabel.backgroundColor = [UIColor clearColor]; solabel.autoresizingMask=UIViewAutoresizingFlexibleRightMargin; solabel.text=NSLocalizedString(@"Description", nil); [solabel sizeToFit]; [myView addSubview:solabel]; CGFloat x = self.itemListTable.bounds.size.width - (768 - 320); UILabel *contactlabel = [[UILabel alloc] initWithFrame:CGRectMake(x, 9, 90, 22)]; contactlabel.tag = 5678 + 2; contactlabel.textColor=UIColorFromRGB(color); contactlabel.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin; contactlabel.backgroundColor = [UIColor clearColor]; contactlabel.text=NSLocalizedString(@"Unit price", nil); [contactlabel sizeToFit]; [myView addSubview:contactlabel]; x = self.itemListTable.bounds.size.width - (768 - 470); UILabel *modellabel = [[UILabel alloc] initWithFrame:CGRectMake(x, 9, 90, 22)]; modellabel.tag = 5678 + 3; modellabel.textColor=UIColorFromRGB(color); modellabel.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin; modellabel.backgroundColor = [UIColor clearColor]; modellabel.text=NSLocalizedString(@"Discount/QTY", nil); [modellabel sizeToFit]; [myView addSubview:modellabel]; x = self.itemListTable.bounds.size.width - (768 - 640); UILabel *pricelabel = [[UILabel alloc] initWithFrame:CGRectMake(x, 9, 90, 22)]; pricelabel.tag = 5678 + 4; pricelabel.textColor=UIColorFromRGB(color); pricelabel.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin; pricelabel.backgroundColor = [UIColor clearColor]; pricelabel.text=NSLocalizedString(@"Set/Subtotal", nil); [pricelabel sizeToFit]; [myView addSubview:pricelabel]; return myView; } - (void)layoutCartIndicatorBar { CGFloat x = self.itemListTable.bounds.size.width - (768 - 320); UILabel *solabel = [self.cartIndicatorBar viewWithTag:5678 + 1]; [solabel sizeToFit]; UILabel *contactlabel = [self.cartIndicatorBar viewWithTag:5678 + 2]; contactlabel.frame = CGRectMake(x, 9, 90, 22); [contactlabel sizeToFit]; x = self.itemListTable.bounds.size.width - (768 - 470); UILabel *modellabel = [self.cartIndicatorBar viewWithTag:5678 + 3]; modellabel.frame = CGRectMake(x, 9, 90, 22); [modellabel sizeToFit]; x = self.itemListTable.bounds.size.width - (768 - 640); UILabel *pricelabel = [self.cartIndicatorBar viewWithTag:5678 + 4]; pricelabel.frame = CGRectMake(x, 9, 90, 22); [pricelabel sizeToFit]; } - (void)viewDidLoad { [super viewDidLoad]; self.edit_select_arr= [[NSMutableArray alloc] init]; self.label_net_err.layer.borderColor = [UIColor darkGrayColor].CGColor; self.label_net_err.layer.borderWidth = 2.0; self.label_net_err.layer.cornerRadius=15; self.label_net_err.layer.masksToBounds=true; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(priceTypeChanged:) name:Change_Price_Type_Notification object:nil]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(refresh_btn_click:)]; // tap.minimumPressDuration = 0.8; //定义按的时间 [self.label_net_err addGestureRecognizer:tap]; UIRefreshControl *ref = [[UIRefreshControl alloc]init]; ref.tag = 200 ; ref.attributedTitle = [[NSAttributedString alloc]initWithString:@"Pull to refresh"]; ref.tintColor = [UIColor colorWithRed:0.10 green:0.68 blue:0.94 alpha:0.7]; // ref.hidden = true; [ref addTarget:self action:@selector(manually_refresh) forControlEvents:UIControlEventValueChanged]; [self.itemListTable addSubview:ref]; self.sortIndex = 0; self.currentOrderIsMerged = NO; self.toolpanel.layer.shadowPath =[UIBezierPath bezierPathWithRect:self.toolpanel.bounds].CGPath; self.toolpanel.layer.masksToBounds = false; //添加四个边阴影 self.toolpanel.layer.shadowColor = [UIColor blackColor].CGColor; self.toolpanel.layer.shadowOffset = CGSizeMake(0, 0); self.toolpanel.layer.shadowOpacity = 0.5; self.toolpanel.layer.shadowRadius = 2.0; cancelButtonFrame = self.cancelOrderButton.frame; // CGRect frame =self.orderInfoTableView.tableHeaderView.frame; // self.orderInfoTableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, self.orderInfoTableView.bounds.size.width, 0.0001)]; // self.orderInfoTableView.tableHeaderView.backgroundColor = [UIColor redColor]; // // self.detailTable.sectionHeaderHeight = 0.0001; // self.orderInfoTableView.sectionFooterHeight = 0.0001; // Do any additional setup after loading the view. self.cartIndicatorBar = [self setupCartIndicatorBar]; [self.view addSubview:self.cartIndicatorBar]; } //-(void)SelectOrder:(NSString *)orderid //{ //// self.editOrderID.text=orderid; //// self.btnAddToOrder.enabled = true; //} - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } //- (IBAction)stepperAction:(UIStepper *)sender { // // //} - (IBAction)onContinueShoppingClick:(id)sender { AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; [appDelegate switchToPreviousVC]; } - (IBAction)onPlaceOrder:(UIButton *)sender { [self placeOrder]; } -(void)placeOrder { AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; if (appDelegate.user_type == USER_ROLE_CUSTOMER && appDelegate.customer_type == CustomerTypeStore) { if (![Singleton sharedInstance].permissions_edit_order) { return; } // if (!self.available) { // // [RAUtils message_alert:@"There are some products is not available" title:@"Warning" controller:self]; // return; // } } // NSMutableArray* checked = [[NSMutableArray alloc] init]; bool have_free = false; long count = self.content_arr.count;//[[self.content_data valueForKey:@"count"] intValue]; if(count==0) { [RAUtils message_alert:@"Add some model first." title:@"Cart Is Empty." controller:self] ; return; } for(int i=0;i=0;ic--) { float compare_price = [[self.freejson valueForKey:[NSString stringWithFormat:@"item_%d",ic]] floatValue]; if(self.total>=compare_price && !have_free&&appDelegate.can_set_cart_price) { UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Free give away available.", nil) message:[NSString stringWithFormat:@"Order total price more than %.2f, do you want to add free give away item before place order?", compare_price] delegate:self cancelButtonTitle:NSLocalizedString(@"NO", nil) otherButtonTitles:NSLocalizedString(@"YES", nil), nil]; alert.tag = ALERT_FREE; [alert show]; return; } } */ #ifdef BACKORDER_PROCESS if (self.back_order_flag) { NSMutableDictionary * params= [[NSMutableDictionary alloc] init]; [params setObject:@(0) forKey:@"step"]; RAOrderEditorViewController *orderEditorVC = [self.storyboard instantiateViewControllerWithIdentifier:@"RAOrderEditorViewController"]; orderEditorVC.disable_dropdown_refresh=true; orderEditorVC.url_type = URL_REMOTE; orderEditorVC.request_url=URL_CARTDELIVERY; orderEditorVC.params = params; orderEditorVC.delegate=self; [self.navigationController pushViewController:orderEditorVC animated:true]; } else #endif { NSMutableDictionary * params= [[NSMutableDictionary alloc] init]; // NSString * string = [checked componentsJoinedByString:@","]; // [params setValue:string forKey:@"cart2Checkbox"]; CreateOrderViewController * orderinfoVC =[ self.storyboard instantiateViewControllerWithIdentifier:@"CreateOrderViewController"]; orderinfoVC.disable_dropdown_refresh=true; orderinfoVC.url_type = URL_REMOTE; orderinfoVC.request_url=URL_CARTDELIVERY; orderinfoVC.params = params; orderinfoVC.delegate=self; // // if(checked.count==count) // { // orderinfoVC.have_tail = true // } [self.navigationController pushViewController:orderinfoVC animated:true]; } // UINavigationController* navi = [[UINavigationController alloc] initWithRootViewController:orderinfoVC] ; // // // // // // navi.modalPresentationStyle = UIModalPresentationPageSheet;//有三种状态,自己看看是哪种 // [self presentViewController:navi animated:YES completion:^{ // // DebugLog(@"CreateOrderViewController present........."); // // // self.btop = false; // // <#code#> // }]; } //- (IBAction)onCommit:(UIButton *)sender { // ; //} //- (IBAction)CreateOrder:(id)sender { //} //- (IBAction)AddToOrder:(id)sender { //} //- (IBAction)ChooseOrder:(id)sender { // // OrderListViewController * orderlistVC =[ self.storyboard instantiateViewControllerWithIdentifier:@"OrderListViewController"]; // // orderlistVC.delegate = self; // orderlistVC.modalPresentationStyle = UIModalPresentationFormSheet;//有三种状态,自己看看是哪种 // [self presentViewController:orderlistVC animated:YES completion:^{ // // DebugLog(@"login........."); // // <#code#> // }]; //} - (BOOL)textFieldShouldBeginEditing:(UITextField *)textField { // // CommonGridViewController * orderlistVC =[ self.storyboard instantiateViewControllerWithIdentifier:@"OrderListViewController"]; // orderlistVC.delegate = self; // orderlistVC.modalPresentationStyle = UIModalPresentationFormSheet;//有三种状态,自己看看是哪种 // [self presentViewController:orderlistVC animated:YES completion:^{ // // DebugLog(@"textFieldShouldBeginEditing........."); // // <#code#> // }]; return NO; } - (IBAction)onDelete:(UIButton *)sender { return ; NSMutableArray* checked = [[NSMutableArray alloc] init]; long count = self.content_arr.count;//[[self.content_data valueForKey:@"count"] intValue]; for(int i=0;i }]; } //- (IBAction)onSelectAll:(UIButton *)sender { // // // NSMutableArray* arr_ids = [[NSMutableArray alloc] init]; // // // // // // // if([self.btnselect.titleLabel.text isEqualToString:@"Select all"]) // { // // long count = self.content_arr.count;// [[self.content_data valueForKey:@"count"] intValue]; // for(int i=0;i0) { return 146; } else return 120; } //- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section //{ // return 0; //} //- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section //{ // return 0; //} //- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section //{ // UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 0.0001)]; // return myView; // //} //- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section //{ // UIView* myView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, 0.0001)]; //// myView.backgroundColor = [UIColor colorWithRed:0.10 green:0.68 blue:0.94 alpha:0.7]; //// UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 90, 22)]; //// titleLabel.textColor=[UIColor whiteColor]; //// titleLabel.backgroundColor = [UIColor clearColor]; //// if(section==0) //// titleLabel.text=NSLocalizedString(@"display_items", nil); //// else //// titleLabel.text=NSLocalizedString(@"hide_items", nil); //// [titleLabel sizeToFit]; //// [myView addSubview:titleLabel]; //// // return myView; //} // //- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { // if(section==0) // return nil; // else // return @"detail section"; //} - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { if (self.back_order_flag) { return [[self.cart_json objectForKey:@"section_count"] integerValue]; } else { return 1; } } - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { if (self.back_order_flag) { return 50; } else { return 0; } } - (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section { if (self.back_order_flag) { // UIView *header = [tableView dequeueReusableCellWithIdentifier:@"section_header_cell"]; // UILabel *title_lb = [header viewWithTag:8520]; UIView *header = [[UIView alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(tableView.bounds), 50.0f)]; header.backgroundColor = [UIColor colorWithRed:128 / 255.0 green:95 / 255.0 blue:54 / 255.0 alpha:1]; header.autoresizingMask = UIViewAutoresizingFlexibleWidth; UILabel *title_lb = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, CGRectGetWidth(header.bounds) - 10, 50.0f)]; title_lb.autoresizingMask = UIViewAutoresizingFlexibleWidth; title_lb.font = [UIFont systemFontOfSize:25.0f]; [header addSubview:title_lb]; title_lb.text = [self titleForSection:section]; return header; } else { return nil; } } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { if (self.back_order_flag) { return [self itemCountInSection:section]; } else { // NSDictionary * item_json = [self.content_data objectForKey:@"items"]; long count =self.content_arr.count;//[[self.content_data valueForKey:@"count"] intValue]; return count; } } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; // if(tableView==self.itemListTable) // { // AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; NSString *CellIdentifier = @"CartItemCell"; ModelItemCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; NSDictionary * item_json = nil;//[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]]; if (self.back_order_flag) { item_json = [self itemJsonAtIndexPath:indexPath]; } else { item_json = self.content_arr[indexPath.row]; } NSDictionary * combine_json =[item_json objectForKey:@"combine"]; NSDictionary * master_json = [item_json objectForKey:@"combine_master"]; if (cell.masterBtn != nil) { if (master_json == nil) { cell.masterBtn.hidden = YES; } else{ cell.masterBtn.hidden = NO; cell.master_items = master_json; } } bool isfree = [[item_json valueForKey:@"is_free"]boolValue]; NSString* notes = [item_json valueForKey:@"note"]; BOOL is_out_of_stock = [[item_json valueForKey:@"is_out_of_stock"] boolValue]; bool noprice =[[item_json valueForKey:@"is_no_price"]boolValue]; cell.noprice = noprice; cell.enable_longpress = true; cell.bundle_item=combine_json; NSString* img_url = [item_json valueForKey:@"img_url"]; NSString* description = [item_json valueForKey:@"description"]; // NSString* identifier = [item_json valueForKey:@"identifier"]; // NSString* attribute = [item_json valueForKey:@"attribute"]; // NSString* currency = [item_json valueForKey:@"currency"]; int count =[[item_json valueForKey:@"count"] intValue]; int stockUom =[[item_json valueForKey:@"stockUom"] intValue]; // double totalprice =[[item_json valueForKey:@"subtotal_price"] doubleValue]; double unitprice=[[item_json valueForKey:@"unit_price"] doubleValue]; double discount =[[item_json valueForKey:@"discount"] doubleValue]; NSString* product_id = [item_json valueForKey:@"product_id"]; // handle no such model if(product_id.length==0) cell.labelNoSuchModel.hidden=false; else cell.labelNoSuchModel.hidden=true; //if (appDelegate.user_type == USER_ROLE_CUSTOMER) { if (!is_out_of_stock) { cell.labelOutOfStock.hidden = YES; } else { cell.labelOutOfStock.hidden = NO; } // } else { // cell.labelOutOfStock.hidden = YES; // } // discount = 5.0; cell.discount = discount; CGRect frame = cell.frame; if(notes.length>0) { cell.labelNotes.text = [@"Note: " stringByAppendingString:[notes stringByReplacingOccurrencesOfString:@"\n" withString:@" "]]; frame.size.height = 146; } else { cell.labelNotes.text = nil; frame.size.height = 120; } // cell.frame = frame; NSString* discountstr=[NSString stringWithFormat:@"%@%% off", [RAUtils FloatFormat:discount]]; if(isfree) { cell.labelOldPrice.hidden = false; cell.labelOldPrice.textColor = [UIColor redColor]; cell.labelOldPrice.text=@"Free"; cell.labelOldPrice.hideline = true; cell.labelDiscount.hidden = true; } else { cell.labelOldPrice.textColor = [UIColor blackColor]; cell.labelOldPrice.hideline = false; if(discount==0) { cell.labelOldPrice.hidden = true; cell.labelDiscount.hidden = true; } else { cell.labelOldPrice.hidden = false; cell.labelDiscount.hidden = false; } } __weak typeof(self) weakSelf = self; cell.onReturnQTY=^(int qty,NSDictionary* ext) { NSMutableDictionary * item_json = nil; if (weakSelf.back_order_flag) { item_json = [[weakSelf itemJsonAtIndexPath:indexPath] mutableCopy]; } else { item_json = [weakSelf.content_arr[indexPath.row] mutableCopy];//[[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; } // int count=[[item_json valueForKey:@"count"] intValue]; // if(count==qty) // return; if ([[ext valueForKey:@"result"] integerValue] == 8) { return ; } [item_json setValue:[NSString stringWithFormat:@"%d",qty] forKey:@"count"]; [item_json setValue:[ext valueForKey:@"cuft"] forKey:@"cuft"]; [item_json setValue:[ext valueForKey:@"carton"] forKey:@"carton"]; [item_json setValue:[ext valueForKey:@"weight"] forKey:@"weight"]; double unit_price = [[item_json valueForKey:@"unit_price"] doubleValue]; // double sub_total=[[item_json valueForKey:@"subtotal_price"] doubleValue]; [item_json setValue:[NSString stringWithFormat:@"%f",unit_price*qty] forKey:@"subtotal_price"]; if (weakSelf.back_order_flag) { [weakSelf updateItemJson:item_json atIndexPath:indexPath]; } else { weakSelf.content_arr[indexPath.row]= item_json; } // [self.content_data setObject:item_json forKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]]; [weakSelf refresh_total]; }; // cell.delegate=self; // cell.from=indexPath; cell.unit_price = unitprice; // cell.labelAttribute.text = attribute; // cell.labelCurrency.text = currency; NSString* oldprice =[NSString stringWithFormat:@"%.2f",unitprice]; NSString* newprice = [NSString stringWithFormat:@"%.2f",unitprice* (1.0-discount/100)*count]; NSString* newunitprice = [NSString stringWithFormat:@"%.2f",unitprice* (1.0-discount/100)]; if(appDelegate.can_see_price&&appDelegate.price_hidden==false) { } else { oldprice=nil; newprice=nil; newunitprice=nil; } cell.labelDiscount.text = discountstr; cell.labelOldPrice.text = oldprice; cell.labelMasterpack.text =[NSString stringWithFormat:@"Sold in QTY of:%d", stockUom]; cell.labelDescription.text = description; // cell.labelIdentifier.text = identifier; if(noprice&&unitprice==0.0) { cell.labelPrice.text = @"No Price"; cell.labelUnitPrice.text = @"No Price"; } else { cell.labelPrice.text = newprice; cell.labelUnitPrice.text = newunitprice; } bool check = [[item_json valueForKey:@"check"] boolValue]; if(check) { cell.img_checkmark.hidden=false; // [item_json setValue:@"0" forKey:@"check"]; } else { // [item_json setValue:@"1" forKey:@"check"]; cell.img_checkmark.hidden=true; } NSString* cart_item_id= [item_json valueForKey:@"cart_item_id"]; cell.cart_id = cart_item_id; if(/*appDelegate.user_type==USER_ROLE_CUSTOMER*/ true) [cell init_Stepper:stockUom max:9999 min:stockUom value:count]; else [cell init_Stepper:1 max:9999 min:1 value:count]; [cell set_Count:count]; // Button 设置了大小约束,Size就不会随内容变化 [cell.btnImage setContentMode:UIViewContentModeScaleAspectFit]; [cell.btnImage setContentEdgeInsets:UIEdgeInsetsMake(0, 0, 0, 0)]; [cell.btnImage setContentHorizontalAlignment:UIControlContentHorizontalAlignmentFill]; [cell.btnImage setContentVerticalAlignment:UIControlContentVerticalAlignmentFill]; cell.btnImage.imageView.contentMode = UIViewContentModeScaleAspectFit; if (![cell.imageName isEqualToString:img_url]) { cell.imageName = img_url; // [cell.btnImage setBackgroundImage:[UIImage imageNamed:@"loading_s"] forState:UIControlStateNormal]; [cell.btnImage setImage:[UIImage imageNamed:@"loading_s"] forState:UIControlStateNormal]; NSString* file_name=[img_url lastPathComponent]; NSData* img_data=[iSalesDB load_cached_img:file_name loadFrom:img_url]; if(img_data!=nil) { UIImage * img =[UIImage imageWithData:img_data]; // [cell.btnImage setBackgroundImage:img forState:UIControlStateNormal]; [cell.btnImage setImage:img forState:UIControlStateNormal]; } else { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData* downloadimg_data = [NSData dataWithContentsOfURL:[NSURL URLWithString:img_url]]; dispatch_async(dispatch_get_main_queue(), ^{ if(downloadimg_data!=nil) { [iSalesDB cache_img:downloadimg_data filename:file_name saveTo:img_url]; UIImage * img =[UIImage imageWithData:downloadimg_data]; // [cell.btnImage setBackgroundImage:img forState:UIControlStateNormal]; [cell.btnImage setImage:img forState:UIControlStateNormal]; } else { // [cell.btnImage setBackgroundImage:[UIImage imageNamed:@"notfound_s"] forState:UIControlStateNormal]; [cell.btnImage setImage:[UIImage imageNamed:@"notfound_s"] forState:UIControlStateNormal]; } }); }); } } cell.backgroundColor = [UIColor whiteColor]; if(self.itemListTable.editing) { cell.editCount.enabled = false; cell.stepper.hidden=true; } else { cell.editCount.enabled=true; cell.stepper.hidden=false; } return cell; // } // else // { // NSString *CellIdentifier = @"OrderInfoListItem"; // UITableViewCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; // return cell; // } } -(void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { if(!self.itemListTable.editing) return; // NSMutableDictionary * item_json = [self.content_arr[indexPath.row] mutableCopy];//[[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; NSMutableDictionary * item_json = nil; if (self.back_order_flag) { item_json = [[self itemJsonAtIndexPath:indexPath] mutableCopy]; } else { item_json = [self.content_arr[indexPath.row] mutableCopy];//[[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; } NSString *cart_item_id=[NSString stringWithFormat:@"%d",[[item_json valueForKey:@"cart_item_id"] intValue]]; if ([self.edit_select_arr containsObject:cart_item_id]) { [self.edit_select_arr removeObject:cart_item_id]; } } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSMutableDictionary * item_json = nil; if (self.back_order_flag) { item_json = [[self itemJsonAtIndexPath:indexPath] mutableCopy]; } else { item_json = [self.content_arr[indexPath.row] mutableCopy];//[[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; } // NSMutableDictionary * item_json =[self.content_arr[indexPath.row] mutableCopy];// [[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; if(self.itemListTable.editing) { NSString *cart_item_id=[NSString stringWithFormat:@"%d",[[item_json valueForKey:@"cart_item_id"] intValue]]; if (![self.edit_select_arr containsObject:cart_item_id]) { [self.edit_select_arr addObject:cart_item_id]; } return; } // no checkmark support anymore for cart return; // ModelItemCell* cell = (ModelItemCell*)[tableView cellForRowAtIndexPath:indexPath]; // // // cell.selected = false; // // self.dirty = true; // // // bool check = [[item_json valueForKey:@"check"] boolValue]; // if(check) // { // [item_json setValue:@"false" forKey:@"check"]; // cell.img_checkmark.hidden=true; // [self.btnselect setTitle: @"Select all" forState: UIControlStateNormal]; // // double totalprice =[[item_json valueForKey:@"subtotal_price"] doubleValue]; // // self.total-=totalprice; // } // else // { // [item_json setValue:@"true" forKey:@"check"]; // cell.img_checkmark.hidden=false; // // double totalprice =[[item_json valueForKey:@"subtotal_price"] doubleValue]; // // self.total+=totalprice; // } // // // dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // // // NSString *ids=[NSString stringWithFormat:@"%d",[[item_json valueForKey:@"cart_item_id"] intValue]]; // // NSDictionary* check_json = [iSalesNetwork cart_check:ids]; // // dispatch_async(dispatch_get_main_queue(), ^{ // // // // if([[check_json valueForKey:@"result"] intValue]==2) // { // // // if([item_json[@"check"] boolValue]==false) // item_json[@"check"]= @"false"; // else // item_json[@"check"]= @"true"; // // self.content_arr[indexPath.row] = item_json; // //[self.content_data setObject:item_json forKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]]; // // // [self reload_container_getdata:false]; // // // } // else // { // [RAUtils message_alert:[check_json valueForKey:@"err_msg"] title:nil controller:self] ; // } // // // // }); // }); // // //debug // //[self.content_data setObject:item_json forKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]]; // // [self refresh_total]; //self.labelTotal.text=[NSString stringWithFormat:@"$%.2f",self.total]; } - (UITableViewCellEditingStyle)tableView:(UITableView *)tv editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { if(self.itemListTable.editing) return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert; else return UITableViewCellEditingStyleDelete; } #pragma mark 在滑动手势删除某一行的时候,显示出更多的按钮 - (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath { AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; // 添加一个删除按钮 self.indexPath=indexPath; NSMutableDictionary * item_json = nil; if (self.back_order_flag) { item_json = [[self itemJsonAtIndexPath:indexPath] mutableCopy]; } else { item_json = [self.content_arr[indexPath.row] mutableCopy];//[[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; } NSString* productID = [item_json valueForKey:@"product_id"]; BOOL outOfStock = [[item_json valueForKey:@"is_out_of_stock"] boolValue]; __weak typeof(self) weakself = self; UITableViewRowAction *deleteRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@" Delete " handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { DebugLog(@"delete click"); //[self.itemListTable setEditing:false animated:YES]; UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Delete confirm", nil) message:NSLocalizedString(@"Are you sure remove model from cart?", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"NO", nil) otherButtonTitles:NSLocalizedString(@"YES", nil), nil]; alert.tag = ALERT_DEL; // alert. [alert show]; }]; deleteRowAction.backgroundColor = [UIColor redColor]; UITableViewRowAction *notifyMeAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Notify Me" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) { { UIAlertView *waitting_alert = [RAUtils waiting_alert:@"Sending Email" title:@"Waiting"]; dispatch_async(dispatch_get_global_queue(0,0), ^{ NSDictionary *dic = [RANetwork notifyModel:productID emailAddr:nil withScreen:ScreenCodeCart]; dispatch_async(dispatch_get_main_queue(), ^{ [waitting_alert dismissWithClickedButtonIndex:0 animated:NO]; NSInteger result = [[dic valueForKey:@"result"] integerValue]; if (result != RESULT_TRUE && result != RESULT_NO_EMAIL_ADDRESS) { NSString *msg = [NSString stringWithFormat:@"The email send failed"]; if ([dic valueForKey:@"err_msg"]) { msg = [dic valueForKey:@"err_msg"]; } UIAlertController *errorAlertVC = [UIAlertController alertControllerWithTitle:@"Warning" message:msg preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *action = [UIAlertAction actionWithTitle:@"ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; [errorAlertVC addAction:action]; [weakself presentViewController:errorAlertVC animated:YES completion:nil]; } else if (result == RESULT_TRUE){ [RAUtils message_alert:@"Notification is sent to default email address." title:@"Message" controller:weakself]; } else if (result == RESULT_NO_EMAIL_ADDRESS) { [weakself showAddressBoxToEmailProduct:productID]; } }); }); }; }]; notifyMeAction.backgroundColor = UIColorFromRGB(0x9BBF5A); UITableViewRowAction *addWatchAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Move To Wish List" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { DebugLog(@"Wishlist click"); NSMutableDictionary * item_json = nil; if (self.back_order_flag) { item_json = [[self itemJsonAtIndexPath:indexPath] mutableCopy]; } else { item_json = [self.content_arr[indexPath.row] mutableCopy];//[[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; } NSString* cart_item_id = [item_json valueForKey:@"cart_item_id"]; [tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // ModelItemCell* cell=[self.itemListTable cellForRowAtIndexPath:indexPath]; // [cell cancel_setQTY]; NSDictionary* return_json = [RANetwork move_cart2wish:cart_item_id ]; dispatch_async(dispatch_get_main_queue(), ^{ if([[return_json valueForKey:@"result"] intValue]==2) { AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; [((MainViewController*)appDelegate.main_vc) reloadWish:true immediately:false]; for(int i=0;i }]; // [self.itemListTable setEditing:false animated:YES]; //[tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; }]; editRowAction.backgroundColor = UIColorFromRGB(0xff9933); // // 添加一个更多按钮 // // UITableViewRowAction *moreRowAction = [UITableView RowActionrowActionWithStyle:UITableViewRowActionStyleNormal title:@"更多" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { // // DebugLog(@点击了更多); // // // [tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; // // }]; // // moreRowAction.backgroundEffect = [UIBlurEffecteffectWithStyle:UIBlurEffectStyleDark]; // // 将设置好的按钮放到数组中返回 // UITableViewRowAction *freeRowAction = nil; // // // NSDictionary * item_json = [self.content_arr[indexPath.row] mutableCopy];//[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]]; // // bool isfree = [[item_json valueForKey:@"is_free"]boolValue]; // // if(!isfree) // { // // freeRowAction=[UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Set Free" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { // // DebugLog(@"free click"); // // // // UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Free give away confirm", nil) message:NSLocalizedString(@"Are you sure make this model free?", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"NO", nil) otherButtonTitles:NSLocalizedString(@"YES", nil), nil]; // alert.tag = ALERT_SET_FREE; // // alert. // [alert show]; // }]; // } // else // { // // freeRowAction=[UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Not Free" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { // // UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Restore free model confirm", nil) message:NSLocalizedString(@"Are you sure restore free model?", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"NO", nil) otherButtonTitles:NSLocalizedString(@"YES", nil), nil]; // alert.tag = ALERT_RESTORE_FREE; // // alert. // [alert show]; // }]; // } // // // // freeRowAction.backgroundColor = [UIColor lightGrayColor]; UITableViewRowAction *noteRowAction = nil; // NSDictionary * item_json = [self.content_arr[indexPath.row] mutableCopy];//[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]]; noteRowAction=[UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Edit note" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { DebugLog(@"item note click"); UIViewController* parentvc=self; ItemNotesViewController * vc =[ parentvc.storyboard instantiateViewControllerWithIdentifier:@"ItemNotesViewController"]; NSMutableDictionary * item_json = nil; if (self.back_order_flag) { item_json = [[self itemJsonAtIndexPath:indexPath] mutableCopy]; } else { item_json = [self.content_arr[indexPath.row] mutableCopy];//[[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; } vc.onSaveNote=^(NSString* notes){ [item_json setValue:notes forKey:@"note"]; if (self.back_order_flag) { [self updateItemJson:item_json atIndexPath:indexPath]; } else { self.content_arr[indexPath.row ] = item_json; } tableView.editing = false; [tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; }; vc.notes=[item_json valueForKey:@"note"]; vc.cart_id = [NSString stringWithFormat:@"%d",[[item_json valueForKey:@"cart_item_id"] intValue]]; // vc.delegate = parentvc.self; // loginvc.modalPresentationStyle = UIModalPresentationFormSheet;//有三种状态,自己看看是哪种 // vc.onSetValue = ^(){ // [self reload_data];//[main_vc checklogin:true]; // }; // UINavigationController* navi = [[UINavigationController alloc] initWithRootViewController:vc] ; // [self hackModalSheetSize:CGSizeMake(450, 200) ofVC:navi]; navi.modalPresentationStyle = UIModalTransitionStyleCrossDissolve;//有三种状态,自己看看是哪种 [parentvc presentViewController:navi animated:YES completion:^{ // navi.view.superview.bounds = CGRectMake(0, 0, 480, 320); DebugLog(@"EditModelPriceViewController present........."); // self.btop = false; // <#code#> }]; // [self.itemListTable setEditing:false animated:YES]; // [tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; }]; noteRowAction.backgroundColor = [UIColor lightGrayColor]; UITableViewRowAction *move2BackAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@"Move to Back Order" handler:^(UITableViewRowAction * _Nonnull action, NSIndexPath * _Nonnull indexPath) { NSDictionary *item_json = [self itemJsonAtIndexPath:indexPath]; NSString* cart_item_id = [item_json valueForKey:@"cart_item_id"]; UIAlertView * waitalert = [RAUtils waiting_alert:@"Please wait" title:@"Move To Back Order"]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSDictionary* return_json = [RANetwork movetobackorder:cart_item_id]; dispatch_async(dispatch_get_main_queue(), ^{ [waitalert dismissWithClickedButtonIndex:0 animated:FALSE]; if([[return_json valueForKey:@"result"] intValue]==2) { [self reload_data]; } // if 2 else { [RAUtils message_alert:[return_json valueForKey:@"err_msg"] title:@"Move To Back Order" controller:self] ; } }); // main }); // global }]; move2BackAction.backgroundColor = UIColorFromRGB(0x336699); if(appDelegate.user_type==USER_ROLE_EMPLOYEE) { NSMutableDictionary * item_json = nil; if (self.back_order_flag) { item_json = [[self itemJsonAtIndexPath:indexPath] mutableCopy]; } else { item_json = [self.content_arr[indexPath.row] mutableCopy];//[[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; } NSString* product_id = [item_json valueForKey:@"product_id"]; int is_rate = [item_json[@"is_rate"] intValue]; NSMutableArray* arr=[@[] mutableCopy]; BOOL condition = outOfStock; #if defined(BUILD_NPD) || defined(BUILD_USAI) || defined(BUILD_UWAVER) #ifdef OFFLINE_MODE condition = !appDelegate.offline_mode && outOfStock; #endif if (condition) { [arr addObject:notifyMeAction]; } NSDictionary *section_json = [self jsonAtSection:indexPath.section]; BOOL available = [[section_json objectForKey:@"available"] boolValue]; // available list if (self.back_order_flag && available) { [arr addObject:move2BackAction]; } #endif #if defined(BUILD_HOMER) || defined(BUILD_GATIT) #ifdef OFFLINE_MODE condition = !appDelegate.offline_mode && outOfStock; #endif if (condition) { [arr addObject:notifyMeAction]; } #endif if(product_id.length>0) [arr addObject:noteRowAction]; [arr addObject:deleteRowAction]; if(product_id.length>0&& is_rate==0) [arr addObject:addWatchAction]; if(appDelegate.can_set_cart_price && product_id.length>0&& is_rate==0) { [arr addObject:editRowAction]; // [arr addObject:freeRowAction]; } return arr; // return @[deleteRowAction,addWatchAction, editRowAction,freeRowAction]; } else if (appDelegate.user_type == USER_ROLE_CUSTOMER) { if (appDelegate.customer_type == CustomerTypeStore) { return @[notifyMeAction,deleteRowAction,addWatchAction,editRowAction]; } else { // normal // NSArray *actionArray = @[notifyMeAction,deleteRowAction,addWatchAction]; NSMutableArray *actionArray = [NSMutableArray array]; // move to backorder NSDictionary *section_json = [self jsonAtSection:indexPath.section]; BOOL available = [[section_json objectForKey:@"available"] boolValue]; // available list if (self.back_order_flag && available) { // actionArray = @[move2BackAction,notifyMeAction,deleteRowAction,addWatchAction]; [actionArray addObject:move2BackAction]; } [actionArray addObjectsFromArray:@[notifyMeAction,deleteRowAction,addWatchAction]]; // edit price NSMutableDictionary * item_json = nil; if (self.back_order_flag) { item_json = [[self itemJsonAtIndexPath:indexPath] mutableCopy]; } else { item_json = [self.content_arr[indexPath.row] mutableCopy]; } NSString* product_id = [item_json valueForKey:@"product_id"]; int is_rate = [item_json[@"is_rate"] intValue]; if(appDelegate.can_set_cart_price && product_id.length>0&& is_rate==0) { // actionArray = @[move2BackAction,notifyMeAction,deleteRowAction,addWatchAction,editRowAction]; [actionArray addObject:editRowAction]; } return actionArray; } } else return @[deleteRowAction,addWatchAction]; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { // NSMutableDictionary * item_json = [[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; // // NSString *ids=[NSString stringWithFormat:@"%d",[[item_json valueForKey:@"cart_item_id"] intValue]]; // // // dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // // NSDictionary* cart_json = [iSalesNetwork cart_remove:ids]; // // dispatch_async(dispatch_get_main_queue(), ^{ // // // // if(cart_json!=nil) // { // // [self reload_data]; // } // // }); // }); // sqlite3* db = [ApexMobileDB get_db]; // NSString* sql = [NSString stringWithFormat:@"delete from history where _id=%@",[self.data.pagedata[indexPath.row] valueForKey:@"_id"]]; // [ApexMobileDB execSql:sql db:db]; // [iSalesDB close_db:db]; // // [self.data.pagedata removeObjectAtIndex:indexPath.row]; // // [tableView reloadData]; } #pragma mark - UIAlertViewDelegate // Called when a button is clicked. The view will be automatically dismissed after this call returns - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { if(alertView.tag==ALERT_DEL) { if(buttonIndex!=alertView.cancelButtonIndex) { // [self.itemListTable reloadRowsAtIndexPaths:@[self.indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; NSMutableDictionary * item_json = nil; if (self.back_order_flag) { item_json = [[self itemJsonAtIndexPath:self.indexPath] mutableCopy]; } else { item_json = [self.content_arr[self.indexPath.row] mutableCopy];//[[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; } NSString *ids=[NSString stringWithFormat:@"%d",[[item_json valueForKey:@"cart_item_id"] intValue]]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSDictionary* cart_json = [RANetwork cart_remove:ids]; dispatch_async(dispatch_get_main_queue(), ^{ if([[cart_json valueForKey:@"result"] intValue]==2) { // AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; if (self.back_order_flag) { NSInteger section_count = [self sectionCount]; for (int i = 0; i < section_count; i++) { NSInteger item_count = [self itemCountInSection:i]; BOOL ready_break = NO; for (int j = 0; j < item_count; j++) { NSIndexPath *indexPath = [NSIndexPath indexPathForRow:j inSection:i]; NSDictionary* obj_json = [self itemJsonAtIndexPath:indexPath]; NSString* _id =[obj_json valueForKey:@"cart_item_id"]; if([_id isEqualToString:ids]) { [self updateItemJson:nil atIndexPath:indexPath]; ready_break = YES; break; } } if (ready_break) { break; } } } else { for(int i=0;i // }]; } } else if(alertView.tag==ALERT_SET_FREE) { if(buttonIndex!=alertView.cancelButtonIndex) { [self.itemListTable reloadRowsAtIndexPaths:@[self.indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; NSMutableDictionary * item_json = nil; if (self.back_order_flag) { item_json = [[self itemJsonAtIndexPath:self.indexPath] mutableCopy]; } else { item_json = [self.content_arr[self.indexPath.row] mutableCopy];//[[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)self.indexPath.row]] mutableCopy]; } NSString *ids=[NSString stringWithFormat:@"%d",[[item_json valueForKey:@"cart_item_id"] intValue]]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSDictionary* cart_json = [RANetwork cart_setFree:ids isfree:true]; dispatch_async(dispatch_get_main_queue(), ^{ if([[cart_json valueForKey:@"result"] intValue]==2) { [self reload_data]; } else { [RAUtils message_alert:[cart_json valueForKey:@"err_msg"] title:@"Set Free Model" controller:self] ; } }); }); } } else if(alertView.tag==ALERT_RESTORE_FREE) { if(buttonIndex!=alertView.cancelButtonIndex) { [self.itemListTable reloadRowsAtIndexPaths:@[self.indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; NSMutableDictionary * item_json = nil; if (self.back_order_flag) { item_json = [[self itemJsonAtIndexPath:self.indexPath] mutableCopy]; } else { item_json = [self.content_arr[self.indexPath.row] mutableCopy];//[[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)self.indexPath.row]] mutableCopy]; } NSString *ids=[NSString stringWithFormat:@"%d",[[item_json valueForKey:@"cart_item_id"] intValue]]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSDictionary* cart_json = [RANetwork cart_setFree:ids isfree:false]; dispatch_async(dispatch_get_main_queue(), ^{ if([[cart_json valueForKey:@"result"] intValue]==2) { [self reload_data]; } else { [RAUtils message_alert:[cart_json valueForKey:@"err_msg"] title:@"Restore Model Price" controller:self] ; } }); }); } } } #pragma mark - Support scanner -(void) onDecodedData:(NSString*) value { int cqty=0; if (self.back_order_flag) { NSInteger section_count = [self sectionCount]; for (int i = 0; i < section_count; i++) { NSInteger item_count = [self itemCountInSection:i]; for (int j = 0; j < item_count; j++) { NSIndexPath *indexPath = [NSIndexPath indexPathForRow:j inSection:i]; NSDictionary* item = [self itemJsonAtIndexPath:indexPath]; if([item[@"model"] isEqualToString:value]) { cqty=[item[@"count"] intValue]; } } } } else { for(int i=0;i0) { UIAlertController *alertControl = [UIAlertController alertControllerWithTitle:[NSString stringWithFormat:@"QTY: %d of this model already in cart. Continue ?",cqty] message:nil preferredStyle:UIAlertControllerStyleAlert]; //block代码块取代了delegate UIAlertAction *actionOne = [UIAlertAction actionWithTitle:@"Yes" style:UIAlertActionStyleDestructive handler:^(UIAlertAction *action) { [self addtocart:value]; }]; UIAlertAction *alertthree = [UIAlertAction actionWithTitle:@"No" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) { DebugLog(@"No"); }]; [alertControl addAction:actionOne]; [alertControl addAction:alertthree]; //UIAlertControllerStyle类型为UIAlertControllerStyleAlert可以添加addTextFieldWithConfigurationHandler:^(UITextField *textField) [self presentViewController:alertControl animated:YES completion:nil]; } else [self addtocart:value]; } -(void) addtocart:(NSString*) modelname { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSDictionary* return_json = [RANetwork add_toCart_byName: modelname withScreen:ScreenCodeCart]; dispatch_async(dispatch_get_main_queue(), ^{ if([[return_json valueForKey:@"result"] intValue]==2) { NSDictionary* newitem = [return_json objectForKey:@"item_0"]; NSString* item_id = [newitem valueForKey:@"cart_item_id"]; // bool isnew=false; AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; // [((MainViewController*)appDelegate.main_vc) reloadWish:true immediately:false]; if (self.back_order_flag) { NSInteger section_count = [self sectionCount]; for (int i = 0; i < section_count; i++) { NSInteger item_count = [self itemCountInSection:i]; BOOL ready_break = NO; for (int j = 0; j < item_count; j++) { NSIndexPath *indexPath = [NSIndexPath indexPathForRow:j inSection:i]; NSDictionary* obj_json = [self itemJsonAtIndexPath:indexPath]; NSString* _id =[obj_json valueForKey:@"cart_item_id"]; if([_id isEqualToString:item_id]) { [self updateItemJson:nil atIndexPath:indexPath]; ready_break = YES; break; } } if (ready_break) { break; } } } else { for(int i=0;i0) { send_to=[[customer_email componentsSeparatedByString:NSLocalizedString(@";", nil)] mutableCopy]; } ViewController.mail_to = send_to; ViewController.filename = [NSString stringWithFormat:@"%@_Product_List.pdf",COMPANY_SHORT_NAME]; ViewController.mail_subject = subject; ViewController.hidenavi = false; [self.navigationController pushViewController:ViewController animated:YES]; } - (void)showAddressBoxToEmailProduct:(NSString *)productID { // AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; JKMessageBoxController *emailAddrVC = [JKMessageBoxController messageBoxControllerWithTip:@"E-mail not setup, please enter your default e-mail address" ContentSize:CGSizeMake(400, 150)]; emailAddrVC.textFiled.secureTextEntry = NO; emailAddrVC.yesButtonTitle = @"send"; __weak typeof(emailAddrVC) weakVC = emailAddrVC; __weak typeof(self) weakself = self; emailAddrVC.textHandler = ^(NSString *text){ // 验证邮箱格式是否正确 // NSString *match = EMAIL_MATCHES; // NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",match]; // BOOL isEmailAddr = [predicate evaluateWithObject:text]; BOOL isEmailAddr = YES; if (isEmailAddr) { // 验证是邮件地址,发送邮件 [weakVC dismissViewControllerAnimated:YES completion:^{ UIAlertView *waitting_alert = [RAUtils waiting_alert:@"Sending Email" title:@"Waiting"]; dispatch_async(dispatch_get_global_queue(0, 0), ^{ NSDictionary *result = [RANetwork notifyModel:productID emailAddr:text withScreen:ScreenCodeCart]; dispatch_async(dispatch_get_main_queue(), ^{ [waitting_alert dismissWithClickedButtonIndex:0 animated:NO]; int resultStatus = [[result objectForKey:@"result"] intValue]; if (resultStatus != RESULT_TRUE && resultStatus != RESULT_NO_EMAIL_ADDRESS) { NSString *msg = [NSString stringWithFormat:@"The email send failed"]; if ([result valueForKey:@"err_msg"]) { msg = [result valueForKey:@"err_msg"]; } UIAlertController *errorAlertVC = [UIAlertController alertControllerWithTitle:@"Warning" message:msg preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *action = [UIAlertAction actionWithTitle:@"ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; [errorAlertVC addAction:action]; [weakself presentViewController:errorAlertVC animated:YES completion:nil]; }else if(resultStatus == RESULT_TRUE){ [RAUtils message_alert:@"Notification is sent to default email address." title:@"Message" controller:weakself]; } else if (resultStatus == RESULT_NO_EMAIL_ADDRESS) { [weakself showAddressBoxToEmailProduct:productID]; } }); }); }]; } else { // 非邮件地址,警告 [weakVC warning:@"Please enter right email address"]; } }; [self presentViewController:emailAddrVC animated:YES completion:nil]; } #pragma mark - Back Order - (void) setCart_json:(NSDictionary *)cart_json { _cart_json = cart_json; [self fillContentArray]; } - (void)fillContentArray { NSMutableArray *arr = [NSMutableArray array]; for (int i = 0; i < [self sectionCount]; i++) { NSInteger item_count = [self itemCountInSection:i]; for (int j = 0; j < item_count; j++) { NSDictionary *item = [self itemJsonAtIndexPath:[NSIndexPath indexPathForRow:j inSection:i]]; [arr addObject:item]; } } self.content_arr = arr; [self refresh_total]; } - (NSInteger)sectionCount { return [[self.cart_json objectForKey:@"section_count"] integerValue]; } - (NSDictionary *)jsonAtSection:(NSInteger)section { return [self.cart_json objectForKey:[NSString stringWithFormat:@"section_%ld",section]]; } - (NSInteger)itemCountInSection:(NSInteger)section { NSDictionary *section_json = [self jsonAtSection:section]; return [[section_json objectForKey:@"count"] integerValue]; } - (NSString *)titleForSection:(NSInteger)section { NSDictionary *section_json = [self jsonAtSection:section]; return [section_json objectForKey:@"title"]; } - (NSDictionary *)itemJsonAtIndexPath:(NSIndexPath *)indexPath { NSDictionary *section = [self jsonAtSection:indexPath.section]; return [section objectForKey:[NSString stringWithFormat:@"item_%ld",indexPath.row]]; } - (void)updateItemJson:(NSDictionary *)new_item_json atIndexPath:(NSIndexPath *)indexPath { NSMutableDictionary *new_cart_json = [self.cart_json mutableCopy]; NSMutableDictionary *new_section_json = [[self jsonAtSection:indexPath.section] mutableCopy]; NSString *section_key = [NSString stringWithFormat:@"section_%ld",indexPath.section]; NSString *item_key = [NSString stringWithFormat:@"item_%ld",indexPath.row]; if (new_item_json) { // 更新Item [new_section_json setObject:new_item_json forKey:item_key]; } else { // 删除Item NSInteger item_count = [self itemCountInSection:indexPath.section]; for (NSInteger i = 0; i < item_count; i++) { if (i >= indexPath.row) { if (i < item_count - 1) { item_key = [NSString stringWithFormat:@"item_%ld",i + 1]; NSDictionary *followed_item_json = [new_section_json objectForKey:item_key]; item_key = [NSString stringWithFormat:@"item_%ld",i]; [new_section_json setObject:followed_item_json forKey:item_key]; } else { item_key = [NSString stringWithFormat:@"item_%ld",i]; [new_section_json removeObjectForKey:item_key]; } } } [new_section_json setObject:@(item_count - 1) forKey:@"count"]; } [new_cart_json setObject:new_section_json forKey:section_key]; self.cart_json = [new_cart_json copy]; } - (void)reRefreshView { [self.itemListTable reloadData]; } @end