Allow prefilling the client/contact fields over query parameters

This commit is contained in:
Benjamin Beganović 2021-04-05 10:43:25 +02:00
parent 368ed459f1
commit b230680e8f
4 changed files with 62 additions and 3 deletions

View File

@ -15,6 +15,7 @@ use App\Factory\ClientFactory;
use App\Jobs\Mail\NinjaMailerJob; use App\Jobs\Mail\NinjaMailerJob;
use App\Jobs\Mail\NinjaMailerObject; use App\Jobs\Mail\NinjaMailerObject;
use App\Mail\ContactPasswordlessLogin; use App\Mail\ContactPasswordlessLogin;
use App\Models\Client;
use App\Models\Subscription; use App\Models\Subscription;
use App\Models\ClientContact; use App\Models\ClientContact;
use App\Models\Invoice; use App\Models\Invoice;
@ -220,6 +221,16 @@ class BillingPortalPurchase extends Component
'settings' => [], 'settings' => [],
]; ];
foreach ($this->request_data as $field => $value) {
if (in_array($field, Client::$subscriptions_fillable)) {
$data[$field] = $value;
}
if (in_array($field, ClientContact::$subscription_fillable)) {
$data['contacts'][0][$field] = $value;
}
}
if (array_key_exists('locale', $this->request_data)) { if (array_key_exists('locale', $this->request_data)) {
$request = $this->request_data; $request = $this->request_data;
@ -391,6 +402,10 @@ class BillingPortalPurchase extends Component
public function render() public function render()
{ {
if (array_key_exists('email', $this->request_data)) {
$this->email = $this->request_data['email'];
}
if ($this->contact instanceof ClientContact) { if ($this->contact instanceof ClientContact) {
$this->getPaymentMethods($this->contact); $this->getPaymentMethods($this->contact);
} }

View File

@ -99,6 +99,36 @@ class Client extends BaseModel implements HasLocalePreference
protected $touches = []; protected $touches = [];
/**
* Whitelisted fields for using from query parameters on subscriptions request.
*
* @var string[]
*/
public static $subscriptions_fillable = [
'assigned_user_id',
'address1',
'address2',
'city',
'state',
'postal_code',
'country_id',
'custom_value1',
'custom_value2',
'custom_value3',
'custom_value4',
'shipping_address1',
'shipping_address2',
'shipping_city',
'shipping_state',
'shipping_postal_code',
'shipping_country_id',
'payment_terms',
'vat_number',
'id_number',
'public_notes',
'phone',
];
public function getEntityType() public function getEntityType()
{ {
return self::class; return self::class;
@ -614,7 +644,7 @@ class Client extends BaseModel implements HasLocalePreference
public function recurring_invoice_filepath() public function recurring_invoice_filepath()
{ {
return $this->company->company_key.'/'.$this->client_hash.'/recurring_invoices/'; return $this->company->company_key.'/'.$this->client_hash.'/recurring_invoices/';
} }
public function company_filepath() public function company_filepath()

View File

@ -95,6 +95,21 @@ class ClientContact extends Authenticatable implements HasLocalePreference
'client_id', 'client_id',
]; ];
/**
* Whitelisted fields for using from query parameters on subscriptions request.
*
* @var string[]
*/
public static $subscription_fillable = [
'first_name',
'last_name',
'phone',
'custom_value1',
'custom_value2',
'custom_value3',
'custom_value4',
'email',
];
/* /*
V2 type of scope V2 type of scope

View File

@ -57,8 +57,7 @@
<div class="relative flex justify-center text-sm leading-5"> <div class="relative flex justify-center text-sm leading-5">
<h1 class="text-2xl font-bold tracking-wide bg-gray-50 px-6 py-0"> <h1 class="text-2xl font-bold tracking-wide bg-gray-50 px-6 py-0">
{{ ctrans('texts.total') }} {{ ctrans('texts.total') }}: {{ \App\Utils\Number::formatMoney($price, $subscription->company) }}
: {{ \App\Utils\Number::formatMoney($price, $subscription->company) }}
@if($steps['discount_applied']) @if($steps['discount_applied'])
<small class="ml-1 line-through text-gray-500">{{ \App\Utils\Number::formatMoney($subscription->price, $subscription->company) }}</small> <small class="ml-1 line-through text-gray-500">{{ \App\Utils\Number::formatMoney($subscription->price, $subscription->company) }}</small>