diff --git a/POSTerminal/AppDelegate.swift b/POSTerminal/AppDelegate.swift index 01f58dc..a4c622e 100644 --- a/POSTerminal/AppDelegate.swift +++ b/POSTerminal/AppDelegate.swift @@ -26,11 +26,11 @@ class AppDelegate: UIResponder, UIApplicationDelegate { Settings.loadFormUserDefaults() // Settings.sharedInstance.wpBase = Host(baseURL: "http://arma.ngslab.ru:28081/WPServ", login: "I.Novikov", password: "123456789") // Settings.sharedInstance.equipServ = Host(baseURL: "http://arma.ngslab.ru:28081/EquipServ", login: "", password: "") - ClientManager.currentClient = Client(id: "afcb9338-0892-11e6-93fd-525400643a93", code: "381", name: "Стол 3", balance: 32000) - ClientManager.currentClient?.identity = ClientIdentity(code: "381", type: "TracksData", readerData: ["clientRef": "afcb9338-0892-11e6-93fd-525400643a93", - "clientName": "Стол 3", - "balance": 6000, - "clientCode": "381"]) +// ClientManager.currentClient = Client(id: "afcb9338-0892-11e6-93fd-525400643a93", code: "381", name: "Стол 3", balance: 32000) +// ClientManager.currentClient?.identity = ClientIdentity(code: "381", type: "TracksData", readerData: ["clientRef": "afcb9338-0892-11e6-93fd-525400643a93", +// "clientName": "Стол 3", +// "balance": 6000, +// "clientCode": "381"]) if let colorString = Settings.sharedInstance.baseColorHex, color = UIColor.colorWithHex(colorString) { ColorsManager.sharedManager.baseColor = color @@ -80,14 +80,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ClientManager.currentClient = client NSNotificationCenter.defaultCenter().postNotificationName(clientUpdatedNotification, object: nil) case .Failure(let error): - let alert = UIAlertController(title: "kek", message: "\(error)", preferredStyle: .Alert) - alert.addAction(UIAlertAction(title: "ok", style: .Default, handler: nil)) + let alert = UIAlertController(title: "Ошибка", message: "\(error)", preferredStyle: .Alert) + alert.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil)) NSNotificationCenter.defaultCenter().postNotificationName(presentViewControllerNotification, object: nil, userInfo: ["viewController": alert]) print(error) } } } - return HttpResponse.OK(.Json(["message": "ok!"])) + return HttpResponse.OK(.Json(["message": "OK!"])) } try! server.start(9080, forceIPv4: true) diff --git a/POSTerminal/CheckoutViewController.swift b/POSTerminal/CheckoutViewController.swift index 8310a67..7460ad1 100644 --- a/POSTerminal/CheckoutViewController.swift +++ b/POSTerminal/CheckoutViewController.swift @@ -1,6 +1,7 @@ import UIKit import RealmSwift import SwiftyJSON +import SwiftSpinner class CheckoutViewController: UIViewController { @@ -170,13 +171,16 @@ extension CheckoutViewController: PaymentControllerDelegate { return } + SwiftSpinner.show("Запись данных на RFID") ServerManager.sharedManager.updateClientBalance(client, balance: client.balance - manager.totalPrice) { (response) in dispatch_async(dispatch_get_main_queue()) { switch response.result { case .Success(_): self.createCheck() case .Failure(let error): - self.presentAlertWithMessage("Не удалось записать данные!") + SwiftSpinner.hide { + self.presentAlertWithMessage("Не удалось записать данные!") + } if !OrderManager.currentOrder.payments.isEmpty { OrderManager.currentOrder.payments.removeLast() } @@ -194,6 +198,7 @@ extension CheckoutViewController: PaymentControllerDelegate { guard let client = ClientManager.currentClient else { return } let check = Check(client: client, items: manager.items, payemnts: manager.payments) + SwiftSpinner.show("Регистрация покупки") ServerManager.sharedManager.create(check) { (response) in dispatch_async(dispatch_get_main_queue()) { switch response.result { @@ -217,7 +222,9 @@ extension CheckoutViewController: PaymentControllerDelegate { } self.didUpdatePayments() print(error) - self.presentAlertWithMessage("Не удалось создать чек!") + SwiftSpinner.hide { + self.presentAlertWithMessage("Не удалось создать чек!") + } } } } @@ -226,6 +233,8 @@ extension CheckoutViewController: PaymentControllerDelegate { /// Prints check for current order func printCheck(check: Check) { let manager = OrderManager.currentOrder + + SwiftSpinner.show("Печать чека") ServerManager.sharedManager.printCheck(check) { response in dispatch_async(dispatch_get_main_queue()) { switch response.result { @@ -242,10 +251,12 @@ extension CheckoutViewController: PaymentControllerDelegate { Settings.sharedInstance.discountsBalance -= OrderManager.currentOrder.totalPrice } Settings.saveToUserDefaults() + SwiftSpinner.hide() OrderManager.currentOrder.clearOrder() ClientManager.currentClient = nil NSNotificationCenter.defaultCenter().postNotificationName(endCheckoutNotification, object: nil) case .Failure(let error): + SwiftSpinner.show("Не удалось напечатать чек", animated: false) print(error) } } diff --git a/POSTerminal/Client.swift b/POSTerminal/Client.swift index bd3e568..7c250cb 100644 --- a/POSTerminal/Client.swift +++ b/POSTerminal/Client.swift @@ -20,8 +20,17 @@ struct Client { extension Client: ServerObject { static func createWith(json: JSON) -> Client? { - guard let id = json["clientRef"].string, name = json["clientName"].string, - balance = json["balance"].double, code = json["clientCode"].string else { + guard let id = json["clientRef"].string, name = json["clientName"].string, code = json["clientCode"].string else { + return nil + } + + let balance: Double + + if let doubleBalance = json["balance"].double { + balance = doubleBalance + } else if let stringBalance = json["balance"].string, doubleBalance = Double(stringBalance) { + balance = doubleBalance + } else { return nil } diff --git a/POSTerminal/EquipmentManagementTableViewController.swift b/POSTerminal/EquipmentManagementTableViewController.swift index 1ae377d..0ed7b3e 100644 --- a/POSTerminal/EquipmentManagementTableViewController.swift +++ b/POSTerminal/EquipmentManagementTableViewController.swift @@ -1,5 +1,6 @@ import UIKit import PureLayout +import SwiftSpinner class EquipmentManagementTableViewController: UITableViewController { @@ -63,50 +64,45 @@ class EquipmentManagementTableViewController: UITableViewController { } func finishMenuUpdate() { - hideActivityIndicator() - presentAlertWithMessage("Меню обновлено!") + hideActivityIndicator("Меню обновлено!") } //MARK: - Indicator methods - func showActivityIndicator() { - tableView.addSubview(activityIndicator) - activityIndicator.autoCenterInSuperview() - activityIndicator.autoSetDimensionsToSize(CGSize(width: 70, height: 70)) - activityIndicator.hidden = false - activityIndicator.startAnimating() + //TODO: rename me pls + func showActivityIndicator(message: String) { + SwiftSpinner.show(message) } - func hideActivityIndicator() { - activityIndicator.stopAnimating() - activityIndicator.removeFromSuperview() - activityIndicator.hidden = true + //TODO: and me + func hideActivityIndicator(message: String) { + SwiftSpinner.show(message, animated: false).addTapHandler({ + SwiftSpinner.hide() + }, subtitle: "Нажмите, чтобы закрыть") } //MARK: - Actions @IBAction func updateMenu() { NSNotificationCenter.defaultCenter().postNotificationName(updateMenuNotification, object: nil) - showActivityIndicator() + showActivityIndicator("Обновление меню") } @IBAction func openDay() { var sendCommands = 0 - showActivityIndicator() + showActivityIndicator("Открытие смены") ServerManager.sharedManager.openDay { (response) in dispatch_async(dispatch_get_main_queue()) { switch response.result { case .Success(_): sendCommands += 1 if sendCommands == 2 { - self.presentAlertWithMessage("Кассовая смена открыта") - self.hideActivityIndicator() + self.hideActivityIndicator("Кассовая смена открыта") } case .Failure(let error): print(error) - self.presentAlertWithTitle("Ошибка", andMessage: "Не удалсь открыть смену в базе оборудования") - self.hideActivityIndicator() + self.hideActivityIndicator("Не удалсь открыть смену в базе оборудования") } } } @@ -117,13 +113,11 @@ class EquipmentManagementTableViewController: UITableViewController { case .Success(_): sendCommands += 1 if sendCommands == 2 { - self.presentAlertWithMessage("Кассовая смена открыта") - self.hideActivityIndicator() + self.hideActivityIndicator("Кассовая смена открыта") } case .Failure(let error): print(error) - self.presentAlertWithTitle("Ошибка", andMessage: "Не удалсь открыть смену в базе рабочего места") - self.hideActivityIndicator() + self.hideActivityIndicator("Не удалсь открыть смену в базе рабочего места") } } } @@ -131,20 +125,18 @@ class EquipmentManagementTableViewController: UITableViewController { @IBAction func closeDay() { var sendCommands = 0 - showActivityIndicator() + showActivityIndicator("Закрытие смены") ServerManager.sharedManager.printZReport { (response) in dispatch_async(dispatch_get_main_queue()) { switch response.result { case .Success(_): sendCommands += 1 if sendCommands == 2 { - self.presentAlertWithMessage("Кассовая смена закрыта!") - self.hideActivityIndicator() + self.hideActivityIndicator("Кассовая смена закрыта!") } case .Failure(let error): print(error) - self.presentAlertWithMessage("Не удалось закрыть смену в базе оборудования") - self.hideActivityIndicator() + self.hideActivityIndicator("Не удалось закрыть смену в базе оборудования") } } } @@ -155,30 +147,26 @@ class EquipmentManagementTableViewController: UITableViewController { case .Success(_): sendCommands += 1 if sendCommands == 2 { - self.presentAlertWithMessage("Кассовая смена закрыта!") - self.hideActivityIndicator() + self.hideActivityIndicator("Кассовая смена закрыта!") } case .Failure(let error): print(error) - self.presentAlertWithMessage("Не удалось закрыть смену в базе рабочего места") - self.hideActivityIndicator() + self.hideActivityIndicator("Не удалось закрыть смену в базе рабочего места") } } } } @IBAction func printXReport() { - showActivityIndicator() + showActivityIndicator("Печать отчета") ServerManager.sharedManager.printXReport { (response) in dispatch_async(dispatch_get_main_queue()) { switch response.result { case .Success(_): - self.presentAlertWithMessage("Отчет отправлен на печать") - self.hideActivityIndicator() + self.hideActivityIndicator("Отчет отправлен на печать") case .Failure(let error): print(error) - self.presentAlertWithMessage("Не удалось напечатать отчет") - self.hideActivityIndicator() + self.hideActivityIndicator("Не удалось напечатать отчет") } } } @@ -215,7 +203,7 @@ class EquipmentManagementTableViewController: UITableViewController { } private func encash(sum: Double, type: EncashType) { - showActivityIndicator() + showActivityIndicator("Инкасcация") ServerManager.sharedManager.printXReport { (response) in dispatch_async(dispatch_get_main_queue()) { switch response.result { @@ -223,8 +211,7 @@ class EquipmentManagementTableViewController: UITableViewController { self.sendEncashRequest(sum, type: type) case .Failure(let error): print(error) - self.presentAlertWithMessage("Не удалось напечатать отчет") - self.hideActivityIndicator() + self.hideActivityIndicator("Не удалось напечатать отчет") } } } @@ -238,15 +225,13 @@ class EquipmentManagementTableViewController: UITableViewController { case .Success(_): sentCommands += 1 if sentCommands == 2 { - self.hideActivityIndicator() self.updateBalance(sum, forEncash: type) self.balanceLabel.text = Settings.sharedInstance.cashBalance.format() - self.presentAlertWithMessage("Инкассация успешно проведена!") + self.hideActivityIndicator("Инкассация успешно проведена!") } case .Failure(let error): print(error) - self.hideActivityIndicator() - self.presentAlertWithMessage("Ошибка при регистрации инкассации в базе оборудования") + self.hideActivityIndicator("Ошибка при регистрации инкассации в базе оборудования") } } } @@ -257,15 +242,13 @@ class EquipmentManagementTableViewController: UITableViewController { case .Success(_): sentCommands += 1 if sentCommands == 2 { - self.hideActivityIndicator() self.updateBalance(sum, forEncash: type) self.balanceLabel.text = Settings.sharedInstance.cashBalance.format() - self.presentAlertWithMessage("Инкассация успешно проведена!") + self.hideActivityIndicator("Инкассация успешно проведена!") } case .Failure(let error): print(error) - self.hideActivityIndicator() - self.presentAlertWithMessage("Ошибка при регистрации инкассации в базе рабочего места") + self.hideActivityIndicator("Ошибка при регистрации инкассации в базе рабочего места") } } } diff --git a/POSTerminal/SettingsTableViewController.swift b/POSTerminal/SettingsTableViewController.swift index 6159f5c..ec2d8eb 100644 --- a/POSTerminal/SettingsTableViewController.swift +++ b/POSTerminal/SettingsTableViewController.swift @@ -1,5 +1,6 @@ import UIKit import BCColor +import SwiftSpinner class SettingsTableViewController: UITableViewController { @@ -98,17 +99,22 @@ class SettingsTableViewController: UITableViewController { @IBAction func checkConnectionButtonAction() { var sentRequests = 0 + SwiftSpinner.show("Проверка соединения") ServerManager.sharedManager.checkConnectionInEQ { (response) in dispatch_async(dispatch_get_main_queue()) { switch response.result { case .Success(_): sentRequests += 1 if sentRequests == 2 { - self.presentAlertWithMessage("Обе базы успешно подключены!") + SwiftSpinner.show("Обе базы подключены", animated: false).addTapHandler({ + SwiftSpinner.hide() + }, subtitle: "Нажмите, чтобы закрыть") } case .Failure(let error): print(error) - self.presentAlertWithTitle("Ошибка", andMessage: "Не удалось подключиться к базе оборудования") + SwiftSpinner.show("Не удалось подключиться к базе оборудования", animated: false).addTapHandler({ + SwiftSpinner.hide() + }, subtitle: "Нажмите, чтобы закрыть") } } } @@ -119,11 +125,15 @@ class SettingsTableViewController: UITableViewController { case .Success(_): sentRequests += 1 if sentRequests == 2 { - self.presentAlertWithMessage("Обе базы успешно подключены!") + SwiftSpinner.show("Обе базы подключены", animated: false).addTapHandler({ + SwiftSpinner.hide() + }, subtitle: "Нажмите, чтобы закрыть") } case .Failure(let error): print(error) - self.presentAlertWithTitle("Ошибка", andMessage: "Не удалось подключиться к базе рабочего места") + SwiftSpinner.show("Не удалось подключиться к базе рабочего места", animated: false).addTapHandler({ + SwiftSpinner.hide() + }, subtitle: "Нажмите, чтобы закрыть") } } } @@ -133,14 +143,19 @@ class SettingsTableViewController: UITableViewController { if let host = RedSocketManager.sharedInstance().ipAddress() { let callbackURL = "http://\(host):9080/codes" print(callbackURL) + SwiftSpinner.show("Регистрация терминала") ServerManager.sharedManager.registerDeviceWithCallbackURL(callbackURL) { (response) in dispatch_async(dispatch_get_main_queue()) { switch response.result { case .Success(_): - self.presentAlertWithMessage("Мобильный терминал успешно зарегистрирован!") + SwiftSpinner.show("Успешно!", animated: false).addTapHandler({ + SwiftSpinner.hide() + }, subtitle: "Нажмите, чтобы закрыть") case .Failure(let error): print(error) - self.presentAlertWithMessage("Не удалось зарегистрировать мобильный терминал") + SwiftSpinner.show("Не удалось", animated: false).addTapHandler({ + SwiftSpinner.hide() + }, subtitle: "Нажмите, чтобы закрыть") } } } diff --git a/Podfile b/Podfile index 463239d..7d3de75 100644 --- a/Podfile +++ b/Podfile @@ -17,5 +17,6 @@ target 'POSTerminal' do # Tools pod 'PureLayout' pod 'BCColor' + pod 'SwiftSpinner' end diff --git a/Podfile.lock b/Podfile.lock index 2328f01..28a91f0 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -10,6 +10,7 @@ PODS: - Realm/Headers (1.0.0) - RealmSwift (1.0.0): - Realm (= 1.0.0) + - SwiftSpinner (0.9.5) - SwiftyJSON (2.3.2) DEPENDENCIES: @@ -19,6 +20,7 @@ DEPENDENCIES: - Fabric - PureLayout - RealmSwift + - SwiftSpinner - SwiftyJSON SPEC CHECKSUMS: @@ -29,8 +31,9 @@ SPEC CHECKSUMS: PureLayout: 4d550abe49a94f24c2808b9b95db9131685fe4cd Realm: e15cd8e7c11d3e576f628ba0b7cb855269b4991c RealmSwift: 3229306d020d96f83b335f87a0dcbf2cef0e6a2b + SwiftSpinner: c6585a0ae5c67eb33e737695cce88f0262008cce SwiftyJSON: 04ccea08915aa0109039157c7974cf0298da292a -PODFILE CHECKSUM: ae60fc3bec9a331fd0bab4041dc70915f05f8397 +PODFILE CHECKSUM: ffc6596588a3552ed1830ef36066b12ccfe6df59 COCOAPODS: 1.0.1