git.iko.soy/dashared/hookah-tau
on develop help sign in
Добавила put на изменение брони + расширяю возможности второго экрана для админа (период для брони)
commite8a990c77f37df8a25907189bce4be0941292788 authorDarya Rednikina <rednikina.com@yandex.ru> dateFri 29 Nov 2019, 18:00 (7 years ago) parent97b2720
5 files changed+119−10
Hookah Tau.xcodeproj/project.pbxproj+4 Hookah Tau/API/Reservations api/ReservationsService.swift+23−4 Hookah Tau/API/Reservations api/Resolvers/ChangeReservationResolver.swift+35 Hookah Tau/Controllers/Client/Reservations/Steps/2/SecondStepView.swift+16−6 Hookah Tau/Extensions+Date.swift+41
Hookah Tau.xcodeproj/project.pbxproj+4
@@ -16,6 +16,7 @@
1616 12118B9C23682022006BAEE3 /* RegistrationResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12118B9B23682022006BAEE3 /* RegistrationResolver.swift */; };
1717 12118B9E23682049006BAEE3 /* PhoneCodeResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12118B9D23682049006BAEE3 /* PhoneCodeResolver.swift */; };
1818 1212048C23914CFD00CAF162 /* DeleteReservationResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1212048B23914CFD00CAF162 /* DeleteReservationResolver.swift */; };
19+ 1212048E23915A0A00CAF162 /* ChangeReservationResolver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1212048D23915A0A00CAF162 /* ChangeReservationResolver.swift */; };
1920 12219CEF2353A63F0057DDEE /* ReservationsCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12219CEE2353A63E0057DDEE /* ReservationsCoordinator.swift */; };
2021 12230AEA238FD8B3004A01E5 /* MapView2.xib in Resources */ = {isa = PBXBuildFile; fileRef = 12230AE9238FD8B3004A01E5 /* MapView2.xib */; };
2122 12230AEC238FD8C5004A01E5 /* MapView2.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12230AEB238FD8C5004A01E5 /* MapView2.swift */; };
@@ -135,6 +136,7 @@
135136 12118B9B23682022006BAEE3 /* RegistrationResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegistrationResolver.swift; sourceTree = "<group>"; };
136137 12118B9D23682049006BAEE3 /* PhoneCodeResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneCodeResolver.swift; sourceTree = "<group>"; };
137138 1212048B23914CFD00CAF162 /* DeleteReservationResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeleteReservationResolver.swift; sourceTree = "<group>"; };
139+ 1212048D23915A0A00CAF162 /* ChangeReservationResolver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChangeReservationResolver.swift; sourceTree = "<group>"; };
138140 12219CEE2353A63E0057DDEE /* ReservationsCoordinator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReservationsCoordinator.swift; sourceTree = "<group>"; };
139141 12230AE9238FD8B3004A01E5 /* MapView2.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MapView2.xib; sourceTree = "<group>"; };
140142 12230AEB238FD8C5004A01E5 /* MapView2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MapView2.swift; sourceTree = "<group>"; };
@@ -413,6 +415,7 @@
413415 124D007E237222B200AE76B9 /* ReservationsResolver.swift */,
414416 12B4447B238EF25C000B6B16 /* CreateReservationResolver.swift */,
415417 1212048B23914CFD00CAF162 /* DeleteReservationResolver.swift */,
418+ 1212048D23915A0A00CAF162 /* ChangeReservationResolver.swift */,
416419 );
417420 path = Resolvers;
418421 sourceTree = "<group>";
@@ -949,6 +952,7 @@
949952 1205056B2380588C00801618 /* Extenstions+IBDesignable.swift in Sources */,
950953 12C72EE1235380D400AD7004 /* ProfileClientViewController.swift in Sources */,
951954 F31E20C92348E0F300BEA215 /* AuthorizationViewController.swift in Sources */,
955+ 1212048E23915A0A00CAF162 /* ChangeReservationResolver.swift in Sources */,
952956 12230AFC239034D3004A01E5 /* SecondStepReservationViewController.swift in Sources */,
953957 F3851B2923409F8A009EE0B6 /* PhoneView.swift in Sources */,
954958 12C72EE3235380EB00AD7004 /* ReservationsViewController.swift in Sources */,
Hookah Tau/API/Reservations api/ReservationsService.swift+23−4
@@ -56,14 +56,33 @@ class ReservationsService {
5656 }
5757 }
5858
59− func updateReservation() {
59+ func updateReservation(startTime: Date,
60+ numberOfGuests: Int,
61+ endTime: Date,
62+ uuid: String,
63+ completion: @escaping ((Bool) -> Void)) {
6064
61− }
62−
63− func createReservation() {
65+ let reservation = ChangeReservationResolver.Request(startTime: startTime,
66+ uuid: uuid,
67+ numberOfGuests: numberOfGuests,
68+ endTime: endTime)
6469
70+ let resolver = ChangeReservationResolver(data: reservation)
71+ let request = ApiRequest(resolver: resolver, httpMethod: .put)
72+
73+ apiClient.load(request: request.request) { result in
74+ switch result {
75+ case .failure:
76+ completion(false)
77+ return
78+ case .success:
79+ completion(true)
80+ return
81+ }
82+ }
6583 }
6684
85+
6786 func getAllReservations(establishmentID: Int,
6887 completion: @escaping ((Result<AllReservations, GeneralError>) -> Void)) {
6988 let resolver = AllReservationsResolver<AllReservations>(establishmentID: establishmentID)
Hookah Tau/API/Reservations api/Resolvers/ChangeReservationResolver.swiftnew file+35
@@ -0,0 +1,35 @@
1+//
2+// ChangeReservationResolver.swift
3+// Hookah Tau
4+//
5+// Created by cstore on 29/11/2019.
6+// Copyright © 2019 Daria Rednikina. All rights reserved.
7+//
8+
9+import Foundation
10+
11+class ChangeReservationResolver: ApiResolver {
12+
13+ /// Структура запроса с возможными данными для
14+ /// изменением бронирования
15+ struct Request: MyCodable {
16+ var startTime: Date
17+ var uuid: String
18+ var numberOfGuests: Int
19+ var endTime: Date
20+ }
21+
22+ var name: String {
23+ return "/reservations"
24+ }
25+
26+ var data: Request
27+
28+ init(data: Request) {
29+ self.data = data
30+ }
31+
32+ func parameters() -> MyCodable? {
33+ return data
34+ }
35+}
Hookah Tau/Controllers/Client/Reservations/Steps/2/SecondStepView.swift+16−6
@@ -35,7 +35,8 @@ class SecondStepView: UIView {
3535 didSet {
3636 guard let model = model else { return }
3737 totalBookingLabel.text = "Забронировать \(model.table) столик на \(Int(guestSlider.value)) человека \(model.startTime)?"
38−
38+
39+ setUpIntervals(model.startTime)
3940 setUpReservedIntervals(model.reservedintervals)
4041 setUpBookingPeriod(model.startTime)
4142 }
@@ -75,8 +76,6 @@ class SecondStepView: UIView {
7576 scrollView.delegate = self
7677
7778 scrollView.showsHorizontalScrollIndicator = false
78−
79− setUpIntervals()
8079 }
8180
8281 @IBAction func sliderValueChanged(_ sender: UISlider) {
@@ -92,8 +91,15 @@ class SecondStepView: UIView {
9291
9392 // MARK: - Setup
9493
95− func setUpIntervals() {
96− for period in 0...Constants.day10MinPeriods {
94+ func setUpIntervals(_ stTime: Date) {
95+ let isAdmin = DataStorage.standard.getUserModel()?.isAdmin ?? false
96+
97+ let (startPoint, _) = isAdmin ? stTime.getAdminStartingAndEndPoint() : stTime.getClientStartingAndEndPoint()
98+
99+ let startingPoint = isAdmin ? startPoint.getAdminsStartingPoint() : Constants.clientStartingPoint
100+ let endingPoint = startingPoint + (isAdmin ? Constants.adminDuration : Constants.clientDuration)
101+
102+ for period in startingPoint...endingPoint {
97103 let timePointView = TimePointView.loadFromNib()
98104 timePointView?.setUp(withTimePoint: period)
99105 let view = UIView(frame: CGRect(x: 0, y: 0, width: 35, height: 106))
@@ -188,7 +194,11 @@ extension SecondStepView: UIScrollViewDelegate {
188194
189195extension SecondStepView {
190196 enum Constants {
191− static let day10MinPeriods = 90
192197 static let timepointWidth = 11
198+
199+ static let adminDuration = 288
200+ static let clientDuration = 90
201+ // 12:00 = 12 * 6
202+ static let clientStartingPoint = 72
193203 }
194204}
Hookah Tau/Extensions+Date.swift+41
@@ -145,3 +145,44 @@ extension Date {
145145 return (prev, current, next)
146146 }
147147}
148+
149+// MARK: - Admin vs Client
150+
151+extension Date {
152+
153+ /// Идем на день назад, чтобы найти точку начала с которой может забронировать администратор
154+ func getAdminStartingAndEndPoint() -> (Date, Date) {
155+ let utcDate = self.getUTCDate()
156+
157+ let startDate = Calendar.current.date(byAdding: .day, value: -1, to: utcDate)!
158+ let endDate = Calendar.current.date(byAdding: .day, value: 1, to: utcDate)!
159+
160+ return (startDate, endDate)
161+ }
162+
163+ func getAdminsStartingPoint() -> Int {
164+ let comp = Calendar.current.dateComponents([.hour, .minute], from: self)
165+ return (comp.hour! * 6 + comp.minute! / 10)
166+ }
167+
168+ func getClientStartingAndEndPoint() -> (Date, Date) {
169+ let utcDate = self.getUTCDate()
170+
171+ // час
172+ let hour = Calendar.current.dateComponents([.hour], from: utcDate).hour!
173+
174+ if hour >= 0 && hour <= 3 { // [ 00:00 ... 3:00 ]
175+ let endDate = utcDate.set(hours: 3, minutes: 0, seconds: 0)! // 3 00
176+ let start = Calendar.current.date(byAdding: .day, value: -1, to: utcDate)!
177+ let startDate = start.set(hours: 12, minutes: 0, seconds: 0)! // 12 00
178+
179+ return (startDate, endDate)
180+ } else { // [12:00 ... 23:50]
181+ let startDate = utcDate.set(hours: 12, minutes: 0, seconds: 0)! // 12 00
182+ let end = Calendar.current.date(byAdding: .day, value: 1, to: utcDate)!
183+ let endDate = end.set(hours: 3, minutes: 0, seconds: 0)! // 3 00
184+
185+ return (startDate, endDate)
186+ }
187+ }
188+}