Przeglądaj źródła

eSign 1.73

compatible fix
update contract
Ray Zhang 3 lat temu
rodzic
commit
93f81296c7
25 zmienionych plików z 192 dodań i 1833 usunięć
  1. 0 1573
      Ants Contract/Granite Expo eSign/2022 GECI - Home Improvement Contract.json
  2. BIN
      Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Bin & J W Inc.pdf
  3. BIN
      Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Fong Huang.pdf
  4. BIN
      Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Jim Xu.pdf
  5. BIN
      Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - LA House.pdf
  6. BIN
      Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf
  7. BIN
      Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf
  8. BIN
      Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Tan.pdf
  9. BIN
      Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Wilson Ma.pdf
  10. 42 36
      Ants Contract/Granite Expo eSign/Granite Expo eSign.xcodeproj/project.pbxproj
  11. 1 1
      Ants Contract/Granite Expo eSign/Granite Expo eSign/DocumentTemplateViewController.m
  12. 7 0
      Ants Contract/Granite Expo eSign/Granite Expo eSign/Info.plist
  13. 47 193
      Ants Contract/Granite Expo eSign/Granite Expo eSign/RANetwork.m
  14. 23 0
      Ants Contract/Granite Expo eSign/Granite Expo eSign/RASingleton.h
  15. 27 0
      Ants Contract/Granite Expo eSign/Granite Expo eSign/RASingleton.m
  16. 2 1
      Ants Contract/Granite Expo eSign/Granite Expo eSign/config.h
  17. 0 0
      Ants Contract/Granite Expo eSign/template_03_08_2023_14_35_47.json
  18. 1 1
      Ants Contract/common/AddExtDocumentViewController.m
  19. 4 4
      Ants Contract/common/AppDelegate.h
  20. 20 7
      Ants Contract/common/AppDelegate.m
  21. 1 1
      Ants Contract/common/DocnotesViewController.m
  22. 5 4
      Ants Contract/common/DocumentPageViewController.m
  23. 3 3
      Ants Contract/common/LoginViewController.m
  24. 1 1
      Ants Contract/common/RootViewController.h
  25. 8 8
      Ants Contract/common/RootViewController.m

+ 0 - 1573
Ants Contract/Granite Expo eSign/2022 GECI - Home Improvement Contract.json

