Ver código fonte

1.修改NNPD Order Detail数据解析,增加Pick Info。
2.修改NPD Order Detail离线数据结构。

Pen Li 8 anos atrás
pai
commit
be1c08317b

BIN
RedAnt ERP Mobile/RedAnt ERP Mobile.xcworkspace/xcuserdata/macmini1.xcuserdatad/UserInterfaceState.xcuserstate


+ 12 - 0
RedAnt ERP Mobile/RedAnt ERP Mobile.xcworkspace/xcuserdata/macmini1.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -2,4 +2,16 @@
 <Bucket
    type = "0"
    version = "2.0">
+   <Breakpoints>
+      <BreakpointProxy
+         BreakpointExtensionID = "Xcode.Breakpoint.ExceptionBreakpoint">
+         <BreakpointContent
+            shouldBeEnabled = "Yes"
+            ignoreCount = "0"
+            continueAfterRunningActions = "No"
+            scope = "0"
+            stopOnStyle = "0">
+         </BreakpointContent>
+      </BreakpointProxy>
+   </Breakpoints>
 </Bucket>

+ 98 - 15
RedAnt ERP Mobile/common/Functions/offline/OLDataProvider.m

@@ -7977,6 +7977,14 @@ NSString* gprice = [self get_portfolio_price :appDelegate.contact_id item_id:ite
     NSString *customer_state = @"";
     NSString *customer_zipcode = @"";
     NSString *customer_country = @"";
+    
+    __block NSMutableDictionary *section_0 = [NSMutableDictionary dictionary];
+    __block NSMutableDictionary *section_1 = [NSMutableDictionary dictionary];
+    __block NSMutableDictionary *section_2 = [NSMutableDictionary dictionary];
+    __block NSMutableDictionary *section_3 = [NSMutableDictionary dictionary];
+    __block NSMutableDictionary *section_4 = [NSMutableDictionary dictionary];
+    __block NSMutableDictionary *price_data = [NSMutableDictionary dictionary];
+    
     if (sqlite3_prepare_v2(db, [sql UTF8String], -1, &statement, nil) == SQLITE_OK)
     {
         
@@ -7987,7 +7995,13 @@ NSString* gprice = [self get_portfolio_price :appDelegate.contact_id item_id:ite
             int order_id = sqlite3_column_int(statement, 0);
             
             NSString *sign_url = [self textAtColumn:51 statement:statement];
-            ret[@"sign_url"] = sign_url;
+//            ret[@"sign_url"] = sign_url;
+            section_1 = @{
+                            @"data":sign_url,
+                            @"title":@"Signature",
+                            @"type":@"sign_url"
+                        }.mutableCopy;
+            [ret setObject:section_1 forKey:@"section_1"];
             
             customer_contact = [self textAtColumn:52 statement:statement];
             customer_email = [self textAtColumn:53 statement:statement];
@@ -8102,7 +8116,12 @@ NSString* gprice = [self get_portfolio_price :appDelegate.contact_id item_id:ite
             }
             
             // Shipping
-            ret[@"Shipping"] = shipping;
+//            ret[@"Shipping"] = shipping;
+            NSDictionary *shipping_item = @{
+                                            @"title":@"Shipping",
+                                            @"value":shipping
+                                            };
+            [price_data setObject:shipping_item forKey:@"item_1"];
             
             int have_lift_gate = sqlite3_column_int(statement, 17);
             lift_gate = sqlite3_column_double(statement, 13);
@@ -8110,10 +8129,17 @@ NSString* gprice = [self get_portfolio_price :appDelegate.contact_id item_id:ite
             if (!have_lift_gate) {
                 lift_gate = 0;
             }
-            ret[@"Liftgate Fee(No loading dock)"] = [NSString stringWithFormat:@"$%.2f",lift_gate];
+//            ret[@"Liftgate Fee(No loading dock)"] = [NSString stringWithFormat:@"$%.2f",lift_gate];
+            NSString *liftgate_value = [NSString stringWithFormat:@"$%.2f",lift_gate];
             if (sqlite3_column_int(statement, 57)) {
-                ret[@"Liftgate Fee(No loading dock)"] = @"Shipping To Be Quoted";
+//                ret[@"Liftgate Fee(No loading dock)"] = @"Shipping To Be Quoted";
+                liftgate_value = @"Shipping To Be Quoted";
             }
+            NSDictionary *liftgate_item = @{
+                                            @"title":@"Liftgate Fee(No loading dock)",
+                                            @"value":liftgate_value
+                                            };
+            [price_data setObject:liftgate_item forKey:@"item_2"];
             
 //            if ([nslogist isEqualToString:@"WILL CALL"]) {
 //                [ret removeObjectForKey:@"Shipping"];
@@ -8268,10 +8294,17 @@ NSString* gprice = [self get_portfolio_price :appDelegate.contact_id item_id:ite
             
             // handling fee
             handlingFee = sqlite3_column_double(statement, 33);
-            ret[@"Handling Fee"] = [NSString stringWithFormat:@"$%.2f",handlingFee];
+//            ret[@"Handling Fee"] = [NSString stringWithFormat:@"$%.2f",handlingFee];
+            NSString *handling_fee_value = [NSString stringWithFormat:@"$%.2f",handlingFee];
             if (sqlite3_column_int(statement, 58)) {
-                ret[@"Handling Fee"] = @"Shipping To Be Quoted";
+//                ret[@"Handling Fee"] = @"Shipping To Be Quoted";
+                handling_fee_value = @"Shipping To Be Quoted";
             }
+            NSDictionary *handling_fee_item = @{
+                                            @"title":@"Handling Fee",
+                                            @"value":handling_fee_value
+                                            };
+            [price_data setObject:handling_fee_item forKey:@"item_3"];
 //
             
             // customer info
@@ -8327,6 +8360,7 @@ NSString* gprice = [self get_portfolio_price :appDelegate.contact_id item_id:ite
     // models
     if (nssoid) {
         
+        __block NSMutableDictionary *model_data = [NSMutableDictionary dictionary];
         __block double TotalCuft = 0;
         __block double TotalWeight = 0;
         __block int TotalCarton = 0;
@@ -8437,13 +8471,25 @@ NSString* gprice = [self get_portfolio_price :appDelegate.contact_id item_id:ite
 //            DebugLog(@"item unite price: %@ \n discount: %f item count: %d subTotal: %f",Price,discount,item_count,subTotal);
            
             
-            ret[[NSString stringWithFormat:@"item_%ld",(*count)++]]=itemjson;
-            ret[@"model_count"] = [NSNumber numberWithInteger:*count];
+//            ret[[NSString stringWithFormat:@"item_%ld",(*count)++]]=itemjson;
+//            ret[@"model_count"] = [NSNumber numberWithInteger:*count];
+            
+            itemjson[@"type"] = @"order_item";
+            
+            model_data[[NSString stringWithFormat:@"item_%ld",(*count)++]] = itemjson;
+            model_data[@"count"] = [NSNumber numberWithInteger:*count];
+            
             
             allItemPrice += subTotal;
             
         }];
         
+        section_3[@"data"] = model_data;
+        section_3[@"type"] = @"sub_order";
+        section_3[@"title"] = @"Models";
+        section_3[@"switch"] = @(false);
+        ret[@"section_3"] = section_3;
+        
         orderinfo = [self replaceHtml:orderinfo String:@"TotalCuft_or_nbsp" withString:[NSString stringWithFormat:@"%.2f ft³",TotalCuft]];
         orderinfo = [self replaceHtml:orderinfo String:@"TotalWeight_or_nbsp" withString:[NSString stringWithFormat:@"%.2f lbs",TotalWeight]];
         orderinfo = [self replaceHtml:orderinfo String:@"TotalCarton_or_nbsp" withString:[NSString stringWithFormat:@"%d",TotalCarton]];
@@ -8451,7 +8497,13 @@ NSString* gprice = [self get_portfolio_price :appDelegate.contact_id item_id:ite
         // payments/Credits
 //        payments_and_credist = sqlite3_column_double(statement, 34);
         payments_and_credist = allItemPrice;
-        ret[@"Sub-Total"] = [NSString stringWithFormat:@"$%.2f",payments_and_credist];
+//        ret[@"Sub-Total"] = [NSString stringWithFormat:@"$%.2f",payments_and_credist];
+        
+        NSDictionary *sub_total_item = @{
+                                            @"title":@"Sub-Total",
+                                            @"value":[NSString stringWithFormat:@"$%.2f",payments_and_credist]
+                                            };
+        [price_data setObject:sub_total_item forKey:@"item_0"];
         
 //        // total
 //        totalPrice = sqlite3_column_double(statement, 35);
@@ -8466,17 +8518,48 @@ NSString* gprice = [self get_portfolio_price :appDelegate.contact_id item_id:ite
         
         // payments/Credits
         payments_and_credist = 0;
-        ret[@"Sub-Total"] = [NSString stringWithFormat:@"$%.2f",payments_and_credist];
+//        ret[@"Sub-Total"] = [NSString stringWithFormat:@"$%.2f",payments_and_credist];
+        NSDictionary *sub_total_item = @{
+                                         @"title":@"Sub-Total",
+                                         @"value":[NSString stringWithFormat:@"$%.2f",payments_and_credist]
+                                         };
+        [price_data setObject:sub_total_item forKey:@"item_0"];
 
 
     }
     // total
     totalPrice = payments_and_credist + lift_gate + shippingFee + handlingFee;
-    ret[@"Total"] = [NSString stringWithFormat:@"$%.2f",totalPrice];
-    
-    ret[@"order_info"]= orderinfo;
-    ret[@"more_order_info"] = moreInfo;
-    
+//    ret[@"Total"] = [NSString stringWithFormat:@"$%.2f",totalPrice];
+    NSDictionary *total_item = @{
+                                     @"title":@"Total",
+                                     @"value":[NSString stringWithFormat:@"$%.2f",totalPrice]
+                                     };
+    [price_data setObject:total_item forKey:@"item_4"];
+    [price_data setObject:@(price_data.allKeys.count) forKey:@"count"];
+    section_4 = @{
+                  @"data":price_data,
+                  @"title":@"Price Info",
+                  @"type":@"price_info"
+                  }.mutableCopy;
+    ret[@"section_4"] = section_4;
+    
+//    ret[@"order_info"]= orderinfo;
+    section_0 = @{
+                  @"data":orderinfo,
+                  @"title":@"Order Info",
+                  @"type":@"order_info"
+                  }.mutableCopy;
+    ret[@"section_0"] = section_0;
+    
+//    ret[@"more_order_info"] = moreInfo;
+    section_2 = @{
+                  @"data":moreInfo,
+                  @"title":@"More Info",
+                  @"type":@"more_order_info"
+                  }.mutableCopy;
+    ret[@"section_2"] = section_2;
+    
+    ret[@"count"] = @(5);
     
     return [RAUtils dict2data:ret];
     

+ 17 - 0
RedAnt ERP Mobile/common/Functions/order/OrderDetailPickInfoCell.h

@@ -0,0 +1,17 @@
+//
+//  OrderDetailPickInfoCell.h
+//  iSales-NPD
+//
+//  Created by Jack on 2017/7/5.
+//  Copyright © 2017年 United Software Applications, Inc. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface OrderDetailPickInfoCell : UITableViewCell
+@property (strong, nonatomic) IBOutlet UILabel *track_number_lb;
+@property (strong, nonatomic) IBOutlet UILabel *status_lb;
+@property (strong, nonatomic) IBOutlet UILabel *carrier_lb;
+@property (strong, nonatomic) IBOutlet UILabel *url_lb;
+
+@end

+ 24 - 0
RedAnt ERP Mobile/common/Functions/order/OrderDetailPickInfoCell.m

@@ -0,0 +1,24 @@
+//
+//  OrderDetailPickInfoCell.m
+//  iSales-NPD
+//
+//  Created by Jack on 2017/7/5.
+//  Copyright © 2017年 United Software Applications, Inc. All rights reserved.
+//
+
+#import "OrderDetailPickInfoCell.h"
+
+@implementation OrderDetailPickInfoCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+}
+
+- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
+    [super setSelected:selected animated:animated];
+
+    // Configure the view for the selected state
+}
+
+@end

+ 545 - 4
RedAnt ERP Mobile/common/Functions/order/OrderDetailViewController.m

@@ -26,6 +26,7 @@
 #import "DefaultAppearance.h"
 #import "DefaultTableHeaderView.h"
 #import "OLDataProvider.h"
+#import "OrderDetailPickInfoCell.h"
 
 #define  DEF_CELL_HEIGHT 44
 #define  DEF_TABLE_HEIGHT 44
@@ -653,8 +654,21 @@
                             //                                [((MainViewController*)appDelegate.main_vc) reloadCart:true immediately:false];
                             //                                if(self.selectOrder)
                             //                                    self.selectOrder(self.content_data);
-                            
+#ifdef BUILD_NPD
+                            int count = [[self.content_data objectForKey:@"count"] intValue];
+                            for (int i = 0; i < count; i++) {
+                                NSString *key = [NSString stringWithFormat:@"section_%d",i];
+                                NSMutableDictionary *section = [[self.content_data objectForKey:key] mutableCopy];
+                                NSString *type = [section objectForKey:@"type"];
+                                if ([type isEqualToString:@"sign_url"]) {
+                                    [section setObject:img_url_down forKey:@"data"];
+                                    [self.content_data setObject:section forKey:key];
+                                    break;
+                                }
+                            }
+#else
                             [self.content_data setValue:img_url_down forKey:@"sign_url"];
+#endif
                             //self.btnSign.enabled = false;
                             [self.detailTable reloadData];
                             
@@ -791,7 +805,21 @@
                                 //                                if(self.selectOrder)
                                 //                                    self.selectOrder(self.content_data);
                                 
+#ifdef BUILD_NPD
+                                int count = [[self.content_data objectForKey:@"count"] intValue];
+                                for (int i = 0; i < count; i++) {
+                                    NSString *key = [NSString stringWithFormat:@"section_%d",i];
+                                    NSMutableDictionary *section = [[self.content_data objectForKey:key] mutableCopy];
+                                    NSString *type = [section objectForKey:@"type"];
+                                    if ([type isEqualToString:@"sign_url"]) {
+                                        [section setObject:img_url_down forKey:@"data"];
+                                        [self.content_data setObject:section forKey:key];
+                                        break;
+                                    }
+                                }
+#else
                                 [self.content_data setValue:img_url_down forKey:@"sign_url"];
+#endif
                                 //self.btnSign.enabled = false;
                                 [self.detailTable reloadData];
                                 
@@ -1147,6 +1175,51 @@
     //    else
     //        return 150;
     
+ 
+#ifdef BUILD_NPD
+    NSDictionary *section_item = [self.content_data objectForKey:[NSString stringWithFormat:@"section_%ld",indexPath.section]];
+    NSDictionary *data = [section_item objectForKey:@"data"];
+    NSString *type = [section_item objectForKey:@"type"];
+    if ([type isEqualToString:@"order_info"]) {
+        
+        float height= self.web_info_height;
+        if(height==0)
+            height=DEF_TABLE_HEIGHT;
+        
+        return height;
+
+    } else if ([type isEqualToString:@"sign_url"]) {
+        return 148;
+    } else if ([type isEqualToString:@"more_order_info"]) {
+        
+        float height= self.web_moreinfo_height;
+        if(height==0)
+            height=DEF_TABLE_HEIGHT;
+    
+        return height;
+        
+    } else if ([type isEqualToString:@"sub_order"]) {
+        
+        NSDictionary *item = [data objectForKey:[NSString stringWithFormat:@"item_%ld",indexPath.row]];
+        NSString *item_type = [item objectForKey:@"type"];
+        if ([item_type isEqualToString:@"pick_info"]) {
+            return 218;
+        } else {
+            NSString* notes =[item valueForKey:@"note"];
+            if(notes.length>0)
+            {
+                return 190;
+            }
+            else
+                return 162;
+        }
+        
+        
+    } else if ([type isEqualToString:@"price_info"]) {
+        return 44;
+    }
+        
+#else
     switch (indexPath.section) {
         case 0:
         {
@@ -1196,6 +1269,7 @@
         default:
             break;
     }
+#endif
     return 44;
     
 }
@@ -1259,6 +1333,50 @@
     myView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
     
     NSString*labeltitle = nil;
+    
+#ifdef BUILD_NPD
+    NSDictionary *section_item = [self.content_data objectForKey:[NSString stringWithFormat:@"section_%ld",section]];
+    NSString *title = [section_item objectForKey:@"title"];
+    labeltitle = title;
+    if ([title isEqualToString:@"More Info"]) {
+        
+        NSString* btntitle=nil ;
+        if(self.showMore)
+        {
+            btntitle=@"Hide";
+        }
+        else{
+            btntitle=@"Show";
+        }
+        
+        
+        UIButton * btn =[[UIButton alloc] initWithFrame:CGRectMake(tableView.bounds.size.width-50-15, 0, 50, 33)];
+        btn.tag=section;
+        [btn addTarget:self action:@selector(HideSction:) forControlEvents:UIControlEventTouchUpInside];
+        [btn setTitle:btntitle forState:UIControlStateNormal];
+        btn.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
+        [myView addSubview:btn];
+        
+    } else if ([title containsString:@"Models"]) {
+        
+        BOOL item_switch = [[section_item objectForKey:@"switch"] boolValue];
+        NSString *normalTitle = @"Show";
+        NSString *selectedTitle = @"Hide";
+        if (item_switch == YES) {
+            normalTitle = @"Hide";
+            selectedTitle = @"Show";
+        }
+        
+        UIButton * btn =[[UIButton alloc] initWithFrame:CGRectMake(tableView.bounds.size.width-50-15, 0, 50, 33)];
+        btn.tag=section;
+        [btn addTarget:self action:@selector(HideSction:) forControlEvents:UIControlEventTouchUpInside];
+        [btn setTitle:normalTitle forState:UIControlStateNormal];
+        [btn setTitle:selectedTitle forState:UIControlStateSelected];
+        btn.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;
+        [myView addSubview:btn];
+    }
+    
+#else
     switch (section) {
         case 0:
             labeltitle= @"Order Info";
@@ -1318,7 +1436,7 @@
             break;
     }
     
-    
+#endif
     
     UILabel *titlelabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 5.5, 200, 20)];
     titlelabel.textColor=UIColorFromRGB(color);;
@@ -1350,6 +1468,34 @@
      self.content_data_control = [self translate_json:self.content_data_download changed:self.changed_data];
      
      */
+#ifdef BUILD_NPD
+    NSUInteger section = sender.tag;
+    NSMutableDictionary *section_item = [[self.content_data objectForKey:[NSString stringWithFormat:@"section_%ld",section]] mutableCopy];
+    NSString *title = [section_item objectForKey:@"title"];
+
+    if ([title isEqualToString:@"More Info"]) {
+        
+        self.showMore = !self.showMore;
+        NSRange range = NSMakeRange(section, 1);
+        NSIndexSet *sectionToReload = [NSIndexSet indexSetWithIndexesInRange:range];
+        [self.detailTable reloadSections:sectionToReload withRowAnimation:UITableViewRowAnimationAutomatic];
+        
+    } else if ([title containsString:@"Models"]) {
+        
+        BOOL item_switch = [[section_item objectForKey:@"switch"] boolValue];
+        if (item_switch == YES) {
+            [section_item setObject:@(NO) forKey:@"switch"];
+        } else {
+            [section_item setObject:@(YES) forKey:@"switch"];
+        }
+        [self.content_data setObject:section_item forKey:[NSString stringWithFormat:@"section_%ld",section]];
+        
+        sender.selected = !sender.selected;
+        NSIndexSet *sectionToReload = [NSIndexSet indexSetWithIndex:section];
+        [self.detailTable reloadSections:sectionToReload withRowAnimation:UITableViewRowAnimationAutomatic];
+    }
+    
+#else
     
     switch (sender.tag) {
         case 0:{
@@ -1374,7 +1520,7 @@
         default:
             break;
     }
-    
+#endif
     
     
 }
@@ -1397,9 +1543,14 @@
 }
 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
 {
+    
     if(self.content_data==nil)
         return 0;
+#ifdef BUILD_NPD
+    return [[self.content_data objectForKey:@"count"] integerValue];
+#else
     return 4;
+#endif
 }
 - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
 {
@@ -1407,6 +1558,41 @@
 }
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
+#ifdef BUILD_NPD
+    
+    NSDictionary *section_item = [self.content_data objectForKey:[NSString stringWithFormat:@"section_%ld",section]];
+    NSDictionary *data = [section_item objectForKey:@"data"];
+    NSString *section_type = [section_item objectForKey:@"type"];
+    if ([section_type isEqualToString:@"sub_order"]) {
+
+        BOOL item_switch = [[section_item objectForKey:@"switch"] boolValue];
+        if (item_switch == YES) {
+            return [[data objectForKey:@"count"] integerValue];
+        } else {
+            return 0;
+        }
+        
+
+    } else if ([section_type isEqualToString:@"order_info"]){
+        if (self.showModels) {
+            return 1;
+        } else {
+            return 0;
+        }
+    } else if ([section_type isEqualToString:@"sign_url"]){
+        return 1;
+    } else if ([section_type isEqualToString:@"more_order_info"]){
+        if(self.showMore)
+            return 1;
+        else
+            return 0;
+    }else if ([section_type isEqualToString:@"price_info"]){
+        return [[data objectForKey:@"count"] integerValue];
+    }
+    
+    return 0;
+    
+#else
     
     // NSDictionary * item_json = [self.content_data objectForKey:@"items"];
     if(section==0)
@@ -1435,6 +1621,9 @@
         return 4;
 #endif
     }
+
+    
+#endif
     return 0;
     
 }
