add ability to customize order incrment number generator
This commit is contained in:
parent
f17a3910f0
commit
98111f686c
|
|
@ -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',
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue