diff --git a/app/Http/Controllers/OnlinePaymentController.php b/app/Http/Controllers/OnlinePaymentController.php
index 34c37fd42fc2..46a4d99a180d 100644
--- a/app/Http/Controllers/OnlinePaymentController.php
+++ b/app/Http/Controllers/OnlinePaymentController.php
@@ -75,7 +75,7 @@ class OnlinePaymentController extends BaseController
]);
}
- if (! $invitation->invoice->canBePaid()) {
+ if (! $invitation->invoice->canBePaid() && ! request()->update) {
return redirect()->to('view/' . $invitation->invitation_key);
}
@@ -120,14 +120,16 @@ class OnlinePaymentController extends BaseController
$gatewayTypeId = Session::get($invitation->id . 'gateway_type');
$paymentDriver = $invitation->account->paymentDriver($invitation, $gatewayTypeId);
- if (! $invitation->invoice->canBePaid()) {
+ if (! $invitation->invoice->canBePaid() && ! request()->update) {
return redirect()->to('view/' . $invitation->invitation_key);
}
try {
$paymentDriver->completeOnsitePurchase($request->all());
- if ($paymentDriver->isTwoStep()) {
+ if (request()->update) {
+ return redirect('/client/dashboard')->withMessage(trans('texts.updated_payment_details'));
+ } elseif ($paymentDriver->isTwoStep()) {
Session::flash('warning', trans('texts.bank_account_verification_next_steps'));
} else {
Session::flash('message', trans('texts.applied_payment'));
diff --git a/app/Models/Client.php b/app/Models/Client.php
index d09984343f00..8ee0915933b1 100644
--- a/app/Models/Client.php
+++ b/app/Models/Client.php
@@ -559,6 +559,15 @@ class Client extends EntityModel
{
return $this->payment_terms == -1 ? 0 : $this->payment_terms;
}
+
+ public function firstInvitationKey()
+ {
+ if ($invoice = $this->invoices->first()) {
+ if ($invitation = $invoice->invitations->first()) {
+ return $invitation->invitation_key;
+ }
+ }
+ }
}
Client::creating(function ($client) {
diff --git a/app/Ninja/PaymentDrivers/BasePaymentDriver.php b/app/Ninja/PaymentDrivers/BasePaymentDriver.php
index 8791a2e4921d..6822278b67cc 100644
--- a/app/Ninja/PaymentDrivers/BasePaymentDriver.php
+++ b/app/Ninja/PaymentDrivers/BasePaymentDriver.php
@@ -157,6 +157,11 @@ class BasePaymentDriver
return redirect()->to('view/' . $this->invitation->invitation_key);
}
+ $url = 'payment/' . $this->invitation->invitation_key;
+ if (request()->update) {
+ $url .= '?update=true';
+ }
+
$data = [
'details' => ! empty($input['details']) ? json_decode($input['details']) : false,
'accountGateway' => $this->accountGateway,
@@ -164,7 +169,7 @@ class BasePaymentDriver
'gateway' => $gateway,
'showAddress' => $this->accountGateway->show_address,
'showBreadcrumbs' => false,
- 'url' => 'payment/' . $this->invitation->invitation_key,
+ 'url' => $url,
'amount' => $this->invoice()->getRequestedAmount(),
'invoiceNumber' => $this->invoice()->invoice_number,
'client' => $this->client(),
@@ -293,7 +298,7 @@ class BasePaymentDriver
}
}
- if ($this->isTwoStep()) {
+ if ($this->isTwoStep() || request()->update) {
return;
}
diff --git a/resources/lang/en/texts.php b/resources/lang/en/texts.php
index 74422734421f..4bf768490d7a 100644
--- a/resources/lang/en/texts.php
+++ b/resources/lang/en/texts.php
@@ -2269,6 +2269,9 @@ $LANG = array(
'select_label' => 'Select Label',
'label' => 'Label',
'service' => 'Service',
+ 'update_payment_details' => 'Update payment details',
+ 'updated_payment_details' => 'Successfully updated payment details',
+ 'update_credit_card' => 'Update Credit Card',
);
diff --git a/resources/views/payments/braintree/paypal.blade.php b/resources/views/payments/braintree/paypal.blade.php
index 89813d203a96..0fdf0b79bbc2 100644
--- a/resources/views/payments/braintree/paypal.blade.php
+++ b/resources/views/payments/braintree/paypal.blade.php
@@ -29,7 +29,7 @@
@if(isset($amount))
- {!! Button::success(strtoupper(trans('texts.pay_now') . ' - ' . $account->formatMoney($amount, $client, CURRENCY_DECORATOR_CODE) ))
+ {!! Button::success(request()->update ? strtoupper(trans('texts.submit')) : strtoupper(trans('texts.pay_now') . ' - ' . $account->formatMoney($amount, $client, CURRENCY_DECORATOR_CODE) ))
->submit()
->large() !!}
@else
diff --git a/resources/views/payments/credit_card.blade.php b/resources/views/payments/credit_card.blade.php
index f96d5318df69..46c1843295d8 100644
--- a/resources/views/payments/credit_card.blade.php
+++ b/resources/views/payments/credit_card.blade.php
@@ -316,11 +316,12 @@
@if (isset($invitation))
- {!! Button::normal(strtoupper(trans('texts.cancel')))->large()->asLinkTo($invitation->getLink()) !!}
+ {!! Button::normal(strtoupper(trans('texts.cancel')))->large()->asLinkTo(HTMLUtils::previousUrl('/credits')) !!}
@endif
- @if(isset($amount))
- {!! Button::success(strtoupper(trans('texts.pay_now') . ' - ' . $account->formatMoney($amount, $client, CURRENCY_DECORATOR_CODE) ))
+
+ @if (isset($amount))
+ {!! Button::success(request()->update ? strtoupper(trans('texts.submit')) : strtoupper(trans('texts.pay_now') . ' - ' . $account->formatMoney($amount, $client, CURRENCY_DECORATOR_CODE) ))
->submit()
->large() !!}
@else
diff --git a/resources/views/payments/payment_method.blade.php b/resources/views/payments/payment_method.blade.php
index 10b7268d7ecf..a05f983638fd 100644
--- a/resources/views/payments/payment_method.blade.php
+++ b/resources/views/payments/payment_method.blade.php
@@ -15,7 +15,11 @@
@if ($client && isset($invoiceNumber))
{{ $client->getDisplayName() }}
- {{ trans('texts.invoice') . ' ' . $invoiceNumber }}| {{ trans('texts.amount_due') }}: {{ $account->formatMoney($amount, $client, CURRENCY_DECORATOR_CODE) }}
+ @if (request()->update)
+ {{ trans('texts.update_payment_details') }}
+ @else
+ {{ trans('texts.invoice') . ' ' . $invoiceNumber }}| {{ trans('texts.amount_due') }}: {{ $account->formatMoney($amount, $client, CURRENCY_DECORATOR_CODE) }}
+ @endif
@elseif ($paymentTitle)
{{ $paymentTitle }}
@if(isset($paymentSubtitle))
diff --git a/resources/views/payments/paymentmethods_list.blade.php b/resources/views/payments/paymentmethods_list.blade.php
index 9058bca53edf..bd540c46af8b 100644
--- a/resources/views/payments/paymentmethods_list.blade.php
+++ b/resources/views/payments/paymentmethods_list.blade.php
@@ -77,54 +77,63 @@
@endif
-@if(!empty($paymentMethods) && count($paymentMethods))
- {{ trans('texts.payment_methods') }}
-
- @foreach ($paymentMethods as $paymentMethod)
-
-
-
payment_type->name))) }}">
-
-
- @if($paymentMethod->payment_type_id == PAYMENT_TYPE_ACH)
- @if($paymentMethod->bank_name)
- {{ $paymentMethod->bank_name }}
- @else
- {{ trans('texts.bank_account') }}
- @endif
- @elseif($paymentMethod->payment_type_id == PAYMENT_TYPE_PAYPAL)
- {{ trans('texts.paypal') . ': ' . $paymentMethod->email }}
- @else
- {{ trans('texts.credit_card') }}
+@if ($invitationKey = $client->firstInvitationKey())
+
+ {{ trans('texts.payment_methods') }}
+ @if ($account->getGatewayByType(GATEWAY_TYPE_CREDIT_CARD)
+ && $account->getGatewayByType(GATEWAY_TYPE_TOKEN)
+ && $account->token_billing_type_id != TOKEN_BILLING_DISABLED)
+
+ {!! Button::success(strtoupper(trans('texts.update_credit_card')))->asLinkTo(URL::to("/payment/$invitationKey/credit_card?update=true")) !!}
@endif
+
- - {{ trans('texts.added_on', ['date' => Utils::dateToString($paymentMethod->created_at)]) }}
+ @if(!empty($paymentMethods) && count($paymentMethods))
+ @foreach ($paymentMethods as $paymentMethod)
+
+
+
payment_type->name))) }}">
+
- @if($paymentMethod->payment_type_id == PAYMENT_TYPE_ACH)
- @if($paymentMethod->status == PAYMENT_METHOD_STATUS_NEW)
- @if($gateway->gateway_id == GATEWAY_STRIPE)
-
({{trans('texts.complete_verification')}})
+ @if($paymentMethod->payment_type_id == PAYMENT_TYPE_ACH)
+ @if($paymentMethod->bank_name)
+ {{ $paymentMethod->bank_name }}
@else
- [{{ trans('texts.verification_pending') }}]
+ {{ trans('texts.bank_account') }}
@endif
- @elseif($paymentMethod->status == PAYMENT_METHOD_STATUS_VERIFICATION_FAILED)
- [{{trans('texts.verification_failed')}}]
+ @elseif($paymentMethod->payment_type_id == PAYMENT_TYPE_PAYPAL)
+ {{ trans('texts.paypal') . ': ' . $paymentMethod->email }}
+ @else
+ {{ trans('texts.credit_card') }}
@endif
- @endif
- |
- @if($paymentMethod->id == $paymentMethod->account_gateway_token->default_payment_method_id)
- {{trans('texts.used_for_auto_bill')}}
- @elseif($paymentMethod->payment_type_id != PAYMENT_TYPE_ACH || $paymentMethod->status == PAYMENT_METHOD_STATUS_VERIFIED)
-
{{trans('texts.use_for_auto_bill')}}
- @endif
- |
{{ trans('texts.remove') }}
-
- @endforeach
+ - {{ trans('texts.added_on', ['date' => Utils::dateToString($paymentMethod->created_at)]) }}
+
+ @if($paymentMethod->payment_type_id == PAYMENT_TYPE_ACH)
+ @if($paymentMethod->status == PAYMENT_METHOD_STATUS_NEW)
+ @if($gateway->gateway_id == GATEWAY_STRIPE)
+
({{trans('texts.complete_verification')}})
+ @else
+ [{{ trans('texts.verification_pending') }}]
+ @endif
+ @elseif($paymentMethod->status == PAYMENT_METHOD_STATUS_VERIFICATION_FAILED)
+ [{{trans('texts.verification_failed')}}]
+ @endif
+ @endif
+ |
+ @if($paymentMethod->id == $paymentMethod->account_gateway_token->default_payment_method_id)
+ {{trans('texts.used_for_auto_bill')}}
+ @elseif($paymentMethod->payment_type_id != PAYMENT_TYPE_ACH || $paymentMethod->status == PAYMENT_METHOD_STATUS_VERIFIED)
+
{{trans('texts.use_for_auto_bill')}}
+ @endif
+ |
{{ trans('texts.remove') }}
+
+
+ @endforeach
+ @endif
@endif
-
@if (false && $account->getGatewayByType(GATEWAY_TYPE_CREDIT_CARD) && $account->getGatewayByType(GATEWAY_TYPE_TOKEN))
{!! Button::success(strtoupper(trans('texts.add_credit_card')))
diff --git a/resources/views/payments/stripe/bank_transfer.blade.php b/resources/views/payments/stripe/bank_transfer.blade.php
index 11df6c30f75b..35690db9bb6e 100644
--- a/resources/views/payments/stripe/bank_transfer.blade.php
+++ b/resources/views/payments/stripe/bank_transfer.blade.php
@@ -240,7 +240,7 @@
->large() !!}
@if ($accountGateway->getPlaidEnabled() && !empty($amount))
- {!! Button::success(strtoupper(trans('texts.pay_now') . ' - ' . $account->formatMoney($amount, $client, CURRENCY_DECORATOR_CODE) ))
+ {!! Button::success(request()->update ? strtoupper(trans('texts.submit')) : strtoupper(trans('texts.pay_now') . ' - ' . $account->formatMoney($amount, $client, CURRENCY_DECORATOR_CODE) ))
->submit()
->withAttributes(['style'=>'display:none', 'id'=>'pay_now_button'])
->large() !!}
diff --git a/resources/views/payments/wepay/bank_transfer.blade.php b/resources/views/payments/wepay/bank_transfer.blade.php
index 6644505d4672..35583082a21e 100644
--- a/resources/views/payments/wepay/bank_transfer.blade.php
+++ b/resources/views/payments/wepay/bank_transfer.blade.php
@@ -33,7 +33,7 @@
{!! Button::normal(strtoupper(trans('texts.cancel')))->large()->asLinkTo($invitation->getLink()) !!}
@if(isset($amount) && empty($paymentMethodPending))
- {!! Button::success(strtoupper(trans('texts.pay_now') . ' - ' . $account->formatMoney($amount, $client, CURRENCY_DECORATOR_CODE) ))
+ {!! Button::success(request()->update ? strtoupper(trans('texts.submit')) : strtoupper(trans('texts.pay_now') . ' - ' . $account->formatMoney($amount, $client, CURRENCY_DECORATOR_CODE) ))
->submit()
->large() !!}
@else