2021-03-12 13:37:08 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace Webkul\Admin\Http\Controllers\Sales;
|
|
|
|
|
|
2021-06-19 02:32:00 +00:00
|
|
|
use Illuminate\Http\Request;
|
2021-03-12 13:37:08 +00:00
|
|
|
use Illuminate\Support\Facades\Event;
|
2021-06-19 02:32:00 +00:00
|
|
|
|
2021-03-12 13:37:08 +00:00
|
|
|
use Webkul\Admin\Http\Controllers\Controller;
|
2021-06-19 02:32:00 +00:00
|
|
|
use Webkul\Payment\Facades\Payment;
|
|
|
|
|
|
|
|
|
|
use Webkul\Sales\Repositories\OrderRepository;
|
2021-03-12 13:37:08 +00:00
|
|
|
use Webkul\Sales\Repositories\OrderTransactionRepository;
|
2021-06-19 02:32:00 +00:00
|
|
|
use Webkul\Sales\Repositories\InvoiceRepository;
|
2021-03-12 13:37:08 +00:00
|
|
|
|
|
|
|
|
class TransactionController extends Controller
|
|
|
|
|
{
|
|
|
|
|
/**
|
|
|
|
|
* Display a listing of the resource.
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\Http\Response
|
|
|
|
|
*/
|
|
|
|
|
protected $_config;
|
|
|
|
|
|
2021-06-19 02:32:00 +00:00
|
|
|
/**
|
|
|
|
|
* OrderRepository object
|
|
|
|
|
*
|
|
|
|
|
* @var \Webkul\Sales\Repositories\OrderRepository
|
|
|
|
|
*/
|
|
|
|
|
protected $orderRepository;
|
|
|
|
|
|
2021-03-12 13:37:08 +00:00
|
|
|
/**
|
|
|
|
|
* OrderRepository object
|
|
|
|
|
*
|
|
|
|
|
* @var \Webkul\Sales\Repositories\OrderTransactionRepository
|
|
|
|
|
*/
|
|
|
|
|
protected $orderTransactionRepository;
|
|
|
|
|
|
2021-06-19 02:32:00 +00:00
|
|
|
/**
|
|
|
|
|
* InvoiceRepository object
|
|
|
|
|
*
|
|
|
|
|
* @var \Webkul\Sales\Repositories\InvoiceRepository
|
|
|
|
|
*/
|
|
|
|
|
protected $invoiceRepository;
|
|
|
|
|
|
2021-03-12 13:37:08 +00:00
|
|
|
/**
|
|
|
|
|
* Create a new controller instance.
|
|
|
|
|
*
|
2021-06-19 02:32:00 +00:00
|
|
|
* @param \Webkul\Sales\Repositories\OrderRepository $orderRepository
|
2021-03-12 13:37:08 +00:00
|
|
|
* @param \Webkul\Sales\Repositories\OrderTransactionRepository $orderTransactionRepository
|
2021-06-19 02:32:00 +00:00
|
|
|
* @param \Webkul\Sales\Repositories\InvoiceRepository $invoiceRepository
|
2021-03-12 13:37:08 +00:00
|
|
|
* @return void
|
|
|
|
|
*/
|
2021-06-19 02:32:00 +00:00
|
|
|
public function __construct(
|
|
|
|
|
OrderRepository $orderRepository,
|
|
|
|
|
OrderTransactionRepository $orderTransactionRepository,
|
|
|
|
|
InvoiceRepository $invoiceRepository)
|
2021-03-12 13:37:08 +00:00
|
|
|
{
|
|
|
|
|
$this->middleware('admin');
|
|
|
|
|
|
|
|
|
|
$this->_config = request('_config');
|
|
|
|
|
|
2021-06-19 02:32:00 +00:00
|
|
|
$this->orderRepository = $orderRepository;
|
|
|
|
|
|
2021-03-12 13:37:08 +00:00
|
|
|
$this->orderTransactionRepository = $orderTransactionRepository;
|
2021-06-19 02:32:00 +00:00
|
|
|
|
|
|
|
|
$this->invoiceRepository = $invoiceRepository;
|
2021-03-12 13:37:08 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Display a listing of the resource.
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\View\View
|
|
|
|
|
*/
|
|
|
|
|
public function index()
|
|
|
|
|
{
|
|
|
|
|
return view($this->_config['view']);
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-19 02:32:00 +00:00
|
|
|
/**
|
|
|
|
|
* Display a form to save the tranaction.
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\View\View
|
|
|
|
|
*/
|
|
|
|
|
public function create()
|
|
|
|
|
{
|
|
|
|
|
$payment_methods = Payment::getSupportedPaymentMethods();
|
|
|
|
|
return view($this->_config['view'], compact('payment_methods'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Save the tranaction.
|
|
|
|
|
*
|
|
|
|
|
* @return \Illuminate\View\View
|
|
|
|
|
*/
|
|
|
|
|
public function store(Request $request)
|
|
|
|
|
{
|
|
|
|
|
$validate = $this->validate(request(), [
|
|
|
|
|
'invoice_id' => 'required',
|
|
|
|
|
'payment_method' => 'required',
|
|
|
|
|
'amount' => 'required|numeric'
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
|
$invoice = $this->invoiceRepository->find($request->invoice_id);
|
|
|
|
|
|
|
|
|
|
if ($invoice) {
|
|
|
|
|
|
|
|
|
|
if ($invoice->state == 'paid') {
|
|
|
|
|
session()->flash('info', trans('admin::app.sales.transactions.response.already-paid'));
|
|
|
|
|
return redirect(route('admin.sales.transactions.index'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$order = $this->orderRepository->find($invoice->id);
|
|
|
|
|
|
|
|
|
|
$data = [
|
|
|
|
|
"paidAmount" => $request->amount,
|
|
|
|
|
];
|
|
|
|
|
|
|
|
|
|
$randomId = random_bytes(20);
|
|
|
|
|
$transactionId = bin2hex($randomId);
|
|
|
|
|
|
|
|
|
|
$transactionData['transaction_id'] = $transactionId;
|
|
|
|
|
$transactionData['type'] = $request->payment_method;
|
|
|
|
|
$transactionData['payment_method'] = $request->payment_method;
|
|
|
|
|
$transactionData['invoice_id'] = $request->invoice_id;
|
|
|
|
|
$transactionData['order_id'] = $invoice->order_id;
|
|
|
|
|
$transactionData['status'] = 'paid';
|
|
|
|
|
$transactionData['data'] = json_encode($data);
|
|
|
|
|
|
|
|
|
|
$this->orderTransactionRepository->create($transactionData);
|
|
|
|
|
|
|
|
|
|
if ($invoice->base_grand_total == $request->amount) {
|
|
|
|
|
$this->orderRepository->updateOrderStatus($order, 'processing');
|
|
|
|
|
$update = $this->invoiceRepository->updateState($invoice, "paid");
|
|
|
|
|
} else {
|
|
|
|
|
$this->orderRepository->updateOrderStatus($order, 'pending');
|
|
|
|
|
$update = $this->invoiceRepository->updateState($invoice, "pending");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
session()->flash('success', trans('admin::app.sales.transactions.response.transaction-saved'));
|
|
|
|
|
return redirect(route('admin.sales.transactions.index'));
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
session()->flash('error', trans('admin::app.sales.transactions.response.invoice-missing'));
|
|
|
|
|
return redirect()->back();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-03-12 13:37:08 +00:00
|
|
|
/**
|
|
|
|
|
* Show the view for the specified resource.
|
|
|
|
|
*
|
|
|
|
|
* @param int $id
|
|
|
|
|
* @return \Illuminate\View\View
|
|
|
|
|
*/
|
|
|
|
|
public function view($id)
|
|
|
|
|
{
|
|
|
|
|
$transaction = $this->orderTransactionRepository->findOrFail($id);
|
|
|
|
|
|
|
|
|
|
$transData = json_decode(json_encode(json_decode($transaction['data'])), true);
|
|
|
|
|
|
|
|
|
|
$transactionDeatilsData = $this->convertIntoSingleDimArray($transData);
|
|
|
|
|
|
|
|
|
|
return view($this->_config['view'], compact('transaction', 'transactionDeatilsData'));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Convert Transaction Details Data into single Dim Array.
|
|
|
|
|
*
|
|
|
|
|
* @param array $data
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function convertIntoSingleDimArray($transData) {
|
|
|
|
|
static $detailsData = [];
|
|
|
|
|
|
|
|
|
|
foreach ($transData as $key => $data) {
|
|
|
|
|
if (is_array($data)) {
|
|
|
|
|
$this->convertIntoSingleDimArray($data);
|
|
|
|
|
} else {
|
|
|
|
|
$skipAttributes = ['sku', 'name', 'category', 'quantity'];
|
|
|
|
|
|
|
|
|
|
if (gettype($key) == 'integer' || in_array($key, $skipAttributes)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$detailsData[$key] = $data;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $detailsData;
|
|
|
|
|
}
|
|
|
|
|
}
|