// // OEGDController.swift // Befund // // Created by Artur Savitskiy on 03.08.22. // Copyright © 2022 MVZ Dr. Stein und Kollegen. All rights reserved. // import Foundation import UIKit //import "DownPicker.h" class OEGDController: UIViewController, UITextFieldDelegate, UIScrollViewDelegate, UpdatingParentCheckBox { public enum OEGDEditType: Int { case New case Edit } public var currentMode: OEGDEditType = OEGDEditType.New private var Genders: NSMutableArray = [ Core.Lang.Get(key: "LBL_GENDER_M") , Core.Lang.Get(key: "LBL_GENDER_W") , Core.Lang.Get(key: "LBL_GENDER_D") , Core.Lang.Get(key: "LBL_GENDER_X")] @IBOutlet weak var editPopup_HeightScrollView: NSLayoutConstraint! @IBOutlet weak var mainOEGD_HeightScrollView: NSLayoutConstraint! public static var Settings: Core.Models.Settings? = nil @IBOutlet weak var LBL_TITLE: UILabel! //@IBOutlet weak var LBL_BACK: UILabel! @IBOutlet weak var mainOEGD_MenuBtn: UIButton! @IBOutlet weak var mainOEGD_BackBtn: UIButton! @IBOutlet weak var LBL_NO_OEGD: UILabel! //new or edit OEGD popup @IBOutlet weak var LBL_EDIT_TITLE: UILabel! @IBOutlet weak var editPopup_Overlay: UIView! @IBOutlet weak var editPopup_Content: UIView! @IBOutlet weak var editPopup_ScrollView: UIScrollView! @IBOutlet weak var editOEGD_txtTitle: UITextField! @IBOutlet weak var editOEGD_txtFirstname: UITextField! @IBOutlet weak var editOEGD_txtLastname: UITextField! @IBOutlet weak var editOEGD_txtAddLastname: UITextField! @IBOutlet weak var editOEGD_txtPrefix: UITextField! @IBOutlet weak var editOEGD_txtGender: UITextField! var genderDownPicker: DownPicker! @IBOutlet weak var editOEGD_txtBirthday: UITextField! let editOEGD_dtBirthday = UIDatePicker() @IBOutlet weak var editOEGD_txtStreet: UITextField! @IBOutlet weak var editOEGD_txtZip: UITextField! @IBOutlet weak var editOEGD_txtCity: UITextField! @IBOutlet weak var editOEGD_txtTelefon: UITextField! @IBOutlet weak var editOEGD_CWAPolicyView: UIView! @IBOutlet weak var editOEGD_CWAPolicyBtn: UIButton! @IBOutlet weak var editOEGD_CreateBtn: UIButton! @IBOutlet weak var editOEGD_BackBtn: UIButton! @IBOutlet weak var editOEGD_Status: UILabel! //OEGD Options-Popup @IBOutlet weak var optionsPopup_Overlay: UIView! @IBOutlet weak var optionsPopup_Content: UIView! @IBOutlet weak var optionsPopup_ButtonsContent: UIView! @IBOutlet weak var optionsPopup_EditContent: UIView! @IBOutlet weak var optionsPopup_AddContent: UIView! @IBOutlet weak var optionsPopup_DeleteContent: UIView! @IBOutlet weak var optionsOEGD_AddBtn: UIButton! @IBOutlet weak var optionsOEGD_EditBtn: UIButton! @IBOutlet weak var optionsOEGD_DeleteBtn: UIButton! @IBOutlet weak var optionsOEGD_CancelBtn: UIButton! @IBOutlet weak var optionsPopup_ConfirmDelete: UIView! @IBOutlet weak var optionsOEGD_DeleteTitle: UILabel! @IBOutlet weak var optionsOEGD_DeleteNoBtn: UIButton! @IBOutlet weak var optionsOEGD_DeleteYesBtn: UIButton! //CWA-Policy Popup @IBOutlet weak var LBL_POLICY_TITLE: UILabel! @IBOutlet weak var policyPopup_Overlay: UIView! @IBOutlet weak var policyPopup_AcceptView: UIView! @IBOutlet weak var policyPopup_PolicyText: UILabel! @IBOutlet weak var policyPopup_btnAcceptPolicy: UIButton! @IBOutlet var editPopup_Checkbox: CheckBoxButton! public var confirmCheckBox:CheckBoxButton! { get { return editPopup_Checkbox } } @IBOutlet weak var pageControl: UIPageControl! @IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var qrImage: UIImageView! private var OEGDFiles: [Core.Models.OEGDFile] = [] private var CurrentOEGDFile: Core.Models.OEGDFile? = nil private let CWAPolicyLink = "https://www.limbachgruppe.com/datenschutz" private var blinkTimer: Timer? = nil private var isAlpha1: Bool = true private let menuBtnWidth = 90.0 private let menuBtnHeight = 65.0 override func viewDidLoad() { super.viewDidLoad() self.Initialize() } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) self.SetLabels() } private func FormMenuButton() { if(self.OEGDFiles.count==0) { if (self.blinkTimer==nil) { self.blinkTimer = Timer.scheduledTimer(timeInterval: 0.7, target: self, selector: #selector(self.alarmAlertActivate), userInfo: nil, repeats: true) } } else { if (self.blinkTimer != nil) { self.blinkTimer!.invalidate() self.blinkTimer = nil let menuImg = UIImage(named: "ic_dehaze")?.image(alpha: 1.0, targetSize: CGSize(width: menuBtnWidth, height: menuBtnHeight)) self.mainOEGD_MenuBtn.setImage(menuImg, for: .normal) } } } private func Initialize() { //OEGDController.CurrentViewController = self OEGDController.Settings = Core.Models.Settings.loadFromFile(atPath: Core.System.SettingsPath()) self.editOEGD_txtTitle.delegate = self self.editOEGD_txtFirstname.delegate = self self.editOEGD_txtLastname.delegate = self self.editOEGD_txtAddLastname.delegate = self self.editOEGD_txtPrefix.delegate = self self.editOEGD_txtGender.delegate = self self.editOEGD_txtBirthday.delegate = self self.editOEGD_txtStreet.delegate = self self.editOEGD_txtZip.delegate = self self.editOEGD_txtCity.delegate = self self.editOEGD_txtTelefon.delegate = self self.editOEGD_txtTitle.returnKeyType = .next self.editOEGD_txtFirstname.returnKeyType = .next self.editOEGD_txtLastname.returnKeyType = .next self.editOEGD_txtAddLastname.returnKeyType = .next self.editOEGD_txtPrefix.returnKeyType = .next self.editOEGD_txtGender.returnKeyType = .next self.editOEGD_txtBirthday.returnKeyType = .next self.editOEGD_txtStreet.returnKeyType = .next self.editOEGD_txtZip.returnKeyType = .next self.editOEGD_txtCity.returnKeyType = .next self.editOEGD_txtTelefon.returnKeyType = .done self.addDoneToolbar([self.editOEGD_txtTitle, self.editOEGD_txtFirstname, self.editOEGD_txtLastname, self.editOEGD_txtAddLastname, self.editOEGD_txtPrefix, self.editOEGD_txtGender, self.editOEGD_txtStreet, self.editOEGD_txtZip, self.editOEGD_txtCity, self.editOEGD_txtTelefon]) self.hideKeyboardWhenTappedAround() self.createDatePicker() self.optionsPopup_Overlay.frame = self.view.frame self.view.addSubview(self.optionsPopup_Overlay) optionsPopup_Overlay.isHidden = true optionsPopup_ConfirmDelete.isHidden = true self.editPopup_Overlay.frame = self.view.frame self.view.addSubview(self.editPopup_Overlay) editPopup_Overlay.isHidden = true self.policyPopup_Overlay.frame = self.view.frame self.view.addSubview(self.policyPopup_Overlay) policyPopup_Overlay.isHidden = true self.editPopup_Checkbox = CheckBoxButton(frame: CGRect(x: 20, y: 10, width: 30, height: 30)) self.editOEGD_CWAPolicyView.addSubview(self.editPopup_Checkbox) let gesture = UITapGestureRecognizer(target: self, action: #selector(didTapCheckbox)) self.editPopup_Checkbox.addGestureRecognizer(gesture) self.editPopup_Checkbox.setChecked(flag: true) self.genderDownPicker = DownPicker(textField: editOEGD_txtGender, withData: (Genders as! [Any])) self.scrollView.delegate = self self.InitializeScrollView() //calc top-position of round Back-button let screenBound = UIScreen.main.bounds; var width = CGFloat((screenBound.width * 30) / 100.0) if(width > 100.0) { width = CGFloat(100.0) } //calc new height for ScrollView in edit OEGD let bottom = (screenBound.height - 100) - (width / 2.0) - 30 var newHeight = bottom - self.editPopup_ScrollView.frame.origin.y self.editPopup_HeightScrollView.constant = newHeight //calc new height for ScrollView in main form (for QRCode), minus 10 pt for Page-control newHeight = bottom - self.scrollView.frame.origin.y - 10 self.mainOEGD_HeightScrollView.constant = newHeight let menuImg = UIImage(named: "ic_dehaze")?.image(alpha: 1.0, targetSize: CGSize(width: menuBtnWidth, height: menuBtnHeight)) self.mainOEGD_MenuBtn.setImage(menuImg, for: .normal) } @objc func alarmAlertActivate(){ UIView.animate(withDuration: 0.7) { let menuImg = UIImage(named: "ic_dehaze")?.image(alpha: self.isAlpha1 ? 1.0: 0.0, targetSize: CGSize(width: self.menuBtnWidth, height: self.menuBtnHeight)) self.mainOEGD_MenuBtn.setImage(menuImg, for: .normal) } self.isAlpha1 = !self.isAlpha1 } func scrollViewDidScroll(_ scrollView: UIScrollView) { let pageIndex = round(scrollView.contentOffset.x/view.frame.width) pageControl.currentPage = Int(pageIndex) self.CurrentOEGDFile = self.OEGDFiles[Int(pageIndex)] } internal func textFieldShouldReturn(_ textField: UITextField) -> Bool { self.switchBasedNextTextField(textField) return true } private func switchBasedNextTextField(_ textField: UITextField) { switch textField { case self.editOEGD_txtTitle: self.editOEGD_txtFirstname.becomeFirstResponder() case self.editOEGD_txtFirstname: self.editOEGD_txtLastname.becomeFirstResponder() case self.editOEGD_txtLastname: self.editOEGD_txtAddLastname.becomeFirstResponder() case self.editOEGD_txtAddLastname: self.editOEGD_txtPrefix.becomeFirstResponder() case self.editOEGD_txtPrefix: self.editOEGD_txtGender.becomeFirstResponder() case self.editOEGD_txtGender: self.editOEGD_txtBirthday.becomeFirstResponder() case self.editOEGD_txtBirthday: self.editOEGD_txtStreet.becomeFirstResponder() case self.editOEGD_txtStreet: self.editOEGD_txtZip.becomeFirstResponder() case self.editOEGD_txtZip: self.editOEGD_txtCity.becomeFirstResponder() case self.editOEGD_txtCity: self.editOEGD_txtTelefon.becomeFirstResponder() default: self.view.endEditing(true) } } private func InitializeScrollView() { self.LoadOEGDs() if(self.OEGDFiles.count>0) { let slides: [UISlider] = createSlides() setupSlideScrollView(slides: slides) scrollView.contentOffset.x = 0 pageControl.numberOfPages = slides.count pageControl.currentPage = 0 view.bringSubviewToFront(pageControl) self.CurrentOEGDFile = self.OEGDFiles[0] self.scrollView.isHidden = false self.pageControl.isHidden = false optionsPopup_EditContent.isHidden = false optionsPopup_DeleteContent.isHidden = false } else { self.CurrentOEGDFile = nil self.scrollView.isHidden = true self.pageControl.isHidden = true optionsPopup_EditContent.isHidden = true optionsPopup_DeleteContent.isHidden = true } self.FormMenuButton() } func setupSlideScrollView(slides : [UISlider]) { scrollView.frame = CGRect(x: 0, y: 100, width: view.frame.width, height: view.frame.height-300) scrollView.contentSize = CGSize(width: view.frame.width * CGFloat(slides.count), height: view.frame.height-300) scrollView.isPagingEnabled = true for i in 0 ..< slides.count { slides[i].frame = CGRect(x: view.frame.width * CGFloat(i), y: 0, width: view.frame.width, height: view.frame.height-200) scrollView.addSubview(slides[i]) } } func createSlides() -> [UISlider] { var slides: [UISlider] = [] let fileCounter = self.OEGDFiles.count if ( fileCounter > 0) { pageControl.numberOfPages = fileCounter for index in 0.. UIImage { let context = CIContext() let data = content let filter = CIFilter.qrCodeGenerator() filter.setValue(data, forKey: "inputMessage") if let outputImage = filter.outputImage { let transform = CGAffineTransform(scaleX: 10, y: 10) let scaledQRImage = outputImage.transformed(by: transform) if let cgimg = context.createCGImage(scaledQRImage, from: scaledQRImage.extent){ return UIImage(cgImage: cgimg) } } return UIImage(systemName: "xmark.circle") ?? UIImage() } private func PrepareEditOEGD() { self.currentMode = OEGDEditType.Edit self.LBL_EDIT_TITLE.text = Core.Lang.Get(key: "LBL_EDIT_OEGD") if (self.CurrentOEGDFile != nil) { let curOEGD = self.CurrentOEGDFile?.OEGD self.editOEGD_txtTitle.text = curOEGD?.title self.editOEGD_txtFirstname.text = curOEGD?.first_name self.editOEGD_txtLastname.text = curOEGD?.last_name self.editOEGD_txtAddLastname.text = curOEGD?.name_addition self.editOEGD_txtPrefix.text = curOEGD?.prefix let curGender = curOEGD?.gender ?? "" if(curGender == "M") { self.editOEGD_txtGender.text = Genders[0] as? String } else if(curGender == "W") { self.editOEGD_txtGender.text = Genders[1] as? String } else if(curGender == "D") { self.editOEGD_txtGender.text = Genders[2] as? String } else if(curGender == "X") { self.editOEGD_txtGender.text = Genders[3] as? String } if((curOEGD?.birthdate ?? "").count > 0) { let birthday = curOEGD?.GetBirthday() if(birthday != nil) { self.editOEGD_dtBirthday.setDate(birthday!, animated: false) self.editOEGD_txtBirthday.text = curOEGD?.GetFormatedBirthday() } } self.editOEGD_txtStreet.text = curOEGD?.address.street_number self.editOEGD_txtZip.text = curOEGD?.address.zip_code self.editOEGD_txtCity.text = curOEGD?.address.city self.editOEGD_txtTelefon.text = curOEGD?.phone self.editPopup_Checkbox.setChecked(flag: (curOEGD?.cwa_consent_flag ?? false)) } } private func PrepareNewOEGD() { self.currentMode = OEGDEditType.New self.LBL_EDIT_TITLE.text = Core.Lang.Get(key: "LBL_NEW_OEGD") self.editOEGD_txtTitle.text = nil self.editOEGD_txtFirstname.text = nil self.editOEGD_txtLastname.text = nil self.editOEGD_txtAddLastname.text = nil self.editOEGD_txtPrefix.text = nil self.editOEGD_txtGender.text = nil self.editOEGD_txtBirthday.text = nil self.editOEGD_dtBirthday.setDate(Date(), animated: false) self.editOEGD_txtStreet.text = nil self.editOEGD_txtZip.text = nil self.editOEGD_txtCity.text = nil self.editOEGD_txtTelefon.text = nil //self.editPopup_Checkbox.setChecked(flag: false) } private func OpenConfirmDialog() { let confirmText = Core.Lang.Get(key: "MSG_SURE_WANT_DELETE").replacingOccurrences(of: "[ITEM]", with: (self.CurrentOEGDFile?.OEGD.first_name ?? "") + " " + (self.CurrentOEGDFile?.OEGD.last_name ?? "")) self.optionsOEGD_DeleteTitle.text = confirmText self.optionsPopup_ConfirmDelete.isHidden = false self.optionsPopup_ButtonsContent.isHidden = true } private func CancelConfirmDialog() { self.optionsPopup_ConfirmDelete.isHidden = true self.optionsPopup_ButtonsContent.isHidden = false } private func DeleteCurrentOEGD() { if(self.CurrentOEGDFile != nil) { let fileName = self.CurrentOEGDFile?.filename let filePath = Core.System.GetPathForStorageFile(filename: fileName!) if(filePath != nil) { Core.System.DeleteFile(atPath: filePath!) } } } @objc func didTapCheckbox() { self.editPopup_Checkbox.toogle() } func SetLabels() { self.LBL_TITLE.text = Core.Lang.Get(key: "LBL_OEGD") self.LBL_NO_OEGD.text = Core.Lang.Get(key: "LBL_NO_OEGD") //self.LBL_BACK.text = Core.Lang.Get(key: "BTN_BACK") self.editOEGD_txtTitle.placeholder = Core.Lang.Get(key: "LBL_TITLE") self.editOEGD_txtFirstname.placeholder = Core.Lang.Get(key: "LBL_FIRSTNAME") self.editOEGD_txtLastname.placeholder = Core.Lang.Get(key: "LBL_LASTNAME") self.editOEGD_txtAddLastname.placeholder = Core.Lang.Get(key: "LBL_ADDITION_NAME") self.editOEGD_txtPrefix.placeholder = Core.Lang.Get(key: "LBL_NAME_PREFIX") self.editOEGD_txtGender.placeholder = Core.Lang.Get(key: "LBL_GENDER") self.editOEGD_txtBirthday.placeholder = Core.Lang.Get(key: "LBL_BIRTHDAY") self.editOEGD_txtStreet.placeholder = Core.Lang.Get(key: "LBL_STREET") self.editOEGD_txtZip.placeholder = Core.Lang.Get(key: "LBL_ZIP") self.editOEGD_txtCity.placeholder = Core.Lang.Get(key: "LBL_CITY") self.editOEGD_txtTelefon.placeholder = Core.Lang.Get(key: "LBL_TELEFON") self.editOEGD_CWAPolicyBtn.setTitle(Core.Lang.Get(key: "BTN_ACCEPT_CWA_POLICY"), for: .normal) self.editOEGD_Status.text = "" self.editOEGD_CreateBtn.setTitle(Core.Lang.Get(key: "BTN_REGISTER"), for: .normal) self.LBL_POLICY_TITLE.text = Core.Lang.Get(key: "LBL_CWA_POLICY") self.policyPopup_PolicyText.text = Core.Lang.Get(key: "CWA_POLICY_TEXT") self.policyPopup_btnAcceptPolicy.setTitle(Core.Lang.Get(key: "BTN_ACCEPT_CWA_POLICY"), for: .normal) self.optionsOEGD_AddBtn.setTitle(Core.Lang.Get(key: "BTN_REGISTER"), for: .normal) self.optionsOEGD_EditBtn.setTitle(Core.Lang.Get(key: "BTN_EDIT"), for: .normal) self.optionsOEGD_DeleteBtn.setTitle(Core.Lang.Get(key: "BTN_DELETE"), for: .normal) self.optionsOEGD_CancelBtn.setTitle(Core.Lang.Get(key: "BTN_CANCEL"), for: .normal) self.optionsOEGD_DeleteYesBtn.setTitle(Core.Lang.Get(key: "BTN_YES"), for: .normal) self.optionsOEGD_DeleteNoBtn.setTitle(Core.Lang.Get(key: "BTN_NO"), for: .normal) } func createDatePicker() { self.editOEGD_dtBirthday.locale = Locale(identifier: Core.Lang.GetLocale()) self.editOEGD_dtBirthday.calendar.locale = Locale(identifier: Core.Lang.GetLocale()) self.editOEGD_dtBirthday.datePickerMode = .date self.editOEGD_dtBirthday.preferredDatePickerStyle = .wheels self.editOEGD_dtBirthday.maximumDate = Date() let toolbar = UIToolbar() let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) let btnDone = UIBarButtonItem(title: Core.Lang.Get(key: "BTN_DONE"), style: .done, target: nil, action: #selector(editOEGD_dtBirthdayDone)) toolbar.sizeToFit() toolbar.setItems([ flexSpace, btnDone ], animated: true) self.editOEGD_txtBirthday.inputAccessoryView = toolbar self.editOEGD_txtBirthday.inputView = self.editOEGD_dtBirthday } @objc func editOEGD_dtBirthdayDone() { let dateFormatter = DateFormatter() dateFormatter.dateFormat = "dd.MM.yyyy" let dt = dateFormatter.string(from: self.editOEGD_dtBirthday.date) self.editOEGD_txtBirthday.text = dt self.editOEGD_txtBirthday.becomeFirstResponder() self.view.endEditing(true) } @IBAction func goBack(_ sender: Any) { self.view.endEditing(true) self.dismiss(animated: true, completion: nil) } @IBAction func mainOEGD_MenuBtn_Click(_ sender: Any) { self.ShowOEGDOptions() } private func ShowOEGDOptions() { self.scrollView.isHidden = true self.pageControl.isHidden = true self.optionsPopup_Overlay.frame.origin = CGPoint(x: -self.optionsPopup_Overlay.frame.width, y: self.optionsPopup_Overlay.frame.origin.y) self.optionsPopup_Overlay.isHidden = false UIView.animate(withDuration: 0.24, animations: { self.optionsPopup_Overlay.frame.origin = CGPoint(x: 0, y: self.optionsPopup_Overlay.frame.origin.y) }) } @IBAction func optionsOEGD_CancelBtn_Click(_ sender: Any) { self.InitializeScrollView() self.HideOEGDOptions() } private func HideOEGDOptions() { UIView.animate(withDuration: 0.24, animations: { self.optionsPopup_Overlay.frame.origin = CGPoint(x: -self.optionsPopup_Overlay.frame.width, y: self.optionsPopup_Overlay.frame.origin.y) }) {_ in self.optionsPopup_Overlay.isHidden = true } } @IBAction func optionsOEGD_EditBtn_Click(_ sender: Any) { self.PrepareEditOEGD() self.ShowOEGDEdit() } @IBAction func optionsOEGD_AddBtn_Click(_ sender: Any) { self.PrepareNewOEGD() self.ShowOEGDEdit() } @IBAction func optionsOEGD_ConfirmYesBtn_Click(_ sender: Any) { self.DeleteCurrentOEGD() self.CancelConfirmDialog() self.InitializeScrollView() self.HideOEGDOptions() } @IBAction func optionsOEGD_ConfirmNoBtn_Click(_ sender: Any) { self.CancelConfirmDialog() } @IBAction func optionsOEGD_DeleteBtn_Click(_ sender: Any) { self.OpenConfirmDialog() } private func ShowOEGDEdit() { self.editPopup_Overlay.frame.origin = CGPoint(x: -self.optionsPopup_Overlay.frame.width, y: self.editPopup_Overlay.frame.origin.y) self.editPopup_Overlay.isHidden = false UIView.animate(withDuration: 0.24, animations: { self.editPopup_Overlay.frame.origin = CGPoint(x: 0, y: self.optionsPopup_Overlay.frame.origin.y) self.optionsPopup_Overlay.frame.origin = CGPoint(x: self.optionsPopup_Overlay.frame.width, y: self.optionsPopup_Overlay.frame.origin.y) }) {_ in self.optionsPopup_Overlay.isHidden = true } } private func NewOEGDCreate(filename: String?) -> Bool { let firstName = editOEGD_txtFirstname.text ?? "" let lastName = editOEGD_txtLastname.text ?? "" let gender = editOEGD_txtGender.text ?? "" let birthday = editOEGD_txtBirthday.text ?? "" let street = editOEGD_txtStreet.text ?? "" let zip = editOEGD_txtZip.text ?? "" let city = editOEGD_txtCity.text ?? "" editOEGD_Status.text = "" if(firstName.count==0) { editOEGD_Status.text = Core.Lang.Get(key: "ERROR_ENTER_FIRSTNAME") } else if(lastName.count == 0) { editOEGD_Status.text = Core.Lang.Get(key: "ERROR_ENTER_LASTNAME") } else if(birthday.count == 0) { editOEGD_Status.text = Core.Lang.Get(key: "ERROR_ENTER_BIRTHDAY") } else if(gender.count == 0) { editOEGD_Status.text = Core.Lang.Get(key: "ERROR_ENTER_GENDER") } else if(street.count == 0) { editOEGD_Status.text = Core.Lang.Get(key: "ERROR_ENTER_STREET") } else if(zip.count == 0) { editOEGD_Status.text = Core.Lang.Get(key: "ERROR_ENTER_ZIP") } else if(city.count == 0) { editOEGD_Status.text = Core.Lang.Get(key: "ERROR_ENTER_CITY") } else if(!editPopup_Checkbox.IsChecked()) { editOEGD_Status.text = Core.Lang.Get(key: "ERROR_ERROR_ACCEPT_CWA_POLICY") } else { let oegd = Core.Models.OEGD() oegd.first_name = firstName oegd.last_name = lastName oegd.gender = gender oegd.title = (editOEGD_txtTitle.text ?? "") oegd.name_addition = (editOEGD_txtAddLastname.text ?? "") oegd.prefix = (editOEGD_txtPrefix.text ?? "") let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd" oegd.birthdate = dateFormatter.string(from: self.editOEGD_dtBirthday.date) if(gender.elementsEqual(Core.Lang.Get(key: "LBL_GENDER_M"))) { oegd.gender = "M"; } else if(gender.elementsEqual(Core.Lang.Get(key: "LBL_GENDER_W"))) { oegd.gender = "W"; } else if(gender.elementsEqual(Core.Lang.Get(key: "LBL_GENDER_D"))) { oegd.gender = "D"; } else { oegd.gender = "X"; } oegd.address.zip_code = zip oegd.address.city = city oegd.address.street_number = street oegd.address.country_code = "D" oegd.cwa_consent_flag = true oegd.phone = (editOEGD_txtTelefon.text ?? "") let jsonEncoder = JSONEncoder() var jsonData: Data? do{ jsonData = try jsonEncoder.encode(oegd) } catch let err { Core.Log.Error(err: err, namespace: "OEGDController", method: "NewOEGDCreate") } let json = String(data: jsonData!, encoding: .utf8) if(json != nil) { let password = Core.Security.AES.GetKey(password: AppDelegate.Session.DevicePassword) let encryptedContent = Core.Security.AES.Encrypt(value: (json ?? ""), password: String(decoding: password, as: UTF8.self)) ?? "" if (encryptedContent.count>0) { var fileName2Store: String if (filename == nil) { let formatter = DateFormatter() formatter.dateFormat = "yyyyMMdd_HH_mm_ss" fileName2Store = formatter.string(from: Date()) + NSUUID().uuidString.replacingOccurrences(of: "-", with: "") + ".oegd" } else { fileName2Store = filename! } if (Core.System.WriteToStorage(filename: fileName2Store, data: encryptedContent.data(using: .utf8)!)) { return true } else { editOEGD_Status.text = Core.Lang.Get(key: "ERROR_COULD_NOT_SAVE_OEGD") } } else { editOEGD_Status.text = Core.Lang.Get(key: "ERROR_COULD_NOT_SAVE_OEGD") } } } return false } private func LoadOEGDs() { self.OEGDFiles = [] let oegdfiles = Core.System.GetOEGDFiles() if(oegdfiles.count>0) { for oneFile in oegdfiles { let encrypted_content = Core.System.ReadFromStorage(filename: oneFile) if (encrypted_content != nil) { let pwd = Core.Security.AES.GetKey(password: AppDelegate.Session.DevicePassword) let json = Core.Security.AES.Decrypt(value: String(decoding: encrypted_content!, as: UTF8.self), password: String(decoding: pwd, as: UTF8.self )) if(json != nil) { let jsonDecoder = JSONDecoder() do { let obj = try jsonDecoder.decode(Core.Models.OEGD.self, from: (json?.data(using: .utf8))!) let oegdFile = Core.Models.OEGDFile(OEGD: obj, filename: oneFile) self.OEGDFiles.append(oegdFile) } catch let err { Core.Log.Error(err: err, namespace: "OEGDController", method: "LoadOEGDs") } } } } } } @IBAction func editOEGD_SaveBtn_Click(_ sender: Any) { var filename: String? = nil if (self.currentMode == OEGDEditType.Edit) { filename = self.CurrentOEGDFile?.filename } if (NewOEGDCreate(filename: filename)) { self.HideOEGDEdit() self.HideOEGDOptions() self.InitializeScrollView() } } @IBAction func editOEGD_BackBtn_Click(_ sender: Any) { self.HideOEGDEdit() } private func HideOEGDEdit() { self.optionsPopup_Overlay.isHidden = false UIView.animate(withDuration: 0.24, animations: { self.editPopup_Overlay.frame.origin = CGPoint(x: -self.editPopup_Overlay.frame.width, y: self.optionsPopup_Overlay.frame.origin.y) self.optionsPopup_Overlay.frame.origin = CGPoint(x: 0, y: self.optionsPopup_Overlay.frame.origin.y) }) {_ in self.editPopup_Overlay.isHidden = true } } @IBAction func editOEGD_PolicyBtn_Click(_ sender: Any) { //self.ShowCWAPolicy() //self.ShowCWAPolicyInWeb() } private func ShowCWAPolicyInWeb() { guard let url = URL(string: CWAPolicyLink) else { return } let vc = WebViewController(url: url, title: Core.Lang.Get(key: "BTN_ACCEPT_CWA_POLICY"), localUrl: url) vc.parentView = self let navVC = UINavigationController(rootViewController: vc) present(navVC, animated: true) } private func ShowCWAPolicy() { self.policyPopup_Overlay.frame.origin = CGPoint(x: -self.policyPopup_Overlay.frame.width, y: self.editPopup_Overlay.frame.origin.y) self.policyPopup_Overlay.isHidden = false UIView.animate(withDuration: 0.24, animations: { self.policyPopup_Overlay.frame.origin = CGPoint(x: 0, y: self.policyPopup_Overlay.frame.origin.y) self.editPopup_Overlay.frame.origin = CGPoint(x: self.editPopup_Overlay.frame.width, y: self.editPopup_Overlay.frame.origin.y) }) {_ in self.editPopup_Overlay.isHidden = true } } @IBAction func policyPopup_AcceptBtn_Click(_ sender: Any) { self.HideCWAPolicy() } private func HideCWAPolicy() { self.editPopup_Checkbox.setChecked(flag: true) self.editPopup_Overlay.isHidden = false UIView.animate(withDuration: 0.24, animations: { self.policyPopup_Overlay.frame.origin = CGPoint(x: -self.editPopup_Overlay.frame.width, y: self.policyPopup_Overlay.frame.origin.y) self.editPopup_Overlay.frame.origin = CGPoint(x: 0, y: self.editPopup_Overlay.frame.origin.y) }) {_ in self.policyPopup_Overlay.isHidden = true } } }