<?php
namespace App\Http\Controllers\Admin;
use Exception;
use App\Models\Transaction;
use Illuminate\Http\Request;
use App\Http\Helpers\Response;
use App\Models\UserNotification;
use App\Models\TransactionDevice;
use App\Models\Admin\BasicSettings;
use App\Http\Controllers\Controller;
use App\Constants\PaymentGatewayConst;
use App\Notifications\Admin\CardMethodConfirmLogEmailNotification;
use App\Notifications\Admin\CardMethodRejectLogEmailNotification;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Notification;
class PaymentLogsController extends Controller
{
/**
* Method for all card method logs
* @return view
*/
public function index(){
$page_title = "All Logs";
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->whereNot('status',PaymentGatewayConst::STATUSTEST)
->orderBy('id','desc')->paginate(10);
return view('admin.sections.payment-logs.index',compact(
'page_title',
'transactions'
));
}
/**
* Method for pending card method logs
* @return view
*/
public function pending(){
$page_title = "Pending Logs";
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSPENDING)
->orderBy('id','desc')->paginate(10);
return view('admin.sections.payment-logs.pending',compact(
'page_title',
'transactions'
));
}
/**
* Method for complete card method logs
* @return view
*/
public function complete(){
$page_title = "Confirm Logs";
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSSUCCESS)
->orderBy('id','desc')->paginate(10);
return view('admin.sections.payment-logs.complete',compact(
'page_title',
'transactions'
));
}
/**
* Method for rejected card method logs
* @return view
*/
public function rejected(){
$page_title = "Rejected Logs";
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSREJECTED)
->orderBy('id','desc')->paginate(10);
return view('admin.sections.payment-logs.rejected',compact(
'page_title',
'transactions'
));
}
/**
* Method for view test card method logs
* @return view
*/
public function test(){
$page_title = "Test Logs";
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSTEST)
->orderBy("id","desc")->paginate(10);
return view('admin.sections.payment-logs.test',compact(
'page_title',
'transactions'
));
}
/**
* Method for view card method log details page
* @return view
* @param $trx_id
*/
public function details($trx_id){
$page_title = "Payment Log Details";
$transaction = Transaction::with(['card_method','user_wallet'])->where('trx_id',$trx_id)->first();
$transaction_device = TransactionDevice::where('transaction_id',$transaction->id)->first();
if(!$transaction) return back()->with(['error' => ['Sorry! Data not found.']]);
return view('admin.sections.payment-logs.details',compact(
'page_title',
'transaction',
'transaction_device'
));
}
/**
* Method for update status
* @param $trx_id
* @param Illuminate\Http\Request $request
*/
public function statusConfirm(Request $request,$trx_id){
$basic_setting = BasicSettings::first();
$validator = Validator::make($request->all(),[
'status' => 'required|integer',
]);
if($validator->fails()) {
$errors = ['error' => $validator->errors() ];
return Response::error($errors);
}
$validated = $validator->validate();
$transaction = Transaction::with('card_payment_method')->where('trx_id',$trx_id)->first();
try{
$transaction->update([
'status' => $validated['status'],
]);
$form_data = [
'data' => $transaction,
'status' => "Confirm",
];
if($basic_setting->email_notification == true){
Notification::route("mail",$transaction->user->email)->notify(new CardMethodConfirmLogEmailNotification($form_data));
}
UserNotification::create([
'user_id' => $transaction->user->id,
'transaction_id' => $transaction->id,
'details' => [
'title' => 'Your Order',
'amount' => $transaction->request_amount,
'currency' => $transaction->request_currency,
'card_number' => $transaction->card_payment_method->card_number,
'message' => "Successfully placed."
],
]);
}catch(Exception $e){
return back()->with(['error' => ['Something went wrong! Please try again.']]);
}
return back()->with(['success' => ['Transaction Status updated successfully']]);
}
/**
* Method for reject transaction
* @param $trx_id
* @param \Illuminate\Http\Request $request
*/
public function statusRejected(Request $request,$trx_id){
$basic_setting = BasicSettings::first();
$validator = Validator::make($request->all(),[
'reject_reason' => 'required',
'status' => 'required|integer',
]);
if($validator->fails()) {
$errors = ['error' => $validator->errors() ];
return Response::error($errors);
}
$validated = $validator->validate();
$transaction = Transaction::with('card_payment_method')->where('trx_id',$trx_id)->first();
try{
$transaction->update([
'status' => $validated['status'],
'reject_reason' => $validated['reject_reason']
]);
$form_data = [
'data' => $transaction,
'status' => "Reject",
];
if($basic_setting->email_notification == true){
Notification::route("mail",$transaction->user->email)->notify(new CardMethodRejectLogEmailNotification($form_data));
}
UserNotification::create([
'user_id' => $transaction->user->id,
'transaction_id' => $transaction->id,
'details' => [
'title' => 'Your Order',
'amount' => $transaction->request_amount,
'currency' => $transaction->request_currency,
'card_number' => $transaction->card_payment_method->card_number,
'message' => "Successfully placed."
],
]);
}catch(Exception $e){
return back()->with(['error' => ['Something went wrong! Please try again.']]);
}
return back()->with(['success' => ['Transaction Rejected successfully']]);
}
/**
* Method for search all log
*/
public function search(Request $request) {
$validator = Validator::make($request->all(),[
'text' => 'required|string',
]);
if($validator->fails()) {
$error = ['error' => $validator->errors()];
return Response::error($error,null,400);
}
$validated = $validator->validate();
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->search($validated['text'])->get();
return view('admin.components.search.all-log-search',compact('transactions'));
}
/**
* Method for search pending log
*/
public function searchPending(Request $request) {
$validator = Validator::make($request->all(),[
'text' => 'required|string',
]);
if($validator->fails()) {
$error = ['error' => $validator->errors()];
return Response::error($error,null,400);
}
$validated = $validator->validate();
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSPENDING)
->search($validated['text'])
->get();
return view('admin.components.search.all-log-search',compact('transactions'));
}
/**
* Method for search confirm log
*/
public function searchComplete(Request $request) {
$validator = Validator::make($request->all(),[
'text' => 'required|string',
]);
if($validator->fails()) {
$error = ['error' => $validator->errors()];
return Response::error($error,null,400);
}
$validated = $validator->validate();
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSSUCCESS)
->search($validated['text'])
->get();
return view('admin.components.search.all-log-search',compact('transactions'));
}
/**
* Method for search confirm log
*/
public function searchReject(Request $request) {
$validator = Validator::make($request->all(),[
'text' => 'required|string',
]);
if($validator->fails()) {
$error = ['error' => $validator->errors()];
return Response::error($error,null,400);
}
$validated = $validator->validate();
$transactions = Transaction::where('type',PaymentGatewayConst::CARD_PAYMENT)
->where('status',PaymentGatewayConst::STATUSREJECTED)
->search($validated['text'])
->get();
return view('admin.components.search.all-log-search',compact('transactions'));
}
}
To ensure a smooth integration process and optimal performance, follow these best practices: