@@ -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 }