diff --git a/app/DataMapper/Billing/BillingContextMapper.php b/app/DataMapper/Billing/BillingContextMapper.php new file mode 100644 index 000000000000..3d878f38841e --- /dev/null +++ b/app/DataMapper/Billing/BillingContextMapper.php @@ -0,0 +1,47 @@ + 'integer', + 'email' => 'string', + 'client_id' => 'integer', + 'invoice_id' => 'integer', + ]; +} diff --git a/app/Http/Controllers/ClientPortal/BillingSubscriptionPurchaseController.php b/app/Http/Controllers/ClientPortal/BillingSubscriptionPurchaseController.php index 0ba39d8d7f91..b6a545e96b53 100644 --- a/app/Http/Controllers/ClientPortal/BillingSubscriptionPurchaseController.php +++ b/app/Http/Controllers/ClientPortal/BillingSubscriptionPurchaseController.php @@ -16,6 +16,7 @@ use App\Http\Controllers\Controller; use App\Models\BillingSubscription; use Illuminate\Http\Request; use Illuminate\Support\Facades\App; +use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; use Illuminate\Support\Str; @@ -41,7 +42,9 @@ class BillingSubscriptionPurchaseController extends Controller */ private function setLocale(string $locale): void { - $record = DB::table('languages')->where('locale', $locale)->first(); + $record = Cache::get('languages')->filter(function ($item) use ($locale) { + return $item->locale == $locale; + })->first(); if ($record) { App::setLocale($record->locale); diff --git a/app/Http/Livewire/BillingPortalPurchase.php b/app/Http/Livewire/BillingPortalPurchase.php index 249a970d2861..7632e28f9dd9 100644 --- a/app/Http/Livewire/BillingPortalPurchase.php +++ b/app/Http/Livewire/BillingPortalPurchase.php @@ -17,6 +17,7 @@ use App\Models\ClientContact; use App\Models\Invoice; use App\Repositories\ClientContactRepository; use App\Repositories\ClientRepository; +use Illuminate\Support\Facades\App; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\DB; @@ -138,6 +139,13 @@ class BillingPortalPurchase extends Component */ public $request_data; + /** + * Price of product. + * + * @var string + */ + public $price; + /** * Handle user authentication * @@ -192,7 +200,11 @@ class BillingPortalPurchase extends Component ]; if (array_key_exists('locale', $this->request_data)) { - $record = DB::table('languages')->where('locale', $this->request_data['locale'])->first(); + $request = $this->request_data; + + $record = Cache::get('languages')->filter(function ($item) use ($request) { + return $item->locale == $request['locale']; + })->first(); if ($record) { $data['settings']['language_id'] = (string)$record->id; @@ -262,7 +274,7 @@ class BillingPortalPurchase extends Component 'client_contact_id' => $this->contact->hashed_id, ]], 'user_input_promo_code' => $this->coupon, - 'coupon' => $this->coupon, + 'coupon' => empty($this->billing_subscription->promo_code) ? '' : $this->coupon, 'quantity' => $this->quantity, ]; @@ -280,7 +292,7 @@ class BillingPortalPurchase extends Component 'client_id' => $this->contact->client->id, 'invoice_id' => $this->invoice->id, 'quantity' => $this->quantity, - 'subscription_id' => $this->billing_subscription->id], + 'subscription_id' => $this->billing_subscription->id, now()->addMinutes(60) ); @@ -296,6 +308,8 @@ class BillingPortalPurchase extends Component { return $this->billing_subscription->service()->startTrial([ 'email' => $this->email ?? $this->contact->email, + 'quantity' => $this->quantity, + 'contact_id' => $this->contact->id, ]); } @@ -311,14 +325,19 @@ class BillingPortalPurchase extends Component return $this->quantity; } - // TODO: Dave review. - if ($this->quantity >= $this->billing_subscription->max_seats_limit) { + if ($this->quantity >= $this->billing_subscription->max_seats_limit && $option == 'increment') { return $this->quantity; } - return $option == 'increment' - ? $this->quantity++ - : $this->quantity--; + if ($option == 'increment') { + $this->quantity++; + return $this->price = (int)$this->price + $this->billing_subscription->product->price; + } + + $this->quantity--; + $this->price = (int)$this->price - $this->billing_subscription->product->price; + + return 0; } public function render() diff --git a/resources/views/billing-portal/purchase.blade.php b/resources/views/billing-portal/purchase.blade.php index 34ea32ccf0e8..b264ac635810 100644 --- a/resources/views/billing-portal/purchase.blade.php +++ b/resources/views/billing-portal/purchase.blade.php @@ -2,7 +2,7 @@ @section('meta_title', $billing_subscription->product->product_key) @section('body') - @livewire('billing-portal-purchase', ['billing_subscription' => $billing_subscription, 'contact' => auth('contact')->user(), 'hash' => $hash, 'request_data' => $request_data]) + @livewire('billing-portal-purchase', ['billing_subscription' => $billing_subscription, 'contact' => auth('contact')->user(), 'hash' => $hash, 'request_data' => $request_data, 'price' => $billing_subscription->product->price]) @stop @push('footer') diff --git a/resources/views/portal/ninja2020/components/livewire/billing-portal-purchase.blade.php b/resources/views/portal/ninja2020/components/livewire/billing-portal-purchase.blade.php index 5b2420d63997..9d82874eb76c 100644 --- a/resources/views/portal/ninja2020/components/livewire/billing-portal-purchase.blade.php +++ b/resources/views/portal/ninja2020/components/livewire/billing-portal-purchase.blade.php @@ -13,32 +13,35 @@ {{ ctrans('texts.price') }}:
-

{{ App\Utils\Number::formatMoney($billing_subscription->product->price, $billing_subscription->company) }}

+

{{ App\Utils\Number::formatMoney($price, $billing_subscription->company) }}

- @if($billing_subscription->per_seat_enabled) - /unit + @if($billing_subscription->is_recurring) + / {{ \App\Models\RecurringInvoice::frequencyForKey($billing_subscription->frequency_id) }} @endif
-
- {{ ctrans('texts.qty') }} - - - -
+ + @if($billing_subscription->per_seat_enabled && $billing_subscription->max_seats_limit > 1) +
+ {{ ctrans('texts.qty') }} + + + +
+ @endif @if(auth('contact')->user()) @@ -137,22 +140,24 @@ @endif -
-
-
+ @if(!empty($billing_subscription->promo_code) && !$billing_subscription->trial_enabled) +
+
+
+
+ +
+ Have a coupon code? +
-
- Have a coupon code? +
+
-
- -
- -
+ @endif