diff --git a/VERSION.txt b/VERSION.txt
index 8d5dc0567cf5..ea2a8077c7f7 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-5.3.66
\ No newline at end of file
+5.3.67
\ No newline at end of file
diff --git a/app/Console/Commands/CheckData.php b/app/Console/Commands/CheckData.php
index 74f5187afab2..138486fdaea8 100644
--- a/app/Console/Commands/CheckData.php
+++ b/app/Console/Commands/CheckData.php
@@ -74,7 +74,7 @@ class CheckData extends Command
/**
* @var string
*/
- protected $signature = 'ninja:check-data {--database=} {--fix=} {--client_id=} {--vendor_id=} {--paid_to_date=} {--client_balance=}';
+ protected $signature = 'ninja:check-data {--database=} {--fix=} {--client_id=} {--vendor_id=} {--paid_to_date=} {--client_balance=} {--ledger_balance=}';
/**
* @var string
@@ -102,7 +102,7 @@ class CheckData extends Command
config(['database.default' => $database]);
}
- // $this->checkInvoiceBalances();
+ $this->checkInvoiceBalances();
$this->checkInvoiceBalancesNew();
//$this->checkInvoicePayments();
@@ -482,6 +482,7 @@ class CheckData extends Command
payments.id = paymentables.payment_id
WHERE paymentable_type = ?
AND paymentables.deleted_at is NULL
+ AND payments.amount > 0
AND payments.is_deleted = 0
AND payments.client_id = ?;
"), [App\Models\Credit::class, $client->id] );
@@ -499,9 +500,11 @@ class CheckData extends Command
{
$client = Client::withTrashed()->find($_client->client_id);
+ $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);
- $total_paid_to_date = $_client->payments_applied + $credits_used_for_payments[0]->credit_payment;
+ $total_paid_to_date = $_client->payments_applied + $credits_used_for_payments[0]->credit_payment - $credits_from_reversal;
if(round($total_paid_to_date,2) != round($_client->client_paid_to_date,2)){
@@ -736,7 +739,7 @@ ORDER BY clients.id;
$this->logMessage($client_object->present()->name.' - '.$client_object->id." - calculated client balances do not match Invoice Balances = {$invoice_balance} - Client Balance = ".rtrim($client['client_balance'], '0'). " Ledger balance = {$ledger->balance}");
- if($this->option('client_balance')){
+ if($this->option('ledger_balance')){
$this->logMessage("# {$client_object->id} " . $client_object->present()->name.' - '.$client_object->number." Fixing {$client_object->balance} to {$invoice_balance}");
$client_object->balance = $invoice_balance;
@@ -853,18 +856,16 @@ ORDER BY clients.id;
foreach (Client::where('is_deleted', 0)->where('clients.updated_at', '>', now()->subDays(2))->cursor() as $client) {
$invoice_balance = $client->invoices()->where('is_deleted', false)->where('status_id', '>', 1)->sum('balance');
- $credit_balance = $client->credits()->where('is_deleted', false)->sum('balance');
-
$ledger = CompanyLedger::where('client_id', $client->id)->orderBy('id', 'DESC')->first();
- if ($ledger && number_format($invoice_balance, 4) != number_format($client->balance, 4)) {
+ if ($ledger && number_format($ledger->balance, 4) != number_format($client->balance, 4)) {
$this->wrong_balances++;
- $this->logMessage("# {$client->id} " . $client->present()->name.' - '.$client->number." - Balance Failure - Invoice Balances = {$invoice_balance} Client Balance = {$client->balance} Ledger Balance = {$ledger->balance}");
+ $this->logMessage("# {$client->id} " . $client->present()->name.' - '.$client->number." - Balance Failure - Client Balance = {$client->balance} Ledger Balance = {$ledger->balance}");
$this->isValid = false;
- if($this->option('client_balance')){
+ if($this->option('ledger_balance')){
$this->logMessage("# {$client->id} " . $client->present()->name.' - '.$client->number." Fixing {$client->balance} to {$invoice_balance}");
$client->balance = $invoice_balance;
@@ -879,7 +880,7 @@ ORDER BY clients.id;
}
}
- $this->logMessage("{$this->wrong_balances} clients with incorrect balances");
+ $this->logMessage("{$this->wrong_balances} clients with incorrect ledger balances");
}
private function checkLogoFiles()
@@ -1011,6 +1012,27 @@ ORDER BY clients.id;
}
+/* //used to set a company owner on the company_users table
+
+$c = Company::whereDoesntHave('company_users', function ($query){
+ $query->where('is_owner', true)->withTrashed();
+})->cursor()->each(function ($company){
+
+ if(!$company->company_users()->exists()){
+ echo "No company users AT ALL {$company->id}\n";
+
+ }
+ else{
+
+ $cu = $company->company_users()->orderBy('id', 'ASC')->orderBy('is_admin', 'ASC')->first();
+ echo "{$company->id} - {$cu->id} \n";
+ $cu->is_owner=true;
+ $cu->save();
+
+ }
+});
+*/
+
/* query if we want to company company ledger to client balance
$results = \DB::select( \DB::raw("
SELECT
diff --git a/app/Console/Commands/CreateSingleAccount.php b/app/Console/Commands/CreateSingleAccount.php
index 6f508b06e3ff..d1b03c0b227c 100644
--- a/app/Console/Commands/CreateSingleAccount.php
+++ b/app/Console/Commands/CreateSingleAccount.php
@@ -11,6 +11,7 @@
namespace App\Console\Commands;
+use App\DataMapper\ClientRegistrationFields;
use App\DataMapper\CompanySettings;
use App\DataMapper\FeesAndLimits;
use App\Events\Invoice\InvoiceWasCreated;
@@ -115,6 +116,7 @@ class CreateSingleAccount extends Command
$settings->invoice_footer = 'Default invoice footer';
$company->settings = $settings;
+ $company->client_registration_fields = ClientRegistrationFields::generate();
$company->save();
$account->default_company_id = $company->id;
diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php
index e03d3b78f629..1a1c9388512a 100644
--- a/app/Console/Kernel.php
+++ b/app/Console/Kernel.php
@@ -64,7 +64,7 @@ class Kernel extends ConsoleKernel
$schedule->job(new RecurringExpensesCron)->dailyAt('00:10')->withoutOverlapping();
- $schedule->job(new AutoBillCron)->dailyAt('00:30')->withoutOverlapping();
+ $schedule->job(new AutoBillCron)->dailyAt('12:20')->withoutOverlapping();
$schedule->job(new SchedulerCheck)->daily()->withoutOverlapping();
diff --git a/app/DataMapper/Analytics/TrialFinished.php b/app/DataMapper/Analytics/TrialFinished.php
new file mode 100644
index 000000000000..423b52a1f0de
--- /dev/null
+++ b/app/DataMapper/Analytics/TrialFinished.php
@@ -0,0 +1,51 @@
+'.self::transformText('invoice_message').'
$view_button
';
+ $invoice_message = '$client
'.self::transformText('invoice_message').'
$view_button
';
return $invoice_message;
}
@@ -135,7 +135,7 @@ class EmailTemplateDefaults
public static function emailQuoteTemplate()
{
- $quote_message = ''.self::transformText('quote_message').'
$view_button
';
+ $quote_message = '$client
'.self::transformText('quote_message').'
$view_button
';
return $quote_message;
}
@@ -147,21 +147,21 @@ class EmailTemplateDefaults
public static function emailPaymentTemplate()
{
- $payment_message = ''.self::transformText('payment_message').'
$view_button
';
+ $payment_message = '$client
'.self::transformText('payment_message').'
$invoices
$view_button
';
return $payment_message;
}
public static function emailCreditTemplate()
{
- $credit_message = ''.self::transformText('credit_message').'
$view_button
';
+ $credit_message = '$client
'.self::transformText('credit_message').'
$view_button
';
return $credit_message;
}
public static function emailPaymentPartialTemplate()
{
- $payment_message = ''.self::transformText('payment_message').'
$view_button
';
+ $payment_message = '$client
'.self::transformText('payment_message').'
$invoices
$view_button
';
return $payment_message;
}
diff --git a/app/DataMapper/Transactions/BaseTransaction.php b/app/DataMapper/Transactions/BaseTransaction.php
new file mode 100644
index 000000000000..80d211d90733
--- /dev/null
+++ b/app/DataMapper/Transactions/BaseTransaction.php
@@ -0,0 +1,100 @@
+ $this->event_id, 'timestamp' =>time()],
+ );
+ // return [
+ // 'event_id' => $this->event_id,
+ // 'client_id' => $client?->id,
+ // 'invoice_id' => $invoice?->id,
+ // 'payment_id' => $payment?->id,
+ // 'credit_id' => $credit?->creditid,
+ // 'client_balance' => $client?->balance,
+ // 'client_paid_to_date' => $client?->paid_to_date,
+ // 'client_credit_balance' => $client?->credit_balance,
+ // 'invoice_balance' => $invoice?->balance,
+ // 'invoice_amount' => $invoice?->amount,
+ // 'invoice_partial' => $invoice?->partial,
+ // 'invoice_paid_to_date' => $invoice?->paid_to_date,
+ // 'invoice_status' => $invoice?->status_id,
+ // 'payment_amount' => $payment?->amount,
+ // 'payment_applied' => $payment?->applied,
+ // 'payment_refunded' => $payment?->refunded,
+ // 'payment_status' => $payment?->status_id,
+ // 'paymentables' => $payment?->paymentables,
+ // 'payment_request' => $payment_request,
+ // 'metadata' => $metadata,
+ // 'credit_balance' => $credit?->balance,
+ // 'credit_amount' => $credit?->amount,
+ // 'credit_status' => $credit?->status_id,
+ // 'timestamp' => time(),
+ // ];
+
+ }
+}
diff --git a/app/DataMapper/Transactions/ClientStatusTransaction.php b/app/DataMapper/Transactions/ClientStatusTransaction.php
new file mode 100644
index 000000000000..a6f327f8bbc0
--- /dev/null
+++ b/app/DataMapper/Transactions/ClientStatusTransaction.php
@@ -0,0 +1,28 @@
+terms = '';
$credit->public_notes = '';
$credit->private_notes = '';
- $credit->date = null;
+ $credit->date = now()->format('Y-m-d');
$credit->due_date = null;
$credit->partial_due_date = null;
$credit->is_deleted = false;
diff --git a/app/Factory/InvoiceFactory.php b/app/Factory/InvoiceFactory.php
index 0d3a5e334a1e..659233c2e6e7 100644
--- a/app/Factory/InvoiceFactory.php
+++ b/app/Factory/InvoiceFactory.php
@@ -27,7 +27,7 @@ class InvoiceFactory
$invoice->terms = '';
$invoice->public_notes = '';
$invoice->private_notes = '';
- $invoice->date = null;
+ $invoice->date = now()->format('Y-m-d');
$invoice->due_date = null;
$invoice->partial_due_date = null;
$invoice->is_deleted = false;
diff --git a/app/Factory/QuoteFactory.php b/app/Factory/QuoteFactory.php
index 11f278de2695..a0aa06e7ceb5 100644
--- a/app/Factory/QuoteFactory.php
+++ b/app/Factory/QuoteFactory.php
@@ -27,7 +27,7 @@ class QuoteFactory
$quote->terms = '';
$quote->public_notes = '';
$quote->private_notes = '';
- $quote->date = null;
+ $quote->date = now()->format('Y-m-d');
$quote->due_date = null;
$quote->partial_due_date = null;
$quote->is_deleted = false;
diff --git a/app/Helpers/Invoice/InvoiceItemSumInclusive.php b/app/Helpers/Invoice/InvoiceItemSumInclusive.php
index 134ebe774bdd..b05cc36fe813 100644
--- a/app/Helpers/Invoice/InvoiceItemSumInclusive.php
+++ b/app/Helpers/Invoice/InvoiceItemSumInclusive.php
@@ -89,9 +89,6 @@ class InvoiceItemSumInclusive
{
$this->setLineTotal($this->item->cost * $this->item->quantity);
- //11-02-2022
- // $this->setLineTotal($this->formatValue($this->item->cost, $this->currency->precision) * $this->formatValue($this->item->quantity, $this->currency->precision));
-
return $this;
}
@@ -171,6 +168,8 @@ class InvoiceItemSumInclusive
public function setLineTotal($total)
{
+ $this->item->gross_line_total = $total;
+
$this->item->line_total = $total;
return $this;
diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php
index af241cd412fb..a67d7619530b 100644
--- a/app/Http/Controllers/BaseController.php
+++ b/app/Http/Controllers/BaseController.php
@@ -764,7 +764,8 @@ class BaseController extends Controller
$this->buildCache();
- return view('index.index', $data);
+ return response()->view('index.index', $data)->header('X-Frame-Options', 'SAMEORIGIN', false);
+
}
return redirect('/setup');
diff --git a/app/Http/Controllers/ClientPortal/NinjaPlanController.php b/app/Http/Controllers/ClientPortal/NinjaPlanController.php
index c24ee6293e80..698b4098e01a 100644
--- a/app/Http/Controllers/ClientPortal/NinjaPlanController.php
+++ b/app/Http/Controllers/ClientPortal/NinjaPlanController.php
@@ -12,6 +12,7 @@
namespace App\Http\Controllers\ClientPortal;
+use App\DataMapper\Analytics\TrialStarted;
use App\Factory\RecurringInvoiceFactory;
use App\Http\Controllers\Controller;
use App\Http\Requests\ClientPortal\Uploads\StoreUploadRequest;
@@ -32,6 +33,7 @@ use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Support\Carbon;
use Illuminate\Support\Facades\Auth;
+use Turbo124\Beacon\Facades\LightLogs;
class NinjaPlanController extends Controller
{
@@ -134,7 +136,7 @@ class NinjaPlanController extends Controller
// $account = auth()->guard('contact')->user()->company->account;
if(auth()->guard('contact')->user()->client->custom_value2){
MultiDB::findAndSetDbByAccountKey(auth()->guard('contact')->user()->client->custom_value2);
- $account = Account::where('key', auth()->guard('contact')->user()->client->custom_value2);
+ $account = Account::where('key', auth()->guard('contact')->user()->client->custom_value2)->first();
$account->trial_started = now();
$account->trial_plan = 'pro';
$account->save();
@@ -159,11 +161,15 @@ class NinjaPlanController extends Controller
$recurring_invoice->next_send_date = now()->addDays(14)->format('Y-m-d');
$recurring_invoice->save();
- $recurring_invoice = $recurring_invoice->calc()->getRecurringInvoice();
+ $r = $recurring_invoice->calc()->getRecurringInvoice();
- $recurring_invoice->service()->start();
+ $recurring_invoice->service()->start()->save();
- return redirect('https://invoicing.co');
+ LightLogs::create(new TrialStarted())
+ ->increment()
+ ->queue();
+
+ return $this->render('plan.trial_confirmed', $data);
}
@@ -180,7 +186,7 @@ class NinjaPlanController extends Controller
public function plan()
{
-
+ // return $this->trial();
//harvest the current plan
$data = [];
$data['late_invoice'] = false;
diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php
index eaf62b4b8fc1..bbd80dca4826 100644
--- a/app/Http/Controllers/InvoiceController.php
+++ b/app/Http/Controllers/InvoiceController.php
@@ -29,11 +29,13 @@ use App\Http\Requests\Invoice\UploadInvoiceRequest;
use App\Jobs\Entity\EmailEntity;
use App\Jobs\Invoice\StoreInvoice;
use App\Jobs\Invoice\ZipInvoices;
+use App\Jobs\Ninja\TransactionLog;
use App\Jobs\Util\UnlinkFile;
use App\Models\Account;
use App\Models\Client;
use App\Models\Invoice;
use App\Models\Quote;
+use App\Models\TransactionEvent;
use App\Repositories\InvoiceRepository;
use App\Transformers\InvoiceTransformer;
use App\Transformers\QuoteTransformer;
@@ -224,6 +226,16 @@ class InvoiceController extends BaseController
event(new InvoiceWasCreated($invoice, $invoice->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
+ $transaction = [
+ 'invoice' => $invoice->transaction_event(),
+ 'payment' => [],
+ 'client' => $invoice->client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::INVOICE_UPDATED, $transaction, $invoice->company->db);
+
return $this->itemResponse($invoice);
}
@@ -405,6 +417,16 @@ class InvoiceController extends BaseController
event(new InvoiceWasUpdated($invoice, $invoice->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
+ $transaction = [
+ 'invoice' => $invoice->transaction_event(),
+ 'payment' => [],
+ 'client' => $invoice->client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::INVOICE_UPDATED, $transaction, $invoice->company->db);
+
return $this->itemResponse($invoice);
}
@@ -663,7 +685,7 @@ class InvoiceController extends BaseController
return $this->errorResponse(['message' => ctrans('texts.invoice_cannot_be_marked_paid')], 400);
}
- $invoice = $invoice->service()->markPaid();
+ $invoice = $invoice->service()->markPaid()->save();
if (! $bulk) {
return $this->itemResponse($invoice);
@@ -935,6 +957,9 @@ class InvoiceController extends BaseController
if ($request->has('documents'))
$this->saveDocuments($request->file('documents'), $invoice);
+ if ($request->has('file'))
+ $this->saveDocuments($request->file('documents'), $invoice);
+
return $this->itemResponse($invoice->fresh());
}
diff --git a/app/Http/Controllers/QuoteController.php b/app/Http/Controllers/QuoteController.php
index 6f14b3a18b48..9d06d208608c 100644
--- a/app/Http/Controllers/QuoteController.php
+++ b/app/Http/Controllers/QuoteController.php
@@ -672,8 +672,7 @@ class QuoteController extends BaseController
return $this->itemResponse($quote);
break;
case 'approve':
- //make sure it hasn't already been approved!!
- if ($quote->status_id != Quote::STATUS_SENT) {
+ if (!in_array($quote->status_id, [Quote::STATUS_SENT, Quote::STATUS_DRAFT]) ) {
return response()->json(['message' => ctrans('texts.quote_unapprovable')], 400);
}
diff --git a/app/Http/Livewire/RequiredClientInfo.php b/app/Http/Livewire/RequiredClientInfo.php
index fc500ea87758..bc5fed3cf343 100644
--- a/app/Http/Livewire/RequiredClientInfo.php
+++ b/app/Http/Livewire/RequiredClientInfo.php
@@ -28,6 +28,8 @@ class RequiredClientInfo extends Component
*/
public $contact;
+ public $client;
+
/**
* @var array
*/
@@ -64,6 +66,36 @@ class RequiredClientInfo extends Component
// 'contact_phone' => 'phone',
];
+ public $client_address_array = [
+ 'address1',
+ 'address2',
+ 'city',
+ 'state',
+ 'postal_code',
+ 'country_id',
+ ];
+
+ protected $rules = [
+ 'client.address1' => '',
+ 'client.address2' => '',
+ 'client.city' => '',
+ 'client.state' => '',
+ 'client.postal_code' => '',
+ 'client.country_id' => '',
+ 'client.shipping_address1' => '',
+ 'client.shipping_address2' => '',
+ 'client.shipping_city' => '',
+ 'client.shipping_state' => '',
+ 'client.shipping_postal_code' => '',
+ 'client.shipping_country_id' => '',
+ 'contact.first_name' => '',
+ 'contact.last_name' => '',
+ 'contact.email' => '',
+ 'client.name' => '',
+ 'client.website' => '',
+ 'client.phone' => '',
+ ];
+
public $show_form = false;
public $company;
@@ -71,6 +103,13 @@ class RequiredClientInfo extends Component
public function mount()
{
MultiDB::setDb($this->company->db);
+
+ $this->client = $this->contact->client;
+
+ count($this->fields) > 0
+ ? $this->checkFields()
+ : $this->show_form = false;
+
}
public function handleSubmit(array $data): bool
@@ -141,8 +180,7 @@ class RequiredClientInfo extends Component
$_field = $this->mappings[$field['name']];
if (Str::startsWith($field['name'], 'client_')) {
- if (empty($this->contact->client->{$_field}) || is_null($this->contact->client->{$_field})) {
- // if (empty($this->contact->client->{$_field}) || is_null($this->contact->client->{$_field}) || $this->contact->client->{$_field} == 840) {
+ if (empty($this->contact->client->{$_field}) || is_null($this->contact->client->{$_field}) || in_array($_field, $this->client_address_array)) {
$this->show_form = true;
} else {
$this->fields[$index]['filled'] = true;
@@ -151,7 +189,6 @@ class RequiredClientInfo extends Component
if (Str::startsWith($field['name'], 'contact_')) {
if (empty($this->contact->{$_field}) || is_null($this->contact->{$_field})) {
-// if ((empty($this->contact->{$_field}) || is_null($this->contact->{$_field})) || $this->contact->client->{$_field} == 840) {
$this->show_form = true;
} else {
$this->fields[$index]['filled'] = true;
@@ -193,10 +230,6 @@ class RequiredClientInfo extends Component
public function render()
{
- count($this->fields) > 0
- ? $this->checkFields()
- : $this->show_form = false;
-
return render('components.livewire.required-client-info');
}
}
diff --git a/app/Http/Requests/Invoice/StoreInvoiceRequest.php b/app/Http/Requests/Invoice/StoreInvoiceRequest.php
index 4762aaae1cef..b1b1599c6e45 100644
--- a/app/Http/Requests/Invoice/StoreInvoiceRequest.php
+++ b/app/Http/Requests/Invoice/StoreInvoiceRequest.php
@@ -47,6 +47,16 @@ class StoreInvoiceRequest extends Request
$rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
}
+ if ($this->input('file') && is_array($this->input('file'))) {
+ $documents = count($this->input('file'));
+
+ foreach (range(0, $documents) as $index) {
+ $rules['file.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
+ }
+ } elseif ($this->input('file')) {
+ $rules['file'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
+ }
+
$rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
// $rules['client_id'] = ['required', Rule::exists('clients')->where('company_id', auth()->user()->company()->id)];
diff --git a/app/Http/Requests/Invoice/UpdateInvoiceRequest.php b/app/Http/Requests/Invoice/UpdateInvoiceRequest.php
index 21195c7a7ebd..797821c60c93 100644
--- a/app/Http/Requests/Invoice/UpdateInvoiceRequest.php
+++ b/app/Http/Requests/Invoice/UpdateInvoiceRequest.php
@@ -14,6 +14,7 @@ namespace App\Http\Requests\Invoice;
use App\Http\Requests\Request;
use App\Http\ValidationRules\Invoice\InvoiceBalanceSanity;
use App\Http\ValidationRules\Invoice\LockedInvoiceRule;
+use App\Http\ValidationRules\Project\ValidProjectForClient;
use App\Models\Invoice;
use App\Utils\Traits\ChecksEntityStatus;
use App\Utils\Traits\CleanLineItems;
@@ -59,6 +60,7 @@ class UpdateInvoiceRequest extends Request
$rules['line_items'] = 'array';
$rules['discount'] = 'sometimes|numeric';
+ $rules['project_id'] = ['bail', 'sometimes', new ValidProjectForClient($this->all())];
// if($this->input('status_id') != Invoice::STATUS_DRAFT)
// $rules['balance'] = new InvoiceBalanceSanity($this->invoice, $this->all());
diff --git a/app/Http/Requests/Invoice/UploadInvoiceRequest.php b/app/Http/Requests/Invoice/UploadInvoiceRequest.php
index ea908029e467..9426397d521f 100644
--- a/app/Http/Requests/Invoice/UploadInvoiceRequest.php
+++ b/app/Http/Requests/Invoice/UploadInvoiceRequest.php
@@ -33,6 +33,9 @@ class UploadInvoiceRequest extends Request
if($this->input('documents'))
$rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
+ if($this->input('file'))
+ $rules['file'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
+
return $rules;
}
diff --git a/app/Http/Requests/RecurringInvoice/StoreRecurringInvoiceRequest.php b/app/Http/Requests/RecurringInvoice/StoreRecurringInvoiceRequest.php
index 430ab1f1055b..93af56563ac6 100644
--- a/app/Http/Requests/RecurringInvoice/StoreRecurringInvoiceRequest.php
+++ b/app/Http/Requests/RecurringInvoice/StoreRecurringInvoiceRequest.php
@@ -12,6 +12,7 @@
namespace App\Http\Requests\RecurringInvoice;
use App\Http\Requests\Request;
+use App\Http\ValidationRules\Project\ValidProjectForClient;
use App\Http\ValidationRules\Recurring\UniqueRecurringInvoiceNumberRule;
use App\Models\Client;
use App\Models\RecurringInvoice;
@@ -55,6 +56,8 @@ class StoreRecurringInvoiceRequest extends Request
$rules['frequency_id'] = 'required|integer|digits_between:1,12';
+ $rules['project_id'] = ['bail', 'sometimes', new ValidProjectForClient($this->all())];
+
$rules['number'] = new UniqueRecurringInvoiceNumberRule($this->all());
return $rules;
@@ -80,6 +83,11 @@ class StoreRecurringInvoiceRequest extends Request
$input['vendor_id'] = $this->decodePrimaryKey($input['vendor_id']);
}
+ if (array_key_exists('project_id', $input) && is_string($input['project_id'])) {
+ $input['project_id'] = $this->decodePrimaryKey($input['project_id']);
+ }
+
+
if (isset($input['client_contacts'])) {
foreach ($input['client_contacts'] as $key => $contact) {
if (! array_key_exists('send_email', $contact) || ! array_key_exists('id', $contact)) {
diff --git a/app/Http/Requests/RecurringInvoice/UpdateRecurringInvoiceRequest.php b/app/Http/Requests/RecurringInvoice/UpdateRecurringInvoiceRequest.php
index d0c415056c98..eda41fd1da8d 100644
--- a/app/Http/Requests/RecurringInvoice/UpdateRecurringInvoiceRequest.php
+++ b/app/Http/Requests/RecurringInvoice/UpdateRecurringInvoiceRequest.php
@@ -12,6 +12,7 @@
namespace App\Http\Requests\RecurringInvoice;
use App\Http\Requests\Request;
+use App\Http\ValidationRules\Project\ValidProjectForClient;
use App\Utils\Traits\ChecksEntityStatus;
use App\Utils\Traits\CleanLineItems;
use App\Utils\Traits\MakesHash;
@@ -51,6 +52,7 @@ class UpdateRecurringInvoiceRequest extends Request
if($this->number)
$rules['number'] = Rule::unique('recurring_invoices')->where('company_id', auth()->user()->company()->id)->ignore($this->recurring_invoice->id);
+ $rules['project_id'] = ['bail', 'sometimes', new ValidProjectForClient($this->all())];
return $rules;
}
@@ -59,16 +61,6 @@ class UpdateRecurringInvoiceRequest extends Request
{
$input = $this->all();
- // foreach($this->input('documents') as $document)
- // {
- // if($document instanceof UploadedFile){
- // nlog("i am an uploaded file");
- // nlog($document);
- // }
- // else
- // nlog($document);
- // }
-
if (array_key_exists('design_id', $input) && is_string($input['design_id'])) {
$input['design_id'] = $this->decodePrimaryKey($input['design_id']);
}
@@ -81,6 +73,11 @@ class UpdateRecurringInvoiceRequest extends Request
$input['assigned_user_id'] = $this->decodePrimaryKey($input['assigned_user_id']);
}
+ if (array_key_exists('project_id', $input) && is_string($input['project_id'])) {
+ $input['project_id'] = $this->decodePrimaryKey($input['project_id']);
+ }
+
+
if (isset($input['invitations'])) {
foreach ($input['invitations'] as $key => $value) {
if (is_numeric($input['invitations'][$key]['id'])) {
diff --git a/app/Http/Requests/Vendor/StoreVendorRequest.php b/app/Http/Requests/Vendor/StoreVendorRequest.php
index 401f4506ef5a..a2997942110d 100644
--- a/app/Http/Requests/Vendor/StoreVendorRequest.php
+++ b/app/Http/Requests/Vendor/StoreVendorRequest.php
@@ -36,14 +36,19 @@ class StoreVendorRequest extends Request
/* Ensure we have a client name, and that all emails are unique*/
//$rules['name'] = 'required|min:1';
- $rules['id_number'] = 'unique:vendors,id_number,'.$this->id.',id,company_id,'.$this->company_id;
+ // $rules['id_number'] = 'unique:vendors,id_number,'.$this->id.',id,company_id,'.auth()->user()->company()->id;
//$rules['settings'] = new ValidVendorGroupSettingsRule();
- $rules['contacts.*.email'] = 'nullable|distinct';
+
+ $rules['contacts.*.email'] = 'bail|nullable|distinct|sometimes|email';
if (isset($this->number)) {
$rules['number'] = Rule::unique('vendors')->where('company_id', auth()->user()->company()->id);
}
+ // if (isset($this->id_number)) {
+ // $rules['id_number'] = Rule::unique('vendors')->where('company_id', auth()->user()->company()->id);
+ // }
+
return $rules;
}
@@ -59,7 +64,7 @@ class StoreVendorRequest extends Request
public function messages()
{
return [
- 'unique' => ctrans('validation.unique', ['attribute' => 'email']),
+ // 'unique' => ctrans('validation.unique', ['attribute' => 'email']),
//'required' => trans('validation.required', ['attribute' => 'email']),
'contacts.*.email.required' => ctrans('validation.email', ['attribute' => 'email']),
];
diff --git a/app/Http/Requests/Vendor/UpdateVendorRequest.php b/app/Http/Requests/Vendor/UpdateVendorRequest.php
index 10d922c06fb0..bfadb956b9f9 100644
--- a/app/Http/Requests/Vendor/UpdateVendorRequest.php
+++ b/app/Http/Requests/Vendor/UpdateVendorRequest.php
@@ -40,11 +40,11 @@ class UpdateVendorRequest extends Request
if($this->number)
$rules['number'] = Rule::unique('vendors')->where('company_id', auth()->user()->company()->id)->ignore($this->vendor->id);
- if($this->id_number)
- $rules['id_number'] = Rule::unique('vendors')->where('company_id', auth()->user()->company()->id)->ignore($this->vendor->id);
+ // if($this->id_number)
+ // $rules['id_number'] = Rule::unique('vendors')->where('company_id', auth()->user()->company()->id)->ignore($this->vendor->id);
$rules['contacts.*.email'] = 'nullable|distinct';
-
+ // $rules['id_number'] = 'unique:vendors,id_number,'.$this->id.',id,company_id,'.auth()->user()->company()->id;
return $rules;
}
diff --git a/app/Jobs/Company/CompanyExport.php b/app/Jobs/Company/CompanyExport.php
index 4e6fcc528b7a..368a70ed4e1f 100644
--- a/app/Jobs/Company/CompanyExport.php
+++ b/app/Jobs/Company/CompanyExport.php
@@ -259,7 +259,7 @@ class CompanyExport implements ShouldQueue
$this->export_data['invoices'] = $this->company->invoices()->orderBy('number', 'DESC')->cursor()->map(function ($invoice){
$invoice = $this->transformBasicEntities($invoice);
- $invoice = $this->transformArrayOfKeys($invoice, ['recurring_id','client_id', 'vendor_id', 'project_id', 'design_id', 'subscription_id']);
+ $invoice = $this->transformArrayOfKeys($invoice, ['recurring_id','client_id', 'vendor_id', 'project_id', 'design_id', 'subscription_id','project_id']);
return $invoice->makeVisible(['id',
'private_notes',
diff --git a/app/Jobs/Ninja/TransactionLog.php b/app/Jobs/Ninja/TransactionLog.php
new file mode 100644
index 000000000000..8694f65c1990
--- /dev/null
+++ b/app/Jobs/Ninja/TransactionLog.php
@@ -0,0 +1,116 @@
+ MarkPaidTransaction::class, //
+ TransactionEvent::INVOICE_UPDATED => InvoiceUpdatedTransaction::class, //
+ TransactionEvent::INVOICE_DELETED => InvoiceDeletedTransaction::class, //
+ TransactionEvent::INVOICE_PAYMENT_APPLIED => InvoicePaymentTransaction::class,
+ TransactionEvent::INVOICE_CANCELLED => InvoiceCancelledTransaction::class,
+ TransactionEvent::INVOICE_REVERSED => InvoiceReversalTransaction::class, //
+ TransactionEvent::INVOICE_FEE_APPLIED => InvoiceFeeAppliedTransaction::class, //
+ TransactionEvent::PAYMENT_MADE => PaymentMadeTransaction::class, //
+ TransactionEvent::GATEWAY_PAYMENT_MADE => GatewayPaymentMadeTransaction::class, //
+ TransactionEvent::PAYMENT_APPLIED => PaymentAppliedTransaction::class,
+ TransactionEvent::PAYMENT_REFUND => PaymentRefundedTransaction::class, //
+ TransactionEvent::PAYMENT_FAILED => PaymentFailedTransaction::class,
+ TransactionEvent::PAYMENT_DELETED => PaymentDeletedTransaction::class, //
+ TransactionEvent::CLIENT_STATUS => ClientStatusTransaction::class, //
+ ];
+
+ /**
+ * Create a new job instance.
+ *
+ * @return void
+ */
+ public function __construct($event, $data, $db)
+ {
+ $this->db = $db;
+ $this->event = $event;
+ $this->data = $data;
+
+ }
+
+ /**
+ * Execute the job.
+ *
+ * @return void
+ */
+ public function handle()
+ {
+ // if(!Ninja::isHosted())
+ // return;
+
+ $this->setTransformer();
+
+ $this->payload = $this->event_transformer->transform($this->data);
+
+ $this->persist();
+ }
+
+
+ private function setTransformer()
+ {
+ $class = $this->transformer_array[$this->event];
+
+ $this->event_transformer = new $class();
+
+ return $this;
+ }
+
+
+ private function persist()
+ {
+ MultiDB::setDB($this->db);
+
+ TransactionEvent::create($this->payload);
+ }
+}
diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php
index 3722127f5d65..5d7692913a6e 100644
--- a/app/Jobs/Util/Import.php
+++ b/app/Jobs/Util/Import.php
@@ -650,6 +650,7 @@ class Import implements ShouldQueue
if(array_key_exists('updated_at', $modified))
$client->updated_at = Carbon::parse($modified['updated_at']);
+ $client->country_id = array_key_exists('country_id', $modified) ? $modified['country_id'] : $this->company->settings->country_id;
$client->save(['timestamps' => false]);
$client->fresh();
diff --git a/app/Listeners/Misc/InvitationViewedListener.php b/app/Listeners/Misc/InvitationViewedListener.php
index e77b0d08296e..3a441f3f64f6 100644
--- a/app/Listeners/Misc/InvitationViewedListener.php
+++ b/app/Listeners/Misc/InvitationViewedListener.php
@@ -47,6 +47,9 @@ class InvitationViewedListener implements ShouldQueue
$entity_name = lcfirst(class_basename($event->entity));
$invitation = $event->invitation;
+ if($entity_name == 'recurringInvoice')
+ return;
+
$nmo = new NinjaMailerObject;
$nmo->mailable = new NinjaMailer( (new EntityViewedObject($invitation, $entity_name))->build() );
$nmo->company = $invitation->company;
diff --git a/app/Models/Client.php b/app/Models/Client.php
index 28727d9f3673..71317443deb3 100644
--- a/app/Models/Client.php
+++ b/app/Models/Client.php
@@ -153,7 +153,7 @@ class Client extends BaseModel implements HasLocalePreference
public function gateway_tokens()
{
- return $this->hasMany(ClientGatewayToken::class);
+ return $this->hasMany(ClientGatewayToken::class)->orderBy('is_default', 'ASC');
}
public function expenses()
@@ -840,4 +840,17 @@ class Client extends BaseModel implements HasLocalePreference
return $offset;
}
+
+ public function transaction_event()
+ {
+ $client = $this->fresh();
+
+ return [
+ 'client_id' => $client->id,
+ 'client_balance' => $client->balance ?: 0,
+ 'client_paid_to_date' => $client->paid_to_date ?: 0,
+ 'client_credit_balance' => $client->credit_balance ?: 0
+ ];
+ }
+
}
diff --git a/app/Models/Company.php b/app/Models/Company.php
index 40dae5dc15a2..0bfa5e1431cd 100644
--- a/app/Models/Company.php
+++ b/app/Models/Company.php
@@ -476,7 +476,8 @@ class Company extends BaseModel
public function owner()
{
- return $this->company_users->where('is_owner', true)->first()->user;
+ return $this->company_users()->withTrashed()->where('is_owner', true)->first()->user;
+ //return $this->company_users->where('is_owner', true)->first()->user;
}
public function resolveRouteBinding($value, $field = null)
diff --git a/app/Models/Credit.php b/app/Models/Credit.php
index dec71136476d..310041dbefd4 100644
--- a/app/Models/Credit.php
+++ b/app/Models/Credit.php
@@ -302,4 +302,16 @@ class Credit extends BaseModel
});
}
+ public function transaction_event()
+ {
+
+ $credit = $this->fresh();
+
+ return [
+ 'credit_id' => $credit->id,
+ 'credit_amount' => $credit->amount ?: 0,
+ 'credit_balance' => $credit->balance ?: 0,
+ 'credit_status' => $credit->status_id ?: 1,
+ ];
+ }
}
diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php
index 3890db1c03f4..5f214de0ce4b 100644
--- a/app/Models/Gateway.php
+++ b/app/Models/Gateway.php
@@ -103,7 +103,7 @@ class Gateway extends StaticModel
case 20:
return [
GatewayType::CREDIT_CARD => ['refund' => true, 'token_billing' => true],
- GatewayType::BANK_TRANSFER => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable','charge.succeeded']],
+ GatewayType::BANK_TRANSFER => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable','charge.succeeded','payment_intent.succeeded']],
GatewayType::ALIPAY => ['refund' => false, 'token_billing' => false],
GatewayType::APPLE_PAY => ['refund' => false, 'token_billing' => false],
GatewayType::SOFORT => ['refund' => true, 'token_billing' => true, 'webhooks' => ['source.chargeable', 'charge.succeeded']], //Stripe
diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php
index c85230a96bf0..a46dc761016a 100644
--- a/app/Models/Invoice.php
+++ b/app/Models/Invoice.php
@@ -232,6 +232,11 @@ class Invoice extends BaseModel
{
return $this->hasMany(Expense::class);
}
+
+ public function expense()
+ {
+ return $this->hasOne(Expense::class);
+ }
/**
* Service entry points.
*/
@@ -535,4 +540,19 @@ class Invoice extends BaseModel
break;
}
}
+
+ public function transaction_event()
+ {
+
+ $invoice = $this->fresh();
+
+ return [
+ 'invoice_id' => $invoice->id,
+ 'invoice_amount' => $invoice->amount ?: 0,
+ 'invoice_partial' => $invoice->partial ?: 0,
+ 'invoice_balance' => $invoice->balance ?: 0,
+ 'invoice_paid_to_date' => $invoice->paid_to_date ?: 0,
+ 'invoice_status' => $invoice->status_id ?: 1,
+ ];
+ }
}
diff --git a/app/Models/Payment.php b/app/Models/Payment.php
index e2b96447ea54..113d9a1cde4c 100644
--- a/app/Models/Payment.php
+++ b/app/Models/Payment.php
@@ -324,4 +324,19 @@ class Payment extends BaseModel
}
+ public function transaction_event()
+ {
+ $payment = $this->fresh();
+
+ return [
+ 'payment_id' => $payment->id,
+ 'payment_amount' => $payment->amount ?: 0,
+ 'payment_applied' => $payment->applied ?: 0,
+ 'payment_refunded' => $payment->refunded ?: 0,
+ 'payment_status' => $payment->status_id ?: 1,
+ 'paymentables' => $payment->paymentables->toArray(),
+ 'payment_request' => request() ? request()->all() : [],
+ ];
+ }
+
}
diff --git a/app/Models/TransactionEvent.php b/app/Models/TransactionEvent.php
new file mode 100644
index 000000000000..1df68c0f1995
--- /dev/null
+++ b/app/Models/TransactionEvent.php
@@ -0,0 +1,46 @@
+ 'array',
+ 'payment_request' => 'array',
+ 'paymentables' => 'array',
+ ];
+
+ public const INVOICE_MARK_PAID = 1;
+ public const INVOICE_UPDATED = 2;
+ public const INVOICE_DELETED = 3;
+ public const INVOICE_PAYMENT_APPLIED = 4;
+ public const INVOICE_CANCELLED = 5;
+ public const INVOICE_FEE_APPLIED = 6;
+ public const INVOICE_REVERSED = 7;
+
+ public const PAYMENT_MADE = 100;
+ public const PAYMENT_APPLIED = 101;
+ public const PAYMENT_REFUND = 102;
+ public const PAYMENT_FAILED = 103;
+ public const GATEWAY_PAYMENT_MADE = 104;
+ public const PAYMENT_DELETED = 105;
+
+ public const CLIENT_STATUS = 200;
+}
diff --git a/app/PaymentDrivers/BaseDriver.php b/app/PaymentDrivers/BaseDriver.php
index 4cf6aa938587..7718c478acb7 100644
--- a/app/PaymentDrivers/BaseDriver.php
+++ b/app/PaymentDrivers/BaseDriver.php
@@ -20,6 +20,7 @@ use App\Jobs\Mail\NinjaMailer;
use App\Jobs\Mail\NinjaMailerJob;
use App\Jobs\Mail\NinjaMailerObject;
use App\Jobs\Mail\PaymentFailedMailer;
+use App\Jobs\Ninja\TransactionLog;
use App\Jobs\Util\SystemLogger;
use App\Mail\Admin\ClientPaymentFailureObject;
use App\Models\Client;
@@ -32,6 +33,7 @@ use App\Models\Payment;
use App\Models\PaymentHash;
use App\Models\PaymentType;
use App\Models\SystemLog;
+use App\Models\TransactionEvent;
use App\Services\Subscription\SubscriptionService;
use App\Utils\Ninja;
use App\Utils\Traits\MakesHash;
@@ -317,11 +319,23 @@ class BaseDriver extends AbstractPaymentDriver
$invoices = Invoice::whereIn('id', $this->transformKeys(array_column($payment_invoices, 'invoice_id')))->withTrashed()->get();
$invoices->each(function ($invoice) use ($fee_total) {
+
if (collect($invoice->line_items)->contains('type_id', '3')) {
$invoice->service()->toggleFeesPaid()->save();
$invoice->client->service()->updateBalance($fee_total)->save();
$invoice->ledger()->updateInvoiceBalance($fee_total, "Gateway fee adjustment for invoice {$invoice->number}");
}
+
+ $transaction = [
+ 'invoice' => $invoice->transaction_event(),
+ 'payment' => [],
+ 'client' => $invoice->client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::INVOICE_FEE_APPLIED, $transaction, $invoice->company->db);
+
});
}
diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php
index 36e6d4dfa37c..ab85688fe595 100644
--- a/app/PaymentDrivers/Eway/CreditCard.php
+++ b/app/PaymentDrivers/Eway/CreditCard.php
@@ -146,9 +146,21 @@ class CreditCard
}
+ $invoice_numbers = '';
+
+ if($this->eway_driver->payment_hash->data)
+ $invoice_numbers = collect($this->eway_driver->payment_hash->data->invoices)->pluck('invoice_number')->implode(',');
+
+ $amount = array_sum(array_column($this->eway_driver->payment_hash->invoices(), 'amount')) + $this->eway_driver->payment_hash->fee_total;
+
+ $description = "Invoices: {$invoice_numbers} for {$amount} for client {$this->eway_driver->client->present()->name()}";
+
$transaction = [
'Payment' => [
'TotalAmount' => $this->convertAmountForEway(),
+ 'CurrencyCode' => $this->eway_driver->client->currency()->code,
+ 'InvoiceNumber' => $invoice_numbers,
+ 'InvoiceReference' => $description,
],
'TransactionType' => \Eway\Rapid\Enum\TransactionType::PURCHASE,
'SecuredCardData' => $request->input('securefieldcode'),
@@ -225,12 +237,22 @@ class CreditCard
{
$amount = array_sum(array_column($payment_hash->invoices(), 'amount')) + $payment_hash->fee_total;
+
+ if($this->eway_driver->payment_hash->data)
+ $invoice_numbers = collect($this->eway_driver->payment_hash->data->invoices)->pluck('invoice_number')->implode(',');
+
+ $description = "Invoices: {$invoice_numbers} for {$amount} for client {$this->eway_driver->client->present()->name()}";
+
$transaction = [
'Customer' => [
'TokenCustomerID' => $token,
],
'Payment' => [
'TotalAmount' => $this->convertAmountForEway($amount),
+ 'CurrencyCode' => $this->eway_driver->client->currency()->code,
+ 'InvoiceNumber' => $invoice_numbers,
+ 'InvoiceDescription' => $description,
+ 'InvoiceReference' => $description,
],
'TransactionType' => \Eway\Rapid\Enum\TransactionType::RECURRING,
];
diff --git a/app/PaymentDrivers/Eway/Token.php b/app/PaymentDrivers/Eway/Token.php
index b49bf12a1439..1d40f7cc01f0 100644
--- a/app/PaymentDrivers/Eway/Token.php
+++ b/app/PaymentDrivers/Eway/Token.php
@@ -43,6 +43,14 @@ class Token
$amount = array_sum(array_column($payment_hash->invoices(), 'amount')) + $payment_hash->fee_total;
+
+ $invoice_numbers = '';
+
+ if($this->eway_driver->payment_hash->data)
+ $invoice_numbers = collect($this->eway_driver->payment_hash->data->invoices)->pluck('invoice_number')->implode(',');
+
+ $description = "Invoices: {$invoice_numbers} for {$amount} for client {$this->eway_driver->client->present()->name()}";
+
$this->eway_driver->payment_hash = $payment_hash;
$transaction = [
@@ -51,6 +59,10 @@ class Token
],
'Payment' => [
'TotalAmount' => $this->eway_driver->convertAmount($amount),
+ 'CurrencyCode' => $this->eway_driver->client->currency()->code,
+ 'InvoiceNumber' => $invoice_numbers,
+ 'InvoiceDescription' => $description,
+ 'InvoiceReference' => $description,
],
'TransactionType' => \Eway\Rapid\Enum\TransactionType::RECURRING,
];
diff --git a/app/PaymentDrivers/Stripe/ACSS.php b/app/PaymentDrivers/Stripe/ACSS.php
index 7f3c0cc4a116..69069bf76400 100644
--- a/app/PaymentDrivers/Stripe/ACSS.php
+++ b/app/PaymentDrivers/Stripe/ACSS.php
@@ -154,6 +154,7 @@ class ACSS
'interval_description' => 'when any invoice becomes due',
'transaction_type' => 'personal' // TODO: check if is company or personal https://stripe.com/docs/payments/acss-debit
],
+ 'verification_method' => 'instant',
]
]
], $this->stripe->stripe_connect_auth);
@@ -183,7 +184,7 @@ class ACSS
$this->stripe->payment_hash->save();
if (property_exists($gateway_response, 'status') && $gateway_response->status == 'processing') {
- $this->storePaymentMethod($gateway_response);
+ // $this->storePaymentMethod($gateway_response);
return $this->processSuccessfulPayment($gateway_response->id);
}
return $this->processUnsuccessfulPayment();
@@ -243,12 +244,13 @@ class ACSS
private function storePaymentMethod($intent)
{
+
try {
$method = $this->stripe->getStripePaymentMethod($intent->payment_method);
$payment_meta = new \stdClass;
- $payment_meta->brand = (string) \sprintf('%s (%s)', $method->au_becs_debit->bank_code, ctrans('texts.acss'));
- $payment_meta->last4 = (string) $method->au_becs_debit->last4;
+ $payment_meta->brand = (string) $method->acss_debit->bank_name;
+ $payment_meta->last4 = (string) $method->acss_debit->last4;
$payment_meta->state = 'authorized';
$payment_meta->type = GatewayType::ACSS;
diff --git a/app/PaymentDrivers/Stripe/ImportCustomers.php b/app/PaymentDrivers/Stripe/ImportCustomers.php
index 38690c8aa25a..8f322389924c 100644
--- a/app/PaymentDrivers/Stripe/ImportCustomers.php
+++ b/app/PaymentDrivers/Stripe/ImportCustomers.php
@@ -76,11 +76,9 @@ class ImportCustomers
$account = $this->stripe->company_gateway->company->account;
- if(!$account->isPaidHostedClient() && Client::where('company_id', $this->stripe->company_gateway->company_id)->count() > config('ninja.quotas.free.clients'))
+ if(Ninja::isHosted() && !$account->isPaidHostedClient() && Client::where('company_id', $this->stripe->company_gateway->company_id)->count() > config('ninja.quotas.free.clients'))
return;
- // nlog("search Stripe for {$customer->id}");
-
$existing_customer_token = $this->stripe
->company_gateway
->client_gateway_tokens()
@@ -104,9 +102,6 @@ class ImportCustomers
return;
}
- // nlog("inserting a customer");
- //nlog($customer);
-
$client = ClientFactory::create($this->stripe->company_gateway->company_id, $this->stripe->company_gateway->user_id);
if($customer->address)
diff --git a/app/PaymentDrivers/Stripe/UpdatePaymentMethods.php b/app/PaymentDrivers/Stripe/UpdatePaymentMethods.php
index f585ada7b80f..d3b9e974e221 100644
--- a/app/PaymentDrivers/Stripe/UpdatePaymentMethods.php
+++ b/app/PaymentDrivers/Stripe/UpdatePaymentMethods.php
@@ -33,33 +33,10 @@ class UpdatePaymentMethods
$this->stripe = $stripe;
}
- // public function run()
- // {
- // $this->stripe->init();
-
- // $this->stripe
- // ->company_gateway
- // ->client_gateway_tokens
- // ->each(function ($token){
-
-
- // // $bank_accounts = Customer::allSources(
- // // $token->gateway_customer_reference,
- // // ['object' => 'bank_account', 'limit' => 300]
- // // );
-
- // // foreach($bank_accounts as $bank_account)
- // // {
- // // $this->addOrUpdateBankAccount($bank_account, $token);
- // // }
- // // $this->processCustomer($token->gateway_customer_reference);
-
- // });
-
- // }
-
public function updateMethods(Customer $customer, Client $client)
{
+ $this->stripe->client = $client;
+
$card_methods = PaymentMethod::all([
'customer' => $customer->id,
'type' => 'card',
@@ -93,37 +70,52 @@ class UpdatePaymentMethods
$this->addOrUpdateCard($method, $customer->id, $client, GatewayType::SOFORT);
}
- //$this->importBankAccounts($customer, $client);
+ $this->importBankAccounts($customer, $client);
}
private function importBankAccounts($customer, $client)
{
+ $sources = $customer->sources;
+
+ foreach($sources->data as $method)
+ {
+
+ $token_exists = ClientGatewayToken::where([
+ 'gateway_customer_reference' => $customer->id,
+ 'token' => $method->id,
+ 'client_id' => $client->id,
+ 'company_id' => $client->company_id,
+ ])->exists();
+
+ /* Already exists return */
+ if($token_exists)
+ continue;
+
+ $payment_meta = new \stdClass;
+ $payment_meta->brand = (string) \sprintf('%s (%s)', $method->bank_name, ctrans('texts.ach'));
+ $payment_meta->last4 = (string) $method->last4;
+ $payment_meta->type = GatewayType::BANK_TRANSFER;
+ $payment_meta->state = $method->status;
+
+ $data = [
+ 'payment_meta' => $payment_meta,
+ 'token' => $method->id,
+ 'payment_method_id' => GatewayType::BANK_TRANSFER,
+ ];
+
+ $additional_data = ['gateway_customer_reference' => $customer->id];
+
+ if($customer->default_source === $method->id)
+ $additional_data = ['gateway_customer_reference' => $customer->id, 'is_default', 1];
+
+ $this->stripe->storeGatewayToken($data, $additional_data);
+
+ }
+
+
}
- // private function addOrUpdateBankAccount($bank_account, $customer_reference, Client $client)
- // {
- // $token_exists = ClientGatewayToken::where([
- // 'gateway_customer_reference' => $customer_reference,
- // 'token' => $bank_account->id,
- // ])->exists();
-
- // /* Already exists return */
- // if($token_exists)
- // return;
-
- // $cgt = ClientGatewayTokenFactory::create($client->company_id);
- // $cgt->client_id = $client->id;
- // $cgt->token = $bank_account->id;
- // $cgt->gateway_customer_reference = $customer_reference;
- // $cgt->company_gateway_id = $this->stripe->company_gateway->id;
- // $cgt->gateway_type_id = GatewayType::BANK_TRANSFER;
- // $cgt->meta = new \stdClass;
- // $cgt->routing_number = $bank_account->routing_number;
- // $cgt->save();
-
- // }
-
private function addOrUpdateCard(PaymentMethod $method, $customer_reference, Client $client, $type_id)
{
diff --git a/app/PaymentDrivers/StripePaymentDriver.php b/app/PaymentDrivers/StripePaymentDriver.php
index 7d0ed85771de..5826cb36761a 100644
--- a/app/PaymentDrivers/StripePaymentDriver.php
+++ b/app/PaymentDrivers/StripePaymentDriver.php
@@ -533,12 +533,10 @@ class StripePaymentDriver extends BaseDriver
//payment_intent.succeeded - this will confirm or cancel the payment
if($request->type === 'payment_intent.succeeded'){
PaymentIntentWebhook::dispatch($request->data, $request->company_key, $this->company_gateway->id)->delay(10);
- // PaymentIntentWebhook::dispatch($request->data, $request->company_key, $this->company_gateway->id);
return response()->json([], 200);
}
if ($request->type === 'charge.succeeded') {
- // if ($request->type === 'charge.succeeded' || $request->type === 'payment_intent.succeeded') {
foreach ($request->data as $transaction) {
diff --git a/app/Repositories/BaseRepository.php b/app/Repositories/BaseRepository.php
index 2cd20f1522b4..55a335be77d2 100644
--- a/app/Repositories/BaseRepository.php
+++ b/app/Repositories/BaseRepository.php
@@ -222,6 +222,9 @@ class BaseRepository
if (array_key_exists('documents', $data))
$this->saveDocuments($data['documents'], $model);
+ if (array_key_exists('file', $data))
+ $this->saveDocuments($data['file'], $model);
+
/* If invitations are present we need to filter existing invitations with the new ones */
if (isset($data['invitations'])) {
$invitations = collect($data['invitations']);
diff --git a/app/Repositories/PaymentRepository.php b/app/Repositories/PaymentRepository.php
index 37d408eb4b72..fa02bec8e00f 100644
--- a/app/Repositories/PaymentRepository.php
+++ b/app/Repositories/PaymentRepository.php
@@ -14,11 +14,13 @@ namespace App\Repositories;
use App\Events\Payment\PaymentWasCreated;
use App\Events\Payment\PaymentWasDeleted;
use App\Jobs\Credit\ApplyCreditPayment;
+use App\Jobs\Ninja\TransactionLog;
use App\Libraries\Currency\Conversion\CurrencyApi;
use App\Models\Client;
use App\Models\Credit;
use App\Models\Invoice;
use App\Models\Payment;
+use App\Models\TransactionEvent;
use App\Utils\Ninja;
use App\Utils\Traits\MakesHash;
use App\Utils\Traits\SavesDocuments;
@@ -94,11 +96,8 @@ class PaymentRepository extends BaseRepository {
if (array_key_exists('credits', $data) && is_array($data['credits']) && count($data['credits']) > 0) {
$_credit_totals = array_sum(array_column($data['credits'], 'amount'));
- // if ($data['amount'] == $_credit_totals) {
- // $data['amount'] = 0;
- // } else {
- $client->service()->updatePaidToDate($_credit_totals)->save();
- // }
+ $client->service()->updatePaidToDate($_credit_totals)->save();
+
}
}
@@ -181,10 +180,19 @@ class PaymentRepository extends BaseRepository {
}
$payment->applied += ($invoice_totals - $credit_totals); //wont work because - check tests
- // $payment->applied += $invoice_totals; //wont work because - check tests
$payment->save();
+ $transaction = [
+ 'invoice' => [],
+ 'payment' => $payment->transaction_event(),
+ 'client' => $payment->client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::PAYMENT_MADE, $transaction, $payment->company->db);
+
return $payment->fresh();
}
diff --git a/app/Repositories/TaskRepository.php b/app/Repositories/TaskRepository.php
index 2717f11dc9d5..2dc14e4acf79 100644
--- a/app/Repositories/TaskRepository.php
+++ b/app/Repositories/TaskRepository.php
@@ -182,4 +182,50 @@ class TaskRepository extends BaseRepository
});
}
+
+ public function start(Task $task)
+ {
+ if(strlen($task->time_log) < 5)
+ {
+ $log = [];
+
+ $log = array_merge($log, [[time(),0]]);
+ $task->time_log = json_encode($log);
+ $task->save();
+
+ }
+
+ $log = json_decode($task->time_log,true);;
+
+ $last = end($log);
+
+ if($last[1] !== 0){
+
+ $new = [time(), 0];
+ $log = array_merge($log, [$new]);
+ $task->time_log = json_encode($log);
+ $task->save();
+
+ }
+
+ }
+
+ public function stop(Task $task)
+ {
+ $log = json_decode($task->time_log,true);;
+
+ $last = end($log);
+
+ if($last[1] === 0){
+
+ $last[1] = time();
+
+ array_pop($log);
+ $log = array_merge($log, [$last]);
+
+ $task->time_log = json_encode($log);
+ $task->save();
+ }
+
+ }
}
diff --git a/app/Services/Client/ClientService.php b/app/Services/Client/ClientService.php
index 2f2152429f4f..aa310479d812 100644
--- a/app/Services/Client/ClientService.php
+++ b/app/Services/Client/ClientService.php
@@ -28,21 +28,27 @@ class ClientService
public function updateBalance(float $amount)
{
- $this->client->balance += $amount;
+ // $this->client->balance += $amount;
+
+ $this->client->increment('balance', $amount);
return $this;
}
public function updatePaidToDate(float $amount)
{
- $this->client->paid_to_date += $amount;
+ // $this->client->paid_to_date += $amount;
+
+ $this->client->increment('paid_to_date', $amount);
return $this;
}
public function adjustCreditBalance(float $amount)
{
- $this->client->credit_balance += $amount;
+ // $this->client->credit_balance += $amount;
+
+ $this->client->increment('credit_balance', $amount);
return $this;
}
diff --git a/app/Services/Credit/CreditService.php b/app/Services/Credit/CreditService.php
index e7b00b44f995..600684c4b403 100644
--- a/app/Services/Credit/CreditService.php
+++ b/app/Services/Credit/CreditService.php
@@ -133,11 +133,16 @@ class CreditService
->attach($this->credit->id, ['amount' => $adjustment]);
//reduce client paid_to_date by $this->credit->balance amount
- $this->credit
- ->client
- ->service()
- ->updatePaidToDate($adjustment)
- ->save();
+ // $this->credit
+ // ->client
+ // ->service()
+ // ->updatePaidToDate($adjustment)
+ // ->save();
+
+ $client = $this->credit->client->fresh();
+ $client->service()
+ ->updatePaidToDate($adjustment)
+ ->save();
event('eloquent.created: App\Models\Payment', $payment);
@@ -162,21 +167,24 @@ class CreditService
public function adjustBalance($adjustment)
{
- $this->credit->balance += $adjustment;
+ // $this->credit->balance += $adjustment;
+ $this->credit->increment('balance', $adjustment);
return $this;
}
public function updatePaidToDate($adjustment)
{
- $this->credit->paid_to_date += $adjustment;
-
+ // $this->credit->paid_to_date += $adjustment;
+ $this->credit->increment('paid_to_date', $adjustment);
+
return $this;
}
public function updateBalance($adjustment)
{
- $this->credit->balance -= $adjustment;
+ // $this->credit->balance -= $adjustment;
+ $this->credit->decrement('balance', $adjustment);
return $this;
}
diff --git a/app/Services/Invoice/ApplyPayment.php b/app/Services/Invoice/ApplyPayment.php
index 65a6b901a51f..fa67f871f31d 100644
--- a/app/Services/Invoice/ApplyPayment.php
+++ b/app/Services/Invoice/ApplyPayment.php
@@ -11,8 +11,10 @@
namespace App\Services\Invoice;
+use App\Jobs\Ninja\TransactionLog;
use App\Models\Invoice;
use App\Models\Payment;
+use App\Models\TransactionEvent;
use App\Services\AbstractService;
class ApplyPayment extends AbstractService
@@ -128,6 +130,16 @@ class ApplyPayment extends AbstractService
$this->invoice->service()->applyNumber()->workFlow()->save();
+ $transaction = [
+ 'invoice' => $this->invoice->transaction_event(),
+ 'payment' => $this->payment->transaction_event(),
+ 'client' => $this->invoice->client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::INVOICE_PAYMENT_APPLIED, $transaction, $this->invoice->company->db);
+
return $this->invoice;
}
}
diff --git a/app/Services/Invoice/AutoBillInvoice.php b/app/Services/Invoice/AutoBillInvoice.php
index 4fe87c4ec4e0..37467098e17a 100644
--- a/app/Services/Invoice/AutoBillInvoice.php
+++ b/app/Services/Invoice/AutoBillInvoice.php
@@ -189,8 +189,8 @@ class AutoBillInvoice extends AbstractService
->adjustCreditBalance($amount * -1)
->save();
- $this->invoice->ledger()
- ->updateInvoiceBalance($amount * -1, "Invoice {$this->invoice->number} payment using Credit {$current_credit->number}")
+ $this->invoice->ledger() //09-03-2022
+ // ->updateInvoiceBalance($amount * -1, "Invoice {$this->invoice->number} payment using Credit {$current_credit->number}")
->updateCreditBalance($amount * -1, "Credit {$current_credit->number} used to pay down Invoice {$this->invoice->number}")
->save();
diff --git a/app/Services/Invoice/HandleCancellation.php b/app/Services/Invoice/HandleCancellation.php
index e380d69f7549..fb93aca67ac7 100644
--- a/app/Services/Invoice/HandleCancellation.php
+++ b/app/Services/Invoice/HandleCancellation.php
@@ -12,8 +12,10 @@
namespace App\Services\Invoice;
use App\Events\Invoice\InvoiceWasCancelled;
+use App\Jobs\Ninja\TransactionLog;
use App\Models\Client;
use App\Models\Invoice;
+use App\Models\TransactionEvent;
use App\Services\AbstractService;
use App\Utils\Ninja;
use App\Utils\Traits\GeneratesCounter;
@@ -52,6 +54,16 @@ class HandleCancellation extends AbstractService
event(new InvoiceWasCancelled($this->invoice, $this->invoice->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
+ $transaction = [
+ 'invoice' => $this->invoice->transaction_event(),
+ 'payment' => [],
+ 'client' => $this->invoice->client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::INVOICE_CANCELLED, $transaction, $this->invoice->company->db);
+
return $this->invoice;
}
diff --git a/app/Services/Invoice/HandleReversal.php b/app/Services/Invoice/HandleReversal.php
index fe9297350b06..10933790e7bb 100644
--- a/app/Services/Invoice/HandleReversal.php
+++ b/app/Services/Invoice/HandleReversal.php
@@ -15,11 +15,13 @@ use App\Events\Invoice\InvoiceWasReversed;
use App\Factory\CreditFactory;
use App\Factory\InvoiceItemFactory;
use App\Helpers\Invoice\InvoiceSum;
+use App\Jobs\Ninja\TransactionLog;
use App\Models\Client;
use App\Models\Credit;
use App\Models\Invoice;
use App\Models\Payment;
use App\Models\Paymentable;
+use App\Models\TransactionEvent;
use App\Services\AbstractService;
use App\Utils\Ninja;
use App\Utils\Traits\GeneratesCounter;
@@ -136,6 +138,16 @@ class HandleReversal extends AbstractService
event(new InvoiceWasReversed($this->invoice, $this->invoice->company, Ninja::eventVars()));
+ $transaction = [
+ 'invoice' => $this->invoice->transaction_event(),
+ 'payment' => [],
+ 'client' => $this->invoice->client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::INVOICE_REVERSED, $transaction, $this->invoice->company->db);
+
return $this->invoice;
//create a ledger row for this with the resulting Credit ( also include an explanation in the notes section )
}
diff --git a/app/Services/Invoice/InvoiceService.php b/app/Services/Invoice/InvoiceService.php
index 50e7249d0b05..233644b207ff 100644
--- a/app/Services/Invoice/InvoiceService.php
+++ b/app/Services/Invoice/InvoiceService.php
@@ -145,8 +145,11 @@ class InvoiceService
return $this;
}
- $this->invoice->balance += $balance_adjustment;
+ // $this->invoice->balance += $balance_adjustment;
+ $this->invoice->increment('balance', $balance_adjustment);
+
+
if (round($this->invoice->balance,2) == 0 && !$is_draft) {
$this->invoice->status_id = Invoice::STATUS_PAID;
}
@@ -160,7 +163,10 @@ class InvoiceService
public function updatePaidToDate($adjustment)
{
- $this->invoice->paid_to_date += $adjustment;
+ // $this->invoice->paid_to_date += $adjustment;
+
+ $this->invoice->increment('paid_to_date', $adjustment);
+
return $this;
}
@@ -381,7 +387,8 @@ class InvoiceService
/*Update the partial amount of a invoice*/
public function updatePartial($amount)
{
- $this->invoice->partial += $amount;
+ // $this->invoice->partial += $amount;
+ $this->invoice->increment('partial', $amount);
return $this;
}
diff --git a/app/Services/Invoice/MarkInvoiceDeleted.php b/app/Services/Invoice/MarkInvoiceDeleted.php
index 51b7c3ccc12c..ee5dafb2ff32 100644
--- a/app/Services/Invoice/MarkInvoiceDeleted.php
+++ b/app/Services/Invoice/MarkInvoiceDeleted.php
@@ -11,7 +11,9 @@
namespace App\Services\Invoice;
+use App\Jobs\Ninja\TransactionLog;
use App\Models\Invoice;
+use App\Models\TransactionEvent;
use App\Services\AbstractService;
use App\Utils\Traits\GeneratesCounter;
use Illuminate\Support\Facades\DB;
@@ -47,6 +49,16 @@ class MarkInvoiceDeleted extends AbstractService
->adjustBalance()
->adjustLedger();
+ $transaction = [
+ 'invoice' => $this->invoice->transaction_event(),
+ 'payment' => $this->invoice->payments()->exists() ? $this->invoice->payments()->first()->transaction_event() : [],
+ 'client' => $this->invoice->client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => ['total_payments' => $this->total_payments, 'balance_adjustment' => $this->balance_adjustment, 'adjustment_amount' => $this->adjustment_amount],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::INVOICE_DELETED, $transaction, $this->invoice->company->db);
+
return $this->invoice;
}
@@ -127,11 +139,6 @@ class MarkInvoiceDeleted extends AbstractService
$this->total_payments = $this->invoice->payments->sum('amount') - $this->invoice->payments->sum('refunded');
$this->balance_adjustment = $this->invoice->balance;
-
- //$this->total_payments = $this->invoice->payments->sum('amount - refunded');
-
- // nlog("adjustment amount = {$this->adjustment_amount}");
- // nlog("total payments = {$this->total_payments}");
return $this;
}
diff --git a/app/Services/Invoice/MarkPaid.php b/app/Services/Invoice/MarkPaid.php
index 205c5cee57ab..b39679ad3c8d 100644
--- a/app/Services/Invoice/MarkPaid.php
+++ b/app/Services/Invoice/MarkPaid.php
@@ -15,10 +15,12 @@ use App\Events\Invoice\InvoiceWasPaid;
use App\Events\Payment\PaymentWasCreated;
use App\Factory\PaymentFactory;
use App\Jobs\Invoice\InvoiceWorkflowSettings;
+use App\Jobs\Ninja\TransactionLog;
use App\Jobs\Payment\EmailPayment;
use App\Libraries\Currency\Conversion\CurrencyApi;
use App\Models\Invoice;
use App\Models\Payment;
+use App\Models\TransactionEvent;
use App\Services\AbstractService;
use App\Services\Client\ClientService;
use App\Utils\Ninja;
@@ -110,6 +112,16 @@ class MarkPaid extends AbstractService
event(new PaymentWasCreated($payment, $payment->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
event(new InvoiceWasPaid($this->invoice, $payment, $payment->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
+ $transaction = [
+ 'invoice' => $this->invoice->transaction_event(),
+ 'payment' => $payment->transaction_event(),
+ 'client' => $this->invoice->client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::INVOICE_MARK_PAID, $transaction, $this->invoice->company->db);
+
return $this->invoice;
}
diff --git a/app/Services/Invoice/UpdateBalance.php b/app/Services/Invoice/UpdateBalance.php
index 87864fd61342..51d023659569 100644
--- a/app/Services/Invoice/UpdateBalance.php
+++ b/app/Services/Invoice/UpdateBalance.php
@@ -34,17 +34,20 @@ class UpdateBalance extends AbstractService
if ($this->invoice->is_deleted) {
return $this->invoice;
}
-nlog("invoice id = {$this->invoice->id}");
-nlog("invoice balance = {$this->invoice->balance}");
-nlog("invoice adjustment = {$this->balance_adjustment}");
+
+ nlog("invoice id = {$this->invoice->id}");
+ nlog("invoice balance = {$this->invoice->balance}");
+ nlog("invoice adjustment = {$this->balance_adjustment}");
- $this->invoice->balance += floatval($this->balance_adjustment);
+ // $this->invoice->balance += floatval($this->balance_adjustment);
+ $this->invoice->increment('balance', floatval($this->balance_adjustment));
+
if ($this->invoice->balance == 0 && !$this->is_draft) {
$this->invoice->status_id = Invoice::STATUS_PAID;
}
-nlog("final balance = {$this->invoice->balance}");
+ nlog("final balance = {$this->invoice->balance}");
return $this->invoice;
}
diff --git a/app/Services/Payment/DeletePayment.php b/app/Services/Payment/DeletePayment.php
index f9a92cecb64c..654448a8d6d4 100644
--- a/app/Services/Payment/DeletePayment.php
+++ b/app/Services/Payment/DeletePayment.php
@@ -11,9 +11,11 @@
namespace App\Services\Payment;
+use App\Jobs\Ninja\TransactionLog;
use App\Models\Credit;
use App\Models\Invoice;
use App\Models\Payment;
+use App\Models\TransactionEvent;
use App\Repositories\ActivityRepository;
class DeletePayment
@@ -82,6 +84,8 @@ class DeletePayment
$net_deletable = $paymentable_invoice->pivot->amount - $paymentable_invoice->pivot->refunded;
+ $client = $this->payment->client->fresh();
+
nlog("net deletable amount - refunded = {$net_deletable}");
if(!$paymentable_invoice->is_deleted)
@@ -95,17 +99,16 @@ class DeletePayment
->updateInvoiceBalance($net_deletable, "Adjusting invoice {$paymentable_invoice->number} due to deletion of Payment {$this->payment->number}")
->save();
- $paymentable_invoice->client
- ->service()
- ->updateBalance($net_deletable)
- // ->updatePaidToDate($net_deletable * -1)
- ->save();
+ $client = $client->service()
+ ->updateBalance($net_deletable)
+ ->save();
if ($paymentable_invoice->balance == $paymentable_invoice->amount) {
$paymentable_invoice->service()->setStatus(Invoice::STATUS_SENT)->save();
} else {
$paymentable_invoice->service()->setStatus(Invoice::STATUS_PARTIAL)->save();
}
+
}
else {
@@ -118,19 +121,36 @@ class DeletePayment
}
+ $transaction = [
+ 'invoice' => $paymentable_invoice->transaction_event(),
+ 'payment' => $this->payment->transaction_event(),
+ 'client' => $client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::PAYMENT_DELETED, $transaction, $paymentable_invoice->company->db);
+
});
}
- // else {
- /* If there are no invoices - then we need to still adjust the total client->paid_to_date amount*/
+ $this->payment
+ ->client
+ ->service()
+ ->updatePaidToDate(($this->payment->amount - $this->payment->refunded)*-1)
+ ->save();
- $this->payment
- ->client
- ->service()
- ->updatePaidToDate(($this->payment->amount - $this->payment->refunded)*-1)
- ->save();
+ $transaction = [
+ 'invoice' => [],
+ 'payment' => [],
+ 'client' => $this->payment->client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
- // }
+ TransactionLog::dispatch(TransactionEvent::CLIENT_STATUS, $transaction, $this->payment->company->db);
+
+
return $this;
}
diff --git a/app/Services/Payment/RefundPayment.php b/app/Services/Payment/RefundPayment.php
index 0dfa6fa355eb..d846989cf8f3 100644
--- a/app/Services/Payment/RefundPayment.php
+++ b/app/Services/Payment/RefundPayment.php
@@ -14,10 +14,12 @@ namespace App\Services\Payment;
use App\Exceptions\PaymentRefundFailed;
use App\Factory\CreditFactory;
use App\Factory\InvoiceItemFactory;
+use App\Jobs\Ninja\TransactionLog;
use App\Models\Activity;
use App\Models\Credit;
use App\Models\Invoice;
use App\Models\Payment;
+use App\Models\TransactionEvent;
use App\Repositories\ActivityRepository;
use App\Utils\Ninja;
use stdClass;
@@ -51,7 +53,7 @@ class RefundPayment
public function run()
{
- return $this->calculateTotalRefund() //sets amount for the refund (needed if we are refunding multiple invoices in one payment)
+ $this->payment = $this->calculateTotalRefund() //sets amount for the refund (needed if we are refunding multiple invoices in one payment)
->setStatus() //sets status of payment
//->reversePayment()
//->buildCreditNote() //generate the credit note
@@ -61,6 +63,18 @@ class RefundPayment
->adjustInvoices()
->processGatewayRefund() //process the gateway refund if needed
->save();
+
+ $transaction = [
+ 'invoice' => [],
+ 'payment' => $this->payment->transaction_event(),
+ 'client' => $this->payment->client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::PAYMENT_REFUND, $transaction, $this->payment->company->db);
+
+ return $this->payment;
}
/**
@@ -256,27 +270,51 @@ class RefundPayment
$adjustment_amount += $refunded_invoice['amount'];
$client->balance += $refunded_invoice['amount'];
- //$client->paid_to_date -= $refunded_invoice['amount'];//todo refund balancing
$client->save();
- //todo adjust ledger balance here? or after and reference the credit and its total
+
+ $transaction = [
+ 'invoice' => $invoice->transaction_event(),
+ 'payment' => [],
+ 'client' => $client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::PAYMENT_REFUND, $transaction, $invoice->company->db);
+
}
- // $ledger_string = "Refund for Invoice {$invoice->number} for amount " . $refunded_invoice['amount']; //todo
-
- // $this->credit_note->ledger()->updateCreditBalance($adjustment_amount, $ledger_string);
-
- $client = $this->payment->client->fresh();
-
+ $client = $this->payment->client->fresh();
$client->service()->updatePaidToDate(-1 * $refunded_invoice['amount'])->save();
+
+
+ $transaction = [
+ 'invoice' => [],
+ 'payment' => [],
+ 'client' => $client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::PAYMENT_REFUND, $transaction, $client->company->db);
+
}
else{
//if we are refunding and no payments have been tagged, then we need to decrement the client->paid_to_date by the total refund amount.
$client = $this->payment->client->fresh();
-
$client->service()->updatePaidToDate(-1 * $this->total_refund)->save();
+ $transaction = [
+ 'invoice' => [],
+ 'payment' => [],
+ 'client' => $client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::PAYMENT_REFUND, $transaction, $client->company->db);
}
return $this;
diff --git a/app/Services/Payment/UpdateInvoicePayment.php b/app/Services/Payment/UpdateInvoicePayment.php
index 556ddd817eb1..1cbd644ad9c9 100644
--- a/app/Services/Payment/UpdateInvoicePayment.php
+++ b/app/Services/Payment/UpdateInvoicePayment.php
@@ -13,9 +13,11 @@ namespace App\Services\Payment;
use App\Events\Invoice\InvoiceWasUpdated;
use App\Jobs\Invoice\InvoiceWorkflowSettings;
+use App\Jobs\Ninja\TransactionLog;
use App\Models\Invoice;
use App\Models\Payment;
use App\Models\PaymentHash;
+use App\Models\TransactionEvent;
use App\Utils\Ninja;
use App\Utils\Traits\MakesHash;
@@ -88,6 +90,17 @@ class UpdateInvoicePayment
$this->payment->applied += $paid_amount;
+ $transaction = [
+ 'invoice' => $invoice->transaction_event(),
+ 'payment' => $this->payment->transaction_event(),
+ 'client' => $client->transaction_event(),
+ 'credit' => [],
+ 'metadata' => [],
+ ];
+
+ TransactionLog::dispatch(TransactionEvent::GATEWAY_PAYMENT_MADE, $transaction, $invoice->company->db);
+
+
});
/* Remove the event updater from within the loop to prevent race conditions */
diff --git a/app/Utils/HtmlEngine.php b/app/Utils/HtmlEngine.php
index beb8c79f49e6..ff6b6a1f2556 100644
--- a/app/Utils/HtmlEngine.php
+++ b/app/Utils/HtmlEngine.php
@@ -174,6 +174,16 @@ class HtmlEngine
$data['$approveButton'] = ['value' => ''.ctrans('texts.view_quote').'', 'label' => ctrans('texts.approve')];
$data['$view_url'] = ['value' => $this->invitation->getLink(), 'label' => ctrans('texts.view_quote')];
$data['$date'] = ['value' => $this->translateDate($this->entity->date, $this->client->date_format(), $this->client->locale()) ?: ' ', 'label' => ctrans('texts.quote_date')];
+
+ if($this->entity->project) {
+ $data['$project.name'] = ['value' => $this->entity->project->name, 'label' => ctrans('texts.project_name')];
+ $data['$invoice.project'] = &$data['$project.name'];
+ }
+
+ if($this->entity->vendor) {
+ $data['$invoice.vendor'] = ['value' => $this->entity->vendor->present()->name(), 'label' => ctrans('texts.vendor_name')];
+ }
+
}
if ($this->entity_string == 'credit') {
@@ -317,6 +327,7 @@ class HtmlEngine
$data['$website'] = ['value' => $this->client->present()->website() ?: ' ', 'label' => ctrans('texts.website')];
$data['$phone'] = ['value' => $this->client->present()->phone() ?: ' ', 'label' => ctrans('texts.phone')];
$data['$country'] = ['value' => isset($this->client->country->name) ? ctrans('texts.country_' . $this->client->country->name) : '', 'label' => ctrans('texts.country')];
+ $data['$country_2'] = ['value' => isset($this->client->country) ? $this->client->country->iso_3166_2 : '', 'label' => ctrans('texts.country')];
$data['$email'] = ['value' => isset($this->contact) ? $this->contact->email : 'no contact email on record', 'label' => ctrans('texts.email')];
$data['$client_name'] = ['value' => $this->entity->present()->clientName() ?: ' ', 'label' => ctrans('texts.client_name')];
$data['$client.name'] = &$data['$client_name'];
@@ -392,6 +403,7 @@ class HtmlEngine
$data['$company.state'] = ['value' => $this->settings->state ?: ' ', 'label' => ctrans('texts.state')];
$data['$company.postal_code'] = ['value' => $this->settings->postal_code ?: ' ', 'label' => ctrans('texts.postal_code')];
$data['$company.country'] = ['value' => $this->getCountryName(), 'label' => ctrans('texts.country')];
+ $data['$company.country_2'] = ['value' => $this->getCountryCode(), 'label' => ctrans('texts.country')];
$data['$company.phone'] = ['value' => $this->settings->phone ?: ' ', 'label' => ctrans('texts.phone')];
$data['$company.email'] = ['value' => $this->settings->email ?: ' ', 'label' => ctrans('texts.email')];
$data['$company.vat_number'] = ['value' => $this->settings->vat_number ?: ' ', 'label' => ctrans('texts.vat_number')];
@@ -617,6 +629,17 @@ class HtmlEngine
return ' ';
}
+
+ private function getCountryCode() :string
+ {
+ $country = Country::find($this->settings->country_id);
+
+ if ($country) {
+ return ctrans('texts.country_' . $country->iso_3166_2);
+ }
+
+ return ' ';
+ }
/**
* Due to the way we are compiling the blade template we
* have no ability to iterate, so in the case
diff --git a/app/Utils/Traits/SavesDocuments.php b/app/Utils/Traits/SavesDocuments.php
index c5879d0a194a..52d810141f9a 100644
--- a/app/Utils/Traits/SavesDocuments.php
+++ b/app/Utils/Traits/SavesDocuments.php
@@ -45,6 +45,7 @@ trait SavesDocuments
$is_public
);
}
+
}
public function saveDocument($document, $entity, $is_public = true)
diff --git a/app/Utils/TranslationHelper.php b/app/Utils/TranslationHelper.php
index f751ab1def7a..513054e2d341 100644
--- a/app/Utils/TranslationHelper.php
+++ b/app/Utils/TranslationHelper.php
@@ -31,7 +31,7 @@ class TranslationHelper
return Cache::get('countries')->each(function ($country) {
$country->name = ctrans('texts.country_'.$country->name);
})->sortBy(function ($country) {
- return $country->name;
+ return $country->iso_3166_2;
});
}
diff --git a/config/ninja.php b/config/ninja.php
index e172d1642138..404f05f3d841 100644
--- a/config/ninja.php
+++ b/config/ninja.php
@@ -14,8 +14,8 @@ return [
'require_https' => env('REQUIRE_HTTPS', true),
'app_url' => rtrim(env('APP_URL', ''), '/'),
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
- 'app_version' => '5.3.66',
- 'app_tag' => '5.3.66',
+ 'app_version' => '5.3.67',
+ 'app_tag' => '5.3.67',
'minimum_client_version' => '5.0.16',
'terms_version' => '1.0.1',
'api_secret' => env('API_SECRET', ''),
diff --git a/database/migrations/2021_11_08_131308_onboarding.php b/database/migrations/2021_11_08_131308_onboarding.php
index be9795cc3fd2..21bafd04a090 100644
--- a/database/migrations/2021_11_08_131308_onboarding.php
+++ b/database/migrations/2021_11_08_131308_onboarding.php
@@ -4,7 +4,8 @@ use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
-class Onboarding extends Migration
+//class Onboarding extends Migration
+return new class extends Migration
{
/**
* Run the migrations.
@@ -34,4 +35,4 @@ class Onboarding extends Migration
}
}
-}
+};
diff --git a/database/migrations/2022_03_09_053508_transaction_events.php b/database/migrations/2022_03_09_053508_transaction_events.php
new file mode 100644
index 000000000000..5e2dddecf72d
--- /dev/null
+++ b/database/migrations/2022_03_09_053508_transaction_events.php
@@ -0,0 +1,58 @@
+increments('id');
+ $table->unsignedInteger('client_id')->index();
+ $table->unsignedInteger('invoice_id');
+ $table->unsignedInteger('payment_id');
+ $table->unsignedInteger('credit_id');
+ $table->decimal('client_balance', 16, 4)->default(0);
+ $table->decimal('client_paid_to_date', 16, 4)->default(0);
+ $table->decimal('client_credit_balance', 16, 4)->default(0);
+ $table->decimal('invoice_balance', 16, 4)->default(0);
+ $table->decimal('invoice_amount', 16, 4)->default(0);
+ $table->decimal('invoice_partial', 16, 4)->default(0);
+ $table->decimal('invoice_paid_to_date', 16, 4)->default(0);
+ $table->unsignedInteger('invoice_status')->nullable();
+ $table->decimal('payment_amount', 16, 4)->default(0);
+ $table->decimal('payment_applied', 16, 4)->default(0);
+ $table->decimal('payment_refunded', 16, 4)->default(0);
+ $table->unsignedInteger('payment_status')->nullable();
+ $table->mediumText('paymentables')->nullable();
+ $table->unsignedInteger('event_id');
+ $table->unsignedInteger('timestamp');
+ $table->mediumText('payment_request')->nullable();
+ $table->mediumText('metadata')->nullable();
+ $table->decimal('credit_balance', 16, 4)->default(0);
+ $table->decimal('credit_amount', 16, 4)->default(0);
+ $table->unsignedInteger('credit_status')->nullable();
+
+ $table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade')->onUpdate('cascade');
+
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ //
+ }
+}
+
diff --git a/public/css/app.css b/public/css/app.css
index 7f32db34f063..b02749ec001d 100755
--- a/public/css/app.css
+++ b/public/css/app.css
@@ -1,3 +1,3 @@
/*! tailwindcss v2.2.17 | MIT License | https://tailwindcss.com*/
-/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-webkit-text-size-adjust:100%;line-height:1.15;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;margin:0}hr{color:inherit;height:0}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=submit],button{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:Open Sans,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{border:0 solid;box-sizing:border-box}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9fa6b2;opacity:1}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#9fa6b2;opacity:1}input::placeholder,textarea::placeholder{color:#9fa6b2;opacity:1}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{color:inherit;line-height:inherit;padding:0}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='m7 7 3-3 3 3m0 6-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}.form-select::-ms-expand{border:none;color:#9fa6b2}@media not print{.form-select::-ms-expand{display:none}}@media print and (-ms-high-contrast:active),print and (-ms-high-contrast:none){.form-select{padding-right:.75rem}}.form-select{-webkit-print-color-adjust:exact;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;border-color:#d2d6dc;border-radius:.375rem;color-adjust:exact;font-size:1rem;font-size:[object Object];line-height:1.5;padding:.5rem 2.5rem .5rem .75rem}.form-select:focus{border-color:#a4cafe;box-shadow:0 0 0 3px rgba(164,202,254,.45);outline:none}.form-checkbox:checked{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4a1 1 0 0 0-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}@media not print{.form-checkbox::-ms-check{background:inherit;border-color:inherit;border-radius:inherit;color:transparent}}.form-checkbox{-webkit-print-color-adjust:exact;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#d2d6dc;color:#3f83f8;color-adjust:exact;display:inline-block;flex-shrink:0;height:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;width:1rem}.form-checkbox:focus{border-color:#a4cafe;box-shadow:0 0 0 3px rgba(164,202,254,.45);outline:none}.form-checkbox:checked:focus,.form-radio:checked{border-color:transparent}.form-radio:checked{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}@media not print{.form-radio::-ms-check{background:inherit;border-color:inherit;border-radius:inherit;color:transparent}}.form-radio{-webkit-print-color-adjust:exact;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#d2d6dc;border-radius:100%;color:#3f83f8;color-adjust:exact;display:inline-block;flex-shrink:0;height:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;width:1rem}.form-radio:focus{border-color:#a4cafe;box-shadow:0 0 0 3px rgba(164,202,254,.45);outline:none}.form-radio:checked:focus{border-color:transparent}.button{border-radius:.25rem;font-size:.875rem;line-height:1.25rem;line-height:1rem;padding:.75rem 1rem;transition-duration:.15s;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}button:disabled{cursor:not-allowed;opacity:.5}.button-primary{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.button-primary:hover{font-weight:600}.button-block{display:block;width:100%}.button-danger{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(240,82,82,var(--tw-bg-opacity));color:rgba(255,255,255,var(--tw-text-opacity))}.button-danger:hover{--tw-bg-opacity:1;background-color:rgba(224,36,36,var(--tw-bg-opacity))}.button-secondary{--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity))}.button-secondary:hover{--tw-bg-opacity:1;background-color:rgba(229,231,235,var(--tw-bg-opacity))}.button-link{--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity))}.button-link:hover{--tw-text-opacity:1;color:rgba(22,30,46,var(--tw-text-opacity));text-decoration:underline}.button-link:focus{outline:2px solid transparent;outline-offset:2px;text-decoration:underline}.validation{--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity));border-left-width:2px;margin-bottom:.25rem;margin-top:.5rem;padding:.25rem .75rem}.validation-fail{border-color:rgba(240,82,82,var(--tw-border-opacity))}.validation-fail,.validation-pass{--tw-border-opacity:1;--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem}.validation-pass{border-color:rgba(14,159,110,var(--tw-border-opacity))}.input{--tw-border-opacity:1;align-items:center;border-color:rgba(210,214,220,var(--tw-border-opacity));border-radius:.25rem;border-width:1px;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;padding:.5rem 1rem}.input:focus{--tw-bg-opacity:1;background-color:rgba(249,250,251,var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}.input-label{--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem}.input-slim{padding-bottom:.5rem;padding-top:.5rem}.form-checkbox{border-radius:.25rem;cursor:pointer}.form-checkbox,.form-select{--tw-border-opacity:1;border-color:rgba(210,214,220,var(--tw-border-opacity));border-width:1px}.alert{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity));border-color:rgba(159,166,178,var(--tw-border-opacity));border-left-width:2px;font-size:.875rem;line-height:1.25rem;margin-bottom:.25rem;margin-top:1rem;padding:.75rem 1rem}.alert-success{--tw-border-opacity:1;border-color:rgba(14,159,110,var(--tw-border-opacity))}.alert-failure{--tw-border-opacity:1;border-color:rgba(240,82,82,var(--tw-border-opacity))}.badge{align-items:center;border-radius:9999px;display:inline-flex;font-size:.75rem;font-weight:500;line-height:1rem;padding:.125rem .625rem}.badge-light{background-color:rgba(244,245,247,var(--tw-bg-opacity));color:rgba(37,47,63,var(--tw-text-opacity))}.badge-light,.badge-primary{--tw-bg-opacity:1;--tw-text-opacity:1}.badge-primary{background-color:rgba(195,221,253,var(--tw-bg-opacity));color:rgba(63,131,248,var(--tw-text-opacity))}.badge-danger{background-color:rgba(253,232,232,var(--tw-bg-opacity));color:rgba(240,82,82,var(--tw-text-opacity))}.badge-danger,.badge-success{--tw-bg-opacity:1;--tw-text-opacity:1}.badge-success{background-color:rgba(222,247,236,var(--tw-bg-opacity));color:rgba(14,159,110,var(--tw-text-opacity))}.badge-secondary{background-color:rgba(37,47,63,var(--tw-bg-opacity));color:rgba(229,231,235,var(--tw-text-opacity))}.badge-secondary,.badge-warning{--tw-bg-opacity:1;--tw-text-opacity:1}.badge-warning{background-color:rgba(254,236,220,var(--tw-bg-opacity));color:rgba(255,90,31,var(--tw-text-opacity))}.badge-info{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(225,239,254,var(--tw-bg-opacity));color:rgba(63,131,248,var(--tw-text-opacity))}@media (min-width:640px){.dataTables_length{margin-bottom:1.25rem!important;margin-top:1.25rem!important}}@media (min-width:1024px){.dataTables_length{margin-bottom:1rem!important;margin-top:1rem!important}}.dataTables_length select{--tw-border-opacity:1;align-items:center;border-color:rgba(210,214,220,var(--tw-border-opacity));border-radius:.25rem;border-width:1px;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;padding:.5rem 1rem}.dataTables_length select:focus{--tw-bg-opacity:1!important;background-color:rgba(249,250,251,var(--tw-bg-opacity))!important;outline:2px solid transparent!important;outline-offset:2px!important}.dataTables_length select{--tw-bg-opacity:1!important;background-color:rgba(255,255,255,var(--tw-bg-opacity))!important;margin-left:.5rem!important;margin-right:.5rem!important;padding:.5rem!important}.dataTables_filter{margin-bottom:1rem}.dataTables_filter input{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;background-color:#fff!important;border-color:#d2d6dc!important;border-radius:.375rem!important;font-size:1rem!important;font-size:[object Object]!important;line-height:1.5!important;padding:.5rem .75rem!important}.dataTables_filter input::-moz-placeholder{color:#9fa6b2!important;opacity:1!important}.dataTables_filter input:-ms-input-placeholder{color:#9fa6b2!important;opacity:1!important}.dataTables_filter input::placeholder{color:#9fa6b2!important;opacity:1!important}.dataTables_filter input:focus{border-color:#a4cafe!important;box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;outline:none!important}.dataTables_filter input{--tw-border-opacity:1!important;align-items:center!important;border-color:rgba(210,214,220,var(--tw-border-opacity))!important;border-radius:.25rem!important;border-width:1px!important;font-size:.875rem!important;line-height:1.25rem!important;margin-top:.5rem!important;padding:.5rem 1rem!important}.dataTables_filter input:focus{--tw-bg-opacity:1!important;background-color:rgba(249,250,251,var(--tw-bg-opacity))!important;outline:2px solid transparent!important;outline-offset:2px!important}@media (min-width:1024px){.dataTables_filter{margin-top:-3rem!important}}.dataTables_paginate{padding-bottom:1.5rem!important;padding-top:.5rem!important}.dataTables_paginate .paginate_button{--tw-border-opacity:1!important;--tw-bg-opacity:1!important;--tw-text-opacity:1!important;background-color:rgba(255,255,255,var(--tw-bg-opacity))!important;border-color:rgba(210,214,220,var(--tw-border-opacity))!important;border-radius:.25rem;border-radius:.25rem!important;border-width:1px!important;color:rgba(55,65,81,var(--tw-text-opacity))!important;cursor:pointer!important;font-size:.875rem;font-size:.875rem!important;font-weight:500!important;line-height:1.25rem;line-height:1rem;line-height:1.25rem!important;line-height:1rem!important;margin-right:.25rem!important;padding:.75rem 1rem;padding-bottom:.5rem!important;padding-top:.5rem!important;transition-duration:.15s;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dataTables_paginate .current{--tw-bg-opacity:1!important;--tw-text-opacity:1!important;background-color:rgba(28,100,242,var(--tw-bg-opacity))!important;color:rgba(255,255,255,var(--tw-text-opacity))!important}.dataTables_info{font-size:.875rem!important;line-height:1.25rem!important}.dataTables_empty{padding-bottom:1rem!important;padding-top:1rem!important}.pagination{align-items:center!important;display:flex!important}.pagination .page-link{--tw-text-opacity:1!important;align-items:center!important;border-color:transparent!important;border-top-width:2px!important;color:rgba(107,114,128,var(--tw-text-opacity))!important;cursor:pointer!important;display:inline-flex!important;font-size:.875rem!important;font-weight:500!important;line-height:1.25rem!important;margin-top:-1px!important;padding-left:1rem!important;padding-right:1rem!important;padding-top:1rem!important;transition-duration:.15s!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.pagination .page-link:hover{--tw-border-opacity:1!important;--tw-text-opacity:1!important;border-color:rgba(210,214,220,var(--tw-border-opacity))!important;color:rgba(55,65,81,var(--tw-text-opacity))!important}.pagination .page-link:focus{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgba(159,166,178,var(--tw-border-opacity));color:rgba(55,65,81,var(--tw-text-opacity));outline:2px solid transparent;outline-offset:2px}.pagination .active>span{--tw-border-opacity:1!important;--tw-text-opacity:1!important;border-color:rgba(28,100,242,var(--tw-border-opacity))!important;color:rgba(28,100,242,var(--tw-text-opacity))!important}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{bottom:0;top:0}.inset-0,.inset-x-0{left:0;right:0}.inset-y-0{bottom:0;top:0}.top-0{top:0}.top-1{top:.25rem}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:.25rem}.z-0{z-index:0}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-6{grid-column:span 6/span 6}.col-span-8{grid-column:span 8/span 8}.col-span-12{grid-column:span 12/span 12}.float-right{float:right}.m-0{margin:0}.m-auto{margin:auto}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-20{margin-left:5rem;margin-right:5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-3{margin-bottom:.75rem;margin-top:.75rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-10{margin-bottom:2.5rem;margin-top:2.5rem}.-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-10{margin-top:2.5rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.-mr-1{margin-right:-.25rem}.-mr-14{margin-right:-3.5rem}.mb-0{margin-bottom:0}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.-ml-1{margin-left:-.25rem}.-ml-4{margin-left:-1rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-32{height:8rem}.h-64{height:16rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-0{width:0}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-48{width:12rem}.w-56{width:14rem}.w-64{width:16rem}.w-auto{width:auto}.w-1\/2{width:50%}.w-4\/5{width:80%}.w-5\/6{width:83.333333%}.w-full{width:100%}.w-screen{width:100vw}.min-w-full{min-width:100%}.max-w-xs{max-width:20rem}.max-w-xl{max-width:36rem}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.origin-top-right{transform-origin:top right}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x:0}.-translate-x-full{--tw-translate-x:-100%}.translate-y-0{--tw-translate-y:0}.translate-y-4{--tw-translate-y:1rem}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100{--tw-scale-x:1;--tw-scale-y:1}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@keyframes bounce{0%,to{-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.list-decimal{list-style-type:decimal}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded-sm{border-radius:.125rem}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-b-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.border-0{border-width:0}.border-4{border-width:4px}.border{border-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-transparent{border-color:transparent}.border-gray-100{--tw-border-opacity:1;border-color:rgba(244,245,247,var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(210,214,220,var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(75,85,99,var(--tw-border-opacity))}.border-red-300{--tw-border-opacity:1;border-color:rgba(248,180,180,var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgba(249,128,128,var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgba(14,159,110,var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgba(63,131,248,var(--tw-border-opacity))}.group:hover .group-hover\:border-transparent,.hover\:border-transparent:hover{border-color:transparent}.hover\:border-gray-600:hover{--tw-border-opacity:1;border-color:rgba(75,85,99,var(--tw-border-opacity))}.hover\:border-gray-800:hover{--tw-border-opacity:1;border-color:rgba(37,47,63,var(--tw-border-opacity))}.hover\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgba(28,100,242,var(--tw-border-opacity))}.focus\:border-blue-300:focus{--tw-border-opacity:1;border-color:rgba(164,202,254,var(--tw-border-opacity))}.focus\:border-blue-600:focus{--tw-border-opacity:1;border-color:rgba(28,100,242,var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity:1;border-color:rgba(104,117,245,var(--tw-border-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(249,250,251,var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(229,231,235,var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgba(107,114,128,var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgba(75,85,99,var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgba(253,232,232,var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgba(235,245,255,var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgba(63,131,248,var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgba(28,100,242,var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgba(26,86,219,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgba(63,131,248,var(--tw-bg-opacity))}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.focus\:bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity))}.focus\:bg-gray-600:focus{--tw-bg-opacity:1;background-color:rgba(75,85,99,var(--tw-bg-opacity))}.active\:bg-gray-50:active{--tw-bg-opacity:1;background-color:rgba(249,250,251,var(--tw-bg-opacity))}.bg-clip-padding{background-clip:padding-box}.fill-current{fill:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-8{padding:2rem}.p-10{padding:2.5rem}.px-0{padding-left:0;padding-right:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.py-0{padding-bottom:0;padding-top:0}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pr-10{padding-right:2.5rem}.pb-4{padding-bottom:1rem}.pb-10{padding-bottom:2.5rem}.pb-20{padding-bottom:5rem}.pl-0{padding-left:0}.pl-3{padding-left:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem}.text-lg,.text-xl{line-height:1.75rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-5xl{font-size:3rem;line-height:1}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-9{line-height:2.25rem}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(210,214,220,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(159,166,178,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgba(37,47,63,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(22,30,46,var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgba(249,128,128,var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgba(240,82,82,var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgba(224,36,36,var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgba(5,122,85,var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgba(63,131,248,var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgba(28,100,242,var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity:1;color:rgba(26,86,219,var(--tw-text-opacity))}.group:hover .group-hover\:text-white,.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgba(210,214,220,var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgba(37,47,63,var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgba(22,30,46,var(--tw-text-opacity))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgba(28,100,242,var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity:1;color:rgba(54,47,120,var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.focus\:text-gray-600:focus{--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity))}.focus\:text-gray-700:focus{--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity))}.focus\:text-gray-900:focus{--tw-text-opacity:1;color:rgba(22,30,46,var(--tw-text-opacity))}.active\:text-gray-800:active{--tw-text-opacity:1;color:rgba(37,47,63,var(--tw-text-opacity))}.underline{text-decoration:underline}.line-through{text-decoration:line-through}.focus\:underline:focus,.hover\:underline:hover{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.opacity-100{opacity:1}*,:after,:before{--tw-shadow:0 0 #0000}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,0.05)}.shadow,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05)}.shadow-lg,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,0.1),0 10px 10px -5px rgba(0,0,0,0.04)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05)}.hover\:shadow-2xl:hover,.hover\:shadow-lg:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-2xl:hover{--tw-shadow:0 25px 50px -12px rgba(0,0,0,0.25)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}*,:after,:before{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(63,131,248,0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring:focus,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgba(0,0,0,var(--tw-ring-opacity))}.focus\:ring-indigo-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(104,117,245,var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity:0.05}.filter{--tw-blur:var(--tw-empty,/*!*/ /*!*/);--tw-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-invert:var(--tw-empty,/*!*/ /*!*/);--tw-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert:invert(100%)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{transition-duration:75ms}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-linear{transition-timing-function:linear}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@media (min-width:640px){.sm\:inset-0{bottom:0;left:0;right:0;top:0}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:my-8{margin-bottom:2rem;margin-top:2rem}.sm\:mt-0{margin-top:0}.sm\:mt-4{margin-top:1rem}.sm\:mt-6{margin-top:1.5rem}.sm\:ml-3{margin-left:.75rem}.sm\:ml-4{margin-left:1rem}.sm\:ml-6{margin-left:1.5rem}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-10{height:2.5rem}.sm\:h-screen{height:100vh}.sm\:w-10{width:2.5rem}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-lg{max-width:32rem}.sm\:flex-shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:0}.sm\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:1rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width:768px){.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-start-2{grid-column-start:2}.md\:col-start-4{grid-column-start:4}.md\:mx-0{margin-left:0;margin-right:0}.md\:mt-0{margin-top:0}.md\:mt-5{margin-top:1.25rem}.md\:mt-10{margin-top:2.5rem}.md\:mr-2{margin-right:.5rem}.md\:-mr-1{margin-right:-.25rem}.md\:ml-2{margin-left:.5rem}.md\:ml-6{margin-left:1.5rem}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.333333%}.md\:max-w-3xl{max-width:48rem}.md\:flex-shrink-0{flex-shrink:0}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:gap-6{gap:1.5rem}.md\:p-24{padding:6rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}}@media (min-width:1024px){.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-3{grid-column-start:3}.lg\:col-start-4{grid-column-start:4}.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:mt-24{margin-top:6rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:h-screen{height:100vh}.lg\:w-1\/2{width:50%}.lg\:w-1\/4{width:25%}.lg\:w-1\/5{width:20%}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:items-center{align-items:center}.lg\:gap-4{gap:1rem}.lg\:rounded-lg{border-radius:.5rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:px-16{padding-left:4rem;padding-right:4rem}}@media (min-width:1280px){.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-6{grid-column:span 6/span 6}.xl\:col-span-8{grid-column:span 8/span 8}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:col-start-4{grid-column-start:4}.xl\:mt-32{margin-top:8rem}.xl\:flex{display:flex}.xl\:justify-center{justify-content:center}.xl\:px-16{padding-left:4rem;padding-right:4rem}}
+/*! modern-normalize v1.1.0 | MIT License | https://github.com/sindresorhus/modern-normalize */html{-webkit-text-size-adjust:100%;line-height:1.15;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;margin:0}hr{color:inherit;height:0}abbr[title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,select{text-transform:none}[type=button],[type=submit],button{-webkit-appearance:button}legend{padding:0}progress{vertical-align:baseline}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}button{background-color:transparent;background-image:none}fieldset,ol,ul{margin:0;padding:0}ol,ul{list-style:none}html{font-family:Open Sans,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{font-family:inherit;line-height:inherit}*,:after,:before{border:0 solid;box-sizing:border-box}hr{border-top-width:1px}img{border-style:solid}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9fa6b2;opacity:1}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#9fa6b2;opacity:1}input::placeholder,textarea::placeholder{color:#9fa6b2;opacity:1}[role=button],button{cursor:pointer}table{border-collapse:collapse}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}button,input,optgroup,select,textarea{color:inherit;line-height:inherit;padding:0}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,:after,:before{--tw-border-opacity:1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.form-select{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath d='m7 7 3-3 3 3m0 6-3 3-3-3' stroke='%239fa6b2' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E")}.form-select::-ms-expand{border:none;color:#9fa6b2}@media not print{.form-select::-ms-expand{display:none}}@media print and (-ms-high-contrast:active),print and (-ms-high-contrast:none){.form-select{padding-right:.75rem}}.form-select{-webkit-print-color-adjust:exact;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-position:right .5rem center;background-repeat:no-repeat;background-size:1.5em 1.5em;border-color:#d2d6dc;border-radius:.375rem;color-adjust:exact;font-size:1rem;font-size:[object Object];line-height:1.5;padding:.5rem 2.5rem .5rem .75rem}.form-select:focus{border-color:#a4cafe;box-shadow:0 0 0 3px rgba(164,202,254,.45);outline:none}.form-checkbox:checked{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.707 7.293a1 1 0 0 0-1.414 1.414l2 2a1 1 0 0 0 1.414 0l4-4a1 1 0 0 0-1.414-1.414L7 8.586 5.707 7.293z'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%;border-color:transparent}@media not print{.form-checkbox::-ms-check{background:inherit;border-color:inherit;border-radius:inherit;color:transparent}}.form-checkbox{-webkit-print-color-adjust:exact;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#d2d6dc;color:#3f83f8;color-adjust:exact;display:inline-block;flex-shrink:0;height:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;width:1rem}.form-checkbox:focus{border-color:#a4cafe;box-shadow:0 0 0 3px rgba(164,202,254,.45);outline:none}.form-checkbox:checked:focus,.form-radio:checked{border-color:transparent}.form-radio:checked{background-color:currentColor;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 16 16' fill='%23fff' xmlns='http://www.w3.org/2000/svg'%3E%3Ccircle cx='8' cy='8' r='3'/%3E%3C/svg%3E");background-position:50%;background-repeat:no-repeat;background-size:100% 100%}@media not print{.form-radio::-ms-check{background:inherit;border-color:inherit;border-radius:inherit;color:transparent}}.form-radio{-webkit-print-color-adjust:exact;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#fff;background-origin:border-box;border-color:#d2d6dc;border-radius:100%;color:#3f83f8;color-adjust:exact;display:inline-block;flex-shrink:0;height:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;width:1rem}.form-radio:focus{border-color:#a4cafe;box-shadow:0 0 0 3px rgba(164,202,254,.45);outline:none}.form-radio:checked:focus{border-color:transparent}.button{border-radius:.25rem;font-size:.875rem;line-height:1.25rem;line-height:1rem;padding:.75rem 1rem;transition-duration:.15s;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}button:disabled{cursor:not-allowed;opacity:.5}.button-primary{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.button-primary:hover{font-weight:600}.button-block{display:block;width:100%}.button-danger{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(240,82,82,var(--tw-bg-opacity));color:rgba(255,255,255,var(--tw-text-opacity))}.button-danger:hover{--tw-bg-opacity:1;background-color:rgba(224,36,36,var(--tw-bg-opacity))}.button-secondary{--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity))}.button-secondary:hover{--tw-bg-opacity:1;background-color:rgba(229,231,235,var(--tw-bg-opacity))}.button-link{--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity))}.button-link:hover{--tw-text-opacity:1;color:rgba(22,30,46,var(--tw-text-opacity));text-decoration:underline}.button-link:focus{outline:2px solid transparent;outline-offset:2px;text-decoration:underline}.validation{--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity));border-left-width:2px;margin-bottom:.25rem;margin-top:.5rem;padding:.25rem .75rem}.validation-fail{border-color:rgba(240,82,82,var(--tw-border-opacity))}.validation-fail,.validation-pass{--tw-border-opacity:1;--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem}.validation-pass{border-color:rgba(14,159,110,var(--tw-border-opacity))}.input{--tw-border-opacity:1;align-items:center;border-color:rgba(210,214,220,var(--tw-border-opacity));border-radius:.25rem;border-width:1px;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;padding:.5rem 1rem}.input:focus{--tw-bg-opacity:1;background-color:rgba(249,250,251,var(--tw-bg-opacity));outline:2px solid transparent;outline-offset:2px}.input-label{--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity));font-size:.875rem;line-height:1.25rem}.input-slim{padding-bottom:.5rem;padding-top:.5rem}.form-checkbox{border-radius:.25rem;cursor:pointer}.form-checkbox,.form-select{--tw-border-opacity:1;border-color:rgba(210,214,220,var(--tw-border-opacity));border-width:1px}.alert{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity));border-color:rgba(159,166,178,var(--tw-border-opacity));border-left-width:2px;font-size:.875rem;line-height:1.25rem;margin-bottom:.25rem;margin-top:1rem;padding:.75rem 1rem}.alert-success{--tw-border-opacity:1;border-color:rgba(14,159,110,var(--tw-border-opacity))}.alert-failure{--tw-border-opacity:1;border-color:rgba(240,82,82,var(--tw-border-opacity))}.badge{align-items:center;border-radius:9999px;display:inline-flex;font-size:.75rem;font-weight:500;line-height:1rem;padding:.125rem .625rem}.badge-light{background-color:rgba(244,245,247,var(--tw-bg-opacity));color:rgba(37,47,63,var(--tw-text-opacity))}.badge-light,.badge-primary{--tw-bg-opacity:1;--tw-text-opacity:1}.badge-primary{background-color:rgba(195,221,253,var(--tw-bg-opacity));color:rgba(63,131,248,var(--tw-text-opacity))}.badge-danger{background-color:rgba(253,232,232,var(--tw-bg-opacity));color:rgba(240,82,82,var(--tw-text-opacity))}.badge-danger,.badge-success{--tw-bg-opacity:1;--tw-text-opacity:1}.badge-success{background-color:rgba(222,247,236,var(--tw-bg-opacity));color:rgba(14,159,110,var(--tw-text-opacity))}.badge-secondary{background-color:rgba(37,47,63,var(--tw-bg-opacity));color:rgba(229,231,235,var(--tw-text-opacity))}.badge-secondary,.badge-warning{--tw-bg-opacity:1;--tw-text-opacity:1}.badge-warning{background-color:rgba(254,236,220,var(--tw-bg-opacity));color:rgba(255,90,31,var(--tw-text-opacity))}.badge-info{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(225,239,254,var(--tw-bg-opacity));color:rgba(63,131,248,var(--tw-text-opacity))}@media (min-width:640px){.dataTables_length{margin-bottom:1.25rem!important;margin-top:1.25rem!important}}@media (min-width:1024px){.dataTables_length{margin-bottom:1rem!important;margin-top:1rem!important}}.dataTables_length select{--tw-border-opacity:1;align-items:center;border-color:rgba(210,214,220,var(--tw-border-opacity));border-radius:.25rem;border-width:1px;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;padding:.5rem 1rem}.dataTables_length select:focus{--tw-bg-opacity:1!important;background-color:rgba(249,250,251,var(--tw-bg-opacity))!important;outline:2px solid transparent!important;outline-offset:2px!important}.dataTables_length select{--tw-bg-opacity:1!important;background-color:rgba(255,255,255,var(--tw-bg-opacity))!important;margin-left:.5rem!important;margin-right:.5rem!important;padding:.5rem!important}.dataTables_filter{margin-bottom:1rem}.dataTables_filter input{-webkit-appearance:none!important;-moz-appearance:none!important;appearance:none!important;background-color:#fff!important;border-color:#d2d6dc!important;border-radius:.375rem!important;font-size:1rem!important;font-size:[object Object]!important;line-height:1.5!important;padding:.5rem .75rem!important}.dataTables_filter input::-moz-placeholder{color:#9fa6b2!important;opacity:1!important}.dataTables_filter input:-ms-input-placeholder{color:#9fa6b2!important;opacity:1!important}.dataTables_filter input::placeholder{color:#9fa6b2!important;opacity:1!important}.dataTables_filter input:focus{border-color:#a4cafe!important;box-shadow:0 0 0 3px rgba(164,202,254,.45)!important;outline:none!important}.dataTables_filter input{--tw-border-opacity:1!important;align-items:center!important;border-color:rgba(210,214,220,var(--tw-border-opacity))!important;border-radius:.25rem!important;border-width:1px!important;font-size:.875rem!important;line-height:1.25rem!important;margin-top:.5rem!important;padding:.5rem 1rem!important}.dataTables_filter input:focus{--tw-bg-opacity:1!important;background-color:rgba(249,250,251,var(--tw-bg-opacity))!important;outline:2px solid transparent!important;outline-offset:2px!important}@media (min-width:1024px){.dataTables_filter{margin-top:-3rem!important}}.dataTables_paginate{padding-bottom:1.5rem!important;padding-top:.5rem!important}.dataTables_paginate .paginate_button{--tw-border-opacity:1!important;--tw-bg-opacity:1!important;--tw-text-opacity:1!important;background-color:rgba(255,255,255,var(--tw-bg-opacity))!important;border-color:rgba(210,214,220,var(--tw-border-opacity))!important;border-radius:.25rem;border-radius:.25rem!important;border-width:1px!important;color:rgba(55,65,81,var(--tw-text-opacity))!important;cursor:pointer!important;font-size:.875rem;font-size:.875rem!important;font-weight:500!important;line-height:1.25rem;line-height:1rem;line-height:1.25rem!important;line-height:1rem!important;margin-right:.25rem!important;padding:.75rem 1rem;padding-bottom:.5rem!important;padding-top:.5rem!important;transition-duration:.15s;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.dataTables_paginate .current{--tw-bg-opacity:1!important;--tw-text-opacity:1!important;background-color:rgba(28,100,242,var(--tw-bg-opacity))!important;color:rgba(255,255,255,var(--tw-text-opacity))!important}.dataTables_info{font-size:.875rem!important;line-height:1.25rem!important}.dataTables_empty{padding-bottom:1rem!important;padding-top:1rem!important}.pagination{align-items:center!important;display:flex!important}.pagination .page-link{--tw-text-opacity:1!important;align-items:center!important;border-color:transparent!important;border-top-width:2px!important;color:rgba(107,114,128,var(--tw-text-opacity))!important;cursor:pointer!important;display:inline-flex!important;font-size:.875rem!important;font-weight:500!important;line-height:1.25rem!important;margin-top:-1px!important;padding-left:1rem!important;padding-right:1rem!important;padding-top:1rem!important;transition-duration:.15s!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter!important;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter!important;transition-timing-function:cubic-bezier(.4,0,.2,1)!important}.pagination .page-link:hover{--tw-border-opacity:1!important;--tw-text-opacity:1!important;border-color:rgba(210,214,220,var(--tw-border-opacity))!important;color:rgba(55,65,81,var(--tw-text-opacity))!important}.pagination .page-link:focus{--tw-border-opacity:1;--tw-text-opacity:1;border-color:rgba(159,166,178,var(--tw-border-opacity));color:rgba(55,65,81,var(--tw-text-opacity));outline:2px solid transparent;outline-offset:2px}.pagination .active>span{--tw-border-opacity:1!important;--tw-text-opacity:1!important;border-color:rgba(28,100,242,var(--tw-border-opacity))!important;color:rgba(28,100,242,var(--tw-text-opacity))!important}.sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.pointer-events-none{pointer-events:none}.pointer-events-auto{pointer-events:auto}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{bottom:0;top:0}.inset-0,.inset-x-0{left:0;right:0}.inset-y-0{bottom:0;top:0}.top-0{top:0}.top-1{top:.25rem}.right-0{right:0}.bottom-0{bottom:0}.left-0{left:0}.left-1{left:.25rem}.z-0{z-index:0}.z-10{z-index:10}.z-30{z-index:30}.z-40{z-index:40}.col-span-1{grid-column:span 1/span 1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.col-span-6{grid-column:span 6/span 6}.col-span-8{grid-column:span 8/span 8}.col-span-12{grid-column:span 12/span 12}.float-right{float:right}.m-0{margin:0}.m-auto{margin:auto}.mx-2{margin-left:.5rem;margin-right:.5rem}.mx-4{margin-left:1rem;margin-right:1rem}.mx-6{margin-left:1.5rem;margin-right:1.5rem}.mx-20{margin-left:5rem;margin-right:5rem}.mx-auto{margin-left:auto;margin-right:auto}.my-3{margin-bottom:.75rem;margin-top:.75rem}.my-4{margin-bottom:1rem;margin-top:1rem}.my-10{margin-bottom:2.5rem;margin-top:2.5rem}.-my-2{margin-bottom:-.5rem;margin-top:-.5rem}.mt-0{margin-top:0}.mt-1{margin-top:.25rem}.mt-2{margin-top:.5rem}.mt-3{margin-top:.75rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.mt-10{margin-top:2.5rem}.-mt-4{margin-top:-1rem}.-mt-6{margin-top:-1.5rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mr-3{margin-right:.75rem}.mr-4{margin-right:1rem}.-mr-1{margin-right:-.25rem}.-mr-14{margin-right:-3.5rem}.mb-0{margin-bottom:0}.mb-2{margin-bottom:.5rem}.mb-3{margin-bottom:.75rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.mb-10{margin-bottom:2.5rem}.mb-12{margin-bottom:3rem}.ml-0{margin-left:0}.ml-1{margin-left:.25rem}.ml-2{margin-left:.5rem}.ml-3{margin-left:.75rem}.ml-4{margin-left:1rem}.-ml-1{margin-left:-.25rem}.-ml-4{margin-left:-1rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.h-0{height:0}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-10{height:2.5rem}.h-12{height:3rem}.h-14{height:3.5rem}.h-16{height:4rem}.h-32{height:8rem}.h-64{height:16rem}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.min-h-screen{min-height:100vh}.w-0{width:0}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-12{width:3rem}.w-14{width:3.5rem}.w-48{width:12rem}.w-56{width:14rem}.w-64{width:16rem}.w-auto{width:auto}.w-1\/2{width:50%}.w-4\/5{width:80%}.w-5\/6{width:83.333333%}.w-full{width:100%}.w-screen{width:100vw}.min-w-full{min-width:100%}.max-w-xs{max-width:20rem}.max-w-xl{max-width:36rem}.max-w-2xl{max-width:42rem}.max-w-4xl{max-width:56rem}.max-w-7xl{max-width:80rem}.flex-1{flex:1 1 0%}.flex-shrink-0{flex-shrink:0}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.origin-top-right{transform-origin:top right}.transform{--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;transform:translateX(var(--tw-translate-x)) translateY(var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.translate-x-0{--tw-translate-x:0}.-translate-x-full{--tw-translate-x:-100%}.translate-y-0{--tw-translate-y:0}.translate-y-4{--tw-translate-y:1rem}.scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.scale-100{--tw-scale-x:1;--tw-scale-y:1}@-webkit-keyframes spin{to{transform:rotate(1turn)}}@keyframes spin{to{transform:rotate(1turn)}}@-webkit-keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@-webkit-keyframes pulse{50%{opacity:.5}}@keyframes pulse{50%{opacity:.5}}@-webkit-keyframes bounce{0%,to{-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}@keyframes bounce{0%,to{-webkit-animation-timing-function:cubic-bezier(.8,0,1,1);animation-timing-function:cubic-bezier(.8,0,1,1);transform:translateY(-25%)}50%{-webkit-animation-timing-function:cubic-bezier(0,0,.2,1);animation-timing-function:cubic-bezier(0,0,.2,1);transform:none}}.animate-spin{-webkit-animation:spin 1s linear infinite;animation:spin 1s linear infinite}.cursor-pointer{cursor:pointer}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}.grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-center{align-content:center}.items-start{align-items:flex-start}.items-end{align-items:flex-end}.items-center{align-items:center}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-4{gap:1rem}.gap-5{gap:1.25rem}.gap-6{gap:1.5rem}.gap-8{gap:2rem}.gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.space-x-1>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.25rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.25rem*var(--tw-space-x-reverse))}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-scroll{overflow-y:scroll}.truncate{overflow:hidden;text-overflow:ellipsis}.truncate,.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.rounded-sm{border-radius:.125rem}.rounded{border-radius:.25rem}.rounded-md{border-radius:.375rem}.rounded-lg{border-radius:.5rem}.rounded-full{border-radius:9999px}.rounded-t-lg{border-top-left-radius:.5rem;border-top-right-radius:.5rem}.rounded-b-lg{border-bottom-left-radius:.5rem;border-bottom-right-radius:.5rem}.border-0{border-width:0}.border-4{border-width:4px}.border{border-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-b-4{border-bottom-width:4px}.border-b{border-bottom-width:1px}.border-l-2{border-left-width:2px}.border-solid{border-style:solid}.border-dashed{border-style:dashed}.border-none{border-style:none}.border-transparent{border-color:transparent}.border-gray-100{--tw-border-opacity:1;border-color:rgba(244,245,247,var(--tw-border-opacity))}.border-gray-200{--tw-border-opacity:1;border-color:rgba(229,231,235,var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity:1;border-color:rgba(210,214,220,var(--tw-border-opacity))}.border-gray-600{--tw-border-opacity:1;border-color:rgba(75,85,99,var(--tw-border-opacity))}.border-red-300{--tw-border-opacity:1;border-color:rgba(248,180,180,var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgba(249,128,128,var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgba(14,159,110,var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgba(63,131,248,var(--tw-border-opacity))}.border-blue-700{--tw-border-opacity:1;border-color:rgba(26,86,219,var(--tw-border-opacity))}.group:hover .group-hover\:border-transparent,.hover\:border-transparent:hover{border-color:transparent}.hover\:border-gray-600:hover{--tw-border-opacity:1;border-color:rgba(75,85,99,var(--tw-border-opacity))}.hover\:border-gray-800:hover{--tw-border-opacity:1;border-color:rgba(37,47,63,var(--tw-border-opacity))}.hover\:border-blue-500:hover{--tw-border-opacity:1;border-color:rgba(63,131,248,var(--tw-border-opacity))}.hover\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgba(28,100,242,var(--tw-border-opacity))}.focus\:border-blue-300:focus{--tw-border-opacity:1;border-color:rgba(164,202,254,var(--tw-border-opacity))}.focus\:border-blue-600:focus{--tw-border-opacity:1;border-color:rgba(28,100,242,var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity:1;border-color:rgba(104,117,245,var(--tw-border-opacity))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.bg-gray-50{--tw-bg-opacity:1;background-color:rgba(249,250,251,var(--tw-bg-opacity))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgba(229,231,235,var(--tw-bg-opacity))}.bg-gray-500{--tw-bg-opacity:1;background-color:rgba(107,114,128,var(--tw-bg-opacity))}.bg-gray-600{--tw-bg-opacity:1;background-color:rgba(75,85,99,var(--tw-bg-opacity))}.bg-red-100{--tw-bg-opacity:1;background-color:rgba(253,232,232,var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgba(235,245,255,var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgba(63,131,248,var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgba(28,100,242,var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgba(26,86,219,var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgba(88,80,236,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity))}.hover\:bg-blue-400:hover{--tw-bg-opacity:1;background-color:rgba(118,169,250,var(--tw-bg-opacity))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgba(63,131,248,var(--tw-bg-opacity))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgba(81,69,205,var(--tw-bg-opacity))}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgba(255,255,255,var(--tw-bg-opacity))}.focus\:bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgba(244,245,247,var(--tw-bg-opacity))}.focus\:bg-gray-600:focus{--tw-bg-opacity:1;background-color:rgba(75,85,99,var(--tw-bg-opacity))}.active\:bg-gray-50:active{--tw-bg-opacity:1;background-color:rgba(249,250,251,var(--tw-bg-opacity))}.bg-clip-padding{background-clip:padding-box}.fill-current{fill:currentColor}.object-cover{-o-object-fit:cover;object-fit:cover}.p-1{padding:.25rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-8{padding:2rem}.p-10{padding:2.5rem}.px-0{padding-left:0;padding-right:0}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.px-12{padding-left:3rem;padding-right:3rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.py-0{padding-bottom:0;padding-top:0}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.py-3{padding-bottom:.75rem;padding-top:.75rem}.py-4{padding-bottom:1rem;padding-top:1rem}.py-5{padding-bottom:1.25rem;padding-top:1.25rem}.py-6{padding-bottom:1.5rem;padding-top:1.5rem}.py-8{padding-bottom:2rem;padding-top:2rem}.py-10{padding-bottom:2.5rem;padding-top:2.5rem}.py-12{padding-bottom:3rem;padding-top:3rem}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.pt-0{padding-top:0}.pt-2{padding-top:.5rem}.pt-4{padding-top:1rem}.pt-5{padding-top:1.25rem}.pt-6{padding-top:1.5rem}.pr-2{padding-right:.5rem}.pr-4{padding-right:1rem}.pr-10{padding-right:2.5rem}.pb-4{padding-bottom:1rem}.pb-10{padding-bottom:2.5rem}.pb-20{padding-bottom:5rem}.pl-0{padding-left:0}.pl-3{padding-left:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.align-middle{vertical-align:middle}.align-bottom{vertical-align:bottom}.text-xs{font-size:.75rem;line-height:1rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-base{font-size:1rem;line-height:1.5rem}.text-lg{font-size:1.125rem}.text-lg,.text-xl{line-height:1.75rem}.text-xl{font-size:1.25rem}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-5xl{font-size:3rem;line-height:1}.font-normal{font-weight:400}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.font-extrabold{font-weight:800}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.leading-4{line-height:1rem}.leading-5{line-height:1.25rem}.leading-6{line-height:1.5rem}.leading-9{line-height:2.25rem}.leading-tight{line-height:1.25}.tracking-tight{letter-spacing:-.025em}.tracking-wide{letter-spacing:.025em}.tracking-wider{letter-spacing:.05em}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-black{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(210,214,220,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(159,166,178,var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity:1;color:rgba(37,47,63,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(22,30,46,var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgba(249,128,128,var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgba(240,82,82,var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgba(224,36,36,var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgba(5,122,85,var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgba(63,131,248,var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgba(28,100,242,var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity:1;color:rgba(26,86,219,var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity:1;color:rgba(88,80,236,var(--tw-text-opacity))}.group:hover .group-hover\:text-white,.hover\:text-white:hover{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.hover\:text-gray-300:hover{--tw-text-opacity:1;color:rgba(210,214,220,var(--tw-text-opacity))}.hover\:text-gray-500:hover{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.hover\:text-gray-600:hover{--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity))}.hover\:text-gray-700:hover{--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity))}.hover\:text-gray-800:hover{--tw-text-opacity:1;color:rgba(37,47,63,var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgba(22,30,46,var(--tw-text-opacity))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgba(28,100,242,var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity:1;color:rgba(54,47,120,var(--tw-text-opacity))}.focus\:text-gray-500:focus{--tw-text-opacity:1;color:rgba(107,114,128,var(--tw-text-opacity))}.focus\:text-gray-600:focus{--tw-text-opacity:1;color:rgba(75,85,99,var(--tw-text-opacity))}.focus\:text-gray-700:focus{--tw-text-opacity:1;color:rgba(55,65,81,var(--tw-text-opacity))}.focus\:text-gray-900:focus{--tw-text-opacity:1;color:rgba(22,30,46,var(--tw-text-opacity))}.active\:text-gray-800:active{--tw-text-opacity:1;color:rgba(37,47,63,var(--tw-text-opacity))}.underline{text-decoration:underline}.line-through{text-decoration:line-through}.focus\:underline:focus,.hover\:underline:hover{text-decoration:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.opacity-100{opacity:1}*,:after,:before{--tw-shadow:0 0 #0000}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,0.05)}.shadow,.shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,0.1),0 1px 2px 0 rgba(0,0,0,0.06)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05)}.shadow-lg,.shadow-xl{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px rgba(0,0,0,0.1),0 10px 10px -5px rgba(0,0,0,0.04)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,0.1),0 4px 6px -2px rgba(0,0,0,0.05)}.hover\:shadow-2xl:hover,.hover\:shadow-lg:hover{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.hover\:shadow-2xl:hover{--tw-shadow:0 25px 50px -12px rgba(0,0,0,0.25)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}*,:after,:before{--tw-ring-inset:var(--tw-empty,/*!*/ /*!*/);--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(63,131,248,0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.focus\:ring:focus,.ring-1{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus\:ring:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.ring-black{--tw-ring-opacity:1;--tw-ring-color:rgba(0,0,0,var(--tw-ring-opacity))}.focus\:ring-indigo-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(104,117,245,var(--tw-ring-opacity))}.ring-opacity-5{--tw-ring-opacity:0.05}.filter{--tw-blur:var(--tw-empty,/*!*/ /*!*/);--tw-brightness:var(--tw-empty,/*!*/ /*!*/);--tw-contrast:var(--tw-empty,/*!*/ /*!*/);--tw-grayscale:var(--tw-empty,/*!*/ /*!*/);--tw-hue-rotate:var(--tw-empty,/*!*/ /*!*/);--tw-invert:var(--tw-empty,/*!*/ /*!*/);--tw-saturate:var(--tw-empty,/*!*/ /*!*/);--tw-sepia:var(--tw-empty,/*!*/ /*!*/);--tw-drop-shadow:var(--tw-empty,/*!*/ /*!*/);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.invert{--tw-invert:invert(100%)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition{transition-duration:.15s;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:background-color,border-color,color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.duration-75{transition-duration:75ms}.duration-100{transition-duration:.1s}.duration-150{transition-duration:.15s}.duration-200{transition-duration:.2s}.duration-300{transition-duration:.3s}.ease-linear{transition-timing-function:linear}.ease-in{transition-timing-function:cubic-bezier(.4,0,1,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}.ease-in-out{transition-timing-function:cubic-bezier(.4,0,.2,1)}@media (min-width:640px){.sm\:inset-0{bottom:0;left:0;right:0;top:0}.sm\:col-span-2{grid-column:span 2/span 2}.sm\:col-span-3{grid-column:span 3/span 3}.sm\:col-span-4{grid-column:span 4/span 4}.sm\:col-span-6{grid-column:span 6/span 6}.sm\:mx-0{margin-left:0;margin-right:0}.sm\:-mx-6{margin-left:-1.5rem;margin-right:-1.5rem}.sm\:my-8{margin-bottom:2rem;margin-top:2rem}.sm\:mt-0{margin-top:0}.sm\:mt-4{margin-top:1rem}.sm\:mt-6{margin-top:1.5rem}.sm\:ml-3{margin-left:.75rem}.sm\:ml-4{margin-left:1rem}.sm\:ml-6{margin-left:1.5rem}.sm\:block{display:block}.sm\:inline-block{display:inline-block}.sm\:flex{display:flex}.sm\:grid{display:grid}.sm\:hidden{display:none}.sm\:h-10{height:2.5rem}.sm\:h-screen{height:100vh}.sm\:w-10{width:2.5rem}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-sm{max-width:24rem}.sm\:max-w-lg{max-width:32rem}.sm\:flex-shrink-0{flex-shrink:0}.sm\:translate-y-0{--tw-translate-y:0}.sm\:scale-95{--tw-scale-x:.95;--tw-scale-y:.95}.sm\:scale-100{--tw-scale-x:1;--tw-scale-y:1}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:flex-nowrap{flex-wrap:nowrap}.sm\:items-start{align-items:flex-start}.sm\:items-center{align-items:center}.sm\:justify-center{justify-content:center}.sm\:justify-between{justify-content:space-between}.sm\:gap-4{gap:1rem}.sm\:rounded-lg{border-radius:.5rem}.sm\:p-0{padding:0}.sm\:p-6{padding:1.5rem}.sm\:px-0{padding-left:0;padding-right:0}.sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}.sm\:text-sm{font-size:.875rem;line-height:1.25rem}.sm\:text-4xl{font-size:2.25rem;line-height:2.5rem}}@media (min-width:768px){.md\:col-span-1{grid-column:span 1/span 1}.md\:col-span-2{grid-column:span 2/span 2}.md\:col-span-4{grid-column:span 4/span 4}.md\:col-span-5{grid-column:span 5/span 5}.md\:col-span-6{grid-column:span 6/span 6}.md\:col-start-2{grid-column-start:2}.md\:col-start-4{grid-column-start:4}.md\:mx-0{margin-left:0;margin-right:0}.md\:mt-0{margin-top:0}.md\:mt-5{margin-top:1.25rem}.md\:mt-10{margin-top:2.5rem}.md\:mr-2{margin-right:.5rem}.md\:-mr-1{margin-right:-.25rem}.md\:ml-2{margin-left:.5rem}.md\:ml-6{margin-left:1.5rem}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:w-1\/2{width:50%}.md\:w-1\/3{width:33.333333%}.md\:max-w-3xl{max-width:48rem}.md\:flex-shrink-0{flex-shrink:0}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.md\:flex-row{flex-direction:row}.md\:items-center{align-items:center}.md\:justify-between{justify-content:space-between}.md\:gap-6{gap:1.5rem}.md\:p-24{padding:6rem}.md\:px-8{padding-left:2rem;padding-right:2rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}.md\:text-2xl{font-size:1.5rem;line-height:2rem}}@media (min-width:1024px){.lg\:col-span-3{grid-column:span 3/span 3}.lg\:col-span-6{grid-column:span 6/span 6}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:col-span-8{grid-column:span 8/span 8}.lg\:col-start-3{grid-column-start:3}.lg\:col-start-4{grid-column-start:4}.lg\:-mx-8{margin-left:-2rem;margin-right:-2rem}.lg\:mt-0{margin-top:0}.lg\:mt-24{margin-top:6rem}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:grid{display:grid}.lg\:h-screen{height:100vh}.lg\:w-1\/2{width:50%}.lg\:w-1\/4{width:25%}.lg\:w-1\/5{width:20%}.lg\:flex-shrink-0{flex-shrink:0}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:items-center{align-items:center}.lg\:justify-between{justify-content:space-between}.lg\:gap-4{gap:1rem}.lg\:rounded-lg{border-radius:.5rem}.lg\:px-4{padding-left:1rem;padding-right:1rem}.lg\:px-8{padding-left:2rem;padding-right:2rem}.lg\:px-16{padding-left:4rem;padding-right:4rem}.lg\:py-16{padding-bottom:4rem;padding-top:4rem}}@media (min-width:1280px){.xl\:col-span-4{grid-column:span 4/span 4}.xl\:col-span-6{grid-column:span 6/span 6}.xl\:col-span-8{grid-column:span 8/span 8}.xl\:col-span-9{grid-column:span 9/span 9}.xl\:col-start-4{grid-column-start:4}.xl\:mt-32{margin-top:8rem}.xl\:flex{display:flex}.xl\:justify-center{justify-content:center}.xl\:px-16{padding-left:4rem;padding-right:4rem}}
diff --git a/public/mix-manifest.json b/public/mix-manifest.json
index 2174612fb681..09023ab15551 100755
--- a/public/mix-manifest.json
+++ b/public/mix-manifest.json
@@ -38,7 +38,7 @@
"/js/clients/payments/stripe-przelewy24.js": "/js/clients/payments/stripe-przelewy24.js?id=e240b907ad163cac04c0",
"/js/clients/payments/stripe-browserpay.js": "/js/clients/payments/stripe-browserpay.js?id=71e49866d66a6d85b88a",
"/js/clients/payments/stripe-fpx.js": "/js/clients/payments/stripe-fpx.js?id=765874308d4374726b25",
- "/css/app.css": "/css/app.css?id=41b6a44f816ac830ea05",
+ "/css/app.css": "/css/app.css?id=3e08340d820da80e900b",
"/css/card-js.min.css": "/css/card-js.min.css?id=62afeb675235451543ad",
"/vendor/clipboard.min.js": "/vendor/clipboard.min.js?id=ad98572d415d2f245284"
}
diff --git a/public/vendor/livewire/livewire.js b/public/vendor/livewire/livewire.js
index a1f17cfa7ea6..3ded50b4d52d 100755
--- a/public/vendor/livewire/livewire.js
+++ b/public/vendor/livewire/livewire.js
@@ -1,4 +1,4 @@
-!function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?module.exports=factory():"function"==typeof define&&define.amd?define(factory):(global="undefined"!=typeof globalThis?globalThis:global||self).Livewire=factory()}(this,(function(){"use strict";function ownKeys$1(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function _objectSpread2(target){for(var i=1;iarr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i0&&void 0!==arguments[0]?arguments[0]:"right";return this.modifiers.includes("up")?"up":this.modifiers.includes("down")?"down":this.modifiers.includes("left")?"left":this.modifiers.includes("right")?"right":fallback}}]),Directive}();function walk(root,callback){if(!1!==callback(root))for(var node=root.firstElementChild;node;)walk(node,callback),node=node.nextElementSibling}function dispatch(eventName){var event=document.createEvent("Events");return event.initEvent(eventName,!0,!0),document.dispatchEvent(event),event}function getCsrfToken(){var _window$livewire_toke,tokenTag=document.head.querySelector('meta[name="csrf-token"]');return tokenTag?tokenTag.content:null!==(_window$livewire_toke=window.livewire_token)&&void 0!==_window$livewire_toke?_window$livewire_toke:void 0}function kebabCase(subject){return subject.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[_\s]/,"-").toLowerCase()}
+!function(global,factory){"object"==typeof exports&&"undefined"!=typeof module?module.exports=factory():"function"==typeof define&&define.amd?define(factory):(global="undefined"!=typeof globalThis?globalThis:global||self).Livewire=factory()}(this,(function(){"use strict";function ownKeys$1(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter((function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable}))),keys.push.apply(keys,symbols)}return keys}function _objectSpread2(target){for(var i=1;iarr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i0&&void 0!==arguments[0]?arguments[0]:"right";return this.modifiers.includes("up")?"up":this.modifiers.includes("down")?"down":this.modifiers.includes("left")?"left":this.modifiers.includes("right")?"right":fallback}}]),Directive}();function walk(root,callback){if(!1!==callback(root))for(var node=root.firstElementChild;node;)walk(node,callback),node=node.nextElementSibling}function dispatch(eventName){var event=document.createEvent("Events");return event.initEvent(eventName,!0,!0),document.dispatchEvent(event),event}function getCsrfToken(){var _window$livewire_toke,tokenTag=document.head.querySelector('meta[name="csrf-token"]');return tokenTag?tokenTag.content:null!==(_window$livewire_toke=window.livewire_token)&&void 0!==_window$livewire_toke?_window$livewire_toke:void 0}function kebabCase(subject){return subject.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[_\s]/,"-").toLowerCase()}
/*!
* isobject
*
@@ -10,5 +10,5 @@
*
* Copyright (c) 2014-2018, Jon Schlinkert.
* Released under the MIT License.
- */function join(segs,joinChar,options){return"function"==typeof options.join?options.join(segs):segs[0]+joinChar+segs[1]}function split$1(path,splitChar,options){return"function"==typeof options.split?options.split(path):path.split(splitChar)}function isValid(key,target,options){return"function"!=typeof options.isValid||options.isValid(key,target)}function isValidObject(val){return isobject(val)||Array.isArray(val)||"function"==typeof val}var _default$6=function(){function _default(el){var skipWatcher=arguments.length>1&&void 0!==arguments[1]&&arguments[1];_classCallCheck(this,_default),this.el=el,this.skipWatcher=skipWatcher,this.resolveCallback=function(){},this.rejectCallback=function(){},this.signature=(Math.random()+1).toString(36).substring(8)}return _createClass(_default,[{key:"toId",value:function(){return btoa(encodeURIComponent(this.el.outerHTML))}},{key:"onResolve",value:function(callback){this.resolveCallback=callback}},{key:"onReject",value:function(callback){this.rejectCallback=callback}},{key:"resolve",value:function(thing){this.resolveCallback(thing)}},{key:"reject",value:function(thing){this.rejectCallback(thing)}}]),_default}(),_default$5=function(_Action){_inherits(_default,_Action);var _super=_createSuper(_default);function _default(event,params,el){var _this;return _classCallCheck(this,_default),(_this=_super.call(this,el)).type="fireEvent",_this.payload={id:_this.signature,event:event,params:params},_this}return _createClass(_default,[{key:"toId",value:function(){return btoa(encodeURIComponent(this.type,this.payload.event,JSON.stringify(this.payload.params)))}}]),_default}(_default$6),MessageBus=function(){function MessageBus(){_classCallCheck(this,MessageBus),this.listeners={}}return _createClass(MessageBus,[{key:"register",value:function(name,callback){this.listeners[name]||(this.listeners[name]=[]),this.listeners[name].push(callback)}},{key:"call",value:function(name){for(var _len=arguments.length,params=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];(this.listeners[name]||[]).forEach((function(callback){callback.apply(void 0,params)}))}},{key:"has",value:function(name){return Object.keys(this.listeners).includes(name)}}]),MessageBus}(),HookManager={availableHooks:["component.initialized","element.initialized","element.updating","element.updated","element.removed","message.sent","message.failed","message.received","message.processed","interceptWireModelSetValue","interceptWireModelAttachListener","beforeReplaceState","beforePushState"],bus:new MessageBus,register:function(name,callback){if(!this.availableHooks.includes(name))throw"Livewire: Referencing unknown hook: [".concat(name,"]");this.bus.register(name,callback)},call:function(name){for(var _this$bus,_len=arguments.length,params=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];(_this$bus=this.bus).call.apply(_this$bus,[name].concat(params))}},DirectiveManager={directives:new MessageBus,register:function(name,callback){if(this.has(name))throw"Livewire: Directive already registered: [".concat(name,"]");this.directives.register(name,callback)},call:function(name,el,directive,component){this.directives.call(name,el,directive,component)},has:function(name){return this.directives.has(name)}},store$2={componentsById:{},listeners:new MessageBus,initialRenderIsFinished:!1,livewireIsInBackground:!1,livewireIsOffline:!1,sessionHasExpired:!1,sessionHasExpiredCallback:void 0,directives:DirectiveManager,hooks:HookManager,onErrorCallback:function(){},components:function(){var _this=this;return Object.keys(this.componentsById).map((function(key){return _this.componentsById[key]}))},addComponent:function(component){return this.componentsById[component.id]=component},findComponent:function(id){return this.componentsById[id]},getComponentsByName:function(name){return this.components().filter((function(component){return component.name===name}))},hasComponent:function(id){return!!this.componentsById[id]},tearDownComponents:function(){var _this2=this;this.components().forEach((function(component){_this2.removeComponent(component)}))},on:function(event,callback){this.listeners.register(event,callback)},emit:function(event){for(var _this$listeners,_len=arguments.length,params=new Array(_len>1?_len-1:0),_key=1;_key<_len;_key++)params[_key-1]=arguments[_key];(_this$listeners=this.listeners).call.apply(_this$listeners,[event].concat(params)),this.componentsListeningForEvent(event).forEach((function(component){return component.addAction(new _default$5(event,params))}))},emitUp:function(el,event){for(var _len2=arguments.length,params=new Array(_len2>2?_len2-2:0),_key2=2;_key2<_len2;_key2++)params[_key2-2]=arguments[_key2];this.componentsListeningForEventThatAreTreeAncestors(el,event).forEach((function(component){return component.addAction(new _default$5(event,params))}))},emitSelf:function(componentId,event){var component=this.findComponent(componentId);if(component.listeners.includes(event)){for(var _len3=arguments.length,params=new Array(_len3>2?_len3-2:0),_key3=2;_key3<_len3;_key3++)params[_key3-2]=arguments[_key3];component.addAction(new _default$5(event,params))}},emitTo:function(componentName,event){for(var _len4=arguments.length,params=new Array(_len4>2?_len4-2:0),_key4=2;_key4<_len4;_key4++)params[_key4-2]=arguments[_key4];var components=this.getComponentsByName(componentName);components.forEach((function(component){component.listeners.includes(event)&&component.addAction(new _default$5(event,params))}))},componentsListeningForEventThatAreTreeAncestors:function(el,event){for(var parentIds=[],parent=el.parentElement.closest("[wire\\:id]");parent;)parentIds.push(parent.getAttribute("wire:id")),parent=parent.parentElement.closest("[wire\\:id]");return this.components().filter((function(component){return component.listeners.includes(event)&&parentIds.includes(component.id)}))},componentsListeningForEvent:function(event){return this.components().filter((function(component){return component.listeners.includes(event)}))},registerDirective:function(name,callback){this.directives.register(name,callback)},registerHook:function(name,callback){this.hooks.register(name,callback)},callHook:function(name){for(var _this$hooks,_len5=arguments.length,params=new Array(_len5>1?_len5-1:0),_key5=1;_key5<_len5;_key5++)params[_key5-1]=arguments[_key5];(_this$hooks=this.hooks).call.apply(_this$hooks,[name].concat(params))},changeComponentId:function(component,newId){var oldId=component.id;component.id=newId,component.fingerprint.id=newId,this.componentsById[newId]=component,delete this.componentsById[oldId],this.components().forEach((function(component){var children=component.serverMemo.children||{};Object.entries(children).forEach((function(_ref){var _ref2=_slicedToArray(_ref,2),key=_ref2[0],_ref2$=_ref2[1],id=_ref2$.id;_ref2$.tagName,id===oldId&&(children[key].id=newId)}))}))},removeComponent:function(component){component.tearDown(),delete this.componentsById[component.id]},onError:function(callback){this.onErrorCallback=callback},getClosestParentId:function(childId,subsetOfParentIds){var _this3=this,distancesByParentId={};subsetOfParentIds.forEach((function(parentId){var distance=_this3.getDistanceToChild(parentId,childId);distance&&(distancesByParentId[parentId]=distance)}));var closestParentId,smallestDistance=Math.min.apply(Math,_toConsumableArray(Object.values(distancesByParentId)));return Object.entries(distancesByParentId).forEach((function(_ref3){var _ref4=_slicedToArray(_ref3,2),parentId=_ref4[0];_ref4[1]===smallestDistance&&(closestParentId=parentId)})),closestParentId},getDistanceToChild:function(parentId,childId){var distanceMemo=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,parentComponent=this.findComponent(parentId);if(parentComponent){var childIds=parentComponent.childIds;if(childIds.includes(childId))return distanceMemo;for(var i=0;i0&&void 0!==arguments[0]?arguments[0]:null;null===node&&(node=document);var allEls=Array.from(node.querySelectorAll("[wire\\:initial-data]")),onlyChildEls=Array.from(node.querySelectorAll("[wire\\:initial-data] [wire\\:initial-data]"));return allEls.filter((function(el){return!onlyChildEls.includes(el)}))},allModelElementsInside:function(root){return Array.from(root.querySelectorAll("[wire\\:model]"))},getByAttributeAndValue:function(attribute,value){return document.querySelector("[wire\\:".concat(attribute,'="').concat(value,'"]'))},nextFrame:function(fn){var _this=this;requestAnimationFrame((function(){requestAnimationFrame(fn.bind(_this))}))},closestRoot:function(el){return this.closestByAttribute(el,"id")},closestByAttribute:function(el,attribute){var closestEl=el.closest("[wire\\:".concat(attribute,"]"));if(!closestEl)throw"\nLivewire Error:\n\nCannot find parent element in DOM tree containing attribute: [wire:".concat(attribute,"].\n\nUsually this is caused by Livewire's DOM-differ not being able to properly track changes.\n\nReference the following guide for common causes: https://laravel-livewire.com/docs/troubleshooting \n\nReferenced element:\n\n").concat(el.outerHTML,"\n");return closestEl},isComponentRootEl:function(el){return this.hasAttribute(el,"id")},hasAttribute:function(el,attribute){return el.hasAttribute("wire:".concat(attribute))},getAttribute:function(el,attribute){return el.getAttribute("wire:".concat(attribute))},removeAttribute:function(el,attribute){return el.removeAttribute("wire:".concat(attribute))},setAttribute:function(el,attribute,value){return el.setAttribute("wire:".concat(attribute),value)},hasFocus:function(el){return el===document.activeElement},isInput:function(el){return["INPUT","TEXTAREA","SELECT"].includes(el.tagName.toUpperCase())},isTextInput:function(el){return["INPUT","TEXTAREA"].includes(el.tagName.toUpperCase())&&!["checkbox","radio"].includes(el.type)},valueFromInput:function(el,component){if("checkbox"===el.type){var modelName=wireDirectives(el).get("model").value,modelValue=component.deferredActions[modelName]?component.deferredActions[modelName].payload.value:getValue(component.data,modelName);return Array.isArray(modelValue)?this.mergeCheckboxValueIntoArray(el,modelValue):!!el.checked&&(el.getAttribute("value")||!0)}return"SELECT"===el.tagName&&el.multiple?this.getSelectValues(el):el.value},mergeCheckboxValueIntoArray:function(el,arrayValue){return el.checked?arrayValue.includes(el.value)?arrayValue:arrayValue.concat(el.value):arrayValue.filter((function(item){return item!=el.value}))},setInputValueFromModel:function(el,component){var modelString=wireDirectives(el).get("model").value,modelValue=getValue(component.data,modelString);"input"===el.tagName.toLowerCase()&&"file"===el.type||this.setInputValue(el,modelValue)},setInputValue:function(el,value){if(store$2.callHook("interceptWireModelSetValue",value,el),"radio"===el.type)el.checked=el.value==value;else if("checkbox"===el.type)if(Array.isArray(value)){var valueFound=!1;value.forEach((function(val){val==el.value&&(valueFound=!0)})),el.checked=valueFound}else el.checked=!!value;else"SELECT"===el.tagName?this.updateSelect(el,value):(value=void 0===value?"":value,el.value=value)},getSelectValues:function(el){return Array.from(el.options).filter((function(option){return option.selected})).map((function(option){return option.value||option.text}))},updateSelect:function(el,value){var arrayWrappedValue=[].concat(value).map((function(value){return value+""}));Array.from(el.options).forEach((function(option){option.selected=arrayWrappedValue.includes(option.value)}))}},ceil=Math.ceil,floor=Math.floor,toInteger=function(argument){return isNaN(argument=+argument)?0:(argument>0?floor:ceil)(argument)},requireObjectCoercible=function(it){if(null==it)throw TypeError("Can't call method on "+it);return it},createMethod$3=function(CONVERT_TO_STRING){return function($this,pos){var first,second,S=String(requireObjectCoercible($this)),position=toInteger(pos),size=S.length;return position<0||position>=size?CONVERT_TO_STRING?"":void 0:(first=S.charCodeAt(position))<55296||first>56319||position+1===size||(second=S.charCodeAt(position+1))<56320||second>57343?CONVERT_TO_STRING?S.charAt(position):first:CONVERT_TO_STRING?S.slice(position,position+2):second-56320+(first-55296<<10)+65536}},stringMultibyte={codeAt:createMethod$3(!1),charAt:createMethod$3(!0)},commonjsGlobal="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function createCommonjsModule(fn,basedir,module){return fn(module={path:basedir,exports:{},require:function(path,base){return commonjsRequire(path,null==base?module.path:base)}},module.exports),module.exports}function commonjsRequire(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}var check=function(it){return it&&it.Math==Math&&it},global_1=check("object"==typeof globalThis&&globalThis)||check("object"==typeof window&&window)||check("object"==typeof self&&self)||check("object"==typeof commonjsGlobal&&commonjsGlobal)||function(){return this}()||Function("return this")(),fails=function(exec){try{return!!exec()}catch(error){return!0}},descriptors=!fails((function(){return 7!=Object.defineProperty({},1,{get:function(){return 7}})[1]})),isObject=function(it){return"object"==typeof it?null!==it:"function"==typeof it},document$3=global_1.document,EXISTS=isObject(document$3)&&isObject(document$3.createElement),documentCreateElement=function(it){return EXISTS?document$3.createElement(it):{}},ie8DomDefine=!descriptors&&!fails((function(){return 7!=Object.defineProperty(documentCreateElement("div"),"a",{get:function(){return 7}}).a})),anObject=function(it){if(!isObject(it))throw TypeError(String(it)+" is not an object");return it},toPrimitive=function(input,PREFERRED_STRING){if(!isObject(input))return input;var fn,val;if(PREFERRED_STRING&&"function"==typeof(fn=input.toString)&&!isObject(val=fn.call(input)))return val;if("function"==typeof(fn=input.valueOf)&&!isObject(val=fn.call(input)))return val;if(!PREFERRED_STRING&&"function"==typeof(fn=input.toString)&&!isObject(val=fn.call(input)))return val;throw TypeError("Can't convert object to primitive value")},$defineProperty=Object.defineProperty,f$5=descriptors?$defineProperty:function(O,P,Attributes){if(anObject(O),P=toPrimitive(P,!0),anObject(Attributes),ie8DomDefine)try{return $defineProperty(O,P,Attributes)}catch(error){}if("get"in Attributes||"set"in Attributes)throw TypeError("Accessors not supported");return"value"in Attributes&&(O[P]=Attributes.value),O},objectDefineProperty={f:f$5},createPropertyDescriptor=function(bitmap,value){return{enumerable:!(1&bitmap),configurable:!(2&bitmap),writable:!(4&bitmap),value:value}},createNonEnumerableProperty=descriptors?function(object,key,value){return objectDefineProperty.f(object,key,createPropertyDescriptor(1,value))}:function(object,key,value){return object[key]=value,object},setGlobal=function(key,value){try{createNonEnumerableProperty(global_1,key,value)}catch(error){global_1[key]=value}return value},SHARED="__core-js_shared__",store$1=global_1[SHARED]||setGlobal(SHARED,{}),sharedStore=store$1,functionToString=Function.toString;"function"!=typeof sharedStore.inspectSource&&(sharedStore.inspectSource=function(it){return functionToString.call(it)});var inspectSource=sharedStore.inspectSource,WeakMap$1=global_1.WeakMap,nativeWeakMap="function"==typeof WeakMap$1&&/native code/.test(inspectSource(WeakMap$1)),toObject=function(argument){return Object(requireObjectCoercible(argument))},hasOwnProperty={}.hasOwnProperty,has$1=Object.hasOwn||function(it,key){return hasOwnProperty.call(toObject(it),key)},shared=createCommonjsModule((function(module){(module.exports=function(key,value){return sharedStore[key]||(sharedStore[key]=void 0!==value?value:{})})("versions",[]).push({version:"3.15.2",mode:"global",copyright:"© 2021 Denis Pushkarev (zloirock.ru)"})})),id=0,postfix=Math.random(),uid=function(key){return"Symbol("+String(void 0===key?"":key)+")_"+(++id+postfix).toString(36)},keys=shared("keys"),sharedKey=function(key){return keys[key]||(keys[key]=uid(key))},hiddenKeys$1={},OBJECT_ALREADY_INITIALIZED="Object already initialized",WeakMap=global_1.WeakMap,set$1,get,has,enforce=function(it){return has(it)?get(it):set$1(it,{})},getterFor=function(TYPE){return function(it){var state;if(!isObject(it)||(state=get(it)).type!==TYPE)throw TypeError("Incompatible receiver, "+TYPE+" required");return state}};if(nativeWeakMap||sharedStore.state){var store=sharedStore.state||(sharedStore.state=new WeakMap),wmget=store.get,wmhas=store.has,wmset=store.set;set$1=function(it,metadata){if(wmhas.call(store,it))throw new TypeError(OBJECT_ALREADY_INITIALIZED);return metadata.facade=it,wmset.call(store,it,metadata),metadata},get=function(it){return wmget.call(store,it)||{}},has=function(it){return wmhas.call(store,it)}}else{var STATE=sharedKey("state");hiddenKeys$1[STATE]=!0,set$1=function(it,metadata){if(has$1(it,STATE))throw new TypeError(OBJECT_ALREADY_INITIALIZED);return metadata.facade=it,createNonEnumerableProperty(it,STATE,metadata),metadata},get=function(it){return has$1(it,STATE)?it[STATE]:{}},has=function(it){return has$1(it,STATE)}}var internalState={set:set$1,get:get,has:has,enforce:enforce,getterFor:getterFor},$propertyIsEnumerable={}.propertyIsEnumerable,getOwnPropertyDescriptor$3=Object.getOwnPropertyDescriptor,NASHORN_BUG=getOwnPropertyDescriptor$3&&!$propertyIsEnumerable.call({1:2},1),f$4=NASHORN_BUG?function(V){var descriptor=getOwnPropertyDescriptor$3(this,V);return!!descriptor&&descriptor.enumerable}:$propertyIsEnumerable,objectPropertyIsEnumerable={f:f$4},toString={}.toString,classofRaw=function(it){return toString.call(it).slice(8,-1)},split="".split,indexedObject=fails((function(){return!Object("z").propertyIsEnumerable(0)}))?function(it){return"String"==classofRaw(it)?split.call(it,""):Object(it)}:Object,toIndexedObject=function(it){return indexedObject(requireObjectCoercible(it))},$getOwnPropertyDescriptor=Object.getOwnPropertyDescriptor,f$3=descriptors?$getOwnPropertyDescriptor:function(O,P){if(O=toIndexedObject(O),P=toPrimitive(P,!0),ie8DomDefine)try{return $getOwnPropertyDescriptor(O,P)}catch(error){}if(has$1(O,P))return createPropertyDescriptor(!objectPropertyIsEnumerable.f.call(O,P),O[P])},objectGetOwnPropertyDescriptor={f:f$3},redefine=createCommonjsModule((function(module){var getInternalState=internalState.get,enforceInternalState=internalState.enforce,TEMPLATE=String(String).split("String");(module.exports=function(O,key,value,options){var state,unsafe=!!options&&!!options.unsafe,simple=!!options&&!!options.enumerable,noTargetGet=!!options&&!!options.noTargetGet;"function"==typeof value&&("string"!=typeof key||has$1(value,"name")||createNonEnumerableProperty(value,"name",key),(state=enforceInternalState(value)).source||(state.source=TEMPLATE.join("string"==typeof key?key:""))),O!==global_1?(unsafe?!noTargetGet&&O[key]&&(simple=!0):delete O[key],simple?O[key]=value:createNonEnumerableProperty(O,key,value)):simple?O[key]=value:setGlobal(key,value)})(Function.prototype,"toString",(function(){return"function"==typeof this&&getInternalState(this).source||inspectSource(this)}))})),path=global_1,aFunction$1=function(variable){return"function"==typeof variable?variable:void 0},getBuiltIn=function(namespace,method){return arguments.length<2?aFunction$1(path[namespace])||aFunction$1(global_1[namespace]):path[namespace]&&path[namespace][method]||global_1[namespace]&&global_1[namespace][method]},min$2=Math.min,toLength=function(argument){return argument>0?min$2(toInteger(argument),9007199254740991):0},max=Math.max,min$1=Math.min,toAbsoluteIndex=function(index,length){var integer=toInteger(index);return integer<0?max(integer+length,0):min$1(integer,length)},createMethod$2=function(IS_INCLUDES){return function($this,el,fromIndex){var value,O=toIndexedObject($this),length=toLength(O.length),index=toAbsoluteIndex(fromIndex,length);if(IS_INCLUDES&&el!=el){for(;length>index;)if((value=O[index++])!=value)return!0}else for(;length>index;index++)if((IS_INCLUDES||index in O)&&O[index]===el)return IS_INCLUDES||index||0;return!IS_INCLUDES&&-1}},arrayIncludes={includes:createMethod$2(!0),indexOf:createMethod$2(!1)},indexOf=arrayIncludes.indexOf,objectKeysInternal=function(object,names){var key,O=toIndexedObject(object),i=0,result=[];for(key in O)!has$1(hiddenKeys$1,key)&&has$1(O,key)&&result.push(key);for(;names.length>i;)has$1(O,key=names[i++])&&(~indexOf(result,key)||result.push(key));return result},enumBugKeys=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"],hiddenKeys=enumBugKeys.concat("length","prototype"),f$2=Object.getOwnPropertyNames||function(O){return objectKeysInternal(O,hiddenKeys)},objectGetOwnPropertyNames={f:f$2},f$1=Object.getOwnPropertySymbols,objectGetOwnPropertySymbols={f:f$1},ownKeys=getBuiltIn("Reflect","ownKeys")||function(it){var keys=objectGetOwnPropertyNames.f(anObject(it)),getOwnPropertySymbols=objectGetOwnPropertySymbols.f;return getOwnPropertySymbols?keys.concat(getOwnPropertySymbols(it)):keys},copyConstructorProperties=function(target,source){for(var keys=ownKeys(source),defineProperty=objectDefineProperty.f,getOwnPropertyDescriptor=objectGetOwnPropertyDescriptor.f,i=0;i=74)&&(match=engineUserAgent.match(/Chrome\/(\d+)/),match&&(version=match[1])));var engineV8Version=version&&+version,nativeSymbol=!!Object.getOwnPropertySymbols&&!fails((function(){var symbol=Symbol();return!String(symbol)||!(Object(symbol)instanceof Symbol)||!Symbol.sham&&engineV8Version&&engineV8Version<41})),useSymbolAsUid=nativeSymbol&&!Symbol.sham&&"symbol"==typeof Symbol.iterator,WellKnownSymbolsStore=shared("wks"),Symbol$1=global_1.Symbol,createWellKnownSymbol=useSymbolAsUid?Symbol$1:Symbol$1&&Symbol$1.withoutSetter||uid,wellKnownSymbol=function(name){return has$1(WellKnownSymbolsStore,name)&&(nativeSymbol||"string"==typeof WellKnownSymbolsStore[name])||(nativeSymbol&&has$1(Symbol$1,name)?WellKnownSymbolsStore[name]=Symbol$1[name]:WellKnownSymbolsStore[name]=createWellKnownSymbol("Symbol."+name)),WellKnownSymbolsStore[name]},ITERATOR$5=wellKnownSymbol("iterator"),BUGGY_SAFARI_ITERATORS$1=!1,returnThis$2=function(){return this},IteratorPrototype$2,PrototypeOfArrayIteratorPrototype,arrayIterator;[].keys&&(arrayIterator=[].keys(),"next"in arrayIterator?(PrototypeOfArrayIteratorPrototype=objectGetPrototypeOf(objectGetPrototypeOf(arrayIterator)),PrototypeOfArrayIteratorPrototype!==Object.prototype&&(IteratorPrototype$2=PrototypeOfArrayIteratorPrototype)):BUGGY_SAFARI_ITERATORS$1=!0);var NEW_ITERATOR_PROTOTYPE=null==IteratorPrototype$2||fails((function(){var test={};return IteratorPrototype$2[ITERATOR$5].call(test)!==test}));NEW_ITERATOR_PROTOTYPE&&(IteratorPrototype$2={}),has$1(IteratorPrototype$2,ITERATOR$5)||createNonEnumerableProperty(IteratorPrototype$2,ITERATOR$5,returnThis$2);var iteratorsCore={IteratorPrototype:IteratorPrototype$2,BUGGY_SAFARI_ITERATORS:BUGGY_SAFARI_ITERATORS$1},objectKeys=Object.keys||function(O){return objectKeysInternal(O,enumBugKeys)},objectDefineProperties=descriptors?Object.defineProperties:function(O,Properties){anObject(O);for(var key,keys=objectKeys(Properties),length=keys.length,index=0;length>index;)objectDefineProperty.f(O,key=keys[index++],Properties[key]);return O},html=getBuiltIn("document","documentElement"),GT=">",LT="<",PROTOTYPE="prototype",SCRIPT="script",IE_PROTO=sharedKey("IE_PROTO"),EmptyConstructor=function(){},scriptTag=function(content){return LT+SCRIPT+GT+content+LT+"/"+SCRIPT+GT},NullProtoObjectViaActiveX=function(activeXDocument){activeXDocument.write(scriptTag("")),activeXDocument.close();var temp=activeXDocument.parentWindow.Object;return activeXDocument=null,temp},NullProtoObjectViaIFrame=function(){var iframeDocument,iframe=documentCreateElement("iframe"),JS="java"+SCRIPT+":";return iframe.style.display="none",html.appendChild(iframe),iframe.src=String(JS),(iframeDocument=iframe.contentWindow.document).open(),iframeDocument.write(scriptTag("document.F=Object")),iframeDocument.close(),iframeDocument.F},activeXDocument,NullProtoObject=function(){try{activeXDocument=document.domain&&new ActiveXObject("htmlfile")}catch(error){}NullProtoObject=activeXDocument?NullProtoObjectViaActiveX(activeXDocument):NullProtoObjectViaIFrame();for(var length=enumBugKeys.length;length--;)delete NullProtoObject[PROTOTYPE][enumBugKeys[length]];return NullProtoObject()};hiddenKeys$1[IE_PROTO]=!0;var objectCreate=Object.create||function(O,Properties){var result;return null!==O?(EmptyConstructor[PROTOTYPE]=anObject(O),result=new EmptyConstructor,EmptyConstructor[PROTOTYPE]=null,result[IE_PROTO]=O):result=NullProtoObject(),void 0===Properties?result:objectDefineProperties(result,Properties)},defineProperty$1=objectDefineProperty.f,TO_STRING_TAG$3=wellKnownSymbol("toStringTag"),setToStringTag=function(it,TAG,STATIC){it&&!has$1(it=STATIC?it:it.prototype,TO_STRING_TAG$3)&&defineProperty$1(it,TO_STRING_TAG$3,{configurable:!0,value:TAG})},iterators={},IteratorPrototype$1=iteratorsCore.IteratorPrototype,returnThis$1=function(){return this},createIteratorConstructor=function(IteratorConstructor,NAME,next){var TO_STRING_TAG=NAME+" Iterator";return IteratorConstructor.prototype=objectCreate(IteratorPrototype$1,{next:createPropertyDescriptor(1,next)}),setToStringTag(IteratorConstructor,TO_STRING_TAG,!1),iterators[TO_STRING_TAG]=returnThis$1,IteratorConstructor},aPossiblePrototype=function(it){if(!isObject(it)&&null!==it)throw TypeError("Can't set "+String(it)+" as a prototype");return it},objectSetPrototypeOf=Object.setPrototypeOf||("__proto__"in{}?function(){var setter,CORRECT_SETTER=!1,test={};try{(setter=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__").set).call(test,[]),CORRECT_SETTER=test instanceof Array}catch(error){}return function(O,proto){return anObject(O),aPossiblePrototype(proto),CORRECT_SETTER?setter.call(O,proto):O.__proto__=proto,O}}():void 0),IteratorPrototype=iteratorsCore.IteratorPrototype,BUGGY_SAFARI_ITERATORS=iteratorsCore.BUGGY_SAFARI_ITERATORS,ITERATOR$4=wellKnownSymbol("iterator"),KEYS="keys",VALUES="values",ENTRIES="entries",returnThis=function(){return this},defineIterator=function(Iterable,NAME,IteratorConstructor,next,DEFAULT,IS_SET,FORCED){createIteratorConstructor(IteratorConstructor,NAME,next);var CurrentIteratorPrototype,methods,KEY,getIterationMethod=function(KIND){if(KIND===DEFAULT&&defaultIterator)return defaultIterator;if(!BUGGY_SAFARI_ITERATORS&&KIND in IterablePrototype)return IterablePrototype[KIND];switch(KIND){case KEYS:case VALUES:case ENTRIES:return function(){return new IteratorConstructor(this,KIND)}}return function(){return new IteratorConstructor(this)}},TO_STRING_TAG=NAME+" Iterator",INCORRECT_VALUES_NAME=!1,IterablePrototype=Iterable.prototype,nativeIterator=IterablePrototype[ITERATOR$4]||IterablePrototype["@@iterator"]||DEFAULT&&IterablePrototype[DEFAULT],defaultIterator=!BUGGY_SAFARI_ITERATORS&&nativeIterator||getIterationMethod(DEFAULT),anyNativeIterator="Array"==NAME&&IterablePrototype.entries||nativeIterator;if(anyNativeIterator&&(CurrentIteratorPrototype=objectGetPrototypeOf(anyNativeIterator.call(new Iterable)),IteratorPrototype!==Object.prototype&&CurrentIteratorPrototype.next&&(objectGetPrototypeOf(CurrentIteratorPrototype)!==IteratorPrototype&&(objectSetPrototypeOf?objectSetPrototypeOf(CurrentIteratorPrototype,IteratorPrototype):"function"!=typeof CurrentIteratorPrototype[ITERATOR$4]&&createNonEnumerableProperty(CurrentIteratorPrototype,ITERATOR$4,returnThis)),setToStringTag(CurrentIteratorPrototype,TO_STRING_TAG,!0))),DEFAULT==VALUES&&nativeIterator&&nativeIterator.name!==VALUES&&(INCORRECT_VALUES_NAME=!0,defaultIterator=function(){return nativeIterator.call(this)}),IterablePrototype[ITERATOR$4]!==defaultIterator&&createNonEnumerableProperty(IterablePrototype,ITERATOR$4,defaultIterator),iterators[NAME]=defaultIterator,DEFAULT)if(methods={values:getIterationMethod(VALUES),keys:IS_SET?defaultIterator:getIterationMethod(KEYS),entries:getIterationMethod(ENTRIES)},FORCED)for(KEY in methods)(BUGGY_SAFARI_ITERATORS||INCORRECT_VALUES_NAME||!(KEY in IterablePrototype))&&redefine(IterablePrototype,KEY,methods[KEY]);else _export({target:NAME,proto:!0,forced:BUGGY_SAFARI_ITERATORS||INCORRECT_VALUES_NAME},methods);return methods},charAt=stringMultibyte.charAt,STRING_ITERATOR="String Iterator",setInternalState$2=internalState.set,getInternalState$2=internalState.getterFor(STRING_ITERATOR);defineIterator(String,"String",(function(iterated){setInternalState$2(this,{type:STRING_ITERATOR,string:String(iterated),index:0})}),(function(){var point,state=getInternalState$2(this),string=state.string,index=state.index;return index>=string.length?{value:void 0,done:!0}:(point=charAt(string,index),state.index+=point.length,{value:point,done:!1})}));var aFunction=function(it){if("function"!=typeof it)throw TypeError(String(it)+" is not a function");return it},functionBindContext=function(fn,that,length){if(aFunction(fn),void 0===that)return fn;switch(length){case 0:return function(){return fn.call(that)};case 1:return function(a){return fn.call(that,a)};case 2:return function(a,b){return fn.call(that,a,b)};case 3:return function(a,b,c){return fn.call(that,a,b,c)}}return function(){return fn.apply(that,arguments)}},iteratorClose=function(iterator){var returnMethod=iterator.return;if(void 0!==returnMethod)return anObject(returnMethod.call(iterator)).value},callWithSafeIterationClosing=function(iterator,fn,value,ENTRIES){try{return ENTRIES?fn(anObject(value)[0],value[1]):fn(value)}catch(error){throw iteratorClose(iterator),error}},ITERATOR$3=wellKnownSymbol("iterator"),ArrayPrototype$1=Array.prototype,isArrayIteratorMethod=function(it){return void 0!==it&&(iterators.Array===it||ArrayPrototype$1[ITERATOR$3]===it)},createProperty=function(object,key,value){var propertyKey=toPrimitive(key);propertyKey in object?objectDefineProperty.f(object,propertyKey,createPropertyDescriptor(0,value)):object[propertyKey]=value},TO_STRING_TAG$2=wellKnownSymbol("toStringTag"),test={};test[TO_STRING_TAG$2]="z";var toStringTagSupport="[object z]"===String(test),TO_STRING_TAG$1=wellKnownSymbol("toStringTag"),CORRECT_ARGUMENTS="Arguments"==classofRaw(function(){return arguments}()),tryGet=function(it,key){try{return it[key]}catch(error){}},classof=toStringTagSupport?classofRaw:function(it){var O,tag,result;return void 0===it?"Undefined":null===it?"Null":"string"==typeof(tag=tryGet(O=Object(it),TO_STRING_TAG$1))?tag:CORRECT_ARGUMENTS?classofRaw(O):"Object"==(result=classofRaw(O))&&"function"==typeof O.callee?"Arguments":result},ITERATOR$2=wellKnownSymbol("iterator"),getIteratorMethod=function(it){if(null!=it)return it[ITERATOR$2]||it["@@iterator"]||iterators[classof(it)]},arrayFrom=function(arrayLike){var length,result,step,iterator,next,value,O=toObject(arrayLike),C="function"==typeof this?this:Array,argumentsLength=arguments.length,mapfn=argumentsLength>1?arguments[1]:void 0,mapping=void 0!==mapfn,iteratorMethod=getIteratorMethod(O),index=0;if(mapping&&(mapfn=functionBindContext(mapfn,argumentsLength>2?arguments[2]:void 0,2)),null==iteratorMethod||C==Array&&isArrayIteratorMethod(iteratorMethod))for(result=new C(length=toLength(O.length));length>index;index++)value=mapping?mapfn(O[index],index):O[index],createProperty(result,index,value);else for(next=(iterator=iteratorMethod.call(O)).next,result=new C;!(step=next.call(iterator)).done;index++)value=mapping?callWithSafeIterationClosing(iterator,mapfn,[step.value,index],!0):step.value,createProperty(result,index,value);return result.length=index,result},ITERATOR$1=wellKnownSymbol("iterator"),SAFE_CLOSING=!1;try{var called=0,iteratorWithReturn={next:function(){return{done:!!called++}},return:function(){SAFE_CLOSING=!0}};iteratorWithReturn[ITERATOR$1]=function(){return this},Array.from(iteratorWithReturn,(function(){throw 2}))}catch(error){}var checkCorrectnessOfIteration=function(exec,SKIP_CLOSING){if(!SKIP_CLOSING&&!SAFE_CLOSING)return!1;var ITERATION_SUPPORT=!1;try{var object={};object[ITERATOR$1]=function(){return{next:function(){return{done:ITERATION_SUPPORT=!0}}}},exec(object)}catch(error){}return ITERATION_SUPPORT},INCORRECT_ITERATION$1=!checkCorrectnessOfIteration((function(iterable){Array.from(iterable)}));_export({target:"Array",stat:!0,forced:INCORRECT_ITERATION$1},{from:arrayFrom}),path.Array.from;var UNSCOPABLES=wellKnownSymbol("unscopables"),ArrayPrototype=Array.prototype;null==ArrayPrototype[UNSCOPABLES]&&objectDefineProperty.f(ArrayPrototype,UNSCOPABLES,{configurable:!0,value:objectCreate(null)});var addToUnscopables=function(key){ArrayPrototype[UNSCOPABLES][key]=!0},$includes=arrayIncludes.includes;_export({target:"Array",proto:!0},{includes:function(el){return $includes(this,el,arguments.length>1?arguments[1]:void 0)}}),addToUnscopables("includes");var call=Function.call,entryUnbind=function(CONSTRUCTOR,METHOD,length){return functionBindContext(call,global_1[CONSTRUCTOR].prototype[METHOD],length)};entryUnbind("Array","includes");var isArray=Array.isArray||function(arg){return"Array"==classofRaw(arg)},flattenIntoArray=function(target,original,source,sourceLen,start,depth,mapper,thisArg){for(var element,targetIndex=start,sourceIndex=0,mapFn=!!mapper&&functionBindContext(mapper,thisArg,3);sourceIndex0&&isArray(element))targetIndex=flattenIntoArray(target,original,element,toLength(element.length),targetIndex,depth-1)-1;else{if(targetIndex>=9007199254740991)throw TypeError("Exceed the acceptable array length");target[targetIndex]=element}targetIndex++}sourceIndex++}return targetIndex},flattenIntoArray_1=flattenIntoArray,SPECIES$3=wellKnownSymbol("species"),arraySpeciesCreate=function(originalArray,length){var C;return isArray(originalArray)&&("function"!=typeof(C=originalArray.constructor)||C!==Array&&!isArray(C.prototype)?isObject(C)&&null===(C=C[SPECIES$3])&&(C=void 0):C=void 0),new(void 0===C?Array:C)(0===length?0:length)};_export({target:"Array",proto:!0},{flat:function(){var depthArg=arguments.length?arguments[0]:void 0,O=toObject(this),sourceLen=toLength(O.length),A=arraySpeciesCreate(O,0);return A.length=flattenIntoArray_1(A,O,O,sourceLen,0,void 0===depthArg?1:toInteger(depthArg)),A}}),addToUnscopables("flat"),entryUnbind("Array","flat");var push=[].push,createMethod$1=function(TYPE){var IS_MAP=1==TYPE,IS_FILTER=2==TYPE,IS_SOME=3==TYPE,IS_EVERY=4==TYPE,IS_FIND_INDEX=6==TYPE,IS_FILTER_OUT=7==TYPE,NO_HOLES=5==TYPE||IS_FIND_INDEX;return function($this,callbackfn,that,specificCreate){for(var value,result,O=toObject($this),self=indexedObject(O),boundFunction=functionBindContext(callbackfn,that,3),length=toLength(self.length),index=0,create=specificCreate||arraySpeciesCreate,target=IS_MAP?create($this,length):IS_FILTER||IS_FILTER_OUT?create($this,0):void 0;length>index;index++)if((NO_HOLES||index in self)&&(result=boundFunction(value=self[index],index,O),TYPE))if(IS_MAP)target[index]=result;else if(result)switch(TYPE){case 3:return!0;case 5:return value;case 6:return index;case 2:push.call(target,value)}else switch(TYPE){case 4:return!1;case 7:push.call(target,value)}return IS_FIND_INDEX?-1:IS_SOME||IS_EVERY?IS_EVERY:target}},arrayIteration={forEach:createMethod$1(0),map:createMethod$1(1),filter:createMethod$1(2),some:createMethod$1(3),every:createMethod$1(4),find:createMethod$1(5),findIndex:createMethod$1(6),filterOut:createMethod$1(7)},$find=arrayIteration.find,FIND="find",SKIPS_HOLES=!0;FIND in[]&&Array(1)[FIND]((function(){SKIPS_HOLES=!1})),_export({target:"Array",proto:!0,forced:SKIPS_HOLES},{find:function(callbackfn){return $find(this,callbackfn,arguments.length>1?arguments[1]:void 0)}}),addToUnscopables(FIND),entryUnbind("Array","find");var $assign=Object.assign,defineProperty=Object.defineProperty,objectAssign=!$assign||fails((function(){if(descriptors&&1!==$assign({b:1},$assign(defineProperty({},"a",{enumerable:!0,get:function(){defineProperty(this,"b",{value:3,enumerable:!1})}}),{b:2})).b)return!0;var A={},B={},symbol=Symbol();return A[symbol]=7,"abcdefghijklmnopqrst".split("").forEach((function(chr){B[chr]=chr})),7!=$assign({},A)[symbol]||"abcdefghijklmnopqrst"!=objectKeys($assign({},B)).join("")}))?function(target,source){for(var T=toObject(target),argumentsLength=arguments.length,index=1,getOwnPropertySymbols=objectGetOwnPropertySymbols.f,propertyIsEnumerable=objectPropertyIsEnumerable.f;argumentsLength>index;)for(var key,S=indexedObject(arguments[index++]),keys=getOwnPropertySymbols?objectKeys(S).concat(getOwnPropertySymbols(S)):objectKeys(S),length=keys.length,j=0;length>j;)key=keys[j++],descriptors&&!propertyIsEnumerable.call(S,key)||(T[key]=S[key]);return T}:$assign;_export({target:"Object",stat:!0,forced:Object.assign!==objectAssign},{assign:objectAssign}),path.Object.assign;var propertyIsEnumerable=objectPropertyIsEnumerable.f,createMethod=function(TO_ENTRIES){return function(it){for(var key,O=toIndexedObject(it),keys=objectKeys(O),length=keys.length,i=0,result=[];length>i;)key=keys[i++],descriptors&&!propertyIsEnumerable.call(O,key)||result.push(TO_ENTRIES?[key,O[key]]:O[key]);return result}},objectToArray={entries:createMethod(!0),values:createMethod(!1)},$entries=objectToArray.entries;_export({target:"Object",stat:!0},{entries:function(O){return $entries(O)}}),path.Object.entries;var $values=objectToArray.values;_export({target:"Object",stat:!0},{values:function(O){return $values(O)}}),path.Object.values;var Result=function(stopped,result){this.stopped=stopped,this.result=result},iterate=function(iterable,unboundFunction,options){var iterator,iterFn,index,length,result,next,step,that=options&&options.that,AS_ENTRIES=!(!options||!options.AS_ENTRIES),IS_ITERATOR=!(!options||!options.IS_ITERATOR),INTERRUPTED=!(!options||!options.INTERRUPTED),fn=functionBindContext(unboundFunction,that,1+AS_ENTRIES+INTERRUPTED),stop=function(condition){return iterator&&iteratorClose(iterator),new Result(!0,condition)},callFn=function(value){return AS_ENTRIES?(anObject(value),INTERRUPTED?fn(value[0],value[1],stop):fn(value[0],value[1])):INTERRUPTED?fn(value,stop):fn(value)};if(IS_ITERATOR)iterator=iterable;else{if("function"!=typeof(iterFn=getIteratorMethod(iterable)))throw TypeError("Target is not iterable");if(isArrayIteratorMethod(iterFn)){for(index=0,length=toLength(iterable.length);length>index;index++)if((result=callFn(iterable[index]))&&result instanceof Result)return result;return new Result(!1)}iterator=iterFn.call(iterable)}for(next=iterator.next;!(step=next.call(iterator)).done;){try{result=callFn(step.value)}catch(error){throw iteratorClose(iterator),error}if("object"==typeof result&&result&&result instanceof Result)return result}return new Result(!1)},$AggregateError=function(errors,message){var that=this;if(!(that instanceof $AggregateError))return new $AggregateError(errors,message);objectSetPrototypeOf&&(that=objectSetPrototypeOf(new Error(void 0),objectGetPrototypeOf(that))),void 0!==message&&createNonEnumerableProperty(that,"message",String(message));var errorsArray=[];return iterate(errors,errorsArray.push,{that:errorsArray}),createNonEnumerableProperty(that,"errors",errorsArray),that};$AggregateError.prototype=objectCreate(Error.prototype,{constructor:createPropertyDescriptor(5,$AggregateError),message:createPropertyDescriptor(5,""),name:createPropertyDescriptor(5,"AggregateError")}),_export({global:!0},{AggregateError:$AggregateError});var objectToString=toStringTagSupport?{}.toString:function(){return"[object "+classof(this)+"]"};toStringTagSupport||redefine(Object.prototype,"toString",objectToString,{unsafe:!0});var nativePromiseConstructor=global_1.Promise,redefineAll=function(target,src,options){for(var key in src)redefine(target,key,src[key],options);return target},SPECIES$2=wellKnownSymbol("species"),setSpecies=function(CONSTRUCTOR_NAME){var Constructor=getBuiltIn(CONSTRUCTOR_NAME),defineProperty=objectDefineProperty.f;descriptors&&Constructor&&!Constructor[SPECIES$2]&&defineProperty(Constructor,SPECIES$2,{configurable:!0,get:function(){return this}})},anInstance=function(it,Constructor,name){if(!(it instanceof Constructor))throw TypeError("Incorrect "+(name?name+" ":"")+"invocation");return it},SPECIES$1=wellKnownSymbol("species"),speciesConstructor=function(O,defaultConstructor){var S,C=anObject(O).constructor;return void 0===C||null==(S=anObject(C)[SPECIES$1])?defaultConstructor:aFunction(S)},engineIsIos=/(?:iphone|ipod|ipad).*applewebkit/i.test(engineUserAgent),engineIsNode="process"==classofRaw(global_1.process),location=global_1.location,set=global_1.setImmediate,clear=global_1.clearImmediate,process$2=global_1.process,MessageChannel=global_1.MessageChannel,Dispatch=global_1.Dispatch,counter=0,queue={},ONREADYSTATECHANGE="onreadystatechange",defer,channel,port,run=function(id){if(queue.hasOwnProperty(id)){var fn=queue[id];delete queue[id],fn()}},runner=function(id){return function(){run(id)}},listener=function(event){run(event.data)},post=function(id){global_1.postMessage(id+"",location.protocol+"//"+location.host)};set&&clear||(set=function(fn){for(var args=[],i=1;arguments.length>i;)args.push(arguments[i++]);return queue[++counter]=function(){("function"==typeof fn?fn:Function(fn)).apply(void 0,args)},defer(counter),counter},clear=function(id){delete queue[id]},engineIsNode?defer=function(id){process$2.nextTick(runner(id))}:Dispatch&&Dispatch.now?defer=function(id){Dispatch.now(runner(id))}:MessageChannel&&!engineIsIos?(channel=new MessageChannel,port=channel.port2,channel.port1.onmessage=listener,defer=functionBindContext(port.postMessage,port,1)):global_1.addEventListener&&"function"==typeof postMessage&&!global_1.importScripts&&location&&"file:"!==location.protocol&&!fails(post)?(defer=post,global_1.addEventListener("message",listener,!1)):defer=ONREADYSTATECHANGE in documentCreateElement("script")?function(id){html.appendChild(documentCreateElement("script"))[ONREADYSTATECHANGE]=function(){html.removeChild(this),run(id)}}:function(id){setTimeout(runner(id),0)});var task$1={set:set,clear:clear},engineIsWebosWebkit=/web0s(?!.*chrome)/i.test(engineUserAgent),getOwnPropertyDescriptor$1=objectGetOwnPropertyDescriptor.f,macrotask=task$1.set,MutationObserver=global_1.MutationObserver||global_1.WebKitMutationObserver,document$2=global_1.document,process$1=global_1.process,Promise$1=global_1.Promise,queueMicrotaskDescriptor=getOwnPropertyDescriptor$1(global_1,"queueMicrotask"),queueMicrotask=queueMicrotaskDescriptor&&queueMicrotaskDescriptor.value,flush,head,last,notify$1,toggle,node,promise,then;queueMicrotask||(flush=function(){var parent,fn;for(engineIsNode&&(parent=process$1.domain)&&parent.exit();head;){fn=head.fn,head=head.next;try{fn()}catch(error){throw head?notify$1():last=void 0,error}}last=void 0,parent&&parent.enter()},engineIsIos||engineIsNode||engineIsWebosWebkit||!MutationObserver||!document$2?Promise$1&&Promise$1.resolve?(promise=Promise$1.resolve(void 0),promise.constructor=Promise$1,then=promise.then,notify$1=function(){then.call(promise,flush)}):notify$1=engineIsNode?function(){process$1.nextTick(flush)}:function(){macrotask.call(global_1,flush)}:(toggle=!0,node=document$2.createTextNode(""),new MutationObserver(flush).observe(node,{characterData:!0}),notify$1=function(){node.data=toggle=!toggle}));var microtask=queueMicrotask||function(fn){var task={fn:fn,next:void 0};last&&(last.next=task),head||(head=task,notify$1()),last=task},PromiseCapability=function(C){var resolve,reject;this.promise=new C((function($$resolve,$$reject){if(void 0!==resolve||void 0!==reject)throw TypeError("Bad Promise constructor");resolve=$$resolve,reject=$$reject})),this.resolve=aFunction(resolve),this.reject=aFunction(reject)},f=function(C){return new PromiseCapability(C)},newPromiseCapability$1={f:f},promiseResolve=function(C,x){if(anObject(C),isObject(x)&&x.constructor===C)return x;var promiseCapability=newPromiseCapability$1.f(C);return(0,promiseCapability.resolve)(x),promiseCapability.promise},hostReportErrors=function(a,b){var console=global_1.console;console&&console.error&&(1===arguments.length?console.error(a):console.error(a,b))},perform=function(exec){try{return{error:!1,value:exec()}}catch(error){return{error:!0,value:error}}},engineIsBrowser="object"==typeof window,task=task$1.set,SPECIES=wellKnownSymbol("species"),PROMISE="Promise",getInternalState$1=internalState.get,setInternalState$1=internalState.set,getInternalPromiseState=internalState.getterFor(PROMISE),NativePromisePrototype=nativePromiseConstructor&&nativePromiseConstructor.prototype,PromiseConstructor=nativePromiseConstructor,PromiseConstructorPrototype=NativePromisePrototype,TypeError$1=global_1.TypeError,document$1=global_1.document,process=global_1.process,newPromiseCapability=newPromiseCapability$1.f,newGenericPromiseCapability=newPromiseCapability,DISPATCH_EVENT=!!(document$1&&document$1.createEvent&&global_1.dispatchEvent),NATIVE_REJECTION_EVENT="function"==typeof PromiseRejectionEvent,UNHANDLED_REJECTION="unhandledrejection",REJECTION_HANDLED="rejectionhandled",PENDING=0,FULFILLED=1,REJECTED=2,HANDLED=1,UNHANDLED=2,SUBCLASSING=!1,Internal,OwnPromiseCapability,PromiseWrapper,nativeThen,FORCED=isForced_1(PROMISE,(function(){var PROMISE_CONSTRUCTOR_SOURCE=inspectSource(PromiseConstructor),GLOBAL_CORE_JS_PROMISE=PROMISE_CONSTRUCTOR_SOURCE!==String(PromiseConstructor);if(!GLOBAL_CORE_JS_PROMISE&&66===engineV8Version)return!0;if(engineV8Version>=51&&/native code/.test(PROMISE_CONSTRUCTOR_SOURCE))return!1;var promise=new PromiseConstructor((function(resolve){resolve(1)})),FakePromise=function(exec){exec((function(){}),(function(){}))};return(promise.constructor={})[SPECIES]=FakePromise,!(SUBCLASSING=promise.then((function(){}))instanceof FakePromise)||!GLOBAL_CORE_JS_PROMISE&&engineIsBrowser&&!NATIVE_REJECTION_EVENT})),INCORRECT_ITERATION=FORCED||!checkCorrectnessOfIteration((function(iterable){PromiseConstructor.all(iterable).catch((function(){}))})),isThenable=function(it){var then;return!(!isObject(it)||"function"!=typeof(then=it.then))&&then},notify=function(state,isReject){if(!state.notified){state.notified=!0;var chain=state.reactions;microtask((function(){for(var value=state.value,ok=state.state==FULFILLED,index=0;chain.length>index;){var result,then,exited,reaction=chain[index++],handler=ok?reaction.ok:reaction.fail,resolve=reaction.resolve,reject=reaction.reject,domain=reaction.domain;try{handler?(ok||(state.rejection===UNHANDLED&&onHandleUnhandled(state),state.rejection=HANDLED),!0===handler?result=value:(domain&&domain.enter(),result=handler(value),domain&&(domain.exit(),exited=!0)),result===reaction.promise?reject(TypeError$1("Promise-chain cycle")):(then=isThenable(result))?then.call(result,resolve,reject):resolve(result)):reject(value)}catch(error){domain&&!exited&&domain.exit(),reject(error)}}state.reactions=[],state.notified=!1,isReject&&!state.rejection&&onUnhandled(state)}))}},dispatchEvent=function(name,promise,reason){var event,handler;DISPATCH_EVENT?((event=document$1.createEvent("Event")).promise=promise,event.reason=reason,event.initEvent(name,!1,!0),global_1.dispatchEvent(event)):event={promise:promise,reason:reason},!NATIVE_REJECTION_EVENT&&(handler=global_1["on"+name])?handler(event):name===UNHANDLED_REJECTION&&hostReportErrors("Unhandled promise rejection",reason)},onUnhandled=function(state){task.call(global_1,(function(){var result,promise=state.facade,value=state.value;if(isUnhandled(state)&&(result=perform((function(){engineIsNode?process.emit("unhandledRejection",value,promise):dispatchEvent(UNHANDLED_REJECTION,promise,value)})),state.rejection=engineIsNode||isUnhandled(state)?UNHANDLED:HANDLED,result.error))throw result.value}))},isUnhandled=function(state){return state.rejection!==HANDLED&&!state.parent},onHandleUnhandled=function(state){task.call(global_1,(function(){var promise=state.facade;engineIsNode?process.emit("rejectionHandled",promise):dispatchEvent(REJECTION_HANDLED,promise,state.value)}))},bind=function(fn,state,unwrap){return function(value){fn(state,value,unwrap)}},internalReject=function(state,value,unwrap){state.done||(state.done=!0,unwrap&&(state=unwrap),state.value=value,state.state=REJECTED,notify(state,!0))},internalResolve=function(state,value,unwrap){if(!state.done){state.done=!0,unwrap&&(state=unwrap);try{if(state.facade===value)throw TypeError$1("Promise can't be resolved itself");var then=isThenable(value);then?microtask((function(){var wrapper={done:!1};try{then.call(value,bind(internalResolve,wrapper,state),bind(internalReject,wrapper,state))}catch(error){internalReject(wrapper,error,state)}})):(state.value=value,state.state=FULFILLED,notify(state,!1))}catch(error){internalReject({done:!1},error,state)}}};if(FORCED&&(PromiseConstructor=function(executor){anInstance(this,PromiseConstructor,PROMISE),aFunction(executor),Internal.call(this);var state=getInternalState$1(this);try{executor(bind(internalResolve,state),bind(internalReject,state))}catch(error){internalReject(state,error)}},PromiseConstructorPrototype=PromiseConstructor.prototype,Internal=function(executor){setInternalState$1(this,{type:PROMISE,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:PENDING,value:void 0})},Internal.prototype=redefineAll(PromiseConstructorPrototype,{then:function(onFulfilled,onRejected){var state=getInternalPromiseState(this),reaction=newPromiseCapability(speciesConstructor(this,PromiseConstructor));return reaction.ok="function"!=typeof onFulfilled||onFulfilled,reaction.fail="function"==typeof onRejected&&onRejected,reaction.domain=engineIsNode?process.domain:void 0,state.parent=!0,state.reactions.push(reaction),state.state!=PENDING&¬ify(state,!1),reaction.promise},catch:function(onRejected){return this.then(void 0,onRejected)}}),OwnPromiseCapability=function(){var promise=new Internal,state=getInternalState$1(promise);this.promise=promise,this.resolve=bind(internalResolve,state),this.reject=bind(internalReject,state)},newPromiseCapability$1.f=newPromiseCapability=function(C){return C===PromiseConstructor||C===PromiseWrapper?new OwnPromiseCapability(C):newGenericPromiseCapability(C)},"function"==typeof nativePromiseConstructor&&NativePromisePrototype!==Object.prototype)){nativeThen=NativePromisePrototype.then,SUBCLASSING||(redefine(NativePromisePrototype,"then",(function(onFulfilled,onRejected){var that=this;return new PromiseConstructor((function(resolve,reject){nativeThen.call(that,resolve,reject)})).then(onFulfilled,onRejected)}),{unsafe:!0}),redefine(NativePromisePrototype,"catch",PromiseConstructorPrototype.catch,{unsafe:!0}));try{delete NativePromisePrototype.constructor}catch(error){}objectSetPrototypeOf&&objectSetPrototypeOf(NativePromisePrototype,PromiseConstructorPrototype)}_export({global:!0,wrap:!0,forced:FORCED},{Promise:PromiseConstructor}),setToStringTag(PromiseConstructor,PROMISE,!1),setSpecies(PROMISE),PromiseWrapper=getBuiltIn(PROMISE),_export({target:PROMISE,stat:!0,forced:FORCED},{reject:function(r){var capability=newPromiseCapability(this);return capability.reject.call(void 0,r),capability.promise}}),_export({target:PROMISE,stat:!0,forced:FORCED},{resolve:function(x){return promiseResolve(this,x)}}),_export({target:PROMISE,stat:!0,forced:INCORRECT_ITERATION},{all:function(iterable){var C=this,capability=newPromiseCapability(C),resolve=capability.resolve,reject=capability.reject,result=perform((function(){var $promiseResolve=aFunction(C.resolve),values=[],counter=0,remaining=1;iterate(iterable,(function(promise){var index=counter++,alreadyCalled=!1;values.push(void 0),remaining++,$promiseResolve.call(C,promise).then((function(value){alreadyCalled||(alreadyCalled=!0,values[index]=value,--remaining||resolve(values))}),reject)})),--remaining||resolve(values)}));return result.error&&reject(result.value),capability.promise},race:function(iterable){var C=this,capability=newPromiseCapability(C),reject=capability.reject,result=perform((function(){var $promiseResolve=aFunction(C.resolve);iterate(iterable,(function(promise){$promiseResolve.call(C,promise).then(capability.resolve,reject)}))}));return result.error&&reject(result.value),capability.promise}}),_export({target:"Promise",stat:!0},{allSettled:function(iterable){var C=this,capability=newPromiseCapability$1.f(C),resolve=capability.resolve,reject=capability.reject,result=perform((function(){var promiseResolve=aFunction(C.resolve),values=[],counter=0,remaining=1;iterate(iterable,(function(promise){var index=counter++,alreadyCalled=!1;values.push(void 0),remaining++,promiseResolve.call(C,promise).then((function(value){alreadyCalled||(alreadyCalled=!0,values[index]={status:"fulfilled",value:value},--remaining||resolve(values))}),(function(error){alreadyCalled||(alreadyCalled=!0,values[index]={status:"rejected",reason:error},--remaining||resolve(values))}))})),--remaining||resolve(values)}));return result.error&&reject(result.value),capability.promise}});var PROMISE_ANY_ERROR="No one promise resolved";_export({target:"Promise",stat:!0},{any:function(iterable){var C=this,capability=newPromiseCapability$1.f(C),resolve=capability.resolve,reject=capability.reject,result=perform((function(){var promiseResolve=aFunction(C.resolve),errors=[],counter=0,remaining=1,alreadyResolved=!1;iterate(iterable,(function(promise){var index=counter++,alreadyRejected=!1;errors.push(void 0),remaining++,promiseResolve.call(C,promise).then((function(value){alreadyRejected||alreadyResolved||(alreadyResolved=!0,resolve(value))}),(function(error){alreadyRejected||alreadyResolved||(alreadyRejected=!0,errors[index]=error,--remaining||reject(new(getBuiltIn("AggregateError"))(errors,PROMISE_ANY_ERROR)))}))})),--remaining||reject(new(getBuiltIn("AggregateError"))(errors,PROMISE_ANY_ERROR))}));return result.error&&reject(result.value),capability.promise}});var NON_GENERIC=!!nativePromiseConstructor&&fails((function(){nativePromiseConstructor.prototype.finally.call({then:function(){}},(function(){}))}));if(_export({target:"Promise",proto:!0,real:!0,forced:NON_GENERIC},{finally:function(onFinally){var C=speciesConstructor(this,getBuiltIn("Promise")),isFunction="function"==typeof onFinally;return this.then(isFunction?function(x){return promiseResolve(C,onFinally()).then((function(){return x}))}:onFinally,isFunction?function(e){return promiseResolve(C,onFinally()).then((function(){throw e}))}:onFinally)}}),"function"==typeof nativePromiseConstructor){var method=getBuiltIn("Promise").prototype.finally;nativePromiseConstructor.prototype.finally!==method&&redefine(nativePromiseConstructor.prototype,"finally",method,{unsafe:!0})}var domIterables={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0},ARRAY_ITERATOR="Array Iterator",setInternalState=internalState.set,getInternalState=internalState.getterFor(ARRAY_ITERATOR),es_array_iterator=defineIterator(Array,"Array",(function(iterated,kind){setInternalState(this,{type:ARRAY_ITERATOR,target:toIndexedObject(iterated),index:0,kind:kind})}),(function(){var state=getInternalState(this),target=state.target,kind=state.kind,index=state.index++;return!target||index>=target.length?(state.target=void 0,{value:void 0,done:!0}):"keys"==kind?{value:index,done:!1}:"values"==kind?{value:target[index],done:!1}:{value:[index,target[index]],done:!1}}),"values");iterators.Arguments=iterators.Array,addToUnscopables("keys"),addToUnscopables("values"),addToUnscopables("entries");var ITERATOR=wellKnownSymbol("iterator"),TO_STRING_TAG=wellKnownSymbol("toStringTag"),ArrayValues=es_array_iterator.values;for(var COLLECTION_NAME in domIterables){var Collection=global_1[COLLECTION_NAME],CollectionPrototype=Collection&&Collection.prototype;if(CollectionPrototype){if(CollectionPrototype[ITERATOR]!==ArrayValues)try{createNonEnumerableProperty(CollectionPrototype,ITERATOR,ArrayValues)}catch(error){CollectionPrototype[ITERATOR]=ArrayValues}if(CollectionPrototype[TO_STRING_TAG]||createNonEnumerableProperty(CollectionPrototype,TO_STRING_TAG,COLLECTION_NAME),domIterables[COLLECTION_NAME])for(var METHOD_NAME in es_array_iterator)if(CollectionPrototype[METHOD_NAME]!==es_array_iterator[METHOD_NAME])try{createNonEnumerableProperty(CollectionPrototype,METHOD_NAME,es_array_iterator[METHOD_NAME])}catch(error){CollectionPrototype[METHOD_NAME]=es_array_iterator[METHOD_NAME]}}}path.Promise,_export({target:"Promise",stat:!0},{try:function(callbackfn){var promiseCapability=newPromiseCapability$1.f(this),result=perform(callbackfn);return(result.error?promiseCapability.reject:promiseCapability.resolve)(result.value),promiseCapability.promise}});var MATCH$1=wellKnownSymbol("match"),isRegexp=function(it){var isRegExp;return isObject(it)&&(void 0!==(isRegExp=it[MATCH$1])?!!isRegExp:"RegExp"==classofRaw(it))},notARegexp=function(it){if(isRegexp(it))throw TypeError("The method doesn't accept regular expressions");return it},MATCH=wellKnownSymbol("match"),correctIsRegexpLogic=function(METHOD_NAME){var regexp=/./;try{"/./"[METHOD_NAME](regexp)}catch(error1){try{return regexp[MATCH]=!1,"/./"[METHOD_NAME](regexp)}catch(error2){}}return!1},getOwnPropertyDescriptor=objectGetOwnPropertyDescriptor.f,$startsWith="".startsWith,min=Math.min,CORRECT_IS_REGEXP_LOGIC=correctIsRegexpLogic("startsWith"),MDN_POLYFILL_BUG=!(CORRECT_IS_REGEXP_LOGIC||(descriptor=getOwnPropertyDescriptor(String.prototype,"startsWith"),!descriptor||descriptor.writable)),descriptor;_export({target:"String",proto:!0,forced:!MDN_POLYFILL_BUG&&!CORRECT_IS_REGEXP_LOGIC},{startsWith:function(searchString){var that=String(requireObjectCoercible(this));notARegexp(searchString);var index=toLength(min(arguments.length>1?arguments[1]:void 0,that.length)),search=String(searchString);return $startsWith?$startsWith.call(that,search,index):that.slice(index,index+search.length)===search}}),entryUnbind("String","startsWith");var global$1="undefined"!=typeof globalThis&&globalThis||"undefined"!=typeof self&&self||void 0!==global$1&&global$1,support={searchParams:"URLSearchParams"in global$1,iterable:"Symbol"in global$1&&"iterator"in Symbol,blob:"FileReader"in global$1&&"Blob"in global$1&&function(){try{return new Blob,!0}catch(e){return!1}}(),formData:"FormData"in global$1,arrayBuffer:"ArrayBuffer"in global$1};function isDataView(obj){return obj&&DataView.prototype.isPrototypeOf(obj)}if(support.arrayBuffer)var viewClasses=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]"],isArrayBufferView=ArrayBuffer.isView||function(obj){return obj&&viewClasses.indexOf(Object.prototype.toString.call(obj))>-1};function normalizeName(name){if("string"!=typeof name&&(name=String(name)),/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name)||""===name)throw new TypeError('Invalid character in header field name: "'+name+'"');return name.toLowerCase()}function normalizeValue(value){return"string"!=typeof value&&(value=String(value)),value}function iteratorFor(items){var iterator={next:function(){var value=items.shift();return{done:void 0===value,value:value}}};return support.iterable&&(iterator[Symbol.iterator]=function(){return iterator}),iterator}function Headers(headers){this.map={},headers instanceof Headers?headers.forEach((function(value,name){this.append(name,value)}),this):Array.isArray(headers)?headers.forEach((function(header){this.append(header[0],header[1])}),this):headers&&Object.getOwnPropertyNames(headers).forEach((function(name){this.append(name,headers[name])}),this)}function consumed(body){if(body.bodyUsed)return Promise.reject(new TypeError("Already read"));body.bodyUsed=!0}function fileReaderReady(reader){return new Promise((function(resolve,reject){reader.onload=function(){resolve(reader.result)},reader.onerror=function(){reject(reader.error)}}))}function readBlobAsArrayBuffer(blob){var reader=new FileReader,promise=fileReaderReady(reader);return reader.readAsArrayBuffer(blob),promise}function readBlobAsText(blob){var reader=new FileReader,promise=fileReaderReady(reader);return reader.readAsText(blob),promise}function readArrayBufferAsText(buf){for(var view=new Uint8Array(buf),chars=new Array(view.length),i=0;i-1?upcased:method}function Request(input,options){if(!(this instanceof Request))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');var body=(options=options||{}).body;if(input instanceof Request){if(input.bodyUsed)throw new TypeError("Already read");this.url=input.url,this.credentials=input.credentials,options.headers||(this.headers=new Headers(input.headers)),this.method=input.method,this.mode=input.mode,this.signal=input.signal,body||null==input._bodyInit||(body=input._bodyInit,input.bodyUsed=!0)}else this.url=String(input);if(this.credentials=options.credentials||this.credentials||"same-origin",!options.headers&&this.headers||(this.headers=new Headers(options.headers)),this.method=normalizeMethod(options.method||this.method||"GET"),this.mode=options.mode||this.mode||null,this.signal=options.signal||this.signal,this.referrer=null,("GET"===this.method||"HEAD"===this.method)&&body)throw new TypeError("Body not allowed for GET or HEAD requests");if(this._initBody(body),!("GET"!==this.method&&"HEAD"!==this.method||"no-store"!==options.cache&&"no-cache"!==options.cache)){var reParamSearch=/([?&])_=[^&]*/;if(reParamSearch.test(this.url))this.url=this.url.replace(reParamSearch,"$1_="+(new Date).getTime());else{this.url+=(/\?/.test(this.url)?"&":"?")+"_="+(new Date).getTime()}}}function decode(body){var form=new FormData;return body.trim().split("&").forEach((function(bytes){if(bytes){var split=bytes.split("="),name=split.shift().replace(/\+/g," "),value=split.join("=").replace(/\+/g," ");form.append(decodeURIComponent(name),decodeURIComponent(value))}})),form}function parseHeaders(rawHeaders){var headers=new Headers;return rawHeaders.replace(/\r?\n[\t ]+/g," ").split("\r").map((function(header){return 0===header.indexOf("\n")?header.substr(1,header.length):header})).forEach((function(line){var parts=line.split(":"),key=parts.shift().trim();if(key){var value=parts.join(":").trim();headers.append(key,value)}})),headers}function Response(bodyInit,options){if(!(this instanceof Response))throw new TypeError('Please use the "new" operator, this DOM object constructor cannot be called as a function.');options||(options={}),this.type="default",this.status=void 0===options.status?200:options.status,this.ok=this.status>=200&&this.status<300,this.statusText=void 0===options.statusText?"":""+options.statusText,this.headers=new Headers(options.headers),this.url=options.url||"",this._initBody(bodyInit)}Request.prototype.clone=function(){return new Request(this,{body:this._bodyInit})},Body.call(Request.prototype),Body.call(Response.prototype),Response.prototype.clone=function(){return new Response(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new Headers(this.headers),url:this.url})},Response.error=function(){var response=new Response(null,{status:0,statusText:""});return response.type="error",response};var redirectStatuses=[301,302,303,307,308];Response.redirect=function(url,status){if(-1===redirectStatuses.indexOf(status))throw new RangeError("Invalid status code");return new Response(null,{status:status,headers:{location:url}})};var DOMException=global$1.DOMException;try{new DOMException}catch(err){DOMException=function(message,name){this.message=message,this.name=name;var error=Error(message);this.stack=error.stack},DOMException.prototype=Object.create(Error.prototype),DOMException.prototype.constructor=DOMException}function fetch$1(input,init){return new Promise((function(resolve,reject){var request=new Request(input,init);if(request.signal&&request.signal.aborted)return reject(new DOMException("Aborted","AbortError"));var xhr=new XMLHttpRequest;function abortXhr(){xhr.abort()}xhr.onload=function(){var options={status:xhr.status,statusText:xhr.statusText,headers:parseHeaders(xhr.getAllResponseHeaders()||"")};options.url="responseURL"in xhr?xhr.responseURL:options.headers.get("X-Request-URL");var body="response"in xhr?xhr.response:xhr.responseText;setTimeout((function(){resolve(new Response(body,options))}),0)},xhr.onerror=function(){setTimeout((function(){reject(new TypeError("Network request failed"))}),0)},xhr.ontimeout=function(){setTimeout((function(){reject(new TypeError("Network request failed"))}),0)},xhr.onabort=function(){setTimeout((function(){reject(new DOMException("Aborted","AbortError"))}),0)},xhr.open(request.method,function(url){try{return""===url&&global$1.location.href?global$1.location.href:url}catch(e){return url}}(request.url),!0),"include"===request.credentials?xhr.withCredentials=!0:"omit"===request.credentials&&(xhr.withCredentials=!1),"responseType"in xhr&&(support.blob?xhr.responseType="blob":support.arrayBuffer&&request.headers.get("Content-Type")&&-1!==request.headers.get("Content-Type").indexOf("application/octet-stream")&&(xhr.responseType="arraybuffer")),!init||"object"!=typeof init.headers||init.headers instanceof Headers?request.headers.forEach((function(value,name){xhr.setRequestHeader(name,value)})):Object.getOwnPropertyNames(init.headers).forEach((function(name){xhr.setRequestHeader(name,normalizeValue(init.headers[name]))})),request.signal&&(request.signal.addEventListener("abort",abortXhr),xhr.onreadystatechange=function(){4===xhr.readyState&&request.signal.removeEventListener("abort",abortXhr)}),xhr.send(void 0===request._bodyInit?null:request._bodyInit)}))}fetch$1.polyfill=!0,global$1.fetch||(global$1.fetch=fetch$1,global$1.Headers=Headers,global$1.Request=Request,global$1.Response=Response),null==Element.prototype.getAttributeNames&&(Element.prototype.getAttributeNames=function(){for(var attributes=this.attributes,length=attributes.length,result=new Array(length),i=0;i=0&&matches.item(i)!==this;);return i>-1}),Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(s){var el=this;do{if(el.matches(s))return el;el=el.parentElement||el.parentNode}while(null!==el&&1===el.nodeType);return null});var Connection=function(){function Connection(){_classCallCheck(this,Connection),this.headers={}}return _createClass(Connection,[{key:"onMessage",value:function(message,payload){message.component.receiveMessage(message,payload)}},{key:"onError",value:function(message,status,response){return message.component.messageSendFailed(),store$2.onErrorCallback(status,response)}},{key:"showExpiredMessage",value:function(response,message){store$2.sessionHasExpiredCallback?store$2.sessionHasExpiredCallback(response,message):confirm("This page has expired.\nWould you like to refresh the page?")&&window.location.reload()}},{key:"sendMessage",value:function(message){var _this=this,payload=message.payload(),csrfToken=getCsrfToken(),socketId=this.getSocketId();if(window.__testing_request_interceptor)return window.__testing_request_interceptor(payload,this);fetch("".concat(window.livewire_app_url,"/livewire/message/").concat(payload.fingerprint.name),{method:"POST",body:JSON.stringify(payload),credentials:"same-origin",headers:_objectSpread2(_objectSpread2(_objectSpread2({"Content-Type":"application/json",Accept:"text/html, application/xhtml+xml","X-Livewire":!0},this.headers),{},{Referer:window.location.href},csrfToken&&{"X-CSRF-TOKEN":csrfToken}),socketId&&{"X-Socket-ID":socketId})}).then((function(response){if(response.ok)response.text().then((function(response){_this.isOutputFromDump(response)?(_this.onError(message),_this.showHtmlModal(response)):_this.onMessage(message,JSON.parse(response))}));else{if(!1===_this.onError(message,response.status,response))return;if(419===response.status){if(store$2.sessionHasExpired)return;store$2.sessionHasExpired=!0,_this.showExpiredMessage(response,message)}else response.text().then((function(response){_this.showHtmlModal(response)}))}})).catch((function(){_this.onError(message)}))}},{key:"isOutputFromDump",value:function(output){return!!output.match(/
diff --git a/resources/views/portal/ninja2020/gateways/stripe/acss/pay.blade.php b/resources/views/portal/ninja2020/gateways/stripe/acss/pay.blade.php
index 97b69f1bc763..dba21e08c822 100644
--- a/resources/views/portal/ninja2020/gateways/stripe/acss/pay.blade.php
+++ b/resources/views/portal/ninja2020/gateways/stripe/acss/pay.blade.php
@@ -1,8 +1,15 @@
@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'Pre-authorized debit payments', 'card_title' => 'Pre-authorized debit payments'])
@section('gateway_head')
-
-
+
+ @if($gateway->company_gateway->getConfigField('account_id'))
+
+
+ @else
+
+ @endif
+
+
@@ -21,6 +28,9 @@
@component('portal.ninja2020.components.general.card-element', ['title' => ctrans('texts.payment_type')])
{{ ctrans('texts.acss') }} ({{ ctrans('texts.bank_transfer') }})
@endcomponent
+
+ @include('portal.ninja2020.gateways.stripe.acss.acss')
+
@include('portal.ninja2020.gateways.includes.pay_now')
@endsection
diff --git a/resources/views/portal/ninja2020/gateways/stripe/bancontact/pay.blade.php b/resources/views/portal/ninja2020/gateways/stripe/bancontact/pay.blade.php
index e91d8bc3a36f..9fd167fd5f6d 100644
--- a/resources/views/portal/ninja2020/gateways/stripe/bancontact/pay.blade.php
+++ b/resources/views/portal/ninja2020/gateways/stripe/bancontact/pay.blade.php
@@ -1,8 +1,15 @@
@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'Bancontact', 'card_title' => 'Bancontact'])
@section('gateway_head')
-
+
+ @if($gateway->company_gateway->getConfigField('account_id'))
+
+ @else
+
+ @endif
+
+
diff --git a/resources/views/portal/ninja2020/gateways/stripe/becs/pay.blade.php b/resources/views/portal/ninja2020/gateways/stripe/becs/pay.blade.php
index 4221da33780b..82f23cea9d77 100644
--- a/resources/views/portal/ninja2020/gateways/stripe/becs/pay.blade.php
+++ b/resources/views/portal/ninja2020/gateways/stripe/becs/pay.blade.php
@@ -1,8 +1,14 @@
@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'BECS', 'card_title' => 'BECS'])
@section('gateway_head')
-
+
+ @if($gateway->company_gateway->getConfigField('account_id'))
+
+ @else
+
+ @endif
+
diff --git a/resources/views/portal/ninja2020/gateways/stripe/eps/pay.blade.php b/resources/views/portal/ninja2020/gateways/stripe/eps/pay.blade.php
index 17fd0cd2e0bd..3cc8002d9a4a 100644
--- a/resources/views/portal/ninja2020/gateways/stripe/eps/pay.blade.php
+++ b/resources/views/portal/ninja2020/gateways/stripe/eps/pay.blade.php
@@ -1,8 +1,14 @@
@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'EPS', 'card_title' => 'EPS'])
@section('gateway_head')
-
+
+ @if($gateway->company_gateway->getConfigField('account_id'))
+
+ @else
+
+ @endif
+
diff --git a/resources/views/portal/ninja2020/gateways/stripe/fpx/pay.blade.php b/resources/views/portal/ninja2020/gateways/stripe/fpx/pay.blade.php
index 0b30f1904454..6c5b60ae7db5 100644
--- a/resources/views/portal/ninja2020/gateways/stripe/fpx/pay.blade.php
+++ b/resources/views/portal/ninja2020/gateways/stripe/fpx/pay.blade.php
@@ -1,8 +1,14 @@
@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'FPX', 'card_title' => 'FPX'])
@section('gateway_head')
-
+
+ @if($gateway->company_gateway->getConfigField('account_id'))
+
+ @else
+
+ @endif
+
diff --git a/resources/views/portal/ninja2020/gateways/stripe/giropay/pay.blade.php b/resources/views/portal/ninja2020/gateways/stripe/giropay/pay.blade.php
index 974a534119e8..f050e0f566e5 100644
--- a/resources/views/portal/ninja2020/gateways/stripe/giropay/pay.blade.php
+++ b/resources/views/portal/ninja2020/gateways/stripe/giropay/pay.blade.php
@@ -1,8 +1,12 @@
@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'GiroPay', 'card_title' => 'GiroPay'])
@section('gateway_head')
-
+ @if($gateway->company_gateway->getConfigField('account_id'))
+
+ @else
+
+ @endif
diff --git a/resources/views/portal/ninja2020/gateways/stripe/ideal/pay.blade.php b/resources/views/portal/ninja2020/gateways/stripe/ideal/pay.blade.php
index 5de1b9d2bb65..0e688a3778e4 100644
--- a/resources/views/portal/ninja2020/gateways/stripe/ideal/pay.blade.php
+++ b/resources/views/portal/ninja2020/gateways/stripe/ideal/pay.blade.php
@@ -1,8 +1,12 @@
@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'iDeal', 'card_title' => 'iDeal'])
@section('gateway_head')
-
+ @if($gateway->company_gateway->getConfigField('account_id'))
+
+ @else
+
+ @endif
diff --git a/resources/views/portal/ninja2020/gateways/stripe/przelewy24/pay.blade.php b/resources/views/portal/ninja2020/gateways/stripe/przelewy24/pay.blade.php
index 7c4b72228614..f9e54999738d 100644
--- a/resources/views/portal/ninja2020/gateways/stripe/przelewy24/pay.blade.php
+++ b/resources/views/portal/ninja2020/gateways/stripe/przelewy24/pay.blade.php
@@ -1,8 +1,12 @@
@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'Przelewy24', 'card_title' => 'Przelewy24'])
@section('gateway_head')
-
+ @if($gateway->company_gateway->getConfigField('account_id'))
+
+ @else
+
+ @endif
diff --git a/resources/views/portal/ninja2020/gateways/stripe/sepa/pay.blade.php b/resources/views/portal/ninja2020/gateways/stripe/sepa/pay.blade.php
index 2fb9c49c94a7..8fb3a7e1b8bd 100644
--- a/resources/views/portal/ninja2020/gateways/stripe/sepa/pay.blade.php
+++ b/resources/views/portal/ninja2020/gateways/stripe/sepa/pay.blade.php
@@ -1,8 +1,12 @@
@extends('portal.ninja2020.layout.payments', ['gateway_title' => 'SEPA', 'card_title' => 'SEPA'])
@section('gateway_head')
-
+ @if($gateway->company_gateway->getConfigField('account_id'))
+
+ @else
+
+ @endif
diff --git a/resources/views/portal/ninja2020/payment_methods/includes/modals/removal.blade.php b/resources/views/portal/ninja2020/payment_methods/includes/modals/removal.blade.php
index c50b4eade584..47d4d1cb222b 100644
--- a/resources/views/portal/ninja2020/payment_methods/includes/modals/removal.blade.php
+++ b/resources/views/portal/ninja2020/payment_methods/includes/modals/removal.blade.php
@@ -33,7 +33,7 @@