Improve resilience of client number creation

This commit is contained in:
David Bomba 2022-05-17 20:31:43 +10:00
parent 59fdc51ce0
commit 20c2a1690f
2 changed files with 36 additions and 5 deletions

View File

@ -14,6 +14,9 @@ namespace App\Http\Requests\Preview;
use App\Http\Requests\Request; use App\Http\Requests\Request;
use App\Http\ValidationRules\Project\ValidProjectForClient; use App\Http\ValidationRules\Project\ValidProjectForClient;
use App\Models\Invoice; use App\Models\Invoice;
use App\Models\Credit;
use App\Models\Quote;
use App\Models\RecurringInvoice;
use App\Utils\Traits\CleanLineItems; use App\Utils\Traits\CleanLineItems;
use App\Utils\Traits\MakesHash; use App\Utils\Traits\MakesHash;
use Illuminate\Validation\Rule; use Illuminate\Validation\Rule;
@ -30,15 +33,13 @@ class PreviewInvoiceRequest extends Request
*/ */
public function authorize() : bool public function authorize() : bool
{ {
return auth()->user()->can('create', Invoice::class); return auth()->user()->can('create', Invoice::class) || auth()->user()->can('create', Quote::class) || auth()->user()->can('create', RecurringInvoice::class) || auth()->user()->can('create', Credit::class);
} }
public function rules() public function rules()
{ {
$rules = []; $rules = [];
// $rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.auth()->user()->company()->id;
$rules['number'] = ['nullable']; $rules['number'] = ['nullable'];
return $rules; return $rules;

View File

@ -17,6 +17,7 @@ use App\Models\Company;
use App\Utils\Traits\ClientGroupSettingsSaver; use App\Utils\Traits\ClientGroupSettingsSaver;
use App\Utils\Traits\GeneratesCounter; use App\Utils\Traits\GeneratesCounter;
use App\Utils\Traits\SavesDocuments; use App\Utils\Traits\SavesDocuments;
use Illuminate\Database\QueryException;
/** /**
* ClientRepository. * ClientRepository.
@ -26,6 +27,8 @@ class ClientRepository extends BaseRepository
use GeneratesCounter; use GeneratesCounter;
use SavesDocuments; use SavesDocuments;
private bool $completed = true;
/** /**
* @var ClientContactRepository * @var ClientContactRepository
*/ */
@ -76,8 +79,35 @@ class ClientRepository extends BaseRepository
if (!isset($client->number) || empty($client->number) || strlen($client->number) == 0) { if (!isset($client->number) || empty($client->number) || strlen($client->number) == 0) {
$client->number = $this->getNextClientNumber($client); // $client->number = $this->getNextClientNumber($client);
$client->save(); // $client->save();
$x=1;
do{
try{
$client->number = $this->getNextClientNumber($client);
$client->saveQuietly();
$this->completed = false;
}
catch(QueryException $e){
$x++;
if($x>10)
$this->completed = false;
}
}
while($this->completed);
} }
if (empty($data['name'])) { if (empty($data['name'])) {