1
0
mirror of https://github.com/invoiceninja/invoiceninja.git synced 2024-11-14 07:02:34 +01:00
invoiceninja/app/Http/Controllers/PaymentController.php

593 lines
22 KiB
PHP
Raw Normal View History

2015-03-17 02:30:56 +01:00
<?php namespace App\Http\Controllers;
2015-03-16 22:45:25 +01:00
2015-03-26 07:24:02 +01:00
use Datatable;
use Input;
use Redirect;
2015-04-15 18:35:41 +02:00
use Request;
2015-03-26 07:24:02 +01:00
use Session;
use Utils;
use View;
2015-04-02 15:06:16 +02:00
use Validator;
use Omnipay;
use CreditCard;
use URL;
2015-04-08 15:19:17 +02:00
use Cache;
2015-03-31 19:42:37 +02:00
use App\Models\Invoice;
2015-04-02 15:06:16 +02:00
use App\Models\Invitation;
2015-03-31 19:42:37 +02:00
use App\Models\Client;
use App\Models\PaymentType;
2015-04-14 20:58:07 +02:00
use App\Models\License;
2015-04-15 18:35:41 +02:00
use App\Models\Payment;
2015-05-08 10:21:29 +02:00
use App\Models\Affiliate;
2015-03-26 07:24:02 +01:00
use App\Ninja\Repositories\PaymentRepository;
use App\Ninja\Repositories\InvoiceRepository;
use App\Ninja\Repositories\AccountRepository;
use App\Ninja\Mailers\ContactMailer;
use App\Services\PaymentService;
2015-03-26 07:24:02 +01:00
2015-10-28 20:22:07 +01:00
use App\Http\Requests\CreatePaymentRequest;
use App\Http\Requests\UpdatePaymentRequest;
2015-03-26 07:24:02 +01:00
class PaymentController extends BaseController
2015-03-16 22:45:25 +01:00
{
public function __construct(PaymentRepository $paymentRepo, InvoiceRepository $invoiceRepo, AccountRepository $accountRepo, ContactMailer $contactMailer, PaymentService $paymentService)
2015-03-16 22:45:25 +01:00
{
parent::__construct();
$this->paymentRepo = $paymentRepo;
$this->invoiceRepo = $invoiceRepo;
$this->accountRepo = $accountRepo;
$this->contactMailer = $contactMailer;
$this->paymentService = $paymentService;
2015-03-16 22:45:25 +01:00
}
public function index()
{
return View::make('list', array(
'entityType' => ENTITY_PAYMENT,
'title' => trans('texts.payments'),
2015-11-24 12:59:30 +01:00
'columns' => Utils::trans([
'checkbox',
'invoice',
'client',
'transaction_reference',
'method',
'payment_amount',
'payment_date',
2015-11-30 12:29:43 +01:00
''
2015-11-24 12:59:30 +01:00
]),
2015-03-16 22:45:25 +01:00
));
}
public function getDatatable($clientPublicId = null)
{
2015-11-05 23:37:04 +01:00
return $this->paymentService->getDatatable($clientPublicId, Input::get('sSearch'));
2015-03-16 22:45:25 +01:00
}
public function create($clientPublicId = 0, $invoicePublicId = 0)
{
2015-04-22 21:21:04 +02:00
$invoices = Invoice::scope()
->where('is_recurring', '=', false)
->where('is_quote', '=', false)
->where('invoices.balance', '>', 0)
->with('client', 'invoice_status')
->orderBy('invoice_number')->get();
2015-03-16 22:45:25 +01:00
$data = array(
'clientPublicId' => Input::old('client') ? Input::old('client') : $clientPublicId,
'invoicePublicId' => Input::old('invoice') ? Input::old('invoice') : $invoicePublicId,
'invoice' => null,
2015-04-22 21:21:04 +02:00
'invoices' => $invoices,
2015-03-16 22:45:25 +01:00
'payment' => null,
'method' => 'POST',
'url' => "payments",
'title' => trans('texts.new_payment'),
2015-04-08 15:19:17 +02:00
'paymentTypes' => Cache::get('paymentTypes'),
2015-11-04 08:48:47 +01:00
'paymentTypeId' => Input::get('paymentTypeId'),
2015-03-16 22:45:25 +01:00
'clients' => Client::scope()->with('contacts')->orderBy('name')->get(), );
return View::make('payments.edit', $data);
}
public function edit($publicId)
{
$payment = Payment::scope($publicId)->firstOrFail();
$payment->payment_date = Utils::fromSqlDate($payment->payment_date);
$data = array(
'client' => null,
'invoice' => null,
'invoices' => Invoice::scope()->where('is_recurring', '=', false)->where('is_quote', '=', false)
->with('client', 'invoice_status')->orderBy('invoice_number')->get(),
'payment' => $payment,
'method' => 'PUT',
'url' => 'payments/'.$publicId,
'title' => trans('texts.edit_payment'),
2015-04-08 15:19:17 +02:00
'paymentTypes' => Cache::get('paymentTypes'),
2015-03-16 22:45:25 +01:00
'clients' => Client::scope()->with('contacts')->orderBy('name')->get(), );
return View::make('payments.edit', $data);
}
private function getLicensePaymentDetails($input, $affiliate)
{
$data = $this->paymentService->convertInputForOmnipay($input);
2015-03-16 22:45:25 +01:00
$card = new CreditCard($data);
return [
'amount' => $affiliate->price,
'card' => $card,
'currency' => 'USD',
'returnUrl' => URL::to('license_complete'),
'cancelUrl' => URL::to('/')
];
}
2015-04-15 18:35:41 +02:00
public function show_payment($invitationKey, $paymentType = false)
2015-06-10 10:34:20 +02:00
{
2015-04-15 18:35:41 +02:00
$invitation = Invitation::with('invoice.invoice_items', 'invoice.client.currency', 'invoice.client.account.account_gateways.gateway')->where('invitation_key', '=', $invitationKey)->firstOrFail();
$invoice = $invitation->invoice;
$client = $invoice->client;
$account = $client->account;
$useToken = false;
2015-03-16 22:45:25 +01:00
2015-06-10 22:55:23 +02:00
if ($paymentType) {
$paymentType = 'PAYMENT_TYPE_' . strtoupper($paymentType);
} else {
2015-06-10 10:34:20 +02:00
$paymentType = Session::get('payment_type', $account->account_gateways[0]->getPaymentType());
}
if ($paymentType == PAYMENT_TYPE_TOKEN) {
2015-04-15 18:35:41 +02:00
$useToken = true;
$paymentType = PAYMENT_TYPE_CREDIT_CARD;
2015-03-16 22:45:25 +01:00
}
2015-04-15 18:35:41 +02:00
Session::put('payment_type', $paymentType);
2015-03-16 22:45:25 +01:00
2015-09-20 23:05:02 +02:00
$accountGateway = $invoice->client->account->getGatewayByType($paymentType);
$gateway = $accountGateway->gateway;
$acceptedCreditCardTypes = $accountGateway->getCreditcardTypes();
2015-04-15 18:35:41 +02:00
// Handle offsite payments
if ($useToken || $paymentType != PAYMENT_TYPE_CREDIT_CARD
2015-11-02 10:47:47 +01:00
|| $gateway->id == GATEWAY_EWAY
|| $gateway->id == GATEWAY_TWO_CHECKOUT
2015-11-13 14:40:42 +01:00
|| $gateway->id == GATEWAY_PAYFAST
|| $gateway->id == GATEWAY_MOLLIE) {
2015-03-16 22:45:25 +01:00
if (Session::has('error')) {
Session::reflash();
return Redirect::to('view/'.$invitationKey);
} else {
2015-04-15 18:35:41 +02:00
return self::do_payment($invitationKey, false, $useToken);
2015-03-16 22:45:25 +01:00
}
2015-04-15 18:35:41 +02:00
}
2015-03-16 22:45:25 +01:00
$data = [
'showBreadcrumbs' => false,
'url' => 'payment/'.$invitationKey,
2015-04-16 21:57:12 +02:00
'amount' => $invoice->getRequestedAmount(),
2015-03-16 22:45:25 +01:00
'invoiceNumber' => $invoice->invoice_number,
'client' => $client,
'contact' => $invitation->contact,
'gateway' => $gateway,
2015-11-29 21:13:50 +01:00
'accountGateway' => $accountGateway,
2015-03-16 22:45:25 +01:00
'acceptedCreditCardTypes' => $acceptedCreditCardTypes,
2015-04-08 15:19:17 +02:00
'countries' => Cache::get('countries'),
2015-06-10 10:34:20 +02:00
'currencyId' => $client->getCurrencyId(),
'currencyCode' => $client->currency ? $client->currency->code : ($account->currency ? $account->currency->code : 'USD'),
2015-04-28 22:13:52 +02:00
'account' => $client->account,
'hideLogo' => $account->isWhiteLabel(),
'hideHeader' => $account->isNinjaAccount(),
2015-07-12 21:43:45 +02:00
'showAddress' => $accountGateway->show_address,
2015-03-16 22:45:25 +01:00
];
return View::make('payments.payment', $data);
}
public function show_license_payment()
{
if (Input::has('return_url')) {
Session::set('return_url', Input::get('return_url'));
}
if (Input::has('affiliate_key')) {
if ($affiliate = Affiliate::where('affiliate_key', '=', Input::get('affiliate_key'))->first()) {
Session::set('affiliate_id', $affiliate->id);
}
}
2015-09-02 12:59:03 +02:00
if (Input::has('product_id')) {
Session::set('product_id', Input::get('product_id'));
} else if (!Session::has('product_id')) {
Session::set('product_id', PRODUCT_ONE_CLICK_INSTALL);
}
2015-03-16 22:45:25 +01:00
if (!Session::get('affiliate_id')) {
return Utils::fatalError();
}
if (Utils::isNinjaDev() && Input::has('test_mode')) {
Session::set('test_mode', Input::get('test_mode'));
}
$account = $this->accountRepo->getNinjaAccount();
$account->load('account_gateways.gateway');
$accountGateway = $account->getGatewayByType(Session::get('payment_type'));
$gateway = $accountGateway->gateway;
$acceptedCreditCardTypes = $accountGateway->getCreditcardTypes();
$affiliate = Affiliate::find(Session::get('affiliate_id'));
$data = [
'showBreadcrumbs' => false,
'hideHeader' => true,
'url' => 'license',
'amount' => $affiliate->price,
'client' => false,
'contact' => false,
'gateway' => $gateway,
'acceptedCreditCardTypes' => $acceptedCreditCardTypes,
2015-04-08 15:19:17 +02:00
'countries' => Cache::get('countries'),
2015-03-16 22:45:25 +01:00
'currencyId' => 1,
'paymentTitle' => $affiliate->payment_title,
'paymentSubtitle' => $affiliate->payment_subtitle,
2015-08-03 10:52:47 +02:00
'showAddress' => true,
2015-03-16 22:45:25 +01:00
];
return View::make('payments.payment', $data);
}
public function do_license_payment()
{
$testMode = Session::get('test_mode') === 'true';
$rules = array(
'first_name' => 'required',
'last_name' => 'required',
'card_number' => 'required',
'expiration_month' => 'required',
'expiration_year' => 'required',
'cvv' => 'required',
'address1' => 'required',
'city' => 'required',
'state' => 'required',
'postal_code' => 'required',
2015-04-28 22:13:52 +02:00
'country_id' => 'required',
2015-03-16 22:45:25 +01:00
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
return Redirect::to('license')
2015-09-20 23:05:02 +02:00
->withErrors($validator)
->withInput();
2015-03-16 22:45:25 +01:00
}
$account = $this->accountRepo->getNinjaAccount();
$account->load('account_gateways.gateway');
$accountGateway = $account->getGatewayByType(PAYMENT_TYPE_CREDIT_CARD);
try {
$affiliate = Affiliate::find(Session::get('affiliate_id'));
if ($testMode) {
$ref = 'TEST_MODE';
} else {
$gateway = $this->paymentService->createGateway($accountGateway);
2015-03-16 22:45:25 +01:00
$details = self::getLicensePaymentDetails(Input::all(), $affiliate);
$response = $gateway->purchase($details)->send();
$ref = $response->getTransactionReference();
if (!$response->isSuccessful() || !$ref) {
$this->error('License', $response->getMessage(), $accountGateway);
2015-03-16 22:45:25 +01:00
return Redirect::to('license')->withInput();
}
}
$licenseKey = Utils::generateLicense();
$license = new License();
$license->first_name = Input::get('first_name');
$license->last_name = Input::get('last_name');
$license->email = Input::get('email');
$license->transaction_reference = $ref;
$license->license_key = $licenseKey;
$license->affiliate_id = Session::get('affiliate_id');
$license->product_id = Session::get('product_id');
$license->save();
$data = [
'message' => $affiliate->payment_subtitle,
'license' => $licenseKey,
'hideHeader' => true,
2015-10-02 10:32:13 +02:00
'productId' => $license->product_id,
'price' => $affiliate->price,
2015-03-16 22:45:25 +01:00
];
$name = "{$license->first_name} {$license->last_name}";
$this->contactMailer->sendLicensePaymentConfirmation($name, $license->email, $affiliate->price, $license->license_key, $license->product_id);
if (Session::has('return_url')) {
2015-07-07 22:08:16 +02:00
$data['redirectTo'] = Session::get('return_url')."?license_key={$license->license_key}&product_id=".Session::get('product_id');
$data['message'] = "Redirecting to " . Session::get('return_url');
2015-03-16 22:45:25 +01:00
}
2015-07-07 22:08:16 +02:00
return View::make('public.license', $data);
2015-03-16 22:45:25 +01:00
} catch (\Exception $e) {
$this->error('License-Uncaught', false, $accountGateway, $e);
2015-03-16 22:45:25 +01:00
return Redirect::to('license')->withInput();
}
}
public function claim_license()
{
$licenseKey = Input::get('license_key');
$productId = Input::get('product_id', PRODUCT_ONE_CLICK_INSTALL);
$license = License::where('license_key', '=', $licenseKey)
2015-06-03 19:55:48 +02:00
->where('is_claimed', '<', 5)
2015-03-16 22:45:25 +01:00
->where('product_id', '=', $productId)
->first();
if ($license) {
if ($license->transaction_reference != 'TEST_MODE') {
2015-04-14 20:58:07 +02:00
$license->is_claimed = $license->is_claimed + 1;
2015-03-16 22:45:25 +01:00
$license->save();
}
2015-05-19 21:14:00 +02:00
return $productId == PRODUCT_INVOICE_DESIGNS ? file_get_contents(storage_path() . '/invoice_designs.txt') : 'valid';
2015-03-16 22:45:25 +01:00
} else {
return 'invalid';
}
}
public function do_payment($invitationKey, $onSite = true, $useToken = false)
{
2015-07-12 21:43:45 +02:00
$invitation = Invitation::with('invoice.invoice_items', 'invoice.client.currency', 'invoice.client.account.currency', 'invoice.client.account.account_gateways.gateway')->where('invitation_key', '=', $invitationKey)->firstOrFail();
$invoice = $invitation->invoice;
$client = $invoice->client;
$account = $client->account;
$accountGateway = $account->getGatewayByType(Session::get('payment_type'));
$rules = [
2015-03-16 22:45:25 +01:00
'first_name' => 'required',
'last_name' => 'required',
2015-07-12 21:43:45 +02:00
];
2015-11-29 21:13:50 +01:00
if ( ! Input::get('stripeToken')) {
$rules = array_merge(
$rules,
[
'card_number' => 'required',
'expiration_month' => 'required',
'expiration_year' => 'required',
'cvv' => 'required',
]
);
}
2015-07-12 21:43:45 +02:00
if ($accountGateway->show_address) {
$rules = array_merge($rules, [
'address1' => 'required',
'city' => 'required',
'state' => 'required',
'postal_code' => 'required',
'country_id' => 'required',
]);
}
2015-03-16 22:45:25 +01:00
if ($onSite) {
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
return Redirect::to('payment/'.$invitationKey)
2015-06-10 10:34:20 +02:00
->withErrors($validator)
->withInput();
2015-03-16 22:45:25 +01:00
}
2015-08-03 09:15:58 +02:00
if ($accountGateway->update_address) {
$client->address1 = trim(Input::get('address1'));
$client->address2 = trim(Input::get('address2'));
$client->city = trim(Input::get('city'));
$client->state = trim(Input::get('state'));
$client->postal_code = trim(Input::get('postal_code'));
$client->country_id = Input::get('country_id');
$client->save();
}
2015-03-16 22:45:25 +01:00
}
2015-03-16 22:45:25 +01:00
try {
2015-09-20 23:05:02 +02:00
// For offsite payments send the client's details on file
// If we're using a token then we don't need to send any other data
if (!$onSite || $useToken) {
$data = false;
} else {
$data = Input::all();
}
$gateway = $this->paymentService->createGateway($accountGateway);
2015-10-21 06:30:23 +02:00
$details = $this->paymentService->getPaymentDetails($invitation, $accountGateway, $data);
// check if we're creating/using a billing token
2015-04-15 18:35:41 +02:00
if ($accountGateway->gateway_id == GATEWAY_STRIPE) {
2015-11-29 21:13:50 +01:00
if ($token = Input::get('stripeToken')) {
$details['token'] = $token;
unset($details['card']);
}
2015-04-15 18:35:41 +02:00
if ($useToken) {
2015-11-27 13:55:28 +01:00
$details['customerReference'] = $client->getGatewayToken();
2015-04-15 18:35:41 +02:00
} elseif ($account->token_billing_type_id == TOKEN_BILLING_ALWAYS || Input::get('token_billing')) {
$token = $this->paymentService->createToken($gateway, $details, $accountGateway, $client, $invitation->contact_id);
if ($token) {
2015-11-27 13:55:28 +01:00
$details['customerReference'] = $token;
2015-06-03 19:55:48 +02:00
} else {
$this->error('Token-No-Ref', $this->paymentService->lastError, $accountGateway);
2015-06-03 19:55:48 +02:00
return Redirect::to('payment/'.$invitationKey)->withInput();
2015-03-16 22:45:25 +01:00
}
}
2015-04-15 18:35:41 +02:00
}
2015-04-15 18:35:41 +02:00
$response = $gateway->purchase($details)->send();
2015-10-21 06:30:23 +02:00
2015-09-20 23:05:02 +02:00
if ($accountGateway->gateway_id == GATEWAY_EWAY) {
$ref = $response->getData()['AccessCode'];
} elseif ($accountGateway->gateway_id == GATEWAY_TWO_CHECKOUT) {
$ref = $response->getData()['cart_order_id'];
2015-11-02 10:47:47 +01:00
} elseif ($accountGateway->gateway_id == GATEWAY_PAYFAST) {
$ref = $response->getData()['m_payment_id'];
2015-09-20 23:05:02 +02:00
} else {
$ref = $response->getTransactionReference();
}
2015-04-15 18:35:41 +02:00
if (!$ref) {
$this->error('No-Ref', $response->getMessage(), $accountGateway);
2015-03-16 22:45:25 +01:00
2015-04-15 18:35:41 +02:00
if ($onSite) {
return Redirect::to('payment/'.$invitationKey)->withInput();
} else {
return Redirect::to('view/'.$invitationKey);
2015-03-16 22:45:25 +01:00
}
2015-04-15 18:35:41 +02:00
}
2015-03-16 22:45:25 +01:00
2015-06-07 10:05:30 +02:00
if ($response->isSuccessful()) {
$payment = $this->paymentService->createPayment($invitation, $ref);
2015-04-15 18:35:41 +02:00
Session::flash('message', trans('texts.applied_payment'));
2015-03-16 22:45:25 +01:00
2015-06-03 19:55:48 +02:00
if ($account->account_key == NINJA_ACCOUNT_KEY) {
Session::flash('trackEventCategory', '/account');
Session::flash('trackEventAction', '/buy_pro_plan');
}
2015-04-15 18:35:41 +02:00
return Redirect::to('view/'.$payment->invitation->invitation_key);
} elseif ($response->isRedirect()) {
$invitation->transaction_reference = $ref;
$invitation->save();
2015-04-17 13:57:17 +02:00
Session::put('transaction_reference', $ref);
2015-04-15 18:35:41 +02:00
Session::save();
$response->redirect();
} else {
$this->error('Fatal', $response->getMessage(), $accountGateway);
2015-04-15 18:35:41 +02:00
return Utils::fatalError('Sorry, there was an error processing your payment. Please try again later.<p>', $response->getMessage());
2015-03-16 22:45:25 +01:00
}
} catch (\Exception $e) {
$this->error('Uncaught', false, $accountGateway, $e);
2015-03-16 22:45:25 +01:00
if ($onSite) {
return Redirect::to('payment/'.$invitationKey)->withInput();
} else {
return Redirect::to('view/'.$invitationKey);
}
}
}
public function offsite_payment()
{
$payerId = Request::query('PayerID');
$token = Request::query('token');
2015-04-17 13:57:17 +02:00
if (!$token) {
$token = Session::pull('transaction_reference');
}
if (!$token) {
return redirect(NINJA_WEB_URL);
}
2015-03-16 22:45:25 +01:00
$invitation = Invitation::with('invoice.client.currency', 'invoice.client.account.account_gateways.gateway')->where('transaction_reference', '=', $token)->firstOrFail();
$invoice = $invitation->invoice;
2015-10-13 09:11:44 +02:00
$client = $invoice->client;
$account = $client->account;
2015-03-16 22:45:25 +01:00
2015-10-13 09:11:44 +02:00
$accountGateway = $account->getGatewayByType(Session::get('payment_type'));
$gateway = $this->paymentService->createGateway($accountGateway);
2015-03-16 22:45:25 +01:00
// Check for Dwolla payment error
if ($accountGateway->isGateway(GATEWAY_DWOLLA) && Input::get('error')) {
$this->error('Dwolla', Input::get('error_description'), $accountGateway);
2015-10-13 09:11:44 +02:00
return Redirect::to($invitation->getLink());
}
2015-11-02 23:05:28 +01:00
// PayFast transaction referencce
if ($accountGateway->isGateway(GATEWAY_PAYFAST) && Request::has('pt')) {
$token = Request::query('pt');
}
2015-03-16 22:45:25 +01:00
try {
2015-11-13 14:40:42 +01:00
if (method_exists($gateway, 'completePurchase')
&& !$accountGateway->isGateway(GATEWAY_TWO_CHECKOUT)
&& !$accountGateway->isGateway(GATEWAY_MOLLIE)) { // TODO: implement webhook
2015-10-21 06:30:23 +02:00
$details = $this->paymentService->getPaymentDetails($invitation, $accountGateway);
2015-04-17 13:57:17 +02:00
$response = $gateway->completePurchase($details)->send();
2015-11-02 19:43:22 +01:00
$ref = $response->getTransactionReference() ?: $token;
2015-03-16 22:45:25 +01:00
2015-04-17 13:57:17 +02:00
if ($response->isSuccessful()) {
$payment = $this->paymentService->createPayment($invitation, $ref, $payerId);
2015-04-17 13:57:17 +02:00
Session::flash('message', trans('texts.applied_payment'));
2015-03-16 22:45:25 +01:00
2015-10-13 09:11:44 +02:00
return Redirect::to($invitation->getLink());
2015-04-17 13:57:17 +02:00
} else {
$this->error('offsite', $response->getMessage(), $accountGateway);
2015-10-13 09:11:44 +02:00
return Redirect::to($invitation->getLink());
2015-04-17 13:57:17 +02:00
}
2015-03-16 22:45:25 +01:00
} else {
$payment = $this->paymentService->createPayment($invitation, $token, $payerId);
2015-04-17 13:57:17 +02:00
Session::flash('message', trans('texts.applied_payment'));
2015-03-16 22:45:25 +01:00
2015-10-13 09:11:44 +02:00
return Redirect::to($invitation->getLink());
2015-03-16 22:45:25 +01:00
}
} catch (\Exception $e) {
$this->error('Offsite-uncaught', false, $accountGateway, $e);
2015-10-13 09:11:44 +02:00
return Redirect::to($invitation->getLink());
2015-03-16 22:45:25 +01:00
}
}
2015-10-28 20:22:07 +01:00
public function store(CreatePaymentRequest $request)
2015-03-16 22:45:25 +01:00
{
2015-10-28 20:22:07 +01:00
$input = $request->input();
$payment = $this->paymentRepo->save($input);
2015-03-16 22:45:25 +01:00
2015-10-28 20:22:07 +01:00
if (Input::get('email_receipt')) {
$this->contactMailer->sendPaymentConfirmation($payment);
Session::flash('message', trans('texts.created_payment_emailed_client'));
} else {
Session::flash('message', trans('texts.created_payment'));
}
return redirect()->to($payment->client->getRoute());
2015-03-16 22:45:25 +01:00
}
2015-10-28 20:22:07 +01:00
public function update(UpdatePaymentRequest $request)
2015-03-16 22:45:25 +01:00
{
2015-10-28 20:22:07 +01:00
$input = $request->input();
$payment = $this->paymentRepo->save($input);
2015-03-16 22:45:25 +01:00
2015-10-28 20:22:07 +01:00
Session::flash('message', trans('texts.updated_payment'));
2015-03-16 22:45:25 +01:00
2015-10-28 20:22:07 +01:00
return redirect()->to($payment->getRoute());
2015-03-16 22:45:25 +01:00
}
public function bulk()
{
$action = Input::get('action');
2015-10-28 20:22:07 +01:00
$ids = Input::get('public_id') ? Input::get('public_id') : Input::get('ids');
$count = $this->paymentService->bulk($ids, $action);
2015-03-16 22:45:25 +01:00
if ($count > 0) {
$message = Utils::pluralize($action.'d_payment', $count);
Session::flash('message', $message);
}
return Redirect::to('payments');
}
private function error($type, $error, $accountGateway, $exception = false)
{
$message = '';
if ($accountGateway && $accountGateway->gateway) {
$message = $accountGateway->gateway->name . ': ';
}
2015-11-02 23:05:28 +01:00
$message .= $error ?: trans('texts.payment_error');
Session::flash('error', $message);
Utils::logError("Payment Error [{$type}]: " . ($exception ? Utils::getErrorString($exception) : $message));
}
2015-03-16 22:45:25 +01:00
}