// // KWMSelectAddressVC.m // iCemarose // // Created by HouWeiBin on 16/9/2. // Copyright © 2016年 kollway. All rights reserved. // #import "KWMSelectAddressVC.h" #import "KWMAddressCell.h" #import "KWMEditAddressVC.h" #import "KWMBeforePayVC.h" #import "KWMStringUtil.h" #import "UIViewController+BackButtonHandler.h" #import "KWMValidateUtil.h" @interface KWMSelectAddressVC () @property (nonatomic) NSMutableArray<BUYAddress *> *listData; //当前的地址 @property (nonatomic) BUYAddress * address; @end @implementation KWMSelectAddressVC{ UIBarButtonItem *rightButton; } +(NSString *)kwmTag{ return @"KWMSelectAddressVC"; } - (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; [self requestGetAddressList]; } - (void)viewDidLoad { [super viewDidLoad]; self.title = @"收货地址"; [self.tbvAddress setAllowsSelection:YES]; _vNoAddress.hidden = YES; self.needAddressView.delegate = self; [self initTitle]; if(self.checkout && self.checkout.billingAddress){ self.address = self.checkout.billingAddress; } } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } - (void)initTitle{ self.isEditing = NO; self.vDelete.delegate = self; rightButton = [[UIBarButtonItem alloc] initWithTitle:@"编辑" style:UIBarButtonItemStylePlain target:self action:@selector(clickRightButton)]; self.navigationItem.rightBarButtonItem = rightButton; } -(void)onClickAddAddress:(id)sender{ KWMEditAddressVC *editVC = (KWMEditAddressVC *)[KWMBaseVC findControllerBy:[KWMEditAddressVC kwmTag] fromStoryboard:@"ShopCart"]; [self.navigationController pushViewController:editVC animated:YES]; } -(void)clickRightButton{ self.isEditing = !self.isEditing; if(self.isEditing){ if(self.listData == nil || self.listData.count == 0){ [self showToast:@"请添加收货地址"]; }else{ [rightButton setTitle:@"取消"]; } }else{ [rightButton setTitle:@"编辑"]; } [self.tbvAddress reloadData]; } -(UITableView *)targetTableView{ return self.tbvAddress; } -(void)loadData{ if (_listData == nil) { _listData = [NSMutableArray array]; } [self requestGetAddressList]; } -(void)reLoadData{ if (_listData == nil) { _listData = [NSMutableArray array]; } [self requestGetAddressList]; } //获取地址API - (void)requestGetAddressList{ if(self.loading){ return; } [self showLoading]; self.loading = YES; self.client.customerToken = [BUYCustomerToken customerTokenWithJSONDictionary:[[NSUserDefaults standardUserDefaults] objectForKey:@"token"]]; [self.client getAddressesCallback:^(NSArray<BUYAddress *> * _Nullable addresses, NSError * _Nullable error) { self.loading = NO; [self hideLoading]; if (error == nil) { [_listData removeAllObjects]; [_listData addObjectsFromArray:addresses]; [self.tbvAddress reloadData]; if (_listData.count == 0) { self.vNoAddress.hidden = NO; }else{ self.vNoAddress.hidden = YES; } }else if (error != nil){ [self showError:error]; NSLog(@"error : %@",error); } }]; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ return _listData.count; } #pragma mark UITableViewDelegate -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ return 130; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ NSString *indentifier = @"KWMAddressCell"; KWMAddressCell *addressCell = [tableView dequeueReusableCellWithIdentifier:indentifier]; if (!addressCell) { [tableView registerNib:[UINib nibWithNibName:indentifier bundle:nil] forCellReuseIdentifier:indentifier]; addressCell = [tableView dequeueReusableCellWithIdentifier:indentifier]; } addressCell.address = [_listData objectAtIndex:indexPath.row]; [addressCell setData:self.isEditing]; addressCell.delegate = self; return addressCell; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ if(!self.isEditing){ _address = [_listData objectAtIndex:indexPath.row]; [self updateCheckAddress:_address]; } [tableView deselectRowAtIndexPath:indexPath animated:YES]; } #pragma mark -- KWMAddressCell - (void)kwm_onClickDeleteBtnWith:(BUYAddress *)address{ self.vDelete.address = address; self.vDelete.hidden = NO; } -(void)kwm_onClickEditBtnWith:(BUYAddress *)address{ KWMEditAddressVC *editVC = (KWMEditAddressVC *)[KWMBaseVC findControllerBy:[KWMEditAddressVC kwmTag] fromStoryboard:@"ShopCart"]; editVC.address = address; [self.navigationController pushViewController:editVC animated:YES]; } #pragma mark -- KWMDeleteDelegate - (void)kwm_deleteProduct{ if(self.vDelete.address){ [self requestDeleteAddressAPIWith:self.vDelete.address]; } } - (void)updateCheckAddress:(BUYAddress *)address{ if (self.delegate == nil) { return; } NSString *errorMsg = [KWMValidateUtil validateAddress:address]; if (!errorMsg) { [self.delegate kwm_setAddress:address]; [self.navigationController popViewControllerAnimated:YES]; }else{ [self showToast:errorMsg]; } // if(self.checkout == nil){ // if(self.delegate != nil){ // [self.delegate kwm_getAddress:address]; // } // return; // } // if(address == nil){ // self.checkout.billingAddress = nil; // self.checkout.shippingAddress = nil; // if(self.delegate != nil){ // [self.delegate kwm_selectAddress:self.checkout]; // } // return; // } // if(address.identifier.integerValue != self.checkout.billingAddress.identifier.integerValue){ // if(address!=nil && [KWMStringUtil isEmpty:self.address.firstName]){ // self.address.firstName = @""; // } // self.checkout.billingAddress = address; // self.checkout.shippingAddress = address; // // [self showLoading]; // [self.client updateCheckout:self.checkout completion:^(NSDictionary *dictionary, BUYCheckout *checkout, NSError *error) { // [self hideLoading]; // if (error == nil && checkout) { // self.checkout = checkout; // if(self.delegate != nil){ // [self.delegate kwm_selectAddress:checkout]; // } // [self showToast:@"更新地址成功"]; // [self.navigationController popViewControllerAnimated:YES]; // } // else { // [self showError:error]; //// [self showToast:@"更新地址失败"]; // NSLog(@"Error applying checkout: %@", error); // } // }]; // } } //删除地址API - (void)requestDeleteAddressAPIWith:(BUYAddress *)address{ [self showLoading]; [self.client deleteAddressWithID:address.identifier callback:^(BUYStatus status, NSError * _Nullable error) { [self hideLoading]; if (error == nil || status == BUYStatusComplete || status == BUYStatusProcessing) { [_listData removeObject:address]; [self updateCustomerAddress:address]; [self.tbvAddress reloadData]; }else if (error != nil){ [self showError:error]; } }]; } - (void)updateCustomerAddress:(BUYAddress *)removeAddress{ [self showLoading]; self.loading = YES; [self.client getCustomerCallback:^(BUYCustomer * _Nullable customer, NSError * _Nullable error) { self.loading = NO; [self hideLoading]; if (error == nil && customer != nil) { [[NSUserDefaults standardUserDefaults] setObject:customer.JSONDictionary forKey:@"customer"]; } if(error == nil){ //如果选中的地址被删掉,使用新默认地址 if(self.address && removeAddress && self.address.identifier.integerValue==removeAddress.identifier.integerValue ){ //将地址设置为默认地址 if(customer && customer.defaultAddress!=nil){ [self updateCheckAddress:customer.defaultAddress]; }else{ [self updateCheckAddress:nil]; } } }else if (error != nil){ [self showError:error]; } }]; } -(void)kwm_cancel{ KWMBeforePayVC *vc = (KWMBeforePayVC *)self.delegate; if (![KWMValidateUtil validateAddress:vc.address]) { [[self navigationController] popViewControllerAnimated:YES]; }else{ NSArray *vcs = [[self navigationController] viewControllers]; id top = [vcs objectAtIndex:vcs.count - 3]; [[self navigationController] popToViewController:top animated:YES]; } } -(BOOL) navigationShouldPopOnBackButton { if (self.delegate == nil) { return YES; } self.needAddressView.hidden = NO; return NO; // Ignore 'Back' button this time } @end