From 86d472fa0514a932617c860a852d54c16d66e61e Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 29 Oct 2020 22:01:37 +1100 Subject: [PATCH] Project numbers --- app/Http/Controllers/ProjectController.php | 7 ++- .../Requests/Project/StoreProjectRequest.php | 1 + .../Requests/Project/UpdateProjectRequest.php | 4 ++ app/Repositories/ExpenseRepository.php | 6 -- app/Utils/Traits/GeneratesCounter.php | 60 +++++++------------ 5 files changed, 32 insertions(+), 46 deletions(-) diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index f0270bd518c3..371b2004791b 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -266,6 +266,7 @@ class ProjectController extends BaseController } $project->fill($request->all()); + $project->number = empty($project->number) ? $this->getNextProjectNumber($project) : $project->number; $project->save(); return $this->itemResponse($project->fresh()); @@ -360,9 +361,13 @@ class ProjectController extends BaseController { $project = ProjectFactory::create(auth()->user()->company()->id, auth()->user()->id); $project->fill($request->all()); - $project->number = $this->getNextProjectNumber($request->getClient($request->input('client_id'))); $project->save(); + if(empty($project->number)){ + $project->number = $this->getNextProjectNumber($project); + $project->save(); + } + if ($request->has('documents')) { $this->saveDocuments($request->input('documents'), $project); } diff --git a/app/Http/Requests/Project/StoreProjectRequest.php b/app/Http/Requests/Project/StoreProjectRequest.php index 7b9c41990ef6..a59dbbadb10f 100644 --- a/app/Http/Requests/Project/StoreProjectRequest.php +++ b/app/Http/Requests/Project/StoreProjectRequest.php @@ -36,6 +36,7 @@ class StoreProjectRequest extends Request $rules['name'] = 'required'; $rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id; + $rules['number'] = 'unique:projects,number,'.$this->id.',id,company_id,'.auth()->user()->company()->id; return $this->globalRules($rules); } diff --git a/app/Http/Requests/Project/UpdateProjectRequest.php b/app/Http/Requests/Project/UpdateProjectRequest.php index 7a8dd7e04543..3e7f06eb7278 100644 --- a/app/Http/Requests/Project/UpdateProjectRequest.php +++ b/app/Http/Requests/Project/UpdateProjectRequest.php @@ -33,6 +33,10 @@ class UpdateProjectRequest extends Request { $rules = []; + if ($this->input('number')) { + $rules['number'] = 'unique:projects,number,'.$this->id.',id,company_id,'.$this->project->company_id; + } + return $this->globalRules($rules); } diff --git a/app/Repositories/ExpenseRepository.php b/app/Repositories/ExpenseRepository.php index 8eeb8e8409cc..0044514ffbdd 100644 --- a/app/Repositories/ExpenseRepository.php +++ b/app/Repositories/ExpenseRepository.php @@ -50,18 +50,12 @@ class ExpenseRepository extends BaseRepository { $expense->fill($data); $expense->number = empty($expense->number) ? $this->getNextExpenseNumber($expense) : $expense->number; - $expense->save(); - if (array_key_exists('documents', $data)) { $this->saveDocuments($data['documents'], $expense); } - // if ($expense->id_number == "" || !$expense->id_number) { - // $expense->id_number = $this->getNextExpenseNumber($expense); - // } //todo write tests for this and make sure that custom expense numbers also works as expected from here - return $expense; } diff --git a/app/Utils/Traits/GeneratesCounter.php b/app/Utils/Traits/GeneratesCounter.php index 089e05403c58..b64b1676afe7 100644 --- a/app/Utils/Traits/GeneratesCounter.php +++ b/app/Utils/Traits/GeneratesCounter.php @@ -230,45 +230,6 @@ trait GeneratesCounter return (string) $payment_number; } - /** - * Project Number Generator. - * @param Client $client - * @return string The project number - */ - public function getNextProjectNumber(Client $client) :string - { - - //Reset counters if enabled - $this->resetCounters($client); - - $is_client_counter = false; - - //todo handle if we have specific client patterns in the future - $pattern = $client->company->settings->project_number_pattern; - - //Determine if we are using client_counters - if (strpos($pattern, 'client_counter') === false) { - $counter = $client->company->settings->project_number_counter; - } else { - $counter = $client->settings->project_number_counter; - $is_client_counter = true; - } - - //Return a valid counter - $pattern = ''; - $padding = $client->getSetting('counter_padding'); - $project_number = $this->checkEntityNumber(Project::class, $client, $counter, $padding, $pattern); - - //increment the correct invoice_number Counter (company vs client) - if ($is_client_counter) { - $this->incrementCounter($client, 'project_number_counter'); - } else { - $this->incrementCounter($client->company, 'project_number_counter'); - } - - return (string) $project_number; - } - /** * Gets the next client number. * @@ -313,6 +274,27 @@ trait GeneratesCounter return $vendor_number; } + /** + * Project Number Generator. + * @param Project $project + * @return string The project number + */ + public function getNextProjectNumber(Project $project) :string + { + + $this->resetCompanyCounters($project->company); + + $counter = $project->company->settings->project_number_counter; + $setting_entity = $project->company->settings->project_number_counter; + + $project_number = $this->checkEntityNumber(Project::class, $project, $counter, $project->company->settings->counter_padding, $project->company->settings->project_number_pattern); + + $this->incrementCounter($project->company, 'project_number_counter'); + + return $project_number; + } + + /** * Gets the next task number. *