monsieurbiz/sylius-shipping-slot-plugin

A Sylius plugin which allow you to choose a delivery date and time.


README

Banner of Sylius Shipping Slot plugin

Shipping Slot

Shipping Slot Plugin license Tests Security Flex Recipe

This plugin allows you to choose a delivery date and time.

Installation

Install the plugin with composer:

composer require monsieurbiz/sylius-shipping-slot-plugin

If you are using Symfony Flex, the recipe will automatically do some actions.

For the installation without Flex, follow these additional steps

1. Add the plugin to your `config/bundles.php` file:

return [
    // ...
    MonsieurBiz\SyliusShippingSlotPlugin\MonsieurBizSyliusShippingSlotPlugin::class => ['all' => true],
];
  1. Import the plugin's configuration by creating a new file config/packages/monsieurbiz_sylius_shipping_slot_plugin.yaml with the following content:
imports:
    - { resource: "@MonsieurBizSyliusShippingSlotPlugin/Resources/config/config.yaml" }
  1. Import the plugin's routing by creating a new file config/routes/monsieurbiz_sylius_shipping_slot_plugin.yaml with the following content:
monsieurbiz_sylius_shipping_slot_plugin:
    resource: "@MonsieurBizSyliusShippingSlotPlugin/Resources/config/routing.yaml"
  1. Copy the override template from the plugin to your templates directory:
mkdir -p templates/bundles/; cp -Rv vendor/monsieurbiz/sylius-shipping-slot-plugin/src/Resources/views/SyliusShopBundle templates/bundles/

After that, follow the next steps:

  1. Your Order entity should implement the MonsieurBiz\SyliusShippingSlotPlugin\Entity\OrderInterface and use the MonsieurBiz\SyliusShippingSlotPlugin\Entity\OrderTrait trait:
namespace App\Entity\Order;

use Doctrine\ORM\Mapping as ORM;
+use MonsieurBiz\SyliusShippingSlotPlugin\Entity\OrderInterface as MonsieurBizOrderInterface;
+use MonsieurBiz\SyliusShippingSlotPlugin\Entity\OrderTrait;
use Sylius\Component\Core\Model\Order as BaseOrder;

/**
 * @ORM\Entity
 * @ORM\Table(name="sylius_order")
 */
#[ORM\Entity]
#[ORM\Table(name: 'sylius_order')]
-class Order extends BaseOrder
+class Order extends BaseOrder implements MonsieurBizOrderInterface
{
+    use OrderTrait;
}
  1. Your ProductVariant entity should implement the MonsieurBiz\SyliusShippingSlotPlugin\Entity\ProductVariantInterface and use the MonsieurBiz\SyliusShippingSlotPlugin\Entity\ProductVariantTrait trait:
namespace App\Entity\Product;

use Doctrine\ORM\Mapping as ORM;
+use MonsieurBiz\SyliusShippingSlotPlugin\Entity\ProductVariantInterface as MonsieurBizProductVariantInterface;
+use MonsieurBiz\SyliusShippingSlotPlugin\Entity\ProductVariantTrait;
use Sylius\Component\Core\Model\ProductVariant as BaseProductVariant;
use Sylius\Component\Product\Model\ProductVariantTranslationInterface;

/**
 * @ORM\Entity
 * @ORM\Table(name="sylius_product_variant")
 */
#[ORM\Entity]
#[ORM\Table(name: 'sylius_product_variant')]
-class ProductVariant extends BaseProductVariant
+class ProductVariant extends BaseProductVariant implements MonsieurBizProductVariantInterface
{
+    use ProductVariantTrait;
+
    protected function createTranslation(): ProductVariantTranslationInterface
    {
        return new ProductVariantTranslation();
    }
}
  1. Your Shipment entity should implement the MonsieurBiz\SyliusShippingSlotPlugin\Entity\ShipmentInterface and use the MonsieurBiz\SyliusShippingSlotPlugin\Entity\ShipmentTrait trait:
namespace App\Entity\Shipping;

use Doctrine\ORM\Mapping as ORM;
+use MonsieurBiz\SyliusShippingSlotPlugin\Entity\ShipmentInterface as MonsieurBizShipmentInterface;
+use MonsieurBiz\SyliusShippingSlotPlugin\Entity\ShipmentTrait;
use Sylius\Component\Core\Model\Shipment as BaseShipment;

/**
 * @ORM\Entity
 * @ORM\Table(name="sylius_shipment")
 */
#[ORM\Entity]
#[ORM\Table(name: 'sylius_shipment')]
-class Shipment extends BaseShipment
+class Shipment extends BaseShipment implements MonsieurBizShipmentInterface
{
+    use ShipmentTrait;
}
  1. Your ShippingMethod entity should implement the MonsieurBiz\SyliusShippingSlotPlugin\Entity\ShippingMethodInterface and use the MonsieurBiz\SyliusShippingSlotPlugin\Entity\ShippingMethodTrait trait:
namespace App\Entity\Shipping;

use Doctrine\ORM\Mapping as ORM;
+use MonsieurBiz\SyliusShippingSlotPlugin\Entity\ShippingMethodInterface as MonsieurBizShippingMethodInterface;
+use MonsieurBiz\SyliusShippingSlotPlugin\Entity\ShippingMethodTrait;
use Sylius\Component\Core\Model\ShippingMethod as BaseShippingMethod;
use Sylius\Component\Shipping\Model\ShippingMethodTranslationInterface;

/**
 * @ORM\Entity
 * @ORM\Table(name="sylius_shipping_method")
 */
#[ORM\Entity]
#[ORM\Table(name: 'sylius_shipping_method')]
-class ShippingMethod extends BaseShippingMethod
+class ShippingMethod extends BaseShippingMethod implements MonsieurBizShippingMethodInterface
{
+    use ShippingMethodTrait {
+        ShippingMethodTrait::__construct as private shippingMethodTraitConstruct;
+    }
+
+    public function __construct()
+    {
+        parent::__construct();
+        $this->shippingMethodTraitConstruct();
+    }
+
    protected function createTranslation(): ShippingMethodTranslationInterface
    {
        return new ShippingMethodTranslation();
    }
}
  1. Update your database schema with the following command:
bin/console doctrine:migrations:migrate
  1. Generate the migration and update your database schema:
bin/console doctrine:migrations:diff
bin/console doctrine:migrations:migrate

Sponsors

  • Glacier1891
  • WahsWash

Contributing

You can open an issue or a Pull Request if you want! 😘
Thank you!