558 lines
19 KiB
PHP
558 lines
19 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use Illuminate\Http\Request;
|
|
use Hash;
|
|
use Auth;
|
|
use App\Models\Country;
|
|
use App\Models\State;
|
|
use App\Models\City;
|
|
use App\Models\DeliveryBoy;
|
|
use App\Models\DeliveryHistory;
|
|
use App\Models\DeliveryBoyPayment;
|
|
use App\Models\DeliveryBoyCollection;
|
|
use App\Models\Order;
|
|
use App\Models\User;
|
|
|
|
|
|
class DeliveryBoyController extends Controller
|
|
{
|
|
public function __construct() {
|
|
// Staff Permission Check
|
|
$this->middleware(['permission:view_all_delivery_boy'])->only('index');
|
|
$this->middleware(['permission:add_delivery_boy'])->only('create');
|
|
$this->middleware(['permission:edit_delivery_boy'])->only('edit');
|
|
$this->middleware(['permission:ban_delivery_boy'])->only('ban');
|
|
$this->middleware(['permission:collect_from_delivery_boy'])->only('order_collection_form');
|
|
$this->middleware(['permission:pay_to_delivery_boy'])->only('delivery_earning_form');
|
|
$this->middleware(['permission:delivery_boy_payment_history'])->only('delivery_boys_payment_histories');
|
|
$this->middleware(['permission:collected_histories_from_delivery_boy'])->only('delivery_boys_collection_histories');
|
|
$this->middleware(['permission:order_cancle_request_by_delivery_boy'])->only('cancel_request_list');
|
|
$this->middleware(['permission:delivery_boy_configuration'])->only('delivery_boy_configure');
|
|
}
|
|
|
|
/**
|
|
* Display a listing of the resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function index(Request $request)
|
|
{
|
|
$sort_search = null;
|
|
$delivery_boys = DeliveryBoy::orderBy('created_at', 'desc');
|
|
|
|
if ($request->has('search')){
|
|
$sort_search = $request->search;
|
|
$user_ids = User::where('user_type', 'delivery_boy')->where(function($user) use ($sort_search){
|
|
$user->where('name', 'like', '%'.$sort_search.'%')
|
|
->orWhere('email', 'like', '%'.$sort_search.'%');
|
|
})->pluck('id')->toArray();
|
|
$delivery_boys = $delivery_boys->where(function($delivery_boy) use ($user_ids){
|
|
$delivery_boy->whereIn('user_id', $user_ids);
|
|
});
|
|
}
|
|
|
|
$delivery_boys = $delivery_boys->paginate(15);
|
|
return view('backend.delivery_boys.index', compact('delivery_boys', 'sort_search'));
|
|
}
|
|
|
|
/**
|
|
* Show the form for creating a new resource.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function create()
|
|
{
|
|
$countries = Country::where('status', 1)->get();
|
|
return view('backend.delivery_boys.create', compact('countries'));
|
|
}
|
|
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function store(Request $request)
|
|
{
|
|
$validated = $request->validate([
|
|
'name' => 'required',
|
|
'email' => 'required|unique:users|max:255',
|
|
'phone' => 'required',
|
|
'country_id' => 'required',
|
|
'state_id' => 'required',
|
|
'city_id' => 'required',
|
|
]);
|
|
|
|
$country = Country::where('id', $request->country_id)->first();
|
|
$state = State::where('id', $request->state_id)->first();
|
|
$city = City::where('id', $request->city_id)->first();
|
|
|
|
$user = new User;
|
|
$user->user_type = 'delivery_boy';
|
|
$user->name = $request->name;
|
|
$user->email = $request->email;
|
|
$user->phone = $request->phone;
|
|
$user->country = $country->name;
|
|
$user->state = $state->name;
|
|
$user->city = $city->name;
|
|
$user->avatar_original = $request->avatar_original;
|
|
$user->address = $request->address;
|
|
$user->email_verified_at = date("Y-m-d H:i:s");
|
|
$user->password = Hash::make($request->password);
|
|
$user->save();
|
|
|
|
$delivery_boy = new DeliveryBoy;
|
|
|
|
$delivery_boy->user_id = $user->id;
|
|
$delivery_boy->save();
|
|
|
|
flash(translate('Delivery Boy has been created successfully'))->success();
|
|
return redirect()->route('delivery-boys.index');
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function show($id)
|
|
{
|
|
//
|
|
}
|
|
|
|
/**
|
|
* Show the form for editing the specified resource.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function edit($id)
|
|
{
|
|
$countries = Country::where('status', 1)->get();
|
|
$states = State::where('status', 1)->get();
|
|
$cities = City::where('status', 1)->get();
|
|
$delivery_boy = User::findOrFail($id);
|
|
|
|
return view('backend.delivery_boys.edit', compact('delivery_boy', 'countries', 'states', 'cities'));
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function update(Request $request, $id)
|
|
{
|
|
$delivery_boy = User::findOrFail($id);
|
|
|
|
$request->validate([
|
|
'name' => 'required',
|
|
'email' => 'required|unique:users,email,'.$delivery_boy->id,
|
|
'phone' => 'required',
|
|
'country_id' => 'required',
|
|
'state_id' => 'required',
|
|
'city_id' => 'required',
|
|
]);
|
|
|
|
$country = Country::where('id', $request->country_id)->first();
|
|
$state = State::where('id', $request->state_id)->first();
|
|
$city = City::where('id', $request->city_id)->first();
|
|
|
|
$delivery_boy->name = $request->name;
|
|
$delivery_boy->email = $request->email;
|
|
$delivery_boy->phone = $request->phone;
|
|
$delivery_boy->country = $country->name;
|
|
$delivery_boy->state = $state->name;
|
|
$delivery_boy->city = $city->name;
|
|
$delivery_boy->avatar_original = $request->avatar_original;
|
|
$delivery_boy->address = $request->address;
|
|
|
|
if(strlen($request->password) > 0){
|
|
$delivery_boy->password = Hash::make($request->password);
|
|
}
|
|
|
|
$delivery_boy->save();
|
|
|
|
flash(translate('Delivery Boy has been updated successfully'))->success();
|
|
return back();
|
|
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function destroy($id)
|
|
{
|
|
//
|
|
}
|
|
|
|
public function ban($id) {
|
|
$delivery_boy = User::findOrFail($id);
|
|
|
|
if($delivery_boy->banned == 1) {
|
|
$delivery_boy->banned = 0;
|
|
flash(translate('Delivery Boy UnBanned Successfully'))->success();
|
|
} else {
|
|
$delivery_boy->banned = 1;
|
|
flash(translate('Delivery Boy Banned Successfully'))->success();
|
|
}
|
|
|
|
$delivery_boy->save();
|
|
|
|
return back();
|
|
}
|
|
|
|
/**
|
|
* Collection form from Delivery boy.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function order_collection_form(Request $request) {
|
|
$delivery_boy_info = DeliveryBoy::with('user')
|
|
->where('user_id', $request->id)
|
|
->first();
|
|
|
|
return view('backend.delivery_boys.order_collection_form', compact('delivery_boy_info'));
|
|
}
|
|
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function collection_from_delivery_boy(Request $request) {
|
|
$delivery_boy = DeliveryBoy::where('user_id', $request->delivery_boy_id)->first();
|
|
|
|
if($request->payout_amount > $delivery_boy->total_collection){
|
|
flash(translate('Collection Amount Can Not Be Larger Than Collected Amount'))->error();
|
|
return redirect()->route('delivery-boys.index');
|
|
}
|
|
|
|
$delivery_boy->total_collection -= $request->payout_amount;
|
|
|
|
if($delivery_boy->save()){
|
|
$delivery_boy_collection = new DeliveryBoyCollection;
|
|
$delivery_boy_collection->user_id = $request->delivery_boy_id;
|
|
$delivery_boy_collection->collection_amount = $request->payout_amount;
|
|
|
|
$delivery_boy_collection->save();
|
|
|
|
flash(translate('Collection From Delivery Boy Successfully'))->success();
|
|
} else {
|
|
flash(translate('Something went wrong'))->error();
|
|
}
|
|
|
|
return redirect()->route('delivery-boys.index');
|
|
}
|
|
|
|
/**
|
|
* Paid form for Delivery boy.
|
|
*
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function delivery_earning_form(Request $request) {
|
|
$delivery_boy_info = DeliveryBoy::with('user')
|
|
->where('user_id', $request->id)
|
|
->first();
|
|
|
|
return view('backend.delivery_boys.delivery_earning_form', compact('delivery_boy_info'));
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function paid_to_delivery_boy(Request $request) {
|
|
$delivery_boy = DeliveryBoy::where('user_id', $request->delivery_boy_id)->first();
|
|
|
|
if($request->paid_amount > $delivery_boy->total_earning){
|
|
flash(translate('Paid Amount Can Not Be Larger Than Payable Amount'))->error();
|
|
return redirect()->route('delivery-boys.index');
|
|
}
|
|
|
|
$delivery_boy->total_earning -= $request->paid_amount;
|
|
|
|
if($delivery_boy->save()){
|
|
$delivery_boy_payment = new DeliveryBoyPayment;
|
|
$delivery_boy_payment->user_id = $request->delivery_boy_id;
|
|
$delivery_boy_payment->payment = $request->paid_amount;
|
|
|
|
$delivery_boy_payment->save();
|
|
|
|
flash(translate('Pay To Delivery Boy Successfully'))->success();
|
|
} else {
|
|
flash(translate('Something went wrong'))->error();
|
|
}
|
|
|
|
return redirect()->route('delivery-boys.index');
|
|
}
|
|
|
|
|
|
|
|
// Delivery Boy's Panel Start
|
|
public function delivery_boys_payment_histories() {
|
|
$delivery_boy_payment_query = DeliveryBoyPayment::query();
|
|
if(Auth::user()->user_type == 'delivery_boy') {
|
|
$delivery_boy_payment_query = $delivery_boy_payment_query->where('user_id', Auth::user()->id);
|
|
}
|
|
$delivery_boy_payment_query = $delivery_boy_payment_query->paginate(10);
|
|
|
|
$delivery_boy_payments = $delivery_boy_payment_query;
|
|
|
|
return view('backend.delivery_boys.delivery_boys_payment_list', compact('delivery_boy_payments'));
|
|
}
|
|
|
|
public function delivery_boys_collection_histories() {
|
|
$delivery_boy_collection_query = DeliveryBoyCollection::query();
|
|
if(Auth::user()->user_type == 'delivery_boy') {
|
|
$delivery_boy_collection_query = $delivery_boy_collection_query->where('user_id', Auth::user()->id);
|
|
}
|
|
$delivery_boy_collection_query = $delivery_boy_collection_query->paginate(10);
|
|
|
|
$delivery_boy_collections = $delivery_boy_collection_query;
|
|
|
|
return view('backend.delivery_boys.delivery_boys_collection_list', compact('delivery_boy_collections'));
|
|
}
|
|
|
|
public function delivery_boys_cancel_request_list() {
|
|
$order_query = Order::query();
|
|
if(Auth::user()->user_type == 'delivery_boy') {
|
|
$order_query = $order_query->where('assign_delivery_boy', Auth::user()->id);
|
|
}
|
|
$order_query = $order_query->where('delivery_status', '!=', 'cancelled')->where('cancel_request', 1);
|
|
$order_query = $order_query->paginate(10);
|
|
|
|
$cancel_requests = $order_query;
|
|
return view('delivery_boys.cancel_request_list', compact('cancel_requests'));
|
|
}
|
|
|
|
public function cancel_request_list() {
|
|
$order_query = Order::query();
|
|
if(Auth::user()->user_type == 'delivery_boy') {
|
|
$order_query = $order_query->where('assign_delivery_boy', Auth::user()->id);
|
|
}
|
|
$order_query = $order_query->where('delivery_status', '!=', 'cancelled')->where('cancel_request', 1);
|
|
$order_query = $order_query->paginate(10);
|
|
|
|
$cancel_requests = $order_query;
|
|
return view('backend.delivery_boys.cancel_request_list', compact('cancel_requests'));
|
|
}
|
|
|
|
/**
|
|
* Configuration of delivery boy.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function delivery_boy_configure()
|
|
{
|
|
return view('backend.delivery_boys.delivery_boy_configure');
|
|
}
|
|
|
|
public function order_detail($id)
|
|
{
|
|
$order = Order::findOrFail(decrypt($id));
|
|
return view('delivery_boys.order_detail', compact('order'));
|
|
}
|
|
|
|
/**
|
|
* Show the list of assigned delivery by the admin.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function assigned_delivery()
|
|
{
|
|
$order_query = Order::query();
|
|
$order_query->where('assign_delivery_boy', Auth::user()->id);
|
|
$order_query->where(function ($order_query) {
|
|
$order_query->where('delivery_status', 'pending')
|
|
->where('cancel_request', '0');
|
|
})->orWhere(function ($order_query) {
|
|
$order_query->where('delivery_status', 'confirmed')
|
|
->where('cancel_request', '0');
|
|
});
|
|
|
|
$assigned_deliveries = $order_query->paginate(10);
|
|
|
|
return view('delivery_boys.assigned_delivery', compact('assigned_deliveries'));
|
|
}
|
|
|
|
/**
|
|
* Show the list of pickup delivery by the delivery boy.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function pickup_delivery()
|
|
{
|
|
$pickup_deliveries = Order::where('assign_delivery_boy', Auth::user()->id)
|
|
->where('delivery_status', 'picked_up')
|
|
->where('cancel_request', '0')
|
|
->paginate(10);
|
|
|
|
return view('delivery_boys.pickup_delivery', compact('pickup_deliveries'));
|
|
}
|
|
|
|
/**
|
|
* Show the list of pickup delivery by the delivery boy.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function on_the_way_deliveries()
|
|
{
|
|
$on_the_way_deliveries = Order::where('assign_delivery_boy', Auth::user()->id)
|
|
->where('delivery_status', 'on_the_way')
|
|
->where('cancel_request', '0')
|
|
->paginate(10);
|
|
|
|
return view('delivery_boys.on_the_way_delivery', compact('on_the_way_deliveries'));
|
|
}
|
|
|
|
/**
|
|
* Show the list of completed delivery by the delivery boy.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function completed_delivery()
|
|
{
|
|
$completed_deliveries = DeliveryHistory::where('delivery_boy_id', Auth::user()->id)
|
|
->where('delivery_status', 'delivered')
|
|
->paginate(10);
|
|
|
|
return view('delivery_boys.completed_delivery', compact('completed_deliveries'));
|
|
}
|
|
|
|
/**
|
|
* Show the list of pending delivery by the delivery boy.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function pending_delivery()
|
|
{
|
|
$pending_deliveries = Order::where('assign_delivery_boy', Auth::user()->id)
|
|
->where('delivery_status', '!=', 'delivered')
|
|
->where('delivery_status', '!=', 'cancelled')
|
|
->where('cancel_request', '0')
|
|
->paginate(10);
|
|
|
|
return view('delivery_boys.pending_delivery', compact('pending_deliveries'));
|
|
}
|
|
|
|
/**
|
|
* Show the list of cancelled delivery by the delivery boy.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function cancelled_delivery()
|
|
{
|
|
$cancelled_deliveries = Order::where('assign_delivery_boy', Auth::user()->id)
|
|
->where('delivery_status', 'cancelled')
|
|
->paginate(10);
|
|
|
|
return view('delivery_boys.cancelled_delivery', compact('cancelled_deliveries'));
|
|
}
|
|
|
|
/**
|
|
* Show the list of total collection by the delivery boy.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function total_collection()
|
|
{
|
|
$today_collections = DeliveryHistory::where('delivery_boy_id', Auth::user()->id)
|
|
->where('delivery_status', 'delivered')
|
|
->where('payment_type', 'cash_on_delivery')
|
|
->paginate(10);
|
|
|
|
return view('delivery_boys.total_collection_list', compact('today_collections'));
|
|
}
|
|
|
|
/**
|
|
* Show the list of total earning by the delivery boy.
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function total_earning()
|
|
{
|
|
$total_earnings = DeliveryHistory::where('delivery_boy_id', Auth::user()->id)
|
|
->where('delivery_status', 'delivered')
|
|
->paginate(10);
|
|
|
|
return view('delivery_boys.total_earning_list', compact('total_earnings'));
|
|
}
|
|
|
|
public function cancel_request($order_id) {
|
|
$order = Order::findOrFail($order_id);
|
|
$order->cancel_request = '1';
|
|
$order->cancel_request_at = date("Y-m-d H:i:s");
|
|
$order->save();
|
|
|
|
return back();
|
|
}
|
|
|
|
/**
|
|
* For only delivery boy while changing delivery status.
|
|
* Call from order controller
|
|
*
|
|
* @param int $id
|
|
* @return \Illuminate\Http\Response
|
|
*/
|
|
public function store_delivery_history($order) {
|
|
$delivery_history = new DeliveryHistory;
|
|
|
|
$delivery_history->order_id = $order->id;
|
|
$delivery_history->delivery_boy_id = Auth::user()->id;
|
|
$delivery_history->delivery_status = $order->delivery_status;
|
|
$delivery_history->payment_type = $order->payment_type;
|
|
if($order->delivery_status == 'delivered') {
|
|
$delivery_boy = DeliveryBoy::where('user_id', Auth::user()->id)->first();
|
|
|
|
if(get_setting('delivery_boy_payment_type') == 'commission') {
|
|
$delivery_history->earning = get_setting('delivery_boy_commission');
|
|
$delivery_boy->total_earning += get_setting('delivery_boy_commission');
|
|
}
|
|
if($order->payment_type == 'cash_on_delivery') {
|
|
$delivery_history->collection = $order->grand_total;
|
|
$delivery_boy->total_collection += $order->grand_total;
|
|
|
|
$order->payment_status = 'paid';
|
|
if($order->commission_calculated == 0) {
|
|
calculateCommissionAffilationClubPoint($order);
|
|
$order->commission_calculated = 1;
|
|
}
|
|
|
|
}
|
|
|
|
$delivery_boy->save();
|
|
|
|
}
|
|
$order->delivery_history_date = date("Y-m-d H:i:s");
|
|
|
|
$order->save();
|
|
$delivery_history->save();
|
|
|
|
}
|
|
|
|
}
|