// // PortfolioViewController.m // RedAnt ERP Mobile // // Created by Ray on 12/7/15. // Copyright © 2015 United Software Applications, Inc. All rights reserved. // #import "PortfolioViewController.h" #import "RANetwork.h" #import "ModelItemCell.h" #import "DetailViewController.h" #import "LoginViewController.h" #import "MainViewController.h" #import "TearSheetParamViewController.h" #import "EditModelPriceViewController.h" #import "ContactListViewController.h" #import "PortfolioEditQTYViewController.h" #import "RAPDFViewController.h" #import "DefaultTableHeaderView.h" #import "DefaultAppearance.h" #import "SortItemViewController.h" #import "SortButton.h" #import "TextUtils.h" #import "FileCache.h" #ifdef BUILD_UWAVER //#import "RAPortfolioInputDialog.h" #endif //#define ALERT_DEL 1025 #define checked_Count @"checkedCount" @interface PortfolioViewController () @property (nonatomic,strong) SortItemViewController *sortItemController; @property (nonatomic,assign) int sortIndex; @property (nonatomic,strong) SortButton *sortButton; @property (nonatomic,assign) NSInteger editedRow; @property (nonatomic,assign) NSInteger deletedRow; @property (strong, nonatomic) NSIndexPath *deleteIndexPath;// 点击delete action @end @implementation PortfolioViewController -(void) logout { self.content_data = nil; [self refresh_ui]; } - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } #ifndef RA_NOTIFICATION -(void) reload_container_getdata:(bool) update_data { [super reload_container_getdata:update_data]; if(update_data) [self reload_data]; else [self.itemListTable reloadData]; AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; if(appDelegate.can_create_portfolio) { //#ifdef BUILD_UWAVER // self.btnCreatePort.title = @"Create Hang Tag"; //#else [self.btnCreatePort setTitle:@"Create Portfolio"]; //#endif self.btnCreatePort.enabled = true; } else { [self.btnCreatePort setTitle:@""]; self.btnCreatePort.enabled = false; } } #endif -(void) showHidePrice { #ifndef RA_NOTIFICATION [self reload_container_getdata:false]; // [self refresh_total]; #endif } //- (IBAction)onAddtoCart:(id)sender { // UIApplication * app = [UIApplication sharedApplication]; // AppDelegate *appDelegate = (AppDelegate *)[app delegate]; // MainViewController* main_vc=(MainViewController*)appDelegate.main_vc; // if(appDelegate.bLogin==false) // { // // LoginViewController * loginvc =[[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"LoginViewController"]; // // loginvc.delegate = self; // // loginvc.modalPresentationStyle = UIModalPresentationFormSheet;//有三种状态,自己看看是哪种 // // loginvc.returnValue = ^(bool blogin){ // // // // UIApplication * app = [UIApplication sharedApplication]; // // AppDelegate *appDelegate = (AppDelegate *)[app delegate]; // // // // // if(blogin) // { // if(appDelegate.user_type==USER_ROLE_EMPLOYEE) // { // // [main_vc checklogin:false]; // // if(appDelegate.can_create_order) // { // NSString* msg =@""; // if(appDelegate.contact_id.length>0) // { // msg = [msg stringByAppendingString:@"\n\nCustomer:"]; // msg = [msg stringByAppendingString:appDelegate.customerInfo[@"customer_name"]]; // // } // UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Add to cart", nil) message:msg delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) otherButtonTitles:NSLocalizedString(@"Check for saved order", nil),NSLocalizedString(@"Create new order", nil), nil]; // // // // // alert. // [alert show]; // } // else // { // UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Add to cart", nil) message:NSLocalizedString(@"", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) otherButtonTitles:NSLocalizedString(@"Check for saved order", nil), nil]; // // // alert. // [alert show]; // } // } // else // { // [main_vc checklogin:true]; // } // } // // // self.offset = 0; // // [self.content_data removeAllObjects]; // // [self loadpage]; // // // // [[self navigationController] setNavigationBarHidden:YES animated:NO]; // // }; // // UINavigationController* navi = [[UINavigationController alloc] initWithRootViewController:loginvc] ; // // // // // // // [self hackModalSheetSize:CGSizeMake(450, 200) ofVC:navi]; // // navi.modalPresentationStyle = UIModalPresentationFormSheet;//有三种状态,自己看看是哪种 // [self presentViewController:navi animated:YES completion:^{ // // // navi.view.superview.bounds = CGRectMake(0, 0, 480, 320); // // DebugLog(@"LoginViewController present........."); // // // self.btop = false; // // <#code#> // }]; // } // else // { // if(appDelegate.user_type==USER_ROLE_EMPLOYEE&&/*appDelegate.contact_id==nil&&*/appDelegate.order_code==nil) // { // [main_vc checklogin:false]; // if(appDelegate.can_create_order) // { // NSString* msg =@""; // if(appDelegate.contact_id.length>0) // { // msg = [msg stringByAppendingString:@"\n\nCustomer:"]; // msg = [msg stringByAppendingString:appDelegate.customerInfo[@"customer_name"]]; // // } // UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Add to cart", nil) message:msg delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) otherButtonTitles:NSLocalizedString(@"Check for saved order", nil),NSLocalizedString(@"Create new order", nil), nil]; // // // alert. // [alert show]; // } // else // { // UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Add to cart", nil) message:NSLocalizedString(@"", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"Cancel", nil) otherButtonTitles:NSLocalizedString(@"Check for saved order", nil), nil]; // // // alert. // [alert show]; // } // } // else // { // // if(appDelegate.order_code==nil) // [ self neworder]; // else // [self addtocart]; // // // // } // } // //} -(void) addtocart { NSMutableArray* checked = [[NSMutableArray alloc] init]; NSMutableArray* checked_iid = [[NSMutableArray alloc] init]; int count = [[self.content_data valueForKey:@"count"] intValue]; for(int i=0;i0) { send_to=[[customer_email componentsSeparatedByString:NSLocalizedString(@";", nil)] mutableCopy]; // customer_email compo // [send_to addObject:customer_email]; } ViewController.mail_to = send_to; // } // else // { // subject = [NSString stringWithFormat:@"Tear sheet for %@",company ]; // } // ViewController.attachment_name = [NSString stringWithFormat:@"NPD_Product_List %@.pdf",cur_time]; ViewController.filename = [NSString stringWithFormat:@"%@.pdf",[TextUtils legalFilename:name]]; ViewController.mail_subject = subject; ViewController.hidenavi = false; [self.navigationController pushViewController:ViewController animated:YES]; }; // AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; VC.onDismiss=^(NSString* catelog_name) { }; // // if(checked.count==count) // { // orderinfoVC.have_tail = true // } UINavigationController* navi = [[UINavigationController alloc] initWithRootViewController:VC] ; navi.modalPresentationStyle = UIModalPresentationPageSheet;//有三种状态,自己看看是哪种 [self presentViewController:navi animated:YES completion:^{ DebugLog(@"TearSheetParamViewController present........."); // self.btop = false; // <#code#> }]; [self.btnselect setTitle:@"Select all"]; } - (void)createPreviewPortfolio:(NSString *)catelog_name Note:(NSString *)internal_note ProductIds:(NSArray *)productIds ItemIds:(NSArray *)itemIds { if (catelog_name.length == 0) { NSString *msg = @"Portfolio name can not be empty"; //#ifdef BUILD_UWAVER // msg = @"hang tag name can not be empty"; //#else msg = @"Portfolio name can not be empty"; //#endif [RAUtils message_box:@"Warning" message:msg completion:nil]; return; } self.pdf_url= nil; NSString* pdf_url = [self.content_data valueForKey:@"pdf_url"]; if (!pdf_url) { pdf_url = @""; } NSMutableDictionary * params= [[NSMutableDictionary alloc] init]; NSString * string = [productIds componentsJoinedByString:@","]; NSString * string_iid = [itemIds componentsJoinedByString:@","]; [params setValue:string forKey:@"product_ids"]; [params setValue:string_iid forKey:@"item_ids"]; [params setObject:@(self.sortIndex) forKey:@"sort"]; [params setObject:pdf_url forKey:@"pdfUrl"]; // __block UIAlertController * waitalert = [RAUtils waiting_alert:self title:@"Processing" completion:^{ PopWaitAlert* pop = [RAUtils waiting_pop:@"Processing" completion:nil]; [RANetwork request_portfoliopreview:params completionHandler:^(NSMutableDictionary *result) { NSDictionary* editor_json = result; // [waitalert dismissViewControllerAnimated:YES completion:^{ [pop hide]; if([[editor_json valueForKey:@"result"] intValue]==2) { AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; NSString* url = [editor_json valueForKey:@"pdf_path"]; NSString* path = [editor_json valueForKey:@"pdf_real_path"]; bool isLocalFile = [[editor_json valueForKey:@"isLocalFile"] boolValue]; RAPDFViewController *ViewController = [[UIStoryboard storyboardWithName:@"wkweb" bundle:nil] instantiateViewControllerWithIdentifier:@"RAPDFViewController"]; ViewController.url = url; ViewController.canSave = true; ViewController.isLocalfile=isLocalFile; ViewController.filename = [NSString stringWithFormat:@"%@.pdf",[TextUtils legalFilename:catelog_name]]; ViewController.save_name =catelog_name; ViewController.save_note =internal_note; NSString* company= [appDelegate.customerInfo valueForKey:@"customer_name"]; if(company==nil) company=@""; NSString* customer_email= [appDelegate.customerInfo valueForKey:@"customer_email"]; NSMutableArray* send_to = [[NSMutableArray alloc]init]; if(customer_email.length>0) { send_to=[[customer_email componentsSeparatedByString:NSLocalizedString(@";", nil)] mutableCopy]; } ViewController.mail_to = send_to; NSString* subject; subject =catelog_name; ViewController.mail_subject = subject; ViewController.onSavePDF=^(NSString* name,NSString* file) { NSString* del_ids = nil; #ifdef OFFLINE_MODE if (appDelegate.offline_mode) { [params setValue:url forKey:@"pdfPath"]; } else #endif { [params setValue:path forKey:@"pdfPath"]; } [params setValue:name forKey:@"pdfName"]; [params setValue:internal_note forKey:@"pdfNote"]; [params setValue:del_ids forKey:@"itemIds"]; [params setValue:pdf_url forKey:@"configureParams"]; // __block UIAlertController * waitalert = [RAUtils waiting_alert:self title:@"Saving..." completion:^{ PopWaitAlert* pop = [RAUtils waiting_pop:@"Saving..." completion:nil]; [RANetwork request_save_portfolio:params completionHandler:^(NSMutableDictionary *result) { NSDictionary* json =result; // [waitalert dismissViewControllerAnimated:YES completion:^{ [pop hide]; if([[json valueForKey:@"result"] intValue]==2) { [RAUtils message_box:@"Save Portfolio" message:@"Portfolio saved. You can find it from View Portfolios" completion:nil]; // [RAUtils alert_view:nil title:@"Portfolio saved. You can find it from View Portfolios" ] ; [self.navigationController dismissViewControllerAnimated:true completion:^{ #ifdef RA_NOTIFICATION [ActiveViewController Notify:@"PortfolioViewController,PDFListViewController" Message:RA_NOTIFICATION_RELOAD_DATA]; #else [((MainViewController*)appDelegate.main_vc) reloadPortfolio:true immediately:true]; [((MainViewController*)appDelegate.main_vc) reloadDocuments:true immediately:false]; #endif }]; } else { [RAUtils message_box:@"Save Portfolio" message:[json valueForKey:@"err_msg"] completion:nil]; } // }]; }]; // }]; }; ViewController.hidenavi = false; [self.navigationController pushViewController:ViewController animated:YES]; } else { [RAUtils message_box:@"Create Portfolio" message:[editor_json valueForKey:@"err_msg"] completion:nil]; } // }]; }]; // }]; } - (void)viewDidLoad { [super viewDidLoad]; // UIView *line = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0.000001)]; // [line setBackgroundColor:[UIColor clearColor]]; // self.itemListTable.tableHeaderView = line; // 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]; // [[UIToolbar appearance] setBackgroundColor: [UIColor whiteColor]]; 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; self.sortIndex = 0; self.editedRow = -1; self.deletedRow = -1; self.indexPath = [NSIndexPath indexPathForRow:-1 inSection:0]; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(refresh_btn_click:)]; // tap.minimumPressDuration = 0.8; //定义按的时间 [self.label_net_err addGestureRecognizer:tap]; //#ifdef BUILD_UWAVER // self.btnCreatePort.title = @"Create Hang Tag"; // self.btnEdit.title = nil; // self.btnEdit.enabled = NO; //#endif [self initCheckedCount]; } -(void)manually_refresh { UIRefreshControl *reF = (UIRefreshControl *)[self.view viewWithTag:200]; if(self.isrefreshing) { [reF endRefreshing]; return; } reF.attributedTitle = [[NSAttributedString alloc]initWithString:@"Refreshing"]; if ([self respondsToSelector:@selector(reload_data)]) [self performSelector:@selector(reload_data) withObject:nil afterDelay:1]; // DebugLog(@"refresh!!!!!!!!"); } - (IBAction)onSelectClick:(id)sender { // self.total=0; int count =[[self.content_data valueForKey:@"count"] intValue]; if (count) { if([self.btnselect.title isEqualToString:@"Select all"]) { for(int i=0;i }]; // [//tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; } return; } // NSMutableDictionary * params= [[NSMutableDictionary alloc] init]; NSString * ids = [checked componentsJoinedByString:@","]; { DebugLog(@"edit click"); UIViewController* parentvc=self; PortfolioEditQTYViewController * vc =[ [UIStoryboard storyboardWithName:@"ERP_Mobile_Portfolio" bundle:nil] instantiateViewControllerWithIdentifier:@"PortfolioEditQTYViewController"]; // NSMutableDictionary * item_json = [[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; vc.arr_fashion_ids = nil; vc.ids_count=(int)checked.count; // vc.fashionid = [NSString stringWithFormat:@"%d",[[item_json valueForKey:@"fashion_id"] intValue]]; // vc.qty = [[item_json valueForKey:@"available_qty"] intValue]; // // vc.discount=[[item_json valueForKey:@"tear_sheet_discount"] floatValue]; // vc.price = [[item_json valueForKey:@"tear_sheet_price"] floatValue]; // vc.delegate = parentvc.self; // loginvc.modalPresentationStyle = UIModalPresentationFormSheet;//有三种状态,自己看看是哪种 vc.onSetValue = ^(int qty,double qty_p,double price, double discount , NSString* notes){ // __block UIAlertController * waitalert = [RAUtils waiting_alert:self title:@"Updating Quantity" completion:^{ PopWaitAlert* pop = [RAUtils waiting_pop:@"Updating Quantity" completion:nil]; [RANetwork request_update_portfolio_price:ids price:price discount:discount QTY:qty qty_p:qty_p notes:notes completionHandler:^(NSMutableDictionary *result) { NSDictionary* cart_json = result; // [waitalert dismissViewControllerAnimated:YES completion:^{ [pop hide]; if([[cart_json valueForKey:@"result"] intValue]==2) { [RAUtils message_box:@"Edit Portfolio" message:[NSString stringWithFormat:@"%ld items saved.",checked.count] completion:nil]; [self reload_data]; } else { [RAUtils message_box:@"Edit Portfolio" message:[cart_json valueForKey:@"err_msg"] completion:nil]; } // }]; }]; // }]; }; UINavigationController* navi = [[UINavigationController alloc] initWithRootViewController:vc] ; // [self hackModalSheetSize:CGSizeMake(450, 200) ofVC:navi]; navi.modalPresentationStyle = UIModalPresentationFormSheet;//有三种状态,自己看看是哪种 [parentvc presentViewController:navi animated:YES completion:^{ // navi.view.superview.bounds = CGRectMake(0, 0, 480, 320); DebugLog(@"EditModelPriceViewController present........."); // self.btop = false; // <#code#> }]; // [tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; } } - (IBAction)onDeleteClick:(id)sender { NSMutableArray* checked = [[NSMutableArray alloc] init]; int count = [[self.content_data valueForKey:@"count"] intValue]; for(int i=0;i=0) { cell.available_qty_label.hidden=false; cell.available_qty_value_label.hidden=false; cell.available_qty_value_label.text = [NSString stringWithFormat:@"%d",qty]; } else if(qty_p>=0) { cell.available_qty_label.hidden=false; cell.available_qty_value_label.hidden=false; cell.available_qty_value_label.text = [NSString stringWithFormat:@"%.2f %%",qty_p]; } else { cell.available_qty_label.hidden=true; cell.available_qty_value_label.hidden=true; } NSString* str_price =[NSString stringWithFormat:@"%.2f",price * (1.0-discount/100)]; bool noprice =[[item_json valueForKey:@"is_no_price"]boolValue]; if(noprice) str_price=@"No Price"; if(appDelegate.can_see_price&&appDelegate.price_hidden==false) { } else { str_price=nil; } cell.labelPrice.text = str_price; // cell.labelPrice.text = price; // cell.editCount.text =[NSString stringWithFormat:@"%d",count]; // NSDictionary* val_json =[cadedate_json objectForKey:[NSString stringWithFormat:@"val_%d",i]]; int check = [[item_json valueForKey:@"check"] intValue]; if(check==1) cell.img_checkmark.hidden=false; else cell.img_checkmark.hidden=true; // UIImageView* iv =cell.btnImage.imageView; // [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=[FileCache 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]; // cell.btnImage.imageView.image = img; } 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) { [FileCache 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];// [UIColor whiteColor];; // if (indexPath.row == self.editedRow) { // cell.backgroundColor = UIColorFromRGB(0xEAEBED); // } // if (indexPath.row == self.deletedRow) { // cell.backgroundColor = UIColorFromRGB(0xEAEBED); // } if (indexPath.row == self.indexPath.row) { cell.backgroundColor = UIColorFromRGB(0xEAEBED); } return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { ModelItemCell* cell = (ModelItemCell*)[tableView cellForRowAtIndexPath:indexPath]; cell.selected = false; // self.dirty = true; NSMutableDictionary * item_json = [[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; int check = [[item_json valueForKey:@"check"] intValue]; if(check==1) { [item_json setValue:@"0" forKey:@"check"]; cell.img_checkmark.hidden=true; [self.btnselect setTitle: @"Select all"]; [self checkedCountRise:NO]; } else { [item_json setValue:@"1" forKey:@"check"]; cell.img_checkmark.hidden=false; [self checkedCountRise:YES]; if ([self allChecked]) { [self.btnselect setTitle: @"DeSelect all"]; } } [self.content_data setObject:item_json forKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]]; } - (UITableViewCellEditingStyle)tableView:(UITableView *)tv editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath { return UITableViewCellEditingStyleDelete; } //#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 //{ // // // //} - (BOOL)isPureFloat:(NSString*)string{ NSScanner* scan = [NSScanner scannerWithString:string]; float val; return[scan scanFloat:&val] && [scan isAtEnd]; } #pragma mark 在滑动手势删除某一行的时候,显示出更多的按钮 //- (NSArray *)tableView:(UITableView *)tableView editActionsForRowAtIndexPath:(NSIndexPath *)indexPath - (UISwipeActionsConfiguration *)tableView:(UITableView *)tableView trailingSwipeActionsConfigurationForRowAtIndexPath:(NSIndexPath *)indexPath { // 添加一个删除按钮 // self.indexPath=indexPath; // ModelItemCell * cell = [tableView cellForRowAtIndexPath:indexPath]; // UITableViewRowAction *deleteRowAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDestructive title:@"Delete" handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { UIContextualAction* deleteRowAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleDestructive title:@"Delete" handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) { DebugLog(@"delete click"); self.deleteIndexPath = indexPath; UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Delete confirm" message:@"Are you sure remove model from portfolio?" preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction *action_2 = [UIAlertAction actionWithTitle:@"YES" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { self.indexPath = self.deleteIndexPath; int count =[[self.content_data valueForKey:@"count"] intValue]; BOOL delete_last = self.indexPath.row == count - 1 ? YES : NO; [self.itemListTable reloadRowsAtIndexPaths:@[self.indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; NSMutableDictionary * item_json = [[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)self.indexPath.row]] mutableCopy]; NSString *ids=[NSString stringWithFormat:@"%d",[[item_json valueForKey:@"item_id"] intValue]]; [RANetwork request_removeportfolio:ids completionHandler:^(NSMutableDictionary *result) { NSMutableDictionary* cart_json =result; if([[cart_json valueForKey:@"result"] intValue]==2) { self.deletedRow = delete_last ? -1 : self.indexPath.row; if (delete_last) { self.indexPath = [NSIndexPath indexPathForRow:count - 2 inSection:0]; } [self reload_data]; } else { [RAUtils message_box:@"Delete Model" message:[cart_json valueForKey:@"err_msg"] completion:nil]; } }]; self.deleteIndexPath = nil; return; }]; UIAlertAction *action_3 = [UIAlertAction actionWithTitle:@"NO" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) { self.deleteIndexPath = nil; return; }]; [alertController addAction:action_2]; [alertController addAction:action_3]; [self presentViewController:alertController animated:YES completion:nil]; // UIAlertView * alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Delete confirm", nil) message:NSLocalizedString(@"Are you sure remove model from portfolio?", nil) delegate:self cancelButtonTitle:NSLocalizedString(@"NO", nil) otherButtonTitles:NSLocalizedString(@"YES", nil), nil]; // alert.tag = ALERT_DEL; // // alert. // [alert show]; }]; deleteRowAction.backgroundColor = UIColorFromRGB(0x336699); // edit qty // UITableViewRowAction *EditQTYAction = [UITableViewRowAction rowActionWithStyle:UITableViewRowActionStyleDefault title:@" Edit " handler:^(UITableViewRowAction *action, NSIndexPath *indexPath) { UIContextualAction* EditQTYAction = [UIContextualAction contextualActionWithStyle:UIContextualActionStyleNormal title:@" Edit " handler:^(UIContextualAction * _Nonnull action, __kindof UIView * _Nonnull sourceView, void (^ _Nonnull completionHandler)(BOOL)) { DebugLog(@"edit click"); UIViewController* parentvc=self; PortfolioEditQTYViewController * vc =[ [UIStoryboard storyboardWithName:@"ERP_Mobile_Portfolio" bundle:nil] instantiateViewControllerWithIdentifier:@"PortfolioEditQTYViewController"]; __block NSMutableDictionary * item_json = [[self.content_data objectForKey:[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]] mutableCopy]; vc.arr_fashion_ids = [[NSArray arrayWithObject:[NSString stringWithFormat:@"%d",[[item_json valueForKey:@"fashion_id"] intValue]]] mutableCopy]; // vc.fashionid = [NSString stringWithFormat:@"%d",[[item_json valueForKey:@"fashion_id"] intValue]]; if([[item_json allKeys] containsObject:@"available_qty"]) vc.qty = [[item_json valueForKey:@"available_qty"] intValue]; else vc.qty=-1; if([[item_json allKeys] containsObject:@"available_percent"]) vc.qty_p = [[item_json valueForKey:@"available_percent"] intValue]; else vc.qty_p=-1; vc.linenotes=[item_json valueForKey:@"linenotes"] ; vc.discount=[[item_json valueForKey:@"tear_sheet_discount"] floatValue]; vc.price = [[item_json valueForKey:@"tear_sheet_price"] floatValue]; vc.title=@"Edit Portfolio"; // vc.delegate = parentvc.self; // loginvc.modalPresentationStyle = UIModalPresentationFormSheet;//有三种状态,自己看看是哪种 vc.onSetValue = ^(int qty,double qty_p, double price, double discount , NSString* notes){ // __block UIAlertController * waitalert = [RAUtils waiting_alert:self title:@"Updating Quantity" completion:^{ PopWaitAlert* pop = [RAUtils waiting_pop:@"Updating Quantity" completion:nil]; [RANetwork request_update_portfolio_price:[NSString stringWithFormat:@"%d",[[item_json valueForKey:@"item_id"] intValue]] price:price discount:discount QTY:qty qty_p:qty_p notes:notes completionHandler:^(NSMutableDictionary *result) { NSDictionary* cart_json = result; // [waitalert dismissViewControllerAnimated:YES completion:^{ [pop hide]; if([[cart_json valueForKey:@"result"] intValue]==2) { self.editedRow = indexPath.row; if (!(qty == -INT32_MAX && qty_p == -MAXFLOAT)) { // qty if (qty != -INT32_MAX) item_json[@"available_qty"]=[NSNumber numberWithInt:qty]; else [item_json removeObjectForKey:@"available_qty"]; // qty_p if (qty_p != -MAXFLOAT) item_json[@"available_percent"]=[NSNumber numberWithInt:qty_p]; else [item_json removeObjectForKey:@"available_percent"]; } if (notes) { item_json[@"linenotes"]=notes; } if (discount != -MAXFLOAT) { item_json[@"tear_sheet_discount"]=[NSString stringWithFormat:@"%.2f",discount]; } if (price != -MAXFLOAT) { item_json[@"tear_sheet_price"]=[NSString stringWithFormat:@"%.2f",price]; } self.content_data[[NSString stringWithFormat:@"item_%ld",(long)indexPath.row]]=item_json; // item_json[@"available_qty"]=[NSNumber numberWithInt:qty]; self.indexPath=indexPath; [self.itemListTable reloadData]; } else { [RAUtils message_box:@"Edit Portfolio" message:[cart_json valueForKey:@"err_msg"] completion:nil]; } // }]; }]; }; UINavigationController* navi = [[UINavigationController alloc] initWithRootViewController:vc] ; // [self hackModalSheetSize:CGSizeMake(450, 200) ofVC:navi]; navi.modalPresentationStyle = UIModalPresentationFormSheet;//有三种状态,自己看看是哪种 [parentvc presentViewController:navi animated:YES completion:^{ // navi.view.superview.bounds = CGRectMake(0, 0, 480, 320); DebugLog(@"EditModelPriceViewController present........."); // self.btop = false; // <#code#> }]; [tableView reloadRowsAtIndexPaths:@[indexPath]withRowAnimation:UITableViewRowAnimationMiddle]; }]; EditQTYAction.backgroundColor = UIColorFromRGB(0xff9933); AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; if(appDelegate.user_type==USER_ROLE_EMPLOYEE) { NSMutableArray* arr=[@[] mutableCopy]; [arr addObject:deleteRowAction]; if(appDelegate.can_set_tearsheet_price) { //[arr addObject:editRowAction]; [arr addObject:EditQTYAction]; } // return arr; return [UISwipeActionsConfiguration configurationWithActions:arr]; // return @[deleteRowAction, editRowAction]; } else if (appDelegate.user_type == USER_ROLE_CUSTOMER) { if (appDelegate.customer_type == CustomerTypeStore) { // return @[deleteRowAction]; return [UISwipeActionsConfiguration configurationWithActions:@[deleteRowAction]]; } else { if(appDelegate.can_set_tearsheet_price) { // return @[deleteRowAction,EditQTYAction]; return [UISwipeActionsConfiguration configurationWithActions:@[deleteRowAction,EditQTYAction]]; } else { // return @[deleteRowAction]; return [UISwipeActionsConfiguration configurationWithActions:@[deleteRowAction]]; } } } else // return @[deleteRowAction]; return [UISwipeActionsConfiguration configurationWithActions:@[deleteRowAction]]; } - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath { } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ #pragma mark - Jack - (BOOL)allChecked { int checkedCount = [[self.content_data objectForKey:checked_Count] intValue]; int count = [[self.content_data objectForKey:@"count"] intValue]; return checkedCount == count; } - (void)initCheckedCount { NSNumber *count = [self.content_data objectForKey:@"count"]; if (!count) { count = [NSNumber numberWithInteger:0]; } [self.content_data setObject:count forKey:checked_Count]; } - (void)clearCheckedCount { [self.content_data setObject:[NSNumber numberWithInteger:0] forKey:checked_Count]; } - (void)checkedCountRise:(BOOL)rise { int checkedCount = [[self.content_data objectForKey:checked_Count] intValue]; if (rise) { checkedCount++; } else { checkedCount--; } [self.content_data setObject:[NSNumber numberWithInteger:checkedCount] forKey:checked_Count]; } - (SortItemViewController *)sortItemController { if (!_sortItemController) { _sortItemController = [[SortItemViewController alloc] initWithTableOrigin:CGPointMake(40, 40)]; _sortItemController.sortIndex = self.sortIndex; _sortItemController.sortData = @[ @{@"title":@"Last",@"icon":@"TX_18"}, @{@"title":@"First",@"icon":@"TS_18"}, @{@"title":@"Item number a-z",@"icon":@"IX_18"}, @{@"title":@"Item number z-a",@"icon":@"IS_18"}, @{@"title":@"Description",@"icon":@"DX_18"}, @{@"title":@"Category",@"icon":@"cs_18"} ]; __weak typeof(self) weakSelf = self; _sortItemController.sortBlock = ^(int sort){ weakSelf.sortIndex = sort; [weakSelf reload_data]; }; } // _sortItemController.sortIndex = self.sortIndex; return _sortItemController; } - (void)portfolioSortButtonClicked:(UIButton *)sender { [self.view addSubview:self.sortItemController.view]; } - (SortButton *)sortButton { if (!_sortButton) { _sortButton = [SortButton sortButtonWithHeight:33]; [_sortButton addTarget:self action:@selector(portfolioSortButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; } return _sortButton; } - (void)setSortIndex:(int)sortIndex { _sortIndex = sortIndex; NSString *selectedImageName = @""; switch (sortIndex) { case 0:{ selectedImageName = @"TX_22"; } break; case 1:{ selectedImageName = @"TS_22"; } break; case 2:{ selectedImageName = @"IX_22"; } break; case 3:{ selectedImageName = @"IS_22"; } break; case 4:{ selectedImageName = @"DX_22"; } break; case 5: { selectedImageName = @"cs_22"; } default: break; } self.sortButton.imageView.image = [UIImage imageNamed:selectedImageName]; } #pragma mark - rotation //- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { // // self.sortItemController.view.frame = self.view.bounds; //} - (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id)coordinator { [super viewWillTransitionToSize:size withTransitionCoordinator:coordinator]; [coordinator animateAlongsideTransition:^(id _Nonnull context) { // what ever you want to prepare } completion:^(id _Nonnull context) { self.sortItemController.view.frame = self.view.bounds; }]; } //- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { // return YES; //} - (BOOL)shouldAutorotate{ return YES; } // //- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { // self.sortItemController.view.frame = self.view.bounds; //} - (void)reRefreshView { [self.itemListTable reloadData]; } #pragma mark - RA_NOTIFICAITON -(void) refresh_ui { [self.itemListTable reloadData]; AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; if(appDelegate.can_create_portfolio) { //#ifdef BUILD_UWAVER // self.btnCreatePort.title = @"Create Hang Tag"; //#else [self.btnCreatePort setTitle:@"Create Portfolio"]; //#endif self.btnCreatePort.enabled = true; } else { [self.btnCreatePort setTitle:@""]; self.btnCreatePort.enabled = false; } } -(void) reload_data { dispatch_async(dispatch_get_main_queue(), ^{ if(self.isrefreshing) return; self.isrefreshing=true; self.label_net_err.hidden=true; self.itemListTable.hidden=true; [self.content_data removeAllObjects]; [self.itemListTable reloadData]; self.mum.center = self.view.center; self.mum.hidden = false; [self.mum startAnimating]; UIRefreshControl *reF = (UIRefreshControl *)[self.view viewWithTag:200]; [reF endRefreshing]; reF.attributedTitle = [[NSAttributedString alloc]initWithString:@"Pull to refresh"]; [RANetwork request_portfoliolist:self.sortIndex completionHandler:^(NSMutableDictionary *result) { NSMutableDictionary* cart_json =result; [self.mum stopAnimating]; int result_code=[[cart_json valueForKey:@"result"] intValue]; if(result_code==2||result_code==1||result_code==0) { self.itemListTable.hidden=false; self.content_data = [cart_json mutableCopy]; [self.itemListTable reloadData]; [self initCheckedCount]; [self.btnselect setTitle: @"Deselect all"]; UIApplication * app = [UIApplication sharedApplication]; AppDelegate *appDelegate = (AppDelegate *)[app delegate]; appDelegate.port_count =[[self.content_data valueForKey:@"count"] intValue]; } else if(result_code==RESULT_NET_ERROR) { self.label_net_err.hidden=false; self.itemListTable.hidden=true; } else { [RAUtils message_box:@"Loading Portfolio" message:[cart_json valueForKey:@"err_msg"] completion:nil]; } self.isrefreshing=false; }]; }); AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate]; if(appDelegate.can_create_portfolio) { //#ifdef BUILD_UWAVER // self.btnCreatePort.title = @"Create Hang Tag"; //#else [self.btnCreatePort setTitle:@"Create Portfolio"]; //#endif self.btnCreatePort.enabled = true; } else { [self.btnCreatePort setTitle:@""]; self.btnCreatePort.enabled = false; } } -(void) refresh_price { [self refresh_ui]; } @end