@@ -1442,9 +1631,360 @@
 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
     
-    
     UIApplication * app = [UIApplication sharedApplication];
     AppDelegate *appDelegate = (AppDelegate *)[app delegate];
+ 
+#ifdef BUILD_NPD
+    /**
+     * ver1.90
+     */
+    NSDictionary *section = [self.content_data objectForKey:[NSString stringWithFormat:@"section_%ld",indexPath.section]];
+    NSString *type = [section objectForKey:@"type"];
+    
+    if ([type isEqualToString:@"order_info"]) {/** Order Info */
+        
+        NSString *CellIdentifier = @"OrderDetailHtmlCell";
+        OrderDetailHtmlCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
+        
+        
+        
+        
+        
+        cell.webview.tag = indexPath.section;
+        
+        cell.webview.delegate = self;
+        //        cell.webView.scrollView.contentSize.height = 0;
+        cell.webview.scrollView.bounces=NO;
+        cell.webview.scrollView.directionalLockEnabled = true;
+        CGSize size= cell.webview.scrollView.contentSize;
+        size.height=10;
+        cell.webview.scrollView.contentSize=size;
+        
+        [cell.webview loadHTMLString:[section valueForKey:@"data"] baseURL:nil];
+        
+        cell.backgroundColor = [UIColor whiteColor];
+        return cell;
+    } else if ([type isEqualToString:@"sign_url"]) { /** Sign */
+        
+        
+        NSString *CellIdentifier = @"OrderDetailSignatureCell";
+        OrderDetailSignatureCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
+        NSString* img_url = [section valueForKey:@"data"];
+        
+        cell.sign_img.userInteractionEnabled = NO;
+        __block BOOL hasTapGesture = NO;
+        [cell.sign_img.gestureRecognizers enumerateObjectsUsingBlock:^(__kindof UIGestureRecognizer * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
+            
+            if ([obj isKindOfClass:[UITapGestureRecognizer class]]) {
+                hasTapGesture = YES;
+                *stop = YES;
+            }
+            
+        }];
+        
+        if (!hasTapGesture) {
+            UITapGestureRecognizer *signatureTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onSignOrderClick:)];
+            [cell.sign_img addGestureRecognizer:signatureTap];
+        }
+        
+        int status_code = [[self.content_data valueForKey:@"orderStatus"] intValue];
+        bool offline_edit =[[self.content_data valueForKey:@"offline_edit"] boolValue];
+        if(status_code==1) {
+            
+            if(appDelegate.offline_mode==false||offline_edit) {
+                cell.sign_img.userInteractionEnabled = YES;
+            }
+            
+        }
+        else if(status_code==0) {
+            if(appDelegate.offline_mode==false||offline_edit) {
+                cell.sign_img.userInteractionEnabled = YES;
+            }
+        }
+        
+        
+        
+        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.sign_img.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)
+                    {
+                        
+                        [iSalesDB cache_img:downloadimg_data filename:file_name saveTo:img_url];
+                        
+                        UIImage * img =[UIImage imageWithData:downloadimg_data];
+                        cell.sign_img.image=img ;
+                    }
+                    else {
+                        if (cell.sign_img.userInteractionEnabled) {
+                            cell.sign_img.image=[UIImage imageNamed:@"taptosign_s"];
+                        } else {
+                            cell.sign_img.image = nil;
+                        }
+                    }
+                    
+                    
+                });
+            });
+            
+            
+        }
+        cell.backgroundColor = [UIColor whiteColor];
+        return cell;
+    } else if ([type isEqualToString:@"more_order_info"]) { /** More Info */
+        
+        NSString *CellIdentifier = @"OrderDetailHtmlCell";
+        OrderDetailHtmlCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
+        
+        
+        
+        
+        cell.webview.tag = indexPath.section;
+        cell.webview.delegate = self;
+        //        cell.webView.scrollView.contentSize.height = 0;
+        cell.webview.scrollView.bounces=NO;
+        cell.webview.scrollView.directionalLockEnabled = true;
+        CGSize size= cell.webview.scrollView.contentSize;
+        size.height=10;
+        cell.webview.scrollView.contentSize=size;
+        
+        
+        
+        [cell.webview loadHTMLString:[section valueForKey:@"data"] baseURL:nil];
+        
+        cell.backgroundColor = [UIColor whiteColor];
+        return cell;
+        
+    } else if ([type isEqualToString:@"sub_order"]) { /** Sub Order */
+        
+        NSDictionary *data = [section objectForKey:@"data"];
+        NSDictionary *item = [data objectForKey:[NSString stringWithFormat:@"item_%ld",indexPath.row]];
+        NSString *item_type = [item objectForKey:@"type"];
+        
+        if ([item_type isEqualToString:@"pick_info"]) { /** Pick Info */
+            
+            NSString *CellIdentifier = @"OrderDetailPickInfoCell";
+            OrderDetailPickInfoCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
+            
+            NSString *carrier = [item objectForKey:@"delivery_carrier"];
+            NSString *web_url = [item objectForKey:@"delivery_web_url"];
+            NSString *track_number = [item objectForKey:@"tracking_number"];
+            NSString *status = [item objectForKey:@"status"];
+            
+            cell.track_number_lb.text = track_number;
+            cell.status_lb.text = status;
+            cell.carrier_lb.text = carrier;
+            cell.url_lb.text = web_url;
+            
+            return cell;
+            
+        } else if ([item_type isEqualToString:@"order_item"]) { /** Item Info */
+            
+            NSString *CellIdentifier = @"OrderDetailModelCell";
+            OrderDetailModelCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
+            NSDictionary * item_json = item;
+            
+//            int count = [[item_json valueForKey:@"count"] intValue];
+            NSDictionary * combine_json =[item_json objectForKey:@"combine"];
+            cell.bundle_item=combine_json;
+            
+            double dprice=0.0;
+            
+            if(cell.bundle_item!=nil)
+            {
+                int citem=0;
+                
+                int bcount=[[cell.bundle_item valueForKey:@"count"] intValue];
+                for(int bc=0;bc<bcount;bc++)
+                {
+                    NSDictionary * bitem = [cell.bundle_item objectForKey:[NSString stringWithFormat:@"item_%d",bc]];
+                    int modulus= [[bitem valueForKey:@"modulus"] intValue];
+                    citem+= modulus;
+                    double uprice= [[bitem valueForKey:@"unit_price"]doubleValue];
+                    dprice+= uprice*modulus;
+                    
+                }
+                if(citem==1)
+                    [ cell.buttonBundle setTitle:[NSString stringWithFormat: @"%d bundle item with price of $ %.2f",citem,dprice ]forState:UIControlStateNormal];
+                else
+                    [ cell.buttonBundle setTitle:[NSString stringWithFormat: @"%d bundle items with price of $ %.2f",citem,dprice ]forState:UIControlStateNormal];
+                
+                cell.buttonBundle.hidden = NO;
+            }
+            else
+            {
+                cell.buttonBundle.hidden = YES;
+                
+            }
+            
+            
+            
+            NSString* img_url = [item_json valueForKey:@"img"];
+            NSString* description = [item_json valueForKey:@"Item Number"];
+
+            NSString* unitprice = [item_json valueForKey:@"The unit price"];
+            NSString* origin_price = [item_json valueForKey:@"origin_price"];
+            NSString* subtotal = [item_json valueForKey:@"Subtotal"];
+            NSString* qty = [item_json valueForKey:@"QTY"];
+            NSString* status = [item_json valueForKey:@"order_item_status"];
+            NSString* notes = [item_json valueForKey:@"note"];
+            
+            if(notes.length>0)
+            {
+                cell.noteLabel.text = [@"Note: " stringByAppendingString:[notes stringByReplacingOccurrencesOfString:@"\n" withString:@" "]];
+            }
+            else
+                cell.noteLabel.text = nil;
+            if(appDelegate.can_see_price&&appDelegate.price_hidden==false)
+            {
+                
+            }
+            else
+            {
+                unitprice=nil;
+                origin_price=nil;
+                subtotal=nil;
+            }
+            
+            float duprice = [unitprice floatValue];
+            float dsubtotal = (duprice+dprice)*[qty intValue];
+            
+            cell.descriptionLabel.text=description;
+            if(dprice>0)
+                cell.unitpriceLabel.text = [NSString stringWithFormat:@"%.2f+%.2f",duprice,dprice];//unitprice;
+            else
+                cell.unitpriceLabel.text = [NSString stringWithFormat:@"%.2f",duprice];//unitprice;
+            cell.subtotalLabel.text = [NSString stringWithFormat:@"%.2f",dsubtotal];//subtotal;
+            cell.qtyLabel.text = qty;
+            cell.statusLabel.text = status;
+            
+            
+            cell.labelOldPrice.text = origin_price;
+            
+            double discount =[[item_json valueForKey:@"discount"] doubleValue];
+            NSString* discountstr=[NSString stringWithFormat:@"%@%% off", [RAUtils FloatFormat:discount]];
+            cell.labelDiscount.text = discountstr;
+            bool isfree = [[item_json valueForKey:@"is_free"]boolValue];
+            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;
+                }
+            }
+            
+            if (![cell.imageName isEqualToString:img_url]) {
+                cell.imageName = img_url;
+                [cell.imgbtn setBackgroundImage:[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.imgbtn setBackgroundImage: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.imgbtn setBackgroundImage:img forState:UIControlStateNormal];
+                            }
+                            else
+                                [cell.imgbtn setBackgroundImage:[UIImage imageNamed:@"notfound_s"] forState:UIControlStateNormal];
+                            
+                            
+                        });
+                    });
+                    
+                    
+                }
+            }
+            
+            cell.backgroundColor = [UIColor whiteColor];
+            return cell;
+
+            
+        }
+        
+        
+    } else if ([type isEqualToString:@"price_info"]) { /** Price */
+        
+        NSString *CellIdentifier = @"OrderDetailPriceCell";
+        OrderDetailPriceCell * cell= [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
+        
+        NSDictionary *data = [section objectForKey:@"data"];
+        NSDictionary *item = [data objectForKey:[NSString stringWithFormat:@"item_%ld",indexPath.row]];
+        NSString *title = [item objectForKey:@"title"];
+        NSString *value = [item objectForKey:@"value"];
+        if ([title isEqualToString:@"Sub-Total"] || [title isEqualToString:@"Total"]) {
+            if(appDelegate.can_see_price&&appDelegate.price_hidden==false)
+            {
+                
+            }
+            else
+            {
+                value=nil;
+            }
+        }
+        cell.chargeLabel.text = [title stringByAppendingString:@":"];
+        cell.priceLabel.text = value;
+        
+        cell.backgroundColor = [UIColor whiteColor];
+        return cell;
+
+    }
+    
+    
+#else
     
     switch(indexPath.section)
     {
@@ -1874,6 +2414,7 @@
             return cell;
         }
     }