@@ -1,1573 +0,0 @@
-{
-  "page_0": {
-    "control_12": {
-      "required": true,
-      "skip_verify": true,
-      "width": 30.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 640.8986206054688,
-      "type": "Signature",
-      "height": 14.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 617.474609375
-    },
-    "control_2": {
-      "width": 356.8663330078125,
-      "tv_vmargin": 0,
-      "aname": "Jobsite Address",
-      "type": "TextView",
-      "size": "12",
-      "pos_y": 214.9013671875,
-      "field": "job_addr",
-      "value": "",
-      "dirty": false,
-      "height": 29.99999237060547,
-      "margin_left": "1",
-      "action": {
-        "set_val": {
-          "condition": "true",
-          "count": 1,
-          "item_0": {
-            "value": "copy",
-            "control": "control_2",
-            "source": "2+3+4+5",
-            "page": "page_4"
-          }
-        }
-      },
-      "margin_top": "-1",
-      "required": true,
-      "pos_x": 287.8156433105469
-    },
-    "control_1": {
-      "dirty": false,
-      "width": 181.99998474121094,
-      "aname": "Job Date",
-      "pos_y": 182.8986053466797,
-      "size": "12",
-      "type": "DatePicker",
-      "field": "job_date",
-      "value": "",
-      "height": 29.999996185302734,
-      "margin_left": "4",
-      "pos_x": 461.9999694824219,
-      "required": false
-    },
-    "control_3": {
-      "width": 137.00274658203125,
-      "tv_vmargin": 0,
-      "aname": "Jobsite City",
-      "type": "TextView",
-      "size": "12",
-      "pos_y": 266.9124450683594,
-      "field": "job_city",
-      "value": "",
-      "dirty": false,
-      "height": 17.695850372314453,
-      "margin_left": "1",
-      "action": {
-        "set_val": {
-          "condition": "true",
-          "count": 1,
-          "item_0": {
-            "value": "copy",
-            "control": "control_2",
-            "source": "2+3+4+5",
-            "page": "page_4"
-          }
-        }
-      },
-      "margin_top": "-1",
-      "required": true,
-      "pos_x": 242.8386993408203
-    },
-    "control_5": {
-      "width": 73.99815368652344,
-      "tv_vmargin": 0,
-      "aname": "Jobsite Zipcode",
-      "type": "TextView",
-      "size": "12",
-      "pos_y": 266.9124450683594,
-      "field": "job_zip",
-      "value": "",
-      "dirty": false,
-      "height": 17.695850372314453,
-      "margin_left": "1",
-      "action": {
-        "set_val": {
-          "condition": "true",
-          "count": 1,
-          "item_0": {
-            "value": "copy",
-            "control": "control_2",
-            "source": "2+3+4+5",
-            "page": "page_4"
-          }
-        }
-      },
-      "margin_top": "-1",
-      "required": true,
-      "pos_x": 521.1288452148438
-    },
-    "control_7": {
-      "dirty": false,
-      "width": 179.99996948242188,
-      "aname": "Today's Date",
-      "pos_y": 286.74652099609375,
-      "size": "12",
-      "type": "DatePicker",
-      "field": "today_date",
-      "value": "",
-      "height": 29.999996185302734,
-      "margin_left": "4",
-      "pos_x": 462.9999694824219,
-      "required": true
-    },
-    "control_9": {
-      "pos_x": 462.9999694824219,
-      "disable": false,
-      "keyboard": "number",
-      "dirty": false,
-      "width": 180.99996948242188,
-      "pos_y": 318.2718811035156,
-      "size": "10",
-      "field": "labor_deposit",
-      "aname": "Labor Deposit",
-      "value": "",
-      "action": {
-        "set_val": {
-          "condition": "true",
-          "count": 1,
-          "item_0": {
-            "control": "control_10",
-            "value": "control_6-control_7"
-          }
-        }
-      },
-      "height": 29.999996185302734,
-      "prefix_str": "$ ",
-      "format": "price",
-      "value_type": "float",
-      "margin_left": "4",
-      "type": "TextView",
-      "required": true
-    },
-    "count": 24,
-    "control_13": {
-      "required": true,
-      "skip_verify": true,
-      "width": 29.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 683.7971801757812,
-      "type": "Signature",
-      "height": 14.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 617.474609375
-    },
-    "control_14": {
-      "required": true,
-      "skip_verify": true,
-      "width": 29.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 732.0598754882812,
-      "type": "Signature",
-      "height": 14.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 617.474609375
-    },
-    "control_15": {
-      "required": true,
-      "skip_verify": true,
-      "width": 29.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 749.5344848632812,
-      "type": "Signature",
-      "height": 14.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 617.474609375
-    },
-    "control_16": {
-      "required": true,
-      "skip_verify": true,
-      "width": 29.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 797.5344848632812,
-      "type": "Signature",
-      "field": "",
-      "height": 14.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 617.474609375
-    },
-    "control_17": {
-      "required": true,
-      "skip_verify": true,
-      "width": 29.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 881.2625732421875,
-      "type": "Signature",
-      "height": 14.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_22": {
-      "width": 199.99993896484375,
-      "tv_vmargin": 0.4,
-      "aname": "Sales Person",
-      "type": "TextView",
-      "size": "11",
-      "pos_y": 19.170503616333008,
-      "field": "sales_person",
-      "value": "",
-      "dirty": false,
-      "height": 13.999998092651367,
-      "margin_left": "4",
-      "margin_top": "1",
-      "required": true,
-      "pos_x": 154.51426696777344
-    },
-    "control_23": {
-      "width": 350.0018005371094,
-      "tv_vmargin": 0.4,
-      "aname": "Invoice Number",
-      "type": "TextView",
-      "size": "11",
-      "pos_y": 33.179718017578125,
-      "field": "invoice_number",
-      "value": "",
-      "dirty": false,
-      "height": 14.00184154510498,
-      "margin_left": "4",
-      "margin_top": "1",
-      "required": false,
-      "pos_x": 169.9981231689453
-    },
-    "control_18": {
-      "height": 21.9999942779541,
-      "pos_x": 499.9963073730469,
-      "required": true,
-      "width": 150,
-      "pos_y": 909.8616943359375,
-      "type": "Image",
-      "value": "",
-      "dirty": false,
-      "name": "BarCode"
-    },
-    "control_20": {
-      "pos_x": 617.474609375,
-      "skip_verify": true,
-      "width": 29.999996185302734,
-      "pos_y": 829.6358642578125,
-      "aname": "Initial",
-      "linewidth": 8,
-      "type": "Signature",
-      "value": "",
-      "dirty": false,
-      "height": 14.999998092651367,
-      "can_fill": true,
-      "name": "Customer Initial",
-      "required": true
-    },
-    "control_0": {
-      "textAlignment": "left",
-      "width": 168.99998474121094,
-      "tv_vmargin": 0,
-      "aname": "Customer Name",
-      "type": "TextView",
-      "size": "12",
-      "pos_y": 182.16127014160156,
-      "field": "customer_name",
-      "value": "",
-      "dirty": false,
-      "height": 29.999996185302734,
-      "margin_left": "4",
-      "action": {
-        "set_val": {
-          "condition": "true",
-          "count": 1,
-          "item_0": {
-            "control": "control_3",
-            "value": "copy",
-            "page": "page_4"
-          }
-        }
-      },
-      "margin_top": "1",
-      "required": true,
-      "pos_x": 215.99998474121094
-    },
-    "control_4": {
-      "width": 36.99907684326172,
-      "tv_vmargin": 0,
-      "aname": "Jobsite State",
-      "type": "TextView",
-      "size": "12",
-      "capital": "charater",
-      "pos_y": 266.9124450683594,
-      "field": "job_state",
-      "value": "CA",
-      "height": 17.695850372314453,
-      "margin_left": "1",
-      "dirty": false,
-      "margin_top": "-1",
-      "action": {
-        "set_val": {
-          "condition": "true",
-          "count": 1,
-          "item_0": {
-            "value": "copy",
-            "control": "control_2",
-            "source": "2+3+4+5",
-            "page": "page_4"
-          }
-        }
-      },
-      "required": true,
-      "pos_x": 423.9999694824219
-    },
-    "control_8": {
-      "dirty": false,
-      "width": 169.99996948242188,
-      "pos_y": 318.2718811035156,
-      "aname": "Contract Price",
-      "value": "",
-      "type": "TextView",
-      "size": "12",
-      "keyboard": "number",
-      "value_type": "float",
-      "height": 29.999996185302734,
-      "prefix_str": "$ ",
-      "margin_left": "4",
-      "field": "contract_price",
-      "format": "price",
-      "required": true,
-      "pos_x": 214.99996948242188
-    },
-    "control_21": {
-      "disable": true,
-      "textAlignment": "center",
-      "width": 99.99996948242188,
-      "pos_y": 628.9400634765625,
-      "aname": "Initial All",
-      "type": "Button",
-      "title": "Initial All",
-      "field": "init_all",
-      "value": "NA",
-      "dirty": false,
-      "height": 29.99999237060547,
-      "margin_left": "4",
-      "margin_top": "1",
-      "required": true,
-      "pos_x": 649.4376831054688
-    },
-    "control_10": {
-      "disable": true,
-      "width": 169.99996948242188,
-      "pos_y": 352.74652099609375,
-      "aname": "Balance on Account",
-      "type": "TextView",
-      "size": "12",
-      "field": "balance",
-      "value_type": "float",
-      "value": "",
-      "dirty": false,
-      "prefix_str": "$ ",
-      "margin_left": "4",
-      "height": 40,
-      "required": true,
-      "pos_x": 214.99996948242188
-    },
-    "control_11": {
-      "width": 522,
-      "pos_y": 506.53448486328125,
-      "aname": "Service",
-      "type": "Check",
-      "field": "service",
-      "title": "service button",
-      "single_select": false,
-      "show_detail": false,
-      "value": [],
-      "height": 70,
-      "dirty": false,
-      "marker_size": 6,
-      "cadedate": [
-        [
-          [
-            "Installation of Cabinetry.",
-            ""
-          ],
-          [
-            132.73728942871094,
-            512.5345458984375
-          ]
-        ],
-        [
-          [
-            "Installation of Plywood.",
-            ""
-          ],
-          [
-            132.73727416992188,
-            525.7464599609375
-          ]
-        ],
-        [
-          [
-            "Installation of Granite, Marble and/or Quartz Countertop(s).",
-            ""
-          ],
-          [
-            132.73728942871094,
-            537.009033203125,
-            0,
-            0
-          ]
-        ],
-        [
-          [
-            "Demolition Work.",
-            ""
-          ],
-          [
-            132.73727416992188,
-            549.0091552734375,
-            0,
-            0
-          ]
-        ],
-        [
-          [
-            "Other / Include Description:",
-            ""
-          ],
-          [
-            132.73728942871094,
-            561.0090942382812,
-            0,
-            0
-          ]
-        ]
-      ],
-      "required": true,
-      "pos_x": 123.47463989257812
-    },
-    "control_19": {
-      "height": 10.99999713897705,
-      "textAlignment": "center",
-      "pos_x": 523.0009155273438,
-      "width": 103.99999237060547,
-      "size": "8",
-      "field": "doc_number",
-      "pos_y": 929.0322265625,
-      "type": "Label",
-      "required": true,
-      "value": "",
-      "dirty": false
-    },
-    "control_6": {
-      "keyboard": "tel",
-      "pos_y": 286.74652099609375,
-      "aname": "Telephone",
-      "type": "TextView",
-      "size": "12",
-      "width": 169.99996948242188,
-      "field": "tel",
-      "value": "",
-      "format": "us_tel",
-      "height": 29.999996185302734,
-      "margin_left": "4",
-      "dirty": false,
-      "required": true,
-      "pos_x": 214.99996948242188
-    }
-  },
-  "page_1": {
-    "control_1": {
-      "pos_x": 230,
-      "width": 200,
-      "tv_vmargin": 0.6,
-      "aname": "Decision Maker",
-      "type": "ignor",
-      "size": "12",
-      "pos_y": 125,
-      "field": "decision_maker",
-      "value": "",
-      "dirty": false,
-      "height": 20,
-      "margin_left": "4",
-      "margin_top": "1",
-      "name": "Decision Maker",
-      "required": true
-    },
-    "control_3": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 167.36404418945312,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_5": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 253.8386688232422,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_7": {
-      "required": true,
-      "skip_verify": true,
-      "width": 29,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 346,
-      "type": "Signature",
-      "height": 14,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_9": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 456.0091857910156,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "count": 19,
-    "control_10": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 493.2718200683594,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_11": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 531.0091552734375,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_12": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 589.5344848632812,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_0": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 111.36405181884766,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_2": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 142.1013641357422,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_4": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 205.36404418945312,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_6": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 301.364013671875,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_8": {
-      "width": 464,
-      "pos_y": 384,
-      "aname": "Joint Seams Option",
-      "type": "Check",
-      "field": "joint_seams",
-      "title": "joint seams",
-      "single_select": true,
-      "show_detail": true,
-      "value": [],
-      "height": 37,
-      "dirty": false,
-      "marker_size": "6.5",
-      "cadedate": [
-        [
-          [
-            "OPTION A:",
-            "Unpolished joint seams, which the Undersigned understands may not be smooth."
-          ],
-          [
-            149.212890625,
-            385.10595703125,
-            0,
-            0
-          ]
-        ],
-        [
-          [
-            "OPTION B",
-            "Polished joint seams, which the Undersigned understands that color dullness or shade variation may occur."
-          ],
-          [
-            149.212890625,
-            396.4608154296875,
-            0,
-            0
-          ]
-        ],
-        [
-          [
-            "OPTION C",
-            "The Decision Maker will determine on-site with the assistance of the Contractor."
-          ],
-          [
-            149.21192932128906,
-            407.8893737792969,
-            0,
-            0
-          ]
-        ]
-      ],
-      "pos_x": 146,
-      "required": true
-    },
-    "control_13": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 606.2717895507812,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_14": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 624.7465209960938,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_15": {
-      "height": 21.9999942779541,
-      "pos_x": 499.9963073730469,
-      "required": true,
-      "width": 150,
-      "pos_y": 909.8616943359375,
-      "type": "Image",
-      "value": "",
-      "dirty": false,
-      "name": "BarCode"
-    },
-    "control_18": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 63.36405563354492,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_17": {
-      "required": true,
-      "skip_verify": true,
-      "width": 28.999996185302734,
-      "dirty": false,
-      "aname": "Initial",
-      "linewidth": 8,
-      "value": "",
-      "pos_y": 418.2718200683594,
-      "type": "Signature",
-      "height": 13.999998092651367,
-      "can_fill": "true",
-      "name": "Customer Initial",
-      "pos_x": 616
-    },
-    "control_16": {
-      "height": 10.99999713897705,
-      "textAlignment": "center",
-      "pos_x": 523.0009155273438,
-      "width": 103.99999237060547,
-      "size": "8",
-      "field": "doc_number",
-      "pos_y": 929.0322265625,
-      "type": "Label",
-      "required": true,
-      "value": "",
-      "dirty": false
-    }
-  },
-  "signature_name": [
-    "Customer Initial",
-    "Decision Maker",
-    "Agent Of Contractor",
-    "Homeowner",
-    "Homeowner Print Name",
-    "Date"
-  ],
-  "page_2": {
-    "control_7": {
-      "height": 11,
-      "textAlignment": "center",
-      "pos_x": 523,
-      "width": 104,
-      "size": "8",
-      "field": "doc_number",
-      "pos_y": 917,
-      "type": "Label",
-      "required": true,
-      "value": "",
-      "dirty": false
-    },
-    "control_5": {
-      "height": 11,
-      "textAlignment": "center",
-      "pos_x": 523,
-      "width": 104,
-      "size": "8",
-      "field": "doc_number",
-      "pos_y": 917,
-      "type": "Label",
-      "required": true,
-      "value": "",
-      "dirty": false
-    },
-    "control_3": {
-      "height": 21.9999942779541,
-      "pos_x": 499.9963073730469,
-      "required": true,
-      "width": 150,
-      "pos_y": 909.8616943359375,
-      "type": "Image",
-      "value": "",
-      "dirty": false,
-      "name": "BarCode"
-    },
-    "control_1": {
-      "textAlignment": "center",
-      "width": 215.61289978027344,
-      "tv_vmargin": 0.3,
-      "aname": "Print Name",
-      "type": "TextView",
-      "size": "10",
-      "pos_y": 686.7418212890625,
-      "field": "customer_name_1",
-      "value": "",
-      "dirty": false,
-      "height": 13.999996185302734,
-      "margin_top": "2",
-      "required": true,
-      "pos_x": 423.1243591308594
-    },
-    "count": 5,
-    "control_6": {
-      "height": 11,
-      "textAlignment": "center",
-      "pos_x": 523,
-      "width": 104,
-      "size": "8",
-      "field": "doc_number",
-      "pos_y": 917,
-      "type": "Label",
-      "required": true,
-      "value": "",
-      "dirty": false
-    },
-    "control_4": {
-      "height": 10.99999713897705,
-      "textAlignment": "center",
-      "pos_x": 523.0009155273438,
-      "width": 103.99999237060547,
-      "size": "8",
-      "field": "doc_number",
-      "pos_y": 929.0322265625,
-      "type": "Label",
-      "required": true,
-      "value": "",
-      "dirty": false
-    },
-    "control_2": {
-      "height": 14,
-      "pos_x": 194,
-      "width": 160,
-      "field": "signor_name",
-      "pos_y": 854,
-      "type": "Ignor",
-      "required": false,
-      "value": "",
-      "dirty": false
-    },
-    "control_0": {
-      "name": "Homeowner",
-      "skip_verify": true,
-      "width": 145,
-      "dirty": false,
-      "aname": "Homeowner Signature",
-      "linewidth": 8,
-      "value": "",
-      "type": "Signature",
-      "pos_y": 636.05517578125,
-      "height": 25.211977005004883,
-      "pos_x": 403.5252685546875,
-      "required": true
-    }
-  },
-  "page_3": {
-    "control_12": {
-      "disable": false,
-      "textAlignment": "center",
-      "width": 213.82489013671875,
-      "pos_y": 888.4789428710938,
-      "aname": "Sign Date",
-      "type": "DatePicker",
-      "field": "change_contractor_date",
-      "value": "",
-      "dirty": false,
-      "height": 21.889387130737305,
-      "margin_left": "4",
-      "margin_top": "1",
-      "required": false,
-      "pos_x": 440.7740173339844
-    },
-    "control_7": {
-      "textAlignment": "center",
-      "width": 389.3087158203125,
-      "tv_vmargin": "0.4",
-      "aname": "Contractor",
-      "type": "TouchLabel",
-      "size": "8",
-      "action": "enum",
-      "pos_y": 692.3408813476562,
-      "field": "p4_contractor",
-      "value": "",
-      "dirty": false,
-      "height": 11.79723072052002,
-      "cadedate": {
-        "val_1": {
-          "check": 0,
-          "value": "Tan & Chan Construction Corp.",
-          "value_id": 10
-        },
-        "val_3": {
-          "check": 0,
-          "value": "JimXu Builder",
-          "value_id": 11
-        },
-        "val_5": {
-          "check": 0,
-          "value": "LA House Care AWEI INC",
-          "value_id": 11
-        },
-        "count": 8,
-        "val_7": {
-          "check": 0,
-          "value": "MMJ Remodeling Inc",
-          "value_id": 11
-        },
-        "val_0": {
-          "check": 0,
-          "value": "",
-          "value_id": 0
-        },
-        "val_2": {
-          "check": 0,
-          "value": "BPW Remodeling INC.",
-          "value_id": 11
-        },
-        "val_4": {
-          "check": 0,
-          "value": "F Huang Construction Inc.",
-          "value_id": 11
-        },
-        "val_6": {
-          "check": 0,
-          "value": "Sunshine Remodeling Inc",
-          "value_id": 11
-        }
-      },
-      "margin_top": "2",
-      "required": false,
-      "pos_x": 261.6036376953125
-    },
-    "control_4": {
-      "required_validation": false,
-      "validation_code": "1111",
-      "name": "Change Contractor Signature",
-      "width": 183.31790161132812,
-      "pos_y": 888.4789428710938,
-      "aname": "change contractor signature",
-      "linewidth": 8,
-      "type": "Signature",
-      "value": "",
-      "dirty": false,
-      "field": "",
-      "height": 21.88938331604004,
-      "required": false,
-      "pos_x": 190.08287048339844
-    },
-    "control_14": {
-      "textAlignment": "center",
-      "width": 390.7833251953125,
-      "tv_vmargin": "0.4",
-      "aname": "New Contractor",
-      "type": "TouchLabel",
-      "size": "8",
-      "action": "enum",
-      "pos_y": 802.6773071289062,
-      "field": "new_contractor",
-      "value": "",
-      "dirty": false,
-      "height": 11.79723072052002,
-      "cadedate": {
-        "val_1": {
-          "check": 0,
-          "value": "Tan & Chan Construction Corp.",
-          "value_id": 10
-        },
-        "val_3": {
-          "check": 0,
-          "value": "JimXu Builder",
-          "value_id": 11
-        },
-        "val_5": {
-          "check": 0,
-          "value": "LA House Care AWEI INC",
-          "value_id": 11
-        },
-        "count": 8,
-        "val_7": {
-          "check": 0,
-          "value": "MMJ Remodeling Inc",
-          "value_id": 11
-        },
-        "val_0": {
-          "check": 0,
-          "value": "",
-          "value_id": 0
-        },
-        "val_2": {
-          "check": 0,
-          "value": "BPW Remodeling INC.",
-          "value_id": 11
-        },
-        "val_4": {
-          "check": 0,
-          "value": "F Huang Construction Inc.",
-          "value_id": 11
-        },
-        "val_6": {
-          "check": 0,
-          "value": "Sunshine Remodeling Inc",
-          "value_id": 11
-        }
-      },
-      "margin_top": "2",
-      "required": false,
-      "pos_x": 260.86627197265625
-    },
-    "control_1": {
-      "height": 10.99999713897705,
-      "textAlignment": "center",
-      "pos_x": 523,
-      "width": 103.99999237060547,
-      "size": "8",
-      "field": "doc_number",
-      "pos_y": 929.0322265625,
-      "type": "Label",
-      "required": true,
-      "value": "",
-      "dirty": false
-    },
-    "count": 16,
-    "control_8": {
-      "disable": false,
-      "textAlignment": "center",
-      "width": 389.3087158203125,
-      "pos_y": 679.8153076171875,
-      "aname": "Job Date",
-      "type": "DatePicker",
-      "field": "p4_j_date",
-      "value": "",
-      "dirty": false,
-      "size": "8",
-      "height": 11.79722785949707,
-      "margin_left": "4",
-      "margin_top": "1",
-      "required": false,
-      "pos_x": 261.6035461425781
-    },
-    "control_5": {
-      "textAlignment": "center",
-      "width": 389.3087158203125,
-      "tv_vmargin": "0.4",
-      "aname": "Customer Name",
-      "type": "TextView",
-      "size": "8",
-      "pos_y": 654.746337890625,
-      "field": "p4_c_name",
-      "value": "",
-      "dirty": false,
-      "height": 11.797228813171387,
-      "margin_top": "2",
-      "required": false,
-      "pos_x": 261.60357666015625
-    },
-    "control_11": {
-      "textAlignment": "left",
-      "width": 536.0368041992188,
-      "tv_vmargin": "0.4",
-      "aname": "Description",
-      "capital": "sentences",
-      "type": "TextView",
-      "size": "8",
-      "pos_y": 752.8107299804688,
-      "field": "p4_desc",
-      "value": "",
-      "dirty": false,
-      "height": 11.797229766845703,
-      "margin_top": "2",
-      "required": false,
-      "pos_x": 115.61284637451172
-    },
-    "control_2": {
-      "width": 536.4973754882812,
-      "pos_y": 356.8661804199219,
-      "aname": "contractors",
-      "type": "Check",
-      "field": "contractor",
-      "title": "new add check",
-      "single_select": true,
-      "show_detail": false,
-      "value": [
-        0
-      ],
-      "height": 219.7234649658203,
-      "dirty": false,
-      "marker_size": "9",
-      "cadedate": [
-        [
-          [
-            "Tan & Chan Construction Corp."
-          ],
-          [
-            138.4700164794922,
-            364.97686767578125,
-            0,
-            0
-          ],
-          {
-            "memo": "action",
-            "contract": "GECI - Home Improvement Contract - Tan.pdf",
-            "type": "change contract",
-            "conditional_constraint": {
-              "true": {
-                "contract": "GECI - Home Improvement Contract - Tan.pdf"
-              },
-              "false": {}
-            }
-          }
-        ],
-        [
-          [
-            "BPW Remodeling INC."
-          ],
-          [
-            138.4700164794922,
-            391.5207214355469,
-            0,
-            0
-          ],
-          {
-            "memo": "action",
-            "contract": "GECI - Home Improvement Contract - Wilson Ma.pdf",
-            "type": "change contract",
-            "conditional_constraint": {
-              "true": {
-                "contract": "GECI - Home Improvement Contract - Wilson Ma.pdf"
-              },
-              "false": {}
-            }
-          }
-        ],
-        [
-          [
-            "JimXu Builder",
-            "New Add Check Option"
-          ],
-          [
-            138.4700164794922,
-            419.5391540527344,
-            0,
-            0
-          ],
-          {
-            "memo": "action",
-            "contract": "GECI - Home Improvement Contract - Jim Xu.pdf",
-            "type": "change contract",
-            "conditional_constraint": {
-              "true": {
-                "contract": "GECI - Home Improvement Contract - Jim Xu.pdf"
-              },
-              "false": {}
-            }
-          }
-        ],
-        [
-          [
-            "F Huang Construction Inc.",
-            "New Add Check Option"
-          ],
-          [
-            138.4700164794922,
-            446.8202209472656,
-            0,
-            0
-          ],
-          {
-            "memo": "action",
-            "contract": "GECI - Home Improvement Contract - Fong Huang.pdf",
-            "type": "change contract",
-            "conditional_constraint": {
-              "true": {
-                "contract": "GECI - Home Improvement Contract - Fong Huang.pdf"
-              },
-              "false": {}
-            }
-          }
-        ],
-        [
-          [
-            "LA House Care AWEI INC"
-          ],
-          [
-            138.4700164794922,
-            474.10125732421875,
-            0,
-            0
-          ],
-          {
-            "memo": "action",
-            "contract": "GECI - Home Improvement Contract - LA House.pdf",
-            "type": "change contract",
-            "conditional_constraint": {
-              "true": {
-                "contract": "GECI - Home Improvement Contract - LA House.pdf"
-              },
-              "false": {}
-            }
-          }
-        ],
-        [
-          [
-            "Sunshine Remodeling Inc"
-          ],
-          [
-            138.4700164794922,
-            501.3824157714844,
-            0,
-            0
-          ],
-          {
-            "memo": "action",
-            "contract": "GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf",
-            "type": "change contract",
-            "conditional_constraint": {
-              "true": {
-                "contract": "GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf"
-              },
-              "false": {}
-            }
-          }
-        ],
-        [
-          [
-            "MMJ Remodeling Inc"
-          ],
-          [
-            138.4700164794922,
-            529.4007568359375,
-            0,
-            0
-          ],
-          {
-            "memo": "action",
-            "contract": "GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf",
-            "type": "change contract",
-            "conditional_constraint": {
-              "true": {
-                "contract": "GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf"
-              },
-              "false": {}
-            }
-          }
-        ],
-        [
-          [
-            "Bin & J W Inc",
-          ],
-          [
-            138.47003173828125,
-            557.4193115234375,
-            0,
-            0
-          ],
-          {
-            "memo": "action",
-            "contract": "GECI - Home Improvement Contract - Bin & J W Inc.pdf",
-            "type": "change contract",
-            "conditional_constraint": {
-              "true": {
-                "contract": "GECI - Home Improvement Contract - Bin & J W Inc.pdf"
-              },
-              "false": {}
-            }
-          }
-        ]
-      ],
-      "required": true,
-      "pos_x": 115.61284637451172
-    },
-    "control_13": {
-      "textAlignment": "center",
-      "width": 390.7833251953125,
-      "tv_vmargin": "0.4",
-      "aname": "Original Contractor",
-      "type": "TouchLabel",
-      "size": "8",
-      "action": "enum",
-      "pos_y": 790.4052734375,
-      "field": "original_contractor",
-      "value": "",
-      "dirty": false,
-      "height": 11.79723072052002,
-      "cadedate": {
-        "val_1": {
-          "check": 0,
-          "value": "Tan & Chan Construction Corp.",
-          "value_id": 10
-        },
-        "val_3": {
-          "check": 0,
-          "value": "JimXu Builder",
-          "value_id": 11
-        },
-        "val_5": {
-          "check": 0,
-          "value": "LA House Care AWEI INC",
-          "value_id": 11
-        },
-        "count": 8,
-        "val_7": {
-          "check": 0,
-          "value": "MMJ Remodeling Inc",
-          "value_id": 11
-        },
-        "val_0": {
-          "check": 0,
-          "value": "",
-          "value_id": 0
-        },
-        "val_2": {
-          "check": 0,
-          "value": "BPW Remodeling INC.",
-          "value_id": 11
-        },
-        "val_4": {
-          "check": 0,
-          "value": "F Huang Construction Inc.",
-          "value_id": 11
-        },
-        "val_6": {
-          "check": 0,
-          "value": "Sunshine Remodeling Inc",
-          "value_id": 11
-        }
-      },
-      "margin_top": "2",
-      "required": false,
-      "pos_x": 260.86627197265625
-    },
-    "control_9": {
-      "textAlignment": "center",
-      "width": 110.59903717041016,
-      "tv_vmargin": "0.4",
-      "aname": "Contract No",
-      "type": "TextView",
-      "size": "10",
-      "pos_y": 704.8846435546875,
-      "field": "contract_no",
-      "value": "",
-      "dirty": false,
-      "height": 20.64515495300293,
-      "margin_top": "2",
-      "required": false,
-      "pos_x": 261.6036071777344
-    },
-    "control_15": {
-      "textAlignment": "left",
-      "width": 535.2993774414062,
-      "tv_vmargin": "0.83",
-      "aname": "Reason Of Change",
-      "capital": "sentences",
-      "type": "TextView",
-      "size": "10",
-      "pos_y": 839.8151245117188,
-      "field": "p4_reason",
-      "value": "",
-      "dirty": false,
-      "height": 24.33177947998047,
-      "margin_top": "1",
-      "required": false,
-      "pos_x": 116.35014343261719
-    },
-    "control_6": {
-      "textAlignment": "center",
-      "width": 389.3087158203125,
-      "tv_vmargin": "0.4",
-      "aname": "Location Of Work",
-      "type": "TextView",
-      "size": "8",
-      "pos_y": 667.2808837890625,
-      "field": "p4_location",
-      "value": "",
-      "dirty": false,
-      "height": 11.797228813171387,
-      "margin_top": "2",
-      "required": false,
-      "pos_x": 261.60357666015625
-    },
-    "control_3": {
-      "disable": false,
-      "textAlignment": "center",
-      "width": 389.3087158203125,
-      "pos_y": 636.3131713867188,
-      "aname": "Date",
-      "type": "DatePicker",
-      "field": "p4_date",
-      "value": "",
-      "dirty": false,
-      "height": 16.958515167236328,
-      "margin_left": "4",
-      "margin_top": "1",
-      "required": false,
-      "pos_x": 261.60357666015625
-    },
-    "control_10": {
-      "textAlignment": "center",
-      "width": 210.13819885253906,
-      "tv_vmargin": "0.4",
-      "aname": "Change Order No",
-      "type": "TextView",
-      "size": "10",
-      "pos_y": 705.6220092773438,
-      "field": "change_order_no",
-      "value": "",
-      "dirty": false,
-      "height": 20.64515495300293,
-      "margin_top": "2",
-      "required": false,
-      "pos_x": 440.7740173339844
-    },
-    "control_0": {
-      "height": 21.9999942779541,
-      "pos_x": 499.9999694824219,
-      "required": true,
-      "width": 150,
-      "pos_y": 909.8616943359375,
-      "type": "Image",
-      "value": "",
-      "dirty": false,
-      "name": "BarCode"
-    }
-  },
-  "count": 5,
-  "page_4": {
-    "control_1": {
-      "height": 10.999994277954102,
-      "textAlignment": "center",
-      "pos_x": 523.0007934570312,
-      "width": 103.99999237060547,
-      "size": "8",
-      "field": "doc_number",
-      "pos_y": 929.031982421875,
-      "type": "Label",
-      "required": true,
-      "value": "",
-      "dirty": false
-    },
-    "count": 4,
-    "control_2": {
-      "textAlignment": "left",
-      "width": 294.9307861328125,
-      "tv_vmargin": 1,
-      "aname": "job location",
-      "type": "TextView",
-      "size": "10",
-      "pos_y": 872.2579345703125,
-      "field": "p5_job_location",
-      "value": "",
-      "dirty": false,
-      "height": 17.69584846496582,
-      "margin_top": "4",
-      "required": false,
-      "pos_x": 182.7096405029297
-    },
-    "control_3": {
-      "textAlignment": "center",
-      "width": 112.81105041503906,
-      "tv_vmargin": 1,
-      "aname": "customer print name",
-      "type": "TextView",
-      "size": "10",
-      "pos_y": 891.428466796875,
-      "field": "p5_customer_print_name",
-      "value": "",
-      "dirty": false,
-      "height": 17.695850372314453,
-      "margin_top": "4",
-      "required": false,
-      "pos_x": 215.88937377929688
-    },
-    "control_0": {
-      "height": 21.999988555908203,
-      "pos_x": 499.9963073730469,
-      "required": true,
-      "width": 150,
-      "pos_y": 909.8615112304688,
-      "type": "Image",
-      "value": "",
-      "dirty": false,
-      "name": "BarCode"
-    }
-  }
-}

