Skip to content
Code-Schnipsel Gruppen Projekte
create.php 4,05 KiB
Newer Older
  • Learn to ignore specific revisions
  • Patrick Müller's avatar
    Patrick Müller committed
    <?php
    
    
    Patrick Müller's avatar
    Patrick Müller committed
    use QUI\ERP\Coupons\CouponCodeException;
    
    Henning Leutz's avatar
    Henning Leutz committed
    use QUI\ERP\Coupons\Handler;
    
    Patrick Müller's avatar
    Patrick Müller committed
    use QUI\ERP\Discount\Handler as DiscountsHandler;
    
    Henning Leutz's avatar
    Henning Leutz committed
    use QUI\Utils\Security\Orthos;
    
    Patrick Müller's avatar
    Patrick Müller committed
    
    /**
    
     * Create new CouponCode(s)
    
    Patrick Müller's avatar
    Patrick Müller committed
     *
     * @param array $attributes
     * @return bool - success
     */
    QUI::$Ajax->registerFunction(
        'package_quiqqer_coupons_ajax_create',
        function ($attributes) {
    
    Henning Leutz's avatar
    Henning Leutz committed
            $attributes = Orthos::clearArray(json_decode($attributes, true));
    
            if (!empty($attributes['code'])) {
                $attributes['code'] = html_entity_decode($attributes['code']);
            }
    
            if (!empty($attributes['title'])) {
                $attributes['title'] = html_entity_decode($attributes['title']);
            }
    
    Patrick Müller's avatar
    Patrick Müller committed
    
            try {
                $amount      = 1;
    
    Patrick Müller's avatar
    Patrick Müller committed
                $couponCodes = [];
    
    Patrick Müller's avatar
    Patrick Müller committed
    
                if (!empty($attributes['amount'])) {
                    $amount = (int)$attributes['amount'];
                    unset($attributes['amount']);
                }
    
    
    Patrick Müller's avatar
    Patrick Müller committed
                // Check required fields
                $requiredFields = [
                    'discountAmount'
                ];
    
                foreach ($requiredFields as $field) {
                    if (!isset($attributes[$field])) {
                        throw new CouponCodeException([
                            'quiqqer/coupons',
                            'exception.ajax.create.missing_field'
                        ]);
                    }
                }
    
                // Create discount
                switch ($attributes['discountType']) {
                    case 'percentage':
                        $discountType = DiscountsHandler::DISCOUNT_TYPE_PERCENT;
                        break;
    
    Patrick Müller's avatar
    Patrick Müller committed
                    default:
                        $discountType = DiscountsHandler::DISCOUNT_TYPE_CURRENCY;
    
    Patrick Müller's avatar
    Patrick Müller committed
                $Discounts   = DiscountsHandler::getInstance();
                $NewDiscount = $Discounts->createChild([
                    'active'        => 1,
                    'discount'      => (float)$attributes['discountAmount'],
                    'discount_type' => $discountType,
                ]);
    
                $L = QUI::getLocale();
    
    
    Patrick Müller's avatar
    Patrick Müller committed
                for ($i = 0; $i < $amount; $i++) {
    
    Patrick Müller's avatar
    Patrick Müller committed
                    $NewCouponCode = Handler::createCouponCode([$NewDiscount->getId()], $attributes);
    
                    if ($i === 0) {
                        \QUI\Translator::update(
                            'quiqqer/discount',
    
    Henning Leutz's avatar
    Henning Leutz committed
                            'discount.' . $NewDiscount->getId() . '.title',
    
    Patrick Müller's avatar
    Patrick Müller committed
                            'quiqqer/discount',
                            [
                                'de' => $L->getByLang('de', 'quiqqer/coupons', 'Discount.default_title', [
                                    'couponCode' => $NewCouponCode->getCode()
                                ]),
                                'en' => $L->getByLang('en', 'quiqqer/coupons', 'Discount.default_title', [
                                    'couponCode' => $NewCouponCode->getCode()
                                ])
                            ]
                        );
    
                        \QUI\Translator::publish('quiqqer/discount');
                    }
    
                    $couponCodes[] = $NewCouponCode;
    
    Patrick Müller's avatar
    Patrick Müller committed
                }
    
    Patrick Müller's avatar
    Patrick Müller committed
            } catch (CouponCodeException $Exception) {
    
    Patrick Müller's avatar
    Patrick Müller committed
                QUI::getMessagesHandler()->addError(
                    QUI::getLocale()->get(
    
                        'quiqqer/coupons',
    
    Patrick Müller's avatar
    Patrick Müller committed
                        'message.ajax.create.error',
    
    Patrick Müller's avatar
    Patrick Müller committed
                        [
    
    Patrick Müller's avatar
    Patrick Müller committed
                            'error' => $Exception->getMessage()
    
    Patrick Müller's avatar
    Patrick Müller committed
                        ]
    
    Patrick Müller's avatar
    Patrick Müller committed
                    )
                );
    
                return false;
            } catch (QUI\Permissions\Exception $Exception) {
                throw $Exception;
            } catch (\Exception $Exception) {
                QUI\System\Log::writeException($Exception);
    
                QUI::getMessagesHandler()->addError(
                    QUI::getLocale()->get(
    
                        'quiqqer/coupons',
    
    Patrick Müller's avatar
    Patrick Müller committed
                        'message.ajax.general_error'
                    )
                );
    
                return false;
            }
    
            QUI::getMessagesHandler()->addSuccess(
                QUI::getLocale()->get(
    
                    'quiqqer/coupons',
    
    Patrick Müller's avatar
    Patrick Müller committed
                    'message.ajax.create.success'
                )
            );
    
            return true;
        },
    
    Patrick Müller's avatar
    Patrick Müller committed
        ['attributes'],
    
    Patrick Müller's avatar
    Patrick Müller committed
        'Permission::checkAdminUser'
    );