+#endif
     return nil;
     //    if(tableView==self.itemListTable)
     //    {

+ 6 - 0
RedAnt ERP Mobile/iSales-NPD.xcodeproj/project.pbxproj

@@ -57,6 +57,7 @@
 		42D3A4A61EFA7346007A54C1 /* VideoPreviewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42D3A4A51EFA7346007A54C1 /* VideoPreviewCell.m */; };
 		42D9A0231EB02DA6008AF7AF /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42D9A0221EB02DA6008AF7AF /* AdSupport.framework */; };
 		42D9A0251EB03994008AF7AF /* libAdIdAccess.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 42D9A0241EB03994008AF7AF /* libAdIdAccess.a */; };
+		42DC12F11F0CD98E00A4C011 /* OrderDetailPickInfoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 42DC12F01F0CD98E00A4C011 /* OrderDetailPickInfoCell.m */; };
 		42DC31131D546FBE00BCD1C6 /* category.json in Resources */ = {isa = PBXBuildFile; fileRef = 42DC31121D546FBE00BCD1C6 /* category.json */; };
 		42E489611EE63F4E007256A0 /* more_color_64.png in Resources */ = {isa = PBXBuildFile; fileRef = 42E489601EE63F4E007256A0 /* more_color_64.png */; };
 		710274251CC606C4009FD219 /* UserListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 710274241CC606C4009FD219 /* UserListViewController.m */; };
