Newer
Older
<?php
/**
* This file contains QUI\ERP\Order\Controls\Basket
*/
namespace QUI\ERP\Order\Controls\OrderProcess;
use QUI\ERP\Order\Controls\Basket\Basket as BasketControl;
use QUI\ERP\Order\OrderInterface;
use QUI\ERP\Order\Basket\Basket as BasketClass;
use QUI\ERP\Order\Basket\BasketOrder;
use QUI\ERP\Order\Basket\BasketGuest;
use QUI\Exception;
use function dirname;
* - Basket step
*
* @package QUI\ERP\Order\Basket
*/
class Basket extends QUI\ERP\Order\Controls\AbstractOrderingStep
* @var BasketClass|BasketOrder|BasketGuest
protected BasketClass | BasketOrder | BasketGuest $Basket;
/**
* Basket constructor.
*
* @param array $attributes

Henning Leutz
committed
* @throws QUI\Exception
public function __construct(array $attributes = [])
$this->setAttributes([
'editable' => true
]);

Henning Leutz
committed
if ($this->getAttribute('Order')) {
$this->Basket = new QUI\ERP\Order\Basket\BasketOrder(
$this->getAttribute('Order')->getHash()
);
} elseif ($this->getAttribute('Basket')) {
$this->Basket = $this->getAttribute('Basket');
} else {
$this->Basket = new QUI\ERP\Order\Basket\Basket(
$this->getAttribute('basketId')
);
}
$this->addCSSFile(dirname(__FILE__) . '/Basket.css');
$this->addCSSClass('quiqqer-order-step-basket');
$this->setAttribute('nodeName', 'section');
$messages = $this->Basket->getFrontendMessages()->toArray();
foreach ($messages as $message) {
$this->getOrder()->addFrontendMessage($message['message']);
}

Henning Leutz
committed
/**

Henning Leutz
committed
* @return string
*/
public function getName(null | QUI\Locale $Locale = null): string

Henning Leutz
committed
{

Henning Leutz
committed
}
/**
* @return string
*/
public function getIcon(): string
{
return 'fa fa-shopping-basket';
}
* @return BasketGuest|BasketClass|BasketOrder
public function getBasket(): BasketGuest | BasketClass | BasketOrder
/**
* @throws QUI\ERP\Order\Exception
*/
public function validate(): void
{
if (!$this->Basket->count()) {
'quiqqer/order',
'exception.basket.has.no.articles'
/* @var $OrderProcess QUI\ERP\Order\OrderProcess */
$OrderProcess = $this->getAttribute('OrderProcess');
// clean up 0 articles
try {
if ($OrderProcess) {
$Current = $OrderProcess->getCurrentStep();
// if current step is basket, we need no cleanup ... only later
if ($Current instanceof QUI\ERP\Order\Controls\Basket\Basket) {
return;
}
}

Henning Leutz
committed
$Articles = $Order->getArticles();
foreach ($Articles as $key => $Article) {
if (!$Article->getQuantity()) {
$empty[] = $key;
}
}
foreach ($empty as $pos) {

Henning Leutz
committed
$Order->removeArticle($pos);

Henning Leutz
committed
$BasketOrder = new QUI\ERP\Order\Basket\BasketOrder($Order->getUUID());
$products = $BasketOrder->getProducts()->toArray();

Henning Leutz
committed

Henning Leutz
committed
$this->Basket->import($products['products']);
} catch (QUI\Exception $Exception) {
QUI\System\Log::writeDebugException($Exception);
}
public function showNext(): bool
if ($this->getAttribute('Order')) {
/* @var $Order OrderInterface */
$Order = $this->getAttribute('Order');
if ($Order->count()) {
return true;
}
}
return (bool)$this->Basket->count();
public function getBody(): string
if ($this->Basket instanceof QUI\ERP\Order\Basket\BasketOrder) {
$this->Basket->refresh();
}
$Engine = QUI::getTemplateManager()->getEngine();
return $Engine->fetch(dirname(__FILE__) . '/BasketEmpty.html');
$BasketControl = new BasketControl([
'editable' => $this->getAttribute('editable')
]);
$BasketControl->setBasket($this->Basket);
$Engine->assign([
'BasketControl' => $BasketControl,
'Basket' => $this->Basket,
'Order' => $this->getAttribute('Order'),
'this' => $this
return $Engine->fetch(dirname(__FILE__) . '/Basket.html');

Henning Leutz
committed
* @return void
* @throws Exception

Henning Leutz
committed
{
$this->Basket->save();

Henning Leutz
committed
}