Код: Выделить всё
public function get() {
$cart = new \stdClass();
$cart->purchases = [];
$cart->total_price = 0;
$cart->total_products = 0;
$cart->coupon = null;
$cart->discount = 0;
$cart->coupon_discount = 0;
$cart->withdisc = 0; //моє
$cart->isdisc = 0; //моє
$cart->bezdisc = 0; //моє
if (empty($_SESSION['shopping_cart'])) {
return $cart;
}
$variants = $this->variantsEntity->find(['id' => $this->getVariantsIdsByCart($_SESSION['shopping_cart'])]);
if (empty($variants)) {
return $cart;
}
$variants = $this->moneyHelper->convertVariantsPriceToMainCurrency($variants);
$products = $this->getProductsByVariants($variants);
$products = $this->productsHelper->attachImages($products);
// TODO: собирать целостно в одном методе
$items = $this->buildItemsByVariants($variants);
foreach($items as $variantId=>$item) {
$purchase = null;
if(!empty($products[$item->variant->product_id])) {
$purchase = new \stdClass();
$purchase->product = $products[$item->variant->product_id];
$purchase->variant = $item->variant;
$purchase->amount = $item->amount;
$purchase->product_id = $item->variant->product_id;
$purchase->product_name = $products[$item->variant->product_id]->name;
$purchase->variant_id = $item->variant->id;
$purchase->variant_name = $item->variant->name;
$purchase->price = $item->variant->price;
$purchase->sku = $item->variant->sku;
$purchase->units = $item->variant->units;
$purchase->compare_price = $item->variant->compare_price; //моє
$purchase->meta = (object) [
'total_price' => $purchase->amount * $purchase->price
];
$cart->purchases[] = $purchase;
if ($purchase->compare_price){
$cart->withdisc += $item->variant->price*$item->amount; //сумуємо акційні
$cart->isdisc += 1;
} else {
$cart->bezdisc += $item->variant->price*$item->amount; //сумуємо без акційні
}
$cart->total_price += $item->variant->price*$item->amount;
$cart->total_products += $item->amount;
}
}
//TODO: В отдельный модуль
if($this->couponCodeExists()) {
$cart->coupon = $this->couponsEntity->get($_SESSION['coupon_code']);
if($cart->coupon && $cart->coupon->valid && $cart->total_price >= $cart->coupon->min_order_price) {
if($cart->coupon->type == 'absolute') {
// Абсолютная скидка не более суммы заказа
$cart->coupon_discount = $cart->total_price>$cart->coupon->value?$cart->coupon->value:$cart->total_price;
$cart->total_price = max(0, $cart->total_price-$cart->coupon->value);
$cart->coupon->coupon_percent = round(100-($cart->total_price*100)/($cart->total_price+$cart->coupon->value),2);
} else {
$cart->coupon->coupon_percent = $cart->coupon->value;
$cart->coupon_discount = $cart->total_price * ($cart->coupon->value)/100;
$cart->total_price = $cart->total_price-$cart->coupon_discount;
if (!$cart->isdisc) {
$cart->coupon->coupon_percent = $cart->coupon->value;
$cart->coupon_discount = $cart->total_price * ($cart->coupon->value)/100;
$cart->total_price = $cart->total_price-$cart->coupon_discount;
} else {
$cart->coupon->coupon_percent = $cart->coupon->value;
$cart->coupon_discount = $cart->bezdisc * ($cart->coupon->value)/100;
$cart->total_price = $cart->withdisc+$cart->bezdisc-$cart->coupon_discount;
}
}
} else {
unset($_SESSION['coupon_code']);
}
}
все работает до момента оформления заказа, после нажатия кнопки, открывает страницу 404 (но в адресной строке силка типу https://site.com/order/**** и письмо с пустым заказом приходит на емейл)
и все через строку $purchase->compare_price = $item->variant->compare_price;, если закомментировать то все работает как должно
что с ней не так?
может есть другой вариант как проверять что у товара есть акционная цена?