mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-07-09 03:14:30 -04:00
commit
5f9b019fee
@ -3,7 +3,6 @@
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||

|

|
||||||

|
|
||||||
[](https://www.codacy.com/gh/turbo124/invoiceninja/dashboard?utm_source=github.com&utm_medium=referral&utm_content=turbo124/invoiceninja&utm_campaign=Badge_Grade)
|
[](https://www.codacy.com/gh/turbo124/invoiceninja/dashboard?utm_source=github.com&utm_medium=referral&utm_content=turbo124/invoiceninja&utm_campaign=Badge_Grade)
|
||||||
<a href="https://cla-assistant.io/invoiceninja/invoiceninja"><img src="https://cla-assistant.io/readme/badge/invoiceninja/invoiceninja" alt="CLA assistant" /></a>
|
<a href="https://cla-assistant.io/invoiceninja/invoiceninja"><img src="https://cla-assistant.io/readme/badge/invoiceninja/invoiceninja" alt="CLA assistant" /></a>
|
||||||
|
|
||||||
|
@ -1 +1 @@
|
|||||||
5.5.38
|
5.5.39
|
@ -15,6 +15,7 @@ use App\Libraries\MultiDB;
|
|||||||
use App\Models\Backup;
|
use App\Models\Backup;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
use App\Models\Design;
|
use App\Models\Design;
|
||||||
|
use App\Models\Document;
|
||||||
use Illuminate\Console\Command;
|
use Illuminate\Console\Command;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use stdClass;
|
use stdClass;
|
||||||
@ -76,29 +77,51 @@ class BackupUpdate extends Command
|
|||||||
set_time_limit(0);
|
set_time_limit(0);
|
||||||
|
|
||||||
//logos
|
//logos
|
||||||
|
Company::cursor()
|
||||||
Company::query()
|
|
||||||
->cursor()
|
|
||||||
->each(function ($company){
|
->each(function ($company){
|
||||||
|
|
||||||
$logo = @file_get_contents($company->present()->logo());
|
$company_logo = $company->present()->logo();
|
||||||
|
|
||||||
|
if($company_logo == 'https://invoicing.co/images/new_logo.png')
|
||||||
|
return;
|
||||||
|
|
||||||
|
$logo = @file_get_contents($company_logo);
|
||||||
|
|
||||||
if($logo){
|
if($logo){
|
||||||
|
|
||||||
$path = str_replace("https://object.invoicing.co/", "", $company->present()->logo());
|
$path = str_replace("https://objects.invoicing.co/", "", $company->present()->logo());
|
||||||
$path = str_replace("https://v5-at-backup.us-southeast-1.linodeobjects.com/", "", $path);
|
$path = str_replace("https://v5-at-backup.us-southeast-1.linodeobjects.com/", "", $path);
|
||||||
|
|
||||||
Storage::disk($this->option('disk'))->put($path, $logo);
|
Storage::disk($this->option('disk'))->put($path, $logo);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
//documents
|
//documents
|
||||||
|
Document::cursor()
|
||||||
|
->each(function ($document){
|
||||||
|
|
||||||
|
$doc_bin = $document->getFile();
|
||||||
|
|
||||||
|
if($doc_bin)
|
||||||
|
Storage::disk($this->option('disk'))->put($document->url, $doc_bin);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
//backups
|
//backups
|
||||||
|
Backup::cursor()
|
||||||
|
->each(function ($backup){
|
||||||
|
|
||||||
|
$backup_bin = Storage::disk('s3')->get($backup->filename);
|
||||||
|
|
||||||
|
if($backup_bin)
|
||||||
|
Storage::disk($this->option('disk'))->put($backup->filename, $backup_bin);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -102,6 +102,9 @@ class ProductFilters extends QueryFilters
|
|||||||
{
|
{
|
||||||
$sort_col = explode('|', $sort);
|
$sort_col = explode('|', $sort);
|
||||||
|
|
||||||
|
if(!is_array($sort_col))
|
||||||
|
return $this->builder;
|
||||||
|
|
||||||
return $this->builder->orderBy($sort_col[0], $sort_col[1]);
|
return $this->builder->orderBy($sort_col[0], $sort_col[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
92
app/Helpers/Epc/EpcQrGenerator.php
Normal file
92
app/Helpers/Epc/EpcQrGenerator.php
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Helpers\Epc;
|
||||||
|
|
||||||
|
use App\Models\Company;
|
||||||
|
use App\Models\Invoice;
|
||||||
|
use App\Utils\Ninja;
|
||||||
|
use BaconQrCode\Renderer\ImageRenderer;
|
||||||
|
use BaconQrCode\Renderer\Image\SvgImageBackEnd;
|
||||||
|
use BaconQrCode\Renderer\RendererStyle\RendererStyle;
|
||||||
|
use BaconQrCode\Writer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EpcQrGenerator.
|
||||||
|
*/
|
||||||
|
class EpcQrGenerator
|
||||||
|
{
|
||||||
|
|
||||||
|
private array $sepa = [
|
||||||
|
'serviceTag' => 'BCD',
|
||||||
|
'version' => 2,
|
||||||
|
'characterSet' => 1,
|
||||||
|
'identification' => 'SCT',
|
||||||
|
'bic' => '',
|
||||||
|
'purpose' => '',
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
|
public function __construct(protected Company $company, protected Invoice $invoice, protected float $amount){}
|
||||||
|
|
||||||
|
public function getQrCode()
|
||||||
|
{
|
||||||
|
|
||||||
|
$renderer = new ImageRenderer(
|
||||||
|
new RendererStyle(200),
|
||||||
|
new SvgImageBackEnd()
|
||||||
|
);
|
||||||
|
$writer = new Writer($renderer);
|
||||||
|
|
||||||
|
$this->validateFields();
|
||||||
|
|
||||||
|
$qr = $writer->writeString($this->encodeMessage());
|
||||||
|
|
||||||
|
return "<svg viewBox='0 0 200 200' width='200' height='200' x='0' y='0' xmlns='http://www.w3.org/2000/svg'>
|
||||||
|
<rect x='0' y='0' width='100%'' height='100%' />{$qr}</svg>";
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public function encodeMessage()
|
||||||
|
{
|
||||||
|
|
||||||
|
return rtrim(implode("\n", array(
|
||||||
|
$this->sepa['serviceTag'],
|
||||||
|
sprintf('%03d', $this->sepa['version']),
|
||||||
|
$this->sepa['characterSet'],
|
||||||
|
$this->sepa['identification'],
|
||||||
|
isset($this->company?->custom_fields?->company2) ? $this->company->settings->custom_value2 : '',
|
||||||
|
$this->company->present()->name(),
|
||||||
|
isset($this->company?->custom_fields?->company1) ? $this->company->settings->custom_value1 : '',
|
||||||
|
$this->formatMoney($this->amount),
|
||||||
|
$this->sepa['purpose'],
|
||||||
|
substr($this->invoice->number,0,34),
|
||||||
|
substr($this->invoice->public_notes,0,139),
|
||||||
|
''
|
||||||
|
)), "\n");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function validateFields()
|
||||||
|
{
|
||||||
|
|
||||||
|
if(Ninja::isSelfHost() && isset($this->company?->custom_fields?->company2))
|
||||||
|
nlog('The BIC field is not present and _may_ be a required fields for EPC QR codes');
|
||||||
|
|
||||||
|
if(Ninja::isSelfHost() && isset($this->company?->custom_fields?->company1))
|
||||||
|
nlog('The IBAN field is required');
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private function formatMoney($value) {
|
||||||
|
return sprintf('EUR%s', number_format($value, 2, '.', ''));
|
||||||
|
}
|
||||||
|
}
|
@ -24,7 +24,7 @@ use App\Http\Requests\BankIntegration\UpdateBankIntegrationRequest;
|
|||||||
use App\Jobs\Bank\ProcessBankTransactions;
|
use App\Jobs\Bank\ProcessBankTransactions;
|
||||||
use App\Models\BankIntegration;
|
use App\Models\BankIntegration;
|
||||||
use App\Repositories\BankIntegrationRepository;
|
use App\Repositories\BankIntegrationRepository;
|
||||||
use App\Services\Bank\BankService;
|
use App\Services\Bank\BankMatchingService;
|
||||||
use App\Transformers\BankIntegrationTransformer;
|
use App\Transformers\BankIntegrationTransformer;
|
||||||
use App\Utils\Traits\MakesHash;
|
use App\Utils\Traits\MakesHash;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
@ -27,7 +27,7 @@ use App\Http\Requests\Import\PreImportRequest;
|
|||||||
use App\Jobs\Bank\MatchBankTransactions;
|
use App\Jobs\Bank\MatchBankTransactions;
|
||||||
use App\Models\BankTransaction;
|
use App\Models\BankTransaction;
|
||||||
use App\Repositories\BankTransactionRepository;
|
use App\Repositories\BankTransactionRepository;
|
||||||
use App\Services\Bank\BankService;
|
use App\Services\Bank\BankMatchingService;
|
||||||
use App\Transformers\BankTransactionTransformer;
|
use App\Transformers\BankTransactionTransformer;
|
||||||
use App\Utils\Traits\MakesHash;
|
use App\Utils\Traits\MakesHash;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Models\Account;
|
use App\Models\Account;
|
||||||
|
use App\Models\BankTransaction;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Transformers\ArraySerializer;
|
use App\Transformers\ArraySerializer;
|
||||||
@ -819,12 +820,15 @@ class BaseController extends Controller
|
|||||||
// 10-01-2022 need to ensure we snake case properly here to ensure permissions work as expected
|
// 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
|
// 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))))) {
|
if (auth()->user() && ! auth()->user()->hasPermission('view'.lcfirst(class_basename(Str::snake($this->entity_type))))) {
|
||||||
|
|
||||||
//06-10-2022 - some entities do not have assigned_user_id - this becomes an issue when we have a large company and low permission users
|
//06-10-2022 - some entities do not have assigned_user_id - this becomes an issue when we have a large company and low permission users
|
||||||
if(lcfirst(class_basename(Str::snake($this->entity_type))) == 'user')
|
if(lcfirst(class_basename(Str::snake($this->entity_type))) == 'user')
|
||||||
$query->where('id', auth()->user()->id);
|
$query->where('id', auth()->user()->id);
|
||||||
|
elseif($this->entity_type == BankTransaction::class){ //table without assigned_user_id
|
||||||
|
$query->where('user_id', '=', auth()->user()->id);
|
||||||
|
}
|
||||||
elseif(in_array(lcfirst(class_basename(Str::snake($this->entity_type))),['design','group_setting','payment_term'])){
|
elseif(in_array(lcfirst(class_basename(Str::snake($this->entity_type))),['design','group_setting','payment_term'])){
|
||||||
//need to pass these back regardless
|
//need to pass these back regardless
|
||||||
|
nlog($this->entity_type);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
$query->where('user_id', '=', auth()->user()->id)->orWhere('assigned_user_id', auth()->user()->id);
|
$query->where('user_id', '=', auth()->user()->id)->orWhere('assigned_user_id', auth()->user()->id);
|
||||||
@ -996,6 +1000,42 @@ class BaseController extends Controller
|
|||||||
return redirect('/setup');
|
return redirect('/setup');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function reactCatch()
|
||||||
|
{
|
||||||
|
|
||||||
|
if ((bool) $this->checkAppSetup() !== false && $account = Account::first()) {
|
||||||
|
if (config('ninja.require_https') && ! request()->isSecure()) {
|
||||||
|
return redirect()->secure(request()->getRequestUri());
|
||||||
|
}
|
||||||
|
|
||||||
|
$data = [];
|
||||||
|
|
||||||
|
//pass report errors bool to front end
|
||||||
|
$data['report_errors'] = Ninja::isSelfHost() ? $account->report_errors : true;
|
||||||
|
|
||||||
|
//pass referral code to front end
|
||||||
|
$data['rc'] = request()->has('rc') ? request()->input('rc') : '';
|
||||||
|
$data['build'] = request()->has('build') ? request()->input('build') : '';
|
||||||
|
$data['login'] = request()->has('login') ? request()->input('login') : 'false';
|
||||||
|
$data['signup'] = request()->has('signup') ? request()->input('signup') : 'false';
|
||||||
|
|
||||||
|
$data['user_agent'] = request()->server('HTTP_USER_AGENT');
|
||||||
|
|
||||||
|
$data['path'] = $this->setBuild();
|
||||||
|
|
||||||
|
$this->buildCache();
|
||||||
|
|
||||||
|
if (Ninja::isSelfHost() && $account->set_react_as_default_ap) {
|
||||||
|
return view('react.index', $data);
|
||||||
|
} else {
|
||||||
|
abort('page not found', 404);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect('/setup');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private function setBuild()
|
private function setBuild()
|
||||||
{
|
{
|
||||||
$build = '';
|
$build = '';
|
||||||
|
@ -34,6 +34,9 @@ class StoreBankTransactionRequest extends Request
|
|||||||
|
|
||||||
$rules = [];
|
$rules = [];
|
||||||
|
|
||||||
|
if(isset($this->bank_integration_id))
|
||||||
|
$rules['bank_integration_id'] = 'bail|required|exists:bank_integrations,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
|
||||||
|
|
||||||
return $rules;
|
return $rules;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,6 +45,9 @@ class UpdateBankTransactionRequest extends Request
|
|||||||
if(isset($this->expense_id))
|
if(isset($this->expense_id))
|
||||||
$rules['expense_id'] = 'bail|required|exists:expenses,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
|
$rules['expense_id'] = 'bail|required|exists:expenses,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
|
||||||
|
|
||||||
|
if(isset($this->bank_integration_id))
|
||||||
|
$rules['bank_integration_id'] = 'bail|required|exists:bank_integrations,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
|
||||||
|
|
||||||
|
|
||||||
return $rules;
|
return $rules;
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ class UpdateRecurringInvoiceRequest extends Request
|
|||||||
|
|
||||||
if (isset($input['invitations'])) {
|
if (isset($input['invitations'])) {
|
||||||
foreach ($input['invitations'] as $key => $value) {
|
foreach ($input['invitations'] as $key => $value) {
|
||||||
if (is_numeric($input['invitations'][$key]['id'])) {
|
if (isset($input['invitations'][$key]['id']) && is_numeric($input['invitations'][$key]['id'])) {
|
||||||
unset($input['invitations'][$key]['id']);
|
unset($input['invitations'][$key]['id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ use App\Models\Currency;
|
|||||||
use App\Models\ExpenseCategory;
|
use App\Models\ExpenseCategory;
|
||||||
use App\Models\Invoice;
|
use App\Models\Invoice;
|
||||||
use App\Models\Payment;
|
use App\Models\Payment;
|
||||||
use App\Services\Bank\BankService;
|
use App\Services\Bank\BankMatchingService;
|
||||||
use App\Utils\Ninja;
|
use App\Utils\Ninja;
|
||||||
use App\Utils\Traits\GeneratesCounter;
|
use App\Utils\Traits\GeneratesCounter;
|
||||||
use App\Utils\Traits\MakesHash;
|
use App\Utils\Traits\MakesHash;
|
||||||
@ -214,31 +214,34 @@ class MatchBankTransactions implements ShouldQueue
|
|||||||
|
|
||||||
$this->invoice = Invoice::withTrashed()->where('id', $invoice->id)->lockForUpdate()->first();
|
$this->invoice = Invoice::withTrashed()->where('id', $invoice->id)->lockForUpdate()->first();
|
||||||
|
|
||||||
// if($invoices->count() == 1){
|
$_amount = false;
|
||||||
// $_amount = $this->available_balance;
|
|
||||||
// }
|
|
||||||
if(floatval($this->invoice->balance) < floatval($this->available_balance) && $this->available_balance > 0)
|
|
||||||
{
|
|
||||||
$_amount = $this->invoice->balance;
|
|
||||||
$this->applied_amount += $this->invoice->balance;
|
|
||||||
$this->available_balance = $this->available_balance - $this->invoice->balance;
|
|
||||||
}
|
|
||||||
elseif(floatval($this->invoice->balance) >= floatval($this->available_balance) && $this->available_balance > 0)
|
|
||||||
{
|
|
||||||
$_amount = $this->available_balance;
|
|
||||||
$this->applied_amount += $this->available_balance;
|
|
||||||
$this->available_balance = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->attachable_invoices[] = ['id' => $this->invoice->id, 'amount' => $_amount];
|
if(floatval($this->invoice->balance) < floatval($this->available_balance) && $this->available_balance > 0)
|
||||||
|
{
|
||||||
|
$_amount = $this->invoice->balance;
|
||||||
|
$this->applied_amount += $this->invoice->balance;
|
||||||
|
$this->available_balance = $this->available_balance - $this->invoice->balance;
|
||||||
|
}
|
||||||
|
elseif(floatval($this->invoice->balance) >= floatval($this->available_balance) && $this->available_balance > 0)
|
||||||
|
{
|
||||||
|
$_amount = $this->available_balance;
|
||||||
|
$this->applied_amount += $this->available_balance;
|
||||||
|
$this->available_balance = 0;
|
||||||
|
}
|
||||||
|
|
||||||
$this->invoice
|
if($_amount)
|
||||||
->service()
|
{
|
||||||
->setExchangeRate()
|
|
||||||
->updateBalance($_amount * -1)
|
$this->attachable_invoices[] = ['id' => $this->invoice->id, 'amount' => $_amount];
|
||||||
->updatePaidToDate($_amount)
|
|
||||||
->setCalculatedStatus()
|
$this->invoice
|
||||||
->save();
|
->service()
|
||||||
|
->setExchangeRate()
|
||||||
|
->updateBalance($_amount * -1)
|
||||||
|
->updatePaidToDate($_amount)
|
||||||
|
->setCalculatedStatus()
|
||||||
|
->save();
|
||||||
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ use App\Libraries\MultiDB;
|
|||||||
use App\Models\BankIntegration;
|
use App\Models\BankIntegration;
|
||||||
use App\Models\BankTransaction;
|
use App\Models\BankTransaction;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
use App\Services\Bank\BankService;
|
use App\Services\Bank\BankMatchingService;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
use Illuminate\Foundation\Bus\Dispatchable;
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
@ -79,7 +79,7 @@ class ProcessBankTransactions implements ShouldQueue
|
|||||||
}
|
}
|
||||||
while($this->stop_loop);
|
while($this->stop_loop);
|
||||||
|
|
||||||
BankService::dispatch($this->company->id, $this->company->db);
|
BankMatchingService::dispatch($this->company->id, $this->company->db);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1107,7 +1107,7 @@ class CompanyImport implements ShouldQueue
|
|||||||
|
|
||||||
$storage_url = (object)$this->getObject('storage_url', true);
|
$storage_url = (object)$this->getObject('storage_url', true);
|
||||||
|
|
||||||
if(!Storage::exists($new_document->url)){
|
if(!Storage::exists($new_document->url) && is_string($storage_url)){
|
||||||
|
|
||||||
$url = $storage_url . $new_document->url;
|
$url = $storage_url . $new_document->url;
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@ namespace App\Models;
|
|||||||
|
|
||||||
use App\Models\Filterable;
|
use App\Models\Filterable;
|
||||||
use App\Models\Invoice;
|
use App\Models\Invoice;
|
||||||
|
use App\Services\Bank\BankService;
|
||||||
use App\Utils\Traits\MakesHash;
|
use App\Utils\Traits\MakesHash;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
@ -98,22 +99,9 @@ class BankTransaction extends BaseModel
|
|||||||
return $this->belongsTo(Account::class)->withTrashed();
|
return $this->belongsTo(Account::class)->withTrashed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function service() :BankService
|
||||||
public function matchInvoiceNumber()
|
|
||||||
{
|
{
|
||||||
|
return new BankService($this);
|
||||||
if(strlen($this->description) > 1)
|
|
||||||
{
|
|
||||||
|
|
||||||
$i = Invoice::where('company_id', $this->company_id)
|
|
||||||
->whereIn('status_id', [1,2,3])
|
|
||||||
->where('is_deleted', 0)
|
|
||||||
->where('number', 'LIKE', '%'.$this->description.'%')
|
|
||||||
->first();
|
|
||||||
|
|
||||||
return $i ?: false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
@ -42,8 +42,10 @@ class CompanyPresenter extends EntityPresenter
|
|||||||
return $settings->company_logo;
|
return $settings->company_logo;
|
||||||
else if(strlen($settings->company_logo) >= 1)
|
else if(strlen($settings->company_logo) >= 1)
|
||||||
return url('') . $settings->company_logo;
|
return url('') . $settings->company_logo;
|
||||||
else
|
else{
|
||||||
return asset('images/new_logo.png');
|
return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
|
||||||
|
//return asset('images/new_logo.png');
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,8 +90,10 @@ class CompanyPresenter extends EntityPresenter
|
|||||||
return "data:image/png;base64, ". base64_encode(@file_get_contents($settings->company_logo, false, stream_context_create($context_options)));
|
return "data:image/png;base64, ". base64_encode(@file_get_contents($settings->company_logo, false, stream_context_create($context_options)));
|
||||||
else if(strlen($settings->company_logo) >= 1)
|
else if(strlen($settings->company_logo) >= 1)
|
||||||
return "data:image/png;base64, ". base64_encode(@file_get_contents(url('') . $settings->company_logo, false, stream_context_create($context_options)));
|
return "data:image/png;base64, ". base64_encode(@file_get_contents(url('') . $settings->company_logo, false, stream_context_create($context_options)));
|
||||||
else
|
else{
|
||||||
return "data:image/png;base64, ". base64_encode(@file_get_contents(asset('images/new_logo.png'), false, stream_context_create($context_options)));
|
return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=";
|
||||||
|
//return "data:image/png;base64, ". base64_encode(@file_get_contents(asset('images/new_logo.png'), false, stream_context_create($context_options)));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,8 +45,8 @@ class InvoiceObserver
|
|||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function updated(Invoice $invoice)
|
public function updated(Invoice $invoice)
|
||||||
{nlog("updated");
|
{
|
||||||
$subscriptions = Webhook::where('company_id', $invoice->company_id)
|
$subscriptions = Webhook::where('company_id', $invoice->company_id)
|
||||||
->where('event_id', Webhook::EVENT_UPDATE_INVOICE)
|
->where('event_id', Webhook::EVENT_UPDATE_INVOICE)
|
||||||
->exists();
|
->exists();
|
||||||
|
|
||||||
|
@ -87,16 +87,19 @@ trait Utilities
|
|||||||
|
|
||||||
$error_message = '';
|
$error_message = '';
|
||||||
|
|
||||||
if (array_key_exists('actions', $_payment) && array_key_exists('response_summary', end($_payment['actions']))) {
|
if (is_array($_payment) && array_key_exists('actions', $_payment) && array_key_exists('response_summary', end($_payment['actions']))) {
|
||||||
$error_message = end($_payment['actions'])['response_summary'];
|
$error_message = end($_payment['actions'])['response_summary'];
|
||||||
} elseif (array_key_exists('status', $_payment)) {
|
} elseif (is_array($_payment) && array_key_exists('status', $_payment)) {
|
||||||
$error_message = $_payment['status'];
|
$error_message = $_payment['status'];
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
$error_message = 'Error processing payment.';
|
||||||
|
}
|
||||||
|
|
||||||
$this->getParent()->sendFailureMail($error_message);
|
$this->getParent()->sendFailureMail($error_message);
|
||||||
|
|
||||||
$message = [
|
$message = [
|
||||||
'server_response' => $_payment,
|
'server_response' => $_payment ?: 'Server did not return any response. Most likely failed before payment was created.',
|
||||||
'data' => $this->getParent()->payment_hash->data,
|
'data' => $this->getParent()->payment_hash->data,
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -110,7 +113,7 @@ trait Utilities
|
|||||||
);
|
);
|
||||||
|
|
||||||
if ($throw_exception) {
|
if ($throw_exception) {
|
||||||
throw new PaymentFailed($_payment['status'].' '.$error_message, 500);
|
throw new PaymentFailed($error_message, 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -438,7 +438,7 @@ class CheckoutComPaymentDriver extends BaseDriver
|
|||||||
$this->init();
|
$this->init();
|
||||||
$this->setPaymentHash($request->getPaymentHash());
|
$this->setPaymentHash($request->getPaymentHash());
|
||||||
|
|
||||||
//11-08-2022 check the user is autenticated
|
//11-08-2022 check the user is authenticated
|
||||||
if (!Auth::guard('contact')->check()) {
|
if (!Auth::guard('contact')->check()) {
|
||||||
$client = $request->getClient();
|
$client = $request->getClient();
|
||||||
auth()->guard('contact')->loginUsingId($client->contacts()->first()->id, true);
|
auth()->guard('contact')->loginUsingId($client->contacts()->first()->id, true);
|
||||||
@ -455,6 +455,8 @@ class CheckoutComPaymentDriver extends BaseDriver
|
|||||||
return $this->processUnsuccessfulPayment($payment);
|
return $this->processUnsuccessfulPayment($payment);
|
||||||
}
|
}
|
||||||
} catch (CheckoutApiException | Exception $e) {
|
} catch (CheckoutApiException | Exception $e) {
|
||||||
|
nlog("checkout");
|
||||||
|
nlog($e->getMessage());
|
||||||
return $this->processInternallyFailedPayment($this, $e);
|
return $this->processInternallyFailedPayment($this, $e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,14 +24,14 @@ class BankTransactionRepository extends BaseRepository
|
|||||||
public function save($data, BankTransaction $bank_transaction)
|
public function save($data, BankTransaction $bank_transaction)
|
||||||
{
|
{
|
||||||
|
|
||||||
if(!isset($bank_transaction->bank_integration_id) && array_key_exists('bank_integration_id', $data))
|
if(array_key_exists('bank_integration_id', $data))
|
||||||
$bank_transaction->bank_integration_id = $data['bank_integration_id'];
|
$bank_transaction->bank_integration_id = $data['bank_integration_id'];
|
||||||
|
|
||||||
$bank_transaction->fill($data);
|
$bank_transaction->fill($data);
|
||||||
|
|
||||||
$bank_transaction->save();
|
$bank_transaction->save();
|
||||||
|
|
||||||
if($bank_transaction->base_type == 'CREDIT' && $invoice = $bank_transaction->matchInvoiceNumber())
|
if($bank_transaction->base_type == 'CREDIT' && $invoice = $bank_transaction->service()->matchInvoiceNumber())
|
||||||
{
|
{
|
||||||
$bank_transaction->invoice_ids = $invoice->hashed_id;
|
$bank_transaction->invoice_ids = $invoice->hashed_id;
|
||||||
$bank_transaction->status_id = BankTransaction::STATUS_MATCHED;
|
$bank_transaction->status_id = BankTransaction::STATUS_MATCHED;
|
||||||
|
@ -280,7 +280,7 @@ class BaseRepository
|
|||||||
$model = $model->service()->applyNumber()->save();
|
$model = $model->service()->applyNumber()->save();
|
||||||
|
|
||||||
/* Handle attempts where the deposit is greater than the amount/balance of the invoice */
|
/* Handle attempts where the deposit is greater than the amount/balance of the invoice */
|
||||||
if((int)$model->balance != 0 && $model->partial > $model->amount)
|
if((int)$model->balance != 0 && $model->partial > $model->amount && $model->amount > 0)
|
||||||
$model->partial = min($model->amount, $model->balance);
|
$model->partial = min($model->amount, $model->balance);
|
||||||
|
|
||||||
/* Update product details if necessary - if we are inside a transaction - do nothing */
|
/* Update product details if necessary - if we are inside a transaction - do nothing */
|
||||||
|
84
app/Services/Bank/BankMatchingService.php
Normal file
84
app/Services/Bank/BankMatchingService.php
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Services\Bank;
|
||||||
|
|
||||||
|
use App\Libraries\MultiDB;
|
||||||
|
use App\Models\BankTransaction;
|
||||||
|
use App\Models\Company;
|
||||||
|
use App\Models\Invoice;
|
||||||
|
use Illuminate\Bus\Queueable;
|
||||||
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
|
use Illuminate\Foundation\Bus\Dispatchable;
|
||||||
|
use Illuminate\Queue\InteractsWithQueue;
|
||||||
|
use Illuminate\Queue\SerializesModels;
|
||||||
|
|
||||||
|
class BankMatchingService implements ShouldQueue
|
||||||
|
{
|
||||||
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
||||||
|
|
||||||
|
private $company_id;
|
||||||
|
|
||||||
|
private Company $company;
|
||||||
|
|
||||||
|
private $db;
|
||||||
|
|
||||||
|
private $invoices;
|
||||||
|
|
||||||
|
public $deleteWhenMissingModels = true;
|
||||||
|
|
||||||
|
public function __construct($company_id, $db)
|
||||||
|
{
|
||||||
|
$this->company_id = $company_id;
|
||||||
|
$this->db = $db;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle()
|
||||||
|
{
|
||||||
|
|
||||||
|
MultiDB::setDb($this->db);
|
||||||
|
|
||||||
|
$this->company = Company::find($this->company_id);
|
||||||
|
|
||||||
|
$this->invoices = Invoice::where('company_id', $this->company->id)
|
||||||
|
->whereIn('status_id', [1,2,3])
|
||||||
|
->where('is_deleted', 0)
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$this->match();
|
||||||
|
}
|
||||||
|
|
||||||
|
private function match()
|
||||||
|
{
|
||||||
|
|
||||||
|
BankTransaction::where('company_id', $this->company->id)
|
||||||
|
->where('status_id', BankTransaction::STATUS_UNMATCHED)
|
||||||
|
->cursor()
|
||||||
|
->each(function ($bt){
|
||||||
|
|
||||||
|
$invoice = $this->invoices->first(function ($value, $key) use ($bt){
|
||||||
|
|
||||||
|
return str_contains($bt->description, $value->number);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
if($invoice)
|
||||||
|
{
|
||||||
|
$bt->invoice_ids = $invoice->hashed_id;
|
||||||
|
$bt->status_id = BankTransaction::STATUS_MATCHED;
|
||||||
|
$bt->save();
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -11,74 +11,40 @@
|
|||||||
|
|
||||||
namespace App\Services\Bank;
|
namespace App\Services\Bank;
|
||||||
|
|
||||||
use App\Libraries\MultiDB;
|
|
||||||
use App\Models\BankTransaction;
|
use App\Models\BankTransaction;
|
||||||
use App\Models\Company;
|
|
||||||
use App\Models\Invoice;
|
use App\Models\Invoice;
|
||||||
use Illuminate\Bus\Queueable;
|
use App\Services\Bank\ProcessBankRule;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
||||||
use Illuminate\Foundation\Bus\Dispatchable;
|
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
|
||||||
use Illuminate\Queue\SerializesModels;
|
|
||||||
|
|
||||||
class BankService implements ShouldQueue
|
class BankService
|
||||||
{
|
{
|
||||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
|
|
||||||
|
|
||||||
private $company_id;
|
public function __construct(public BankTransaction $bank_transaction) {}
|
||||||
|
|
||||||
private Company $company;
|
|
||||||
|
|
||||||
private $db;
|
public function matchInvoiceNumber()
|
||||||
|
|
||||||
private $invoices;
|
|
||||||
|
|
||||||
public $deleteWhenMissingModels = true;
|
|
||||||
|
|
||||||
public function __construct($company_id, $db)
|
|
||||||
{
|
|
||||||
$this->company_id = $company_id;
|
|
||||||
$this->db = $db;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handle()
|
|
||||||
{
|
{
|
||||||
|
|
||||||
MultiDB::setDb($this->db);
|
if(strlen($this->bank_transaction->description) > 1)
|
||||||
|
{
|
||||||
|
|
||||||
$this->company = Company::find($this->company_id);
|
$i = Invoice::where('company_id', $this->bank_transaction->company_id)
|
||||||
|
->whereIn('status_id', [1,2,3])
|
||||||
|
->where('is_deleted', 0)
|
||||||
|
->where('number', 'LIKE', '%'.$this->bank_transaction->description.'%')
|
||||||
|
->first();
|
||||||
|
|
||||||
$this->invoices = Invoice::where('company_id', $this->company->id)
|
return $i ?: false;
|
||||||
->whereIn('status_id', [1,2,3])
|
}
|
||||||
->where('is_deleted', 0)
|
|
||||||
->get();
|
return false;
|
||||||
|
|
||||||
$this->match();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function match()
|
public function processRule($rule)
|
||||||
{
|
{
|
||||||
|
(new ProcessBankRule($this->bank_transaction, $rule))->run();
|
||||||
|
|
||||||
BankTransaction::where('company_id', $this->company->id)
|
return $this;
|
||||||
->where('status_id', BankTransaction::STATUS_UNMATCHED)
|
|
||||||
->cursor()
|
|
||||||
->each(function ($bt){
|
|
||||||
|
|
||||||
$invoice = $this->invoices->first(function ($value, $key) use ($bt){
|
|
||||||
|
|
||||||
return str_contains($bt->description, $value->number);
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
if($invoice)
|
|
||||||
{
|
|
||||||
$bt->invoice_ids = $invoice->hashed_id;
|
|
||||||
$bt->status_id = BankTransaction::STATUS_MATCHED;
|
|
||||||
$bt->save();
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
27
app/Services/Bank/ProcessBankRule.php
Normal file
27
app/Services/Bank/ProcessBankRule.php
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Invoice Ninja (https://invoiceninja.com).
|
||||||
|
*
|
||||||
|
* @link https://github.com/invoiceninja/invoiceninja source repository
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
|
||||||
|
*
|
||||||
|
* @license https://www.elastic.co/licensing/elastic-license
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace App\Services\Bank;
|
||||||
|
|
||||||
|
use App\Models\BankTransaction;
|
||||||
|
use App\Services\AbstractService;
|
||||||
|
|
||||||
|
class ProcessBankRule extends AbstractService
|
||||||
|
{
|
||||||
|
|
||||||
|
public function __construct(private BankTransaction $bank_transaction, $rule){}
|
||||||
|
|
||||||
|
public function run() : void
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -27,6 +27,8 @@ class TriggeredActions extends AbstractService
|
|||||||
|
|
||||||
private $invoice;
|
private $invoice;
|
||||||
|
|
||||||
|
private bool $updated = false;
|
||||||
|
|
||||||
public function __construct(Invoice $invoice, Request $request)
|
public function __construct(Invoice $invoice, Request $request)
|
||||||
{
|
{
|
||||||
$this->request = $request;
|
$this->request = $request;
|
||||||
@ -37,30 +39,38 @@ class TriggeredActions extends AbstractService
|
|||||||
public function run()
|
public function run()
|
||||||
{
|
{
|
||||||
if ($this->request->has('auto_bill') && $this->request->input('auto_bill') == 'true') {
|
if ($this->request->has('auto_bill') && $this->request->input('auto_bill') == 'true') {
|
||||||
$this->invoice->service()->autoBill();
|
$this->invoice->service()->autoBill(); //update notification sends automatically for this.
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->request->has('paid') && $this->request->input('paid') == 'true') {
|
if ($this->request->has('paid') && $this->request->input('paid') == 'true') {
|
||||||
$this->invoice = $this->invoice->service()->markPaid()->save();
|
$this->invoice = $this->invoice->service()->markPaid()->save(); //update notification sends automatically for this.
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->request->has('mark_sent') && $this->request->input('mark_sent') == 'true') {
|
if ($this->request->has('mark_sent') && $this->request->input('mark_sent') == 'true' && $this->invoice->status_id == Invoice::STATUS_DRAFT) {
|
||||||
$this->invoice = $this->invoice->service()->markSent()->save();
|
$this->invoice = $this->invoice->service()->markSent()->save(); //update notification NOT sent
|
||||||
|
$this->updated = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->request->has('amount_paid') && is_numeric($this->request->input('amount_paid'))) {
|
if ($this->request->has('amount_paid') && is_numeric($this->request->input('amount_paid'))) {
|
||||||
$this->invoice = $this->invoice->service()->applyPaymentAmount($this->request->input('amount_paid'))->save();
|
$this->invoice = $this->invoice->service()->applyPaymentAmount($this->request->input('amount_paid'))->save();
|
||||||
|
$this->updated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->request->has('send_email') && $this->request->input('send_email') == 'true') {
|
if ($this->request->has('send_email') && $this->request->input('send_email') == 'true') {
|
||||||
$this->invoice->service()->markSent()->touchPdf()->save();
|
$this->invoice->service()->markSent()->touchPdf()->save();
|
||||||
$this->sendEmail();
|
$this->sendEmail();
|
||||||
|
$this->updated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->request->has('cancel') && $this->request->input('cancel') == 'true') {
|
if ($this->request->has('cancel') && $this->request->input('cancel') == 'true') {
|
||||||
$this->invoice = $this->invoice->service()->handleCancellation()->save();
|
$this->invoice = $this->invoice->service()->handleCancellation()->save();
|
||||||
|
$this->updated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($this->updated)
|
||||||
|
event('eloquent.updated: App\Models\Invoice', $this->invoice);
|
||||||
|
|
||||||
|
|
||||||
return $this->invoice;
|
return $this->invoice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,6 +32,7 @@ class VendorContactTransformer extends EntityTransformer
|
|||||||
'id' => $this->encodePrimaryKey($vendor->id),
|
'id' => $this->encodePrimaryKey($vendor->id),
|
||||||
'first_name' => $vendor->first_name ?: '',
|
'first_name' => $vendor->first_name ?: '',
|
||||||
'last_name' => $vendor->last_name ?: '',
|
'last_name' => $vendor->last_name ?: '',
|
||||||
|
'send_email' => (bool)$vendor->send_email,
|
||||||
'email' => $vendor->email ?: '',
|
'email' => $vendor->email ?: '',
|
||||||
'created_at' => (int) $vendor->created_at,
|
'created_at' => (int) $vendor->created_at,
|
||||||
'updated_at' => (int) $vendor->updated_at,
|
'updated_at' => (int) $vendor->updated_at,
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
namespace App\Utils;
|
namespace App\Utils;
|
||||||
|
|
||||||
|
use App\Helpers\Epc\EpcQrGenerator;
|
||||||
use App\Helpers\SwissQr\SwissQrGenerator;
|
use App\Helpers\SwissQr\SwissQrGenerator;
|
||||||
use App\Models\Country;
|
use App\Models\Country;
|
||||||
use App\Models\CreditInvitation;
|
use App\Models\CreditInvitation;
|
||||||
@ -581,6 +582,11 @@ class HtmlEngine
|
|||||||
$data['$payments'] = ['value' => $payment_list, 'label' => ctrans('texts.payments')];
|
$data['$payments'] = ['value' => $payment_list, 'label' => ctrans('texts.payments')];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if($this->entity_string == 'invoice' && isset($this->company?->custom_fields?->company1))
|
||||||
|
{
|
||||||
|
$data['$sepa_qr_code'] = ['value' => (new EpcQrGenerator($this->company, $this->entity,$data['$amount_raw']['value']))->getQrCode(), 'label' => ''];
|
||||||
|
}
|
||||||
|
|
||||||
$arrKeysLength = array_map('strlen', array_keys($data));
|
$arrKeysLength = array_map('strlen', array_keys($data));
|
||||||
array_multisort($arrKeysLength, SORT_DESC, $data);
|
array_multisort($arrKeysLength, SORT_DESC, $data);
|
||||||
|
|
||||||
|
@ -14,8 +14,8 @@ return [
|
|||||||
'require_https' => env('REQUIRE_HTTPS', true),
|
'require_https' => env('REQUIRE_HTTPS', true),
|
||||||
'app_url' => rtrim(env('APP_URL', ''), '/'),
|
'app_url' => rtrim(env('APP_URL', ''), '/'),
|
||||||
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
|
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
|
||||||
'app_version' => '5.5.38',
|
'app_version' => '5.5.39',
|
||||||
'app_tag' => '5.5.38',
|
'app_tag' => '5.5.39',
|
||||||
'minimum_client_version' => '5.0.16',
|
'minimum_client_version' => '5.0.16',
|
||||||
'terms_version' => '1.0.1',
|
'terms_version' => '1.0.1',
|
||||||
'api_secret' => env('API_SECRET', ''),
|
'api_secret' => env('API_SECRET', ''),
|
||||||
|
18
package-lock.json
generated
18
package-lock.json
generated
@ -6,7 +6,7 @@
|
|||||||
"": {
|
"": {
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"autoprefixer": "^10.3.7",
|
"autoprefixer": "^10.3.7",
|
||||||
"axios": "^0.24.0",
|
"axios": "^0.25",
|
||||||
"card-js": "^1.0.13",
|
"card-js": "^1.0.13",
|
||||||
"card-validator": "^8.1.1",
|
"card-validator": "^8.1.1",
|
||||||
"clipboard": "^2.0.10",
|
"clipboard": "^2.0.10",
|
||||||
@ -2367,11 +2367,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/axios": {
|
"node_modules/axios": {
|
||||||
"version": "0.24.0",
|
"version": "0.25.0",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz",
|
||||||
"integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
|
"integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"follow-redirects": "^1.14.4"
|
"follow-redirects": "^1.14.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/babel-loader": {
|
"node_modules/babel-loader": {
|
||||||
@ -10890,11 +10890,11 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"axios": {
|
"axios": {
|
||||||
"version": "0.24.0",
|
"version": "0.25.0",
|
||||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
|
"resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz",
|
||||||
"integrity": "sha512-Q6cWsys88HoPgAaFAVUb0WpPk0O8iTeisR9IMqy9G8AbO4NlpVknrnQS03zzF9PGAWgO3cgletO3VjV/P7VztA==",
|
"integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"follow-redirects": "^1.14.4"
|
"follow-redirects": "^1.14.7"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"babel-loader": {
|
"babel-loader": {
|
||||||
|
4
public/flutter_service_worker.js
vendored
4
public/flutter_service_worker.js
vendored
@ -11,9 +11,9 @@ const RESOURCES = {
|
|||||||
"favicon.png": "dca91c54388f52eded692718d5a98b8b",
|
"favicon.png": "dca91c54388f52eded692718d5a98b8b",
|
||||||
"favicon.ico": "51636d3a390451561744c42188ccd628",
|
"favicon.ico": "51636d3a390451561744c42188ccd628",
|
||||||
"flutter.js": "f85e6fb278b0fd20c349186fb46ae36d",
|
"flutter.js": "f85e6fb278b0fd20c349186fb46ae36d",
|
||||||
"/": "b3e1f363b096f7aa924366021ccd1f84",
|
"/": "d2b918382ed83045e8e3854cae1edc55",
|
||||||
"manifest.json": "ef43d90e57aa7682d7e2cfba2f484a40",
|
"manifest.json": "ef43d90e57aa7682d7e2cfba2f484a40",
|
||||||
"main.dart.js": "ec0f416f73c0949c563c9c049a29747d",
|
"main.dart.js": "f6e5cc85c8e2f5aca83137308c219666",
|
||||||
"assets/AssetManifest.json": "759f9ef9973f7e26c2a51450b55bb9fa",
|
"assets/AssetManifest.json": "759f9ef9973f7e26c2a51450b55bb9fa",
|
||||||
"assets/FontManifest.json": "087fb858dc3cbfbf6baf6a30004922f1",
|
"assets/FontManifest.json": "087fb858dc3cbfbf6baf6a30004922f1",
|
||||||
"assets/NOTICES": "1a34e70168d56fad075adfb4bdbb20eb",
|
"assets/NOTICES": "1a34e70168d56fad075adfb4bdbb20eb",
|
||||||
|
22168
public/main.dart.js
vendored
22168
public/main.dart.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
23899
public/main.foss.dart.js
vendored
23899
public/main.foss.dart.js
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
114
public/main.profile.dart.js
vendored
114
public/main.profile.dart.js
vendored
File diff suppressed because one or more lines are too long
@ -7,10 +7,10 @@
|
|||||||
@foreach ($entity->documents as $document)
|
@foreach ($entity->documents as $document)
|
||||||
<div class="inline-flex items-center space-x-1">
|
<div class="inline-flex items-center space-x-1">
|
||||||
@if($entity instanceof App\Models\PurchaseOrder)
|
@if($entity instanceof App\Models\PurchaseOrder)
|
||||||
<a href="{{ route('vendor.documents.show', $document->hashed_id) }}" target="_blank"
|
<a href="{{ route('vendor.documents.download', $document->hashed_id) }}" target="_blank"
|
||||||
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
@else
|
@else
|
||||||
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
<a href="{{ route('client.documents.download', $document->hashed_id) }}" target="_blank"
|
||||||
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
@endif
|
@endif
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||||||
@ -30,10 +30,10 @@
|
|||||||
@foreach ($entity->company->documents as $document)
|
@foreach ($entity->company->documents as $document)
|
||||||
<div class="inline-flex items-center space-x-1">
|
<div class="inline-flex items-center space-x-1">
|
||||||
@if($entity instanceof App\Models\PurchaseOrder)
|
@if($entity instanceof App\Models\PurchaseOrder)
|
||||||
<a href="{{ route('vendor.documents.show', $document->hashed_id) }}" target="_blank"
|
<a href="{{ route('vendor.documents.download', $document->hashed_id) }}" target="_blank"
|
||||||
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
@else
|
@else
|
||||||
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
<a href="{{ route('client.documents.download', $document->hashed_id) }}" target="_blank"
|
||||||
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
@endif
|
@endif
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||||||
@ -54,7 +54,7 @@
|
|||||||
@foreach ($entity->expense_documents() as $expense)
|
@foreach ($entity->expense_documents() as $expense)
|
||||||
@foreach($expense->documents as $document)
|
@foreach($expense->documents as $document)
|
||||||
<div class="inline-flex items-center space-x-1">
|
<div class="inline-flex items-center space-x-1">
|
||||||
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
<a href="{{ route('client.documents.download', $document->hashed_id) }}" target="_blank"
|
||||||
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||||||
@ -77,7 +77,7 @@
|
|||||||
@foreach ($entity->task_documents() as $task)
|
@foreach ($entity->task_documents() as $task)
|
||||||
@foreach($task->documents as $document)
|
@foreach($task->documents as $document)
|
||||||
<div class="inline-flex items-center space-x-1">
|
<div class="inline-flex items-center space-x-1">
|
||||||
<a href="{{ route('client.documents.show', $document->hashed_id) }}" target="_blank"
|
<a href="{{ route('client.documents.download', $document->hashed_id) }}" target="_blank"
|
||||||
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
class="block text-sm button-link text-primary">{{ Illuminate\Support\Str::limit($document->name, 40) }}</a>
|
||||||
|
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none"
|
||||||
|
@ -1,207 +1,227 @@
|
|||||||
<link rel="modulepreload" href="/react/nth-check.58e8385d.js">
|
<link rel="modulepreload" href="/react/react.6d2722b1.js">
|
||||||
<link rel="stylesheet" href="/react/index.bff791ad.css">
|
<link rel="modulepreload" href="/react/hoist-non-react-statics.8cec2199.js">
|
||||||
<link rel="modulepreload" href="/react/uuid.ef4f150d.js">
|
<link rel="modulepreload" href="/react/mdast-util-from-markdown.47be020c.js">
|
||||||
<link rel="modulepreload" href="/react/@emotion.9aa0086d.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-select.0c11d83f.js">
|
|
||||||
<link rel="modulepreload" href="/react/space-separated-tokens.59bb4ca8.js">
|
|
||||||
<link rel="modulepreload" href="/react/raf-schd.43184c40.js">
|
|
||||||
<link rel="modulepreload" href="/react/recharts-scale.dc8389ce.js">
|
|
||||||
<link rel="modulepreload" href="/react/unist-util-position.04d68b2b.js">
|
|
||||||
<link rel="modulepreload" href="/react/reduce-css-calc.281532ee.js">
|
|
||||||
<link rel="modulepreload" href="/react/is-plain-obj.260ab441.js">
|
|
||||||
<link rel="modulepreload" href="/react/remark-rehype.66f21be3.js">
|
|
||||||
<link rel="modulepreload" href="/react/extend.ca41ef84.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-extension-gfm-footnote.5e766f8c.js">
|
|
||||||
<link rel="modulepreload" href="/react/boolbase.bd705bc9.js">
|
|
||||||
<link rel="modulepreload" href="/react/react.967f52d5.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-factory-whitespace.4e8e9fce.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-router-dom.09ff5a14.js">
|
|
||||||
<script type="module" crossorigin src="/react/index.a4e53c8d.js"></script>
|
|
||||||
<link rel="modulepreload" href="/react/mdast-util-to-string.717718d5.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-html-tag-name.8b7c83fe.js">
|
|
||||||
<link rel="modulepreload" href="/react/mdast-util-gfm-autolink-literal.4b04cd2e.js">
|
|
||||||
<link rel="stylesheet" href="/react/@uiw.d17b7851.css">
|
|
||||||
<link rel="modulepreload" href="/react/unist-util-is.bd39e4f2.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-qr-code.4878cb6b.js">
|
|
||||||
<link rel="modulepreload" href="/react/web-namespaces.a24d7a09.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-sanitize-uri.f9c714eb.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-extension-gfm-task-list-item.33d9f10c.js">
|
|
||||||
<link rel="modulepreload" href="/react/html-parse-stringify.32417b46.js">
|
|
||||||
<link rel="modulepreload" href="/react/i18next.cf61342d.js">
|
|
||||||
<link rel="modulepreload" href="/react/html-escaper.7cd36ce3.js">
|
|
||||||
<link rel="modulepreload" href="/react/lodash-es.8df7cfb3.js">
|
|
||||||
<link rel="modulepreload" href="/react/d3-shape.c407f78b.js">
|
|
||||||
<link rel="modulepreload" href="/react/tslib.1cf50020.js">
|
|
||||||
<link rel="modulepreload" href="/react/use-memo-one.4a0d5bdc.js">
|
|
||||||
<link rel="modulepreload" href="/react/qr.js.da7c6dcd.js">
|
|
||||||
<link rel="modulepreload" href="/react/mdast-util-gfm.0152e39c.js">
|
|
||||||
<link rel="modulepreload" href="/react/is-decimal.247a88b7.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-hot-toast.80758c68.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-popper.d301c4dd.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-debounce-input.1347744c.js">
|
|
||||||
<link rel="modulepreload" href="/react/d3-format.5a3f6ba7.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-markdown.3a061863.js">
|
|
||||||
<link rel="modulepreload" href="/react/rehype-rewrite.cb5dac09.js">
|
|
||||||
<link rel="modulepreload" href="/react/attr-accept.6d6aa28d.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-extension-gfm.3af3365b.js">
|
|
||||||
<link rel="modulepreload" href="/react/@popperjs.50883750.js">
|
|
||||||
<link rel="modulepreload" href="/react/warning.3e618ed9.js">
|
|
||||||
<link rel="modulepreload" href="/react/immer.a08a4913.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-encode.b78670b5.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-character.811e4fc8.js">
|
|
||||||
<link rel="modulepreload" href="/react/property-information.17621e99.js">
|
|
||||||
<link rel="modulepreload" href="/react/formik.0c2f9d9e.js">
|
|
||||||
<link rel="modulepreload" href="/react/character-reference-invalid.9429e209.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-util-to-parse5.d0422f4e.js">
|
|
||||||
<link rel="modulepreload" href="/react/prop-types.c5f1cd8f.js">
|
|
||||||
<link rel="modulepreload" href="/react/currency.js.cd0659e5.js">
|
|
||||||
<link rel="modulepreload" href="/react/redux.acdf7418.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-feather.ba7315c7.js">
|
|
||||||
<link rel="modulepreload" href="/react/decode-named-character-reference.58fdd984.js">
|
|
||||||
<link rel="modulepreload" href="/react/raf.ef427214.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-redux.7269b315.js">
|
|
||||||
<link rel="modulepreload" href="/react/ccount.24f4fb2a.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-resize-detector.73849032.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-util-heading-rank.0127330c.js">
|
|
||||||
<link rel="modulepreload" href="/react/character-entities-html4.bfdecac8.js">
|
|
||||||
<link rel="modulepreload" href="/react/unist-util-visit.551af7f6.js">
|
|
||||||
<link rel="modulepreload" href="/react/is-alphabetical.a64573e0.js">
|
|
||||||
<link rel="modulepreload" href="/react/prismjs.1fc2e6a8.js">
|
|
||||||
<link rel="modulepreload" href="/react/comma-separated-tokens.826a3e44.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-dropzone.87de0271.js">
|
|
||||||
<link rel="modulepreload" href="/react/parse-entities.0d3eeb8f.js">
|
|
||||||
<link rel="modulepreload" href="/react/unist-util-stringify-position.6cdff1ba.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-util-from-parse5.1bc31bb6.js">
|
|
||||||
<link rel="modulepreload" href="/react/lodash.debounce.bf978eb6.js">
|
|
||||||
<link rel="modulepreload" href="/react/rehype-prism-plus.2cab531a.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-onclickoutside.05557887.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-util-select.9295ace7.js">
|
|
||||||
<link rel="modulepreload" href="/react/zwitch.84c833f3.js">
|
|
||||||
<link rel="modulepreload" href="/react/css-unit-converter.d617fa75.js">
|
|
||||||
<link rel="modulepreload" href="/react/rehype-autolink-headings.4312e6cb.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-extension-gfm-autolink-literal.75d97f6e.js">
|
|
||||||
<link rel="modulepreload" href="/react/vfile.8a59bc59.js">
|
|
||||||
<link rel="modulepreload" href="/react/hoist-non-react-statics.cc69b77f.js">
|
|
||||||
<link rel="modulepreload" href="/react/collect.js.64c89be2.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-beautiful-dnd.1242ed17.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-extension-gfm-tagfilter.97dd1d78.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-dom.bbdc7aed.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-core-commonmark.894384bd.js">
|
|
||||||
<link rel="modulepreload" href="/react/mdast-util-gfm-footnote.9832ece2.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-normalize-identifier.f045ed13.js">
|
|
||||||
<link rel="modulepreload" href="/react/array-move.20870289.js">
|
|
||||||
<link rel="modulepreload" href="/react/lodash.6e1b81d9.js">
|
|
||||||
<link rel="modulepreload" href="/react/date-fns.c9928d0b.js">
|
|
||||||
<link rel="modulepreload" href="/react/mdast-util-from-markdown.b6500a0a.js">
|
|
||||||
<link rel="modulepreload" href="/react/eventemitter3.e831f4a3.js">
|
|
||||||
<link rel="modulepreload" href="/react/is-alphanumerical.39e15300.js">
|
|
||||||
<link rel="modulepreload" href="/react/hastscript.aa96013f.js">
|
|
||||||
<link rel="modulepreload" href="/react/unist-util-generated.22d80e74.js">
|
|
||||||
<link rel="modulepreload" href="/react/remark-gfm.f031f689.js">
|
|
||||||
<link rel="modulepreload" href="/react/remark-parse.a34fb5cc.js">
|
|
||||||
<link rel="modulepreload" href="/react/axios.308741bb.js">
|
|
||||||
<link rel="modulepreload" href="/react/character-entities-legacy.cb27298c.js">
|
|
||||||
<link rel="modulepreload" href="/react/parse5.761ebfb8.js">
|
|
||||||
<link rel="modulepreload" href="/react/void-elements.fa8a9e47.js">
|
|
||||||
<link rel="modulepreload" href="/react/scheduler.84e669cb.js">
|
|
||||||
<link rel="modulepreload" href="/react/markdown-table.f01db7c9.js">
|
|
||||||
<link rel="modulepreload" href="/react/mdast-util-gfm-strikethrough.4389f7f3.js">
|
|
||||||
<link rel="stylesheet" href="/react/react-datepicker.e2be669b.css">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-factory-label.2e0fc916.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-extension-gfm-strikethrough.39c8bc63.js">
|
|
||||||
<link rel="modulepreload" href="/react/vfile-message.9560db1f.js">
|
|
||||||
<link rel="modulepreload" href="/react/mdast-util-to-markdown.7e1348ca.js">
|
|
||||||
<link rel="modulepreload" href="/react/redux-thunk.281dc3fb.js">
|
|
||||||
<link rel="modulepreload" href="/react/is-buffer.f91fab60.js">
|
|
||||||
<link rel="modulepreload" href="/react/rehype-raw.4c3d8b62.js">
|
|
||||||
<link rel="modulepreload" href="/react/d3-array.1895b022.js">
|
|
||||||
<link rel="modulepreload" href="/react/parse-numeric-range.fd682744.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-util-parse-selector.1be1f27a.js">
|
|
||||||
<link rel="modulepreload" href="/react/refractor.9012dc30.js">
|
|
||||||
<link rel="modulepreload" href="/react/css-box-model.54a3012b.js">
|
|
||||||
<link rel="modulepreload" href="/react/tiny-invariant.817bfd36.js">
|
|
||||||
<link rel="modulepreload" href="/react/object-assign.f7ed182d.js">
|
|
||||||
<link rel="modulepreload" href="/react/reselect.68dc670d.js">
|
|
||||||
<link rel="modulepreload" href="/react/rehype-slug.8f0b0db8.js">
|
|
||||||
<link rel="modulepreload" href="/react/resize-observer-polyfill.2e10476d.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-factory-title.f4e107a2.js">
|
|
||||||
<link rel="modulepreload" href="/react/mdast-util-gfm-table.f1729384.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-query.15f431cf.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-i18next.b628690b.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-factory-destination.08e32d90.js">
|
|
||||||
<link rel="modulepreload" href="/react/d3-scale.40adf854.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-util-to-string.03a4649a.js">
|
|
||||||
<link rel="modulepreload" href="/react/d3-path.a0f08300.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-util-whitespace.b9acc724.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-classify-character.bb02743f.js">
|
|
||||||
<link rel="modulepreload" href="/react/@babel.d4f90752.js">
|
|
||||||
<link rel="modulepreload" href="/react/performance-now.3ab08c2f.js">
|
|
||||||
<link rel="modulepreload" href="/react/d3-time.03d82efa.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-smooth.ec2093ff.js">
|
|
||||||
<link rel="modulepreload" href="/react/stringify-entities.a3ae839a.js">
|
|
||||||
<link rel="modulepreload" href="/react/@sentry.c26c3197.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-lifecycles-compat.8d6bbd76.js">
|
|
||||||
<link rel="modulepreload" href="/react/html-void-elements.d3b5aea3.js">
|
|
||||||
<link rel="modulepreload" href="/react/rehype-parse.74f2042d.js">
|
|
||||||
<link rel="modulepreload" href="/react/d3-color.69ee14e3.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-subtokenize.0273ad72.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-router.47f931a4.js">
|
|
||||||
<link rel="modulepreload" href="/react/deepmerge.a6dda5ef.js">
|
|
||||||
<link rel="modulepreload" href="/react/file-selector.6172b388.js">
|
|
||||||
<link rel="modulepreload" href="/react/mdast-util-gfm-task-list-item.36dc3006.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-to-hyperscript.55881f10.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-fast-compare.d5a5a050.js">
|
|
||||||
<link rel="modulepreload" href="/react/fast-equals.9df4a03b.js">
|
|
||||||
<link rel="modulepreload" href="/react/tippy.js.1053d821.js">
|
|
||||||
<link rel="modulepreload" href="/react/@headlessui.f2f54a45.js">
|
|
||||||
<link rel="modulepreload" href="/react/bail.58fa4042.js">
|
|
||||||
<link rel="modulepreload" href="/react/vfile-location.85c89654.js">
|
|
||||||
<link rel="modulepreload" href="/react/recharts.38803f97.js">
|
|
||||||
<link rel="modulepreload" href="/react/unist-util-filter.14ea3396.js">
|
|
||||||
<link rel="modulepreload" href="/react/direction.5373b893.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark.31ec2ae2.js">
|
|
||||||
<link rel="modulepreload" href="/react/goober.56221fd8.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-decode-string.d48b94e2.js">
|
|
||||||
<link rel="modulepreload" href="/react/react-datepicker.3e071b73.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-util-is-element.4ae8c712.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-chunked.62b98efd.js">
|
|
||||||
<link rel="modulepreload" href="/react/mdurl.530e10e1.js">
|
|
||||||
<link rel="modulepreload" href="/react/mdast-util-find-and-replace.c8360cfe.js">
|
|
||||||
<link rel="modulepreload" href="/react/internmap.bf78dfdb.js">
|
|
||||||
<link rel="modulepreload" href="/react/tiny-warning.14328f40.js">
|
|
||||||
<link rel="modulepreload" href="/react/css-selector-parser.838f527e.js">
|
|
||||||
<link rel="modulepreload" href="/react/decimal.js-light.b1218db1.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-util-has-property.bf6e0cae.js">
|
|
||||||
<link rel="modulepreload" href="/react/unified.ac4b28d0.js">
|
|
||||||
<link rel="modulepreload" href="/react/@uiw.e53102d7.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-combine-extensions.fc6008e7.js">
|
|
||||||
<link rel="modulepreload" href="/react/d3-time-format.0353a6ed.js">
|
|
||||||
<link rel="modulepreload" href="/react/style-to-object.74a4cfe6.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-util-raw.6bdb4dc9.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-resolve-all.b4e652e2.js">
|
|
||||||
<link rel="modulepreload" href="/react/bcp-47-match.b7ba7942.js">
|
|
||||||
<link rel="modulepreload" href="/react/stylis.ba53937c.js">
|
|
||||||
<link rel="modulepreload" href="/react/mdast-util-definitions.fd07577f.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-util-decode-numeric-character-reference.029edbd3.js">
|
|
||||||
<link rel="modulepreload" href="/react/unist-builder.67dd3ae6.js">
|
|
||||||
<link rel="modulepreload" href="/react/memoize-one.413f527d.js">
|
|
||||||
<link rel="modulepreload" href="/react/hast-util-to-html.54b58e35.js">
|
|
||||||
<link rel="modulepreload" href="/react/micromark-extension-gfm-table.f7983341.js">
|
|
||||||
<link rel="modulepreload" href="/react/unist-util-visit-parents.78083329.js">
|
|
||||||
<link rel="modulepreload" href="/react/github-slugger.144f2824.js">
|
|
||||||
<link rel="modulepreload" href="/react/dayjs.6e560245.js">
|
|
||||||
<link rel="modulepreload" href="/react/rehype.bee4df94.js">
|
|
||||||
<link rel="modulepreload" href="/react/history.8119d98b.js">
|
|
||||||
<link rel="modulepreload" href="/react/inline-style-parser.ec55a77b.js">
|
|
||||||
<link rel="modulepreload" href="/react/is-hexadecimal.d91cb013.js">
|
<link rel="modulepreload" href="/react/is-hexadecimal.d91cb013.js">
|
||||||
<link rel="modulepreload" href="/react/react-is.c6bf3c04.js">
|
<link rel="modulepreload" href="/react/internmap.bf78dfdb.js">
|
||||||
<link rel="modulepreload" href="/react/rehype-attr.8040248d.js">
|
<link rel="modulepreload" href="/react/react-use.b131d4e4.js">
|
||||||
|
<link rel="modulepreload" href="/react/memoize-one.413f527d.js">
|
||||||
|
<link rel="modulepreload" href="/react/parse-entities.0d3eeb8f.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-extension-gfm-strikethrough.39c8bc63.js">
|
||||||
|
<link rel="modulepreload" href="/react/d3-time-format.84293c9a.js">
|
||||||
|
<link rel="modulepreload" href="/react/mdast-util-to-markdown.7e1348ca.js">
|
||||||
|
<link rel="modulepreload" href="/react/i18next.f9b3f786.js">
|
||||||
|
<link rel="modulepreload" href="/react/mdast-util-gfm.a8afc4d4.js">
|
||||||
|
<link rel="modulepreload" href="/react/space-separated-tokens.59bb4ca8.js">
|
||||||
|
<link rel="modulepreload" href="/react/currency.js.cd0659e5.js">
|
||||||
|
<link rel="modulepreload" href="/react/is-plain-obj.9b15794f.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-factory-destination.08e32d90.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-extension-gfm-tagfilter.97dd1d78.js">
|
||||||
|
<link rel="modulepreload" href="/react/mdast-util-gfm-footnote.9832ece2.js">
|
||||||
|
<link rel="modulepreload" href="/react/@uiw.f40ae12b.js">
|
||||||
|
<link rel="modulepreload" href="/react/raf-schd.43184c40.js">
|
||||||
|
<link rel="stylesheet" href="/react/index.f0329153.css">
|
||||||
|
<link rel="modulepreload" href="/react/tippy.js.33e070d5.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-sanitize-uri.dc741380.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-factory-title.f4e107a2.js">
|
||||||
|
<link rel="modulepreload" href="/react/boolbase.bd705bc9.js">
|
||||||
|
<link rel="modulepreload" href="/react/classnames.254a7dff.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-google-login.a35a93aa.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-normalize-identifier.f045ed13.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-beautiful-dnd.ce6bd671.js">
|
||||||
|
<link rel="modulepreload" href="/react/file-selector.8e1450da.js">
|
||||||
|
<link rel="modulepreload" href="/react/bcp-47-match.82067f51.js">
|
||||||
|
<link rel="modulepreload" href="/react/reduce-css-calc.35cb3a35.js">
|
||||||
|
<link rel="modulepreload" href="/react/eventemitter3.e831f4a3.js">
|
||||||
|
<link rel="modulepreload" href="/react/extend.ca41ef84.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-qr-code.f7dc9c91.js">
|
||||||
|
<link rel="modulepreload" href="/react/d3-time.48bf946b.js">
|
||||||
|
<link rel="modulepreload" href="/react/unist-util-stringify-position.7846d611.js">
|
||||||
|
<link rel="modulepreload" href="/react/@tippyjs.5240e2ab.js">
|
||||||
|
<link rel="modulepreload" href="/react/tiny-warning.14328f40.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-html-tag-name.86a7a283.js">
|
||||||
|
<link rel="modulepreload" href="/react/decode-named-character-reference.58fdd984.js">
|
||||||
|
<link rel="modulepreload" href="/react/warning.3e618ed9.js">
|
||||||
|
<link rel="modulepreload" href="/react/is-alphabetical.a64573e0.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-router-dom.5d948220.js">
|
||||||
|
<link rel="modulepreload" href="/react/rehype-prism-plus.19d4cddd.js">
|
||||||
<link rel="modulepreload" href="/react/pretty-bytes.1ef697de.js">
|
<link rel="modulepreload" href="/react/pretty-bytes.1ef697de.js">
|
||||||
|
<link rel="modulepreload" href="/react/dayjs.d754961f.js">
|
||||||
|
<link rel="modulepreload" href="/react/@emotion.b14cd998.js">
|
||||||
|
<link rel="modulepreload" href="/react/use-memo-one.b8c24b4b.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-dropzone.b6706047.js">
|
||||||
|
<link rel="modulepreload" href="/react/d3-shape.c407f78b.js">
|
||||||
|
<link rel="modulepreload" href="/react/is-buffer.f91fab60.js">
|
||||||
|
<link rel="modulepreload" href="/react/unist-builder.67dd3ae6.js">
|
||||||
|
<link rel="modulepreload" href="/react/html-parse-stringify.32417b46.js">
|
||||||
|
<link rel="modulepreload" href="/react/unist-util-filter.14ea3396.js">
|
||||||
|
<link rel="modulepreload" href="/react/d3-color.69ee14e3.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-datepicker.b82a0eea.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-resolve-all.b4e652e2.js">
|
||||||
|
<link rel="modulepreload" href="/react/hast-util-is-element.4ae8c712.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-combine-extensions.fc6008e7.js">
|
||||||
|
<link rel="modulepreload" href="/react/nth-check.53474b0f.js">
|
||||||
|
<link rel="stylesheet" href="/react/@asseinfo.3193d98e.css">
|
||||||
|
<link rel="modulepreload" href="/react/html-void-elements.d3b5aea3.js">
|
||||||
|
<link rel="modulepreload" href="/react/is-alphanumerical.39e15300.js">
|
||||||
|
<link rel="modulepreload" href="/react/throttle-debounce.006a1c17.js">
|
||||||
|
<link rel="modulepreload" href="/react/direction.5373b893.js">
|
||||||
|
<link rel="modulepreload" href="/react/hast-util-heading-rank.0127330c.js">
|
||||||
|
<link rel="modulepreload" href="/react/rehype-ignore.e0470258.js">
|
||||||
|
<link rel="modulepreload" href="/react/markdown-table.f01db7c9.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-extension-gfm-footnote.b328c551.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-smooth.2c402a8c.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark.d3421ea8.js">
|
||||||
|
<link rel="modulepreload" href="/react/@babel.f1839c5f.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-debounce-input.eaa992b0.js">
|
||||||
|
<link rel="modulepreload" href="/react/ts-easing.fc2b827e.js">
|
||||||
|
<link rel="modulepreload" href="/react/attr-accept.6d6aa28d.js">
|
||||||
|
<link rel="modulepreload" href="/react/nano-css.abede7db.js">
|
||||||
|
<link rel="modulepreload" href="/react/void-elements.fa8a9e47.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-dom.c60dcaa6.js">
|
||||||
|
<link rel="modulepreload" href="/react/fast-shallow-equal.b907bd6a.js">
|
||||||
|
<link rel="modulepreload" href="/react/tslib.fa5fc1d5.js">
|
||||||
|
<link rel="modulepreload" href="/react/recharts-scale.dc8389ce.js">
|
||||||
|
<link rel="modulepreload" href="/react/prop-types.a7f6e4c4.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-redux.5670cce6.js">
|
||||||
|
<link rel="modulepreload" href="/react/redux.9b782e58.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-fast-compare.d5a5a050.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-select.c1620801.js">
|
||||||
|
<link rel="modulepreload" href="/react/remark-gfm.e7a04880.js">
|
||||||
|
<link rel="modulepreload" href="/react/hast-util-to-parse5.625ebfe2.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-subtokenize.0273ad72.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-extension-gfm.f1ea290d.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-hot-toast.5a237525.js">
|
||||||
|
<link rel="modulepreload" href="/react/formik.ab8648c2.js">
|
||||||
|
<link rel="modulepreload" href="/react/unist-util-position.207de903.js">
|
||||||
|
<link rel="modulepreload" href="/react/hastscript.f0edb024.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-chunked.62b98efd.js">
|
||||||
|
<link rel="modulepreload" href="/react/jotai.aab81db9.js">
|
||||||
|
<link rel="modulepreload" href="/react/uuid.ef4f150d.js">
|
||||||
|
<link rel="modulepreload" href="/react/character-reference-invalid.9429e209.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-lifecycles-compat.8d6bbd76.js">
|
||||||
|
<link rel="modulepreload" href="/react/parse-numeric-range.fd682744.js">
|
||||||
|
<link rel="modulepreload" href="/react/axios.8c581cdc.js">
|
||||||
|
<link rel="modulepreload" href="/react/toggle-selection.25b8be4d.js">
|
||||||
|
<link rel="modulepreload" href="/react/rehype-raw.f523f917.js">
|
||||||
|
<link rel="modulepreload" href="/react/unist-util-is.bd39e4f2.js">
|
||||||
|
<link rel="modulepreload" href="/react/rehype-stringify.df062706.js">
|
||||||
|
<link rel="modulepreload" href="/react/rehype.4c8e9be8.js">
|
||||||
|
<link rel="modulepreload" href="/react/hast-util-from-parse5.56137232.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-is.f8841f29.js">
|
||||||
|
<link rel="modulepreload" href="/react/character-entities-html4.bfdecac8.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-character.811e4fc8.js">
|
||||||
|
<link rel="modulepreload" href="/react/refractor.fd19e74e.js">
|
||||||
|
<link rel="modulepreload" href="/react/rehype-attr.a7e03b64.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-icons.fc270227.js">
|
||||||
|
<link rel="modulepreload" href="/react/github-slugger.b13b4a70.js">
|
||||||
|
<link rel="modulepreload" href="/react/lodash.debounce.856c164a.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-markdown.0e68cdd0.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-classify-character.bb02743f.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-popper.9ab0f4d7.js">
|
||||||
|
<link rel="modulepreload" href="/react/fast-deep-equal.acde360c.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-extension-gfm-task-list-item.33d9f10c.js">
|
||||||
|
<link rel="modulepreload" href="/react/d3-interpolate.c988a5d7.js">
|
||||||
|
<link rel="modulepreload" href="/react/reselect.de22b1b7.js">
|
||||||
|
<link rel="modulepreload" href="/react/unist-util-visit.7a4beab6.js">
|
||||||
|
<link rel="modulepreload" href="/react/parse5.761ebfb8.js">
|
||||||
|
<link rel="modulepreload" href="/react/mdast-util-find-and-replace.60a1bc2c.js">
|
||||||
|
<link rel="modulepreload" href="/react/msal.be72c8ff.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-extension-gfm-table.f7983341.js">
|
||||||
|
<link rel="modulepreload" href="/react/property-information.3a528fcb.js">
|
||||||
|
<link rel="modulepreload" href="/react/d3-path.a0f08300.js">
|
||||||
|
<link rel="modulepreload" href="/react/fast-equals.9df4a03b.js">
|
||||||
|
<link rel="modulepreload" href="/react/tiny-invariant.4a33ca3a.js">
|
||||||
|
<link rel="modulepreload" href="/react/css-unit-converter.d617fa75.js">
|
||||||
|
<link rel="modulepreload" href="/react/@reduxjs.1f71e996.js">
|
||||||
|
<link rel="modulepreload" href="/react/@remix-run.e74ca769.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-query.b4e01096.js">
|
||||||
|
<link rel="modulepreload" href="/react/style-to-object.74a4cfe6.js">
|
||||||
|
<link rel="modulepreload" href="/react/d3-scale.d5d64494.js">
|
||||||
|
<link rel="modulepreload" href="/react/hast-util-parse-selector.1be1f27a.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-encode.2bb97fcf.js">
|
||||||
|
<link rel="modulepreload" href="/react/@floating-ui.1d43bb23.js">
|
||||||
|
<link rel="modulepreload" href="/react/vfile.65955e00.js">
|
||||||
|
<link rel="modulepreload" href="/react/bail.58fa4042.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-router.aa61f6e8.js">
|
||||||
|
<link rel="modulepreload" href="/react/decimal.js-light.b1218db1.js">
|
||||||
|
<link rel="modulepreload" href="/react/js-cookie.a424ed8d.js">
|
||||||
|
<link rel="modulepreload" href="/react/css-selector-parser.838f527e.js">
|
||||||
|
<link rel="modulepreload" href="/react/hast-util-whitespace.b9acc724.js">
|
||||||
|
<link rel="modulepreload" href="/react/mdast-util-gfm-strikethrough.4389f7f3.js">
|
||||||
|
<link rel="modulepreload" href="/react/object-assign.f7ed182d.js">
|
||||||
|
<link rel="modulepreload" href="/react/remark-parse.079ed600.js">
|
||||||
|
<link rel="modulepreload" href="/react/unified.8e87ff8a.js">
|
||||||
|
<link rel="modulepreload" href="/react/mdast-util-to-string.717718d5.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-feather.464ed696.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-i18next.3f8ace4b.js">
|
||||||
|
<link rel="modulepreload" href="/react/hast-util-to-html.234f88e7.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-decode-numeric-character-reference.029edbd3.js">
|
||||||
|
<link rel="modulepreload" href="/react/recharts.c8945651.js">
|
||||||
|
<link rel="modulepreload" href="/react/hast-util-has-property.bf6e0cae.js">
|
||||||
|
<link rel="modulepreload" href="/react/vfile-location.85c89654.js">
|
||||||
|
<link rel="modulepreload" href="/react/hast-util-raw.fe1282e9.js">
|
||||||
|
<link rel="modulepreload" href="/react/remark-rehype.9f06c99a.js">
|
||||||
|
<link rel="modulepreload" href="/react/ccount.24f4fb2a.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-universal-interface.4a8b8b61.js">
|
||||||
|
<link rel="modulepreload" href="/react/qr.js.da7c6dcd.js">
|
||||||
|
<link rel="modulepreload" href="/react/@asseinfo.5ffe303c.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-core-commonmark.53c183e2.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-microsoft-login.9ff59228.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-util-decode-string.d48b94e2.js">
|
||||||
|
<link rel="modulepreload" href="/react/immer.3239d3dc.js">
|
||||||
|
<link rel="modulepreload" href="/react/rehype-rewrite.fabf64e9.js">
|
||||||
|
<link rel="modulepreload" href="/react/lodash-es.dd7c056c.js">
|
||||||
|
<link rel="modulepreload" href="/react/lodash.c2607a2a.js">
|
||||||
|
<link rel="modulepreload" href="/react/deepmerge.a6dda5ef.js">
|
||||||
|
<link rel="modulepreload" href="/react/unist-util-visit-parents.56bb16a1.js">
|
||||||
|
<link rel="modulepreload" href="/react/scheduler.a959f150.js">
|
||||||
|
<link rel="modulepreload" href="/react/stylis.967d24d9.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-json-view.3f2a7802.js">
|
||||||
|
<link rel="modulepreload" href="/react/screenfull.4b7dcae0.js">
|
||||||
|
<link rel="modulepreload" href="/react/@sentry.6e94e5db.js">
|
||||||
|
<link rel="modulepreload" href="/react/web-namespaces.a24d7a09.js">
|
||||||
|
<link rel="modulepreload" href="/react/hast-to-hyperscript.7bd6ed35.js">
|
||||||
|
<link rel="modulepreload" href="/react/copy-to-clipboard.107ef1da.js">
|
||||||
|
<link rel="modulepreload" href="/react/trough.e66b541d.js">
|
||||||
|
<link rel="modulepreload" href="/react/array-move.20870289.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-extension-gfm-autolink-literal.75d97f6e.js">
|
||||||
|
<link rel="modulepreload" href="/react/set-harmonic-interval.933d0946.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-resize-detector.55fbacd6.js">
|
||||||
|
<link rel="modulepreload" href="/react/@headlessui.d1a49191.js">
|
||||||
|
<link rel="modulepreload" href="/react/rehype-autolink-headings.44122af2.js">
|
||||||
|
<link rel="modulepreload" href="/react/@xobotyi.606f64fa.js">
|
||||||
|
<link rel="modulepreload" href="/react/trim-lines.a08a0c08.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-onclickoutside.af17f133.js">
|
||||||
|
<link rel="modulepreload" href="/react/comma-separated-tokens.826a3e44.js">
|
||||||
|
<link rel="modulepreload" href="/react/character-entities-legacy.cb27298c.js">
|
||||||
|
<link rel="modulepreload" href="/react/d3-format.5a3f6ba7.js">
|
||||||
|
<link rel="modulepreload" href="/react/goober.f083a39d.js">
|
||||||
|
<link rel="modulepreload" href="/react/collect.js.3ca95072.js">
|
||||||
<link rel="modulepreload" href="/react/micromark-factory-space.84551a41.js">
|
<link rel="modulepreload" href="/react/micromark-factory-space.84551a41.js">
|
||||||
<link rel="modulepreload" href="/react/rehype-stringify.540b84fb.js">
|
<link rel="modulepreload" href="/react/mdast-util-gfm-table.f1729384.js">
|
||||||
<link rel="modulepreload" href="/react/d3-interpolate.f5146873.js">
|
<link rel="modulepreload" href="/react/hast-util-to-string.03a4649a.js">
|
||||||
<link rel="modulepreload" href="/react/mdast-util-to-hast.d1d8e0b2.js">
|
<link rel="modulepreload" href="/react/zwitch.84c833f3.js">
|
||||||
<link rel="modulepreload" href="/react/trough.714478ec.js">
|
<link rel="modulepreload" href="/react/mdast-util-gfm-autolink-literal.c934cb3a.js">
|
||||||
<link rel="modulepreload" href="/react/@tippyjs.36ad76fa.js">
|
<link rel="modulepreload" href="/react/inline-style-parser.ec55a77b.js">
|
||||||
<link rel="modulepreload" href="/react/@reduxjs.9b745b7e.js">
|
<link rel="modulepreload" href="/react/rehype-parse.453fda54.js">
|
||||||
<link rel="modulepreload" href="/react/classnames.02e8c2fa.js">
|
<link rel="modulepreload" href="/react/micromark-factory-label.2e0fc916.js">
|
||||||
|
<link rel="modulepreload" href="/react/css-box-model.973b9073.js">
|
||||||
|
<link rel="stylesheet" href="/react/@uiw.f7899131.css">
|
||||||
|
<link rel="modulepreload" href="/react/use-isomorphic-layout-effect.07a92e11.js">
|
||||||
|
<link rel="modulepreload" href="/react/vfile-message.531f27be.js">
|
||||||
|
<link rel="modulepreload" href="/react/micromark-factory-whitespace.4e8e9fce.js">
|
||||||
|
<link rel="modulepreload" href="/react/hast-util-select.19d9d11a.js">
|
||||||
|
<link rel="modulepreload" href="/react/mdast-util-definitions.f453f0a8.js">
|
||||||
|
<link rel="modulepreload" href="/react/date-fns.c9928d0b.js">
|
||||||
|
<link rel="modulepreload" href="/react/rehype-slug.79dc0c87.js">
|
||||||
|
<link rel="stylesheet" href="/react/react-datepicker.d89d2ad1.css">
|
||||||
|
<link rel="modulepreload" href="/react/mdast-util-gfm-task-list-item.36dc3006.js">
|
||||||
|
<link rel="modulepreload" href="/react/mdast-util-to-hast.f08c5f84.js">
|
||||||
|
<link rel="modulepreload" href="/react/is-decimal.247a88b7.js">
|
||||||
|
<link rel="modulepreload" href="/react/@popperjs.37a74db9.js">
|
||||||
|
<link rel="modulepreload" href="/react/react-string-replace.6d88c783.js">
|
||||||
|
<link rel="modulepreload" href="/react/stringify-entities.a8aab4da.js">
|
||||||
|
<link rel="modulepreload" href="/react/redux-thunk.281dc3fb.js">
|
||||||
|
<link rel="modulepreload" href="/react/d3-array.1895b022.js">
|
||||||
|
<script type="module" crossorigin src="/react/index.8ce41049.js"></script>
|
||||||
|
<link rel="modulepreload" href="/react/unist-util-generated.22d80e74.js">
|
||||||
|
@ -59,3 +59,5 @@ Route::get('checkout/3ds_redirect/{company_key}/{company_gateway_id}/{hash}', [C
|
|||||||
Route::get('mollie/3ds_redirect/{company_key}/{company_gateway_id}/{hash}', [Mollie3dsController::class, 'index'])->middleware('domain_db')->name('mollie.3ds_redirect');
|
Route::get('mollie/3ds_redirect/{company_key}/{company_gateway_id}/{hash}', [Mollie3dsController::class, 'index'])->middleware('domain_db')->name('mollie.3ds_redirect');
|
||||||
Route::get('gocardless/ibp_redirect/{company_key}/{company_gateway_id}/{hash}', [GoCardlessController::class, 'ibpRedirect'])->middleware('domain_db')->name('gocardless.ibp_redirect');
|
Route::get('gocardless/ibp_redirect/{company_key}/{company_gateway_id}/{hash}', [GoCardlessController::class, 'ibpRedirect'])->middleware('domain_db')->name('gocardless.ibp_redirect');
|
||||||
Route::get('.well-known/apple-developer-merchantid-domain-association', [ApplePayDomainController::class, 'showAppleMerchantId']);
|
Route::get('.well-known/apple-developer-merchantid-domain-association', [ApplePayDomainController::class, 'showAppleMerchantId']);
|
||||||
|
|
||||||
|
Route::fallback([BaseController::class, 'reactCatch']);
|
Loading…
x
Reference in New Issue
Block a user