File: //proc/thread-self/cwd/repair/app/Http/Controllers/Seller/DashboardController.php
<?php
namespace App\Http\Controllers\Seller;
use App\Http\Controllers\Controller;
use App\Model\Brand;
use App\Model\Order;
use App\Model\OrderDetail;
use App\Model\OrderTransaction;
use App\Model\Product;
use App\Model\SellerWallet;
use App\Model\Shop;
use App\Model\WithdrawalMethod;
use App\User;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Session;
class DashboardController extends Controller
{
public function dashboard()
{
$top_sell = OrderDetail::with(['product'])
->whereHas('product', function ($query){
$query->where(['added_by'=>'seller']);
})
->where(['seller_id'=>auth('seller')->id()])
->select('product_id', DB::raw('SUM(qty) as count'))
->groupBy('product_id')
->orderBy("count", 'desc')
->take(6)
->get();
$most_rated_products = Product::where(['user_id'=>auth('seller')->id(), 'added_by'=>'seller'])
->rightJoin('reviews', 'reviews.product_id', '=', 'products.id')
->groupBy('product_id')
->select(['product_id',
DB::raw('AVG(reviews.rating) as ratings_average'),
DB::raw('count(*) as total')
])
->orderBy('total', 'desc')
->take(6)
->get();
$top_deliveryman = Order::with(['delivery_man'])
->select('delivery_man_id', DB::raw('COUNT(delivery_man_id) as count'))
->whereHas('delivery_man', function($query){
$query->where(['seller_id'=>auth('seller')->id()]);
})
->where(['order_status'=>'delivered'])
->whereNotNull('delivery_man_id')
->groupBy('delivery_man_id')
->orderBy("count", 'desc')
->take(6)
->get();
$from = Carbon::now()->startOfYear()->format('Y-m-d');
$to = Carbon::now()->endOfYear()->format('Y-m-d');
$seller_data = [];
$seller_earnings = OrderTransaction::where([
'seller_is'=>'seller',
'seller_id'=>auth('seller')->id(),
'status'=>'disburse'
])->select(
DB::raw('IFNULL(sum(seller_amount),0) as sums'),
DB::raw('YEAR(created_at) year, MONTH(created_at) month')
)->whereBetween('created_at', [$from, $to])->groupby('year', 'month')->get()->toArray();
for ($inc = 1; $inc <= 12; $inc++) {
$seller_data[$inc] = 0;
foreach ($seller_earnings as $match) {
if ($match['month'] == $inc) {
$seller_data[$inc] = $match['sums'];
}
}
}
$commission_data = [];
$commission_given =OrderTransaction::where([
'seller_is'=>'seller',
'seller_id'=>auth('seller')->id(),
'status'=>'disburse'
])->select(
DB::raw('IFNULL(sum(admin_commission),0) as sums'),
DB::raw('YEAR(created_at) year, MONTH(created_at) month')
)->whereBetween('created_at', [$from, $to])->groupby('year', 'month')->get()->toArray();
for ($inc = 1; $inc <= 12; $inc++) {
$commission_data[$inc] = 0;
foreach ($commission_given as $match) {
if ($match['month'] == $inc) {
$commission_data[$inc] = $match['sums'];
}
}
}
$data = self::order_stats_data();
$data['customer'] = User::count();
$data['store'] = Shop::count();
$data['product'] = Product::count();
$data['order'] = Order::count();
$data['brand'] = Brand::count();
$data['top_sell'] = $top_sell;
$data['most_rated_products'] = $most_rated_products;
$data['top_deliveryman'] = $top_deliveryman;
$admin_wallet = SellerWallet::where('seller_id', auth('seller')->id())->first();
$data['total_earning'] = $admin_wallet->total_earning ?? 0;
$data['withdrawn'] = $admin_wallet->withdrawn ?? 0;
$data['commission_given'] = $admin_wallet->commission_given ?? 0;
$data['pending_withdraw'] = $admin_wallet->pending_withdraw ?? 0;
$data['delivery_charge_earned'] = $admin_wallet->delivery_charge_earned ?? 0;
$data['collected_cash'] = $admin_wallet->collected_cash ?? 0;
$data['total_tax_collected'] = $admin_wallet->total_tax_collected ?? 0;
$withdrawal_methods = WithdrawalMethod::ofStatus(1)->get();
return view('seller-views.system.dashboard', compact('data', 'seller_data', 'commission_data', 'withdrawal_methods'));
}
public function order_stats(Request $request)
{
session()->put('statistics_type', $request['statistics_type']);
$data = self::order_stats_data();
return response()->json([
'view' => view('seller-views.partials._dashboard-order-stats', compact('data'))->render()
], 200);
}
public function get_earning_statitics(Request $request){
$dateType = $request->type;
$seller_data = array();
if($dateType == 'yearEarn') {
$number = 12;
$from = Carbon::now()->startOfYear()->format('Y-m-d');
$to = Carbon::now()->endOfYear()->format('Y-m-d');
$seller_earnings = OrderTransaction::where([
'seller_is'=>'seller',
'seller_id'=>auth('seller')->id(),
'status'=>'disburse'
])->select(
DB::raw('IFNULL(sum(seller_amount),0) as sums'),
DB::raw('YEAR(created_at) year, MONTH(created_at) month')
)->whereBetween('created_at', [$from, $to])->groupby('year', 'month')->get()->toArray();
for ($inc = 1; $inc <= $number; $inc++) {
$seller_data[$inc] = 0;
foreach ($seller_earnings as $match) {
if ($match['month'] == $inc) {
$seller_data[$inc] = $match['sums'];
}
}
}
$key_range = array("Jan","Feb","Mar","April","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
}elseif($dateType == 'MonthEarn') {
$from = date('Y-m-01');
$to = date('Y-m-t');
$number = date('d',strtotime($to));
$key_range = range(1, $number);
$seller_earnings = OrderTransaction::where([
'seller_is' => 'seller',
'seller_id' => auth('seller')->id(),
'status' => 'disburse'
])->select(
DB::raw('seller_amount'),
DB::raw('YEAR(created_at) year, MONTH(created_at) month, DAY(created_at) day')
)->whereBetween('created_at', [$from, $to])->groupby('day')->get()->toArray();
for ($inc = 1; $inc <= $number; $inc++) {
$seller_data[$inc] = 0;
foreach ($seller_earnings as $match) {
if ($match['day'] == $inc) {
$seller_data[$inc] = $match['seller_amount'];
}
}
}
}elseif($dateType == 'WeekEarn') {
$from = Carbon::now()->startOfWeek()->format('Y-m-d');
$to = Carbon::now()->endOfWeek()->format('Y-m-d');
$number_start =date('d',strtotime($from));
$number_end =date('d',strtotime($to));
$seller_earnings = OrderTransaction::where([
'seller_is' => 'seller',
'seller_id' => auth('seller')->id(),
'status' => 'disburse'
])->select(
DB::raw('seller_amount'),
DB::raw('YEAR(created_at) year, MONTH(created_at) month, DAY(created_at) day')
)->whereBetween('created_at', [$from, $to])->get()->toArray();
for ($inc = $number_start; $inc <= $number_end; $inc++) {
$seller_data[$inc] = 0;
foreach ($seller_earnings as $match) {
if ($match['day'] == $inc) {
$seller_data[$inc] = $match['seller_amount'];
}
}
}
$key_range = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
}
$seller_label = $key_range;
$seller_data_final = $seller_data;
$commission_data = array();
if($dateType == 'yearEarn') {
$number = 12;
$from = Carbon::now()->startOfYear()->format('Y-m-d');
$to = Carbon::now()->endOfYear()->format('Y-m-d');
$commission_earnings = OrderTransaction::where([
'seller_is'=>'seller',
'seller_id'=>auth('seller')->id(),
'status'=>'disburse'
])->select(
DB::raw('IFNULL(sum(admin_commission),0) as sums'),
DB::raw('YEAR(created_at) year, MONTH(created_at) month')
)->whereBetween('created_at', [$from, $to])->groupby('year', 'month')->get()->toArray();
for ($inc = 1; $inc <= $number; $inc++) {
$commission_data[$inc] = 0;
foreach ($commission_earnings as $match) {
if ($match['month'] == $inc) {
$commission_data[$inc] = $match['sums'];
}
}
}
$key_range = array("Jan","Feb","Mar","April","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
}elseif($dateType == 'MonthEarn') {
$from = date('Y-m-01');
$to = date('Y-m-t');
$number = date('d',strtotime($to));
$key_range = range(1, $number);
$commission_earnings = OrderTransaction::where([
'seller_is' => 'seller',
'seller_id' => auth('seller')->id(),
'status' => 'disburse'
])->select(
DB::raw('admin_commission'),
DB::raw('YEAR(created_at) year, MONTH(created_at) month, DAY(created_at) day')
)->whereBetween('created_at', [$from, $to])->groupby('day')->get()->toArray();
for ($inc = 1; $inc <= $number; $inc++) {
$commission_data[$inc] = 0;
foreach ($commission_earnings as $match) {
if ($match['day'] == $inc) {
$commission_data[$inc] = $match['admin_commission'];
}
}
}
}elseif($dateType == 'WeekEarn') {
$from = Carbon::now()->startOfWeek()->format('Y-m-d');
$to = Carbon::now()->endOfWeek()->format('Y-m-d');
$number_start =date('d',strtotime($from));
$number_end =date('d',strtotime($to));
$commission_earnings = OrderTransaction::where([
'seller_is' => 'seller',
'seller_id' => auth('seller')->id(),
'status' => 'disburse'
])->select(
DB::raw('admin_commission'),
DB::raw('YEAR(created_at) year, MONTH(created_at) month, DAY(created_at) day')
)->whereBetween('created_at', [$from, $to])->get()->toArray();
for ($inc = $number_start; $inc <= $number_end; $inc++) {
$commission_data[$inc] = 0;
foreach ($commission_earnings as $match) {
if ($match['day'] == $inc) {
$commission_data[$inc] = $match['admin_commission'];
}
}
}
$key_range = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
}
$commission_label = $key_range;
$commission_data_final = $commission_data;
$data = array(
'seller_label' => $seller_label,
'seller_earn' => array_values($seller_data_final),
'commission_label' => $commission_label,
'commission_earn' => array_values($commission_data_final)
);
return response()->json($data);
}
public function order_stats_data()
{
$today = session()->has('statistics_type') && session('statistics_type') == 'today' ? 1 : 0;
$this_month = session()->has('statistics_type') && session('statistics_type') == 'this_month' ? 1 : 0;
$pending = Order::where(['seller_is' => 'seller'])->where(['seller_id' => auth('seller')->id()])->where(['order_status' => 'pending'])
->when($today, function ($query) {
return $query->whereDate('created_at', Carbon::today());
})
->when($this_month, function ($query) {
return $query->whereMonth('created_at', Carbon::now());
})
->count();
$confirmed = Order::where(['seller_is' => 'seller'])->where(['seller_id' => auth('seller')->id()])->where(['order_status' => 'confirmed'])
->when($today, function ($query) {
return $query->whereDate('created_at', Carbon::today());
})
->when($this_month, function ($query) {
return $query->whereMonth('created_at', Carbon::now());
})
->count();
$processing = Order::where(['seller_is' => 'seller'])->where(['seller_id' => auth('seller')->id()])->where(['order_status' => 'processing'])
->when($today, function ($query) {
return $query->whereDate('created_at', Carbon::today());
})
->when($this_month, function ($query) {
return $query->whereMonth('created_at', Carbon::now());
})
->count();
$out_for_delivery = Order::where(['seller_is' => 'seller'])->where(['seller_id' => auth('seller')->id()])->where(['order_status' => 'out_for_delivery'])
->when($today, function ($query) {
return $query->whereDate('created_at', Carbon::today());
})
->when($this_month, function ($query) {
return $query->whereMonth('created_at', Carbon::now());
})
->count();
$delivered = Order::where(['seller_is' => 'seller'])->where(['seller_id' => auth('seller')->id()])
->where(['order_status' => 'delivered'])
->when($today, function ($query) {
return $query->whereDate('created_at', Carbon::today());
})
->when($this_month, function ($query) {
return $query->whereMonth('created_at', Carbon::now());
})
->count();
$canceled = Order::where(['seller_is' => 'seller'])->where(['seller_id' => auth('seller')->id()])->where(['order_status' => 'canceled'])
->when($today, function ($query) {
return $query->whereDate('created_at', Carbon::today());
})
->when($this_month, function ($query) {
return $query->whereMonth('created_at', Carbon::now());
})
->count();
$returned = Order::where(['seller_is' => 'seller'])->where(['seller_id' => auth('seller')->id()])->where(['order_status' => 'returned'])
->when($today, function ($query) {
return $query->whereDate('created_at', Carbon::today());
})
->when($this_month, function ($query) {
return $query->whereMonth('created_at', Carbon::now());
})
->count();
$failed = Order::where(['seller_is' => 'seller'])->where(['seller_id' => auth('seller')->id()])->where(['order_status' => 'failed'])
->when($today, function ($query) {
return $query->whereDate('created_at', Carbon::today());
})
->when($this_month, function ($query) {
return $query->whereMonth('created_at', Carbon::now());
})
->count();
$data = [
'pending' => $pending,
'confirmed' => $confirmed,
'processing' => $processing,
'out_for_delivery' => $out_for_delivery,
'delivered' => $delivered,
'canceled' => $canceled,
'returned' => $returned,
'failed' => $failed
];
return $data;
}
}