git.iko.soy/dashared/hookah-tau
on develop help sign in
Допинала экран изменений, но его надо значительно править

начиная от нового будущего api, заканчивая вертелкой-ромашкой на загрузку и обработкой ошибок

commitb13a477ad26055f387cc8820003e62cb654c0705 authorDarya Rednikina <rednikina.com@yandex.ru> dateThu 5 Dec 2019, 21:39 (7 years ago) parentb1378c4
7 files changed+109−13
Hookah Tau/Controllers/Client/Reservations/Reservation.storyboard+9 Hookah Tau/Controllers/Client/Reservations/Steps/2/SecondStepView.swift+3−2 Hookah Tau/Controllers/Client/Reservations/Steps/3/ThirdStepReservationCoordinator.swift+1−2 Hookah Tau/Controllers/Client/Reservations/Steps/3/ThirdStepReservationViewController.swift+2−3 Hookah Tau/Controllers/Client/Reservations/Steps/change /ChangeReservationCoordinator.swift−2 Hookah Tau/Controllers/Client/Reservations/Steps/change /ChangeReservationViewController.swift+76−3 Hookah Tau/Models/Reservation.swift+18−1
Hookah Tau/Controllers/Client/Reservations/Reservation.storyboard+9
@@ -128,17 +128,26 @@
128128 <constraint firstAttribute="height" constant="394" id="Ppm-PI-ASV"/>
129129 </constraints>
130130 </view>
131+ <view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="6Dy-xy-vQH">
132+ <rect key="frame" x="0.0" y="0.0" width="414" height="502"/>
133+ <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
134+ </view>
131135 </subviews>
132136 <color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
133137 <constraints>
134138 <constraint firstItem="kon-kQ-rMb" firstAttribute="leading" secondItem="Oj9-9F-isg" secondAttribute="leading" id="5wF-Rc-6Na"/>
135139 <constraint firstAttribute="bottom" secondItem="kon-kQ-rMb" secondAttribute="bottom" id="IAO-aj-hyT"/>
140+ <constraint firstItem="kon-kQ-rMb" firstAttribute="top" secondItem="6Dy-xy-vQH" secondAttribute="bottom" id="W6B-dA-vrO"/>
141+ <constraint firstItem="6Dy-xy-vQH" firstAttribute="leading" secondItem="Oj9-9F-isg" secondAttribute="leading" id="WKh-xt-L3z"/>
136142 <constraint firstItem="kon-kQ-rMb" firstAttribute="trailing" secondItem="Oj9-9F-isg" secondAttribute="trailing" id="cZG-IB-ohm"/>
143+ <constraint firstItem="6Dy-xy-vQH" firstAttribute="top" secondItem="mnl-c9-WGz" secondAttribute="top" id="iK5-6K-mEo"/>
144+ <constraint firstItem="6Dy-xy-vQH" firstAttribute="trailing" secondItem="Oj9-9F-isg" secondAttribute="trailing" id="rrY-dK-bTz"/>
137145 </constraints>
138146 <viewLayoutGuide key="safeArea" id="Oj9-9F-isg"/>
139147 </view>
140148 <connections>
141149 <outlet property="childContentView" destination="kon-kQ-rMb" id="5DH-RF-lEQ"/>
150+ <outlet property="mapContentView" destination="6Dy-xy-vQH" id="5Cu-uI-WT3"/>
142151 </connections>
143152 </viewController>
144153 <placeholder placeholderIdentifier="IBFirstResponder" id="H8g-xl-PmS" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
Hookah Tau/Controllers/Client/Reservations/Steps/2/SecondStepView.swift+3−2
@@ -13,6 +13,7 @@ struct SecondStepModel {
1313 var establishment: Int
1414 var table: Int
1515 var startTime: Date
16+ var endTime: Date? = nil
1617 var reservedintervals: [ReservationPeriod]
1718}
1819
@@ -72,7 +73,7 @@ class SecondStepView: UIView {
7273
7374 data = ReservationData(establishment: model.establishment,
7475 startTime: model.startTime,
75− endTime: model.startTime.addHours(2),
76+ endTime: model.endTime ?? model.startTime.addHours(2),
7677 numberOfGuests: Int(guestSlider.value),
7778 reservedTable: model.table)
7879
@@ -85,7 +86,7 @@ class SecondStepView: UIView {
8586
8687 setUpIntervals(isAdmin)
8788 setUpReservedIntervals(model.reservedintervals, isAdmin)
88− setUpBookingPeriod(model.startTime)
89+ setUpBookingPeriod(model.startTime, model.endTime)
8990 }
9091 }
9192
Hookah Tau/Controllers/Client/Reservations/Steps/3/ThirdStepReservationCoordinator.swift+1−2
@@ -36,11 +36,10 @@ class ThirdStepReservationCoordinator: BaseCoordinator {
3636 }
3737
3838 /// You need to pass reservation object and map describing booked table
39− func change(_ reservation: Reservation, _ map: MapImageScroll) {
39+ func change(_ reservation: Reservation) {
4040 let changeCoordinator = ChangeReservationCoordinator(navigationController: navigationController)
4141
4242 changeCoordinator.reservation = reservation
43− changeCoordinator.map = map
4443
4544 changeCoordinator.didFinish = { [weak self] res in
4645 self?.removeDependency(changeCoordinator)
Hookah Tau/Controllers/Client/Reservations/Steps/3/ThirdStepReservationViewController.swift+2−3
@@ -129,11 +129,10 @@ class ThirdStepReservationViewController: BaseViewController {
129129
130130 @objc func change() {
131131 guard
132− let res = reservation,
133− let map = mapView
132+ let res = reservation
134133 else { return }
135134
136− coordinator?.change(res, map)
135+ coordinator?.change(res)
137136 }
138137
139138 @objc func cancelBooking() {
Hookah Tau/Controllers/Client/Reservations/Steps/change /ChangeReservationCoordinator.swift−2
@@ -14,8 +14,6 @@ class ChangeReservationCoordinator: BaseCoordinator {
1414
1515 var reservation: Reservation?
1616
17− var map: MapImageScroll?
18−
1917 var didFinish: ((Reservation) -> Void)?
2018
2119 // MARK: - Lifecycle
Hookah Tau/Controllers/Client/Reservations/Steps/change /ChangeReservationViewController.swift+76−3
@@ -14,12 +14,23 @@ class ChangeReservationViewController: BaseViewController {
1414
1515 @IBOutlet weak var childContentView: UIView!
1616
17+ @IBOutlet weak var mapContentView: UIView!
18+
1719 // MARK: - Peoperties
1820
1921 var reservation: Reservation?
2022
2123 var secondStepView: SecondStepView?
2224
25+ var mapView: MapImageScroll?
26+
27+ /// Как только получили ответ на запросах о бронирвоаниях, сразу обновляем
28+ var reservedIntervals: [ReservationPeriod] = [] {
29+ didSet {
30+ setupContainer(withReservedPeriods: reservedIntervals)
31+ }
32+ }
33+
2334 var reservationService: ReservationsService?
2435
2536 weak var coordinator: ChangeReservationCoordinator?
@@ -40,6 +51,8 @@ class ChangeReservationViewController: BaseViewController {
4051
4152 reservationService = ReservationsService(apiClient: APIClient.shared)
4253 setupButtons()
54+ setupMap()
55+ getReservations()
4356
4457 navigationItem.hidesBackButton = true
4558 // Do any additional setup after loading the view.
@@ -54,19 +67,79 @@ class ChangeReservationViewController: BaseViewController {
5467 confirmButton.addTarget(self, action: #selector(changeReservation), for: .touchUpInside)
5568 }
5669
70+ func setupContainer(withReservedPeriods resPer: [ReservationPeriod]) {
71+ secondStepView = SecondStepView.loadFromNib()
72+ childContentView.addSubviewThatFills(secondStepView)
73+
74+ guard let r = reservation else { return }
75+
76+ secondStepView?.bind(model: SecondStepModel(establishment: r.establishment,
77+ table: r.reservedTable,
78+ startTime: r.startTime,
79+ endTime: r.endTime,
80+ reservedintervals: resPer))
81+ }
82+
83+ func getReservations() {
84+ guard let r = reservation else { return }
85+ reservationService?.getAllReservations(establishmentID: r.establishment, completion: { (res) in
86+ switch res {
87+ case .failure(let err):
88+ self.displayAlert(forError: err, with: "Прости, не смогли загрузить доступные периоды для брони этого столика. Попробуй, пожалуйста, еще раз!")
89+ case .success(let allReservations):
90+ let isAdmin = DataStorage.standard.getUserModel()?.isAdmin ?? false
91+ let (start, end) = isAdmin ? r.startTime.getAdminStartingAndEndPoint() : r.startTime.getClientStartingAndEndPoint()
92+ let reservPeriods = HFunc.main.filterPeriodsStartEndDates(allReservations.reservations[r.reservedTable] ?? [],
93+ start,
94+ end)
95+
96+ self.reservedIntervals = reservPeriods
97+ }
98+ })
99+ }
100+
101+ func setupMap() {
102+ guard let reservation = reservation else {
103+ return
104+ }
105+
106+ let width = view.frame.width
107+ if reservation.establishment == 1 {
108+ mapView = MapView1.loadFromNib()
109+ mapView?.scrollViewParent.contentInset = UIEdgeInsets(top: 0,
110+ left: width / 2,
111+ bottom: 200,
112+ right: width / 2)
113+
114+ mapView?.scrollViewParent.setContentOffset(CGPoint(x: 0, y: 50), animated: false)
115+ } else {
116+ mapView = MapView2.loadFromNib()
117+ mapView?.scrollViewParent.setContentOffset(CGPoint(x: 0, y: -100), animated: false)
118+ mapView?.scrollViewParent.contentInset = UIEdgeInsets(top: 100,
119+ left: width / 2,
120+ bottom: 100,
121+ right: width / 2)
122+ }
123+
124+ mapContentView.addSubviewThatFills(mapView)
125+
126+ mapView?.isUserInteractionEnabled = false
127+ mapView?.scrollToTable(table: reservation.reservedTable)
128+ }
129+
57130 // MARK: - Handlers
58131
59132 @objc func changeReservation() {
60− guard let r = reservation else { return }
133+ guard let r = secondStepView?.data, let uuid = reservation?.uuid else { return }
61134 confirmButton.loading = true
62135
63136 reservationService?.updateReservation(startTime: r.startTime,
64137 numberOfGuests: r.numberOfGuests,
65138 endTime: r.endTime,
66− uuid: r.uuid,
139+ uuid: uuid,
67140 completion: { [weak self] (res) in
68141 if res {
69− self?.coordinator?.finish(r)
142+ self?.coordinator?.finish(Reservation(uuid: uuid, reservationData: r))
70143 } else {
71144 self?.displayAlert(with: "Что-то пошло не так! Попробуешь еще раз?")
72145 }
Hookah Tau/Models/Reservation.swift+18−1
@@ -18,6 +18,23 @@ struct Reservation: MyCodable {
1818 var numberOfGuests: Int
1919 var reservedTable: Int
2020
21+ init(uuid: String, reservationData: ReservationData) {
22+ self.uuid = uuid
23+ self.establishment = reservationData.establishment
24+ self.startTime = reservationData.startTime
25+ self.endTime = reservationData.endTime
26+ self.numberOfGuests = reservationData.numberOfGuests
27+ self.reservedTable = reservationData.reservedTable
28+ }
29+
30+ init(uuid: String, establishment: Int, startTime: Date, endTime: Date, numberOfGuests: Int, reservedTable: Int) {
31+ self.uuid = uuid
32+ self.establishment = establishment
33+ self.startTime = startTime
34+ self.endTime = endTime
35+ self.numberOfGuests = numberOfGuests
36+ self.reservedTable = reservedTable
37+ }
2138}
2239
2340/// `Reservation` without `uuid`
@@ -28,5 +45,5 @@ struct ReservationData: MyCodable {
2845 var endTime: Date
2946 var numberOfGuests: Int
3047 var reservedTable: Int
31−
48+
3249}