JEMBOT MAWOT Bypass Shell

Current Path : /home/cinepatreb/billetterie/modules/mollie/src/Handler/CartRule/
Upload File :
Current File : /home/cinepatreb/billetterie/modules/mollie/src/Handler/CartRule/CartRuleQuantityChangeHandler.php

<?php
/**
 * Mollie       https://www.mollie.nl
 *
 * @author      Mollie B.V. <info@mollie.nl>
 * @copyright   Mollie B.V.
 * @license     https://github.com/mollie/PrestaShop/blob/master/LICENSE.md
 *
 * @see        https://github.com/mollie/PrestaShop
 * @codingStandardsIgnoreStart
 */

namespace Mollie\Handler\CartRule;

use Cart;
use CartRule;
use Mollie\Repository\CartRuleRepositoryInterface;
use Mollie\Repository\OrderRepositoryInterface;
use Mollie\Repository\PendingOrderCartRuleRepositoryInterface;
use MolPendingOrderCartRule;
use Order;

if (!defined('_PS_VERSION_')) {
    exit;
}

class CartRuleQuantityChangeHandler implements CartRuleQuantityChangeHandlerInterface
{
    /**
     * @var PendingOrderCartRuleRepositoryInterface
     */
    private $pendingOrderCartRuleRepository;

    /**
     * @var CartRuleRepositoryInterface
     */
    private $cartRuleRepository;

    /**
     * @var OrderRepositoryInterface
     */
    private $orderRepository;

    public function __construct(
        PendingOrderCartRuleRepositoryInterface $pendingOrderCartRuleRepository,
        CartRuleRepositoryInterface $cartRuleRepository,
        OrderRepositoryInterface $orderRepository
    ) {
        $this->pendingOrderCartRuleRepository = $pendingOrderCartRuleRepository;
        $this->cartRuleRepository = $cartRuleRepository;
        $this->orderRepository = $orderRepository;
    }

    /**
     * {@inheritDoc}
     */
    public function handle(Cart $cart, $cartRules = [])
    {
        /** @var Order|null $order */
        $order = $this->orderRepository->findOneByCartId($cart->id);

        if (empty($order)) {
            return;
        }

        foreach ($cartRules as $cartRuleContent) {
            /** @var CartRule|null $cartRule */
            $cartRule = $this->cartRuleRepository->findOneBy(
                ['id_cart_rule' => (int) $cartRuleContent['id_cart_rule']]
            );

            if (empty($cartRule)) {
                continue;
            }
            /** @var MolPendingOrderCartRule|null $pendingOrderCartRule */
            $pendingOrderCartRule = $this->pendingOrderCartRuleRepository->findOneBy([
                'id_order' => (int) $order->id,
                'id_cart_rule' => (int) $cartRule->id,
            ]);

            if (empty($pendingOrderCartRule)) {
                continue;
            }

            /* On successful payment decrease quantities because it is only done on initialization of payment (First cart) */
            $this->setQuantities($order, $cartRule, $pendingOrderCartRule);
        }
    }

    /**
     * @param MolPendingOrderCartRule $pendingOrderCartRule
     *
     * @throws \PrestaShopDatabaseException
     * @throws \PrestaShopException
     */
    private function setQuantities(Order $order, CartRule $cartRule, $pendingOrderCartRule)
    {
        $this->decreaseAvailableCartRuleQuantity($cartRule);
        $this->increaseCustomerUsedCartRuleQuantity($order, $cartRule, $pendingOrderCartRule);
    }

    /**
     * @throws \PrestaShopDatabaseException
     * @throws \PrestaShopException
     */
    private function decreaseAvailableCartRuleQuantity(CartRule $cartRule)
    {
        $cartRule->quantity = max(0, $cartRule->quantity - 1);
        $cartRule->update();
    }

    private function increaseCustomerUsedCartRuleQuantity(Order $order, CartRule $cartRule, MolPendingOrderCartRule $pendingOrderCartRule)
    {
        $this->pendingOrderCartRuleRepository->usePendingOrderCartRule($order, $pendingOrderCartRule);
        $this->pendingOrderCartRuleRepository->removePreviousPendingOrderCartRule($order->id, $cartRule->id);
    }
}

xxxxx1.0, XXX xxxx