BIN
Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Bin & J W Inc.pdf


BIN
Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Fong Huang.pdf


BIN
Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Jim Xu.pdf


BIN
Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - LA House.pdf


BIN
Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf


BIN
Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf


BIN
Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Tan.pdf


BIN
Ants Contract/Granite Expo eSign/GECI - Home Improvement Contract - Wilson Ma.pdf


+ 42 - 36
Ants Contract/Granite Expo eSign/Granite Expo eSign.xcodeproj/project.pbxproj

@@ -7,21 +7,22 @@
 	objects = {
 	objects = {
 
 
 /* Begin PBXBuildFile section */
 /* Begin PBXBuildFile section */
-		3C142586283C6C620017076A /* GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C142585283C6C610017076A /* GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf */; };
 		3C2B045B253D27AD00B52A74 /* RAUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C2B045A253D27AD00B52A74 /* RAUtils.m */; };
 		3C2B045B253D27AD00B52A74 /* RAUtils.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C2B045A253D27AD00B52A74 /* RAUtils.m */; };
-		3C4F575628655018003C0005 /* 2022 GECI - Home Improvement Contract.json in Resources */ = {isa = PBXBuildFile; fileRef = 3C4F575528655018003C0005 /* 2022 GECI - Home Improvement Contract.json */; };
+		3C64CA9D29B8605C00CB0B07 /* GECI - Home Improvement Contract - Tan.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C64CA9529B8605B00CB0B07 /* GECI - Home Improvement Contract - Tan.pdf */; };
+		3C64CA9E29B8605C00CB0B07 /* GECI - Home Improvement Contract - Fong Huang.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C64CA9629B8605C00CB0B07 /* GECI - Home Improvement Contract - Fong Huang.pdf */; };
+		3C64CA9F29B8605C00CB0B07 /* GECI - Home Improvement Contract - Bin & J W Inc.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C64CA9729B8605C00CB0B07 /* GECI - Home Improvement Contract - Bin & J W Inc.pdf */; };
+		3C64CAA029B8605C00CB0B07 /* GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C64CA9829B8605C00CB0B07 /* GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf */; };
+		3C64CAA129B8605C00CB0B07 /* GECI - Home Improvement Contract - Wilson Ma.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C64CA9929B8605C00CB0B07 /* GECI - Home Improvement Contract - Wilson Ma.pdf */; };
+		3C64CAA229B8605C00CB0B07 /* GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C64CA9A29B8605C00CB0B07 /* GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf */; };
+		3C64CAA329B8605C00CB0B07 /* GECI - Home Improvement Contract - LA House.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C64CA9B29B8605C00CB0B07 /* GECI - Home Improvement Contract - LA House.pdf */; };
+		3C64CAA429B8605C00CB0B07 /* GECI - Home Improvement Contract - Jim Xu.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C64CA9C29B8605C00CB0B07 /* GECI - Home Improvement Contract - Jim Xu.pdf */; };
+		3C64CAA829B8646A00CB0B07 /* template_03_08_2023_14_35_47.json in Resources */ = {isa = PBXBuildFile; fileRef = 3C64CAA729B8646A00CB0B07 /* template_03_08_2023_14_35_47.json */; };
+		3C64CAAD29BB12C800CB0B07 /* RASingleton.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C64CAAC29BB12C800CB0B07 /* RASingleton.m */; };
 		3C69617C23C70ECF0075172A /* WebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C69617B23C70ECF0075172A /* WebViewController.m */; };
 		3C69617C23C70ECF0075172A /* WebViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C69617B23C70ECF0075172A /* WebViewController.m */; };
 		3C6B627E27102F6800E74CF9 /* CommonEditor.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3C6B627D27102F6800E74CF9 /* CommonEditor.storyboard */; };
 		3C6B627E27102F6800E74CF9 /* CommonEditor.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 3C6B627D27102F6800E74CF9 /* CommonEditor.storyboard */; };
 		3C6B628127102F7C00E74CF9 /* DatePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C6B628027102F7B00E74CF9 /* DatePickerViewController.m */; };
 		3C6B628127102F7C00E74CF9 /* DatePickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C6B628027102F7B00E74CF9 /* DatePickerViewController.m */; };
 		3C6B62842710324B00E74CF9 /* TouchImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C6B62822710324B00E74CF9 /* TouchImageView.m */; };
 		3C6B62842710324B00E74CF9 /* TouchImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C6B62822710324B00E74CF9 /* TouchImageView.m */; };
 		3C6B62872710325500E74CF9 /* CustomIOSAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C6B62852710325500E74CF9 /* CustomIOSAlertView.m */; };
 		3C6B62872710325500E74CF9 /* CustomIOSAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C6B62852710325500E74CF9 /* CustomIOSAlertView.m */; };
