Skip to content
Code-Schnipsel Gruppen Projekte
create.php 4,04 KiB
Newer Older
Patrick Müller's avatar
Patrick Müller committed
<?php

/**
 * Create new CouponCode(s)
Patrick Müller's avatar
Patrick Müller committed
 *
 * @param array $attributes
 * @return bool - success
 */

use QUI\ERP\Coupons\CouponCodeException;
use QUI\ERP\Coupons\Handler;
use QUI\ERP\Discount\Handler as DiscountsHandler;
use QUI\Utils\Security\Orthos;

Patrick Müller's avatar
Patrick Müller committed
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;
            $Discounts = DiscountsHandler::getInstance();
Patrick Müller's avatar
Patrick Müller committed
            $NewDiscount = $Discounts->createChild([
                'active' => 1,
                'discount' => (float)$attributes['discountAmount'],
Patrick Müller's avatar
Patrick Müller committed
                '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'
);