PHP code example of salesrender / plugin-core-logistic
1. Go to this page and download the library: Download salesrender/plugin-core-logistic library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
salesrender / plugin-core-logistic example snippets
use SalesRender\Plugin\Components\Batch\BatchContainer;
use SalesRender\Plugin\Components\Db\Components\Connector;
use SalesRender\Plugin\Components\Info\Developer;
use SalesRender\Plugin\Components\Info\Info;
use SalesRender\Plugin\Components\Info\PluginType;
use SalesRender\Plugin\Components\Purpose\LogisticPluginClass;
use SalesRender\Plugin\Components\Purpose\PluginEntity;
use SalesRender\Plugin\Components\Settings\Settings;
use SalesRender\Plugin\Components\Translations\Translator;
use SalesRender\Plugin\Core\Actions\Upload\LocalUploadAction;
use SalesRender\Plugin\Core\Actions\Upload\UploadersContainer;
use SalesRender\Plugin\Core\Logistic\Components\Actions\Shipping\ShippingContainer;
use SalesRender\Plugin\Core\Logistic\Components\Waybill\WaybillContainer;
use YourVendor\Plugin\Logistic\YourProvider\Batch\Batch_1;
use YourVendor\Plugin\Logistic\YourProvider\Batch\BatchShippingHandler;
use YourVendor\Plugin\Logistic\YourProvider\Actions\CancelAction;
use YourVendor\Plugin\Logistic\YourProvider\Actions\RemoveOrdersAction;
use YourVendor\Plugin\Logistic\YourProvider\Settings\SettingsForm;
use YourVendor\Plugin\Logistic\YourProvider\Waybill\WaybillForm;
use YourVendor\Plugin\Logistic\YourProvider\Waybill\WaybillHandler;
use Medoo\Medoo;
use XAKEPEHOK\Path\Path;
# 1. Configure DB
Connector::config(new Medoo([
'database_type' => 'sqlite',
'database_file' => Path::root()->down('db/database.db')
]));
# 2. Set default language
Translator::config('ru_RU');
# 3. Configure file upload
UploadersContainer::addDefaultUploader(new LocalUploadAction([]));
# 4. Configure plugin info
Info::config(
new PluginType(PluginType::LOGISTIC),
fn() => Translator::get('info', 'Your Logistic Plugin'),
fn() => Translator::get('info', 'Plugin **description**'),
[
"class" => LogisticPluginClass::CLASS_DELIVERY,
"entity" => PluginEntity::ENTITY_ORDER,
"currency" => ["RUB"],
"codename" => "SR_LOGISTIC_YOUR_PROVIDER",
],
new Developer(
'Your Company',
'[email protected]',
'example.com',
)
);
# 5. Configure settings form
Settings::setForm(fn() => new SettingsForm());
# 6. Configure batch forms and handler
BatchContainer::config(
function (int $number) {
switch ($number) {
case 1: return new Batch_1();
default: return null;
}
},
new BatchShippingHandler()
);
# 7. Configure waybill form and handler
WaybillContainer::config(
fn() => new WaybillForm(),
new WaybillHandler()
);
# 8. Configure shipping cancel and remove actions
ShippingContainer::config(
new CancelAction(),
new RemoveOrdersAction(),
);
namespace YourVendor\Plugin\Logistic\YourProvider\Waybill;
use SalesRender\Plugin\Components\Form\Form;
use SalesRender\Plugin\Components\Form\FormData;
use SalesRender\Plugin\Components\Logistic\Logistic;
use SalesRender\Plugin\Components\Logistic\LogisticStatus;
use SalesRender\Plugin\Components\Logistic\Waybill\Waybill;
use SalesRender\Plugin\Components\Logistic\Waybill\Track;
use SalesRender\Plugin\Core\Logistic\Components\Waybill\Response\WaybillAddress;
use SalesRender\Plugin\Core\Logistic\Components\Waybill\Response\WaybillResponse;
use SalesRender\Plugin\Core\Logistic\Components\Waybill\WaybillHandlerInterface;
use SalesRender\Components\Address\Address;
class WaybillHandler implements WaybillHandlerInterface
{
public function __invoke(Form $form, FormData $data): WaybillResponse
{
// Create waybill from form data
$track = $data->get('waybill.track')
? new Track($data->get('waybill.track'))
: null;
$waybill = new Waybill(
$track,
null, // price
null, // delivery terms
null, // delivery type
false // COD
);
$logistic = new Logistic(
$waybill,
new LogisticStatus(LogisticStatus::CREATED)
);
// Optionally return updated address
$address = new WaybillAddress(
$data->get('address.field.0'),
new Address(
(string) $data->get('address.region'),
(string) $data->get('address.city'),
(string) $data->get('address.address_1'),
(string) $data->get('address.address_2'),
(string) $data->get('address.postcode'),
(string) $data->get('address.countryCode.0')
)
);
return new WaybillResponse($logistic, $address);
}
}
namespace YourVendor\Plugin\Logistic\YourProvider\Batch;
use SalesRender\Plugin\Components\Batch\Batch;
use SalesRender\Plugin\Components\Batch\Process\Error;
use SalesRender\Plugin\Components\Batch\Process\Process;
use SalesRender\Plugin\Core\Logistic\Components\BatchShippingHandler;
class BatchShippingHandler extends \SalesRender\Plugin\Core\Logistic\Components\BatchShippingHandler
{
public function __invoke(Process $process, Batch $batch)
{
// 1. Create a shipping in SalesRender
$shippingId = $this->createShipping($batch);
// 2. Iterate over orders, lock them, prepare data
// 3. Add orders to the shipping
$this->addOrders($batch, $shippingId, $ordersData);
// 4. Mark shipping as exported
$this->markAsExported($batch, $shippingId, $ordersCount);
// On failure:
// $this->markAsFailed($batch, $shippingId);
$process->finish(true);
$process->save();
}
}
namespace YourVendor\Plugin\Logistic\YourProvider\Actions;
use SalesRender\Plugin\Core\Logistic\Components\Actions\Shipping\ShippingCancelAction;
use Slim\Http\Response;
use Slim\Http\ServerRequest;
class CancelAction extends ShippingCancelAction
{
protected function handle(array $body, ServerRequest $request, Response $response, array $args): Response
{
// Implement cancellation logic with your provider
// $body contains the special request payload
return $response->withStatus(202);
}
}
namespace YourVendor\Plugin\Logistic\YourProvider\Actions;
use SalesRender\Plugin\Core\Logistic\Components\Actions\Shipping\RemoveOrdersAction;
use Slim\Http\Response;
use Slim\Http\ServerRequest;
class RemoveOrdersAction extends \SalesRender\Plugin\Core\Logistic\Components\Actions\Shipping\RemoveOrdersAction
{
protected function handle(array $body, ServerRequest $request, Response $response, array $args): Response
{
// Implement order removal logic
return $response->withStatus(202);
}
}
use SalesRender\Plugin\Core\Logistic\Factories\WebAppFactory;
pplication->run();
#!/usr/bin/env php
use SalesRender\Plugin\Core\Logistic\Factories\ConsoleAppFactory;
tory->build();
$application->run();
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.