Files
wticreatorstudio/Modules/JobPortalPayout/Admin/PayoutController.php
T
2024-02-12 22:54:20 -05:00

167 lines
5.6 KiB
PHP

<?php
namespace Modules\JobPortalPayout\Admin;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Modules\JobPortal\Http\Controllers\JobPortalAdminController;
use Modules\JobPortal\Entities\Location;
use Modules\JobPortalPayout\Commands\CreatePayoutsCommand;
use Modules\JobPortal\Entities\VendorPayout;
use Modules\JobPortal\Entities\VendorPayoutAccount;
use Illuminate\Support\Facades\Artisan;
class PayoutController extends JobPortalAdminController
{
/**
* @var VendorPayout
*/
protected $vendorPayoutClass;
public function __construct()
{
$this->vendorPayoutClass = VendorPayout::class;
}
public function candidateIndex(Request $request)
{
if(!VendorPayout::isEnable()) {
return redirect('/');
}
$this->checkPermission('candidate_payout_manage');
//$this->setActiveMenu('payout');
$user = Auth::user();
$data = [
'page_title'=>__('Payouts'),
'payouts'=>$user->payouts()->orderBy('id','desc')->paginate(20),
'currentUser'=>Auth::user(),
"current_payout"=>$user->current_payout,
'payout_account'=>$user->payout_account
];
return view("jobportalpayout::admin.payouts.candidate-index",$data);
}
public function storePayoutAccount(Request $request){
if(!VendorPayout::isEnable()) {
return redirect('/');
}
$this->checkPermission('candidate_payout_manage');
$request->validate([
'payout_method'=>"required",
"account_info"=>'required|array'
]);
$user = Auth::user();
$payout_account = $user->payout_account;
if(!$payout_account){
$payout_account = new VendorPayoutAccount();
$payout_account->vendor_id = $user->id;
}
$account_info = $request->input('account_info');
$payout_method = $request->input('payout_method');
if(empty($account_info[$payout_method])){
return $this->sendError(__("Please enter payout account info"));
}
$data = [
'payout_method'=>$request->input('payout_method'),
'account_info'=>[$account_info[$payout_method]]
];
$payout_account->fillByAttr(array_keys($data),$data);
$payout_account->save();
return $this->sendSuccess([
"message"=>__("Your account information has been saved")
]);
}
public function index(Request $request)
{
if (!VendorPayout::isEnable()) {
return redirect('/');
}
$this->checkPermission('admin_payout_manage');
$payouts = $this->vendorPayoutClass::query()
->with([
'candidate'
])
->when(auth()->user()->role->type === 'superadmin', function ($query) use ($request) {
$query->when($request->filled('vendor_id'), fn ($query) => $query->where('vendor_id', $request->vendor_id))
->when($request->filled('s'), fn ($query) => $query->where('id', $request->s));
})
->when(auth()->user()->role->type !== 'superadmin', fn ($query) => $query->where('vendor_id', auth()->id()))
->orderBy('id', 'desc')
->paginate(20);
$data = [
'rows' => $payouts,
'page_title' => __("Payout Management"),
'all_statuses' => $this->vendorPayoutClass::getAllStatuses()
];
return view('jobportalpayout::admin.payouts.index', $data);
}
public function bulkEdit(Request $request)
{
$this->checkPermission('admin_payout_manage');
$ids = $request->input('ids');
$action = $request->input('action');
if (empty($ids) or !is_array($ids)) {
return $this->sendError(__('No items selected!'));
}
if (empty($action)) {
return $this->sendError(__('Please select an action!'));
}
$all_statuses = $this->vendorPayoutClass::getAllStatuses();
switch ($action){
case "delete":
foreach ($ids as $id) {
$query = $this->vendorPayoutClass::find($id);
if(!empty($query)){
//event(new PayoutRequestEvent('delete',$query));
$query->delete();
}
}
return $this->sendSuccess(__('Deleted success!'));
break;
default:
// Change status
if(!array_key_exists($action,$all_statuses)){
abort(404);
}
foreach ($ids as $id) {
$payout = $this->vendorPayoutClass::find($id);
if($payout){
$payout->status = $action;
if(\request()->input('pay_date'))
{
$payout->pay_date = $request->input('pay_date');
}
if(\request()->input('note_to_vendor'))
{
$payout->note_to_vendor = $request->input('note_to_vendor');
}
$payout->save();
if($action == 'rejected'){
//event(new PayoutRequestEvent('reject',$payout));
}else{
//event(new PayoutRequestEvent('update',$payout));
}
}
}
return $this->sendSuccess( __('Update success!'));
break;
}
}
}