'I', 2 => 'II', 3 => 'III', 4 => 'IV', 5 => 'V', 6 => 'VI', 7 => 'VII', 8 => 'VIII', 9 => 'IX', 10 => 'X', 11 => 'XI', 12 => 'XII'); return $ro[(int) $num]; } else { dd('jumlah bulan hanya ada 12'); } } public function index() { if (!Auth::user()->curr_siteproject) { return redirect()->back()->with('error', 'silahkan isi site project anda terlebih dahulu'); } $project = Project::whereHas('purchase_request.purchaseOrder')->get(); $user = User::whereHas('purchaseOrder')->get(); return view('staff.purchase-order',compact('pos', 'project', 'user')); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { if (!Auth::user()->curr_siteproject) { return redirect()->back()->with('error', 'silahkan isi site project anda terlebih dahulu'); } $no_po = PurchaseOrder::orderBy('po_number', 'DESC') ->where('id_site_project', Auth::user()->curr_siteproject)->first(); if (!$no_po) { $no_po = 'BD-001/PO-' . Auth::user()->siteProject->code . '/' . $this->bulantoRomawi(date('m')) . '/' . date('Y'); } else { $no_po = explode('/', $no_po->po_number)[0]; $no_po = (int) substr($no_po, -3) + 1; $no_po = 'BD-' . sprintf('%03s', $no_po) . '/PO-' . Auth::user()->siteProject->code . '/' . $this->bulantoRomawi(date('m')) . '/' . date('Y'); } $no_po = strtoupper($no_po); $suplayers = Suplayer::all(); $projects = Project::all(); $prs = PurchaseRequest::whereHas('purchaseRequestDetail',function($q){ $q->whereDoesntHave('purchaseOrderDetail'); })->where('status','approve')->get(); return view('staff.purchase-order-create',compact('suplayers','prs','no_po','projects')); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { DB::statement(' SET FOREIGN_KEY_CHECKS=0'); $no_po = PurchaseOrder::orderBy('po_number', 'DESC') ->where('id_site_project', Auth::user()->curr_siteproject)->first(); if (!$no_po) { $no_po = 'BD-001/PO-' . Auth::user()->siteProject->code . '/' . $this->bulantoRomawi(date('m')) . '/' . date('Y'); } else { $no_po = explode('/', $no_po->po_number)[0]; $no_po = (int) substr($no_po, -3) + 1; $no_po = 'BD-' . sprintf('%03s', $no_po) . '/PO-' . Auth::user()->siteProject->code . '/' . $this->bulantoRomawi(date('m')) . '/' . date('Y'); } $no_po = strtoupper($no_po); $po = PurchaseOrder::create([ 'po_number' => $no_po, 'id_suplayer' => $request->suplayer, 'tanggal' => $request->date, 'tanggal_pengiriman' => $request->tanggal_pengiriman, 'revisi' => $request->revisi, 'id_purchase_request' => $request->pr, 'payment_system' => $request->payment_system, 'term' => $request->term, 'id_user' => Auth::user()->id, 'id_site_project' => Auth::user()->curr_siteproject, 'status' => $request->melebihi_anggaran?'melebihi anggaran':'draft', ]); if ($po) { if ($request->id_crap_m) { foreach ($request->id_crap_m as $key => $value) { $poD = PurchaseOrderDetail::create([ 'id_purchase_order' => $po->id, 'id_crap' => $value, 'id_purchase_request_detail' => $request->id_prdetail_m[$key], 'harga' => str_replace('.','',$request->harga_m[$key]), 'harga_terbayar' => str_replace('.','',$request->harga_m[$key]), ]); if($request->toArray()[$value.'_ahs']){ $qty = 0; foreach ($request->toArray()[$value.'_ahs'] as $key2 => $value2) { $qty += str_replace(',', '.',$request->toArray()[$value.'_qty'][$key2]); $poDP = PurchaseOrderDetailPekerjaan::create([ 'id_purchase_detail' => $poD->id, 'id_ahs' => $value2, 'qty' => str_replace(',', '.', $request->toArray()[$value.'_qty'][$key2]), 'qty_billed' => str_replace(',', '.', $request->toArray()[$value.'_qty'][$key2]), ]); } $poD->qty = $qty; $poD->qty_billed = $qty; $poD->save(); } } } if ($request->id_crap_v) { foreach ($request->id_crap_v as $key => $value) { $poD = PurchaseOrderDetail::create([ 'id_purchase_order' => $po->id, 'id_purchase_request_detail' => $request->id_prdetail_v[$key], 'id_crap' => $value, 'harga' => str_replace('.','',$request->harga_v[$key]), 'harga_terbayar' => str_replace('.','',$request->harga_v[$key]), 'qty' => str_replace(',', '.',$request->qty_v[$key]), 'qty_billed' => str_replace(',', '.',$request->qty_v[$key]), ]); } } if ($request->id_item_manual) { foreach ($request->id_item_manual as $key => $value) { PurchaseOrderDetailManual::create([ 'id_po' => $po->id, 'id_pr_manual' => $value, 'qty_billed' => $request->qty_item_manual[$key], 'harga_terbayar' => $request->harga_item_manual[$key], ]); } } } return redirect()->route('purchase_order.index')->with('msg','data berhasil ditambahkan'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public static function terbilang($nilai) { $huruf = array("", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan", "Sepuluh", "Sebelas"); $poC = new PurchaseOrderController; if($nilai==0){ return ""; }elseif ($nilai < 12&$nilai!=0) { return "" . $huruf[$nilai]; } elseif ($nilai < 20) { return $poC->terbilang($nilai - 10) . " Belas "; } elseif ($nilai < 100) { return $poC->terbilang($nilai / 10) . " Puluh " . $poC->terbilang($nilai % 10); } elseif ($nilai < 200) { return " Seratus " . $poC->terbilang($nilai - 100); } elseif ($nilai < 1000) { return $poC->terbilang($nilai / 100) . " Ratus " . $poC->terbilang($nilai % 100); } elseif ($nilai < 2000) { return " Seribu " . $poC->terbilang($nilai - 1000); } elseif ($nilai < 1000000) { return $poC->terbilang($nilai / 1000) . " Ribu " . $poC->terbilang($nilai % 1000); } elseif ($nilai < 1000000000) { return $poC->terbilang($nilai / 1000000) . " Juta " . $poC->terbilang($nilai % 1000000); }elseif ($nilai < 1000000000000) { return $poC->terbilang($nilai / 1000000000) . " Milyar " . $poC->terbilang($nilai % 1000000000); }elseif ($nilai < 100000000000000) { return $poC->terbilang($nilai / 1000000000000) . " Trilyun " . $poC->terbilang($nilai % 1000000000000); }elseif ($nilai <= 100000000000000) { return "Maaf Tidak Dapat di Prose Karena Jumlah nilai Terlalu Besar "; } } public static function cek_qty_anggaran($id_rab,$id_material,$id_ahs) { $pekerjaans = Ahs::join('rab_detail','ahs.id','rab_detail.id_ahs') ->select('ahs.id','ahs.nama_pekerjaan','rab_detail_materials.qty','materials.satuan') ->join('rab','rab_detail.id_rab','rab.id') ->join('rab_detail_materials','rab_detail.id','rab_detail_materials.id_rab_detail') ->join('materials','rab_detail_materials.id_material','materials.id') ->where('rab.id',$id_rab) ->where('materials.id',$id_material) ->where('ahs.id',$id_ahs) ->groupBy('ahs.id','ahs.nama_pekerjaan','rab_detail_materials.qty','materials.satuan') ->first(); return $pekerjaans->qty; } public function show(Request $request,$id) { if (isset($_GET['act']) and \Request::ajax()) { if ($_GET['act'] == 'prData') { $pr = PurchaseRequest::with('purchaseRequestDetailManual','project.supervisi','purchaseRequestDetail.pekerjaans','purchaseRequestDetail.pekerjaans.ahs','purchaseRequestDetail.pekerjaans.purchase_request_detail.crap','purchaseRequestDetail.crap','purchaseRequestDetail.crap.material','purchaseRequestDetail.crap.vendor') ->with(['purchaseRequestDetail' => function($q){ $q->whereDoesntHave('purchaseOrderDetail'); }])->with(['purchaseRequestDetailManual' => function($q){ $q->whereDoesntHave('purchase_order_detail_manual'); }])->findOrFail($id); return response()->json(['pr' => $pr]); }elseif ($_GET['act'] == 'loadPr') { $pr = PurchaseRequest::where(function($q){ $q->whereHas('purchaseRequestDetail',function($q2){ $q2->whereDoesntHave('purchaseOrderDetail'); })->orWhereHas('purchaseRequestDetailManual',function($q2){ $q2->whereDoesntHave('purchase_order_detail_manual'); }); })->where([ ['status','approve'], ['id_project',$id], ])->get(); return response()->json(['pr' => $pr]); }elseif ($_GET['act'] == 'suplayerData') { $suplayer = Suplayer::findOrFail($id); return response()->json(['suplayer' => $suplayer]); }elseif ($_GET['act'] == 'poData') { $columns = array( 0 => 'id', 1 => 'id', 2 => 'tanggal', 8 => 'status', ); $level = Auth::user()->level; if (strtoupper($level) == 'SUPERADMIN' || strtoupper($level) == 'GENERAL MANAGER' || strtoupper($level) == 'FINANCE MANAGER' || strtoupper($level) == 'SUPPLY CHAIN MANAGER' || strtoupper($level) == 'MARKETING MANAGER' || strtoupper($level) == 'PROJECT MANAGER' || strtoupper($level) == 'SUPPLY CHAIN STAFF') { if($_GET['project'] != '' || $_GET['status'] != '' || $_GET['user'] != '' || $_GET['time'] != '' || $_GET['interval_1'] != '') { $totalData = PurchaseOrder::whereHas('purchaseRequest', function($q) { if($_GET['project'] != '') { $q->where('purchase_request.id_project', $_GET['project']); } }) ->where(function($query) { $filter = []; if($_GET['status'] != '') { $filter[] = ['status', $_GET['status']]; } if($_GET['user'] != '') { $filter[] = ['id_user', $_GET['user']]; } if($_GET['time'] != '') { if($_GET['time'] == 'this-month') { $bulan = date('m'); $tahun = date('Y'); $jml_hari = date('t', mktime(0, 0, 0, $bulan+1, 0, $tahun)); $filter[] = ['tanggal', '>=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-01'))]; $filter[] = ['tanggal', '<=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-'. $jml_hari))]; } elseif ($_GET['time'] == 'last-week') { $previous_week = strtotime("-1 week +1 day"); $start_week = strtotime("last sunday midnight",$previous_week); $end_week = strtotime("next saturday",$start_week); $start_week = date("Y-m-d",$start_week); $end_week = date("Y-m-d",$end_week); $filter[] = ['tanggal', '>=', $start_week]; $filter[] = ['tanggal', '<=', $end_week]; } elseif($_GET['time'] == 'last-month') { $first_day = date("Y-m-d", strtotime("first day of previous month")); $last_day = date("Y-m-d", strtotime("last day of previous month")); $filter[] = ['tanggal', '>=', $first_day]; $filter[] = ['tanggal', '<=', $last_day]; } elseif($_GET['time'] == 'interval') { $first_date = date('Y-m-d', strtotime($_GET['interval_1'])); $end_date = date('Y-m-d', strtotime($_GET['interval_2'])); $filter[] = ['tanggal', '>=', $first_date]; $filter[] = ['tanggal', '<=', $end_date]; } } return $query->where($filter); }) ->count(); } else { $totalData = PurchaseOrder::count(); } $totalFiltered = $totalData; $limit = $request->input('length'); $start = $request->input('start'); $order = $columns[$request->input('order.0.column')]; $dir = $request->input('order.0.dir'); if (empty($request->input('search.value'))) { if($_GET['project'] != '' || $_GET['status'] != '' || $_GET['user'] != '' || $_GET['time'] != '' || $_GET['interval_1'] != '') { $poS = PurchaseOrder::whereHas('purchaseRequest', function($q) { if($_GET['project'] != '') { $q->where('purchase_request.id_project', $_GET['project']); } }) ->where(function($query) { $filter = []; if($_GET['status'] != '') { $filter[] = ['status', $_GET['status']]; } if($_GET['user'] != '') { $filter[] = ['id_user', $_GET['user']]; } if($_GET['time'] != '') { if($_GET['time'] == 'this-month') { $bulan = date('m'); $tahun = date('Y'); $jml_hari = date('t', mktime(0, 0, 0, $bulan+1, 0, $tahun)); $filter[] = ['tanggal', '>=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-01'))]; $filter[] = ['tanggal', '<=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-' . $jml_hari))]; } elseif ($_GET['time'] == 'last-week') { $previous_week = strtotime("-1 week +1 day"); $start_week = strtotime("last sunday midnight",$previous_week); $end_week = strtotime("next saturday",$start_week); $start_week = date("Y-m-d",$start_week); $end_week = date("Y-m-d",$end_week); $filter[] = ['tanggal', '>=', $start_week]; $filter[] = ['tanggal', '<=', $end_week]; } elseif($_GET['time'] == 'last-month') { $first_day = date("Y-m-d", strtotime("first day of previous month")); $last_day = date("Y-m-d", strtotime("last day of previous month")); $filter[] = ['tanggal', '>=', $first_day]; $filter[] = ['tanggal', '<=', $last_day]; } elseif($_GET['time'] == 'interval') { $first_date = date('Y-m-d', strtotime($_GET['interval_1'])); $end_date = date('Y-m-d', strtotime($_GET['interval_2'])); $filter[] = ['tanggal', '>=', $first_date]; $filter[] = ['tanggal', '<=', $end_date]; } } return $query->where($filter); }) ->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); } else { $poS = PurchaseOrder::offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); } }else{ $search = $request->input('search.value'); if($_GET['project'] != '' || $_GET['status'] != '' || $_GET['user'] != '' || $_GET['time'] != '' || $_GET['interval_1'] != '') { $poS = PurchaseOrder::whereHas('purchaseRequest.project',function($q) use ($search){ if($_GET['project'] != '') { $q->where([['projects.name','LIKE', "%{$search}%"],['id', $_GET['project']]]); } else { $q->where('projects.name','LIKE', "%{$search}%"); } })->orWhereHas('suplayer',function($q) use ($search){ $q->where('suplayers.name','LIKE', "%{$search}%"); }) ->where(function($query) { $filter = []; if($_GET['status'] != '') { $filter[] = ['status', $_GET['status']]; } if($_GET['user'] != '') { $filter[] = ['id_user', $_GET['user']]; } if($_GET['time'] != '') { if($_GET['time'] == 'this-month') { $bulan = date('m'); $tahun = date('Y'); $jml_hari = date('t', mktime(0, 0, 0, $bulan+1, 0, $tahun)); $filter[] = ['tanggal', '>=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-01'))]; $filter[] = ['tanggal', '<=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-' . $jml_hari))]; } elseif ($_GET['time'] == 'last-week') { $previous_week = strtotime("-1 week +1 day"); $start_week = strtotime("last sunday midnight",$previous_week); $end_week = strtotime("next saturday",$start_week); $start_week = date("Y-m-d",$start_week); $end_week = date("Y-m-d",$end_week); $filter[] = ['tanggal', '>=', $start_week]; $filter[] = ['tanggal', '<=', $end_week]; } elseif($_GET['time'] == 'last-month') { $first_day = date("Y-m-d", strtotime("first day of previous month")); $last_day = date("Y-m-d", strtotime("last day of previous month")); $filter[] = ['tanggal', '>=', $first_day]; $filter[] = ['tanggal', '<=', $last_day]; } elseif($_GET['time'] == 'interval') { $first_date = date('Y-m-d', strtotime($_GET['interval_1'])); $end_date = date('Y-m-d', strtotime($_GET['interval_2'])); $filter[] = ['tanggal', '>=', $first_date]; $filter[] = ['tanggal', '<=', $end_date]; } } return $query->where($filter); }) ->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); $totalFiltered = PurchaseOrder::whereHas('purchaseRequest.project',function($q) use ($search){ if($_GET['project'] != '') { $q->where([['projects.name','LIKE', "%{$search}%"],['id_project', $_GET['project']]]); } else { $q->where('projects.name','LIKE', "%{$search}%"); } })->orWhereHas('suplayer',function($q) use ($search){ $q->where('suplayers.name','LIKE', "%{$search}%"); }) ->where(function($query) { $filter = []; if($_GET['status'] != '') { $filter[] = ['status', $_GET['status']]; } if($_GET['user'] != '') { $filter[] = ['id_user', $_GET['user']]; } if($_GET['time'] != '') { if($_GET['time'] == 'this-month') { $bulan = date('m'); $tahun = date('Y'); $jml_hari = date('t', mktime(0, 0, 0, $bulan+1, 0, $tahun)); $filter[] = ['tanggal', '>=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-01'))]; $filter[] = ['tanggal', '<=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-' . $jml_hari))]; } elseif ($_GET['time'] == 'last-week') { $previous_week = strtotime("-1 week +1 day"); $start_week = strtotime("last sunday midnight",$previous_week); $end_week = strtotime("next saturday",$start_week); $start_week = date("Y-m-d",$start_week); $end_week = date("Y-m-d",$end_week); $filter[] = ['tanggal', '>=', $start_week]; $filter[] = ['tanggal', '<=', $end_week]; } elseif($_GET['time'] == 'last-month') { $first_day = date("Y-m-d", strtotime("first day of previous month")); $last_day = date("Y-m-d", strtotime("last day of previous month")); $filter[] = ['tanggal', '>=', $first_day]; $filter[] = ['tanggal', '<=', $last_day]; } elseif($_GET['time'] == 'interval') { $first_date = date('Y-m-d', strtotime($_GET['interval_1'])); $end_date = date('Y-m-d', strtotime($_GET['interval_2'])); $filter[] = ['tanggal', '>=', $first_date]; $filter[] = ['tanggal', '<=', $end_date]; } } return $query->where($filter); }) ->count(); } else { $poS = PurchaseOrder::whereHas('purchaseRequest.project',function($q) use ($search){ $q->where('projects.name','LIKE', "%{$search}%"); })->orWhereHas('suplayer',function($q) use ($search){ $q->where('suplayers.name','LIKE', "%{$search}%"); }) ->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); $totalFiltered = PurchaseOrder::whereHas('purchaseRequest.project',function($q) use ($search){ $q->where('projects.name','LIKE', "%{$search}%"); })->orWhereHas('suplayer',function($q) use ($search){ $q->where('suplayers.name','LIKE', "%{$search}%"); }) ->count(); } } } else { if($_GET['project'] != '' || $_GET['status'] != '' || $_GET['user'] != '' || $_GET['time'] != '' || $_GET['interval_1'] != '') { $totalData = PurchaseOrder::whereHas('purchaseRequest', function($q) { if($_GET['project'] != '') { $q->where('purchase_request.id_project', $_GET['project']); } }) ->where(function($query) { $filter = []; if($_GET['status'] != '') { $filter[] = ['status', $_GET['status']]; } if($_GET['user'] != '') { $filter[] = ['id_user', $_GET['user']]; } if($_GET['time'] != '') { if($_GET['time'] == 'this-month') { $bulan = date('m'); $tahun = date('Y'); $jml_hari = date('t', mktime(0, 0, 0, $bulan+1, 0, $tahun)); $filter[] = ['tanggal', '>=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-01'))]; $filter[] = ['tanggal', '<=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-'. $jml_hari))]; } elseif ($_GET['time'] == 'last-week') { $previous_week = strtotime("-1 week +1 day"); $start_week = strtotime("last sunday midnight",$previous_week); $end_week = strtotime("next saturday",$start_week); $start_week = date("Y-m-d",$start_week); $end_week = date("Y-m-d",$end_week); $filter[] = ['tanggal', '>=', $start_week]; $filter[] = ['tanggal', '<=', $end_week]; } elseif($_GET['time'] == 'last-month') { $first_day = date("Y-m-d", strtotime("first day of previous month")); $last_day = date("Y-m-d", strtotime("last day of previous month")); $filter[] = ['tanggal', '>=', $first_day]; $filter[] = ['tanggal', '<=', $last_day]; } elseif($_GET['time'] == 'interval') { $first_date = date('Y-m-d', strtotime($_GET['interval_1'])); $end_date = date('Y-m-d', strtotime($_GET['interval_2'])); $filter[] = ['tanggal', '>=', $first_date]; $filter[] = ['tanggal', '<=', $end_date]; } } $filter[] = ['id_user', Auth::user()->id]; return $query->where($filter); }) ->count(); } else { $totalData = PurchaseOrder::where('id_user', Auth::user()->id)->count(); } $totalFiltered = $totalData; $limit = $request->input('length'); $start = $request->input('start'); $order = $columns[$request->input('order.0.column')]; $dir = $request->input('order.0.dir'); if (empty($request->input('search.value'))) { if($_GET['project'] != '' || $_GET['status'] != '' || $_GET['user'] != '' || $_GET['time'] != '' || $_GET['interval_1'] != '') { $poS = PurchaseOrder::whereHas('purchaseRequest', function($q) { if($_GET['project'] != '') { $q->where('purchase_request.id_project', $_GET['project']); } }) ->where(function($query) { $filter = []; if($_GET['status'] != '') { $filter[] = ['status', $_GET['status']]; } if($_GET['user'] != '') { $filter[] = ['id_user', $_GET['user']]; } if($_GET['time'] != '') { if($_GET['time'] == 'this-month') { $bulan = date('m'); $tahun = date('Y'); $jml_hari = date('t', mktime(0, 0, 0, $bulan+1, 0, $tahun)); $filter[] = ['tanggal', '>=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-01'))]; $filter[] = ['tanggal', '<=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-' . $jml_hari))]; } elseif ($_GET['time'] == 'last-week') { $previous_week = strtotime("-1 week +1 day"); $start_week = strtotime("last sunday midnight",$previous_week); $end_week = strtotime("next saturday",$start_week); $start_week = date("Y-m-d",$start_week); $end_week = date("Y-m-d",$end_week); $filter[] = ['tanggal', '>=', $start_week]; $filter[] = ['tanggal', '<=', $end_week]; } elseif($_GET['time'] == 'last-month') { $first_day = date("Y-m-d", strtotime("first day of previous month")); $last_day = date("Y-m-d", strtotime("last day of previous month")); $filter[] = ['tanggal', '>=', $first_day]; $filter[] = ['tanggal', '<=', $last_day]; } elseif($_GET['time'] == 'interval') { $first_date = date('Y-m-d', strtotime($_GET['interval_1'])); $end_date = date('Y-m-d', strtotime($_GET['interval_2'])); $filter[] = ['tanggal', '>=', $first_date]; $filter[] = ['tanggal', '<=', $end_date]; } } $filter[] = ['id_user', Auth::user()->id]; return $query->where($filter); }) ->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); } else { $poS = PurchaseOrder::where('id_user', Auth::user()->id) ->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); } }else{ $search = $request->input('search.value'); if($_GET['project'] != '' || $_GET['status'] != '' || $_GET['user'] != '' || $_GET['time'] != '' || $_GET['interval_1'] != '') { $poS = PurchaseOrder::whereHas('purchaseRequest.project',function($q) use ($search){ if($_GET['project'] != '') { $q->where([['name','LIKE', "%{$search}%"],['id', $_GET['project']]]); } else { $q->where('name','LIKE', "%{$search}%"); } })->orWhereHas('suplayer',function($q) use ($search){ $q->where('name','LIKE', "%{$search}%"); }) ->where(function($query) { $filter = []; if($_GET['status'] != '') { $filter[] = ['status', $_GET['status']]; } if($_GET['user'] != '') { $filter[] = ['id_user', $_GET['user']]; } if($_GET['time'] != '') { if($_GET['time'] == 'this-month') { $bulan = date('m'); $tahun = date('Y'); $jml_hari = date('t', mktime(0, 0, 0, $bulan+1, 0, $tahun)); $filter[] = ['tanggal', '>=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-01'))]; $filter[] = ['tanggal', '<=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-' . $jml_hari))]; } elseif ($_GET['time'] == 'last-week') { $previous_week = strtotime("-1 week +1 day"); $start_week = strtotime("last sunday midnight",$previous_week); $end_week = strtotime("next saturday",$start_week); $start_week = date("Y-m-d",$start_week); $end_week = date("Y-m-d",$end_week); $filter[] = ['tanggal', '>=', $start_week]; $filter[] = ['tanggal', '<=', $end_week]; } elseif($_GET['time'] == 'last-month') { $first_day = date("Y-m-d", strtotime("first day of previous month")); $last_day = date("Y-m-d", strtotime("last day of previous month")); $filter[] = ['tanggal', '>=', $first_day]; $filter[] = ['tanggal', '<=', $last_day]; } elseif($_GET['time'] == 'interval') { $first_date = date('Y-m-d', strtotime($_GET['interval_1'])); $end_date = date('Y-m-d', strtotime($_GET['interval_2'])); $filter[] = ['tanggal', '>=', $first_date]; $filter[] = ['tanggal', '<=', $end_date]; } } $filter[] = ['id_user', Auth::user()->id]; return $query->where($filter); }) ->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); $totalFiltered = PurchaseOrder::whereHas('purchaseRequest.project',function($q) use ($search){ if($_GET['project'] != '') { $q->where([['name','LIKE', "%{$search}%"],['id', $_GET['project']]]); } else { $q->where('name','LIKE', "%{$search}%"); } })->orWhereHas('suplayer',function($q) use ($search){ $q->where('suplayers.name','LIKE', "%{$search}%"); }) ->where(function($query) { $filter = []; if($_GET['status'] != '') { $filter[] = ['status', $_GET['status']]; } if($_GET['user'] != '') { $filter[] = ['id_user', $_GET['user']]; } if($_GET['time'] != '') { if($_GET['time'] == 'this-month') { $bulan = date('m'); $tahun = date('Y'); $jml_hari = date('t', mktime(0, 0, 0, $bulan+1, 0, $tahun)); $filter[] = ['tanggal', '>=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-01'))]; $filter[] = ['tanggal', '<=', date('Y-m-d', strtotime($tahun . '-' . $bulan . '-' . $jml_hari))]; } elseif ($_GET['time'] == 'last-week') { $previous_week = strtotime("-1 week +1 day"); $start_week = strtotime("last sunday midnight",$previous_week); $end_week = strtotime("next saturday",$start_week); $start_week = date("Y-m-d",$start_week); $end_week = date("Y-m-d",$end_week); $filter[] = ['tanggal', '>=', $start_week]; $filter[] = ['tanggal', '<=', $end_week]; } elseif($_GET['time'] == 'last-month') { $first_day = date("Y-m-d", strtotime("first day of previous month")); $last_day = date("Y-m-d", strtotime("last day of previous month")); $filter[] = ['tanggal', '>=', $first_day]; $filter[] = ['tanggal', '<=', $last_day]; } elseif($_GET['time'] == 'interval') { $first_date = date('Y-m-d', strtotime($_GET['interval_1'])); $end_date = date('Y-m-d', strtotime($_GET['interval_2'])); $filter[] = ['tanggal', '>=', $first_date]; $filter[] = ['tanggal', '<=', $end_date]; } } $filter[] = ['id_user', Auth::user()->id]; return $query->where($filter); }) ->count(); } else { $poS = PurchaseOrder::whereHas('purchaseRequest.project',function($q) use ($search){ $q->where('projects.name','LIKE', "%{$search}%"); })->orWhereHas('suplayer',function($q) use ($search){ $q->where('suplayers.name','LIKE', "%{$search}%"); }) ->where('id_user', Auth::user()->id) ->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); $totalFiltered = PurchaseOrder::whereHas('purchaseRequest.project',function($q) use ($search){ $q->where('projects.name','LIKE', "%{$search}%"); })->orWhereHas('suplayer',function($q) use ($search){ $q->where('suplayers.name','LIKE', "%{$search}%"); }) ->where('id_user', Auth::user()->id) ->count(); } } } $data = array(); if (!empty($poS) && $poS->count() > 0) { foreach ($poS as $row) { $nestedData['no_po'] = $row->po_number; $nestedData['tanggal'] = $row->tanggal; $nestedData['tanggal_pengiriman'] = $row->tanggal_pengiriman; $nestedData['revisi'] = $row->revisi; $nestedData['ref_pr'] = $row->purchaseRequest->no_pr; $nestedData['vendor'] = $row->suplayer->name; $nestedData['project'] = $row->purchaseRequest->project?$row->purchaseRequest->project->name:'-'; $nestedData['status'] = $row->status; $nestedData['created_by'] = $row->user->fullname; $nestedData['opsi'] = "
"; if (RoleController::access('po', 'edit') > 0 && ($row->status == 'draft' and $row->status != 'melebihi anggaran' and $row->status != 'minta approve')) { $nestedData['opsi'] .= "
" . csrf_field() . " " . method_field('put') . "
"; } if ($row->status == 'melebihi anggaran'){ $nestedData['opsi'] .= "
" . csrf_field() . " " . method_field('put') . "
"; } if(RoleController::access('po', 'view') > 0) { $nestedData['opsi'] .= " detail Print "; } if(RoleController::access('po', 'delete') > 0 && $row->status == 'non-approve'){ $nestedData['opsi'] .= "
" . csrf_field() . " " . method_field('delete') . "
"; } else if(Auth::user()->level == 'SUPERADMIN') { $nestedData['opsi'] .= "
" . csrf_field() . " " . method_field('delete') . "
"; } if($row->status != 'billed' and $row->status != 'closed' and $row->status != 'open'){ $nestedData['opsi'] .= " edit "; } $nestedData['opsi'] .= "
"; $data[] = $nestedData; } } $json_data = array( "draw" => intval($request->input('draw')), "recordsTotal" => intval($totalData), "recordsFiltered" => intval($totalFiltered), "data" => $data, ); echo json_encode($json_data); }else{ abort('404'); } }else{ if (isset($_GET['act'])) { if ($_GET['act'] == 'print') { $po = PurchaseOrder::findOrFail($id); $suplay_chain = User::where('level','SUPPLY CHAIN MANAGER')->first(); $project_manager = User::where('level','PROJECT MANAGER')->first(); $company = Company::all()->first(); $pdf = PDF::loadView('staff.purchase-order-print',compact('po','suplay_chain','project_manager', 'company'))->setPaper('a4')->output('po-'.$po->po_number.'.pdf'); return Response::make($pdf,200,[ 'Content-Disposition' => 'inline; filename=\"po-'.$po->po_number.'.pdf\"', 'Content-Type' => 'application/pdf', ]); }else{ abort('404'); } }else{ $po = PurchaseOrder::findOrFail($id); return view('staff.purchase-order-detail',compact('po')); } } } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit(Request $request,$id) { if ($request->act == 'bill') { $po = PurchaseOrder::findOrFail($id); return view('staff.purchase-order-convert_bill',compact('po')); }elseif ($request->act == 'payment') { $po = PurchaseOrder::findOrFail($id); $banks = Bank::all(); return view('staff.purchase-order-record_payment',compact('po','banks')); }else{ $po = PurchaseOrder::findOrFail($id); if($po->status != 'billed' and $po->status != 'closed' and $po->status != 'open'){ $suplayers = Suplayer::all(); return view('staff.purchase-order-edit',compact('po','suplayers')); }else{ return redirect()->route('purchase-order.show',$id)->with('msg','po sudah tidak bisa diedit lagi'); } } } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { DB::statement(' SET FOREIGN_KEY_CHECKS=0'); if ($request->act == 'edit-item') { $poD = PurchaseOrderDetail::findOrFail($id); if ($request->harga_terbayar) { $poD->harga_terbayar = preg_replace('/[^0-9]/', '', $request->harga_terbayar); } if ($request->qty_vendor) { $poD->qty_billed = $request->qty_vendor; $poD->save(); }else{ if ($request->ahs) { $qty_billed = 0; foreach ($request->ahs as $key => $value) { $poAHS = PurchaseOrderDetailPekerjaan::where([['id_purchase_detail',$id],['id_ahs',$value]])->first(); $poAHS->qty_billed = str_replace(',', '.', $request->qty[$key]); $poAHS->save(); $qty_billed += str_replace(',', '.', $request->qty[$key]); } $poD->qty_billed = $qty_billed; } } $poD->save(); if ($request->redirect) { return redirect($request->redirect) ->with('last_id',$request->last_id) ->with('last_bill',$request->bill) ->with('last_date',$request->date) ->with('last_duedate',$request->due_date) ->with('msg','data berhasil diubah'); }else{ return redirect()->route('purchase_order.edit',$poD->id_purchase_order) ->with('last_bill',$request->bill) ->with('last_date',$request->date) ->with('last_duedate',$request->due_date) ->with('msg','data berhasil diubah'); } }elseif ($request->act == 'edit-item-manual') { $poD = PurchaseOrderDetailManual::findOrFail($id); $poD->harga_terbayar = preg_replace('/[^0-9]/', '', $request->harga_terbayar); $poD->qty_billed = $request->qty_manual; $poD->save(); if ($request->redirect) { return redirect($request->redirect) ->with('last_id',$request->last_id) ->with('last_bill',$request->bill) ->with('last_date',$request->date) ->with('last_duedate',$request->due_date) ->with('msg','data berhasil diubah'); }else{ return redirect(route('purchase_order.edit',$poD->id_po).'?act=bill') ->with('last_bill',$request->bill) ->with('last_date',$request->date) ->with('last_duedate',$request->due_date) ->with('msg','data berhasil diubah'); } }elseif($request->act == 'approve-po'){ $po = PurchaseOrder::findOrFail($id); $po->status = 'open'; $po->save(); return redirect()->route('purchase_order.index')->with('msg','status PO berhasil diubah'); }elseif($request->act == 'minta-approve'){ $po = PurchaseOrder::findOrFail($id); $po->status = 'minta approve'; $po->save(); return redirect()->route('purchase_order.index')->with('msg','Berhasil meminta approve'); }elseif($request->act == 'approve-melebihi-anggaran'){ $po = PurchaseOrder::findOrFail($id); $po->status = 'draft'; $po->save(); return redirect()->route('purchase_order.index')->with('msg','PO berhasil di approve'); }else{ $purchase_order = PurchaseOrder::findOrFail($id); $purchase_order->id_suplayer = $request->suplayer; $purchase_order->revisi = $request->revisi; $purchase_order->tanggal = $request->date; $purchase_order->tanggal_pengiriman = $request->tanggal_pengiriman; $purchase_order->payment_system = $request->payment_system; $purchase_order->term = $request->term; if ($request->melebihi_anggaran) { $purchase_order->status = 'melebihi anggaran'; }else{ $purchase_order->status = 'draft'; } $purchase_order->save(); if ($request->detail) { foreach ($request->detail as $key => $value) { $pod = PurchaseOrderDetail::where('id',$value)->first(); if ($pod) { $pod->harga = str_replace('.', '', $request->harga[$key]); $pod->harga_terbayar = str_replace('.', '', $request->harga[$key]); $pod->save(); } } } if ($request->pekerjaan) { foreach ($request->pekerjaan as $key => $value) { $pod = PurchaseOrderDetailPekerjaan::where('id',$value)->first(); if ($pod) { $pod->qty = str_replace(',', '.', $request->qty[$key]); $pod->qty_billed = str_replace(',', '.', $request->qty[$key]); $pod->save(); } } } if ($request->removed_item) { foreach ($request->removed_item as $key => $value) { PurchaseOrderDetailManual::destroy($value); } } return redirect()->route('purchase_order.edit',$id)->with('msg','data berhasil diperbarui'); } } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy(Request $request,$id) { if ($request->act == 'deletePO') { PurchaseOrder::destroy($id); return redirect()->route('purchase_order.index')->with('msg','data berhasil dihapus'); } } }