Skip to content

Commit

Permalink
Fixed Offline Payment method for Customer
Browse files Browse the repository at this point in the history
  • Loading branch information
cuneytsenturk committed Nov 18, 2017
1 parent 994998d commit 021b853
Show file tree
Hide file tree
Showing 14 changed files with 212 additions and 146 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,20 @@

namespace App\Events;

class PaymentGatewayConfirm
class InvoicePaid
{
public $gateway;

public $invoice;

public $request;

/**
* Create a new event instance.
*
* @param $gateway
* @param $invoice
*/
public function __construct($gateway, $invoice)
public function __construct($invoice, $request)
{
$this->gateway = $gateway;
$this->invoice = $invoice;
$this->request = $request;
}
}
87 changes: 0 additions & 87 deletions app/Http/Controllers/Customers/Invoices.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,23 +3,16 @@
namespace App\Http\Controllers\Customers;

use App\Http\Controllers\Controller;
use App\Http\Requests\Customer\InvoicePayment as PaymentRequest;
use App\Http\Requests\Customer\InvoiceConfirm as ConfirmRequest;
use App\Models\Banking\Account;
use App\Models\Income\Customer;
use App\Models\Income\Invoice;
use App\Models\Income\InvoicePayment;
use App\Models\Income\InvoiceHistory;
use App\Models\Income\InvoiceStatus;
use App\Models\Setting\Category;
use App\Models\Setting\Currency;
use App\Traits\Currencies;
use App\Traits\DateTime;
use App\Traits\Uploads;
use Auth;
use Date;

use App\Events\PaymentGatewayConfirm;

use App\Utilities\Modules;

Expand Down Expand Up @@ -168,84 +161,4 @@ public function pdfInvoice(Invoice $invoice)

return $pdf->download($file_name);
}

/**
* Show the form for viewing the specified resource.
*
* @param PaymentRequest $request
*
* @return Response
*/
public function payment(Invoice $invoice, PaymentRequest $request)
{
if (!$invoice) {
return response()->json([
'error' => trans('You can not pay this invoice. Because it is not yours')
]);
}

// Fire the event to extend the menu
$responses = event(new PaymentGatewayConfirm($request['payment_method'], $invoice));

$result = [
'name' => null,
'code' => null,
'description' => null,
'redirect' => false,
'html' => null,
];

foreach ($responses as $response) {
if ($response) {
$result = $response;
}
}

return response()->json($result);
}

public function confirm(Invoice $invoice, ConfirmRequest $request)
{
$request['invoice_id'] = $invoice->id;
$request['account_id'] = setting('general.default_account');

if (!isset($request['amount'])) {
$request['amount'] = $invoice->amount;
}

$request['currency_code'] = $invoice->currency_code;
$request['currency_rate'] = $invoice->currency_rate;

$request['paid_at'] = Date::parse('now')->format('Y-m-d');

if ($request['amount'] > $invoice->amount) {
$message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]);

return response()->json($message);
} elseif ($request['amount'] == $invoice->amount) {
$invoice->invoice_status_code = 'paid';
} else {
$invoice->invoice_status_code = 'partial';
}

$invoice->save();

InvoicePayment::create($request->input());

$request['status_code'] = $invoice->invoice_status_code;

$request['notify'] = 0;

$desc_date = Date::parse($request['paid_at'])->format($this->getCompanyDateFormat());

$desc_amount = money((float) $request['amount'], $request['currency_code'], true)->format();

$request['description'] = $desc_date . ' ' . $desc_amount;

InvoiceHistory::create($request->input());

return response()->json([
'success' => true,
]);
}
}
1 change: 0 additions & 1 deletion app/Http/Requests/Customer/InvoicePayment.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ public function authorize()
public function rules()
{
return [
'invoice_id' => 'required|integer',
'payment_method' => 'required|string',
];
}
Expand Down
67 changes: 67 additions & 0 deletions app/Listeners/Incomes/Invoice/Paid.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<?php

namespace App\Listeners\Incomes\Invoice;

use App\Events\InvoicePaid;

