id); if($request->type == 'monthly') { $data = $data->whereMonth('date', '=', date('m'))->whereYear('date', date('Y')); } if($request->type == 'daily') { $data = $data->whereDate('date', '=', date('Y-m-d')); } if($request->type == 'total_monthly_dealer') { $data = Transaction::where('dealer_id', Auth::user()->dealer_id)->whereMonth('date', '=', date('m'))->whereYear('date', date('Y')); } $data = $data->count(); return response()->json([ 'message' => 'Get resume', 'data' => ["count" => $data], 'status' => true, 'code' => 200 ], 200); } public function dealer_monthly(Request $request) { if(!isset($request->month)) { $request['month'] = date('m'); } $id = Auth::user()->dealer_id; $works = Work::select('id', 'name', 'shortname')->whereHas('transactions', function($q) use($request, $id) { if(isset($request->month)) { return $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y'))->where('dealer_id', $id); } })->get(); $dealer = Dealer::find($id); $dates = Transaction::select(DB::raw('DATE(`date`) as date'))->where('dealer_id', $id)->whereMonth('date', $request->month)->whereYear('date', date('Y'))->groupBy(DB::raw('DATE(`date`)'))->get()->toArray(); $dates = $this->array_value_recursive('date', $dates); $month_trxs = []; $month_trxs_total = []; $yesterday_month_trxs_total = []; 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', $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 = []; foreach ($works as $key2 => $work) { $d = Transaction::where('work_id', $work->id)->where('dealer_id', $id)->whereDate('date', $date); if(isset($request->month)) { $d = $d->whereMonth('date', '=', $request->month)->whereYear('date', date('Y')); } $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; } $date_works[] = [ 'work_id' => $work->id, 'work_name' => $work->name, 'shortname' => $work->shortname, 'date' => $date, 'qty' => (int) $d, ]; }else{ $date_works[] = [ 'work_id' => $work->id, 'work_name' => $work->name, 'shortname' => $work->shortname, 'date' => $date, 'qty' => 0, ]; } } $month_trxs[] = [ 'date' => Carbon::parse(strtotime($date))->translatedFormat('d F Y'), 'works' => $date_works ]; } } $final_month_trxs_total = []; $final_yesterday_month_trxs_total = []; foreach($works as $work1) { $final_month_trxs_total[$work1->id] = $month_trxs_total[$work1->id]; $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); $works_count = count($works); $month = $request->month; $totals = [ "works" => $works, "months" => [ "prev" => Carbon::parse(strtotime(date('Y-'. $request->month .'-1')." -1 month"))->translatedFormat('F'), "now" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('F') ], "data" => [] ]; for($i = 0; $i < count($month_trxs_total); $i++) { $totals["data"][] = [ "prev" => (int) $yesterday_month_trxs_total[$i], "now" => (int) $month_trxs_total[$i], ]; } $data = [ "total_work" => $works_count, "month" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('F'), "totals" => $totals, "month_trx" => $month_trxs ]; return response()->json([ 'message' => 'Get Dealer Montly Report', 'data' => $data, 'status' => true, 'code' => 200 ], 200); } public function sa_monthly(Request $request) { if(!isset($request->month)) { $request['month'] = date('m'); } $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')); } })->get(); $sas = User::select('id', 'name')->whereHas('sa_transactions', function($q) use($request) { if(isset($request->month)) { return $q->whereMonth('date', '=', $request->month)->whereYear('date', date('Y')); } })->get(); $trxs = []; foreach ($works as $key2 => $work) { $work_sas = []; foreach($sas as $key => $sa) { $work_qty = Transaction::where('work_id', $work->id)->where('user_sa_id', $sa->id)->whereMonth('date', '=', $request->month)->whereYear('date', date('Y')); $work_qty = $work_qty->sum('qty'); if($work_qty) { $work_sas[] = [ 'sa_name' => $sa->name, 'user_sa_id' => $sa->id, 'work_id' => $work->id, 'qty' => $work_qty, ]; }else{ $work_sas[] = [ 'sa_name' => $sa->name, 'user_sa_id' => $sa->id, 'work_id' => $work->id, 'qty' => 0, ]; } } $trxs[] = [ 'work_id' => $work->id, 'work_name' => $work->name, 'works' => $work_sas ]; } $month = $request->month; $data = [ "month" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('F'), "work_count" => count($works), "data" => $trxs ]; return response()->json([ 'message' => 'Get SA Montly Report', 'data' => $data, 'status' => true, 'code' => 200 ], 200); } 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; } public function login(Request $request) { if (!Auth::attempt($request->only('email', 'password'))) { return response()->json([ 'message' => 'Unauthorized', 'status' => false, 'code' => 401 ], 401); } $user = User::join('roles AS r', 'r.id', 'users.role_id')->select('users.name as name', 'users.email as email', 'users.dealer_id as dealer_id', 'r.name as role', "users.id as id")->where('email', $request->email)->with('dealer')->firstOrFail(); $token = $user->createToken('auth_token')->plainTextToken; $user['token'] = $token; return response()->json([ 'message' => 'Login success', 'data' => $user, 'status' => true, 'code' => 200 ], 200); } public function logout() { Auth::user()->tokens()->delete(); return response()->json([ 'message' => 'Logout success', 'status' => true, 'code' => 200 ], 200); } public function profile() { $user = User::join('roles AS r', 'r.id', 'users.role_id')->select('users.name as name', 'users.email as email', 'users.dealer_id as dealer_id', 'r.name as role', "users.id as id")->where("users.id", auth('sanctum')->user()->id)->first(); if(!$user) { return response()->json([ 'message' => 'Failed get data user, Data Not Found', 'data' => [], 'status' => false, 'code' => 404 ], 404); } return response()->json([ 'message' => 'Get data user successfully', 'data' => $user, 'status' => true, 'code' => 200 ], 200); } public function spk(Request $request) { $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', 'w.shortname'); if(isset($request->date_start)) { $data->whereDate('transactions.date', '>=', $request->date_start); } if(isset($request->date_end)) { $data->whereDate('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 = $data->orderBy('date', 'DESC')->get(); return response()->json([ 'message' => 'Get data spk successfully', 'data' => $data, 'status' => true, 'code' => 200 ], 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'], JSON_UNESCAPED_UNICODE); } public function spk_detail($id) { $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.id as work_id', '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')->where('transactions.id', $id)->first(); if(!$data) { return response()->json([ 'message' => 'Failed to get data spk, Data Not Found', 'data' => [], 'status' => false, 'code' => 404 ], 404); } return response()->json([ 'message' => 'Successfully get data spk', 'data' => $data, 'status' => true, 'code' => 200 ], 200); } public function spk_update(Request $request, $id) { $transaction = Transaction::find($id); $validation = Validator::make($request->all(), [ 'spk_no' => ['required'], 'police_number' => ['required'], 'warranty' => ['required'], 'date' => ['required'], 'quantity' => ['required'], 'user_sa_id' => ['required', 'integer'], 'work_id' => ['required', 'integer'], ]); if($validation->fails()) { return response()->json([ 'message' => 'Save work failed', 'data' => $validation->errors(), 'status' => false, 'code' => 400 ], 400); } $transaction->update([ "spk" => $request->spk_no, "date" => $request->date, "police_number" => $request->police_number, "work_id" => $request->work_id, "qty" => $request->quantity, "warranty" => $request->warranty, "user_sa_id" => $request->user_sa_id, ]); return response()->json([ 'message' => 'Successfully Add Works', 'data' => $transaction, 'status' => true, 'code' => 200 ], 200); } public function spk_delete($id) { $transaction = Transaction::find($id); if(!$transaction) { return response()->json([ 'message' => 'Delete Failed. Data Not Found', 'data' => [], 'status' => false, 'code' => 404 ], 404); } $transaction->delete(); return response()->json([ 'message' => 'Data deleted', 'data' => [], 'status' => false, 'code' => 200 ], 200); } public function daily_resume(Request $request) { if(!isset($request->date)) { $request['date'] = date('Y-m-d'); } $data = Transaction::select(DB::raw('SUM(transactions.qty) AS qty'), 'transactions.work_id', 'w.name as workname', 'w.shortname')->leftJoin('works AS w', 'w.id', '=', 'transactions.work_id')->whereDate('date', $request->date); if(isset($request->mechanic)) { $data = $data->where('transactions.user_id', $request->mechanic); } $data = $data->groupBy('work_id')->get(); if(!$data->count()) { return response()->json([ 'message' => 'Transaction Data Not Found', 'data' => [], 'status' => false, 'code' => 400 ], 400); } return response()->json([ 'message' => 'Get data transaction successfully', 'data' => $data, 'status' => true, 'code' => 200 ], 200); } public function monthly_resume(Request $request) { DB::enableQueryLog(); $data = Transaction::select(DB::raw('SUM(transactions.qty) AS qty'), 'transactions.work_id', 'w.name as workname', 'w.shortname')->leftJoin('works AS w', 'w.id', '=', 'transactions.work_id')->whereMonth('date', date('m'))->whereYear('date', date('Y')); if(isset($request->mechanic)) { $data = $data->where('transactions.user_id', $request->mechanic); } $data = $data->groupBy('work_id')->get(); // print_r(DB::getQueryLog());die(); if(!$data->count()) { return response()->json([ 'message' => 'Transaction Data Not Found', 'data' => [], 'status' => false, 'code' => 400 ], 400); } return response()->json([ 'message' => 'Get data transaction successfully', 'data' => $data, 'status' => true, 'code' => 200 ], 200); } public function share_daily() { $transaction_works = Work::select('id', 'name', 'shortname')->whereHas('transactions', function($q) { return $q->whereDate('date', '=', date('Y-m-d'))->where('dealer_id',auth('sanctum')->user()->dealer_id); })->get(); $dealer = Dealer::find(auth('sanctum')->user()->dealer_id); $shared_text = "*[LAPORAN HARIAN MEKANIK]*\n".$dealer->name. "\n*".Carbon::now()->translatedFormat('l d F Y')."*"."\n\n\n"; foreach($transaction_works as $work) { $shared_text .= $work->shortname."\n\n"; $total_qty = 0; $transaction_sas = Transaction::leftJoin('users as sa', 'sa.id', '=', 'transactions.user_sa_id') ->select(DB::raw('SUM(transactions.qty) as qty'), 'sa.name as sa_name') ->where('work_id', $work->id) ->where('sa.dealer_id', $dealer->id) ->whereDate('transactions.date', '=', date('Y-m-d'))->groupBy('transactions.user_sa_id')->get(); foreach($transaction_sas as $sa) { $shared_text .= $sa['sa_name'].':'.$sa['qty']." Unit\n"; $total_qty += $sa['qty']; } $shared_text .= "*TOTAL : ". $total_qty ." Unit*\n\n"; $this_month_trxs = Transaction::select(DB::raw('SUM(qty) as qty'), 'u.name')->where('work_id', $work->id)->join('users AS u', 'u.id', '=', 'transactions.user_sa_id')->where('transactions.dealer_id', $dealer->id)->whereMonth('date', date('m'))->whereYear('date', date('Y'))->groupBy('user_sa_id')->get(); $shared_text .= "*[PERIODE 1 - ". Carbon::now()->translatedFormat('d F Y') ."]*\n\n"; $sum_this_month_trx = 0; foreach($this_month_trxs as $trx) { $shared_text .= $trx->name.":".$trx->qty." Unit\n"; $sum_this_month_trx += $trx->qty; } $shared_text .= "*TOTAL : ". $sum_this_month_trx." Unit*\n\n"; } return response()->json([ 'message' => 'Get Share Format Daily Report Successfully', 'data' => $shared_text, 'status' => true, 'code' => 200 ], 200); } public function share_monthly() { $dealer = Dealer::find(auth('sanctum')->user()->dealer_id); $this_month_trxs = Transaction::select(DB::raw('SUM(qty) as qty'), 'u.name')->join('users AS u', 'u.id', '=', 'transactions.user_sa_id')->where('transactions.dealer_id', $dealer->id)->whereMonth('date', date('m'))->whereYear('date', date('Y'))->groupBy('user_sa_id')->get(); $today_trxs = Transaction::select(DB::raw('SUM(qty) as qty'), 'u.name')->join('users AS u', 'u.id', '=', 'transactions.user_sa_id')->where('transactions.dealer_id', $dealer->id)->whereDate('date', date('Y-m-d'))->groupBy('user_sa_id')->get(); $shared_text = "*[Laporan SA ". $dealer->name ." ]*\n\n*".Carbon::now()->translatedFormat('l d F Y') ."*\n\n"; $sum_today_trx = 0; foreach($today_trxs as $trx) { $shared_text .= $trx->name.":".$trx->qty." Unit\n"; $sum_today_trx += $trx->qty; } $shared_text .= "\n*TOTAL : ". $sum_today_trx ." Unit*\n\n"; $shared_text .= "*[PERIODE 1 - ". Carbon::now()->translatedFormat('d F Y') ."]*\n\n"; $sum_this_month_trx = 0; foreach($this_month_trxs as $trx) { $shared_text .= $trx->name.":".$trx->qty." Unit\n"; $sum_this_month_trx += $trx->qty; } $shared_text .= "\n*TOTAL : ". $sum_this_month_trx." Unit*"; return response()->json([ 'message' => 'Get Share Format Monthly Report Successfully', 'data' => $shared_text, 'status' => true, 'code' => 200 ], 200); } public function report_dealer(Request $request) { try { if(!isset($request->month)) { $request['month'] = date('m'); } if(!isset($request->year)) { $request['year'] = date('Y'); } $year = $request->year; $dealers = Dealer::all(); $works = Work::select('id', 'name')->whereHas('transactions', function($q) use($request) { if(isset($request->month)) { return $q->whereMonth('date', '=', $request->month)->whereYear('date', $request->year); } })->get(); if($request->has('dealer_id') && $request->dealer_id != 'all') { $dealers = Dealer::where('id', $request->dealer_id)->get(); $works = Work::select('id', 'name')->whereHas('transactions', function($q) use($request) { $q = $q->where('dealer_id', $request->dealer_id); if(isset($request->month)) { return $q->whereMonth('date', '=', $request->month)->whereYear('date', $request->year); } })->get(); } $works_count = $works->count(); $trxs = []; foreach ($dealers as $key => $dealer) { $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', $year); $month = $request->month; } $d = $d->sum('qty'); if($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, // ]; // } } if($dealer_works) { $trxs[] = [ 'dealer_id' => $dealer->id, 'dealer_name' => $dealer->name, 'works' => $dealer_works ]; } } $month = $request->month; // if($request->has('dealer_id')) { // $trxs = $trxs[0]; // } $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'); } $totals = [ "months" => [ "prev" => Carbon::create()->startOfMonth()->month($prev_mth[1])->startOfMonth()->translatedFormat('M'), "now" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('M') ], "data" => [] ]; foreach ($works as $key2 => $work) { $now = Transaction::where('work_id', $work->id)->whereMonth('date', '=', $request->month)->whereYear('date', $year)->sum('qty'); $prev = Transaction::where('work_id', $work->id)->whereDate('date', '>=', $prev_mth_start)->whereDate('date', '<=', $prev_mth_end)->sum('qty'); if(!$prev) { $prev = 0; } if(!$now) { $now = 0; } $totals['data'][] = [ "work_name" => $work->name, "prev" => (int) $prev, "now" => (int) $now, ]; } $data = [ "month" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('M'), "work_count" => $works_count, "data" => $trxs, "totals" => $totals ]; return response()->json([ 'message' => 'Get Dealer Montly Report', 'data' => $data, 'status' => true, 'code' => 200 ], 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'], JSON_UNESCAPED_UNICODE); }catch(Exception $e) { return response()->json([ 'message' => 'Server Error | '. $e->getMessage(), 'data' => null, 'status' => false, 'code' => 500 ], 500); } } public function report_sa(Request $request) { if(!isset($request->month)) { $request['month'] = date('m'); } if(!isset($request->year)) { $request['year'] = date('Y'); } $works = Work::select('id', 'name')->whereHas('transactions', function($q) use($request) { $q = $q->whereMonth('date', '=', $request->month)->whereYear('date', $request->year); if(isset($request->dealer)) { $q = $q->where('dealer_id', '=', $request->dealer); } if(isset($request->sa) && $request->sa != 'all') { $q = $q->where('user_sa_id', '=', $request->sa); } return $q; })->get(); $sas = User::select('id', 'name')->whereHas('sa_transactions', function($q) use($request) { $q = $q->whereMonth('date', '=', $request->month)->whereYear('date', $request->year); if(isset($request->dealer)) { $q = $q->where('dealer_id', '=', $request->dealer); } return $q; }); if(isset($request->sa) && $request->sa != 'all') { $sas = $sas->where('id', '=', $request->sa); } $sas = $sas->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)->whereMonth('date', '=', $request->month)->whereYear('date', $request->year); if(isset($request->dealer)) { $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, // ]; // } } if($sa_works) { $trxs[] = [ 'user_sa_id' => $sa->id, 'sa_name' => $sa->name, 'works' => $sa_works ]; } } $month = $request->month; $data = [ "month" => Carbon::create()->startOfMonth()->month($month)->startOfMonth()->translatedFormat('F'), "work_count" => count($works), "data" => $trxs ]; return response()->json([ 'message' => 'Get SA Montly Report', 'data' => $data, 'status' => true, 'code' => 200 ], 200); } public function spk_close(Request $request) { try { $transaction = Transaction::find($request->id); if(!$transaction) { return response()->json([ 'message' => 'Failed Close SPK, Data Not Found', 'status' => false, 'code' => 404 ], 404); } $transaction->update([ 'status' => 1 ]); return response()->json([ 'message' => 'Success Close SPK', 'status' => true, 'code' => 200 ], 200); } catch (\Throwable $th) { return response()->json([ 'message' => 'Failed Close SPK, '. $th->getMessage(), 'status' => false, 'code' => 500 ], 500); } } public function spk_close_bulk(Request $request) { try { Transaction::whereIn('id', $request->ids)->update([ 'status' => 1 ]); return response()->json([ 'message' => 'Success Close SPK', 'status' => true, 'code' => 200 ], 200); } catch (\Throwable $th) { return response()->json([ 'message' => 'Failed Close SPK '. $th->getMessage(), 'status' => false, 'code' => 500 ], 500); } } public function report_spk_export(Request $request) { $filename = date('dmY_').'pekerjaan.xlsx'; $storage_path = 'spks/'; Excel::store(new TransactionExport($request), $storage_path.$filename); $url = asset('storage/spks/'.$filename); return $url; } public function work() { $works = Work::all(); return response()->json([ 'message' => 'Successfully Get All Work ', 'data' => $works, 'status' => true, 'code' => 200 ], 200); } public function sa() { $sas = User::join('roles as r', 'r.id', '=', 'users.role_id')->where('users.role_id', 4)->select('users.name as name', 'users.email as email', 'users.dealer_id as dealer_id', 'r.name as role', "users.id as id")->get(); return response()->json([ 'message' => 'Successfully Get All SA ', 'data' => $sas, 'status' => true, 'code' => 200 ], 200); } public function mechanic() { $mechanics = User::join('roles as r', 'r.id', '=', 'users.role_id')->where('users.role_id', 3)->select('users.name as name', 'users.email as email', 'users.dealer_id as dealer_id', 'r.name as role', "users.id as id")->get(); return response()->json([ 'message' => 'Successfully Get All Mechanics ', 'data' => $mechanics, 'status' => true, 'code' => 200 ], 200); } public function dealer() { $dealers = Dealer::all(); return response()->json([ 'message' => 'Successfully Get All Dealers ', 'data' => $dealers, 'status' => true, 'code' => 200 ], 200); } public function spk_kerja(Request $request) { $validation = Validator::make($request->all(), [ 'quantity.*' => ['required', 'integer'], 'work_id.*' => ['required', 'integer'], 'spk_no' => ['required', function($attribute, $value, $fail) use($request) { $date = $request->date; $error_work = ''; foreach($request->work_id as $work_id) { $check = Transaction::with(['work'])->where('work_id', $work_id)->where('date', $date)->where('spk', $value)->where('police_number', $request->police_number)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first(); if($check) { $error_work .= $check->work->name.', '; } } if($error_work) { $fail('SPK ini sudah digunakan untuk pekerjaan '. $error_work .' sebelumnya'); } }], 'police_number' => ['required', function($attribute, $value, $fail) use($request) { $date = $request->date; $error_work = ''; foreach($request->work_id as $work_id) { $check = Transaction::with(['work'])->where('work_id', $work_id)->where('date', $date)->where('spk', $request->spk_no)->where('police_number', $value)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first(); if($check) { $error_work .= $check->work->name.', '; } } if($error_work) { $fail('No Polisi ini sudah digunakan untuk pekerjaan '. $error_work .' sebelumnya'); } }], 'warranty' => ['required'], 'date' => ['required', function($attribute, $value, $fail) use($request) { $date = $request->date; $error_work = ''; foreach($request->work_id as $work_id) { $check = Transaction::with(['work'])->where('work_id', $work_id)->where('date', $date)->where('spk', $request->spk_no)->where('police_number', $request->police_number)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first(); if($check) { $error_work .= $check->work->name.', '; } } if($error_work) { $fail('Tanggal ini sudah digunakan untuk pekerjaan '. $error_work .' sebelumnya'); } }], 'user_sa_id' => ['required', 'integer'], ]); if($validation->fails()) { return response()->json([ 'message' => 'Save work failed', 'data' => $validation->errors(), 'status' => false, 'code' => 400 ], 400); } $data = []; for($i = 0; $i < count($request->work_id); $i++) { $data[] = [ "user_id" => Auth::user()->id, "dealer_id" => Auth::user()->dealer_id, "form" => 'work', "work_id" => $request->work_id[$i], "qty" => $request->quantity[$i], "spk" => $request->spk_no, "police_number" => $request->police_number, "warranty" => $request->warranty, "user_sa_id" => $request->user_sa_id, "date" => $request->date, "created_at" => date('Y-m-d H:i:s') ]; } Transaction::insert($data); return response()->json([ 'message' => 'Successfully Add Works', 'data' => $data, 'status' => true, 'code' => 200 ], 200); } public function spk_cuci(Request $request) { $wash_work = Work::leftJoin('categories as c', 'c.id', '=', 'works.category_id')->select('c.name as category_name', 'works.*')->where('c.name', 'LIKE', '%cuci%')->first(); $validation = Validator::make($request->all(), [ 'spk_no' => ['required', function($attribute, $value, $fail) use($request, $wash_work) { $date = $request->date; $check = Transaction::with(['work'])->where('work_id', $wash_work->id)->where('date', $date)->where('spk', $value)->where('police_number', $request->police_number)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first(); if($check) { $fail('SPK ini sudah digunakan untuk pekerjaan '.$check->work->name .' sebelumnya'); } }], 'police_number' => ['required', function($attribute, $value, $fail) use($request, $wash_work) { $date = $request->date; $check = Transaction::with(['work'])->where('work_id', $wash_work->id)->where('date', $date)->where('spk', $request->spk_no)->where('police_number', $value)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first(); if($check) { $fail('No Polisi ini sudah digunakan untuk pekerjaan '. $check->work->name .' sebelumnya'); } }], 'warranty' => ['required'], 'date' => ['required', function($attribute, $value, $fail) use($request, $wash_work) { $date = $request->date; $check = Transaction::with(['work'])->where('work_id', $wash_work->id)->where('date', $date)->where('spk', $request->spk_no)->where('police_number', $request->police_number)->orderBy('id', 'DESC')->whereDate('created_at', date('Y-m-d'))->limit(1)->first(); if($check) { $fail('Tanggal ini sudah digunakan untuk pekerjaan '. $check->work->name .' sebelumnya'); } }], 'user_sa_id' => ['required', 'integer'], ]); if($validation->fails()) { return response()->json([ 'message' => 'Save work failed', 'data' => $validation->errors(), 'status' => false, 'code' => 400 ], 400); } $data = Transaction::create([ "user_id" => Auth::user()->id, "dealer_id" => Auth::user()->dealer_id, "form" => 'wash', "work_id" => $wash_work->id, "qty" => 1, "spk" => $request->spk_no, "police_number" => $request->police_number, "warranty" => $request->warranty, "user_sa_id" => $request->user_sa_id, "date" => $request->date ]); return response()->json([ 'message' => 'Successfully Add Works', 'data' => $data, 'status' => true, 'code' => 200 ], 200); } }