diff --git a/VERSION.txt b/VERSION.txt index c850dd977c..598bbaa3a0 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1 +1 @@ -5.5.19 \ No newline at end of file +5.5.20 \ No newline at end of file diff --git a/app/Console/Commands/CheckData.php b/app/Console/Commands/CheckData.php index f7af109059..6349202a7d 100644 --- a/app/Console/Commands/CheckData.php +++ b/app/Console/Commands/CheckData.php @@ -76,7 +76,7 @@ class CheckData extends Command /** * @var string */ - protected $signature = 'ninja:check-data {--database=} {--fix=} {--client_id=} {--vendor_id=} {--paid_to_date=} {--client_balance=} {--ledger_balance=} {--balance_status=}'; + protected $signature = 'ninja:check-data {--database=} {--fix=} {--portal_url=} {--client_id=} {--vendor_id=} {--paid_to_date=} {--client_balance=} {--ledger_balance=} {--balance_status=}'; /** * @var string @@ -118,8 +118,10 @@ class CheckData extends Command $this->checkDuplicateRecurringInvoices(); $this->checkOauthSanity(); - if(Ninja::isHosted()) + if(Ninja::isHosted()){ $this->checkAccountStatuses(); + $this->checkNinjaPortalUrls(); + } if (! $this->option('client_id')) { $this->checkOAuth(); @@ -505,12 +507,12 @@ class CheckData extends Command $this->wrong_paid_to_dates++; - $this->logMessage($client->present()->name.' id = # '.$client->id." - Client Paid To Date = {$client->paid_to_date} != Invoice Payments = {$total_paid_to_date} - {$_client->payments_applied} + {$credits_used_for_payments[0]->credit_payment}"); + $this->logMessage($client->present()->name().' id = # '.$client->id." - Client Paid To Date = {$client->paid_to_date} != Invoice Payments = {$total_paid_to_date} - {$_client->payments_applied} + {$credits_used_for_payments[0]->credit_payment}"); $this->isValid = false; if($this->option('paid_to_date')){ - $this->logMessage("# {$client->id} " . $client->present()->name.' - '.$client->number." Fixing {$client->paid_to_date} to {$total_paid_to_date}"); + $this->logMessage("# {$client->id} " . $client->present()->name().' - '.$client->number." Fixing {$client->paid_to_date} to {$total_paid_to_date}"); $client->paid_to_date = $total_paid_to_date; $client->save(); } @@ -582,12 +584,12 @@ class CheckData extends Command if (round($total_invoice_payments, 2) != round($client->paid_to_date, 2)) { $this->wrong_paid_to_dates++; - $this->logMessage($client->present()->name.' id = # '.$client->id." - Paid to date does not match Client Paid To Date = {$client->paid_to_date} - Invoice Payments = {$total_invoice_payments}"); + $this->logMessage($client->present()->name().' id = # '.$client->id." - Paid to date does not match Client Paid To Date = {$client->paid_to_date} - Invoice Payments = {$total_invoice_payments}"); $this->isValid = false; if($this->option('paid_to_date')){ - $this->logMessage("# {$client->id} " . $client->present()->name.' - '.$client->number." Fixing {$client->paid_to_date} to {$total_invoice_payments}"); + $this->logMessage("# {$client->id} " . $client->present()->name().' - '.$client->number." Fixing {$client->paid_to_date} to {$total_invoice_payments}"); $client->paid_to_date = $total_invoice_payments; $client->save(); } @@ -618,7 +620,7 @@ class CheckData extends Command if ((string)$total_paid != (string)($invoice->amount - $invoice->balance - $total_credit)) { $this->wrong_balances++; - $this->logMessage($client->present()->name.' - '.$client->id." - Total Paid = {$total_paid} != Calculated Total = {$calculated_paid_amount}"); + $this->logMessage($client->present()->name().' - '.$client->id." - Total Paid = {$total_paid} != Calculated Total = {$calculated_paid_amount}"); $this->isValid = false; } @@ -666,11 +668,11 @@ class CheckData extends Command $client_object = Client::withTrashed()->find($client['client_id']); - $this->logMessage($client_object->present()->name.' - '.$client_object->id." - calculated client balances do not match Invoice Balances = ". $client['invoice_balance'] ." - Client Balance = ".rtrim($client['client_balance'], '0')); + $this->logMessage($client_object->present()->name().' - '.$client_object->id." - calculated client balances do not match Invoice Balances = ". $client['invoice_balance'] ." - Client Balance = ".rtrim($client['client_balance'], '0')); if($this->option('client_balance')){ - $this->logMessage("# {$client_object->id} " . $client_object->present()->name.' - '.$client_object->number." Fixing {$client_object->balance} to " . $client['invoice_balance']); + $this->logMessage("# {$client_object->id} " . $client_object->present()->name().' - '.$client_object->number." Fixing {$client_object->balance} to " . $client['invoice_balance']); $client_object->balance = $client['invoice_balance']; $client_object->save(); @@ -704,7 +706,7 @@ class CheckData extends Command if($this->option('client_balance')){ - $this->logMessage("# {$client->id} " . $client->present()->name.' - '.$client->number." Fixing {$client->balance} to 0"); + $this->logMessage("# {$client->id} " . $client->present()->name().' - '.$client->number." Fixing {$client->balance} to 0"); $client->balance = 0; $client->save(); @@ -758,13 +760,13 @@ class CheckData extends Command $this->wrong_balances++; $ledger_balance = $ledger ? $ledger->balance : 0; - $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 - Invoice Balances = {$invoice_balance} Client Balance = {$client->balance} Ledger Balance = {$ledger_balance}"); $this->isValid = false; if($this->option('client_balance')){ - $this->logMessage("# {$client->id} " . $client->present()->name.' - '.$client->number." Fixing {$client->balance} to {$invoice_balance}"); + $this->logMessage("# {$client->id} " . $client->present()->name().' - '.$client->number." Fixing {$client->balance} to {$invoice_balance}"); $client->balance = $invoice_balance; $client->save(); @@ -796,14 +798,14 @@ class CheckData extends Command 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 - 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('ledger_balance')){ - $this->logMessage("# {$client->id} " . $client->present()->name.' - '.$client->number." Fixing {$client->balance} to {$invoice_balance}"); + $this->logMessage("# {$client->id} " . $client->present()->name().' - '.$client->number." Fixing {$client->balance} to {$invoice_balance}"); $client->balance = $invoice_balance; $client->save(); @@ -1003,4 +1005,31 @@ class CheckData extends Command $this->logMessage($this->wrong_paid_status." wrong invoices with bad balance state"); } + + public function checkNinjaPortalUrls() + { + + $wrong_count = CompanyUser::where('is_owner',1)->where('ninja_portal_url', '')->count(); + + $this->logMessage("Missing ninja portal Urls = {$wrong_count}"); + + if(!$this->option('portal_url')) + return; + + CompanyUser::where('is_owner',1)->where('ninja_portal_url', '')->cursor()->each(function ($cu){ + + $cc = ClientContact::on('db-ninja-01')->where('company_id', config('ninja.ninja_default_company_id'))->where('email', $cu->user->email)->first(); + + if($cc){ + $ninja_portal_url = "https://invoiceninja.invoicing.co/client/ninja/{$cc->contact_key}/{$cu->company->company_key}"; + + $cu->ninja_portal_url = $ninja_portal_url; + $cu->save(); + + $this->logMessage("Fixing - {$ninja_portal_url}"); + } + + }); + + } } \ No newline at end of file diff --git a/app/Console/Commands/CreateSingleAccount.php b/app/Console/Commands/CreateSingleAccount.php index 0c1d8fa447..0a106b63ce 100644 --- a/app/Console/Commands/CreateSingleAccount.php +++ b/app/Console/Commands/CreateSingleAccount.php @@ -189,7 +189,7 @@ class CreateSingleAccount extends Command $this->createClient($company, $user); } - CreateCompanyTaskStatuses::dispatchNow($company, $user); + (new CreateCompanyTaskStatuses($company, $user))->handle(); for ($x = 0; $x < $this->count; $x++) { $client = $company->clients->random(); diff --git a/app/Console/Commands/DemoMode.php b/app/Console/Commands/DemoMode.php index 8a5864a644..936734e8ef 100644 --- a/app/Console/Commands/DemoMode.php +++ b/app/Console/Commands/DemoMode.php @@ -132,7 +132,8 @@ class DemoMode extends Command 'enabled_modules' => 32767, 'company_key' => 'KEY', 'enable_shop_api' => true, - 'markdown_email_enabled' => false, + 'markdown_email_enabled' => true, + 'markdown_enabled' => false, ]); $settings = $company->settings; diff --git a/app/Console/Commands/SendRemindersCron.php b/app/Console/Commands/SendRemindersCron.php index 81e20ec819..f8f69a30dd 100644 --- a/app/Console/Commands/SendRemindersCron.php +++ b/app/Console/Commands/SendRemindersCron.php @@ -97,10 +97,6 @@ class SendRemindersCron extends Command } }); - // SendReminders::dispatchNow(); - - // $this->webHookOverdueInvoices(); - // $this->webHookExpiredQuotes(); } private function calcLateFee($invoice, $template) :Invoice diff --git a/app/DataMapper/CompanySettings.php b/app/DataMapper/CompanySettings.php index 31c90f38e3..ecc93b0d42 100644 --- a/app/DataMapper/CompanySettings.php +++ b/app/DataMapper/CompanySettings.php @@ -727,7 +727,6 @@ class CompanySettings extends BaseSettings */ public static function defaults(): stdClass { - $config = json_decode(config('ninja.settings')); $data = (object) get_class_vars(self::class); diff --git a/app/Factory/CompanyFactory.php b/app/Factory/CompanyFactory.php index bfb04daf1b..c4a4a34666 100644 --- a/app/Factory/CompanyFactory.php +++ b/app/Factory/CompanyFactory.php @@ -46,7 +46,7 @@ class CompanyFactory $company->enabled_modules = config('ninja.enabled_modules'); //32767;//8191; //4095 $company->default_password_timeout = 1800000; - $company->markdown_email_enabled = false; + $company->markdown_email_enabled = true; $company->markdown_enabled = false; return $company; diff --git a/app/Http/Controllers/Auth/ContactRegisterController.php b/app/Http/Controllers/Auth/ContactRegisterController.php index 4bb551017a..db7fc1e0c7 100644 --- a/app/Http/Controllers/Auth/ContactRegisterController.php +++ b/app/Http/Controllers/Auth/ContactRegisterController.php @@ -46,7 +46,7 @@ class ContactRegisterController extends Controller $t = app('translator'); $t->replace(Ninja::transformTranslations($company->settings)); - return render('auth.register', ['register_company' => $company, 'account' => $company->account]); + return render('auth.register', ['register_company' => $company, 'account' => $company->account, 'submitsForm' => false]); } public function register(RegisterRequest $request) diff --git a/app/Http/Controllers/BaseController.php b/app/Http/Controllers/BaseController.php index ea6b7d56f0..4728fdd5a3 100644 --- a/app/Http/Controllers/BaseController.php +++ b/app/Http/Controllers/BaseController.php @@ -773,7 +773,8 @@ class BaseController extends Controller // 10-01-2022 need to ensure we snake case properly here to ensure permissions work as expected // 28-03-2022 this is definitely correct here, do not append _ to the view, it resolved correctly when snake cased if (auth()->user() && ! auth()->user()->hasPermission('view'.lcfirst(class_basename(Str::snake($this->entity_type))))) { - $query->where('user_id', '=', auth()->user()->id); + //03-09-2022 + $query->where('user_id', '=', auth()->user()->id)->orWhere('assigned_user_id', auth()->user()->id); } if (request()->has('updated_at') && request()->input('updated_at') > 0) { @@ -900,9 +901,10 @@ class BaseController extends Controller return redirect('/')->with(['signup' => 'true']); } + // 06-09-2022 - parse the path if loaded in a subdirectory for canvaskit resolution $canvas_path_array = parse_url(config('ninja.app_url')); - $canvas_path = (array_key_exists('path', $canvas_path_array)) ? $canvas_path_array['path'] : ''; + $canvas_path = rtrim(str_replace("index.php", "", $canvas_path),'/'); $data = []; diff --git a/app/Http/Controllers/EmailController.php b/app/Http/Controllers/EmailController.php index 73b25465ce..f752c6174e 100644 --- a/app/Http/Controllers/EmailController.php +++ b/app/Http/Controllers/EmailController.php @@ -131,7 +131,7 @@ class EmailController extends BaseController if(Ninja::isHosted() && !$entity_obj->company->account->account_sms_verified) return response(['message' => 'Please verify your account to send emails.'], 400); - if($entity == 'purchaseOrder' || $template == 'purchase_order'){ + if($entity == 'purchaseOrder' || $entity == 'purchase_order' || $template == 'purchase_order'){ return $this->sendPurchaseOrder($entity_obj, $data); } diff --git a/app/Http/Controllers/PreviewPurchaseOrderController.php b/app/Http/Controllers/PreviewPurchaseOrderController.php index f8b2875707..e159e02101 100644 --- a/app/Http/Controllers/PreviewPurchaseOrderController.php +++ b/app/Http/Controllers/PreviewPurchaseOrderController.php @@ -173,7 +173,7 @@ class PreviewPurchaseOrderController extends BaseController } //else - $file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company()); + $file_path = (new PreviewPdf($maker->getCompiledHTML(true), auth()->user()->company()))->handle(); return response()->download($file_path, basename($file_path), ['Cache-Control:' => 'no-cache'])->deleteFileAfterSend(true); } @@ -285,7 +285,7 @@ class PreviewPurchaseOrderController extends BaseController return $pdf; } - $file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), $company); + $file_path = (new PreviewPdf($maker->getCompiledHTML(true), $company))->handle(); if(Ninja::isHosted()) @@ -363,7 +363,7 @@ class PreviewPurchaseOrderController extends BaseController return $pdf; } - $file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company()); + $file_path = (new PreviewPdf($maker->getCompiledHTML(true), auth()->user()->company()))->handle(); $response = Response::make($file_path, 200); $response->header('Content-Type', 'application/pdf'); @@ -460,7 +460,7 @@ class PreviewPurchaseOrderController extends BaseController return $pdf; } - $file_path = PreviewPdf::dispatchNow($maker->getCompiledHTML(true), auth()->user()->company()); + $file_path = (new PreviewPdf($maker->getCompiledHTML(true), auth()->user()->company()))->handle(); $response = Response::make($file_path, 200); $response->header('Content-Type', 'application/pdf'); diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index e2c4008b3a..e34151fb48 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -210,7 +210,7 @@ class UserController extends BaseController $user_agent = request()->input('token_name') ?: request()->server('HTTP_USER_AGENT'); - $ct = CreateCompanyToken::dispatchNow($company, $user, $user_agent); + $ct = (new CreateCompanyToken($company, $user, $user_agent))->handle(); event(new UserWasCreated($user, auth()->user(), $company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null))); diff --git a/app/Http/Controllers/VendorPortal/InvitationController.php b/app/Http/Controllers/VendorPortal/InvitationController.php index 4a295a6e64..8c016a666e 100644 --- a/app/Http/Controllers/VendorPortal/InvitationController.php +++ b/app/Http/Controllers/VendorPortal/InvitationController.php @@ -108,8 +108,6 @@ class InvitationController extends Controller $file_name = $invitation->purchase_order->numberFormatter().'.pdf'; - // $file = CreateRawPdf::dispatchNow($invitation, $invitation->company->db); - $file = (new CreatePurchaseOrderPdf($invitation))->rawPdf(); $headers = ['Content-Type' => 'application/pdf']; diff --git a/app/Http/Livewire/BillingPortalPurchase.php b/app/Http/Livewire/BillingPortalPurchase.php index c24f013941..3433f07a58 100644 --- a/app/Http/Livewire/BillingPortalPurchase.php +++ b/app/Http/Livewire/BillingPortalPurchase.php @@ -507,7 +507,7 @@ class BillingPortalPurchase extends Component $mailer->settings = $this->subscription->company->settings; $mailer->to_user = $contact; - NinjaMailerJob::dispatchNow($mailer); + NinjaMailerJob::dispatch($mailer); $this->steps['passwordless_login_sent'] = true; $this->passwordless_login_btn = false; diff --git a/app/Http/Livewire/Profile/Settings/NameWebsiteLogo.php b/app/Http/Livewire/Profile/Settings/NameWebsiteLogo.php index dbc7d8771c..598742f59a 100644 --- a/app/Http/Livewire/Profile/Settings/NameWebsiteLogo.php +++ b/app/Http/Livewire/Profile/Settings/NameWebsiteLogo.php @@ -29,10 +29,10 @@ class NameWebsiteLogo extends Component { $this->fill([ 'profile' => auth()->guard('contact')->user()->client, - 'name' => auth()->guard('contact')->user()->client->present()->name, - 'vat_number' => auth()->guard('contact')->user()->client->present()->vat_number, - 'website' => auth()->guard('contact')->user()->client->present()->website, - 'phone' => auth()->guard('contact')->user()->client->present()->phone, + 'name' => auth()->guard('contact')->user()->client->present()->name(), + 'vat_number' => auth()->guard('contact')->user()->client->vat_number ?: '', + 'website' => auth()->guard('contact')->user()->client->website, + 'phone' => auth()->guard('contact')->user()->client->present()->phone(), 'saved' => ctrans('texts.save'), ]); } diff --git a/app/Http/Middleware/ContactRegister.php b/app/Http/Middleware/ContactRegister.php index b2cf964b87..60e48d8771 100644 --- a/app/Http/Middleware/ContactRegister.php +++ b/app/Http/Middleware/ContactRegister.php @@ -21,6 +21,7 @@ class ContactRegister { $domain_name = $request->getHost(); + /* Hosted */ if (strpos($domain_name, 'invoicing.co') !== false) { $subdomain = explode('.', $domain_name)[0]; @@ -42,6 +43,7 @@ class ContactRegister } } + /* Hosted */ if (Ninja::isHosted()) { $query = [ 'portal_domain' => $request->getSchemeAndHttpHost(), diff --git a/app/Http/Requests/Client/StoreClientRequest.php b/app/Http/Requests/Client/StoreClientRequest.php index 463cc7b4a3..48e4d095c3 100644 --- a/app/Http/Requests/Client/StoreClientRequest.php +++ b/app/Http/Requests/Client/StoreClientRequest.php @@ -65,7 +65,7 @@ class StoreClientRequest extends Request /* Ensure we have a client name, and that all emails are unique*/ //$rules['name'] = 'required|min:1'; $rules['settings'] = new ValidClientGroupSettingsRule(); - $rules['contacts'] = 'array'; + $rules['contacts'] = 'bail|array'; $rules['contacts.*.email'] = 'bail|nullable|distinct|sometimes|email'; $rules['contacts.*.password'] = [ 'bail', diff --git a/app/Http/Requests/ClientPortal/RegisterRequest.php b/app/Http/Requests/ClientPortal/RegisterRequest.php index 6bd835c744..26a0aa8253 100644 --- a/app/Http/Requests/ClientPortal/RegisterRequest.php +++ b/app/Http/Requests/ClientPortal/RegisterRequest.php @@ -1,4 +1,13 @@ company()->client_registration_fields as $field) { if ($field['required']) { - $rules[$field['key']] = ['required']; + $rules[$field['key']] = ['bail','required']; } } foreach ($rules as $field => $properties) { if ($field === 'email') { - $rules[$field] = array_merge($rules[$field], ['email:rfc,dns', 'max:255']); + $rules[$field] = array_merge($rules[$field], ['email:rfc,dns', 'max:255', Rule::unique('client_contacts')->where('company_id', $this->company()->id)]); } if ($field === 'current_password') { diff --git a/app/Http/Requests/Payment/StorePaymentRequest.php b/app/Http/Requests/Payment/StorePaymentRequest.php index 056e92515c..9a29fd955b 100644 --- a/app/Http/Requests/Payment/StorePaymentRequest.php +++ b/app/Http/Requests/Payment/StorePaymentRequest.php @@ -43,7 +43,7 @@ class StorePaymentRequest extends Request $invoices_total = 0; $credits_total = 0; - if (isset($input['client_id'])) { + if (isset($input['client_id']) && is_string($input['client_id']) ) { $input['client_id'] = $this->decodePrimaryKey($input['client_id']); } @@ -53,7 +53,9 @@ class StorePaymentRequest extends Request if (isset($input['invoices']) && is_array($input['invoices']) !== false) { foreach ($input['invoices'] as $key => $value) { - $input['invoices'][$key]['invoice_id'] = $this->decodePrimaryKey($value['invoice_id']); + + if(is_string($value['invoice_id'])) + $input['invoices'][$key]['invoice_id'] = $this->decodePrimaryKey($value['invoice_id']); if (array_key_exists('amount', $value)) { $invoices_total += $value['amount']; @@ -97,7 +99,8 @@ class StorePaymentRequest extends Request { $rules = [ 'amount' => ['numeric', 'bail', new PaymentAmountsBalanceRule(), new ValidCreditsPresentRule($this->all())], - 'client_id' => 'bail|required|exists:clients,id', + // 'client_id' => 'bail|required|exists:clients,id', + 'client_id' => 'bail|required|exists:clients,id,company_id,'.auth()->user()->company()->id.',is_deleted,0', 'invoices.*.invoice_id' => 'bail|required|distinct|exists:invoices,id', 'invoices.*.amount' => 'bail|required', 'invoices.*.invoice_id' => new ValidInvoicesRules($this->all()), diff --git a/app/Import/Transformer/BaseTransformer.php b/app/Import/Transformer/BaseTransformer.php index 211a6b52e6..4e755a1408 100644 --- a/app/Import/Transformer/BaseTransformer.php +++ b/app/Import/Transformer/BaseTransformer.php @@ -85,7 +85,9 @@ class BaseTransformer $client_name_search = Client::where('company_id', $this->company->id) ->where('is_deleted', false) - ->where('name', $client_name); + ->whereRaw("LOWER(REPLACE(`name`, ' ' ,'')) = ?", [ + strtolower(str_replace(' ', '', $client_name)), + ]); if ($client_name_search->count() >= 1) { return $client_name_search->first()->id; diff --git a/app/Jobs/Company/CompanyImport.php b/app/Jobs/Company/CompanyImport.php index 2207fbbd64..f62aa6b726 100644 --- a/app/Jobs/Company/CompanyImport.php +++ b/app/Jobs/Company/CompanyImport.php @@ -288,7 +288,7 @@ class CompanyImport implements ShouldQueue $nmo->company = $_company; $nmo->settings = $_company->settings; $nmo->to_user = $_company->owner(); - NinjaMailerJob::dispatchNow($nmo); + NinjaMailerJob::dispatch($nmo); } catch(\Exception $e){ @@ -1644,7 +1644,7 @@ class CompanyImport implements ShouldQueue $nmo->company = $this->company; $nmo->settings = $this->company->settings; $nmo->to_user = $this->company->owner(); - NinjaMailerJob::dispatchNow($nmo); + NinjaMailerJob::dispatch($nmo); } } \ No newline at end of file diff --git a/app/Jobs/Company/CreateCompany.php b/app/Jobs/Company/CreateCompany.php index 6c5c1db6f6..bf176abd16 100644 --- a/app/Jobs/Company/CreateCompany.php +++ b/app/Jobs/Company/CreateCompany.php @@ -64,7 +64,8 @@ class CreateCompany $company->custom_fields = new \stdClass; $company->default_password_timeout = 1800000; $company->client_registration_fields = ClientRegistrationFields::generate(); - $company->markdown_email_enabled = false; + $company->markdown_email_enabled = true; + $company->markdown_enabled = false; if (Ninja::isHosted()) { $company->subdomain = MultiDB::randomSubdomainGenerator(); diff --git a/app/Jobs/Ninja/CheckCompanyData.php b/app/Jobs/Ninja/CheckCompanyData.php index 1fd8509805..1751f5f7cf 100644 --- a/app/Jobs/Ninja/CheckCompanyData.php +++ b/app/Jobs/Ninja/CheckCompanyData.php @@ -52,8 +52,6 @@ class CheckCompanyData implements ShouldQueue /** * Execute the job. - * - * @return void */ public function handle() { @@ -110,7 +108,7 @@ class CheckCompanyData implements ShouldQueue if ($ledger && number_format($invoice_balance, 4) != number_format($client->balance, 4)) { $wrong_balances++; - $this->company_data[] = "# {$client->id} ".$client->present()->name.' - '.$client->number." - Balance Failure - Invoice Balances = {$invoice_balance} Client Balance = {$client->balance} Ledger Balance = {$ledger->balance} "; + $this->company_data[] = "# {$client->id} ".$client->present()->name().' - '.$client->number." - Balance Failure - Invoice Balances = {$invoice_balance} Client Balance = {$client->balance} Ledger Balance = {$ledger->balance} "; $this->is_valid = false; } @@ -136,7 +134,7 @@ class CheckCompanyData implements ShouldQueue if ((string) $total_paid != (string) ($invoice->amount - $invoice->balance - $total_credit)) { $wrong_balances++; - $this->company_data[] = $client->present()->name.' - '.$client->id." - Total Amount = {$total_amount} != Calculated Total = {$calculated_paid_amount} - Total Refund = {$total_refund} Total credit = {$total_credit}"; + $this->company_data[] = $client->present()->name().' - '.$client->id." - Total Amount = {$total_amount} != Calculated Total = {$calculated_paid_amount} - Total Refund = {$total_refund} Total credit = {$total_credit}"; $this->is_valid = false; } @@ -175,7 +173,7 @@ class CheckCompanyData implements ShouldQueue if (round($total_invoice_payments, 2) != round($client->paid_to_date, 2)) { $wrong_paid_to_dates++; - $this->company_data[] = $client->present()->name.'id = # '.$client->id." - Paid to date does not match Client Paid To Date = {$client->paid_to_date} - Invoice Payments = {$total_invoice_payments}"; + $this->company_data[] = $client->present()->name().'id = # '.$client->id." - Paid to date does not match Client Paid To Date = {$client->paid_to_date} - Invoice Payments = {$total_invoice_payments}"; $this->is_valid = false; } @@ -204,7 +202,7 @@ class CheckCompanyData implements ShouldQueue if ($ledger && (string) $invoice_balance != (string) $client->balance) { $wrong_paid_to_dates++; - $this->company_data[] = $client->present()->name.' - '.$client->id." - calculated client balances do not match {$invoice_balance} - ".rtrim($client->balance, '0').''; + $this->company_data[] = $client->present()->name().' - '.$client->id." - calculated client balances do not match {$invoice_balance} - ".rtrim($client->balance, '0').''; $this->is_valid = false; } diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php index 1210d4d7b0..7a987808d1 100644 --- a/app/Jobs/Util/Import.php +++ b/app/Jobs/Util/Import.php @@ -252,7 +252,7 @@ class Import implements ShouldQueue $this->setInitialCompanyLedgerBalances(); // $this->fixClientBalances(); - $check_data = CheckCompanyData::dispatchNow($this->company, md5(time())); + $check_data = (new CheckCompanyData($this->company, md5(time())))->handle(); // if(Ninja::isHosted() && array_key_exists('ninja_tokens', $data)) $this->processNinjaTokens($data['ninja_tokens']); @@ -591,7 +591,7 @@ class Import implements ShouldQueue $user_agent = array_key_exists('token_name', $resource) ?: request()->server('HTTP_USER_AGENT'); - CreateCompanyToken::dispatchNow($this->company, $user, $user_agent); + (new CreateCompanyToken($this->company, $user, $user_agent))->handle(); $key = "users_{$resource['id']}"; @@ -1899,7 +1899,7 @@ class Import implements ShouldQueue if(Ninja::isHosted()){ try{ - \Modules\Admin\Jobs\Account\NinjaUser::dispatchNow($data, $this->company); + \Modules\Admin\Jobs\Account\NinjaUser::dispatch($data, $this->company); } catch(\Exception $e){ nlog($e->getMessage()); diff --git a/app/Mail/Admin/ClientPaymentFailureObject.php b/app/Mail/Admin/ClientPaymentFailureObject.php index 176ee13db2..c422870c79 100644 --- a/app/Mail/Admin/ClientPaymentFailureObject.php +++ b/app/Mail/Admin/ClientPaymentFailureObject.php @@ -112,7 +112,7 @@ class ClientPaymentFailureObject 'invoice' => $this->invoices->first()->number, ] ), - 'greeting' => ctrans('texts.email_salutation', ['name' => $this->client->present()->name]), + 'greeting' => ctrans('texts.email_salutation', ['name' => $this->client->present()->name()]), 'content' => ctrans('texts.client_payment_failure_body', ['invoice' => implode(',', $this->invoices->pluck('number')->toArray()), 'amount' => $this->getAmount()]), 'signature' => $signature, 'logo' => $this->company->present()->logo(), diff --git a/app/Mail/SupportMessageSent.php b/app/Mail/SupportMessageSent.php index 9d91ba9fd0..5278d495cf 100644 --- a/app/Mail/SupportMessageSent.php +++ b/app/Mail/SupportMessageSent.php @@ -70,8 +70,13 @@ class SupportMessageSent extends Mailable $trial = $account->isTrial() ? 'T' : ''; $plan = str_replace('_', ' ', $plan); + $plan_status = ''; + + if(Carbon::parse($account->plan_expires)->lt(now())) + $plan_status = 'Plan Expired'; + if (Ninja::isHosted()) { - $subject = "{$priority}Hosted-{$db}-{$is_large}{$platform}{$migrated}{$trial} :: {$plan} :: ".date('M jS, g:ia'); + $subject = "{$priority}Hosted-{$db}-{$is_large}{$platform}{$migrated}{$trial} :: {$plan} :: {$plan_status} ".date('M jS, g:ia'); } else { $subject = "{$priority}Self Hosted :: {$plan} :: {$is_large}{$platform}{$migrated} :: ".date('M jS, g:ia'); } diff --git a/app/Models/PurchaseOrder.php b/app/Models/PurchaseOrder.php index f8195fe6f2..851822e098 100644 --- a/app/Models/PurchaseOrder.php +++ b/app/Models/PurchaseOrder.php @@ -212,14 +212,14 @@ class PurchaseOrder extends BaseModel return Storage::disk(config('filesystems.default'))->{$type}($file_path); } elseif(Ninja::isHosted() && $portal){ - $file_path = CreatePurchaseOrderPdf::dispatchNow($invitation,config('filesystems.default')); + $file_path = (new CreatePurchaseOrderPdf($invitation,config('filesystems.default')))->handle(); return Storage::disk(config('filesystems.default'))->{$type}($file_path); } if(Storage::disk('public')->exists($file_path)) return Storage::disk('public')->{$type}($file_path); - $file_path = CreatePurchaseOrderPdf::dispatchNow($invitation); + $file_path = (new CreatePurchaseOrderPdf($invitation))->handle(); return Storage::disk('public')->{$type}($file_path); } diff --git a/app/PaymentDrivers/BraintreePaymentDriver.php b/app/PaymentDrivers/BraintreePaymentDriver.php index d39c1cd740..412c56dd42 100644 --- a/app/PaymentDrivers/BraintreePaymentDriver.php +++ b/app/PaymentDrivers/BraintreePaymentDriver.php @@ -110,17 +110,17 @@ class BraintreePaymentDriver extends BaseDriver } $result = $this->gateway->customer()->create([ - 'firstName' => $this->client->present()->name, - 'email' => $this->client->present()->email, - 'phone' => $this->client->present()->phone, + 'firstName' => $this->client->present()->name(), + 'email' => $this->client->present()->email(), + 'phone' => $this->client->present()->phone(), ]); if ($result->success) { $address = $this->gateway->address()->create([ 'customerId' => $result->customer->id, - 'firstName' => $this->client->present()->name, - 'streetAddress' => $this->client->address1, - 'postalCode' => $this->client->postal_code, + 'firstName' => $this->client->present()->name(), + 'streetAddress' => $this->client->address1 ?: '', + 'postalCode' => $this->client->postal_code ?: '', 'countryCodeAlpha2' => $this->client->country ? $this->client->country->iso_3166_2 : '', ]); diff --git a/app/PaymentDrivers/Square/CreditCard.php b/app/PaymentDrivers/Square/CreditCard.php index 84fd4bea00..4fd7b449c0 100644 --- a/app/PaymentDrivers/Square/CreditCard.php +++ b/app/PaymentDrivers/Square/CreditCard.php @@ -81,7 +81,7 @@ class CreditCard implements MethodInterface $client->addressLines = [$this->square_driver->client->address1 ?: '', $this->square_driver->client->address2 ?: '']; $client->givenName = $this->square_driver->client->present()->first_name(); $client->familyName = $this->square_driver->client->present()->last_name(); - $client->email = $this->square_driver->client->present()->email; + $client->email = $this->square_driver->client->present()->email(); $client->phone = $this->square_driver->client->phone; $client->city = $this->square_driver->client->city; $client->region = $this->square_driver->client->state; diff --git a/app/Repositories/ClientContactRepository.php b/app/Repositories/ClientContactRepository.php index e82b9efd07..1c7f55ab8c 100644 --- a/app/Repositories/ClientContactRepository.php +++ b/app/Repositories/ClientContactRepository.php @@ -28,10 +28,21 @@ class ClientContactRepository extends BaseRepository public function save(array $data, Client $client) : void { - if (isset($data['contacts'])) { + //06-09-2022 sometimes users pass a contact object instead of a nested array, this sequence handles this scenario + if (isset($data['contacts']) && (count($data['contacts']) !== count($data['contacts'], COUNT_RECURSIVE))) { + $contacts = collect($data['contacts']); - } else { + + } elseif(isset($data['contacts'])){ + + $temp_array[] = $data['contacts']; + $contacts = collect($temp_array); + + } + else { + $contacts = collect(); + } $client->contacts->pluck('id')->diff($contacts->pluck('id'))->each(function ($contact) { @@ -45,6 +56,7 @@ class ClientContactRepository extends BaseRepository /* Set first record to primary - always */ $contacts = $contacts->sortByDesc('is_primary')->map(function ($contact) { + $contact['is_primary'] = $this->is_primary; $this->is_primary = false; diff --git a/app/Repositories/PaymentRepository.php b/app/Repositories/PaymentRepository.php index 84a77c4958..85b296026d 100644 --- a/app/Repositories/PaymentRepository.php +++ b/app/Repositories/PaymentRepository.php @@ -84,23 +84,23 @@ class PaymentRepository extends BaseRepository { $data['amount'] = array_sum(array_column($data['invoices'], 'amount')); } - // $client->service()->updatePaidToDate($data['amount'])->save(); - $client->paid_to_date += $data['amount']; + $client->service()->updatePaidToDate($data['amount'])->save(); + // $client->paid_to_date += $data['amount']; $client->save(); } else{ //this fixes an edge case with unapplied payments - // $client->service()->updatePaidToDate($data['amount'])->save(); - $client->paid_to_date += $data['amount']; + $client->service()->updatePaidToDate($data['amount'])->save(); + // $client->paid_to_date += $data['amount']; $client->save(); } if (array_key_exists('credits', $data) && is_array($data['credits']) && count($data['credits']) > 0) { $_credit_totals = array_sum(array_column($data['credits'], 'amount')); - // $client->service()->updatePaidToDate($_credit_totals)->save(); - $client->paid_to_date += $_credit_totals; + $client->service()->updatePaidToDate($_credit_totals)->save(); + // $client->paid_to_date += $_credit_totals; $client->save(); } diff --git a/app/Services/Client/ClientService.php b/app/Services/Client/ClientService.php index a5dd781f7d..9e9c5fbf95 100644 --- a/app/Services/Client/ClientService.php +++ b/app/Services/Client/ClientService.php @@ -12,6 +12,7 @@ namespace App\Services\Client; use App\Models\Client; +use App\Models\Credit; use App\Services\Client\Merge; use App\Services\Client\PaymentMethod; use App\Utils\Number; @@ -28,14 +29,47 @@ class ClientService public function updateBalance(float $amount) { - $this->client->balance += $amount; + // $this->client->balance += $amount; + + \DB::connection(config('database.default'))->transaction(function () use($amount) { + + $this->client = Client::where('id', $this->client->id)->lockForUpdate()->first(); + $this->client->balance += $amount; + $this->client->save(); + + }, 2); + + return $this; + } + + public function updateBalanceAndPaidToDate(float $balance, float $paid_to_date) + { + // $this->client->balance += $amount; + // $this->client->paid_to_date += $amount; + + \DB::connection(config('database.default'))->transaction(function () use($balance, $paid_to_date) { + + $this->client = Client::where('id', $this->client->id)->lockForUpdate()->first(); + $this->client->balance += $balance; + $this->client->paid_to_date += $paid_to_date; + $this->client->save(); + + }, 2); return $this; } public function updatePaidToDate(float $amount) { - $this->client->paid_to_date += $amount; + // $this->client->paid_to_date += $amount; + + \DB::connection(config('database.default'))->transaction(function () use($amount) { + + $this->client = Client::where('id', $this->client->id)->lockForUpdate()->first(); + $this->client->paid_to_date += $amount; + $this->client->save(); + + }, 2); return $this; } @@ -49,7 +83,7 @@ class ClientService public function getCreditBalance() :float { - $credits = $this->client->credits() + $credits = Credit::where('client_id', $this->client->id) ->where('is_deleted', false) ->where('balance', '>', 0) ->where(function ($query) { @@ -63,7 +97,7 @@ class ClientService public function getCredits() { - return $this->client->credits() + return Credit::where('client_id', $this->client->id) ->where('is_deleted', false) ->where('balance', '>', 0) ->where(function ($query) { diff --git a/app/Services/Credit/ApplyNumber.php b/app/Services/Credit/ApplyNumber.php index 00f5b70744..75ba418bcc 100644 --- a/app/Services/Credit/ApplyNumber.php +++ b/app/Services/Credit/ApplyNumber.php @@ -59,7 +59,7 @@ class ApplyNumber extends AbstractService } catch (QueryException $e) { $x++; - if ($x > 10) { + if ($x > 50) { $this->completed = false; } } diff --git a/app/Services/Invoice/ApplyNumber.php b/app/Services/Invoice/ApplyNumber.php index 325991ab67..58b976eb2b 100644 --- a/app/Services/Invoice/ApplyNumber.php +++ b/app/Services/Invoice/ApplyNumber.php @@ -77,7 +77,7 @@ class ApplyNumber extends AbstractService $x++; - if($x>10) + if($x>50) $this->completed = false; } diff --git a/app/Services/Invoice/ApplyPayment.php b/app/Services/Invoice/ApplyPayment.php index fd818c7264..eea48ba397 100644 --- a/app/Services/Invoice/ApplyPayment.php +++ b/app/Services/Invoice/ApplyPayment.php @@ -88,7 +88,6 @@ class ApplyPayment extends AbstractService $this->invoice ->client - ->fresh() ->service() ->updateBalance($amount_paid) ->save(); diff --git a/app/Services/Invoice/ApplyPaymentAmount.php b/app/Services/Invoice/ApplyPaymentAmount.php index 3e5db3db72..473a3b9591 100644 --- a/app/Services/Invoice/ApplyPaymentAmount.php +++ b/app/Services/Invoice/ApplyPaymentAmount.php @@ -43,7 +43,7 @@ class ApplyPaymentAmount extends AbstractService public function run() { if ($this->invoice->status_id == Invoice::STATUS_DRAFT) { - $this->invoice->service()->markSent()->save(); + $this->invoice = $this->invoice->service()->markSent()->save(); } /*Don't double pay*/ @@ -88,10 +88,8 @@ class ApplyPaymentAmount extends AbstractService $this->invoice ->client - ->fresh() ->service() - ->updateBalance($payment->amount * -1) - ->updatePaidToDate($payment->amount) + ->updateBalanceAndPaidToDate($payment->amount * -1, $payment->amount) ->save(); diff --git a/app/Services/Invoice/AutoBillInvoice.php b/app/Services/Invoice/AutoBillInvoice.php index 8e1c0861e5..7b66d1535b 100644 --- a/app/Services/Invoice/AutoBillInvoice.php +++ b/app/Services/Invoice/AutoBillInvoice.php @@ -35,6 +35,9 @@ class AutoBillInvoice extends AbstractService protected $db; + /*Specific variable for partial payments */ + private bool $is_partial_amount = false; + public function __construct(Invoice $invoice, $db) { $this->invoice = $invoice; @@ -46,7 +49,8 @@ class AutoBillInvoice extends AbstractService { MultiDB::setDb($this->db); - $this->client = $this->invoice->client->fresh(); + /* Harvest Client*/ + $this->client = $this->invoice->client; $is_partial = false; @@ -68,6 +72,10 @@ class AutoBillInvoice extends AbstractService $this->applyCreditPayment(); } + //If this returns true, it means a partial invoice amount was paid as a credit and there is no further balance payable + if($this->is_partial_amount && $this->invoice->partial == 0) + return; + $amount = 0; /* Determine $amount */ @@ -169,9 +177,9 @@ class AutoBillInvoice extends AbstractService $payment->invoices()->attach($this->invoice->id, ['amount' => $amount]); $this->invoice - ->service() - ->setStatus(Invoice::STATUS_PAID) - ->save(); + ->service() + ->setCalculatedStatus() + ->save(); foreach ($this->used_credit as $credit) { $current_credit = Credit::find($credit['credit_id']); @@ -191,18 +199,18 @@ class AutoBillInvoice extends AbstractService ->updatePaymentBalance($amount * -1) ->save(); - $client = $this->invoice->client->fresh(); - - $client->service() - ->updateBalance($amount * -1) - ->updatePaidToDate($amount) - ->adjustCreditBalance($amount * -1) - ->save(); + $this->invoice + ->client + ->service() + ->updateBalanceAndPaidToDate($amount * -1, $amount) + // ->updateBalance($amount * -1) + // ->updatePaidToDate($amount) + ->adjustCreditBalance($amount * -1) + ->save(); $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(); + ->updateCreditBalance($amount * -1, "Credit {$current_credit->number} used to pay down Invoice {$this->invoice->number}") + ->save(); event('eloquent.created: App\Models\Payment', $payment); event(new PaymentWasCreated($payment, $payment->company, Ninja::eventVars())); @@ -221,11 +229,11 @@ class AutoBillInvoice extends AbstractService */ private function applyCreditPayment() { - $available_credits = $this->client - ->credits + $available_credits = Credit::where('client_id', $this->client->id) ->where('is_deleted', false) ->where('balance', '>', 0) - ->sortBy('created_at'); + ->orderBy('created_at') + ->get(); $available_credit_balance = $available_credits->sum('balance'); @@ -235,16 +243,14 @@ class AutoBillInvoice extends AbstractService return; } - $is_partial_amount = false; - if ($this->invoice->partial > 0) { - $is_partial_amount = true; + $this->is_partial_amount = true; } $this->used_credit = []; foreach ($available_credits as $key => $credit) { - if ($is_partial_amount) { + if ($this->is_partial_amount) { //more credit than needed if ($credit->balance > $this->invoice->partial) { @@ -260,6 +266,7 @@ class AutoBillInvoice extends AbstractService $this->invoice->partial -= $credit->balance; $this->invoice->balance -= $credit->balance; $this->invoice->paid_to_date += $credit->balance; + } } else { @@ -276,6 +283,7 @@ class AutoBillInvoice extends AbstractService $this->used_credit[$key]['amount'] = $credit->balance; $this->invoice->balance -= $credit->balance; $this->invoice->paid_to_date += $credit->balance; + } } } diff --git a/app/Services/Invoice/MarkInvoiceDeleted.php b/app/Services/Invoice/MarkInvoiceDeleted.php index 8990cbfaa5..b7478f9201 100644 --- a/app/Services/Invoice/MarkInvoiceDeleted.php +++ b/app/Services/Invoice/MarkInvoiceDeleted.php @@ -45,8 +45,7 @@ class MarkInvoiceDeleted extends AbstractService ->setAdjustmentAmount() ->deletePaymentables() ->adjustPayments() - ->adjustPaidToDate() - ->adjustBalance() + ->adjustPaidToDateAndBalance() ->adjustLedger(); $transaction = [ @@ -70,21 +69,29 @@ class MarkInvoiceDeleted extends AbstractService return $this; } - private function adjustPaidToDate() + private function adjustPaidToDateAndBalance() { - $client = $this->invoice->client->fresh(); - $client->paid_to_date += $this->adjustment_amount * -1; - $client->save(); - // $this->invoice->client->service()->updatePaidToDate($this->adjustment_amount * -1)->save(); //reduces the paid to date by the payment totals + // $client = $this->invoice->client->fresh(); + // $client->paid_to_date += $this->adjustment_amount * -1; + // $client->balance += $this->balance_adjustment * -1; + // $client->save(); + + // 06-09-2022 + $this->invoice + ->client + ->service() + ->updateBalanceAndPaidToDate($this->balance_adjustment * -1, $this->adjustment_amount * -1) + ->save(); //reduces the paid to date by the payment totals return $this; } + // @deprecated private function adjustBalance() { - $client = $this->invoice->client->fresh(); - $client->balance += $this->balance_adjustment * -1; - $client->save(); + // $client = $this->invoice->client->fresh(); + // $client->balance += $this->balance_adjustment * -1; + // $client->save(); // $this->invoice->client->service()->updateBalance($this->balance_adjustment * -1)->save(); //reduces the client balance by the invoice amount. diff --git a/app/Services/Invoice/MarkPaid.php b/app/Services/Invoice/MarkPaid.php index 1cfe1b5bdd..9c60591515 100644 --- a/app/Services/Invoice/MarkPaid.php +++ b/app/Services/Invoice/MarkPaid.php @@ -34,6 +34,8 @@ class MarkPaid extends AbstractService private $invoice; + private $payable_balance; + public function __construct(Invoice $invoice) { $this->invoice = $invoice; @@ -48,20 +50,20 @@ class MarkPaid extends AbstractService } if ($this->invoice->status_id == Invoice::STATUS_DRAFT) { - $this->invoice->service()->markSent()->save(); + $this->invoice = $this->invoice->service()->markSent()->save(); } - $payable_balance = $this->invoice->balance; - - \DB::connection(config('database.default'))->transaction(function () use($payable_balance) { + \DB::connection(config('database.default'))->transaction(function () { $this->invoice = Invoice::where('id', $this->invoice->id)->lockForUpdate()->first(); + $this->payable_balance = $this->invoice->balance; + $this->invoice ->service() ->setExchangeRate() - ->updateBalance($payable_balance * -1) - ->updatePaidToDate($payable_balance) + ->updateBalance($this->payable_balance * -1) + ->updatePaidToDate($this->payable_balance) ->setStatus(Invoice::STATUS_PAID) ->save(); @@ -70,8 +72,8 @@ class MarkPaid extends AbstractService /* Create Payment */ $payment = PaymentFactory::create($this->invoice->company_id, $this->invoice->user_id); - $payment->amount = $payable_balance; - $payment->applied = $payable_balance; + $payment->amount = $this->payable_balance; + $payment->applied = $this->payable_balance; $payment->status_id = Payment::STATUS_COMPLETED; $payment->client_id = $this->invoice->client_id; $payment->transaction_reference = ctrans('texts.manual_entry'); @@ -99,21 +101,13 @@ class MarkPaid extends AbstractService /* Create a payment relationship to the invoice entity */ $payment->invoices()->attach($this->invoice->id, [ - 'amount' => $payable_balance, + 'amount' => $this->payable_balance, ]); event('eloquent.created: App\Models\Payment', $payment); $this->invoice->next_send_date = null; - // $this->invoice - // ->service() - // ->setExchangeRate() - // ->updateBalance($payment->amount * -1) - // ->updatePaidToDate($payment->amount) - // ->setStatus(Invoice::STATUS_PAID) - // ->save(); - $this->invoice ->service() ->applyNumber() @@ -121,16 +115,14 @@ class MarkPaid extends AbstractService ->save(); $payment->ledger() - ->updatePaymentBalance($payable_balance * -1); + ->updatePaymentBalance($this->payable_balance * -1); - \DB::connection(config('database.default'))->transaction(function () use ($payment) { - - /* Get the last record for the client and set the current balance*/ - $client = Client::withTrashed()->where('id', $this->invoice->client_id)->lockForUpdate()->first(); - $client->paid_to_date += $payment->amount; - $client->balance -= $payment->amount; - $client->save(); - }, 1); + //06-09-2022 + $this->invoice + ->client + ->service() + ->updateBalanceAndPaidToDate($payment->amount*-1, $payment->amount) + ->save(); $this->invoice = $this->invoice ->service() diff --git a/app/Services/Invoice/MarkSent.php b/app/Services/Invoice/MarkSent.php index d95d7365bd..07bae6f986 100644 --- a/app/Services/Invoice/MarkSent.php +++ b/app/Services/Invoice/MarkSent.php @@ -62,15 +62,7 @@ class MarkSent extends AbstractService ->save(); /*Adjust client balance*/ - - \DB::connection(config('database.default'))->transaction(function () use ($adjustment) { - - /* Get the last record for the client and set the current balance*/ - $client = Client::withTrashed()->where('id', $this->client->id)->lockForUpdate()->first(); - $client->balance += $adjustment; - $client->save(); - - }, 1); + $this->invoice->client->service()->updateBalance($adjustment)->save(); $this->invoice->markInvitationsSent(); diff --git a/app/Services/Payment/ApplyNumber.php b/app/Services/Payment/ApplyNumber.php index d8654c2167..9345867cd1 100644 --- a/app/Services/Payment/ApplyNumber.php +++ b/app/Services/Payment/ApplyNumber.php @@ -56,7 +56,7 @@ class ApplyNumber extends AbstractService } catch (QueryException $e) { $x++; - if ($x > 10) { + if ($x > 50) { $this->completed = false; } } diff --git a/app/Services/Payment/DeletePayment.php b/app/Services/Payment/DeletePayment.php index 6ce1065e0b..a04aa04fe9 100644 --- a/app/Services/Payment/DeletePayment.php +++ b/app/Services/Payment/DeletePayment.php @@ -90,9 +90,12 @@ class DeletePayment ->updateInvoiceBalance($net_deletable, "Adjusting invoice {$paymentable_invoice->number} due to deletion of Payment {$this->payment->number}") ->save(); - $client = $client->service() - ->updateBalance($net_deletable) - ->save(); + $client = $this->payment + ->client + ->fresh() + ->service() + ->updateBalance($net_deletable) + ->save(); if ($paymentable_invoice->balance == $paymentable_invoice->amount) { $paymentable_invoice->service()->setStatus(Invoice::STATUS_SENT)->save(); diff --git a/app/Services/Payment/RefundPayment.php b/app/Services/Payment/RefundPayment.php index 7a4b1ef379..7755719457 100644 --- a/app/Services/Payment/RefundPayment.php +++ b/app/Services/Payment/RefundPayment.php @@ -55,15 +55,12 @@ class RefundPayment public function run() { $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 - //->buildCreditLineItems() //generate the credit note items - ->updateCreditables() //return the credits first - ->updatePaymentables() //update the paymentable items - ->adjustInvoices() - ->processGatewayRefund() //process the gateway refund if needed - ->save(); + ->setStatus() //sets status of payment + ->updateCreditables() //return the credits first + ->updatePaymentables() //update the paymentable items + ->adjustInvoices() + ->processGatewayRefund() //process the gateway refund if needed + ->save(); if (array_key_exists('email_receipt', $this->refund_data) && $this->refund_data['email_receipt'] == 'true') { $contact = $this->payment->client->contacts()->whereNotNull('email')->first(); @@ -251,7 +248,6 @@ class RefundPayment */ private function adjustInvoices() { - $adjustment_amount = 0; if (isset($this->refund_data['invoices']) && count($this->refund_data['invoices']) > 0) { foreach ($this->refund_data['invoices'] as $refunded_invoice) { @@ -266,7 +262,9 @@ class RefundPayment ->updatePaidToDate($refunded_invoice['amount'] * -1) ->save(); - $invoice->ledger()->updateInvoiceBalance($refunded_invoice['amount'], "Refund of payment # {$this->payment->number}")->save(); + $invoice->ledger() + ->updateInvoiceBalance($refunded_invoice['amount'], "Refund of payment # {$this->payment->number}") + ->save(); if ($invoice->amount == $invoice->balance) { $invoice->service()->setStatus(Invoice::STATUS_SENT); @@ -276,10 +274,15 @@ class RefundPayment $invoice->saveQuietly(); - $client = $invoice->client; - $adjustment_amount += $refunded_invoice['amount']; - $client->balance += $refunded_invoice['amount']; - $client->save(); + //06-09-2022 + $client = $invoice->client + ->service() + ->updateBalance($refunded_invoice['amount']) + ->save(); + + // $client = $invoice->client; + // $client->balance += $refunded_invoice['amount']; + // $client->save(); $transaction = [ 'invoice' => $invoice->transaction_event(), @@ -350,75 +353,4 @@ class RefundPayment return $this->payment; } - // public function updateCreditNoteBalance() - // { - // $this->credit_note->balance -= $this->total_refund; - // $this->credit_note->status_id = Credit::STATUS_APPLIED; - - // $this->credit_note->balance === 0 - // ? $this->credit_note->status_id = Credit::STATUS_APPLIED - // : $this->credit_note->status_id = Credit::STATUS_PARTIAL; - - // $this->credit_note->save(); - - // return $this; - // } - - // private function buildCreditNote() - // { - // $this->credit_note = CreditFactory::create($this->payment->company_id, $this->payment->user_id); - // $this->credit_note->assigned_user_id = isset($this->payment->assigned_user_id) ?: null; - // $this->credit_note->date = $this->refund_data['date']; - // $this->credit_note->status_id = Credit::STATUS_SENT; - // $this->credit_note->client_id = $this->payment->client->id; - // $this->credit_note->amount = $this->total_refund; - // $this->credit_note->balance = $this->total_refund; - - // $this->credit_note->save(); - // $this->credit_note->number = $this->payment->client->getNextCreditNumber($this->payment->client); - // $this->credit_note->save(); - - // return $this; - // } - - // private function buildCreditLineItems() - // { - // $ledger_string = ''; - - // if (isset($this->refund_data['invoices']) && count($this->refund_data['invoices']) > 0) { - // foreach ($this->refund_data['invoices'] as $invoice) { - - // $inv = Invoice::find($invoice['invoice_id']); - - // $credit_line_item = InvoiceItemFactory::create(); - // $credit_line_item->quantity = 1; - // $credit_line_item->cost = $invoice['amount']; - // $credit_line_item->product_key = ctrans('texts.invoice'); - // $credit_line_item->notes = ctrans('texts.refund_body', ['amount' => $invoice['amount'], 'invoice_number' => $inv->number]); - // $credit_line_item->line_total = $invoice['amount']; - // $credit_line_item->date = $this->refund_data['date']; - - // $ledger_string .= $credit_line_item->notes . ' '; - - // $line_items[] = $credit_line_item; - // } - // } else { - - // $credit_line_item = InvoiceItemFactory::create(); - // $credit_line_item->quantity = 1; - // $credit_line_item->cost = $this->refund_data['amount']; - // $credit_line_item->product_key = ctrans('texts.credit'); - // $credit_line_item->notes = ctrans('texts.credit_created_by', ['transaction_reference' => $this->payment->number]); - // $credit_line_item->line_total = $this->refund_data['amount']; - // $credit_line_item->date = $this->refund_data['date']; - - // $line_items = []; - // $line_items[] = $credit_line_item; - // } - - // $this->credit_note->line_items = $line_items; - // $this->credit_note->save(); - - // return $this; - // } } diff --git a/app/Services/Payment/UpdateInvoicePayment.php b/app/Services/Payment/UpdateInvoicePayment.php index d073087301..5c170e93f5 100644 --- a/app/Services/Payment/UpdateInvoicePayment.php +++ b/app/Services/Payment/UpdateInvoicePayment.php @@ -62,15 +62,17 @@ class UpdateInvoicePayment $paid_amount = $paid_invoice->amount; } - \DB::connection(config('database.default'))->transaction(function () use($client, $paid_amount){ + $client->service()->updateBalanceAndPaidToDate($paid_amount*-1, $paid_amount); + + // \DB::connection(config('database.default'))->transaction(function () use($client, $paid_amount){ - $update_client = Client::withTrashed()->where('id', $client->id)->lockForUpdate()->first(); + // $update_client = Client::withTrashed()->where('id', $client->id)->lockForUpdate()->first(); - $update_client->paid_to_date += $paid_amount; - $update_client->balance -= $paid_amount; - $update_client->save(); + // $update_client->paid_to_date += $paid_amount; + // $update_client->balance -= $paid_amount; + // $update_client->save(); - }, 1); + // }, 1); /* Need to determine here is we have an OVER payment - if YES only apply the max invoice amount */ if($paid_amount > $invoice->partial && $paid_amount > $invoice->balance) diff --git a/app/Services/PurchaseOrder/PurchaseOrderService.php b/app/Services/PurchaseOrder/PurchaseOrderService.php index 1cabb4dd7f..34a18e5748 100644 --- a/app/Services/PurchaseOrder/PurchaseOrderService.php +++ b/app/Services/PurchaseOrder/PurchaseOrderService.php @@ -104,7 +104,7 @@ class PurchaseOrderService if($force){ $this->purchase_order->invitations->each(function ($invitation) { - CreatePurchaseOrderPdf::dispatchNow($invitation); + (new CreatePurchaseOrderPdf($invitation))->handle(); }); return $this; diff --git a/app/Services/Quote/ApplyNumber.php b/app/Services/Quote/ApplyNumber.php index 9b8c69b5fb..2f1bc45418 100644 --- a/app/Services/Quote/ApplyNumber.php +++ b/app/Services/Quote/ApplyNumber.php @@ -67,7 +67,7 @@ class ApplyNumber } catch (QueryException $e) { $x++; - if ($x > 10) { + if ($x > 50) { $this->completed = false; } } diff --git a/app/Services/Recurring/RecurringService.php b/app/Services/Recurring/RecurringService.php index e4ac548402..a1d9193550 100644 --- a/app/Services/Recurring/RecurringService.php +++ b/app/Services/Recurring/RecurringService.php @@ -88,7 +88,7 @@ class RecurringService $this->recurring_entity->invitations->each(function ($invitation){ - UnlinkFile::dispatchNow(config('filesystems.default'), $this->recurring_entity->client->recurring_invoice_filepath($invitation) . $this->recurring_entity->numberFormatter().'.pdf'); + (new UnlinkFile(config('filesystems.default'), $this->recurring_entity->client->recurring_invoice_filepath($invitation) . $this->recurring_entity->numberFormatter().'.pdf'))->handle(); }); diff --git a/app/Utils/TemplateEngine.php b/app/Utils/TemplateEngine.php index 8eb0db321a..ec6f9c75d7 100644 --- a/app/Utils/TemplateEngine.php +++ b/app/Utils/TemplateEngine.php @@ -107,7 +107,7 @@ class TemplateEngine private function setSettingsObject() { - if($this->entity == 'purchaseOrder'){ + if($this->entity == 'purchaseOrder' || $this->entity == 'purchase_order'){ $this->settings_entity = auth()->user()->company(); $this->settings = $this->settings_entity->settings; } diff --git a/app/Utils/Traits/Payment/Refundable.php b/app/Utils/Traits/Payment/Refundable.php index c313e1b782..7bcbabb98a 100644 --- a/app/Utils/Traits/Payment/Refundable.php +++ b/app/Utils/Traits/Payment/Refundable.php @@ -28,6 +28,7 @@ trait Refundable /** * Entry point for processing of refunds. * @param array $data + * @deprecated ???? 06-09-2022 * @return Refundable * @throws PaymentRefundFailed */ diff --git a/app/Utils/Traits/SavesDocuments.php b/app/Utils/Traits/SavesDocuments.php index 47b2e00687..babed02761 100644 --- a/app/Utils/Traits/SavesDocuments.php +++ b/app/Utils/Traits/SavesDocuments.php @@ -33,6 +33,9 @@ trait SavesDocuments return false; } + if(!is_array($document_array)) + return; + foreach ($document_array as $document) { $document = (new UploadFile( $document, diff --git a/composer.json b/composer.json index b0b87031a9..2578efc55e 100644 --- a/composer.json +++ b/composer.json @@ -94,7 +94,7 @@ "wepay/php-sdk": "^0.3" }, "require-dev": { - "php": "^7.4|^8.0", + "php": "^8.1", "barryvdh/laravel-debugbar": "^3.6", "beyondcode/laravel-query-detector": "^1.6", "brianium/paratest": "^6.1", diff --git a/composer.lock b/composer.lock index 94c39b4061..dc056b9382 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "dd251d0b8181fc819aded8d8d5c6bb07", + "content-hash": "68269627da68ba8ad674df71001d16ea", "packages": [ { "name": "afosto/yaac", @@ -378,16 +378,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.232.3", + "version": "3.235.1", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "96fae7f4b2ab11a3eb3fceacef7cb4b12e46b27c" + "reference": "2025db05c7dd22ae414857dadd49207f64c2fc74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/96fae7f4b2ab11a3eb3fceacef7cb4b12e46b27c", - "reference": "96fae7f4b2ab11a3eb3fceacef7cb4b12e46b27c", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/2025db05c7dd22ae414857dadd49207f64c2fc74", + "reference": "2025db05c7dd22ae414857dadd49207f64c2fc74", "shasum": "" }, "require": { @@ -464,9 +464,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.232.3" + "source": "https://github.com/aws/aws-sdk-php/tree/3.235.1" }, - "time": "2022-08-08T18:19:49+00:00" + "time": "2022-09-02T18:18:19+00:00" }, { "name": "bacon/bacon-qr-code", @@ -625,16 +625,16 @@ }, { "name": "brick/math", - "version": "0.10.1", + "version": "0.10.2", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "de846578401f4e58f911b3afeb62ced56365ed87" + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/de846578401f4e58f911b3afeb62ced56365ed87", - "reference": "de846578401f4e58f911b3afeb62ced56365ed87", + "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", "shasum": "" }, "require": { @@ -669,7 +669,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.10.1" + "source": "https://github.com/brick/math/tree/0.10.2" }, "funding": [ { @@ -677,7 +677,7 @@ "type": "github" } ], - "time": "2022-08-01T22:54:31+00:00" + "time": "2022-08-10T22:54:19+00:00" }, { "name": "checkout/checkout-sdk-php", @@ -1165,16 +1165,16 @@ }, { "name": "doctrine/dbal", - "version": "3.4.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "118a360e9437e88d49024f36283c8bcbd76105f5" + "reference": "a24b89d663d8f261199bc0a91c48016042ebda85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/118a360e9437e88d49024f36283c8bcbd76105f5", - "reference": "118a360e9437e88d49024f36283c8bcbd76105f5", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/a24b89d663d8f261199bc0a91c48016042ebda85", + "reference": "a24b89d663d8f261199bc0a91c48016042ebda85", "shasum": "" }, "require": { @@ -1187,8 +1187,8 @@ "psr/log": "^1|^2|^3" }, "require-dev": { - "doctrine/coding-standard": "9.0.0", - "jetbrains/phpstorm-stubs": "2022.1", + "doctrine/coding-standard": "10.0.0", + "jetbrains/phpstorm-stubs": "2022.2", "phpstan/phpstan": "1.8.2", "phpstan/phpstan-strict-rules": "^1.3", "phpunit/phpunit": "9.5.21", @@ -1256,7 +1256,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.4.0" + "source": "https://github.com/doctrine/dbal/tree/3.4.3" }, "funding": [ { @@ -1272,7 +1272,7 @@ "type": "tidelift" } ], - "time": "2022-08-06T20:35:57+00:00" + "time": "2022-08-28T17:26:36+00:00" }, { "name": "doctrine/deprecations", @@ -2162,16 +2162,16 @@ }, { "name": "google/apiclient-services", - "version": "v0.261.0", + "version": "v0.265.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "c91c5a694e3b8bca37136b830072a23f2c1250fa" + "reference": "a23754daa452e26a8dd31a7848863c67a2e3d67e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/c91c5a694e3b8bca37136b830072a23f2c1250fa", - "reference": "c91c5a694e3b8bca37136b830072a23f2c1250fa", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/a23754daa452e26a8dd31a7848863c67a2e3d67e", + "reference": "a23754daa452e26a8dd31a7848863c67a2e3d67e", "shasum": "" }, "require": { @@ -2200,22 +2200,22 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.261.0" + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.265.0" }, - "time": "2022-08-08T01:28:12+00:00" + "time": "2022-09-04T00:58:12+00:00" }, { "name": "google/auth", - "version": "v1.21.1", + "version": "v1.22.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "aa3b9ca29258ac6347ce3c8937a2418c5d78f840" + "reference": "da4037df770027c8f7163595a29ec434f705f8b1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/aa3b9ca29258ac6347ce3c8937a2418c5d78f840", - "reference": "aa3b9ca29258ac6347ce3c8937a2418c5d78f840", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/da4037df770027c8f7163595a29ec434f705f8b1", + "reference": "da4037df770027c8f7163595a29ec434f705f8b1", "shasum": "" }, "require": { @@ -2258,9 +2258,9 @@ "support": { "docs": "https://googleapis.github.io/google-auth-library-php/main/", "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.21.1" + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.22.0" }, - "time": "2022-05-16T19:34:15+00:00" + "time": "2022-09-01T17:07:07+00:00" }, { "name": "graham-campbell/result-type", @@ -2384,16 +2384,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.4.5", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", - "reference": "1dd98b0564cb3f6bd16ce683cb755f94c10fbd82", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { @@ -2408,10 +2408,10 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", "php-http/client-integration-tests": "^3.0", - "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -2421,8 +2421,12 @@ }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { - "dev-master": "7.4-dev" + "dev-master": "7.5-dev" } }, "autoload": { @@ -2488,7 +2492,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.4.5" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -2504,20 +2508,20 @@ "type": "tidelift" } ], - "time": "2022-06-20T22:16:13+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/promises", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da", - "reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { @@ -2572,7 +2576,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.1" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, "funding": [ { @@ -2588,20 +2592,20 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:56:57+00:00" + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.4.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "13388f00956b1503577598873fffb5ae994b5737" + "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/13388f00956b1503577598873fffb5ae994b5737", - "reference": "13388f00956b1503577598873fffb5ae994b5737", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/69568e4293f4fa993f3b0e51c9723e1e17c41379", + "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379", "shasum": "" }, "require": { @@ -2615,15 +2619,19 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.1", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.8 || ^9.3.10" + "phpunit/phpunit": "^8.5.29 || ^9.5.23" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, "branch-alias": { "dev-master": "2.4-dev" } @@ -2687,7 +2695,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.0" + "source": "https://github.com/guzzle/psr7/tree/2.4.1" }, "funding": [ { @@ -2703,7 +2711,7 @@ "type": "tidelift" } ], - "time": "2022-06-20T21:43:11+00:00" + "time": "2022-08-28T14:45:39+00:00" }, { "name": "halaxa/json-machine", @@ -3041,16 +3049,16 @@ }, { "name": "imdhemy/laravel-purchases", - "version": "0.10.3", + "version": "0.10.4", "source": { "type": "git", "url": "https://github.com/imdhemy/laravel-in-app-purchases.git", - "reference": "49a883f71a8cc272cac4db9d046b2d362725e501" + "reference": "eb9a4d248a626cb6b7a59c9626726fd8534aec78" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/imdhemy/laravel-in-app-purchases/zipball/49a883f71a8cc272cac4db9d046b2d362725e501", - "reference": "49a883f71a8cc272cac4db9d046b2d362725e501", + "url": "https://api.github.com/repos/imdhemy/laravel-in-app-purchases/zipball/eb9a4d248a626cb6b7a59c9626726fd8534aec78", + "reference": "eb9a4d248a626cb6b7a59c9626726fd8534aec78", "shasum": "" }, "require": { @@ -3106,9 +3114,9 @@ ], "support": { "issues": "https://github.com/imdhemy/laravel-in-app-purchases/issues", - "source": "https://github.com/imdhemy/laravel-in-app-purchases/tree/0.10.3" + "source": "https://github.com/imdhemy/laravel-in-app-purchases/tree/0.10.4" }, - "time": "2021-04-03T15:29:14+00:00" + "time": "2022-08-20T04:59:54+00:00" }, { "name": "intervention/image", @@ -3473,16 +3481,16 @@ }, { "name": "laravel/framework", - "version": "v9.23.0", + "version": "v9.27.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "c4eea9060d847b5c93957b203caa8f57544a76ab" + "reference": "27572f45120fd3977d92651a71d8c711a9aaa790" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/c4eea9060d847b5c93957b203caa8f57544a76ab", - "reference": "c4eea9060d847b5c93957b203caa8f57544a76ab", + "url": "https://api.github.com/repos/laravel/framework/zipball/27572f45120fd3977d92651a71d8c711a9aaa790", + "reference": "27572f45120fd3977d92651a71d8c711a9aaa790", "shasum": "" }, "require": { @@ -3649,29 +3657,30 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-08-02T14:24:44+00:00" + "time": "2022-08-30T13:34:43+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.2.0", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "09f0e9fb61829f628205b7c94906c28740ff9540" + "reference": "d78fd36ba031a1a695ea5a406f29996948d7011b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/09f0e9fb61829f628205b7c94906c28740ff9540", - "reference": "09f0e9fb61829f628205b7c94906c28740ff9540", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/d78fd36ba031a1a695ea5a406f29996948d7011b", + "reference": "d78fd36ba031a1a695ea5a406f29996948d7011b", "shasum": "" }, "require": { "php": "^7.3|^8.0" }, "require-dev": { - "pestphp/pest": "^1.18", - "phpstan/phpstan": "^0.12.98", - "symfony/var-dumper": "^5.3" + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" }, "type": "library", "extra": { @@ -3708,7 +3717,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2022-05-16T17:09:47+00:00" + "time": "2022-08-26T15:25:27+00:00" }, { "name": "laravel/slack-notification-channel", @@ -3773,16 +3782,16 @@ }, { "name": "laravel/socialite", - "version": "v5.5.3", + "version": "v5.5.5", "source": { "type": "git", "url": "https://github.com/laravel/socialite.git", - "reference": "9dfc76b31ee041c45a7cae86f23339784abde46d" + "reference": "ce8b2f967eead5a6bae74449e207be6f8046edc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/socialite/zipball/9dfc76b31ee041c45a7cae86f23339784abde46d", - "reference": "9dfc76b31ee041c45a7cae86f23339784abde46d", + "url": "https://api.github.com/repos/laravel/socialite/zipball/ce8b2f967eead5a6bae74449e207be6f8046edc3", + "reference": "ce8b2f967eead5a6bae74449e207be6f8046edc3", "shasum": "" }, "require": { @@ -3838,7 +3847,7 @@ "issues": "https://github.com/laravel/socialite/issues", "source": "https://github.com/laravel/socialite" }, - "time": "2022-07-18T13:51:19+00:00" + "time": "2022-08-20T21:32:07+00:00" }, { "name": "laravel/tinker", @@ -4032,16 +4041,16 @@ }, { "name": "lcobucci/jwt", - "version": "4.1.5", + "version": "4.2.1", "source": { "type": "git", "url": "https://github.com/lcobucci/jwt.git", - "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582" + "reference": "72ac6d807ee51a70ad376ee03a2387e8646e10f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/lcobucci/jwt/zipball/fe2d89f2eaa7087af4aa166c6f480ef04e000582", - "reference": "fe2d89f2eaa7087af4aa166c6f480ef04e000582", + "url": "https://api.github.com/repos/lcobucci/jwt/zipball/72ac6d807ee51a70ad376ee03a2387e8646e10f3", + "reference": "72ac6d807ee51a70ad376ee03a2387e8646e10f3", "shasum": "" }, "require": { @@ -4057,12 +4066,12 @@ "infection/infection": "^0.21", "lcobucci/coding-standard": "^6.0", "mikey179/vfsstream": "^1.6.7", - "phpbench/phpbench": "^1.0", + "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-deprecation-rules": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-phpunit": "^1.0", + "phpstan/phpstan-strict-rules": "^1.0", "phpunit/php-invoker": "^3.1", "phpunit/phpunit": "^9.5" }, @@ -4090,7 +4099,7 @@ ], "support": { "issues": "https://github.com/lcobucci/jwt/issues", - "source": "https://github.com/lcobucci/jwt/tree/4.1.5" + "source": "https://github.com/lcobucci/jwt/tree/4.2.1" }, "funding": [ { @@ -4102,7 +4111,7 @@ "type": "patreon" } ], - "time": "2021-09-28T19:34:56+00:00" + "time": "2022-08-19T23:14:07+00:00" }, { "name": "league/commonmark", @@ -4378,16 +4387,16 @@ }, { "name": "league/flysystem", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "ed0ecc7f9b5c2f4a9872185846974a808a3b052a" + "reference": "81aea9e5217084c7850cd36e1587ee4aad721c6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/ed0ecc7f9b5c2f4a9872185846974a808a3b052a", - "reference": "ed0ecc7f9b5c2f4a9872185846974a808a3b052a", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/81aea9e5217084c7850cd36e1587ee4aad721c6b", + "reference": "81aea9e5217084c7850cd36e1587ee4aad721c6b", "shasum": "" }, "require": { @@ -4448,7 +4457,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.2.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.2.1" }, "funding": [ { @@ -4464,7 +4473,7 @@ "type": "tidelift" } ], - "time": "2022-07-26T07:26:36+00:00" + "time": "2022-08-14T20:48:34+00:00" }, { "name": "league/flysystem-aws-s3-v3", @@ -4874,16 +4883,16 @@ }, { "name": "microsoft/microsoft-graph", - "version": "1.73.0", + "version": "1.74.0", "source": { "type": "git", "url": "https://github.com/microsoftgraph/msgraph-sdk-php.git", - "reference": "a867c548899436d5279d191d5163a831ac9ea672" + "reference": "a43deb66661917d92bf62de1f29f6799b30ea91c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/microsoftgraph/msgraph-sdk-php/zipball/a867c548899436d5279d191d5163a831ac9ea672", - "reference": "a867c548899436d5279d191d5163a831ac9ea672", + "url": "https://api.github.com/repos/microsoftgraph/msgraph-sdk-php/zipball/a43deb66661917d92bf62de1f29f6799b30ea91c", + "reference": "a43deb66661917d92bf62de1f29f6799b30ea91c", "shasum": "" }, "require": { @@ -4919,22 +4928,22 @@ "homepage": "https://developer.microsoft.com/en-us/graph", "support": { "issues": "https://github.com/microsoftgraph/msgraph-sdk-php/issues", - "source": "https://github.com/microsoftgraph/msgraph-sdk-php/tree/1.73.0" + "source": "https://github.com/microsoftgraph/msgraph-sdk-php/tree/1.74.0" }, - "time": "2022-07-20T14:56:50+00:00" + "time": "2022-08-31T12:12:48+00:00" }, { "name": "mollie/mollie-api-php", - "version": "v2.45.0", + "version": "v2.46.0", "source": { "type": "git", "url": "https://github.com/mollie/mollie-api-php.git", - "reference": "43ae5471967a47b34752b6b3a229038a05034527" + "reference": "343e55d65cfe07ac1e68e141682a971a10b3bae4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mollie/mollie-api-php/zipball/43ae5471967a47b34752b6b3a229038a05034527", - "reference": "43ae5471967a47b34752b6b3a229038a05034527", + "url": "https://api.github.com/repos/mollie/mollie-api-php/zipball/343e55d65cfe07ac1e68e141682a971a10b3bae4", + "reference": "343e55d65cfe07ac1e68e141682a971a10b3bae4", "shasum": "" }, "require": { @@ -5011,22 +5020,22 @@ ], "support": { "issues": "https://github.com/mollie/mollie-api-php/issues", - "source": "https://github.com/mollie/mollie-api-php/tree/v2.45.0" + "source": "https://github.com/mollie/mollie-api-php/tree/v2.46.0" }, - "time": "2022-07-11T15:03:39+00:00" + "time": "2022-09-01T10:45:39+00:00" }, { "name": "moneyphp/money", - "version": "v4.0.4", + "version": "v4.0.5", "source": { "type": "git", "url": "https://github.com/moneyphp/money.git", - "reference": "efe904ab6109d87046eb624d5dff7d270fd0cca5" + "reference": "cee58435ff82a5de252c516e6a31beb674898985" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/moneyphp/money/zipball/efe904ab6109d87046eb624d5dff7d270fd0cca5", - "reference": "efe904ab6109d87046eb624d5dff7d270fd0cca5", + "url": "https://api.github.com/repos/moneyphp/money/zipball/cee58435ff82a5de252c516e6a31beb674898985", + "reference": "cee58435ff82a5de252c516e6a31beb674898985", "shasum": "" }, "require": { @@ -5099,9 +5108,9 @@ ], "support": { "issues": "https://github.com/moneyphp/money/issues", - "source": "https://github.com/moneyphp/money/tree/v4.0.4" + "source": "https://github.com/moneyphp/money/tree/v4.0.5" }, - "time": "2022-05-18T19:32:15+00:00" + "time": "2022-08-11T09:12:20+00:00" }, { "name": "monolog/monolog", @@ -5404,16 +5413,16 @@ }, { "name": "nesbot/carbon", - "version": "2.61.0", + "version": "2.62.1", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "bdf4f4fe3a3eac4de84dbec0738082a862c68ba6" + "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bdf4f4fe3a3eac4de84dbec0738082a862c68ba6", - "reference": "bdf4f4fe3a3eac4de84dbec0738082a862c68ba6", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", + "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", "shasum": "" }, "require": { @@ -5502,7 +5511,7 @@ "type": "tidelift" } ], - "time": "2022-08-06T12:41:24+00:00" + "time": "2022-09-02T07:48:13+00:00" }, { "name": "nette/schema", @@ -5653,16 +5662,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.14.0", + "version": "v4.15.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1" + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/34bea19b6e03d8153165d8f30bba4c3be86184c1", - "reference": "34bea19b6e03d8153165d8f30bba4c3be86184c1", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", "shasum": "" }, "require": { @@ -5703,9 +5712,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.14.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" }, - "time": "2022-05-31T20:59:12+00:00" + "time": "2022-09-04T07:30:47+00:00" }, { "name": "nunomaduro/termwind", @@ -6803,16 +6812,16 @@ }, { "name": "phpseclib/phpseclib", - "version": "3.0.14", + "version": "3.0.15", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "2f0b7af658cbea265cbb4a791d6c29a6613f98ef" + "reference": "c96e250238e88bf1040e9f7715efab1d6bc7f622" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/2f0b7af658cbea265cbb4a791d6c29a6613f98ef", - "reference": "2f0b7af658cbea265cbb4a791d6c29a6613f98ef", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c96e250238e88bf1040e9f7715efab1d6bc7f622", + "reference": "c96e250238e88bf1040e9f7715efab1d6bc7f622", "shasum": "" }, "require": { @@ -6824,6 +6833,7 @@ "phpunit/phpunit": "*" }, "suggest": { + "ext-dom": "Install the DOM extension to load XML formatted public keys.", "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.", "ext-libsodium": "SSH2/SFTP can make use of some algorithms provided by the libsodium-php extension.", "ext-mcrypt": "Install the Mcrypt extension in order to speed up a few other cryptographic operations.", @@ -6892,7 +6902,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/3.0.14" + "source": "https://github.com/phpseclib/phpseclib/tree/3.0.15" }, "funding": [ { @@ -6908,7 +6918,7 @@ "type": "tidelift" } ], - "time": "2022-04-04T05:15:45+00:00" + "time": "2022-09-02T17:05:08+00:00" }, { "name": "pragmarx/google2fa", @@ -7881,25 +7891,25 @@ }, { "name": "sabre/uri", - "version": "2.2.2", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/sabre-io/uri.git", - "reference": "7cb0f489578afad5006e85cd60f18ff33f2d440d" + "reference": "2ec3dcec9e1586893c9820a12f573f73a71200f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sabre-io/uri/zipball/7cb0f489578afad5006e85cd60f18ff33f2d440d", - "reference": "7cb0f489578afad5006e85cd60f18ff33f2d440d", + "url": "https://api.github.com/repos/sabre-io/uri/zipball/2ec3dcec9e1586893c9820a12f573f73a71200f4", + "reference": "2ec3dcec9e1586893c9820a12f573f73a71200f4", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "~2.17.1", - "phpstan/phpstan": "^0.12", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.0" + "friendsofphp/php-cs-fixer": "^3.9", + "phpstan/phpstan": "^1.8", + "phpunit/phpunit": "^9.0" }, "type": "library", "autoload": { @@ -7934,7 +7944,7 @@ "issues": "https://github.com/sabre-io/uri/issues", "source": "https://github.com/fruux/sabre-uri" }, - "time": "2021-11-04T09:29:58+00:00" + "time": "2022-08-30T14:00:42+00:00" }, { "name": "sabre/xml", @@ -8448,22 +8458,22 @@ }, { "name": "socialiteproviders/manager", - "version": "v4.1.0", + "version": "v4.2.0", "source": { "type": "git", "url": "https://github.com/SocialiteProviders/Manager.git", - "reference": "4e63afbd26dc45ff263591de2a0970436a6a0bf9" + "reference": "738276dfbc2b68a9145db7b3df1588d53db528a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/4e63afbd26dc45ff263591de2a0970436a6a0bf9", - "reference": "4e63afbd26dc45ff263591de2a0970436a6a0bf9", + "url": "https://api.github.com/repos/SocialiteProviders/Manager/zipball/738276dfbc2b68a9145db7b3df1588d53db528a1", + "reference": "738276dfbc2b68a9145db7b3df1588d53db528a1", "shasum": "" }, "require": { "illuminate/support": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "laravel/socialite": "~4.0 || ~5.0", - "php": "^7.2 || ^8.0" + "laravel/socialite": "~5.0", + "php": "^7.4 || ^8.0" }, "require-dev": { "mockery/mockery": "^1.2", @@ -8518,7 +8528,7 @@ "issues": "https://github.com/socialiteproviders/manager/issues", "source": "https://github.com/socialiteproviders/manager" }, - "time": "2022-01-23T22:40:23+00:00" + "time": "2022-09-02T10:20:10+00:00" }, { "name": "socialiteproviders/microsoft", @@ -8783,16 +8793,16 @@ }, { "name": "symfony/console", - "version": "v6.1.3", + "version": "v6.1.4", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "43fcb5c5966b43c56bcfa481368d90d748936ab8" + "reference": "7fccea8728aa2d431a6725b02b3ce759049fc84d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/43fcb5c5966b43c56bcfa481368d90d748936ab8", - "reference": "43fcb5c5966b43c56bcfa481368d90d748936ab8", + "url": "https://api.github.com/repos/symfony/console/zipball/7fccea8728aa2d431a6725b02b3ce759049fc84d", + "reference": "7fccea8728aa2d431a6725b02b3ce759049fc84d", "shasum": "" }, "require": { @@ -8859,7 +8869,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.1.3" + "source": "https://github.com/symfony/console/tree/v6.1.4" }, "funding": [ { @@ -8875,7 +8885,7 @@ "type": "tidelift" } ], - "time": "2022-07-22T14:17:57+00:00" + "time": "2022-08-26T10:32:31+00:00" }, { "name": "symfony/css-selector", @@ -9244,16 +9254,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.1.3", + "version": "v6.1.4", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "c780e677cddda78417fa5187a7c6cd2f21110db9" + "reference": "3f39c04d2630c34019907b02f85672dac99f8659" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/c780e677cddda78417fa5187a7c6cd2f21110db9", - "reference": "c780e677cddda78417fa5187a7c6cd2f21110db9", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/3f39c04d2630c34019907b02f85672dac99f8659", + "reference": "3f39c04d2630c34019907b02f85672dac99f8659", "shasum": "" }, "require": { @@ -9287,7 +9297,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.1.3" + "source": "https://github.com/symfony/filesystem/tree/v6.1.4" }, "funding": [ { @@ -9303,7 +9313,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T14:45:06+00:00" + "time": "2022-08-02T16:17:38+00:00" }, { "name": "symfony/finder", @@ -9371,16 +9381,16 @@ }, { "name": "symfony/http-client", - "version": "v6.1.3", + "version": "v6.1.4", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "1ef59920a9cedf223e8564ae8ad7608cbe799b4d" + "reference": "06dc27cbdcee26d6796c226db5266a0d58359739" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/1ef59920a9cedf223e8564ae8ad7608cbe799b4d", - "reference": "1ef59920a9cedf223e8564ae8ad7608cbe799b4d", + "url": "https://api.github.com/repos/symfony/http-client/zipball/06dc27cbdcee26d6796c226db5266a0d58359739", + "reference": "06dc27cbdcee26d6796c226db5266a0d58359739", "shasum": "" }, "require": { @@ -9435,7 +9445,7 @@ "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-client/tree/v6.1.3" + "source": "https://github.com/symfony/http-client/tree/v6.1.4" }, "funding": [ { @@ -9451,7 +9461,7 @@ "type": "tidelift" } ], - "time": "2022-07-28T13:40:41+00:00" + "time": "2022-08-02T16:17:38+00:00" }, { "name": "symfony/http-client-contracts", @@ -9536,16 +9546,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.1.3", + "version": "v6.1.4", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "b03712c93759a81fc243ecc18ec4637958afebdb" + "reference": "18e0f106a32887bcebef757e5b39c88e39a08f20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/b03712c93759a81fc243ecc18ec4637958afebdb", - "reference": "b03712c93759a81fc243ecc18ec4637958afebdb", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/18e0f106a32887bcebef757e5b39c88e39a08f20", + "reference": "18e0f106a32887bcebef757e5b39c88e39a08f20", "shasum": "" }, "require": { @@ -9556,8 +9566,11 @@ "require-dev": { "predis/predis": "~1.0", "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0" + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" }, "suggest": { "symfony/mime": "To use the file extension guesser" @@ -9588,7 +9601,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.1.3" + "source": "https://github.com/symfony/http-foundation/tree/v6.1.4" }, "funding": [ { @@ -9604,20 +9617,20 @@ "type": "tidelift" } ], - "time": "2022-07-27T15:50:51+00:00" + "time": "2022-08-19T14:27:04+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.1.3", + "version": "v6.1.4", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "0692bc185a1dbb54864686a1fc6785667279da70" + "reference": "2144c53a278254af57fa1e6f71427be656fab6f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/0692bc185a1dbb54864686a1fc6785667279da70", - "reference": "0692bc185a1dbb54864686a1fc6785667279da70", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2144c53a278254af57fa1e6f71427be656fab6f4", + "reference": "2144c53a278254af57fa1e6f71427be656fab6f4", "shasum": "" }, "require": { @@ -9698,7 +9711,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.1.3" + "source": "https://github.com/symfony/http-kernel/tree/v6.1.4" }, "funding": [ { @@ -9714,7 +9727,7 @@ "type": "tidelift" } ], - "time": "2022-07-29T12:59:10+00:00" + "time": "2022-08-26T14:50:30+00:00" }, { "name": "symfony/intl", @@ -9798,16 +9811,16 @@ }, { "name": "symfony/mailer", - "version": "v6.1.3", + "version": "v6.1.4", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "b2db228a93278863d1567f90d7caf26922dbfede" + "reference": "55a7cb8f8518d35e2a039daaec6e1ee20509510e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/b2db228a93278863d1567f90d7caf26922dbfede", - "reference": "b2db228a93278863d1567f90d7caf26922dbfede", + "url": "https://api.github.com/repos/symfony/mailer/zipball/55a7cb8f8518d35e2a039daaec6e1ee20509510e", + "reference": "55a7cb8f8518d35e2a039daaec6e1ee20509510e", "shasum": "" }, "require": { @@ -9852,7 +9865,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.1.3" + "source": "https://github.com/symfony/mailer/tree/v6.1.4" }, "funding": [ { @@ -9868,7 +9881,7 @@ "type": "tidelift" } ], - "time": "2022-07-27T15:50:51+00:00" + "time": "2022-08-03T05:16:05+00:00" }, { "name": "symfony/mailgun-mailer", @@ -9937,16 +9950,16 @@ }, { "name": "symfony/mime", - "version": "v6.1.3", + "version": "v6.1.4", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "9c0247994fc6584da8591ba64b2bffaace9df87d" + "reference": "5d1de2d3c52f8ca469c488f4b9e007e9e9cee0b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/9c0247994fc6584da8591ba64b2bffaace9df87d", - "reference": "9c0247994fc6584da8591ba64b2bffaace9df87d", + "url": "https://api.github.com/repos/symfony/mime/zipball/5d1de2d3c52f8ca469c488f4b9e007e9e9cee0b3", + "reference": "5d1de2d3c52f8ca469c488f4b9e007e9e9cee0b3", "shasum": "" }, "require": { @@ -9998,7 +10011,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.1.3" + "source": "https://github.com/symfony/mime/tree/v6.1.4" }, "funding": [ { @@ -10014,7 +10027,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:46:29+00:00" + "time": "2022-08-19T14:27:04+00:00" }, { "name": "symfony/options-resolver", @@ -11547,16 +11560,16 @@ }, { "name": "symfony/string", - "version": "v6.1.3", + "version": "v6.1.4", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "f35241f45c30bcd9046af2bb200a7086f70e1d6b" + "reference": "290972cad7b364e3befaa74ba0ec729800fb161c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/f35241f45c30bcd9046af2bb200a7086f70e1d6b", - "reference": "f35241f45c30bcd9046af2bb200a7086f70e1d6b", + "url": "https://api.github.com/repos/symfony/string/zipball/290972cad7b364e3befaa74ba0ec729800fb161c", + "reference": "290972cad7b364e3befaa74ba0ec729800fb161c", "shasum": "" }, "require": { @@ -11612,7 +11625,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.1.3" + "source": "https://github.com/symfony/string/tree/v6.1.4" }, "funding": [ { @@ -11628,20 +11641,20 @@ "type": "tidelift" } ], - "time": "2022-07-27T15:50:51+00:00" + "time": "2022-08-12T18:05:43+00:00" }, { "name": "symfony/translation", - "version": "v6.1.3", + "version": "v6.1.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b042e16087d298d08c1f013ff505d16c12a3b1be" + "reference": "45d0f5bb8df7255651ca91c122fab604e776af03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b042e16087d298d08c1f013ff505d16c12a3b1be", - "reference": "b042e16087d298d08c1f013ff505d16c12a3b1be", + "url": "https://api.github.com/repos/symfony/translation/zipball/45d0f5bb8df7255651ca91c122fab604e776af03", + "reference": "45d0f5bb8df7255651ca91c122fab604e776af03", "shasum": "" }, "require": { @@ -11708,7 +11721,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.1.3" + "source": "https://github.com/symfony/translation/tree/v6.1.4" }, "funding": [ { @@ -11724,7 +11737,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:46:29+00:00" + "time": "2022-08-02T16:17:38+00:00" }, { "name": "symfony/translation-contracts", @@ -11809,16 +11822,16 @@ }, { "name": "symfony/validator", - "version": "v6.1.3", + "version": "v6.1.4", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "14a14730609ad6c4f82153ddebf263800833b1cc" + "reference": "14ec426b9c8ca8cf02bd863a645fb0cc0d73db79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/14a14730609ad6c4f82153ddebf263800833b1cc", - "reference": "14a14730609ad6c4f82153ddebf263800833b1cc", + "url": "https://api.github.com/repos/symfony/validator/zipball/14ec426b9c8ca8cf02bd863a645fb0cc0d73db79", + "reference": "14ec426b9c8ca8cf02bd863a645fb0cc0d73db79", "shasum": "" }, "require": { @@ -11897,7 +11910,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.1.3" + "source": "https://github.com/symfony/validator/tree/v6.1.4" }, "funding": [ { @@ -11913,7 +11926,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:46:29+00:00" + "time": "2022-08-12T13:09:07+00:00" }, { "name": "symfony/var-dumper", @@ -12121,16 +12134,16 @@ }, { "name": "twilio/sdk", - "version": "6.40.0", + "version": "6.41.0", "source": { "type": "git", "url": "git@github.com:twilio/twilio-php.git", - "reference": "86aa13d855f4624d07a5e6e8c0b7f2096d7d856c" + "reference": "3e6b81216052aac086efd6334a0fc358c38c2e20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twilio/twilio-php/zipball/86aa13d855f4624d07a5e6e8c0b7f2096d7d856c", - "reference": "86aa13d855f4624d07a5e6e8c0b7f2096d7d856c", + "url": "https://api.github.com/repos/twilio/twilio-php/zipball/3e6b81216052aac086efd6334a0fc358c38c2e20", + "reference": "3e6b81216052aac086efd6334a0fc358c38c2e20", "shasum": "" }, "require": { @@ -12166,7 +12179,7 @@ "sms", "twilio" ], - "time": "2022-07-21T19:54:34+00:00" + "time": "2022-08-24T20:39:42+00:00" }, { "name": "vlucas/phpdotenv", @@ -12812,16 +12825,16 @@ }, { "name": "brianium/paratest", - "version": "v6.6.1", + "version": "v6.6.3", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "ae5803ce4558f855c7d955baa2d90b93ec40c4b7" + "reference": "f2d781bb9136cda2f5e73ee778049e80ba681cf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/ae5803ce4558f855c7d955baa2d90b93ec40c4b7", - "reference": "ae5803ce4558f855c7d955baa2d90b93ec40c4b7", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/f2d781bb9136cda2f5e73ee778049e80ba681cf6", + "reference": "f2d781bb9136cda2f5e73ee778049e80ba681cf6", "shasum": "" }, "require": { @@ -12831,12 +12844,13 @@ "ext-simplexml": "*", "jean85/pretty-package-versions": "^2.0.5", "php": "^7.3 || ^8.0", - "phpunit/php-code-coverage": "^9.2.15", + "phpunit/php-code-coverage": "^9.2.16", "phpunit/php-file-iterator": "^3.0.6", "phpunit/php-timer": "^5.0.3", - "phpunit/phpunit": "^9.5.21", + "phpunit/phpunit": "^9.5.23", "sebastian/environment": "^5.1.4", "symfony/console": "^5.4.9 || ^6.1.2", + "symfony/polyfill-php80": "^v1.26.0", "symfony/process": "^5.4.8 || ^6.1.0" }, "require-dev": { @@ -12847,7 +12861,7 @@ "malukenho/mcbumpface": "^1.1.5", "squizlabs/php_codesniffer": "^3.7.1", "symfony/filesystem": "^5.4.9 || ^6.1.0", - "vimeo/psalm": "^4.24.0" + "vimeo/psalm": "^4.26.0" }, "bin": [ "bin/paratest", @@ -12888,7 +12902,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v6.6.1" + "source": "https://github.com/paratestphp/paratest/tree/v6.6.3" }, "funding": [ { @@ -12900,7 +12914,7 @@ "type": "paypal" } ], - "time": "2022-07-22T14:07:17+00:00" + "time": "2022-08-25T05:44:14+00:00" }, { "name": "composer/package-versions-deprecated", @@ -13452,59 +13466,6 @@ ], "time": "2022-03-03T08:28:38+00:00" }, - { - "name": "facade/ignition-contracts", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/facade/ignition-contracts.git", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/facade/ignition-contracts/zipball/3c921a1cdba35b68a7f0ccffc6dffc1995b18267", - "reference": "3c921a1cdba35b68a7f0ccffc6dffc1995b18267", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^v2.15.8", - "phpunit/phpunit": "^9.3.11", - "vimeo/psalm": "^3.17.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Facade\\IgnitionContracts\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://flareapp.io", - "role": "Developer" - } - ], - "description": "Solution contracts for Ignition", - "homepage": "https://github.com/facade/ignition-contracts", - "keywords": [ - "contracts", - "flare", - "ignition" - ], - "support": { - "issues": "https://github.com/facade/ignition-contracts/issues", - "source": "https://github.com/facade/ignition-contracts/tree/1.0.2" - }, - "time": "2020-10-16T08:27:54+00:00" - }, { "name": "felixfbecker/advanced-json-rpc", "version": "v3.2.1", @@ -14051,32 +14012,32 @@ }, { "name": "nunomaduro/collision", - "version": "v6.2.1", + "version": "v6.3.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "5f058f7e39278b701e455b3c82ec5298cf001d89" + "reference": "17f600e2e8872856ff2846243efb74ad4b6da531" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/5f058f7e39278b701e455b3c82ec5298cf001d89", - "reference": "5f058f7e39278b701e455b3c82ec5298cf001d89", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/17f600e2e8872856ff2846243efb74ad4b6da531", + "reference": "17f600e2e8872856ff2846243efb74ad4b6da531", "shasum": "" }, "require": { - "facade/ignition-contracts": "^1.0.2", "filp/whoops": "^2.14.5", "php": "^8.0.0", "symfony/console": "^6.0.2" }, "require-dev": { "brianium/paratest": "^6.4.1", - "laravel/framework": "^9.7", - "laravel/pint": "^0.2.1", - "nunomaduro/larastan": "^1.0.2", + "laravel/framework": "^9.26.1", + "laravel/pint": "^1.1.1", + "nunomaduro/larastan": "^1.0.3", "nunomaduro/mock-final-classes": "^1.1.0", - "orchestra/testbench": "^7.3.0", - "phpunit/phpunit": "^9.5.11" + "orchestra/testbench": "^7.7", + "phpunit/phpunit": "^9.5.23", + "spatie/ignition": "^1.4.1" }, "type": "library", "extra": { @@ -14135,7 +14096,7 @@ "type": "patreon" } ], - "time": "2022-06-27T16:11:16+00:00" + "time": "2022-08-29T09:11:20+00:00" }, { "name": "openlss/lib-array2xml", @@ -14526,92 +14487,25 @@ }, "time": "2022-03-15T21:29:03+00:00" }, - { - "name": "phpspec/prophecy", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" - }, - "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], - "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" - }, - "time": "2021-12-08T12:19:24+00:00" - }, { "name": "phpunit/php-code-coverage", - "version": "9.2.15", + "version": "9.2.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f" + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2e9da11878c4202f97915c1cb4bb1ca318a63f5f", - "reference": "2e9da11878c4202f97915c1cb4bb1ca318a63f5f", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", + "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.14", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -14660,7 +14554,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.15" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" }, "funding": [ { @@ -14668,7 +14562,7 @@ "type": "github" } ], - "time": "2022-03-07T09:28:20+00:00" + "time": "2022-08-30T12:24:04+00:00" }, { "name": "phpunit/php-file-iterator", @@ -14913,16 +14807,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.21", + "version": "9.5.24", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1" + "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0e32b76be457de00e83213528f6bb37e2a38fcb1", - "reference": "0e32b76be457de00e83213528f6bb37e2a38fcb1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", + "reference": "d0aa6097bef9fd42458a9b3c49da32c6ce6129c5", "shasum": "" }, "require": { @@ -14937,7 +14831,6 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", "phpunit/php-code-coverage": "^9.2.13", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", @@ -14952,12 +14845,9 @@ "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.0", + "sebastian/type": "^3.1", "sebastian/version": "^3.0.2" }, - "require-dev": { - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { "ext-soap": "*", "ext-xdebug": "*" @@ -14999,7 +14889,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.21" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.24" }, "funding": [ { @@ -15011,7 +14901,7 @@ "type": "github" } ], - "time": "2022-06-19T12:14:25+00:00" + "time": "2022-08-30T07:42:16+00:00" }, { "name": "sebastian/cli-parser", @@ -15870,16 +15760,16 @@ }, { "name": "sebastian/type", - "version": "3.0.0", + "version": "3.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad" + "reference": "fb44e1cc6e557418387ad815780360057e40753e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", - "reference": "b233b84bc4465aff7b57cf1c4bc75c86d00d6dad", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb44e1cc6e557418387ad815780360057e40753e", + "reference": "fb44e1cc6e557418387ad815780360057e40753e", "shasum": "" }, "require": { @@ -15891,7 +15781,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -15914,7 +15804,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.1.0" }, "funding": [ { @@ -15922,7 +15812,7 @@ "type": "github" } ], - "time": "2022-03-15T09:54:48+00:00" + "time": "2022-08-29T06:55:37+00:00" }, { "name": "sebastian/version", @@ -16110,16 +16000,16 @@ }, { "name": "spatie/ignition", - "version": "1.3.1", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/spatie/ignition.git", - "reference": "997363fbcce809b1e55f571997d49017f9c623d9" + "reference": "dd3d456779108d7078baf4e43f8c2b937d9794a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/997363fbcce809b1e55f571997d49017f9c623d9", - "reference": "997363fbcce809b1e55f571997d49017f9c623d9", + "url": "https://api.github.com/repos/spatie/ignition/zipball/dd3d456779108d7078baf4e43f8c2b937d9794a1", + "reference": "dd3d456779108d7078baf4e43f8c2b937d9794a1", "shasum": "" }, "require": { @@ -16181,20 +16071,20 @@ "type": "github" } ], - "time": "2022-05-16T13:16:07+00:00" + "time": "2022-08-26T11:51:15+00:00" }, { "name": "spatie/laravel-ignition", - "version": "1.3.1", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "fe37a0eafe6ea040804255c70e9808af13314f87" + "reference": "29deea5d9cf921590184be6956e657c4f4566440" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/fe37a0eafe6ea040804255c70e9808af13314f87", - "reference": "fe37a0eafe6ea040804255c70e9808af13314f87", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/29deea5d9cf921590184be6956e657c4f4566440", + "reference": "29deea5d9cf921590184be6956e657c4f4566440", "shasum": "" }, "require": { @@ -16271,7 +16161,7 @@ "type": "github" } ], - "time": "2022-06-17T06:28:57+00:00" + "time": "2022-09-01T11:31:14+00:00" }, { "name": "swagger-api/swagger-ui", @@ -16336,16 +16226,16 @@ }, { "name": "symfony/yaml", - "version": "v5.4.11", + "version": "v5.4.12", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "05d4ea560f3402c6c116afd99fdc66e60eda227e" + "reference": "7a3aa21ac8ab1a96cc6de5bbcab4bc9fc943b18c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/05d4ea560f3402c6c116afd99fdc66e60eda227e", - "reference": "05d4ea560f3402c6c116afd99fdc66e60eda227e", + "url": "https://api.github.com/repos/symfony/yaml/zipball/7a3aa21ac8ab1a96cc6de5bbcab4bc9fc943b18c", + "reference": "7a3aa21ac8ab1a96cc6de5bbcab4bc9fc943b18c", "shasum": "" }, "require": { @@ -16391,7 +16281,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v5.4.11" + "source": "https://github.com/symfony/yaml/tree/v5.4.12" }, "funding": [ { @@ -16407,7 +16297,7 @@ "type": "tidelift" } ], - "time": "2022-06-27T16:58:25+00:00" + "time": "2022-08-02T15:52:22+00:00" }, { "name": "theseer/tokenizer", @@ -16461,16 +16351,16 @@ }, { "name": "vimeo/psalm", - "version": "4.26.0", + "version": "4.27.0", "source": { "type": "git", "url": "https://github.com/vimeo/psalm.git", - "reference": "6998fabb2bf528b65777bf9941920888d23c03ac" + "reference": "faf106e717c37b8c81721845dba9de3d8deed8ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/6998fabb2bf528b65777bf9941920888d23c03ac", - "reference": "6998fabb2bf528b65777bf9941920888d23c03ac", + "url": "https://api.github.com/repos/vimeo/psalm/zipball/faf106e717c37b8c81721845dba9de3d8deed8ff", + "reference": "faf106e717c37b8c81721845dba9de3d8deed8ff", "shasum": "" }, "require": { @@ -16562,9 +16452,9 @@ ], "support": { "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/4.26.0" + "source": "https://github.com/vimeo/psalm/tree/4.27.0" }, - "time": "2022-07-31T13:10:26+00:00" + "time": "2022-08-31T13:47:09+00:00" }, { "name": "webmozart/path-util", @@ -16705,7 +16595,7 @@ "ext-libxml": "*" }, "platform-dev": { - "php": "^7.4|^8.0" + "php": "^8.1" }, "plugin-api-version": "2.3.0" } diff --git a/config/ninja.php b/config/ninja.php index 7caef91200..ebead6b85e 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.5.19', - 'app_tag' => '5.5.19', + 'app_version' => '5.5.20', + 'app_tag' => '5.5.20', 'minimum_client_version' => '5.0.16', 'terms_version' => '1.0.1', 'api_secret' => env('API_SECRET', ''), diff --git a/database/migrations/2022_09_05_024719_update_designs_for_tech_template.php b/database/migrations/2022_09_05_024719_update_designs_for_tech_template.php new file mode 100644 index 0000000000..f0f45d4a4b --- /dev/null +++ b/database/migrations/2022_09_05_024719_update_designs_for_tech_template.php @@ -0,0 +1,28 @@ + 33, 'name' => 'Serbian', 'locale' => 'sr']; + Language::create($serbian); + + } + + if(!Language::find(34)) { + + $slovak = ['id' => 34, 'name' => 'Slovak', 'locale' => 'sk']; + Language::create($slovak); + + } + + if(!Language::find(35)) { + + $estonia = ['id' => 35, 'name' => 'Estonian', 'locale' => 'et']; + Language::create($estonia); + + } + + if(!Language::find(36)) { + + $bulgarian = ['id' => 36, 'name' => 'Bulgarian', 'locale' => 'bg']; + Language::create($bulgarian); + + } + + if(!Language::find(37)) { + + $hebrew = ['id' => 37, 'name' => 'Hebrew', 'locale' => 'he']; + Language::create($hebrew); + + } } } diff --git a/lang/en/texts.php b/lang/en/texts.php index 920fc80202..f829dee616 100644 --- a/lang/en/texts.php +++ b/lang/en/texts.php @@ -4770,6 +4770,13 @@ $LANG = array( 'archive_purchase_order' => 'Archive Purchase Order', 'restore_purchase_order' => 'Restore Purchase Order', 'delete_purchase_order' => 'Delete Purchase Order', + 'connect' => 'Connect', + 'mark_paid_payment_email' => 'Mark Paid Payment Email', + 'convert_to_project' => 'Convert to Project', + 'client_email' => 'Client Email', + 'invoice_task_project' => 'Invoice Task Project', + 'invoice_task_project_help' => 'Add the project to the invoice line items', + ); return $LANG; diff --git a/public/css/app.css b/public/css/app.css index 0c2580b8ed..e100223d1f 100755 --- a/public/css/app.css +++ b/public/css/app.css @@ -1,3 +1,3 @@ /*! tailwindcss v2.2.19 | 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=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}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:#9ca3af;opacity:1}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;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}}.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(239,68,68,var(--tw-bg-opacity));color:rgba(255,255,255,var(--tw-text-opacity))}.button-danger:hover{--tw-bg-opacity:1;background-color:rgba(220,38,38,var(--tw-bg-opacity))}.button-secondary{--tw-bg-opacity:1;background-color:rgba(243,244,246,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(17,24,39,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(243,244,246,var(--tw-bg-opacity));border-left-width:2px;margin-bottom:.25rem;margin-top:.5rem;padding:.25rem .75rem}.validation-fail{border-color:rgba(239,68,68,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(16,185,129,var(--tw-border-opacity))}.input{--tw-border-opacity:1;align-items:center;border-color:rgba(209,213,219,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(209,213,219,var(--tw-border-opacity));border-width:1px}.alert{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity));border-color:rgba(156,163,175,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(16,185,129,var(--tw-border-opacity))}.alert-failure{--tw-border-opacity:1;border-color:rgba(239,68,68,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(243,244,246,var(--tw-bg-opacity));color:rgba(31,41,55,var(--tw-text-opacity))}.badge-light,.badge-primary{--tw-bg-opacity:1;--tw-text-opacity:1}.badge-primary{background-color:rgba(191,219,254,var(--tw-bg-opacity));color:rgba(59,130,246,var(--tw-text-opacity))}.badge-danger{background-color:rgba(254,226,226,var(--tw-bg-opacity));color:rgba(239,68,68,var(--tw-text-opacity))}.badge-danger,.badge-success{--tw-bg-opacity:1;--tw-text-opacity:1}.badge-success{background-color:rgba(209,250,229,var(--tw-bg-opacity));color:rgba(16,185,129,var(--tw-text-opacity))}.badge-secondary{background-color:rgba(31,41,55,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,243,199,var(--tw-bg-opacity));color:rgba(217,119,6,var(--tw-text-opacity))}.badge-info{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(219,234,254,var(--tw-bg-opacity));color:rgba(59,130,246,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(209,213,219,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{--tw-border-opacity:1;align-items:center;border-color:rgba(209,213,219,var(--tw-border-opacity));border-radius:.25rem;border-width:1px;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;padding:.5rem 1rem}.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(209,213,219,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(37,99,235,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(209,213,219,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(156,163,175,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(37,99,235,var(--tw-border-opacity))!important;color:rgba(37,99,235,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}.visible{visibility:visible}.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-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}.contents{display:contents}.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}.flex-grow{flex-grow:1}.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:0px}.-translate-x-full{--tw-translate-x:-100%}.translate-y-0{--tw-translate-y:0px}.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}.resize{resize:both}.list-none{list-style-type:none}.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-col-reverse{flex-direction:column-reverse}.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))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*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-dashed{border-style:dashed}.border-none{border-style:none}.border-transparent{border-color:transparent}.border-gray-100{--tw-border-opacity:1;border-color:rgba(243,244,246,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(209,213,219,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(252,165,165,var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgba(248,113,113,var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgba(16,185,129,var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgba(59,130,246,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(31,41,55,var(--tw-border-opacity))}.hover\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgba(37,99,235,var(--tw-border-opacity))}.focus\:border-blue-300:focus{--tw-border-opacity:1;border-color:rgba(147,197,253,var(--tw-border-opacity))}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgba(59,130,246,var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity:1;border-color:rgba(99,102,241,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(243,244,246,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(254,226,226,var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgba(239,246,255,var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgba(59,130,246,var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgba(37,99,235,var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgba(29,78,216,var(--tw-bg-opacity))}.bg-indigo-600{--tw-bg-opacity:1;background-color:rgba(79,70,229,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgba(59,130,246,var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgba(37,99,235,var(--tw-bg-opacity))}.hover\:bg-indigo-700:hover{--tw-bg-opacity:1;background-color:rgba(67,56,202,var(--tw-bg-opacity))}.focus\:bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity))}.focus\:bg-gray-600:focus{--tw-bg-opacity:1;background-color:rgba(75,85,99,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-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-8{padding:2rem}.p-10{padding:2.5rem}.p-2\.5{padding:.625rem}.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-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}.italic{font-style:italic}.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-black{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(209,213,219,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(156,163,175,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(31,41,55,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgba(248,113,113,var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgba(239,68,68,var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgba(220,38,38,var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgba(5,150,105,var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgba(59,130,246,var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgba(37,99,235,var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity:1;color:rgba(29,78,216,var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity:1;color:rgba(79,70,229,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(209,213,219,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(31,41,55,var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgba(37,99,235,var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity:1;color:rgba(49,46,129,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-900:focus{--tw-text-opacity:1;color:rgba(17,24,39,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}.hover\:opacity-80:hover{opacity:.8}*,:after,:before{--tw-shadow:0 0 #0000}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(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,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(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,.1),0 10px 10px -5px rgba(0,0,0,.04)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(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,.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(59,130,246,.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-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(59,130,246,var(--tw-ring-opacity))}.focus\:ring-indigo-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(99,102,241,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:0px}.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}} +/*! 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=reset],[type=submit],button{-webkit-appearance:button}::-moz-focus-inner{border-style:none;padding:0}legend{padding:0}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}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:#9ca3af;opacity:1}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;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}}.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(239,68,68,var(--tw-bg-opacity));color:rgba(255,255,255,var(--tw-text-opacity))}.button-danger:hover{--tw-bg-opacity:1;background-color:rgba(220,38,38,var(--tw-bg-opacity))}.button-secondary{--tw-bg-opacity:1;background-color:rgba(243,244,246,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(17,24,39,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(243,244,246,var(--tw-bg-opacity));border-left-width:2px;margin-bottom:.25rem;margin-top:.5rem;padding:.25rem .75rem}.validation-fail{border-color:rgba(239,68,68,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(16,185,129,var(--tw-border-opacity))}.input{--tw-border-opacity:1;align-items:center;border-color:rgba(209,213,219,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(209,213,219,var(--tw-border-opacity));border-width:1px}.alert{--tw-border-opacity:1;--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity));border-color:rgba(156,163,175,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(16,185,129,var(--tw-border-opacity))}.alert-failure{--tw-border-opacity:1;border-color:rgba(239,68,68,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(243,244,246,var(--tw-bg-opacity));color:rgba(31,41,55,var(--tw-text-opacity))}.badge-light,.badge-primary{--tw-bg-opacity:1;--tw-text-opacity:1}.badge-primary{background-color:rgba(191,219,254,var(--tw-bg-opacity));color:rgba(59,130,246,var(--tw-text-opacity))}.badge-danger{background-color:rgba(254,226,226,var(--tw-bg-opacity));color:rgba(239,68,68,var(--tw-text-opacity))}.badge-danger,.badge-success{--tw-bg-opacity:1;--tw-text-opacity:1}.badge-success{background-color:rgba(209,250,229,var(--tw-bg-opacity));color:rgba(16,185,129,var(--tw-text-opacity))}.badge-secondary{background-color:rgba(31,41,55,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,243,199,var(--tw-bg-opacity));color:rgba(217,119,6,var(--tw-text-opacity))}.badge-info{--tw-bg-opacity:1;--tw-text-opacity:1;background-color:rgba(219,234,254,var(--tw-bg-opacity));color:rgba(59,130,246,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(209,213,219,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{--tw-border-opacity:1;align-items:center;border-color:rgba(209,213,219,var(--tw-border-opacity));border-radius:.25rem;border-width:1px;font-size:.875rem;line-height:1.25rem;margin-top:.5rem;padding:.5rem 1rem}.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(209,213,219,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(37,99,235,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(209,213,219,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(156,163,175,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(37,99,235,var(--tw-border-opacity))!important;color:rgba(37,99,235,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}.visible{visibility:visible}.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-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}.contents{display:contents}.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}.flex-grow{flex-grow:1}.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:0px}.-translate-x-full{--tw-translate-x:-100%}.translate-y-0{--tw-translate-y:0px}.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}.resize{resize:both}.list-none{list-style-type:none}.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-col-reverse{flex-direction:column-reverse}.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))}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(1rem*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-dashed{border-style:dashed}.border-none{border-style:none}.border-transparent{border-color:transparent}.border-gray-100{--tw-border-opacity:1;border-color:rgba(243,244,246,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(209,213,219,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(252,165,165,var(--tw-border-opacity))}.border-red-400{--tw-border-opacity:1;border-color:rgba(248,113,113,var(--tw-border-opacity))}.border-green-500{--tw-border-opacity:1;border-color:rgba(16,185,129,var(--tw-border-opacity))}.border-blue-500{--tw-border-opacity:1;border-color:rgba(59,130,246,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(31,41,55,var(--tw-border-opacity))}.hover\:border-blue-600:hover{--tw-border-opacity:1;border-color:rgba(37,99,235,var(--tw-border-opacity))}.focus\:border-blue-300:focus{--tw-border-opacity:1;border-color:rgba(147,197,253,var(--tw-border-opacity))}.focus\:border-blue-500:focus{--tw-border-opacity:1;border-color:rgba(59,130,246,var(--tw-border-opacity))}.focus\:border-indigo-500:focus{--tw-border-opacity:1;border-color:rgba(99,102,241,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(243,244,246,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(254,226,226,var(--tw-bg-opacity))}.bg-blue-50{--tw-bg-opacity:1;background-color:rgba(239,246,255,var(--tw-bg-opacity))}.bg-blue-500{--tw-bg-opacity:1;background-color:rgba(59,130,246,var(--tw-bg-opacity))}.bg-blue-600{--tw-bg-opacity:1;background-color:rgba(37,99,235,var(--tw-bg-opacity))}.bg-blue-700{--tw-bg-opacity:1;background-color:rgba(29,78,216,var(--tw-bg-opacity))}.hover\:bg-gray-100:hover{--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity))}.hover\:bg-blue-500:hover{--tw-bg-opacity:1;background-color:rgba(59,130,246,var(--tw-bg-opacity))}.hover\:bg-blue-600:hover{--tw-bg-opacity:1;background-color:rgba(37,99,235,var(--tw-bg-opacity))}.focus\:bg-gray-100:focus{--tw-bg-opacity:1;background-color:rgba(243,244,246,var(--tw-bg-opacity))}.focus\:bg-gray-600:focus{--tw-bg-opacity:1;background-color:rgba(75,85,99,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-2{padding:.5rem}.p-3{padding:.75rem}.p-4{padding:1rem}.p-8{padding:2rem}.p-10{padding:2.5rem}.p-2\.5{padding:.625rem}.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}.italic{font-style:italic}.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-black{--tw-text-opacity:1;color:rgba(0,0,0,var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgba(255,255,255,var(--tw-text-opacity))}.text-gray-300{--tw-text-opacity:1;color:rgba(209,213,219,var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity:1;color:rgba(156,163,175,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(31,41,55,var(--tw-text-opacity))}.text-gray-900{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}.text-red-400{--tw-text-opacity:1;color:rgba(248,113,113,var(--tw-text-opacity))}.text-red-500{--tw-text-opacity:1;color:rgba(239,68,68,var(--tw-text-opacity))}.text-red-600{--tw-text-opacity:1;color:rgba(220,38,38,var(--tw-text-opacity))}.text-green-600{--tw-text-opacity:1;color:rgba(5,150,105,var(--tw-text-opacity))}.text-blue-500{--tw-text-opacity:1;color:rgba(59,130,246,var(--tw-text-opacity))}.text-blue-600{--tw-text-opacity:1;color:rgba(37,99,235,var(--tw-text-opacity))}.text-blue-700{--tw-text-opacity:1;color:rgba(29,78,216,var(--tw-text-opacity))}.text-indigo-600{--tw-text-opacity:1;color:rgba(79,70,229,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(209,213,219,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(31,41,55,var(--tw-text-opacity))}.hover\:text-gray-900:hover{--tw-text-opacity:1;color:rgba(17,24,39,var(--tw-text-opacity))}.hover\:text-blue-600:hover{--tw-text-opacity:1;color:rgba(37,99,235,var(--tw-text-opacity))}.hover\:text-indigo-900:hover{--tw-text-opacity:1;color:rgba(49,46,129,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-900:focus{--tw-text-opacity:1;color:rgba(17,24,39,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}.hover\:opacity-80:hover{opacity:.8}*,:after,:before{--tw-shadow:0 0 #0000}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(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,.1),0 1px 2px 0 rgba(0,0,0,.06)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(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,.1),0 10px 10px -5px rgba(0,0,0,.04)}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -2px rgba(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,.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(59,130,246,.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-blue-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(59,130,246,var(--tw-ring-opacity))}.focus\:ring-indigo-500:focus{--tw-ring-opacity:1;--tw-ring-color:rgba(99,102,241,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:0px}.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-left{text-align:left}.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}} diff --git a/public/js/clients/payments/stripe-credit-card.js b/public/js/clients/payments/stripe-credit-card.js index 4d941ae992..7741354d94 100755 --- a/public/js/clients/payments/stripe-credit-card.js +++ b/public/js/clients/payments/stripe-credit-card.js @@ -1,2 +1,2 @@ /*! For license information please see stripe-credit-card.js.LICENSE.txt */ -(()=>{var e,t,n,o,a,i,r,s;function u(e,t){for(var n=0;n{var e,t,n,o,a,r,i,s;function u(e,t){for(var n=0;n { if (result.error) { - return this.handleFailure(result); + return this.handleFailure(result.error.message); } return this.handleSuccessfulAuthorization(result); diff --git a/resources/views/pdf-designs/tech.html b/resources/views/pdf-designs/tech.html index 70d0973cdb..cac33a1117 100644 --- a/resources/views/pdf-designs/tech.html +++ b/resources/views/pdf-designs/tech.html @@ -325,12 +325,12 @@
- $from_label: + $to_label:
- $to_label: + $from_label:
diff --git a/resources/views/portal/ninja2020/auth/register.blade.php b/resources/views/portal/ninja2020/auth/register.blade.php index 9a8f13540c..23fd243113 100644 --- a/resources/views/portal/ninja2020/auth/register.blade.php +++ b/resources/views/portal/ninja2020/auth/register.blade.php @@ -2,6 +2,7 @@ @section('meta_title', ctrans('texts.register')) @section('body') +
@@ -10,7 +11,7 @@

{{ ctrans('texts.register') }}

{{ ctrans('texts.register_label') }}

-
+ @if($register_company) @endif @@ -40,19 +41,19 @@ class="input w-full" type="email" name="{{ $field['key'] }}" - value="" - {{ $field['required'] ? 'required' : '' }} /> + value="{{ old($field['key']) }}" + /> @elseif($field['key'] === 'password') + /> @elseif($field['key'] === 'country_id') + + + + + + + +