4bf9edb7
Yarik
Order
|
1
2
3
|
<?php
namespace frontend\controllers;
|
94a1dbd2
Yarik
Checkout top
|
4
5
|
use artbox\catalog\models\Product;
|
35b13e82
Yarik
Fixes
|
6
|
use artbox\catalog\models\Variant;
|
4bf9edb7
Yarik
Order
|
7
8
9
10
11
|
use artbox\order\models\Delivery;
use artbox\order\models\OrderProduct;
use artbox\order\models\Payment;
use frontend\models\Order;
use yii\web\Controller;
|
94a1dbd2
Yarik
Checkout top
|
12
|
|
4bf9edb7
Yarik
Order
|
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
/**
* Class CheckoutController
*
* @package frontend\controllers
*/
class CheckoutController extends Controller
{
public function actionIndex()
{
/**
* @var \artbox\order\models\Basket $basket
*/
$basket = \Yii::$app->get('basket');
$data = $basket->getData();
$variants = [];
if (!empty($data)) {
$variants = $basket->findModels(array_keys($data));
}
|
94a1dbd2
Yarik
Checkout top
|
31
32
33
34
35
|
$topItems = Product::find()
->with('lang', 'image', 'variants')
->is('mask', 1)
->limit(20)
->all();
|
4bf9edb7
Yarik
Order
|
36
37
38
39
40
|
return $this->render(
'index',
[
'basket' => $basket,
'variants' => $variants,
|
94a1dbd2
Yarik
Checkout top
|
41
|
'topItems' => $topItems,
|
4bf9edb7
Yarik
Order
|
42
43
44
|
]
);
}
|
94a1dbd2
Yarik
Checkout top
|
45
|
|
4bf9edb7
Yarik
Order
|
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
public function actionInfo()
{
$model = new Order(
[
'scenario' => Order::SCENARIO_INFO,
]
);
if (!\Yii::$app->user->isGuest) {
/**
* @var \artbox\order\models\Customer $user
*/
$user = \Yii::$app->user->identity;
$model->name = $user->name;
$model->email = $user->email;
$model->phone = $user->phone;
$model->city = $user->city;
$model->address = $user->address;
}
$model->loadActive();
if ($model->load(\Yii::$app->request->post()) && $model->validate()) {
$model->saveActive();
return $this->redirect([ 'delivery' ]);
}
return $this->render(
'info',
[
'model' => $model,
]
);
}
|
94a1dbd2
Yarik
Checkout top
|
76
|
|
4bf9edb7
Yarik
Order
|
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
public function actionDelivery()
{
$model = new Order(
[
'scenario' => Order::SCENARIO_INFO,
]
);
if (!empty($order = \Yii::$app->session->get('order')) && $model->load($order, '') && $model->validate()) {
$model->scenario = Order::SCENARIO_DELIVERY;
$model->loadActive();
if ($model->load(\Yii::$app->request->post()) && $model->validate()) {
$model->saveActive();
return $this->redirect([ 'payment' ]);
}
} else {
return $this->redirect([ 'info' ]);
}
$deliveries = Delivery::find()
|
35b13e82
Yarik
Fixes
|
95
96
97
98
|
->with('lang')
->where([ 'status' => true ])
->orderBy([ 'sort' => SORT_ASC ])
->all();
|
4bf9edb7
Yarik
Order
|
99
100
101
102
103
104
105
106
|
return $this->render(
'delivery',
[
'model' => $model,
'deliveries' => $deliveries,
]
);
}
|
94a1dbd2
Yarik
Checkout top
|
107
|
|
4bf9edb7
Yarik
Order
|
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
public function actionPayment()
{
$model = new Order(
[
'scenario' => Order::SCENARIO_INFO,
]
);
$order = \Yii::$app->session->get('order');
if (!empty($model)) {
if ($model->load($order, '') && $model->validate()) {
$model->scenario = Order::SCENARIO_DELIVERY;
if ($model->load($order, '') && $model->validate()) {
$model->scenario = Order::SCENARIO_PAYMENT;
$model->loadActive();
if ($model->load(\Yii::$app->request->post()) && $model->validate()) {
$model->saveActive();
return $this->redirect('confirm');
} else {
$payments = Payment::find()
|
35b13e82
Yarik
Fixes
|
127
128
129
130
|
->with('lang')
->where([ 'status' => true ])
->orderBy([ 'sort' => SORT_ASC ])
->all();
|
4bf9edb7
Yarik
Order
|
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
return $this->render(
'payment',
[
'model' => $model,
'payments' => $payments,
]
);
}
}
}
}
return $this->redirect(
'delivery'
);
}
|
94a1dbd2
Yarik
Checkout top
|
146
|
|
4bf9edb7
Yarik
Order
|
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
|
public function actionConfirm()
{
$model = new Order();
$order = \Yii::$app->session->get('order');
$model->load($order, '');
if (!$model->validate()) {
return $this->redirect([ 'payment' ]);
}
if (\Yii::$app->request->isPost) {
$model->label_id = 1;
$model->save(false);
/**
* @var \artbox\order\models\Basket $basket
*/
$basket = \Yii::$app->get('basket');
foreach ($basket->findModels(array_keys($basket->getData())) as $variant) {
$orderProduct = new OrderProduct(
[
'order_id' => $model->id,
'variant_id' => $variant->id,
'sku' => $variant->sku,
'price' => $variant->price,
'count' => $basket->getItem($variant->id)[ 'count' ],
]
);
$orderProduct->save();
}
\Yii::$app->session->remove('order');
$basket->clear();
|
e67c95f9
Yarik
Fast buy
|
176
177
178
179
180
181
182
|
\Yii::$app->session->setFlash(
'success',
\Yii::t(
'app',
'Заказ успешно оформлен. Ваш номер заказ: ' . $model->id . '.'
)
);
|
4bf9edb7
Yarik
Order
|
183
184
185
186
187
188
189
190
191
|
return $this->redirect([ 'site/index' ]);
}
return $this->render(
'confirm',
[
'model' => $model,
]
);
}
|
6c8e3423
Yarik
Fast buy
|
192
193
194
195
|
public function actionFast()
{
$this->enableCsrfValidation = false;
|
6c8e3423
Yarik
Fast buy
|
196
197
198
199
200
201
202
203
204
205
|
$model = new Order(
[
'scenario' => Order::SCENARIO_FAST,
]
);
if ($model->load(\Yii::$app->request->post())) {
$model->label_id = 1;
$model->delivery_id = 5;
$model->payment_id = 3;
if ($model->save()) {
|
35b13e82
Yarik
Fixes
|
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
/**
* @var Variant $variant
*/
$variant = Variant::find()
->where([ 'id' => $model->variantId ])
->one();
( new OrderProduct(
[
'order_id' => $model->id,
'variant_id' => $model->variantId,
'sku' => $variant->sku,
'price' => $variant->price,
'count' => 1,
]
) )->save(false);
\Yii::$app->session->setFlash(
'success',
\Yii::t(
|
6c8e3423
Yarik
Fast buy
|
224
|
'app',
|
35b13e82
Yarik
Fixes
|
225
226
227
228
|
'Заказ успешно оформлен. Ваш номер заказ: ' . $model->id . '.'
)
);
return $this->redirect($model->returnUrl ? : [ 'site/index' ]);
|
6c8e3423
Yarik
Fast buy
|
229
230
|
}
}
|
35b13e82
Yarik
Fixes
|
231
232
|
$response = \Yii::$app->response;
$response->format = $response::FORMAT_JSON;
|
6c8e3423
Yarik
Fast buy
|
233
234
|
return $model->getErrors();
}
|
94a1dbd2
Yarik
Checkout top
|
235
|
|
4bf9edb7
Yarik
Order
|
236
237
238
239
240
241
|
public function beforeAction($action)
{
/**
* @var \artbox\order\models\Basket $basket
*/
$basket = \Yii::$app->get('basket');
|
6c8e3423
Yarik
Fast buy
|
242
|
if ($action->id !== 'index' && $action->id !== 'fast' && empty($basket->getData())) {
|
4bf9edb7
Yarik
Order
|
243
244
245
246
247
248
|
return $this->redirect([ 'site/index' ]);
}
return parent::beforeAction($action);
}
}
|