diff --git a/VERSION.txt b/VERSION.txt index 2baca668b6f3..27ade18d23f1 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -5.0.44 \ No newline at end of file +5.0.45 \ No newline at end of file diff --git a/app/Helpers/Generic.php b/app/Helpers/Generic.php index 72989a85bdde..d6fca896f94c 100644 --- a/app/Helpers/Generic.php +++ b/app/Helpers/Generic.php @@ -29,3 +29,11 @@ function nlog($output, $context = []): void \Illuminate\Support\Facades\Log::channel('invoiceninja')->info($output, $context); } } + +if (!function_exists('ray')) { + function ray($payload) + { + return true; + } +} + diff --git a/app/Http/Controllers/ClientPortal/InvitationController.php b/app/Http/Controllers/ClientPortal/InvitationController.php index 5cee7f8b46ec..df6b73d50520 100644 --- a/app/Http/Controllers/ClientPortal/InvitationController.php +++ b/app/Http/Controllers/ClientPortal/InvitationController.php @@ -76,12 +76,15 @@ class InvitationController extends Controller { switch ($entity_string) { case 'invoice': + $invitation->invoice->service()->markSent()->save(); event(new InvoiceWasViewed($invitation, $invitation->company, Ninja::eventVars())); break; case 'quote': + $invitation->quote->service()->markSent()->save(); event(new QuoteWasViewed($invitation, $invitation->company, Ninja::eventVars())); break; case 'credit': + $invitation->credit->service()->markSent()->save(); event(new CreditWasViewed($invitation, $invitation->company, Ninja::eventVars())); break; default: diff --git a/app/Http/Controllers/ClientPortal/InvoiceController.php b/app/Http/Controllers/ClientPortal/InvoiceController.php index 0ae249cf8bee..0f75cf33c661 100644 --- a/app/Http/Controllers/ClientPortal/InvoiceController.php +++ b/app/Http/Controllers/ClientPortal/InvoiceController.php @@ -88,17 +88,30 @@ class InvoiceController extends Controller ->whereClientId(auth()->user()->client->id) ->get(); - $total = $invoices->sum('balance'); - + //filter invoices which are payable $invoices = $invoices->filter(function ($invoice) { return $invoice->isPayable() && $invoice->balance > 0; }); + //return early if no invoices. if ($invoices->count() == 0) { return back() ->with('message', ctrans('texts.no_payable_invoices_selected')); } + //iterate and sum the payable amounts either partial or balance + $total = 0; + foreach($invoices as $invoice) + { + + if($invoice->partial > 0) + $total += $invoice->partial; + else + $total += $invoice->balance; + + } + + //format data $invoices->map(function ($invoice) { $invoice->service()->removeUnpaidGatewayFees()->save(); $invoice->balance = Number::formatValue($invoice->balance, $invoice->client->currency()); @@ -107,6 +120,7 @@ class InvoiceController extends Controller return $invoice; }); + //format totals $formatted_total = Number::formatMoney($total, auth()->user()->client); $payment_methods = auth()->user()->client->getPaymentMethods($total); 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/Jobs/Util/Import.php b/app/Jobs/Util/Import.php index 67e3c1d8663c..035b8b6bc754 100644 --- a/app/Jobs/Util/Import.php +++ b/app/Jobs/Util/Import.php @@ -11,6 +11,7 @@ namespace App\Jobs\Util; +use Illuminate\Http\UploadedFile; use App\DataMapper\Analytics\MigrationFailure; use App\DataMapper\CompanySettings; use App\Exceptions\MigrationValidatorFailed; @@ -124,7 +125,7 @@ class Import implements ShouldQueue 'task_statuses', 'expenses', 'tasks', - // 'documents', + 'documents', ]; /** @@ -964,56 +965,41 @@ class Import implements ShouldQueue $entity = Expense::where('id', $expense_id)->withTrashed()->first(); } - $this->saveDocument(file_get_contents($resource['url']), $entity, $is_public = true); +$file_url = $resource['url']; +$file_name = basename($file_url); +$file_path = sys_get_temp_dir().'/'.$file_name; + +file_put_contents($file_path, file_get_contents($file_url), LOCK_EX); +$finfo = new \finfo(FILEINFO_MIME_TYPE); +$file_info = $finfo->file($file_path); + +nlog($resource['url']); +nlog($file_url); +nlog($file_name); +nlog($file_path); +nlog($file_info); +nlog(filesize($file_path)); + +$uploaded_file = new UploadedFile( + $file_path, + $file_name, + $file_info, + filesize($file_path), + 0, + false + ); + + $this->saveDocument($uploaded_file, $entity, $is_public = true); + + $uploaded_file = null; + $finfo = null; + $file_url = null; + $file_name = null; + $file_path = null; + $file_info = null; } - // foreach ($data as $resource) { - // $modified = $resource; - // if (array_key_exists('invoice_id', $resource) && $resource['invoice_id'] && ! array_key_exists('invoices', $this->ids)) { - // throw new ResourceDependencyMissing('Processing documents failed, because of missing dependency - invoices.'); - // } - - // if (array_key_exists('expense_id', $resource) && $resource['expense_id'] && ! array_key_exists('expenses', $this->ids)) { - // throw new ResourceDependencyMissing('Processing documents failed, because of missing dependency - expenses.'); - // } - - // /* Remove because of polymorphic joins. */ - // unset($modified['invoice_id']); - // unset($modified['expense_id']); - - // if (array_key_exists('invoice_id', $resource) && $resource['invoice_id'] && array_key_exists('invoices', $this->ids)) { - // $modified['documentable_id'] = $this->transformId('invoices', $resource['invoice_id']); - // $modified['documentable_type'] = Invoice::class; - // } - - // if (array_key_exists('expense_id', $resource) && $resource['expense_id'] && array_key_exists('expenses', $this->ids)) { - // $modified['documentable_id'] = $this->transformId('expenses', $resource['expense_id']); - // $modified['documentable_type'] = Expense::class; - // } - - // $modified['user_id'] = $this->processUserId($resource); - // $modified['company_id'] = $this->company->id; - - // $document = Document::create($modified); - - // // $entity = $modified['documentable_type']::find($modified['documentable_id']); - // // $entity->documents()->save($modified); - - // $old_user_key = array_key_exists('user_id', $resource) ?? $this->user->id; - - // $this->ids['documents'] = [ - // "documents_{$old_user_key}" => [ - // 'old' => $resource['id'], - // 'new' => $document->id, - // ], - // ]; - // } - - // Document::reguard(); - - // /*Improve memory handling by setting everything to null when we have finished*/ - // $data = null; } private function processPaymentTerms(array $data) :void @@ -1157,12 +1143,11 @@ class Import implements ShouldQueue $old_user_key = array_key_exists('user_id', $resource) ?? $this->user->id; - $key = "expense_categories_{$resource['id']}"; $this->ids['expense_categories'][$key] = [ 'old' => $resource['id'], - 'new' => $expense_category->id, + 'new' => $expense_category->id, ]; // $this->ids['expense_categories'] = [ @@ -1290,12 +1275,13 @@ class Import implements ShouldQueue $old_user_key = array_key_exists('user_id', $resource) ?? $this->user->id; - $this->ids['expenses'] = [ - "expenses_{$old_user_key}" => [ - 'old' => $resource['id'], - 'new' => $expense->id, - ], + $key = "expenses_{$resource['id']}"; + + $this->ids['expenses'][$key] = [ + 'old' => $resource['id'], + 'new' => $expense->id, ]; + } Expense::reguard(); diff --git a/app/Mail/Engine/CreditEmailEngine.php b/app/Mail/Engine/CreditEmailEngine.php index bd028228d360..57b0ffb45c4c 100644 --- a/app/Mail/Engine/CreditEmailEngine.php +++ b/app/Mail/Engine/CreditEmailEngine.php @@ -88,7 +88,18 @@ 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())]); + } + + //attach third party documents + if($this->client->getSetting('document_email_attachment') !== false){ + + // Storage::url + foreach($this->credit->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/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..574ade2ea57a 100644 --- a/app/Mail/Engine/QuoteEmailEngine.php +++ b/app/Mail/Engine/QuoteEmailEngine.php @@ -88,9 +88,22 @@ 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())]); + } + //attach third party documents + if($this->client->getSetting('document_email_attachment') !== false){ + + // Storage::url + foreach($this->quote->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/TemplateEmail.php b/app/Mail/TemplateEmail.php index 2c364ad2977e..eaecd1241ee6 100644 --- a/app/Mail/TemplateEmail.php +++ b/app/Mail/TemplateEmail.php @@ -84,8 +84,15 @@ class TemplateEmail extends Mailable //conditionally attach files if ($settings->pdf_email_attachment !== false && ! empty($this->build_email->getAttachments())) { + + //hosted | plan check here foreach ($this->build_email->getAttachments() as $file) { - $this->attach($file); + + if(is_string($file)) + $this->attach($file); + elseif(is_array($file)) + $this->attach($file['path'], ['as' => $file['name'], 'mime' => $file['mime']]); + } } diff --git a/app/Models/Company.php b/app/Models/Company.php index 575d92138a62..c5fd0465595f 100644 --- a/app/Models/Company.php +++ b/app/Models/Company.php @@ -82,6 +82,8 @@ class Company extends BaseModel 'is_disabled', 'default_task_is_date_based', 'enable_product_discount', + 'expense_inclusive_taxes', + 'expense_amount_is_pretax', ]; protected $hidden = [ diff --git a/app/Models/CompanyGateway.php b/app/Models/CompanyGateway.php index 93c376f786c4..51fc3eb722da 100644 --- a/app/Models/CompanyGateway.php +++ b/app/Models/CompanyGateway.php @@ -266,10 +266,6 @@ class CompanyGateway extends BaseModel { $label = ''; - if (! $this->feesEnabled()) { - return $label; - } - $fee = $this->calcGatewayFee($amount, $gateway_type_id); if ($fee > 0) { diff --git a/app/Models/Expense.php b/app/Models/Expense.php index f8cc589fa9b5..6b54ef387364 100644 --- a/app/Models/Expense.php +++ b/app/Models/Expense.php @@ -51,6 +51,11 @@ class Expense extends BaseModel 'custom_value3', 'custom_value4', 'number', + 'tax_amount1', + 'tax_amount2', + 'tax_amount3', + 'uses_inclusive_taxes', + 'amount_is_pretax', ]; protected $casts = [ diff --git a/app/Transformers/CompanyTransformer.php b/app/Transformers/CompanyTransformer.php index 86c08e2bad2c..0e7158f3235e 100644 --- a/app/Transformers/CompanyTransformer.php +++ b/app/Transformers/CompanyTransformer.php @@ -150,6 +150,8 @@ class CompanyTransformer extends EntityTransformer 'enable_product_discount' => (bool)$company->enable_product_discount, 'calculate_expense_tax_by_amount' =>(bool)$company->calculate_expense_tax_by_amount, 'hide_empty_columns_on_pdf' => false, //@deprecate + 'expense_inclusive_taxes' => (bool)$company->expense_inclusive_taxes, + 'expense_amount_is_pretax' =>( bool)$company->expense_amount_is_pretax, ]; } diff --git a/app/Transformers/ExpenseTransformer.php b/app/Transformers/ExpenseTransformer.php index 0cb9f654447b..200e4991a5fc 100644 --- a/app/Transformers/ExpenseTransformer.php +++ b/app/Transformers/ExpenseTransformer.php @@ -91,6 +91,11 @@ class ExpenseTransformer extends EntityTransformer 'archived_at' => (int) $expense->deleted_at, 'created_at' => (int) $expense->created_at, 'project_id' => $this->encodePrimaryKey($expense->project_id), + 'tax_amount1' => (float) $expense->tax_amount1, + 'tax_amount2' => (float) $expense->tax_amount2, + 'tax_amount3' => (float) $expense->tax_amount3, + 'uses_inclusive_taxes' => (bool) $expense->uses_inclusive_taxes, + 'amount_is_pretax' => (bool) $expense->amount_is_pretax, ]; } } diff --git a/composer.json b/composer.json index 4a9f3123d634..b55abc993f5c 100644 --- a/composer.json +++ b/composer.json @@ -68,6 +68,7 @@ "webpatser/laravel-countries": "dev-master#75992ad" }, "require-dev": { + "php": "^7.4", "anahkiasen/former": "^4.2", "barryvdh/laravel-debugbar": "^3.4", "darkaonline/l5-swagger": "^8.0", @@ -78,6 +79,7 @@ "mockery/mockery": "^1.3.1", "nunomaduro/collision": "^5.0", "phpunit/phpunit": "^9.0", + "spatie/laravel-ray": "^1.3", "vimeo/psalm": "^4.0", "wildbit/postmark-php": "^4.0" }, diff --git a/composer.lock b/composer.lock index b5d83b70c078..1e8e26a8f19a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "304401db428800e3f176f946f22ee2f6", + "content-hash": "0afe2d541cb6e16cfb9d29faf3425c2d", "packages": [ { "name": "asgrim/ofxparser", @@ -116,16 +116,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.171.10", + "version": "3.171.14", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "ba12cbba6b7ae8f2aab741e5ac47e8bb30d3eac7" + "reference": "2bc8681a623caa13d5c1da90ca4d6c76436b545d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/ba12cbba6b7ae8f2aab741e5ac47e8bb30d3eac7", - "reference": "ba12cbba6b7ae8f2aab741e5ac47e8bb30d3eac7", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/2bc8681a623caa13d5c1da90ca4d6c76436b545d", + "reference": "2bc8681a623caa13d5c1da90ca4d6c76436b545d", "shasum": "" }, "require": { @@ -200,22 +200,22 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.171.10" + "source": "https://github.com/aws/aws-sdk-php/tree/3.171.14" }, - "time": "2020-12-31T19:13:37+00:00" + "time": "2021-01-07T19:16:26+00:00" }, { "name": "beganovich/snappdf", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/beganovich/snappdf.git", - "reference": "1afb8d951461375eb334bb54e211b7e5724c9d10" + "reference": "2c878714145ef110cfec991c2e72cb6aeee7ed43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beganovich/snappdf/zipball/1afb8d951461375eb334bb54e211b7e5724c9d10", - "reference": "1afb8d951461375eb334bb54e211b7e5724c9d10", + "url": "https://api.github.com/repos/beganovich/snappdf/zipball/2c878714145ef110cfec991c2e72cb6aeee7ed43", + "reference": "2c878714145ef110cfec991c2e72cb6aeee7ed43", "shasum": "" }, "require": { @@ -253,9 +253,9 @@ "description": "Convert webpages or HTML into the PDF file using Chromium or Google Chrome.", "support": { "issues": "https://github.com/beganovich/snappdf/issues", - "source": "https://github.com/beganovich/snappdf/tree/v1.3.0" + "source": "https://github.com/beganovich/snappdf/tree/v1.4.0" }, - "time": "2021-01-02T17:56:16+00:00" + "time": "2021-01-03T20:26:24+00:00" }, { "name": "brick/math", @@ -2724,16 +2724,16 @@ }, { "name": "laravel/framework", - "version": "v8.20.1", + "version": "v8.21.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "b5d8573ab16027867eaa1ac148893833434f9b02" + "reference": "a61cab167c35f465a923737ee6e6fb99cd5fde88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/b5d8573ab16027867eaa1ac148893833434f9b02", - "reference": "b5d8573ab16027867eaa1ac148893833434f9b02", + "url": "https://api.github.com/repos/laravel/framework/zipball/a61cab167c35f465a923737ee6e6fb99cd5fde88", + "reference": "a61cab167c35f465a923737ee6e6fb99cd5fde88", "shasum": "" }, "require": { @@ -2887,7 +2887,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2020-12-22T21:21:19+00:00" + "time": "2021-01-05T15:43:10+00:00" }, { "name": "laravel/slack-notification-channel", @@ -2952,16 +2952,16 @@ }, { "name": "laravel/socialite", - "version": "v5.1.2", + "version": "v5.1.3", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7" + "reference": "2e6beafe911a09f2300353c102d882e9d63f1f72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7", - "reference": "19fc65ac28e0b4684a8735b14c1dc6f6ef5d62c7", + "url": "https://api.github.com/repos/laravel/socialite/zipball/2e6beafe911a09f2300353c102d882e9d63f1f72", + "reference": "2e6beafe911a09f2300353c102d882e9d63f1f72", "shasum": "" }, "require": { @@ -3017,7 +3017,7 @@ "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" }, - "time": "2020-12-04T15:30:50+00:00" + "time": "2021-01-05T17:02:09+00:00" }, { "name": "laravel/tinker", @@ -3089,16 +3089,16 @@ }, { "name": "laravel/ui", - "version": "v3.1.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "444072cb2f8baaa15172c5cde2bd30d188c3b7e7" + "reference": "a1f82c6283c8373ea1958b8a27c3d5c98cade351" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/444072cb2f8baaa15172c5cde2bd30d188c3b7e7", - "reference": "444072cb2f8baaa15172c5cde2bd30d188c3b7e7", + "url": "https://api.github.com/repos/laravel/ui/zipball/a1f82c6283c8373ea1958b8a27c3d5c98cade351", + "reference": "a1f82c6283c8373ea1958b8a27c3d5c98cade351", "shasum": "" }, "require": { @@ -3141,9 +3141,9 @@ ], "support": { "issues": "https://github.com/laravel/ui/issues", - "source": "https://github.com/laravel/ui/tree/v3.1.0" + "source": "https://github.com/laravel/ui/tree/v3.2.0" }, - "time": "2020-11-03T19:51:21+00:00" + "time": "2021-01-06T19:20:22+00:00" }, { "name": "league/commonmark", @@ -3784,16 +3784,16 @@ }, { "name": "livewire/livewire", - "version": "v2.3.5", + "version": "v2.3.6", "source": { "type": "git", "url": "https://github.com/livewire/livewire.git", - "reference": "781a1250dc8eab9121fd856ff0b6efca8c32756f" + "reference": "8663232c198ef12964b62559e9bb2023eb86701d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/livewire/livewire/zipball/781a1250dc8eab9121fd856ff0b6efca8c32756f", - "reference": "781a1250dc8eab9121fd856ff0b6efca8c32756f", + "url": "https://api.github.com/repos/livewire/livewire/zipball/8663232c198ef12964b62559e9bb2023eb86701d", + "reference": "8663232c198ef12964b62559e9bb2023eb86701d", "shasum": "" }, "require": { @@ -3844,7 +3844,7 @@ "description": "A front-end framework for Laravel.", "support": { "issues": "https://github.com/livewire/livewire/issues", - "source": "https://github.com/livewire/livewire/tree/v2.3.5" + "source": "https://github.com/livewire/livewire/tree/v2.3.6" }, "funding": [ { @@ -3852,7 +3852,7 @@ "type": "github" } ], - "time": "2020-12-01T20:51:29+00:00" + "time": "2021-01-08T17:33:29+00:00" }, { "name": "maennchen/zipstream-php", @@ -6419,16 +6419,16 @@ }, { "name": "sentry/sentry", - "version": "3.1.1", + "version": "3.1.2", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "2a0ecb127dbccf93fb5a37df907ce08822a62e6c" + "reference": "e9b2d45b248d75f4c79a9d166b13b947b72f01fa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/2a0ecb127dbccf93fb5a37df907ce08822a62e6c", - "reference": "2a0ecb127dbccf93fb5a37df907ce08822a62e6c", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/e9b2d45b248d75f4c79a9d166b13b947b72f01fa", + "reference": "e9b2d45b248d75f4c79a9d166b13b947b72f01fa", "shasum": "" }, "require": { @@ -6456,7 +6456,7 @@ "raven/raven": "*" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.16", + "friendsofphp/php-cs-fixer": "^2.17", "http-interop/http-factory-guzzle": "^1.0", "monolog/monolog": "^1.3|^2.0", "nikic/php-parser": "^4.10.3", @@ -6466,7 +6466,7 @@ "phpstan/phpstan-phpunit": "^0.12", "phpunit/phpunit": "^8.5.13|^9.4", "symfony/phpunit-bridge": "^5.2", - "vimeo/psalm": "^3.4|^4.2" + "vimeo/psalm": "^4.2" }, "suggest": { "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." @@ -6508,7 +6508,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/3.1.1" + "source": "https://github.com/getsentry/sentry-php/tree/3.1.2" }, "funding": [ { @@ -6520,7 +6520,7 @@ "type": "custom" } ], - "time": "2020-12-05T21:59:39+00:00" + "time": "2021-01-07T18:51:44+00:00" }, { "name": "sentry/sentry-laravel", @@ -7830,16 +7830,16 @@ }, { "name": "symfony/polyfill-ctype", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41" + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/f4ba089a5b6366e453971d3aad5fe8e897b37f41", - "reference": "f4ba089a5b6366e453971d3aad5fe8e897b37f41", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e", + "reference": "c6c942b1ac76c82448322025e084cadc56048b4e", "shasum": "" }, "require": { @@ -7851,7 +7851,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7889,7 +7889,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.0" }, "funding": [ { @@ -7905,20 +7905,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-iconv", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024" + "reference": "b34bfb8c4c22650ac080d2662ae3502e5f2f4ae6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/c536646fdb4f29104dd26effc2fdcb9a5b085024", - "reference": "c536646fdb4f29104dd26effc2fdcb9a5b085024", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/b34bfb8c4c22650ac080d2662ae3502e5f2f4ae6", + "reference": "b34bfb8c4c22650ac080d2662ae3502e5f2f4ae6", "shasum": "" }, "require": { @@ -7930,7 +7930,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -7969,7 +7969,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.22.0" }, "funding": [ { @@ -7985,20 +7985,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c" + "reference": "267a9adeb8ecb8071040a740930e077cdfb987af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", - "reference": "c7cf3f858ec7d70b89559d6e6eb1f7c2517d479c", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/267a9adeb8ecb8071040a740930e077cdfb987af", + "reference": "267a9adeb8ecb8071040a740930e077cdfb987af", "shasum": "" }, "require": { @@ -8010,7 +8010,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -8050,7 +8050,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.0" }, "funding": [ { @@ -8066,20 +8066,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117" + "reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/3b75acd829741c768bc8b1f84eb33265e7cc5117", - "reference": "3b75acd829741c768bc8b1f84eb33265e7cc5117", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44", + "reference": "0eb8293dbbcd6ef6bf81404c9ce7d95bcdf34f44", "shasum": "" }, "require": { @@ -8093,7 +8093,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -8137,7 +8137,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.0" }, "funding": [ { @@ -8153,20 +8153,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "727d1096295d807c309fb01a851577302394c897" + "reference": "6e971c891537eb617a00bb07a43d182a6915faba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/727d1096295d807c309fb01a851577302394c897", - "reference": "727d1096295d807c309fb01a851577302394c897", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/6e971c891537eb617a00bb07a43d182a6915faba", + "reference": "6e971c891537eb617a00bb07a43d182a6915faba", "shasum": "" }, "require": { @@ -8178,7 +8178,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -8221,7 +8221,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.0" }, "funding": [ { @@ -8237,20 +8237,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T17:09:11+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531" + "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/39d483bdf39be819deabf04ec872eb0b2410b531", - "reference": "39d483bdf39be819deabf04ec872eb0b2410b531", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/f377a3dd1fde44d37b9831d68dc8dea3ffd28e13", + "reference": "f377a3dd1fde44d37b9831d68dc8dea3ffd28e13", "shasum": "" }, "require": { @@ -8262,7 +8262,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -8301,7 +8301,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.0" }, "funding": [ { @@ -8317,20 +8317,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930" + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cede45fcdfabdd6043b3592e83678e42ec69e930", - "reference": "cede45fcdfabdd6043b3592e83678e42ec69e930", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", + "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9", "shasum": "" }, "require": { @@ -8339,7 +8339,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -8377,7 +8377,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.0" }, "funding": [ { @@ -8393,20 +8393,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-php73", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed" + "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/8ff431c517be11c78c48a39a66d37431e26a6bed", - "reference": "8ff431c517be11c78c48a39a66d37431e26a6bed", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", + "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2", "shasum": "" }, "require": { @@ -8415,7 +8415,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -8456,7 +8456,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.0" }, "funding": [ { @@ -8472,20 +8472,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de" + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/e70aa8b064c5b72d3df2abd5ab1e90464ad009de", - "reference": "e70aa8b064c5b72d3df2abd5ab1e90464ad009de", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91", + "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91", "shasum": "" }, "require": { @@ -8494,7 +8494,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -8539,7 +8539,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.0" }, "funding": [ { @@ -8555,20 +8555,20 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.20.0", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "7095799250ff244f3015dc492480175a249e7b55" + "reference": "17e0611d2e180a91d02b4fa8b03aab0368b661bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/7095799250ff244f3015dc492480175a249e7b55", - "reference": "7095799250ff244f3015dc492480175a249e7b55", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/17e0611d2e180a91d02b4fa8b03aab0368b661bc", + "reference": "17e0611d2e180a91d02b4fa8b03aab0368b661bc", "shasum": "" }, "require": { @@ -8580,7 +8580,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.20-dev" + "dev-main": "1.22-dev" }, "thanks": { "name": "symfony/polyfill", @@ -8618,7 +8618,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.20.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.22.0" }, "funding": [ { @@ -8634,7 +8634,7 @@ "type": "tidelift" } ], - "time": "2020-10-23T14:02:19+00:00" + "time": "2021-01-07T16:49:33+00:00" }, { "name": "symfony/process", @@ -9956,16 +9956,16 @@ }, { "name": "barryvdh/laravel-debugbar", - "version": "v3.5.1", + "version": "v3.5.2", "source": { "type": "git", "url": "https://github.com/barryvdh/laravel-debugbar.git", - "reference": "233c10688f4c1a6e66ed2ef123038b1363d1bedc" + "reference": "cae0a8d1cb89b0f0522f65e60465e16d738e069b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/233c10688f4c1a6e66ed2ef123038b1363d1bedc", - "reference": "233c10688f4c1a6e66ed2ef123038b1363d1bedc", + "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/cae0a8d1cb89b0f0522f65e60465e16d738e069b", + "reference": "cae0a8d1cb89b0f0522f65e60465e16d738e069b", "shasum": "" }, "require": { @@ -9978,6 +9978,7 @@ "symfony/finder": "^4.3|^5" }, "require-dev": { + "mockery/mockery": "^1.3.3", "orchestra/testbench-dusk": "^4|^5|^6", "phpunit/phpunit": "^8.5|^9.0", "squizlabs/php_codesniffer": "^3.5" @@ -10024,7 +10025,7 @@ ], "support": { "issues": "https://github.com/barryvdh/laravel-debugbar/issues", - "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.5.1" + "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.5.2" }, "funding": [ { @@ -10032,7 +10033,7 @@ "type": "github" } ], - "time": "2020-09-07T19:32:39+00:00" + "time": "2021-01-06T14:21:44+00:00" }, { "name": "darkaonline/l5-swagger", @@ -12937,17 +12938,279 @@ "time": "2020-09-28T06:39:44+00:00" }, { - "name": "swagger-api/swagger-ui", - "version": "v3.38.0", + "name": "spatie/backtrace", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/swagger-api/swagger-ui.git", - "reference": "bf97e1f2439c26421fa36f187f675b6c81701368" + "url": "https://github.com/spatie/backtrace.git", + "reference": "59811ee52b21b5a42a9c6ca8699f979fd64d8cec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/bf97e1f2439c26421fa36f187f675b6c81701368", - "reference": "bf97e1f2439c26421fa36f187f675b6c81701368", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/59811ee52b21b5a42a9c6ca8699f979fd64d8cec", + "reference": "59811ee52b21b5a42a9c6ca8699f979fd64d8cec", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/backtrace/issues", + "source": "https://github.com/spatie/backtrace/tree/1.0.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2020-11-24T11:46:24+00:00" + }, + { + "name": "spatie/laravel-ray", + "version": "1.3.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ray.git", + "reference": "80f0efc17bc656857641e31f485a3fd3096129b1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/80f0efc17bc656857641e31f485a3fd3096129b1", + "reference": "80f0efc17bc656857641e31f485a3fd3096129b1", + "shasum": "" + }, + "require": { + "illuminate/contracts": "^7.0|^8.0", + "illuminate/database": "^7.0|^8.13", + "illuminate/support": "^7.0|^8.13", + "php": "^7.4|^8.0", + "spatie/backtrace": "^1.0", + "spatie/ray": "^1.3", + "symfony/stopwatch": "4.2|^5.2" + }, + "require-dev": { + "illuminate/mail": "^7.0|^8.19", + "illuminate/view": "^7.0|^8.19", + "orchestra/testbench": "^5.0|^6.0", + "phpunit/phpunit": "^9.3", + "spatie/phpunit-snapshot-assertions": "^4.2" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Spatie\\LaravelRay\\RayServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\LaravelRay\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Easily debug Laravel apps", + "homepage": "https://github.com/spatie/laravel-ray", + "keywords": [ + "laravel-ray", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-ray/issues", + "source": "https://github.com/spatie/laravel-ray/tree/1.3.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-01-08T14:02:03+00:00" + }, + { + "name": "spatie/macroable", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/macroable.git", + "reference": "7a99549fc001c925714b329220dea680c04bfa48" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/macroable/zipball/7a99549fc001c925714b329220dea680c04bfa48", + "reference": "7a99549fc001c925714b329220dea680c04bfa48", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Macroable\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A trait to dynamically add methods to a class", + "homepage": "https://github.com/spatie/macroable", + "keywords": [ + "macroable", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/macroable/issues", + "source": "https://github.com/spatie/macroable/tree/1.0.1" + }, + "time": "2020-11-03T10:15:05+00:00" + }, + { + "name": "spatie/ray", + "version": "1.3.4", + "source": { + "type": "git", + "url": "https://github.com/spatie/ray.git", + "reference": "c608188d647ae992e3309868be3fc9fd5040c118" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ray/zipball/c608188d647ae992e3309868be3fc9fd5040c118", + "reference": "c608188d647ae992e3309868be3fc9fd5040c118", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "php": "^7.4|^8.0", + "ramsey/uuid": "^4.1", + "spatie/backtrace": "^1.0", + "spatie/macroable": "^1.0", + "symfony/console": "^4.2|^5.2", + "symfony/stopwatch": "^4.2|^5.2", + "symfony/var-dumper": "^4.2|^5.2" + }, + "require-dev": { + "illuminate/support": "^8.18", + "phpunit/phpunit": "^9.5", + "spatie/phpunit-snapshot-assertions": "^4.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Ray\\": "src" + }, + "files": [ + "src/helpers.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Debug with Ray to fix problems faster", + "homepage": "https://github.com/spatie/ray", + "keywords": [ + "ray", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/ray/issues", + "source": "https://github.com/spatie/ray/tree/1.3.4" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-01-08T21:47:59+00:00" + }, + { + "name": "swagger-api/swagger-ui", + "version": "v3.39.0", + "source": { + "type": "git", + "url": "https://github.com/swagger-api/swagger-ui.git", + "reference": "aab0511e07cbb059e1f430aae02ed1f226366829" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/aab0511e07cbb059e1f430aae02ed1f226366829", + "reference": "aab0511e07cbb059e1f430aae02ed1f226366829", "shasum": "" }, "type": "library", @@ -12993,9 +13256,9 @@ ], "support": { "issues": "https://github.com/swagger-api/swagger-ui/issues", - "source": "https://github.com/swagger-api/swagger-ui/tree/v3.38.0" + "source": "https://github.com/swagger-api/swagger-ui/tree/v3.39.0" }, - "time": "2020-12-10T20:44:28+00:00" + "time": "2021-01-07T21:16:03+00:00" }, { "name": "symfony/debug", @@ -13598,6 +13861,8 @@ "ext-json": "*", "ext-libxml": "*" }, - "platform-dev": [], + "platform-dev": { + "php": "^7.4" + }, "plugin-api-version": "2.0.0" } diff --git a/config/ninja.php b/config/ninja.php index 635a08a21f46..31204832b2e1 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -13,7 +13,7 @@ return [ 'require_https' => env('REQUIRE_HTTPS', true), 'app_url' => rtrim(env('APP_URL', ''), '/'), 'app_domain' => env('APP_DOMAIN', ''), - 'app_version' => '5.0.44', + 'app_version' => '5.0.45', 'minimum_client_version' => '5.0.16', 'terms_version' => '1.0.1', 'api_secret' => env('API_SECRET', false), 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..8d7b7bc5fc5b --- /dev/null +++ b/database/migrations/2021_01_08_093324_expenses_table_additional_fields.php @@ -0,0 +1,40 @@ +decimal('tax_amount1', 20, 6)->default(); + $table->decimal('tax_amount2', 20, 6)->default(); + $table->decimal('tax_amount3', 20, 6)->default(); + $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;