Advertisement
Guest User

Untitled

a guest
Aug 29th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 33.96 KB | None | 0 0
  1. //
  2. // AllgemeinViewController.swift
  3. // PCMobile
  4. //
  5. // Created by SITF Pr on 7/3/18.
  6. // Copyright © 2018 SITF Pr. All rights reserved.
  7. //
  8.  
  9. import UIKit
  10. import Eureka
  11. import Alamofire
  12. import SwiftyJSON
  13. import Whisper
  14.  
  15. class AllgemeinViewController: FormViewController {
  16.  
  17.  
  18. var editedRowTags = Set<String>()
  19. var lblPRCTRFooter:UILabel!
  20. var lblBUKRSFooter:UILabel!
  21. var lblVWNRFooter:UILabel!
  22. var lblKalkulatorFooter:UILabel!
  23. var fieldSyntax:Bool = true
  24.  
  25. var btnBUKRS:UIButton = UIButton(size: CGSize(width: 23, height: 23), image: #imageLiteral(resourceName: "arrowRight"))
  26. var btnPRCTR:UIButton = UIButton(size: CGSize(width: 23, height: 23), image: #imageLiteral(resourceName: "arrowRight"))
  27. var btnStatusNR:UIButton = UIButton(size: CGSize(width: 23, height: 23), image: #imageLiteral(resourceName: "arrowRight"))
  28. var btnPSP:UIButton = UIButton(size: CGSize(width: 23, height: 23), image: #imageLiteral(resourceName: "arrowRight"))
  29. var btnVWNR:UIButton = UIButton(size: CGSize(width: 23, height: 23), image: #imageLiteral(resourceName: "arrowRight"))
  30. var btnKalkulator:UIButton = UIButton(size: CGSize(width: 23, height: 23), image: #imageLiteral(resourceName: "arrowRight"))
  31.  
  32. var currentCell: UITableViewCell!
  33. var fieldType:PCOFieldType!
  34.  
  35. let localTablesURL = "http://212.4.68.34:50002/sitf/values/?url=http://sitfsed.sitf.local:8000/mobile/pco/loctables"
  36.  
  37. var prctrArray:[PRCTR] = [PRCTR]()
  38. var bukrsArray:[BUKRS] = [BUKRS]()
  39. var statusNrArray:[STATUS]=[STATUS]()
  40.  
  41. override func viewDidLoad() {
  42. super.viewDidLoad()
  43. // [btnBUKRS, btnPRCTR, btnStatusNR, btnPSP, btnVWNR, btnKalkulator].forEach { button in
  44. // button.tintColor = .tintColor
  45. // }
  46. login(withUsername: "SHAXHIJA", andPassword: "sitfsw1ss")
  47.  
  48. form +++ Section("PROJEKT COCKPIT - PROJEKTDATEN BEARBEITEN")
  49.  
  50.  
  51. <<< TextRow() {
  52. $0.title = "Projekt ID:"
  53. $0.tag = "txtProjectID"
  54. $0.value = myProject.getValue(for: "txtProjectID")
  55. $0.add(rule: RuleRequired())
  56. $0.validationOptions = .validatesOnChange
  57. }
  58. .cellUpdate { cell, row in
  59. if (row.value == "") || (!row.isValid) {
  60. cell.titleLabel?.textColor = .red
  61. }
  62. else if((row.value?.count)!>0) {
  63. // let vlera = row.value
  64. // let index = vlera?.index((vlera?.startIndex)!, offsetBy: 1)
  65. // let vlera2 = String((vlera?.prefix(upTo: index!))!)
  66. // if (vlera2.rangeOfCharacter(from: CharacterSet.decimalDigits) == nil) {
  67. //
  68. //
  69. if(row.value?.firstCharacter().isNotNumber())!
  70. {
  71. cell.titleLabel?.textColor = .red
  72. self.fieldSyntax = false
  73.  
  74. var murmur = Murmur(title: "Please fill the required field with a number first...")
  75. murmur.font = UIFont.systemFont(ofSize: 15)
  76. murmur.backgroundColor = .groupTableViewBackground
  77. Whisper.show(whistle: murmur, action: .show(1.9))
  78. Whisper.hide(whistleAfter: 2)
  79. }
  80. else {
  81. self.fieldSyntax = true
  82. }
  83. }
  84.  
  85. }
  86. .onChange { [weak self] row in
  87. self?.editedRowTags.insert(row.tag!)
  88. }
  89.  
  90. <<< LabelRow() {
  91. $0.title = "Projektbescheibung:"
  92. $0.tag = "Projektbescheibung"
  93. }
  94. .cellUpdate({ (cell, row) in
  95. cell.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 1000)
  96. if let myRow: TextAreaRow = self.form.rowBy(tag: "txtProjectDesc") {
  97.  
  98. cell.textLabel?.textColor = myRow.value == "" || !myRow.isValid ? .red : .black
  99. }
  100. })
  101.  
  102.  
  103.  
  104. <<< TextAreaRow() {
  105. $0.tag = "txtProjectDesc"
  106. $0.value = myProject.getValue(for: "txtProjectDesc")
  107. $0.textAreaHeight = .dynamic(initialTextViewHeight: 50)
  108. $0.add(rule: RuleRequired())
  109. $0.validationOptions = .validatesOnChange
  110.  
  111. }
  112. .cellUpdate { cell, row in
  113. if let myRow: LabelRow = self.form.rowBy(tag: "Projektbescheibung") {
  114. myRow.cell.textLabel?.textColor = row.value == "" || !row.isValid ? .red : .black
  115. }
  116. }
  117.  
  118. .onChange { [weak self] row in
  119. self?.editedRowTags.insert(row.tag!)
  120. }
  121.  
  122.  
  123.  
  124.  
  125. <<< LabelRow() {
  126. $0.title = "PSP-Element"
  127. //$0.placeholder = ""
  128. $0.tag = "txtPSPElement"
  129. $0.baseCell.accessoryView = btnPSP
  130. $0.value = myProject.getValue(for: "txtPSPElement")
  131. btnPSP.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -10)
  132. btnPSP.addTarget(self, action: #selector(pspPressed), for: .touchUpInside)
  133.  
  134. }
  135. .onChange { [weak self] row in
  136. self?.editedRowTags.insert(row.tag!)
  137. }
  138.  
  139. <<< LabelRow() {
  140. $0.title = "Statusnr. Projekt"
  141. $0.tag = "txtStatusNr"
  142. // $0.baseCell.accessoryView = UIButton(type: UIButtonType.infoLight)
  143. // LabelRow.defaultCellUpdate = { cell, row in cell.detailTextLabel?.textColor = .lightGray }
  144. $0.value = myProject.getValue(for: "txtStatusNr")
  145. $0.cell.accessoryView = btnStatusNR
  146. btnStatusNR.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -10)
  147. btnStatusNR.addTarget(self, action: #selector(statusNrPressed), for: .touchUpInside)
  148. }
  149. .onChange { [weak self] row in
  150. self?.editedRowTags.insert(row.tag!)
  151. }
  152.  
  153.  
  154. +++ Section(){ section in
  155. section.footer =
  156. {
  157. var footer = HeaderFooterView<UIView>(.callback({
  158. let view = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.frame.width, height: 40))
  159. self.lblVWNRFooter = UILabel(frame: CGRect(x: view.frame.minX, y: 0, width: view.frame.width-16, height: view.frame.height))
  160.  
  161. self.lblVWNRFooter.text = myProject.getValue(for: "lblNameResponsible").removeLeadingZeros()
  162. self.lblVWNRFooter.font = self.lblVWNRFooter.font.withSize(14)
  163. self.lblVWNRFooter.textColor = .gray
  164. self.lblVWNRFooter.textAlignment = .right
  165. view.addSubview(self.lblVWNRFooter)
  166. // view.backgroundColor = .red
  167. return view
  168. }))
  169. footer.height = { 45 }
  170. return footer
  171. }()
  172.  
  173. section.header = HeaderFooterView(title: "")
  174. }
  175.  
  176.  
  177.  
  178. <<< LabelRow() {
  179. $0.title = "Verantwortlich Nr"
  180. $0.tag = "txtResponsibleNr"
  181. $0.value = myProject.getValue(for: "txtResponsibleNr").removeLeadingZeros()
  182. $0.cell.accessoryView = btnVWNR
  183. btnVWNR.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -10)
  184. btnVWNR.addTarget(self, action: #selector(verantworlitchNrPressed), for: .touchUpInside)
  185. }
  186. .onChange { [weak self] row in
  187. self?.editedRowTags.insert(row.tag!)
  188. }
  189.  
  190. +++ Section(){ section in
  191. section.footer =
  192. {
  193. var footer = HeaderFooterView<UIView>(.callback({
  194. let view = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.frame.width, height: 40))
  195. self.lblKalkulatorFooter = UILabel(frame: CGRect(x: view.frame.minX, y: 0, width: view.frame.width-16, height: view.frame.height))
  196. self.lblKalkulatorFooter.text = myProject.getValue(for: "txtCalculatorName")
  197. self.lblKalkulatorFooter.font = self.lblKalkulatorFooter.font.withSize(14)
  198. self.lblKalkulatorFooter.textColor = .gray
  199. self.lblKalkulatorFooter.textAlignment = .right
  200. view.addSubview(self.lblKalkulatorFooter)
  201. // view.backgroundColor = .red
  202. return view
  203. }))
  204. footer.height = { 55 }
  205. return footer
  206. }()
  207.  
  208. section.header = HeaderFooterView(title: "")
  209. }
  210.  
  211.  
  212.  
  213. <<< LabelRow() {
  214. $0.title = "Kalkulator Nr"
  215. $0.tag = "txtCalculatorNr"
  216. // $0.baseCell.accessoryView = UIButton(type: UIButtonType.infoLight)
  217. // LabelRow.defaultCellUpdate = { cell, row in cell.detailTextLabel?.textColor = .lightGray }
  218. $0.value = myProject.getValue(for: "txtCalculatorNr").removeLeadingZeros()
  219. $0.cell.accessoryView = btnKalkulator
  220. btnKalkulator.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -10)
  221. btnKalkulator.addTarget(self, action: #selector(kalkulatorPressed), for: .touchUpInside)
  222. }
  223. .onChange { [weak self] row in
  224. self?.editedRowTags.insert(row.tag!)
  225. }
  226.  
  227.  
  228. +++ Section("PROJEKT ADRESSE")
  229.  
  230. <<< LabelRow() {
  231. $0.title = "Strasse:"
  232. $0.value = ""
  233.  
  234. }
  235. .cellUpdate({ (cell, row) in
  236. cell.separatorInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 1000)
  237.  
  238. })
  239.  
  240.  
  241. <<< TextAreaRow() {
  242. $0.tag = "txtStrasse"
  243. $0.value = myProject.getValue(for: "txtStrasse")
  244. $0.textAreaHeight = .dynamic(initialTextViewHeight: 25)
  245.  
  246. }
  247. .onChange { [weak self] row in
  248. self?.editedRowTags.insert(row.tag!)
  249. }
  250.  
  251. <<< TextRow() {
  252. $0.title = "Postleitzahl"
  253. $0.tag = "txtPLZ"
  254. $0.value = myProject.getValue(for: "txtPLZ")
  255.  
  256. }
  257. .onChange { [weak self] row in
  258. self?.editedRowTags.insert(row.tag!)
  259. }
  260.  
  261. <<< TextRow() {
  262. $0.title = "Ort"
  263. $0.tag = "txtOrt"
  264. $0.value = myProject.getValue(for: "txtOrt")
  265.  
  266. }
  267. .onChange { [weak self] row in
  268. self?.editedRowTags.insert(row.tag!)
  269. }
  270.  
  271. <<< TextRow() {
  272. $0.title = "Land"
  273. $0.tag = "txtLand"
  274. $0.value = myProject.getValue(for: "txtLand")
  275.  
  276. }
  277. .onChange { [weak self] row in
  278. self?.editedRowTags.insert(row.tag!)
  279. }
  280.  
  281.  
  282. <<< TextRow() {
  283. $0.title = "Region"
  284. $0.tag = "txtRegion"
  285. $0.value = myProject.getValue(for: "txtLand")
  286. }
  287. .onChange { [weak self] row in
  288. self?.editedRowTags.insert(row.tag!)
  289. }
  290.  
  291.  
  292.  
  293. +++ Section(){ section in
  294. section.tag = "bukrsSection"
  295. section.footer =
  296. {
  297. var footer = HeaderFooterView<UIView>(.callback({
  298. let view = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.frame.width, height: 40))
  299. self.lblBUKRSFooter = UILabel(frame: CGRect(x: view.frame.minX, y: 0, width: view.frame.width-16, height: view.frame.height))
  300. self.lblBUKRSFooter.text = myProject.getValue(for: "lblBuchungskreis")
  301. self.lblBUKRSFooter.font = self.lblBUKRSFooter.font.withSize(14)
  302. self.lblBUKRSFooter.textColor = .gray
  303. self.lblBUKRSFooter.textAlignment = .right
  304. view.addSubview(self.lblBUKRSFooter)
  305. // view.backgroundColor = .red
  306. return view
  307. }))
  308. footer.height = { 40 }
  309. return footer
  310. }()
  311.  
  312. section.header = HeaderFooterView(title: "ORGANISATION")
  313. }
  314.  
  315.  
  316.  
  317. <<< LabelRow () {
  318.  
  319. // LabelRow.defaultCellUpdate = { cell, row in cell.detailTextLabel?.textColor = .lightGray }
  320. currentCell = $0.cell
  321. $0.tag = "txtBuchungskreis"
  322. $0.title = "Buchungskreiss"
  323. $0.value = myProject.getValue(for: "txtBuchungskreis").removeLeadingZeros()
  324. $0.cell.accessoryView = btnBUKRS
  325. btnBUKRS.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -10)
  326. btnBUKRS.addTarget(self, action: #selector(bukrsPressed), for: .touchUpInside)
  327. $0.add(rule: RuleRequired())
  328. $0.validationOptions = .validatesOnChange
  329. }
  330. .cellUpdate { cell, row in
  331. //
  332. if (row.value == "") || (!row.isValid) {
  333. cell.textLabel?.textColor = .red
  334. }
  335.  
  336. }
  337. .onChange { [weak self] row in
  338. self?.editedRowTags.insert(row.tag!)
  339. }
  340.  
  341.  
  342.  
  343.  
  344. +++ Section() { section in
  345. section.tag = "prctrSection"
  346. section.footer =
  347. {
  348. var footer = HeaderFooterView<UIView>(.callback({
  349. let view = UIView(frame: CGRect(x: 0, y: 0, width: self.tableView.frame.width, height: 40))
  350. self.lblPRCTRFooter = UILabel(frame: CGRect(x: view.frame.minX, y: 0, width: view.frame.width-16, height: view.frame.height))
  351. self.lblPRCTRFooter.text = myProject.getValue(for: "lblPRCTR")
  352. self.lblPRCTRFooter.font = self.lblPRCTRFooter.font.withSize(14)
  353. self.lblPRCTRFooter.textColor = .gray
  354. self.lblPRCTRFooter.textAlignment = .right
  355. view.addSubview(self.lblPRCTRFooter)
  356. return view
  357. }))
  358. footer.height = { 70 }
  359. return footer
  360. }()
  361.  
  362. section.header = HeaderFooterView(title: "")
  363. }
  364.  
  365.  
  366. <<< LabelRow () {
  367.  
  368. // LabelRow.defaultCellUpdate = { cell, row in cell.detailTextLabel?.textColor = .lightGray }
  369.  
  370. $0.title = "Profitcenter"
  371. $0.tag = "txtPRCTR"
  372. $0.value = myProject.getValue(for: "txtPRCTR").removeLeadingZeros()
  373. $0.cell.accessoryView = btnPRCTR
  374. btnPRCTR.contentEdgeInsets = UIEdgeInsetsMake(0, 0, 0, -10)
  375. btnPRCTR.addTarget(self, action: #selector(profitCenterPressed), for: .touchUpInside)
  376. $0.add(rule: RuleRequired())
  377. $0.validationOptions = .validatesOnChange
  378. }
  379. .cellUpdate { cell, row in
  380. //
  381. if (row.value == "") || (!row.isValid) {
  382. cell.textLabel?.textColor = .red
  383. }
  384. }
  385. .onChange { [weak self] row in
  386. self?.editedRowTags.insert(row.tag!)
  387. }
  388.  
  389. }
  390.  
  391.  
  392.  
  393.  
  394.  
  395. @objc func bukrsPressed() {
  396.  
  397. fieldType = .bukrs
  398. self.performSegue(withIdentifier: "showSearchHelp", sender: nil)
  399. }
  400.  
  401.  
  402. @objc func profitCenterPressed() {
  403.  
  404. fieldType = .prctr
  405. self.performSegue(withIdentifier: "showSearchHelp", sender: nil)
  406.  
  407.  
  408. //printoma vleren qe e ka bukrs-ja ne cell print(vleraBUKRS)
  409.  
  410. //
  411. // let textRow: TextAreaRow? = form.rowBy(tag: "notes")
  412. // let value = textRow?.value
  413.  
  414. // print(value!)
  415.  
  416. // fieldType = .prctr
  417. // self.performSegue(withIdentifier: "segue", sender: nil)
  418. }
  419.  
  420. @objc func statusNrPressed() {
  421.  
  422. fieldType = .statusNr
  423. self.performSegue(withIdentifier: "showSearchHelp", sender: nil)
  424. }
  425.  
  426.  
  427.  
  428. @objc func verantworlitchNrPressed() {
  429.  
  430. fieldType = .verantwortlich
  431. self.performSegue(withIdentifier: "showPersons", sender: nil)
  432. }
  433.  
  434. @objc func kalkulatorPressed() {
  435.  
  436. fieldType = .kalkulator
  437. self.performSegue(withIdentifier: "showPersons", sender: nil)
  438. }
  439.  
  440. @objc func pspPressed(){
  441. fieldType = .psp
  442. self.performSegue(withIdentifier: "showPSP", sender: nil)
  443. }
  444.  
  445.  
  446.  
  447.  
  448.  
  449. //MARK: Login
  450. func login(withUsername username: String, andPassword password: String) {
  451. // startLoading()
  452. let credentials: String! = "Basic \("\(username):\(password)".data(using: String.Encoding.utf8)?.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) ?? "")"
  453.  
  454.  
  455. //Base64 Authorization Header
  456. let loginHeaders = [
  457. "Authorization": "\(credentials!)"
  458. ]
  459.  
  460. Alamofire.request(localTablesURL, method: .get, parameters: [:], headers: loginHeaders).responseJSON { response in
  461. if response.response?.statusCode == 200 {
  462. do {
  463. let json = try JSON(data: response.data!) //SwiftJSON
  464. let localTablesBase = LOCALTABLESBase(json: json)
  465. // let localTables = localTablesBase.lOCALTABLES
  466.  
  467. if let arrayPRCTR = localTablesBase.lOCALTABLES?.pRCTR {
  468. self.prctrArray = arrayPRCTR
  469. }
  470.  
  471. if let arrayBUKRS = localTablesBase.lOCALTABLES?.bUKRS {
  472. self
  473. .bukrsArray = arrayBUKRS
  474. }
  475.  
  476. if let arrayStatusNr = localTablesBase.lOCALTABLES?.sTATUS {
  477. self.statusNrArray = arrayStatusNr
  478. }
  479.  
  480.  
  481.  
  482. //here you reload table, stop loading or whatever you want to do with the data after received them
  483. self.tableView.reloadData()
  484. //stopLoading
  485.  
  486. } catch {
  487. print("diqka nuk o n'rregëll")
  488. }
  489. } else {
  490. print("error with code \(response.response?.statusCode ?? 0)")
  491. }
  492.  
  493. }
  494.  
  495. }
  496.  
  497. //MARK: - Prepare For Segue
  498.  
  499.  
  500. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  501.  
  502. if segue.identifier == "showSearchHelp" {
  503. let vc:AllgemeinTblViewController = segue.destination as! AllgemeinTblViewController
  504. vc.delegate = self
  505. vc.hidesBottomBarWhenPushed = true
  506. vc.fieldType = fieldType
  507. vc.prctrArray = prctrArray
  508. vc.bukrsArray = bukrsArray
  509. vc.statusNrArray = statusNrArray
  510. }
  511.  
  512. else if segue.identifier == "showPersons" {
  513. let vc:PersonViewController = segue.destination as! PersonViewController
  514. vc.hidesBottomBarWhenPushed = true
  515. vc.fieldType = fieldType
  516. vc.delegate = self
  517. }
  518.  
  519. else if segue.identifier == "showPSP" {
  520. let vc:PSPViewController = segue.destination as! PSPViewController
  521. vc.delegate = self
  522. vc.fieldType = fieldType
  523. vc.hidesBottomBarWhenPushed = true
  524. }
  525.  
  526.  
  527. }
  528.  
  529. // MARK: Save Project
  530.  
  531. @IBAction func saveRaport(_ sender: Any) {
  532. saveProject()
  533. }
  534.  
  535. func saveProject() {
  536.  
  537. //Allgemein View Controller
  538. let txtProjectIDRow: TextRow? = form.rowBy(tag: "txtProjectID")!
  539. let txtProjectDescRow: TextAreaRow? = form.rowBy(tag: "txtProjectDesc")!
  540. let txtBuchungskreisRow: LabelRow? = form.rowBy(tag: "txtBuchungskreis")!
  541. let txtPRCTRRow: LabelRow? = form.rowBy(tag: "txtPRCTR")!
  542.  
  543. if ((txtProjectIDRow?.value?.count == 0 || txtProjectIDRow?.value == nil) || fieldSyntax == false || (txtProjectDescRow?.value?.count == 0 || txtProjectDescRow?.value == nil) || (txtBuchungskreisRow?.value?.count == 0 || txtBuchungskreisRow?.value == nil) || (txtPRCTRRow?.value?.count == 0 || txtPRCTRRow?.value == nil )) {
  544.  
  545. var murmur = Murmur(title: "Please fill required fields...")
  546. murmur.font = UIFont.systemFont(ofSize: 15)
  547. murmur.backgroundColor = .groupTableViewBackground
  548. Whisper.show(whistle: murmur, action: .show(1.9))
  549. Whisper.hide(whistleAfter: 2)
  550. return;
  551. }
  552.  
  553. for tag in editedRowTags {
  554. let row = form.rowBy(tag: tag)
  555. requestsArray.addRequest(withValue: row?.baseValue as! String, forFieldName:tag)
  556. }
  557.  
  558.  
  559. //Milestones View Controller
  560.  
  561. if let meilensteineVC:MeilensteineViewController = self.tabBarController?.childViewControllers[1].childViewControllers.first as? MeilensteineViewController {
  562.  
  563. for tag in meilensteineVC.editedRowTags {
  564. let row = meilensteineVC.form.rowBy(tag: tag)
  565.  
  566. if tag == "txtErfassung" || tag == "txtBegehung" || tag == "txtFristFragen" || tag == "txtAngebots" || tag == "txtAuftrag" || tag == "txtVertrag" {
  567. requestsArray.dateRequest(withValue: row?.baseValue as! Date, forFieldName:tag)
  568. }
  569. else if tag == "txtBegehungUhr" || tag == "txtFristFragenUhr" || tag == "txtEingabeUhr" || tag == "txtAngebotsUhr" {
  570. requestsArray.timeRequest(withValue: row?.baseValue as! Date, forFieldName: tag)
  571. }
  572. else if tag == "txtBegehungOrt" || tag == "txtBegehungBemerkung" || tag == "txtFristFragenBemerkung" || tag == "txtEingabeBemerkung" || tag == "txtAngebotsOrt" || tag == "txtAngebotsBemerkung" || tag == "txtAuftragBemerkung" || tag == "txtVertragBemerkung" ||
  573. tag == "txtBaubeginBemerkung" || tag == "txtBauendBemerkung" {
  574. requestsArray.addRequest(withValue: row?.baseValue as! String, forFieldName: tag)
  575. }
  576. else if tag == "txtBaubegin"{
  577. let year = Calendar.current.component(.year, from: row?.baseValue as! Date)
  578. let month = Calendar.current.component(.month, from: row?.baseValue as! Date)
  579. let day = Calendar.current.component(.day, from: row?.baseValue as! Date)
  580.  
  581. requestsArray.addRequest(withValue: "\(year)", forFieldName: "txtBaubeginYear")
  582. requestsArray.addRequest(withValue: "\(month)", forFieldName: "txtBaubeginMonth")
  583. requestsArray.addRequest(withValue: "\(day)", forFieldName: "txtBaubeginDay")
  584. }
  585. else if tag == "txtBauende"{
  586. let endeYear = Calendar.current.component(.year, from: row?.baseValue as! Date)
  587. let endeMonth = Calendar.current.component(.month, from: row?.baseValue as! Date)
  588. let endeDay = Calendar.current.component(.day, from: row?.baseValue as! Date)
  589.  
  590. requestsArray.addRequest(withValue: "\(endeYear)", forFieldName: "txtBauendeYear")
  591. requestsArray.addRequest(withValue: "\(endeMonth)", forFieldName: "txtBauendeMonth")
  592. requestsArray.addRequest(withValue: "\(endeDay)", forFieldName: "txtBauendeDay")
  593. }
  594. }
  595.  
  596. }
  597.  
  598. //Details View Controller
  599. if let detailsVC:DetailsViewController = self.tabBarController?.childViewControllers[2].childViewControllers.first as? DetailsViewController {
  600.  
  601. for tag in detailsVC.editedRowTags {
  602. let row = detailsVC.form.rowBy(tag: tag)
  603. if tag != "txtAuftrag" {
  604. requestsArray.addRequest(withValue: row?.baseValue as! String, forFieldName: tag)
  605. } else {
  606. requestsArray.dateRequest(withValue: row?.baseValue as! Date, forFieldName:tag)
  607. }
  608. }
  609. }
  610.  
  611.  
  612. //Kalkulation View Controller
  613. if let kalkulationVC:KalkulationViewController = self.tabBarController?.childViewControllers.last?.childViewControllers.first as? KalkulationViewController {
  614. let rowTage: KalkulationRow? = kalkulationVC.form.rowBy(tag: "tage")
  615. let rowSkonto: KalkulationRow? = kalkulationVC.form.rowBy(tag:"skonto")
  616. let skontto = rowSkonto?.cell.percentageField.text?.count == 0 ? 0.00 : Double(rowSkonto?.cell.percentageField.text?.digits ?? "0")
  617.  
  618. if (rowSkonto?.cell.percentageField.text!.count != 0 || rowSkonto?.cell.valueField.text!.count != 0){
  619. if skontto! > 10.00 && ( rowTage?.cell.valueField.text!.count == 0) {
  620. var murmur = Murmur(title: "Bitte füllen Sie die markierten Felder richtig aus")
  621. murmur.font = UIFont.systemFont(ofSize: 15)
  622. murmur.backgroundColor = .red
  623. murmur.titleColor = .white
  624. Whisper.show(whistle: murmur, action: .show(1.9))
  625. Whisper.hide(whistleAfter: 2)
  626. return;
  627. } else if (skontto! > 10) {
  628. var murmur = Murmur(title: "Skonto % - Satz zu hoch")
  629.  
  630. murmur.font = UIFont.systemFont(ofSize: 15)
  631. murmur.backgroundColor = .red
  632. murmur.titleColor = .white
  633. Whisper.show(whistle: murmur, action: .show(1.9))
  634. Whisper.hide(whistleAfter: 2)
  635. return;
  636. } else if ( rowTage?.cell.valueField.text!.count == 0) {
  637. var murmur = Murmur(title: "Bitte füllen Sie die markierten Felder")
  638. murmur.font = UIFont.systemFont(ofSize: 15)
  639. murmur.backgroundColor = .red
  640. murmur.titleColor = .white
  641. Whisper.show(whistle: murmur, action: .show(1.9))
  642. Whisper.hide(whistleAfter: 2)
  643. return;
  644. }
  645. }
  646.  
  647. for tag in kalkulationVC.editedRowTags{
  648. if tag == "eingabessumeBrutto" {
  649. let rowEingabessumeBrutto: KalkulationRow = kalkulationVC.form.rowBy(tag: "eingabessumeBrutto")!
  650. requestsArray.addRequest(withValue: (rowEingabessumeBrutto.cell.valueField.text)!, forFieldName: "txtEingabesummA")
  651.  
  652. } else if tag == "zielBrutto" {
  653. let rowZielBrutto: KalkulationRow = kalkulationVC.form.rowBy(tag:"zielBrutto")!
  654. requestsArray.addRequest(withValue: (rowZielBrutto.cell.valueField.text)!, forFieldName: "txtZielA")
  655.  
  656. } else if tag == "rabatt" {
  657. let rowRabatt: KalkulationRow = kalkulationVC.form.rowBy(tag:"rabatt")!
  658. requestsArray.addRequest(withValue: (rowRabatt.cell.valueField.text)!, forFieldName: "txtRabattA")
  659. requestsArray.addRequest(withValue: (rowRabatt.cell.percentageField.text?.digits)!, forFieldName: "txtRabattProcentA")
  660.  
  661. } else if tag == "tage" {
  662. let rowTage: KalkulationRow = kalkulationVC.form.rowBy(tag: "tage")!
  663. requestsArray.addRequest(withValue: (rowTage.cell.valueField.text)!, forFieldName: "txtSkontoTage")
  664.  
  665. } else if tag == "skonto" {
  666. let rowSkonto: KalkulationRow = kalkulationVC.form.rowBy(tag:"skonto")!
  667. requestsArray.addRequest(withValue: (rowSkonto.cell.valueField.text)!, forFieldName: "txtSkontoA")
  668. requestsArray.addRequest(withValue: (rowSkonto.cell.percentageField.text?.digits)!, forFieldName: "txtSkontoProcentA")
  669.  
  670. }else if tag == "diverse" {
  671. let rowDiverse: KalkulationRow = kalkulationVC.form.rowBy(tag:"diverse")!
  672. requestsArray.addRequest(withValue: (rowDiverse.cell.valueField.text)!, forFieldName: "txtDiverseA")
  673.  
  674. }else if tag == "zielNetto" {
  675. let rowZielNetto: KalkulationRow = kalkulationVC.form.rowBy(tag:"zielNetto")!
  676. requestsArray.addRequest(withValue: (rowZielNetto.cell.valueField.text)!, forFieldName: "txtZielNettoA")
  677. }
  678. }
  679.  
  680. }
  681.  
  682. //Save whole project after array is filled with data
  683. API.PCO.saveProject(withID: selectedProject, completionHandler: { message in
  684. print(message)
  685. })
  686.  
  687.  
  688.  
  689. }
  690.  
  691.  
  692. }
  693.  
  694.  
  695. //MARK: - Allgemein Table Delegate
  696. extension AllgemeinViewController: AllgemeinTableDelegate {
  697.  
  698. func getValue(value: String, description: String, forType type: PCOFieldType) {
  699. if type == .bukrs {
  700. if let myRow: LabelRow = form.rowBy(tag: "txtBuchungskreis") {
  701. myRow.value = value.removeLeadingZeros()
  702. lblBUKRSFooter.text = description
  703. myRow.reload()
  704. }
  705.  
  706.  
  707. } else if type == .prctr {
  708. if let myRow: LabelRow = form.rowBy(tag: "txtPRCTR") {
  709. myRow.value = value.removeLeadingZeros()
  710. lblPRCTRFooter.text = description
  711. myRow.reload()
  712. }
  713.  
  714.  
  715. } else if type == .statusNr {
  716.  
  717. if let myRow: LabelRow = form.rowBy(tag: "txtStatusNr") {
  718. myRow.value = value.removeLeadingZeros()
  719. myRow.reload()
  720.  
  721. }
  722. }
  723. }
  724.  
  725. }
  726.  
  727. extension AllgemeinViewController: PersonDelegate {
  728. func selectedPerson(person: F4PERNR, forType type: PCOFieldType) {
  729. if type == .verantwortlich {
  730. if let myRow: LabelRow = form.rowBy(tag: "txtResponsibleNr") {
  731. myRow.value = person.pERNR?.removeLeadingZeros() ?? ""
  732. lblVWNRFooter.text = "\(person.vNAMC ?? "") \(person.nACHN ?? "")"
  733. myRow.reload()
  734. }
  735. }
  736.  
  737. if type == .kalkulator {
  738. if let myRow: LabelRow = form.rowBy(tag: "txtCalculatorNr") {
  739. myRow.value = person.pERNR?.removeLeadingZeros() ?? ""
  740. lblVWNRFooter.text = "\(person.vNAMC ?? "") \(person.nACHN ?? "")"
  741. myRow.reload()
  742. }
  743. }
  744.  
  745.  
  746. }
  747.  
  748.  
  749.  
  750. }
  751.  
  752. extension AllgemeinViewController: pspDelegate {
  753. func selectedPSP(person: F4WBS, forType type: PCOFieldType) {
  754. if type == .psp {
  755. if let myRow: LabelRow = form.rowBy(tag: "txtPSPElement") {
  756. myRow.value = person.pOSID?.removeLeadingZeros() ?? ""
  757. myRow.reload()
  758. }
  759. }
  760. }
  761. }
  762.  
  763. extension String {
  764. func removeLeadingZeros() -> String {
  765. var newString = self
  766. let prefix = "0"
  767. while newString.hasPrefix(prefix) {
  768. newString.remove(at: newString.startIndex)
  769. }
  770. return newString
  771. }
  772.  
  773. func firstCharacter() -> String {
  774. var newString = self
  775. let index = newString.index(newString.startIndex, offsetBy:1)
  776. newString = String(newString.prefix(upTo: index))
  777. return newString
  778. }
  779.  
  780.  
  781. func isNotNumber() -> Bool {
  782. return self.rangeOfCharacter(from: CharacterSet.decimalDigits) == nil
  783. }
  784. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement