From 7a3aa98c566ec3bdfa57763422395f9e4a8dba09 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cihan=20=C5=9Eent=C3=BCrk?= Date: Mon, 15 May 2023 19:10:45 +0300 Subject: [PATCH] added transaction number interface --- app/Http/Controllers/Banking/Transactions.php | 2 +- app/Interfaces/Utility/TransactionNumber.php | 12 +++++ app/Providers/Binding.php | 3 ++ app/Traits/Transactions.php | 32 +++----------- app/Utilities/TransactionNumber.php | 44 +++++++++++++++++++ 5 files changed, 65 insertions(+), 28 deletions(-) create mode 100644 app/Interfaces/Utility/TransactionNumber.php create mode 100644 app/Utilities/TransactionNumber.php diff --git a/app/Http/Controllers/Banking/Transactions.php b/app/Http/Controllers/Banking/Transactions.php index 4a8f7282961..083a62e8d0b 100644 --- a/app/Http/Controllers/Banking/Transactions.php +++ b/app/Http/Controllers/Banking/Transactions.php @@ -101,7 +101,7 @@ public function create() $type = request()->get('type', 'income'); $real_type = $this->getRealTypeTransaction($type); - $number = $this->getNextTransactionNumber(); + $number = $this->getNextTransactionNumber($type); $contact_type = config('type.transaction.' . $type . '.contact_type'); diff --git a/app/Interfaces/Utility/TransactionNumber.php b/app/Interfaces/Utility/TransactionNumber.php new file mode 100644 index 00000000000..95169c6860c --- /dev/null +++ b/app/Interfaces/Utility/TransactionNumber.php @@ -0,0 +1,12 @@ + DocumentNumber::class, + TransactionNumberInterface::class => TransactionNumber::class, ]; } diff --git a/app/Traits/Transactions.php b/app/Traits/Transactions.php index ba77a38c375..ec9bf66819a 100644 --- a/app/Traits/Transactions.php +++ b/app/Traits/Transactions.php @@ -4,6 +4,7 @@ use App\Events\Banking\TransactionPrinting; use App\Models\Banking\Transaction; +use App\Interfaces\Utility\TransactionNumber; use Illuminate\Support\Str; trait Transactions @@ -228,36 +229,13 @@ public function getRealTypeOfSplitTransaction(string $transfer_type): string return Str::replace('-split', '', $transfer_type); } - public function getNextTransactionNumber($suffix = ''): string + public function getNextTransactionNumber($type = 'income', $suffix = ''): string { - $prefix = setting('transaction' . $suffix . '.number_prefix'); - $next = (string) setting('transaction' . $suffix . '.number_next'); - $digit = (int) setting('transaction' . $suffix . '.number_digit'); - - $get_number = fn($prefix, $next, $digit) => $prefix . str_pad($next, $digit, '0', STR_PAD_LEFT); - $number_exists = fn($number) => Transaction::where('number', $number)->exists(); - - $transaction_number = $get_number($prefix, $next, $digit); - - if ($number_exists($transaction_number)) { - do { - $next++; - - $transaction_number = $get_number($prefix, $next, $digit); - } while ($number_exists($transaction_number)); - - setting(['transaction' . $suffix . '.number_next' => $next]); - setting()->save(); - } - - return $transaction_number; + return app(TransactionNumber::class)->getNextNumber($type, $suffix, null); } - public function increaseNextTransactionNumber($suffix = ''): void + public function increaseNextTransactionNumber($type = 'income', $suffix = ''): void { - $next = setting('transaction' . $suffix . '.number_next', 1) + 1; - - setting(['transaction' . $suffix . '.number_next' => $next]); - setting()->save(); + app(TransactionNumber::class)->increaseNextNumber($type, $suffix, null); } } diff --git a/app/Utilities/TransactionNumber.php b/app/Utilities/TransactionNumber.php new file mode 100644 index 00000000000..df0a0f18e24 --- /dev/null +++ b/app/Utilities/TransactionNumber.php @@ -0,0 +1,44 @@ + $prefix . str_pad($next, $digit, '0', STR_PAD_LEFT); + $number_exists = fn($number) => Transaction::where('number', $number)->exists(); + + $transaction_number = $get_number($prefix, $next, $digit); + + if ($number_exists($transaction_number)) { + do { + $next++; + + $transaction_number = $get_number($prefix, $next, $digit); + } while ($number_exists($transaction_number)); + + setting(['transaction' . $suffix . '.number_next' => $next]); + setting()->save(); + } + + return $transaction_number; + + } + + public function increaseNextNumber($suffix = '', ?Contact $contact): void + { + $next = setting('transaction' . $suffix . '.number_next', 1) + 1; + + setting(['transaction' . $suffix . '.number_next' => $next]); + setting()->save(); + } +}