From 1ef97ef2bbdf9bd81bd579772a1dd902170b2946 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Sun, 26 May 2024 07:57:05 +1000 Subject: [PATCH] Updates for PHP version requirements --- app/DataMapper/EDoc/Fact1.php | 23 -- app/DataMapper/EDocSettings.php | 29 -- app/Http/Controllers/BaseController.php | 5 +- app/Http/Controllers/StaticController.php | 6 +- .../Requests/Company/UpdateCompanyRequest.php | 1 - .../EDocument/Standards/FatturaPA.php | 3 + composer.json | 3 +- composer.lock | 391 ++---------------- tests/Feature/ReminderTest.php | 153 +++++-- 9 files changed, 174 insertions(+), 440 deletions(-) delete mode 100644 app/DataMapper/EDoc/Fact1.php delete mode 100644 app/DataMapper/EDocSettings.php diff --git a/app/DataMapper/EDoc/Fact1.php b/app/DataMapper/EDoc/Fact1.php deleted file mode 100644 index b7b661bea4..0000000000 --- a/app/DataMapper/EDoc/Fact1.php +++ /dev/null @@ -1,23 +0,0 @@ -FatturaElettronica ??= new FatturaElettronica; - } - -} \ No newline at end of file diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index 079030b166..8e2c8de91f 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -41,7 +41,6 @@ use Illuminate\Database\Eloquent\Builder; use League\Fractal\Serializer\JsonApiSerializer; use League\Fractal\Pagination\IlluminatePaginatorAdapter; use Illuminate\Contracts\Container\BindingResolutionException; -use Invoiceninja\Einvoice\Decoder\Schema; /** * Class BaseController. @@ -997,8 +996,8 @@ class BaseController extends Controller if(request()->has('einvoice')){ - $ro = new Schema(); - $response_data['einvoice_schema'] = $ro('FACT1'); + // $ro = new Schema(); + // $response_data['einvoice_schema'] = $ro('FACT1'); } diff --git a/app/Http/Controllers/StaticController.php b/app/Http/Controllers/StaticController.php index e29baded21..135384fb96 100644 --- a/app/Http/Controllers/StaticController.php +++ b/app/Http/Controllers/StaticController.php @@ -13,7 +13,6 @@ namespace App\Http\Controllers; use App\Utils\Statics; use Illuminate\Http\Response; -use Invoiceninja\Einvoice\Decoder\Schema; class StaticController extends BaseController { @@ -61,8 +60,9 @@ class StaticController extends BaseController if(request()->has('einvoice')){ - $schema = new Schema(); - $response_data['einvoice_schema'] = $schema('FACT1'); + // $schema = new Schema(); + // $response_data['einvoice_schema'] = $schema('FACT1'); + } return response()->json($response_data, 200, ['Content-type' => 'application/json; charset=utf-8'], JSON_PRETTY_PRINT); diff --git a/app/Http/Requests/Company/UpdateCompanyRequest.php b/app/Http/Requests/Company/UpdateCompanyRequest.php index f415386a08..dd4adc5ca8 100644 --- a/app/Http/Requests/Company/UpdateCompanyRequest.php +++ b/app/Http/Requests/Company/UpdateCompanyRequest.php @@ -17,7 +17,6 @@ use App\Http\ValidationRules\Company\ValidSubdomain; use App\Http\ValidationRules\ValidSettingsRule; use App\Utils\Ninja; use App\Utils\Traits\MakesHash; -use Invoiceninja\Einvoice\Models\FatturaPA\FatturaElettronica; class UpdateCompanyRequest extends Request { diff --git a/app/Services/EDocument/Standards/FatturaPA.php b/app/Services/EDocument/Standards/FatturaPA.php index f617ec2662..24da1fc479 100644 --- a/app/Services/EDocument/Standards/FatturaPA.php +++ b/app/Services/EDocument/Standards/FatturaPA.php @@ -39,6 +39,9 @@ use CleverIt\UBL\Invoice\FatturaPA\common\CessionarioCommittente; use CleverIt\UBL\Invoice\FatturaPA\common\FatturaElettronicaBody; use CleverIt\UBL\Invoice\FatturaPA\common\FatturaElettronicaHeader; +/** + * @deprecated not needed anylonger as we have invoiceninja/einvoice + */ class FatturaPA extends AbstractService { private $xml; diff --git a/composer.json b/composer.json index b09c63a9c6..06738df832 100644 --- a/composer.json +++ b/composer.json @@ -105,8 +105,7 @@ "webpatser/laravel-countries": "dev-master#75992ad", "wepay/php-sdk": "^0.3", "wildbit/postmark-php": "^4.0", - "hyvor/php-json-exporter": "^0.0.3", - "invoiceninja/einvoice": "dev-main" + "hyvor/php-json-exporter": "^0.0.3" }, "require-dev": { "php": "^8.1|^8.2", diff --git a/composer.lock b/composer.lock index 83821bd4ea..ab4aa4eec9 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": "1356155e46e797b140685c105df97b8e", + "content-hash": "6904626bbe465492796c27cd86ad4d2c", "packages": [ { "name": "adrienrn/php-mimetyper", @@ -1385,16 +1385,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.308.1", + "version": "3.308.3", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "bf5f1221d4c5c67d3213150fb91dfb5ce627227b" + "reference": "7fa0625056fa1fcf6732f89ba37b3f630d78de59" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/bf5f1221d4c5c67d3213150fb91dfb5ce627227b", - "reference": "bf5f1221d4c5c67d3213150fb91dfb5ce627227b", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/7fa0625056fa1fcf6732f89ba37b3f630d78de59", + "reference": "7fa0625056fa1fcf6732f89ba37b3f630d78de59", "shasum": "" }, "require": { @@ -1474,9 +1474,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.308.1" + "source": "https://github.com/aws/aws-sdk-php/tree/3.308.3" }, - "time": "2024-05-22T18:05:56+00:00" + "time": "2024-05-24T18:29:40+00:00" }, { "name": "bacon/bacon-qr-code", @@ -4869,16 +4869,16 @@ }, { "name": "imdhemy/laravel-purchases", - "version": "1.11.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/imdhemy/laravel-in-app-purchases.git", - "reference": "3c0031880dc0bbd39ec89eac61fc3d0f32580dec" + "reference": "bd7303d23a950aa8f4573d98498ce1e4c8b6664a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/imdhemy/laravel-in-app-purchases/zipball/3c0031880dc0bbd39ec89eac61fc3d0f32580dec", - "reference": "3c0031880dc0bbd39ec89eac61fc3d0f32580dec", + "url": "https://api.github.com/repos/imdhemy/laravel-in-app-purchases/zipball/bd7303d23a950aa8f4573d98498ce1e4c8b6664a", + "reference": "bd7303d23a950aa8f4573d98498ce1e4c8b6664a", "shasum": "" }, "require": { @@ -4934,7 +4934,7 @@ ], "support": { "issues": "https://github.com/imdhemy/laravel-in-app-purchases/issues", - "source": "https://github.com/imdhemy/laravel-in-app-purchases/tree/1.11.0" + "source": "https://github.com/imdhemy/laravel-in-app-purchases/tree/1.12.0" }, "funding": [ { @@ -4942,7 +4942,7 @@ "type": "github" } ], - "time": "2024-05-12T19:06:24+00:00" + "time": "2024-05-25T12:18:29+00:00" }, { "name": "intervention/image", @@ -5028,57 +5028,6 @@ ], "time": "2022-05-21T17:30:32+00:00" }, - { - "name": "invoiceninja/einvoice", - "version": "dev-main", - "source": { - "type": "git", - "url": "https://github.com/invoiceninja/einvoice.git", - "reference": "757800fa89f845443ad1880c1ea7aa905d1043ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/invoiceninja/einvoice/zipball/757800fa89f845443ad1880c1ea7aa905d1043ea", - "reference": "757800fa89f845443ad1880c1ea7aa905d1043ea", - "shasum": "" - }, - "require": { - "illuminate/collections": "^10.48", - "sabre/xml": "^4.0", - "symfony/property-access": "^6.4", - "symfony/serializer": "^6.4", - "symfony/validator": "^6.4" - }, - "require-dev": { - "nesbot/carbon": "^2", - "nette/php-generator": "^4.1", - "phpstan/phpstan": "^1.11", - "phpunit/phpunit": "^10.5", - "symfony/console": "^6.4" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "Invoiceninja\\Einvoice\\": "src/" - } - }, - "license": [ - "Elastic-2.0" - ], - "authors": [ - { - "name": "David Bomba", - "email": "turbo124@gmail.com" - } - ], - "description": "Schema for einvoicing standards", - "support": { - "source": "https://github.com/invoiceninja/einvoice/tree/main", - "issues": "https://github.com/invoiceninja/einvoice/issues" - }, - "time": "2024-05-22T07:45:24+00:00" - }, { "name": "invoiceninja/inspector", "version": "v2.0", @@ -6553,40 +6502,39 @@ }, { "name": "league/csv", - "version": "9.15.0", + "version": "9.16.0", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "fa7e2441c0bc9b2360f4314fd6c954f7ff40d435" + "reference": "998280c6c34bd67d8125fdc8b45bae28d761b440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/fa7e2441c0bc9b2360f4314fd6c954f7ff40d435", - "reference": "fa7e2441c0bc9b2360f4314fd6c954f7ff40d435", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/998280c6c34bd67d8125fdc8b45bae28d761b440", + "reference": "998280c6c34bd67d8125fdc8b45bae28d761b440", "shasum": "" }, "require": { "ext-filter": "*", - "ext-json": "*", - "ext-mbstring": "*", "php": "^8.1.2" }, "require-dev": { - "doctrine/collections": "^2.1.4", + "doctrine/collections": "^2.2.2", "ext-dom": "*", "ext-xdebug": "*", - "friendsofphp/php-cs-fixer": "^v3.22.0", + "friendsofphp/php-cs-fixer": "^3.57.1", "phpbench/phpbench": "^1.2.15", - "phpstan/phpstan": "^1.10.57", - "phpstan/phpstan-deprecation-rules": "^1.1.4", - "phpstan/phpstan-phpunit": "^1.3.15", - "phpstan/phpstan-strict-rules": "^1.5.2", - "phpunit/phpunit": "^10.5.9", - "symfony/var-dumper": "^6.4.2" + "phpstan/phpstan": "^1.11.1", + "phpstan/phpstan-deprecation-rules": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-strict-rules": "^1.6.0", + "phpunit/phpunit": "^10.5.16 || ^11.1.3", + "symfony/var-dumper": "^6.4.6 || ^7.0.7" }, "suggest": { "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", - "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters" + "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters", + "ext-mbstring": "Needed to ease transcoding CSV using mb stream filters" }, "type": "library", "extra": { @@ -6638,7 +6586,7 @@ "type": "github" } ], - "time": "2024-02-20T20:00:00+00:00" + "time": "2024-05-24T11:04:54+00:00" }, { "name": "league/flysystem", @@ -14634,166 +14582,6 @@ ], "time": "2024-04-18T09:22:46+00:00" }, - { - "name": "symfony/property-access", - "version": "v6.4.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "9174e2ec62563dfc15fbe84d1618613092e09d91" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/9174e2ec62563dfc15fbe84d1618613092e09d91", - "reference": "9174e2ec62563dfc15fbe84d1618613092e09d91", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/property-info": "^5.4|^6.0|^7.0" - }, - "require-dev": { - "symfony/cache": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides functions to read and write from/to an object or array using a simple string notation", - "homepage": "https://symfony.com", - "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property-path", - "reflection" - ], - "support": { - "source": "https://github.com/symfony/property-access/tree/v6.4.7" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-04-18T09:22:46+00:00" - }, - { - "name": "symfony/property-info", - "version": "v6.4.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-info.git", - "reference": "42778ca731b8796e02e237008f4ed871361ddfce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/42778ca731b8796e02e237008f4ed871361ddfce", - "reference": "42778ca731b8796e02e237008f4ed871361ddfce", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/string": "^5.4|^6.0|^7.0" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<5.2", - "phpdocumentor/type-resolver": "<1.5.1", - "symfony/dependency-injection": "<5.4", - "symfony/serializer": "<6.4" - }, - "require-dev": { - "phpdocumentor/reflection-docblock": "^5.2", - "phpstan/phpdoc-parser": "^1.0", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyInfo\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kévin Dunglas", - "email": "dunglas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Extracts information about PHP class' properties using metadata of popular sources", - "homepage": "https://symfony.com", - "keywords": [ - "doctrine", - "phpdoc", - "property", - "symfony", - "type", - "validator" - ], - "support": { - "source": "https://github.com/symfony/property-info/tree/v6.4.7" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-04-28T10:28:08+00:00" - }, { "name": "symfony/psr-http-message-bridge", "version": "v2.3.1", @@ -14966,104 +14754,6 @@ ], "time": "2024-04-18T09:22:46+00:00" }, - { - "name": "symfony/serializer", - "version": "v6.4.7", - "source": { - "type": "git", - "url": "https://github.com/symfony/serializer.git", - "reference": "73820ab43d12c2f29445080004054b0066082bf1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/73820ab43d12c2f29445080004054b0066082bf1", - "reference": "73820ab43d12c2f29445080004054b0066082bf1", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "doctrine/annotations": "<1.12", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<5.4", - "symfony/property-access": "<5.4", - "symfony/property-info": "<5.4.24|>=6,<6.2.11", - "symfony/uid": "<5.4", - "symfony/validator": "<6.4", - "symfony/yaml": "<5.4" - }, - "require-dev": { - "doctrine/annotations": "^1.12|^2", - "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", - "seld/jsonlint": "^1.10", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/filesystem": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4.26|^6.3|^7.0", - "symfony/property-info": "^5.4.24|^6.2.11|^7.0", - "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Serializer\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.7" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-04-23T09:00:49+00:00" - }, { "name": "symfony/service-contracts", "version": "v3.5.0", @@ -18163,16 +17853,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.1", + "version": "1.11.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "e524358f930e41a2b4cca1320e3b04fc26b39e0b" + "reference": "0d5d4294a70deb7547db655c47685d680e39cfec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/e524358f930e41a2b4cca1320e3b04fc26b39e0b", - "reference": "e524358f930e41a2b4cca1320e3b04fc26b39e0b", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0d5d4294a70deb7547db655c47685d680e39cfec", + "reference": "0d5d4294a70deb7547db655c47685d680e39cfec", "shasum": "" }, "require": { @@ -18217,7 +17907,7 @@ "type": "github" } ], - "time": "2024-05-15T08:00:59+00:00" + "time": "2024-05-24T13:23:04+00:00" }, { "name": "phpunit/php-code-coverage", @@ -18942,16 +18632,16 @@ }, { "name": "react/promise", - "version": "v3.1.0", + "version": "v3.2.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c" + "reference": "8a164643313c71354582dc850b42b33fa12a4b63" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", - "reference": "e563d55d1641de1dea9f5e84f3cccc66d2bfe02c", + "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", + "reference": "8a164643313c71354582dc850b42b33fa12a4b63", "shasum": "" }, "require": { @@ -19003,7 +18693,7 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.1.0" + "source": "https://github.com/reactphp/promise/tree/v3.2.0" }, "funding": [ { @@ -19011,7 +18701,7 @@ "type": "open_collective" } ], - "time": "2023-11-16T16:21:57+00:00" + "time": "2024-05-24T10:39:05+00:00" }, { "name": "react/socket", @@ -20649,8 +20339,7 @@ "minimum-stability": "dev", "stability-flags": { "socialiteproviders/apple": 20, - "webpatser/laravel-countries": 20, - "invoiceninja/einvoice": 20 + "webpatser/laravel-countries": 20 }, "prefer-stable": true, "prefer-lowest": false, diff --git a/tests/Feature/ReminderTest.php b/tests/Feature/ReminderTest.php index 8e4eed9909..cac4c33903 100644 --- a/tests/Feature/ReminderTest.php +++ b/tests/Feature/ReminderTest.php @@ -11,23 +11,24 @@ namespace Tests\Feature; +use Tests\TestCase; +use App\Models\User; +use App\Utils\Ninja; +use App\Models\Client; +use App\Models\Account; +use App\Models\Company; +use App\Models\Invoice; +use Tests\MockAccountData; +use App\Models\CompanyToken; +use App\Models\ClientContact; +use App\Jobs\Util\ReminderJob; +use Illuminate\Support\Carbon; +use App\Utils\Traits\MakesHash; use App\DataMapper\CompanySettings; use App\Factory\CompanyUserFactory; -use App\Jobs\Util\ReminderJob; -use App\Models\Account; -use App\Models\Client; -use App\Models\ClientContact; -use App\Models\Company; -use App\Models\CompanyToken; -use App\Models\Invoice; -use App\Models\User; -use App\Utils\Traits\MakesHash; use Illuminate\Database\Eloquent\Model; -use Illuminate\Foundation\Testing\DatabaseTransactions; use Illuminate\Routing\Middleware\ThrottleRequests; -use Illuminate\Support\Carbon; -use Tests\MockAccountData; -use Tests\TestCase; +use Illuminate\Foundation\Testing\DatabaseTransactions; /** * @test @@ -138,7 +139,8 @@ class ReminderTest extends TestCase 'is_primary' => 1, 'first_name' => 'john', 'last_name' => 'doe', - 'email' => 'john@doe.com' + 'email' => 'john@doe.com', + 'send_email' => true, ]); $this->invoice = Invoice::factory()->create([ @@ -180,32 +182,127 @@ class ReminderTest extends TestCase $settings->enable_reminder3 = true; $settings->enable_reminder_endless = true; $settings->schedule_reminder1 = 'after_invoice_date'; - $settings->schedule_reminder2 = 'after_invoice_date'; $settings->schedule_reminder3 = 'after_invoice_date'; $settings->num_days_reminder1 = 5; - $settings->num_days_reminder1 = 10; - $settings->num_days_reminder1 = 15; + $settings->num_days_reminder2 = 10; + $settings->num_days_reminder3 = 15; $settings->endless_reminder_frequency_id = '3'; $this->buildData($settings); - $this->travelTo(Carbon::parse('2024-03-01')->startOfDay()); - $this->invoice->status_id = 1; - $this->invoice->amount = 10; - $this->invoice->balance = 10; - $this->invoice->next_send_date = null; - $this->invoice->date = '2024-03-01'; - $this->invoice->last_sent_date = now(); - $this->invoice->reminder_last_sent = null; - $this->invoice->save(); + $invoice = Invoice::factory()->create([ + 'company_id' => $this->company->id, + 'user_id' => $this->user->id, + 'client_id' => $this->client->id, + 'amount' => 10, + 'balance' => 10, + 'date' => '2024-03-01', + 'number' => 'X-11-2024', + 'due_date' => null, + 'status_id' => 1, + 'last_sent_date' => '2024-03-01', + ]); - $this->invoice->service()->markSent()->save(); + //baseline checks pass + $invoice->service()->createInvitations()->markSent()->save(); + $this->assertGreaterThan(0, $invoice->balance); + $this->assertEquals(5, $this->invoice->company->settings->num_days_reminder1); + $this->assertEquals('2024-03-01', now()->format('Y-m-d')); + $this->assertEquals('2024-03-15', $invoice->due_date); + $this->assertEquals('2024-03-06', $invoice->next_send_date->format('Y-m-d')); - $this->assertEquals('2024-03-15', $this->invoice->due_date); + + $this->assertTrue( + $invoice->client->getSetting('send_reminders') && + (Ninja::isSelfHost() || $invoice->company->account->isPaidHostedClient()) + ); + + // //day five: schedule send time 7am UTC + $this->travelTo(now()->addDays(5)->startOfDay()); + $this->assertEquals('2024-03-06', now()->format('Y-m-d')); + + + $x = false; + do { + + $this->travelTo(now()->addHour()); + (new ReminderJob())->handle(); + $invoice = $invoice->fresh(); + + $x = (bool)$invoice->reminder1_sent; + } + while($x === false); + + + $this->assertNotNull($invoice->reminder_last_sent); + + //check next send date is on day "10" + $this->assertEquals(now()->addDays(5), $invoice->next_send_date); + + $this->travelTo(now()->copy()->addDays(5)->startOfDay()->addHours(5)); + $this->assertEquals('2024-03-11', now()->format('Y-m-d')); + + $this->travelTo(now()->copy()->addHour()); + (new ReminderJob())->handle(); + $invoice = $invoice->fresh(); + + $this->assertGreaterThan(0, $invoice->balance); + $this->assertNull($invoice->reminder2_sent); + + $this->travelTo(now()->copy()->addHour()); + (new ReminderJob())->handle(); + $invoice = $invoice->fresh(); + + $this->assertNotNull($invoice->reminder2_sent); + $this->assertEquals($invoice->reminder2_sent, $invoice->reminder_last_sent); + + $this->assertEquals(now()->addDays(5), $invoice->next_send_date); + + //check next send date is on day "15" + $this->assertEquals(now()->addDays(5), $invoice->next_send_date); + + $this->travelTo(now()->copy()->addDays(5)->startOfDay()->addHours(5)); + $this->assertEquals('2024-03-16', now()->format('Y-m-d')); + + $this->travelTo(now()->copy()->addHour()); + (new ReminderJob())->handle(); + $invoice = $invoice->fresh(); + + $this->assertGreaterThan(0, $invoice->balance); + $this->assertNull($invoice->reminder3_sent); + + $this->travelTo(now()->copy()->addHour()); + (new ReminderJob())->handle(); + $invoice = $invoice->fresh(); + + $this->assertNotNull($invoice->reminder3_sent); + $this->assertEquals($invoice->reminder3_sent, $invoice->reminder_last_sent); + + //endless reminders + $this->assertEquals(now()->addDays(14), $invoice->next_send_date); + + $this->travelTo(now()->addDays(14)->startOfDay()); + + $this->assertEquals('2024-03-30', now()->format('Y-m-d')); + + $x = false; + do { + + $this->travelTo(now()->addHour()); + (new ReminderJob())->handle(); + $invoice = $invoice->fresh(); + + $x = (bool)Carbon::parse($invoice->next_send_date)->gt(now()->addDays(2)); + + } while($x === false); + + nlog($invoice->toArray()); + + $this->assertEquals(now()->addDays(14), $invoice->next_send_date); }