ray-nl/sendcloud-for-simple-commerce

There is no license information available for the latest version (v1.0.0) of this package.

v1.0.0 2022-09-26 11:33 UTC

This package is not auto-updated.

Last update: 2024-05-09 01:53:29 UTC


README

Add the possibility to create shipments with Sendcloud directly from Statamic with Simple Commerce. You can directly download the label and mark the order as shipped.

Get shipping methods

First you have to select the shipping methods to be used in your webshop from Sendcloud. Just run the following command to choose.

php artisan sendcloud:generate-shipping-methods

Add action to CP

If you want to create a label and marked an order as shipped add the following action to your application:

<?php

namespace App\Actions;

use DoubleThreeDigital\SimpleCommerce\Facades\Order;
use Illuminate\Support\Facades\Storage;
use RayNl\SendcloudForSimpleCommerce\Services\SendcloudService;
use Statamic\Actions\Action;
use Statamic\Contracts\Entries\Entry;

class DownloadLabel extends Action
{
    public function visibleTo($item)
    {
        if ($item instanceof Entry) {
            return $item->collection->handle === 'orders';
        }

        return false;
    }

    public function visibleToBulk($items)
    {
        return false;
    }

    public function download($items, $values)
    {
        foreach ($items as $item) {
            $shippingMethod = new ($item->shipping_method->first())();
            if ($shippingMethod->getSendCloudId() !== null) {
                if (!Storage::exists("labels/{$item->order_number}/label-{$item->order_number}.pdf")) {
                    if ($item->sendcloud_id !== null) {

                        $sendcloud = new SendcloudService();
                        $sendcloud->getParcelFromId($item->sendcloud_id);
                        $sendcloud->createLabel($shippingMethod->getSendCloudId());

                        Storage::put('labels/' . $item->order_number . '/label-' . $item->order_number . '.pdf', $sendcloud->createLabelPdf());
                    }
                }

                Order::find($item->id)->markAsShipped();

                return storage_path("app/labels/{$item->order_number}/label-{$item->order_number}.pdf");
            }
        }
    }
}