class Paid extends Listener
{

/**
* Handle the event.
*
* @param $event
* @return void
*/
public function handle(InvoicePaid $event)
{
$invoice = $event->invoice;
$request = $event->request;

$request['invoice_id'] = $invoice->id;
$request['account_id'] = setting('general.default_account');

if (!isset($request['amount'])) {
$request['amount'] = $invoice->amount;
}

$request['currency_code'] = $invoice->currency_code;
$request['currency_rate'] = $invoice->currency_rate;

$request['paid_at'] = Date::parse('now')->format('Y-m-d');

if ($request['amount'] > $invoice->amount) {
$message = trans('messages.error.added', ['type' => trans_choice('general.payment', 1)]);

return response()->json([
'success' => false,
'error' => $message,
]);
} elseif ($request['amount'] == $invoice->amount) {
$invoice->invoice_status_code = 'paid';
} else {
$invoice->invoice_status_code = 'partial';
}

$invoice->save();

InvoicePayment::create($request->input());

$request['status_code'] = $invoice->invoice_status_code;

$request['notify'] = 0;

$desc_date = Date::parse($request['paid_at'])->format($this->getCompanyDateFormat());

$desc_amount = money((float) $request['amount'], $request['currency_code'], true)->format();

$request['description'] = $desc_date . ' ' . $desc_amount;

InvoiceHistory::create($request->input());

return response()->json([
'success' => true,
'error' => false,
]);
}
}
3 changes: 3 additions & 0 deletions app/Providers/EventServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ class EventServiceProvider extends ServiceProvider
'Illuminate\Auth\Events\Logout' => [
'App\Listeners\Auth\Logout',
],
'App\Events\Events\InvoicePaid' => [
'App\Listeners\Incomes\Invoice\Paid',
],
];

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ public function up()
$offlinepayment[] = array(
'code' => 'offlinepayment.' . $code[1] . '.' . $code[2],
'name' => $offline_payment['name'],
'customer' => 0,
'order' => $offline_payment['order'],
'description' => $offline_payment['description']
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,15 @@ private function create()
$methods[] = array(
'code' => 'offlinepayment.cash.1',
'name' => 'Cash',
'customer' => '0',
'order' => '1',
'description' => null,
);

$methods[] = array(
'code' => 'offlinepayment.bank_transfer.2',
'name' => 'Bank Transfer',
'customer' => '0',
'order' => '2',
'description' => null,
);
Expand Down
45 changes: 0 additions & 45 deletions modules/OfflinePayment/Events/Handlers/OfflinePaymentConfirm.php

This file was deleted.

54 changes: 54 additions & 0 deletions modules/OfflinePayment/Http/Controllers/OfflinePayment.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
<?php

namespace Modules\OfflinePayment\Http\Controllers;

use App\Events\InvoicePaid;

use Illuminate\Http\Response;
use Illuminate\Routing\Controller;

use App\Http\Requests\Customer\InvoicePayment as PaymentRequest;
use App\Http\Requests\Customer\InvoiceConfirm as ConfirmRequest;

use App\Models\Income\Invoice;

class OfflinePayment extends Controller
{
/**
* Show the form for editing the specified resource.
* @param Invoice
* @param PaymentRequest
* @return Response
*/
public function show(Invoice $invoice, PaymentRequest $request)
{
$gateway = [];

$payment_methods = json_decode(setting('offlinepayment.methods'), true);

foreach ($payment_methods as $payment_method) {
if ($payment_method['code'] == $request['payment_method']) {
$gateway = $payment_method;

break;
}
}

$html = view('offlinepayment::show', compact('gateway', 'invoice'))->render();

return response()->json([
'code' => $gateway['code'],
'name' => $gateway['name'],
'description' => $gateway['description'],
'redirect' => false,
'html' => $html,
]);
}

public function confirm(Invoice $invoice, ConfirmRequest $request)
{
$result = event(new InvoicePaid($invoice, $request));

return response()->json($result);
}
}
30 changes: 30 additions & 0 deletions modules/OfflinePayment/Http/Requests/Show.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace Modules\OfflinePayment\Http\Requests;

use App\Http\Requests\Request;

class Show extends Request
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'payment_method' => 'required|string',
];
}
}
5 changes: 5 additions & 0 deletions modules/OfflinePayment/Http/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,8 @@
Route::post('settings/get', 'Settings@get');
Route::post('settings/delete', 'Settings@delete');
});

Route::group(['prefix' => 'customers', 'namespace' => 'Modules\OfflinePayment\Http\Controllers'], function () {
Route::get('invoices/{invoice}/offlinepayment', 'OfflinePayment@show');
Route::post('invoices/{invoice}/offlinepayment/confirm', 'OfflinePayment@confirm');
});

0 comments on commit 021b853

Please sign in to comment.