-		3C7758192892741D00064C39 /* GECI - Home Improvement Contract - Bin & J W Inc.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C7758182892741D00064C39 /* GECI - Home Improvement Contract - Bin & J W Inc.pdf */; };
-		3C9FFA172744861A0067830C /* GECI - Home Improvement Contract - Wilson Ma.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C9FFA102744861A0067830C /* GECI - Home Improvement Contract - Wilson Ma.pdf */; };
-		3C9FFA182744861A0067830C /* GECI - Home Improvement Contract - Tan.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C9FFA112744861A0067830C /* GECI - Home Improvement Contract - Tan.pdf */; };
-		3C9FFA192744861A0067830C /* GECI - Home Improvement Contract - Fong Huang.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C9FFA122744861A0067830C /* GECI - Home Improvement Contract - Fong Huang.pdf */; };
-		3C9FFA1A2744861A0067830C /* GECI - Home Improvement Contract - LA House.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C9FFA132744861A0067830C /* GECI - Home Improvement Contract - LA House.pdf */; };
-		3C9FFA1C2744861A0067830C /* GECI - Home Improvement Contract - Jim Xu.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C9FFA152744861A0067830C /* GECI - Home Improvement Contract - Jim Xu.pdf */; };
-		3C9FFA1D2744861A0067830C /* GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf in Resources */ = {isa = PBXBuildFile; fileRef = 3C9FFA162744861A0067830C /* GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf */; };
 		3C9FFAA9274B87DE0067830C /* TouchLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C9FFAA7274B87DD0067830C /* TouchLabel.m */; };
 		3C9FFAA9274B87DE0067830C /* TouchLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C9FFAA7274B87DD0067830C /* TouchLabel.m */; };
 		3C9FFAAC274B8FA20067830C /* EnumSelectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C9FFAAA274B8FA20067830C /* EnumSelectViewController.m */; };
 		3C9FFAAC274B8FA20067830C /* EnumSelectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C9FFAAA274B8FA20067830C /* EnumSelectViewController.m */; };
 		3C9FFAAF274B908E0067830C /* RTLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C9FFAAE274B908E0067830C /* RTLabel.m */; };
 		3C9FFAAF274B908E0067830C /* RTLabel.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C9FFAAE274B908E0067830C /* RTLabel.m */; };
@@ -107,11 +108,20 @@
 /* End PBXBuildFile section */
 /* End PBXBuildFile section */
 
 
 /* Begin PBXFileReference section */
 /* Begin PBXFileReference section */
-		3C142585283C6C610017076A /* GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf"; sourceTree = "<group>"; };
 		3C200FD6248A2165000E2FD5 /* RANetwork.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RANetwork.h; sourceTree = "<group>"; };
 		3C200FD6248A2165000E2FD5 /* RANetwork.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RANetwork.h; sourceTree = "<group>"; };
 		3C2B0459253D27AD00B52A74 /* RAUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RAUtils.h; path = ../../../common/RAUtils.h; sourceTree = "<group>"; };
 		3C2B0459253D27AD00B52A74 /* RAUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RAUtils.h; path = ../../../common/RAUtils.h; sourceTree = "<group>"; };
 		3C2B045A253D27AD00B52A74 /* RAUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RAUtils.m; path = ../../../common/RAUtils.m; sourceTree = "<group>"; };
 		3C2B045A253D27AD00B52A74 /* RAUtils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = RAUtils.m; path = ../../../common/RAUtils.m; sourceTree = "<group>"; };
-		3C4F575528655018003C0005 /* 2022 GECI - Home Improvement Contract.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "2022 GECI - Home Improvement Contract.json"; sourceTree = "<group>"; };
+		3C64CA9529B8605B00CB0B07 /* GECI - Home Improvement Contract - Tan.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Tan.pdf"; sourceTree = "<group>"; };
+		3C64CA9629B8605C00CB0B07 /* GECI - Home Improvement Contract - Fong Huang.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Fong Huang.pdf"; sourceTree = "<group>"; };
+		3C64CA9729B8605C00CB0B07 /* GECI - Home Improvement Contract - Bin & J W Inc.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Bin & J W Inc.pdf"; sourceTree = "<group>"; };
+		3C64CA9829B8605C00CB0B07 /* GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf"; sourceTree = "<group>"; };
+		3C64CA9929B8605C00CB0B07 /* GECI - Home Improvement Contract - Wilson Ma.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Wilson Ma.pdf"; sourceTree = "<group>"; };
+		3C64CA9A29B8605C00CB0B07 /* GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf"; sourceTree = "<group>"; };
+		3C64CA9B29B8605C00CB0B07 /* GECI - Home Improvement Contract - LA House.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - LA House.pdf"; sourceTree = "<group>"; };
+		3C64CA9C29B8605C00CB0B07 /* GECI - Home Improvement Contract - Jim Xu.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Jim Xu.pdf"; sourceTree = "<group>"; };
+		3C64CAA729B8646A00CB0B07 /* template_03_08_2023_14_35_47.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = template_03_08_2023_14_35_47.json; sourceTree = "<group>"; };
+		3C64CAAB29BB12C800CB0B07 /* RASingleton.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RASingleton.h; sourceTree = "<group>"; };
+		3C64CAAC29BB12C800CB0B07 /* RASingleton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RASingleton.m; sourceTree = "<group>"; };
 		3C69617A23C70ECF0075172A /* WebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebViewController.h; path = "../../../common/WK PDF+Web/WebViewController.h"; sourceTree = "<group>"; };
 		3C69617A23C70ECF0075172A /* WebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebViewController.h; path = "../../../common/WK PDF+Web/WebViewController.h"; sourceTree = "<group>"; };
 		3C69617B23C70ECF0075172A /* WebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WebViewController.m; path = "../../../common/WK PDF+Web/WebViewController.m"; sourceTree = "<group>"; };
 		3C69617B23C70ECF0075172A /* WebViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = WebViewController.m; path = "../../../common/WK PDF+Web/WebViewController.m"; sourceTree = "<group>"; };
 		3C6B627D27102F6800E74CF9 /* CommonEditor.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = CommonEditor.storyboard; path = ../../../common/customUI/commoneditor/CommonEditor.storyboard; sourceTree = "<group>"; };
 		3C6B627D27102F6800E74CF9 /* CommonEditor.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = CommonEditor.storyboard; path = ../../../common/customUI/commoneditor/CommonEditor.storyboard; sourceTree = "<group>"; };
@@ -121,13 +131,6 @@
 		3C6B62832710324B00E74CF9 /* TouchImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TouchImageView.h; path = ../../../common/customUI/TouchImageView.h; sourceTree = "<group>"; };
 		3C6B62832710324B00E74CF9 /* TouchImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TouchImageView.h; path = ../../../common/customUI/TouchImageView.h; sourceTree = "<group>"; };
 		3C6B62852710325500E74CF9 /* CustomIOSAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CustomIOSAlertView.m; path = ../../../common/customUI/CustomIOSAlertView.m; sourceTree = "<group>"; };
 		3C6B62852710325500E74CF9 /* CustomIOSAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = CustomIOSAlertView.m; path = ../../../common/customUI/CustomIOSAlertView.m; sourceTree = "<group>"; };
 		3C6B62862710325500E74CF9 /* CustomIOSAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomIOSAlertView.h; path = ../../../common/customUI/CustomIOSAlertView.h; sourceTree = "<group>"; };
 		3C6B62862710325500E74CF9 /* CustomIOSAlertView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CustomIOSAlertView.h; path = ../../../common/customUI/CustomIOSAlertView.h; sourceTree = "<group>"; };
-		3C7758182892741D00064C39 /* GECI - Home Improvement Contract - Bin & J W Inc.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Bin & J W Inc.pdf"; sourceTree = "<group>"; };
-		3C9FFA102744861A0067830C /* GECI - Home Improvement Contract - Wilson Ma.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Wilson Ma.pdf"; sourceTree = "<group>"; };
-		3C9FFA112744861A0067830C /* GECI - Home Improvement Contract - Tan.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Tan.pdf"; sourceTree = "<group>"; };
-		3C9FFA122744861A0067830C /* GECI - Home Improvement Contract - Fong Huang.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Fong Huang.pdf"; sourceTree = "<group>"; };
-		3C9FFA132744861A0067830C /* GECI - Home Improvement Contract - LA House.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - LA House.pdf"; sourceTree = "<group>"; };
-		3C9FFA152744861A0067830C /* GECI - Home Improvement Contract - Jim Xu.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Jim Xu.pdf"; sourceTree = "<group>"; };
-		3C9FFA162744861A0067830C /* GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = "GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf"; sourceTree = "<group>"; };
 		3C9FFAA7274B87DD0067830C /* TouchLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TouchLabel.m; path = "../../../RedAnt ERP Mobile/common/customUI/TouchLabel.m"; sourceTree = "<group>"; };
 		3C9FFAA7274B87DD0067830C /* TouchLabel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TouchLabel.m; path = "../../../RedAnt ERP Mobile/common/customUI/TouchLabel.m"; sourceTree = "<group>"; };
 		3C9FFAA8274B87DE0067830C /* TouchLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TouchLabel.h; path = "../../../RedAnt ERP Mobile/common/customUI/TouchLabel.h"; sourceTree = "<group>"; };
 		3C9FFAA8274B87DE0067830C /* TouchLabel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TouchLabel.h; path = "../../../RedAnt ERP Mobile/common/customUI/TouchLabel.h"; sourceTree = "<group>"; };
 		3C9FFAAA274B8FA20067830C /* EnumSelectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EnumSelectViewController.m; path = ../../../common/customUI/commoneditor/EnumSelectViewController.m; sourceTree = "<group>"; };
 		3C9FFAAA274B8FA20067830C /* EnumSelectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = EnumSelectViewController.m; path = ../../../common/customUI/commoneditor/EnumSelectViewController.m; sourceTree = "<group>"; };
@@ -427,6 +430,8 @@
 				71BBFC381E651CC4008668A7 /* DocnotesViewController.h */,
 				71BBFC381E651CC4008668A7 /* DocnotesViewController.h */,
 				71BBFC391E651CC4008668A7 /* DocnotesViewController.m */,
 				71BBFC391E651CC4008668A7 /* DocnotesViewController.m */,
 				7128C23E1E124F4500FF635B /* Supporting Files */,
 				7128C23E1E124F4500FF635B /* Supporting Files */,
