sarga/packages/Webkul/Admin/src/Http/Controllers/Sales/TransactionController.php

191 lines
5.6 KiB
PHP
Raw Normal View History

<?php
namespace Webkul\Admin\Http\Controllers\Sales;
2021-06-19 02:32:00 +00:00
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Event;
2021-06-19 02:32:00 +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;
use Webkul\Sales\Repositories\OrderTransactionRepository;
2021-06-19 02:32:00 +00:00
use Webkul\Sales\Repositories\InvoiceRepository;
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;
/**
* 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;
/**
* Create a new controller instance.
*
2021-06-19 02:32:00 +00:00
* @param \Webkul\Sales\Repositories\OrderRepository $orderRepository
* @param \Webkul\Sales\Repositories\OrderTransactionRepository $orderTransactionRepository
2021-06-19 02:32:00 +00:00
* @param \Webkul\Sales\Repositories\InvoiceRepository $invoiceRepository
* @return void
*/
2021-06-19 02:32:00 +00:00
public function __construct(
OrderRepository $orderRepository,
OrderTransactionRepository $orderTransactionRepository,
InvoiceRepository $invoiceRepository)
{
$this->middleware('admin');
$this->_config = request('_config');
2021-06-19 02:32:00 +00:00
$this->orderRepository = $orderRepository;
$this->orderTransactionRepository = $orderTransactionRepository;
2021-06-19 02:32:00 +00:00
$this->invoiceRepository = $invoiceRepository;
}
/**
* 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'
]);
2021-07-21 13:53:22 +00:00
$invoice = $this->invoiceRepository->where('increment_id', $request->invoice_id)->first();
2021-06-19 02:32:00 +00:00
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;
2021-07-21 13:53:22 +00:00
$transactionData['invoice_id'] = $invoice->id;
2021-06-19 02:32:00 +00:00
$transactionData['order_id'] = $invoice->order_id;
2021-10-23 11:18:29 +00:00
$transactionData['amount'] = $request->amount;
2021-06-19 02:32:00 +00:00
$transactionData['status'] = 'paid';
$transactionData['data'] = json_encode($data);
$this->orderTransactionRepository->create($transactionData);
2021-10-23 11:18:29 +00:00
$transactionTotal = $this->orderTransactionRepository->where('invoice_id', $invoice->id)->sum('amount');
if ($transactionTotal >= $invoice->base_grand_total) {
2021-06-19 02:32:00 +00:00
$this->orderRepository->updateOrderStatus($order, 'processing');
$update = $this->invoiceRepository->updateState($invoice, "paid");
}
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();
}
}
/**
* 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;
}
2021-10-23 11:18:29 +00:00
}