Forráskód Böngészése

iOS Apex Mobile 2.92

Ray Zhang 5 éve
szülő
commit
e5bacebf17
52 módosított fájl, 1131 hozzáadás és 144 törlés
  1. 34 7
      Apex Mobile/Apex Mobile.xcodeproj/project.pbxproj
  2. 1 0
      Apex Mobile/Apex Mobile/AppDelegate.h
  3. 2 0
      Apex Mobile/Apex Mobile/AppDelegate.m
  4. 20 11
      Apex Mobile/Apex Mobile/CustomizeFieldViewController.m
  5. 16 1
      Apex Mobile/Apex Mobile/DetailTabBarController.m
  6. 57 57
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/Contents.json
  7. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-1.png
  8. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-10.png
  9. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-11.png
  10. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-12.png
  11. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-13.png
  12. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-14.png
  13. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-15.png
  14. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-16.png
  15. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-17.png
  16. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-2.png
  17. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-3.png
  18. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-4.png
  19. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-5.png
  20. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-6.png
  21. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-7.png
  22. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-8.png
  23. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-9.png
  24. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon.png
  25. 23 0
      Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_booking.imageset/Contents.json
  26. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_booking.imageset/appicon-1.png
  27. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_booking.imageset/appicon-2.png
  28. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_booking.imageset/appicon.png
  29. 23 0
      Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_search.imageset/Contents.json
  30. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_search.imageset/appicon-1.png
  31. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_search.imageset/appicon-2.png
  32. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_search.imageset/appicon.png
  33. BIN
      Apex Mobile/Apex Mobile/NewImages.xcassets/mode_booking.imageset/appicon.png
  34. 4 0
      Apex Mobile/Apex Mobile/Result/ApexResultViewController.m
  35. 28 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirAwbInfoCell.h
  36. 219 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirAwbInfoCell.m
  37. 132 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirAwbInfoCell.xib
  38. 28 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirBookingCell.h
  39. 185 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirBookingCell.m
  40. 131 0
      Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirBookingCell.xib
  41. 24 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultAirAwbInfoModel.h
  42. 19 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultAirAwbInfoModel.m
  43. 23 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultAirBookingModel.h
  44. 18 0
      Apex Mobile/Apex Mobile/Result/Model/ApexResultAirBookingModel.m
  45. 3 1
      Apex Mobile/Apex Mobile/Result/Model/ApexResultBaseModel.h
  46. 14 0
      Apex Mobile/Apex Mobile/Result/Presenter/ApexResultPresenter.m
  47. 28 0
      Apex Mobile/Apex Mobile/Result/TableDataSource/ApexResultViewController+TableDataSource.m
  48. 1 0
      Apex Mobile/Apex Mobile/Result/TableDelegate/ApexResultViewController+TableDelegate.m
  49. 4 0
      Apex Mobile/Apex Mobile/SearchViewController.m
  50. 8 0
      Apex Mobile/Apex Mobile/SearchlistViewController.m
  51. 74 67
      Apex Mobile/Apex Mobile/config.h
  52. 12 0
      Apex Mobile/Apex Mobile/search.json

+ 34 - 7
Apex Mobile/Apex Mobile.xcodeproj/project.pbxproj

@@ -15,6 +15,12 @@
 		3C57169D23D186A30002E9FC /* WebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C57169A23D186A30002E9FC /* WebViewController.m */; };
 		3C57169E23D186A30002E9FC /* wkweb.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3C57169B23D186A30002E9FC /* wkweb.storyboard */; };
 		3CA1A2DE23A212E700639FCC /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3CA1A2DD23A212E700639FCC /* Launch Screen.storyboard */; };
+		3CE1DD02251C87DC00630A4F /* ApexResultAirBookingCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CE1DCFC251C87DC00630A4F /* ApexResultAirBookingCell.m */; };
+		3CE1DD03251C87DC00630A4F /* ApexResultAirBookingCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3CE1DCFD251C87DC00630A4F /* ApexResultAirBookingCell.xib */; };
+		3CE1DD04251C87DC00630A4F /* ApexResultAirAwbInfoCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CE1DCFE251C87DC00630A4F /* ApexResultAirAwbInfoCell.m */; };
+		3CE1DD05251C87DC00630A4F /* ApexResultAirAwbInfoCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3CE1DD00251C87DC00630A4F /* ApexResultAirAwbInfoCell.xib */; };
+		3CE1DD0B251C87F400630A4F /* ApexResultAirBookingModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CE1DD09251C87F400630A4F /* ApexResultAirBookingModel.m */; };
+		3CE1DD0C251C87F400630A4F /* ApexResultAirAwbInfoModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CE1DD0A251C87F400630A4F /* ApexResultAirAwbInfoModel.m */; };
 		420DEF2620A1898500720524 /* AMCommHeadCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 420DEF2420A1898500720524 /* AMCommHeadCell.m */; };
 		420DEF2720A1898500720524 /* AMCommHeadCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 420DEF2520A1898500720524 /* AMCommHeadCell.xib */; };
 		420DEF2B20A1899600720524 /* AMCommContentCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 420DEF2920A1899600720524 /* AMCommContentCell.m */; };
@@ -94,12 +100,10 @@
 		7120DCED18BE25DA00E7546F /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7120DCEC18BE25DA00E7546F /* CoreData.framework */; };
 		7120DCEF18BE25E500E7546F /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7120DCEE18BE25E500E7546F /* CoreLocation.framework */; };
 		7120DCF118BE25F500E7546F /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7120DCF018BE25F500E7546F /* CoreText.framework */; };
-		7120DCF318BE260700E7546F /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7120DCF218BE260700E7546F /* GLKit.framework */; };
 		7120DCF518BE261500E7546F /* ImageIO.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7120DCF418BE261500E7546F /* ImageIO.framework */; };
 		7120DCF718BE262300E7546F /* libc++.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7120DCF618BE262300E7546F /* libc++.dylib */; };
 		7120DCF918BE262E00E7546F /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7120DCF818BE262E00E7546F /* libicucore.dylib */; };
 		7120DCFB18BE263800E7546F /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 7120DCFA18BE263800E7546F /* libz.dylib */; };
-		7120DCFD18BE264300E7546F /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7120DCFC18BE264300E7546F /* OpenGLES.framework */; };
 		7120DCFF18BE265100E7546F /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7120DCFE18BE265100E7546F /* QuartzCore.framework */; };
 		7120DD0118BE266000E7546F /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7120DD0018BE266000E7546F /* SystemConfiguration.framework */; };
 		7120DD0418BE273900E7546F /* LocationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7120DD0318BE273900E7546F /* LocationViewController.m */; };
@@ -225,6 +229,16 @@
 		3C57169B23D186A30002E9FC /* wkweb.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = wkweb.storyboard; path = "../../common/WK PDF+Web/wkweb.storyboard"; sourceTree = "<group>"; };
 		3C57169C23D186A30002E9FC /* WebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebViewController.h; path = "../../common/WK PDF+Web/WebViewController.h"; sourceTree = "<group>"; };
 		3CA1A2DD23A212E700639FCC /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
+		3CE1DCFC251C87DC00630A4F /* ApexResultAirBookingCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ApexResultAirBookingCell.m; sourceTree = "<group>"; };
+		3CE1DCFD251C87DC00630A4F /* ApexResultAirBookingCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ApexResultAirBookingCell.xib; sourceTree = "<group>"; };
+		3CE1DCFE251C87DC00630A4F /* ApexResultAirAwbInfoCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ApexResultAirAwbInfoCell.m; sourceTree = "<group>"; };
+		3CE1DCFF251C87DC00630A4F /* ApexResultAirAwbInfoCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApexResultAirAwbInfoCell.h; sourceTree = "<group>"; };
+		3CE1DD00251C87DC00630A4F /* ApexResultAirAwbInfoCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ApexResultAirAwbInfoCell.xib; sourceTree = "<group>"; };
+		3CE1DD01251C87DC00630A4F /* ApexResultAirBookingCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApexResultAirBookingCell.h; sourceTree = "<group>"; };
+		3CE1DD07251C87F400630A4F /* ApexResultAirAwbInfoModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApexResultAirAwbInfoModel.h; sourceTree = "<group>"; };
+		3CE1DD08251C87F400630A4F /* ApexResultAirBookingModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ApexResultAirBookingModel.h; sourceTree = "<group>"; };
+		3CE1DD09251C87F400630A4F /* ApexResultAirBookingModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ApexResultAirBookingModel.m; sourceTree = "<group>"; };
+		3CE1DD0A251C87F400630A4F /* ApexResultAirAwbInfoModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ApexResultAirAwbInfoModel.m; sourceTree = "<group>"; };
 		420DEF2320A1898500720524 /* AMCommHeadCell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AMCommHeadCell.h; sourceTree = "<group>"; };
 		420DEF2420A1898500720524 /* AMCommHeadCell.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AMCommHeadCell.m; sourceTree = "<group>"; };
 		420DEF2520A1898500720524 /* AMCommHeadCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AMCommHeadCell.xib; sourceTree = "<group>"; };
@@ -580,12 +594,10 @@
 				719E7E3518C0395E003408FF /* libsqlite3.dylib in Frameworks */,
 				7120DD0118BE266000E7546F /* SystemConfiguration.framework in Frameworks */,
 				7120DCFF18BE265100E7546F /* QuartzCore.framework in Frameworks */,
-				7120DCFD18BE264300E7546F /* OpenGLES.framework in Frameworks */,
 				7120DCFB18BE263800E7546F /* libz.dylib in Frameworks */,
 				7120DCF918BE262E00E7546F /* libicucore.dylib in Frameworks */,
 				7120DCF718BE262300E7546F /* libc++.dylib in Frameworks */,
 				7120DCF518BE261500E7546F /* ImageIO.framework in Frameworks */,
-				7120DCF318BE260700E7546F /* GLKit.framework in Frameworks */,
 				7120DCF118BE25F500E7546F /* CoreText.framework in Frameworks */,
 				7120DCEF18BE25E500E7546F /* CoreLocation.framework in Frameworks */,
 				7120DCED18BE25DA00E7546F /* CoreData.framework in Frameworks */,