@@ -367,6 +368,8 @@
 		42D3A4A51EFA7346007A54C1 /* VideoPreviewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = VideoPreviewCell.m; sourceTree = "<group>"; };
 		42D9A0221EB02DA6008AF7AF /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; };
 		42D9A0241EB03994008AF7AF /* libAdIdAccess.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libAdIdAccess.a; sourceTree = "<group>"; };
+		42DC12EF1F0CD98E00A4C011 /* OrderDetailPickInfoCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OrderDetailPickInfoCell.h; path = common/Functions/order/OrderDetailPickInfoCell.h; sourceTree = SOURCE_ROOT; };
+		42DC12F01F0CD98E00A4C011 /* OrderDetailPickInfoCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = OrderDetailPickInfoCell.m; path = common/Functions/order/OrderDetailPickInfoCell.m; sourceTree = SOURCE_ROOT; };
 		42DC31121D546FBE00BCD1C6 /* category.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = category.json; sourceTree = "<group>"; };
 		42E489601EE63F4E007256A0 /* more_color_64.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = more_color_64.png; sourceTree = "<group>"; };
 		56528CA8B8A71F67C2EE5366 /* Pods.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = Pods.debug.xcconfig; path = "Pods/Target Support Files/Pods/Pods.debug.xcconfig"; sourceTree = "<group>"; };
@@ -1338,6 +1341,8 @@
 				7162A58D1C58733400AB630E /* OrderDetailModelCell.m */,
 				7162A58E1C58733400AB630E /* OrderDetailPriceCell.h */,
 				7162A58F1C58733400AB630E /* OrderDetailPriceCell.m */,
