diff --git a/app/Http/ValidationRules/Payment/ValidRefundableRequest.php b/app/Http/ValidationRules/Payment/ValidRefundableRequest.php index 9c28206a1a..b5459a548f 100644 --- a/app/Http/ValidationRules/Payment/ValidRefundableRequest.php +++ b/app/Http/ValidationRules/Payment/ValidRefundableRequest.php @@ -86,12 +86,12 @@ class ValidRefundableRequest implements Rule $paymentable_invoice = $payment->invoices->where('id', $invoice->id)->first(); if (! $paymentable_invoice) { - $this->error_msg = ctrans('texts.invoice_not_related_to_payment', ['invoice' => $invoice->hashed_id]); + $this->error_msg = ctrans('texts.invoice_not_related_to_payment', ['invoice' => $invoice->number]); return false; } } else { - $this->error_msg = ctrans('texts.invoice_not_related_to_payment', ['invoice' => $invoice->hashed_id]); + $this->error_msg = ctrans('texts.invoice_not_related_to_payment', ['invoice' => $invoice->number]); return false; } diff --git a/app/Http/ValidationRules/ValidRefundableInvoices.php b/app/Http/ValidationRules/ValidRefundableInvoices.php index 621634d9a2..67b8c9bcf6 100644 --- a/app/Http/ValidationRules/ValidRefundableInvoices.php +++ b/app/Http/ValidationRules/ValidRefundableInvoices.php @@ -63,7 +63,7 @@ class ValidRefundableInvoices implements Rule } else { return true; } - + foreach ($invoices as $invoice) { if (! $invoice->isRefundable()) { $this->error_msg = ctrans('texts.invoice_cannot_be_refunded', ['invoice' => $invoice->hashed_id]); @@ -75,7 +75,7 @@ class ValidRefundableInvoices implements Rule if ($val['invoice_id'] == $invoice->id) { $pivot_record = $payment->paymentables->where('paymentable_id', $invoice->id)->first(); - if ($val['amount'] > ($pivot_record->amount - $pivot_record->refunded)) { + if ($pivot_record && $val['amount'] > ($pivot_record->amount - $pivot_record->refunded)) { $this->error_msg = ctrans('texts.attempted_refund_failed', ['amount' => $val['amount'], 'refundable_amount' => ($pivot_record->amount - $pivot_record->refunded)]); return false; diff --git a/app/Services/Credit/CreditService.php b/app/Services/Credit/CreditService.php index 5a1141b7d7..aba2b6b723 100644 --- a/app/Services/Credit/CreditService.php +++ b/app/Services/Credit/CreditService.php @@ -91,7 +91,7 @@ class CreditService { if ((int) $this->credit->balance == 0) { $this->credit->status_id = Credit::STATUS_APPLIED; - } elseif ((string) $this->credit->amount == (string) $this->credit->balance) { + } elseif ((string) round($this->credit->amount, 2) == (string) round($this->credit->balance, 2)) { $this->credit->status_id = Credit::STATUS_SENT; } elseif ($this->credit->balance > 0) { $this->credit->status_id = Credit::STATUS_PARTIAL; diff --git a/app/Services/Payment/RefundPayment.php b/app/Services/Payment/RefundPayment.php index a58373f624..93f7da0cc6 100644 --- a/app/Services/Payment/RefundPayment.php +++ b/app/Services/Payment/RefundPayment.php @@ -33,6 +33,8 @@ class RefundPayment private string $refund_failed_message = ''; + private bool $refund_reversed_invoice = false; //handles reversal of invoices => refund payment => credits => client paid to date. + public function __construct(public Payment $payment, public array $refund_data) { } @@ -228,14 +230,21 @@ class RefundPayment foreach ($this->payment->credits as $paymentable_credit) { $available_credit = $paymentable_credit->pivot->amount - $paymentable_credit->pivot->refunded; + $multiplier = $paymentable_credit->invoice_id ? -1 : 1; //where this is a reversed invoice, we need to reverse the multiplier to avoid double counting the paid to date. + + if($paymentable_credit->invoice_id){ + $this->refund_reversed_invoice = true; + } + if ($available_credit > $amount_to_refund) { $paymentable_credit->pivot->refunded += $amount_to_refund; $paymentable_credit->pivot->save(); $paymentable_credit->service() ->setStatus(Credit::STATUS_SENT) - ->adjustBalance($amount_to_refund) - ->updatePaidToDate($amount_to_refund * -1) + ->adjustBalance($amount_to_refund * $multiplier) + ->updatePaidToDate(($amount_to_refund * -1) * $multiplier) + ->setCalculatedStatus() ->save(); @@ -248,8 +257,9 @@ class RefundPayment $paymentable_credit->service() ->setStatus(Credit::STATUS_SENT) - ->adjustBalance($available_credit) - ->updatePaidToDate($available_credit * -1) + ->adjustBalance($available_credit * $multiplier) + ->updatePaidToDate(($available_credit * -1) * $multiplier) + ->setCalculatedStatus() ->save(); $this->credits_used += $available_credit; @@ -324,7 +334,13 @@ class RefundPayment $client->restore(); } - $client->service()->updatePaidToDate(-1 * $this->total_refund)->save(); + if($this->refund_reversed_invoice){ + $net_refund = ($this->total_refund - $this->credits_used); + $client->service()->updatePaidToDate(-1 * $net_refund)->adjustCreditBalance($net_refund*-1)->save(); + } + else{ + $client->service()->updatePaidToDate(-1 * $this->total_refund)->save(); + } } return $this; diff --git a/composer.lock b/composer.lock index 8989f77a63..c7649a2db1 100644 --- a/composer.lock +++ b/composer.lock @@ -496,16 +496,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.337.3", + "version": "3.356.25", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "06dfc8f76423b49aaa181debd25bbdc724c346d6" + "reference": "d78bd3b221890aac679ec3b6cb5abcb01fd42699" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/06dfc8f76423b49aaa181debd25bbdc724c346d6", - "reference": "06dfc8f76423b49aaa181debd25bbdc724c346d6", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/d78bd3b221890aac679ec3b6cb5abcb01fd42699", + "reference": "d78bd3b221890aac679ec3b6cb5abcb01fd42699", "shasum": "" }, "require": { @@ -513,31 +513,30 @@ "ext-json": "*", "ext-pcre": "*", "ext-simplexml": "*", - "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", - "guzzlehttp/promises": "^1.4.0 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", - "mtdowling/jmespath.php": "^2.6", - "php": ">=7.2.5", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/promises": "^2.0", + "guzzlehttp/psr7": "^2.4.5", + "mtdowling/jmespath.php": "^2.8.0", + "php": ">=8.1", "psr/http-message": "^1.0 || ^2.0" }, "require-dev": { "andrewsville/php-token-reflection": "^1.4", "aws/aws-php-sns-message-validator": "~1.0", "behat/behat": "~3.0", - "composer/composer": "^1.10.22", + "composer/composer": "^2.7.8", "dms/phpunit-arraysubset-asserts": "^0.4.0", "doctrine/cache": "~1.4", "ext-dom": "*", "ext-openssl": "*", "ext-pcntl": "*", "ext-sockets": "*", - "nette/neon": "^2.3", - "paragonie/random_compat": ">= 2", "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", - "sebastian/comparator": "^1.2.3 || ^4.0", - "yoast/phpunit-polyfills": "^1.0" + "psr/cache": "^2.0 || ^3.0", + "psr/simple-cache": "^2.0 || ^3.0", + "sebastian/comparator": "^1.2.3 || ^4.0 || ^5.0", + "symfony/filesystem": "^v6.4.0 || ^v7.1.0", + "yoast/phpunit-polyfills": "^2.0" }, "suggest": { "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", @@ -586,11 +585,11 @@ "sdk" ], "support": { - "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", + "forum": "https://github.com/aws/aws-sdk-php/discussions", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.337.3" + "source": "https://github.com/aws/aws-sdk-php/tree/3.356.25" }, - "time": "2025-01-21T19:10:05+00:00" + "time": "2025-09-24T18:08:25+00:00" }, { "name": "babenkoivan/elastic-adapter", @@ -1650,16 +1649,16 @@ }, { "name": "dasprid/enum", - "version": "1.0.6", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/DASPRiD/Enum.git", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90" + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", "shasum": "" }, "require": { @@ -1694,9 +1693,9 @@ ], "support": { "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.6" + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" }, - "time": "2024-08-09T14:30:48+00:00" + "time": "2025-09-16T12:23:56+00:00" }, { "name": "dflydev/dot-access-data", @@ -2060,16 +2059,16 @@ }, { "name": "dompdf/dompdf", - "version": "v3.1.0", + "version": "v3.1.2", "source": { "type": "git", "url": "https://github.com/dompdf/dompdf.git", - "reference": "a51bd7a063a65499446919286fb18b518177155a" + "reference": "b3493e35d31a5e76ec24c3b64a29b0034b2f32a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dompdf/dompdf/zipball/a51bd7a063a65499446919286fb18b518177155a", - "reference": "a51bd7a063a65499446919286fb18b518177155a", + "url": "https://api.github.com/repos/dompdf/dompdf/zipball/b3493e35d31a5e76ec24c3b64a29b0034b2f32a6", + "reference": "b3493e35d31a5e76ec24c3b64a29b0034b2f32a6", "shasum": "" }, "require": { @@ -2118,9 +2117,9 @@ "homepage": "https://github.com/dompdf/dompdf", "support": { "issues": "https://github.com/dompdf/dompdf/issues", - "source": "https://github.com/dompdf/dompdf/tree/v3.1.0" + "source": "https://github.com/dompdf/dompdf/tree/v3.1.2" }, - "time": "2025-01-15T14:09:04+00:00" + "time": "2025-09-23T03:06:41+00:00" }, { "name": "dompdf/php-font-lib", @@ -3037,20 +3036,20 @@ }, { "name": "google/apiclient-services", - "version": "v0.411.0", + "version": "v0.413.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "3d616fcefdb8e6c598b2d007d4155fe516b91abd" + "reference": "8c8f936b85a50d658c50fbfd4331cfd5144c473f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/3d616fcefdb8e6c598b2d007d4155fe516b91abd", - "reference": "3d616fcefdb8e6c598b2d007d4155fe516b91abd", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/8c8f936b85a50d658c50fbfd4331cfd5144c473f", + "reference": "8c8f936b85a50d658c50fbfd4331cfd5144c473f", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "phpunit/phpunit": "^9.6" @@ -3075,29 +3074,29 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.411.0" + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.413.0" }, - "time": "2025-09-05T20:24:02+00:00" + "time": "2025-09-22T00:58:25+00:00" }, { "name": "google/auth", - "version": "v1.47.1", + "version": "v1.48.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "d7a0a215ec42ca0c8cb40e9ae0c5960aa9a024b7" + "reference": "3053a5bfe284538419d4fee8c9df148488db6d30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/d7a0a215ec42ca0c8cb40e9ae0c5960aa9a024b7", - "reference": "d7a0a215ec42ca0c8cb40e9ae0c5960aa9a024b7", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/3053a5bfe284538419d4fee8c9df148488db6d30", + "reference": "3053a5bfe284538419d4fee8c9df148488db6d30", "shasum": "" }, "require": { "firebase/php-jwt": "^6.0", "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.4.5", - "php": "^8.0", + "php": "^8.1", "psr/cache": "^2.0||^3.0", "psr/http-message": "^1.1||^2.0", "psr/log": "^3.0" @@ -3109,7 +3108,7 @@ "phpspec/prophecy-phpunit": "^2.1", "phpunit/phpunit": "^9.6", "sebastian/comparator": ">=1.2.3", - "squizlabs/php_codesniffer": "^3.5", + "squizlabs/php_codesniffer": "^4.0", "symfony/process": "^6.0||^7.0", "webmozart/assert": "^1.11" }, @@ -3136,9 +3135,9 @@ "support": { "docs": "https://cloud.google.com/php/docs/reference/auth/latest", "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.47.1" + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.48.0" }, - "time": "2025-07-09T15:26:02+00:00" + "time": "2025-09-16T22:09:18+00:00" }, { "name": "graham-campbell/result-type", @@ -5295,16 +5294,16 @@ }, { "name": "laravel/octane", - "version": "v2.12.1", + "version": "v2.12.3", "source": { "type": "git", "url": "https://github.com/laravel/octane.git", - "reference": "4ca38b90d76f31b8c1e27873316c2db34450151c" + "reference": "172e61d0b4dd9db263a59ff66213fa2d68f23dbf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/octane/zipball/4ca38b90d76f31b8c1e27873316c2db34450151c", - "reference": "4ca38b90d76f31b8c1e27873316c2db34450151c", + "url": "https://api.github.com/repos/laravel/octane/zipball/172e61d0b4dd9db263a59ff66213fa2d68f23dbf", + "reference": "172e61d0b4dd9db263a59ff66213fa2d68f23dbf", "shasum": "" }, "require": { @@ -5381,20 +5380,20 @@ "issues": "https://github.com/laravel/octane/issues", "source": "https://github.com/laravel/octane" }, - "time": "2025-07-25T15:03:05+00:00" + "time": "2025-09-23T13:39:52+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.6", + "version": "v0.3.7", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "86a8b692e8661d0fb308cec64f3d176821323077" + "reference": "a1891d362714bc40c8d23b0b1d7090f022ea27cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/86a8b692e8661d0fb308cec64f3d176821323077", - "reference": "86a8b692e8661d0fb308cec64f3d176821323077", + "url": "https://api.github.com/repos/laravel/prompts/zipball/a1891d362714bc40c8d23b0b1d7090f022ea27cc", + "reference": "a1891d362714bc40c8d23b0b1d7090f022ea27cc", "shasum": "" }, "require": { @@ -5411,8 +5410,8 @@ "illuminate/collections": "^10.0|^11.0|^12.0", "mockery/mockery": "^1.5", "pestphp/pest": "^2.3|^3.4", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-mockery": "^1.1" + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" }, "suggest": { "ext-pcntl": "Required for the spinner to be animated." @@ -5438,9 +5437,9 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.6" + "source": "https://github.com/laravel/prompts/tree/v0.3.7" }, - "time": "2025-07-07T14:17:42+00:00" + "time": "2025-09-19T13:47:56+00:00" }, { "name": "laravel/scout", @@ -5525,16 +5524,16 @@ }, { "name": "laravel/serializable-closure", - "version": "v2.0.4", + "version": "v2.0.5", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841" + "reference": "3832547db6e0e2f8bb03d4093857b378c66eceed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/b352cf0534aa1ae6b4d825d1e762e35d43f8a841", - "reference": "b352cf0534aa1ae6b4d825d1e762e35d43f8a841", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3832547db6e0e2f8bb03d4093857b378c66eceed", + "reference": "3832547db6e0e2f8bb03d4093857b378c66eceed", "shasum": "" }, "require": { @@ -5582,7 +5581,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2025-03-19T13:51:03+00:00" + "time": "2025-09-22T17:29:40+00:00" }, { "name": "laravel/slack-notification-channel", @@ -6178,16 +6177,16 @@ }, { "name": "league/csv", - "version": "9.24.1", + "version": "9.25.0", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "e0221a3f16aa2a823047d59fab5809d552e29bc8" + "reference": "f856f532866369fb1debe4e7c5a1db185f40ef86" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/e0221a3f16aa2a823047d59fab5809d552e29bc8", - "reference": "e0221a3f16aa2a823047d59fab5809d552e29bc8", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/f856f532866369fb1debe4e7c5a1db185f40ef86", + "reference": "f856f532866369fb1debe4e7c5a1db185f40ef86", "shasum": "" }, "require": { @@ -6203,7 +6202,7 @@ "phpstan/phpstan-deprecation-rules": "^1.2.1", "phpstan/phpstan-phpunit": "^1.4.2", "phpstan/phpstan-strict-rules": "^1.6.2", - "phpunit/phpunit": "^10.5.16 || ^11.5.22", + "phpunit/phpunit": "^10.5.16 || ^11.5.22 || ^12.3.6", "symfony/var-dumper": "^6.4.8 || ^7.3.0" }, "suggest": { @@ -6265,7 +6264,7 @@ "type": "github" } ], - "time": "2025-06-25T14:53:51+00:00" + "time": "2025-09-11T08:29:08+00:00" }, { "name": "league/flysystem", @@ -8518,20 +8517,20 @@ }, { "name": "open-telemetry/api", - "version": "1.5.0", + "version": "1.6.0", "source": { "type": "git", "url": "https://github.com/opentelemetry-php/api.git", - "reference": "7692075f486c14d8cfd37fba98a08a5667f089e5" + "reference": "ee17d937652eca06c2341b6fadc0f74c1c1a5af2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opentelemetry-php/api/zipball/7692075f486c14d8cfd37fba98a08a5667f089e5", - "reference": "7692075f486c14d8cfd37fba98a08a5667f089e5", + "url": "https://api.github.com/repos/opentelemetry-php/api/zipball/ee17d937652eca06c2341b6fadc0f74c1c1a5af2", + "reference": "ee17d937652eca06c2341b6fadc0f74c1c1a5af2", "shasum": "" }, "require": { - "open-telemetry/context": "^1.0", + "open-telemetry/context": "^1.4", "php": "^8.1", "psr/log": "^1.1|^2.0|^3.0", "symfony/polyfill-php82": "^1.26" @@ -8584,20 +8583,20 @@ "issues": "https://github.com/open-telemetry/opentelemetry-php/issues", "source": "https://github.com/open-telemetry/opentelemetry-php" }, - "time": "2025-08-07T23:07:38+00:00" + "time": "2025-09-19T00:05:49+00:00" }, { "name": "open-telemetry/context", - "version": "1.3.1", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/opentelemetry-php/context.git", - "reference": "438f71812242db3f196fb4c717c6f92cbc819be6" + "reference": "d4c4470b541ce72000d18c339cfee633e4c8e0cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opentelemetry-php/context/zipball/438f71812242db3f196fb4c717c6f92cbc819be6", - "reference": "438f71812242db3f196fb4c717c6f92cbc819be6", + "url": "https://api.github.com/repos/opentelemetry-php/context/zipball/d4c4470b541ce72000d18c339cfee633e4c8e0cf", + "reference": "d4c4470b541ce72000d18c339cfee633e4c8e0cf", "shasum": "" }, "require": { @@ -8643,28 +8642,30 @@ "issues": "https://github.com/open-telemetry/opentelemetry-php/issues", "source": "https://github.com/open-telemetry/opentelemetry-php" }, - "time": "2025-08-13T01:12:00+00:00" + "time": "2025-09-19T00:05:49+00:00" }, { "name": "paragonie/constant_time_encoding", - "version": "v3.0.0", + "version": "v3.1.3", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", + "reference": "d5b01a39b3415c2cd581d3bd3a3575c1ebbd8e77", "shasum": "" }, "require": { "php": "^8" }, "require-dev": { - "phpunit/phpunit": "^9", - "vimeo/psalm": "^4|^5" + "infection/infection": "^0", + "nikic/php-fuzzer": "^0", + "phpunit/phpunit": "^9|^10|^11", + "vimeo/psalm": "^4|^5|^6" }, "type": "library", "autoload": { @@ -8710,7 +8711,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2024-05-08T12:36:18+00:00" + "time": "2025-09-24T15:06:41+00:00" }, { "name": "paragonie/random_compat", @@ -8764,16 +8765,16 @@ }, { "name": "paragonie/sodium_compat", - "version": "v2.1.0", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/paragonie/sodium_compat.git", - "reference": "a673d5f310477027cead2e2f2b6db5d8368157cb" + "reference": "9c3535883f1b60b5d26aeae5914bbec61132ad7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/a673d5f310477027cead2e2f2b6db5d8368157cb", - "reference": "a673d5f310477027cead2e2f2b6db5d8368157cb", + "url": "https://api.github.com/repos/paragonie/sodium_compat/zipball/9c3535883f1b60b5d26aeae5914bbec61132ad7f", + "reference": "9c3535883f1b60b5d26aeae5914bbec61132ad7f", "shasum": "" }, "require": { @@ -8781,8 +8782,10 @@ "php-64bit": "*" }, "require-dev": { - "phpunit/phpunit": "^7|^8|^9", - "vimeo/psalm": "^4|^5" + "infection/infection": "^0", + "nikic/php-fuzzer": "^0", + "phpunit/phpunit": "^7|^8|^9|^10|^11", + "vimeo/psalm": "^4|^5|^6" }, "suggest": { "ext-sodium": "Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." @@ -8796,7 +8799,10 @@ "autoload": { "files": [ "autoload.php" - ] + ], + "psr-4": { + "ParagonIE\\Sodium\\": "namespaced/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8849,9 +8855,9 @@ ], "support": { "issues": "https://github.com/paragonie/sodium_compat/issues", - "source": "https://github.com/paragonie/sodium_compat/tree/v2.1.0" + "source": "https://github.com/paragonie/sodium_compat/tree/v2.2.0" }, - "time": "2024-09-04T12:51:01+00:00" + "time": "2025-09-21T18:27:14+00:00" }, { "name": "payfast/payfast-php-sdk", @@ -10433,16 +10439,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.10", + "version": "v0.12.12", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22" + "reference": "cd23863404a40ccfaf733e3af4db2b459837f7e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6e80abe6f2257121f1eb9a4c55bf29d921025b22", - "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/cd23863404a40ccfaf733e3af4db2b459837f7e7", + "reference": "cd23863404a40ccfaf733e3af4db2b459837f7e7", "shasum": "" }, "require": { @@ -10505,9 +10511,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.10" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.12" }, - "time": "2025-08-04T12:39:37+00:00" + "time": "2025-09-20T13:46:31+00:00" }, { "name": "pusher/pusher-php-server", @@ -10572,16 +10578,16 @@ }, { "name": "quickbooks/v3-php-sdk", - "version": "v6.2.0", + "version": "v6.2.1", "source": { "type": "git", "url": "https://github.com/intuit/QuickBooks-V3-PHP-SDK.git", - "reference": "0c28bc3c45df1460b1be3280e58475e030a00ba7" + "reference": "5e4cafc5d19f4e2a1cba5ef3c22b34fe5a52d930" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/intuit/QuickBooks-V3-PHP-SDK/zipball/0c28bc3c45df1460b1be3280e58475e030a00ba7", - "reference": "0c28bc3c45df1460b1be3280e58475e030a00ba7", + "url": "https://api.github.com/repos/intuit/QuickBooks-V3-PHP-SDK/zipball/5e4cafc5d19f4e2a1cba5ef3c22b34fe5a52d930", + "reference": "5e4cafc5d19f4e2a1cba5ef3c22b34fe5a52d930", "shasum": "" }, "require": { @@ -10626,9 +10632,9 @@ ], "support": { "issues": "https://github.com/intuit/QuickBooks-V3-PHP-SDK/issues", - "source": "https://github.com/intuit/QuickBooks-V3-PHP-SDK/tree/v6.2.0" + "source": "https://github.com/intuit/QuickBooks-V3-PHP-SDK/tree/v6.2.1" }, - "time": "2025-01-16T06:51:15+00:00" + "time": "2025-09-22T05:32:32+00:00" }, { "name": "ralouphie/getallheaders", @@ -11177,16 +11183,16 @@ }, { "name": "sentry/sentry", - "version": "4.15.2", + "version": "4.16.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "61a2d918e8424b6de4a2e265c15133a00c17db51" + "reference": "c5b086e4235762da175034bc463b0d31cbb38d2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/61a2d918e8424b6de4a2e265c15133a00c17db51", - "reference": "61a2d918e8424b6de4a2e265c15133a00c17db51", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/c5b086e4235762da175034bc463b0d31cbb38d2e", + "reference": "c5b086e4235762da175034bc463b0d31cbb38d2e", "shasum": "" }, "require": { @@ -11250,7 +11256,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.15.2" + "source": "https://github.com/getsentry/sentry-php/tree/4.16.0" }, "funding": [ { @@ -11262,20 +11268,20 @@ "type": "custom" } ], - "time": "2025-09-03T07:23:48+00:00" + "time": "2025-09-22T13:38:03+00:00" }, { "name": "sentry/sentry-laravel", - "version": "4.15.3", + "version": "4.16.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "c3f71a83e8b3a1451e811199d145e864519cecc1" + "reference": "b33b2e487b02db02d92988228f142d7fa2be2bfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/c3f71a83e8b3a1451e811199d145e864519cecc1", - "reference": "c3f71a83e8b3a1451e811199d145e864519cecc1", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/b33b2e487b02db02d92988228f142d7fa2be2bfa", + "reference": "b33b2e487b02db02d92988228f142d7fa2be2bfa", "shasum": "" }, "require": { @@ -11339,7 +11345,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/4.15.3" + "source": "https://github.com/getsentry/sentry-laravel/tree/4.16.0" }, "funding": [ { @@ -11351,7 +11357,7 @@ "type": "custom" } ], - "time": "2025-09-04T14:37:41+00:00" + "time": "2025-09-10T16:38:18+00:00" }, { "name": "setasign/fpdf", @@ -18084,16 +18090,16 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.87.1", + "version": "v3.88.0", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "2f5170365e2a422d0c5421f9c8818b2c078105f6" + "reference": "f23469674ae50d40e398bfff8018911a2a2b0dbe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2f5170365e2a422d0c5421f9c8818b2c078105f6", - "reference": "2f5170365e2a422d0c5421f9c8818b2c078105f6", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/f23469674ae50d40e398bfff8018911a2a2b0dbe", + "reference": "f23469674ae50d40e398bfff8018911a2a2b0dbe", "shasum": "" }, "require": { @@ -18120,12 +18126,13 @@ "symfony/polyfill-mbstring": "^1.33", "symfony/polyfill-php80": "^1.33", "symfony/polyfill-php81": "^1.33", + "symfony/polyfill-php84": "^1.33", "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2", "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0" }, "require-dev": { "facile-it/paraunit": "^1.3.1 || ^2.7", - "infection/infection": "^0.29.14", + "infection/infection": "^0.31.0", "justinrainbow/json-schema": "^6.5", "keradus/cli-executor": "^2.2", "mikey179/vfsstream": "^1.6.12", @@ -18133,7 +18140,6 @@ "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34", - "symfony/polyfill-php84": "^1.33", "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2", "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2" }, @@ -18176,7 +18182,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.87.1" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.88.0" }, "funding": [ { @@ -18184,7 +18190,7 @@ "type": "github" } ], - "time": "2025-09-02T15:27:36+00:00" + "time": "2025-09-24T21:31:42+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -18801,16 +18807,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.28", + "version": "1.12.31", "source": { "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "fcf8b71aeab4e1a1131d1783cef97b23a51b87a9" + "url": "https://github.com/phpstan/phpstan-phar-composer-source.git", + "reference": "git1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/fcf8b71aeab4e1a1131d1783cef97b23a51b87a9", - "reference": "fcf8b71aeab4e1a1131d1783cef97b23a51b87a9", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/a7630bb5311a41d13a2364634c78c5f4da250d53", + "reference": "a7630bb5311a41d13a2364634c78c5f4da250d53", "shasum": "" }, "require": { @@ -18855,7 +18861,7 @@ "type": "github" } ], - "time": "2025-07-17T17:15:39+00:00" + "time": "2025-09-24T15:58:55+00:00" }, { "name": "phpunit/php-code-coverage", @@ -19194,16 +19200,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.5.36", + "version": "11.5.41", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "264a87c7ef68b1ab9af7172357740dc266df5957" + "reference": "b42782bcb947d2c197aea42ce9714ee2d974b283" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/264a87c7ef68b1ab9af7172357740dc266df5957", - "reference": "264a87c7ef68b1ab9af7172357740dc266df5957", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/b42782bcb947d2c197aea42ce9714ee2d974b283", + "reference": "b42782bcb947d2c197aea42ce9714ee2d974b283", "shasum": "" }, "require": { @@ -19227,7 +19233,7 @@ "sebastian/comparator": "^6.3.2", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.1", - "sebastian/exporter": "^6.3.0", + "sebastian/exporter": "^6.3.2", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", "sebastian/type": "^5.1.3", @@ -19275,7 +19281,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.36" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.41" }, "funding": [ { @@ -19299,7 +19305,7 @@ "type": "tidelift" } ], - "time": "2025-09-03T06:24:17+00:00" + "time": "2025-09-24T06:32:10+00:00" }, { "name": "react/cache", @@ -20292,16 +20298,16 @@ }, { "name": "sebastian/exporter", - "version": "6.3.0", + "version": "6.3.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", - "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/70a298763b40b213ec087c51c739efcaa90bcd74", + "reference": "70a298763b40b213ec087c51c739efcaa90bcd74", "shasum": "" }, "require": { @@ -20315,7 +20321,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "6.3-dev" } }, "autoload": { @@ -20358,15 +20364,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-12-05T09:17:50+00:00" + "time": "2025-09-24T06:12:51+00:00" }, { "name": "sebastian/global-state", diff --git a/lang/en/texts.php b/lang/en/texts.php index ad94a36fa7..d178c914ba 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -3928,8 +3928,8 @@ $lang = array( 'invoice_number_taken' => 'Invoice number already taken', 'payment_id_required' => 'Payment `id` required.', 'unable_to_retrieve_payment' => 'Unable to retrieve specified payment', - 'invoice_not_related_to_payment' => 'Invoice id :invoice is not related to this payment', - 'credit_not_related_to_payment' => 'Credit id :credit is not related to this payment', + 'invoice_not_related_to_payment' => 'Invoice # :invoice is not related to this payment', + 'credit_not_related_to_payment' => 'Credit # :credit is not related to this payment', 'max_refundable_invoice' => 'Attempting to refund more than allowed for invoice id :invoice, maximum refundable amount is :amount', 'refund_without_invoices' => 'Attempting to refund a payment with invoices attached, please specify valid invoice/s to be refunded.', 'refund_without_credits' => 'Attempting to refund a payment with credits attached, please specify valid credits/s to be refunded.',