first(); abort_if(Gate::denies('view', $menu), 403, 'Unauthorized User'); if(!isset($request->month)) { $request['month'] = date('m'); } if(!isset($request->dealer)) { $request['dealer'] = 'all'; } if(!isset($request->sa)) { $request['sa'] = 'all'; } $works = Work::select('id', 'name')->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') { $q = $q->where('dealer_id', '=', $request->dealer); } if(isset($request->sa) && $request->sa != 'all') { $q = $q->where('user_sa_id', '=', $request->sa); } return $q; })->orderBy('id', 'ASC')->get(); $dealer_datas = Dealer::orderBy('id', 'ASC')->get(); $sa_datas = User::select('id', 'name')->where('role_id', 4)->get(); $sa = $request->sa; $dealer = $request->dealer; $month = $request->month; return view('back.report.transaction_sa', compact('dealer_datas', 'sa_datas', 'month', 'works', 'sa', 'dealer')); } public function transaction_sa(Request $request) { $menu = Menu::where('link', 'report.transaction_sa')->first(); abort_if(Gate::denies('view', $menu), 403, 'Unauthorized User'); if(!isset($request->month)) { $request['month'] = date('m'); } if(!isset($request->year)) { $request['year'] = date('Y'); } if(!isset($request->dealer)) { $request['dealer'] = '20'; } if(!isset($request->sa)) { $request['sa'] = 'all'; } $dealer_datas = Dealer::orderBy('id', 'ASC')->get(); $sa_datas = User::select('id', 'name')->where('role_id', 4)->get(); $sa = $request->sa; $dealer = $request->dealer; $month = $request->month; $year = $request->year; $ajax_url = route('report.transaction_sa_data').'?month='.$month.'&year='.$year.'&dealer='.$dealer.'&sa='.$sa; return view('back.report.transaction_sa', compact('dealer_datas', 'sa_datas', 'month', 'year', 'sa', 'dealer', 'ajax_url')); } public function transaction_sa_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;sa'})) { $request['sa'] = $request->{'amp;sa'}; } if(isset($request->{'amp;year'})) { $request['year'] = $request->{'amp;year'}; } if(!isset($request->dealer)) { $request['dealer'] = 'all'; } $month = $request->month; $dealer = $request->dealer; $sa = $request->sa; $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 ."'"; } if(isset($request->sa) && $request->sa != 'all') { $sql .= " and t.user_sa_id = '". $sa ."'"; } $sa_work_trx = DB::statement($sql); if(isset($request->dealer) && $request->dealer != 'all') { if(isset($request->sa) && $request->sa != 'all') { $sa_work_trx = DB::statement("SET @sql = IF(@sql != 's.work_id' ,CONCAT(\"SELECT sa.name as SA, sa.id as sa_id, \", @sql, \"FROM transactions s JOIN users sa ON sa.id = s.user_sa_id WHERE month(s.date) = '". $month ."' and year(s.date) = '". $year ."' and s.deleted_at is null and s.dealer_id = '". $dealer ."' and s.user_sa_id = '". $sa ."' GROUP BY s.user_sa_id ORDER BY s.user_sa_id ASC\"), CONCAT(\"SELECT sa.name as SA, sa.id as sa_id \", \"FROM transactions s JOIN users sa ON sa.id = s.user_sa_id WHERE month(s.date) = '". $month ."' and year(s.date) = '". $year ."' and s.deleted_at is null and s.dealer_id = '". $dealer ."' and s.user_sa_id = '". $sa ."' GROUP BY s.`user_sa_id` ORDER BY s.`user_sa_id` ASC\"))"); }else{ $sa_work_trx = DB::statement("SET @sql = IF(@sql != 's.work_id' ,CONCAT(\"SELECT sa.name as SA, sa.id as sa_id, \", @sql, \"FROM transactions s JOIN users sa ON sa.id = s.user_sa_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.user_sa_id ORDER BY s.user_sa_id ASC\"), CONCAT(\"SELECT sa.name as SA, sa.id as sa_id \", \"FROM transactions s JOIN users sa ON sa.id = s.user_sa_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.`user_sa_id` ORDER BY s.`user_sa_id` ASC\"))"); } }else{ if(isset($request->sa) && $request->sa != 'all') { $sa_work_trx = DB::statement("SET @sql = IF(@sql != 's.work_id' ,CONCAT(\"SELECT sa.name as SA, sa.id as sa_id, \", @sql, \"FROM transactions s JOIN users sa ON sa.id = s.user_sa_id WHERE month(s.date) = '". $month ."' and year(s.date) = '". $year ."' and s.deleted_at is null and s.user_sa_id = '". $sa ."' GROUP BY s.user_sa_id ORDER BY s.user_sa_id ASC\"), CONCAT(\"SELECT sa.name as SA, sa.id as user_sa_id \", \"FROM transactions s JOIN dealers d ON d.id = s.user_sa_id WHERE month(s.date) = '". $month ."' and year(s.date) = '". $year ."' and s.deleted_at is null and s.user_sa_id = '". $sa ."' GROUP BY s.`user_sa_id` ORDER BY s.`user_sa_id` ASC\"))"); }else{ $sa_work_trx = DB::statement("SET @sql = IF(@sql != 's.work_id' ,CONCAT(\"SELECT sa.name as SA, sa.id as sa_id, \", @sql, \"FROM transactions s JOIN users sa ON sa.id = s.user_sa_id WHERE month(s.date) = '". $month ."' and year(s.date) = '". $year ."' and s.deleted_at is null GROUP BY s.user_sa_id ORDER BY s.user_sa_id ASC\"), CONCAT(\"SELECT sa.name as SA, sa.id as user_sa_id \", \"FROM transactions s JOIN dealers d ON d.id = s.user_sa_id WHERE month(s.date) = '". $month ."' and year(s.date) = '". $year ."' and s.deleted_at is null GROUP BY s.`user_sa_id` ORDER BY s.`user_sa_id` ASC\"))"); } } $sa_work_trx = DB::statement("PREPARE stmt FROM @sql"); $sa_work_trx = DB::select(DB::raw("EXECUTE stmt")); DB::statement('DEALLOCATE PREPARE stmt'); $theads = ['SA']; $sa_names = []; $sa_trx = []; $work_trx = []; $work_ids = []; foreach($sa_work_trx as $index => $sa_work) { $sa_work_2 = (array) $sa_work; unset($sa_work_2['sa_id']); $work_trx[$sa_work->sa_id] = array_values($sa_work_2); unset($sa_work_2['SA']); $work_names = array_keys($sa_work_2); if($index == 0) { foreach($work_names as $work) { $arr_work = explode('|', $work); $theads[] = $arr_work[0]; $work_ids[] = $arr_work[1]; $sa_trx[$work] = [ 'work_name' => $arr_work[0], 'qty' => [] ]; if($sa_work->{$work} > 0) { $sa_trx[$work]['qty'][] = $sa_work->{$work}; }else{ $sa_trx[$work]['qty'][] = "N/A"; } } }else{ foreach($work_names as $work) { if($sa_work->{$work} > 0) { $sa_trx[$work]['qty'][] = $sa_work->{$work}; }else{ $sa_trx[$work]['qty'][] = "N/A"; } } } $sa_names[] = $sa_work->SA; } $sa_trx = array_values($sa_trx); $dealer = $request->dealer; $month = $request->month; $sa = $request->sa; $year = $request->year; $sa_names = json_encode($sa_names); $sa_trx = json_encode($sa_trx); return view('back.report.transaction_sa_data', compact('theads', 'work_trx', 'month', 'sa_names', 'sa_trx', 'dealer', 'sa', 'year')); } public function transaction_sa_old(Request $request) { $menu = Menu::where('link', 'report.transaction_sa')->first(); abort_if(Gate::denies('view', $menu), 403, 'Unauthorized User'); if(!isset($request->month)) { $request['month'] = date('m'); } $works = Work::select('id', 'name')->whereHas('transactions', function($q) use($request) { if(isset($request->month)) { $q->whereMonth('date', '=', $request->month); } if(isset($request->dealer) && $request->dealer != 'all') { $q->where('dealer_id', '=', $request->dealer); } if(isset($request->sa) && $request->sa != 'all') { $q->where('user_sa_id', '=', $request->sa); } })->get(); $sas = User::select('id', 'name')->where('role_id', 4)->get(); $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); if(isset($request->month)) { $d = $d->whereMonth('date', '=', $request->month); } if(isset($request->dealer) && $request->dealer != 'all') { $d = $d->where('dealer_id', '=', $request->dealer); } if(isset($request->sa) && $request->sa != 'all') { $d = $d->where('user_sa_id', '=', $request->sa); } $d = $d->sum('qty'); if($d) { $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, ]; } } $trxs[] = [ 'user_sa_id' => $sa->id, 'sa_name' => $sa->name, 'works' => $sa_works ]; } $sa_names = []; $trx_data = []; foreach($trxs as $trx) { $sa_names[] = $trx['sa_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']] ]; } } } $sa_names = json_encode($sa_names); $trx_data = json_encode(array_values($trx_data)); // dd($trx_data); $work_count = count($works); $month = $request->month; $dealer_id = $request->dealer; $sa_id = $request->sa; $dealers = Dealer::all(); $sas = User::where('role_id', 4)->get(); return view('back.report.transaction_sa', compact('sas', 'dealers', 'dealer_id', 'sa_id', 'month', 'trxs', 'works', 'work_count', 'sa_names', 'trx_data')); } public function sa_work_trx(Request $request) { $sa_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) && $request->dealer != 'all') { $q = $q->where('dealer_id', '=', $request->dealer); } if(isset($request->sa_filter) && $request->sa_filter != 'all') { $q = $q->where('user_sa_id', '=', $request->sa_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.user_sa_id', '=', DB::raw($request->sa)); if(isset($request->dealer) && $request->dealer != 'all') { $q->on('t.dealer_id', '=', DB::raw($request->dealer)); } if(isset($request->sa_filter) && $request->sa_filter != 'all') { $q->on('t.user_sa_id', '=', DB::raw($request->sa_filter)); } })->groupBy('works.id')->orderBy('works.id', 'ASC')->get(); return response()->json($sa_work_trx); } public function get_sa_has_transactions(Request $request) { if(!isset($request->month)) { $request['month'] = date('m'); } if(!isset($request->dealer)) { $request['dealer'] = 'all'; } if(!isset($request->sa)) { $request['sa'] = 'all'; } $sas = User::where('role_id', 4)->whereHas('sa_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') { $q->where('dealer_id', '=', $request->dealer); } }); if(isset($request->sa) && $request->sa != 'all') { $sas = $sas->where('id', $request->sa); } $sas = $sas->orderBy('id', 'ASC')->get(); return response()->json($sas); } public function transaction_dealer(Request $request) { $menu = Menu::where('link', 'report.transaction_dealer')->first(); abort_if(Gate::denies('view', $menu), 403, 'Unauthorized User'); if(!isset($request->month)) { $request['month'] = date('m'); } if(!isset($request->year)) { $request['year'] = date('Y'); } $year = $request->year; $month = $request->month; $dealer = $request->dealer; $dealer_datas = Dealer::all(); $ajax_url = route('dashboard_data').'?month='.$month.'&year='.$year.'&dealer='.$dealer; return view('dashboard', compact('month', 'ajax_url', 'dealer', 'dealer_datas', 'year')); } public function transaction(Request $request) { $menu = Menu::where('link', 'report.transaction')->first(); abort_if(Gate::denies('view', $menu), 403, 'Unauthorized User'); $sas = User::where('role_id', 4)->get(); $mechanics = User::where('role_id', 3)->get(); $dealers = Dealer::all(); $works = Work::all(); return view('back.report.transaction', compact('sas', 'mechanics', 'dealers', 'works')); } public function transaction_data(Request $request) { $menu = Menu::where('link', 'report.transaction')->first(); abort_if(Gate::denies('view', $menu), 403, 'Unauthorized User'); if ($request->ajax()) { $data = Transaction::leftJoin('users', 'users.id', '=', 'transactions.user_id') ->leftJoin('users as sa', 'sa.id', '=', 'transactions.user_sa_id') ->leftJoin('works as w', 'w.id', '=', 'transactions.work_id') ->leftJoin('categories as cat', 'cat.id', '=', 'w.category_id') ->leftJoin('dealers as d', 'd.id', '=', 'transactions.dealer_id') ->select('transactions.id', 'transactions.status', 'transactions.user_id as user_id', 'transactions.user_sa_id as user_sa_id', 'users.name as username', 'sa.name as sa_name', 'cat.name as category_name', 'w.name as workname', 'transactions.qty as qty', 'transactions.date as date', 'transactions.police_number as police_number', 'transactions.warranty as warranty', 'transactions.spk as spk', 'transactions.dealer_id', 'd.name as dealer_name'); if(isset($request->date_start)) { $data->where('transactions.date', '>=', $request->date_start); } if(isset($request->date_end)) { $data->where('transactions.date', '<=', $request->date_end); } if(isset($request->sa)) { $data->where('transactions.user_sa_id', $request->sa); } if(isset($request->mechanic)) { $data->where('transactions.user_id', $request->mechanic); } if(isset($request->dealer)) { $data->where('transactions.dealer_id', $request->dealer); } $data->orderBy('date', 'DESC'); return DataTables::of($data)->addIndexColumn() ->addColumn('action', function($row) use ($menu) { $btn = '
'; if($row->status == 1) { if(Gate::allows('delete', $menu)) { $btn .= ' '; } $btn .= 'Closed'; }else{ if(Gate::allows('delete', $menu)) { $btn .= ''; } if(Gate::allows('update', $menu)) { $btn .= ' '; } } $btn .= '
'; return $btn; }) ->rawColumns(['action']) ->make(true); } } public function export(Request $request) { return Excel::download(new TransactionExport($request), date('dmY_').'pekerjaan.xlsx'); } public function dealer_export(Request $request) { return Excel::download(new TransactionDealerExport($request), date('dmY_').'dealer.xlsx'); } public function sa_export(Request $request) { return Excel::download(new TransactionSaExport($request), date('dmY_').'sa.xlsx'); } public function edit($id) { $transaction = Transaction::find($id); $response = [ 'data' => $transaction, 'status' => 200, 'message' => 'get data successfully' ]; return response()->json($response); } public function update(Request $request, $id) { $menu = Menu::where('link', 'report.transaction')->first(); abort_if(Gate::denies('update', $menu), 403, 'Unauthorized User'); Transaction::find($id)->update([ "spk" => $request->spk, "date" => $request->date, "police_number" => $request->police_number, "work_id" => $request->work_id, "dealer_id" => $request->dealer_id, "qty" => $request->qty, "warranty" => $request->warranty, "user_sa_id" => $request->sa_id, ]); $response = [ "status" => 200, "message" => "Data updated successfully" ]; return response()->json($response); } public function close_transaction($id) { $menu = Menu::where('link', 'report.transaction')->first(); abort_if(Gate::denies('update', $menu), 403, 'Unauthorized User'); Transaction::find($id)->update([ 'status' => 1 ]); $response = [ 'message' => 'Data updated successfully', 'status' => 200 ]; return response()->json($response); } public function bulk_close_transaction(Request $request) { $menu = Menu::where('link', 'report.transaction')->first(); abort_if(Gate::denies('update', $menu), 403, 'Unauthorized User'); Transaction::whereIn('id', $request->selected)->update([ 'status' => 1 ]); $response = [ 'message' => 'Data updated successfully', 'status' => 200 ]; return response()->json($response); } public function destroy_transaction($id) { $menu = Menu::where('link', 'report.transaction')->first(); abort_if(Gate::denies('delete', $menu), 403, 'Unauthorized User'); Transaction::destroy($id); $response = [ 'message' => 'Data deleted successfully', 'status' => 200 ]; return response()->json($response); } }