+				42DC12EF1F0CD98E00A4C011 /* OrderDetailPickInfoCell.h */,
+				42DC12F01F0CD98E00A4C011 /* OrderDetailPickInfoCell.m */,
 				7162A5901C58733400AB630E /* OrderDetailViewController.h */,
 				7162A5911C58733400AB630E /* OrderDetailViewController.m */,
 				7162A5921C58733400AB630E /* OrderListTableViewCell.h */,
@@ -2056,6 +2061,7 @@
 				7162A5091C586FC100AB630E /* CycleScrollView.m in Sources */,
 				715F30BD1DAB37EB00490EED /* OfflineUnlockViewController.m in Sources */,
 				7162A5161C58704600AB630E /* BundleModelCell.m in Sources */,
+				42DC12F11F0CD98E00A4C011 /* OrderDetailPickInfoCell.m in Sources */,
 				7141DD621C5747CE00F7DF59 /* NSData+CommonCrypto.m in Sources */,
 				712AFED71DBA050200254965 /* BasicDrawable.m in Sources */,
 				71DF74891C57608F00F2789C /* RadioButton.m in Sources */,

+ 75 - 3
RedAnt ERP Mobile/iSales-NPD/Base.lproj/Main.storyboard

@@ -5958,7 +5958,7 @@ Email: redantsupport@united-us.net</string>
                                         <rect key="frame" x="0.0" y="256" width="768" height="44"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="9rG-Hv-ICg" id="e5s-wc-IkL">
