Skip to content
Code-Schnipsel Gruppen Projekte
Basket.php 5,01 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?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;
    
     *
     * @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's avatar
    Henning Leutz committed
         *
    
        public function __construct(array $attributes = [])
    
            $this->setAttributes([
                'editable' => true
            ]);
    
    
            parent::__construct($attributes);
    
    Henning Leutz's avatar
    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');
    
    Henning Leutz's avatar
    Henning Leutz committed
    
            $messages = $this->Basket->getFrontendMessages()->toArray();
    
            foreach ($messages as $message) {
                $this->getOrder()->addFrontendMessage($message['message']);
            }
    
    Henning Leutz's avatar
    Henning Leutz committed
         * @param null|QUI\Locale $Locale
    
        public function getName(null | QUI\Locale $Locale = null): string
    
    Henning Leutz's avatar
    Henning Leutz committed
            return 'Basket';
    
        public function getIcon(): string
    
        {
            return 'fa fa-shopping-basket';
        }
    
    
    Henning Leutz's avatar
    Henning Leutz committed
        /**
    
         * @return BasketGuest|BasketClass|BasketOrder
    
        public function getBasket(): BasketGuest | BasketClass | BasketOrder
    
    Henning Leutz's avatar
    Henning Leutz committed
        {
            return $this->Basket;
        }
    
    
        /**
         * @throws QUI\ERP\Order\Exception
         */
    
        public function validate(): void
    
        {
            if (!$this->Basket->count()) {
    
                throw new QUI\ERP\Order\Exception([
    
                    'quiqqer/order',
                    'exception.basket.has.no.articles'
    
    Henning Leutz's avatar
    Henning Leutz committed
            /* @var $OrderProcess QUI\ERP\Order\OrderProcess */
            $OrderProcess = $this->getAttribute('OrderProcess');
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            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;
                    }
                }
    
    
                $Order = $this->Basket->getOrder();
    
                $empty = [];
    
    Henning Leutz's avatar
    Henning Leutz committed
    
                foreach ($Articles as $key => $Article) {
                    if (!$Article->getQuantity()) {
                        $empty[] = $key;
                    }
                }
    
                foreach ($empty as $pos) {
    
                $Order->update();
    
                $BasketOrder = new QUI\ERP\Order\Basket\BasketOrder($Order->getUUID());
    
                $products = $BasketOrder->getProducts()->toArray();
    
                $this->Basket->import($products['products']);
    
    Henning Leutz's avatar
    Henning Leutz committed
            } catch (QUI\Exception $Exception) {
                QUI\System\Log::writeDebugException($Exception);
            }
    
    Henning Leutz's avatar
    Henning Leutz committed
        /**
         * @return bool
         */
    
        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();
    
        /**
         * @return string
         */
    
        public function getBody(): string
    
            if ($this->Basket instanceof QUI\ERP\Order\Basket\BasketOrder) {
                $this->Basket->refresh();
            }
    
    
            $Engine = QUI::getTemplateManager()->getEngine();
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            if (!$this->Basket->count()) {
    
                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's avatar
    Henning Leutz committed
        /**
    
         * @return void
         * @throws Exception
    
    Henning Leutz's avatar
    Henning Leutz committed
         */
    
        public function save(): void