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'; } // Get dealers based on user role $user = Auth::user(); $role = Role::with(['dealers' => function($query) { $query->whereNull('dealers.deleted_at'); // Only active dealers }])->find($user->role_id); if($role && $this->isAdminRole($role) && $role->dealers->count() == 0) { $allowedDealers = Dealer::all(); } else if($role) { $allowedDealers = $role->dealers()->whereNull('dealers.deleted_at')->orderBy('name')->get(); } else { $allowedDealers = collect(); } $works = Work::select('id', 'name')->whereHas('transactions', function($q) use($request, $allowedDealers) { if(isset($request->month)) { $q = $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y')); } // Filter by allowed dealers based on user role if($allowedDealers->count() > 0) { $dealerIds = $allowedDealers->pluck('id')->toArray(); $q = $q->whereIn('dealer_id', $dealerIds); } if(isset($request->dealer) && $request->dealer != 'all') { // Validate that the requested dealer is allowed for this user if($allowedDealers->count() > 0) { $allowedDealerIds = $allowedDealers->pluck('id')->toArray(); if(in_array($request->dealer, $allowedDealerIds)) { $q = $q->where('dealer_id', '=', $request->dealer); } } else { $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(); // Get dealers based on user role $user = Auth::user(); $role = Role::with(['dealers' => function($query) { $query->whereNull('dealers.deleted_at'); // Only active dealers }])->find($user->role_id); if($role && $this->isAdminRole($role) && $role->dealers->count() == 0) { $dealer_datas = Dealer::orderBy('id', 'ASC')->get(); } else if($role) { $dealer_datas = $role->dealers()->whereNull('dealers.deleted_at')->orderBy('name')->get(); } else { $dealer_datas = collect(); } // Get SA users based on dealer access if($dealer_datas->count() > 0) { $dealerIds = $dealer_datas->pluck('id')->toArray(); $sa_datas = User::select('id', 'name')->where('role_id', 4)->whereIn('dealer_id', $dealerIds)->get(); } else { $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'; } // Get dealers based on user role $user = Auth::user(); $role = Role::with(['dealers' => function($query) { $query->whereNull('dealers.deleted_at'); // Only active dealers }])->find($user->role_id); if($role && $this->isAdminRole($role) && $role->dealers->count() == 0) { $dealer_datas = Dealer::orderBy('id', 'ASC')->get(); } else if($role) { $dealer_datas = $role->dealers()->whereNull('dealers.deleted_at')->orderBy('name')->get(); } else { $dealer_datas = collect(); } // Get SA users based on dealer access if($dealer_datas->count() > 0) { $dealerIds = $dealer_datas->pluck('id')->toArray(); $sa_datas = User::select('id', 'name')->where('role_id', 4)->whereIn('dealer_id', $dealerIds)->get(); } else { $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; // Get dealers based on user role $user = Auth::user(); $role = Role::with(['dealers' => function($query) { $query->whereNull('dealers.deleted_at'); // Only active dealers }])->find($user->role_id); if($role && $this->isAdminRole($role) && $role->dealers->count() == 0) { $allowedDealers = Dealer::all(); } else if($role) { $allowedDealers = $role->dealers()->whereNull('dealers.deleted_at')->orderBy('name')->get(); } else { $allowedDealers = collect(); } $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"; // Filter by allowed dealers based on user role if($allowedDealers->count() > 0) { $dealerIds = $allowedDealers->pluck('id')->toArray(); $dealerIdsStr = implode(',', $dealerIds); $sql .= " and t.dealer_id IN (". $dealerIdsStr .")"; } if(isset($request->dealer) && $request->dealer != 'all') { // Validate that the requested dealer is allowed for this user if($allowedDealers->count() > 0) { $allowedDealerIds = $allowedDealers->pluck('id')->toArray(); if(in_array($request->dealer, $allowedDealerIds)) { $sql .= " and t.dealer_id = '". $dealer ."'"; } } else { $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); // Validate dealer access before building the main query $dealerFilter = ""; if(isset($request->dealer) && $request->dealer != 'all') { if($allowedDealers->count() > 0) { $allowedDealerIds = $allowedDealers->pluck('id')->toArray(); if(in_array($request->dealer, $allowedDealerIds)) { $dealerFilter = " and s.dealer_id = '". $dealer ."'"; } } else { $dealerFilter = " and s.dealer_id = '". $dealer ."'"; } } else if($allowedDealers->count() > 0) { // If no specific dealer requested, filter by allowed dealers $dealerIds = $allowedDealers->pluck('id')->toArray(); $dealerIdsStr = implode(',', $dealerIds); $dealerFilter = " and s.dealer_id IN (". $dealerIdsStr .")"; } 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". $dealerFilter ." 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". $dealerFilter ." 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". $dealerFilter ." 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". $dealerFilter ." 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". $dealerFilter ." 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". $dealerFilter ." 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". $dealerFilter ." 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". $dealerFilter ." 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'); } // Get dealers based on user role $user = Auth::user(); $role = Role::with(['dealers' => function($query) { $query->whereNull('dealers.deleted_at'); // Only active dealers }])->find($user->role_id); if($role && $this->isAdminRole($role) && $role->dealers->count() == 0) { $allowedDealers = Dealer::all(); } else if($role) { $allowedDealers = $role->dealers()->whereNull('dealers.deleted_at')->orderBy('name')->get(); } else { $allowedDealers = collect(); } $works = Work::select('id', 'name')->whereHas('transactions', function($q) use($request, $allowedDealers) { if(isset($request->month)) { $q->whereMonth('date', '=', $request->month); } // Filter by allowed dealers based on user role if($allowedDealers->count() > 0) { $dealerIds = $allowedDealers->pluck('id')->toArray(); $q->whereIn('dealer_id', $dealerIds); } if(isset($request->dealer) && $request->dealer != 'all') { // Validate that the requested dealer is allowed for this user if($allowedDealers->count() > 0) { $allowedDealerIds = $allowedDealers->pluck('id')->toArray(); if(in_array($request->dealer, $allowedDealerIds)) { $q->where('dealer_id', '=', $request->dealer); } } else { $q->where('dealer_id', '=', $request->dealer); } } if(isset($request->sa) && $request->sa != 'all') { $q->where('user_sa_id', '=', $request->sa); } })->get(); // Get dealers based on user role $user = Auth::user(); $role = Role::with(['dealers' => function($query) { $query->whereNull('dealers.deleted_at'); // Only active dealers }])->find($user->role_id); if($role && $this->isAdminRole($role) && $role->dealers->count() == 0) { $dealer_datas = Dealer::all(); } else if($role) { $dealer_datas = $role->dealers()->whereNull('dealers.deleted_at')->orderBy('name')->get(); } else { $dealer_datas = collect(); } // Get SA users based on dealer access if($dealer_datas->count() > 0) { $dealerIds = $dealer_datas->pluck('id')->toArray(); $sas = User::select('id', 'name')->where('role_id', 4)->whereIn('dealer_id', $dealerIds)->get(); } else { $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); } // Filter by allowed dealers based on user role if($allowedDealers->count() > 0) { $dealerIds = $allowedDealers->pluck('id')->toArray(); $d = $d->whereIn('dealer_id', $dealerIds); } if(isset($request->dealer) && $request->dealer != 'all') { // Validate that the requested dealer is allowed for this user if($allowedDealers->count() > 0) { $allowedDealerIds = $allowedDealers->pluck('id')->toArray(); if(in_array($request->dealer, $allowedDealerIds)) { $d = $d->where('dealer_id', '=', $request->dealer); } } else { $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; return view('back.report.transaction_sa', compact('sas', 'dealer_datas', 'dealer_id', 'sa_id', 'month', 'trxs', 'works', 'work_count', 'sa_names', 'trx_data')); } public function sa_work_trx(Request $request) { // Get dealers based on user role $user = Auth::user(); $role = Role::with(['dealers' => function($query) { $query->whereNull('dealers.deleted_at'); // Only active dealers }])->find($user->role_id); if($role && $this->isAdminRole($role) && $role->dealers->count() == 0) { $allowedDealers = Dealer::all(); } else if($role) { $allowedDealers = $role->dealers()->whereNull('dealers.deleted_at')->orderBy('name')->get(); } else { $allowedDealers = collect(); } $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, $allowedDealers) { if(isset($request->month)) { $q = $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y')); } // Filter by allowed dealers based on user role if($allowedDealers->count() > 0) { $dealerIds = $allowedDealers->pluck('id')->toArray(); $q->whereIn('dealer_id', $dealerIds); } if(isset($request->dealer) && $request->dealer != 'all') { // Validate that the requested dealer is allowed for this user if($allowedDealers->count() > 0) { $allowedDealerIds = $allowedDealers->pluck('id')->toArray(); if(in_array($request->dealer, $allowedDealerIds)) { $q->where('dealer_id', '=', $request->dealer); } } else { $q->where('dealer_id', '=', $request->dealer); } } if(isset($request->sa_filter) && $request->sa_filter != 'all') { $q->where('user_sa_id', '=', $request->sa_filter); } return $q; })->leftJoin('transactions AS t', function($q) use($request, $allowedDealers) { $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)); // Filter by allowed dealers based on user role if($allowedDealers->count() > 0) { $dealerIds = $allowedDealers->pluck('id')->toArray(); $q->whereIn('t.dealer_id', $dealerIds); } if(isset($request->dealer) && $request->dealer != 'all') { // Validate that the requested dealer is allowed for this user if($allowedDealers->count() > 0) { $allowedDealerIds = $allowedDealers->pluck('id')->toArray(); if(in_array($request->dealer, $allowedDealerIds)) { $q->on('t.dealer_id', '=', DB::raw($request->dealer)); } } else { $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'; } // Get dealers based on user role $user = Auth::user(); $role = Role::with(['dealers' => function($query) { $query->whereNull('dealers.deleted_at'); // Only active dealers }])->find($user->role_id); if($role && $this->isAdminRole($role) && $role->dealers->count() == 0) { $allowedDealers = Dealer::all(); } else if($role) { $allowedDealers = $role->dealers()->whereNull('dealers.deleted_at')->orderBy('name')->get(); } else { $allowedDealers = collect(); } $sas = User::where('role_id', 4)->whereHas('sa_transactions', function($q) use($request, $allowedDealers) { if(isset($request->month)) { $q = $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y')); } // Filter by allowed dealers based on user role if($allowedDealers->count() > 0) { $dealerIds = $allowedDealers->pluck('id')->toArray(); $q->whereIn('dealer_id', $dealerIds); } if(isset($request->dealer) && $request->dealer != 'all') { // Validate that the requested dealer is allowed for this user if($allowedDealers->count() > 0) { $allowedDealerIds = $allowedDealers->pluck('id')->toArray(); if(in_array($request->dealer, $allowedDealerIds)) { $q->where('dealer_id', '=', $request->dealer); } } else { $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'); } $user = Auth::user(); $role = Role::with(['dealers' => function($query) { $query->whereNull('dealers.deleted_at'); // Only active dealers }])->find($user->role_id); if($role && $this->isAdminRole($role) && $role->dealers->count() == 0) { $dealer_datas = Dealer::all(); } else if($role) { $dealer_datas = $role->dealers()->whereNull('dealers.deleted_at')->orderBy('name')->get(); } else { $dealer_datas = collect(); } $year = $request->year; $month = $request->month; $dealer = $request->dealer; $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'); $current_user = Auth::user(); $current_role = Role::with(['dealers' => function($query) { $query->whereNull('dealers.deleted_at'); // Only active dealers }])->find($current_user->role_id); // Get dealers based on user role if($current_role && $this->isAdminRole($current_role) && $current_role->dealers->count() == 0) { $dealers = Dealer::all(); } else if($current_role) { $dealers = $current_role->dealers()->whereNull('dealers.deleted_at')->orderBy('name')->get(); } else { $dealers = collect(); } // Get SA users based on dealer access if($dealers->count() > 0) { $dealerIds = $dealers->pluck('id')->toArray(); $sas = User::where('role_id', 4)->whereIn('dealer_id', $dealerIds)->get(); $mechanics = User::where('role_id', 3)->whereIn('dealer_id', $dealerIds)->get(); } else { $sas = User::where('role_id', 4)->get(); $mechanics = User::where('role_id', 3)->get(); } $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()) { // Get dealers based on user role $current_user = Auth::user(); $current_role = Role::with(['dealers' => function($query) { $query->whereNull('dealers.deleted_at'); // Only active dealers }])->find($current_user->role_id); if($current_role && $this->isAdminRole($current_role) && $current_role->dealers->count() == 0) { $allowedDealers = Dealer::all(); } else if($current_role) { $allowedDealers = $current_role->dealers()->whereNull('dealers.deleted_at')->orderBy('name')->get(); } else { $allowedDealers = collect(); } $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'); // Filter by allowed dealers based on user role if($allowedDealers->count() > 0) { $dealerIds = $allowedDealers->pluck('id')->toArray(); $data->whereIn('transactions.dealer_id', $dealerIds); } 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)) { // Validate that the requested dealer is allowed for this user if($allowedDealers->count() > 0) { $allowedDealerIds = $allowedDealers->pluck('id')->toArray(); if(in_array($request->dealer, $allowedDealerIds)) { $data->where('transactions.dealer_id', $request->dealer); } } else { $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); } /** * Check if role is admin type */ private function isAdminRole($role) { if (!$role) { return false; } // Define admin role names that should have access to all dealers $adminRoleNames = [ 'admin' ]; // Check if role name contains admin keywords (but not "area") $roleName = strtolower(trim($role->name)); foreach ($adminRoleNames as $adminName) { if (strpos($roleName, $adminName) !== false && strpos($roleName, 'area') === false) { return true; } } // Role with "area" in name should use pivot dealers, not all dealers if (strpos($roleName, 'area') !== false) { return false; } return false; } }