-                                            <rect key="frame" x="0.0" y="0.0" width="768" height="44"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="768" height="43.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="$123456789.00" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="fNL-sW-tkk" userLabel="price">
@@ -5986,7 +5986,7 @@ Email: redantsupport@united-us.net</string>
                                         <rect key="frame" x="0.0" y="300" width="768" height="186"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="9hm-qp-u5H" id="PQ9-FQ-6Si">
-                                            <rect key="frame" x="0.0" y="0.0" width="768" height="186"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="768" height="185.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <webView userInteractionEnabled="NO" contentMode="scaleToFill" allowsInlineMediaPlayback="NO" mediaPlaybackRequiresUserAction="NO" mediaPlaybackAllowsAirPlay="NO" keyboardDisplayRequiresUserAction="NO" id="9m6-iq-KMk">
@@ -6005,7 +6005,7 @@ Email: redantsupport@united-us.net</string>
                                         <rect key="frame" x="0.0" y="486" width="768" height="148"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="s5l-6k-iWO" id="8ms-PN-eNw">
-                                            <rect key="frame" x="0.0" y="0.0" width="768" height="148"/>
+                                            <rect key="frame" x="0.0" y="0.0" width="768" height="147.5"/>
                                             <autoresizingMask key="autoresizingMask"/>
                                             <subviews>
                                                 <imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" id="wjN-UC-W3J">
