add ability to customize order incrment number generator

This commit is contained in:
Florian Bosdorff 2020-06-30 09:46:48 +02:00
parent f17a3910f0
commit 98111f686c
4 changed files with 72 additions and 17 deletions

View File

@ -34,6 +34,14 @@ return [
'channel_based' => true,
'locale_based' => true,
],
[
'name' => 'order_number_generator-class',
'title' => 'admin::app.admin.system.order-number-generator-class',
'type' => 'text',
'validation' => false,
'channel_based' => true,
'locale_based' => true,
],
]
], [
'key' => 'sales.orderSettings.invoice_slip_design',

View File

@ -8,6 +8,8 @@ use Illuminate\Support\Facades\Event;
use Webkul\Core\Eloquent\Repository;
use Webkul\Sales\Contracts\Order;
use Webkul\Sales\Models\Order as OrderModel;
use Webkul\Shop\Generators\OrderIncrementGenerator;
use Webkul\Shop\Generators\OrderIncrementIdGenerator;
class OrderRepository extends Repository
{
@ -185,25 +187,17 @@ class OrderRepository extends Repository
*/
public function generateIncrementId()
{
foreach ([ 'Prefix' => 'prefix',
'Length' => 'length',
'Suffix' => 'suffix', ] as
$varSuffix => $confKey)
{
$var = "invoiceNumber{$varSuffix}";
$$var = core()->getConfigData('sales.orderSettings.order_number.order_number_'.$confKey) ?: false;
$generatorClass = core()->getConfigData('sales.orderSettings.order_number.order_number_generator-class') ?: false;
if ($generatorClass !== false
&& class_exists($generatorClass)
&& in_array(OrderIncrementGenerator::class, class_implements($generatorClass), true)
) {
/** @var $generatorClass OrderIncrementGenerator */
return $generatorClass::generate();
}
$lastOrder = $this->model->orderBy('id', 'desc')->limit(1)->first();
$lastId = $lastOrder ? $lastOrder->id : 0;
if ($invoiceNumberLength && ($invoiceNumberPrefix || $invoiceNumberSuffix)) {
$invoiceNumber = ($invoiceNumberPrefix) . sprintf("%0{$invoiceNumberLength}d", 0) . ($lastId + 1) . ($invoiceNumberSuffix);
} else {
$invoiceNumber = $lastId + 1;
}
return $invoiceNumber;
return OrderIncrementIdGenerator::generate();
}
/**

View File

@ -0,0 +1,15 @@
<?php
namespace Webkul\Shop\Generators;
interface OrderIncrementGenerator
{
/**
* create and return the next increment id for an order
*
* @return string
*/
public static function generate(): string;
}

View File

@ -0,0 +1,38 @@
<?php
namespace Webkul\Shop\Generators;
use Webkul\Sales\Models\Order;
class OrderIncrementIdGenerator implements OrderIncrementGenerator
{
/**
* @inheritDoc
*/
public static function generate(): string
{
foreach ([
'Prefix' => 'prefix',
'Length' => 'length',
'Suffix' => 'suffix',
] as
$varSuffix => $confKey) {
$var = "invoiceNumber{$varSuffix}";
$$var = core()->getConfigData('sales.orderSettings.order_number.order_number_' . $confKey) ?: false;
}
$lastOrder = Order::query()->orderBy('id', 'desc')->limit(1)->first();
$lastId = $lastOrder ? $lastOrder->id : 0;
if ($invoiceNumberLength && ($invoiceNumberPrefix || $invoiceNumberSuffix)) {
$invoiceNumber = ($invoiceNumberPrefix) . sprintf("%0{$invoiceNumberLength}d",
0) . ($lastId + 1) . ($invoiceNumberSuffix);
} else {
$invoiceNumber = $lastId + 1;
}
return $invoiceNumber;
}
}