From 8201af741b1ae6d2957fe6bfe4cdf7e56bd7abc2 Mon Sep 17 00:00:00 2001 From: denisdulici Date: Thu, 5 Mar 2020 17:22:07 +0300 Subject: [PATCH] generate bill number --- app/Http/Controllers/Purchases/Bills.php | 4 ++- .../Purchase/IncreaseNextBillNumber.php | 23 ++++++++++++++++ app/Models/Purchase/Bill.php | 1 + app/Providers/Event.php | 1 + app/Traits/Purchases.php | 27 +++++++++++++++++++ .../views/purchases/bills/create.blade.php | 2 +- 6 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 app/Listeners/Purchase/IncreaseNextBillNumber.php diff --git a/app/Http/Controllers/Purchases/Bills.php b/app/Http/Controllers/Purchases/Bills.php index 541351a85..e56108269 100644 --- a/app/Http/Controllers/Purchases/Bills.php +++ b/app/Http/Controllers/Purchases/Bills.php @@ -108,7 +108,9 @@ class Bills extends Controller $categories = Category::type('expense')->enabled()->orderBy('name')->pluck('name', 'id'); - return view('purchases.bills.create', compact('vendors', 'currencies', 'currency', 'items', 'taxes', 'categories')); + $number = $this->getNextBillNumber(); + + return view('purchases.bills.create', compact('vendors', 'currencies', 'currency', 'items', 'taxes', 'categories', 'number')); } /** diff --git a/app/Listeners/Purchase/IncreaseNextBillNumber.php b/app/Listeners/Purchase/IncreaseNextBillNumber.php new file mode 100644 index 000000000..c05ee5b41 --- /dev/null +++ b/app/Listeners/Purchase/IncreaseNextBillNumber.php @@ -0,0 +1,23 @@ +increaseNextBillNumber(); + } +} diff --git a/app/Models/Purchase/Bill.php b/app/Models/Purchase/Bill.php index 76f5a0223..931810c6d 100644 --- a/app/Models/Purchase/Bill.php +++ b/app/Models/Purchase/Bill.php @@ -99,5 +99,6 @@ class Bill extends DocumentModel public function onCloning($src, $child = null) { $this->status = 'draft'; + $this->bill_number = $this->getNextBillNumber(); } } diff --git a/app/Providers/Event.php b/app/Providers/Event.php index c8f04a232..42d2af107 100644 --- a/app/Providers/Event.php +++ b/app/Providers/Event.php @@ -25,6 +25,7 @@ class Event extends Provider ], 'App\Events\Purchase\BillCreated' => [ 'App\Listeners\Purchase\CreateBillCreatedHistory', + 'App\Listeners\Purchase\IncreaseNextBillNumber', ], 'App\Events\Purchase\BillReceived' => [ 'App\Listeners\Purchase\MarkBillReceived', diff --git a/app/Traits/Purchases.php b/app/Traits/Purchases.php index beb1a0184..228ae3c7d 100644 --- a/app/Traits/Purchases.php +++ b/app/Traits/Purchases.php @@ -4,6 +4,33 @@ namespace App\Traits; trait Purchases { + /** + * Generate next bill number + * + * @return string + */ + public function getNextBillNumber() + { + $prefix = setting('bill.number_prefix', 'BIL-'); + $next = setting('bill.number_next', '1'); + $digit = setting('bill.number_digit', '5'); + + $number = $prefix . str_pad($next, $digit, '0', STR_PAD_LEFT); + + return $number; + } + + /** + * Increase the next bill number + */ + public function increaseNextBillNumber() + { + $next = setting('bill.number_next', 1) + 1; + + setting(['bill.number_next' => $next]); + setting()->save(); + } + /** * Get a collection of bill statuses * diff --git a/resources/views/purchases/bills/create.blade.php b/resources/views/purchases/bills/create.blade.php index b9a630f14..9c62679a8 100644 --- a/resources/views/purchases/bills/create.blade.php +++ b/resources/views/purchases/bills/create.blade.php @@ -25,7 +25,7 @@ {{ Form::dateGroup('due_at', trans('bills.due_date'), 'calendar', ['id' => 'due_at', 'class' => 'form-control datepicker', 'required' => 'required', 'date-format' => 'Y-m-d', 'autocomplete' => 'off'], request()->get('due_at', request()->get('billed_at', Date::now()->toDateString()))) }} - {{ Form::textGroup('bill_number', trans('bills.bill_number'), 'file') }} + {{ Form::textGroup('bill_number', trans('bills.bill_number'), 'file', ['required' => 'required'], $number) }} {{ Form::textGroup('order_number', trans('bills.order_number'), 'shopping-cart',[]) }}