From 28cc7d5e52a8dd8fa17a74d3de67f798674af2a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Mon, 6 Apr 2020 23:23:05 +0200 Subject: [PATCH] Client portal improvements: (#3595) - Hide Create Payment Method if no gateways exist - Payment Screen, add $amount - Fix breadcrumbs --- .../ClientPortal/PaymentMethodController.php | 3 +- .../CreatePaymentMethodRequest.php | 30 ++++++++++++++++++ public/images/invoiceninja-white-logo.png | Bin 0 -> 6944 bytes resources/lang/en/texts.php | 1 + .../general/sidebar/desktop.blade.php | 2 +- .../general/sidebar/mobile.blade.php | 2 +- .../gateways/stripe/credit_card.blade.php | 2 +- .../ninja2020/invoices/payment.blade.php | 8 +++++ .../ninja2020/payment_methods/index.blade.php | 4 ++- routes/breadcrumbs.php | 8 ++++- 10 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 app/Http/Requests/ClientPortal/CreatePaymentMethodRequest.php create mode 100644 public/images/invoiceninja-white-logo.png diff --git a/app/Http/Controllers/ClientPortal/PaymentMethodController.php b/app/Http/Controllers/ClientPortal/PaymentMethodController.php index 3432732b98a6..8503afd95d86 100644 --- a/app/Http/Controllers/ClientPortal/PaymentMethodController.php +++ b/app/Http/Controllers/ClientPortal/PaymentMethodController.php @@ -13,6 +13,7 @@ namespace App\Http\Controllers\ClientPortal; use App\Events\Payment\Methods\MethodDeleted; use App\Http\Controllers\Controller; +use App\Http\Requests\ClientPortal\CreatePaymentMethodRequest; use App\Models\ClientGatewayToken; use App\Utils\Traits\MakesDates; use Illuminate\Http\Request; @@ -45,7 +46,7 @@ class PaymentMethodController extends Controller * * @return \Illuminate\Http\Response */ - public function create() + public function create(CreatePaymentMethodRequest $request) { $gateway = auth()->user()->client->getCreditCardGateway(); diff --git a/app/Http/Requests/ClientPortal/CreatePaymentMethodRequest.php b/app/Http/Requests/ClientPortal/CreatePaymentMethodRequest.php new file mode 100644 index 000000000000..8af355a95f79 --- /dev/null +++ b/app/Http/Requests/ClientPortal/CreatePaymentMethodRequest.php @@ -0,0 +1,30 @@ +user()->client->getCreditCardGateway() ? true : false; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + // + ]; + } +} diff --git a/public/images/invoiceninja-white-logo.png b/public/images/invoiceninja-white-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5add6d9ccb591e0293dbc74b49144980fd89ffdc GIT binary patch literal 6944 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 literal 0 HcmV?d00001 diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php index f3097930291e..e2762695157a 100644 --- a/resources/lang/en/texts.php +++ b/resources/lang/en/texts.php @@ -3194,4 +3194,5 @@ return [ 'open_in_new_tab' => 'Open in new tab', 'complete_your_payment' => 'Complete payment', + 'authorize_for_future_use' => 'Authorize payment method for future use', ]; diff --git a/resources/views/portal/ninja2020/components/general/sidebar/desktop.blade.php b/resources/views/portal/ninja2020/components/general/sidebar/desktop.blade.php index ef6183732bd4..3ed585d916e0 100644 --- a/resources/views/portal/ninja2020/components/general/sidebar/desktop.blade.php +++ b/resources/views/portal/ninja2020/components/general/sidebar/desktop.blade.php @@ -3,7 +3,7 @@ diff --git a/resources/views/portal/ninja2020/components/general/sidebar/mobile.blade.php b/resources/views/portal/ninja2020/components/general/sidebar/mobile.blade.php index fde52895ca43..0a03a200023a 100644 --- a/resources/views/portal/ninja2020/components/general/sidebar/mobile.blade.php +++ b/resources/views/portal/ninja2020/components/general/sidebar/mobile.blade.php @@ -15,7 +15,7 @@
{{ config('app.name') }}
+
+
+ {{ ctrans('texts.amount') }} +
+
+ {{ App\Utils\Number::formatMoney($invoice->amount, $invoice->client) }} +
+
diff --git a/resources/views/portal/ninja2020/payment_methods/index.blade.php b/resources/views/portal/ninja2020/payment_methods/index.blade.php index e91c932a2232..f3654984b5ae 100644 --- a/resources/views/portal/ninja2020/payment_methods/index.blade.php +++ b/resources/views/portal/ninja2020/payment_methods/index.blade.php @@ -21,7 +21,9 @@
- @lang('texts.add_payment_method') + @if(auth()->user()->client->getCreditCardGateway()) + @lang('texts.add_payment_method') + @endif
diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php index 8b22d20c290c..10435ff2799d 100644 --- a/routes/breadcrumbs.php +++ b/routes/breadcrumbs.php @@ -89,6 +89,12 @@ Breadcrumbs::for('credits.show', function ($trail, $credit) { $trail->push(sprintf('%s: %s', ctrans('texts.credits'), $credit->hashed_id), route('client.credits.index', $credit->hashed_id)); }); +// Invoices > Payment +Breadcrumbs::for('invoices.pay_now', function ($trail) { + $trail->parent('invoices'); + $trail->push(ctrans('texts.pay_now')); +}); + // Dashboard > Client Breadcrumbs::for('clients', function ($trail) { $trail->parent('dashboard'); @@ -107,4 +113,4 @@ Breadcrumbs::for('clients.edit', function ($trail, $client) { Breadcrumbs::for('clients.create', function ($trail) { $trail->parent('clients'); -}); +}); \ No newline at end of file