@@ -6025,6 +6025,78 @@ Email: redantsupport@united-us.net</string>
                                             <outlet property="sign_img" destination="wjN-UC-W3J" id="lVf-XP-9P9"/>
                                         </connections>
                                     </tableViewCell>
+                                    <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" misplaced="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="OrderDetailPickInfoCell" rowHeight="218" id="PTO-3k-BWh" customClass="OrderDetailPickInfoCell">
+                                        <rect key="frame" x="0.0" y="634" width="768" height="218"/>
+                                        <autoresizingMask key="autoresizingMask"/>
+                                        <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="PTO-3k-BWh" id="51c-J3-9uN">
+                                            <rect key="frame" x="0.0" y="0.0" width="768" height="217.5"/>
+                                            <autoresizingMask key="autoresizingMask"/>
+                                            <subviews>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Tracking Number:" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="cdf-E6-8nk">
+                                                    <rect key="frame" x="10" y="8" width="143" height="44"/>
+                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Booked" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="oZN-Pi-f7I">
+                                                    <rect key="frame" x="73" y="60" width="687" height="44"/>
+                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="ABC123456" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="ZT5-dJ-sVI">
+                                                    <rect key="frame" x="154" y="8" width="606" height="44"/>
+                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Status:" textAlignment="justified" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="qSc-mI-5kO">
+                                                    <rect key="frame" x="10" y="60" width="62" height="44"/>
+                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Carrier" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="bm0-he-gum">
+                                                    <rect key="frame" x="144" y="112" width="616" height="44"/>
+                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Delivery Carrier:" textAlignment="justified" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="8SM-8C-RH1">
+                                                    <rect key="frame" x="10" y="112" width="133" height="44"/>
+                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="Delivery Web URL:" textAlignment="justified" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="wWy-h1-Sy5">
+                                                    <rect key="frame" x="10" y="164" width="151" height="44"/>
+                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" misplaced="YES" text="URL" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" id="XTK-u0-iEi">
+                                                    <rect key="frame" x="162" y="164" width="598" height="44"/>
+                                                    <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+                                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                                    <nil key="textColor"/>
+                                                    <nil key="highlightedColor"/>
+                                                </label>
+                                            </subviews>
+                                        </tableViewCellContentView>
+                                        <connections>
+                                            <outlet property="carrier_lb" destination="bm0-he-gum" id="ceH-Zh-QAb"/>
+                                            <outlet property="status_lb" destination="oZN-Pi-f7I" id="1a6-Bb-kUq"/>
+                                            <outlet property="track_number_lb" destination="ZT5-dJ-sVI" id="iqg-9F-O1U"/>
+                                            <outlet property="url_lb" destination="XTK-u0-iEi" id="gL9-sf-GZN"/>
+                                        </connections>
+                                    </tableViewCell>
                                 </prototypes>
                                 <connections>
                                     <outlet property="dataSource" destination="FcH-vX-yVE" id="xnt-aQ-qDQ"/>