Files
register/marko_unpacked/marko/portal/models/Order.php
T
Admin Nasledstvo ac168868ee Initial import
2026-05-01 20:52:04 +03:00

130 lines
4.1 KiB
PHP

<?php
namespace app\models;
use app\models\parsed\CartModel;
use app\models\register\Collections;
use app\services\Cart;
/**
* Class Order
* @package app\models
* @property $id
* @property $user_id
* @property $order_date
* @property $total_price
* @property $user_name
* @property $user_email
* @property \app\models\UserPublic $user
* @property \app\models\OrderPayment $payment
* @property \app\models\OrderBooking[] $booking
* @property \app\models\OrderProduct[] $subscriptions
* @property \app\models\OrderProduct[] $collections
* @property \app\models\RegisterObjects[] $publications
*/
class Order extends _Base
{
public function getUser()
{
return $this->hasOne(UserPublic::class, ['id' => 'user_id']);
}
/**
* @param $data
* @param \app\models\UserPublic $user
* @return \app\models\Order
*/
public static function record($data, $user)
{
$cart_data = json_decode($data['cart_data']);
$invoice_data = json_decode($data['invoice_data']);
if (sizeof($cart_data) == 0) {
header('Location: /');
exit;
}
$order = new Order();
$order->user_id = $user->id;
$order->order_date = date('Y-m-d H:i:s');
$order->user_email = $user->email;
$order->user_name = $user->full_name;
$order->save();
$totalPrice = 0;
foreach ($cart_data as $cartElement) {
$cartObject = Cart::decodeKey($cartElement);
if ($cartObject->model == OrderBooking::class) {
$booking = OrderBooking::findOne($cartObject->id);
if ($booking) {
$booking->order_id = $order->id;
$booking->save();
$totalPrice += $booking->single_price;
}
} else {
/** @var RegisterObjects|\app\models\register\Collections|Subscriptions $modelClass */
$modelClass = $cartObject->model;
$model = $modelClass::findOne($cartObject->id);
if ($model) {
$cartModel = $model->setCart(new CartModel());
$product = new OrderProduct();
$product->name_bg = $cartModel->name_bg;
$product->name_en = $cartModel->name_en;
$product->text_bg = $cartModel->text_bg;
$product->text_en = $cartModel->text_en;
$product->order_id = $order->id;
$product->price = $cartModel->price;
$product->model_class = $modelClass;
$product->model_id = $model->id;
$product->save();
$totalPrice += $cartModel->price;
}
}
}
OrderInvoice::record($invoice_data, $order->id);
$order->total_price = $totalPrice;
$order->save();
return $order;
}
public function getDescription()
{
return 'HeritageBG order';
}
public function getPayment()
{
return $this->hasOne(OrderPayment::class, ['order_id' => 'id']);
}
public function getBooking()
{
return $this->hasMany(OrderBooking::class, ['order_id' => 'id']);
}
public function getSubscriptions() {
return $this->hasMany(OrderProduct::class, ['order_id' => 'id'])->where(['model_class' => Subscriptions::class])->orderBy(['id' => SORT_DESC])->all();
}
public function getCollections() {
return $this->hasMany(OrderProduct::class, ['order_id' => 'id'])->where(['model_class' => Collections::class])->orderBy(['id' => SORT_DESC])->all();
}
public function getPublications() {
return $this->hasMany(OrderProduct::class, ['order_id' => 'id'])->where(['model_class' => RegisterObjects::class])->orderBy(['id' => SORT_DESC])->all();
}
public function statusStr()
{
$lg = \Yii::$app->language;
if($this->payment && $this->payment->status == 'PAID') {
return $lg == 'en' ? 'Paid' : 'Платено';
}
return $lg == 'en' ? 'Payment pending' : 'В очакване на плащане';
}
}