$b[$key]){ return 1; }else if($a[$key] < $b[$key]){ return -1; } return 0; } public function dashboard(Request $request) { abort_if(Gate::denies('view', Menu::where('link', 'dashboard')->first()), 403, 'Unauthorized User'); if(!isset($request->month)) { $request['month'] = date('m'); } if(!isset($request->year)) { $request['year'] = date('Y'); } $month = $request->month; $dealer = $request->dealer; $year = $request->year; $dealer_datas = Dealer::all(); $ajax_url = route('dashboard_data').'?month='.$month.'&year='.$year.'&dealer='.$dealer; // dd($ajax_url); return view('dashboard', compact('month','year', 'ajax_url', 'dealer', 'dealer_datas')); } public function dashboard_data(Request $request) { abort_if(Gate::denies('view', Menu::where('link', 'dashboard')->first()), 403, 'Unauthorized User'); if(!isset($request->month)) { $request['month'] = date('m'); } if(!isset($request->year)) { $request['year'] = date('Y'); } if(isset($request->{'amp;dealer'})) { $request['dealer'] = $request->{'amp;dealer'}; } if(isset($request->{'amp;year'})) { $request['year'] = $request->{'amp;year'}; } if(!isset($request->dealer)) { $request['dealer'] = 'all'; } $month = $request->month; $dealer = $request->dealer; $year = $request->year; $dealer_work_trx = DB::statement("SET @sql = NULL"); $sql = "SELECT IF(work_id IS NOT NULL, GROUP_CONCAT(DISTINCT CONCAT('SUM(IF(work_id = \"', work_id,'\", qty,\"\")) AS \"',CONCAT(w.name, '|',w.id),'\"')), 's.work_id') INTO @sql FROM transactions t JOIN works w ON w.id = t.work_id WHERE month(t.date) = '". $month ."' and year(t.date) = '". $year ."' and t.deleted_at is null"; if(isset($request->dealer) && $request->dealer != 'all') { $sql .= " and t.dealer_id = '". $dealer ."'"; } $dealer_work_trx = DB::statement($sql); if(isset($request->dealer) && $request->dealer != 'all') { $dealer_work_trx = DB::statement("SET @sql = IF(@sql != 's.work_id' ,CONCAT(\"SELECT d.name as DEALER, d.id as dealer_id, \", @sql, \"FROM transactions s JOIN dealers d ON d.id = s.dealer_id WHERE month(s.date) = '". $month ."' and year(s.date) = '". $year ."' and s.deleted_at is null and s.dealer_id = '". $dealer ."' GROUP BY s.dealer_id ORDER BY s.dealer_id ASC\"), CONCAT(\"SELECT d.name as DEALER \", \"FROM transactions s JOIN dealers d ON d.id = s.dealer_id WHERE month(s.date) = '". $month ."' and year(s.date) = '". $year ."' and s.deleted_at is null and s.dealer_id = '". $dealer ."' GROUP BY s.`dealer_id` ORDER BY s.`dealer_id` ASC\"))"); }else{ $dealer_work_trx = DB::statement("SET @sql = IF(@sql != 's.work_id' ,CONCAT(\"SELECT d.name as DEALER, d.id as dealer_id, \", @sql, \"FROM transactions s JOIN dealers d ON d.id = s.dealer_id WHERE month(s.date) = '". $month ."' and year(s.date) = '". $year ."' and s.deleted_at is null GROUP BY s.dealer_id ORDER BY s.dealer_id ASC\"), CONCAT(\"SELECT d.name as DEALER, d.id as dealer_id \", \"FROM transactions s JOIN dealers d ON d.id = s.dealer_id WHERE month(s.date) = '". $month ."' and year(s.date) = '". $year ."' and s.deleted_at is null GROUP BY s.`dealer_id` ORDER BY s.`dealer_id` ASC\"))"); } $dealer_work_trx = DB::statement("PREPARE stmt FROM @sql"); $dealer_work_trx = DB::select(DB::raw("EXECUTE stmt")); DB::statement('DEALLOCATE PREPARE stmt'); // DD($dealer_work_trx); $theads = ['DEALER']; $dealer_names = []; $dealer_trx = []; $work_trx = []; $work_ids = []; foreach($dealer_work_trx as $index => $dealer_work) { $dealer_work_2 = (array) $dealer_work; unset($dealer_work_2['dealer_id']); $work_trx[$dealer_work->dealer_id] = array_values($dealer_work_2); unset($dealer_work_2['DEALER']); $work_names = array_keys($dealer_work_2); if($index == 0) { foreach($work_names as $work) { $arr_work = explode('|', $work); $theads[] = $arr_work[0]; $work_ids[] = $arr_work[1]; $dealer_trx[$work] = [ 'work_name' => $arr_work[0], 'qty' => [$dealer_work->{$work}] ]; } }else{ foreach($work_names as $work) { $dealer_trx[$work]['qty'][] = $dealer_work->{$work}; } } $dealer_names[] = $dealer_work->DEALER; } // dd($dealer_trx); $dealer_trx = array_values($dealer_trx); $dealer = $request->dealer; $month = $request->month; $dealer_names = json_encode($dealer_names); $dealer_trx = json_encode($dealer_trx); $prev_mth_start = date('Y-m-d', strtotime(date($year.'-'. $request->month .'-1')." -1 month")); $prev_mth = explode('-', $prev_mth_start); if($request->month == date('m')) { $prev_mth_end = $prev_mth[0].'-'.$prev_mth[1].'-'.date('d'); }else{ $prev_mth_end = $prev_mth[0].'-'.$prev_mth[1].'-'.date('t'); } $prev_month_trx = []; $now_month_trx = []; foreach($work_ids as $work_id) { $now_month = Transaction::select(DB::raw("SUM(qty) as qty"))->where('work_id', $work_id)->whereMonth('date', '=', $request->month)->whereYear('date', $year); $prev_month = Transaction::select(DB::raw("SUM(qty) as qty"))->where('work_id', $work_id)->whereDate('date', '>=', $prev_mth_start)->whereDate('date', '<=', $prev_mth_end); if(isset($request->dealer) && $request->dealer != 'all') { $prev_month = $prev_month->where('dealer_id', $request->dealer); $now_month = $now_month->where('dealer_id', $request->dealer); } $prev_month_trx[] = $prev_month->sum('qty'); $now_month_trx[] = $now_month->sum('qty'); } $totals = []; for($i = 0; $i < count($now_month_trx); $i++) { $totals[] = [ "prev" => $prev_month_trx[$i], "now" => $now_month_trx[$i], ]; } return view('dashboard_data', compact('theads', 'work_trx', 'month', 'year', 'dealer_names', 'dealer_trx', 'dealer', 'totals')); } public function dealer_work_trx(Request $request) { $dealer_work_trx = Work::select(DB::raw('works.name AS work_name'), DB::raw("IFNULL(SUM(t.qty), 0) AS qty"), 'works.id AS work_id')->whereHas('transactions', function($q) use($request) { if(isset($request->month)) { $q = $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y')); } if(isset($request->dealer_filter) && $request->dealer_filter != 'all') { $q = $q->where('dealer_id', $request->dealer_filter); } return $q; })->leftJoin('transactions AS t', function($q) use($request) { $q->on('t.work_id', '=', 'works.id'); $q->on(DB::raw('MONTH(t.date)'), '=', DB::raw($request->month)); $q->on(DB::raw('YEAR(t.date)'), '=', DB::raw(date('Y'))); $q->on('t.dealer_id', '=', DB::raw($request->dealer)); })->groupBy('works.id')->orderBy('works.id', 'ASC')->get(); return response()->json($dealer_work_trx); } public function get_dealer_has_transactions(Request $request) { if(!isset($request->month)) { $request['month'] = date('m'); } $dealers = Dealer::whereHas('transactions', function($q) use($request) { if(isset($request->month)) { $q = $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y')); } }); if(isset($request->dealer) && $request->dealer != 'all') { $dealers = $dealers->where('id', $request->dealer); } $dealers = $dealers->orderBy('id', 'ASC')->get(); return response()->json($dealers); } public function dashboard_data_old(Request $request) { $trxs = []; if(!isset($request->month)) { $request['month'] = date('m'); } $dealers = Dealer::whereHas('transactions', function($q) use($request) { if(isset($request->month)) { return $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y')); } })->orderBy('id', 'ASC')->get(); $works = Work::select('id', 'name')->whereHas('transactions', function($q) use($request) { if(isset($request->month)) { return $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y')); } })->orderBy('id', 'ASC')->get(); $works_count = $works->count(); $month_trxs_total = []; $prev_month_trxs_total = []; foreach ($dealers as $key => $dealer) { foreach($works as $work1) { $prev_mth_start = date('Y-m-d', strtotime(date('Y-'. $request->month .'-1')." -1 month")); $prev_mth = explode('-', $prev_mth_start); if($request->month == date('m')) { $prev_mth_end = $prev_mth[0].'-'.$prev_mth[1].'-'.date('d'); }else{ $prev_mth_end = $prev_mth[0].'-'.$prev_mth[1].'-'.date('t'); } // dd($prev_mth_end); $yesterday_month_trx = Transaction::where('work_id', $work1->id)->where('dealer_id', $dealer->id)->whereDate('date', '>=', $prev_mth_start)->whereDate('date', '<=', $prev_mth_end)->sum('qty'); if(array_key_exists($work1->id, $prev_month_trxs_total)) { $prev_month_trxs_total[$work1->id] += $yesterday_month_trx; }else{ $prev_month_trxs_total[$work1->id] = $yesterday_month_trx; } } $dealer_works = []; foreach ($works as $key2 => $work) { $d = Transaction::where('dealer_id', $dealer->id)->where('work_id', $work->id); if(isset($request->month)) { $d = $d->whereMonth('date', '=', $request->month)->whereYear('date', date('Y')); $month = $request->month; } $d = $d->sum('qty'); if($d) { if(array_key_exists($work->id, $month_trxs_total)) { $month_trxs_total[$work->id] += $d; }else{ $month_trxs_total[$work->id] = $d; } $dealer_works[] = [ 'work_id' => $work->id, 'work_name' => $work->name, 'dealer_id' => $dealer->id, 'qty' => $d, ]; }else{ $dealer_works[] = [ 'work_id' => $work->id, 'work_name' => $work->name, 'dealer_id' => $dealer->id, 'qty' => 0, ]; } } $trxs[] = [ 'dealer_id' => $dealer->id, 'dealer_name' => $dealer->name, 'works' => $dealer_works ]; } $dealer_names = []; $trx_data = []; foreach($trxs as $trx) { $dealer_names[] = $trx['dealer_name']; $work_data2 = []; foreach($trx['works'] as $work_data) { if(array_key_exists($work_data['work_name'], $trx_data)) { $trx_data[$work_data['work_name']]['qty'][] = $work_data['qty']; }else{ $trx_data[$work_data['work_name']] = [ 'work_name' => $work_data['work_name'], 'qty' => [$work_data['qty']] ]; } } } $month_trxs_total = array_values($month_trxs_total); $prev_month_trxs_total = array_values($prev_month_trxs_total); $totals = []; for($i = 0; $i < count($month_trxs_total); $i++) { $totals[] = [ "prev" => $prev_month_trxs_total[$i], "now" => $month_trxs_total[$i], ]; } $dealer_names = json_encode($dealer_names); $trx_data = json_encode(array_values($trx_data)); $month = $request->month; return view('dashboard_data', compact('works', 'works_count', 'trxs', 'month', 'dealer_names', 'trx_data', 'totals')); } public function dealer_recap(Request $request, $id) { abort_if(Gate::denies('view', Menu::where('link', 'dashboard')->first()), 403, 'Unauthorized User'); if(!isset($request->month)) { $request['month'] = date('m'); } if(!isset($request->year)) { $request['year'] = date('Y'); } $works = Work::select('id', 'name', 'shortname')->whereHas('transactions', function($q) use($request, $id) { return $q->where('qty', '>', '0')->where('dealer_id', $id)->whereMonth('date', '=', $request->month)->whereYear('date', $request->year); })->get(); $sas = User::select('id', 'name')->whereHas('sa_transactions', function($q) use($request, $id) { return $q->where('dealer_id', $id)->whereMonth('date', '=', $request->month)->whereYear('date', $request->year); })->get(); $dealer = Dealer::find($id); $dates = Transaction::select(DB::raw('DATE(`date`) as date'))->where('dealer_id', $id)->whereMonth('date', $request->month)->whereYear('date', $request->year)->groupBy(DB::raw('DATE(`date`)'))->get()->toArray(); $dates = $this->array_value_recursive('date', $dates); $trxs = []; $month_trxs_total = []; $yesterday_month_trxs_total = []; foreach($works as $work1) { $prev_mth_start = date('Y-m-d', strtotime(date($request->year.'-'. $request->month .'-1')." -1 month")); $prev_mth = explode('-', $prev_mth_start); if($request->month == date('m')) { $prev_mth_end = $prev_mth[0].'-'.$prev_mth[1].'-'.date('d'); }else{ $prev_mth_end = $prev_mth[0].'-'.$prev_mth[1].'-'.date('t'); } $yesterday_month_trx = Transaction::where('work_id', $work1->id)->where('dealer_id', $id)->whereDate('date', '>=', $prev_mth_start)->whereDate('date', '<=', $prev_mth_end)->sum('qty'); if(array_key_exists($work1->id, $yesterday_month_trxs_total)) { $yesterday_month_trxs_total[$work1->id] += $yesterday_month_trx; }else{ $yesterday_month_trxs_total[$work1->id] = $yesterday_month_trx; } } if($dates) { foreach($dates as $key => $date) { $date_works = []; $share_works = []; foreach ($works as $key2 => $work) { $d = Transaction::where('work_id', $work->id)->where('dealer_id', $id)->whereDate('date', $date)->whereMonth('date', '=', $request->month)->whereYear('date', $request->year); if($d) { $d = $d->sum('qty'); if(array_key_exists($work->id, $month_trxs_total)) { $month_trxs_total[$work->id] += $d; }else{ $month_trxs_total[$work->id] = $d; } $date_works[] = [ 'work_id' => $work->id, 'work_name' => $work->name, 'shortname' => $work->shortname, 'date' => $date, 'qty' => $d, ]; }else{ $date_works[] = [ 'work_id' => $work->id, 'work_name' => $work->name, 'shortname' => $work->shortname, 'date' => $date, 'qty' => 0, ]; } } $trxs[] = [ 'date' => date('d/m/Y', strtotime($date)), 'works' => $date_works ]; } } $dealer_trxs = []; foreach($sas as $key => $sa) { $sa_works = []; foreach ($works as $key2 => $work) { $d = Transaction::where('user_sa_id', $sa->id)->where('work_id', $work->id)->where('dealer_id', $id); $d = $d->whereMonth('date', '=', $request->month)->whereYear('date', $request->year); $month = $request->month; if($d) { $d = $d->sum('qty'); $sa_works[] = [ 'work_id' => $work->id, 'work_name' => $work->name, 'user_sa_id' => $sa->id, 'qty' => $d, ]; }else{ $sa_works[] = [ 'work_id' => $work->id, 'work_name' => $work->name, 'user_sa_id' => $sa->id, 'qty' => 0, ]; } } $dealer_trxs[] = [ 'user_sa_id' => $sa->id, 'sa_name' => $sa->name, 'works' => $sa_works ]; } // $month_trxs_total = array_values($month_trxs_total); // $yesterday_month_trxs_total = array_values($yesterday_month_trxs_total); // dd(["month_trxs_total" => $month_trxs_total, "yesterday_month_trxs_total" => $yesterday_month_trxs_total, "works" => $works->toArray()]); // dd($month_trxs_total); // dd($yesterday_month_trxs_total); $final_month_trxs_total = []; $final_yesterday_month_trxs_total = []; foreach($works as $work1) { $final_month_trxs_total[$work1->id] = array_key_exists($work1->id, $month_trxs_total) ? $month_trxs_total[$work1->id] : 0; $final_yesterday_month_trxs_total[$work1->id] = $yesterday_month_trxs_total[$work1->id]; } // dd([$final_month_trxs_total, $final_yesterday_month_trxs_total]); $month_trxs_total = array_values($final_month_trxs_total); $yesterday_month_trxs_total = array_values($final_yesterday_month_trxs_total); $totals = []; for($i = 0; $i < count($month_trxs_total); $i++) { $totals[] = [ "prev" => $yesterday_month_trxs_total[$i], "now" => $month_trxs_total[$i], ]; } $works_count = count($works); $month = $request->month; $year = $request->year; return view('dealer_recap', compact('totals', 'month', 'year', 'works', 'works_count', 'trxs', 'dealer', 'dealer_trxs')); } private function array_value_recursive($key, array $arr){ $val = array(); array_walk_recursive($arr, function($v, $k) use($key, &$val){ if($k == $key) array_push($val, $v); }); return $val; } }