From 97aec846ffb83809ec190f398e809c8d21305082 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 1 Apr 2021 10:10:31 +1100 Subject: [PATCH 01/11] if/else blocks for flutter canvas build --- config/ninja.php | 2 +- resources/views/index/index.blade.php | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/config/ninja.php b/config/ninja.php index f6d58aa59ed6..3e331e064439 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -141,7 +141,7 @@ return [ 'expanded_logging' => env('EXPANDED_LOGGING', false), 'snappdf_chromium_path' => env('SNAPPDF_CHROMIUM_PATH', false), 'v4_migration_version' => '4.5.31', - 'flutter_canvas_kit' => env('FLUTTER_CANVAS_KIT', false), + 'flutter_canvas_kit' => env('FLUTTER_CANVAS_KIT', 'selfhosted-html'), 'webcron_secret' => env('WEBCRON_SECRET', false), 'disable_auto_update' => env('DISABLE_AUTO_UPDATE', false), 'invoiceninja_hosted_pdf_generation' => env('NINJA_HOSTED_PDF', false), diff --git a/resources/views/index/index.blade.php b/resources/views/index/index.blade.php index 9f93c74a3c39..dfd798e2c1ee 100644 --- a/resources/views/index/index.blade.php +++ b/resources/views/index/index.blade.php @@ -146,7 +146,13 @@ - + @if(config('ninja.flutter_canvas_kit') == 'hosted') + + @elseif(config('ninja.flutter_canvas_kit') == 'selfhosted-canvaskit') + + @else + + @endif
From be648230de4446cf9229bb2f7d4ae47eaafacf83 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 1 Apr 2021 12:58:12 +1100 Subject: [PATCH 02/11] Working on subscriptions --- .../Subscription/SubscriptionService.php | 64 +++++++++++++------ config/ninja.php | 2 +- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/app/Services/Subscription/SubscriptionService.php b/app/Services/Subscription/SubscriptionService.php index 646b2e0fb5d4..d1b5ecb6d3f1 100644 --- a/app/Services/Subscription/SubscriptionService.php +++ b/app/Services/Subscription/SubscriptionService.php @@ -55,9 +55,39 @@ class SubscriptionService } // if we have a recurring product - then generate a recurring invoice - // if trial is enabled, generate the recurring invoice to fire when the trial ends. + if(strlen($this->subscription->recurring_product_ids) >=1){ + $recurring_invoice = $this->convertInvoiceToRecurring($payment_hash->payment->client_id); + + $recurring_invoice->next_send_date = now(); + $recurring_invoice = $recurring_invoice_repo->save([], $recurring_invoice); + $recurring_invoice->next_send_date = $recurring_invoice->nextSendDate(); + /* Start the recurring service */ + $recurring_invoice->service() + ->start() + ->save(); + + //execute any webhooks + $this->triggerWebhook(); + + if(array_key_exists('post_purchase_url', $this->subscription->webhook_configuration) && strlen($this->subscription->webhook_configuration['post_purchase_url']) >=1) + return redirect($this->subscription->webhook_configuration['post_purchase_url']); + + return redirect('/client/recurring_invoices/'.$recurring_invoice->hashed_id); + } + else + { + + //execute any webhooks + $this->triggerWebhook(); + + if(array_key_exists('post_purchase_url', $this->subscription->webhook_configuration) && strlen($this->subscription->webhook_configuration['post_purchase_url']) >=1) + return redirect($this->subscription->webhook_configuration['post_purchase_url']); + + return redirect('/client/invoices/'.$this->encodePrimaryKey($payment_hash->fee_invoice_id)); + + } } /** @@ -75,16 +105,9 @@ class SubscriptionService //create recurring invoice with start date = trial_duration + 1 day $recurring_invoice_repo = new RecurringInvoiceRepository(); - $subscription_repo = new SubscriptionRepository(); - $recurring_invoice = RecurringInvoiceFactory::create($this->subscription->company_id, $this->subscription->user_id); - $recurring_invoice->client_id = $client_contact->client_id; - $recurring_invoice->line_items = $subscription_repo->generateLineItems($this->subscription, true); - $recurring_invoice->subscription_id = $this->subscription->id; - $recurring_invoice->frequency_id = $this->subscription->frequency_id ?: RecurringInvoice::FREQUENCY_MONTHLY; - $recurring_invoice->date = now(); + $recurring_invoice = $this->convertInvoiceToRecurring($client_contact->client_id); $recurring_invoice->next_send_date = now()->addSeconds($this->subscription->trial_duration); - $recurring_invoice->remaining_cycles = -1; $recurring_invoice->backup = 'is_trial'; if(array_key_exists('coupon', $data) && ($data['coupon'] == $this->subscription->promo_code) && $this->subscription->promo_discount > 0) @@ -109,6 +132,7 @@ class SubscriptionService return redirect('/client/recurring_invoices/'.$recurring_invoice->hashed_id); } + public function createInvoice($data): ?\App\Models\Invoice { @@ -130,16 +154,20 @@ class SubscriptionService } - private function convertInvoiceToRecurring($payment_hash) + private function convertInvoiceToRecurring($client_id) { - //The first invoice is a plain invoice - the second is fired on the recurring schedule. - $invoice = Invoice::find($payment_hash->billing_context->invoice_id); - - if(!$invoice) - throw new \Exception("Could not match an invoice for payment of billing subscription"); - - return InvoiceToRecurringInvoiceFactory::create($invoice); - + + $subscription_repo = new SubscriptionRepository(); + + $recurring_invoice = RecurringInvoiceFactory::create($this->subscription->company_id, $this->subscription->user_id); + $recurring_invoice->client_id = $client_id; + $recurring_invoice->line_items = $subscription_repo->generateLineItems($this->subscription, true); + $recurring_invoice->subscription_id = $this->subscription->id; + $recurring_invoice->frequency_id = $this->subscription->frequency_id ?: RecurringInvoice::FREQUENCY_MONTHLY; + $recurring_invoice->date = now(); + $recurring_invoice->remaining_cycles = -1; + + return $recurring_invoice; } // @deprecated due to change in architecture diff --git a/config/ninja.php b/config/ninja.php index 3e331e064439..13bbf312e705 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -140,7 +140,7 @@ return [ 'log_pdf_html' => env('LOG_PDF_HTML', false), 'expanded_logging' => env('EXPANDED_LOGGING', false), 'snappdf_chromium_path' => env('SNAPPDF_CHROMIUM_PATH', false), - 'v4_migration_version' => '4.5.31', + 'v4_migration_version' => '4.5.35', 'flutter_canvas_kit' => env('FLUTTER_CANVAS_KIT', 'selfhosted-html'), 'webcron_secret' => env('WEBCRON_SECRET', false), 'disable_auto_update' => env('DISABLE_AUTO_UPDATE', false), From 61489ca7d39db320295a2c3679c056b428f43437 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 1 Apr 2021 13:24:05 +1100 Subject: [PATCH 03/11] fixes for service methods --- app/Services/Subscription/SubscriptionService.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/Services/Subscription/SubscriptionService.php b/app/Services/Subscription/SubscriptionService.php index d1b5ecb6d3f1..2fce756982e4 100644 --- a/app/Services/Subscription/SubscriptionService.php +++ b/app/Services/Subscription/SubscriptionService.php @@ -58,7 +58,8 @@ class SubscriptionService if(strlen($this->subscription->recurring_product_ids) >=1){ $recurring_invoice = $this->convertInvoiceToRecurring($payment_hash->payment->client_id); - + $recurring_invoice_repo = new RecurringInvoiceRepository(); + $recurring_invoice->next_send_date = now(); $recurring_invoice = $recurring_invoice_repo->save([], $recurring_invoice); $recurring_invoice->next_send_date = $recurring_invoice->nextSendDate(); From 3d3de91dd7c897c7aa90808b6c2f3e7f97ad906d Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 1 Apr 2021 13:58:57 +1100 Subject: [PATCH 04/11] Modules --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7f41a3e06b62..c67ac16146af 100644 --- a/.gitignore +++ b/.gitignore @@ -29,3 +29,4 @@ nbproject .php_cs.cache public/test.pdf public/storage/test.pdf +/Modules \ No newline at end of file From a9de1577f011e0d48d5c86ecd350e0324e8ab3a0 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 1 Apr 2021 14:29:28 +1100 Subject: [PATCH 05/11] modules --- modules_statuses.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 modules_statuses.json diff --git a/modules_statuses.json b/modules_statuses.json new file mode 100644 index 000000000000..6fec3a2ec619 --- /dev/null +++ b/modules_statuses.json @@ -0,0 +1,3 @@ +{ + "Admin": false +} \ No newline at end of file From 8e8d40100c52a629a5c655cfa8bf1ca1acba2f67 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 1 Apr 2021 14:35:30 +1100 Subject: [PATCH 06/11] Autoload modules namespace --- composer.json | 3 ++- modules_statuses.json | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 6a8e1559d033..05ca3ad4877b 100644 --- a/composer.json +++ b/composer.json @@ -89,7 +89,8 @@ "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", - "Database\\Seeders\\": "database/seeders/" + "Database\\Seeders\\": "database/seeders/", + "Modules\\": "Modules/" }, "files": [ ] diff --git a/modules_statuses.json b/modules_statuses.json index 6fec3a2ec619..1f5f99114c12 100644 --- a/modules_statuses.json +++ b/modules_statuses.json @@ -1,3 +1,3 @@ { - "Admin": false + "Admin": true } \ No newline at end of file From 18204da2f5905cd3cb69a2d7d5877e8e599c96d3 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 1 Apr 2021 15:39:56 +1100 Subject: [PATCH 07/11] Update ninja config --- config/ninja.php | 1 + 1 file changed, 1 insertion(+) diff --git a/config/ninja.php b/config/ninja.php index 13bbf312e705..f469b2ffeeb1 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -3,6 +3,7 @@ return [ 'web_url' => 'https://www.invoiceninja.com', + 'admin_token' => env('NINJA_ADMIN_TOKEN', ''), 'license_url' => 'https://app.invoiceninja.com', 'production' => env('NINJA_PROD', false), 'license' => env('NINJA_LICENSE', ''), From 509a55fbd85aad85232d259e76e9b0f6c6a83a11 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 1 Apr 2021 16:09:31 +1100 Subject: [PATCH 08/11] Update composer --- composer.json | 8 +- composer.lock | 446 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 271 insertions(+), 183 deletions(-) diff --git a/composer.json b/composer.json index 05ca3ad4877b..711000d8dc02 100644 --- a/composer.json +++ b/composer.json @@ -68,7 +68,8 @@ "symfony/http-client": "^5.2", "turbo124/beacon": "^1.0", "webpatser/laravel-countries": "dev-master#75992ad", - "wildbit/swiftmailer-postmark": "^3.3" + "wildbit/swiftmailer-postmark": "^3.3", + "invoiceninja/admin-module": "dev-master" }, "require-dev": { "php": "^7.3|^7.4", @@ -134,5 +135,8 @@ "optimize-autoloader": true }, "minimum-stability": "dev", - "prefer-stable": true + "prefer-stable": true, + "repositories": [ + {"type": "vcs", "url": "https://github.com/invoiceninja/admin-module"} + ] } diff --git a/composer.lock b/composer.lock index bd215d815783..ee437550a0d1 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2307a2f3214da0d1cc772cc1a1405682", + "content-hash": "d0023db8c59d4b2d3ceca97b5fdaaf03", "packages": [ { "name": "authorizenet/authorizenet", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/AuthorizeNet/sdk-php.git", - "reference": "23de64ef5e6fbcb220efc535ef1556c468fe3729" + "reference": "a3e76f96f674d16e892f87c58bedb99dada4b067" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AuthorizeNet/sdk-php/zipball/23de64ef5e6fbcb220efc535ef1556c468fe3729", - "reference": "23de64ef5e6fbcb220efc535ef1556c468fe3729", + "url": "https://api.github.com/repos/AuthorizeNet/sdk-php/zipball/a3e76f96f674d16e892f87c58bedb99dada4b067", + "reference": "a3e76f96f674d16e892f87c58bedb99dada4b067", "shasum": "" }, "require": { @@ -25,10 +25,6 @@ "ext-json": "*", "php": ">=5.6" }, - "require-dev": { - "phpmd/phpmd": "~2.0", - "phpunit/phpunit": "~4.0" - }, "type": "library", "autoload": { "classmap": [ @@ -49,22 +45,22 @@ ], "support": { "issues": "https://github.com/AuthorizeNet/sdk-php/issues", - "source": "https://github.com/AuthorizeNet/sdk-php/tree/2.0.1" + "source": "https://github.com/AuthorizeNet/sdk-php/tree/2.0.2" }, - "time": "2021-02-04T18:01:11+00:00" + "time": "2021-03-31T18:22:14+00:00" }, { "name": "aws/aws-sdk-php", - "version": "3.175.1", + "version": "3.176.5", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "fce65d31f033c39cd3615fd2d3e503e212d81a3e" + "reference": "45d69a8da4f55879f8a24b0b659a5bc7ad077725" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/fce65d31f033c39cd3615fd2d3e503e212d81a3e", - "reference": "fce65d31f033c39cd3615fd2d3e503e212d81a3e", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/45d69a8da4f55879f8a24b0b659a5bc7ad077725", + "reference": "45d69a8da4f55879f8a24b0b659a5bc7ad077725", "shasum": "" }, "require": { @@ -139,9 +135,9 @@ "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.175.1" + "source": "https://github.com/aws/aws-sdk-php/tree/3.176.5" }, - "time": "2021-03-22T18:13:37+00:00" + "time": "2021-03-31T18:15:22+00:00" }, { "name": "bacon/bacon-qr-code", @@ -902,16 +898,16 @@ }, { "name": "composer/xdebug-handler", - "version": "1.4.5", + "version": "1.4.6", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "f28d44c286812c714741478d968104c5e604a1d4" + "reference": "f27e06cd9675801df441b3656569b328e04aa37c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f28d44c286812c714741478d968104c5e604a1d4", - "reference": "f28d44c286812c714741478d968104c5e604a1d4", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f27e06cd9675801df441b3656569b328e04aa37c", + "reference": "f27e06cd9675801df441b3656569b328e04aa37c", "shasum": "" }, "require": { @@ -919,7 +915,8 @@ "psr/log": "^1.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8" + "phpstan/phpstan": "^0.12.55", + "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", "autoload": { @@ -945,7 +942,7 @@ "support": { "irc": "irc://irc.freenode.org/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/1.4.5" + "source": "https://github.com/composer/xdebug-handler/tree/1.4.6" }, "funding": [ { @@ -961,7 +958,7 @@ "type": "tidelift" } ], - "time": "2020-11-13T08:04:11+00:00" + "time": "2021-03-25T17:01:18+00:00" }, { "name": "czproject/git-php", @@ -1265,32 +1262,32 @@ }, { "name": "doctrine/dbal", - "version": "2.12.1", + "version": "2.13.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "adce7a954a1c2f14f85e94aed90c8489af204086" + "reference": "67d56d3203b33db29834e6b2fcdbfdc50535d796" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/adce7a954a1c2f14f85e94aed90c8489af204086", - "reference": "adce7a954a1c2f14f85e94aed90c8489af204086", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/67d56d3203b33db29834e6b2fcdbfdc50535d796", + "reference": "67d56d3203b33db29834e6b2fcdbfdc50535d796", "shasum": "" }, "require": { "doctrine/cache": "^1.0", + "doctrine/deprecations": "^0.5.3", "doctrine/event-manager": "^1.0", "ext-pdo": "*", - "php": "^7.3 || ^8" + "php": "^7.1 || ^8" }, "require-dev": { - "doctrine/coding-standard": "^8.1", - "jetbrains/phpstorm-stubs": "^2019.1", - "phpstan/phpstan": "^0.12.40", - "phpunit/phpunit": "^9.4", - "psalm/plugin-phpunit": "^0.10.0", + "doctrine/coding-standard": "8.2.0", + "jetbrains/phpstorm-stubs": "2020.2", + "phpstan/phpstan": "0.12.81", + "phpunit/phpunit": "^7.5.20|^8.5|9.5.0", "symfony/console": "^2.0.5|^3.0|^4.0|^5.0", - "vimeo/psalm": "^3.17.2" + "vimeo/psalm": "4.6.4" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -1299,11 +1296,6 @@ "bin/doctrine-dbal" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, "autoload": { "psr-4": { "Doctrine\\DBAL\\": "lib/Doctrine/DBAL" @@ -1356,7 +1348,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/2.12.1" + "source": "https://github.com/doctrine/dbal/tree/2.13.0" }, "funding": [ { @@ -1372,7 +1364,50 @@ "type": "tidelift" } ], - "time": "2020-11-14T20:26:58+00:00" + "time": "2021-03-28T18:10:53+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v0.5.3", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "9504165960a1f83cc1480e2be1dd0a0478561314" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/9504165960a1f83cc1480e2be1dd0a0478561314", + "reference": "9504165960a1f83cc1480e2be1dd0a0478561314", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^6.0|^7.0|^8.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0", + "psr/log": "^1.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v0.5.3" + }, + "time": "2021-03-21T12:59:47+00:00" }, { "name": "doctrine/event-manager", @@ -2010,16 +2045,16 @@ }, { "name": "google/apiclient-services", - "version": "v0.165.0", + "version": "v0.166.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "c8d7ff2c9cb6cad6e88bc5825491c47b8b2e52fd" + "reference": "46b71684a100f3d976e0321cf24f487b314add68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/c8d7ff2c9cb6cad6e88bc5825491c47b8b2e52fd", - "reference": "c8d7ff2c9cb6cad6e88bc5825491c47b8b2e52fd", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/46b71684a100f3d976e0321cf24f487b314add68", + "reference": "46b71684a100f3d976e0321cf24f487b314add68", "shasum": "" }, "require": { @@ -2045,9 +2080,9 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.165.0" + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.166.0" }, - "time": "2021-03-21T11:20:02+00:00" + "time": "2021-03-22T11:26:04+00:00" }, { "name": "google/auth", @@ -2174,22 +2209,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.2.0", + "version": "7.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79" + "reference": "7008573787b430c1c1f650e3722d9bba59967628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0aa74dfb41ae110835923ef10a9d803a22d50e79", - "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", + "reference": "7008573787b430c1c1f650e3722d9bba59967628", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/promises": "^1.4", - "guzzlehttp/psr7": "^1.7", + "guzzlehttp/psr7": "^1.7 || ^2.0", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0" }, @@ -2197,6 +2232,7 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", "phpunit/phpunit": "^8.5.5 || ^9.3.5", @@ -2210,7 +2246,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "7.1-dev" + "dev-master": "7.3-dev" } }, "autoload": { @@ -2252,7 +2288,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.2.0" + "source": "https://github.com/guzzle/guzzle/tree/7.3.0" }, "funding": [ { @@ -2272,7 +2308,7 @@ "type": "github" } ], - "time": "2020-10-10T11:47:56+00:00" + "time": "2021-03-23T11:33:13+00:00" }, { "name": "guzzlehttp/promises", @@ -2602,6 +2638,46 @@ }, "time": "2019-11-02T09:15:47+00:00" }, + { + "name": "invoiceninja/admin-module", + "version": "dev-master", + "source": { + "type": "git", + "url": "git@github.com:invoiceninja/admin-module.git", + "reference": "dff0e7b16bd0ec9f36694b636db641579d52d753" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/invoiceninja/admin-module/zipball/dff0e7b16bd0ec9f36694b636db641579d52d753", + "reference": "dff0e7b16bd0ec9f36694b636db641579d52d753", + "shasum": "" + }, + "default-branch": true, + "type": "library", + "extra": { + "laravel": { + "providers": [], + "aliases": [] + } + }, + "autoload": { + "psr-4": { + "Modules\\Admin\\": "" + } + }, + "authors": [ + { + "name": "David Bomba", + "email": "turbo124@gmail.com" + } + ], + "description": "Admin module for reselling Invoice Ninja", + "support": { + "source": "https://github.com/invoiceninja/admin-module/tree/master", + "issues": "https://github.com/invoiceninja/admin-module/issues" + }, + "time": "2021-04-01T03:50:33+00:00" + }, { "name": "jean85/pretty-package-versions", "version": "2.0.3", @@ -2783,16 +2859,16 @@ }, { "name": "laravel/framework", - "version": "v8.33.1", + "version": "v8.35.1", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "354c57b8cb457549114074c500944455a288d6cc" + "reference": "d118c0df39e7524131176aaf76493eae63a8a602" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/354c57b8cb457549114074c500944455a288d6cc", - "reference": "354c57b8cb457549114074c500944455a288d6cc", + "url": "https://api.github.com/repos/laravel/framework/zipball/d118c0df39e7524131176aaf76493eae63a8a602", + "reference": "d118c0df39e7524131176aaf76493eae63a8a602", "shasum": "" }, "require": { @@ -2947,7 +3023,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-03-16T19:42:32+00:00" + "time": "2021-03-30T21:34:17+00:00" }, { "name": "laravel/slack-notification-channel", @@ -3207,16 +3283,16 @@ }, { "name": "league/commonmark", - "version": "1.5.7", + "version": "1.5.8", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "11df9b36fd4f1d2b727a73bf14931d81373b9a54" + "reference": "08fa59b8e4e34ea8a773d55139ae9ac0e0aecbaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/11df9b36fd4f1d2b727a73bf14931d81373b9a54", - "reference": "11df9b36fd4f1d2b727a73bf14931d81373b9a54", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/08fa59b8e4e34ea8a773d55139ae9ac0e0aecbaf", + "reference": "08fa59b8e4e34ea8a773d55139ae9ac0e0aecbaf", "shasum": "" }, "require": { @@ -3304,26 +3380,26 @@ "type": "tidelift" } ], - "time": "2020-10-31T13:49:32+00:00" + "time": "2021-03-28T18:51:39+00:00" }, { "name": "league/csv", - "version": "9.6.2", + "version": "9.7.0", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "f28da6e483bf979bac10e2add384c90ae9983e4e" + "reference": "4cacd9c72c4aa8bdbef43315b2ca25c46a0f833f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/f28da6e483bf979bac10e2add384c90ae9983e4e", - "reference": "f28da6e483bf979bac10e2add384c90ae9983e4e", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/4cacd9c72c4aa8bdbef43315b2ca25c46a0f833f", + "reference": "4cacd9c72c4aa8bdbef43315b2ca25c46a0f833f", "shasum": "" }, "require": { "ext-json": "*", "ext-mbstring": "*", - "php": ">=7.2.5" + "php": "^7.3 || ^8.0" }, "require-dev": { "ext-curl": "*", @@ -3332,7 +3408,7 @@ "phpstan/phpstan": "^0.12.0", "phpstan/phpstan-phpunit": "^0.12.0", "phpstan/phpstan-strict-rules": "^0.12.0", - "phpunit/phpunit": "^8.5" + "phpunit/phpunit": "^9.5" }, "suggest": { "ext-dom": "Required to use the XMLConverter and or the HTMLConverter classes", @@ -3388,7 +3464,7 @@ "type": "github" } ], - "time": "2020-12-10T19:40:30+00:00" + "time": "2021-03-26T22:08:10+00:00" }, { "name": "league/flysystem", @@ -6831,16 +6907,16 @@ }, { "name": "sentry/sentry-laravel", - "version": "2.4.1", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "63cca34fefab63af1dfe8474d4417f1df2803fec" + "reference": "1bb0bcc240d25e72f3cf0321f3d6064f24dec504" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/63cca34fefab63af1dfe8474d4417f1df2803fec", - "reference": "63cca34fefab63af1dfe8474d4417f1df2803fec", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/1bb0bcc240d25e72f3cf0321f3d6064f24dec504", + "reference": "1bb0bcc240d25e72f3cf0321f3d6064f24dec504", "shasum": "" }, "require": { @@ -6903,7 +6979,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/2.4.1" + "source": "https://github.com/getsentry/sentry-laravel/tree/2.4.2" }, "funding": [ { @@ -6915,7 +6991,7 @@ "type": "custom" } ], - "time": "2021-03-08T11:37:22+00:00" + "time": "2021-03-24T19:36:23+00:00" }, { "name": "stripe/stripe-php", @@ -7055,16 +7131,16 @@ }, { "name": "symfony/console", - "version": "v5.2.5", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "938ebbadae1b0a9c9d1ec313f87f9708609f1b79" + "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/938ebbadae1b0a9c9d1ec313f87f9708609f1b79", - "reference": "938ebbadae1b0a9c9d1ec313f87f9708609f1b79", + "url": "https://api.github.com/repos/symfony/console/zipball/35f039df40a3b335ebf310f244cb242b3a83ac8d", + "reference": "35f039df40a3b335ebf310f244cb242b3a83ac8d", "shasum": "" }, "require": { @@ -7132,7 +7208,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.2.5" + "source": "https://github.com/symfony/console/tree/v5.2.6" }, "funding": [ { @@ -7148,7 +7224,7 @@ "type": "tidelift" } ], - "time": "2021-03-06T13:42:15+00:00" + "time": "2021-03-28T09:42:18+00:00" }, { "name": "symfony/css-selector", @@ -7284,16 +7360,16 @@ }, { "name": "symfony/error-handler", - "version": "v5.2.4", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "b547d3babcab5c31e01de59ee33e9d9c1421d7d0" + "reference": "bdb7fb4188da7f4211e4b88350ba0dfdad002b03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/b547d3babcab5c31e01de59ee33e9d9c1421d7d0", - "reference": "b547d3babcab5c31e01de59ee33e9d9c1421d7d0", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/bdb7fb4188da7f4211e4b88350ba0dfdad002b03", + "reference": "bdb7fb4188da7f4211e4b88350ba0dfdad002b03", "shasum": "" }, "require": { @@ -7333,7 +7409,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v5.2.4" + "source": "https://github.com/symfony/error-handler/tree/v5.2.6" }, "funding": [ { @@ -7349,7 +7425,7 @@ "type": "tidelift" } ], - "time": "2021-02-11T08:21:20+00:00" + "time": "2021-03-16T09:07:47+00:00" }, { "name": "symfony/event-dispatcher", @@ -7517,16 +7593,16 @@ }, { "name": "symfony/filesystem", - "version": "v5.2.4", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "710d364200997a5afde34d9fe57bd52f3cc1e108" + "reference": "8c86a82f51658188119e62cff0a050a12d09836f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/710d364200997a5afde34d9fe57bd52f3cc1e108", - "reference": "710d364200997a5afde34d9fe57bd52f3cc1e108", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/8c86a82f51658188119e62cff0a050a12d09836f", + "reference": "8c86a82f51658188119e62cff0a050a12d09836f", "shasum": "" }, "require": { @@ -7559,7 +7635,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.2.4" + "source": "https://github.com/symfony/filesystem/tree/v5.2.6" }, "funding": [ { @@ -7575,7 +7651,7 @@ "type": "tidelift" } ], - "time": "2021-02-12T10:38:38+00:00" + "time": "2021-03-28T14:30:26+00:00" }, { "name": "symfony/finder", @@ -7640,16 +7716,16 @@ }, { "name": "symfony/http-client", - "version": "v5.2.4", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "c7d1f35a31ef153a302e3f80336170e1280b983d" + "reference": "3c3075467da15bc2edf38d2ac20d34719e794bd8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/c7d1f35a31ef153a302e3f80336170e1280b983d", - "reference": "c7d1f35a31ef153a302e3f80336170e1280b983d", + "url": "https://api.github.com/repos/symfony/http-client/zipball/3c3075467da15bc2edf38d2ac20d34719e794bd8", + "reference": "3c3075467da15bc2edf38d2ac20d34719e794bd8", "shasum": "" }, "require": { @@ -7706,7 +7782,7 @@ "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-client/tree/v5.2.4" + "source": "https://github.com/symfony/http-client/tree/v5.2.6" }, "funding": [ { @@ -7722,7 +7798,7 @@ "type": "tidelift" } ], - "time": "2021-03-01T00:40:14+00:00" + "time": "2021-03-28T09:42:18+00:00" }, { "name": "symfony/http-client-contracts", @@ -7878,16 +7954,16 @@ }, { "name": "symfony/http-kernel", - "version": "v5.2.5", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "b8c63ef63c2364e174c3b3e0ba0bf83455f97f73" + "reference": "f34de4c61ca46df73857f7f36b9a3805bdd7e3b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b8c63ef63c2364e174c3b3e0ba0bf83455f97f73", - "reference": "b8c63ef63c2364e174c3b3e0ba0bf83455f97f73", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f34de4c61ca46df73857f7f36b9a3805bdd7e3b2", + "reference": "f34de4c61ca46df73857f7f36b9a3805bdd7e3b2", "shasum": "" }, "require": { @@ -7970,7 +8046,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v5.2.5" + "source": "https://github.com/symfony/http-kernel/tree/v5.2.6" }, "funding": [ { @@ -7986,20 +8062,20 @@ "type": "tidelift" } ], - "time": "2021-03-10T17:07:35+00:00" + "time": "2021-03-29T05:16:58+00:00" }, { "name": "symfony/mime", - "version": "v5.2.5", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "554ba128f1955038b45db5e1fa7e93bfc683b139" + "reference": "1b2092244374cbe48ae733673f2ca0818b37197b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/554ba128f1955038b45db5e1fa7e93bfc683b139", - "reference": "554ba128f1955038b45db5e1fa7e93bfc683b139", + "url": "https://api.github.com/repos/symfony/mime/zipball/1b2092244374cbe48ae733673f2ca0818b37197b", + "reference": "1b2092244374cbe48ae733673f2ca0818b37197b", "shasum": "" }, "require": { @@ -8053,7 +8129,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.2.5" + "source": "https://github.com/symfony/mime/tree/v5.2.6" }, "funding": [ { @@ -8069,7 +8145,7 @@ "type": "tidelift" } ], - "time": "2021-03-07T16:08:20+00:00" + "time": "2021-03-12T13:18:39+00:00" }, { "name": "symfony/options-resolver", @@ -9100,16 +9176,16 @@ }, { "name": "symfony/routing", - "version": "v5.2.4", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "cafa138128dfd6ab6be1abf6279169957b34f662" + "reference": "31fba555f178afd04d54fd26953501b2c3f0c6e6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/cafa138128dfd6ab6be1abf6279169957b34f662", - "reference": "cafa138128dfd6ab6be1abf6279169957b34f662", + "url": "https://api.github.com/repos/symfony/routing/zipball/31fba555f178afd04d54fd26953501b2c3f0c6e6", + "reference": "31fba555f178afd04d54fd26953501b2c3f0c6e6", "shasum": "" }, "require": { @@ -9170,7 +9246,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.2.4" + "source": "https://github.com/symfony/routing/tree/v5.2.6" }, "funding": [ { @@ -9186,7 +9262,7 @@ "type": "tidelift" } ], - "time": "2021-02-22T15:48:39+00:00" + "time": "2021-03-14T13:53:33+00:00" }, { "name": "symfony/service-contracts", @@ -9269,16 +9345,16 @@ }, { "name": "symfony/string", - "version": "v5.2.4", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "4e78d7d47061fa183639927ec40d607973699609" + "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/4e78d7d47061fa183639927ec40d607973699609", - "reference": "4e78d7d47061fa183639927ec40d607973699609", + "url": "https://api.github.com/repos/symfony/string/zipball/ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", + "reference": "ad0bd91bce2054103f5eaa18ebeba8d3bc2a0572", "shasum": "" }, "require": { @@ -9332,7 +9408,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.2.4" + "source": "https://github.com/symfony/string/tree/v5.2.6" }, "funding": [ { @@ -9348,20 +9424,20 @@ "type": "tidelift" } ], - "time": "2021-02-16T10:20:28+00:00" + "time": "2021-03-17T17:12:15+00:00" }, { "name": "symfony/translation", - "version": "v5.2.5", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "0947ab1e3aabd22a6bef393874b2555d2bb976da" + "reference": "2cc7f45d96db9adfcf89adf4401d9dfed509f4e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/0947ab1e3aabd22a6bef393874b2555d2bb976da", - "reference": "0947ab1e3aabd22a6bef393874b2555d2bb976da", + "url": "https://api.github.com/repos/symfony/translation/zipball/2cc7f45d96db9adfcf89adf4401d9dfed509f4e1", + "reference": "2cc7f45d96db9adfcf89adf4401d9dfed509f4e1", "shasum": "" }, "require": { @@ -9425,7 +9501,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v5.2.5" + "source": "https://github.com/symfony/translation/tree/v5.2.6" }, "funding": [ { @@ -9441,7 +9517,7 @@ "type": "tidelift" } ], - "time": "2021-03-06T07:59:01+00:00" + "time": "2021-03-23T19:33:48+00:00" }, { "name": "symfony/translation-contracts", @@ -9523,16 +9599,16 @@ }, { "name": "symfony/var-dumper", - "version": "v5.2.5", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "002ab5a36702adf0c9a11e6d8836623253e9045e" + "reference": "89412a68ea2e675b4e44f260a5666729f77f668e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/002ab5a36702adf0c9a11e6d8836623253e9045e", - "reference": "002ab5a36702adf0c9a11e6d8836623253e9045e", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/89412a68ea2e675b4e44f260a5666729f77f668e", + "reference": "89412a68ea2e675b4e44f260a5666729f77f668e", "shasum": "" }, "require": { @@ -9591,7 +9667,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.2.5" + "source": "https://github.com/symfony/var-dumper/tree/v5.2.6" }, "funding": [ { @@ -9607,7 +9683,7 @@ "type": "tidelift" } ], - "time": "2021-03-06T07:59:01+00:00" + "time": "2021-03-28T09:42:18+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -10141,16 +10217,16 @@ }, { "name": "amphp/byte-stream", - "version": "v1.8.0", + "version": "v1.8.1", "source": { "type": "git", "url": "https://github.com/amphp/byte-stream.git", - "reference": "f0c20cf598a958ba2aa8c6e5a71c697d652c7088" + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/f0c20cf598a958ba2aa8c6e5a71c697d652c7088", - "reference": "f0c20cf598a958ba2aa8c6e5a71c697d652c7088", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", + "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", "shasum": "" }, "require": { @@ -10206,9 +10282,15 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/master" + "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" }, - "time": "2020-06-29T18:35:05+00:00" + "funding": [ + { + "url": "https://github.com/amphp", + "type": "github" + } + ], + "time": "2021-03-30T17:13:30+00:00" }, { "name": "anahkiasen/former", @@ -10788,16 +10870,16 @@ }, { "name": "facade/flare-client-php", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/facade/flare-client-php.git", - "reference": "ef0f5bce23b30b32d98fd9bb49c6fa37b40eb546" + "reference": "9dd6f2b56486d939c4467b3f35475d44af57cf17" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/flare-client-php/zipball/ef0f5bce23b30b32d98fd9bb49c6fa37b40eb546", - "reference": "ef0f5bce23b30b32d98fd9bb49c6fa37b40eb546", + "url": "https://api.github.com/repos/facade/flare-client-php/zipball/9dd6f2b56486d939c4467b3f35475d44af57cf17", + "reference": "9dd6f2b56486d939c4467b3f35475d44af57cf17", "shasum": "" }, "require": { @@ -10841,7 +10923,7 @@ ], "support": { "issues": "https://github.com/facade/flare-client-php/issues", - "source": "https://github.com/facade/flare-client-php/tree/1.4.0" + "source": "https://github.com/facade/flare-client-php/tree/1.5.0" }, "funding": [ { @@ -10849,20 +10931,20 @@ "type": "github" } ], - "time": "2021-02-16T12:42:06+00:00" + "time": "2021-03-31T07:32:54+00:00" }, { "name": "facade/ignition", - "version": "2.5.14", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/facade/ignition.git", - "reference": "17097f7a83e200d90d1cf9f4d1b35c1001513a47" + "reference": "bdc8b0b32c888f6edc838ca641358322b3d9506d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facade/ignition/zipball/17097f7a83e200d90d1cf9f4d1b35c1001513a47", - "reference": "17097f7a83e200d90d1cf9f4d1b35c1001513a47", + "url": "https://api.github.com/repos/facade/ignition/zipball/bdc8b0b32c888f6edc838ca641358322b3d9506d", + "reference": "bdc8b0b32c888f6edc838ca641358322b3d9506d", "shasum": "" }, "require": { @@ -10926,7 +11008,7 @@ "issues": "https://github.com/facade/ignition/issues", "source": "https://github.com/facade/ignition" }, - "time": "2021-03-04T08:48:01+00:00" + "time": "2021-03-30T15:55:38+00:00" }, { "name": "facade/ignition-contracts", @@ -11084,16 +11166,16 @@ }, { "name": "filp/whoops", - "version": "2.11.0", + "version": "2.12.0", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "f6e14679f948d8a5cfb866fa7065a30c66bd64d3" + "reference": "d501fd2658d55491a2295ff600ae5978eaad7403" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/f6e14679f948d8a5cfb866fa7065a30c66bd64d3", - "reference": "f6e14679f948d8a5cfb866fa7065a30c66bd64d3", + "url": "https://api.github.com/repos/filp/whoops/zipball/d501fd2658d55491a2295ff600ae5978eaad7403", + "reference": "d501fd2658d55491a2295ff600ae5978eaad7403", "shasum": "" }, "require": { @@ -11143,7 +11225,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.11.0" + "source": "https://github.com/filp/whoops/tree/2.12.0" }, "funding": [ { @@ -11151,7 +11233,7 @@ "type": "github" } ], - "time": "2021-03-19T12:00:00+00:00" + "time": "2021-03-30T12:00:00+00:00" }, { "name": "friendsofphp/php-cs-fixer", @@ -12088,16 +12170,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.5", + "version": "9.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1" + "reference": "f6293e1b30a2354e8428e004689671b83871edde" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f3e026641cc91909d421802dd3ac7827ebfd97e1", - "reference": "f3e026641cc91909d421802dd3ac7827ebfd97e1", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde", + "reference": "f6293e1b30a2354e8428e004689671b83871edde", "shasum": "" }, "require": { @@ -12153,7 +12235,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.5" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6" }, "funding": [ { @@ -12161,7 +12243,7 @@ "type": "github" } ], - "time": "2020-11-28T06:44:49+00:00" + "time": "2021-03-28T07:26:59+00:00" }, { "name": "phpunit/php-file-iterator", @@ -13473,16 +13555,16 @@ }, { "name": "swagger-api/swagger-ui", - "version": "v3.45.1", + "version": "v3.46.0", "source": { "type": "git", "url": "https://github.com/swagger-api/swagger-ui.git", - "reference": "72506e581f860244f3c74de5a2fb9809e53d1876" + "reference": "cc408812fc927e265da158bf68239530740ab4cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/72506e581f860244f3c74de5a2fb9809e53d1876", - "reference": "72506e581f860244f3c74de5a2fb9809e53d1876", + "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/cc408812fc927e265da158bf68239530740ab4cc", + "reference": "cc408812fc927e265da158bf68239530740ab4cc", "shasum": "" }, "type": "library", @@ -13528,9 +13610,9 @@ ], "support": { "issues": "https://github.com/swagger-api/swagger-ui/issues", - "source": "https://github.com/swagger-api/swagger-ui/tree/v3.45.1" + "source": "https://github.com/swagger-api/swagger-ui/tree/v3.46.0" }, - "time": "2021-03-19T17:14:16+00:00" + "time": "2021-03-31T18:50:40+00:00" }, { "name": "symfony/debug", @@ -13858,16 +13940,16 @@ }, { "name": "vimeo/psalm", - "version": "4.6.4", + "version": "4.7.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "97fe86c4e158b5a57c5150aa5055c38b5a809aab" + "reference": "d4377c0baf3ffbf0b1ec6998e8d1be2a40971005" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/97fe86c4e158b5a57c5150aa5055c38b5a809aab", - "reference": "97fe86c4e158b5a57c5150aa5055c38b5a809aab", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/d4377c0baf3ffbf0b1ec6998e8d1be2a40971005", + "reference": "d4377c0baf3ffbf0b1ec6998e8d1be2a40971005", "shasum": "" }, "require": { @@ -13909,6 +13991,7 @@ "slevomat/coding-standard": "^6.3.11", "squizlabs/php_codesniffer": "^3.5", "symfony/process": "^4.3", + "weirdan/phpunit-appveyor-reporter": "^1.0.0", "weirdan/prophecy-shim": "^1.0 || ^2.0" }, "suggest": { @@ -13956,9 +14039,9 @@ ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.6.4" + "source": "https://github.com/vimeo/psalm/tree/4.7.0" }, - "time": "2021-03-16T23:28:18+00:00" + "time": "2021-03-29T03:54:38+00:00" }, { "name": "webmozart/path-util", @@ -14085,7 +14168,8 @@ "aliases": [], "minimum-stability": "dev", "stability-flags": { - "webpatser/laravel-countries": 20 + "webpatser/laravel-countries": 20, + "invoiceninja/admin-module": 20 }, "prefer-stable": true, "prefer-lowest": false, From 899b329b905fee7568545cb037df8c3fb460e25c Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 1 Apr 2021 17:56:25 +1100 Subject: [PATCH 09/11] Update composer.json --- composer.json | 8 ++------ composer.lock | 45 ++------------------------------------------- 2 files changed, 4 insertions(+), 49 deletions(-) diff --git a/composer.json b/composer.json index 711000d8dc02..05ca3ad4877b 100644 --- a/composer.json +++ b/composer.json @@ -68,8 +68,7 @@ "symfony/http-client": "^5.2", "turbo124/beacon": "^1.0", "webpatser/laravel-countries": "dev-master#75992ad", - "wildbit/swiftmailer-postmark": "^3.3", - "invoiceninja/admin-module": "dev-master" + "wildbit/swiftmailer-postmark": "^3.3" }, "require-dev": { "php": "^7.3|^7.4", @@ -135,8 +134,5 @@ "optimize-autoloader": true }, "minimum-stability": "dev", - "prefer-stable": true, - "repositories": [ - {"type": "vcs", "url": "https://github.com/invoiceninja/admin-module"} - ] + "prefer-stable": true } diff --git a/composer.lock b/composer.lock index ee437550a0d1..25ba157a2400 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": "d0023db8c59d4b2d3ceca97b5fdaaf03", + "content-hash": "2307a2f3214da0d1cc772cc1a1405682", "packages": [ { "name": "authorizenet/authorizenet", @@ -2638,46 +2638,6 @@ }, "time": "2019-11-02T09:15:47+00:00" }, - { - "name": "invoiceninja/admin-module", - "version": "dev-master", - "source": { - "type": "git", - "url": "git@github.com:invoiceninja/admin-module.git", - "reference": "dff0e7b16bd0ec9f36694b636db641579d52d753" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/invoiceninja/admin-module/zipball/dff0e7b16bd0ec9f36694b636db641579d52d753", - "reference": "dff0e7b16bd0ec9f36694b636db641579d52d753", - "shasum": "" - }, - "default-branch": true, - "type": "library", - "extra": { - "laravel": { - "providers": [], - "aliases": [] - } - }, - "autoload": { - "psr-4": { - "Modules\\Admin\\": "" - } - }, - "authors": [ - { - "name": "David Bomba", - "email": "turbo124@gmail.com" - } - ], - "description": "Admin module for reselling Invoice Ninja", - "support": { - "source": "https://github.com/invoiceninja/admin-module/tree/master", - "issues": "https://github.com/invoiceninja/admin-module/issues" - }, - "time": "2021-04-01T03:50:33+00:00" - }, { "name": "jean85/pretty-package-versions", "version": "2.0.3", @@ -14168,8 +14128,7 @@ "aliases": [], "minimum-stability": "dev", "stability-flags": { - "webpatser/laravel-countries": 20, - "invoiceninja/admin-module": 20 + "webpatser/laravel-countries": 20 }, "prefer-stable": true, "prefer-lowest": false, From 3b9ffb431f755c87d3baeccff6343572f75decc9 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 1 Apr 2021 19:02:28 +1100 Subject: [PATCH 10/11] Fixes for tests --- app/Mail/Admin/EntityFailedSendObject.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Mail/Admin/EntityFailedSendObject.php b/app/Mail/Admin/EntityFailedSendObject.php index 0b937e731647..df15518e1f67 100644 --- a/app/Mail/Admin/EntityFailedSendObject.php +++ b/app/Mail/Admin/EntityFailedSendObject.php @@ -124,7 +124,7 @@ class EntityFailedSendObject $settings = $this->entity->client->getMergedSettings(); $signature = $settings->email_signature; - $html_variables = (new HtmlEngine($this->invitation)->makeValues(); + $html_variables = (new HtmlEngine($this->invitation))->makeValues(); $signature = str_replace(array_keys($html_variables), array_values($html_variables), $signature); return [ From 3a770361aab1a631611d5b454777e31b15a569d6 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Thu, 1 Apr 2021 19:07:32 +1100 Subject: [PATCH 11/11] Set valid until when a quote is marked as sent --- app/DataMapper/CompanySettings.php | 3 +++ app/Services/Quote/MarkSent.php | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php index 049f807d5743..d9ffe3792038 100644 --- a/app/DataMapper/CompanySettings.php +++ b/app/DataMapper/CompanySettings.php @@ -139,6 +139,8 @@ class CompanySettings extends BaseSettings public $payment_type_id = '0'; //@TODO where do we use this? // public $invoice_fields = ''; //@TODO is this redundant, we store this in the custom_fields on the company? + public $valid_until = ''; //@implemented + public $show_accept_invoice_terms = false; //@TODO ben to confirm public $show_accept_quote_terms = false; //@TODO ben to confirm public $require_invoice_signature = false; //@TODO ben to confirm @@ -430,6 +432,7 @@ class CompanySettings extends BaseSettings 'show_accept_quote_terms' => 'bool', 'show_accept_invoice_terms' => 'bool', 'timezone_id' => 'string', + 'valid_until' => 'string', 'date_format_id' => 'string', 'military_time' => 'bool', 'language_id' => 'string', diff --git a/app/Services/Quote/MarkSent.php b/app/Services/Quote/MarkSent.php index aebe2d4b35a2..d91617324708 100644 --- a/app/Services/Quote/MarkSent.php +++ b/app/Services/Quote/MarkSent.php @@ -14,6 +14,7 @@ namespace App\Services\Quote; use App\Events\Quote\QuoteWasMarkedSent; use App\Models\Quote; use App\Utils\Ninja; +use Carbon\Carbon; class MarkSent { @@ -37,6 +38,13 @@ class MarkSent $this->quote->markInvitationsSent(); + if ($this->quote->due_date != '' || $this->quote->client->getSetting('valid_until') == '') { + + } + else{ + $this->quote->due_date = Carbon::parse($this->quote->date)->addDays($this->quote->client->getSetting('valid_until')); + } + event(new QuoteWasMarkedSent($this->quote, $this->quote->company, Ninja::eventVars())); $this->quote