diff --git a/VERSION.txt b/VERSION.txt
index 230cac8f9b7e..f3cb8c412987 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-5.6.30
\ No newline at end of file
+5.6.31
\ No newline at end of file
diff --git a/app/Console/Commands/CheckData.php b/app/Console/Commands/CheckData.php
index 4f522262d093..7d931c1022fa 100644
--- a/app/Console/Commands/CheckData.php
+++ b/app/Console/Commands/CheckData.php
@@ -35,6 +35,7 @@ use App\Models\BankTransaction;
use App\Models\QuoteInvitation;
use Illuminate\Console\Command;
use App\Models\CreditInvitation;
+use App\Models\RecurringInvoice;
use App\Models\InvoiceInvitation;
use App\DataMapper\ClientSettings;
use Illuminate\Support\Facades\DB;
@@ -471,7 +472,7 @@ class CheckData extends Command
$ii->saveQuietly();
});
- collect([Invoice::class, Quote::class, Credit::class, PurchaseOrder::class])->each(function ($entity) {
+ collect([Invoice::class, Quote::class, Credit::class, PurchaseOrder::class, RecurringInvoice::class])->each(function ($entity) {
if ($entity::doesntHave('invitations')->count() > 0) {
$entity::doesntHave('invitations')->cursor()->each(function ($entity) {
$client_vendor_key = 'client_id';
@@ -694,7 +695,7 @@ class CheckData extends Command
{
$this->wrong_balances = 0;
- Client::cursor()->where('is_deleted', 0)->where('clients.updated_at', '>', now()->subDays(2))->each(function ($client) {
+ Client::query()->cursor()->where('is_deleted', 0)->where('clients.updated_at', '>', now()->subDays(2))->each(function ($client) {
$client->invoices->where('is_deleted', false)->whereIn('status_id', '!=', Invoice::STATUS_DRAFT)->each(function ($invoice) use ($client) {
$total_paid = $invoice->payments()
->where('is_deleted', false)->whereIn('status_id', [Payment::STATUS_COMPLETED, Payment::STATUS_PENDING, Payment::STATUS_PARTIALLY_REFUNDED, Payment::STATUS_REFUNDED])
@@ -876,7 +877,7 @@ class CheckData extends Command
$this->wrong_balances = 0;
$this->wrong_paid_to_dates = 0;
- foreach (Client::where('is_deleted', 0)->where('clients.updated_at', '>', now()->subDays(2))->cursor() as $client) {
+ foreach (Client::query()->where('is_deleted', 0)->where('clients.updated_at', '>', now()->subDays(2))->cursor() as $client) {
$invoice_balance = $client->invoices()->where('is_deleted', false)->whereIn('status_id', [2,3])->sum('balance');
$ledger = CompanyLedger::where('client_id', $client->id)->orderBy('id', 'DESC')->first();
diff --git a/app/DataMapper/Analytics/RevenueTrack.php b/app/DataMapper/Analytics/RevenueTrack.php
new file mode 100644
index 000000000000..0e790c63b4b5
--- /dev/null
+++ b/app/DataMapper/Analytics/RevenueTrack.php
@@ -0,0 +1,101 @@
+int_metric1 = $int_metric1;
+ $this->double_metric2 = $double_metric2;
+ $this->string_metric5 = $string_metric5;
+ $this->string_metric6 = $string_metric6;
+ $this->string_metric7 = $string_metric7;
+ $this->string_metric8 = $string_metric8;
+ $this->string_metric9 = $string_metric9;
+ $this->string_metric10 = $string_metric10;
+ }
+}
diff --git a/app/DataMapper/InvoiceItem.php b/app/DataMapper/InvoiceItem.php
index 49571d668fdf..cdb1953c9be4 100644
--- a/app/DataMapper/InvoiceItem.php
+++ b/app/DataMapper/InvoiceItem.php
@@ -61,8 +61,13 @@ class InvoiceItem
public $tax_id = '';
+ public $task_id = '';
+
+ public $expense_id = '';
public static $casts = [
+ 'task_id' => 'string',
+ 'expense_id' => 'string',
'tax_id' => 'string',
'type_id' => 'string',
'quantity' => 'float',
diff --git a/app/Events/Account/StripeConnectFailure.php b/app/Events/Account/StripeConnectFailure.php
new file mode 100644
index 000000000000..fd6f5a5d5738
--- /dev/null
+++ b/app/Events/Account/StripeConnectFailure.php
@@ -0,0 +1,36 @@
+orWhere('credits.custom_value4', 'like', '%'.$filter.'%')
->orWhereHas('client', function ($q) use ($filter) {
$q->where('name', 'like', '%'.$filter.'%');
+ })
+ ->orWhereHas('client.contacts', function ($q) use ($filter) {
+ $q->where('first_name', 'like', '%'.$filter.'%')
+ ->orWhere('last_name', 'like', '%'.$filter.'%')
+ ->orWhere('email', 'like', '%'.$filter.'%');
});
});
}
diff --git a/app/Filters/InvoiceFilters.php b/app/Filters/InvoiceFilters.php
index deab3483fd8b..8ade4be3a6a1 100644
--- a/app/Filters/InvoiceFilters.php
+++ b/app/Filters/InvoiceFilters.php
@@ -116,6 +116,11 @@ class InvoiceFilters extends QueryFilters
->orWhere('custom_value4', 'like', '%'.$filter.'%')
->orWhereHas('client', function ($q) use ($filter) {
$q->where('name', 'like', '%'.$filter.'%');
+ })
+ ->orWhereHas('client.contacts', function ($q) use ($filter) {
+ $q->where('first_name', 'like', '%'.$filter.'%')
+ ->orWhere('last_name', 'like', '%'.$filter.'%')
+ ->orWhere('email', 'like', '%'.$filter.'%');
});
});
}
diff --git a/app/Filters/PaymentFilters.php b/app/Filters/PaymentFilters.php
index 38381ed786bb..b6c82430baad 100644
--- a/app/Filters/PaymentFilters.php
+++ b/app/Filters/PaymentFilters.php
@@ -44,7 +44,12 @@ class PaymentFilters extends QueryFilters
->orWhere('custom_value4', 'like', '%'.$filter.'%')
->orWhereHas('client', function ($q) use ($filter) {
$q->where('name', 'like', '%'.$filter.'%');
- });
+ })
+ ->orWhereHas('client.contacts', function ($q) use ($filter) {
+ $q->where('first_name', 'like', '%'.$filter.'%')
+ ->orWhere('last_name', 'like', '%'.$filter.'%')
+ ->orWhere('email', 'like', '%'.$filter.'%');
+ });
});
}
diff --git a/app/Filters/QuoteFilters.php b/app/Filters/QuoteFilters.php
index a08c6aa09418..26a6b3f0ae2e 100644
--- a/app/Filters/QuoteFilters.php
+++ b/app/Filters/QuoteFilters.php
@@ -40,7 +40,12 @@ class QuoteFilters extends QueryFilters
->orWhere('custom_value4', 'like', '%'.$filter.'%')
->orWhereHas('client', function ($q) use ($filter) {
$q->where('name', 'like', '%'.$filter.'%');
- });
+ })
+ ->orWhereHas('client.contacts', function ($q) use ($filter) {
+ $q->where('first_name', 'like', '%'.$filter.'%')
+ ->orWhere('last_name', 'like', '%'.$filter.'%')
+ ->orWhere('email', 'like', '%'.$filter.'%');
+ });
});
}
diff --git a/app/Filters/RecurringInvoiceFilters.php b/app/Filters/RecurringInvoiceFilters.php
index 03a66b11f127..71fcca9d101f 100644
--- a/app/Filters/RecurringInvoiceFilters.php
+++ b/app/Filters/RecurringInvoiceFilters.php
@@ -42,7 +42,12 @@ class RecurringInvoiceFilters extends QueryFilters
->orWhere('custom_value4', 'like', '%'.$filter.'%')
->orWhereHas('client', function ($q) use ($filter) {
$q->where('name', 'like', '%'.$filter.'%');
- });
+ })
+ ->orWhereHas('client.contacts', function ($q) use ($filter) {
+ $q->where('first_name', 'like', '%'.$filter.'%')
+ ->orWhere('last_name', 'like', '%'.$filter.'%')
+ ->orWhere('email', 'like', '%'.$filter.'%');
+ });
});
}
diff --git a/app/Filters/TaskFilters.php b/app/Filters/TaskFilters.php
index 3e09a0d2addf..0c564af5a4f6 100644
--- a/app/Filters/TaskFilters.php
+++ b/app/Filters/TaskFilters.php
@@ -45,7 +45,12 @@ class TaskFilters extends QueryFilters
})
->orWhereHas('client', function ($q) use ($filter) {
$q->where('name', 'like', '%'.$filter.'%');
- });
+ })
+ ->orWhereHas('client.contacts', function ($q) use ($filter) {
+ $q->where('first_name', 'like', '%'.$filter.'%')
+ ->orWhere('last_name', 'like', '%'.$filter.'%')
+ ->orWhere('email', 'like', '%'.$filter.'%');
+ });
});
}
diff --git a/app/Filters/UserFilters.php b/app/Filters/UserFilters.php
index 12a26d27a6cf..3989ec7450ed 100644
--- a/app/Filters/UserFilters.php
+++ b/app/Filters/UserFilters.php
@@ -127,8 +127,7 @@ class UserFilters extends QueryFilters
$user_array = $this->transformKeys(explode(',', $user_id));
return $this->builder->where(function ($query) use ($user_array) {
- $query->whereNotIn('id', $user_array)
- ->where('account_id', auth()->user()->account_id);
+ $query->whereNotIn('id', $user_array);
});
}
}
diff --git a/app/Http/Controllers/ClientPortal/InvoiceController.php b/app/Http/Controllers/ClientPortal/InvoiceController.php
index f67ae6042705..265cc5f8961e 100644
--- a/app/Http/Controllers/ClientPortal/InvoiceController.php
+++ b/app/Http/Controllers/ClientPortal/InvoiceController.php
@@ -252,11 +252,20 @@ class InvoiceController extends Controller
// create new archive
$zipFile = new \PhpZip\ZipFile();
try {
+
foreach ($invoices as $invoice) {
- //add it to the zip
- $zipFile->addFromString(basename($invoice->pdf_file_path()), file_get_contents($invoice->pdf_file_path(null, 'url', true)));
+
+ if ($invoice->client->getSetting('enable_e_invoice')) {
+ $xml = $invoice->service()->getEInvoice();
+ $zipFile->addFromString($invoice->getFileName("xml"), $xml);
+ }
+
+ $file = $invoice->service()->getRawInvoicePdf();
+ $zip_file_name = $invoice->getFileName();
+ $zipFile->addFromString($zip_file_name, $file);
}
+
$filename = date('Y-m-d').'_'.str_replace(' ', '_', trans('texts.invoices')).'.zip';
$filepath = sys_get_temp_dir().'/'.$filename;
diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php
index d52068faa310..626c22df9acc 100644
--- a/app/Http/Controllers/InvoiceController.php
+++ b/app/Http/Controllers/InvoiceController.php
@@ -162,7 +162,9 @@ class InvoiceController extends BaseController
*/
public function create(CreateInvoiceRequest $request)
{
- $invoice = InvoiceFactory::create(auth()->user()->company()->id, auth()->user()->id);
+ /** @var \App\Models\User $user */
+ $user = auth()->user();
+ $invoice = InvoiceFactory::create($user->company()->id, $user->id);
return $this->itemResponse($invoice);
}
@@ -211,7 +213,11 @@ class InvoiceController extends BaseController
*/
public function store(StoreInvoiceRequest $request)
{
- $invoice = $this->invoice_repo->save($request->all(), InvoiceFactory::create(auth()->user()->company()->id, auth()->user()->id));
+
+ /** @var \App\Models\User $user */
+ $user = auth()->user();
+
+ $invoice = $this->invoice_repo->save($request->all(), InvoiceFactory::create($user->company()->id, $user->id));
$invoice = $invoice->service()
->fillDefaults()
@@ -219,7 +225,7 @@ class InvoiceController extends BaseController
->adjustInventory()
->save();
- event(new InvoiceWasCreated($invoice, $invoice->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null)));
+ event(new InvoiceWasCreated($invoice, $invoice->company, Ninja::eventVars($user ? $user->id : null)));
$transaction = [
'invoice' => $invoice->transaction_event(),
@@ -473,62 +479,17 @@ class InvoiceController extends BaseController
return $this->itemResponse($invoice->fresh());
}
- /**
- * Perform bulk actions on the list view.
- *
- * @return \Illuminate\Support\Collection
- *
- * @OA\Post(
- * path="/api/v1/invoices/bulk",
- * operationId="bulkInvoices",
- * tags={"invoices"},
- * summary="Performs bulk actions on an array of invoices",
- * description="",
- * @OA\Parameter(ref="#/components/parameters/X-API-TOKEN"),
- * @OA\Parameter(ref="#/components/parameters/X-Requested-With"),
- * @OA\Parameter(ref="#/components/parameters/index"),
- * @OA\RequestBody(
- * description="User credentials",
- * required=true,
- * @OA\MediaType(
- * mediaType="application/json",
- * @OA\Schema(
- * type="array",
- * @OA\Items(
- * type="integer",
- * description="Array of hashed IDs to be bulk 'actioned",
- * example="[0,1,2,3]",
- * ),
- * )
- * )
- * ),
- * @OA\Response(
- * response=200,
- * description="The Bulk Action response",
- * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"),
- * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"),
- * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"),
- * ),
- * @OA\Response(
- * response=422,
- * description="Validation error",
- * @OA\JsonContent(ref="#/components/schemas/ValidationError"),
-
- * ),
- * @OA\Response(
- * response="default",
- * description="Unexpected Error",
- * @OA\JsonContent(ref="#/components/schemas/Error"),
- * ),
- * )
- */
public function bulk(BulkInvoiceRequest $request)
{
+
+ /** @var \App\Models\User $user */
+ $user = auth()->user();
+
$action = $request->input('action');
$ids = $request->input('ids');
- if (Ninja::isHosted() && (stripos($action, 'email') !== false) && !auth()->user()->company()->account->account_sms_verified) {
+ if (Ninja::isHosted() && (stripos($action, 'email') !== false) && !$user->company()->account->account_sms_verified) {
return response(['message' => 'Please verify your account to send emails.'], 400);
}
@@ -543,8 +504,8 @@ class InvoiceController extends BaseController
*/
if ($action == 'bulk_download' && $invoices->count() > 1) {
- $invoices->each(function ($invoice) {
- if (auth()->user()->cannot('view', $invoice)) {
+ $invoices->each(function ($invoice) use($user) {
+ if ($user->cannot('view', $invoice)) {
nlog('access denied');
return response()->json(['message' => ctrans('text.access_denied')]);
@@ -556,7 +517,7 @@ class InvoiceController extends BaseController
return response()->json(['message' => ctrans('texts.sent_message')], 200);
}
- if ($action == 'download' && $invoices->count() >=1 && auth()->user()->can('view', $invoices->first())) {
+ if ($action == 'download' && $invoices->count() >=1 && $user->can('view', $invoices->first())) {
$file = $invoices->first()->service()->getInvoicePdf();
return response()->streamDownload(function () use ($file) {
@@ -564,7 +525,7 @@ class InvoiceController extends BaseController
}, basename($file), ['Content-Type' => 'application/pdf']);
}
- if ($action == 'bulk_print' && auth()->user()->can('view', $invoices->first())) {
+ if ($action == 'bulk_print' && $user->can('view', $invoices->first())) {
$paths = $invoices->map(function ($invoice) {
return $invoice->service()->getInvoicePdf();
});
@@ -579,15 +540,15 @@ class InvoiceController extends BaseController
/*
* Send the other actions to the switch
*/
- $invoices->each(function ($invoice, $key) use ($action) {
- if (auth()->user()->can('edit', $invoice)) {
+ $invoices->each(function ($invoice, $key) use ($action, $user) {
+ if ($user->can('edit', $invoice)) {
$this->performAction($invoice, $action, true);
}
});
/* Need to understand which permission are required for the given bulk action ie. view / edit */
- return $this->listResponse(Invoice::withTrashed()->whereIn('id', $this->transformKeys($ids))->company());
+ return $this->listResponse(Invoice::query()->withTrashed()->whereIn('id', $this->transformKeys($ids))->company());
}
/**
@@ -889,6 +850,7 @@ class InvoiceController extends BaseController
$invoice = $invitation->invoice;
$file = $invoice->service()->getEInvoice($contact);
+ $file_name = $invoice->getFileName("xml");
$headers = ['Content-Type' => 'application/xml'];
@@ -897,8 +859,8 @@ class InvoiceController extends BaseController
}
return response()->streamDownload(function () use ($file) {
- echo Storage::get($file);
- }, basename($file), $headers);
+ echo $file;
+ }, $file_name, $headers);
}
/**
@@ -1005,16 +967,17 @@ class InvoiceController extends BaseController
*/
public function upload(UploadInvoiceRequest $request, Invoice $invoice)
{
+
if (! $this->checkFeature(Account::FEATURE_DOCUMENTS)) {
return $this->featureFailure();
}
if ($request->has('documents')) {
- $this->saveDocuments($request->file('documents'), $invoice);
+ $this->saveDocuments($request->file('documents'), $invoice, $request->input('is_public', true));
}
if ($request->has('file')) {
- $this->saveDocuments($request->file('documents'), $invoice);
+ $this->saveDocuments($request->file('documents'), $invoice, $request->input('is_public', true));
}
return $this->itemResponse($invoice->fresh());
@@ -1022,7 +985,10 @@ class InvoiceController extends BaseController
public function update_reminders(UpdateReminderRequest $request)
{
- UpdateReminders::dispatch(auth()->user()->company());
+ /** @var \App\Models\User $user */
+ $user = auth()->user();
+
+ UpdateReminders::dispatch($user->company());
return response()->json(['message' => 'Updating reminders'], 200);
}
diff --git a/app/Http/Livewire/BillingPortalPurchase.php b/app/Http/Livewire/BillingPortalPurchase.php
index 9a7fae37b9ca..74e693faa459 100644
--- a/app/Http/Livewire/BillingPortalPurchase.php
+++ b/app/Http/Livewire/BillingPortalPurchase.php
@@ -62,11 +62,11 @@ class BillingPortalPurchase extends Component
public $password;
/**
- * Instance of subscription.
+ * This arrives as an int and we resolve in the mount method
*
- * @var \App\Models\Subscription $subscription
+ * @var int|Subscription
*/
- public Subscription $subscription;
+ public $subscription;
/**
* Instance of client contact.
diff --git a/app/Http/Livewire/PdfSlot.php b/app/Http/Livewire/PdfSlot.php
index 8c8770eb1205..a97444ba89ee 100644
--- a/app/Http/Livewire/PdfSlot.php
+++ b/app/Http/Livewire/PdfSlot.php
@@ -21,6 +21,7 @@ use App\Models\QuoteInvitation;
use App\Utils\VendorHtmlEngine;
use App\Models\CreditInvitation;
use App\Models\InvoiceInvitation;
+use App\Jobs\Invoice\CreateEInvoice;
use Illuminate\Support\Facades\Cache;
use App\Models\PurchaseOrderInvitation;
use App\Models\RecurringInvoiceInvitation;
@@ -38,7 +39,7 @@ class PdfSlot extends Component
public $pdf;
public $url;
-
+
private $settings;
private $html_variables;
@@ -61,7 +62,7 @@ class PdfSlot extends Component
}
public function getPdf()
- {
+ {
// $this->pdf = $this->entity->fullscreenPdfViewer($this->invitation);
$blob = [
@@ -74,14 +75,14 @@ class PdfSlot extends Component
$hash = Str::random(64);
Cache::put($hash, $blob, now()->addMinutes(2));
-
+
$this->pdf = $hash;
}
public function downloadPdf()
{
-
+
$file_name = $this->entity->numberFormatter().'.pdf';
if($this->entity instanceof \App\Models\PurchaseOrder)
@@ -95,17 +96,32 @@ class PdfSlot extends Component
echo $file;
}, $file_name, $headers);
+ }
+ public function downloadEInvoice()
+ {
+
+ $file_name = $this->entity->numberFormatter().'.xml';
+
+ $file = (new CreateEInvoice($this->entity))->handle();
+
+ $headers = ['Content-Type' => 'application/xml'];
+
+ return response()->streamDownload(function () use ($file) {
+ echo $file;
+ }, $file_name, $headers);
+
}
public function render()
{
-
+
$this->entity_type = $this->resolveEntityType();
$this->settings = $this->entity->client ? $this->entity->client->getMergedSettings() : $this->entity->company->settings;
$this->show_cost = in_array('$product.unit_cost', $this->settings->pdf_variables->product_columns);
$this->show_line_total = in_array('$product.line_total', $this->settings->pdf_variables->product_columns);
+ $this->show_quantity = in_array('$product.quantity', $this->settings->pdf_variables->product_columns);
if($this->entity_type == 'quote' && !$this->settings->sync_invoice_quote_columns ){
$this->show_cost = in_array('$product.unit_cost', $this->settings->pdf_variables->product_quote_columns);
@@ -146,7 +162,7 @@ class PdfSlot extends Component
private function getCompanyAddress()
{
-
+
$company_address = "";
foreach($this->settings->pdf_variables->company_address as $variable) {
@@ -166,7 +182,7 @@ class PdfSlot extends Component
}
return $this->convertVariables($company_details);
-
+
}
private function getEntityDetails()
@@ -174,9 +190,9 @@ class PdfSlot extends Component
$entity_details = "";
if($this->entity_type == 'invoice' || $this->entity_type == 'recurring_invoice') {
- foreach($this->settings->pdf_variables->invoice_details as $variable)
+ foreach($this->settings->pdf_variables->invoice_details as $variable)
$entity_details .= "
{$variable}_label
{$variable}
";
-
+
}
elseif($this->entity_type == 'quote'){
foreach($this->settings->pdf_variables->quote_details as $variable)
@@ -190,7 +206,7 @@ class PdfSlot extends Component
foreach($this->settings->pdf_variables->purchase_order_details as $variable)
$entity_details .= "{$variable}_label
{$variable}
";
}
-
+
return $this->convertVariables($entity_details);
}
@@ -206,7 +222,7 @@ class PdfSlot extends Component
$name = $this->settings->pdf_variables->client_details[0];
}
-
+
return $this->convertVariables($name);
}
@@ -225,7 +241,7 @@ class PdfSlot extends Component
$user_details .= "{$variable}
";
}
}
-
+
return $this->convertVariables($user_details);
}
diff --git a/app/Http/Requests/Invoice/UploadInvoiceRequest.php b/app/Http/Requests/Invoice/UploadInvoiceRequest.php
index 070fb4443d1b..8339f64aa393 100644
--- a/app/Http/Requests/Invoice/UploadInvoiceRequest.php
+++ b/app/Http/Requests/Invoice/UploadInvoiceRequest.php
@@ -23,7 +23,9 @@ class UploadInvoiceRequest extends Request
*/
public function authorize() : bool
{
- return auth()->user()->can('edit', $this->invoice);
+ /** @var \App\Models\User $user */
+ $user = auth()->user();
+ return $user->can('edit', $this->invoice);
}
public function rules()
@@ -42,6 +44,8 @@ class UploadInvoiceRequest extends Request
$rules['file'] = $this->file_validation;
}
+ $rules['is_public'] = 'sometimes|boolean';
+
return $rules;
}
diff --git a/app/Http/Requests/Request.php b/app/Http/Requests/Request.php
index 789d723938c7..5d8577efa189 100644
--- a/app/Http/Requests/Request.php
+++ b/app/Http/Requests/Request.php
@@ -20,7 +20,7 @@ class Request extends FormRequest
use MakesHash;
use RuntimeFormRequest;
- protected $file_validation = 'sometimes|file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx,webp|max:20000';
+ protected $file_validation = 'sometimes|file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx,webp,xml|max:20000';
/**
* Get the validation rules that apply to the request.
*
diff --git a/app/Http/Requests/Shop/StoreShopClientRequest.php b/app/Http/Requests/Shop/StoreShopClientRequest.php
index beffeeac2f1d..140dc08a904b 100644
--- a/app/Http/Requests/Shop/StoreShopClientRequest.php
+++ b/app/Http/Requests/Shop/StoreShopClientRequest.php
@@ -108,7 +108,7 @@ class StoreShopClientRequest extends Request
$settings->currency_id = $this->getCurrencyCode($input['currency_code']);
}
- $input['settings'] = $settings;
+ $input['settings'] = (array)$settings;
if (isset($input['contacts'])) {
foreach ($input['contacts'] as $key => $contact) {
diff --git a/app/Jobs/Entity/CreateEntityPdf.php b/app/Jobs/Entity/CreateEntityPdf.php
index fec14ca6dfe3..7ef89d2c3e81 100644
--- a/app/Jobs/Entity/CreateEntityPdf.php
+++ b/app/Jobs/Entity/CreateEntityPdf.php
@@ -11,37 +11,38 @@
namespace App\Jobs\Entity;
-use App\Exceptions\FilePermissionsFailure;
-use App\Jobs\Invoice\CreateEInvoice;
-use App\Libraries\MultiDB;
+use App\Utils\Ninja;
+use App\Models\Quote;
use App\Models\Credit;
-use App\Models\CreditInvitation;
use App\Models\Design;
use App\Models\Invoice;
-use App\Models\InvoiceInvitation;
-use App\Models\Quote;
+use App\Utils\HtmlEngine;
+use App\Libraries\MultiDB;
+use Illuminate\Bus\Queueable;
use App\Models\QuoteInvitation;
+use App\Utils\Traits\MakesHash;
+use App\Models\CreditInvitation;
use App\Models\RecurringInvoice;
+use App\Utils\PhantomJS\Phantom;
+use App\Models\InvoiceInvitation;
+use App\Utils\HostedPDF\NinjaPdf;
+use App\Utils\Traits\Pdf\PdfMaker;
+use Illuminate\Support\Facades\App;
+use App\Jobs\Invoice\CreateEInvoice;
+use App\Utils\Traits\NumberFormatter;
+use App\Utils\Traits\MakesInvoiceHtml;
+use Illuminate\Queue\SerializesModels;
+use App\Utils\Traits\Pdf\PageNumbering;
+use Illuminate\Support\Facades\Storage;
+use Illuminate\Queue\InteractsWithQueue;
+use App\Exceptions\FilePermissionsFailure;
use App\Models\RecurringInvoiceInvitation;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use horstoeko\zugferd\ZugferdDocumentPdfBuilder;
use App\Services\PdfMaker\Design as PdfDesignModel;
use App\Services\PdfMaker\Design as PdfMakerDesign;
use App\Services\PdfMaker\PdfMaker as PdfMakerService;
-use App\Utils\HostedPDF\NinjaPdf;
-use App\Utils\HtmlEngine;
-use App\Utils\Ninja;
-use App\Utils\PhantomJS\Phantom;
-use App\Utils\Traits\MakesHash;
-use App\Utils\Traits\MakesInvoiceHtml;
-use App\Utils\Traits\NumberFormatter;
-use App\Utils\Traits\Pdf\PageNumbering;
-use App\Utils\Traits\Pdf\PdfMaker;
-use Illuminate\Bus\Queueable;
-use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Foundation\Bus\Dispatchable;
-use Illuminate\Queue\InteractsWithQueue;
-use Illuminate\Queue\SerializesModels;
-use Illuminate\Support\Facades\App;
-use Illuminate\Support\Facades\Storage;
class CreateEntityPdf implements ShouldQueue
{
@@ -116,7 +117,8 @@ class CreateEntityPdf implements ShouldQueue
}
$entity_design_id = '';
-
+ $path = '';
+
if ($this->entity instanceof Invoice) {
$path = $this->client->invoice_filepath($this->invitation);
$entity_design_id = 'invoice_design_id';
@@ -206,6 +208,11 @@ class CreateEntityPdf implements ShouldQueue
info($maker->getCompiledHTML());
}
+ if($this->entity_string == "invoice" && $this->client->getSetting('enable_e_invoice'))
+ {
+ $pdf = $this->checkEInvoice($pdf);
+ }
+
if ($pdf) {
try {
Storage::disk($this->disk)->put($file_path, $pdf);
@@ -213,9 +220,7 @@ class CreateEntityPdf implements ShouldQueue
throw new FilePermissionsFailure($e->getMessage());
}
}
- if ($this->entity_string == "invoice" && $this->client->getSetting('enable_e_invoice')){
- (new CreateEInvoice($this->entity, true))->handle();
- }
+
$this->invitation = null;
// $this->entity = null;
$this->company = null;
@@ -224,10 +229,65 @@ class CreateEntityPdf implements ShouldQueue
$maker = null;
$state = null;
-
return $file_path;
}
+ /**
+ * Switch to determine if we need to embed the xml into the PDF itself
+ *
+ * @param string $pdf
+ * @return string
+ */
+ private function checkEInvoice(string $pdf): string
+ {
+ if(!$this->entity instanceof Invoice)
+ return $pdf;
+
+ $e_invoice_type = $this->entity->client->getSetting('e_invoice_type');
+
+ switch ($e_invoice_type) {
+ case "EN16931":
+ case "XInvoice_2_2":
+ case "XInvoice_2_1":
+ case "XInvoice_2_0":
+ case "XInvoice_1_0":
+ case "XInvoice-Extended":
+ case "XInvoice-BasicWL":
+ case "XInvoice-Basic":
+ return $this->embedEInvoiceZuGFerD($pdf) ?? $pdf;
+ //case "Facturae_3.2":
+ //case "Facturae_3.2.1":
+ //case "Facturae_3.2.2":
+ //
+ default:
+ return $pdf;
+ }
+
+ }
+
+ /**
+ * Embed the .xml file into the PDF
+ *
+ * @param string $pdf
+ * @return string
+ */
+ private function embedEInvoiceZuGFerD(string $pdf): string
+ {
+ try {
+
+ $e_rechnung = (new CreateEInvoice($this->entity, true))->handle();
+ $pdfBuilder = new ZugferdDocumentPdfBuilder($e_rechnung, $pdf);
+ $pdfBuilder->generateDocument();
+ return $pdfBuilder->downloadString(basename($this->entity->getFileName()));
+
+ } catch (\Exception $e) {
+ nlog("E_Invoice Merge failed - " . $e->getMessage());
+ }
+
+ return $pdf;
+ }
+
+
public function failed($e)
{
}
diff --git a/app/Jobs/Entity/CreateRawPdf.php b/app/Jobs/Entity/CreateRawPdf.php
index d1f8ff624bc6..921879021c61 100644
--- a/app/Jobs/Entity/CreateRawPdf.php
+++ b/app/Jobs/Entity/CreateRawPdf.php
@@ -11,41 +11,43 @@
namespace App\Jobs\Entity;
-use App\Exceptions\FilePermissionsFailure;
-use App\Libraries\MultiDB;
+use App\Utils\Ninja;
+use App\Models\Quote;
use App\Models\Credit;
-use App\Models\CreditInvitation;
use App\Models\Design;
use App\Models\Invoice;
-use App\Models\InvoiceInvitation;
-use App\Models\Quote;
+use App\Utils\HtmlEngine;
+use App\Libraries\MultiDB;
+use Illuminate\Bus\Queueable;
use App\Models\QuoteInvitation;
+use App\Utils\Traits\MakesHash;
+use App\Models\CreditInvitation;
use App\Models\RecurringInvoice;
+use App\Utils\PhantomJS\Phantom;
+use App\Models\InvoiceInvitation;
+use App\Utils\HostedPDF\NinjaPdf;
+use App\Utils\Traits\Pdf\PdfMaker;
+use Illuminate\Support\Facades\App;
+use App\Jobs\Invoice\CreateEInvoice;
+use App\Utils\Traits\NumberFormatter;
+use App\Utils\Traits\MakesInvoiceHtml;
+use Illuminate\Queue\SerializesModels;
+use App\Utils\Traits\Pdf\PageNumbering;
+use Illuminate\Queue\InteractsWithQueue;
+use App\Exceptions\FilePermissionsFailure;
use App\Models\RecurringInvoiceInvitation;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Foundation\Bus\Dispatchable;
+use horstoeko\zugferd\ZugferdDocumentPdfBuilder;
use App\Services\PdfMaker\Design as PdfDesignModel;
use App\Services\PdfMaker\Design as PdfMakerDesign;
use App\Services\PdfMaker\PdfMaker as PdfMakerService;
-use App\Utils\HostedPDF\NinjaPdf;
-use App\Utils\HtmlEngine;
-use App\Utils\Ninja;
-use App\Utils\PhantomJS\Phantom;
-use App\Utils\Traits\MakesHash;
-use App\Utils\Traits\MakesInvoiceHtml;
-use App\Utils\Traits\NumberFormatter;
-use App\Utils\Traits\Pdf\PageNumbering;
-use App\Utils\Traits\Pdf\PdfMaker;
-use Illuminate\Bus\Queueable;
-use Illuminate\Contracts\Queue\ShouldQueue;
-use Illuminate\Foundation\Bus\Dispatchable;
-use Illuminate\Queue\InteractsWithQueue;
-use Illuminate\Queue\SerializesModels;
-use Illuminate\Support\Facades\App;
class CreateRawPdf implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, NumberFormatter, MakesInvoiceHtml, PdfMaker, MakesHash, PageNumbering;
- public $entity;
+ public Invoice | Credit | Quote | RecurringInvoice $entity;
public $company;
@@ -103,6 +105,7 @@ class CreateRawPdf implements ShouldQueue
}
$entity_design_id = '';
+ $path = '';
if ($this->entity instanceof Invoice) {
$path = $this->entity->client->invoice_filepath($this->invitation);
@@ -202,11 +205,67 @@ class CreateRawPdf implements ShouldQueue
if ($pdf) {
$maker =null;
$state = null;
- return $pdf;
+
+ return $this->checkEInvoice($pdf);
}
throw new FilePermissionsFailure('Unable to generate the raw PDF');
}
+
+ /**
+ * Switch to determine if we need to embed the xml into the PDF itself
+ *
+ * @param string $pdf
+ * @return string
+ */
+ private function checkEInvoice(string $pdf): string
+ {
+ if(!$this->entity instanceof Invoice)
+ return $pdf;
+
+ $e_invoice_type = $this->entity->client->getSetting('e_invoice_type');
+
+ switch ($e_invoice_type) {
+ case "EN16931":
+ case "XInvoice_2_2":
+ case "XInvoice_2_1":
+ case "XInvoice_2_0":
+ case "XInvoice_1_0":
+ case "XInvoice-Extended":
+ case "XInvoice-BasicWL":
+ case "XInvoice-Basic":
+ return $this->embedEInvoiceZuGFerD($pdf) ?? $pdf;
+ //case "Facturae_3.2":
+ //case "Facturae_3.2.1":
+ //case "Facturae_3.2.2":
+ //
+ default:
+ return $pdf;
+ }
+
+ }
+
+ /**
+ * Embed the .xml file into the PDF
+ *
+ * @param string $pdf
+ * @return string
+ */
+ private function embedEInvoiceZuGFerD(string $pdf): string
+ {
+ try {
+
+ $e_rechnung = (new CreateEInvoice($this->entity, true))->handle();
+ $pdfBuilder = new ZugferdDocumentPdfBuilder($e_rechnung, $pdf);
+ $pdfBuilder->generateDocument();
+ return $pdfBuilder->downloadString(basename($this->entity->getFileName()));
+
+ } catch (\Exception $e) {
+ nlog("E_Invoice Merge failed - " . $e->getMessage());
+ }
+
+ return $pdf;
+ }
public function failed($e)
{
diff --git a/app/Jobs/Invoice/CreateEInvoice.php b/app/Jobs/Invoice/CreateEInvoice.php
index dc2fdfba1d39..c68662c4b108 100644
--- a/app/Jobs/Invoice/CreateEInvoice.php
+++ b/app/Jobs/Invoice/CreateEInvoice.php
@@ -14,6 +14,7 @@ namespace App\Jobs\Invoice;
use App\Utils\Ninja;
use App\Models\Invoice;
+use horstoeko\zugferd\ZugferdDocumentBuilder;
use Illuminate\Bus\Queueable;
use Illuminate\Support\Facades\App;
use Illuminate\Queue\SerializesModels;
@@ -29,17 +30,16 @@ class CreateEInvoice implements ShouldQueue
public $deleteWhenMissingModels = true;
- public function __construct(private Invoice $invoice, private bool $alterPDF, private string $custom_pdf_path = "")
+ public function __construct(private Invoice $invoice, private bool $returnObject = false)
{
}
/**
* Execute the job.
*
- *
- * @return string
+ * @return string|ZugferdDocumentBuilder
*/
- public function handle(): string
+ public function handle(): string|ZugferdDocumentBuilder
{
/* Forget the singleton*/
App::forgetInstance('translator');
@@ -63,13 +63,18 @@ class CreateEInvoice implements ShouldQueue
case "XInvoice-Extended":
case "XInvoice-BasicWL":
case "XInvoice-Basic":
- return (new ZugferdEInvoice($this->invoice))->run();
+ $zugferd = (new ZugferdEInvoice($this->invoice))->run();
+
+ return $this->returnObject ? $zugferd->xrechnung : $zugferd->getXml();
case "Facturae_3.2":
case "Facturae_3.2.1":
case "Facturae_3.2.2":
return (new FacturaEInvoice($this->invoice, str_replace("Facturae_", "", $e_invoice_type)))->run();
default:
- return (new ZugferdEInvoice($this->invoice))->run();
+
+ $zugferd = (new ZugferdEInvoice($this->invoice))->run();
+
+ return $this->returnObject ? $zugferd : $zugferd->getXml();
}
diff --git a/app/Jobs/Invoice/ZipInvoices.php b/app/Jobs/Invoice/ZipInvoices.php
index 17209446b345..f7292988b0d1 100644
--- a/app/Jobs/Invoice/ZipInvoices.php
+++ b/app/Jobs/Invoice/ZipInvoices.php
@@ -73,27 +73,19 @@ class ZipInvoices implements ShouldQueue
$invitation = $this->invoices->first()->invitations->first();
$path = $this->invoices->first()->client->invoice_filepath($invitation);
- $this->invoices->each(function ($invoice) {
- (new CreateEntityPdf($invoice->invitations()->first()))->handle();
- if ($invoice->client->getSetting('enable_e_invoice')){
- (new CreateEInvoice($invoice, false))->handle();
- }
- });
-
try {
+
foreach ($this->invoices as $invoice) {
- $file = $invoice->service()->getInvoicePdf();
- $zip_file_name = basename($file);
- $zipFile->addFromString($zip_file_name, Storage::get($file));
-
- if($invoice->client->getSetting('enable_e_invoice')){
-
- $xinvoice = $invoice->service()->getEInvoice();
- $xinvoice_zip_file_name = basename($xinvoice);
- $zipFile->addFromString($xinvoice_zip_file_name, Storage::get($xinvoice));
-
+
+ if ($invoice->client->getSetting('enable_e_invoice')) {
+ $xml = $invoice->service()->getEInvoice();
+ $zipFile->addFromString($invoice->getFileName("xml"), $xml);
}
+
+ $file = $invoice->service()->getRawInvoicePdf();
+ $zip_file_name = $invoice->getFileName();
+ $zipFile->addFromString($zip_file_name, $file);
}
Storage::put($path.$file_name, $zipFile->outputAsString());
diff --git a/app/Jobs/User/UserEmailChanged.php b/app/Jobs/User/UserEmailChanged.php
index c397f1ae65dd..f49718c916c4 100644
--- a/app/Jobs/User/UserEmailChanged.php
+++ b/app/Jobs/User/UserEmailChanged.php
@@ -36,10 +36,10 @@ class UserEmailChanged implements ShouldQueue
* Create a new job instance.
*
* @param \App\Models\User $new_user
- * @param \App\Models\User $old_user
+ * @param \stdClass $old_user
* @param \App\Models\Company $company
*/
- public function __construct(protected User $new_user, protected User $old_user, protected Company $company)
+ public function __construct(protected User $new_user, protected \stdClass $old_user, protected Company $company)
{
$this->settings = $this->company->settings;
}
diff --git a/app/Jobs/Util/Import.php b/app/Jobs/Util/Import.php
index 175074cf221a..8a12e02e11d4 100644
--- a/app/Jobs/Util/Import.php
+++ b/app/Jobs/Util/Import.php
@@ -1821,7 +1821,7 @@ class Import implements ShouldQueue
private function processActivities(array $data): void
{
- Activity::where('company_id', $this->company->id)->cursor()->each(function ($a){
+ Activity::query()->where('company_id', $this->company->id)->cursor()->each(function ($a){
$a->forceDelete();
nlog("deleting {$a->id}");
});
diff --git a/app/Jobs/Util/UploadFile.php b/app/Jobs/Util/UploadFile.php
index 43417f3529a1..33aeef21c0b3 100644
--- a/app/Jobs/Util/UploadFile.php
+++ b/app/Jobs/Util/UploadFile.php
@@ -53,7 +53,7 @@ class UploadFile implements ShouldQueue
public $disk;
- public function __construct($file, $type, $user, $company, $entity, $disk = null, $is_public = false)
+ public function __construct($file, $type, $user, $company, $entity, $disk = null, $is_public = true)
{
$this->file = $file;
$this->type = $type;
diff --git a/app/Listeners/Account/StripeConnectFailureListener.php b/app/Listeners/Account/StripeConnectFailureListener.php
new file mode 100644
index 000000000000..12ff3f94b412
--- /dev/null
+++ b/app/Listeners/Account/StripeConnectFailureListener.php
@@ -0,0 +1,57 @@
+db);
+
+ if (Ninja::isHosted() && is_null(Cache::get("stripe_connect_notification:{$event->company->company_key}")))
+ {
+
+ $nmo = new NinjaMailerObject();
+ $nmo->mailable = new StripeConnectFailed($event->company->owner(), $event->company);
+ $nmo->company = $event->company;
+ $nmo->settings = $event->company->settings;
+ $nmo->to_user = $event->company->owner();
+
+ NinjaMailerJob::dispatch($nmo, true);
+
+ Cache::put("stripe_connect_notification:{$event->company->company_key}", true, 60 * 60 * 24);
+
+ }
+ }
+}
diff --git a/app/Listeners/Activity/PaymentCreatedActivity.php b/app/Listeners/Activity/PaymentCreatedActivity.php
index ff0c0abd0889..12ed24c288b4 100644
--- a/app/Listeners/Activity/PaymentCreatedActivity.php
+++ b/app/Listeners/Activity/PaymentCreatedActivity.php
@@ -21,6 +21,7 @@ class PaymentCreatedActivity implements ShouldQueue
{
protected $activity_repo;
+ public $delay = 5;
/**
* Create the event listener.
*
diff --git a/app/Listeners/Invoice/InvoicePaidActivity.php b/app/Listeners/Invoice/InvoicePaidActivity.php
index 2d340dfb08df..836136aad0e0 100644
--- a/app/Listeners/Invoice/InvoicePaidActivity.php
+++ b/app/Listeners/Invoice/InvoicePaidActivity.php
@@ -21,6 +21,8 @@ class InvoicePaidActivity implements ShouldQueue
{
protected $activity_repo;
+ public $delay = 10;
+
/**
* Create the event listener.
*
diff --git a/app/Listeners/Payment/PaymentNotification.php b/app/Listeners/Payment/PaymentNotification.php
index 37623bf8dc75..f46c228b836e 100644
--- a/app/Listeners/Payment/PaymentNotification.php
+++ b/app/Listeners/Payment/PaymentNotification.php
@@ -11,14 +11,16 @@
namespace App\Listeners\Payment;
+use App\Utils\Ninja;
+use App\Libraries\MultiDB;
use App\Jobs\Mail\NinjaMailer;
use App\Jobs\Mail\NinjaMailerJob;
use App\Jobs\Mail\NinjaMailerObject;
-use App\Libraries\MultiDB;
use App\Mail\Admin\EntityPaidObject;
-use App\Utils\Ninja;
-use App\Utils\Traits\Notifications\UserNotifies;
+use Turbo124\Beacon\Facades\LightLogs;
+use App\DataMapper\Analytics\RevenueTrack;
use Illuminate\Contracts\Queue\ShouldQueue;
+use App\Utils\Traits\Notifications\UserNotifies;
class PaymentNotification implements ShouldQueue
{
@@ -158,6 +160,15 @@ class PaymentNotification implements ShouldQueue
$url = $base."&t=item&in={$item}&ip={$amount}&iq=1";
$this->sendAnalytics($url);
+
+ $email = $client->present()->email();
+ $account_key = $client->custom_value2 ?? 'unknown';
+ $product = $item;
+ $gateway_reference = $client->gateway_tokens()->count() >= 1 ? ($client->gateway_tokens()->first()->gateway_customer_reference ?? '') : '';
+
+ // LightLogs::create(new RevenueTrack($email, $account_key, 1, $amount, $product, $gateway_reference, $entity_number))
+ // ->batch();
+
}
/**
diff --git a/app/Mail/Ninja/StripeConnectFailed.php b/app/Mail/Ninja/StripeConnectFailed.php
new file mode 100644
index 000000000000..4c935cdf291f
--- /dev/null
+++ b/app/Mail/Ninja/StripeConnectFailed.php
@@ -0,0 +1,114 @@
+user->email,
+ );
+ }
+
+ /**
+ * Get the message content definition.
+ *
+ * @return \Illuminate\Mail\Mailables\Content
+ */
+ public function content()
+ {
+
+ return new Content(
+ view: 'email.admin.stripe_connect_failed',
+ text: 'email.admin.stripe_connect_failed_text',
+ with: [
+ 'text_body' => $this->textBody(), //@todo this is a bit hacky here.
+ 'body' => $this->htmlBody(),
+ 'title' => 'Connect your Stripe account',
+ 'settings' => $this->company->settings,
+ 'logo' => $this->company->present()->logo(),
+ 'signature' => '',
+ 'company' => $this->company,
+ 'greeting' => '',
+ 'links' => [],
+ 'url' => 'https://www.loom.com/share/a3dc3131cc924e14a34634d5d48065c8?sid=b1971aa2-9deb-4339-8ebd-53f9947ef633',
+ 'button' => "texts.view"
+ ]
+ );
+ }
+
+ private function textBody()
+ {
+ return "
+ We note you are yet to connect your Stripe account to Invoice Ninja. Please log in to Invoice Ninja and connect your Stripe account.\n\n
+ Once logged in you can use the following resource to connect your Stripe account: \n\n
+ ";
+ }
+
+ private function htmlBody()
+ {
+ return "
+ We note you are yet to connect your Stripe account to Invoice Ninja. Please log in to Invoice Ninja and connect your Stripe account.
+
+ Once logged in you can use the following resource to connect your Stripe account:
+
+ ";
+ }
+ /**
+ * Get the attachments for the message.
+ *
+ * @return array
+ */
+ public function attachments()
+ {
+ return [];
+ }
+
+ /**
+ * Get the message headers.
+ *
+ * @return \Illuminate\Mail\Mailables\Headers
+ */
+ public function headers()
+ {
+ return new Headers(
+ messageId: null,
+ references: [],
+ text:['' => ''],
+ );
+ }
+}
diff --git a/app/Mail/TemplateEmail.php b/app/Mail/TemplateEmail.php
index ff77463df864..2fcd68874a81 100644
--- a/app/Mail/TemplateEmail.php
+++ b/app/Mail/TemplateEmail.php
@@ -18,7 +18,6 @@ use App\Services\PdfMaker\Designs\Utilities\DesignHelpers;
use App\Utils\HtmlEngine;
use App\Utils\Ninja;
use Illuminate\Mail\Mailable;
-use Illuminate\Support\Facades\Storage;
class TemplateEmail extends Mailable
{
@@ -111,7 +110,7 @@ class TemplateEmail extends Mailable
if (Ninja::isHosted()) {
$bccs = explode(',', str_replace(' ', '', $settings->bcc_email));
$this->bcc(array_slice($bccs, 0, 2));
- //$this->bcc(reset($bccs)); //remove whitespace if any has been inserted.
+ //$this->bcc(reset($bccs)); //remove whitespace if any has been inserted.
} else {
$this->bcc(explode(',', str_replace(' ', '', $settings->bcc_email)));
}//remove whitespace if any has been inserted.
@@ -149,16 +148,21 @@ class TemplateEmail extends Mailable
if ($this->invitation && $this->invitation->invoice && $settings->ubl_email_attachment && $this->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT)) {
$ubl_string = (new CreateUbl($this->invitation->invoice))->handle();
+ nlog("template {$ubl_string}");
+
if ($ubl_string) {
$this->attachData($ubl_string, $this->invitation->invoice->getFileName('xml'));
}
+
}
if ($this->invitation && $this->invitation->invoice && $this->invitation->invoice->client->getSetting('enable_e_invoice') && $this->company->account->hasFeature(Account::FEATURE_PDF_ATTACHMENT)) {
-
- $xinvoice_filepath = $this->invitation->invoice->service()->getEInvoice($this->invitation->contact);
+ $xml_string = $this->invitation->invoice->service()->getEInvoice($this->invitation->contact);
- if(Storage::disk(config('filesystems.default'))->exists($xinvoice_filepath))
- $this->attach(Storage::disk(config('filesystems.default'))->path($xinvoice_filepath), ['as' => $this->invitation->invoice->getFileName("xml"), 'mime' => null]);
+ nlog("template {$xml_string}");
+
+ if($xml_string) {
+ $this->attachData($xml_string, $this->invitation->invoice->getEFileName("xml"));
+ }
}
diff --git a/app/Models/BaseModel.php b/app/Models/BaseModel.php
index 7f8c0d4bca69..eb4c1772236a 100644
--- a/app/Models/BaseModel.php
+++ b/app/Models/BaseModel.php
@@ -237,6 +237,15 @@ class BaseModel extends Model
return $this->numberFormatter().'.'.$extension;
}
+ /**
+ * @param string $extension
+ * @return string
+ */
+ public function getEFileName($extension = 'pdf')
+ {
+ return ctrans("texts.e_invoice"). "_" . $this->numberFormatter().'.'.$extension;
+ }
+
public function numberFormatter()
{
$number = strlen($this->number) >= 1 ? $this->translate_entity() . "_" . $this->number : class_basename($this) . "_" . Str::random(5);
@@ -276,6 +285,7 @@ class BaseModel extends Model
/**
* Returns the base64 encoded PDF string of the entity
+ * @deprecated - unused implementation
*/
public function fullscreenPdfViewer($invitation = null): string
{
diff --git a/app/Models/Company.php b/app/Models/Company.php
index 9b9f12c11858..644dcab807e1 100644
--- a/app/Models/Company.php
+++ b/app/Models/Company.php
@@ -707,6 +707,7 @@ class Company extends BaseModel
public function getSetting($setting)
{
+ //todo $this->setting ?? false
if (property_exists($this->settings, $setting) != false) {
return $this->settings->{$setting};
}
diff --git a/app/Models/PaymentHash.php b/app/Models/PaymentHash.php
index 9905feddab65..daf6b6197d9f 100644
--- a/app/Models/PaymentHash.php
+++ b/app/Models/PaymentHash.php
@@ -20,7 +20,7 @@ use Illuminate\Database\Eloquent\Model;
* @property string $hash
* @property float $fee_total
* @property int|null $fee_invoice_id
- * @property mixed $data
+ * @property \stdClass $data
* @property int|null $payment_id
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
@@ -38,9 +38,16 @@ class PaymentHash extends Model
'data' => 'object',
];
+ /**
+ * @class \App\Models\PaymentHash $this
+ * @property \App\Models\PaymentHash $data
+ * @class \stdClass $data
+ * @property string $raw_value
+ */
+
/**
- * @return array
+ * @return mixed
*/
public function invoices()
{
@@ -75,9 +82,8 @@ class PaymentHash extends Model
public function withData(string $property, $value): self
{
- $this->data = array_merge((array) $this->data, [$property => $value]);
- $this->save();
-
- return $this;
+ $this->data = array_merge((array) $this->data, [$property => $value]); // @phpstan-ignore-line
+ $this->save();// @phpstan-ignore-line
+ return $this; // @phpstan-ignore-line
}
}
diff --git a/app/Models/Vendor.php b/app/Models/Vendor.php
index a055ed7992b4..84dcd3f286a1 100644
--- a/app/Models/Vendor.php
+++ b/app/Models/Vendor.php
@@ -230,9 +230,9 @@ class Vendor extends BaseModel
* Returns a vendor settings proxying company setting
*
* @param string $setting
- * @return string
+ * @return mixed
*/
- public function getSetting($setting): string
+ public function getSetting($setting): mixed
{
if ((property_exists($this->company->settings, $setting) != false) && (isset($this->company->settings->{$setting}) !== false)) {
return $this->company->settings->{$setting};
diff --git a/app/PaymentDrivers/CheckoutCom/CheckoutWebhook.php b/app/PaymentDrivers/CheckoutCom/CheckoutWebhook.php
index fcac5acdc3ac..c7c1069c63ff 100644
--- a/app/PaymentDrivers/CheckoutCom/CheckoutWebhook.php
+++ b/app/PaymentDrivers/CheckoutCom/CheckoutWebhook.php
@@ -69,7 +69,7 @@ class CheckoutWebhook implements ShouldQueue
{
$payment_object = $this->webhook_array['data'];
- $payment = Payment::withTrashed()->where('transaction_reference', $payment_object['id'])->first();
+ $payment = Payment::query()->withTrashed()->where('transaction_reference', $payment_object['id'])->first();
if($payment && $payment->status_id == Payment::STATUS_COMPLETED)
return;
@@ -84,18 +84,19 @@ class CheckoutWebhook implements ShouldQueue
$metadata = $this->webhook_array['metadata'];
- $payment_hash = PaymentHash::where('hash', $metadata['udf2'])->first();
+ $payment_hash = PaymentHash::query()->where('hash', $metadata['udf2'])->first();
$driver = $this->company_gateway->driver($payment_hash->fee_invoice->client)->init()->setPaymentMethod();
- $payment_hash->data = array_merge((array) $payment_hash->data, $this->webhook_array);
- $payment_hash->save();
- $driver->setPaymentHash($payment_hash);
+ $payment_hash->data = array_merge((array) $payment_hash->data, $this->webhook_array); // @phpstan-ignore-line
+ $payment_hash->save();
+ $driver->setPaymentHash($payment_hash);
+ // @phpstan-ignore-line
$data = [
'payment_method' => isset($this->webhook_array['source']['id']) ? $this->webhook_array['source']['id'] : '',
'payment_type' => PaymentType::CREDIT_CARD_OTHER,
- 'amount' => $payment_hash->data->raw_value,
+ 'amount' => $payment_hash->data->raw_value, // @phpstan-ignore-line
'transaction_reference' => $payment_object['id'],
'gateway_type_id' => GatewayType::CREDIT_CARD,
];
diff --git a/app/PaymentDrivers/CheckoutCom/Webhook.php b/app/PaymentDrivers/CheckoutCom/Webhook.php
index 187d2dad2220..8fc5744762b7 100644
--- a/app/PaymentDrivers/CheckoutCom/Webhook.php
+++ b/app/PaymentDrivers/CheckoutCom/Webhook.php
@@ -66,8 +66,6 @@ class Webhook
/**
* Lists the workflows in Checkout
- *
- * @return void
*/
public function getWorkFlows()
{
diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php
index d83f5602c8f3..028eeb4dffc7 100644
--- a/app/Providers/EventServiceProvider.php
+++ b/app/Providers/EventServiceProvider.php
@@ -94,6 +94,7 @@ use App\Events\Misc\InvitationWasViewed;
use App\Events\Payment\PaymentWasVoided;
use App\Events\Vendor\VendorWasArchived;
use App\Events\Vendor\VendorWasRestored;
+use App\Events\Account\StripeConnectFailure;
use App\Listeners\Mail\MailSentListener;
use App\Observers\ClientContactObserver;
use App\Observers\PurchaseOrderObserver;
@@ -198,6 +199,8 @@ use App\Listeners\Invoice\InvoiceRestoredActivity;
use App\Listeners\Invoice\InvoiceReversedActivity;
use App\Listeners\Payment\PaymentRestoredActivity;
use App\Listeners\Quote\QuoteApprovedNotification;
+use SocialiteProviders\Apple\AppleExtendSocialite;
+use SocialiteProviders\Manager\SocialiteWasCalled;
use App\Events\Subscription\SubscriptionWasCreated;
use App\Events\Subscription\SubscriptionWasDeleted;
use App\Events\Subscription\SubscriptionWasUpdated;
@@ -221,10 +224,12 @@ use App\Listeners\Invoice\InvoiceEmailFailedActivity;
use App\Events\PurchaseOrder\PurchaseOrderWasAccepted;
use App\Events\PurchaseOrder\PurchaseOrderWasArchived;
use App\Events\PurchaseOrder\PurchaseOrderWasRestored;
+use App\Listeners\Payment\PaymentEmailFailureActivity;
use App\Listeners\Vendor\UpdateVendorContactLastLogin;
use App\Events\RecurringQuote\RecurringQuoteWasCreated;
use App\Events\RecurringQuote\RecurringQuoteWasDeleted;
use App\Events\RecurringQuote\RecurringQuoteWasUpdated;
+use App\Listeners\Account\StripeConnectFailureListener;
use App\Listeners\Activity\CreatedSubscriptionActivity;
use App\Listeners\Activity\SubscriptionDeletedActivity;
use App\Listeners\Activity\SubscriptionUpdatedActivity;
@@ -234,6 +239,7 @@ use App\Events\RecurringQuote\RecurringQuoteWasRestored;
use App\Listeners\Activity\SubscriptionArchivedActivity;
use App\Listeners\Activity\SubscriptionRestoredActivity;
use App\Listeners\Invoice\InvoiceFailedEmailNotification;
+use SocialiteProviders\Microsoft\MicrosoftExtendSocialite;
use App\Events\RecurringExpense\RecurringExpenseWasCreated;
use App\Events\RecurringExpense\RecurringExpenseWasDeleted;
use App\Events\RecurringExpense\RecurringExpenseWasUpdated;
@@ -587,6 +593,9 @@ class EventServiceProvider extends ServiceProvider
TaskWasRestored::class => [
TaskRestoredActivity::class,
],
+ StripeConnectFailure::class => [
+ StripeConnectFailureListener::class,
+ ],
SubscriptionWasCreated::class => [
CreatedSubscriptionActivity::class,
],
diff --git a/app/Repositories/Migration/InvoiceMigrationRepository.php b/app/Repositories/Migration/InvoiceMigrationRepository.php
index 05b4dafc20aa..729a9551b95f 100644
--- a/app/Repositories/Migration/InvoiceMigrationRepository.php
+++ b/app/Repositories/Migration/InvoiceMigrationRepository.php
@@ -136,7 +136,11 @@ class InvoiceMigrationRepository extends BaseRepository
$state['finished_amount'] = $model->amount;
- $model = $model->service()->applyNumber()->setReminder()->save();
+ $model = $model->service()->applyNumber()->save();
+
+ if ($class->name == Invoice::class) {
+ $model->service()->setReminder()->save();
+ }
if ($class->name == Invoice::class || $class->name == RecurringInvoice::class) {
if (($state['finished_amount'] != $state['starting_amount']) && ($model->status_id != Invoice::STATUS_DRAFT)) {
diff --git a/app/Services/Email/EmailDefaults.php b/app/Services/Email/EmailDefaults.php
index a374ddfa353c..e2d833fa9e31 100644
--- a/app/Services/Email/EmailDefaults.php
+++ b/app/Services/Email/EmailDefaults.php
@@ -322,10 +322,10 @@ class EmailDefaults
}
/** E-Invoice xml file */
if ($this->email->email_object->settings->enable_e_invoice && $this->email->email_object->entity instanceof Invoice) {
- $xinvoice_path = $this->email->email_object->entity->service()->getEInvoice();
+ $xml_string = $this->email->email_object->entity->service()->getEInvoice();
- if(Storage::disk(config('filesystems.default'))->exists($xinvoice_path))
- $this->email->email_object->attachments = array_merge($this->email->email_object->attachments, [['file' => base64_encode(Storage::get($xinvoice_path)), 'name' => explode(".", $this->email->email_object->entity->getFileName('xml'))[0]."-e_invoice.xml"]]);
+ if($xml_string)
+ $this->email->email_object->attachments = array_merge($this->email->email_object->attachments, [['file' => base64_encode($xml_string), 'name' => explode(".", $this->email->email_object->entity->getFileName('xml'))[0]."-e_invoice.xml"]]);
}
if (!$this->email->email_object->settings->document_email_attachment || !$this->email->company->account->hasFeature(Account::FEATURE_DOCUMENTS)) {
diff --git a/app/Services/Invoice/EInvoice/ZugferdEInvoice.php b/app/Services/Invoice/EInvoice/ZugferdEInvoice.php
index e40d3ed6dbc4..0410422a4d7e 100644
--- a/app/Services/Invoice/EInvoice/ZugferdEInvoice.php
+++ b/app/Services/Invoice/EInvoice/ZugferdEInvoice.php
@@ -22,12 +22,13 @@ use horstoeko\zugferd\codelists\ZugferdDutyTaxFeeCategories;
class ZugferdEInvoice extends AbstractService
{
+ public ZugferdDocumentBuilder $xrechnung;
- public function __construct(public Invoice $invoice, private array $tax_map = [])
+ public function __construct(public Invoice $invoice, private readonly bool $returnObject = false, private array $tax_map = [])
{
}
- public function run()
+ public function run(): self
{
$company = $this->invoice->company;
@@ -45,10 +46,9 @@ class ZugferdEInvoice extends AbstractService
default => ZugferdProfiles::PROFILE_EN16931,
};
+ $this->xrechnung = ZugferdDocumentBuilder::CreateNew($profile);
- $xrechnung = ZugferdDocumentBuilder::CreateNew($profile);
-
- $xrechnung
+ $this->xrechnung
->setDocumentSupplyChainEvent(date_create($this->invoice->date))
->setDocumentSeller($company->getSetting('name'))
->setDocumentSellerAddress($company->getSetting("address1"), $company->getSetting("address2"), "", $company->getSetting("postal_code"), $company->getSetting("city"), $company->country()->iso_3166_2, $company->getSetting("state"))
@@ -59,32 +59,32 @@ class ZugferdEInvoice extends AbstractService
->addDocumentPaymentTerm(ctrans("texts.xinvoice_payable", ['payeddue' => date_create($this->invoice->date)->diff(date_create($this->invoice->due_date))->format("%d"), 'paydate' => $this->invoice->due_date]));
if (!empty($this->invoice->public_notes)) {
- $xrechnung->addDocumentNote($this->invoice->public_notes);
+ $this->xrechnung->addDocumentNote($this->invoice->public_notes);
}
if (empty($this->invoice->number)){
- $xrechnung->setDocumentInformation("DRAFT", "380", date_create($this->invoice->date), $this->invoice->client->getCurrencyCode());
+ $this->xrechnung->setDocumentInformation("DRAFT", "380", date_create($this->invoice->date), $this->invoice->client->getCurrencyCode());
} else {
- $xrechnung->setDocumentInformation($this->invoice->number, "380", date_create($this->invoice->date), $this->invoice->client->getCurrencyCode());
+ $this->xrechnung->setDocumentInformation($this->invoice->number, "380", date_create($this->invoice->date), $this->invoice->client->getCurrencyCode());
}
if (!empty($this->invoice->po_number)) {
- $xrechnung->setDocumentBuyerOrderReferencedDocument($this->invoice->po_number);
+ $this->xrechnung->setDocumentBuyerOrderReferencedDocument($this->invoice->po_number);
}
if (empty($client->routing_id)) {
- $xrechnung->setDocumentBuyerReference(ctrans("texts.xinvoice_no_buyers_reference"));
+ $this->xrechnung->setDocumentBuyerReference(ctrans("texts.xinvoice_no_buyers_reference"));
} else {
- $xrechnung->setDocumentBuyerReference($client->routing_id);
+ $this->xrechnung->setDocumentBuyerReference($client->routing_id);
}
if (!empty($client->shipping_address1)){
- $xrechnung->setDocumentShipToAddress($client->shipping_address1, $client->shipping_address2, "", $client->shipping_postal_code, $client->shipping_city, $client->shipping_country->iso_3166_2, $client->shipping_state);
+ $this->xrechnung->setDocumentShipToAddress($client->shipping_address1, $client->shipping_address2, "", $client->shipping_postal_code, $client->shipping_city, $client->shipping_country->iso_3166_2, $client->shipping_state);
}
- $xrechnung->addDocumentPaymentMean(68, ctrans("texts.xinvoice_online_payment"));
+ $this->xrechnung->addDocumentPaymentMean(68, ctrans("texts.xinvoice_online_payment"));
if (str_contains($company->getSetting('vat_number'), "/")) {
- $xrechnung->addDocumentSellerTaxRegistration("FC", $company->getSetting('vat_number'));
+ $this->xrechnung->addDocumentSellerTaxRegistration("FC", $company->getSetting('vat_number'));
} else {
- $xrechnung->addDocumentSellerTaxRegistration("VA", $company->getSetting('vat_number'));
+ $this->xrechnung->addDocumentSellerTaxRegistration("VA", $company->getSetting('vat_number'));
}
$invoicing_data = $this->invoice->calc();
@@ -92,29 +92,29 @@ class ZugferdEInvoice extends AbstractService
//Create line items and calculate taxes
foreach ($this->invoice->line_items as $index => $item) {
/** @var \App\DataMapper\InvoiceItem $item **/
- $xrechnung->addNewPosition($index)
+ $this->xrechnung->addNewPosition($index)
->setDocumentPositionGrossPrice($item->gross_line_total)
->setDocumentPositionNetPrice($item->line_total);
if (!empty($item->product_key)){
if (!empty($item->notes)){
- $xrechnung->setDocumentPositionProductDetails($item->product_key, $item->notes);
+ $this->xrechnung->setDocumentPositionProductDetails($item->product_key, $item->notes);
}
else {
- $xrechnung->setDocumentPositionProductDetails($item->product_key);
+ $this->xrechnung->setDocumentPositionProductDetails($item->product_key);
}
}
else {
if (!empty($item->notes)){
- $xrechnung->setDocumentPositionProductDetails($item->notes);
+ $this->xrechnung->setDocumentPositionProductDetails($item->notes);
}
else {
- $xrechnung->setDocumentPositionProductDetails("no product name defined");
+ $this->xrechnung->setDocumentPositionProductDetails("no product name defined");
}
}
if (isset($item->task_id)) {
- $xrechnung->setDocumentPositionQuantity($item->quantity, "HUR");
+ $this->xrechnung->setDocumentPositionQuantity($item->quantity, "HUR");
} else {
- $xrechnung->setDocumentPositionQuantity($item->quantity, "H87");
+ $this->xrechnung->setDocumentPositionQuantity($item->quantity, "H87");
}
$linenetamount = $item->line_total;
if ($item->discount > 0) {
@@ -124,18 +124,18 @@ class ZugferdEInvoice extends AbstractService
$linenetamount -= $linenetamount * ($item->discount / 100);
}
}
- $xrechnung->setDocumentPositionLineSummation($linenetamount);
+ $this->xrechnung->setDocumentPositionLineSummation($linenetamount);
// According to european law, each line item can only have one tax rate
if (!(empty($item->tax_name1) && empty($item->tax_name2) && empty($item->tax_name3))) {
$taxtype = $this->getTaxType($item->tax_id);
if (!empty($item->tax_name1)) {
- $xrechnung->addDocumentPositionTax($taxtype, 'VAT', $item->tax_rate1);
+ $this->xrechnung->addDocumentPositionTax($taxtype, 'VAT', $item->tax_rate1);
$this->addtoTaxMap($taxtype, $linenetamount, $item->tax_rate1);
} elseif (!empty($item->tax_name2)) {
- $xrechnung->addDocumentPositionTax($taxtype, 'VAT', $item->tax_rate2);
+ $this->xrechnung->addDocumentPositionTax($taxtype, 'VAT', $item->tax_rate2);
$this->addtoTaxMap($taxtype, $linenetamount, $item->tax_rate2);
} elseif (!empty($item->tax_name3)) {
- $xrechnung->addDocumentPositionTax($taxtype, 'VAT', $item->tax_rate3);
+ $this->xrechnung->addDocumentPositionTax($taxtype, 'VAT', $item->tax_rate3);
$this->addtoTaxMap($taxtype, $linenetamount, $item->tax_rate3);
} else {
nlog("Can't add correct tax position");
@@ -143,40 +143,45 @@ class ZugferdEInvoice extends AbstractService
} else {
if (!empty($this->invoice->tax_name1)) {
$taxtype = $this->getTaxType($this->invoice->tax_name1);
- $xrechnung->addDocumentPositionTax($taxtype, 'VAT', $this->invoice->tax_rate1);
+ $this->xrechnung->addDocumentPositionTax($taxtype, 'VAT', $this->invoice->tax_rate1);
$this->addtoTaxMap($taxtype, $linenetamount, $this->invoice->tax_rate1);
} elseif (!empty($this->invoice->tax_name2)) {
$taxtype = $this->getTaxType($this->invoice->tax_name2);
- $xrechnung->addDocumentPositionTax($taxtype, 'VAT', $this->invoice->tax_rate2);
+ $this->xrechnung->addDocumentPositionTax($taxtype, 'VAT', $this->invoice->tax_rate2);
$this->addtoTaxMap($taxtype, $linenetamount, $this->invoice->tax_rate2);
} elseif (!empty($this->invoice->tax_name3)) {
$taxtype = $this->getTaxType($this->invoice->tax_name3);
- $xrechnung->addDocumentPositionTax($taxtype, 'VAT', $this->invoice->tax_rate3);
+ $this->xrechnung->addDocumentPositionTax($taxtype, 'VAT', $this->invoice->tax_rate3);
$this->addtoTaxMap($taxtype, $linenetamount, $this->invoice->tax_rate3);
} else {
$taxtype = ZugferdDutyTaxFeeCategories::ZERO_RATED_GOODS;
- $xrechnung->addDocumentPositionTax($taxtype, 'VAT', 0);
+ $this->xrechnung->addDocumentPositionTax($taxtype, 'VAT', 0);
$this->addtoTaxMap($taxtype, $linenetamount, 0);
nlog("Can't add correct tax position");
}
}
}
- $xrechnung->setDocumentSummation($this->invoice->amount, $this->invoice->balance, $invoicing_data->getSubTotal(), $invoicing_data->getTotalSurcharges(), $invoicing_data->getTotalDiscount(), $invoicing_data->getSubTotal(), $invoicing_data->getItemTotalTaxes(), 0.0, $this->invoice->amount-$this->invoice->balance);
+ $this->xrechnung->setDocumentSummation($this->invoice->amount, $this->invoice->balance, $invoicing_data->getSubTotal(), $invoicing_data->getTotalSurcharges(), $invoicing_data->getTotalDiscount(), $invoicing_data->getSubTotal(), $invoicing_data->getItemTotalTaxes(), 0.0, $this->invoice->amount-$this->invoice->balance);
foreach ($this->tax_map as $item){
- $xrechnung->addDocumentTax($item["tax_type"], "VAT", $item["net_amount"], $item["tax_rate"]*$item["net_amount"], $item["tax_rate"]*100);
- }
- $disk = config('filesystems.default');
-
- if (!Storage::disk($disk)->exists($client->e_invoice_filepath($this->invoice->invitations->first()))) {
- Storage::makeDirectory($client->e_invoice_filepath($this->invoice->invitations->first()));
+ $this->xrechnung->addDocumentTax($item["tax_type"], "VAT", $item["net_amount"], $item["tax_rate"]*$item["net_amount"], $item["tax_rate"]*100);
}
- $xrechnung->writeFile(Storage::disk($disk)->path($client->e_invoice_filepath($this->invoice->invitations->first()) . $this->invoice->getFileName("xml")));
// The validity can be checked using https://portal3.gefeg.com/invoice/validation or https://e-rechnung.bayern.de/app/#/upload
-
- return $client->e_invoice_filepath($this->invoice->invitations->first()) . $this->invoice->getFileName("xml");
+ return $this;
+
+ }
+
+ /**
+ * Returns the XML document
+ * in string format
+ *
+ * @return string
+ */
+ public function getXml(): string
+ {
+ return $this->xrechnung->getContent();
}
private function getTaxType($name): string
diff --git a/app/Services/Invoice/GetInvoiceEInvoice.php b/app/Services/Invoice/GetInvoiceEInvoice.php
deleted file mode 100644
index 6b6dac9f544f..000000000000
--- a/app/Services/Invoice/GetInvoiceEInvoice.php
+++ /dev/null
@@ -1,51 +0,0 @@
-contact) {
- $this->contact = $this->invoice->client->primary_contact()->first() ?: $this->invoice->client->contacts()->first();
- }
-
- $invitation = $this->invoice->invitations->where('client_contact_id', $this->contact->id)->first();
-
- if (! $invitation) {
- $invitation = $this->invoice->invitations->first();
- }
-
- $file_path = $this->invoice->client->e_invoice_filepath($this->invoice->invitations->first()). $this->invoice->getFileName("xml");
-
- // $disk = 'public';
- $disk = config('filesystems.default');
-
- $file = Storage::disk($disk)->exists($file_path);
-
- if (! $file) {
- $file_path = (new CreateEInvoice($this->invoice, false))->handle();
- }
-
- return $file_path;
- }
-}
diff --git a/app/Services/Invoice/GetInvoicePdf.php b/app/Services/Invoice/GetInvoicePdf.php
index 376cdfd95d98..9211a15bb8fd 100644
--- a/app/Services/Invoice/GetInvoicePdf.php
+++ b/app/Services/Invoice/GetInvoicePdf.php
@@ -12,6 +12,7 @@
namespace App\Services\Invoice;
use App\Jobs\Entity\CreateEntityPdf;
+use App\Jobs\Invoice\CreateEInvoice;
use App\Models\ClientContact;
use App\Models\Invoice;
use App\Services\AbstractService;
@@ -47,7 +48,7 @@ class GetInvoicePdf extends AbstractService
if (! $file) {
$file_path = (new CreateEntityPdf($invitation))->handle();
}
-
+
return $file_path;
}
}
diff --git a/app/Services/Invoice/InvoiceService.php b/app/Services/Invoice/InvoiceService.php
index 0adec81b6ce9..148f0cae88d5 100644
--- a/app/Services/Invoice/InvoiceService.php
+++ b/app/Services/Invoice/InvoiceService.php
@@ -13,6 +13,7 @@ namespace App\Services\Invoice;
use App\Events\Invoice\InvoiceWasArchived;
use App\Jobs\Entity\CreateEntityPdf;
+use App\Jobs\Entity\CreateRawPdf;
use App\Jobs\Inventory\AdjustProductInventory;
use App\Jobs\Invoice\CreateEInvoice;
use App\Libraries\Currency\Conversion\CurrencyApi;
@@ -187,6 +188,13 @@ class InvoiceService
return (new GetInvoicePdf($this->invoice, $contact))->run();
}
+ public function getRawInvoicePdf($contact = null)
+ {
+ $invitation = $contact ? $this->invoice->invitations()->where('contact_id', $contact->id)->first() : $this->invoice->invitations()->first();
+
+ return (new CreateRawPdf($invitation, $invitation->company->db))->handle();
+ }
+
public function getInvoiceDeliveryNote(Invoice $invoice, \App\Models\ClientContact $contact = null)
{
return (new GenerateDeliveryNote($invoice, $contact))->run();
@@ -194,13 +202,9 @@ class InvoiceService
public function getEInvoice($contact = null)
{
- return (new GetInvoiceEInvoice($this->invoice, $contact))->run();
+ return (new CreateEInvoice($this->invoice))->handle();
}
- public function mergeEInvoice($contact = null): void
- {
- (new MergeEInvoice($this->invoice, $contact))->run();
- }
public function sendEmail($contact = null)
{
$send_email = new SendEmail($this->invoice, null, $contact);
@@ -343,6 +347,7 @@ class InvoiceService
})->toArray();
$this->deletePdf();
+ $this->deleteEInvoice();
return $this;
}
@@ -410,6 +415,7 @@ class InvoiceService
$this->invoice = $this->invoice->calc()->getInvoice();
$this->deletePdf();
+ $this->deleteEInvoice();
/* 24-03-2022 */
$new_balance = $this->invoice->balance;
@@ -462,12 +468,6 @@ class InvoiceService
if ($force) {
$this->invoice->invitations->each(function ($invitation) {
(new CreateEntityPdf($invitation))->handle();
-
- if ($invitation->invoice->client->getSetting('enable_e_invoice') && $invitation instanceof InvoiceInvitation)
- {
- (new CreateEInvoice($invitation->invoice, true))->handle();
- }
-
});
return $this;
@@ -478,7 +478,7 @@ class InvoiceService
CreateEntityPdf::dispatch($invitation);
if ($invitation->invoice->client->getSetting('enable_e_invoice') && $invitation instanceof InvoiceInvitation) {
- CreateEInvoice::dispatch($invitation->invoice, true);
+ CreateEInvoice::dispatch($invitation->invoice);
}
});
diff --git a/app/Services/Invoice/MergeEInvoice.php b/app/Services/Invoice/MergeEInvoice.php
deleted file mode 100644
index d05d61abaf86..000000000000
--- a/app/Services/Invoice/MergeEInvoice.php
+++ /dev/null
@@ -1,61 +0,0 @@
-invoice->client->getSetting('e_invoice_type');
- switch ($e_invoice_type) {
- case "EN16931":
- case "XInvoice_2_2":
- case "XInvoice_2_1":
- case "XInvoice_2_0":
- case "XInvoice_1_0":
- case "XInvoice-Extended":
- case "XInvoice-BasicWL":
- case "XInvoice-Basic":
- $this->embedEInvoiceZuGFerD();
- //case "Facturae_3.2":
- //case "Facturae_3.2.1":
- //case "Facturae_3.2.2":
- //
- default:
- $this->embedEInvoiceZuGFerD();
- break;
- }
- }
-
- /**
- * @throws \Exception
- */
- private function embedEInvoiceZuGFerD(): void
- {
- $filepath_pdf = $this->invoice->client->invoice_filepath($this->invoice->invitations->first()) . $this->invoice->getFileName();
- $e_invoice_path = $this->invoice->client->e_invoice_filepath($this->invoice->invitations->first()) . $this->invoice->getFileName("xml");
- $document = ZugferdDocumentReader::readAndGuessFromFile($e_invoice_path);
- $disk = config('filesystems.default');
-
- if (!Storage::disk($disk)->exists($this->invoice->client->e_invoice_filepath($this->invoice->invitations->first()))) {
- Storage::makeDirectory($this->invoice->client->e_invoice_filepath($this->invoice->invitations->first()));
- }
- $pdfBuilder = new ZugferdDocumentPdfBuilder($document, Storage::disk($disk)->path($filepath_pdf));
- $pdfBuilder->generateDocument();
- $pdfBuilder->saveDocument(Storage::disk($disk)->path($filepath_pdf));
- }
-}
diff --git a/app/Services/PurchaseOrder/PurchaseOrderExpense.php b/app/Services/PurchaseOrder/PurchaseOrderExpense.php
index d206efbb28fb..e25bc84de163 100644
--- a/app/Services/PurchaseOrder/PurchaseOrderExpense.php
+++ b/app/Services/PurchaseOrder/PurchaseOrderExpense.php
@@ -57,7 +57,7 @@ class PurchaseOrderExpense
$expense->number = empty($expense->number) ? $this->getNextExpenseNumber($expense) : $expense->number;
- $expense->save();
+ $expense->saveQuietly();
event('eloquent.created: App\Models\Expense', $expense);
$this->purchase_order->expense_id = $expense->id;
diff --git a/app/Services/PurchaseOrder/PurchaseOrderService.php b/app/Services/PurchaseOrder/PurchaseOrderService.php
index f9bc5d7c75e1..3445e261dd7d 100644
--- a/app/Services/PurchaseOrder/PurchaseOrderService.php
+++ b/app/Services/PurchaseOrder/PurchaseOrderService.php
@@ -20,11 +20,8 @@ class PurchaseOrderService
{
use MakesHash;
- public PurchaseOrder $purchase_order;
-
- public function __construct(PurchaseOrder $purchase_order)
+ public function __construct(public PurchaseOrder $purchase_order)
{
- $this->purchase_order = $purchase_order;
}
public function createInvitations()
@@ -156,7 +153,7 @@ class PurchaseOrderService
/**
* Saves the purchase order.
- * @return \App\Models\PurchaseOrder object
+ * @return \App\Models\PurchaseOrder
*/
public function save(): ?PurchaseOrder
{
diff --git a/app/Utils/TemplateEngine.php b/app/Utils/TemplateEngine.php
index 2e531daf9484..4bd3b8310a26 100644
--- a/app/Utils/TemplateEngine.php
+++ b/app/Utils/TemplateEngine.php
@@ -52,8 +52,8 @@ class TemplateEngine
public $template;
- /** @var \App\Models\Invoice | \App\Models\Quote | \App\Models\Credit | \App\Models\PurchaseOrder | \App\Models\RecurringInvoice $entity_obj **/
- private \App\Models\Invoice | \App\Models\Quote | \App\Models\Credit | \App\Models\PurchaseOrder | \App\Models\RecurringInvoice $entity_obj;
+ /** @var \App\Models\Invoice | \App\Models\Quote | \App\Models\Credit | \App\Models\PurchaseOrder | \App\Models\RecurringInvoice | \App\Models\Payment $entity_obj **/
+ private \App\Models\Invoice | \App\Models\Quote | \App\Models\Credit | \App\Models\PurchaseOrder | \App\Models\RecurringInvoice | \App\Models\Payment $entity_obj;
/** @var \App\Models\Company | \App\Models\Client | null $settings_entity **/
private $settings_entity;
diff --git a/app/Utils/Traits/Inviteable.php b/app/Utils/Traits/Inviteable.php
index ed7c7056845c..13a161462aae 100644
--- a/app/Utils/Traits/Inviteable.php
+++ b/app/Utils/Traits/Inviteable.php
@@ -79,7 +79,7 @@ trait Inviteable
if (Ninja::isHosted()) {
$domain = $this->company->domain();
} else {
- $domain = strlen($this->company->portal_domain) > 5 ? $this->company->portal_domain : config('ninja.app_url');
+ $domain = strlen($this->company->portal_domain ?? '') > 5 ? $this->company->portal_domain : config('ninja.app_url');
}
$entity_type = Str::snake(class_basename($this->entityType()));
@@ -94,7 +94,7 @@ trait Inviteable
if (Ninja::isHosted()) {
$domain = $this->company->domain();
} else {
- $domain = strlen($this->company->portal_domain) > 5 ? $this->company->portal_domain : config('ninja.app_url');
+ $domain = strlen($this->company->portal_domain ?? '') > 5 ? $this->company->portal_domain : config('ninja.app_url');
}
switch ($this->company->portal_mode) {
@@ -119,7 +119,7 @@ trait Inviteable
if (Ninja::isHosted()) {
$domain = $this->company->domain();
} else {
- $domain = strlen($this->company->portal_domain) > 5 ? $this->company->portal_domain : config('ninja.app_url');
+ $domain = strlen($this->company->portal_domain ?? '') > 5 ? $this->company->portal_domain : config('ninja.app_url');
}
switch ($this->company->portal_mode) {
diff --git a/composer.lock b/composer.lock
index 6bf16dd7b2c8..2be5001245e6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -370,16 +370,16 @@
},
{
"name": "aws/aws-crt-php",
- "version": "v1.2.1",
+ "version": "v1.2.2",
"source": {
"type": "git",
"url": "https://github.com/awslabs/aws-crt-php.git",
- "reference": "1926277fc71d253dfa820271ac5987bdb193ccf5"
+ "reference": "2f1dc7b7eda080498be96a4a6d683a41583030e9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/1926277fc71d253dfa820271ac5987bdb193ccf5",
- "reference": "1926277fc71d253dfa820271ac5987bdb193ccf5",
+ "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/2f1dc7b7eda080498be96a4a6d683a41583030e9",
+ "reference": "2f1dc7b7eda080498be96a4a6d683a41583030e9",
"shasum": ""
},
"require": {
@@ -418,22 +418,22 @@
],
"support": {
"issues": "https://github.com/awslabs/aws-crt-php/issues",
- "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.1"
+ "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.2"
},
- "time": "2023-03-24T20:22:19+00:00"
+ "time": "2023-07-20T16:49:55+00:00"
},
{
"name": "aws/aws-sdk-php",
- "version": "3.276.2",
+ "version": "3.279.0",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "78c9510280512121e8fdaa9538b744778ab48bf9"
+ "reference": "7b3d38cfccd393add0ea0ce281de91846967c61e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/78c9510280512121e8fdaa9538b744778ab48bf9",
- "reference": "78c9510280512121e8fdaa9538b744778ab48bf9",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/7b3d38cfccd393add0ea0ce281de91846967c61e",
+ "reference": "7b3d38cfccd393add0ea0ce281de91846967c61e",
"shasum": ""
},
"require": {
@@ -442,11 +442,11 @@
"ext-pcre": "*",
"ext-simplexml": "*",
"guzzlehttp/guzzle": "^6.5.8 || ^7.4.5",
- "guzzlehttp/promises": "^1.4.0",
+ "guzzlehttp/promises": "^1.4.0 || ^2.0",
"guzzlehttp/psr7": "^1.9.1 || ^2.4.5",
"mtdowling/jmespath.php": "^2.6",
- "php": ">=5.5",
- "psr/http-message": "^1.0"
+ "php": ">=7.2.5",
+ "psr/http-message": "^1.0 || ^2.0"
},
"require-dev": {
"andrewsville/php-token-reflection": "^1.4",
@@ -461,7 +461,7 @@
"ext-sockets": "*",
"nette/neon": "^2.3",
"paragonie/random_compat": ">= 2",
- "phpunit/phpunit": "^4.8.35 || ^5.6.3 || ^9.5",
+ "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5",
"psr/cache": "^1.0",
"psr/simple-cache": "^1.0",
"sebastian/comparator": "^1.2.3 || ^4.0",
@@ -513,9 +513,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.276.2"
+ "source": "https://github.com/aws/aws-sdk-php/tree/3.279.0"
},
- "time": "2023-07-20T18:16:37+00:00"
+ "time": "2023-08-16T18:18:34+00:00"
},
{
"name": "bacon/bacon-qr-code",
@@ -1351,16 +1351,16 @@
},
{
"name": "doctrine/dbal",
- "version": "3.6.4",
+ "version": "3.6.5",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
- "reference": "19f0dec95edd6a3c3c5ff1d188ea94c6b7fc903f"
+ "reference": "96d5a70fd91efdcec81fc46316efc5bf3da17ddf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/dbal/zipball/19f0dec95edd6a3c3c5ff1d188ea94c6b7fc903f",
- "reference": "19f0dec95edd6a3c3c5ff1d188ea94c6b7fc903f",
+ "url": "https://api.github.com/repos/doctrine/dbal/zipball/96d5a70fd91efdcec81fc46316efc5bf3da17ddf",
+ "reference": "96d5a70fd91efdcec81fc46316efc5bf3da17ddf",
"shasum": ""
},
"require": {
@@ -1375,10 +1375,10 @@
"require-dev": {
"doctrine/coding-standard": "12.0.0",
"fig/log-test": "^1",
- "jetbrains/phpstorm-stubs": "2022.3",
- "phpstan/phpstan": "1.10.14",
+ "jetbrains/phpstorm-stubs": "2023.1",
+ "phpstan/phpstan": "1.10.21",
"phpstan/phpstan-strict-rules": "^1.5",
- "phpunit/phpunit": "9.6.7",
+ "phpunit/phpunit": "9.6.9",
"psalm/plugin-phpunit": "0.18.4",
"squizlabs/php_codesniffer": "3.7.2",
"symfony/cache": "^5.4|^6.0",
@@ -1443,7 +1443,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
- "source": "https://github.com/doctrine/dbal/tree/3.6.4"
+ "source": "https://github.com/doctrine/dbal/tree/3.6.5"
},
"funding": [
{
@@ -1459,7 +1459,7 @@
"type": "tidelift"
}
],
- "time": "2023-06-15T07:40:12+00:00"
+ "time": "2023-07-17T09:15:50+00:00"
},
{
"name": "doctrine/deprecations",
@@ -1762,28 +1762,27 @@
},
{
"name": "doctrine/lexer",
- "version": "2.1.0",
+ "version": "3.0.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
- "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
+ "reference": "84a527db05647743d50373e0ec53a152f2cde568"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
- "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568",
+ "reference": "84a527db05647743d50373e0ec53a152f2cde568",
"shasum": ""
},
"require": {
- "doctrine/deprecations": "^1.0",
- "php": "^7.1 || ^8.0"
+ "php": "^8.1"
},
"require-dev": {
- "doctrine/coding-standard": "^9 || ^10",
- "phpstan/phpstan": "^1.3",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "doctrine/coding-standard": "^10",
+ "phpstan/phpstan": "^1.9",
+ "phpunit/phpunit": "^9.5",
"psalm/plugin-phpunit": "^0.18.3",
- "vimeo/psalm": "^4.11 || ^5.0"
+ "vimeo/psalm": "^5.0"
},
"type": "library",
"autoload": {
@@ -1820,7 +1819,7 @@
],
"support": {
"issues": "https://github.com/doctrine/lexer/issues",
- "source": "https://github.com/doctrine/lexer/tree/2.1.0"
+ "source": "https://github.com/doctrine/lexer/tree/3.0.0"
},
"funding": [
{
@@ -1836,20 +1835,20 @@
"type": "tidelift"
}
],
- "time": "2022-12-14T08:49:07+00:00"
+ "time": "2022-12-15T16:57:16+00:00"
},
{
"name": "dragonmantank/cron-expression",
- "version": "v3.3.2",
+ "version": "v3.3.3",
"source": {
"type": "git",
"url": "https://github.com/dragonmantank/cron-expression.git",
- "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8"
+ "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8",
- "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8",
+ "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a",
+ "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a",
"shasum": ""
},
"require": {
@@ -1889,7 +1888,7 @@
],
"support": {
"issues": "https://github.com/dragonmantank/cron-expression/issues",
- "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2"
+ "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3"
},
"funding": [
{
@@ -1897,7 +1896,7 @@
"type": "github"
}
],
- "time": "2022-09-10T18:51:20+00:00"
+ "time": "2023-08-10T19:36:49+00:00"
},
{
"name": "egulias/email-validator",
@@ -2485,16 +2484,16 @@
},
{
"name": "google/apiclient-services",
- "version": "v0.309.0",
+ "version": "v0.312.0",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-api-php-client-services.git",
- "reference": "562f8e5ddbca68d52afc3bf47d03839e78722026"
+ "reference": "45d47fed73b28254c511882bc743b1690a99558d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/562f8e5ddbca68d52afc3bf47d03839e78722026",
- "reference": "562f8e5ddbca68d52afc3bf47d03839e78722026",
+ "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/45d47fed73b28254c511882bc743b1690a99558d",
+ "reference": "45d47fed73b28254c511882bc743b1690a99558d",
"shasum": ""
},
"require": {
@@ -2523,9 +2522,9 @@
],
"support": {
"issues": "https://github.com/googleapis/google-api-php-client-services/issues",
- "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.309.0"
+ "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.312.0"
},
- "time": "2023-07-16T01:08:14+00:00"
+ "time": "2023-08-14T00:56:12+00:00"
},
{
"name": "google/auth",
@@ -2833,29 +2832,33 @@
},
{
"name": "guzzlehttp/promises",
- "version": "1.5.3",
+ "version": "2.0.1",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e"
+ "reference": "111166291a0f8130081195ac4556a5587d7f1b5d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e",
- "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d",
+ "reference": "111166291a0f8130081195ac4556a5587d7f1b5d",
"shasum": ""
},
"require": {
- "php": ">=5.5"
+ "php": "^7.2.5 || ^8.0"
},
"require-dev": {
- "symfony/phpunit-bridge": "^4.4 || ^5.1"
+ "bamarni/composer-bin-plugin": "^1.8.1",
+ "phpunit/phpunit": "^8.5.29 || ^9.5.23"
},
"type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
"autoload": {
- "files": [
- "src/functions_include.php"
- ],
"psr-4": {
"GuzzleHttp\\Promise\\": "src/"
}
@@ -2892,7 +2895,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/1.5.3"
+ "source": "https://github.com/guzzle/promises/tree/2.0.1"
},
"funding": [
{
@@ -2908,20 +2911,20 @@
"type": "tidelift"
}
],
- "time": "2023-05-21T12:31:43+00:00"
+ "time": "2023-08-03T15:11:55+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.5.0",
+ "version": "2.6.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "b635f279edd83fc275f822a1188157ffea568ff6"
+ "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6",
- "reference": "b635f279edd83fc275f822a1188157ffea568ff6",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/8bd7c33a0734ae1c5d074360512beb716bef3f77",
+ "reference": "8bd7c33a0734ae1c5d074360512beb716bef3f77",
"shasum": ""
},
"require": {
@@ -3008,7 +3011,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.5.0"
+ "source": "https://github.com/guzzle/psr7/tree/2.6.0"
},
"funding": [
{
@@ -3024,7 +3027,7 @@
"type": "tidelift"
}
],
- "time": "2023-04-17T16:11:26+00:00"
+ "time": "2023-08-03T15:06:02+00:00"
},
{
"name": "guzzlehttp/uri-template",
@@ -3345,16 +3348,16 @@
},
{
"name": "horstoeko/zugferd",
- "version": "v1.0.20",
+ "version": "v1.0.23",
"source": {
"type": "git",
"url": "https://github.com/horstoeko/zugferd.git",
- "reference": "725c130ec0a09d72cf54b3d819840f3959a5502c"
+ "reference": "bb55417be4c4de8deb0113e832feeaf7b4d3984e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/725c130ec0a09d72cf54b3d819840f3959a5502c",
- "reference": "725c130ec0a09d72cf54b3d819840f3959a5502c",
+ "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/bb55417be4c4de8deb0113e832feeaf7b4d3984e",
+ "reference": "bb55417be4c4de8deb0113e832feeaf7b4d3984e",
"shasum": ""
},
"require": {
@@ -3412,9 +3415,9 @@
],
"support": {
"issues": "https://github.com/horstoeko/zugferd/issues",
- "source": "https://github.com/horstoeko/zugferd/tree/v1.0.20"
+ "source": "https://github.com/horstoeko/zugferd/tree/v1.0.23"
},
- "time": "2023-07-04T15:21:32+00:00"
+ "time": "2023-08-16T17:39:36+00:00"
},
{
"name": "http-interop/http-factory-guzzle",
@@ -3926,22 +3929,22 @@
},
{
"name": "jms/serializer",
- "version": "3.26.0",
+ "version": "3.27.0",
"source": {
"type": "git",
"url": "https://github.com/schmittjoh/serializer.git",
- "reference": "926a7d57438fa1ff4ab794551c5ae26e68536853"
+ "reference": "e8c812460d7b47b15bc0ccd78901276bd44ad452"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/926a7d57438fa1ff4ab794551c5ae26e68536853",
- "reference": "926a7d57438fa1ff4ab794551c5ae26e68536853",
+ "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/e8c812460d7b47b15bc0ccd78901276bd44ad452",
+ "reference": "e8c812460d7b47b15bc0ccd78901276bd44ad452",
"shasum": ""
},
"require": {
"doctrine/annotations": "^1.13 || ^2.0",
"doctrine/instantiator": "^1.0.3 || ^2.0",
- "doctrine/lexer": "^2",
+ "doctrine/lexer": "^2.0 || ^3.0",
"jms/metadata": "^2.6",
"php": "^7.2||^8.0",
"phpstan/phpdoc-parser": "^0.4 || ^0.5 || ^1.0"
@@ -4010,7 +4013,7 @@
],
"support": {
"issues": "https://github.com/schmittjoh/serializer/issues",
- "source": "https://github.com/schmittjoh/serializer/tree/3.26.0"
+ "source": "https://github.com/schmittjoh/serializer/tree/3.27.0"
},
"funding": [
{
@@ -4018,20 +4021,20 @@
"type": "github"
}
],
- "time": "2023-06-24T19:25:58+00:00"
+ "time": "2023-07-29T22:33:44+00:00"
},
{
"name": "josemmo/facturae-php",
- "version": "v1.7.7",
+ "version": "v1.7.8",
"source": {
"type": "git",
"url": "https://github.com/josemmo/Facturae-PHP.git",
- "reference": "00c093bb4a618dca4f195d8d84120b2c762801b4"
+ "reference": "3c490fa60e668a6275ba2fb6c228f1e19216d02e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/josemmo/Facturae-PHP/zipball/00c093bb4a618dca4f195d8d84120b2c762801b4",
- "reference": "00c093bb4a618dca4f195d8d84120b2c762801b4",
+ "url": "https://api.github.com/repos/josemmo/Facturae-PHP/zipball/3c490fa60e668a6275ba2fb6c228f1e19216d02e",
+ "reference": "3c490fa60e668a6275ba2fb6c228f1e19216d02e",
"shasum": ""
},
"require": {
@@ -4073,9 +4076,9 @@
],
"support": {
"issues": "https://github.com/josemmo/Facturae-PHP/issues",
- "source": "https://github.com/josemmo/Facturae-PHP/tree/v1.7.7"
+ "source": "https://github.com/josemmo/Facturae-PHP/tree/v1.7.8"
},
- "time": "2023-07-02T08:07:03+00:00"
+ "time": "2023-08-06T15:34:37+00:00"
},
{
"name": "khanamiryan/qrcode-detector-decoder",
@@ -4235,16 +4238,16 @@
},
{
"name": "laravel/framework",
- "version": "v9.52.10",
+ "version": "v9.52.15",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "858add225ce88a76c43aec0e7866288321ee0ee9"
+ "reference": "e3350e87a52346af9cc655a3012d2175d2d05ad7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/858add225ce88a76c43aec0e7866288321ee0ee9",
- "reference": "858add225ce88a76c43aec0e7866288321ee0ee9",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/e3350e87a52346af9cc655a3012d2175d2d05ad7",
+ "reference": "e3350e87a52346af9cc655a3012d2175d2d05ad7",
"shasum": ""
},
"require": {
@@ -4429,20 +4432,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2023-06-27T13:25:54+00:00"
+ "time": "2023-08-08T14:28:40+00:00"
},
{
"name": "laravel/serializable-closure",
- "version": "v1.3.0",
+ "version": "v1.3.1",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37"
+ "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37",
- "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/e5a3057a5591e1cfe8183034b0203921abe2c902",
+ "reference": "e5a3057a5591e1cfe8183034b0203921abe2c902",
"shasum": ""
},
"require": {
@@ -4489,7 +4492,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2023-01-30T18:31:20+00:00"
+ "time": "2023-07-14T13:56:28+00:00"
},
{
"name": "laravel/slack-notification-channel",
@@ -5079,16 +5082,16 @@
},
{
"name": "league/csv",
- "version": "9.9.0",
+ "version": "9.10.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/csv.git",
- "reference": "b4418ede47fbd88facc34e40a16c8ce9153b961b"
+ "reference": "d24b0d484812313b07ab74b0fe4db9661606df6c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/csv/zipball/b4418ede47fbd88facc34e40a16c8ce9153b961b",
- "reference": "b4418ede47fbd88facc34e40a16c8ce9153b961b",
+ "url": "https://api.github.com/repos/thephpleague/csv/zipball/d24b0d484812313b07ab74b0fe4db9661606df6c",
+ "reference": "d24b0d484812313b07ab74b0fe4db9661606df6c",
"shasum": ""
},
"require": {
@@ -5097,16 +5100,17 @@
"php": "^8.1.2"
},
"require-dev": {
- "doctrine/collections": "^2.1.2",
+ "doctrine/collections": "^2.1.3",
"ext-dom": "*",
"ext-xdebug": "*",
- "friendsofphp/php-cs-fixer": "^v3.14.3",
- "phpbench/phpbench": "^1.2.8",
- "phpstan/phpstan": "^1.10.4",
- "phpstan/phpstan-deprecation-rules": "^1.1.2",
- "phpstan/phpstan-phpunit": "^1.3.10",
- "phpstan/phpstan-strict-rules": "^1.5.0",
- "phpunit/phpunit": "^10.0.14"
+ "friendsofphp/php-cs-fixer": "^v3.22.0",
+ "phpbench/phpbench": "^1.2.14",
+ "phpstan/phpstan": "^1.10.26",
+ "phpstan/phpstan-deprecation-rules": "^1.1.3",
+ "phpstan/phpstan-phpunit": "^1.3.13",
+ "phpstan/phpstan-strict-rules": "^1.5.1",
+ "phpunit/phpunit": "^10.3.1",
+ "symfony/var-dumper": "^6.3.3"
},
"suggest": {
"ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
@@ -5162,7 +5166,7 @@
"type": "github"
}
],
- "time": "2023-03-11T15:57:12+00:00"
+ "time": "2023-08-04T15:12:48+00:00"
},
{
"name": "league/flysystem",
@@ -5448,26 +5452,26 @@
},
{
"name": "league/mime-type-detection",
- "version": "1.11.0",
+ "version": "1.13.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/mime-type-detection.git",
- "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd"
+ "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
- "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd",
+ "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/a6dfb1194a2946fcdc1f38219445234f65b35c96",
+ "reference": "a6dfb1194a2946fcdc1f38219445234f65b35c96",
"shasum": ""
},
"require": {
"ext-fileinfo": "*",
- "php": "^7.2 || ^8.0"
+ "php": "^7.4 || ^8.0"
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^3.2",
"phpstan/phpstan": "^0.12.68",
- "phpunit/phpunit": "^8.5.8 || ^9.3"
+ "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0"
},
"type": "library",
"autoload": {
@@ -5488,7 +5492,7 @@
"description": "Mime-type detection for Flysystem",
"support": {
"issues": "https://github.com/thephpleague/mime-type-detection/issues",
- "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0"
+ "source": "https://github.com/thephpleague/mime-type-detection/tree/1.13.0"
},
"funding": [
{
@@ -5500,7 +5504,7 @@
"type": "tidelift"
}
],
- "time": "2022-04-17T13:12:02+00:00"
+ "time": "2023-08-05T12:09:49+00:00"
},
{
"name": "league/oauth1-client",
@@ -5643,16 +5647,16 @@
},
{
"name": "livewire/livewire",
- "version": "v2.12.3",
+ "version": "v2.12.6",
"source": {
"type": "git",
"url": "https://github.com/livewire/livewire.git",
- "reference": "019b1e69d8cd8c7e749eba7a38e4fa69ecbc8f74"
+ "reference": "7d3a57b3193299cf1a0639a3935c696f4da2cf92"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/livewire/livewire/zipball/019b1e69d8cd8c7e749eba7a38e4fa69ecbc8f74",
- "reference": "019b1e69d8cd8c7e749eba7a38e4fa69ecbc8f74",
+ "url": "https://api.github.com/repos/livewire/livewire/zipball/7d3a57b3193299cf1a0639a3935c696f4da2cf92",
+ "reference": "7d3a57b3193299cf1a0639a3935c696f4da2cf92",
"shasum": ""
},
"require": {
@@ -5704,7 +5708,7 @@
"description": "A front-end framework for Laravel.",
"support": {
"issues": "https://github.com/livewire/livewire/issues",
- "source": "https://github.com/livewire/livewire/tree/v2.12.3"
+ "source": "https://github.com/livewire/livewire/tree/v2.12.6"
},
"funding": [
{
@@ -5712,20 +5716,20 @@
"type": "github"
}
],
- "time": "2023-03-03T20:12:38+00:00"
+ "time": "2023-08-11T04:02:34+00:00"
},
{
"name": "microsoft/microsoft-graph",
- "version": "1.103.0",
+ "version": "1.104.0",
"source": {
"type": "git",
"url": "https://github.com/microsoftgraph/msgraph-sdk-php.git",
- "reference": "6e325c22145dbed4e51970ffecca4d7648c3c27e"
+ "reference": "fc2a3549e8efc9501dbf5d55d350882d8d641295"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/microsoftgraph/msgraph-sdk-php/zipball/6e325c22145dbed4e51970ffecca4d7648c3c27e",
- "reference": "6e325c22145dbed4e51970ffecca4d7648c3c27e",
+ "url": "https://api.github.com/repos/microsoftgraph/msgraph-sdk-php/zipball/fc2a3549e8efc9501dbf5d55d350882d8d641295",
+ "reference": "fc2a3549e8efc9501dbf5d55d350882d8d641295",
"shasum": ""
},
"require": {
@@ -5762,22 +5766,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.103.0"
+ "source": "https://github.com/microsoftgraph/msgraph-sdk-php/tree/1.104.0"
},
- "time": "2023-07-19T03:27:15+00:00"
+ "time": "2023-08-11T07:41:39+00:00"
},
{
"name": "mollie/mollie-api-php",
- "version": "v2.59.0",
+ "version": "v2.61.0",
"source": {
"type": "git",
"url": "https://github.com/mollie/mollie-api-php.git",
- "reference": "9834e5779c695d1cc278b2c78ee514de9434b084"
+ "reference": "d3ec7a191985aa57bec9b4425a665e95b4ba346a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mollie/mollie-api-php/zipball/9834e5779c695d1cc278b2c78ee514de9434b084",
- "reference": "9834e5779c695d1cc278b2c78ee514de9434b084",
+ "url": "https://api.github.com/repos/mollie/mollie-api-php/zipball/d3ec7a191985aa57bec9b4425a665e95b4ba346a",
+ "reference": "d3ec7a191985aa57bec9b4425a665e95b4ba346a",
"shasum": ""
},
"require": {
@@ -5854,22 +5858,22 @@
],
"support": {
"issues": "https://github.com/mollie/mollie-api-php/issues",
- "source": "https://github.com/mollie/mollie-api-php/tree/v2.59.0"
+ "source": "https://github.com/mollie/mollie-api-php/tree/v2.61.0"
},
- "time": "2023-07-18T13:41:40+00:00"
+ "time": "2023-07-31T15:37:46+00:00"
},
{
"name": "moneyphp/money",
- "version": "v4.1.1",
+ "version": "v4.2.0",
"source": {
"type": "git",
"url": "https://github.com/moneyphp/money.git",
- "reference": "9682220995ffd396843be5b4ee1e5f2c2d6ecee2"
+ "reference": "f660ab7f1d7a4c2ffdd30f50c55ed2c95c26fc3f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/moneyphp/money/zipball/9682220995ffd396843be5b4ee1e5f2c2d6ecee2",
- "reference": "9682220995ffd396843be5b4ee1e5f2c2d6ecee2",
+ "url": "https://api.github.com/repos/moneyphp/money/zipball/f660ab7f1d7a4c2ffdd30f50c55ed2c95c26fc3f",
+ "reference": "f660ab7f1d7a4c2ffdd30f50c55ed2c95c26fc3f",
"shasum": ""
},
"require": {
@@ -5943,9 +5947,9 @@
],
"support": {
"issues": "https://github.com/moneyphp/money/issues",
- "source": "https://github.com/moneyphp/money/tree/v4.1.1"
+ "source": "https://github.com/moneyphp/money/tree/v4.2.0"
},
- "time": "2023-04-11T09:18:34+00:00"
+ "time": "2023-08-16T14:31:24+00:00"
},
{
"name": "monolog/monolog",
@@ -6248,25 +6252,29 @@
},
{
"name": "nesbot/carbon",
- "version": "2.68.1",
+ "version": "2.69.0",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "4f991ed2a403c85efbc4f23eb4030063fdbe01da"
+ "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4f991ed2a403c85efbc4f23eb4030063fdbe01da",
- "reference": "4f991ed2a403c85efbc4f23eb4030063fdbe01da",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4308217830e4ca445583a37d1bf4aff4153fa81c",
+ "reference": "4308217830e4ca445583a37d1bf4aff4153fa81c",
"shasum": ""
},
"require": {
"ext-json": "*",
"php": "^7.1.8 || ^8.0",
+ "psr/clock": "^1.0",
"symfony/polyfill-mbstring": "^1.0",
"symfony/polyfill-php80": "^1.16",
"symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0"
},
+ "provide": {
+ "psr/clock-implementation": "1.0"
+ },
"require-dev": {
"doctrine/dbal": "^2.0 || ^3.1.4",
"doctrine/orm": "^2.7",
@@ -6346,25 +6354,25 @@
"type": "tidelift"
}
],
- "time": "2023-06-20T18:29:04+00:00"
+ "time": "2023-08-03T09:00:52+00:00"
},
{
"name": "nette/schema",
- "version": "v1.2.3",
+ "version": "v1.2.4",
"source": {
"type": "git",
"url": "https://github.com/nette/schema.git",
- "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f"
+ "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f",
- "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f",
+ "url": "https://api.github.com/repos/nette/schema/zipball/c9ff517a53903b3d4e29ec547fb20feecb05b8ab",
+ "reference": "c9ff517a53903b3d4e29ec547fb20feecb05b8ab",
"shasum": ""
},
"require": {
"nette/utils": "^2.5.7 || ^3.1.5 || ^4.0",
- "php": ">=7.1 <8.3"
+ "php": "7.1 - 8.3"
},
"require-dev": {
"nette/tester": "^2.3 || ^2.4",
@@ -6406,26 +6414,26 @@
],
"support": {
"issues": "https://github.com/nette/schema/issues",
- "source": "https://github.com/nette/schema/tree/v1.2.3"
+ "source": "https://github.com/nette/schema/tree/v1.2.4"
},
- "time": "2022-10-13T01:24:26+00:00"
+ "time": "2023-08-05T18:56:25+00:00"
},
{
"name": "nette/utils",
- "version": "v4.0.0",
+ "version": "v4.0.1",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e"
+ "reference": "9124157137da01b1f5a5a22d6486cb975f26db7e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e",
- "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e",
+ "url": "https://api.github.com/repos/nette/utils/zipball/9124157137da01b1f5a5a22d6486cb975f26db7e",
+ "reference": "9124157137da01b1f5a5a22d6486cb975f26db7e",
"shasum": ""
},
"require": {
- "php": ">=8.0 <8.3"
+ "php": ">=8.0 <8.4"
},
"conflict": {
"nette/finder": "<3",
@@ -6433,7 +6441,7 @@
},
"require-dev": {
"jetbrains/phpstorm-attributes": "dev-master",
- "nette/tester": "^2.4",
+ "nette/tester": "^2.5",
"phpstan/phpstan": "^1.0",
"tracy/tracy": "^2.9"
},
@@ -6493,22 +6501,22 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.0.0"
+ "source": "https://github.com/nette/utils/tree/v4.0.1"
},
- "time": "2023-02-02T10:41:53+00:00"
+ "time": "2023-07-30T15:42:21+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v4.16.0",
+ "version": "v4.17.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "19526a33fb561ef417e822e85f08a00db4059c17"
+ "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/19526a33fb561ef417e822e85f08a00db4059c17",
- "reference": "19526a33fb561ef417e822e85f08a00db4059c17",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
+ "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d",
"shasum": ""
},
"require": {
@@ -6549,9 +6557,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.16.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1"
},
- "time": "2023-06-25T14:52:30+00:00"
+ "time": "2023-08-13T19:53:39+00:00"
},
{
"name": "nunomaduro/termwind",
@@ -7711,16 +7719,16 @@
},
{
"name": "phpdocumentor/type-resolver",
- "version": "1.7.2",
+ "version": "1.7.3",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "b2fe4d22a5426f38e014855322200b97b5362c0d"
+ "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b2fe4d22a5426f38e014855322200b97b5362c0d",
- "reference": "b2fe4d22a5426f38e014855322200b97b5362c0d",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419",
+ "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419",
"shasum": ""
},
"require": {
@@ -7763,9 +7771,9 @@
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.2"
+ "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3"
},
- "time": "2023-05-30T18:13:47+00:00"
+ "time": "2023-08-12T11:01:26+00:00"
},
{
"name": "phpoption/phpoption",
@@ -7954,16 +7962,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.22.1",
+ "version": "1.23.1",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "65c39594fbd8c67abfc68bb323f86447bab79cc0"
+ "reference": "846ae76eef31c6d7790fac9bc399ecee45160b26"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/65c39594fbd8c67abfc68bb323f86447bab79cc0",
- "reference": "65c39594fbd8c67abfc68bb323f86447bab79cc0",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/846ae76eef31c6d7790fac9bc399ecee45160b26",
+ "reference": "846ae76eef31c6d7790fac9bc399ecee45160b26",
"shasum": ""
},
"require": {
@@ -7995,9 +8003,9 @@
"description": "PHPDoc parser with support for nullable, intersection and generic types",
"support": {
"issues": "https://github.com/phpstan/phpdoc-parser/issues",
- "source": "https://github.com/phpstan/phpdoc-parser/tree/1.22.1"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.23.1"
},
- "time": "2023-06-29T20:46:06+00:00"
+ "time": "2023-08-03T16:32:59+00:00"
},
{
"name": "pragmarx/google2fa",
@@ -8514,16 +8522,16 @@
},
{
"name": "psy/psysh",
- "version": "v0.11.19",
+ "version": "v0.11.20",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "1724ceff278daeeac5a006744633bacbb2dc4706"
+ "reference": "0fa27040553d1d280a67a4393194df5228afea5b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1724ceff278daeeac5a006744633bacbb2dc4706",
- "reference": "1724ceff278daeeac5a006744633bacbb2dc4706",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/0fa27040553d1d280a67a4393194df5228afea5b",
+ "reference": "0fa27040553d1d280a67a4393194df5228afea5b",
"shasum": ""
},
"require": {
@@ -8584,9 +8592,9 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.11.19"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.11.20"
},
- "time": "2023-07-15T19:42:19+00:00"
+ "time": "2023-07-31T14:32:22+00:00"
},
{
"name": "pusher/pusher-php-server",
@@ -9207,16 +9215,16 @@
},
{
"name": "sentry/sentry",
- "version": "3.20.1",
+ "version": "3.21.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
- "reference": "644ad9768c18139a80ac510090fad000d9ffd8a4"
+ "reference": "624aafc22b84b089ffa43b71fb01e0096505ec4f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/644ad9768c18139a80ac510090fad000d9ffd8a4",
- "reference": "644ad9768c18139a80ac510090fad000d9ffd8a4",
+ "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/624aafc22b84b089ffa43b71fb01e0096505ec4f",
+ "reference": "624aafc22b84b089ffa43b71fb01e0096505ec4f",
"shasum": ""
},
"require": {
@@ -9260,11 +9268,6 @@
"monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler."
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.13.x-dev"
- }
- },
"autoload": {
"files": [
"src/functions.php"
@@ -9296,7 +9299,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-php/issues",
- "source": "https://github.com/getsentry/sentry-php/tree/3.20.1"
+ "source": "https://github.com/getsentry/sentry-php/tree/3.21.0"
},
"funding": [
{
@@ -9308,20 +9311,20 @@
"type": "custom"
}
],
- "time": "2023-06-26T11:01:40+00:00"
+ "time": "2023-07-31T15:31:24+00:00"
},
{
"name": "sentry/sentry-laravel",
- "version": "3.6.1",
+ "version": "3.7.3",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-laravel.git",
- "reference": "eb94a52b88794d0c108dc46ca1a680531c3a8bad"
+ "reference": "2aee4ad217be8ef04ffcde6e9f7dd17af5a3b0bf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/eb94a52b88794d0c108dc46ca1a680531c3a8bad",
- "reference": "eb94a52b88794d0c108dc46ca1a680531c3a8bad",
+ "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/2aee4ad217be8ef04ffcde6e9f7dd17af5a3b0bf",
+ "reference": "2aee4ad217be8ef04ffcde6e9f7dd17af5a3b0bf",
"shasum": ""
},
"require": {
@@ -9329,7 +9332,7 @@
"nyholm/psr7": "^1.0",
"php": "^7.2 | ^8.0",
"sentry/sdk": "^3.4",
- "sentry/sentry": "^3.20",
+ "sentry/sentry": "^3.20.1",
"symfony/psr-http-message-bridge": "^1.0 | ^2.0"
},
"require-dev": {
@@ -9337,6 +9340,7 @@
"laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0",
"mockery/mockery": "^1.3",
"orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0",
+ "phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^8.4 | ^9.3"
},
"type": "library",
@@ -9386,7 +9390,7 @@
],
"support": {
"issues": "https://github.com/getsentry/sentry-laravel/issues",
- "source": "https://github.com/getsentry/sentry-laravel/tree/3.6.1"
+ "source": "https://github.com/getsentry/sentry-laravel/tree/3.7.3"
},
"funding": [
{
@@ -9398,7 +9402,7 @@
"type": "custom"
}
],
- "time": "2023-07-04T10:30:42+00:00"
+ "time": "2023-08-03T10:10:23+00:00"
},
{
"name": "setasign/fpdf",
@@ -9448,16 +9452,16 @@
},
{
"name": "setasign/fpdi",
- "version": "v2.3.7",
+ "version": "v2.4.1",
"source": {
"type": "git",
"url": "https://github.com/Setasign/FPDI.git",
- "reference": "bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05"
+ "reference": "f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Setasign/FPDI/zipball/bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05",
- "reference": "bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05",
+ "url": "https://api.github.com/repos/Setasign/FPDI/zipball/f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b",
+ "reference": "f4ba73e5bc053ccc90b81717c5df1cb2ea7bae7b",
"shasum": ""
},
"require": {
@@ -9470,7 +9474,7 @@
"require-dev": {
"phpunit/phpunit": "~5.7",
"setasign/fpdf": "~1.8",
- "setasign/tfpdf": "1.31",
+ "setasign/tfpdf": "~1.31",
"squizlabs/php_codesniffer": "^3.5",
"tecnickcom/tcpdf": "~6.2"
},
@@ -9508,7 +9512,7 @@
],
"support": {
"issues": "https://github.com/Setasign/FPDI/issues",
- "source": "https://github.com/Setasign/FPDI/tree/v2.3.7"
+ "source": "https://github.com/Setasign/FPDI/tree/v2.4.1"
},
"funding": [
{
@@ -9516,7 +9520,7 @@
"type": "tidelift"
}
],
- "time": "2023-02-09T10:38:43+00:00"
+ "time": "2023-07-27T08:12:09+00:00"
},
{
"name": "shopify/shopify-api",
@@ -9583,16 +9587,16 @@
},
{
"name": "smalot/pdfparser",
- "version": "v2.5.0",
+ "version": "v2.7.0",
"source": {
"type": "git",
"url": "https://github.com/smalot/pdfparser.git",
- "reference": "9094d7777aeaa7d8a0a845b352f7dfe4a8baced3"
+ "reference": "eef0263bbaec86d30801d3551ac83f4e1015d4c3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/smalot/pdfparser/zipball/9094d7777aeaa7d8a0a845b352f7dfe4a8baced3",
- "reference": "9094d7777aeaa7d8a0a845b352f7dfe4a8baced3",
+ "url": "https://api.github.com/repos/smalot/pdfparser/zipball/eef0263bbaec86d30801d3551ac83f4e1015d4c3",
+ "reference": "eef0263bbaec86d30801d3551ac83f4e1015d4c3",
"shasum": ""
},
"require": {
@@ -9628,9 +9632,9 @@
],
"support": {
"issues": "https://github.com/smalot/pdfparser/issues",
- "source": "https://github.com/smalot/pdfparser/tree/v2.5.0"
+ "source": "https://github.com/smalot/pdfparser/tree/v2.7.0"
},
- "time": "2023-04-24T07:00:49+00:00"
+ "time": "2023-08-10T06:11:26+00:00"
},
{
"name": "socialiteproviders/apple",
@@ -9830,16 +9834,16 @@
},
{
"name": "spatie/laravel-data",
- "version": "3.7.0",
+ "version": "3.8.1",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-data.git",
- "reference": "a975123d86e0133a361ac225d17acb3d11aa351f"
+ "reference": "7ead3d8f761846185a94d06e584bfe17e43b9239"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-data/zipball/a975123d86e0133a361ac225d17acb3d11aa351f",
- "reference": "a975123d86e0133a361ac225d17acb3d11aa351f",
+ "url": "https://api.github.com/repos/spatie/laravel-data/zipball/7ead3d8f761846185a94d06e584bfe17e43b9239",
+ "reference": "7ead3d8f761846185a94d06e584bfe17e43b9239",
"shasum": ""
},
"require": {
@@ -9901,7 +9905,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-data/issues",
- "source": "https://github.com/spatie/laravel-data/tree/3.7.0"
+ "source": "https://github.com/spatie/laravel-data/tree/3.8.1"
},
"funding": [
{
@@ -9909,20 +9913,20 @@
"type": "github"
}
],
- "time": "2023-07-05T11:45:14+00:00"
+ "time": "2023-08-11T11:59:07+00:00"
},
{
"name": "spatie/laravel-package-tools",
- "version": "1.15.0",
+ "version": "1.16.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-package-tools.git",
- "reference": "efab1844b8826443135201c4443690f032c3d533"
+ "reference": "38fe533e93f86a1b2fb1000bf7df09c4748e6458"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/efab1844b8826443135201c4443690f032c3d533",
- "reference": "efab1844b8826443135201c4443690f032c3d533",
+ "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/38fe533e93f86a1b2fb1000bf7df09c4748e6458",
+ "reference": "38fe533e93f86a1b2fb1000bf7df09c4748e6458",
"shasum": ""
},
"require": {
@@ -9961,7 +9965,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-package-tools/issues",
- "source": "https://github.com/spatie/laravel-package-tools/tree/1.15.0"
+ "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.0"
},
"funding": [
{
@@ -9969,7 +9973,7 @@
"type": "github"
}
],
- "time": "2023-04-27T08:09:01+00:00"
+ "time": "2023-08-09T14:08:04+00:00"
},
{
"name": "sprain/swiss-qr-bill",
@@ -10150,16 +10154,16 @@
},
{
"name": "symfony/console",
- "version": "v6.3.0",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7"
+ "reference": "aa5d64ad3f63f2e48964fc81ee45cb318a723898"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7",
- "reference": "8788808b07cf0bdd6e4b7fdd23d8ddb1470c83b7",
+ "url": "https://api.github.com/repos/symfony/console/zipball/aa5d64ad3f63f2e48964fc81ee45cb318a723898",
+ "reference": "aa5d64ad3f63f2e48964fc81ee45cb318a723898",
"shasum": ""
},
"require": {
@@ -10220,7 +10224,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.3.0"
+ "source": "https://github.com/symfony/console/tree/v6.3.2"
},
"funding": [
{
@@ -10236,20 +10240,20 @@
"type": "tidelift"
}
],
- "time": "2023-05-29T12:49:39+00:00"
+ "time": "2023-07-19T20:17:28+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v6.3.0",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "88453e64cd86c5b60e8d2fb2c6f953bbc353ffbf"
+ "reference": "883d961421ab1709877c10ac99451632a3d6fa57"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/88453e64cd86c5b60e8d2fb2c6f953bbc353ffbf",
- "reference": "88453e64cd86c5b60e8d2fb2c6f953bbc353ffbf",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57",
+ "reference": "883d961421ab1709877c10ac99451632a3d6fa57",
"shasum": ""
},
"require": {
@@ -10285,7 +10289,7 @@
"description": "Converts CSS selectors to XPath expressions",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/css-selector/tree/v6.3.0"
+ "source": "https://github.com/symfony/css-selector/tree/v6.3.2"
},
"funding": [
{
@@ -10301,7 +10305,7 @@
"type": "tidelift"
}
],
- "time": "2023-03-20T16:43:42+00:00"
+ "time": "2023-07-12T16:00:22+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -10372,16 +10376,16 @@
},
{
"name": "symfony/error-handler",
- "version": "v6.3.0",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "99d2d814a6351461af350ead4d963bd67451236f"
+ "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/99d2d814a6351461af350ead4d963bd67451236f",
- "reference": "99d2d814a6351461af350ead4d963bd67451236f",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/85fd65ed295c4078367c784e8a5a6cee30348b7a",
+ "reference": "85fd65ed295c4078367c784e8a5a6cee30348b7a",
"shasum": ""
},
"require": {
@@ -10426,7 +10430,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/error-handler/tree/v6.3.0"
+ "source": "https://github.com/symfony/error-handler/tree/v6.3.2"
},
"funding": [
{
@@ -10442,20 +10446,20 @@
"type": "tidelift"
}
],
- "time": "2023-05-10T12:03:13+00:00"
+ "time": "2023-07-16T17:05:46+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v6.3.0",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa"
+ "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa",
- "reference": "3af8ac1a3f98f6dbc55e10ae59c9e44bfc38dfaa",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e",
+ "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e",
"shasum": ""
},
"require": {
@@ -10506,7 +10510,7 @@
"description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.0"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v6.3.2"
},
"funding": [
{
@@ -10522,7 +10526,7 @@
"type": "tidelift"
}
],
- "time": "2023-04-21T14:41:17+00:00"
+ "time": "2023-07-06T06:56:43+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -10665,16 +10669,16 @@
},
{
"name": "symfony/finder",
- "version": "v6.3.0",
+ "version": "v6.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2"
+ "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/d9b01ba073c44cef617c7907ce2419f8d00d75e2",
- "reference": "d9b01ba073c44cef617c7907ce2419f8d00d75e2",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/9915db259f67d21eefee768c1abcf1cc61b1fc9e",
+ "reference": "9915db259f67d21eefee768c1abcf1cc61b1fc9e",
"shasum": ""
},
"require": {
@@ -10709,7 +10713,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v6.3.0"
+ "source": "https://github.com/symfony/finder/tree/v6.3.3"
},
"funding": [
{
@@ -10725,20 +10729,20 @@
"type": "tidelift"
}
],
- "time": "2023-04-02T01:25:41+00:00"
+ "time": "2023-07-31T08:31:44+00:00"
},
{
"name": "symfony/http-client",
- "version": "v6.3.1",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
- "reference": "1c828a06aef2f5eeba42026dfc532d4fc5406123"
+ "reference": "15f9f4bad62bfcbe48b5dedd866f04a08fc7ff00"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-client/zipball/1c828a06aef2f5eeba42026dfc532d4fc5406123",
- "reference": "1c828a06aef2f5eeba42026dfc532d4fc5406123",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/15f9f4bad62bfcbe48b5dedd866f04a08fc7ff00",
+ "reference": "15f9f4bad62bfcbe48b5dedd866f04a08fc7ff00",
"shasum": ""
},
"require": {
@@ -10801,7 +10805,7 @@
"http"
],
"support": {
- "source": "https://github.com/symfony/http-client/tree/v6.3.1"
+ "source": "https://github.com/symfony/http-client/tree/v6.3.2"
},
"funding": [
{
@@ -10817,7 +10821,7 @@
"type": "tidelift"
}
],
- "time": "2023-06-24T11:51:27+00:00"
+ "time": "2023-07-05T08:41:27+00:00"
},
{
"name": "symfony/http-client-contracts",
@@ -10899,16 +10903,16 @@
},
{
"name": "symfony/http-foundation",
- "version": "v6.3.1",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "e0ad0d153e1c20069250986cd9e9dd1ccebb0d66"
+ "reference": "43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e0ad0d153e1c20069250986cd9e9dd1ccebb0d66",
- "reference": "e0ad0d153e1c20069250986cd9e9dd1ccebb0d66",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3",
+ "reference": "43ed99d30f5f466ffa00bdac3f5f7aa9cd7617c3",
"shasum": ""
},
"require": {
@@ -10956,7 +10960,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.3.1"
+ "source": "https://github.com/symfony/http-foundation/tree/v6.3.2"
},
"funding": [
{
@@ -10972,20 +10976,20 @@
"type": "tidelift"
}
],
- "time": "2023-06-24T11:51:27+00:00"
+ "time": "2023-07-23T21:58:39+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v6.3.1",
+ "version": "v6.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "161e16fd2e35fb4881a43bc8b383dfd5be4ac374"
+ "reference": "d3b567f0addf695e10b0c6d57564a9bea2e058ee"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/161e16fd2e35fb4881a43bc8b383dfd5be4ac374",
- "reference": "161e16fd2e35fb4881a43bc8b383dfd5be4ac374",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/d3b567f0addf695e10b0c6d57564a9bea2e058ee",
+ "reference": "d3b567f0addf695e10b0c6d57564a9bea2e058ee",
"shasum": ""
},
"require": {
@@ -11069,7 +11073,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.3.1"
+ "source": "https://github.com/symfony/http-kernel/tree/v6.3.3"
},
"funding": [
{
@@ -11085,20 +11089,20 @@
"type": "tidelift"
}
],
- "time": "2023-06-26T06:07:32+00:00"
+ "time": "2023-07-31T10:33:00+00:00"
},
{
"name": "symfony/intl",
- "version": "v6.3.1",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/intl.git",
- "reference": "fdf4aff85fff2cc681cc45936b6b2a52731acc23"
+ "reference": "1f8cb145c869ed089a8531c51a6a4b31ed0b3c69"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/intl/zipball/fdf4aff85fff2cc681cc45936b6b2a52731acc23",
- "reference": "fdf4aff85fff2cc681cc45936b6b2a52731acc23",
+ "url": "https://api.github.com/repos/symfony/intl/zipball/1f8cb145c869ed089a8531c51a6a4b31ed0b3c69",
+ "reference": "1f8cb145c869ed089a8531c51a6a4b31ed0b3c69",
"shasum": ""
},
"require": {
@@ -11106,7 +11110,8 @@
},
"require-dev": {
"symfony/filesystem": "^5.4|^6.0",
- "symfony/finder": "^5.4|^6.0"
+ "symfony/finder": "^5.4|^6.0",
+ "symfony/var-exporter": "^5.4|^6.0"
},
"type": "library",
"autoload": {
@@ -11150,7 +11155,7 @@
"localization"
],
"support": {
- "source": "https://github.com/symfony/intl/tree/v6.3.1"
+ "source": "https://github.com/symfony/intl/tree/v6.3.2"
},
"funding": [
{
@@ -11166,7 +11171,7 @@
"type": "tidelift"
}
],
- "time": "2023-06-21T12:08:28+00:00"
+ "time": "2023-07-20T07:43:09+00:00"
},
{
"name": "symfony/mailer",
@@ -11250,16 +11255,16 @@
},
{
"name": "symfony/mailgun-mailer",
- "version": "v6.3.0",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailgun-mailer.git",
- "reference": "2fafefe8683a93155aceb6cca622c7cee2e27174"
+ "reference": "df371e42a4c2a78a28c8de910f96949040e308fd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/2fafefe8683a93155aceb6cca622c7cee2e27174",
- "reference": "2fafefe8683a93155aceb6cca622c7cee2e27174",
+ "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/df371e42a4c2a78a28c8de910f96949040e308fd",
+ "reference": "df371e42a4c2a78a28c8de910f96949040e308fd",
"shasum": ""
},
"require": {
@@ -11299,7 +11304,7 @@
"description": "Symfony Mailgun Mailer Bridge",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailgun-mailer/tree/v6.3.0"
+ "source": "https://github.com/symfony/mailgun-mailer/tree/v6.3.2"
},
"funding": [
{
@@ -11315,24 +11320,25 @@
"type": "tidelift"
}
],
- "time": "2023-05-02T16:15:19+00:00"
+ "time": "2023-07-20T10:26:17+00:00"
},
{
"name": "symfony/mime",
- "version": "v6.3.0",
+ "version": "v6.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad"
+ "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/7b5d2121858cd6efbed778abce9cfdd7ab1f62ad",
- "reference": "7b5d2121858cd6efbed778abce9cfdd7ab1f62ad",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/9a0cbd52baa5ba5a5b1f0cacc59466f194730f98",
+ "reference": "9a0cbd52baa5ba5a5b1f0cacc59466f194730f98",
"shasum": ""
},
"require": {
"php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-intl-idn": "^1.10",
"symfony/polyfill-mbstring": "^1.0"
},
@@ -11341,7 +11347,7 @@
"phpdocumentor/reflection-docblock": "<3.2.2",
"phpdocumentor/type-resolver": "<1.4.0",
"symfony/mailer": "<5.4",
- "symfony/serializer": "<6.2"
+ "symfony/serializer": "<6.2.13|>=6.3,<6.3.2"
},
"require-dev": {
"egulias/email-validator": "^2.1.10|^3.1|^4",
@@ -11350,7 +11356,7 @@
"symfony/dependency-injection": "^5.4|^6.0",
"symfony/property-access": "^5.4|^6.0",
"symfony/property-info": "^5.4|^6.0",
- "symfony/serializer": "^6.2"
+ "symfony/serializer": "~6.2.13|^6.3.2"
},
"type": "library",
"autoload": {
@@ -11382,7 +11388,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v6.3.0"
+ "source": "https://github.com/symfony/mime/tree/v6.3.3"
},
"funding": [
{
@@ -11398,7 +11404,7 @@
"type": "tidelift"
}
],
- "time": "2023-04-28T15:57:00+00:00"
+ "time": "2023-07-31T07:08:24+00:00"
},
{
"name": "symfony/options-resolver",
@@ -12442,16 +12448,16 @@
},
{
"name": "symfony/process",
- "version": "v6.3.0",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "8741e3ed7fe2e91ec099e02446fb86667a0f1628"
+ "reference": "c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/8741e3ed7fe2e91ec099e02446fb86667a0f1628",
- "reference": "8741e3ed7fe2e91ec099e02446fb86667a0f1628",
+ "url": "https://api.github.com/repos/symfony/process/zipball/c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d",
+ "reference": "c5ce962db0d9b6e80247ca5eb9af6472bd4d7b5d",
"shasum": ""
},
"require": {
@@ -12483,7 +12489,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.3.0"
+ "source": "https://github.com/symfony/process/tree/v6.3.2"
},
"funding": [
{
@@ -12499,20 +12505,20 @@
"type": "tidelift"
}
],
- "time": "2023-05-19T08:06:44+00:00"
+ "time": "2023-07-12T16:00:22+00:00"
},
{
"name": "symfony/property-access",
- "version": "v5.4.22",
+ "version": "v5.4.26",
"source": {
"type": "git",
"url": "https://github.com/symfony/property-access.git",
- "reference": "ffee082889586b5718347b291e04071f4d07b38f"
+ "reference": "0249e46f69e92049a488f39fcf531cb42c50caaa"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/property-access/zipball/ffee082889586b5718347b291e04071f4d07b38f",
- "reference": "ffee082889586b5718347b291e04071f4d07b38f",
+ "url": "https://api.github.com/repos/symfony/property-access/zipball/0249e46f69e92049a488f39fcf531cb42c50caaa",
+ "reference": "0249e46f69e92049a488f39fcf531cb42c50caaa",
"shasum": ""
},
"require": {
@@ -12564,7 +12570,7 @@
"reflection"
],
"support": {
- "source": "https://github.com/symfony/property-access/tree/v5.4.22"
+ "source": "https://github.com/symfony/property-access/tree/v5.4.26"
},
"funding": [
{
@@ -12580,7 +12586,7 @@
"type": "tidelift"
}
],
- "time": "2023-03-14T14:59:20+00:00"
+ "time": "2023-07-13T15:20:41+00:00"
},
{
"name": "symfony/property-info",
@@ -12667,21 +12673,22 @@
},
{
"name": "symfony/psr-http-message-bridge",
- "version": "v2.2.0",
+ "version": "v2.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/psr-http-message-bridge.git",
- "reference": "28a732c05bbad801304ad5a5c674cf2970508993"
+ "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/28a732c05bbad801304ad5a5c674cf2970508993",
- "reference": "28a732c05bbad801304ad5a5c674cf2970508993",
+ "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/581ca6067eb62640de5ff08ee1ba6850a0ee472e",
+ "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e",
"shasum": ""
},
"require": {
"php": ">=7.2.5",
"psr/http-message": "^1.0 || ^2.0",
+ "symfony/deprecation-contracts": "^2.5 || ^3.0",
"symfony/http-foundation": "^5.4 || ^6.0"
},
"require-dev": {
@@ -12700,7 +12707,7 @@
"type": "symfony-bridge",
"extra": {
"branch-alias": {
- "dev-main": "2.2-dev"
+ "dev-main": "2.3-dev"
}
},
"autoload": {
@@ -12735,7 +12742,7 @@
],
"support": {
"issues": "https://github.com/symfony/psr-http-message-bridge/issues",
- "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.2.0"
+ "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.3.1"
},
"funding": [
{
@@ -12751,24 +12758,25 @@
"type": "tidelift"
}
],
- "time": "2023-04-21T08:40:19+00:00"
+ "time": "2023-07-26T11:53:26+00:00"
},
{
"name": "symfony/routing",
- "version": "v6.3.1",
+ "version": "v6.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "d37ad1779c38b8eb71996d17dc13030dcb7f9cf5"
+ "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/d37ad1779c38b8eb71996d17dc13030dcb7f9cf5",
- "reference": "d37ad1779c38b8eb71996d17dc13030dcb7f9cf5",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/e7243039ab663822ff134fbc46099b5fdfa16f6a",
+ "reference": "e7243039ab663822ff134fbc46099b5fdfa16f6a",
"shasum": ""
},
"require": {
- "php": ">=8.1"
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3"
},
"conflict": {
"doctrine/annotations": "<1.12",
@@ -12817,7 +12825,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v6.3.1"
+ "source": "https://github.com/symfony/routing/tree/v6.3.3"
},
"funding": [
{
@@ -12833,7 +12841,7 @@
"type": "tidelift"
}
],
- "time": "2023-06-05T15:30:22+00:00"
+ "time": "2023-07-31T07:08:24+00:00"
},
{
"name": "symfony/service-contracts",
@@ -12919,16 +12927,16 @@
},
{
"name": "symfony/string",
- "version": "v6.3.0",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f"
+ "reference": "53d1a83225002635bca3482fcbf963001313fb68"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/f2e190ee75ff0f5eced645ec0be5c66fac81f51f",
- "reference": "f2e190ee75ff0f5eced645ec0be5c66fac81f51f",
+ "url": "https://api.github.com/repos/symfony/string/zipball/53d1a83225002635bca3482fcbf963001313fb68",
+ "reference": "53d1a83225002635bca3482fcbf963001313fb68",
"shasum": ""
},
"require": {
@@ -12985,7 +12993,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.3.0"
+ "source": "https://github.com/symfony/string/tree/v6.3.2"
},
"funding": [
{
@@ -13001,24 +13009,25 @@
"type": "tidelift"
}
],
- "time": "2023-03-21T21:06:29+00:00"
+ "time": "2023-07-05T08:41:27+00:00"
},
{
"name": "symfony/translation",
- "version": "v6.3.0",
+ "version": "v6.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f"
+ "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/f72b2cba8f79dd9d536f534f76874b58ad37876f",
- "reference": "f72b2cba8f79dd9d536f534f76874b58ad37876f",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd",
+ "reference": "3ed078c54bc98bbe4414e1e9b2d5e85ed5a5c8bd",
"shasum": ""
},
"require": {
"php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0",
"symfony/translation-contracts": "^2.5|^3.0"
},
@@ -13079,7 +13088,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v6.3.0"
+ "source": "https://github.com/symfony/translation/tree/v6.3.3"
},
"funding": [
{
@@ -13095,7 +13104,7 @@
"type": "tidelift"
}
],
- "time": "2023-05-19T12:46:45+00:00"
+ "time": "2023-07-31T07:08:24+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -13251,16 +13260,16 @@
},
{
"name": "symfony/validator",
- "version": "v6.3.1",
+ "version": "v6.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/validator.git",
- "reference": "1b71f43c62ee867ab08195ba6039a1bc3e6654dc"
+ "reference": "b0c4ecf17d39eee1edfecc92299a03b9f5d5220b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/validator/zipball/1b71f43c62ee867ab08195ba6039a1bc3e6654dc",
- "reference": "1b71f43c62ee867ab08195ba6039a1bc3e6654dc",
+ "url": "https://api.github.com/repos/symfony/validator/zipball/b0c4ecf17d39eee1edfecc92299a03b9f5d5220b",
+ "reference": "b0c4ecf17d39eee1edfecc92299a03b9f5d5220b",
"shasum": ""
},
"require": {
@@ -13327,7 +13336,7 @@
"description": "Provides tools to validate values",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/validator/tree/v6.3.1"
+ "source": "https://github.com/symfony/validator/tree/v6.3.2"
},
"funding": [
{
@@ -13343,24 +13352,25 @@
"type": "tidelift"
}
],
- "time": "2023-06-21T12:08:28+00:00"
+ "time": "2023-07-26T17:39:03+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v6.3.1",
+ "version": "v6.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "c81268d6960ddb47af17391a27d222bd58cf0515"
+ "reference": "77fb4f2927f6991a9843633925d111147449ee7a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c81268d6960ddb47af17391a27d222bd58cf0515",
- "reference": "c81268d6960ddb47af17391a27d222bd58cf0515",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/77fb4f2927f6991a9843633925d111147449ee7a",
+ "reference": "77fb4f2927f6991a9843633925d111147449ee7a",
"shasum": ""
},
"require": {
"php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-mbstring": "~1.0"
},
"conflict": {
@@ -13369,6 +13379,7 @@
"require-dev": {
"ext-iconv": "*",
"symfony/console": "^5.4|^6.0",
+ "symfony/http-kernel": "^5.4|^6.0",
"symfony/process": "^5.4|^6.0",
"symfony/uid": "^5.4|^6.0",
"twig/twig": "^2.13|^3.0.4"
@@ -13409,7 +13420,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v6.3.1"
+ "source": "https://github.com/symfony/var-dumper/tree/v6.3.3"
},
"funding": [
{
@@ -13425,24 +13436,25 @@
"type": "tidelift"
}
],
- "time": "2023-06-21T12:08:28+00:00"
+ "time": "2023-07-31T07:08:24+00:00"
},
{
"name": "symfony/yaml",
- "version": "v6.3.0",
+ "version": "v6.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "a9a8337aa641ef2aa39c3e028f9107ec391e5927"
+ "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/a9a8337aa641ef2aa39c3e028f9107ec391e5927",
- "reference": "a9a8337aa641ef2aa39c3e028f9107ec391e5927",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add",
+ "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add",
"shasum": ""
},
"require": {
"php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
"symfony/polyfill-ctype": "^1.8"
},
"conflict": {
@@ -13480,7 +13492,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v6.3.0"
+ "source": "https://github.com/symfony/yaml/tree/v6.3.3"
},
"funding": [
{
@@ -13496,7 +13508,7 @@
"type": "tidelift"
}
],
- "time": "2023-04-28T13:28:14+00:00"
+ "time": "2023-07-31T07:08:24+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -14232,16 +14244,16 @@
},
{
"name": "barryvdh/laravel-debugbar",
- "version": "v3.8.1",
+ "version": "v3.8.2",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-debugbar.git",
- "reference": "aff3235fecb4104203b1e62c32239c56530eee32"
+ "reference": "56a2dc1da9d3219164074713983eef68996386cf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/aff3235fecb4104203b1e62c32239c56530eee32",
- "reference": "aff3235fecb4104203b1e62c32239c56530eee32",
+ "url": "https://api.github.com/repos/barryvdh/laravel-debugbar/zipball/56a2dc1da9d3219164074713983eef68996386cf",
+ "reference": "56a2dc1da9d3219164074713983eef68996386cf",
"shasum": ""
},
"require": {
@@ -14300,7 +14312,7 @@
],
"support": {
"issues": "https://github.com/barryvdh/laravel-debugbar/issues",
- "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.8.1"
+ "source": "https://github.com/barryvdh/laravel-debugbar/tree/v3.8.2"
},
"funding": [
{
@@ -14312,7 +14324,7 @@
"type": "github"
}
],
- "time": "2023-02-21T14:21:02+00:00"
+ "time": "2023-07-26T04:57:49+00:00"
},
{
"name": "barryvdh/laravel-ide-helper",
@@ -15188,16 +15200,16 @@
},
{
"name": "friendsofphp/php-cs-fixer",
- "version": "v3.22.0",
+ "version": "v3.23.0",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "92b019f6c8d79aa26349d0db7671d37440dc0ff3"
+ "reference": "35af3cbbacfa91e164b252a28ec0b644f1ed4e78"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/92b019f6c8d79aa26349d0db7671d37440dc0ff3",
- "reference": "92b019f6c8d79aa26349d0db7671d37440dc0ff3",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/35af3cbbacfa91e164b252a28ec0b644f1ed4e78",
+ "reference": "35af3cbbacfa91e164b252a28ec0b644f1ed4e78",
"shasum": ""
},
"require": {
@@ -15273,7 +15285,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
- "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.22.0"
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.23.0"
},
"funding": [
{
@@ -15281,7 +15293,7 @@
"type": "github"
}
],
- "time": "2023-07-16T23:08:06+00:00"
+ "time": "2023-08-14T12:27:35+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -15461,31 +15473,31 @@
},
{
"name": "mockery/mockery",
- "version": "1.6.4",
+ "version": "1.6.6",
"source": {
"type": "git",
"url": "https://github.com/mockery/mockery.git",
- "reference": "d1413755e26fe56a63455f7753221c86cbb88f66"
+ "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mockery/mockery/zipball/d1413755e26fe56a63455f7753221c86cbb88f66",
- "reference": "d1413755e26fe56a63455f7753221c86cbb88f66",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e",
+ "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e",
"shasum": ""
},
"require": {
"hamcrest/hamcrest-php": "^2.0.1",
"lib-pcre": ">=7.0",
- "php": ">=7.4,<8.3"
+ "php": ">=7.3"
},
"conflict": {
"phpunit/phpunit": "<8.0"
},
"require-dev": {
- "phpunit/phpunit": "^8.5 || ^9.3",
+ "phpunit/phpunit": "^8.5 || ^9.6.10",
"psalm/plugin-phpunit": "^0.18.4",
"symplify/easy-coding-standard": "^11.5.0",
- "vimeo/psalm": "^5.13.1"
+ "vimeo/psalm": "^4.30"
},
"type": "library",
"autoload": {
@@ -15542,7 +15554,7 @@
"security": "https://github.com/mockery/mockery/security/advisories",
"source": "https://github.com/mockery/mockery"
},
- "time": "2023-07-19T15:51:02+00:00"
+ "time": "2023-08-09T00:03:52+00:00"
},
{
"name": "myclabs/deep-copy",
@@ -15744,16 +15756,16 @@
},
{
"name": "nunomaduro/larastan",
- "version": "v2.6.3",
+ "version": "v2.6.4",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/larastan.git",
- "reference": "73e5be5f5c732212ce6ca77ffd2753a136f36a23"
+ "reference": "6c5e8820f3db6397546f3ce48520af9d312aed27"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/73e5be5f5c732212ce6ca77ffd2753a136f36a23",
- "reference": "73e5be5f5c732212ce6ca77ffd2753a136f36a23",
+ "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/6c5e8820f3db6397546f3ce48520af9d312aed27",
+ "reference": "6c5e8820f3db6397546f3ce48520af9d312aed27",
"shasum": ""
},
"require": {
@@ -15816,7 +15828,7 @@
],
"support": {
"issues": "https://github.com/nunomaduro/larastan/issues",
- "source": "https://github.com/nunomaduro/larastan/tree/v2.6.3"
+ "source": "https://github.com/nunomaduro/larastan/tree/v2.6.4"
},
"funding": [
{
@@ -15836,7 +15848,7 @@
"type": "patreon"
}
],
- "time": "2023-06-13T21:39:27+00:00"
+ "time": "2023-07-29T12:13:13+00:00"
},
{
"name": "openlss/lib-array2xml",
@@ -16148,16 +16160,16 @@
},
{
"name": "phpstan/phpstan",
- "version": "1.10.26",
+ "version": "1.10.29",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "5d660cbb7e1b89253a47147ae44044f49832351f"
+ "reference": "ee5d8f2d3977fb09e55603eee6fb53bdd76ee9c1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5d660cbb7e1b89253a47147ae44044f49832351f",
- "reference": "5d660cbb7e1b89253a47147ae44044f49832351f",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ee5d8f2d3977fb09e55603eee6fb53bdd76ee9c1",
+ "reference": "ee5d8f2d3977fb09e55603eee6fb53bdd76ee9c1",
"shasum": ""
},
"require": {
@@ -16206,20 +16218,20 @@
"type": "tidelift"
}
],
- "time": "2023-07-19T12:44:37+00:00"
+ "time": "2023-08-14T13:24:11+00:00"
},
{
"name": "phpunit/php-code-coverage",
- "version": "9.2.26",
+ "version": "9.2.27",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1"
+ "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/443bc6912c9bd5b409254a40f4b0f4ced7c80ea1",
- "reference": "443bc6912c9bd5b409254a40f4b0f4ced7c80ea1",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/b0a88255cb70d52653d80c890bd7f38740ea50d1",
+ "reference": "b0a88255cb70d52653d80c890bd7f38740ea50d1",
"shasum": ""
},
"require": {
@@ -16275,7 +16287,8 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.26"
+ "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.27"
},
"funding": [
{
@@ -16283,7 +16296,7 @@
"type": "github"
}
],
- "time": "2023-03-06T12:58:08+00:00"
+ "time": "2023-07-26T13:44:30+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -17135,16 +17148,16 @@
},
{
"name": "sebastian/global-state",
- "version": "5.0.5",
+ "version": "5.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
+ "reference": "bde739e7565280bda77be70044ac1047bc007e34"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
- "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
+ "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34",
+ "reference": "bde739e7565280bda77be70044ac1047bc007e34",
"shasum": ""
},
"require": {
@@ -17187,7 +17200,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
+ "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6"
},
"funding": [
{
@@ -17195,7 +17208,7 @@
"type": "github"
}
],
- "time": "2022-02-14T08:28:10+00:00"
+ "time": "2023-08-02T09:26:13+00:00"
},
{
"name": "sebastian/lines-of-code",
@@ -17657,16 +17670,16 @@
},
{
"name": "spatie/flare-client-php",
- "version": "1.4.1",
+ "version": "1.4.2",
"source": {
"type": "git",
"url": "https://github.com/spatie/flare-client-php.git",
- "reference": "943894c6a6b00501365ac0b91ae0dce56f2226fa"
+ "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/943894c6a6b00501365ac0b91ae0dce56f2226fa",
- "reference": "943894c6a6b00501365ac0b91ae0dce56f2226fa",
+ "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/5f2c6a7a0d2c1d90c12559dc7828fd942911a544",
+ "reference": "5f2c6a7a0d2c1d90c12559dc7828fd942911a544",
"shasum": ""
},
"require": {
@@ -17715,7 +17728,7 @@
],
"support": {
"issues": "https://github.com/spatie/flare-client-php/issues",
- "source": "https://github.com/spatie/flare-client-php/tree/1.4.1"
+ "source": "https://github.com/spatie/flare-client-php/tree/1.4.2"
},
"funding": [
{
@@ -17723,7 +17736,7 @@
"type": "github"
}
],
- "time": "2023-07-06T09:29:49+00:00"
+ "time": "2023-07-28T08:07:24+00:00"
},
{
"name": "spatie/ignition",
diff --git a/config/beacon.php b/config/beacon.php
index 801fb16091e7..8fff666a8173 100644
--- a/config/beacon.php
+++ b/config/beacon.php
@@ -22,8 +22,8 @@ return [
*/
'batch' => true,
- 'cache_connection' => 'sentinel-cache',
-
+ 'cache_connection' => 'sentinel-cache',
+ // 'cache_connection' => 'cache',
/*
* The default key used to store
* metrics for batching
diff --git a/config/ninja.php b/config/ninja.php
index a3d19b473f7d..233559f73bbf 100644
--- a/config/ninja.php
+++ b/config/ninja.php
@@ -15,8 +15,8 @@ return [
'require_https' => env('REQUIRE_HTTPS', true),
'app_url' => rtrim(env('APP_URL', ''), '/'),
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
- 'app_version' => env('APP_VERSION','5.6.30'),
- 'app_tag' => env('APP_TAG','5.6.30'),
+ 'app_version' => env('APP_VERSION','5.6.31'),
+ 'app_tag' => env('APP_TAG','5.6.31'),
'minimum_client_version' => '5.0.16',
'terms_version' => '1.0.1',
'api_secret' => env('API_SECRET', ''),
diff --git a/lang/en/texts.php b/lang/en/texts.php
index f9d8f3821afb..ba7b3f4085fb 100644
--- a/lang/en/texts.php
+++ b/lang/en/texts.php
@@ -5101,7 +5101,7 @@ $LANG = array(
'certificate_passphrase' => 'Certificate Passphrase',
'valid_vat_number' => 'Valid VAT Number',
'react_notification_link' => 'React Notification Links',
- 'react_notification_link_help' => 'Admin emails will contain links to the react application',
+ 'react_notification_link_help' => 'Admin emails will contain links to the react application',
'show_task_billable' => 'Show Task Billable',
'credit_item' => 'Credit Item',
'drop_file_here' => 'Drop file here',
@@ -5109,7 +5109,7 @@ $LANG = array(
'camera' => 'Camera',
'gallery' => 'Gallery',
'project_location' => 'Project Location',
- 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments',
+ 'add_gateway_help_message' => 'Add a payment gateway (ie. Stripe, WePay or PayPal) to accept online payments',
'lang_Hungarian' => 'Hungarian',
'use_mobile_to_manage_plan' => 'Use your phone subscription settings to manage your plan',
'item_tax3' => 'Item Tax3',
@@ -5125,7 +5125,7 @@ $LANG = array(
'lang_French - Swiss' => 'French - Swiss',
'currency_swazi_lilangeni' => 'Swazi Lilangeni',
'income' => 'Income',
- 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.',
+ 'amount_received_help' => 'Enter a value here if the total amount received was MORE than the invoice amount, or when recording a payment with no invoices. Otherwise this field should be left blank.',
'vendor_phone' => 'Vendor Phone',
'mercado_pago' => 'Mercado Pago',
'mybank' => 'MyBank',
@@ -5143,6 +5143,7 @@ $LANG = array(
'is_tax_exempt' => 'Tax Exempt',
'drop_files_here' => 'Drop files here',
'upload_files' => 'Upload Files',
+ 'download_e_invoice' => 'Download E-Invoice',
'triangular_tax_info' => 'Intra-community triangular transaction',
'intracommunity_tax_info' => 'Tax-free intra-community delivery',
'reverse_tax_info' => 'Please note that this supply is subject to reverse charge',
diff --git a/phpstan.neon b/phpstan.neon
index 92bb5444400e..6bc4f9205594 100644
--- a/phpstan.neon
+++ b/phpstan.neon
@@ -8,19 +8,18 @@ parameters:
excludePaths:
- 'vendor/'
- 'app/Jobs/Ninja/*'
+ - 'app/Models/Presenters/*'
- 'app/Console/Commands/*'
- 'app/DataMapper/Analytics/*'
- 'app/PaymentDrivers/Authorize/*'
- 'app/Utils/Traits/*'
+ - 'resources/views/*'
universalObjectCratesClasses:
- App\DataMapper\Tax\RuleInterface
- App\DataMapper\FeesAndLimits
reportUnmatchedIgnoredErrors: false
ignoreErrors:
- - '#Call to an undefined method [a-zA-Z0-9\\_]+::company\(\)#'
- - '#Call to an undefined method [a-zA-Z0-9\\_]+::entityFilter\(\)#'
- - '#Call to an undefined method [a-zA-Z0-9\\_]+::exclude\(\)#'
- '#Array has 2 duplicate keys with value#'
- - '#Undefined method#'
+ - '#Call to an undefined method#'
- '#makeHidden#'
- '#Socialite#'
\ No newline at end of file
diff --git a/resources/views/email/admin/stripe_connect_failed.blade.php b/resources/views/email/admin/stripe_connect_failed.blade.php
new file mode 100644
index 000000000000..aba251b4892f
--- /dev/null
+++ b/resources/views/email/admin/stripe_connect_failed.blade.php
@@ -0,0 +1,59 @@
+@component('email.template.admin', ['design' => 'light', 'settings' => $settings, 'logo' => $logo])
+
+ @isset($greeting)
+
{{ $greeting }}
+ @endisset
+
+ @isset($title)
+
{{ $title }}
+ @endisset
+
+ @isset($h2)
+
{{ $title }}
+ @endisset
+
+
+ @isset($body)
+ {!! $body !!}
+ @endisset
+
+ @isset($slot)
+ {{ $slot }}
+ @endisset
+
+
+ @isset($additional_info)
+
{{ $additional_info }}
+ @endisset
+
+ @isset($url)
+
+
+
+
+
+
+ @endisset
+
+ @isset($signature)
+
{!! nl2br($signature) !!}
+ @endisset
+
+@endcomponent
diff --git a/resources/views/email/admin/stripe_connect_failed_text.blade.php b/resources/views/email/admin/stripe_connect_failed_text.blade.php
new file mode 100644
index 000000000000..319daf0679d0
--- /dev/null
+++ b/resources/views/email/admin/stripe_connect_failed_text.blade.php
@@ -0,0 +1,5 @@
+{!! $title !!}
+
+{!! $text_body !!}
+
+{!! $url !!}
\ No newline at end of file
diff --git a/resources/views/portal/ninja2020/components/livewire/pdf-slot.blade.php b/resources/views/portal/ninja2020/components/livewire/pdf-slot.blade.php
index 1e45ef9b2871..d15f748c6e23 100644
--- a/resources/views/portal/ninja2020/components/livewire/pdf-slot.blade.php
+++ b/resources/views/portal/ninja2020/components/livewire/pdf-slot.blade.php
@@ -1,5 +1,5 @@
-
+
+ @if($settings->enable_e_invoice && $entity_type == 'invoice')
+
+ @endif
@@ -86,7 +97,7 @@ function waitForElement(querySelector, timeout){
}
});
observer.observe(document.body, {
- childList: true,
+ childList: true,
subtree: true
});
if(timeout) timer = setTimeout(()=>{
@@ -97,4 +108,4 @@ function waitForElement(querySelector, timeout){
}
-
\ No newline at end of file
+
diff --git a/resources/views/portal/ninja2020/invoices/index.blade.php b/resources/views/portal/ninja2020/invoices/index.blade.php
index 0ce6e4292b7b..7b9dabe1a591 100644
--- a/resources/views/portal/ninja2020/invoices/index.blade.php
+++ b/resources/views/portal/ninja2020/invoices/index.blade.php
@@ -16,7 +16,7 @@