1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-09-20 16:31:33 +02:00
invoiceninja/app/Http/Livewire/SubscriptionPlanSwitch.php

164 lines
4.0 KiB
PHP
Raw Normal View History

2021-04-07 18:08:26 +02:00
<?php
/**
* Invoice Ninja (https://invoiceninja.com).
*
* @link https://github.com/invoiceninja/invoiceninja source repository
*
2022-04-27 05:20:41 +02:00
* @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
2021-04-07 18:08:26 +02:00
*
2021-06-16 08:58:16 +02:00
* @license https://www.elastic.co/licensing/elastic-license
2021-04-07 18:08:26 +02:00
*/
namespace App\Http\Livewire;
use App\Libraries\MultiDB;
use App\Models\ClientContact;
use App\Models\Subscription;
2021-04-14 04:40:16 +02:00
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Str;
2021-04-07 18:08:26 +02:00
use Livewire\Component;
class SubscriptionPlanSwitch extends Component
{
2021-04-12 13:56:08 +02:00
/**
* @var RecurringInvoice
*/
public $recurring_invoice;
/**
* @var Subscription
*/
2021-04-07 18:08:26 +02:00
public $subscription;
2021-04-12 13:56:08 +02:00
/**
* @var ?float
*/
public $amount;
/**
* @var Subscription
*/
public $target;
2021-04-07 18:08:26 +02:00
/**
* @var ClientContact
*/
2021-04-07 18:08:26 +02:00
public $contact;
/**
* @var array
*/
2021-04-07 18:08:26 +02:00
public $methods = [];
/**
* @var string
*/
2021-04-07 18:08:26 +02:00
public $total;
2022-09-02 02:38:27 +02:00
public $hide_button = false;
/**
* @var array
*/
public $state = [
'payment_initialised' => false,
'show_loading_bar' => false,
'invoice' => null,
'company_gateway_id' => null,
'payment_method_id' => null,
];
/**
* @var mixed|string
*/
public $hash;
public $company;
2021-04-07 18:08:26 +02:00
public function mount()
{
MultiDB::setDb($this->company->db);
2021-04-12 13:56:08 +02:00
$this->total = $this->amount;
2021-04-14 04:40:16 +02:00
$this->methods = $this->contact->client->service()->getPaymentMethods($this->amount);
2021-04-07 18:08:26 +02:00
$this->hash = Str::uuid()->toString();
}
public function handleBeforePaymentEvents(): void
{
$this->state['show_loading_bar'] = true;
$payment_required = $this->target->service()->changePlanPaymentCheck([
'recurring_invoice' => $this->recurring_invoice,
'subscription' => $this->subscription,
'target' => $this->target,
'hash' => $this->hash,
]);
if ($payment_required) {
$this->state['invoice'] = $this->target->service()->createChangePlanInvoice([
2021-04-15 04:28:31 +02:00
'recurring_invoice' => $this->recurring_invoice,
'subscription' => $this->subscription,
'target' => $this->target,
'hash' => $this->hash,
]);
Cache::put($this->hash, [
'subscription_id' => $this->target->id,
'target_id' => $this->target->id,
'recurring_invoice' => $this->recurring_invoice->id,
'client_id' => $this->recurring_invoice->client->id,
'invoice_id' => $this->state['invoice']->id,
'context' => 'change_plan',
now()->addMinutes(60), ]
2021-06-27 13:55:15 +02:00
);
$this->state['payment_initialised'] = true;
} else {
$this->handlePaymentNotRequired();
}
$this->emit('beforePaymentEventsCompleted');
2021-04-07 18:08:26 +02:00
}
/**
* Middle method between selecting payment method &
* submitting the from to the backend.
*
* @param $company_gateway_id
* @param $gateway_type_id
*/
public function handleMethodSelectingEvent($company_gateway_id, $gateway_type_id)
2021-04-07 18:08:26 +02:00
{
$this->state['company_gateway_id'] = $company_gateway_id;
$this->state['payment_method_id'] = $gateway_type_id;
$this->handleBeforePaymentEvents();
2021-04-07 18:08:26 +02:00
}
2021-04-15 04:28:31 +02:00
public function handlePaymentNotRequired()
{
2022-09-02 02:38:27 +02:00
$this->hide_button = true;
$response = $this->target->service()->createChangePlanCredit([
'recurring_invoice' => $this->recurring_invoice,
'subscription' => $this->subscription,
'target' => $this->target,
'hash' => $this->hash,
]);
2022-09-02 02:38:27 +02:00
$this->hide_button = true;
$this->dispatchBrowserEvent('redirectRoute', ['route' => $response]);
// return redirect($response);
2021-04-15 04:28:31 +02:00
}
2021-04-07 18:08:26 +02:00
public function render()
{
return render('components.livewire.subscription-plan-switch');
}
}