/
home
/
sjslayjy
/
public_html
/
tabson
/
app
/
Http
/
Controllers
/
Upload File
HOME
<?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth; use App\Item; use App\BillOfMaterial; use DB; use Facade\FlareClient\View; use Illuminate\Http\Request; use Mail; use Maatwebsite\Excel\Facades\Excel; use App\Imports\ItemsImport; class BillOfMaterialController extends Controller { public function index(Request $request) { $data['circles']=\App\Circle::where('is_active',1)->get(); $data['customers']= DB::table('customers')->get(); $data['business_units']= DB::table('business_units')->where('is_active', 1)->get(); $data['departments']= DB::table('verticals')->get(); $data['verticals']= DB::table('department')->get(); //$data['projects']= DB::table('projects')->get(); $data['items']= DB::table('items')->where('is_active', 1)->get(); $data['user_id'] =Auth::user()->id; $data['user_name'] =Auth::user()->name; $data['project_categories']= DB::table('project_categories')->where('is_active', 1)->get(); $data['products']= DB::table('products')->where('is_active', 1)->get(); //dd($data['user_id']); return view('dashboard.bom.make-bom-request',$data); } public function searchBom(Request $request) { $data = ''; $search_text = $request->data; if($search_text != null) { $data = Item::where('code','LIKE', '%'.$search_text.'%') ->orWhere('description','LIKE', '%'.$search_text.'%') ->get(); } return response()->json($data); } public function getBomItem(Request $request) { $code = $request->code; // $response['item'] = Item::where('code', $code)->where('is_active',1)->get(); $response['item'] = Item::join('units','units.id','items.uom')->select('items.*','units.name as Uom')->where('items.code', $code)->where('items.is_active',1)->get(); //($response); return response()->json($response); } public function importBomItem(Request $request){ $data=[]; //dd($request->file()); $item =Excel::toArray(new ItemsImport,request()->file('file')); // dd($item); $n=0; $flase_count=0; // $data['not _match_qty']=null; foreach($item[0] as $key=>$value){ $all_items= DB::table('items')->where('is_active', 1)->where('code',$value['code'])->first(); if($all_items!=''){ $data['items'][$n]['id']=$all_items->id; $data['items'][$n]['code']=$value['code']; $data['items'][$n]['make']=$value['make']; $data['items'][$n]['specification']=$value['specification']; $data['items'][$n]['qty']=$value['qty']; $data['items'][$n]['rate']=$value['rate']; $data['items'][$n]['recomended']=$value['recomended']; $data['items'][$n]['remarks']=$value['remarks']; }else{ $data['not_match'][$flase_count]=$value['code']; $flase_count++; } $n++; } // dd($flase_count); if($flase_count>0){ $data['status']=false; $data['msg']='Excel Items Code not match,Please remove !!'; }else{ $data['status']=true; } //dd($data); // echo '<pre>'; // print_r($data); // exit; return response()->json($data); } public function excelBomGetItem(Request $request) { //dd($request->all()); $code = $request->code; $response['item'] = Item::join('units','units.id','items.uom')->select('items.*','units.name as Uom')->where('items.code', $code)->where('items.is_active',1)->get(); $response['make']=$request->make; $response['specification']=$request->specification; $response['qty']=$request->qty; $response['rate']=$request->rate; $response['recomended']=$request->recomended; $response['remarks']=$request->remarks; //dd($response); return response()->json($response); } public function addBillOfMaterial(Request $request){ $response = array(); $productName = \DB::table('products')->where('id', $request->product)->value('product_name'); $projectCategory = \DB::table('project_categories')->where('id', $request->project_category)->value('name'); $validator = \Validator::make($request->all(), array( 'document1' => 'mimes:pdf', ) ); if($validator->fails()) { $response['flag'] = false; $response['error'] = $validator->getMessageBag(); }else{ $billOfMaterial = new \App\BillOfMaterial(); $billOfMaterial->project_category = $projectCategory; $billOfMaterial->status = 'requested'; $billOfMaterial->current_status = 'processing'; $billOfMaterial->product_id = $productName; $billOfMaterial->project = $request->project; $billOfMaterial->requested_by = $request->requested_by; $billOfMaterial->version = $request->version; $billOfMaterial->bom_date = $request->bom_date; $billOfMaterial->business_unit = $request->business_unit; $billOfMaterial->bom_comment = $request->bom_comment; $billOfMaterial->prepared_by = \Auth::user()->id; $billOfMaterial->amendment_number = 0; //$billOfMaterial->document = $request->document; //document uplaod/// //dd($request->hasFile('document')); if($request->hasFile('document1')) { $filenameWithExt = $request->file('document1')->getClientOriginalName(); $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); $extension = $request->file('document1')->getClientOriginalExtension(); $fileNameToStore = $filename.'_'.time().'.'.$extension; $destinationPath = public_path().'/bom_document'; $path = $request->file('document1')->move($destinationPath, $fileNameToStore); $billOfMaterial->document1 = str_replace(public_path(), '', $path); } if($billOfMaterial->save()){ if(date('m') >= 4) { $session = date("y").(date("y")+1); } else { $session = (date("y")-1).date("y"); } $bom_series = \App\BillOfMaterial::where('session', $session)->orderBy('id', 'desc')->first(); if(!is_null($bom_series)) { $series = $bom_series->series + 1; } else { $series = 1; } switch (strlen((string)$series)) { case 1: $series = '000'.$series; break; case 2: $series = '00'.$series; break; case 3: $series = '0'.$series; break; default: $series = $series; } $billOfMaterial->bom_number = 'BOM/'.getTableById('business_units',$billOfMaterial->business_unit)->short_name."/".date('d/m/Y')."/".$series; $billOfMaterial->series = ($series*1); $billOfMaterial->session = $session; $billOfMaterial->save(); $bom_number=$billOfMaterial->bom_number; $items = json_decode($request->items, true); //dd($items); //Purchasr Request Item save foreach ($items as $key => $item){ $bill_of_material_items = new \App\BillOfMaterialItem(); $bill_of_material_items->bom_id = $billOfMaterial->id; $bill_of_material_items->item_code = $item['code']; $bill_of_material_items->qty = $item['qty']; $bill_of_material_items->rqty = $item['qty']; $bill_of_material_items->rate = $item['rate']; $bill_of_material_items->recomended = isset($item['recomended'])?($item['recomended']):''; $bill_of_material_items->remark = isset($item['remark'])?($item['remark']):''; $bill_of_material_items->make = isset($item['make'])?($item['make']):''; $bill_of_material_items->specification = isset($item['specification'])?($item['specification']):''; //$bill_of_material_items->recomended = $item['recomended']; //$bill_of_material_items->remark = $item['remark']; $bill_of_material_items->save(); } $billOfMaterialLog = new \App\BillOfMaterialLog(); $billOfMaterialLog->bom_id = $billOfMaterial->id; $billOfMaterialLog->user_id = \Auth::user()->id; $billOfMaterialLog->message ='create'; $billOfMaterialLog->save(); //send mails // $this->prMail($purchaseRequest->id); //dd($pr_number); $response['success'] = true; $response['msg'] = 'Bill Of Material Added Successfully !!'; $response['bom_number'] = $bom_number; }else{ $response['flag'] = false; $response['error'] = "Something Went Wrong"; } // dd($request->items); } return response()->json($response); } public function bomMail($bom_id){ $data['bill_of_material'] = \DB::table('bill_of_materials') ->join('users','users.id','bill_of_materials.prepared_by') ->join('customers','customers.id','bill_of_materials.customer') ->join('circles','circles.id','bill_of_materials.circle') ->join('business_units','business_units.id','bill_of_materials.business_unit') ->join('department','department.id','bill_of_materials.department') //->join('projects','projects.id','bill_of_materials.project') ->select('bill_of_materials.*','users.name as preparer','customers.name as cust_name','circles.name as circle_name','business_units.name as business_unit_name','department.name as department_name') ->where('bill_of_materials.id',$bom_id) ->first(); //dd($data); //dd($data['purchase_request']->prepared_by); $prepared_by_id=$data['bill_of_material']->prepared_by; $data['role_id'] =Auth::user()->role_id; $creater = \DB::table('users')->where('id',$prepared_by_id)->first(); $functional_head = \DB::table('users')->where('id',$creater->functional_head)->first(); //$data['fh']=$functional_head->name; //$business_head = \DB::table('users')->where('id',$creater->business_head)->first(); if($functional_head==null){ $data['fh']=''; }else{ $data['fh']=$functional_head->name; } $business_head = \DB::table('users')->where('id',$creater->business_head)->first(); if($business_head==null){ $data['bh']=''; }else{ $data['bh']=$business_head->name; } //$data['bh']=$business_head->name; $director = \DB::table('users')->where('id',$creater->director)->first(); $data['d']=$director->name; $bom_number=$data['bill_of_material']->bom_number; $data['is_mail']=true; $from_mail='vivek.logimetrix@gmail.com'; $from_title='Tabson'; //dd($from_mail); $data['items'] = DB::table('bill_of_material_items') ->join('items', 'bill_of_material_items.item_code', '=', 'items.code') ->select('bill_of_material_items.*','items.uom','items.description','items.code','items.specification') ->where('bom_id', '=', $bom_id) ->get(); //return view('dashboard.bom.bom-mail',$data); //dd(Auth::user()); if(Auth::user()->role_id == 2 || Auth::user()->role_id == 1){ //dd('Purchase Requisition Request for Review('.$pr_number.')'); $functional_head = \DB::table('users')->where('id',$creater->functional_head)->first(); $business_head = \DB::table('users')->where('id',$creater->business_head)->first(); $director = \DB::table('users')->where('id',$creater->director)->first(); if($functional_head==null && $business_head==null){ Mail::send('dashboard.bom.bom-mail', $data, function ($m) use ($director,$bom_number,$from_mail,$from_title){ $m->from($from_mail,$from_title); $m->to($director->email, $director->name); $m->subject('Bill Of Material Requisition Approval Request('.$bom_number.')'); }); }elseif($functional_head==null){ Mail::send('dashboard.bom.bom-mail', $data, function ($m) use ($business_head,$bom_number,$from_mail,$from_title){ $m->from($from_mail,$from_title); $m->to($business_head->email, $business_head->name); $m->subject('Bill Of Material Requisition Request for Approval('.$bom_number.')'); }); }else{ Mail::send('dashboard.bom.bom-mail', $data, function ($m) use ($functional_head,$bom_number,$from_mail,$from_title){ $m->from($from_mail,$from_title); $m->to($functional_head->email, $functional_head->name); $m->subject('Bill Of Material Requisition Request for Review('.$bom_number.')'); }); } // if($functional_head==null && $business_head==null){ // Mail::send('dashboard.pr.pr-mail', $data, function ($m) use ($director,$pr_number){ // $m->from('hello@app.com', 'Your Application'); // $m->to($director->email, $director->name); // $m->subject('Purchase Requisition Approval Request('.$pr_number.')'); // }); // } } if(Auth::user()->role_id == 3 || Auth::user()->role_id == 1){ $business_head = \DB::table('users')->where('id',$creater->business_head)->first(); $director = \DB::table('users')->where('id',$creater->director)->first(); if($business_head==null){ Mail::send('dashboard.bom.bom-mail', $data, function ($m) use ($director,$bom_number,$from_mail,$from_title){ $m->from($from_mail,$from_title); $m->to($director->email, $director->name); $m->subject('Bill Of Material Requisition Approval Request('.$bom_number.')'); }); }else{ Mail::send('dashboard.bom.bom-mail', $data, function ($m) use ($business_head,$pr_number,$from_mail,$from_title){ $m->from($from_mail,$from_title); $m->to($business_head->email, $business_head->name); $m->subject('Bill Of Material Requisition Request for Approval('.$bom_number.')'); }); } } if(Auth::user()->role_id == 4 || Auth::user()->role_id == 1){ $director = \DB::table('users')->where('id',$creater->director)->first(); Mail::send('dashboard.bom.bom-mail', $data, function ($m) use ($director,$bom_number,$from_mail,$from_title){ $m->from($from_mail, $from_title); $m->to($director->email, $director->name); $m->subject('Bill Of Material Requisition Approval Request('.$bom_number.')'); }); } if(Auth::user()->role_id == 5 || Auth::user()->role_id == 1){ if($creater->functional_head==null && $creater->business_head==null){ $fn_head=$creater; }elseif($creater->functional_head==null){ $fn_head= \DB::table('users')->where('id',$creater->business_head)->first(); }else{ $fn_head = \DB::table('users')->where('id',$creater->functional_head)->first(); } if($creater->business_head==null){ $bs_head=$creater; }else{ $bs_head = \DB::table('users')->where('id',$creater->business_head)->first(); } Mail::send('dashboard.bom.bom-mail', $data, function ($m) use ($creater,$bom_number,$fn_head,$bs_head,$from_mail,$from_title){ $m->from($from_mail, $from_title); $m->to($creater->email, $creater->name); $m->to($fn_head->email, $fn_head->name); $m->to($bs_head->email, $bs_head->name); $m->subject('Bill Of Material Requisition Approved('.$bom_number.')'); }); } } public function allBom() { $data['role_id'] =Auth::user()->role_id; $data['id'] = Auth::user()->id; $data['email'] = Auth::user()->email; if(Auth::user()->role_id == 2) { $user_id = array(Auth::user()->id); } elseif(Auth::user()->role_id == 3) { $user_id = DB::table('users')->where('functional_head', Auth::user()->id)->pluck('id')->toArray(); } elseif(Auth::user()->role_id == 4) { $user_id = DB::table('users')->where('business_head', Auth::user()->id)->pluck('id')->toArray(); } else { $user_id = DB::table('users')->pluck('id')->toArray(); } $data['bill_of_materials'] = \DB::table('bill_of_materials') ->join('users','users.id','bill_of_materials.prepared_by') ->select('bill_of_materials.*','users.name as creater')->whereIn('bill_of_materials.prepared_by', $user_id) ->orderBy('bill_of_materials.id', 'DESC') ->get(); //dd($data); return view('dashboard.bom.all-bom', $data); } public function viewBom($bom_id){ $data['bill_of_material'] = \DB::table('bill_of_materials') ->join('users','users.id','bill_of_materials.prepared_by') ->join('business_units','business_units.id','bill_of_materials.business_unit') //->join('projects','projects.id','bill_of_materials.project') ->select('bill_of_materials.*','users.name as preparer','business_units.name as business_unit_name') ->where('bill_of_materials.id',$bom_id) ->first(); $data['items'] = DB::table('bill_of_material_items') ->join('items', 'bill_of_material_items.item_code', '=', 'items.code') ->select('bill_of_material_items.*','items.uom','items.description','items.code') ->where('bom_id', '=', $bom_id) ->orderBy('bill_of_material_items.id', 'ASC') // Added to view the items in the exact serial-wise in which they were added while creating the PR. ->get(); return view('dashboard.bom.bom-view',$data); } public function setBomStatus(Request $request){ $response = array(); $validator = \Validator::make($request->all(), array( 'status' =>'required', ) ); if($validator->fails()) { $response['flag'] = false; $response['errors'] = $validator->getMessageBag(); }else{ $bom_details = \App\BillOfMaterial::where('id',$request->id)->first(); if(is_null($bom_details)){ $response['flag'] = false; $response['error'] = "Item Not found"; }else{ $bom_details->status = $request->status; $bom_details->remark = $request->remark; if($bom_details->save()){ //Create Log $billOfMaterialLog = new \App\BillOfMaterialLog(); $billOfMaterialLog->bom_id = $request->id; $billOfMaterialLog->user_id = \Auth::user()->id; $billOfMaterialLog->message =$bom_details->status; $billOfMaterialLog->remark =$bom_details->remark; $billOfMaterialLog->save(); //send mails // $this->bomMail($bom_details->id); $response['flag'] = true; $response['message'] = "Status Updated Successfully"; }else{ $response['flag'] = false; $response['error'] = "Something Went Wrong"; } } } return response()->json($response); } public function getBomStatus($id){ $data['bom_id'] = $id; $data['bom'] =DB::table('bill_of_materials') ->select('bill_of_materials.status') ->where('id',$id) ->first(); $data['role_id'] = \Auth::user()->role_id; return view('dashboard.bom.set-status',$data); } public function getReopenBillOfMaterial($bom_id) { $bomData = \App\BillOfMaterial::where('id', $bom_id)->first(); $bomData->status = 'ReOpened'; $bomData->current_status = 'processing'; if($bomData->save()) { return true; } return false; } // Show the edit form public function getEditBillOfMaterial($id) { $billOfMaterial = \App\BillOfMaterial::findOrFail($id); $items = \App\BillOfMaterialItem::join('items', 'bill_of_material_items.item_code', '=', 'items.code') ->leftJoin('units', 'items.uom', '=', 'units.id') ->select( 'bill_of_material_items.*', 'items.description as description', 'units.name as Uom' ) ->where('bill_of_material_items.bom_id', $id) ->get(); $data['circles'] = \App\Circle::where('is_active', 1)->get(); $data['customers'] = DB::table('customers')->get(); $data['business_units'] = DB::table('business_units')->where('is_active', 1)->get(); $data['departments'] = DB::table('verticals')->get(); $data['verticals'] = DB::table('department')->get(); $data['items'] = DB::table('items')->where('is_active', 1)->get(); $data['user_id'] = Auth::user()->id; $data['user_name'] = Auth::user()->name; $data['project_categories'] = DB::table('project_categories')->where('is_active', 1)->get(); $data['products'] = DB::table('products')->where('is_active', 1)->get(); $data['billOfMaterial'] = $billOfMaterial; $data['bom_items'] = $items; return view('dashboard.bom.edit-bill-of-material', $data); } public function getbomItems(Request $request){ $bom_id=$request->bom_id; $items = DB::table('bill_of_material_items') ->join('items', 'bill_of_material_items.item_code', '=', 'items.code') ->join('units', 'units.id', '=', 'items.uom') ->join('bill_of_materials', 'bill_of_materials.id', '=', 'bill_of_material_items.bom_id') ->select('bill_of_material_items.*','items.description','items.uom','items.is_active','units.name as Uom','items.code','items.gst','bill_of_materials.bom_number') ->where('bill_of_material_items.status','!=','completed') ->where('bill_of_material_items.bom_id',$bom_id) ->get(); //dd($items); return json_encode(['success'=> true,'items'=>$items]); } public function updateBillOfMaterial(Request $request, $id) { $response = array(); $productName = \DB::table('products')->where('id', $request->product)->value('product_name'); $projectCategory = \DB::table('project_categories')->where('id', $request->project_category)->value('name'); $validator = \Validator::make($request->all(), [ 'document1' => 'nullable|mimes:pdf', ]); if ($validator->fails()) { $response['flag'] = false; $response['error'] = $validator->getMessageBag(); return response()->json($response); }else{ $billOfMaterial = \App\BillOfMaterial::findOrFail($id); $status = $billOfMaterial->status; if(trim($status) == 'ReOpened') { $billOfMaterial->status = 'requested'; } $billOfMaterial->project_category = $projectCategory; $billOfMaterial->product_id = $productName; $billOfMaterial->project = $request->project; $billOfMaterial->requested_by = $request->requested_by; $billOfMaterial->version = $request->version; $billOfMaterial->bom_date = $request->bom_date; $billOfMaterial->business_unit = $request->business_unit; $billOfMaterial->bom_comment = $request->bom_comment; $billOfMaterial->prepared_by = \Auth::user()->id; if ($request->hasFile('document1')) { $filenameWithExt = $request->file('document1')->getClientOriginalName(); $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME); $extension = $request->file('document1')->getClientOriginalExtension(); $fileNameToStore = $filename.'_'.time().'.'.$extension; $destinationPath = public_path().'/bom_document'; $path = $request->file('document1')->move($destinationPath, $fileNameToStore); $billOfMaterial->document1 = str_replace(public_path(), '', $path); } if ($billOfMaterial->save()) { \App\BillOfMaterialItem::where('bom_id', $billOfMaterial->id)->delete(); $items = json_decode($request->items, true); foreach ($items as $item) { $bill_of_material_items = new \App\BillOfMaterialItem(); $bill_of_material_items->bom_id = $billOfMaterial->id; $bill_of_material_items->item_code = $item['code']; $bill_of_material_items->qty = $item['qty']; $bill_of_material_items->rqty = $item['qty']; $bill_of_material_items->rate = $item['rate']; $bill_of_material_items->recomended = isset($item['recomended']) ? $item['recomended'] : ''; $bill_of_material_items->remark = isset($item['remark']) ? $item['remark'] : ''; $bill_of_material_items->make = isset($item['make']) ? $item['make'] : ''; $bill_of_material_items->specification = isset($item['specification']) ? $item['specification'] : ''; $bill_of_material_items->save(); } $billOfMaterialLog = new \App\BillOfMaterialLog(); $billOfMaterialLog->bom_id = $billOfMaterial->id; $billOfMaterialLog->user_id = \Auth::user()->id; $billOfMaterialLog->message = 'update'; $billOfMaterialLog->save(); $response['success'] = true; $response['msg'] = 'Bill Of Material Updated Successfully !!'; $response['bom_number'] = $billOfMaterial->bom_number; } else { $response['flag'] = false; $response['error'] = "Something Went Wrong"; } } return response()->json($response); } public function BomPrint($bom_id){ // DB::enableQueryLog(); $data['bill_of_material'] = \DB::table('bill_of_materials') ->join('users','users.id','bill_of_materials.prepared_by') ->join('business_units','business_units.id','bill_of_materials.business_unit') //->join('projects','projects.id','purchase_requests.project') ->select('bill_of_materials.*','users.name as preparer','business_units.name as business_unit_name') ->where('bill_of_materials.id',$bom_id) ->first(); // dd(DB::getQueryLog()); $data['is_mail']=false; $data['items'] = DB::table('bill_of_material_items') ->join('items', 'bill_of_material_items.item_code', '=', 'items.code') ->select('bill_of_material_items.*','items.uom','items.description','items.code') ->where('bom_id', '=', $bom_id) ->orderBy('bill_of_material_items.id', 'ASC') // Added to print the items in the exact serial-wise in which they were added while creating the PR. ->get(); return view('dashboard.bom.bom-mail',$data); } public function genrateBomHistory($id){ $data['bom_history_data'] = \DB::table('bill_of_material_logs') ->join('users','users.id','bill_of_material_logs.user_id') ->join('bill_of_materials','bill_of_materials.id','bill_of_material_logs.bom_id') ->select('bill_of_material_logs.*','users.id as u_id','users.name','bill_of_materials.bom_number') ->where('bill_of_material_logs.bom_id',$id) ->get(); //dd($data); //$data['pr_number']=getModelById('PurchaseRequest',$id)->pr_number; // return response()->json($data); return view('dashboard.bom.bom-view-history',$data); } public function getBomAmendment(){ $data['roles'] = \App\Role::get(); $data['businessheades'] = \DB::table('users')->where('role_id',4)->get(); $data['functionalheads'] = \DB::table('users')->where('role_id',3)->get(); $data['directors'] = \DB::table('users')->where('role_id',5)->get(); return view('dashboard.bom.edit-bom',$data); } public function postBomAmendment(Request $request) { $response = array(); $validator = \Validator::make($request->all(), [ 'bom_number' => 'required|exists:bill_of_materials,bom_number', 'status' => 'required|in:requested,approval_pending', 'remark' => 'nullable|string|max:255', ]); if ($validator->fails()) { $response['flag'] = false; $response['errors'] = $validator->getMessageBag(); } else { $bomNumber = $request->bom_number; $status = $request->status; $remark = $request->remark; // Find the purchase request by PR number $billOfMaterial = \App\BillOfMaterial::where('bom_number', $bomNumber)->first(); if (!$billOfMaterial) { $response['flag'] = false; $response['message'] = "Bill Of Material with BOM number '$bomNumber' not found."; } else { // Update the purchase request status and remark $billOfMaterial->update(['status' => $status, 'remark' => $remark]); $response['flag'] = true; $response['message'] = "Status updated successfully"; } } return response()->json($response); } }