Skip to content
Code-Schnipsel Gruppen Projekte
ArticleView.php 6,45 KiB
Newer Older
  • Learn to ignore specific revisions
  • Henning Leutz's avatar
    Henning Leutz committed
    <?php
    
    /**
     * This file contains QUI\ERP\Accounting\ArticleView
     */
    
    namespace QUI\ERP\Accounting;
    
    use QUI;
    
    use QUI\ERP\Accounting\Calc as ErpCalc;
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
    Henning Leutz's avatar
    Henning Leutz committed
    use function implode;
    
    
    Henning Leutz's avatar
    Henning Leutz committed
    /**
     * Class ArticleView
    
    Henning Leutz's avatar
    Henning Leutz committed
     * @package QUI\ERP\Accounting
     */
    class ArticleView extends QUI\QDOM
    {
        /**
    
    Henning Leutz's avatar
    Henning Leutz committed
         * @var float
    
    Henning Leutz's avatar
    Henning Leutz committed
         */
    
        protected float $position = 1;
    
    Henning Leutz's avatar
    Henning Leutz committed
    
        /**
         * @var Article
         */
    
        protected Article $Article;
    
    Henning Leutz's avatar
    Henning Leutz committed
    
        /**
         * @var QUI\ERP\Currency\Currency
         */
    
        protected QUI\ERP\Currency\Currency $Currency;
    
    Henning Leutz's avatar
    Henning Leutz committed
    
        /**
         * ArticleView constructor.
         * @param Article $Article
         */
        public function __construct(Article $Article)
        {
            $this->Article = $Article;
    
            $this->setAttributes($this->Article->toArray());
    
    Henning Leutz's avatar
    Henning Leutz committed
    
            if ($this->getAttribute('position')) {
                $this->position = (float)$this->getAttribute('position');
            }
    
    Henning Leutz's avatar
    Henning Leutz committed
        /**
         * @return string
         */
        public function getQuantityUnit(): string
        {
            return $this->Article->getQuantityUnit();
        }
    
    
    Henning Leutz's avatar
    Henning Leutz committed
        /**
         * Set the currency
         *
         * @param QUI\ERP\Currency\Currency $Currency
         */
    
    Henning Leutz's avatar
    Henning Leutz committed
        public function setCurrency(QUI\ERP\Currency\Currency $Currency): void
    
    Henning Leutz's avatar
    Henning Leutz committed
        {
            $this->Currency = $Currency;
        }
    
        /**
         * Set the position
         *
         * @param $position
         */
    
    Henning Leutz's avatar
    Henning Leutz committed
        public function setPosition($position): void
        {
            $this->position = (float)$position;
        }
    
        /**
         * @return float
         */
        public function getPosition(): float
    
    Henning Leutz's avatar
    Henning Leutz committed
        {
    
    Henning Leutz's avatar
    Henning Leutz committed
            return $this->position;
    
    Henning Leutz's avatar
    Henning Leutz committed
        }
    
        /**
         * @return QUI\ERP\Currency\Currency
         */
    
        public function getCurrency(): QUI\ERP\Currency\Currency
    
    Henning Leutz's avatar
    Henning Leutz committed
        {
            if ($this->Currency !== null) {
                return $this->Currency;
            }
    
            return QUI\ERP\Currency\Handler::getDefaultCurrency();
        }
    
    
            $article = $this->Article->toArray();
            $current = QUI::getLocale()->getCurrent();
    
    
            foreach ($article['customFields'] as $field) {
                if (!isset($field['title'])) {
                    continue;
                }
    
    
                if (isset($field['custom_calc']['valueText'])) {
                    if (!\is_string($field['custom_calc']['valueText'])) {
                        if (isset($field['custom_calc']['valueText'][$current])) {
                            $field['custom_calc']['valueText'] = $field['custom_calc']['valueText'][$current];
                        } else {
                            $field['custom_calc']['valueText'] = '';
                        }
                    }
    
    
                    // Add price addition
                    $sum = (float)$field['custom_calc']['value'];
    
    
                    if (
                        !empty($field['custom_calc']['displayDiscounts']) &&
    
                        (!QUI::isFrontend() || !QUI\ERP\Products\Utils\Package::hidePrice()) &&
    
                        if ($sum >= 0) {
                            $priceAddition = '+';
                        } else {
                            $priceAddition = '-';
                        }
    
                        switch ((int)$field['custom_calc']['calculation']) {
                            case ErpCalc::CALCULATION_PERCENTAGE:
    
                                $priceAddition .= $sum . '%';
    
                                break;
    
                            default:
                                $priceAddition .= $this->getCurrency()->format($sum);
                                break;
                        }
    
                        // locale values
    
                        $field['custom_calc']['valueText'] .= ' (' . $priceAddition . ')';
    
                $customFields[] = $field;
            }
    
            return $customFields;
        }
    
    
        {
            return $this->Article->displayPrice();
        }
    
    
        /**
         * @return string
         */
    
        {
            $Currency = $this->getCurrency();
    
            $calc = $this->getAttribute('calculated');
    
    
            return $Currency->format($calc['price']);
        }
    
    
    Henning Leutz's avatar
    Henning Leutz committed
        /**
         * Create the html
         *
         * @return string
    
    Henning Leutz's avatar
    Henning Leutz committed
         *
         * @throws QUI\Exception
    
    Henning Leutz's avatar
    Henning Leutz committed
         */
    
    Henning Leutz's avatar
    Henning Leutz committed
        {
    
            $Engine = QUI::getTemplateManager()->getEngine();
    
    Henning Leutz's avatar
    Henning Leutz committed
            $Currency = $this->getCurrency();
    
            $customFields = $this->getCustomFields();
    
            $article = $this->Article->toArray();
            $calc = $article['calculated'];
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            // quantity unit
            if (isset($article['quantityUnit']) && \is_array($article['quantityUnit'])) {
                $article['quantityUnit'] = $article['quantityUnit']['title'];
            }
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            $this->setAttributes($article);
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            // discount
            $Discount = $this->Article->getDiscount();
    
    
    Henning Leutz's avatar
    Henning Leutz committed
            if ($Discount && $Discount->getValue()) {
    
    Henning Leutz's avatar
    Henning Leutz committed
                $Engine->assign([
                    'Discount' => $Discount
                ]);
            }
    
    
            $articleData = $this->Article->toArray();
    
    Henning Leutz's avatar
    Henning Leutz committed
            $cssClasses = ['articles-article-entry'];
    
            if (!empty($this->Article->getProductSetParentUuid())) {
                $cssClasses[] = 'articles-article--additional';
            } else {
                $cssClasses[] = 'articles-article--real';
            }
    
            if ($this->getAttribute('odd')) {
                $cssClasses[] = 'articles-article--odd';
            }
    
            if ($this->getAttribute('even')) {
                $cssClasses[] = 'articles-article--even';
            }
    
    Henning Leutz's avatar
    Henning Leutz committed
                'uuid' => $articleData['uuid'],
                'cssClasses' => implode(' ', $cssClasses),
                'productSetParentUuid' => $articleData['productSetParentUuid'],
    
                'position' => $this->position,
                'unitPrice' => $Currency->format($article['unitPrice']),
                'sum' => $Currency->format($article['sum']),
    
                'calculated_basisPrice' => $Currency->format($calc['basisPrice']),
    
                'calculated_price' => $Currency->format($calc['price']),
                'calculated_sum' => $Currency->format($calc['sum']),
                'calculated_nettoSum' => $Currency->format($calc['nettoSum']),
                'customFields' => $customFields,
                'hasAppliedVat' => !empty($articleData['calculated']['vatArray']['vat'])
    
    Henning Leutz's avatar
    Henning Leutz committed
    
    
            if ($this->Article instanceof QUI\ERP\Accounting\Articles\Text) {
    
                return $Engine->fetch(\dirname(__FILE__) . '/ArticleViewText.html');
    
            return $Engine->fetch(\dirname(__FILE__) . '/ArticleView.html');