From 20f398d49b5dd46b87164f9912335c8139be8233 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 13 Sep 2022 19:32:53 +1000 Subject: [PATCH] Add redundancy checks when creating task numbers --- app/Repositories/InvoiceRepository.php | 1 - app/Repositories/TaskRepository.php | 33 +++++++++++++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/app/Repositories/InvoiceRepository.php b/app/Repositories/InvoiceRepository.php index 3c60618501b1..eea2ae5ffb58 100644 --- a/app/Repositories/InvoiceRepository.php +++ b/app/Repositories/InvoiceRepository.php @@ -68,7 +68,6 @@ class InvoiceRepository extends BaseRepository return $invoice; } -// $invoice->service()->markDeleted()->handleCancellation()->save(); $invoice = $invoice->service()->markDeleted()->save(); parent::delete($invoice); diff --git a/app/Repositories/TaskRepository.php b/app/Repositories/TaskRepository.php index 386a9fd2c8c2..8acf1ec73dfb 100644 --- a/app/Repositories/TaskRepository.php +++ b/app/Repositories/TaskRepository.php @@ -14,6 +14,7 @@ namespace App\Repositories; use App\Factory\TaskFactory; use App\Models\Task; use App\Utils\Traits\GeneratesCounter; +use Illuminate\Database\QueryException; /** * TaskRepository. @@ -45,7 +46,7 @@ class TaskRepository extends BaseRepository $this->setDefaultStatus($task); } - $task->number = empty($task->number) || ! array_key_exists('number', $data) ? $this->getNextTaskNumber($task) : $data['number']; + $task->number = empty($task->number) || ! array_key_exists('number', $data) ? $this->trySaving($task) : $data['number']; if (isset($data['description'])) { $task->description = trim($data['description']); @@ -244,4 +245,34 @@ class TaskRepository extends BaseRepository return $task; } + + + private function trySaving(Task $task) + { + + $x=1; + + do{ + + try{ + + $task->number = $this->getNextTaskNumber($task); + $task->saveQuietly(); + $this->completed = false; + + } + catch(QueryException $e){ + + $x++; + + if($x>50) + $this->completed = false; + } + + } + while($this->completed); + + return $task->number; + + } }