diff --git a/app/Http/Requests/Invoice/StoreInvoiceRequest.php b/app/Http/Requests/Invoice/StoreInvoiceRequest.php index 5d8555bd9530..0a6ec1bea64f 100644 --- a/app/Http/Requests/Invoice/StoreInvoiceRequest.php +++ b/app/Http/Requests/Invoice/StoreInvoiceRequest.php @@ -47,12 +47,14 @@ class StoreInvoiceRequest extends Request $rules['documents'] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; } - $rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id; + $rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.auth()->user()->company()->id; $rules['invitations.*.client_contact_id'] = 'distinct'; $rules['number'] = new UniqueInvoiceNumberRule($this->all()); + $rules['project_id'] = 'bail|sometimes|' . new ValidProjectForClient($this->all()); + return $rules; } @@ -68,6 +70,10 @@ class StoreInvoiceRequest extends Request $input['client_id'] = $this->decodePrimaryKey($input['client_id']); } + if (array_key_exists('project_id', $input) && is_string($input['project_id'])) { + $input['project_id'] = $this->decodePrimaryKey($input['project_id']); + } + if (array_key_exists('assigned_user_id', $input) && is_string($input['assigned_user_id'])) { $input['assigned_user_id'] = $this->decodePrimaryKey($input['assigned_user_id']); } diff --git a/app/Http/ValidationRules/Project/ValidProjectForClient.php b/app/Http/ValidationRules/Project/ValidProjectForClient.php new file mode 100644 index 000000000000..a23e421de398 --- /dev/null +++ b/app/Http/ValidationRules/Project/ValidProjectForClient.php @@ -0,0 +1,55 @@ +input = $input; + } + /** + * @param string $attribute + * @param mixed $value + * @return bool + */ + public function passes($attribute, $value) + { + if(is_string($this->input['project_id'])) + $this->input['project_id'] = $this->decodePrimaryKey($this->input['project_id']); + + $project = Project::findOrFail($this->input['project_id']); + + return $project->client_id == $this->input['client_id']; + } + + /** + * @return string + */ + public function message() + { + return "Project client does not match entity client"; + } + + +}