HEX
Server: Microsoft-IIS/8.5
System: Windows NT YDAWBH120 6.3 build 9600 (Windows Server 2012 R2 Standard Edition) AMD64
User: tentjecom_web (0)
PHP: 7.4.14
Disabled: NONE
Upload Files
File: D:/HostingSpaces/brameda/brameda.nl/app/Komma/Shop/Orders/OrderPolicy.php
<?php

namespace App\Komma\Shop\Orders;

use App\Komma\Base\Policy;
use App\Komma\Shop\Orders\Models\Order;
use App\Komma\Users\Models\KmsUserRole;
use App\Komma\Users\Models\KmsUser;
use Illuminate\Auth\Access\HandlesAuthorization;

class OrderPolicy extends Policy
{
    use HandlesAuthorization;

    protected $forModelName = Order::class;

    /**
     * Create a new policy instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->ignoreAdminStatusForMethods[] = 'createShipmentForOrder'; //Even admins pas this ability test.
        $this->ignoreAdminStatusForMethods[] = 'createShipmentGroupForOrder'; //Even admins pas this ability test.\
//        parent::$DEBUG = OrderPolicy::class;
    }

    public function create(KmsUser $user): bool
    {
        $this->debug('create', false);
        return false;
    }

    /**
     * For whom it is allowed to search orders
     *
     * @param KmsUser $user
     * @return bool
     */
    public function search(KmsUser $user) {
        $result = $user->isAtLeast(KmsUserRole::Editor);
        return $result;
    }

    /**
     * @param KmsUser $user
     * @param Order $order
     * @return bool
     */
    public function changeOrderStatus(KmsUser $user, Order $order)
    {
        return true;
    }

    /**
     * Check if it is allowed to create shipments for the order
     *
     * @param KmsUser $user
     * @param Order $order
     * @return bool
     */
    public function createShipmentForOrder(KmsUser $user, Order $order)
    {
        if(!OrderStatus::isValidItem($order->status, true)) return false;

        $allowedStatuses = [
//            OrderStatus::NEW,
//            OrderStatus::PENDING,
//            OrderStatus::AWAITING_PAYMENT,
            OrderStatus::AWAITING_FULFILLMENT,
            OrderStatus::AWAITING_SHIPMENT,
            OrderStatus::AWAITING_PICKUP,
            OrderStatus::PARTIALLY_SHIPPED,
//            OrderStatus::COMPLETED,
//            OrderStatus::SHIPPED,
//            OrderStatus::CANCELED,
//            OrderStatus::DECLINED,
//            OrderStatus::REFUNDED,
//            OrderStatus::PARTIALLY_REFUNDED,
            OrderStatus::DISPUTED,
//            OrderStatus::VERIFICATION,
        ];

        $result = (in_array($order->status, $allowedStatuses, true));
//        $this->debug('createShipmentForOrder', $result);
        return $result;
    }

    /**
     * Check if it is allowed to create shipments for the order
     *
     * @param KmsUser $user
     * @param Order $order
     * @return bool
     */
    public function createShipmentGroupForOrder(KmsUser $user, Order $order)
    {
        if(!OrderStatus::isValidItem($order->status, true)) return false;

        $allowedStatuses = [
//            OrderStatus::NEW,
//            OrderStatus::PENDING,
//            OrderStatus::AWAITING_PAYMENT,
//            OrderStatus::AWAITING_FULFILLMENT,
            OrderStatus::AWAITING_SHIPMENT,
//            OrderStatus::AWAITING_PICKUP,
//            OrderStatus::PARTIALLY_SHIPPED,
//            OrderStatus::COMPLETED,
//            OrderStatus::SHIPPED,
//            OrderStatus::CANCELED,
//            OrderStatus::DECLINED,
//            OrderStatus::REFUNDED,
//            OrderStatus::PARTIALLY_REFUNDED,
//            OrderStatus::DISPUTED,
//            OrderStatus::VERIFICATION,
        ];

        return (in_array($order->status, $allowedStatuses, true));
    }
}