@@ -14,6 +14,8 @@ struct ThirdStepViewModel {
1414
1515class ThirdStepView: UIView {
1616
17+ // MARK: - IBAOutlets
18+
1719 @IBOutlet weak var totalLabel: UILabel!
1820
1921 @IBOutlet weak var infoLabel: UILabel!
@@ -27,7 +29,34 @@ class ThirdStepView: UIView {
2729
2830 @IBOutlet weak var timeInterval: UIView!
2931
32+ @IBOutlet weak var stackView: UIStackView!
33+
34+ @IBOutlet weak var scrollView: UIScrollView!
35+
36+ // MARK: - Properties
37+
38+ /// Время начала вертелки.
39+ var startDate: Date?
40+
41+ // констрейнты начала и конца интервала
42+ var startLeadingConstraint: NSLayoutConstraint!
43+ var endLeadingConstraint: NSLayoutConstraint!
44+
45+ var reservation: Reservation? {
46+ didSet {
47+ // isAdmin
48+ let isAdmin = DataStorage.standard.getUserModel()?.isAdmin ?? false
49+ startDate = reservation?.startTime.addHours(-1)
50+
51+ setupStackView(isAdmin)
52+ setUpBookingPeriod()
53+ }
54+ }
55+
56+ // MARK: - bind
57+
3058 func bind(withModel model: Reservation) {
59+ reservation = model
3160 let date = format(model.startTime, model.endTime)
3261
3362 totalLabel.text = "Забронирован \(model.reservedTable) столик на \(model.numberOfGuests)-х\n \(date)"
@@ -53,4 +82,96 @@ class ThirdStepView: UIView {
5382 let num = people > 6 ? 2 : 1
5483 return num
5584 }
85+
86+ var startPoint: UIView = {
87+ var view = UIView()
88+ view.backgroundColor = #colorLiteral(red: 0.2901960784, green: 0.5647058824, blue: 0.8862745098, alpha: 1)
89+ view.translatesAutoresizingMaskIntoConstraints = false
90+ return view
91+ }()
92+
93+ var endPoint: UIView = {
94+ var view = UIView()
95+ view.backgroundColor = #colorLiteral(red: 0.2901960784, green: 0.5647058824, blue: 0.8862745098, alpha: 1)
96+ view.translatesAutoresizingMaskIntoConstraints = false
97+ return view
98+ }()
99+
100+ /// Интервал
101+ var fillInterval: UIView = {
102+ var view = UIView()
103+ view.backgroundColor = #colorLiteral(red: 0, green: 0.5921568627, blue: 1, alpha: 0.3426262843)
104+ view.translatesAutoresizingMaskIntoConstraints = false
105+ return view
106+ }()
107+
108+ func setupStackView(_ isAdmin: Bool) {
109+ guard let startPoint = startDate else { return }
110+
111+ let startingPoint = startPoint.getAdminsStartingPoint()
112+ let endingPoint = startingPoint + (isAdmin ? Constants.adminDuration : Constants.clientDuration)
113+
114+ for period in startingPoint...endingPoint {
115+ let timePointView = TimePointView.loadFromNib()
116+ timePointView?.setUp(withTimePoint: period)
117+ let view = UIView(frame: CGRect(x: 0, y: 0, width: 35, height: 106))
118+ view.addSubviewThatFills(timePointView)
119+ stackView.addArrangedSubview(view)
120+ }
121+ }
122+
123+ func setUpBookingPeriod() {
124+ self.scrollView.addSubview(startPoint)
125+ self.scrollView.addSubview(endPoint)
126+ self.scrollView.addSubview(fillInterval)
127+
128+ guard
129+ let startDate = startDate,
130+ let startTime = reservation?.startTime,
131+ let endTime = reservation?.endTime else { return }
132+
133+ let startConstr = CGFloat(startTime.getMinutesPeriods(fromStart: startDate) * Constants.widthTimePoint) + 3
134+ startLeadingConstraint = startPoint.leftAnchor.constraint(equalTo: scrollView.leftAnchor,
135+ constant: startConstr)
136+
137+ let endConstr = CGFloat(endTime.getMinutesPeriods(fromStart: startDate) * Constants.widthTimePoint) + 3
138+ endLeadingConstraint = endPoint.leftAnchor.constraint(equalTo: scrollView.leftAnchor,
139+ constant: endConstr)
140+
141+ scrollView.setContentOffset(CGPoint(x: startConstr - 50, y: 0), animated: true)
142+
143+ NSLayoutConstraint.activate([
144+
145+ startPoint.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0),
146+ endPoint.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0),
147+
148+ startPoint.widthAnchor.constraint(equalToConstant: Constants.pointWidth),
149+ endPoint.widthAnchor.constraint(equalToConstant: Constants.pointWidth),
150+
151+ startPoint.heightAnchor.constraint(equalToConstant: Constants.pointHeight),
152+ endPoint.heightAnchor.constraint(equalToConstant: Constants.pointHeight),
153+
154+ startLeadingConstraint,
155+ endLeadingConstraint,
156+
157+ fillInterval.leftAnchor.constraint(equalTo: startPoint.rightAnchor, constant: 0),
158+ fillInterval.rightAnchor.constraint(equalTo: endPoint.leftAnchor, constant: 0),
159+
160+ fillInterval.heightAnchor.constraint(equalToConstant: Constants.pointHeight),
161+ fillInterval.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: 0)
162+ ])
163+ }
164+}
165+
166+extension ThirdStepView {
167+ enum Constants {
168+ static let widthTimePoint = 11
169+ static let pointWidth: CGFloat = 5
170+ static let pointHeight: CGFloat = 85
171+
172+ static let adminDuration = 288
173+ static let clientDuration = 90
174+ // 12:00 = 12 * 6
175+ static let clientStartingPoint = 72
176+ }
56177}