@@ -648,6 +660,12 @@
 		4225E42721E085CE009D2364 /* Cell */ = {
 			isa = PBXGroup;
 			children = (
+				3CE1DCFF251C87DC00630A4F /* ApexResultAirAwbInfoCell.h */,
+				3CE1DCFE251C87DC00630A4F /* ApexResultAirAwbInfoCell.m */,
+				3CE1DD00251C87DC00630A4F /* ApexResultAirAwbInfoCell.xib */,
+				3CE1DD01251C87DC00630A4F /* ApexResultAirBookingCell.h */,
+				3CE1DCFC251C87DC00630A4F /* ApexResultAirBookingCell.m */,
+				3CE1DCFD251C87DC00630A4F /* ApexResultAirBookingCell.xib */,
 				4225E43121E08A54009D2364 /* ApexResultContainerCell.h */,
 				4225E43221E08A54009D2364 /* ApexResultContainerCell.m */,
 				42FB6EB821F2B9FE00F694AB /* ApexResultContainerCell.xib */,
@@ -670,6 +688,10 @@
 		4225E42821E085E3009D2364 /* Model */ = {
 			isa = PBXGroup;
 			children = (
+				3CE1DD07251C87F400630A4F /* ApexResultAirAwbInfoModel.h */,
+				3CE1DD0A251C87F400630A4F /* ApexResultAirAwbInfoModel.m */,
+				3CE1DD08251C87F400630A4F /* ApexResultAirBookingModel.h */,
+				3CE1DD09251C87F400630A4F /* ApexResultAirBookingModel.m */,
 				4225E44121E08B47009D2364 /* ApexResultBaseModel.h */,
 				4225E44221E08B47009D2364 /* ApexResultBaseModel.m */,
 				42FB6EC721F2BC8600F694AB /* ApexResultAddition.h */,
@@ -1479,6 +1501,7 @@
 				42E8212F21F6ED1800127705 /* ApexResultAdditionView.xib in Resources */,
 				420DEF2720A1898500720524 /* AMCommHeadCell.xib in Resources */,
 				42BB740B2084737800B9B6E4 /* KPILegendCell.xib in Resources */,
+				3CE1DD03251C87DC00630A4F /* ApexResultAirBookingCell.xib in Resources */,
 				3C57169E23D186A30002E9FC /* wkweb.storyboard in Resources */,
 				425390262079B9B500ECF982 /* KPI.json in Resources */,
 				715643DA201C079F00B04267 /* tools.json in Resources */,
@@ -1489,6 +1512,7 @@
 				420DEF2C20A1899600720524 /* AMCommContentCell.xib in Resources */,
 				42FB6EC321F2BB6400F694AB /* ApexResultBookingCell.xib in Resources */,
 				42BB74092084732D00B9B6E4 /* KPICell.xib in Resources */,
+				3CE1DD05251C87DC00630A4F /* ApexResultAirAwbInfoCell.xib in Resources */,
 				42BB740720846B4500B9B6E4 /* KPITableCell.xib in Resources */,
 				719EF8EB18BB839F00EFFF5F /* InfoPlist.strings in Resources */,
 				4235C3052022A60A00A99D04 /* ResultCell.xib in Resources */,
@@ -1560,6 +1584,7 @@
 				71308AF7191E7B0E0024B2B0 /* MessageDetailItem.m in Sources */,
 				71A565D918C20F5900CDAC07 /* SearchTableAdapter.m in Sources */,
 				719EF8FA18BB839F00EFFF5F /* ApexMobileFirstViewController.m in Sources */,
+				3CE1DD0C251C87F400630A4F /* ApexResultAirAwbInfoModel.m in Sources */,
 				4225E42421E08502009D2364 /* ApexResultViewController.m in Sources */,
 				719BEC1718FFAB7B00DFE987 /* ToolsPanelViewController.m in Sources */,
 				71BA502E1908ED5700D0BD31 /* CellItemHistory.m in Sources */,
@@ -1591,12 +1616,14 @@
 				71F67CF619063612004E8462 /* ApexHistoryViewController.m in Sources */,
 				7130B3F41900FB61000610D8 /* NewsViewController.m in Sources */,
 				711BA6C1191E0525002EDE6F /* MessageViewController.m in Sources */,
+				3CE1DD02251C87DC00630A4F /* ApexResultAirBookingCell.m in Sources */,
 				711BA6C4191E0553002EDE6F /* MessageItem.m in Sources */,
 				71BA50311908ED9100D0BD31 /* HistoryViewController.m in Sources */,
 				71A2D76218DC3895001C380A /* LineView.m in Sources */,
 				71B7999B2021B22D00F8685E /* AMResultViewController.m in Sources */,
 				425CF097201EB2B500750E32 /* JLRefreshHeader.m in Sources */,
 				42BCACCD209AE342009DDA43 /* AMMapAnnotaion.m in Sources */,
+				3CE1DD0B251C87F400630A4F /* ApexResultAirBookingModel.m in Sources */,
 				42FB6EC221F2BB6400F694AB /* ApexResultBookingCell.m in Sources */,
 				3C1DEC3D239F6C42006F7E2A /* MKMapView+ZoomLevel.m in Sources */,
 				711DC6B218C30A4800FB1749 /* TableCellEdit.m in Sources */,
@@ -1621,6 +1648,7 @@
 				717D76EB18C7F8120070302D /* Reachability.m in Sources */,
 				42FB6EBD21F2BAB800F694AB /* ApexResultBLInfoCell.m in Sources */,
 				715709A720215B5100EFE5C5 /* ioapi.c in Sources */,
+				3CE1DD04251C87DC00630A4F /* ApexResultAirAwbInfoCell.m in Sources */,
 				4253900E2079B7C700ECF982 /* KPIPieChartCell.m in Sources */,
 				42BB740620846B4500B9B6E4 /* KPITableCell.m in Sources */,
 				715643CA2019BC4C00B04267 /* SearchlistViewController.m in Sources */,
@@ -1807,7 +1835,7 @@
 				HEADER_SEARCH_PATHS = "";
 				INFOPLIST_FILE = "Apex Mobile/Apex Mobile-Info.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
-				MARKETING_VERSION = 2.82;
+				MARKETING_VERSION = 2.92;
 				OTHER_LDFLAGS = "-ObjC";
 				PRODUCT_BUNDLE_IDENTIFIER = "usai.apex.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";
@@ -1816,7 +1844,6 @@
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				TARGETED_DEVICE_FAMILY = 1;
 				USER_HEADER_SEARCH_PATHS = "";
-				"VALID_ARCHS[sdk=*]" = "arm64 armv7 armv7s";
 				WRAPPER_EXTENSION = app;
 			};
 			name = Debug;
@@ -1842,7 +1869,7 @@
 				HEADER_SEARCH_PATHS = "";
 				INFOPLIST_FILE = "Apex Mobile/Apex Mobile-Info.plist";
 				IPHONEOS_DEPLOYMENT_TARGET = 11.0;
-				MARKETING_VERSION = 2.82;
+				MARKETING_VERSION = 2.92;
 				OTHER_LDFLAGS = "-ObjC";
 				PRODUCT_BUNDLE_IDENTIFIER = "usai.apex.$(PRODUCT_NAME:rfc1034identifier)";
 				PRODUCT_NAME = "$(TARGET_NAME)";

+ 1 - 0
Apex Mobile/Apex Mobile/AppDelegate.h

@@ -7,6 +7,7 @@
 //
 
 #import <UIKit/UIKit.h>
+#import "config.h"
 //#import <GoogleMaps/GoogleMaps.h>
 
 UIKIT_EXTERN NSString * const APLogoutNotification;

+ 2 - 0
Apex Mobile/Apex Mobile/AppDelegate.m

@@ -163,6 +163,8 @@ void UncaughtExceptionHandler(NSException *exception) {
 {
     // Override point for customization after application launch.
     
+    
+    
     [self setupUncaughtExceptionHandler];
     [self handleErrMsg];
     

+ 20 - 11
Apex Mobile/Apex Mobile/CustomizeFieldViewController.m

@@ -82,21 +82,23 @@
     return UIInterfaceOrientationPortrait;
 }
 - (IBAction)onSaveClick:(UIBarButtonItem *)sender {
-    if(self.displayfields.count<1)
-        
+    
+    //新逻辑下fields 为附加字段,故允许为空。
+    if(self.displayfields.count<0 && !self.forNewResult)
+
     {
-        
+
         UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"alert_title_error", nil) message:NSLocalizedString(@"alert_msg_customizefield", nil) preferredStyle:UIAlertControllerStyleAlert];
         UIAlertAction *action = [UIAlertAction actionWithTitle:NSLocalizedString(@"ok", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
-            
+
         }];
-        
+
         [alertVC addAction:action];
-        
+
         [self presentViewController:alertVC animated:YES completion:nil];
-        
+
         return;
-        
+
     }
     sqlite3 *db =[ApexMobileDB get_db];
     @try{
@@ -318,9 +320,16 @@
     if(tableView.editing==false)
         return;
     
-    
-    if([tableView numberOfRowsInSection:indexPath.section]<=1)
-        return;
+    if(self.forNewResult)
+    {
+         if(indexPath.section==1&&[tableView numberOfRowsInSection:0]>=3)
+             return;
+    }
+    else
+    {
+        if(indexPath.section==0&&[tableView numberOfRowsInSection:indexPath.section]<=1)
+            return;
+    }
 //    int between = 1;
     NSUInteger curr = [[NSDate date] timeIntervalSince1970];
     

+ 16 - 1
Apex Mobile/Apex Mobile/DetailTabBarController.m

@@ -61,6 +61,10 @@
         NSString* title=@"";
         if([self.function_name isEqualToString:@"Ocean Booking"])
             title = @"Booking Detail";
+        else if([self.function_name isEqualToString:@"Air Booking"])
+            title = @"Air Booking Detail";
+        else if([self.function_name isEqualToString:@"Air AWB Info."])
+            title = @"AWB Info. Detail";
         else if([self.function_name isEqualToString:@"Ocean B/L info."])
             title = @"B/L info. Detail";
         else if([self.function_name isEqualToString:@"Container detail"])
@@ -87,6 +91,7 @@
             [params setValue:self.actions[i] forKey:@"action_type"];
             [params setValue:self.function_name forKey:@"module_name"];
             [params setValue:[self.params valueForKey:@"id"] forKey:@"id"];
+            [params setValue:[self.params valueForKey:@"_schema"] forKey:@"_schema"];
 //            [params setValue:[self.params valueForKey:@"sessionid"] forKey:@"sessionid"];
             
             if([self.function_name isEqualToString:@"Cargo Tracking"])
@@ -123,7 +128,17 @@
             [one.tabBarItem setTitlePositionAdjustment:offset];
 //            one.tabBarItem set
             
-            one.showMap = i == 0;
+            if([self.function_name isEqualToString:@"Air Booking"]||[self.function_name isEqualToString:@"Air AWB Info."])
+               
+            {
+                one.showMap=false;
+            }
+            else
+            {
+                one.showMap = i == 0;
+            }
+            
+            
             
             [controllers addObject:one];
         }

+ 57 - 57
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/Contents.json

@@ -1,116 +1,116 @@
 {
   "images" : [
     {
-      "size" : "20x20",
-      "idiom" : "iphone",
       "filename" : "appicon.png",
-      "scale" : "2x"
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "20x20"
     },
     {
-      "size" : "20x20",
-      "idiom" : "iphone",
       "filename" : "appicon-1.png",
-      "scale" : "3x"
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "20x20"
     },
     {
-      "size" : "29x29",
-      "idiom" : "iphone",
       "filename" : "appicon-2.png",
-      "scale" : "2x"
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "29x29"
     },
     {
-      "size" : "29x29",
-      "idiom" : "iphone",
       "filename" : "appicon-3.png",
-      "scale" : "3x"
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "29x29"
     },
     {
-      "size" : "40x40",
-      "idiom" : "iphone",
       "filename" : "appicon-4.png",
-      "scale" : "2x"
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "40x40"
     },
     {
-      "size" : "40x40",
-      "idiom" : "iphone",
       "filename" : "appicon-5.png",
-      "scale" : "3x"
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "40x40"
     },
     {
-      "size" : "60x60",
-      "idiom" : "iphone",
       "filename" : "appicon-6.png",
-      "scale" : "2x"
+      "idiom" : "iphone",
+      "scale" : "2x",
+      "size" : "60x60"
     },
     {
-      "size" : "60x60",
-      "idiom" : "iphone",
       "filename" : "appicon-7.png",
-      "scale" : "3x"
+      "idiom" : "iphone",
+      "scale" : "3x",
+      "size" : "60x60"
     },
     {
-      "size" : "20x20",
-      "idiom" : "ipad",
       "filename" : "appicon-8.png",
-      "scale" : "1x"
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "20x20"
     },
     {
-      "size" : "20x20",
-      "idiom" : "ipad",
       "filename" : "appicon-9.png",
-      "scale" : "2x"
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "20x20"
     },
     {
-      "size" : "29x29",
-      "idiom" : "ipad",
       "filename" : "appicon-10.png",
-      "scale" : "1x"
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "29x29"
     },
     {
-      "size" : "29x29",
-      "idiom" : "ipad",
       "filename" : "appicon-11.png",
-      "scale" : "2x"
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "29x29"
     },
     {
-      "size" : "40x40",
-      "idiom" : "ipad",
       "filename" : "appicon-12.png",
-      "scale" : "1x"
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "40x40"
     },
     {
-      "size" : "40x40",
-      "idiom" : "ipad",
       "filename" : "appicon-13.png",
-      "scale" : "2x"
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "40x40"
     },
     {
-      "size" : "76x76",
-      "idiom" : "ipad",
       "filename" : "appicon-14.png",
-      "scale" : "1x"
+      "idiom" : "ipad",
+      "scale" : "1x",
+      "size" : "76x76"
     },
     {
-      "size" : "76x76",
-      "idiom" : "ipad",
       "filename" : "appicon-15.png",
-      "scale" : "2x"
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "76x76"
     },
     {
-      "size" : "83.5x83.5",
-      "idiom" : "ipad",
       "filename" : "appicon-16.png",
-      "scale" : "2x"
+      "idiom" : "ipad",
+      "scale" : "2x",
+      "size" : "83.5x83.5"
     },
     {
-      "size" : "1024x1024",
-      "idiom" : "ios-marketing",
       "filename" : "appicon-17.png",
-      "scale" : "1x"
+      "idiom" : "ios-marketing",
+      "scale" : "1x",
+      "size" : "1024x1024"
     }
   ],
   "info" : {
-    "version" : 1,
-    "author" : "xcode"
+    "author" : "xcode",
+    "version" : 1
   }
-}
+}

BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-1.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-10.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-11.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-12.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-13.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-14.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-15.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-16.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-17.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-2.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-3.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-4.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-5.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-6.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-7.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-8.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon-9.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/AppIcon.appiconset/appicon.png


+ 23 - 0
Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_booking.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "appicon.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "appicon-1.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "appicon-2.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_booking.imageset/appicon-1.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_booking.imageset/appicon-2.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_booking.imageset/appicon.png


+ 23 - 0
Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_search.imageset/Contents.json

@@ -0,0 +1,23 @@
+{
+  "images" : [
+    {
+      "filename" : "appicon.png",
+      "idiom" : "universal",
+      "scale" : "1x"
+    },
+    {
+      "filename" : "appicon-1.png",
+      "idiom" : "universal",
+      "scale" : "2x"
+    },
+    {
+      "filename" : "appicon-2.png",
+      "idiom" : "universal",
+      "scale" : "3x"
+    }
+  ],
+  "info" : {
+    "author" : "xcode",
+    "version" : 1
+  }
+}

BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_search.imageset/appicon-1.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_search.imageset/appicon-2.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/mode_air_search.imageset/appicon.png


BIN
Apex Mobile/Apex Mobile/NewImages.xcassets/mode_booking.imageset/appicon.png


+ 4 - 0
Apex Mobile/Apex Mobile/Result/ApexResultViewController.m

@@ -11,6 +11,7 @@
 #import "ApexResultPresenter.h"
 #import "ApexResultContainerCell.h"
 #import "ApexResultDocumentCell.h"
+#import "ApexResultAirBookingCell.h"
 #import "JLRefreshHeader.h"
 #import "JLRefreshFooter.h"
 #import "RAProgressHUD.h"
@@ -19,6 +20,7 @@
 #import "CustomizeFieldViewController.h"
 
 #import "ApexResultBookingCell.h"
+#import "ApexResultAirAwbInfoCell.h"
 #import "ApexResultBLInfoCell.h"
 
 #import "ApexResultMenuItem.h"
@@ -86,6 +88,8 @@
     self.tableView.tableHeaderView = [UIView new];
     
     [self.tableView registerNib:[UINib nibWithNibName:@"ApexResultBookingCell" bundle:nil] forCellReuseIdentifier:ApexResultBookingCell.identifier];
+    [self.tableView registerNib:[UINib nibWithNibName:@"ApexResultAirBookingCell" bundle:nil] forCellReuseIdentifier:ApexResultAirBookingCell.identifier];
+        [self.tableView registerNib:[UINib nibWithNibName:@"ApexResultAirAwbInfoCell" bundle:nil] forCellReuseIdentifier:ApexResultAirAwbInfoCell.identifier];
     [self.tableView registerNib:[UINib nibWithNibName:@"ApexResultBLInfoCell" bundle:nil] forCellReuseIdentifier:ApexResultBLInfoCell.identifier];
     [self.tableView registerNib:[UINib nibWithNibName:@"ApexResultContainerCell" bundle:nil] forCellReuseIdentifier:ApexResultContainerCell.identifier];
     [self.tableView registerNib:[UINib nibWithNibName:@"ApexResultDocumentCell" bundle:nil] forCellReuseIdentifier:ApexResultDocumentCell.identifier];

+ 28 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirAwbInfoCell.h

@@ -0,0 +1,28 @@
+//
+//  ApexResultAirAwbInfoCell.h
+//  Apex Mobile
+//
+//  Created by Rui Zhang on 6/22/20.
+//  Copyright © 2020 United Software Applications, Inc. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ApexResultAirAwbInfoCell : UITableViewCell
+@property (nonatomic,class,readonly,copy) NSString *identifier;
+
+- (instancetype)setTitle:(NSString *)title;
+- (instancetype)setPort:(NSString *)port;
+- (instancetype)setTime:(NSString *)time;
+- (instancetype)setDescription:(NSString *)desc;
+- (instancetype)setDetail:(NSString *)detail;
+- (instancetype)setIcon:(NSString *)icon;
+- (instancetype)setTransportStage:(NSInteger)stage;
+- (instancetype)setIconSelect:(BOOL)select;
+- (instancetype)setConsignee:(NSString *)consignee;
+- (instancetype)addAdditionName:(NSString *)name value:(NSString *)value;
+@end
+
+NS_ASSUME_NONNULL_END

+ 219 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirAwbInfoCell.m

@@ -0,0 +1,219 @@
+//
+//  ApexResultAirAwbInfoCell.m
+//  Apex Mobile
+//
+//  Created by Rui Zhang on 6/22/20.
+//  Copyright © 2020 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultAirAwbInfoCell.h"
+#import "const.h"
+#import "ApexResultAdditionView.h"
+#import "UIView+RAConstraint.h"
+
+
+@interface ApexResultAirAwbInfoCell()
+
+@property (strong, nonatomic) IBOutlet UIView *bgView;
+@property (strong, nonatomic) IBOutlet UILabel *titleLabel;
+@property (strong, nonatomic) IBOutlet UILabel *portLabel;
+@property (strong, nonatomic) IBOutlet UILabel *timeLabel;
+@property (strong, nonatomic) IBOutlet UIImageView *iconView;
+@property (strong, nonatomic) IBOutlet UILabel *descLabel;
+@property (strong, nonatomic) IBOutlet UILabel *detailLabel;
+@property (strong, nonatomic) IBOutlet UIView *transportStageView;
+@property (strong, nonatomic) IBOutlet UILabel *consigneeLabel;
+
+@property (nonatomic,strong) UIView *selectView;
+@property (nonatomic,assign) NSInteger additionCount;
+@property (nonatomic,strong) NSMutableArray<ApexResultAdditionView *> *additionArray;
+
+@end
+@implementation ApexResultAirAwbInfoCell
+#pragma mark - Override
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    
+    self.iconView.tintColor=UIColorFromRGB(0x1e7ffb);
+    
+    self.bgView.layer.cornerRadius = 5;
+    self.bgView.layer.borderColor = [UIColor darkGrayColor].CGColor;
+    self.bgView.layer.borderWidth = 0.3;
+    
+    self.titleLabel.textColor = [UIColor colorWithRed:53 / 255.0 green:53 / 255.0 blue:55 / 255.0 alpha:1.0];
+    self.portLabel.textColor = [UIColor colorWithRed:168 / 255.0 green:9 / 255.0 blue:26 / 255.0 alpha:1.0];
+    self.timeLabel.textColor = [UIColor colorWithRed:168 / 255.0 green:9 / 255.0 blue:26 / 255.0 alpha:1.0];
+    self.descLabel.textColor = [UIColor colorWithRed:53 / 255.0 green:53 / 255.0 blue:55 / 255.0 alpha:1.0];
+    
+    self.selectView = [UIView new];
+    self.selectView.layer.cornerRadius = 5;
+    self.selectView.layer.borderColor = [UIColor darkGrayColor].CGColor;
+    self.selectView.layer.borderWidth = 0.3;
+    self.selectView.backgroundColor = [UIColor colorWithWhite:0.7 alpha:0.8];
+    self.selectedBackgroundView = self.selectView;
+    
+    self.additionArray = [NSMutableArray array];
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    
+    self.selectView.frame = self.bgView.frame;
+}
+
+- (void)prepareForReuse {
+    [super prepareForReuse];
+    
+    [[[[[[[self setTitle:nil] setPort:nil] setTime:nil] setDescription:nil] setDetail:nil] setIcon:nil] setIconSelect:NO];
+    [self clearAdditionView];
+}
+
+#pragma mark - Getter
+
++ (NSString *)identifier {
+    return NSStringFromClass(self);
+}
+
+#pragma mark - Setter
+
+- (instancetype)setTitle:(NSString *)title{
+    self.titleLabel.text = title;
+    return self;
+}
+
+- (instancetype)setPort:(NSString *)port{
+    self.portLabel.text = port;
+    return self;
+}
+
+- (instancetype)setTime:(NSString *)time {
+    self.timeLabel.text = time;
+    return self;
+}
+
+- (instancetype)setDescription:(NSString *)desc {
+    self.descLabel.text = desc;
+    return self;
+}
+
+- (instancetype)setDetail:(NSString *)detail {
+    self.detailLabel.text = detail;
+    return self;
+}
+
+- (instancetype)setIcon:(NSString *)icon {
+    
+    if (icon) {
+        self.iconView.image = [[UIImage imageNamed:icon] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+    } else {
+        self.iconView.image = nil;
+    }
+    
+    return self;
+}
+
+- (instancetype)setTransportStage:(NSInteger)stage {
+    
+    UIColor *stageColor;
+    switch (stage) {
+        case 0: {
+            stageColor = [UIColor colorWithRed:0.2 green:0.14 blue:0.12 alpha:1.0];
+        }
+            break;
+        case 1: {
+            stageColor = [UIColor colorWithRed:0.13 green:0.8 blue:0.8 alpha:1.0];
+        }
+            break;
+        case 2: {
+            stageColor = [UIColor colorWithRed:0.25 green:0.13 blue:0.64 alpha:1.0];
+        }
+            break;
+        case 3: {
+            stageColor = [UIColor colorWithRed:8 / 255.0 green:115 / 255.0 blue:3 / 255.0 alpha:1.0];
+        }
+            break;
+        default: {
+            stageColor = [UIColor colorWithRed:0.2 green:0.14 blue:0.12 alpha:1.0];
+        }
+            break;
+    }
+    
+    self.transportStageView.backgroundColor = stageColor;
+    
+    return self;
+}
+
+- (instancetype)setConsignee:(NSString *)consignee {
+    self.consigneeLabel.text = consignee;
+    return self;
+}
+
+- (instancetype)setIconSelect:(BOOL)select {
+    if (select) {
+        
+        CGFloat w = CGRectGetWidth(self.iconView.bounds);
+        CGFloat h = CGRectGetHeight(self.iconView.bounds);
+        CGFloat r = MIN(w, h) * 0.5;
+        UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.iconView.bounds cornerRadius:r];
+        CAShapeLayer *mask = [CAShapeLayer layer];
+        mask.lineWidth = 1.0f;
+        mask.strokeColor = [UIColor redColor].CGColor;
+        mask.fillColor = [UIColor clearColor].CGColor;
+        mask.path = path.CGPath;
+        mask.name = @"am_mask";
+        [self.iconView.layer addSublayer:mask];
+        
+    } else {
+        NSMutableArray *mArr = [self.iconView.layer.sublayers mutableCopy];
+        for (CALayer *layer in mArr) {
+            if ([layer isKindOfClass:[CAShapeLayer class]] && [layer.name isEqualToString:@"am_mask"]) {
+                [layer removeFromSuperlayer];
+            }
+        }
+    }
+    return self;
+}
+
+- (instancetype)addAdditionName:(NSString *)name value:(NSString *)value {
+    
+    ApexResultAdditionView *additionView;
+    if (self.additionCount >= self.additionArray.count) {
+        
+        additionView = [ApexResultAdditionView additionView];
+        
+        [self.additionArray addObject:additionView];
+        
+    } else {
+        
+        additionView = [self.additionArray objectAtIndex:self.additionCount];
+    }
+    additionView.titleLabel.text = name;
+    additionView.valueLabel.text = value;
+    
+    [self.bgView addSubview:additionView];
+    __weak typeof(self) weakSelf = self;
+    [additionView ra_applyConstraints:^(RAConstraintMaker *maker) {
+        
+        maker.left.ra_equalTo(weakSelf.bgView.left).ra_offset(10);
+        maker.top.ra_equalTo(weakSelf.bgView.top).ra_offset(110.0f + 25.0f * weakSelf.additionCount);
+        maker.right.ra_equalTo(weakSelf.bgView.right).ra_offset(-10);
+        maker.height.ra_offset(25.0f);
+    }];
+    
+    self.additionCount++;
+    
+    return self;
+}
+
+#pragma mark - Private
+
+- (void)clearAdditionView {
+    for (ApexResultAdditionView *additionView in self.additionArray) {
+        [additionView removeFromSuperview];
+    }
+    self.additionCount = 0;
+}
+
+@end

+ 132 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirAwbInfoCell.xib

@@ -0,0 +1,132 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16097" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="125" id="KGk-i7-Jjw" customClass="ApexResultAirAwbInfoCell">
+            <rect key="frame" x="0.0" y="0.0" width="509" height="125"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="509" height="125"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="hEF-Uk-vZV">
+                        <rect key="frame" x="5" y="15" width="499" height="110"/>
+                        <subviews>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="est-Ga-R9U">
+                                <rect key="frame" x="494" y="0.0" width="5" height="110"/>
+                                <color key="backgroundColor" red="0.0" green="0.56031829119999998" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" constant="5" id="kQg-f3-ADh"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <constraints>
+                            <constraint firstAttribute="trailing" secondItem="est-Ga-R9U" secondAttribute="trailing" id="Uvo-8s-I6k"/>
+                            <constraint firstItem="est-Ga-R9U" firstAttribute="top" secondItem="hEF-Uk-vZV" secondAttribute="top" id="gRl-3j-Z4h"/>
+                            <constraint firstAttribute="bottom" secondItem="est-Ga-R9U" secondAttribute="bottom" id="t7f-aB-LE6"/>
+                        </constraints>
+                    </view>
+                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="zJi-V3-mLT">
+                        <rect key="frame" x="15" y="68.5" width="48" height="48"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="48" id="NSn-sO-reZ"/>
+                            <constraint firstAttribute="width" constant="48" id="eee-mJ-FaA"/>
+                        </constraints>
+                    </imageView>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Consignee" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="w7j-Qz-6UC">
+                        <rect key="frame" x="424.5" y="27.5" width="64.5" height="16"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" text="315 Status" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ue7-0b-D5a">
+                        <rect key="frame" x="15" y="25" width="79" height="21"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="21" id="znB-fl-sNn"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A1801380001 (5 containers)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="DRa-Kc-0hX">
+                        <rect key="frame" x="71" y="68.5" width="418" height="18"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="18" id="Ymx-gI-N5f"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="latest update information shows here include location, status, time, etc" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="g4V-My-yvD">
+                        <rect key="frame" x="71" y="91.5" width="418" height="29"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="29" id="QZO-Jf-qOz"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <color key="textColor" red="0.36078431370000003" green="0.38823529410000002" blue="0.4039215686" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CNTAO - USLAX" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Va6-80-bgX">
+                        <rect key="frame" x="395.5" y="49" width="93.5" height="14.5"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="12/09/2017 - 01/20/2018" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lAe-V2-fIU">
+                        <rect key="frame" x="15" y="49" width="140" height="14.5"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                </subviews>
+                <constraints>
+                    <constraint firstItem="Va6-80-bgX" firstAttribute="height" secondItem="lAe-V2-fIU" secondAttribute="height" id="0Ng-JS-Uu4"/>
+                    <constraint firstItem="g4V-My-yvD" firstAttribute="top" secondItem="DRa-Kc-0hX" secondAttribute="bottom" constant="5" id="3Sw-6t-8Q9"/>
+                    <constraint firstItem="ue7-0b-D5a" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="15" id="54H-Ao-70R"/>
+                    <constraint firstItem="ue7-0b-D5a" firstAttribute="centerY" secondItem="w7j-Qz-6UC" secondAttribute="centerY" id="5Td-tZ-pCg"/>
+                    <constraint firstItem="hEF-Uk-vZV" firstAttribute="trailing" secondItem="g4V-My-yvD" secondAttribute="trailing" constant="15" id="9cJ-E9-jSd"/>
+                    <constraint firstItem="zJi-V3-mLT" firstAttribute="top" secondItem="lAe-V2-fIU" secondAttribute="bottom" constant="5" id="9lZ-bH-Bly"/>
+                    <constraint firstItem="ue7-0b-D5a" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="25" id="Dtd-8m-w5X"/>
+                    <constraint firstItem="lAe-V2-fIU" firstAttribute="leading" secondItem="ue7-0b-D5a" secondAttribute="leading" id="IFq-6R-JWh"/>
+                    <constraint firstItem="w7j-Qz-6UC" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="ue7-0b-D5a" secondAttribute="trailing" priority="999" constant="10" id="PH9-RW-RR4"/>
+                    <constraint firstItem="hEF-Uk-vZV" firstAttribute="trailing" secondItem="Va6-80-bgX" secondAttribute="trailing" constant="15" id="Twx-r9-zzn"/>
+                    <constraint firstItem="lAe-V2-fIU" firstAttribute="top" secondItem="ue7-0b-D5a" secondAttribute="bottom" constant="3" id="WJD-wS-pkL"/>
+                    <constraint firstItem="hEF-Uk-vZV" firstAttribute="trailing" secondItem="w7j-Qz-6UC" secondAttribute="trailing" constant="15" id="Wzr-BJ-e5m"/>
+                    <constraint firstItem="DRa-Kc-0hX" firstAttribute="leading" secondItem="zJi-V3-mLT" secondAttribute="trailing" constant="8" id="c2b-Cb-Ffl"/>
+                    <constraint firstItem="DRa-Kc-0hX" firstAttribute="top" secondItem="zJi-V3-mLT" secondAttribute="top" id="cT7-27-cjM"/>
+                    <constraint firstItem="zJi-V3-mLT" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="15" id="cjH-R0-BS9"/>
+                    <constraint firstItem="Va6-80-bgX" firstAttribute="top" secondItem="lAe-V2-fIU" secondAttribute="top" id="em7-59-mmj"/>
+                    <constraint firstItem="hEF-Uk-vZV" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="5" id="hwv-xO-4Mh"/>
+                    <constraint firstItem="g4V-My-yvD" firstAttribute="leading" secondItem="zJi-V3-mLT" secondAttribute="trailing" constant="8" id="kLp-Rh-sCW"/>
+                    <constraint firstItem="hEF-Uk-vZV" firstAttribute="trailing" secondItem="DRa-Kc-0hX" secondAttribute="trailing" constant="15" id="ndk-LG-o10"/>
+                    <constraint firstItem="hEF-Uk-vZV" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="15" id="tW1-DS-YRK"/>
+                    <constraint firstItem="Va6-80-bgX" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="lAe-V2-fIU" secondAttribute="trailing" priority="999" constant="5" id="uXK-s0-bTr"/>
+                    <constraint firstAttribute="bottom" secondItem="hEF-Uk-vZV" secondAttribute="bottom" id="wLj-d6-tgV"/>
+                    <constraint firstAttribute="trailing" secondItem="hEF-Uk-vZV" secondAttribute="trailing" constant="5" id="xZT-B2-NKP"/>
+                </constraints>
+            </tableViewCellContentView>
+            <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
+            <connections>
+                <outlet property="bgView" destination="hEF-Uk-vZV" id="fbp-G1-NdA"/>
+                <outlet property="consigneeLabel" destination="w7j-Qz-6UC" id="7P7-ub-8gU"/>
+                <outlet property="descLabel" destination="DRa-Kc-0hX" id="ubG-ok-GeA"/>
+                <outlet property="detailLabel" destination="g4V-My-yvD" id="FwS-wa-Kyw"/>
+                <outlet property="iconView" destination="zJi-V3-mLT" id="bHt-Eq-szC"/>
+                <outlet property="portLabel" destination="Va6-80-bgX" id="XrD-wr-Hpo"/>
+                <outlet property="timeLabel" destination="lAe-V2-fIU" id="SUH-74-rki"/>
+                <outlet property="titleLabel" destination="ue7-0b-D5a" id="oYw-LZ-DxD"/>
+                <outlet property="transportStageView" destination="est-Ga-R9U" id="Db3-4T-3fp"/>
+            </connections>
+            <point key="canvasLocation" x="132" y="91"/>
+        </tableViewCell>
+    </objects>
+</document>

+ 28 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirBookingCell.h

@@ -0,0 +1,28 @@
+//
+//  ApexResultAirBookingCell.h
+//  Apex Mobile
+//
+//  Created by Rui Zhang on 6/19/20.
+//  Copyright © 2020 United Software Applications, Inc. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ApexResultAirBookingCell : UITableViewCell
+
+@property (nonatomic,class,readonly,copy) NSString *identifier;
+- (instancetype)setTitle:(NSString *)title;
+- (instancetype)setPort:(NSString *)port;
+- (instancetype)setTime:(NSString *)time;
+- (instancetype)setDescription:(NSString *)desc;
+- (instancetype)setDetail:(NSString *)detail;
+- (instancetype)setIcon:(NSString *)icon;
+- (instancetype)setIconSelect:(BOOL)select;
+- (instancetype)setConsignee:(NSString *)consignee;
+
+- (instancetype)addAdditionName:(NSString *)name value:(NSString *)value;
+@end
+
+NS_ASSUME_NONNULL_END

+ 185 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirBookingCell.m

@@ -0,0 +1,185 @@
+//
+//  ApexResultAirBookingCell.m
+//  Apex Mobile
+//
+//  Created by Rui Zhang on 6/19/20.
+//  Copyright © 2020 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultAirBookingCell.h"
+#import "const.h"
+#import "ApexResultAdditionView.h"
+#import "UIView+RAConstraint.h"
+
+@interface ApexResultAirBookingCell()
+@property (strong, nonatomic) IBOutlet UIView *bgView;
+@property (strong, nonatomic) IBOutlet UILabel *titleLabel;
+@property (strong, nonatomic) IBOutlet UILabel *portLabel;
+@property (strong, nonatomic) IBOutlet UILabel *timeLabel;
+@property (strong, nonatomic) IBOutlet UIImageView *iconView;
+@property (strong, nonatomic) IBOutlet UILabel *descLabel;
+@property (strong, nonatomic) IBOutlet UILabel *detailLabel;
+@property (strong, nonatomic) IBOutlet UILabel *consigneeLabel;
+
+@property (nonatomic,strong) UIView *selectView;
+@property (nonatomic,assign) NSInteger additionCount;
+@property (nonatomic,strong) NSMutableArray<ApexResultAdditionView *> *additionArray;
+
+@end
+
+@implementation ApexResultAirBookingCell
+
+- (void)awakeFromNib {
+    [super awakeFromNib];
+    // Initialization code
+    
+    self.iconView.tintColor=UIColorFromRGB(0x1e7ffb);
+    
+    self.bgView.layer.cornerRadius = 5;
+    self.bgView.layer.borderColor = [UIColor darkGrayColor].CGColor;
+    self.bgView.layer.borderWidth = 0.3;
+    
+    self.titleLabel.textColor = [UIColor colorWithRed:53 / 255.0 green:53 / 255.0 blue:55 / 255.0 alpha:1.0];
+    self.portLabel.textColor = [UIColor colorWithRed:168 / 255.0 green:9 / 255.0 blue:26 / 255.0 alpha:1.0];
+    self.timeLabel.textColor = [UIColor colorWithRed:168 / 255.0 green:9 / 255.0 blue:26 / 255.0 alpha:1.0];
+    self.descLabel.textColor = [UIColor colorWithRed:53 / 255.0 green:53 / 255.0 blue:55 / 255.0 alpha:1.0];
+    
+    self.selectView = [UIView new];
+    self.selectView.layer.cornerRadius = 5;
+    self.selectView.layer.borderColor = [UIColor darkGrayColor].CGColor;
+    self.selectView.layer.borderWidth = 0.3;
+    self.selectView.backgroundColor = [UIColor colorWithWhite:0.7 alpha:0.8];
+    self.selectedBackgroundView = self.selectView;
+    
+    self.additionArray = [NSMutableArray array];
+}
+
+- (void)layoutSubviews {
+    [super layoutSubviews];
+    
+    self.selectView.frame = self.bgView.frame;
+}
+
+- (void)prepareForReuse {
+    [super prepareForReuse];
+    
+    [[[[[[[[self setTitle:nil] setPort:nil] setTime:nil] setDescription:nil] setDetail:nil] setIcon:nil] setIconSelect:NO] setConsignee:nil];
+    [self clearAdditionView];
+}
+
+#pragma mark - Getter
+
++ (NSString *)identifier {
+    return NSStringFromClass(self);
+}
+
+#pragma mark - Setter
+
+- (instancetype)setTitle:(NSString *)title{
+    self.titleLabel.text = title;
+    return self;
+}
+
+- (instancetype)setPort:(NSString *)port{
+    self.portLabel.text = port;
+    return self;
+}
+
+- (instancetype)setTime:(NSString *)time {
+    self.timeLabel.text = time;
+    return self;
+}
+
+- (instancetype)setDescription:(NSString *)desc {
+    self.descLabel.text = desc;
+    return self;
+}
+
+- (instancetype)setDetail:(NSString *)detail {
+    self.detailLabel.text = detail;
+    return self;
+}
+
+- (instancetype)setIcon:(NSString *)icon {
+    
+    if (icon) {
+        self.iconView.image = [[UIImage imageNamed:icon] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
+    } else {
+        self.iconView.image = nil;
+    }
+    
+    return self;
+}
+
+- (instancetype)setIconSelect:(BOOL)select {
+    if (select) {
+        
+        CGFloat w = CGRectGetWidth(self.iconView.bounds);
+        CGFloat h = CGRectGetHeight(self.iconView.bounds);
+        CGFloat r = MIN(w, h) * 0.5;
+        UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:self.iconView.bounds cornerRadius:r];
+        CAShapeLayer *mask = [CAShapeLayer layer];
+        mask.lineWidth = 1.0f;
+        mask.strokeColor = [UIColor redColor].CGColor;
+        mask.fillColor = [UIColor clearColor].CGColor;
+        mask.path = path.CGPath;
+        mask.name = @"am_mask";
+        [self.iconView.layer addSublayer:mask];
+        
+    } else {
+        NSMutableArray *mArr = [self.iconView.layer.sublayers mutableCopy];
+        for (CALayer *layer in mArr) {
+            if ([layer isKindOfClass:[CAShapeLayer class]] && [layer.name isEqualToString:@"am_mask"]) {
+                [layer removeFromSuperlayer];
+            }
+        }
+    }
+    return self;
+}
+
+- (instancetype)setConsignee:(NSString *)consignee {
+    self.consigneeLabel.text = consignee;
+    return self;
+}
+
+- (instancetype)addAdditionName:(NSString *)name value:(NSString *)value {
+    
+    ApexResultAdditionView *additionView;
+    if (self.additionCount >= self.additionArray.count) {
+        
+        additionView = [ApexResultAdditionView additionView];
+        
+        [self.additionArray addObject:additionView];
+        
+    } else {
+        
+        additionView = [self.additionArray objectAtIndex:self.additionCount];
+    }
+    additionView.titleLabel.text = name;
+    additionView.valueLabel.text = value;
+    
+    [self.bgView addSubview:additionView];
+    __weak typeof(self) weakSelf = self;
+    [additionView ra_applyConstraints:^(RAConstraintMaker *maker) {
+        
+        maker.left.ra_equalTo(weakSelf.bgView.left).ra_offset(10);
+        maker.top.ra_equalTo(weakSelf.bgView.top).ra_offset(110.0f + 25.0f * weakSelf.additionCount);
+        maker.right.ra_equalTo(weakSelf.bgView.right).ra_offset(-10);
+        maker.height.ra_offset(25.0f);
+    }];
+    
+    self.additionCount++;
+    
+    return self;
+}
+
+#pragma mark - Private
+
+- (void)clearAdditionView {
+    for (ApexResultAdditionView *additionView in self.additionArray) {
+        [additionView removeFromSuperview];
+    }
+    self.additionCount = 0;
+}
+
+@end

+ 131 - 0
Apex Mobile/Apex Mobile/Result/Cell/ApexResultAirBookingCell.xib

@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="16097" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina6_1" orientation="portrait" appearance="light"/>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="125" id="KGk-i7-Jjw" customClass="ApexResultAirBookingCell">
+            <rect key="frame" x="0.0" y="0.0" width="509" height="125"/>
+            <autoresizingMask key="autoresizingMask"/>
+            <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
+                <rect key="frame" x="0.0" y="0.0" width="509" height="125"/>
+                <autoresizingMask key="autoresizingMask"/>
+                <subviews>
+                    <view clipsSubviews="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="bmh-sQ-XTu">
+                        <rect key="frame" x="5" y="15" width="499" height="110"/>
+                        <subviews>
+                            <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="npi-7r-ko8">
+                                <rect key="frame" x="499" y="0.0" width="0.0" height="110"/>
+                                <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                                <constraints>
+                                    <constraint firstAttribute="width" id="fXR-Ur-2T1"/>
+                                </constraints>
+                            </view>
+                        </subviews>
+                        <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
+                        <constraints>
+                            <constraint firstItem="npi-7r-ko8" firstAttribute="top" secondItem="bmh-sQ-XTu" secondAttribute="top" id="7Gb-9v-Gmf"/>
+                            <constraint firstAttribute="trailing" secondItem="npi-7r-ko8" secondAttribute="trailing" id="uYA-YA-d26"/>
+                            <constraint firstAttribute="bottom" secondItem="npi-7r-ko8" secondAttribute="bottom" id="zts-Uj-aPL"/>
+                        </constraints>
+                    </view>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Consignee" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Fyx-g8-jUO">
+                        <rect key="frame" x="429.5" y="27.5" width="64.5" height="16"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="13"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="751" text="315 Status" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="K9F-8B-5ic">
+                        <rect key="frame" x="15" y="25" width="79" height="21"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="21" id="NCb-v5-Clo"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="QCK-dv-fQP">
+                        <rect key="frame" x="15" y="68.5" width="48" height="48"/>
+                        <constraints>
+                            <constraint firstAttribute="width" constant="48" id="JGZ-nP-UHS"/>
+                            <constraint firstAttribute="height" constant="48" id="RDy-5a-xWt"/>
+                        </constraints>
+                    </imageView>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="12/09/2017 - 01/20/2018" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="t95-kf-Sql">
+                        <rect key="frame" x="15" y="49" width="140" height="14.5"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="latest update information shows here include location, status, time, etc" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="D0R-7x-YoR">
+                        <rect key="frame" x="71" y="91.5" width="443" height="29"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="29" id="4gd-Z0-3zN"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <color key="textColor" red="0.36078431370000003" green="0.38823529410000002" blue="0.4039215686" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="CNTAO - USLAX" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="vYc-tT-FiW">
+                        <rect key="frame" x="400.5" y="49" width="93.5" height="14.5"/>
+                        <fontDescription key="fontDescription" type="system" pointSize="12"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A1801380001 (5 containers)" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="sHz-Xa-SPU">
+                        <rect key="frame" x="71" y="68.5" width="443" height="18"/>
+                        <constraints>
+                            <constraint firstAttribute="height" constant="18" id="1cW-fh-El1"/>
+                        </constraints>
+                        <fontDescription key="fontDescription" type="system" pointSize="15"/>
+                        <nil key="textColor"/>
+                        <nil key="highlightedColor"/>
+                    </label>
+                </subviews>
+                <constraints>
+                    <constraint firstAttribute="bottom" secondItem="bmh-sQ-XTu" secondAttribute="bottom" id="0bC-ca-UJB"/>
+                    <constraint firstItem="t95-kf-Sql" firstAttribute="top" secondItem="K9F-8B-5ic" secondAttribute="bottom" constant="3" id="0nm-lq-nJH"/>
+                    <constraint firstItem="Fyx-g8-jUO" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="K9F-8B-5ic" secondAttribute="trailing" priority="999" constant="10" id="53T-Dp-RQb"/>
+                    <constraint firstItem="D0R-7x-YoR" firstAttribute="trailing" secondItem="bmh-sQ-XTu" secondAttribute="trailing" constant="10" id="9XO-bc-C2F"/>
+                    <constraint firstItem="QCK-dv-fQP" firstAttribute="top" secondItem="t95-kf-Sql" secondAttribute="bottom" constant="5" id="BuI-mI-pJJ"/>
+                    <constraint firstItem="vYc-tT-FiW" firstAttribute="height" secondItem="t95-kf-Sql" secondAttribute="height" id="BzD-T4-TvF"/>
+                    <constraint firstItem="D0R-7x-YoR" firstAttribute="leading" secondItem="QCK-dv-fQP" secondAttribute="trailing" constant="8" id="HEQ-Fm-BHK"/>
+                    <constraint firstItem="t95-kf-Sql" firstAttribute="leading" secondItem="K9F-8B-5ic" secondAttribute="leading" id="Hc4-PG-xAO"/>
+                    <constraint firstItem="bmh-sQ-XTu" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="5" id="OOC-Xc-a0h"/>
+                    <constraint firstAttribute="trailing" secondItem="bmh-sQ-XTu" secondAttribute="trailing" constant="5" id="P2q-VS-iP8"/>
+                    <constraint firstItem="sHz-Xa-SPU" firstAttribute="trailing" secondItem="bmh-sQ-XTu" secondAttribute="trailing" constant="10" id="TUm-Q0-FPp"/>
+                    <constraint firstItem="Fyx-g8-jUO" firstAttribute="trailing" secondItem="bmh-sQ-XTu" secondAttribute="trailing" constant="-10" id="Ue5-HE-Hdr"/>
+                    <constraint firstItem="D0R-7x-YoR" firstAttribute="top" secondItem="sHz-Xa-SPU" secondAttribute="bottom" constant="5" id="V3Q-7a-Owv"/>
+                    <constraint firstItem="Fyx-g8-jUO" firstAttribute="centerY" secondItem="K9F-8B-5ic" secondAttribute="centerY" id="dlA-7l-ui6"/>
+                    <constraint firstItem="vYc-tT-FiW" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="t95-kf-Sql" secondAttribute="trailing" priority="999" constant="5" id="hzD-Wk-9ht"/>
+                    <constraint firstAttribute="leading" secondItem="K9F-8B-5ic" secondAttribute="leading" constant="-15" id="iM2-eF-cuN"/>
+                    <constraint firstItem="vYc-tT-FiW" firstAttribute="trailing" secondItem="bmh-sQ-XTu" secondAttribute="trailing" constant="-10" id="iUv-bd-7Fv"/>
+                    <constraint firstItem="K9F-8B-5ic" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="25" id="kZN-q8-ZhR"/>
+                    <constraint firstItem="sHz-Xa-SPU" firstAttribute="top" secondItem="QCK-dv-fQP" secondAttribute="top" id="lmf-Gs-rtd"/>
+                    <constraint firstItem="sHz-Xa-SPU" firstAttribute="leading" secondItem="QCK-dv-fQP" secondAttribute="trailing" constant="8" id="sBq-xx-G61"/>
+                    <constraint firstItem="bmh-sQ-XTu" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="15" id="weN-n8-lqn"/>
+                    <constraint firstItem="vYc-tT-FiW" firstAttribute="top" secondItem="t95-kf-Sql" secondAttribute="top" id="xh3-aB-V14"/>
+                    <constraint firstItem="QCK-dv-fQP" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="15" id="zCF-0x-vPt"/>
+                </constraints>
+            </tableViewCellContentView>
+            <viewLayoutGuide key="safeArea" id="aW0-zy-SZf"/>
+            <connections>
+                <outlet property="bgView" destination="bmh-sQ-XTu" id="xIV-ol-RuA"/>
+                <outlet property="consigneeLabel" destination="Fyx-g8-jUO" id="r1t-I8-sKP"/>
+                <outlet property="descLabel" destination="sHz-Xa-SPU" id="Qcn-dq-wOa"/>
+                <outlet property="detailLabel" destination="D0R-7x-YoR" id="ud0-SN-4Zn"/>
+                <outlet property="iconView" destination="QCK-dv-fQP" id="wwb-Xt-EN7"/>
+                <outlet property="portLabel" destination="vYc-tT-FiW" id="XrK-5h-kzq"/>
+                <outlet property="timeLabel" destination="t95-kf-Sql" id="lkv-LG-0cc"/>
+                <outlet property="titleLabel" destination="K9F-8B-5ic" id="sGO-o5-EvQ"/>
+            </connections>
+            <point key="canvasLocation" x="132" y="95"/>
+        </tableViewCell>
+    </objects>
+</document>

+ 24 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultAirAwbInfoModel.h

@@ -0,0 +1,24 @@
+//
+//  ApexResultAirAwbInfoModel.h
+//  Apex Mobile
+//
+//  Created by Rui Zhang on 6/19/20.
+//  Copyright © 2020 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultBaseModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ApexResultAirAwbInfoModel : ApexResultBaseModel
+@property (nonatomic,copy) NSString *title;
+@property (nonatomic,copy) NSString *icon;
+@property (nonatomic,copy) NSString *desc;
+@property (nonatomic,copy) NSString *detail;
+@property (nonatomic,copy) NSString *date;
+@property (nonatomic,copy) NSString *port;
+@property (nonatomic,strong) NSNumber *transport_stage;
+@property (nonatomic,copy) NSString *consignee;
+@end
+
+NS_ASSUME_NONNULL_END

+ 19 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultAirAwbInfoModel.m

@@ -0,0 +1,19 @@
+//
+//  ApexResultAirAwbInfoModel.m
+//  Apex Mobile
+//
+//  Created by Rui Zhang on 6/19/20.
+//  Copyright © 2020 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultAirAwbInfoModel.h"
+
+@implementation ApexResultAirAwbInfoModel
+- (CGFloat)height {
+    return 125.0f + self.addition.count * 25.0f;
+}
+
+- (NSString *)icon {
+    return @"mode_air_search";
+}
+@end

+ 23 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultAirBookingModel.h

@@ -0,0 +1,23 @@
+//
+//  ApexResultAirBookingModel.h
+//  Apex Mobile
+//
+//  Created by Rui Zhang on 6/19/20.
+//  Copyright © 2020 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultBaseModel.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface ApexResultAirBookingModel : ApexResultBaseModel
+@property (nonatomic,copy) NSString *title;
+@property (nonatomic,copy) NSString *icon;
+@property (nonatomic,copy) NSString *desc;
+@property (nonatomic,copy) NSString *detail;
+@property (nonatomic,copy) NSString *date;
+@property (nonatomic,copy) NSString *port;
+@property (nonatomic,copy) NSString *consignee;
+@end
+
+NS_ASSUME_NONNULL_END

+ 18 - 0
Apex Mobile/Apex Mobile/Result/Model/ApexResultAirBookingModel.m

@@ -0,0 +1,18 @@
+//
+//  ApexResultAirBookingModel.m
+//  Apex Mobile
+//
+//  Created by Rui Zhang on 6/19/20.
+//  Copyright © 2020 United Software Applications, Inc. All rights reserved.
+//
+
+#import "ApexResultAirBookingModel.h"
+
+@implementation ApexResultAirBookingModel
+- (CGFloat)height {
+    return 125.0f + self.addition.count * 25.0f;
+}
+- (NSString *)icon {
+    return @"mode_air_booking";
+}
+@end

+ 3 - 1
Apex Mobile/Apex Mobile/Result/Model/ApexResultBaseModel.h

@@ -12,7 +12,9 @@ typedef NS_ENUM(NSUInteger, ApexResultType) {
     ApexResultTypeBooking,
     ApexResultTypeBLInfo,
     ApexResultTypeContainer,
-    ApexResultTypeDocument
+    ApexResultTypeDocument,
+    ApexResultTypeAirBooking,
+    ApexResultTypeAirAwbInfo
 };
 
 @class ApexResultAddition;

+ 14 - 0
Apex Mobile/Apex Mobile/Result/Presenter/ApexResultPresenter.m

@@ -12,8 +12,10 @@
 #import "ApexResultDocumentModel.h"
 #import "RANetwork.h"
 #import "ApexResultBookingModel.h"
+#import "ApexResultAirBookingModel.h"
 #import "ApexResultBLInfoModel.h"
 #import "ApexResultMenuItem.h"
+#import "ApexResultAirAwbInfoModel.h"
 
 typedef NS_ENUM(NSUInteger, ApexResultFetchDataType) {
     ApexResultFetchDataTypeInitial,
@@ -141,12 +143,24 @@ static const NSInteger detal = 20;
                             [modelsArr addObject:model];
                         }
                             break;
+                            case ApexResultTypeAirBooking: {
+                                ApexResultAirBookingModel *model = [ApexResultAirBookingModel new];
+                                [model setValuesForKeysWithDictionary:item];
+                                [modelsArr addObject:model];
+                            }
+                                break;
                         case ApexResultTypeBLInfo: {
                             ApexResultBLInfoModel *model = [ApexResultBLInfoModel new];
                             [model setValuesForKeysWithDictionary:item];
                             [modelsArr addObject:model];
                         }
                             break;
+                            case ApexResultTypeAirAwbInfo: {
+                                ApexResultAirAwbInfoModel *model = [ApexResultAirAwbInfoModel new];
+                                [model setValuesForKeysWithDictionary:item];
+                                [modelsArr addObject:model];
+                            }
+                                break;
                         case ApexResultTypeContainer: {
                             ApexResultContainerModel *model = [ApexResultContainerModel new];
                             [model setValuesForKeysWithDictionary:item];

+ 28 - 0
Apex Mobile/Apex Mobile/Result/TableDataSource/ApexResultViewController+TableDataSource.m

@@ -9,15 +9,19 @@
 #import "ApexResultViewController+TableDataSource.h"
 #import "ApexResultContainerCell.h"
 #import "ApexResultDocumentCell.h"
+#import "ApexResultAirBookingCell.h"
 #import "ApexResultContainerModel.h"
 #import "ApexResultDocumentModel.h"
 #import "ApexResultPresenter.h"
 #import "ApexResultAddition.h"
 
+#import "ApexResultAirAwbInfoCell.h"
+#import "ApexResultAirAwbInfoModel.h"
 #import "ApexResultBLInfoCell.h"
 #import "ApexResultBookingCell.h"
 #import "ApexResultBLInfoModel.h"
 #import "ApexResultBookingModel.h"
+#import "ApexResultAirBookingModel.h"
 
 
 @implementation ApexResultViewController (TableDataSource)
@@ -43,6 +47,30 @@
             return cell;
         }
             break;
+        case ApexResultTypeAirBooking:
+        {
+            ApexResultAirBookingModel *shipModel = (ApexResultAirBookingModel *)model;
+            ApexResultAirBookingCell *cell = [tableView dequeueReusableCellWithIdentifier:ApexResultAirBookingCell.identifier forIndexPath:indexPath];
+            [[[[[[cell setTitle:shipModel.title] setDetail:shipModel.detail] setIcon:shipModel.icon] setPort:shipModel.port] setTime:shipModel.date] setDescription:shipModel.desc];
+            [cell setConsignee:shipModel.consignee];
+            
+            for (ApexResultAddition *addition in shipModel.addition) {
+                [cell addAdditionName:addition.name value:addition.value];
+            }
+            return cell;
+            break;
+        }
+        case ApexResultTypeAirAwbInfo:
+        {
+            ApexResultAirAwbInfoModel *shipModel = (ApexResultAirAwbInfoModel *)model;
+            ApexResultAirAwbInfoCell *cell = [tableView dequeueReusableCellWithIdentifier:ApexResultAirAwbInfoCell.identifier forIndexPath:indexPath];
+            [[[[[[[cell setTitle:shipModel.title] setDetail:shipModel.detail] setIcon:shipModel.icon] setPort:shipModel.port] setTime:shipModel.date] setDescription:shipModel.desc] setConsignee:shipModel.consignee];
+            for (ApexResultAddition *addition in shipModel.addition) {
+                [cell addAdditionName:addition.name value:addition.value];
+            }
+            return cell;
+            break;
+        }
         case ApexResultTypeBLInfo: {
             
             ApexResultBLInfoModel *shipModel = (ApexResultBLInfoModel *)model;

+ 1 - 0
Apex Mobile/Apex Mobile/Result/TableDelegate/ApexResultViewController+TableDelegate.m

@@ -110,6 +110,7 @@
     
     NSMutableDictionary *mParams = [[NSMutableDictionary alloc] initWithDictionary:self.presenter.params copyItems:true];
     mParams[@"id"] = params[@"id"];
+    mParams[@"_schema"] = params[@"_schema"];
     NSString *module_name = mParams[@"module_name"];
     DetailTabBarController *detailViewController=[[DetailTabBarController alloc] init:module_name actions:self.presenter.actions params:mParams];
     

+ 4 - 0
Apex Mobile/Apex Mobile/SearchViewController.m

@@ -50,6 +50,10 @@
         title = @"B/L info. Search";
     else if([self.function_name isEqualToString:@"Container detail"])
         title = @"Container Search";
+    else if([self.function_name isEqualToString:@"Air Booking"])
+        title = @"Air Booking Search";
+    else if([self.function_name isEqualToString:@"Air AWB Info."])
+        title = @"AWB info. Search";
     else if([self.function_name isEqualToString:@"Download Document"])
         title = @"Document Search";
     self.navigationItem.title = title;

+ 8 - 0
Apex Mobile/Apex Mobile/SearchlistViewController.m

@@ -94,6 +94,14 @@ function_name = @"Ocean Booking";
     {
           function_name = @"Container detail";
     }
+    else if([type isEqualToString:@"air_booking"])
+    {
+          function_name = @"Air Booking";
+    }
+    else if([type isEqualToString:@"air_blinfo"])
+    {
+          function_name = @"Air AWB Info.";
+    }
     else if([type isEqualToString:@"document"])
     {
         

+ 74 - 67
Apex Mobile/Apex Mobile/config.h

@@ -21,75 +21,82 @@
 
 #ifdef test_server
 
-    #define URL_HOME                @"http://192.168.50.15:8888/main_new_26.php"
-    #define URL_HISTORY             @"http://192.168.50.15:8888/main_new_26.php"
-    #define URL_UPDATE_AUTH         @"http://192.168.50.15:8888/main_new_26.php"
-    #define URL_REQUEST_COUNT       @"http://192.168.50.15:8888/main_new_26.php"
-    #define URL_REQUEST_RECORDS     @"http://192.168.50.15:8888/main_new_26.php"
-    #define URL_RETRIEVE_PASS       @"http://192.168.50.15:8888/main_new_26.php"
-    #define URL_REQUEST_DETAIL      @"http://192.168.50.15:8888/main_new_26.php"
-    #define URL_ANNOUNCEMENTS       @"http://192.168.50.15:8888/mobile_news.php"
-    #define URL_NEWS                @"http://192.168.50.15:8888/mobile_news.php"
-    #define URL_LOCATIONS           @"http://192.168.50.15:8888/mobile_news26.php"
-    #define URL_PUSH                @"http://192.168.50.15:8888/main_new_26.php"
-    #define URL_KPI                 @"http://192.168.50.15:8888/main_new_26.php"
-    #define URL_ERR_LOG             @""
-    #define URL_SEND_COMM_EMAIL     @"http://192.168.50.15:8888/main_new_26.php"
-
-    // 2019.1.4
-    #define URL_UPLOAD_SQL     @"http://192.168.50.15:8888/main_new_26.php"
-    #define URL_SAVE_RESULT     @"http://192.168.50.15:8888/main_new_26.php"
-    #define URL_SEARCH_RESULT     @"http://192.168.50.15:8888/main_new_26.php"
-    //2020.01.09
-    #define URL_PRIVACY    @"https://ra.apexshipping.com/rc/t/privacyPolicy.html"
+//#define BASE_URL @"http://192.168.50.15:8888"
+#define BASE_URL @"http://10.0.0.123:8888"
+
+//    #define URL_HOME                @"/main_new_29.php"
+//    #define URL_HISTORY             @"/main_new_29.php"
+//    #define URL_UPDATE_AUTH         @"/main_new_29.php"
+//    #define URL_REQUEST_COUNT       @"/main_new_29.php"
+//    #define URL_REQUEST_RECORDS     @"/main_new_29.php"
+//    #define URL_RETRIEVE_PASS       @"/main_new_29.php"
+//    #define URL_REQUEST_DETAIL      @"/main_new_29.php"
+//    #define URL_ANNOUNCEMENTS       @"/mobile_news.php"
+//    #define URL_NEWS                @"/mobile_news.php"
+//    #define URL_LOCATIONS           @"/mobile_news26.php"
+//    #define URL_PUSH                @"/main_new_29.php"
+//    #define URL_KPI                 @"/main_new_29.php"
+//    #define URL_ERR_LOG             @""
+//    #define URL_SEND_COMM_EMAIL     @"/main_new_29.php"
+//
+//    // 2019.1.4
+//    #define URL_UPLOAD_SQL     @"/main_new_29.php"
+//    #define URL_SAVE_RESULT     @"/main_new_29.php"
+//    #define URL_SEARCH_RESULT     @"/main_new_29.php"
+//    //2020.01.09
+//    #define URL_PRIVACY    @"/t/privacyPolicy.html"
 
 #else
-    #ifdef old_server
-
-        #define URL_HOME                @"http://192.168.50.15:8888/main_new.php"
-        #define URL_HISTORY             @"http://192.168.50.15:8888/main_new.php"
-        #define URL_UPDATE_AUTH         @"http://192.168.50.15:8888/main_new.php"
-        #define URL_REQUEST_COUNT       @"http://192.168.50.15:8888/main_new.php"
-        #define URL_REQUEST_RECORDS     @"http://192.168.50.15:8888/main_new.php"
-        #define URL_RETRIEVE_PASS       @"http://192.168.50.15:8888/main_new.php"
-        #define URL_REQUEST_DETAIL      @"http://192.168.50.15:8888/main_new.php"
-        #define URL_ANNOUNCEMENTS       @"http://192.168.50.15:8888/mobile_news.php"
-        #define URL_NEWS                @"http://192.168.50.15:8888/mobile_news.php"
-        #define URL_LOCATIONS           @"http://192.168.50.15:8888/mobile_news.php"
-        #define URL_PUSH                @"http://192.168.50.15:8888/main_new.php"
-        #define URL_KPI                 @"http://192.168.50.15:8888/main_new.php"
-        #define URL_ERR_LOG             @""
-        #define URL_SEND_COMM_EMAIL     @"http://192.168.50.15:8888/main_new.php"
-
-        // 2019.1.4
-        #define URL_UPLOAD_SQL     @"http://192.168.50.15:8888/main_new.php"
-        #define URL_SAVE_RESULT     @"http://192.168.50.15:8888/main_new.php"
-        #define URL_SEARCH_RESULT     @"http://192.168.50.15:8888/main_new.php"
-    #else
-
-        #define URL_HOME                @"https://ra.apexshipping.com/rc/main_new_26.php"
-        #define URL_HISTORY             @"https://ra.apexshipping.com/rc/main_new_26.php"
-        #define URL_UPDATE_AUTH         @"https://ra.apexshipping.com/rc/main_new_26.php"
-        #define URL_REQUEST_COUNT       @"https://ra.apexshipping.com/rc/main_new_26.php"
-        #define URL_REQUEST_RECORDS     @"https://ra.apexshipping.com/rc/main_new_26.php"
-        #define URL_RETRIEVE_PASS       @"https://ra.apexshipping.com/rc/main_new_26.php"
-        #define URL_REQUEST_DETAIL      @"https://ra.apexshipping.com/rc/main_new_26.php"
-        #define URL_ANNOUNCEMENTS       @"https://ra.apexshipping.com/rc/mobile_news.php"
-        #define URL_NEWS                @"https://ra.apexshipping.com/rc/mobile_news.php"
-        #define URL_LOCATIONS           @"https://ra.apexshipping.com/rc/mobile_news26.php"
-        #define URL_PUSH                @"https://ra.apexshipping.com/rc/main_new_26.php"
-        #define URL_KPI                 @"https://ra.apexshipping.com/rc/main_new_26.php"
-        #define URL_ERR_LOG             @""
-        #define URL_SEND_COMM_EMAIL     @"https://ra.apexshipping.com/rc/main_new_26.php"
-
-        // 2019.1.4
-        #define URL_UPLOAD_SQL     @"https://ra.apexshipping.com/rc/main_new_26.php"
-        #define URL_SAVE_RESULT     @"https://ra.apexshipping.com/rc/main_new_26.php"
-        #define URL_SEARCH_RESULT    @"https://ra.apexshipping.com/rc/main_new_26.php"
-    //2020.01.09
-    #define URL_PRIVACY    @"https://ra.apexshipping.com/rc/t/privacyPolicy.html"
-
-    #endif
+
+#define BASE_URL @"https://ra.apexshipping.com"
+//    #ifdef old_server
+//
+//        #define URL_HOME                @"/main_new.php"
+//        #define URL_HISTORY             @"/main_new.php"
+//        #define URL_UPDATE_AUTH         @"/main_new.php"
+//        #define URL_REQUEST_COUNT       @"/main_new.php"
+//        #define URL_REQUEST_RECORDS     @"/main_new.php"
+//        #define URL_RETRIEVE_PASS       @"/main_new.php"
+//        #define URL_REQUEST_DETAIL      @"/main_new.php"
+//        #define URL_ANNOUNCEMENTS       @"/mobile_news.php"
+//        #define URL_NEWS                @"/mobile_news.php"
+//        #define URL_LOCATIONS           @"/mobile_news.php"
+//        #define URL_PUSH                @"/main_new.php"
+//        #define URL_KPI                 @"/main_new.php"
+//        #define URL_ERR_LOG             @""
+//        #define URL_SEND_COMM_EMAIL     @"/main_new.php"
+//
+//        // 2019.1.4
+//        #define URL_UPLOAD_SQL     @"/main_new.php"
+//        #define URL_SAVE_RESULT     @"/main_new.php"
+//        #define URL_SEARCH_RESULT     @"/main_new.php"
+//    #else
+
+ 
+
+//    #endif
 #endif
 
+#define URL_HOME                BASE_URL@"/main_new_29.php"
+#define URL_HISTORY             BASE_URL@"/main_new_29.php"
+#define URL_UPDATE_AUTH         BASE_URL@"/main_new_29.php"
+#define URL_REQUEST_COUNT       BASE_URL@"/main_new_29.php"
+#define URL_REQUEST_RECORDS     BASE_URL@"/main_new_29.php"
+#define URL_RETRIEVE_PASS       BASE_URL@"/main_new_29.php"
+#define URL_REQUEST_DETAIL      BASE_URL@"/main_new_29.php"
+#define URL_ANNOUNCEMENTS       BASE_URL@"/mobile_news.php"
+#define URL_NEWS                BASE_URL@"/mobile_news.php"
+#define URL_LOCATIONS           BASE_URL@"/mobile_news26.php"
+#define URL_PUSH                BASE_URL@"/main_new_29.php"
+#define URL_KPI                 BASE_URL@"/main_new_29.php"
+#define URL_ERR_LOG             @""
+#define URL_SEND_COMM_EMAIL     BASE_URL@"/main_new_29.php"
+
+// 2019.1.4
+#define URL_UPLOAD_SQL          BASE_URL@"/main_new_29.php"
+#define URL_SAVE_RESULT         BASE_URL@"/main_new_29.php"
+#define URL_SEARCH_RESULT       BASE_URL@"/main_new_29.php"
+//2020.01.09
+#define URL_PRIVACY             BASE_URL@"/t/privacyPolicy.html"
+
 #endif /* config_h */

+ 12 - 0
Apex Mobile/Apex Mobile/search.json

@@ -20,6 +20,18 @@
                  "type": "container_detail"
                  },
                  {
+                 "name": "Air Booking",
+                 "detail": "Search air booking information",
+                 "icon": "mode_air_booking",
+                 "type": "air_booking"
+                 },
+                 {
+                 "name": "Air AWB Info.",
+                 "detail": "Search air waybill information",
+                 "icon": "mode_air_search",
+                 "type": "air_blinfo"
+                 },
+                 {
                  "name": "Document",
                  "detail": "Search document",
                  "icon": "mode_document",