git.iko.soy/dashared/hookah-tau
on develop help sign in
Добавила экспорт в csv клиентской базы
commitbe45a28dfb853c1f0b953af14f9c24133b8eaa7b authorDarya Rednikina <rednikina.com@yandex.ru> dateThu 9 Jan 2020, 14:16 (7 years ago) parentb32f9ed
3 files changed+60−3
Hookah Tau/Controllers/Admin/Clients/ClientsViewController.swift+44−3 Hookah Tau/HFunc.swift+7 Hookah Tau/Models/User.swift+9
Hookah Tau/Controllers/Admin/Clients/ClientsViewController.swift+44−3
@@ -8,7 +8,7 @@
88
99import UIKit
1010
11−class ClientsViewController: UITableViewController {
11+class ClientsViewController: BaseTableViewController {
1212
1313 // MARK: - Properties
1414
@@ -27,7 +27,7 @@ class ClientsViewController: UITableViewController {
2727 override func viewDidLoad() {
2828 super.viewDidLoad()
2929
30− navigationItem.title = "Клиенты"
30+ setupNavigationBar()
3131 clientsService = ClientsService(apiClient: APIClient.shared)
3232 }
3333
@@ -40,6 +40,16 @@ class ClientsViewController: UITableViewController {
4040 super.viewDidAppear(animated)
4141 loadClients()
4242 }
43+
44+ // MARK: - Setup
45+
46+ func setupNavigationBar() {
47+
48+ navigationItem.title = "Клиенты"
49+ navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareCSVFile))
50+ }
51+
52+ // MARK: - Api calls
4353
4454 /// Загружаем клиентов кальянки
4555 func loadClients() {
@@ -53,8 +63,39 @@ class ClientsViewController: UITableViewController {
5363 })
5464 }
5565
66+ // MARK: - Button handlers
5667
57− // MARK: - Tableview
68+ /// https://developer.apple.com/design/human-interface-guidelines/ios/views/activity-views/
69+ @objc func shareCSVFile() {
70+ //Your CSV text
71+ let str = HFunc.main.exportClientsToCSV(dataSource)
72+ let filename = getDocumentsDirectory().appendingPathComponent("clients.csv")
73+
74+ do {
75+ try str.write(toFile: filename, atomically: true, encoding: String.Encoding.utf8)
76+
77+ let fileData = NSURL(fileURLWithPath: filename)
78+
79+ let objectsToShare = [fileData]
80+ let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
81+
82+ self.present(activityVC, animated: true, completion: nil)
83+
84+ } catch {
85+ self.displayAlert(with: "По какой-то причине не могу сохранить файл!")
86+ }
87+ }
88+
89+ func getDocumentsDirectory() -> NSString {
90+ let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
91+ let documentsDirectory = paths[0]
92+ return documentsDirectory as NSString
93+ }
94+}
95+
96+// MARK: - Tableview
97+
98+extension ClientsViewController {
5899
59100 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
60101 let cell = tableView.dequeueReusableCell(withIdentifier: clientTableViewCellId, for: indexPath) as! ClientTableViewCell
Hookah Tau/HFunc.swift+7
@@ -15,6 +15,9 @@ class HFunc {
1515
1616 static let main = HFunc()
1717
18+ func exportClientsToCSV(_ arr: [Client]) -> String {
19+ return arr.reduce(Client.csvHeading) { return funcToMapClientsIntoString($0, $1) }
20+ }
1821
1922 /// Filtering function to get every periods which intersects with given date
2023 /// - Parameter periods: all periods of bookings (for a particular table)
@@ -58,4 +61,8 @@ class HFunc {
5861
5962 return { (period: ReservationPeriod) in intervalChecking(period.startTime, period.endTime) }
6063 }
64+
65+ private func funcToMapClientsIntoString(_ acc: String, _ el: Client) -> String {
66+ return acc + el.toString + "\n"
67+ }
6168}
Hookah Tau/Models/User.swift+9
@@ -30,4 +30,13 @@ struct Client: MyCodable {
3030 var phoneNumber: String
3131 var isAdmin: Bool
3232 var reservationCount: Int
33+ var isBlocked: Bool
34+
35+ static var csvHeading: String {
36+ return "uuid, name, phone, isAdmin, reservationCount, isBlocked\n"
37+ }
38+
39+ var toString: String {
40+ return "\(uuid), \(name ?? "❔"), \(phoneNumber), \(isAdmin), \(reservationCount), \(isBlocked)"
41+ }
3342}