From 98111f686c6de7614ea717266b985f261f241a64 Mon Sep 17 00:00:00 2001 From: Florian Bosdorff Date: Tue, 30 Jun 2020 09:46:48 +0200 Subject: [PATCH] add ability to customize order incrment number generator --- packages/Webkul/Sales/src/Config/system.php | 8 ++++ .../src/Repositories/OrderRepository.php | 28 ++++++-------- .../Generators/OrderIncrementGenerator.php | 15 ++++++++ .../Generators/OrderIncrementIdGenerator.php | 38 +++++++++++++++++++ 4 files changed, 72 insertions(+), 17 deletions(-) create mode 100644 packages/Webkul/Shop/src/Generators/OrderIncrementGenerator.php create mode 100644 packages/Webkul/Shop/src/Generators/OrderIncrementIdGenerator.php diff --git a/packages/Webkul/Sales/src/Config/system.php b/packages/Webkul/Sales/src/Config/system.php index ad124a5df..bf2e373f2 100644 --- a/packages/Webkul/Sales/src/Config/system.php +++ b/packages/Webkul/Sales/src/Config/system.php @@ -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', diff --git a/packages/Webkul/Sales/src/Repositories/OrderRepository.php b/packages/Webkul/Sales/src/Repositories/OrderRepository.php index 10496cc25..ed79da644 100755 --- a/packages/Webkul/Sales/src/Repositories/OrderRepository.php +++ b/packages/Webkul/Sales/src/Repositories/OrderRepository.php @@ -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(); } /** diff --git a/packages/Webkul/Shop/src/Generators/OrderIncrementGenerator.php b/packages/Webkul/Shop/src/Generators/OrderIncrementGenerator.php new file mode 100644 index 000000000..1b1e7cfd2 --- /dev/null +++ b/packages/Webkul/Shop/src/Generators/OrderIncrementGenerator.php @@ -0,0 +1,15 @@ + '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; + } +} \ No newline at end of file