From 13420a93b911318918003d438c2981c37e376c90 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Fri, 8 Jan 2021 21:19:26 +1100 Subject: [PATCH] Fixes for validation --- .../Requests/Expense/UpdateExpenseRequest.php | 4 ++ .../StoreExpenseCategoryRequest.php | 5 ++- .../UpdateExpenseCategoryRequest.php | 15 ++++++- .../Requests/Invoice/UpdateInvoiceRequest.php | 4 ++ .../Requests/Quote/UpdateQuoteRequest.php | 4 ++ .../UpdateRecurringInvoiceRequest.php | 4 ++ .../TaskStatus/UpdateTaskStatusRequest.php | 5 ++- app/Mail/Engine/CreditEmailEngine.php | 2 +- app/Mail/Engine/InvoiceEmailEngine.php | 13 ++++++ app/Mail/Engine/QuoteEmailEngine.php | 4 +- app/Mail/TemplateEmail.php | 12 +++++- ...93324_expenses_table_additional_fields.php | 40 +++++++++++++++++++ resources/views/index/index.blade.php | 4 +- tests/MockAccountData.php | 2 +- 14 files changed, 109 insertions(+), 9 deletions(-) create mode 100644 database/migrations/2021_01_08_093324_expenses_table_additional_fields.php diff --git a/app/Http/Requests/Expense/UpdateExpenseRequest.php b/app/Http/Requests/Expense/UpdateExpenseRequest.php index 409291f4a26b..3295603f4f1e 100644 --- a/app/Http/Requests/Expense/UpdateExpenseRequest.php +++ b/app/Http/Requests/Expense/UpdateExpenseRequest.php @@ -66,6 +66,10 @@ class UpdateExpenseRequest extends Request $input['category_id'] = $this->decodePrimaryKey($input['category_id']); } + if (array_key_exists('documents', $input)) { + unset($input['documents']); + } + if (! array_key_exists('currency_id', $input) || strlen($input['currency_id']) == 0) { $input['currency_id'] = (string)auth()->user()->company()->settings->currency_id; } diff --git a/app/Http/Requests/ExpenseCategory/StoreExpenseCategoryRequest.php b/app/Http/Requests/ExpenseCategory/StoreExpenseCategoryRequest.php index 939251d58d9e..f1d7a22ad46d 100644 --- a/app/Http/Requests/ExpenseCategory/StoreExpenseCategoryRequest.php +++ b/app/Http/Requests/ExpenseCategory/StoreExpenseCategoryRequest.php @@ -42,6 +42,9 @@ class StoreExpenseCategoryRequest extends Request $input = $this->decodePrimaryKeys($input); + if(array_key_exists('color', $input) && is_null($input['color'])) + $input['color'] = '#fff'; + $this->replace($input); } -} +} \ No newline at end of file diff --git a/app/Http/Requests/ExpenseCategory/UpdateExpenseCategoryRequest.php b/app/Http/Requests/ExpenseCategory/UpdateExpenseCategoryRequest.php index acbcf3b79fe4..7c84e2872e83 100644 --- a/app/Http/Requests/ExpenseCategory/UpdateExpenseCategoryRequest.php +++ b/app/Http/Requests/ExpenseCategory/UpdateExpenseCategoryRequest.php @@ -13,6 +13,7 @@ namespace App\Http\Requests\ExpenseCategory; use App\Http\Requests\Request; use App\Utils\Traits\ChecksEntityStatus; +use Illuminate\Validation\Rule; class UpdateExpenseCategoryRequest extends Request { @@ -33,9 +34,21 @@ class UpdateExpenseCategoryRequest extends Request $rules = []; if ($this->input('name')) { - $rules['name'] = 'unique:expense_categories,name,'.$this->id.',id,company_id,'.$this->expense_category->company_id; + // $rules['name'] = 'unique:expense_categories,name,'.$this->id.',id,company_id,'.$this->expense_category->company_id; + $rules['name'] = Rule::unique('expense_categories')->where('company_id', auth()->user()->company()->id)->ignore($this->expense_category->id); + } return $rules; } + + protected function prepareForValidation() + { + $input = $this->all(); + + if(array_key_exists('color', $input) && is_null($input['color'])) + $input['color'] = '#fff'; + + $this->replace($input); + } } diff --git a/app/Http/Requests/Invoice/UpdateInvoiceRequest.php b/app/Http/Requests/Invoice/UpdateInvoiceRequest.php index def2fe03144d..c9d4bb67cb1c 100644 --- a/app/Http/Requests/Invoice/UpdateInvoiceRequest.php +++ b/app/Http/Requests/Invoice/UpdateInvoiceRequest.php @@ -67,6 +67,10 @@ class UpdateInvoiceRequest extends Request $input['line_items'] = isset($input['line_items']) ? $this->cleanItems($input['line_items']) : []; + if (array_key_exists('documents', $input)) { + unset($input['documents']); + } + $this->replace($input); } diff --git a/app/Http/Requests/Quote/UpdateQuoteRequest.php b/app/Http/Requests/Quote/UpdateQuoteRequest.php index 2a8c9b925ff3..40e022e41e5f 100644 --- a/app/Http/Requests/Quote/UpdateQuoteRequest.php +++ b/app/Http/Requests/Quote/UpdateQuoteRequest.php @@ -73,6 +73,10 @@ class UpdateQuoteRequest extends Request $input['assigned_user_id'] = $this->decodePrimaryKey($input['assigned_user_id']); } + if (array_key_exists('documents', $input)) { + unset($input['documents']); + } + $input['id'] = $this->quote->id; $this->replace($input); diff --git a/app/Http/Requests/RecurringInvoice/UpdateRecurringInvoiceRequest.php b/app/Http/Requests/RecurringInvoice/UpdateRecurringInvoiceRequest.php index 3dc0d7434fd7..72258db6fa0e 100644 --- a/app/Http/Requests/RecurringInvoice/UpdateRecurringInvoiceRequest.php +++ b/app/Http/Requests/RecurringInvoice/UpdateRecurringInvoiceRequest.php @@ -91,6 +91,10 @@ class UpdateRecurringInvoiceRequest extends Request $input['auto_bill_enabled'] = $this->setAutoBillFlag($input['auto_bill']); } + if (array_key_exists('documents', $input)) { + unset($input['documents']); + } + $this->replace($input); } diff --git a/app/Http/Requests/TaskStatus/UpdateTaskStatusRequest.php b/app/Http/Requests/TaskStatus/UpdateTaskStatusRequest.php index 3b799d21e118..6a4d06ab6297 100644 --- a/app/Http/Requests/TaskStatus/UpdateTaskStatusRequest.php +++ b/app/Http/Requests/TaskStatus/UpdateTaskStatusRequest.php @@ -13,6 +13,7 @@ namespace App\Http\Requests\TaskStatus; use App\Http\Requests\Request; use App\Utils\Traits\MakesHash; +use Illuminate\Validation\Rule; class UpdateTaskStatusRequest extends Request { @@ -33,9 +34,11 @@ class UpdateTaskStatusRequest extends Request $rules = []; if ($this->input('name')) { - $rules['name'] = 'unique:task_statuses,name,'.$this->id.',id,company_id,'.$this->task_status->company_id; + //$rules['name'] = 'unique:task_statuses,name,'.$this->id.',id,company_id,'.$this->task_status->company_id; + $rules['name'] = Rule::unique('task_statuses')->where('company_id', auth()->user()->company()->id)->ignore($this->task_status->id); } + return $rules; } diff --git a/app/Mail/Engine/CreditEmailEngine.php b/app/Mail/Engine/CreditEmailEngine.php index bd028228d360..0f2a6d2964a0 100644 --- a/app/Mail/Engine/CreditEmailEngine.php +++ b/app/Mail/Engine/CreditEmailEngine.php @@ -88,7 +88,7 @@ class CreditEmailEngine extends BaseEmailEngine ->setViewText(ctrans('texts.view_credit')); if ($this->client->getSetting('pdf_email_attachment') !== false) { - $this->setAttachments([$this->credit->pdf_file_path()]); + $this->setAttachments(['path' => $this->credit->pdf_file_path(), 'name' => basename($this->credit->pdf_file_path())]); } return $this; diff --git a/app/Mail/Engine/InvoiceEmailEngine.php b/app/Mail/Engine/InvoiceEmailEngine.php index cc9fb80abfd5..07f857aaafcb 100644 --- a/app/Mail/Engine/InvoiceEmailEngine.php +++ b/app/Mail/Engine/InvoiceEmailEngine.php @@ -98,6 +98,19 @@ class InvoiceEmailEngine extends BaseEmailEngine if ($this->client->getSetting('pdf_email_attachment') !== false) { $this->setAttachments([$this->invoice->pdf_file_path()]); + // $this->setAttachments(['path' => $this->invoice->pdf_file_path(), 'name' => basename($this->invoice->pdf_file_path())]); + + } + + //attach third party documents + if($this->client->getSetting('document_email_attachment') !== false){ + + // Storage::url + foreach($this->invoice->documents as $document){ + // $this->setAttachments(['path'=>$document->filePath(),'name'=>$document->name]); + $this->setAttachments([['path' => $document->filePath(), 'name' => $document->name, 'mime' => $document->type]]); + } + } return $this; diff --git a/app/Mail/Engine/QuoteEmailEngine.php b/app/Mail/Engine/QuoteEmailEngine.php index 763d65809065..06b9d913ca80 100644 --- a/app/Mail/Engine/QuoteEmailEngine.php +++ b/app/Mail/Engine/QuoteEmailEngine.php @@ -88,7 +88,9 @@ class QuoteEmailEngine extends BaseEmailEngine ->setViewText(ctrans('texts.view_quote')); if ($this->client->getSetting('pdf_email_attachment') !== false) { - $this->setAttachments([$this->invitation->pdf_file_path()]); + // $this->setAttachments([$this->quote->pdf_file_path()]); + $this->setAttachments(['path' => $this->quote->pdf_file_path(), 'name' => basename($this->quote->pdf_file_path())]); + } return $this; diff --git a/app/Mail/TemplateEmail.php b/app/Mail/TemplateEmail.php index 2c364ad2977e..18f14e130024 100644 --- a/app/Mail/TemplateEmail.php +++ b/app/Mail/TemplateEmail.php @@ -84,8 +84,18 @@ class TemplateEmail extends Mailable //conditionally attach files if ($settings->pdf_email_attachment !== false && ! empty($this->build_email->getAttachments())) { + +nlog(count($this->build_email->getAttachments())); +nlog($this->build_email->getAttachments()); + foreach ($this->build_email->getAttachments() as $file) { - $this->attach($file); + +nlog($file); + if(count(array_keys($file)) > 1) + $this->attach($file['path'], ['as' => $file['name'], 'mime' => $file['mime']]); + else + $this->attach($file); + } } diff --git a/database/migrations/2021_01_08_093324_expenses_table_additional_fields.php b/database/migrations/2021_01_08_093324_expenses_table_additional_fields.php new file mode 100644 index 000000000000..dde8098f7c2c --- /dev/null +++ b/database/migrations/2021_01_08_093324_expenses_table_additional_fields.php @@ -0,0 +1,40 @@ +decimal('tax_amount1', 20, 6)->change(); + $table->decimal('tax_amount2', 20, 6)->change(); + $table->decimal('tax_amount3', 20, 6)->change(); + $table->boolean('uses_inclusive_taxes')->default(0); + $table->boolean('amount_is_pretax')->default(1); + }); + + Schema::table('companies', function (Blueprint $table) { + $table->boolean('expense_inclusive_taxes')->default(0); + $table->boolean('expense_amount_is_pretax')->default(1); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/resources/views/index/index.blade.php b/resources/views/index/index.blade.php index 074c013daf9e..9f93c74a3c39 100644 --- a/resources/views/index/index.blade.php +++ b/resources/views/index/index.blade.php @@ -99,8 +99,8 @@ function invokeServiceWorkerUpdateFlow() { // you have a better UI here, reloading is not a great user experince here. - const confirmed = confirm('New version of the app is available. Refresh now'); - if (confirmed) { + const confirmed = alert('New version of the app is available. Refresh now'); + if (confirmed == true) { window.location.reload(); } } diff --git a/tests/MockAccountData.php b/tests/MockAccountData.php index 493639c0e1ee..aad2f31056d7 100644 --- a/tests/MockAccountData.php +++ b/tests/MockAccountData.php @@ -540,7 +540,7 @@ trait MockAccountData $data[1]['fee_tax_rate2'] = ''; $data[1]['fee_tax_name3'] = ''; $data[1]['fee_tax_rate3'] = 0; - + $data[1]['fee_cap'] = ''; $cg = new CompanyGateway; $cg->company_id = $this->company->id; $cg->user_id = $this->user->id;