Commit fbd62afcf9e1b280386f763532544a4561864e66
1 parent
454c1bb6f2
Exists in
master
version 1.2.2
Showing 30 changed files with 690 additions and 195 deletions Side-by-side Diff
- .idea/misc.xml
- App/Base.lproj/Main.storyboard
- App/addPerson/CellPerson.swift
- App/addPerson/VCAddPerson.swift
- App/addPerson/VcListPerson.swift
- App/camera/ConfirmViewController/MyConfirmViewController.swift
- App/camera/board/Board.swift
- App/camera/board/Board.xib
- App/commons/CellMucChupWithCamera.swift
- App/createNew/VCChonMucChup.swift
- App/createNew/VCConfirmMucDaChon.swift
- App/createNew/VCNhapMucChup.swift
- App/firstInput/VCNoiDungTraoDoi.swift
- App/firstInput/VCSendTraoDoi.swift
- App/listCtruong/VCListCtruong.swift
- App/listCtruong/VCPageImgs.swift
- App/listCtruong/VCShootItemList.swift
- App/listCtruong/VcEdit.swift
- App/model/CongTruong.swift
- App/model/ImgObj.swift
- App/model/Person.swift
- App/model/ShootItem.swift
- App/utils/AppUtils.swift
- App/utils/NetWorkUtils.swift
- GeneralUtils/GeneralUtils/commonUtils/DataTypeUtils.swift
- GeneralUtils/GeneralUtils/commonUtils/NetWorkUtils.swift
- GeneralUtils/GeneralUtils/ui/views/TableView/BaseTbLoadData.swift
- GeneralUtils/GeneralUtils/ui/views/UIButtonCustom.swift
- Morooka.xcodeproj/project.pbxproj
- Morooka.xcworkspace/xcuserdata/ptran.xcuserdatad/UserInterfaceState.xcuserstate
.idea/misc.xml
| ... | ... | @@ -46,37 +46,6 @@ |
| 46 | 46 | </MavenGeneralSettings> |
| 47 | 47 | </option> |
| 48 | 48 | </component> |
| 49 | - <component name="ProjectInspectionProfilesVisibleTreeState"> | |
| 50 | - <entry key="Project Default"> | |
| 51 | - <profile-state> | |
| 52 | - <expanded-state> | |
| 53 | - <State> | |
| 54 | - <id /> | |
| 55 | - </State> | |
| 56 | - <State> | |
| 57 | - <id>Objective-C</id> | |
| 58 | - </State> | |
| 59 | - <State> | |
| 60 | - <id>RELAX NG</id> | |
| 61 | - </State> | |
| 62 | - <State> | |
| 63 | - <id>Spelling</id> | |
| 64 | - </State> | |
| 65 | - <State> | |
| 66 | - <id>Swift</id> | |
| 67 | - </State> | |
| 68 | - <State> | |
| 69 | - <id>TypeScript</id> | |
| 70 | - </State> | |
| 71 | - </expanded-state> | |
| 72 | - <selected-state> | |
| 73 | - <State> | |
| 74 | - <id>Objective-C</id> | |
| 75 | - </State> | |
| 76 | - </selected-state> | |
| 77 | - </profile-state> | |
| 78 | - </entry> | |
| 79 | - </component> | |
| 80 | 49 | <component name="masterDetails"> |
| 81 | 50 | <states> |
| 82 | 51 | <state key="ProjectJDKs.UI"> |
App/Base.lproj/Main.storyboard
| ... | ... | @@ -61,7 +61,7 @@ |
| 61 | 61 | <constraint firstAttribute="height" constant="35" id="4Gb-CM-qPm"/> |
| 62 | 62 | </constraints> |
| 63 | 63 | <state key="normal"> |
| 64 | - <string key="title">不明 | |
| 64 | + <string key="title">ID発行 | |
| 65 | 65 | </string> |
| 66 | 66 | <color key="titleColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/> |
| 67 | 67 | </state> |
| ... | ... | @@ -155,7 +155,7 @@ |
| 155 | 155 | </constraints> |
| 156 | 156 | </view> |
| 157 | 157 | <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="he4-g9-p0U"> |
| 158 | - <rect key="frame" x="36" y="70" width="303" height="466"/> | |
| 158 | + <rect key="frame" x="36" y="70" width="303" height="400.5"/> | |
| 159 | 159 | <subviews> |
| 160 | 160 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zox-26-aQq"> |
| 161 | 161 | <rect key="frame" x="0.0" y="0.0" width="303" height="20.5"/> |
| 162 | 162 | |
| 163 | 163 | |
| 164 | 164 | |
| ... | ... | @@ -213,32 +213,15 @@ |
| 213 | 213 | <nil key="textColor"/> |
| 214 | 214 | <nil key="highlightedColor"/> |
| 215 | 215 | </label> |
| 216 | - <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" contentHorizontalAlignment="left" contentVerticalAlignment="center" borderStyle="bezel" textAlignment="natural" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="ue1-C8-9xt"> | |
| 217 | - <rect key="frame" x="0.0" y="190.5" width="303" height="35"/> | |
| 218 | - <constraints> | |
| 219 | - <constraint firstAttribute="height" constant="35" id="nKh-De-wK4"/> | |
| 220 | - </constraints> | |
| 221 | - <nil key="textColor"/> | |
| 222 | - <fontDescription key="fontDescription" type="system" pointSize="14"/> | |
| 223 | - <textInputTraits key="textInputTraits" returnKeyType="done"/> | |
| 224 | - </textField> | |
| 225 | 216 | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gNw-Cn-qPA" userLabel="separate"> |
| 226 | - <rect key="frame" x="0.0" y="230.5" width="303" height="12"/> | |
| 217 | + <rect key="frame" x="0.0" y="190.5" width="303" height="12"/> | |
| 227 | 218 | <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> |
| 228 | 219 | <constraints> |
| 229 | 220 | <constraint firstAttribute="height" constant="12" id="U8a-Uu-IJr"/> |
| 230 | 221 | </constraints> |
| 231 | 222 | </view> |
| 232 | - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ebe-8H-4x9"> | |
| 233 | - <rect key="frame" x="0.0" y="247.5" width="303" height="20.5"/> | |
| 234 | - <string key="text">お問い合わせ内容 | |
| 235 | -</string> | |
| 236 | - <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
| 237 | - <nil key="textColor"/> | |
| 238 | - <nil key="highlightedColor"/> | |
| 239 | - </label> | |
| 240 | 223 | <textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" textAlignment="natural" translatesAutoresizingMaskIntoConstraints="NO" id="3qx-KL-LJG" customClass="UITextViewCustom" customModule="GeneralUtils"> |
| 241 | - <rect key="frame" x="0.0" y="273" width="303" height="130"/> | |
| 224 | + <rect key="frame" x="0.0" y="207.5" width="303" height="130"/> | |
| 242 | 225 | <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
| 243 | 226 | <constraints> |
| 244 | 227 | <constraint firstAttribute="height" constant="130" id="HuO-Md-RJZ"/> |
| 245 | 228 | |
| ... | ... | @@ -258,14 +241,14 @@ |
| 258 | 241 | </userDefinedRuntimeAttributes> |
| 259 | 242 | </textView> |
| 260 | 243 | <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="od0-tY-zto" userLabel="separate"> |
| 261 | - <rect key="frame" x="0.0" y="408" width="303" height="18"/> | |
| 244 | + <rect key="frame" x="0.0" y="342.5" width="303" height="18"/> | |
| 262 | 245 | <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> |
| 263 | 246 | <constraints> |
| 264 | 247 | <constraint firstAttribute="height" constant="18" id="ifn-5y-uBd"/> |
| 265 | 248 | </constraints> |
| 266 | 249 | </view> |
| 267 | 250 | <stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="cNO-NU-9qx"> |
| 268 | - <rect key="frame" x="0.0" y="431" width="303" height="35"/> | |
| 251 | + <rect key="frame" x="0.0" y="365.5" width="303" height="35"/> | |
| 269 | 252 | <subviews> |
| 270 | 253 | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="MVS-dH-l4Z" customClass="UIButtonCustomGradientBg" customModule="GeneralUtils"> |
| 271 | 254 | <rect key="frame" x="0.0" y="0.0" width="110" height="35"/> |
| 272 | 255 | |
| ... | ... | @@ -341,10 +324,10 @@ |
| 341 | 324 | </constraints> |
| 342 | 325 | </view> |
| 343 | 326 | <connections> |
| 344 | - <outlet property="edtAdress" destination="ue1-C8-9xt" id="Png-ZT-Xii"/> | |
| 345 | - <outlet property="edtContent" destination="3qx-KL-LJG" id="ELj-Xn-lEf"/> | |
| 327 | + <outlet property="edtAdress" destination="3qx-KL-LJG" id="pmY-Wd-aDS"/> | |
| 346 | 328 | <outlet property="edtPhone" destination="gHc-DM-bhU" id="59c-Hb-sne"/> |
| 347 | 329 | <outlet property="edtTenCty" destination="sgh-62-zsd" id="E0B-nZ-gb4"/> |
| 330 | + <outlet property="vTopLogo" destination="Air-Xv-R4i" id="82m-w9-OEi"/> | |
| 348 | 331 | </connections> |
| 349 | 332 | </viewController> |
| 350 | 333 | <placeholder placeholderIdentifier="IBFirstResponder" id="v3F-wF-d4Y" userLabel="First Responder" sceneMemberID="firstResponder"/> |
| 351 | 334 | |
| 352 | 335 | |
| ... | ... | @@ -371,14 +354,12 @@ |
| 371 | 354 | </constraints> |
| 372 | 355 | </view> |
| 373 | 356 | <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="FaF-Ew-VNM" customClass="UIButtonCustomGradientBg" customModule="GeneralUtils"> |
| 374 | - <rect key="frame" x="16" y="593" width="110" height="35"/> | |
| 357 | + <rect key="frame" x="107.5" y="593" width="160" height="35"/> | |
| 375 | 358 | <constraints> |
| 376 | 359 | <constraint firstAttribute="height" constant="35" id="A0l-ZP-ZIG"/> |
| 377 | - <constraint firstAttribute="width" constant="110" id="Zc5-Uz-Lud"/> | |
| 360 | + <constraint firstAttribute="width" constant="160" id="yJx-rc-Ynt"/> | |
| 378 | 361 | </constraints> |
| 379 | - <state key="normal"> | |
| 380 | - <string key="title">トップに戻る | |
| 381 | -</string> | |
| 362 | + <state key="normal" title="利用を開始する。"> | |
| 382 | 363 | <color key="titleColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/> |
| 383 | 364 | </state> |
| 384 | 365 | <userDefinedRuntimeAttributes> |
| ... | ... | @@ -397,11 +378,14 @@ |
| 397 | 378 | <action selector="btnBackToTopClick:" destination="WB6-Ic-cSK" eventType="touchUpInside" id="xKG-FK-n6a"/> |
| 398 | 379 | </connections> |
| 399 | 380 | </button> |
| 400 | - <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ol6-EF-aDg"> | |
| 401 | - <rect key="frame" x="100" y="282" width="174" height="21"/> | |
| 402 | - <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> | |
| 403 | - <string key="text">お問い合わせ ご回答 | |
| 404 | -</string> | |
| 381 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="あなたのIDは" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ol6-EF-aDg"> | |
| 382 | + <rect key="frame" x="136" y="150" width="103.5" height="21"/> | |
| 383 | + <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="17"/> | |
| 384 | + <nil key="textColor"/> | |
| 385 | + <nil key="highlightedColor"/> | |
| 386 | + </label> | |
| 387 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="1230" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="7sC-Ve-cWy"> | |
| 388 | + <rect key="frame" x="168" y="205" width="39" height="21"/> | |
| 405 | 389 | <fontDescription key="fontDescription" type="system" pointSize="17"/> |
| 406 | 390 | <nil key="textColor"/> |
| 407 | 391 | <nil key="highlightedColor"/> |
| 408 | 392 | |
| 409 | 393 | |
| 410 | 394 | |
| 411 | 395 | |
| ... | ... | @@ -409,17 +393,25 @@ |
| 409 | 393 | </subviews> |
| 410 | 394 | <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
| 411 | 395 | <constraints> |
| 396 | + <constraint firstItem="ol6-EF-aDg" firstAttribute="centerX" secondItem="trI-A6-CWw" secondAttribute="centerX" id="0x0-uB-cY5"/> | |
| 397 | + <constraint firstItem="FaF-Ew-VNM" firstAttribute="centerX" secondItem="trI-A6-CWw" secondAttribute="centerX" id="4WW-Lm-25C"/> | |
| 398 | + <constraint firstItem="7sC-Ve-cWy" firstAttribute="centerX" secondItem="trI-A6-CWw" secondAttribute="centerX" id="4a0-l0-Bb9"/> | |
| 412 | 399 | <constraint firstItem="qiG-ht-Uf8" firstAttribute="top" secondItem="trI-A6-CWw" secondAttribute="top" id="9fX-XA-RWq"/> |
| 413 | 400 | <constraint firstItem="qiG-ht-Uf8" firstAttribute="leading" secondItem="trI-A6-CWw" secondAttribute="leading" id="Ikf-KP-tr6"/> |
| 414 | - <constraint firstItem="FaF-Ew-VNM" firstAttribute="leading" secondItem="trI-A6-CWw" secondAttribute="leadingMargin" id="f3e-Kc-WXv"/> | |
| 401 | + <constraint firstItem="7sC-Ve-cWy" firstAttribute="top" secondItem="ol6-EF-aDg" secondAttribute="bottom" constant="34" id="XMk-Iv-UeY"/> | |
| 415 | 402 | <constraint firstAttribute="trailing" secondItem="qiG-ht-Uf8" secondAttribute="trailing" id="kHC-oY-4J1"/> |
| 416 | 403 | <constraint firstItem="ILD-Ch-AFl" firstAttribute="top" secondItem="FaF-Ew-VNM" secondAttribute="bottom" constant="39" id="lrB-bd-EWc"/> |
| 404 | + <constraint firstItem="ol6-EF-aDg" firstAttribute="top" secondItem="qiG-ht-Uf8" secondAttribute="bottom" constant="100" id="zZA-FY-RnN"/> | |
| 417 | 405 | </constraints> |
| 418 | 406 | </view> |
| 407 | + <connections> | |
| 408 | + <outlet property="tvId" destination="7sC-Ve-cWy" id="amd-of-Tri"/> | |
| 409 | + <outlet property="vTopLogo" destination="qiG-ht-Uf8" id="EMQ-9z-0t3"/> | |
| 410 | + </connections> | |
| 419 | 411 | </viewController> |
| 420 | 412 | <placeholder placeholderIdentifier="IBFirstResponder" id="UIt-fK-wYI" userLabel="First Responder" sceneMemberID="firstResponder"/> |
| 421 | 413 | </objects> |
| 422 | - <point key="canvasLocation" x="1007" y="15"/> | |
| 414 | + <point key="canvasLocation" x="1005.6" y="14.842578710644679"/> | |
| 423 | 415 | </scene> |
| 424 | 416 | <!--Splash Controller--> |
| 425 | 417 | <scene sceneID="LPb-05-isG"> |
| ... | ... | @@ -1080,6 +1072,7 @@ |
| 1080 | 1072 | </constraints> |
| 1081 | 1073 | </view> |
| 1082 | 1074 | <connections> |
| 1075 | + <outlet property="btnNext" destination="J0s-KI-W0f" id="6YL-JK-yJ9"/> | |
| 1083 | 1076 | <outlet property="edtTitle" destination="SdT-qW-FtA" id="qlt-h9-VSe"/> |
| 1084 | 1077 | <outlet property="tableView" destination="DJO-7p-DBK" id="RmP-xv-fXR"/> |
| 1085 | 1078 | <outlet property="topMargin" destination="Ij5-29-ivK" id="B3y-R5-Bn0"/> |
| ... | ... | @@ -1179,7 +1172,7 @@ |
| 1179 | 1172 | </userDefinedRuntimeAttribute> |
| 1180 | 1173 | </userDefinedRuntimeAttributes> |
| 1181 | 1174 | <connections> |
| 1182 | - <action selector="btnRightClick:" destination="QOd-um-P0o" eventType="touchUpInside" id="HX6-cd-vVa"/> | |
| 1175 | + <action selector="btnRightClick:" destination="QOd-um-P0o" eventType="touchUpInside" id="W5K-tp-YPY"/> | |
| 1183 | 1176 | </connections> |
| 1184 | 1177 | </button> |
| 1185 | 1178 | </subviews> |
| ... | ... | @@ -1202,6 +1195,7 @@ |
| 1202 | 1195 | </constraints> |
| 1203 | 1196 | </view> |
| 1204 | 1197 | <connections> |
| 1198 | + <outlet property="btnNext" destination="wpH-Xv-iF5" id="B8j-IW-UbQ"/> | |
| 1205 | 1199 | <outlet property="tableView" destination="jNm-go-B5H" id="DDY-du-cbs"/> |
| 1206 | 1200 | <outlet property="topMargin" destination="1II-tM-K03" id="nyq-4r-ZSc"/> |
| 1207 | 1201 | <outlet property="vTopLogo" destination="X6q-MT-ndn" id="1bU-E2-wut"/> |
| ... | ... | @@ -1782,6 +1776,9 @@ |
| 1782 | 1776 | </label> |
| 1783 | 1777 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="cty" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="AfF-k7-iZ5"> |
| 1784 | 1778 | <rect key="frame" x="288" y="0.0" width="24" height="40"/> |
| 1779 | + <constraints> | |
| 1780 | + <constraint firstAttribute="width" relation="lessThanOrEqual" constant="100" id="xJh-Ho-SeF"/> | |
| 1781 | + </constraints> | |
| 1785 | 1782 | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| 1786 | 1783 | <color key="textColor" red="0.16078431372549018" green="0.39215686274509803" blue="0.90588235294117647" alpha="1" colorSpace="calibratedRGB"/> |
| 1787 | 1784 | <nil key="highlightedColor"/> |
| ... | ... | @@ -1821,6 +1818,9 @@ |
| 1821 | 1818 | </label> |
| 1822 | 1819 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ctruong" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uBu-xb-dCc"> |
| 1823 | 1820 | <rect key="frame" x="252" y="0.0" width="60" height="40"/> |
| 1821 | + <constraints> | |
| 1822 | + <constraint firstAttribute="width" relation="lessThanOrEqual" constant="100" id="XIf-rt-epT"/> | |
| 1823 | + </constraints> | |
| 1824 | 1824 | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| 1825 | 1825 | <color key="textColor" red="0.16078431369999999" green="0.3921568627" blue="0.90588235289999997" alpha="1" colorSpace="calibratedRGB"/> |
| 1826 | 1826 | <nil key="highlightedColor"/> |
| ... | ... | @@ -1859,6 +1859,9 @@ |
| 1859 | 1859 | </label> |
| 1860 | 1860 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="chup" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="mV8-2Y-tik"> |
| 1861 | 1861 | <rect key="frame" x="274" y="0.0" width="38" height="40"/> |
| 1862 | + <constraints> | |
| 1863 | + <constraint firstAttribute="width" relation="lessThanOrEqual" constant="100" id="Nn0-5m-ecR"/> | |
| 1864 | + </constraints> | |
| 1862 | 1865 | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| 1863 | 1866 | <color key="textColor" red="0.16078431369999999" green="0.3921568627" blue="0.90588235289999997" alpha="1" colorSpace="calibratedRGB"/> |
| 1864 | 1867 | <nil key="highlightedColor"/> |
| ... | ... | @@ -1897,6 +1900,9 @@ |
| 1897 | 1900 | </label> |
| 1898 | 1901 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="252" verticalHuggingPriority="251" text="se chup" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2uv-My-eRf"> |
| 1899 | 1902 | <rect key="frame" x="252.5" y="0.0" width="59.5" height="40"/> |
| 1903 | + <constraints> | |
| 1904 | + <constraint firstAttribute="width" relation="lessThanOrEqual" constant="100" id="3BG-UW-mpa"/> | |
| 1905 | + </constraints> | |
| 1900 | 1906 | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| 1901 | 1907 | <color key="textColor" red="0.16078431369999999" green="0.3921568627" blue="0.90588235289999997" alpha="1" colorSpace="calibratedRGB"/> |
| 1902 | 1908 | <nil key="highlightedColor"/> |
| ... | ... | @@ -1935,6 +1941,9 @@ |
| 1935 | 1941 | </label> |
| 1936 | 1942 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="ON" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LsA-0L-mbU"> |
| 1937 | 1943 | <rect key="frame" x="287.5" y="0.0" width="24.5" height="40"/> |
| 1944 | + <constraints> | |
| 1945 | + <constraint firstAttribute="width" relation="lessThanOrEqual" constant="100" id="bh9-WV-1SL"/> | |
| 1946 | + </constraints> | |
| 1938 | 1947 | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| 1939 | 1948 | <color key="textColor" red="0.16078431369999999" green="0.3921568627" blue="0.90588235289999997" alpha="1" colorSpace="calibratedRGB"/> |
| 1940 | 1949 | <nil key="highlightedColor"/> |
| ... | ... | @@ -1973,6 +1982,9 @@ |
| 1973 | 1982 | </label> |
| 1974 | 1983 | <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zod-hg-4Iv"> |
| 1975 | 1984 | <rect key="frame" x="230" y="0.0" width="82" height="40"/> |
| 1985 | + <constraints> | |
| 1986 | + <constraint firstAttribute="width" relation="lessThanOrEqual" constant="100" id="i7C-GJ-h5n"/> | |
| 1987 | + </constraints> | |
| 1976 | 1988 | <string key="text">リスト消去 |
| 1977 | 1989 | </string> |
| 1978 | 1990 | <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="16"/> |
| ... | ... | @@ -2014,6 +2026,9 @@ |
| 2014 | 2026 | <color key="value" white="0.33333333333333331" alpha="1" colorSpace="calibratedWhite"/> |
| 2015 | 2027 | </userDefinedRuntimeAttribute> |
| 2016 | 2028 | </userDefinedRuntimeAttributes> |
| 2029 | + <connections> | |
| 2030 | + <outletCollection property="gestureRecognizers" destination="Bwq-SD-LaA" appends="YES" id="mNJ-5m-W8V"/> | |
| 2031 | + </connections> | |
| 2017 | 2032 | </view> |
| 2018 | 2033 | </subviews> |
| 2019 | 2034 | <color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="calibratedWhite"/> |
| ... | ... | @@ -2033,6 +2048,11 @@ |
| 2033 | 2048 | </connections> |
| 2034 | 2049 | </viewController> |
| 2035 | 2050 | <placeholder placeholderIdentifier="IBFirstResponder" id="FBh-aj-ACu" userLabel="First Responder" sceneMemberID="firstResponder"/> |
| 2051 | + <tapGestureRecognizer id="Bwq-SD-LaA" userLabel="bgWhite"> | |
| 2052 | + <connections> | |
| 2053 | + <action selector="whiteClick:" destination="yZt-Wk-WwO" id="bfe-tc-JJw"/> | |
| 2054 | + </connections> | |
| 2055 | + </tapGestureRecognizer> | |
| 2036 | 2056 | <tapGestureRecognizer id="9JU-WE-W5s" userLabel="delete"> |
| 2037 | 2057 | <connections> |
| 2038 | 2058 | <action selector="deleteClick:" destination="yZt-Wk-WwO" id="i0B-TB-HOY"/> |
| ... | ... | @@ -2201,7 +2221,7 @@ |
| 2201 | 2221 | <nil key="textColor"/> |
| 2202 | 2222 | <nil key="highlightedColor"/> |
| 2203 | 2223 | </label> |
| 2204 | - <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ozm-WD-JTO"> | |
| 2224 | + <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="ozm-WD-JTO"> | |
| 2205 | 2225 | <rect key="frame" x="253" y="0.0" width="30" height="24"/> |
| 2206 | 2226 | <constraints> |
| 2207 | 2227 | <constraint firstAttribute="width" constant="30" id="zXd-nh-N5a"/> |
| ... | ... | @@ -2262,6 +2282,33 @@ |
| 2262 | 2282 | <tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="44" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="7sn-LX-TPS" customClass="UITableViewLoadDataFromUIThread" customModule="GeneralUtils"> |
| 2263 | 2283 | <rect key="frame" x="30" y="123.5" width="315" height="344.5"/> |
| 2264 | 2284 | <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
| 2285 | + <prototypes> | |
| 2286 | + <tableViewCell clipsSubviews="YES" contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" reuseIdentifier="CellPerson" id="nHp-pE-xAT" customClass="CellPerson" customModule="App" customModuleProvider="target"> | |
| 2287 | + <rect key="frame" x="0.0" y="28" width="315" height="44"/> | |
| 2288 | + <autoresizingMask key="autoresizingMask"/> | |
| 2289 | + <tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="nHp-pE-xAT" id="ONP-wK-o5X"> | |
| 2290 | + <rect key="frame" x="0.0" y="0.0" width="315" height="43"/> | |
| 2291 | + <autoresizingMask key="autoresizingMask"/> | |
| 2292 | + <subviews> | |
| 2293 | + <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="6eU-CX-rj2"> | |
| 2294 | + <rect key="frame" x="10" y="10" width="295" height="23"/> | |
| 2295 | + <fontDescription key="fontDescription" type="system" pointSize="17"/> | |
| 2296 | + <nil key="textColor"/> | |
| 2297 | + <nil key="highlightedColor"/> | |
| 2298 | + </label> | |
| 2299 | + </subviews> | |
| 2300 | + <constraints> | |
| 2301 | + <constraint firstItem="6eU-CX-rj2" firstAttribute="leading" secondItem="ONP-wK-o5X" secondAttribute="leading" constant="10" id="beA-qD-ojc"/> | |
| 2302 | + <constraint firstAttribute="bottom" secondItem="6eU-CX-rj2" secondAttribute="bottom" constant="10" id="ojS-Ly-c34"/> | |
| 2303 | + <constraint firstAttribute="trailing" secondItem="6eU-CX-rj2" secondAttribute="trailing" constant="10" id="qjZ-5m-p4F"/> | |
| 2304 | + <constraint firstItem="6eU-CX-rj2" firstAttribute="top" secondItem="ONP-wK-o5X" secondAttribute="top" constant="10" id="r75-k7-Tzn"/> | |
| 2305 | + </constraints> | |
| 2306 | + </tableViewCellContentView> | |
| 2307 | + <connections> | |
| 2308 | + <outlet property="tvTitle" destination="6eU-CX-rj2" id="Iwr-ve-YrS"/> | |
| 2309 | + </connections> | |
| 2310 | + </tableViewCell> | |
| 2311 | + </prototypes> | |
| 2265 | 2312 | </tableView> |
| 2266 | 2313 | </subviews> |
| 2267 | 2314 | <color key="backgroundColor" white="1" alpha="1" colorSpace="calibratedWhite"/> |
| ... | ... | @@ -2384,7 +2431,7 @@ |
| 2384 | 2431 | <constraint firstAttribute="height" constant="40" id="asa-jY-XvL"/> |
| 2385 | 2432 | <constraint firstAttribute="width" constant="110" id="dI5-02-rUJ"/> |
| 2386 | 2433 | </constraints> |
| 2387 | - <state key="normal" title="Change"> | |
| 2434 | + <state key="normal" title="変化する"> | |
| 2388 | 2435 | <color key="titleColor" white="0.0" alpha="1" colorSpace="calibratedWhite"/> |
| 2389 | 2436 | </state> |
| 2390 | 2437 | <userDefinedRuntimeAttributes> |
App/addPerson/CellPerson.swift
| 1 | +import Foundation | |
| 2 | +import UIKit | |
| 3 | +import GeneralUtils | |
| 4 | + | |
| 5 | +class CellPerson: BaseTableViewCellUI { | |
| 6 | + @IBOutlet weak var tvTitle: UILabel! | |
| 7 | + | |
| 8 | + var person: Person! | |
| 9 | + | |
| 10 | + override func awakeFromNib() { | |
| 11 | + super.awakeFromNib() | |
| 12 | + self.selectionStyle = .none | |
| 13 | + } | |
| 14 | + | |
| 15 | + override func configCellWithData(baseObj: Any, index: Int) { | |
| 16 | + super.configCellWithData(baseObj: baseObj, index: index) | |
| 17 | + person = baseObj as! Person | |
| 18 | + | |
| 19 | + tvTitle.text = person.getName(); | |
| 20 | + } | |
| 21 | +} |
App/addPerson/VCAddPerson.swift
| 1 | 1 | import UIKit |
| 2 | +import GeneralUtils | |
| 3 | +import Alamofire | |
| 2 | 4 | |
| 3 | 5 | class VCAddPerson: UIViewController { |
| 4 | 6 | @IBOutlet weak var edtTitle: UITextField! |
| 5 | 7 | @IBOutlet weak var topMargin: NSLayoutConstraint! |
| 6 | 8 | @IBOutlet weak var vTopLogo: VTopLogo! |
| 9 | + weak var tableView: UITableViewLoadDataFromUIThread? | |
| 7 | 10 | |
| 8 | - static func openController(_ viewController: UIViewController) { | |
| 11 | + static func openController(_ viewController: UIViewController, tableView: UITableViewLoadDataFromUIThread) { | |
| 9 | 12 | let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) |
| 10 | 13 | let vcOpen = storyboard.instantiateViewController(withIdentifier: "VCAddPerson") as! VCAddPerson |
| 14 | + vcOpen.tableView = tableView; | |
| 11 | 15 | viewController.present(vcOpen, animated: true, completion: nil) |
| 12 | 16 | } |
| 13 | 17 | |
| 14 | 18 | override func viewDidLoad() { |
| 15 | 19 | super.viewDidLoad() |
| 16 | - vTopLogo.leftBtnClick = {self.dismiss(animated: true)} | |
| 20 | + vTopLogo.leftBtnClick = { self.dismiss(animated: true) } | |
| 17 | 21 | } |
| 18 | - | |
| 19 | - | |
| 22 | + | |
| 23 | + | |
| 20 | 24 | @IBAction func btnLeftClick(_ sender: Any) { |
| 21 | 25 | dismiss(animated: true) |
| 22 | 26 | } |
| 23 | 27 | |
| 24 | 28 | @IBAction func btnRightClick(_ sender: Any) { |
| 29 | + if let id = edtTitle.text, id.length > 0{ | |
| 30 | + let parameters: Parameters = [ | |
| 31 | + "id_create": getIDWork(), | |
| 32 | + "id": id, | |
| 33 | + ] | |
| 34 | + | |
| 35 | + NetWorkUtils.excutePostTypeRawJSONEncoding(parameters: parameters, url: Constants.PathManager.ROOT_SERVER + "api/worker/add_id", | |
| 36 | + isShowProgress: true, vc: self, responseStringParam: { response in | |
| 37 | + guard let value = response.value else { | |
| 38 | + CommonUtils.showToastLong(text: LocalizedString("Has_Error_occurred")) | |
| 39 | + return | |
| 40 | + } | |
| 41 | + let json = JSON.parse(value) | |
| 42 | + if let isSuccess = json["iSuccess"].bool, isSuccess{ | |
| 43 | + CommonUtils.showToastLong(text: LocalizedString("successful")) | |
| 44 | + self.edtTitle.text = nil | |
| 45 | + let person = Person(); | |
| 46 | + person.id = id; | |
| 47 | + self.tableView?.itemsData.append(person) | |
| 48 | + self.tableView?.reloadDataTableView() | |
| 49 | + return | |
| 50 | + } else { | |
| 51 | + if let message = json["message"].string { | |
| 52 | + CommonUtils.showToastLong(text: message); | |
| 53 | + } else { | |
| 54 | + CommonUtils.showToastLong(text: LocalizedString("Has_Error_occurred")) | |
| 55 | + } | |
| 56 | + } | |
| 57 | + }) | |
| 58 | + } else { | |
| 59 | + CommonUtils.showToastLong(text: LocalizedString("khong_de_trong")) | |
| 60 | + } | |
| 25 | 61 | } |
| 26 | 62 | |
| 27 | 63 | @IBAction func edtActionTrigerClick(_ sender: Any) { |
| ... | ... | @@ -33,7 +69,7 @@ |
| 33 | 69 | super.viewDidDisappear(animated) |
| 34 | 70 | } |
| 35 | 71 | |
| 36 | - override var prefersStatusBarHidden : Bool { | |
| 72 | + override var prefersStatusBarHidden: Bool { | |
| 37 | 73 | return true |
| 38 | 74 | } |
| 39 | 75 | } |
App/addPerson/VcListPerson.swift
| ... | ... | @@ -14,35 +14,76 @@ |
| 14 | 14 | let vcOpen = storyboard.instantiateViewController(withIdentifier: "VcListPerson") as! VcListPerson |
| 15 | 15 | viewController.present(vcOpen, animated: true, completion: nil) |
| 16 | 16 | } |
| 17 | - | |
| 17 | + | |
| 18 | 18 | override func viewDidLoad() { |
| 19 | 19 | super.viewDidLoad() |
| 20 | - vTopLogo.leftBtnClick = {self.dismiss(animated: true, completion: nil)} | |
| 20 | + vTopLogo.leftBtnClick = { self.dismiss(animated: true, completion: nil) } | |
| 21 | 21 | tableView.emptyText = LocalizedString("list_empty") |
| 22 | 22 | tableView.initAndLoadData(self) |
| 23 | 23 | } |
| 24 | - | |
| 24 | + | |
| 25 | 25 | @IBAction func btnAddClick(_ sender: Any) { |
| 26 | - VCAddPerson.openController(self) | |
| 26 | + VCAddPerson.openController(self, tableView: self.tableView) | |
| 27 | 27 | } |
| 28 | 28 | |
| 29 | 29 | func loadDataOnUI(complete: @escaping ([Any]?) -> ()) { |
| 30 | - complete(nil) | |
| 30 | + NetWorkUtils.excuteHttpGet(urlStr: Constants.PathManager.ROOT_SERVER + "api/worker/get_by_user_add/" + getIDWork(), | |
| 31 | + complete: { (response, errorText) in | |
| 32 | + guard let response = response else { | |
| 33 | + CommonUtils.excuteOnMainThread({ | |
| 34 | + complete(nil) | |
| 35 | + }) | |
| 36 | + return false; | |
| 37 | + } | |
| 38 | + let json = JSON.parse(response); | |
| 39 | + if let isSuccess = json["iSuccess"].bool, isSuccess{ | |
| 40 | + let arrayValue = json["data"].arrayValue; | |
| 41 | + var listPerson = [Person]() | |
| 42 | + for item in arrayValue { | |
| 43 | + if let rawString = item.rawString(), let person = Mapper<Person>().map(JSONString: rawString) { | |
| 44 | + listPerson.append(person); | |
| 45 | + } | |
| 46 | + } | |
| 47 | + CommonUtils.excuteOnMainThread({ | |
| 48 | + complete(listPerson) | |
| 49 | + }) | |
| 50 | + return true; | |
| 51 | + } else { | |
| 52 | + CommonUtils.excuteOnMainThread({ | |
| 53 | + complete(nil) | |
| 54 | + }) | |
| 55 | + return false; | |
| 56 | + } | |
| 57 | + }); | |
| 31 | 58 | } |
| 59 | + | |
| 60 | + func jsonToString(_ json: Any?) -> String? { | |
| 61 | + do { | |
| 62 | + let data1 = try JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted) // first of all convert json to the data | |
| 63 | + let convertedString = String(data: data1, encoding: String.Encoding.utf8) // the data will be converted to the string | |
| 64 | + return convertedString; | |
| 65 | + | |
| 66 | + } catch let myJSONError { | |
| 67 | + return nil; | |
| 68 | + } | |
| 69 | + | |
| 70 | + } | |
| 71 | + | |
| 32 | 72 | func getAllCell() -> [BaseCell] { |
| 33 | 73 | var baseCells: [BaseCell] = [BaseCell](); |
| 34 | - baseCells.append(BaseCell(type: 0, identifier: "Cell")) | |
| 74 | + baseCells.append(BaseCell(type: 0, identifier: "CellPerson")) | |
| 35 | 75 | return baseCells |
| 36 | 76 | } |
| 37 | 77 | |
| 38 | 78 | func getTypeOfData(baseobj: Any) -> Int { |
| 39 | 79 | return 0 |
| 40 | 80 | } |
| 81 | + | |
| 41 | 82 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| 42 | 83 | } |
| 43 | 84 | |
| 44 | 85 | |
| 45 | - override var prefersStatusBarHidden : Bool { | |
| 86 | + override var prefersStatusBarHidden: Bool { | |
| 46 | 87 | return true |
| 47 | 88 | } |
| 48 | 89 | } |
App/camera/ConfirmViewController/MyConfirmViewController.swift
| ... | ... | @@ -42,25 +42,23 @@ |
| 42 | 42 | } |
| 43 | 43 | |
| 44 | 44 | fileprivate func configUserData() { |
| 45 | - vBoard = Board() | |
| 46 | - vBoard.translatesAutoresizingMaskIntoConstraints = false | |
| 47 | - self.view.insertSubview(vBoard, at: 1) | |
| 48 | - NSLayoutConstraint.activate([vBoard.topAnchor.constraint(equalTo: view.topAnchor), | |
| 49 | - vBoard.leftAnchor.constraint(equalTo: view.leftAnchor), | |
| 50 | - vBoard.rightAnchor.constraint(equalTo: view.rightAnchor), | |
| 51 | - vBoard.bottomAnchor.constraint(equalTo: view.bottomAnchor)]) | |
| 52 | - vBoard.initData() | |
| 53 | - | |
| 54 | - //TODO | |
| 55 | -// if let boardObj = userData as? BoardObj { | |
| 56 | -// | |
| 57 | -// } | |
| 45 | + if let boardObj = userData as? BoardObj, let shootItem = boardObj.shootItem, let ctruong = boardObj.cTruong, let singboard = ctruong.signboard { | |
| 46 | + if (singboard > 0) { | |
| 47 | + vBoard = Board() | |
| 48 | + vBoard.translatesAutoresizingMaskIntoConstraints = false | |
| 49 | + self.view.insertSubview(vBoard, at: 1) | |
| 50 | + NSLayoutConstraint.activate([vBoard.topAnchor.constraint(equalTo: view.topAnchor), | |
| 51 | + vBoard.leftAnchor.constraint(equalTo: view.leftAnchor), | |
| 52 | + vBoard.rightAnchor.constraint(equalTo: view.rightAnchor), | |
| 53 | + vBoard.bottomAnchor.constraint(equalTo: view.bottomAnchor)]) | |
| 54 | + vBoard.initData(ctruong: ctruong, shootItem: shootItem); | |
| 55 | + } | |
| 56 | + } | |
| 58 | 57 | } |
| 59 | 58 | |
| 60 | 59 | public override func viewWillLayoutSubviews() { |
| 61 | 60 | super.viewWillLayoutSubviews() |
| 62 | 61 | imageView.frame = view.frame |
| 63 | -// vBoard?.frame = view.frame | |
| 64 | 62 | } |
| 65 | 63 | |
| 66 | 64 | //region utils ======== |
| 67 | 65 | |
| ... | ... | @@ -152,6 +150,12 @@ |
| 152 | 150 | } |
| 153 | 151 | |
| 154 | 152 | public class BoardObj { |
| 153 | + var cTruong: CongTruong?; | |
| 154 | + var shootItem: ShootItem?; | |
| 155 | 155 | |
| 156 | + init(cTruong: CongTruong?, shootItem: ShootItem?) { | |
| 157 | + self.cTruong = cTruong; | |
| 158 | + self.shootItem = shootItem; | |
| 159 | + } | |
| 156 | 160 | } |
App/camera/board/Board.swift
| ... | ... | @@ -6,7 +6,12 @@ |
| 6 | 6 | @IBOutlet weak var vRoot: UIView! |
| 7 | 7 | @IBOutlet weak var tvDate: UILabel! |
| 8 | 8 | @IBOutlet weak var tvNote: UILabel! |
| 9 | + @IBOutlet weak var tenCtruong: UILabel! | |
| 10 | + @IBOutlet weak var tvShootItem: UILabel! | |
| 11 | + @IBOutlet weak var tvCompanyName: UILabel! | |
| 9 | 12 | |
| 13 | + var shootItem: ShootItem?; | |
| 14 | + var isReadOnly: Bool = false; | |
| 10 | 15 | override init(frame: CGRect) { |
| 11 | 16 | super.init(frame: frame) |
| 12 | 17 | xibSetup() |
| 13 | 18 | |
| ... | ... | @@ -27,9 +32,25 @@ |
| 27 | 32 | } |
| 28 | 33 | } |
| 29 | 34 | |
| 30 | - func initData() { | |
| 31 | - let date = Date() | |
| 35 | + func initData(ctruong: CongTruong, shootItem: ShootItem, imgObj: ImgObj? = nil) { | |
| 36 | + self.shootItem = shootItem; | |
| 37 | + if imgObj != nil { | |
| 38 | + isReadOnly = true; | |
| 39 | + } | |
| 40 | + var date: Date!; | |
| 41 | + if let dateSave = imgObj?.date, dateSave > 0 { | |
| 42 | + date = DataTypeUtils.getDateFromTimeSecond(timeSeconds: Double(dateSave)); | |
| 43 | + } else { | |
| 44 | + date = Date() | |
| 45 | + } | |
| 32 | 46 | setDate(date: date) |
| 47 | + | |
| 48 | + tenCtruong.text = ctruong.constructionName | |
| 49 | + tvCompanyName.text = ctruong.companyName; | |
| 50 | + tvShootItem.text = shootItem.name; | |
| 51 | + if let note = imgObj?.note { | |
| 52 | + tvNote.text = note; | |
| 53 | + } | |
| 33 | 54 | } |
| 34 | 55 | |
| 35 | 56 | private func setDate(date: Date) { |
| 36 | 57 | |
| 37 | 58 | |
| ... | ... | @@ -37,13 +58,19 @@ |
| 37 | 58 | dateFormatter.dateFormat = "MMM d, yyyy" |
| 38 | 59 | dateFormatter.locale = Locale(identifier: "ja_JP") |
| 39 | 60 | tvDate.text = dateFormatter.string(from: date) |
| 61 | + self.shootItem?.date = DataTypeUtils.getCurrentTimeSecond(date: date); | |
| 40 | 62 | } |
| 41 | 63 | |
| 42 | 64 | @IBAction func noteClick(_ sender: Any) { |
| 65 | + if isReadOnly { | |
| 66 | + return; | |
| 67 | + } | |
| 43 | 68 | let dialog = DialogUtils.builderDialog(showCloseButton: false, showTitle: false) |
| 44 | 69 | let edt = dialog.addTextField() |
| 45 | 70 | dialog.addButton(LocalizedString("OK"), action: { |
| 46 | - self.tvNote.text = " " + (edt.text ?? "") | |
| 71 | + let node = (edt.text ?? ""); | |
| 72 | + self.shootItem?.note = node | |
| 73 | + self.tvNote.text = " " + node; | |
| 47 | 74 | }) |
| 48 | 75 | dialog.showTitle("", subTitle: "備考", style: .edit) |
| 49 | 76 | edt.becomeFirstResponder() |
| ... | ... | @@ -51,11 +78,10 @@ |
| 51 | 78 | |
| 52 | 79 | @IBAction func dateClick(_ sender: Any) { |
| 53 | 80 | DatePickerDialog().show("撮影日", datePickerMode: .date, callback: { date in |
| 54 | - if let date = date { | |
| 55 | - self.setDate(date: date) | |
| 56 | - //TODO | |
| 57 | - } | |
| 58 | - }) | |
| 81 | + if let date = date { | |
| 82 | + self.setDate(date: date) | |
| 83 | + } | |
| 84 | + }) | |
| 59 | 85 | } |
| 60 | 86 | |
| 61 | 87 | func scale() { |
App/camera/board/Board.xib
| ... | ... | @@ -10,8 +10,11 @@ |
| 10 | 10 | <objects> |
| 11 | 11 | <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="Board" customModule="App" customModuleProvider="target"> |
| 12 | 12 | <connections> |
| 13 | + <outlet property="tenCtruong" destination="Opz-gX-las" id="FQ4-hh-KFx"/> | |
| 14 | + <outlet property="tvCompanyName" destination="gjw-ZI-udI" id="IXK-lI-s5W"/> | |
| 13 | 15 | <outlet property="tvDate" destination="jej-JA-xdR" id="qmC-4q-Zfe"/> |
| 14 | 16 | <outlet property="tvNote" destination="9gR-gg-DJg" id="afM-4w-6Ma"/> |
| 17 | + <outlet property="tvShootItem" destination="oUA-qo-531" id="hva-sN-e1b"/> | |
| 15 | 18 | <outlet property="vRoot" destination="06q-TN-AUr" id="MTh-qQ-qmq"/> |
| 16 | 19 | </connections> |
| 17 | 20 | </placeholder> |
App/commons/CellMucChupWithCamera.swift
| ... | ... | @@ -49,24 +49,29 @@ |
| 49 | 49 | } |
| 50 | 50 | |
| 51 | 51 | func titleClick() { |
| 52 | - guard let viewController = self.viewController else { return } | |
| 53 | - if viewController is VCConfirmMucDaChon { return } | |
| 52 | + guard let viewController = self.viewController as? VCShootItemList else { return } | |
| 53 | + let cTruong = viewController.cTruong; | |
| 54 | 54 | if let imgs = shootItem.imgs, imgs.count > 0 { |
| 55 | - VCPageImgs.openController(viewController, imgObjs: imgs) | |
| 55 | + VCPageImgs.openController(viewController, imgObjs: imgs, cTruong: cTruong!, shootItem: self.shootItem); | |
| 56 | 56 | } |
| 57 | 57 | } |
| 58 | 58 | |
| 59 | 59 | func btnImvClick() { |
| 60 | - guard let viewController = self.viewController else { return } | |
| 61 | - if viewController is VCConfirmMucDaChon { return } | |
| 62 | - let cameraViewController = CameraViewController(croppingEnabled: false, allowsLibraryAccess: true) { image, asset in | |
| 60 | + guard let viewController = self.viewController as? VCShootItemList else { return } | |
| 61 | +// if let imgs = shootItem.imgs, imgs.count > 0 { | |
| 62 | +// DialogUtils.showQuestion(titleParam: <#T##String?##Swift.String?#>, messageParam: <#T##String?##Swift.String?#>, type: <#T##TypeDialog##GeneralUtils.TypeDialog#>, yesTitle: <#T##String##Swift.String#>, noTitle: <#T##String##Swift.String#>, yesAction: <#T##@escaping () -> Void##@escaping () -> Swift.Void#>) | |
| 63 | +// } | |
| 64 | + let cTruong = viewController.cTruong; | |
| 65 | + let userData = BoardObj(cTruong: cTruong, shootItem: self.shootItem); | |
| 66 | + | |
| 67 | + let cameraViewController = CameraViewController(croppingEnabled: false, allowsLibraryAccess: true, userData: userData) { image, asset in | |
| 63 | 68 | viewController.dismiss(animated: true, completion: nil) |
| 64 | 69 | guard let image = image else { return } |
| 65 | 70 | self.imv?.image = image |
| 66 | 71 | guard let id = self.shootItem.id, let data = UIImageJPEGRepresentation(image, 1.0) else { return } |
| 67 | 72 | let signboard = self.shootItem?.signboard ?? 1 |
| 68 | 73 | |
| 69 | - self.uploadImage(id: id, signboard: signboard, data: data) | |
| 74 | + self.uploadImage(id: id, signboard: signboard, date: self.shootItem?.date, note: self.shootItem.note, data: data) | |
| 70 | 75 | } |
| 71 | 76 | |
| 72 | 77 | viewController.present(cameraViewController, animated: true, completion: nil) |
| 73 | 78 | |
| 74 | 79 | |
| 75 | 80 | |
| 76 | 81 | |
| ... | ... | @@ -84,27 +89,33 @@ |
| 84 | 89 | } |
| 85 | 90 | |
| 86 | 91 | //region upload ======= |
| 87 | - fileprivate func uploadImage(id: Int, signboard: Int, data: Data) { | |
| 92 | + //TODO: Them 2 field date: String, note: String? | |
| 93 | + fileprivate func uploadImage(id: Int, signboard: Int, date: Double?, note: String?, data: Data) { | |
| 88 | 94 | let tvProgress = SwiftOverlays.showBlockingWaitOverlayWithText(LocalizedString("Uploading") + ".....") |
| 89 | 95 | Alamofire.upload(multipartFormData: { (multipartFormData: MultipartFormData) in |
| 90 | 96 | multipartFormData.append(data, withName: "file", fileName: "file_\(DataTypeUtils.getCurrentTimeSecond()).jpg", mimeType: "image/jpeg") |
| 91 | 97 | multipartFormData.append("\(id)".data(using: String.Encoding.utf8)!, withName: "idShooting") |
| 92 | 98 | multipartFormData.append("\(signboard)".data(using: String.Encoding.utf8)!, withName: "signboard") |
| 93 | -// if let note = self.shootItem. { | |
| 94 | -//multipartFormData.append("\(note)".data(using: String.Encoding.utf8)!, withName: "note") | |
| 95 | -// } | |
| 99 | + if let note = note { | |
| 100 | + multipartFormData.append(note.data(using: String.Encoding.utf8)!, withName: "note") | |
| 101 | + } | |
| 102 | + if let date = date { | |
| 103 | + let dateInt = Int(date) | |
| 104 | + println("Upload: date: \(dateInt)") | |
| 105 | + multipartFormData.append("\(dateInt)".data(using: String.Encoding.utf8)!, withName: "date") | |
| 106 | + } | |
| 96 | 107 | }, to: Constants.PathManager.ROOT_SERVER + "api/board/store", method: .post, encodingCompletion: { (encodingResult: SessionManager.MultipartFormDataEncodingResult) in |
| 97 | 108 | switch encodingResult { |
| 98 | 109 | case .success(let upload, _, _): |
| 99 | 110 | upload.uploadProgress(closure: { progress in |
| 100 | - CommonUtils.excuteOnMainThread({tvProgress.text = (LocalizedString("Uploading") + " \(Int(progress.fractionCompleted * 100))%")}) | |
| 111 | + CommonUtils.excuteOnMainThread({ tvProgress.text = (LocalizedString("Uploading") + " \(Int(progress.fractionCompleted * 100))%") }) | |
| 101 | 112 | }) |
| 102 | 113 | .responseString { response in |
| 103 | 114 | SwiftOverlays.removeAllBlockingOverlays() |
| 104 | 115 | debugPrint("SUCCESS RESPONSE: \(response.result.value)") |
| 105 | - if let value = response.result.value{ | |
| 116 | + if let value = response.result.value { | |
| 106 | 117 | let json = JSON.parse(value) |
| 107 | - if let isSuccess = json["isSuccess"].bool, isSuccess, let url = json["url"].string{ | |
| 118 | + if let isSuccess = json["isSuccess"].bool, isSuccess, let url = json["url"].string { | |
| 108 | 119 | self.shootItem.addImg(img: ImgObj(url: url, signboard: signboard, date: nil, note: nil)) |
| 109 | 120 | CommonUtils.showToastLong(text: LocalizedString("successful")) |
| 110 | 121 | return |
| ... | ... | @@ -119,7 +130,7 @@ |
| 119 | 130 | } |
| 120 | 131 | }) |
| 121 | 132 | } |
| 122 | - | |
| 133 | + | |
| 123 | 134 | fileprivate func handleError() { |
| 124 | 135 | //DialogUtils.showQuestion(messageParam: <#T##String?##Swift.String?#>, yesAction: <#T##@escaping () -> Void##@escaping () -> Swift.Void#>) |
| 125 | 136 | } |
App/createNew/VCChonMucChup.swift
| ... | ... | @@ -5,12 +5,19 @@ |
| 5 | 5 | @IBOutlet weak var topMargin: NSLayoutConstraint! |
| 6 | 6 | @IBOutlet weak var tableView: UITableViewLoadDataFromUIThread! |
| 7 | 7 | @IBOutlet weak var vTopLogo: VTopLogo! |
| 8 | + @IBOutlet weak var btnNext: UIButtonCustomGradientBg! | |
| 9 | + var cTruong: CongTruong? | |
| 8 | 10 | |
| 9 | 11 | static func getInstance() -> VCChonMucChup { |
| 10 | 12 | let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) |
| 11 | 13 | let vcOpen = storyboard.instantiateViewController(withIdentifier: "VCChonMucChup") as! VCChonMucChup |
| 12 | 14 | return vcOpen |
| 13 | 15 | } |
| 16 | + static func openControllerFromEdit(_ viewController: UIViewController, cTruong: CongTruong?) { | |
| 17 | + let vcOpen = getInstance() | |
| 18 | + vcOpen.cTruong = cTruong; | |
| 19 | + viewController.present(vcOpen, animated: true, completion: nil) | |
| 20 | + } | |
| 14 | 21 | |
| 15 | 22 | override func viewDidLoad() { |
| 16 | 23 | super.viewDidLoad() |
| ... | ... | @@ -22,6 +29,9 @@ |
| 22 | 29 | self.tableView.separatorStyle = UITableViewCellSeparatorStyle.singleLine |
| 23 | 30 | self.tableView.rowHeight = UITableViewAutomaticDimension |
| 24 | 31 | self.tableView.estimatedRowHeight = 150 |
| 32 | + if self.cTruong != nil { | |
| 33 | + btnNext.isHidden = true; | |
| 34 | + } | |
| 25 | 35 | } |
| 26 | 36 | |
| 27 | 37 | override func viewWillAppear(_ animated: Bool) { |
| 28 | 38 | |
| ... | ... | @@ -34,13 +44,21 @@ |
| 34 | 44 | } |
| 35 | 45 | |
| 36 | 46 | @IBAction func btnLeftClick(_ sender: Any) { |
| 37 | - _ = getVcRoot()?.changeCurrentController(VCNhapMucChup.getInstance()) | |
| 47 | + if self.cTruong != nil { | |
| 48 | + dismiss(animated: true) | |
| 49 | + } else { | |
| 50 | + _ = getVcRoot()?.changeCurrentController(VCNhapMucChup.getInstance()) | |
| 51 | + } | |
| 38 | 52 | } |
| 39 | 53 | |
| 40 | 54 | //region ============== TableView Data ========= |
| 41 | 55 | |
| 42 | 56 | func loadDataOnUI(complete: @escaping ([Any]?) -> ()) { |
| 43 | - complete(getVcRoot()?.mucChups) | |
| 57 | + if let cTruong = self.cTruong { | |
| 58 | + complete(cTruong.shootItems); | |
| 59 | + } else { | |
| 60 | + complete(getVcRoot()?.mucChups) | |
| 61 | + } | |
| 44 | 62 | } |
| 45 | 63 | |
| 46 | 64 | func getAllCell() -> [BaseCell] { |
| ... | ... | @@ -68,6 +86,13 @@ |
| 68 | 86 | |
| 69 | 87 | func getVcRoot() -> VCRootCreateNew? { |
| 70 | 88 | return self.parent as? VCRootCreateNew |
| 89 | + } | |
| 90 | + override var prefersStatusBarHidden: Bool { | |
| 91 | + return true | |
| 92 | + } | |
| 93 | + | |
| 94 | + override open var supportedInterfaceOrientations: UIInterfaceOrientationMask { | |
| 95 | + return UIInterfaceOrientationMask.portrait | |
| 71 | 96 | } |
| 72 | 97 | } |
App/createNew/VCConfirmMucDaChon.swift
| ... | ... | @@ -17,7 +17,7 @@ |
| 17 | 17 | vTopLogo.leftBtnClick = { |
| 18 | 18 | self.btnLeftClick(self.vTopLogo) |
| 19 | 19 | } |
| 20 | - tableView.emptyText = "Empty" | |
| 20 | + tableView.emptyText = LocalizedString("list_empty") | |
| 21 | 21 | CellMucChupWithCamera.registerClass(tableView: tableView, forCellReuseIdentifier: "CellMucChupWithCamera") |
| 22 | 22 | self.tableView.separatorStyle = UITableViewCellSeparatorStyle.singleLine |
| 23 | 23 | self.tableView.allowsSelection = false |
App/createNew/VCNhapMucChup.swift
| ... | ... | @@ -6,13 +6,22 @@ |
| 6 | 6 | @IBOutlet weak var topMargin: NSLayoutConstraint! |
| 7 | 7 | @IBOutlet weak var tableView: UITableViewLoadDataFromUIThread! |
| 8 | 8 | @IBOutlet weak var vTopLogo: VTopLogo! |
| 9 | + @IBOutlet weak var btnNext: UIButtonCustomGradientBg! | |
| 9 | 10 | |
| 11 | + var cTruong: CongTruong? | |
| 12 | + | |
| 10 | 13 | static func getInstance() -> VCNhapMucChup { |
| 11 | 14 | let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) |
| 12 | 15 | let vcOpen = storyboard.instantiateViewController(withIdentifier: "VCNhapMucChup") as! VCNhapMucChup |
| 13 | 16 | return vcOpen |
| 14 | 17 | } |
| 15 | 18 | |
| 19 | + static func openControllerFromEdit(_ viewController: UIViewController, cTruong: CongTruong?) { | |
| 20 | + let vcOpen = getInstance() | |
| 21 | + vcOpen.cTruong = cTruong; | |
| 22 | + viewController.present(vcOpen, animated: true, completion: nil) | |
| 23 | + } | |
| 24 | + | |
| 16 | 25 | override func viewDidLoad() { |
| 17 | 26 | super.viewDidLoad() |
| 18 | 27 | vTopLogo.leftBtnClick = { |
| ... | ... | @@ -23,6 +32,9 @@ |
| 23 | 32 | self.tableView.separatorStyle = UITableViewCellSeparatorStyle.singleLine |
| 24 | 33 | self.tableView.rowHeight = UITableViewAutomaticDimension |
| 25 | 34 | self.tableView.estimatedRowHeight = 150 |
| 35 | + if self.cTruong != nil { | |
| 36 | + btnNext.isHidden = true; | |
| 37 | + } | |
| 26 | 38 | } |
| 27 | 39 | |
| 28 | 40 | override func viewWillAppear(_ animated: Bool) { |
| ... | ... | @@ -54,7 +66,11 @@ |
| 54 | 66 | |
| 55 | 67 | @IBAction func btnLeftClick(_ sender: Any) { |
| 56 | 68 | saveMucChup() |
| 57 | - _ = getVcRoot()?.changeCurrentController(VCNhapTenCtruong.getInstance()) | |
| 69 | + if self.cTruong != nil { | |
| 70 | + dismiss(animated: true) | |
| 71 | + } else { | |
| 72 | + _ = getVcRoot()?.changeCurrentController(VCNhapTenCtruong.getInstance()) | |
| 73 | + } | |
| 58 | 74 | } |
| 59 | 75 | |
| 60 | 76 | private func saveMucChup() { |
| 61 | 77 | |
| ... | ... | @@ -64,12 +80,20 @@ |
| 64 | 80 | mucChups.append(mucChup) |
| 65 | 81 | } |
| 66 | 82 | } |
| 67 | - getVcRoot()?.mucChups = mucChups | |
| 83 | + if let cTruong = self.cTruong { | |
| 84 | + cTruong.shootItems = mucChups; | |
| 85 | + } else { | |
| 86 | + getVcRoot()?.mucChups = mucChups | |
| 87 | + } | |
| 68 | 88 | } |
| 69 | 89 | //region ============== TableView Data ========= |
| 70 | 90 | |
| 71 | 91 | func loadDataOnUI(complete: @escaping ([Any]?) -> ()) { |
| 72 | - complete(getVcRoot()?.mucChups) | |
| 92 | + if let cTruong = self.cTruong { | |
| 93 | + complete(cTruong.shootItems); | |
| 94 | + } else { | |
| 95 | + complete(getVcRoot()?.mucChups) | |
| 96 | + } | |
| 73 | 97 | } |
| 74 | 98 | |
| 75 | 99 | func getAllCell() -> [BaseCell] { |
| ... | ... | @@ -111,6 +135,13 @@ |
| 111 | 135 | |
| 112 | 136 | func getVcRoot() -> VCRootCreateNew? { |
| 113 | 137 | return self.parent as? VCRootCreateNew |
| 138 | + } | |
| 139 | + override var prefersStatusBarHidden: Bool { | |
| 140 | + return true | |
| 141 | + } | |
| 142 | + | |
| 143 | + override open var supportedInterfaceOrientations: UIInterfaceOrientationMask { | |
| 144 | + return UIInterfaceOrientationMask.portrait | |
| 114 | 145 | } |
| 115 | 146 | } |
App/firstInput/VCNoiDungTraoDoi.swift
| 1 | 1 | import UIKit |
| 2 | +import GeneralUtils | |
| 2 | 3 | |
| 3 | 4 | class VCNoiDungTraoDoi: UIViewController { |
| 5 | + @IBOutlet weak var vTopLogo: VTopLogo! | |
| 6 | + @IBOutlet weak var tvId: UILabel! | |
| 7 | + | |
| 8 | + var id: String!; | |
| 4 | 9 | |
| 5 | - static func getInstance() -> VCNoiDungTraoDoi { | |
| 10 | + static func getInstance(id: String) -> VCNoiDungTraoDoi { | |
| 6 | 11 | let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) |
| 7 | 12 | let vcOpen = storyboard.instantiateViewController(withIdentifier: "VCNoiDungTraoDoi") as! VCNoiDungTraoDoi |
| 13 | + vcOpen.id = id; | |
| 8 | 14 | return vcOpen |
| 9 | 15 | } |
| 10 | 16 | |
| 11 | 17 | override func viewDidLoad() { |
| 12 | 18 | super.viewDidLoad() |
| 19 | + vTopLogo.leftBtnClick = { | |
| 20 | + self.btnBackToTopClick(self.vTopLogo); | |
| 21 | + } | |
| 22 | + tvId.text = id; | |
| 13 | 23 | } |
| 14 | 24 | |
| 15 | 25 | @IBAction func btnBackToTopClick(_ sender: Any) { |
| 16 | - _ = getVcRoot()?.changeCurrentController(VCInputId.getInstance()) | |
| 26 | + PreferenceUtils.saveString(key: Constants.PreferenceKeys.ID, value: id) | |
| 27 | + _ = getVcRoot()?.changeCurrentController(VCHome.getInstance()) | |
| 17 | 28 | } |
| 18 | 29 | |
| 19 | 30 | func getVcRoot() -> VCRoot? { |
App/firstInput/VCSendTraoDoi.swift
| 1 | 1 | import UIKit |
| 2 | 2 | import GeneralUtils |
| 3 | +import Alamofire | |
| 3 | 4 | |
| 4 | 5 | class VCSendTraoDoi: UIViewController { |
| 5 | 6 | @IBOutlet weak var edtTenCty: UITextField! |
| 6 | 7 | @IBOutlet weak var edtPhone: UITextField! |
| 7 | - @IBOutlet weak var edtAdress: UITextField! | |
| 8 | - @IBOutlet weak var edtContent: UITextViewCustom! | |
| 9 | - | |
| 8 | + @IBOutlet weak var edtAdress: UITextViewCustom! | |
| 9 | + @IBOutlet weak var vTopLogo: VTopLogo! | |
| 10 | + | |
| 10 | 11 | static func getInstance() -> VCSendTraoDoi { |
| 11 | 12 | let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) |
| 12 | 13 | let vcOpen = storyboard.instantiateViewController(withIdentifier: "VCSendTraoDoi") as! VCSendTraoDoi |
| ... | ... | @@ -16,7 +17,10 @@ |
| 16 | 17 | override func viewDidLoad() { |
| 17 | 18 | super.viewDidLoad() |
| 18 | 19 | // registerKeyBoardEvent() |
| 19 | - addInputAccessoryForTextFields([edtTenCty, edtPhone, edtAdress, edtContent], dismissable: true, previousNextable: true) | |
| 20 | + addInputAccessoryForTextFields([edtTenCty, edtPhone, edtAdress], dismissable: true, previousNextable: true) | |
| 21 | + vTopLogo.leftBtnClick = { | |
| 22 | + self.btnCancelClick(self.vTopLogo) | |
| 23 | + } | |
| 20 | 24 | } |
| 21 | 25 | |
| 22 | 26 | @IBAction func btnCancelClick(_ sender: Any) { |
| ... | ... | @@ -24,7 +28,28 @@ |
| 24 | 28 | } |
| 25 | 29 | |
| 26 | 30 | @IBAction func btnSendClick(_ sender: Any) { |
| 27 | - _ = getVcRoot()?.changeCurrentController(VCNoiDungTraoDoi.getInstance()) | |
| 31 | + let companyName = self.edtTenCty.text; | |
| 32 | + let phoneNumber = self.edtPhone.text; | |
| 33 | + let address = self.edtAdress.text; | |
| 34 | + let parameters: Parameters = [ | |
| 35 | + "companyName": companyName, | |
| 36 | + "phoneNumber": phoneNumber, | |
| 37 | + "address": address, | |
| 38 | + ] | |
| 39 | + | |
| 40 | + NetWorkUtils.excutePostTypeFormURLEncoded(parameters: parameters, url: Constants.PathManager.ROOT_SERVER + "api/worker/generate_id", | |
| 41 | + isShowProgress: true, vc: self, responseStringParam: { (response) in | |
| 42 | + guard let value = response.value else { return } | |
| 43 | + let json = JSON.parse(value) | |
| 44 | + if let isSuccess = json["iSuccess"].bool, isSuccess, let id = json["data"]["id"].string { | |
| 45 | + self.getVcRoot()?.changeCurrentController(VCNoiDungTraoDoi.getInstance(id: id)); | |
| 46 | + return | |
| 47 | + } | |
| 48 | + }) | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | +// _ = getVcRoot()?.changeCurrentController(VCNoiDungTraoDoi.getInstance()) | |
| 28 | 53 | } |
| 29 | 54 | |
| 30 | 55 | // @IBAction func edtActionTrigerClick(_ sender: Any) { |
| ... | ... | @@ -38,7 +63,7 @@ |
| 38 | 63 | func getVcRoot() -> VCRoot? { |
| 39 | 64 | return self.parent as? VCRoot |
| 40 | 65 | } |
| 41 | - | |
| 66 | + | |
| 42 | 67 | //region ======= keyboard process ==== |
| 43 | 68 | private func registerKeyBoardEvent() { |
| 44 | 69 | NotificationCenter.default.setObserver(self, selector: #selector(VCInputId.keyboardWillShow(_:)), name: NSNotification.Name.UIKeyboardWillShow.rawValue, object: nil); |
App/listCtruong/VCListCtruong.swift
| ... | ... | @@ -43,7 +43,7 @@ |
| 43 | 43 | |
| 44 | 44 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| 45 | 45 | if let cTruong = self.tableView.getItem(indexPath) as? CongTruong { |
| 46 | - VCShootItemList.openController(self, cTruong: cTruong) | |
| 46 | + VCShootItemList.openController(self, cTruong: cTruong, tableViewListCtruong: self.tableView) | |
| 47 | 47 | } |
| 48 | 48 | } |
| 49 | 49 | //endregion |
App/listCtruong/VCPageImgs.swift
| ... | ... | @@ -4,10 +4,14 @@ |
| 4 | 4 | |
| 5 | 5 | class VCPageImgs: BasePageViewController { |
| 6 | 6 | var imgObjs: [ImgObj]! |
| 7 | - static func openController(_ viewController: UIViewController, imgObjs: [ImgObj]) { | |
| 7 | + var cTruong: CongTruong!, shootItem: ShootItem!; | |
| 8 | + | |
| 9 | + static func openController(_ viewController: UIViewController, imgObjs: [ImgObj], cTruong: CongTruong, shootItem: ShootItem) { | |
| 8 | 10 | let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) |
| 9 | 11 | let vcOpen = storyboard.instantiateViewController(withIdentifier: "VCPageImgs") as! VCPageImgs |
| 10 | 12 | vcOpen.imgObjs = imgObjs |
| 13 | + vcOpen.cTruong = cTruong; | |
| 14 | + vcOpen.shootItem = shootItem; | |
| 11 | 15 | viewController.present(vcOpen, animated: true, completion: nil) |
| 12 | 16 | } |
| 13 | 17 | |
| ... | ... | @@ -17,7 +21,7 @@ |
| 17 | 21 | } |
| 18 | 22 | |
| 19 | 23 | override func getViewControllerAtIndex(_ index: Int) -> UIViewController { |
| 20 | - let vc = VCImgItem.getInstance(imgObj: imgObjs[index]) | |
| 24 | + let vc = VCImgItem.getInstance(imgObj: imgObjs[index], cTruong: self.cTruong, shootItem: self.shootItem) | |
| 21 | 25 | vc.pageIndex = index |
| 22 | 26 | return vc |
| 23 | 27 | } |
| 24 | 28 | |
| 25 | 29 | |
| 26 | 30 | |
| 27 | 31 | |
| 28 | 32 | |
| ... | ... | @@ -41,22 +45,42 @@ |
| 41 | 45 | |
| 42 | 46 | var pageIndex: Int = 0 |
| 43 | 47 | var imgObj: ImgObj! |
| 48 | + var cTruong: CongTruong!, shootItem: ShootItem! | |
| 49 | + var vBoard: Board? | |
| 44 | 50 | |
| 45 | - static func getInstance(imgObj: ImgObj) -> VCImgItem { | |
| 51 | + static func getInstance(imgObj: ImgObj, cTruong: CongTruong, shootItem: ShootItem) -> VCImgItem { | |
| 46 | 52 | let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) |
| 47 | 53 | let vcOpen = storyboard.instantiateViewController(withIdentifier: "VCImgItem") as! VCImgItem |
| 48 | 54 | vcOpen.imgObj = imgObj |
| 55 | + vcOpen.cTruong = cTruong; | |
| 56 | + vcOpen.shootItem = shootItem; | |
| 49 | 57 | return vcOpen |
| 50 | 58 | } |
| 51 | 59 | |
| 52 | 60 | override func viewDidLoad() { |
| 53 | 61 | super.viewDidLoad() |
| 54 | 62 | setImageUrl(imv: imv, imageUrl: imgObj.url) |
| 63 | + configBoard() | |
| 55 | 64 | } |
| 56 | - | |
| 65 | + | |
| 66 | + | |
| 67 | + fileprivate func configBoard() { | |
| 68 | + if let imgObj = self.imgObj, let cTruong = self.cTruong, let singboard = imgObj.signBoard, singboard > 0 { | |
| 69 | + let vBoard = Board() | |
| 70 | + self.vBoard = vBoard; | |
| 71 | + vBoard.translatesAutoresizingMaskIntoConstraints = false | |
| 72 | + self.view.insertSubview(vBoard, at: 1) | |
| 73 | + NSLayoutConstraint.activate([vBoard.topAnchor.constraint(equalTo: view.topAnchor), | |
| 74 | + vBoard.leftAnchor.constraint(equalTo: view.leftAnchor), | |
| 75 | + vBoard.rightAnchor.constraint(equalTo: view.rightAnchor), | |
| 76 | + vBoard.bottomAnchor.constraint(equalTo: view.bottomAnchor)]) | |
| 77 | + vBoard.initData(ctruong: cTruong, shootItem: shootItem, imgObj: imgObj); | |
| 78 | + } | |
| 79 | + } | |
| 80 | + | |
| 57 | 81 | @IBAction func btnCloseClick(_ sender: Any) { |
| 58 | 82 | dismiss(animated: true) |
| 59 | 83 | } |
| 60 | - | |
| 84 | + | |
| 61 | 85 | } |
App/listCtruong/VCShootItemList.swift
| 1 | 1 | import UIKit |
| 2 | 2 | import GeneralUtils |
| 3 | +import Alamofire | |
| 3 | 4 | |
| 4 | 5 | class VCShootItemList: UIViewController, IVCLoadDataTableViewUIThread { |
| 5 | 6 | @IBOutlet weak var topMargin: NSLayoutConstraint! |
| 6 | 7 | @IBOutlet weak var tableView: UITableViewLoadDataFromUIThread! |
| 7 | 8 | @IBOutlet weak var imvLogo: UIImageView! |
| 8 | 9 | @IBOutlet weak var tvTitle: UILabel! |
| 10 | + weak var tableViewListCtruong: UITableViewLoadDataFromUIThread? | |
| 9 | 11 | |
| 10 | 12 | var cTruong: CongTruong! |
| 11 | 13 | |
| 12 | - static func openController(_ viewController: UIViewController, cTruong: CongTruong) { | |
| 14 | + static func openController(_ viewController: UIViewController, cTruong: CongTruong, tableViewListCtruong: UITableViewLoadDataFromUIThread?) { | |
| 13 | 15 | let storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) |
| 14 | 16 | let vcOpen = storyboard.instantiateViewController(withIdentifier: "VCShootItemList") as! VCShootItemList |
| 15 | 17 | vcOpen.cTruong = cTruong |
| 18 | + vcOpen.tableViewListCtruong = tableViewListCtruong; | |
| 16 | 19 | viewController.present(vcOpen, animated: true, completion: nil) |
| 17 | 20 | } |
| 18 | 21 | |
| ... | ... | @@ -30,7 +33,7 @@ |
| 30 | 33 | } |
| 31 | 34 | |
| 32 | 35 | @IBAction func btnEditClick(_ sender: Any) { |
| 33 | - VcEdit.openController(self) | |
| 36 | + VcEdit.openController(self, cTruong: self.cTruong, tableViewListCtruong: self.tableViewListCtruong, vcShootItemList: self) | |
| 34 | 37 | } |
| 35 | 38 | |
| 36 | 39 | //region ============== TableView Data ========= |
| 37 | 40 | |
| ... | ... | @@ -60,11 +63,7 @@ |
| 60 | 63 | } |
| 61 | 64 | |
| 62 | 65 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { |
| 63 | - if let mucChup = self.tableView.getItem(indexPath) as? ShootItem { | |
| 64 | - //TODO | |
| 65 | - } | |
| 66 | 66 | } |
| 67 | - | |
| 68 | 67 | //endregion |
| 69 | 68 | override var prefersStatusBarHidden: Bool { |
| 70 | 69 | return true |
| ... | ... | @@ -75,5 +74,6 @@ |
| 75 | 74 | func logoClick() { |
| 76 | 75 | dismiss(animated: true) |
| 77 | 76 | } |
| 77 | + | |
| 78 | 78 | } |
App/listCtruong/VcEdit.swift
| 1 | 1 | import UIKit |
| 2 | 2 | import Foundation |
| 3 | 3 | import GeneralUtils |
| 4 | +import Alamofire | |
| 4 | 5 | |
| 5 | 6 | class VcEdit: BaseViewControllerShowTransculent { |
| 6 | 7 | @IBOutlet weak var root: UIView! |
| 7 | 8 | |
| 8 | 9 | |
| 9 | 10 | |
| 10 | 11 | |
| 11 | 12 | |
| 12 | 13 | |
| 13 | 14 | |
| 14 | 15 | |
| 15 | 16 | |
| 16 | 17 | |
| ... | ... | @@ -9,44 +10,137 @@ |
| 9 | 10 | @IBOutlet weak var tvListShootItem: UILabel! |
| 10 | 11 | @IBOutlet weak var tvListWillShoot: UILabel! |
| 11 | 12 | @IBOutlet weak var tvSignboard: UILabel! |
| 13 | + weak var tableViewListCtruong: UITableViewLoadDataFromUIThread? | |
| 14 | + weak var vcShootItemList: VCShootItemList? | |
| 12 | 15 | |
| 13 | - static func openController(_ viewController: UIViewController) { | |
| 16 | + var cTruong: CongTruong!; | |
| 17 | + var isChangedCompany = false, isChangedConstruction = false, isChangedSignboard = false, isChangedshoot = false; | |
| 18 | + | |
| 19 | + static func openController(_ viewController: UIViewController, cTruong: CongTruong, tableViewListCtruong: UITableViewLoadDataFromUIThread?, | |
| 20 | + vcShootItemList: VCShootItemList?) { | |
| 14 | 21 | BaseViewControllerShowTransculent.showTransculent(viewController, storyboardName: "Main", viewControllerIdentifier: "VcEdit", |
| 15 | - isDismisWhenTapOutSide: true) | |
| 22 | + isDismisWhenTapOutSide: true, initBeforeLoad: { vc in | |
| 23 | + if let vc = vc as? VcEdit { | |
| 24 | + vc.cTruong = cTruong; | |
| 25 | + vc.tableViewListCtruong = tableViewListCtruong; | |
| 26 | + vc.vcShootItemList = vcShootItemList; | |
| 27 | + } | |
| 28 | + }) | |
| 16 | 29 | } |
| 17 | 30 | |
| 31 | + override func viewDidLoad() { | |
| 32 | + super.viewDidLoad() | |
| 33 | + let tap = UITapGestureRecognizer.init(target: self, action: #selector(VcEdit.bgClick)) | |
| 34 | + root.isUserInteractionEnabled = true | |
| 35 | + root.addGestureRecognizer(tap) | |
| 36 | + } | |
| 37 | + | |
| 38 | + override func viewWillAppear(_ animated: Bool) { | |
| 39 | + super.viewWillAppear(animated) | |
| 40 | + self.updateState() | |
| 41 | + } | |
| 42 | + | |
| 43 | + func updateState() { | |
| 44 | + tvTenCty.text = cTruong.companyName | |
| 45 | + tvTenCtruong.text = cTruong.constructionName | |
| 46 | + if let signboard = cTruong.signboard, signboard > 0 { | |
| 47 | + tvSignboard.text = "ON" | |
| 48 | + } else { | |
| 49 | + tvSignboard.text = "OFF" | |
| 50 | + } | |
| 51 | + tvListShootItem.text = cTruong.getShootItemsName(isWillshoot: false) | |
| 52 | + tvListWillShoot.text = cTruong.getShootItemsName(isWillshoot: true) | |
| 53 | + } | |
| 54 | + | |
| 18 | 55 | @IBAction func tvTenCtyClick(_ sender: Any) { |
| 19 | - println("tvTenCtyClick") | |
| 56 | + let dialog = DialogUtils.builderDialog(showCloseButton: false, showTitle: false) | |
| 57 | + let edt = dialog.addTextField() | |
| 58 | + edt.text = cTruong.companyName | |
| 59 | + dialog.addButton(LocalizedString("OK"), action: { | |
| 60 | + let result = (edt.text ?? ""); | |
| 61 | + self.cTruong.companyName = result; | |
| 62 | + self.isChangedCompany = true; | |
| 63 | + self.updateState(); | |
| 64 | + }) | |
| 65 | + dialog.showTitle("", subTitle: "施工会社名", style: .edit) | |
| 66 | + edt.becomeFirstResponder() | |
| 20 | 67 | } |
| 21 | 68 | |
| 22 | 69 | @IBAction func deleteClick(_ sender: Any) { |
| 23 | 70 | let dialog = DialogUtils.builderDialog() |
| 24 | 71 | dialog.addButton("消去する", action: { |
| 25 | - println("delete") | |
| 72 | + guard let id = self.cTruong.id else { return } | |
| 73 | + let parameters: Parameters = [ | |
| 74 | + "id": id, | |
| 75 | + ] | |
| 76 | + NetWorkUtils.excutePostTypeRawJSONEncoding(parameters: parameters, url: Constants.PathManager.ROOT_SERVER + "api/regulations/delete", | |
| 77 | + isShowProgress: true, vc: self, responseStringParam: { response in | |
| 78 | + guard let value = response.value else { return } | |
| 79 | + println(response.value) | |
| 80 | + let json = JSON.parse(value) | |
| 81 | + if let isSuccess = json["isSuccess"].bool, isSuccess { | |
| 82 | + guard let itemsData = self.tableViewListCtruong?.itemsData else { return } | |
| 83 | + var count = 0; | |
| 84 | + var indexFind = -1; | |
| 85 | + for e in itemsData { | |
| 86 | + if let ctr = e as? CongTruong, ObjectIdentifier(ctr) == ObjectIdentifier(self.cTruong) { | |
| 87 | + indexFind = count; | |
| 88 | + break; | |
| 89 | + } | |
| 90 | + count += 1; | |
| 91 | + } | |
| 92 | + if indexFind >= 0 { | |
| 93 | + self.tableViewListCtruong?.itemsData.remove(at: indexFind); | |
| 94 | + println("delete success: \(self.tableViewListCtruong != nil)") | |
| 95 | + self.tableViewListCtruong?.reloadDataTableView(); | |
| 96 | + self.dismiss(animated: false, completion: { | |
| 97 | + UIApplication.topViewController()?.dismiss(animated: true) | |
| 98 | + }) | |
| 99 | + } | |
| 100 | + return | |
| 101 | + } else { | |
| 102 | + CommonUtils.showToastLong(text: LocalizedString("Has_Error_occurred")) | |
| 103 | + } | |
| 104 | + }) | |
| 26 | 105 | }) |
| 27 | 106 | dialog.showTitle("リスト消去", subTitle: "リストを消去すると全ての項目が消去されます", |
| 28 | 107 | style: .warning, closeButtonTitle: "戻る") |
| 29 | 108 | } |
| 30 | 109 | |
| 31 | 110 | @IBAction func boardSettingClick(_ sender: Any) { |
| 111 | + if cTruong.signboard == 1 { | |
| 112 | + cTruong.signboard = 0 | |
| 113 | + } else { | |
| 114 | + cTruong.signboard = 1 | |
| 115 | + } | |
| 116 | + isChangedSignboard = true; | |
| 117 | + updateState() | |
| 32 | 118 | } |
| 33 | 119 | |
| 34 | 120 | @IBAction func listWillShootClick(_ sender: Any) { |
| 121 | + VCChonMucChup.openControllerFromEdit(self, cTruong: self.cTruong); | |
| 122 | + isChangedshoot = true; | |
| 35 | 123 | } |
| 36 | 124 | |
| 37 | 125 | @IBAction func listShootClick(_ sender: Any) { |
| 126 | + VCNhapMucChup.openControllerFromEdit(self, cTruong: self.cTruong); | |
| 127 | + isChangedshoot = true; | |
| 38 | 128 | } |
| 39 | 129 | |
| 40 | 130 | @IBAction func cTruongClick(_ sender: Any) { |
| 131 | + let dialog = DialogUtils.builderDialog(showCloseButton: false, showTitle: false) | |
| 132 | + let edt = dialog.addTextField() | |
| 133 | + edt.text = cTruong.constructionName | |
| 134 | + dialog.addButton(LocalizedString("OK"), action: { | |
| 135 | + let result = (edt.text ?? ""); | |
| 136 | + self.cTruong.constructionName = result; | |
| 137 | + self.isChangedConstruction = true; | |
| 138 | + self.updateState(); | |
| 139 | + }) | |
| 140 | + dialog.showTitle("", subTitle: "工事件名", style: .edit) | |
| 141 | + edt.becomeFirstResponder() | |
| 41 | 142 | } |
| 42 | 143 | |
| 43 | - override func viewDidLoad() { | |
| 44 | - super.viewDidLoad() | |
| 45 | - let tap = UITapGestureRecognizer.init(target: self, action: #selector(VcEdit.bgClick)) | |
| 46 | - root.isUserInteractionEnabled = true | |
| 47 | - root.addGestureRecognizer(tap) | |
| 48 | - } | |
| 49 | - | |
| 50 | 144 | override func getHeightContent() -> CGFloat { |
| 51 | 145 | return self.view.bounds.height |
| 52 | 146 | } |
| 53 | 147 | |
| ... | ... | @@ -55,8 +149,49 @@ |
| 55 | 149 | return true |
| 56 | 150 | } |
| 57 | 151 | |
| 152 | + @IBAction func whiteClick(_ sender: Any) { | |
| 153 | + } | |
| 154 | + | |
| 58 | 155 | func bgClick() { |
| 59 | 156 | dismiss(animated: true) |
| 157 | + guard let id = self.cTruong.id else { return } | |
| 158 | + if isChangedshoot { | |
| 159 | + if let vcShootItemList = self.vcShootItemList { | |
| 160 | + vcShootItemList.tableView.initAndLoadData(vcShootItemList) | |
| 161 | + } | |
| 162 | + var shootingItems = [Any]() | |
| 163 | + if let shootItems = cTruong.shootItems { | |
| 164 | + for item in shootItems { | |
| 165 | + shootingItems.append(item.toDic()) | |
| 166 | + } | |
| 167 | + } | |
| 168 | + | |
| 169 | + let parameters: Parameters = [ | |
| 170 | + "idRegulation": id, | |
| 171 | + "shootingItems": shootingItems | |
| 172 | + ] | |
| 173 | + NetWorkUtils.excutePostTypeRawJSONEncoding(parameters: parameters, url: Constants.PathManager.ROOT_SERVER + "api/regulations/update/shooting", | |
| 174 | + responseStringParam: { response in | |
| 175 | + }); | |
| 176 | + } | |
| 177 | + | |
| 178 | + var parameters: Parameters = [ | |
| 179 | + "id": id | |
| 180 | + ] | |
| 181 | + if isChangedConstruction || isChangedCompany || isChangedSignboard { | |
| 182 | + if isChangedConstruction{ | |
| 183 | + parameters["constructionName"] = self.cTruong.constructionName!; | |
| 184 | + } | |
| 185 | + if isChangedCompany{ | |
| 186 | + parameters["companyName"] = self.cTruong.companyName!; | |
| 187 | + } | |
| 188 | + if isChangedSignboard{ | |
| 189 | + parameters["signboard"] = self.cTruong.signboard!; | |
| 190 | + } | |
| 191 | + NetWorkUtils.excutePostTypeRawJSONEncoding(parameters: parameters, url: Constants.PathManager.ROOT_SERVER + "api/regulations/update", | |
| 192 | + responseStringParam: { response in | |
| 193 | + }); | |
| 194 | + } | |
| 60 | 195 | } |
| 61 | 196 | } |
App/model/CongTruong.swift
| ... | ... | @@ -9,17 +9,35 @@ |
| 9 | 9 | var shootItems: [ShootItem]? |
| 10 | 10 | var signboard: Int? |
| 11 | 11 | |
| 12 | + func getShootItemsName(isWillshoot: Bool) -> String? { | |
| 13 | + guard let shootItems = shootItems else { return nil } | |
| 14 | + var result = ""; | |
| 15 | + for item in shootItems { | |
| 16 | + if (isWillshoot && item.willShoot != nil && item.willShoot! > 0) || !isWillshoot { | |
| 17 | + if let name = item.name { | |
| 18 | + if result.length > 0 { result = result + ", " } | |
| 19 | + result = result + name; | |
| 20 | + } | |
| 21 | + if result.length > 100 { | |
| 22 | + return result; | |
| 23 | + } | |
| 24 | + } | |
| 25 | + } | |
| 26 | + return result; | |
| 27 | + } | |
| 28 | + | |
| 12 | 29 | // region: ========== Mappable |
| 13 | 30 | init() {} |
| 14 | 31 | required init?(map: Map) {} |
| 15 | 32 | |
| 16 | 33 | func mapping(map: Map) { |
| 34 | + id <- map["id"] | |
| 17 | 35 | companyName <- map["companyName"] |
| 18 | 36 | constructionName <- map["constructionName"] |
| 19 | 37 | noCaptured <- map["noCaptured"] |
| 20 | 38 | noRemain <- map["noRemain"] |
| 21 | 39 | shootItems <- map["shootingItems"] |
| 22 | - signboard <- map["signboard"] | |
| 40 | + signboard <- map["signBoard"] | |
| 23 | 41 | } |
| 24 | 42 | //endregion |
| 25 | 43 | } |
App/model/ImgObj.swift
| ... | ... | @@ -3,14 +3,15 @@ |
| 3 | 3 | |
| 4 | 4 | class ImgObj: Mappable { |
| 5 | 5 | var url: String? |
| 6 | - var signboard: Int? | |
| 7 | - var date: Int64? | |
| 6 | + var signBoard: Int? | |
| 7 | + var date: Int? | |
| 8 | 8 | var note: String? |
| 9 | + var dateStr: String? | |
| 9 | 10 | |
| 10 | 11 | init() {} |
| 11 | - init(url: String, signboard: Int?, date: Int64?, note: String?) { | |
| 12 | + init(url: String, signboard: Int?, date: Int?, note: String?) { | |
| 12 | 13 | self.url = url |
| 13 | - self.signboard = signboard | |
| 14 | + self.signBoard = signboard | |
| 14 | 15 | self.date = date |
| 15 | 16 | self.note = note |
| 16 | 17 | } |
| 17 | 18 | |
| ... | ... | @@ -20,9 +21,14 @@ |
| 20 | 21 | |
| 21 | 22 | func mapping(map: Map) { |
| 22 | 23 | url <- map["url"] |
| 23 | - signboard <- map["signboard"] | |
| 24 | - date <- map["date"] | |
| 24 | + signBoard <- map["signBoard"] | |
| 25 | + dateStr <- map["date"] | |
| 26 | + if let dateStr = dateStr { | |
| 27 | + self.dateStr = nil; | |
| 28 | + date = Int(dateStr); | |
| 29 | + } | |
| 25 | 30 | note <- map["note"] |
| 31 | + | |
| 26 | 32 | } |
| 27 | 33 | //endregion |
| 28 | 34 | } |
App/model/Person.swift
| 1 | +import Foundation | |
| 2 | +import GeneralUtils | |
| 3 | + | |
| 4 | +class Person: Mappable { | |
| 5 | + var id: String? | |
| 6 | + var companyName: String? | |
| 7 | + var phoneNumber: String? | |
| 8 | + var address: String? | |
| 9 | + var name: String? | |
| 10 | + | |
| 11 | + func getName() -> String? { | |
| 12 | + if let name = self.name { | |
| 13 | + return name; | |
| 14 | + } | |
| 15 | + if let companyName = self.companyName { | |
| 16 | + return companyName; | |
| 17 | + } | |
| 18 | + return id; | |
| 19 | + } | |
| 20 | + | |
| 21 | + // region: ========== Mappable | |
| 22 | + init() {} | |
| 23 | + required init?(map: Map) {} | |
| 24 | + | |
| 25 | + func mapping(map: Map) { | |
| 26 | + id <- map["id"] | |
| 27 | + companyName <- map["companyName"] | |
| 28 | + phoneNumber <- map["phoneNumber"] | |
| 29 | + address <- map["address"] | |
| 30 | + name <- map["name"] | |
| 31 | + } | |
| 32 | + //endregion | |
| 33 | +} |
App/model/ShootItem.swift
| ... | ... | @@ -7,10 +7,14 @@ |
| 7 | 7 | var willShoot: Int? |
| 8 | 8 | var signboard: Int? |
| 9 | 9 | var imgs: [ImgObj]? |
| 10 | + var date: Double? | |
| 11 | + var note: String? | |
| 12 | + var dateStr: String? | |
| 10 | 13 | |
| 11 | - init(id: Int? = nil, name: String? = nil) { | |
| 14 | + init(id: Int? = nil, name: String? = nil, willShoot: Int? = nil) { | |
| 12 | 15 | self.id = id |
| 13 | 16 | self.name = name |
| 17 | + self.willShoot = willShoot; | |
| 14 | 18 | } |
| 15 | 19 | |
| 16 | 20 | func addImg(img: ImgObj) { |
| ... | ... | @@ -18,6 +22,15 @@ |
| 18 | 22 | imgs?.append(img) |
| 19 | 23 | } |
| 20 | 24 | |
| 25 | + func toDic() -> [String: Any] { | |
| 26 | + var willShoot = (self.willShoot == nil) ? 0 : 1 | |
| 27 | + var params: [String: Any] = ["name": name!, "willShoot": willShoot]; | |
| 28 | + if let id = self.id { | |
| 29 | + params["id"] = id; | |
| 30 | + } | |
| 31 | + return params; | |
| 32 | + } | |
| 33 | + | |
| 21 | 34 | // region: ========== Mappable |
| 22 | 35 | init() {} |
| 23 | 36 | required init?(map: Map) {} |
| ... | ... | @@ -27,6 +40,11 @@ |
| 27 | 40 | name <- map["name"] |
| 28 | 41 | willShoot <- map["willShoot"] |
| 29 | 42 | imgs <- map["imgs"] |
| 43 | + dateStr <- map["date"] | |
| 44 | + if let dateStr = dateStr { | |
| 45 | + date = Double(dateStr); | |
| 46 | + } | |
| 47 | + note <- map["note"] | |
| 30 | 48 | } |
| 31 | 49 | //endregion |
| 32 | 50 | } |
App/utils/AppUtils.swift
| 1 | 1 | // |
| 2 | -// Created by Philip Tran on 2/26/17. | |
| 3 | -// | |
| 4 | - | |
| 2 | +import GeneralUtils | |
| 5 | 3 | import Foundation |
| 6 | 4 | |
| 7 | 5 | class AppUtils { |
| 8 | 6 | |
| 9 | 7 | |
| 10 | 8 | |
| ... | ... | @@ -9,28 +7,17 @@ |
| 9 | 7 | static func getListCtruong() -> [CongTruong] { |
| 10 | 8 | var result = [CongTruong]() |
| 11 | 9 | |
| 10 | + | |
| 12 | 11 | var shootItems = [ShootItem]() |
| 13 | - shootItems.append(ShootItem(id: nil, name: "外観下塗り")) | |
| 14 | - shootItems.append(ShootItem(id: nil, name: "仕上げ")) | |
| 12 | + shootItems.append(ShootItem(id: 7, name: "1", willShoot: 0)) | |
| 13 | + shootItems.append(ShootItem(id: 6, name: "2", willShoot: 1)) | |
| 15 | 14 | |
| 16 | 15 | var ctruong = CongTruong() |
| 17 | - ctruong.companyName = "山田 花子様" | |
| 18 | - ctruong.noCaptured = 1 | |
| 19 | - ctruong.noRemain = 4 | |
| 20 | - ctruong.shootItems = shootItems | |
| 21 | - result.append(ctruong) | |
| 22 | - | |
| 23 | - ctruong = CongTruong() | |
| 24 | - ctruong.companyName = "鈴木 一郎様" | |
| 25 | - ctruong.noCaptured = 12 | |
| 26 | - ctruong.noRemain = 1 | |
| 27 | - ctruong.shootItems = shootItems | |
| 28 | - result.append(ctruong) | |
| 29 | - | |
| 30 | - ctruong = CongTruong() | |
| 31 | - ctruong.companyName = "斎藤 太郎様" | |
| 16 | + ctruong.companyName = "company1" | |
| 17 | + ctruong.constructionName = "ctruong1"; | |
| 32 | 18 | ctruong.noCaptured = 0 |
| 33 | - ctruong.noRemain = 24 | |
| 19 | + ctruong.noRemain = 2 | |
| 20 | + ctruong.signboard = 0; | |
| 34 | 21 | ctruong.shootItems = shootItems |
| 35 | 22 | result.append(ctruong) |
| 36 | 23 |
App/utils/NetWorkUtils.swift
| ... | ... | @@ -7,9 +7,14 @@ |
| 7 | 7 | /** |
| 8 | 8 | The JSONEncoding type creates a JSON representation of the parameters object, which is set as the HTTP body of the request. The Content-Type HTTP header field of an encoded request is set to application/json. |
| 9 | 9 | |
| 10 | + import Alamofire | |
| 11 | + let parameters: Parameters = [ | |
| 12 | + "idWorker": getIDWork(), | |
| 13 | + "signboard": signboard == 1, | |
| 14 | + ] | |
| 10 | 15 | */ |
| 11 | 16 | public static func excutePostTypeRawJSONEncoding(parameters: Parameters, url: String, isShowProgress: Bool? = nil, vc: UIViewController? = nil, |
| 12 | - responseStringParam: @escaping (DataResponse<String>) -> Void) { | |
| 17 | + responseStringParam: (@escaping (DataResponse<String>) -> Void)) { | |
| 13 | 18 | NetWorkUtils.excutePost(parameters: parameters, url: url, isShowProgress: isShowProgress, vc: vc, encoding: JSONEncoding.default, responseStringParam: responseStringParam) |
| 14 | 19 | } |
| 15 | 20 | |
| 16 | 21 | |
| 17 | 22 | |
| 18 | 23 | |
| ... | ... | @@ -19,17 +24,20 @@ |
| 19 | 24 | } |
| 20 | 25 | |
| 21 | 26 | public static func excutePostTypePropertyListEncoding(parameters: Parameters, url: String, isShowProgress: Bool? = nil, vc: UIViewController? = nil, |
| 22 | - responseStringParam: @escaping (DataResponse<String>) -> Void) { | |
| 27 | + responseStringParam: @escaping (DataResponse<String>) -> Void) { | |
| 23 | 28 | NetWorkUtils.excutePost(parameters: parameters, url: url, isShowProgress: isShowProgress, vc: vc, encoding: PropertyListEncoding.default, responseStringParam: responseStringParam) |
| 24 | 29 | } |
| 25 | 30 | |
| 26 | 31 | public static func excutePost(parameters: Parameters, url: String, isShowProgress: Bool? = nil, vc: UIViewController? = nil, encoding: ParameterEncoding, |
| 27 | - responseStringParam: @escaping (DataResponse<String>) -> Void) { | |
| 32 | + responseStringParam: @escaping (DataResponse<String>) -> Void) { | |
| 28 | 33 | if isShowProgress == true { |
| 29 | 34 | vc?.showWaitOverlay(isBlockTouch: true) |
| 30 | 35 | } |
| 36 | + println("excutePost: " + url) | |
| 37 | + println(parameters) | |
| 31 | 38 | Alamofire.request(url, method: .post, parameters: parameters, encoding: encoding) |
| 32 | 39 | .responseString { response in |
| 40 | + println(response.value) | |
| 33 | 41 | if isShowProgress == true { |
| 34 | 42 | vc?.removeAllOverlays() |
| 35 | 43 | } |
GeneralUtils/GeneralUtils/commonUtils/DataTypeUtils.swift
| ... | ... | @@ -7,8 +7,15 @@ |
| 7 | 7 | return NSDate().timeIntervalSince1970 * 1000 |
| 8 | 8 | } |
| 9 | 9 | |
| 10 | - public static func getCurrentTimeSecond() -> Double { | |
| 10 | + public static func getCurrentTimeSecond(date: Date? = nil) -> Double { | |
| 11 | + if let date = date { | |
| 12 | + return date.timeIntervalSince1970; | |
| 13 | + } | |
| 11 | 14 | return NSDate().timeIntervalSince1970 |
| 15 | + } | |
| 16 | + | |
| 17 | + public static func getDateFromTimeSecond(timeSeconds: Double) -> Date { | |
| 18 | + return Date(timeIntervalSince1970: timeSeconds); | |
| 12 | 19 | } |
| 13 | 20 | |
| 14 | 21 | /** |
GeneralUtils/GeneralUtils/commonUtils/NetWorkUtils.swift
| ... | ... | @@ -148,7 +148,8 @@ |
| 148 | 148 | task.resume() |
| 149 | 149 | } |
| 150 | 150 | |
| 151 | - public static func excuteHttpGetReturnData(urlStr: String, fileSubPathCache: String? = nil, saveTo: SaveFileLocation? = nil, isDecrypt: Bool? = nil, isCheckTimeoutCache: Bool = true, complete: @escaping ((_ data: Data?, _ errorText: String?) -> Bool)) { | |
| 151 | + public static func excuteHttpGetReturnData(urlStr: String, fileSubPathCache: String? = nil, saveTo: SaveFileLocation? = nil, isDecrypt: Bool? = nil, | |
| 152 | + isCheckTimeoutCache: Bool = true, complete: @escaping ((_ data: Data?, _ errorText: String?) -> Bool)) { | |
| 152 | 153 | CommonUtils.executebackgroundThread { |
| 153 | 154 | let urlStrFinal = urlStr.replacing(" ", with: "%20") |
| 154 | 155 | if let fileSubPathCache = fileSubPathCache, let saveTo = saveTo { |
GeneralUtils/GeneralUtils/ui/views/TableView/BaseTbLoadData.swift
GeneralUtils/GeneralUtils/ui/views/UIButtonCustom.swift
| ... | ... | @@ -99,7 +99,7 @@ |
| 99 | 99 | |
| 100 | 100 | |
| 101 | 101 | @IBDesignable |
| 102 | -class UIButtonCustomGradientBg: UIButtonCustom { | |
| 102 | +public class UIButtonCustomGradientBg: UIButtonCustom { | |
| 103 | 103 | @IBInspectable var startColor: UIColor = UIColor.init(hexString: "#FBFBFB") |
| 104 | 104 | @IBInspectable var endColor: UIColor = UIColor.init(hexString: "#D0D0D0") |
| 105 | 105 | |
| 106 | 106 | |
| ... | ... | @@ -109,10 +109,10 @@ |
| 109 | 109 | @IBInspectable var horizontalMode: Bool = false |
| 110 | 110 | @IBInspectable var diagonalMode: Bool = false |
| 111 | 111 | |
| 112 | - override class var layerClass: AnyClass { return CAGradientLayer.self } | |
| 112 | + override open class var layerClass: AnyClass { return CAGradientLayer.self } | |
| 113 | 113 | var gradientLayer: CAGradientLayer { return layer as! CAGradientLayer } |
| 114 | 114 | |
| 115 | - override func layoutSubviews() { | |
| 115 | + override open func layoutSubviews() { | |
| 116 | 116 | super.layoutSubviews() |
| 117 | 117 | if horizontalMode { |
| 118 | 118 | gradientLayer.startPoint = diagonalMode ? CGPoint(x: 1, y: 0) : CGPoint(x: 0, y: 0.5) |
Morooka.xcodeproj/project.pbxproj
| ... | ... | @@ -36,10 +36,12 @@ |
| 36 | 36 | 660BB7279593FDA36F972908 /* CameraViewControllerConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB44469D97644FFDBA84A /* CameraViewControllerConstraint.swift */; }; |
| 37 | 37 | 660BB76D232CBDFEFD943F56 /* VcEdit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBE7F33A6B7BE9E7D5723 /* VcEdit.swift */; }; |
| 38 | 38 | 660BB78D49C4DA59425EADC9 /* VCSendTraoDoi.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBCA62C72AB86E38044EC /* VCSendTraoDoi.swift */; }; |
| 39 | + 660BB7AF67A7A9A28AF8FBE1 /* CellPerson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB59CFC9018D9F0607A96 /* CellPerson.swift */; }; | |
| 39 | 40 | 660BB7D60756B330D34A2882 /* VCListCtruong.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBB53637040BA5B94E85D /* VCListCtruong.swift */; }; |
| 40 | 41 | 660BB898BB90A9259F3CB4AB /* UIButtonExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB951A01BD46F1A082C7A /* UIButtonExtensions.swift */; }; |
| 41 | 42 | 660BB91CDF86A3CB452EAED6 /* SecurityUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB7E1FEE6358AA0FF7932 /* SecurityUtils.swift */; }; |
| 42 | 43 | 660BB934436BDBC009AB9976 /* CellMucChupWithCamera.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB27DB3FB3EDB27BCE3DD /* CellMucChupWithCamera.swift */; }; |
| 44 | + 660BB98E21C0FC277F5AD8CB /* Person.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BBE4D9462E8F5F620661C /* Person.swift */; }; | |
| 43 | 45 | 660BB9C07B8D6C31DA7FA03C /* VCShootItemList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB84BDF20E7506F584740 /* VCShootItemList.swift */; }; |
| 44 | 46 | 660BB9F3489485A515210490 /* Board.xib in Resources */ = {isa = PBXBuildFile; fileRef = 660BB8BD46BBAF7ACD7E94BD /* Board.xib */; }; |
| 45 | 47 | 660BBA02DED5935CC2C25C50 /* VCAddPerson.swift in Sources */ = {isa = PBXBuildFile; fileRef = 660BB8496C8A11144A87AFD1 /* VCAddPerson.swift */; }; |
| ... | ... | @@ -132,6 +134,7 @@ |
| 132 | 134 | 660BB50191A22EBA51FE1A0C /* VCNhapTenCtruong.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCNhapTenCtruong.swift; sourceTree = "<group>"; }; |
| 133 | 135 | 660BB506E0AB7C3B69DBE5D0 /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; }; |
| 134 | 136 | 660BB550B5859DEC8E981BD6 /* NetWorkUtils.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NetWorkUtils.swift; sourceTree = "<group>"; }; |
| 137 | + 660BB59CFC9018D9F0607A96 /* CellPerson.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CellPerson.swift; sourceTree = "<group>"; }; | |
| 135 | 138 | 660BB5A65671E9D02EA89389 /* ConfirmViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConfirmViewController.swift; sourceTree = "<group>"; }; |
| 136 | 139 | 660BB5CCC89015E195B8616B /* VCHome.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCHome.swift; sourceTree = "<group>"; }; |
| 137 | 140 | 660BB5CF515C992993C639D7 /* CameraGlobals.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CameraGlobals.swift; sourceTree = "<group>"; }; |
| ... | ... | @@ -164,6 +167,7 @@ |
| 164 | 167 | 660BBC94B22F8707D2D71D54 /* VCConfirmMucDaChon.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCConfirmMucDaChon.swift; sourceTree = "<group>"; }; |
| 165 | 168 | 660BBCA62C72AB86E38044EC /* VCSendTraoDoi.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCSendTraoDoi.swift; sourceTree = "<group>"; }; |
| 166 | 169 | 660BBCF400820BA278D02252 /* VolumeControl.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VolumeControl.swift; sourceTree = "<group>"; }; |
| 170 | + 660BBE4D9462E8F5F620661C /* Person.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Person.swift; sourceTree = "<group>"; }; | |
| 167 | 171 | 660BBE7F33A6B7BE9E7D5723 /* VcEdit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VcEdit.swift; sourceTree = "<group>"; }; |
| 168 | 172 | 660BBE8254E91AD46A2AE93A /* PermissionsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PermissionsView.swift; sourceTree = "<group>"; }; |
| 169 | 173 | 660BBE8DACAA2464075AFFF8 /* VCInputId.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VCInputId.swift; sourceTree = "<group>"; }; |
| ... | ... | @@ -223,6 +227,7 @@ |
| 223 | 227 | 660BBF69F72B470BE44AD1D8 /* VCConfirmId.swift */, |
| 224 | 228 | 660BB10AEDBCEAFF2B1CE9C5 /* VCBuyIncreasePerson.swift */, |
| 225 | 229 | 660BB8496C8A11144A87AFD1 /* VCAddPerson.swift */, |
| 230 | + 660BB59CFC9018D9F0607A96 /* CellPerson.swift */, | |
| 226 | 231 | ); |
| 227 | 232 | path = addPerson; |
| 228 | 233 | sourceTree = "<group>"; |
| ... | ... | @@ -283,6 +288,7 @@ |
| 283 | 288 | 660BB6D0167C62DED01BDA8D /* ShootItem.swift */, |
| 284 | 289 | 660BB8C3076658F6777F23F4 /* CongTruong.swift */, |
| 285 | 290 | 660BB70C02558F318204A58E /* ImgObj.swift */, |
| 291 | + 660BBE4D9462E8F5F620661C /* Person.swift */, | |
| 286 | 292 | ); |
| 287 | 293 | path = model; |
| 288 | 294 | sourceTree = "<group>"; |
| ... | ... | @@ -629,6 +635,8 @@ |
| 629 | 635 | 660BBB52CA48D9835B2B4FA7 /* Constants.swift in Sources */, |
| 630 | 636 | 660BBBC00FF5818CE1A37FF7 /* NetWorkUtils.swift in Sources */, |
| 631 | 637 | 660BBAFF5B4B94C3D5D97EB5 /* FileUpload.swift in Sources */, |
| 638 | + 660BB98E21C0FC277F5AD8CB /* Person.swift in Sources */, | |
| 639 | + 660BB7AF67A7A9A28AF8FBE1 /* CellPerson.swift in Sources */, | |
| 632 | 640 | ); |
| 633 | 641 | runOnlyForDeploymentPostprocessing = 0; |
| 634 | 642 | }; |
Morooka.xcworkspace/xcuserdata/ptran.xcuserdatad/UserInterfaceState.xcuserstate
No preview for this file type