Merge pull request #3384 from Haendlerbund/customizeable-order-number-generators

Customizeable order number generators
This commit is contained in:
Jitendra Singh 2020-06-30 22:52:07 +05:30 committed by GitHub
commit 4ea9ad0d39
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 73 additions and 18 deletions

View File

@ -11,7 +11,7 @@ use Webkul\Product\Models\Product;
$factory->define(BookingProductEventTicket::class, function (Faker $faker, array $attributes) {
return [
'price' => $faker->randomFloat(4, 3, 900),
'qty' => $faker->randomNumber(2),
'qty' => $faker->numberBetween(1, 99),
'booking_product_id' => static function () {
return factory(BookingProduct::class)->create(['type' => 'event'])->id;
}

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\Sequencer;
use Webkul\Shop\Generators\OrderNumberIdSequencer;
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(Sequencer::class, class_implements($generatorClass), true)
) {
/** @var $generatorClass Sequencer */
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 OrderNumberIdSequencer::generate();
}
/**

View File

@ -0,0 +1,38 @@
<?php
namespace Webkul\Shop\Generators;
use Webkul\Sales\Models\Order;
class OrderNumberIdSequencer implements Sequencer
{
/**
* @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;
}
}

View File

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