+				3C64CAAB29BB12C800CB0B07 /* RASingleton.h */,
+				3C64CAAC29BB12C800CB0B07 /* RASingleton.m */,
 			);
 			);
 			path = "Granite Expo eSign";
 			path = "Granite Expo eSign";
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -580,15 +585,15 @@
 		7128C3261E1251DE00FF635B /* pdf resource */ = {
 		7128C3261E1251DE00FF635B /* pdf resource */ = {
 			isa = PBXGroup;
 			isa = PBXGroup;
 			children = (
 			children = (
-				3C4F575528655018003C0005 /* 2022 GECI - Home Improvement Contract.json */,
-				3C9FFA122744861A0067830C /* GECI - Home Improvement Contract - Fong Huang.pdf */,
-				3C142585283C6C610017076A /* GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf */,
-				3C9FFA152744861A0067830C /* GECI - Home Improvement Contract - Jim Xu.pdf */,
-				3C9FFA132744861A0067830C /* GECI - Home Improvement Contract - LA House.pdf */,
-				3C9FFA162744861A0067830C /* GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf */,
-				3C9FFA112744861A0067830C /* GECI - Home Improvement Contract - Tan.pdf */,
-				3C9FFA102744861A0067830C /* GECI - Home Improvement Contract - Wilson Ma.pdf */,
-				3C7758182892741D00064C39 /* GECI - Home Improvement Contract - Bin & J W Inc.pdf */,
+				3C64CA9729B8605C00CB0B07 /* GECI - Home Improvement Contract - Bin & J W Inc.pdf */,
+				3C64CA9629B8605C00CB0B07 /* GECI - Home Improvement Contract - Fong Huang.pdf */,
+				3C64CA9C29B8605C00CB0B07 /* GECI - Home Improvement Contract - Jim Xu.pdf */,
+				3C64CA9B29B8605C00CB0B07 /* GECI - Home Improvement Contract - LA House.pdf */,
+				3C64CA9A29B8605C00CB0B07 /* GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf */,
+				3C64CA9829B8605C00CB0B07 /* GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf */,
+				3C64CA9529B8605B00CB0B07 /* GECI - Home Improvement Contract - Tan.pdf */,
+				3C64CA9929B8605C00CB0B07 /* GECI - Home Improvement Contract - Wilson Ma.pdf */,
+				3C64CAA729B8646A00CB0B07 /* template_03_08_2023_14_35_47.json */,
 				714B870A1E24CAE200A40D18 /* debug.json */,
 				714B870A1E24CAE200A40D18 /* debug.json */,
 				425A00F31F8F0EC200286D6F /* attribute_template.json */,
 				425A00F31F8F0EC200286D6F /* attribute_template.json */,
 				42DDB87B1F91E351002CCE22 /* template_type.json */,
 				42DDB87B1F91E351002CCE22 /* template_type.json */,
@@ -678,29 +683,29 @@
 			isa = PBXResourcesBuildPhase;
 			isa = PBXResourcesBuildPhase;
 			buildActionMask = 2147483647;
 			buildActionMask = 2147483647;
 			files = (
 			files = (
-				3C9FFA1A2744861A0067830C /* GECI - Home Improvement Contract - LA House.pdf in Resources */,
 				42DDB87E1F91E949002CCE22 /* template_example.json in Resources */,
 				42DDB87E1F91E949002CCE22 /* template_example.json in Resources */,
-				3C9FFA1D2744861A0067830C /* GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf in Resources */,
-				3C142586283C6C620017076A /* GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf in Resources */,
 				3CC7E7B723C5CB7800BE5561 /* Launch Screen.storyboard in Resources */,
 				3CC7E7B723C5CB7800BE5561 /* Launch Screen.storyboard in Resources */,
 				42DDB87C1F91E367002CCE22 /* template_type.json in Resources */,
 				42DDB87C1F91E367002CCE22 /* template_type.json in Resources */,
 				425A00F41F8F196900286D6F /* attribute_template.json in Resources */,
 				425A00F41F8F196900286D6F /* attribute_template.json in Resources */,
+				3C64CA9D29B8605C00CB0B07 /* GECI - Home Improvement Contract - Tan.pdf in Resources */,
+				3C64CAA329B8605C00CB0B07 /* GECI - Home Improvement Contract - LA House.pdf in Resources */,
+				3C64CAA129B8605C00CB0B07 /* GECI - Home Improvement Contract - Wilson Ma.pdf in Resources */,
 				7128C24B1E124F4500FF635B /* Assets.xcassets in Resources */,
 				7128C24B1E124F4500FF635B /* Assets.xcassets in Resources */,
-				3C9FFA192744861A0067830C /* GECI - Home Improvement Contract - Fong Huang.pdf in Resources */,
 				7128C26F1E124FF200FF635B /* Main.storyboard in Resources */,
 				7128C26F1E124FF200FF635B /* Main.storyboard in Resources */,
-				3C9FFA1C2744861A0067830C /* GECI - Home Improvement Contract - Jim Xu.pdf in Resources */,
+				3C64CAA029B8605C00CB0B07 /* GECI - Home Improvement Contract - Sunshine Remodeling Inc.pdf in Resources */,
+				3C64CAA429B8605C00CB0B07 /* GECI - Home Improvement Contract - Jim Xu.pdf in Resources */,
 				3CC7E73623BEDEA000BE5561 /* wkweb.storyboard in Resources */,
 				3CC7E73623BEDEA000BE5561 /* wkweb.storyboard in Resources */,
 				42DDB87A1F91DCE8002CCE22 /* ControlTemplateCell.xib in Resources */,
 				42DDB87A1F91DCE8002CCE22 /* ControlTemplateCell.xib in Resources */,
 				7128C27D1E12500B00FF635B /* signature.storyboard in Resources */,
 				7128C27D1E12500B00FF635B /* signature.storyboard in Resources */,
-				3C4F575628655018003C0005 /* 2022 GECI - Home Improvement Contract.json in Resources */,
+				3C64CAA829B8646A00CB0B07 /* template_03_08_2023_14_35_47.json in Resources */,
+				3C64CA9F29B8605C00CB0B07 /* GECI - Home Improvement Contract - Bin & J W Inc.pdf in Resources */,
 				7128C2E81E12511B00FF635B /* LICENSE in Resources */,
 				7128C2E81E12511B00FF635B /* LICENSE in Resources */,
 				42DDB8751F91C081002CCE22 /* ControlTemplateVC.xib in Resources */,
 				42DDB8751F91C081002CCE22 /* ControlTemplateVC.xib in Resources */,
 				714B870B1E24CAE300A40D18 /* debug.json in Resources */,
 				714B870B1E24CAE300A40D18 /* debug.json in Resources */,
-				3C9FFA172744861A0067830C /* GECI - Home Improvement Contract - Wilson Ma.pdf in Resources */,
-				3C7758192892741D00064C39 /* GECI - Home Improvement Contract - Bin & J W Inc.pdf in Resources */,
 				3C6B627E27102F6800E74CF9 /* CommonEditor.storyboard in Resources */,
 				3C6B627E27102F6800E74CF9 /* CommonEditor.storyboard in Resources */,
 				714B37081E70FCFE00E99B90 /* cam_scan.storyboard in Resources */,
 				714B37081E70FCFE00E99B90 /* cam_scan.storyboard in Resources */,
-				3C9FFA182744861A0067830C /* GECI - Home Improvement Contract - Tan.pdf in Resources */,
+				3C64CAA229B8605C00CB0B07 /* GECI - Home Improvement Contract - MMJ Remodeling Inc.pdf in Resources */,
+				3C64CA9E29B8605C00CB0B07 /* GECI - Home Improvement Contract - Fong Huang.pdf in Resources */,
 			);
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 			runOnlyForDeploymentPostprocessing = 0;
 		};
 		};
@@ -761,6 +766,7 @@
 				7115D4561E1606F700EF4E4C /* GEContractFilterViewController.m in Sources */,
 				7115D4561E1606F700EF4E4C /* GEContractFilterViewController.m in Sources */,
 				7128C2DA1E12510900FF635B /* unzip.c in Sources */,
 				7128C2DA1E12510900FF635B /* unzip.c in Sources */,
 				42D49E671F8DFA4B00AE39D5 /* PageSubItemCell.m in Sources */,
 				42D49E671F8DFA4B00AE39D5 /* PageSubItemCell.m in Sources */,
+				3C64CAAD29BB12C800CB0B07 /* RASingleton.m in Sources */,
 				42DDB8741F91C081002CCE22 /* ControlTemplateVC.m in Sources */,
 				42DDB8741F91C081002CCE22 /* ControlTemplateVC.m in Sources */,
 				71CDA0901F75EE400079F8E6 /* DocumentTemplateViewController.m in Sources */,
 				71CDA0901F75EE400079F8E6 /* DocumentTemplateViewController.m in Sources */,
 				7128C2C81E1250FC00FF635B /* TextUtils.m in Sources */,
 				7128C2C81E1250FC00FF635B /* TextUtils.m in Sources */,

+ 1 - 1
Ants Contract/Granite Expo eSign/Granite Expo eSign/DocumentTemplateViewController.m

@@ -121,7 +121,7 @@
 
 
 -(NSMutableDictionary*) templateInit:(NSMutableDictionary*) template
 -(NSMutableDictionary*) templateInit:(NSMutableDictionary*) template
 {
 {
-    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
+//    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
     
     
     NSString* temp = NSTemporaryDirectory();
     NSString* temp = NSTemporaryDirectory();
     NSString* filename =[NSString stringWithFormat:@"%@.png", [[NSUUID UUID] UUIDString]];
     NSString* filename =[NSString stringWithFormat:@"%@.png", [[NSUUID UUID] UUIDString]];

+ 7 - 0
Ants Contract/Granite Expo eSign/Granite Expo eSign/Info.plist

@@ -9,10 +9,16 @@
 		<dict>
 		<dict>
 			<key>CFBundleTypeName</key>
 			<key>CFBundleTypeName</key>
 			<string>GE-eSign</string>
 			<string>GE-eSign</string>
+			<key>LSHandlerRank</key>
+			<string>Default</string>
 			<key>LSItemContentTypes</key>
 			<key>LSItemContentTypes</key>
 			<array>
 			<array>
 				<string>com.microsoft.powerpoint.ppt</string>
 				<string>com.microsoft.powerpoint.ppt</string>
 				<string>com.microsoft.word.doc</string>
 				<string>com.microsoft.word.doc</string>
+				<string>org.openxmlformats.spreadsheetml.sheet</string>
+				<string>public.jpeg</string>
+				<string>org.openxmlformats.presentationml.presentation</string>
+				<string>org.openxmlformats.wordprocessingml.document</string>
 				<string>com.microsoft.excel.xls</string>
 				<string>com.microsoft.excel.xls</string>
 				<string>com.adobe.pdf</string>
 				<string>com.adobe.pdf</string>
 				<string>public.image</string>
 				<string>public.image</string>
@@ -22,6 +28,7 @@
 				<string>public.text</string>
 				<string>public.text</string>
 			</array>
 			</array>
 		</dict>
 		</dict>
+		<dict/>
 	</array>
 	</array>
 	<key>CFBundleExecutable</key>
 	<key>CFBundleExecutable</key>
 	<string>$(EXECUTABLE_NAME)</string>
 	<string>$(EXECUTABLE_NAME)</string>

+ 47 - 193
Ants Contract/Granite Expo eSign/Granite Expo eSign/RANetwork.m

@@ -22,15 +22,15 @@
 
 
 +(NSMutableDictionary*) prepare_addtional_params:(NSMutableDictionary* ) params
 +(NSMutableDictionary*) prepare_addtional_params:(NSMutableDictionary* ) params
 {
 {
-    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
-    if(appDelegate.user!=nil)
-        [params setValue:[AESCrypt AES128Encrypt:appDelegate.user key:@"usai2010"] forKey:@"user"];
-    if(appDelegate.password!=nil)
-        [params setValue:[AESCrypt AES128Encrypt:appDelegate.password key:@"usai2010"] forKey:@"password"];
+//    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
+    if(RASingleton.sharedInstance.user!=nil)
+        [params setValue:[AESCrypt AES128Encrypt:RASingleton.sharedInstance.user key:@"usai2010"] forKey:@"user"];
+    if(RASingleton.sharedInstance.password!=nil)
+        [params setValue:[AESCrypt AES128Encrypt:RASingleton.sharedInstance.password key:@"usai2010"] forKey:@"password"];
     
     
 
 
     
     
-    [params setValue:appDelegate.build forKey:@"app_ver"];
+    [params setValue:[RAUtils device_info][@"build"] forKey:@"app_ver"];
     
     
     NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary];
     NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary];
     NSString* short_version =[infoDict objectForKey:@"CFBundleShortVersionString"];
     NSString* short_version =[infoDict objectForKey:@"CFBundleShortVersionString"];
@@ -118,13 +118,13 @@
     
     
     
     
     NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
     NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
-    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
-    if(appDelegate.user!=nil)
-        [params setValue:appDelegate.user forKey:@"user"];
+//    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
+    if(RASingleton.sharedInstance.user!=nil)
+        [params setValue:RASingleton.sharedInstance.user forKey:@"user"];
     
     
     
     
-    if(appDelegate.password!=nil)
-        [params setValue:appDelegate.password forKey:@"password"];
+    if(RASingleton.sharedInstance.password!=nil)
+        [params setValue:RASingleton.sharedInstance.password forKey:@"password"];
     params[@"_operate"]=@"doc_id";
     params[@"_operate"]=@"doc_id";
     
     
     if(![self IsNetworkAvailable])
     if(![self IsNetworkAvailable])
@@ -223,13 +223,13 @@
     
     
     
     
     NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
     NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
-    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
-    if(appDelegate.user!=nil)
-        [params setValue:appDelegate.user forKey:@"user"];
+//
+    if(RASingleton.sharedInstance.user!=nil)
+        [params setValue:RASingleton.sharedInstance.user forKey:@"user"];
     
     
     
     
-    if(appDelegate.password!=nil)
-        [params setValue:appDelegate.password forKey:@"password"];
+    if(RASingleton.sharedInstance.password!=nil)
+        [params setValue:RASingleton.sharedInstance.password forKey:@"password"];
     params[@"_operate"]=@"logout_zip";
     params[@"_operate"]=@"logout_zip";
     
     
     if(![self IsNetworkAvailable])
     if(![self IsNetworkAvailable])
@@ -251,28 +251,24 @@
     
     
     if (result==2)
     if (result==2)
     {
     {
-        [appDelegate Logout];
+        
+        dispatch_async(dispatch_get_main_queue(), ^{
+            AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
+            [appDelegate Logout];
+        });
   
   
     }
     }
     return jsobj;
     return jsobj;
 }
 }
 +(int)Authorize : (NSString*) user password:(NSString*) password{
 +(int)Authorize : (NSString*) user password:(NSString*) password{
     
     
-    //    if(![ApexMobileNetwork IsHostAvailable:URL_UPDATE_AUTH])
-    //        return RESULT_NET_ERROR;
     NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
     NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
     long ver =[defaults integerForKey:[NSString stringWithFormat:@"%@_Auth_InfoVer",user]];
     long ver =[defaults integerForKey:[NSString stringWithFormat:@"%@_Auth_InfoVer",user]];
     
     
     
     
     
     
     NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
     NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
-//    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
-//    if(appDelegate.duid !=nil)
-//        [params setValue:appDelegate.duid forKey:@"udid"];
-//    [params setValue:@"handset_login" forKey:@"action"];
-    //    [headers setValue:[NSString stringWithFormat:@"%d",dataLength] forKey:@"Content-Length"];
-    
-    
+
     
     
     
     
     [params setValue:[AESCrypt AES128Encrypt:user  key:@"usai2010"] forKey:@"user"];
     [params setValue:[AESCrypt AES128Encrypt:user  key:@"usai2010"] forKey:@"user"];
@@ -280,20 +276,7 @@
     [params setValue:[NSString stringWithFormat:@"%ld",ver]  forKey:@"auth_ver"];
     [params setValue:[NSString stringWithFormat:@"%ld",ver]  forKey:@"auth_ver"];
         [params setValue:@"login"  forKey:@"_operate"];
         [params setValue:@"login"  forKey:@"_operate"];
     
     
-
-//#ifdef TEST
-//    [params setValue:@"true" forKey:@"is_debug"];
-//#else
-//    [params setValue:@"false" forKey:@"is_debug"];
-//#endif
-    
     NSData* json= nil;
     NSData* json= nil;
-//    if(appDelegate.offline_mode)
-//    {
-//        json= [OLDataProvider offline_login:params] ;
-//        
-//    }
-//    else
     
     
         if(![self IsNetworkAvailable])
         if(![self IsNetworkAvailable])
             return RESULT_NET_NOTAVAILABLE;
             return RESULT_NET_NOTAVAILABLE;
@@ -322,8 +305,7 @@
     if(jsobj)
     if(jsobj)
     {
     {
         
         
-        UIApplication * app = [UIApplication sharedApplication];
-        AppDelegate *appDelegate = (AppDelegate *)[app delegate];
+
         int result = [[jsobj valueForKey:@"result"] intValue];
         int result = [[jsobj valueForKey:@"result"] intValue];
         
         
         if (result<0)
         if (result<0)
@@ -333,7 +315,7 @@
             
             
             
             
             DebugLog(@"USER NOT AUTHORIZED CODE=%d ",result);
             DebugLog(@"USER NOT AUTHORIZED CODE=%d ",result);
-            [appDelegate Logout];
+//            [appDelegate Logout];
             if(result==8)
             if(result==8)
             {
             {
                 return RESULT_LOGIN_DEVICE;
                 return RESULT_LOGIN_DEVICE;
@@ -362,149 +344,21 @@
 
 
         
         
         [defaults setObject:user_info forKey:user];
         [defaults setObject:user_info forKey:user];
-//        if(offPrefix!=nil)
-//        {
-//            [defaults setValue:offPrefix forKey:user];
-//            
-//            
-//        }
-//        if(agentName!=nil)
-//        {
-//            [defaults setValue:agentName forKey:@"agent_name"];
-//            
-//            
-//        }
+
         
         
         [defaults synchronize];
         [defaults synchronize];
-//        NSDictionary* objheader = [jsobj objectForKey:@"header"];
-//        
-//        NSString* required_ver=[jsobj objectForKey:@"min_ver"] ;
-//        user=[objheader objectForKey:@"username"] ;
-//        DebugLog(@"required_ver=%@ ",required_ver);
-//        //        NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary];
-//        //        NSString* versionNum =[infoDict valueForKey:@"CFBundleVersion"];
-//        //        versionNum = [NSString stringWithFormat:@"A%@",versionNum];
-//        int ibadge = [[objheader valueForKey:@"badge"] intValue];
-//        
-//        //        if([ibadge isEqual:[NSNull null]])
-//        //            strbadge=@"0";
-//        //        if(ibadge==nil)
-//        //            ibadge=@"0";
-//        //        if([strbadge isEqualToString:@"null"])
-//        //            strbadge=@"0";
-//        app.applicationIconBadgeNumber = ibadge;//[strbadge intValue];
-//        
-//        //  BOOL bigger = [appDelegate.build compare:required_ver] ;
-//        if([appDelegate.build intValue]<[required_ver intValue])
-//            return RESULT_VER_LOW;
-//        //        appDelegate.sessionid = [objheader valueForKey:@"sessionid"];
-//        appDelegate.user = user;
-//        appDelegate.password = password;
-////        appDelegate.user_type = [[objheader valueForKey:@"user_type"] intValue];
-////        appDelegate.user_icon =[objheader valueForKey:@"user_img"] ;
-//        appDelegate.bLogin = true;
         
         
         
         
-        [appDelegate Login:user pwd:password skip_verify:skip_verify offPrefix:offPrefix agentName:agentName];
+        dispatch_async(dispatch_get_main_queue(), ^{
+
+            UIApplication * app = [UIApplication sharedApplication];
+            AppDelegate *appDelegate = (AppDelegate *)[app delegate];
+            [appDelegate Login:user pwd:password skip_verify:skip_verify offPrefix:offPrefix agentName:agentName];
+
+        });
         
         
         
         
-//        
-//        if(appDelegate.user_type==USER_ROLE_CUSTOMER)
-//        {
-//            appDelegate.customerInfo = [[objheader objectForKeyedSubscript:@"customerInfo"] mutableCopy];
-//            appDelegate.contact_id = [objheader valueForKey:@"contact_id"];
-//            //            appDelegate.order_code =[objheader valueForKey:@"orderCode"];
-//            //            appDelegate.order_status =[[objheader valueForKey:@"orderStatus"] intValue];
-//            //            [appDelegate SetSo:[objheader valueForKey:@"soId"]];
-//        }
-//        NSString* mode =[jsobj valueForKey:@"mode"] ;
-//        [appDelegate SetMode:mode];
-//        
-//        
-//        appDelegate.cart_count = [[objheader valueForKey:@"cart_count"] intValue];
-//        appDelegate.wish_count =[[objheader valueForKey:@"wish_count"] intValue];
-//        appDelegate.port_count =[[objheader valueForKey:@"portfolio_count"] intValue];
-//        
-//        [appDelegate update_count_mark];
-//        
-//        
-//        
-//        appDelegate.can_show_price =[[objheader valueForKey:@"can_show_price"] boolValue];
-//        appDelegate.can_see_price =[[objheader valueForKey:@"can_see_price"] boolValue];
-//        appDelegate.can_create_portfolio =[[objheader valueForKey:@"can_create_portfolio"] boolValue];
-//        appDelegate.can_create_order =[[objheader valueForKey:@"can_create_order"] boolValue];
-//        
-//        appDelegate.can_cancel_order =[[objheader valueForKey:@"can_cancel_order"] boolValue];
-//        appDelegate.can_set_cart_price =[[objheader valueForKey:@"can_set_cart_price"] boolValue];
-//        appDelegate.can_delete_order =[[objheader valueForKey:@"can_delete_order"] boolValue];
-//        appDelegate.can_update_contact_info =[[objheader valueForKey:@"can_update_contact_info"] boolValue];
-//        appDelegate.can_submit_order =[[objheader valueForKey:@"can_submit_order"] boolValue];
-//        appDelegate.can_set_tearsheet_price =[[objheader valueForKey:@"can_set_tearsheet_price"] boolValue];
-//        
-//        appDelegate.save_order_logout =[[objheader valueForKey:@"save_order_logout"] boolValue];
-//        appDelegate.submit_order_logout =[[objheader valueForKey:@"submit_order_logout"] boolValue];
-//        
-//        appDelegate.alert_sold_in_quantities = [[objheader valueForKey:@"alert_sold_in_quantities"] boolValue];
-//        
-//        
-//        
-//        appDelegate.ipad_perm =[objheader valueForKey:@"ipad_perm"] ;
-//        
-//        NSString* strfilter = [objheader valueForKey:@"statusFilter"] ;
-//        
-//        
-//        
-//        appDelegate.OrderFilter= [[RAUtils string2dict:strfilter] mutableCopy];
-//        
-//        
-//        [appDelegate set_main_button_panel];
-//        
-//        if(appDelegate.user_type==USER_ROLE_CUSTOMER) {
-//            
-//            // shop order status filter
-//            NSString *shopOrderStatusFilterStr = [objheader valueForKey:@"shopOrderFilter"] ;
-//            [Singleton sharedInstance].shop_order_status_filter = [[RAUtils string2dict:shopOrderStatusFilterStr] mutableCopy];
-//            
-//            // specialInstruction
-//            [Singleton sharedInstance].specialInstruction = [objheader valueForKey:@"specialInstruction"];
-//            
-//            //-价格类型
-//            [Singleton sharedInstance].npd_shop_price_type = [[objheader valueForKey:@"price_type"] integerValue];
-//            
-//            // 权限
-//            [Singleton sharedInstance].permissions_price_setting = [[objheader valueForKey:@"can_set_price_formula"] boolValue];
-//            [Singleton sharedInstance].permissions_edit_order = [[objheader valueForKey:@"can_place_order"] boolValue];
-//            
-//            [Singleton sharedInstance].permissions_submit_order = [[objheader valueForKey:@"can_submit_order"] boolValue];
-//            
-//            [Singleton sharedInstance].permissions_merge_order = [[objheader valueForKey:@"can_merge_order"] boolValue];
-//            
-//            [Singleton sharedInstance].deliveryString = [objheader valueForKey:@"delivery_price"];
-//            [[Singleton sharedInstance] resetGlobalLock];
-//            [Singleton sharedInstance].customer_can_see_sales_Order = [[objheader valueForKey:@"can_see_salesorder"] boolValue];
-//        }
-        
-        //        DebugLog(@"sessionid=%@ ",appDelegate.sessionid);
-        //        if ([[objheader valueForKey:@"update"] boolValue]==false)
-        //        {
-        //            // no update on the server;
-        //            return RESULT_TRUE;
-        //        }
-        //        int Auth_InfoVer = [[objheader valueForKey:@"ver"] intValue];
-        //        NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
-        //        [defaults removeObjectForKey:[NSString stringWithFormat:@"%@_Auth_InfoVer",user]];
-        //       [defaults setInteger:Auth_InfoVer forKey:[NSString stringWithFormat:@"%@_Auth_InfoVer",user]];
-        //        [defaults synchronize];
-        //
-        //        NSDictionary* objfuncs = [jsobj objectForKey:@"functions"];
-        //        NSArray* keys= [objfuncs allKeys];
-        
-        
-        /*
-         
-         db.setTransactionSuccessful();
-         db.endTransaction();
-         */
+
         return RESULT_TRUE;
         return RESULT_TRUE;
         
         
     }
     }
@@ -738,13 +592,13 @@
 +(NSDictionary *) updateNotes:(NSString*) doc_number notes:(NSString*)notes
 +(NSDictionary *) updateNotes:(NSString*) doc_number notes:(NSString*)notes
 {
 {
     NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
     NSMutableDictionary* params = [[NSMutableDictionary alloc] init];
-    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
-    if(appDelegate.user!=nil)
-        [params setValue:appDelegate.user forKey:@"user"];
+//    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
+    if(RASingleton.sharedInstance.user!=nil)
+        [params setValue:RASingleton.sharedInstance.user forKey:@"user"];
     
     
     
     
-    if(appDelegate.password!=nil)
-        [params setValue:appDelegate.password forKey:@"password"];
+    if(RASingleton.sharedInstance.password!=nil)
+        [params setValue:RASingleton.sharedInstance.password forKey:@"password"];
   
   
     params[@"doc_number"]=doc_number;
     params[@"doc_number"]=doc_number;
     params[@"notes"]=notes;
     params[@"notes"]=notes;
@@ -805,18 +659,18 @@
 //    return @"prefix123";
 //    return @"prefix123";
     
     
   
   
-        AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
-    if( appDelegate.user==nil)
+//        AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
+    if( RASingleton.sharedInstance.user==nil)
         return nil;
         return nil;
 
 
     
     
     
     
     NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
     NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
     
     
-    NSDictionary* user_info = [defaults dictionaryForKey:appDelegate.user];
+    NSDictionary* user_info = [defaults dictionaryForKey:RASingleton.sharedInstance.user];
     NSString* prefix=user_info[@"prefix"];
     NSString* prefix=user_info[@"prefix"];
     NSString* agentname=user_info[@"agent_name"];
     NSString* agentname=user_info[@"agent_name"];
-    appDelegate.agentName = agentname;
+    RASingleton.sharedInstance.agentName = agentname;
     if(prefix==nil)
     if(prefix==nil)
         return nil;
         return nil;
     long docint=[defaults integerForKey:prefix];
     long docint=[defaults integerForKey:prefix];
@@ -834,17 +688,17 @@
     
     
     [params setObject:@"getStatus" forKey:@"_operate"];
     [params setObject:@"getStatus" forKey:@"_operate"];
     
     
-    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
+//    AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
     
     
 //    if(appDelegate.user!=nil)
 //    if(appDelegate.user!=nil)
 //        [params setValue:[AESCrypt AES128Encrypt:appDelegate.user  key:@"usai2010"] forKey:@"user"];
 //        [params setValue:[AESCrypt AES128Encrypt:appDelegate.user  key:@"usai2010"] forKey:@"user"];
 //    if(appDelegate.password!=nil)
 //    if(appDelegate.password!=nil)
 //        [params setValue:[AESCrypt AES128Encrypt:appDelegate.password  key:@"usai2010"] forKey:@"password"];
 //        [params setValue:[AESCrypt AES128Encrypt:appDelegate.password  key:@"usai2010"] forKey:@"password"];
     
     
-    if(appDelegate.user!=nil)
-        [params setValue:appDelegate.user forKey:@"user"];
-    if(appDelegate.password!=nil)
-        [params setValue:appDelegate.password forKey:@"password"];
+    if(RASingleton.sharedInstance.user!=nil)
+        [params setValue:RASingleton.sharedInstance.user forKey:@"user"];
+    if(RASingleton.sharedInstance.password!=nil)
+        [params setValue:RASingleton.sharedInstance.password forKey:@"password"];
     
     
 //    
 //    
 //    NSString *DeviceToken = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
 //    NSString *DeviceToken = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

+ 23 - 0
Ants Contract/Granite Expo eSign/Granite Expo eSign/RASingleton.h

@@ -0,0 +1,23 @@
+//
+//  RASingleton.h
+//  Granite Expo eSign
+//
+//  Created by Rui Zhang on 3/10/23.
+//  Copyright © 2023 United Software Applications, Inc. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface RASingleton : NSObject
++ (instancetype)sharedInstance;
+
+
+@property (strong,nonatomic) NSString* user;
+@property (strong,nonatomic) NSString * password;
+//@property (strong,nonatomic) NSString* build;
+@property (strong,nonatomic) NSString* agentName;
+@end
+
+NS_ASSUME_NONNULL_END

+ 27 - 0
Ants Contract/Granite Expo eSign/Granite Expo eSign/RASingleton.m

@@ -0,0 +1,27 @@
+//
+//  RASingleton.m
+//  Granite Expo eSign
+//
+//  Created by Rui Zhang on 3/10/23.
+//  Copyright © 2023 United Software Applications, Inc. All rights reserved.
+//
+
+#import "RASingleton.h"
+
+@implementation RASingleton
++ (instancetype)sharedInstance {
+    
+    static RASingleton *singleton = nil;
+    static dispatch_once_t onceToken;
+    dispatch_once(&onceToken, ^{
+        
+        singleton = [[RASingleton alloc] init];
+//        [[NSNotificationCenter defaultCenter] addObserver:singleton selector:@selector(handleLogin:) name:User_LoginOK_Notification object:nil];
+        
+
+        
+//        self addObserver:self forKeyPath:self.scan_cart options:<#(NSKeyValueObservingOptions)#> context:<#(nullable void *)#>
+    });
+    return singleton;
+}
+@end

+ 2 - 1
Ants Contract/Granite Expo eSign/Granite Expo eSign/config.h

@@ -12,8 +12,9 @@
 
 
 
 
 
 
+#define CONTRACT_TEMPLATE @"template_03_08_2023_14_35_47.json"
 
 
-
+#define GET_JSON
 
 
 //#define ENCRYPT_OFF
 //#define ENCRYPT_OFF
 # ifdef DEBUG
 # ifdef DEBUG

Plik diff jest za duży
+ 0 - 0
Ants Contract/Granite Expo eSign/template_03_08_2023_14_35_47.json


+ 1 - 1
Ants Contract/common/AddExtDocumentViewController.m

@@ -38,7 +38,7 @@
 
 
     
     
     
     
-            self.edgesForExtendedLayout = UIRectEdgeNone;
+//            self.edgesForExtendedLayout = UIRectEdgeNone;
     if(self.arr_documents==nil)
     if(self.arr_documents==nil)
         self.arr_documents = [[NSMutableArray alloc]init];
         self.arr_documents = [[NSMutableArray alloc]init];
     
     

+ 4 - 4
Ants Contract/common/AppDelegate.h

@@ -7,6 +7,7 @@
 //
 //
 
 
 #import <UIKit/UIKit.h>
 #import <UIKit/UIKit.h>
+#import "RASingleton.h"
 
 
 
 
 typedef NS_ENUM(NSInteger, AppAccessMode) {
 typedef NS_ENUM(NSInteger, AppAccessMode) {
@@ -23,10 +24,9 @@ typedef NS_ENUM(NSInteger, AppAccessMode) {
 @property bool skip_verify;
 @property bool skip_verify;
 //@property (strong,nonatomic) NSString* offPrefix;
 //@property (strong,nonatomic) NSString* offPrefix;
 @property (strong,nonatomic) NSString* na_path;
 @property (strong,nonatomic) NSString* na_path;
-@property (strong,nonatomic) NSString* user;
-@property (strong,nonatomic) NSString * password;
-@property (strong,nonatomic) NSString* build;
-@property (strong,nonatomic) NSString* agentName;
+
+//@property (strong,nonatomic) NSString* build;
+//@property (strong,nonatomic) NSString* agentName;
 -(void) Logout;
 -(void) Logout;
 -(void) Login:(NSString* )user pwd:(NSString*) pwd skip_verify:(bool) skip_verify offPrefix:(NSString*) offPrefix agentName:(NSString*) name;
 -(void) Login:(NSString* )user pwd:(NSString*) pwd skip_verify:(bool) skip_verify offPrefix:(NSString*) offPrefix agentName:(NSString*) name;
 @property (strong,nonatomic) NSString* printerURL;
 @property (strong,nonatomic) NSString* printerURL;

+ 20 - 7
Ants Contract/common/AppDelegate.m

@@ -322,13 +322,18 @@
 }
 }
 -(void) Login:(NSString* )user pwd:(NSString*) pwd skip_verify:(bool) skip_verify offPrefix:(NSString*) offPrefix agentName:(NSString*) name
 -(void) Login:(NSString* )user pwd:(NSString*) pwd skip_verify:(bool) skip_verify offPrefix:(NSString*) offPrefix agentName:(NSString*) name
 {
 {
+    
+    
     self.skip_verify = skip_verify;
     self.skip_verify = skip_verify;
 //    self.offPrefix = offPrefix;
 //    self.offPrefix = offPrefix;
-    self.user = user;
-    self.password = pwd;
+    
+    RASingleton.sharedInstance.user = user;
+    RASingleton.sharedInstance.password = user;
+//    self.user = user;
+//    self.password = pwd;
     self.bLogin = true;
     self.bLogin = true;
     self.accessMode = AppAccessModeOnline;
     self.accessMode = AppAccessModeOnline;
-    self.agentName = name;
+    RASingleton.sharedInstance.agentName = name;
     // 延迟1s启动心跳,以避免在登录框还在Dismiss动画过程中再次调用Dismiss
     // 延迟1s启动心跳,以避免在登录框还在Dismiss动画过程中再次调用Dismiss
     __weak typeof(self) weakself = self;
     __weak typeof(self) weakself = self;
     dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
     dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC);
@@ -341,8 +346,11 @@
     self.accessMode = AppAccessModeOffline;
     self.accessMode = AppAccessModeOffline;
  //   self.bCanModify = false;
  //   self.bCanModify = false;
     //self.offPrefix = offPrefix;
     //self.offPrefix = offPrefix;
-    self.user = user;
-    self.password = user;
+//    self.user = user;
+//    self.password = user;
+    
+    RASingleton.sharedInstance.user = user;
+    RASingleton.sharedInstance.password = user;
     self.bLogin = true;
     self.bLogin = true;
 }
 }
 -(void) Logout
 -(void) Logout
@@ -353,10 +361,15 @@
 //    
 //    
 //    [main_vc hideMenu];
 //    [main_vc hideMenu];
 //    [main_vc switchToHome];
 //    [main_vc switchToHome];
-    self.user = nil;
+//    self.user = nil;
+    
+    RASingleton.sharedInstance.user = nil;
+    RASingleton.sharedInstance.password = nil;
+    
+    
    self.skip_verify = false;
    self.skip_verify = false;
 //    self.offPrefix = nil;
 //    self.offPrefix = nil;
-    self.password=nil;
+//    self.password=nil;
     self.bLogin = false;
     self.bLogin = false;
     
     
     [self stopHeartBeat];
     [self stopHeartBeat];

+ 1 - 1
Ants Contract/common/DocnotesViewController.m

@@ -28,7 +28,7 @@
         self.editDocNumber.enabled = false;
         self.editDocNumber.enabled = false;
         self.btnScan.enabled = false;
         self.btnScan.enabled = false;
     }
     }
-    self.edgesForExtendedLayout = UIRectEdgeNone;
+//    self.edgesForExtendedLayout = UIRectEdgeNone;
     
     
     
     
     self.tvNotes.layer.borderColor = [UIColor darkGrayColor].CGColor;
     self.tvNotes.layer.borderColor = [UIColor darkGrayColor].CGColor;

+ 5 - 4
Ants Contract/common/DocumentPageViewController.m

@@ -31,6 +31,7 @@
 #import "TextDrawable.h"
 #import "TextDrawable.h"
 #import "ImageDrawable.h"
 #import "ImageDrawable.h"
 #import "RectDrawable.h"
 #import "RectDrawable.h"
+#import "RASingleton.h"
 
 
 
 
 
 
@@ -173,7 +174,7 @@
                 {
                 {
 //                    NSString* cval = control[@"value"];
 //                    NSString* cval = control[@"value"];
 //                    if(cval==nil)
 //                    if(cval==nil)
-                        control[@"value"]= appDelegate.agentName;
+                        control[@"value"]= RASingleton.sharedInstance.agentName;
                 
                 
                     
                     
                 }
                 }
@@ -574,7 +575,7 @@
         
         
         
         
         
         
-        json[@"create_by"]=appDelegate.user;
+        json[@"create_by"]=RASingleton.sharedInstance.user;
         
         
 
 
         json[@"agent_name"]=[self extract_data:@"agent_name"];
         json[@"agent_name"]=[self extract_data:@"agent_name"];
@@ -647,7 +648,7 @@
                                     [RAUtils message_alert:@"Offline document number prefix not found, Please check your user name and make sure you had signed in at least once."  title:@"Create Customer" controller:self] ;
                                     [RAUtils message_alert:@"Offline document number prefix not found, Please check your user name and make sure you had signed in at least once."  title:@"Create Customer" controller:self] ;
                                     return;
                                     return;
                                 }
                                 }
-                                [appDelegate SwitchToOffline:appDelegate.user];
+                                [appDelegate SwitchToOffline:RASingleton.sharedInstance.user];
                                 
                                 
                                 
                                 
                                 NSMutableDictionary * json = [[NSMutableDictionary alloc]init];
                                 NSMutableDictionary * json = [[NSMutableDictionary alloc]init];
@@ -659,7 +660,7 @@
                                 
                                 
                                 
                                 
                                 
                                 
-                                json[@"create_by"]=appDelegate.user;
+                                json[@"create_by"]=RASingleton.sharedInstance.user;
                                 
                                 
                                 
                                 
                                 json[@"agent_name"]=[self extract_data:@"agent_name"];
                                 json[@"agent_name"]=[self extract_data:@"agent_name"];

+ 3 - 3
Ants Contract/common/LoginViewController.m

@@ -225,14 +225,14 @@
                         NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
                         NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
                         [defaults removeObjectForKey:@"user"];
                         [defaults removeObjectForKey:@"user"];
                         [defaults removeObjectForKey:@"password"];
                         [defaults removeObjectForKey:@"password"];
-                        NSString* encryptu=[AESCrypt encrypt:appDelegate.user password:@"usai"];
+                        NSString* encryptu=[AESCrypt encrypt:RASingleton.sharedInstance.user password:@"usai"];
                         NSString* encryptp=[AESCrypt encrypt:self.editpass.text password:@"usai"] ;
                         NSString* encryptp=[AESCrypt encrypt:self.editpass.text password:@"usai"] ;
                         
                         
                         
                         
         //                long index =[self.logindata indexOfObject:appDelegate.user];
         //                long index =[self.logindata indexOfObject:appDelegate.user];
-                        if(![self.logindata containsObject:appDelegate.user])
+                        if(![self.logindata containsObject:RASingleton.sharedInstance.user])
                         {
                         {
-                            [self.logindata addObject:appDelegate.user];
+                            [self.logindata addObject:RASingleton.sharedInstance.user];
                             NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:nil ascending:YES];
                             NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:nil ascending:YES];
                             self.logindata = [[self.logindata sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor,nil]] mutableCopy];
                             self.logindata = [[self.logindata sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor,nil]] mutableCopy];
                         }
                         }

+ 1 - 1
Ants Contract/common/RootViewController.h

@@ -7,7 +7,7 @@
 //
 //
 
 
 #import <UIKit/UIKit.h>
 #import <UIKit/UIKit.h>
-
+#import "RASingleton.h"
 @interface RootViewController : UIViewController
 @interface RootViewController : UIViewController
 @property (strong, nonatomic) IBOutlet UIButton *buttonHIC;
 @property (strong, nonatomic) IBOutlet UIButton *buttonHIC;
 
 

+ 8 - 8
Ants Contract/common/RootViewController.m

@@ -109,8 +109,8 @@
             
             
             if(blogin)
             if(blogin)
             {
             {
-                
-                self.welcomeLabel.text=[NSString stringWithFormat:@"Welcome %@",appDelegate.user];
+
+                self.welcomeLabel.text=[NSString stringWithFormat:@"Welcome %@",RASingleton.sharedInstance.user];
                 
                 
                 [bbitem setTitle:@"Sign out"];
                 [bbitem setTitle:@"Sign out"];
                 self.buttonHIC.enabled = true;
                 self.buttonHIC.enabled = true;
@@ -282,7 +282,7 @@
         DocumentPageViewController* dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DocumentPageViewController" ];
         DocumentPageViewController* dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DocumentPageViewController" ];
         
         
         //                dvc.templateName = @"debug.json";
         //                dvc.templateName = @"debug.json";
-        dvc.templatePath = [[NSBundle mainBundle] pathForResource:@"2022 GECI - Home Improvement Contract.json" ofType:nil];
+        dvc.templatePath = [[NSBundle mainBundle] pathForResource:CONTRACT_TEMPLATE ofType:nil];
         dvc.pdfPath = [[NSBundle mainBundle] pathForResource:@"GECI - Home Improvement Contract - Tan.pdf" ofType:nil];
         dvc.pdfPath = [[NSBundle mainBundle] pathForResource:@"GECI - Home Improvement Contract - Tan.pdf" ofType:nil];
 
 
         dvc.docment_id =  offline_docnumber;
         dvc.docment_id =  offline_docnumber;
@@ -323,7 +323,7 @@
                         DocumentPageViewController* dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DocumentPageViewController" ];
                         DocumentPageViewController* dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DocumentPageViewController" ];
                         
                         
                         //                dvc.templateName = @"debug.json";
                         //                dvc.templateName = @"debug.json";
-                        dvc.templatePath = [[NSBundle mainBundle] pathForResource:@"2022 GECI - Home Improvement Contract.json" ofType:nil];
+                        dvc.templatePath = [[NSBundle mainBundle] pathForResource:CONTRACT_TEMPLATE ofType:nil];
                         dvc.pdfPath = [[NSBundle mainBundle] pathForResource:@"GECI - Home Improvement Contract - Tan.pdf" ofType:nil];
                         dvc.pdfPath = [[NSBundle mainBundle] pathForResource:@"GECI - Home Improvement Contract - Tan.pdf" ofType:nil];
                         dvc.docment_id = json[@"doc_number"];
                         dvc.docment_id = json[@"doc_number"];
                         dvc.OnSave=^(NSString* file, NSString* subject)
                         dvc.OnSave=^(NSString* file, NSString* subject)
@@ -348,11 +348,11 @@
                                 [RAUtils message_alert:@"Offline document number prefix not found, Please check your user name and make sure you had signed in at least once."  title:@"Create Customer" controller:self] ;
                                 [RAUtils message_alert:@"Offline document number prefix not found, Please check your user name and make sure you had signed in at least once."  title:@"Create Customer" controller:self] ;
                                 return;
                                 return;
                             }
                             }
-                            [appDelegate SwitchToOffline:appDelegate.user];
+                            [appDelegate SwitchToOffline:RASingleton.sharedInstance.user];
                             DocumentPageViewController* dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DocumentPageViewController" ];
                             DocumentPageViewController* dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DocumentPageViewController" ];
                             
                             
                             //                dvc.templateName = @"debug.json";
                             //                dvc.templateName = @"debug.json";
-                            dvc.templatePath = [[NSBundle mainBundle] pathForResource:@"2022 GECI - Home Improvement Contract.json" ofType:nil];
+                            dvc.templatePath = [[NSBundle mainBundle] pathForResource:CONTRACT_TEMPLATE ofType:nil];
                             dvc.pdfPath = [[NSBundle mainBundle] pathForResource:@"GECI - Home Improvement Contract - Tan.pdf" ofType:nil];
                             dvc.pdfPath = [[NSBundle mainBundle] pathForResource:@"GECI - Home Improvement Contract - Tan.pdf" ofType:nil];
 
 
                             dvc.docment_id =  offline_docnumber;
                             dvc.docment_id =  offline_docnumber;
@@ -464,7 +464,7 @@
                         self.navigationItem.rightBarButtonItem = nil;
                         self.navigationItem.rightBarButtonItem = nil;
                         self.labelMode.text = @"Mode: Offline";
                         self.labelMode.text = @"Mode: Offline";
                         [appDelegate SwitchToOffline:name.text];
                         [appDelegate SwitchToOffline:name.text];
-                        self.welcomeLabel.text=[NSString stringWithFormat:@"Welcome %@",appDelegate.user];
+                        self.welcomeLabel.text=[NSString stringWithFormat:@"Welcome %@",RASingleton.sharedInstance.user];
 
 
                         self.coverView.hidden = true;
                         self.coverView.hidden = true;
                     }
                     }
@@ -740,7 +740,7 @@
     
     
     DocumentTemplateViewController* dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DocumentTemplateViewController" ];
     DocumentTemplateViewController* dvc = [self.storyboard instantiateViewControllerWithIdentifier:@"DocumentTemplateViewController" ];
     
     
-    dvc.templatePath = [[NSBundle mainBundle] pathForResource:@"2022 GECI - Home Improvement Contract.json" ofType:nil];
+    dvc.templatePath = [[NSBundle mainBundle] pathForResource:CONTRACT_TEMPLATE ofType:nil];
     dvc.pdfPath = [[NSBundle mainBundle] pathForResource:@"GECI - Home Improvement Contract - Tan.pdf" ofType:nil];
     dvc.pdfPath = [[NSBundle mainBundle] pathForResource:@"GECI - Home Improvement Contract - Tan.pdf" ofType:nil];
     
     
     dvc.docment_id =  @"debug_template";
     dvc.docment_id =  @"debug_template";

Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików