Merge pull request #10743 from turbo124/v5-develop

v5.11.52
This commit is contained in:
David Bomba 2025-03-08 10:36:41 +11:00 committed by GitHub
commit 4fb1b29db0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
24 changed files with 439 additions and 211 deletions

View File

@ -1 +1 @@
5.11.51
5.11.52

View File

@ -568,6 +568,7 @@ class CheckData extends Command
});
}
//@deprecated
private function clientCreditPaymentables($client)
{
$results = \DB::select("
@ -587,6 +588,28 @@ class CheckData extends Command
return $results;
}
private function clientCreditPaymentablesNew($client)
{
$results = \DB::select("
SELECT
SUM(paymentables.amount - paymentables.refunded) as credit_payment
FROM payments
LEFT JOIN paymentables
ON
payments.id = paymentables.payment_id
WHERE paymentable_type = 'invoices'
AND paymentables.deleted_at is NULL
AND paymentables.amount > 0
AND payments.is_deleted = 0
AND payments.client_id = ?;
", [$client->id]);
return $results;
}
private function checkPaidToDatesNew()
{
$clients_to_check = $this->clientPaidToDateQuery();
@ -598,9 +621,12 @@ class CheckData extends Command
$credits_from_reversal = Credit::withTrashed()->where('client_id', $client->id)->where('is_deleted', 0)->whereNotNull('invoice_id')->sum('amount');
$credits_used_for_payments = $this->clientCreditPaymentables($client);
// $credits_used_for_payments = $this->clientCreditPaymentables($client);
// $total_paid_to_date = $_client->payments_applied + $credits_used_for_payments[0]->credit_payment - $credits_from_reversal;
$total_paid_to_date = $_client->payments_applied + $credits_used_for_payments[0]->credit_payment - $credits_from_reversal;
//2025-03-06 - new method
$credits_used_for_payments = $this->clientCreditPaymentablesNew($client);
$total_paid_to_date = $credits_used_for_payments[0]->credit_payment;
if (round($total_paid_to_date, 2) != round($_client->client_paid_to_date, 2)) {
$this->wrong_paid_to_dates++;

View File

@ -98,6 +98,7 @@ class AccountTransformer implements AccountTransformerInterface
$dataset = $account->dataset[0];
$status = false;
$update = false;
$update_eligible = $dataset->updateEligibility ?? '';
match($dataset->additionalStatus ?? '') {
'LOGIN_IN_PROGRESS' => $status = 'Data retrieval in progress.',
@ -118,8 +119,8 @@ class AccountTransformer implements AccountTransformerInterface
$account_status = $status;
}
match($dataset->updateEligibility ?? '') {
'ALLOW_UPDATE' => $update = 'Account connection stable.',
match($update_eligible) {
'ALLOW_UPDATE' => $update = "Account connection stable. Next Update @ {$dataset->nextUpdateScheduled}",
'ALLOW_UPDATE_WITH_CREDENTIALS' => $update = 'Please reconnect your account with updated credentials.',
'DISALLOW_UPDATE' => $update = 'Update not available due to technical issues.',
default => $update = false,
@ -146,6 +147,7 @@ class AccountTransformer implements AccountTransformerInterface
'nickname' => property_exists($account, 'nickname') ? $account->nickname : '',
'current_balance' => $current_balance,
'account_currency' => $account_currency,
'disabled_upstream' => $update_eligible == 'ALLOW_UPDATE' ? false : true,
];
}
}

View File

@ -260,7 +260,8 @@ class BankIntegrationController extends BaseController
$bank_integration->balance = $account['current_balance'];
$bank_integration->currency = $account['account_currency'];
$bank_integration->auto_sync = true;
$bank_integration->disabled_upstream = $account['account_status'] == 'READY' ? false : true;
$bank_integration->save();
}
}
@ -278,7 +279,15 @@ class BankIntegrationController extends BaseController
$is_account_active = $nordigen->isAccountActive($bank_integration->nordigen_account_id);
$account = $nordigen->getAccount($bank_integration->nordigen_account_id);
if (!$is_account_active || !$account || isset($account['requisition'])) {
if(is_array($account) && !in_array($account['account_status'], ['READY', 'PROCESSING','DISCOVERED'])) {
$bank_integration->disabled_upstream = true;
$bank_integration->save();
$nordigen->disabledAccountEmail($bank_integration);
return;
}
elseif (!$is_account_active || !$account || isset($account['requisition'])) {
$bank_integration->disabled_upstream = true;
$bank_integration->save();

View File

@ -29,7 +29,9 @@ class ChartController extends BaseController
{
/** @var \App\Models\User auth()->user() */
$user = auth()->user();
$cs = new ChartService($user->company(), $user, $user->isAdmin());
$admin_equivalent_permissions = $user->isAdmin() || $user->hasExactPermissionAndAll('view_all') || $user->hasExactPermissionAndAll('edit_all');
$cs = new ChartService($user->company(), $user, $admin_equivalent_permissions);
return response()->json($cs->totals($request->input('start_date'), $request->input('end_date')), 200);
}
@ -39,7 +41,9 @@ class ChartController extends BaseController
/** @var \App\Models\User auth()->user() */
$user = auth()->user();
$cs = new ChartService($user->company(), $user, $user->isAdmin());
$admin_equivalent_permissions = $user->isAdmin() || $user->hasExactPermissionAndAll('view_all') || $user->hasExactPermissionAndAll('edit_all');
$cs = new ChartService($user->company(), $user, $admin_equivalent_permissions);
return response()->json($cs->chart_summary($request->input('start_date'), $request->input('end_date')), 200);
}
@ -51,7 +55,9 @@ class ChartController extends BaseController
{
/** @var \App\Models\User auth()->user() */
$user = auth()->user();
$cs = new ChartService($user->company(), $user, $user->isAdmin());
$admin_equivalent_permissions = $user->isAdmin() || $user->hasExactPermissionAndAll('view_all') || $user->hasExactPermissionAndAll('edit_all');
$cs = new ChartService($user->company(), $user, $admin_equivalent_permissions);
return response()->json($cs->totals($request->input('start_date'), $request->input('end_date')), 200);
}
@ -61,7 +67,9 @@ class ChartController extends BaseController
/** @var \App\Models\User auth()->user() */
$user = auth()->user();
$cs = new ChartService($user->company(), $user, $user->isAdmin());
$admin_equivalent_permissions = $user->isAdmin() || $user->hasExactPermissionAndAll('view_all') || $user->hasExactPermissionAndAll('edit_all');
$cs = new ChartService($user->company(), $user, $admin_equivalent_permissions);
return response()->json($cs->chart_summary($request->input('start_date'), $request->input('end_date')), 200);
}
@ -71,7 +79,9 @@ class ChartController extends BaseController
/** @var \App\Models\User auth()->user() */
$user = auth()->user();
$cs = new ChartService($user->company(), $user, $user->isAdmin());
$admin_equivalent_permissions = $user->isAdmin() || $user->hasExactPermissionAndAll('view_all') || $user->hasExactPermissionAndAll('edit_all');
$cs = new ChartService($user->company(), $user, $admin_equivalent_permissions);
$result = $cs->getCalculatedField($request->all());
return response()->json($result, 200);

View File

@ -342,7 +342,8 @@ class MatchBankTransactions implements ShouldQueue
$payment = PaymentFactory::create($this->invoice->company_id, $this->invoice->user_id);
$payment->amount = $this->bt->amount;
$payment->applied = $this->applied_amount;
$payment->applied = min($this->bt->amount, $this->applied_amount);
// $payment->applied = $this->applied_amount;
$payment->status_id = Payment::STATUS_COMPLETED;
$payment->client_id = $this->invoice->client_id;
$payment->transaction_reference = $this->bt->description;
@ -380,7 +381,7 @@ class MatchBankTransactions implements ShouldQueue
$this->invoice
->client
->service()
->updateBalanceAndPaidToDate($this->applied_amount * -1, $amount)
->updateBalanceAndPaidToDate(min($this->bt->amount, $this->applied_amount) * -1, $amount)
->save();
$this->invoice = $this->invoice

View File

@ -115,6 +115,7 @@ class ProcessBankTransactionsYodlee implements ShouldQueue
$this->bank_integration->balance = $account[0]['current_balance'];
$this->bank_integration->currency = $account[0]['account_currency'];
$this->bank_integration->bank_account_status = $account[0]['account_status'];
$this->bank_integration->disabled_upstream = $account[0]['disabled_upstream'];
$this->bank_integration->save();
}

View File

@ -322,7 +322,7 @@ class Client extends BaseModel implements HasLocalePreference
public function locations(): \Illuminate\Database\Eloquent\Relations\HasMany
{
return $this->hasMany(Location::class)->withTrashed();
return $this->hasMany(Location::class);
}
/**

View File

@ -56,6 +56,13 @@ class BaseDriver extends AbstractPaymentDriver
/* The Invitation */
public $invitation;
/**
* Indicates if returning responses should be headless or classic redirect.
*
* @var bool
*/
public bool $headless = false;
/**
* The Client
*
@ -173,6 +180,13 @@ class BaseDriver extends AbstractPaymentDriver
return $fields;
}
public function setHeadless($headless): self
{
$this->headless = $headless;
return $this;
}
/**
* Authorize a payment method.
*

View File

@ -107,13 +107,6 @@ class StripePaymentDriver extends BaseDriver implements SupportsHeadlessInterfac
public const SYSTEM_LOG_TYPE = SystemLog::TYPE_STRIPE;
/**
* Indicates if returning responses should be headless or classic redirect.
*
* @var bool
*/
public bool $headless = false;
/**
* Initializes the Stripe API.
* @return self

View File

@ -13,6 +13,7 @@ namespace App\Services\Invoice;
use App\Events\Invoice\InvoiceWasDeleted;
use App\Jobs\Inventory\AdjustProductInventory;
use App\Models\Credit;
use App\Models\Invoice;
use App\Models\Quote;
use App\Services\AbstractService;
@ -199,6 +200,16 @@ class MarkInvoiceDeleted extends AbstractService
->where('paymentable_type', '=', 'invoices')
->where('paymentable_id', $this->invoice->id)
->update(['deleted_at' => now()]);
$pp = \App\Models\Paymentable::where('payment_id', $payment->id)
->where('paymentable_type', \App\Models\Credit::class)
->where('amount', $this->invoice->amount)
->first();
if($pp) {
$pp->delete();
}
});
return $this;

View File

@ -222,6 +222,11 @@
{
"type": "vcs",
"url": "https://github.com/turbo124/snappdf"
},
{
"type": "path",
"url": "../admin-api"
}
],
"minimum-stability": "dev",

253
composer.lock generated
View File

@ -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": "c787e27ea4b2220592271d03e13cbcd3",
"content-hash": "2937b569c924dcc633b94288887c722c",
"packages": [
{
"name": "adrienrn/php-mimetyper",
@ -101,16 +101,16 @@
},
{
"name": "apimatic/core",
"version": "0.3.13",
"version": "0.3.14",
"source": {
"type": "git",
"url": "https://github.com/apimatic/core-lib-php.git",
"reference": "944678aa7017457daacd9750b96962fb693ea81a"
"reference": "c3eaad6cf0c00b793ce6d9bee8b87176247da582"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/apimatic/core-lib-php/zipball/944678aa7017457daacd9750b96962fb693ea81a",
"reference": "944678aa7017457daacd9750b96962fb693ea81a",
"url": "https://api.github.com/repos/apimatic/core-lib-php/zipball/c3eaad6cf0c00b793ce6d9bee8b87176247da582",
"reference": "c3eaad6cf0c00b793ce6d9bee8b87176247da582",
"shasum": ""
},
"require": {
@ -149,9 +149,9 @@
],
"support": {
"issues": "https://github.com/apimatic/core-lib-php/issues",
"source": "https://github.com/apimatic/core-lib-php/tree/0.3.13"
"source": "https://github.com/apimatic/core-lib-php/tree/0.3.14"
},
"time": "2024-12-18T08:29:12+00:00"
"time": "2025-02-27T06:03:30+00:00"
},
{
"name": "apimatic/core-interfaces",
@ -960,16 +960,16 @@
},
{
"name": "braintree/braintree_php",
"version": "6.23.0",
"version": "6.24.0",
"source": {
"type": "git",
"url": "https://github.com/braintree/braintree_php.git",
"reference": "f50b8b95c6cd25bebddc2e411236e823f01f6f3a"
"reference": "8b5b96630106aff5c6564ace13bddb123ff68891"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/braintree/braintree_php/zipball/f50b8b95c6cd25bebddc2e411236e823f01f6f3a",
"reference": "f50b8b95c6cd25bebddc2e411236e823f01f6f3a",
"url": "https://api.github.com/repos/braintree/braintree_php/zipball/8b5b96630106aff5c6564ace13bddb123ff68891",
"reference": "8b5b96630106aff5c6564ace13bddb123ff68891",
"shasum": ""
},
"require": {
@ -1003,22 +1003,22 @@
"description": "Braintree PHP Client Library",
"support": {
"issues": "https://github.com/braintree/braintree_php/issues",
"source": "https://github.com/braintree/braintree_php/tree/6.23.0"
"source": "https://github.com/braintree/braintree_php/tree/6.24.0"
},
"time": "2025-01-29T20:51:22+00:00"
"time": "2025-02-28T18:43:37+00:00"
},
{
"name": "brick/math",
"version": "0.12.2",
"version": "0.12.3",
"source": {
"type": "git",
"url": "https://github.com/brick/math.git",
"reference": "901eddb1e45a8e0f689302e40af871c181ecbe40"
"reference": "866551da34e9a618e64a819ee1e01c20d8a588ba"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/brick/math/zipball/901eddb1e45a8e0f689302e40af871c181ecbe40",
"reference": "901eddb1e45a8e0f689302e40af871c181ecbe40",
"url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba",
"reference": "866551da34e9a618e64a819ee1e01c20d8a588ba",
"shasum": ""
},
"require": {
@ -1057,7 +1057,7 @@
],
"support": {
"issues": "https://github.com/brick/math/issues",
"source": "https://github.com/brick/math/tree/0.12.2"
"source": "https://github.com/brick/math/tree/0.12.3"
},
"funding": [
{
@ -1065,7 +1065,7 @@
"type": "github"
}
],
"time": "2025-02-26T10:21:45+00:00"
"time": "2025-02-28T13:11:00+00:00"
},
{
"name": "btcpayserver/btcpayserver-greenfield-php",
@ -1326,16 +1326,16 @@
},
{
"name": "composer/ca-bundle",
"version": "1.5.5",
"version": "1.5.6",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
"reference": "08c50d5ec4c6ced7d0271d2862dec8c1033283e6"
"reference": "f65c239c970e7f072f067ab78646e9f0b2935175"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/08c50d5ec4c6ced7d0271d2862dec8c1033283e6",
"reference": "08c50d5ec4c6ced7d0271d2862dec8c1033283e6",
"url": "https://api.github.com/repos/composer/ca-bundle/zipball/f65c239c970e7f072f067ab78646e9f0b2935175",
"reference": "f65c239c970e7f072f067ab78646e9f0b2935175",
"shasum": ""
},
"require": {
@ -1382,7 +1382,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
"source": "https://github.com/composer/ca-bundle/tree/1.5.5"
"source": "https://github.com/composer/ca-bundle/tree/1.5.6"
},
"funding": [
{
@ -1398,7 +1398,7 @@
"type": "tidelift"
}
],
"time": "2025-01-08T16:17:16+00:00"
"time": "2025-03-06T14:30:56+00:00"
},
{
"name": "composer/pcre",
@ -1665,16 +1665,16 @@
},
{
"name": "doctrine/dbal",
"version": "4.2.2",
"version": "4.2.3",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "19a2b7deb5fe8c2df0ff817ecea305e50acb62ec"
"reference": "33d2d7fe1269b2301640c44cf2896ea607b30e3e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/19a2b7deb5fe8c2df0ff817ecea305e50acb62ec",
"reference": "19a2b7deb5fe8c2df0ff817ecea305e50acb62ec",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/33d2d7fe1269b2301640c44cf2896ea607b30e3e",
"reference": "33d2d7fe1269b2301640c44cf2896ea607b30e3e",
"shasum": ""
},
"require": {
@ -1751,7 +1751,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
"source": "https://github.com/doctrine/dbal/tree/4.2.2"
"source": "https://github.com/doctrine/dbal/tree/4.2.3"
},
"funding": [
{
@ -1767,7 +1767,7 @@
"type": "tidelift"
}
],
"time": "2025-01-16T08:40:56+00:00"
"time": "2025-03-07T18:29:05+00:00"
},
{
"name": "doctrine/deprecations",
@ -5158,16 +5158,16 @@
},
{
"name": "laravel/framework",
"version": "v11.44.0",
"version": "v11.44.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
"reference": "e9a33da34815ac1ed46c7e4c477a775f4592f0a7"
"reference": "0883d4175f4e2b5c299e7087ad3c74f2ce195c6d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/framework/zipball/e9a33da34815ac1ed46c7e4c477a775f4592f0a7",
"reference": "e9a33da34815ac1ed46c7e4c477a775f4592f0a7",
"url": "https://api.github.com/repos/laravel/framework/zipball/0883d4175f4e2b5c299e7087ad3c74f2ce195c6d",
"reference": "0883d4175f4e2b5c299e7087ad3c74f2ce195c6d",
"shasum": ""
},
"require": {
@ -5275,7 +5275,7 @@
"league/flysystem-read-only": "^3.25.1",
"league/flysystem-sftp-v3": "^3.25.1",
"mockery/mockery": "^1.6.10",
"orchestra/testbench-core": "^9.9.4",
"orchestra/testbench-core": "^9.11.2",
"pda/pheanstalk": "^5.0.6",
"php-http/discovery": "^1.15",
"phpstan/phpstan": "^2.0",
@ -5369,7 +5369,7 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
"time": "2025-02-24T13:08:54+00:00"
"time": "2025-03-05T15:34:10+00:00"
},
{
"name": "laravel/octane",
@ -6256,16 +6256,16 @@
},
{
"name": "league/csv",
"version": "9.21.0",
"version": "9.22.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/csv.git",
"reference": "72196d11ebba22d868954cb39c0c7346207430cc"
"reference": "afc109aa11f3086b8be8dfffa04ac31480b36b76"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/csv/zipball/72196d11ebba22d868954cb39c0c7346207430cc",
"reference": "72196d11ebba22d868954cb39c0c7346207430cc",
"url": "https://api.github.com/repos/thephpleague/csv/zipball/afc109aa11f3086b8be8dfffa04ac31480b36b76",
"reference": "afc109aa11f3086b8be8dfffa04ac31480b36b76",
"shasum": ""
},
"require": {
@ -6275,19 +6275,23 @@
"require-dev": {
"ext-dom": "*",
"ext-xdebug": "*",
"friendsofphp/php-cs-fixer": "^3.64.0",
"phpbench/phpbench": "^1.3.1",
"phpstan/phpstan": "^1.12.11",
"friendsofphp/php-cs-fixer": "^3.69.0",
"phpbench/phpbench": "^1.4.0",
"phpstan/phpstan": "^1.12.18",
"phpstan/phpstan-deprecation-rules": "^1.2.1",
"phpstan/phpstan-phpunit": "^1.4.1",
"phpstan/phpstan-strict-rules": "^1.6.1",
"phpunit/phpunit": "^10.5.16 || ^11.4.3",
"symfony/var-dumper": "^6.4.8 || ^7.1.8"
"phpstan/phpstan-phpunit": "^1.4.2",
"phpstan/phpstan-strict-rules": "^1.6.2",
"phpunit/phpunit": "^10.5.16 || ^11.5.7",
"symfony/var-dumper": "^6.4.8 || ^7.2.3"
},
"suggest": {
"ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
"ext-iconv": "Needed to ease transcoding CSV using iconv stream filters",
"ext-mbstring": "Needed to ease transcoding CSV using mb stream filters"
"ext-mbstring": "Needed to ease transcoding CSV using mb stream filters",
"ext-mysqli": "Requiered to use the package with the MySQLi extension",
"ext-pdo": "Required to use the package with the PDO extension",
"ext-pgsql": "Requiered to use the package with the PgSQL extension",
"ext-sqlite3": "Required to use the package with the SQLite3 extension"
},
"type": "library",
"extra": {
@ -6300,7 +6304,7 @@
"src/functions_include.php"
],
"psr-4": {
"League\\Csv\\": "src/"
"League\\Csv\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -6339,7 +6343,7 @@
"type": "github"
}
],
"time": "2025-01-08T19:27:58+00:00"
"time": "2025-02-28T10:00:39+00:00"
},
{
"name": "league/flysystem",
@ -6906,16 +6910,16 @@
},
{
"name": "livewire/livewire",
"version": "v3.6.0",
"version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/livewire/livewire.git",
"reference": "4c66b569cb729ba9b2f4a3c4e79f50fd8f2b71d1"
"reference": "0df0a762698176d714e42e2dfed92b6b9e24b8e4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/livewire/livewire/zipball/4c66b569cb729ba9b2f4a3c4e79f50fd8f2b71d1",
"reference": "4c66b569cb729ba9b2f4a3c4e79f50fd8f2b71d1",
"url": "https://api.github.com/repos/livewire/livewire/zipball/0df0a762698176d714e42e2dfed92b6b9e24b8e4",
"reference": "0df0a762698176d714e42e2dfed92b6b9e24b8e4",
"shasum": ""
},
"require": {
@ -6970,7 +6974,7 @@
"description": "A front-end framework for Laravel.",
"support": {
"issues": "https://github.com/livewire/livewire/issues",
"source": "https://github.com/livewire/livewire/tree/v3.6.0"
"source": "https://github.com/livewire/livewire/tree/v3.6.1"
},
"funding": [
{
@ -6978,7 +6982,7 @@
"type": "github"
}
],
"time": "2025-02-26T00:57:32+00:00"
"time": "2025-03-04T21:48:52+00:00"
},
{
"name": "maennchen/zipstream-php",
@ -8589,16 +8593,16 @@
},
{
"name": "open-telemetry/api",
"version": "1.2.2",
"version": "1.2.3",
"source": {
"type": "git",
"url": "https://github.com/opentelemetry-php/api.git",
"reference": "8b925df3047628968bc5be722468db1b98b82d51"
"reference": "199d7ddda88f5f5619fa73463f1a5a7149ccd1f1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/opentelemetry-php/api/zipball/8b925df3047628968bc5be722468db1b98b82d51",
"reference": "8b925df3047628968bc5be722468db1b98b82d51",
"url": "https://api.github.com/repos/opentelemetry-php/api/zipball/199d7ddda88f5f5619fa73463f1a5a7149ccd1f1",
"reference": "199d7ddda88f5f5619fa73463f1a5a7149ccd1f1",
"shasum": ""
},
"require": {
@ -8655,7 +8659,7 @@
"issues": "https://github.com/open-telemetry/opentelemetry-php/issues",
"source": "https://github.com/open-telemetry/opentelemetry-php"
},
"time": "2025-02-03T21:49:11+00:00"
"time": "2025-03-05T21:42:54+00:00"
},
{
"name": "open-telemetry/context",
@ -10694,16 +10698,16 @@
},
{
"name": "ramsey/collection",
"version": "2.0.0",
"version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/collection.git",
"reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5"
"reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
"reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5",
"url": "https://api.github.com/repos/ramsey/collection/zipball/3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109",
"reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109",
"shasum": ""
},
"require": {
@ -10711,25 +10715,22 @@
},
"require-dev": {
"captainhook/plugin-composer": "^5.3",
"ergebnis/composer-normalize": "^2.28.3",
"fakerphp/faker": "^1.21",
"ergebnis/composer-normalize": "^2.45",
"fakerphp/faker": "^1.24",
"hamcrest/hamcrest-php": "^2.0",
"jangregor/phpstan-prophecy": "^1.0",
"mockery/mockery": "^1.5",
"jangregor/phpstan-prophecy": "^2.1",
"mockery/mockery": "^1.6",
"php-parallel-lint/php-console-highlighter": "^1.0",
"php-parallel-lint/php-parallel-lint": "^1.3",
"phpcsstandards/phpcsutils": "^1.0.0-rc1",
"phpspec/prophecy-phpunit": "^2.0",
"phpstan/extension-installer": "^1.2",
"phpstan/phpstan": "^1.9",
"phpstan/phpstan-mockery": "^1.1",
"phpstan/phpstan-phpunit": "^1.3",
"phpunit/phpunit": "^9.5",
"psalm/plugin-mockery": "^1.1",
"psalm/plugin-phpunit": "^0.18.4",
"ramsey/coding-standard": "^2.0.3",
"ramsey/conventional-commits": "^1.3",
"vimeo/psalm": "^5.4"
"php-parallel-lint/php-parallel-lint": "^1.4",
"phpspec/prophecy-phpunit": "^2.3",
"phpstan/extension-installer": "^1.4",
"phpstan/phpstan": "^2.1",
"phpstan/phpstan-mockery": "^2.0",
"phpstan/phpstan-phpunit": "^2.0",
"phpunit/phpunit": "^10.5",
"ramsey/coding-standard": "^2.3",
"ramsey/conventional-commits": "^1.6",
"roave/security-advisories": "dev-latest"
},
"type": "library",
"extra": {
@ -10767,19 +10768,9 @@
],
"support": {
"issues": "https://github.com/ramsey/collection/issues",
"source": "https://github.com/ramsey/collection/tree/2.0.0"
"source": "https://github.com/ramsey/collection/tree/2.1.0"
},
"funding": [
{
"url": "https://github.com/ramsey",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/ramsey/collection",
"type": "tidelift"
}
],
"time": "2022-12-31T21:50:55+00:00"
"time": "2025-03-02T04:48:29+00:00"
},
{
"name": "ramsey/uuid",
@ -17281,16 +17272,16 @@
},
{
"name": "brianium/paratest",
"version": "v7.8.2",
"version": "v7.8.3",
"source": {
"type": "git",
"url": "https://github.com/paratestphp/paratest.git",
"reference": "22c45ae560825291f11b32455878b89e718e758c"
"reference": "a585c346ddf1bec22e51e20b5387607905604a71"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paratestphp/paratest/zipball/22c45ae560825291f11b32455878b89e718e758c",
"reference": "22c45ae560825291f11b32455878b89e718e758c",
"url": "https://api.github.com/repos/paratestphp/paratest/zipball/a585c346ddf1bec22e51e20b5387607905604a71",
"reference": "a585c346ddf1bec22e51e20b5387607905604a71",
"shasum": ""
},
"require": {
@ -17301,19 +17292,19 @@
"fidry/cpu-core-counter": "^1.2.0",
"jean85/pretty-package-versions": "^2.1.0",
"php": "~8.2.0 || ~8.3.0 || ~8.4.0",
"phpunit/php-code-coverage": "^11.0.8 || ^12",
"phpunit/php-code-coverage": "^11.0.9 || ^12.0.4",
"phpunit/php-file-iterator": "^5.1.0 || ^6",
"phpunit/php-timer": "^7.0.1 || ^8",
"phpunit/phpunit": "^11.5.7 || ^12.0.1",
"phpunit/phpunit": "^11.5.11 || ^12.0.6",
"sebastian/environment": "^7.2.0 || ^8",
"symfony/console": "^6.4.17 || ^7.2.1",
"symfony/process": "^6.4.15 || ^7.2.0"
"symfony/process": "^6.4.19 || ^7.2.4"
},
"require-dev": {
"doctrine/coding-standard": "^12.0.0",
"ext-pcov": "*",
"ext-posix": "*",
"phpstan/phpstan": "^2.1.5",
"phpstan/phpstan": "^2.1.6",
"phpstan/phpstan-deprecation-rules": "^2.0.1",
"phpstan/phpstan-phpunit": "^2.0.4",
"phpstan/phpstan-strict-rules": "^2.0.3",
@ -17358,7 +17349,7 @@
],
"support": {
"issues": "https://github.com/paratestphp/paratest/issues",
"source": "https://github.com/paratestphp/paratest/tree/v7.8.2"
"source": "https://github.com/paratestphp/paratest/tree/v7.8.3"
},
"funding": [
{
@ -17370,7 +17361,7 @@
"type": "paypal"
}
],
"time": "2025-02-19T07:26:44+00:00"
"time": "2025-03-05T08:29:11+00:00"
},
{
"name": "clue/ndjson-react",
@ -17837,16 +17828,16 @@
},
{
"name": "friendsofphp/php-cs-fixer",
"version": "v3.70.0",
"version": "v3.71.0",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
"reference": "2ecd5aae0edc937f0d5aa4a22d1d705c6b2e084e"
"reference": "3825ffdc69501e1c9230291b79f036a0c0d8749d"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2ecd5aae0edc937f0d5aa4a22d1d705c6b2e084e",
"reference": "2ecd5aae0edc937f0d5aa4a22d1d705c6b2e084e",
"url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/3825ffdc69501e1c9230291b79f036a0c0d8749d",
"reference": "3825ffdc69501e1c9230291b79f036a0c0d8749d",
"shasum": ""
},
"require": {
@ -17928,7 +17919,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.70.0"
"source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.71.0"
},
"funding": [
{
@ -17936,7 +17927,7 @@
"type": "github"
}
],
"time": "2025-02-22T23:30:51+00:00"
"time": "2025-03-07T23:06:56+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@ -18601,16 +18592,16 @@
},
{
"name": "phpstan/phpstan",
"version": "1.12.19",
"version": "1.12.20",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "c42ba9bab7a940ed00092ecb1c77bad98896d789"
"reference": "3240b1972042c7f73cf1045e879ea5bd5f761bb7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/c42ba9bab7a940ed00092ecb1c77bad98896d789",
"reference": "c42ba9bab7a940ed00092ecb1c77bad98896d789",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/3240b1972042c7f73cf1045e879ea5bd5f761bb7",
"reference": "3240b1972042c7f73cf1045e879ea5bd5f761bb7",
"shasum": ""
},
"require": {
@ -18655,7 +18646,7 @@
"type": "github"
}
],
"time": "2025-02-19T15:42:21+00:00"
"time": "2025-03-05T13:37:43+00:00"
},
{
"name": "phpunit/php-code-coverage",
@ -18982,16 +18973,16 @@
},
{
"name": "phpunit/phpunit",
"version": "11.5.10",
"version": "11.5.12",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "d5df2b32d729562ff8db634678d71085ee579006"
"reference": "d42785840519401ed2113292263795eb4c0f95da"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d5df2b32d729562ff8db634678d71085ee579006",
"reference": "d5df2b32d729562ff8db634678d71085ee579006",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d42785840519401ed2113292263795eb4c0f95da",
"reference": "d42785840519401ed2113292263795eb4c0f95da",
"shasum": ""
},
"require": {
@ -19005,14 +18996,14 @@
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.2",
"phpunit/php-code-coverage": "^11.0.8",
"phpunit/php-code-coverage": "^11.0.9",
"phpunit/php-file-iterator": "^5.1.0",
"phpunit/php-invoker": "^5.0.1",
"phpunit/php-text-template": "^4.0.1",
"phpunit/php-timer": "^7.0.1",
"sebastian/cli-parser": "^3.0.2",
"sebastian/code-unit": "^3.0.2",
"sebastian/comparator": "^6.3.0",
"sebastian/comparator": "^6.3.1",
"sebastian/diff": "^6.0.2",
"sebastian/environment": "^7.2.0",
"sebastian/exporter": "^6.3.0",
@ -19063,7 +19054,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.10"
"source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.12"
},
"funding": [
{
@ -19079,7 +19070,7 @@
"type": "tidelift"
}
],
"time": "2025-02-25T06:11:48+00:00"
"time": "2025-03-07T07:31:03+00:00"
},
{
"name": "react/cache",
@ -19779,16 +19770,16 @@
},
{
"name": "sebastian/comparator",
"version": "6.3.0",
"version": "6.3.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115"
"reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/d4e47a769525c4dd38cea90e5dcd435ddbbc7115",
"reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
"reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
"shasum": ""
},
"require": {
@ -19807,7 +19798,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "6.2-dev"
"dev-main": "6.3-dev"
}
},
"autoload": {
@ -19847,7 +19838,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
"source": "https://github.com/sebastianbergmann/comparator/tree/6.3.0"
"source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1"
},
"funding": [
{
@ -19855,7 +19846,7 @@
"type": "github"
}
],
"time": "2025-01-06T10:28:19+00:00"
"time": "2025-03-07T06:57:01+00:00"
},
{
"name": "sebastian/complexity",

View File

@ -17,8 +17,8 @@ return [
'require_https' => env('REQUIRE_HTTPS', true),
'app_url' => rtrim(env('APP_URL', ''), '/'),
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
'app_version' => env('APP_VERSION', '5.11.51'),
'app_tag' => env('APP_TAG', '5.11.51'),
'app_version' => env('APP_VERSION', '5.11.52'),
'app_tag' => env('APP_TAG', '5.11.52'),
'minimum_client_version' => '5.0.16',
'terms_version' => '1.0.1',
'api_secret' => env('API_SECRET', false),

View File

@ -5516,6 +5516,11 @@ $lang = array(
'sync_send_time' => 'Sync Send Time',
'sync_send_time_help' => 'Update all reminders / recurring invoices to use this new send time',
'edit_location' => 'Edit Location',
'downgrade' => 'Downgrade',
'downgrade_to_free' => 'Downgrade to Free Plan',
'downgrade_to_free_description' => 'Downgrade to the free plan, note this will remove all paid features from your account.',
'delete_location' => 'Delete Location',
'delete_location_confirmation' => 'This will remove the location from the clients record.',
'add_card_reminder' => 'You can add a card again at any time.',
'free_trial_then' => 'Free trial, then',
'days_left' => ':days days left',

View File

@ -5514,6 +5514,52 @@ Développe automatiquement la section des notes dans le tableau de produits pour
'sync_send_time' => 'Synchroniser l\'heure d\'envoi',
'sync_send_time_help' => 'Mettre à jour tous les rappels et les factures récurrentes pour l\'utilisation de cette nouvelle heure d\'envoi',
'edit_location' => 'Éditer l\'emplacement',
'add_card_reminder' => 'Vous pouvez ajouter une carte à tout moment.',
'free_trial_then' => 'Essai gratuit, ensuite',
'days_left' => ':day jours restants',
'days_trial' => ':day jours d\'essais',
'pro_plan_label' => 'Ninja Pro',
'enterprise_plan_label' => 'Enterprise',
'premium_business_plus_label' => 'Premium Business+',
'pro_plan_feature_1' => 'Clients et factures illimités',
'pro_plan_feature_2' => 'Masque "Créé par Invoice Ninja"',
'pro_plan_feature_3' => 'Factures par courriel via Gmailet MSN',
'pro_plan_feature_4' => 'Factures par courriel via votre SMTP personnalisé',
'pro_plan_feature_5' => 'URL de marque: "VotreSite".invoicing.co',
'pro_plan_feature_6' => '11 modèles professionnels de facture',
'pro_plan_feature_7' => 'Personaliser les designs de factures',
'pro_plan_feature_8' => 'Intégration API avec des applications tierces',
'pro_plan_feature_9' => 'Protection par mot de passe du portail client',
'pro_plan_feature_10' => 'Configurer des courriels de rappel automatiques',
'pro_plan_feature_11' => 'Ajout automatique de PDF de facture aux courriels',
'pro_plan_feature_12' => 'Afficher la signature électronique du client sur les factures',
'pro_plan_feature_13' => "Activer une case à cocher \"J'accepte les conditions\"",
'pro_plan_feature_14' => 'Rapports : Factures, Dépenses, P&L, etc.',
'pro_plan_feature_15' => 'Envoi groupé de factures, soumissions et avoirs par courriel',
'pro_plan_feature_16' => 'Relier 10 entreprises avec 1 seul identifiant',
'pro_plan_feature_17' => 'Créer des paramètres uniques pour les "Groupes de clients"',
'pro_plan_feature_18' => 'Calcul automatique de la taxe de vente (États-Unis)',
'enterprise_plan_feature_1' => 'Créer des utilisateurs de compte supplémentaires (jusqu\'à 50 !) et définir les permissions pour chaque utilisateur',
'enterprise_plan_feature_2' => 'Joindre des fichiers aux courriels et au portail client (pdf, jpg, ppt, xls, doc et plus)',
'enterprise_plan_feature_3' => 'Portail client entièrement personnalisé : "Facturation.VotreEntreprise.com"',
'enterprise_plan_feature_4' => 'Intégrez vos comptes financiers et synchronisez vos transactions bancaires via les plateformes bancaires Yodlee ou Nordigen',
'premium_business_plus_feature_1' => 'Concierge développeur',
'premium_business_plus_feature_2' => 'Support prioritaire direct',
'premium_business_plus_feature_3' => 'Service de conception de factures',
'premium_business_plus_feature_4' => 'Priorité des demandes de fonctionnalités',
'premium_business_plus_feature_5' => 'Assistance à la migration des données',
'premium_business_plus_feature_6' => 'Créer des rapports personnalisés',
'upgrade_popup_headline' => 'Bien plus que la facturation',
'upgrade_popup_description' => 'Tarification simple. Fonctionnalités avancées.',
'upgrade_popup_pro_headline' => '10 mois d\'abonnement + 2 mois gratuits = 1 an !',
'upgrade_popup_enterprise_headline' => '10 mois d\'abonnement + 2 mois gratuits = 1 an !',
'upgrade_popup_premium_business_plus_headline' => 'Pro + Enterprise + Premium Business Concierge',
'all_free_features_plus' => 'Toutes les fonctionnalités gratuites +',
'all_pro_features_plus' => 'Toutes les fonctionnalités Pro +',
'all_features_plus' => 'Toutes les fonctionnalités +',
'upgrade_plan' => 'Mettre à jour votre plan',
'upgrade_popup_premium_business_plus_pricing' => 'Prix ? Discutons-en !',
'plan_selected' => 'Plan sélectionné',
);
return $lang;

View File

@ -33,8 +33,8 @@ $lang = array(
'po_number_short' => 'Numéro de bon de commande',
'frequency_id' => 'À quelle fréquence',
'discount' => 'Rabais',
'taxes' => 'Impôts',
'tax' => 'Impôt',
'taxes' => 'TVA',
'tax' => 'TVA',
'item' => 'Article',
'description' => 'Description',
'unit_cost' => 'Coût unitaire',
@ -65,7 +65,7 @@ $lang = array(
'delete_invoice' => 'Supprimer la facture',
'email_invoice' => 'Facture par e-mail',
'enter_payment' => 'Entrer le paiement',
'tax_rates' => 'Taux d'imposition',
'tax_rates' => 'Taux de TVA',
'rate' => 'Taux',
'settings' => 'Paramètres',
'enable_invoice_tax' => 'Activer la spécification d&#39;une <b>taxe sur la facture</b>',
@ -5498,6 +5498,67 @@ Lorsque les montant apparaîtront sur votre relevé, veuillez revenir sur cette
'yesterday' => 'Hier',
'enable_client_profile_update' => 'Permettre aux clients de mettre à jour leur profil',
'enable_client_profile_update_help' => 'Permettre aux clients de mettre à jour les informations de leur profil à partir du portail client',
'preference_product_notes_for_html_view' => 'Use Item Notes for HTML View',
'preference_product_notes_for_html_view_help' => 'Preference the item Description over the item title if displaying the invoice in HTML.',
'project_report' => 'Project Report',
'unlock_invoice_documents_after_payment' => 'Unlock Documents After Payment',
'unlock_invoice_documents_after_payment_help' => 'Allows client access to invoice documents when an invoice has been paid',
'quickbooks' => 'Quickbooks',
'disable_emails' => 'Disable Emails',
'disable_emails_error' => 'You are not authorized to send emails',
'disable_emails_help' => 'Prevents a user from sending emails from the system',
'add_location' => 'Add Location',
'updated_location' => 'Updated Location',
'created_location' => 'Created Location',
'sync_send_time' => 'Sync Send Time',
'sync_send_time_help' => 'Update all reminders / recurring invoices to use this new send time',
'edit_location' => 'Edit Location',
'add_card_reminder' => 'You can add a card again at any time.',
'free_trial_then' => 'Free trial, then',
'days_left' => ':days days left',
'days_trial' => ':days day trial',
'pro_plan_label' => 'Ninja Pro',
'enterprise_plan_label' => 'Enterprise',
'premium_business_plus_label' => 'Premium Business+',
'pro_plan_feature_1' => 'Unlimited Clients & Invoices',
'pro_plan_feature_2' => 'Remove "Created by Invoice Ninja"',
'pro_plan_feature_3' => 'Email Invoices via Gmail & MSN',
'pro_plan_feature_4' => 'Email Invoices via your custom SMTP',
'pro_plan_feature_5' => 'Branded URL: "YourSite".Invoicing.co',
'pro_plan_feature_6' => '11 Professional Invoice Templates',
'pro_plan_feature_7' => 'Customize Invoice Designs',
'pro_plan_feature_8' => 'API Integration with 3rd Party Apps',
'pro_plan_feature_9' => 'Password Protect Client-Side Portal',
'pro_plan_feature_10' => 'Set Up Auto-Reminder Emails',
'pro_plan_feature_11' => 'Auto-Attached Invoice PDF to Emails',
'pro_plan_feature_12' => 'Display Clients E-Signature on Invoices',
'pro_plan_feature_13' => "Enable an 'Approve Terms' Checkbox",
'pro_plan_feature_14' => 'Reports: Invoices, Expenses, P&L, more',
'pro_plan_feature_15' => 'Bulk Email Invoices, Quotes, Credits',
'pro_plan_feature_16' => 'Interlink 10 Companies with 1 Login',
'pro_plan_feature_17' => 'Create Unique "Client Group" Settings',
'pro_plan_feature_18' => 'Auto Sales Tax Calculation (US States)',
'enterprise_plan_feature_1' => 'Create Additional Account Users (up to 50!) & Set Permissions per User',
'enterprise_plan_feature_2' => 'Attach Files to Emails & Client-Portal (pdf, jpg, ppt, xls, doc & more)',
'enterprise_plan_feature_3' => 'Fully Branded Client Portal: "Billing.YourCompany.com"',
'enterprise_plan_feature_4' => 'Integrate Your Financial Accounts and Sync Banking Transactions via Yodlee or Nordigen Banking Platforms',
'premium_business_plus_feature_1' => 'Developer Concierge',
'premium_business_plus_feature_2' => 'Direct Priority Support',
'premium_business_plus_feature_3' => 'Invoice Design Service',
'premium_business_plus_feature_4' => 'Feature Request Priority',
'premium_business_plus_feature_5' => 'Data Migration Assist',
'premium_business_plus_feature_6' => 'Build Custom Reports',
'upgrade_popup_headline' => 'More than invoicing',
'upgrade_popup_description' => 'Simple Pricing. Advanced Features.',
'upgrade_popup_pro_headline' => 'Pay year for 10 months + 2 free!',
'upgrade_popup_enterprise_headline' => 'Pay year for 10 months + 2 free!',
'upgrade_popup_premium_business_plus_headline' => 'Pro + Enterprise + Premium Business Concierge',
'all_free_features_plus' => 'All free features +',
'all_pro_features_plus' => 'All pro features +',
'all_features_plus' => 'All features +',
'upgrade_plan' => 'Upgrade Plan',
'upgrade_popup_premium_business_plus_pricing' => 'Pricing? Let\'s talk!',
'plan_selected' => 'Plan Selected',
);
return $lang;

View File

@ -5507,6 +5507,61 @@ $lang = array(
'unlock_invoice_documents_after_payment' => 'Mở khóa tài liệu sau khi Sự chi trả',
'unlock_invoice_documents_after_payment_help' => 'Cho phép khách hàng truy cập đến Hóa đơn khi Hóa đơn đã được thanh toán',
'quickbooks' => 'Sổ tay nhanh',
'disable_emails' => 'Vô hiệu hóa Email',
'disable_emails_error' => 'Bạn không được phép đến email',
'disable_emails_help' => 'Ngăn chặn Người dùng gửi email từ hệ thống',
'add_location' => 'Thêm Vị Trí',
'updated_location' => 'đã cập nhật Vị trí',
'created_location' => 'đã tạo vị trí',
'sync_send_time' => 'Đồng bộ thời gian gửi',
'sync_send_time_help' => 'Cập nhật tất cả lời nhắc / Định kỳ Hóa đơn đến sử dụng thời gian gửi mới này',
'edit_location' => 'Chỉnh sửa vị trí',
'add_card_reminder' => 'You can add a card again at any time.',
'free_trial_then' => 'Free trial, then',
'days_left' => ':days days left',
'days_trial' => ':days day trial',
'pro_plan_label' => 'Ninja Pro',
'enterprise_plan_label' => 'Enterprise',
'premium_business_plus_label' => 'Premium Business+',
'pro_plan_feature_1' => 'Unlimited Clients & Invoices',
'pro_plan_feature_2' => 'Remove "Created by Invoice Ninja"',
'pro_plan_feature_3' => 'Email Invoices via Gmail & MSN',
'pro_plan_feature_4' => 'Email Invoices via your custom SMTP',
'pro_plan_feature_5' => 'Branded URL: "YourSite".Invoicing.co',
'pro_plan_feature_6' => '11 Professional Invoice Templates',
'pro_plan_feature_7' => 'Customize Invoice Designs',
'pro_plan_feature_8' => 'API Integration with 3rd Party Apps',
'pro_plan_feature_9' => 'Password Protect Client-Side Portal',
'pro_plan_feature_10' => 'Set Up Auto-Reminder Emails',
'pro_plan_feature_11' => 'Auto-Attached Invoice PDF to Emails',
'pro_plan_feature_12' => 'Display Clients E-Signature on Invoices',
'pro_plan_feature_13' => "Enable an 'Approve Terms' Checkbox",
'pro_plan_feature_14' => 'Reports: Invoices, Expenses, P&L, more',
'pro_plan_feature_15' => 'Bulk Email Invoices, Quotes, Credits',
'pro_plan_feature_16' => 'Interlink 10 Companies with 1 Login',
'pro_plan_feature_17' => 'Create Unique "Client Group" Settings',
'pro_plan_feature_18' => 'Auto Sales Tax Calculation (US States)',
'enterprise_plan_feature_1' => 'Create Additional Account Users (up to 50!) & Set Permissions per User',
'enterprise_plan_feature_2' => 'Attach Files to Emails & Client-Portal (pdf, jpg, ppt, xls, doc & more)',
'enterprise_plan_feature_3' => 'Fully Branded Client Portal: "Billing.YourCompany.com"',
'enterprise_plan_feature_4' => 'Integrate Your Financial Accounts and Sync Banking Transactions via Yodlee or Nordigen Banking Platforms',
'premium_business_plus_feature_1' => 'Developer Concierge',
'premium_business_plus_feature_2' => 'Direct Priority Support',
'premium_business_plus_feature_3' => 'Invoice Design Service',
'premium_business_plus_feature_4' => 'Feature Request Priority',
'premium_business_plus_feature_5' => 'Data Migration Assist',
'premium_business_plus_feature_6' => 'Build Custom Reports',
'upgrade_popup_headline' => 'More than invoicing',
'upgrade_popup_description' => 'Simple Pricing. Advanced Features.',
'upgrade_popup_pro_headline' => 'Pay year for 10 months + 2 free!',
'upgrade_popup_enterprise_headline' => 'Pay year for 10 months + 2 free!',
'upgrade_popup_premium_business_plus_headline' => 'Pro + Enterprise + Premium Business Concierge',
'all_free_features_plus' => 'All free features +',
'all_pro_features_plus' => 'All pro features +',
'all_features_plus' => 'All features +',
'upgrade_plan' => 'Upgrade Plan',
'upgrade_popup_premium_business_plus_pricing' => 'Pricing? Let\'s talk!',
'plan_selected' => 'Plan Selected',
);
return $lang;

File diff suppressed because one or more lines are too long

View File

@ -1,9 +0,0 @@
var l=Object.defineProperty;var c=(n,t,e)=>t in n?l(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var r=(n,t,e)=>(c(n,typeof t!="symbol"?t+"":t,e),e);import{i as a,w as o}from"./wait-8f4ae121.js";/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/class d{constructor(t,e){r(this,"setupStripe",()=>{this.stripeConnect?this.stripe=Stripe(this.key,{stripeAccount:this.stripeConnect}):this.stripe=Stripe(this.key);let t=this.stripe.elements();var e={style:{base:{padding:"10px 12px",color:"#32325d",fontSize:"16px","::placeholder":{color:"#aab7c4"}}}};return this.ideal=t.create("idealBank",e),this.ideal.mount("#ideal-bank-element"),this});r(this,"handle",()=>{document.getElementById("pay-now").addEventListener("click",t=>{let e=document.getElementById("errors");if(!document.getElementById("ideal-name").value){e.textContent=document.querySelector("meta[name=translation-name-required]").content,e.hidden=!1,console.log("name");return}document.getElementById("pay-now").disabled=!0,document.querySelector("#pay-now > svg").classList.remove("hidden"),document.querySelector("#pay-now > span").classList.add("hidden"),this.stripe.confirmIdealPayment(document.querySelector("meta[name=pi-client-secret").content,{payment_method:{ideal:this.ideal,billing_details:{name:document.getElementById("ideal-name").value}},return_url:document.querySelector('meta[name="return-url"]').content})})});this.key=t,this.errors=document.getElementById("errors"),this.stripeConnect=e}}function i(){var e,s;const n=((e=document.querySelector('meta[name="stripe-publishable-key"]'))==null?void 0:e.content)??"",t=((s=document.querySelector('meta[name="stripe-account-id"]'))==null?void 0:s.content)??"";new d(n,t).setupStripe().handle()}a()?i():o("#stripe-ideal-payment").then(()=>i());a()?i():o("#stripe-ideal-payment").then(()=>i());

View File

@ -0,0 +1,9 @@
var i=Object.defineProperty;var a=(n,t,e)=>t in n?i(n,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):n[t]=e;var r=(n,t,e)=>(a(n,typeof t!="symbol"?t+"":t,e),e);import{i as c,w as l}from"./wait-8f4ae121.js";/**
* Invoice Ninja (https://invoiceninja.com)
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
* @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
*
* @license https://www.elastic.co/licensing/elastic-license
*/class d{constructor(t,e){r(this,"setupStripe",()=>{this.stripeConnect?this.stripe=Stripe(this.key,{stripeAccount:this.stripeConnect}):this.stripe=Stripe(this.key);var t={style:{base:{padding:"10px 12px",color:"#32325d",fontSize:"16px","::placeholder":{color:"#aab7c4"}}},clientSecret:document.querySelector("meta[name=pi-client-secret").content};this.elements=this.stripe.elements(t);const e={layout:"accordion"};return this.ideal=this.elements.create("payment",e),this.ideal.mount("#payment-element"),this});r(this,"handle",()=>{document.getElementById("pay-now").addEventListener("click",async t=>{t.preventDefault();let e=document.getElementById("errors");e.textContent="",e.hidden=!0,document.getElementById("pay-now").disabled=!0,document.querySelector("#pay-now > svg").classList.remove("hidden"),document.querySelector("#pay-now > span").classList.add("hidden");const{error:s}=await this.stripe.confirmPayment({elements:this.elements,confirmParams:{return_url:document.querySelector('meta[name="return-url"]').content}});s&&(e.textContent=s.message,e.hidden=!1,document.getElementById("pay-now").disabled=!1,document.querySelector("#pay-now > svg").classList.add("hidden"),document.querySelector("#pay-now > span").classList.remove("hidden"))})});this.key=t,this.errors=document.getElementById("errors"),this.stripeConnect=e}}function o(){var e,s;const n=((e=document.querySelector('meta[name="stripe-publishable-key"]'))==null?void 0:e.content)??"",t=((s=document.querySelector('meta[name="stripe-account-id"]'))==null?void 0:s.content)??"";new d(n,t).setupStripe().handle()}c()?o():l("#stripe-ideal-payment").then(()=>o());

View File

@ -12,7 +12,7 @@
"file": "assets/wait-8f4ae121.js"
},
"resources/js/app.js": {
"file": "assets/app-09990367.js",
"file": "assets/app-059c169b.js",
"imports": [
"_index-08e160a7.js",
"__commonjsHelpers-725317a4.js"
@ -283,7 +283,7 @@
"src": "resources/js/clients/payments/stripe-giropay.js"
},
"resources/js/clients/payments/stripe-ideal.js": {
"file": "assets/stripe-ideal-2110e54f.js",
"file": "assets/stripe-ideal-aee1d791.js",
"imports": [
"_wait-8f4ae121.js"
],

View File

@ -21,7 +21,6 @@ class ProcessIDEALPay {
if (this.stripeConnect) {
// this.stripe.stripeAccount = this.stripeConnect;
this.stripe = Stripe(this.key, {
stripeAccount: this.stripeConnect,
@ -32,8 +31,6 @@ class ProcessIDEALPay {
this.stripe = Stripe(this.key);
}
let elements = this.stripe.elements();
var options = {
style: {
base: {
@ -45,40 +42,48 @@ class ProcessIDEALPay {
},
},
},
clientSecret: document.querySelector('meta[name=pi-client-secret').content,
};
this.ideal = elements.create('idealBank', options);
this.ideal.mount("#ideal-bank-element");
this.elements = this.stripe.elements(options);
const paymentElementOptions = { layout: 'accordion' };
this.ideal = this.elements.create('payment', paymentElementOptions);
this.ideal.mount('#payment-element');
return this;
};
handle = () => {
document.getElementById('pay-now').addEventListener('click', (e) => {
document.getElementById('pay-now').addEventListener('click', async (e) => {
e.preventDefault();
let errors = document.getElementById('errors');
errors.textContent = '';
errors.hidden = true;
if (!document.getElementById('ideal-name').value) {
errors.textContent = document.querySelector('meta[name=translation-name-required]').content;
errors.hidden = false;
console.log("name");
return;
}
document.getElementById('pay-now').disabled = true;
document.querySelector('#pay-now > svg').classList.remove('hidden');
document.querySelector('#pay-now > span').classList.add('hidden');
this.stripe.confirmIdealPayment(
document.querySelector('meta[name=pi-client-secret').content,
{
payment_method: {
ideal: this.ideal,
billing_details: {
name: document.getElementById("ideal-name").value,
},
},
const { error } = await this.stripe.confirmPayment({
elements: this.elements,
confirmParams: {
return_url: document.querySelector(
'meta[name="return-url"]'
).content,
}
);
'meta[name="return-url"]'
).content,
},
});
if (error) {
errors.textContent = error.message;
errors.hidden = false;
document.getElementById('pay-now').disabled = false;
document.querySelector('#pay-now > svg').classList.add('hidden');
document.querySelector('#pay-now > span').classList.remove('hidden');
}
});
};
}
@ -95,5 +100,3 @@ function boot() {
}
instant() ? boot() : wait('#stripe-ideal-payment').then(() => boot());
instant() ? boot() : wait('#stripe-ideal-payment').then(() => boot());

View File

@ -1,11 +1,6 @@
<div id="stripe--payment-container">
@component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.name')])
<label for="giropay-name">
<input class="input w-full" id="ideal-name" type="text" placeholder="{{ ctrans('texts.bank_account_holder') }}">
</label>
<label for="ideal-bank-element"></label>
<div class="border p-4 rounded">
<div id="ideal-bank-element"></div>
</div>
<div id="payment-element">
</div>
@endcomponent
</div>