role->permissions->contains(Permission::firstWhere('name', '=', 'loans_viewAny')) ? Response::allow() : Response::deny('you are not the chosen one'); $search_types = []; array_push($search_types,array("value" => "username", "name" => "username")); array_push($search_types,array("value" => "start", "name" => "date_start")); array_push($search_types,array("value" => "end", "name" => "date_end")); $PerPagination = $request->input('p') ?? 10; $search_term = $request->input('search_term'); $search_type = $request->input('search_type'); $search_compare = $request->input('search_compare'); if($search_term != ""){ switch ($search_type){ case('username'): switch($search_compare){ case('='): $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where(function ($query) use ($search_term){ $query->whereHas('user',function ($query) use ($search_term){ $query->where('username','=',$search_term); }); }) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where(function ($query) use ($search_term){ $query->whereHas('user',function ($query) use ($search_term){ $query->where('username','=',$search_term); }); }) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; break; default: $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where(function ($query) use ($search_term){ $query->whereHas('user',function ($query) use ($search_term){ $query->where('username','like','%'.$search_term.'%'); }); }) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where(function ($query) use ($search_term){ $query->whereHas('user',function ($query) use ($search_term){ $query->where('username','like','%'.$search_term.'%'); }); }) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; break; } break; case('start'): $parts = explode('.',$search_term); $d = $parts[0]; $m = $parts[1]; $y = $parts[2]; $constructed_date = $y."-".$m."-".$d; switch($search_compare){ case('>='): $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_start','>=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_start','>=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; break; case('<='): $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_start','<=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_start','<=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; break; case('='): $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_start','=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_start','=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; break; default: $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_start','like','%'.$constructed_date.'%') ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_start','like','%'.$constructed_date.'%') ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; break; } break; case('end'): $parts = explode('.',$search_term); $d = $parts[0]; $m = $parts[1]; $y = $parts[2]; $constructed_date = $y."-".$m."-".$d; switch($search_compare){ case('>='): $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_end','>=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_end','>=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; break; case('<='): $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_end','<=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_end','<=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; break; case('='): $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_end','=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_end','=',$constructed_date) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; break; default: $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_start','like','%'.$constructed_date.'%') ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->where('date_start','like','%'.$constructed_date.'%') ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; break; } break; default: $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; break; } } else{ $loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','date_start','date_end') ->Paginate($PerPagination) ; $loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id) ->select('*',DB::raw('count(loanable_id) as amount')) ->groupBy('user_id','loanable_type','loanable_id','date_start','date_end') ->Paginate($PerPagination) ; } return view('loans.index') ->with('search_types',$search_types) ->with('data',$loans_display) ->with('loans',$loans_track) ->with('data_name','loan') ->with('data_names','loans') ; } /** * Show the form for creating a new resource. * * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function create() { Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_create_user')) ? Response::allow() : Response::deny('you are not the chosen one'); $cabels = Cabel::all(); $cabels_valid = []; foreach($cabels as $cabel){ $available = $cabel->total - (count($cabel->loans) + count($cabel->reservations)); if($available >= 1){ array_push($cabels_valid,$cabel); } } $products = Product::all(); $products_valid = []; foreach($products as $product){ $available = $product->total - (count($product->loans) + count($product->reservations)); if($available >= 1){ array_push($products_valid,$product); } } return view('loans.create') ->with('cabels', $cabels_valid) ->with('products', $products_valid) ->with('users', User::all()) ->with('date_start_locked','true') ; } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse */ public function store(Request $request) { Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_create_user')) ? Response::allow() : Response::deny('you are not the chosen one'); $user = User::where('username','=',$request->user)->first(); $now = date('Y-m-d'); $loan_type = LoanType::where('name','=','Loan')->first(); $date_start = $request->date_start; $date_end = $request->date_end; $loan_products = []; $loan_cabels = []; $products_total_amount = 0; $cabels_total_amount = 0; if(isset($request->products)){ foreach($request->products as $key => $value){ $product = Product::where('id','=',$request->product_id[$key])->first(); for($i = 1; $i <= $request->product_amount[$key];$i++){ $user->loans()->create([ 'loanable_id' => $request->product_id[$key], 'loanable_type' => get_class($product), 'loan_type_id' => $loan_type->id, 'date_start' => $now, 'date_end' => $date_end ]); $products_total_amount += 1; } Logger::LogLent($product->id,get_class($product),$request->product_amount[$key],$user->id); $item = [$product,$request->product_amount[$key]]; array_push($loan_products,$item); } } if(isset($request->cabels)){ foreach($request->cabels as $key => $value){ $cabel = Cabel::where('id','=',$request->cabel_id[$key])->first(); for($i = 1; $i <= $request->cabel_amount[$key];$i++){ $user->loans()->create([ 'loanable_id' => $request->cabel_id[$key], 'loanable_type' => get_class($cabel), 'loan_type_id' => $loan_type->id, 'date_start' => $now, 'date_end' => $date_end ]); $cabels_total_amount += 1; } Logger::LogLent($cabel->id,get_class($cabel),$request->cabel_amount[$key],$user->id); $item = [$cabel,$request->cabel_amount[$key]]; array_push($loan_cabels,$item); } } // Generate the PDF $logo = "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"; // Data for the PDF $loaner_signature = $request->loanerSigRawData; $lender_signature = $request->lenderSigRawData; $date = new DateTime(); $timestamp = $date->getTimestamp(); $user_id = $user->id; // Set the PDF File data $pdf_file_name = $user->username."_".$timestamp; $pdf_file_extension = '.pdf'; $pdf_file = $pdf_file_name.$pdf_file_extension; // Create the PDF by putting data into the pdf view $pdf = PDF::loadView('pdf.loan',['date_start' => $now,'date_end' => $date_end,'loaner' => $loaner_signature, 'lender' => $lender_signature,'user' => $user,'cabels' => $loan_cabels,'cabels_total_amount' => $cabels_total_amount,'products' => $loan_products,'products_total_amount' => $products_total_amount]); // Store the PDF file on the server $location = "contracts/"; $file_name = $location.$pdf_file; $file_put = Storage::put($file_name, $pdf->output()); $file_path = storage_path($file_name); $file = Storage::files($file_path); // Create the Contract $contract = new Contract(); $contract->user_id = $user->id; $contract->timestamp = $timestamp; $contract->type = "contracts"; $contract->save(); // Send Mail if($user->role->name == 'Underviser') { $email_sufix = "@sde.dk"; } else { $email_sufix = "@edu.sde.dk"; } $email = $user->username.$email_sufix; $mj = new Client(config('app.mail_username'), config('app.mail_password'),true); $body = [ 'FromEmail' => config('app.mail_from_address'), 'FromName' => config('app.mail_from_name'), 'Subject' => "Udlån", 'Html-part' => view('emails.loan') ->with('logo',$logo) ->with('user',$user) ->with('date',$date) ->render(), 'Recipients' => [ [ 'Email' => $email ] ], 'Attachments' => [ [ 'Content-type' => "application/pdf", 'Filename' => 'contract.pdf', 'content' => base64_encode($pdf->output()) ] ], 'Inline_attachments' => [ [ 'Content-type' => "image/png", 'Filename' => "logo.png", 'content' => $logo ] ] ]; // All resources are located in the Resources class $response = $mj->post(Resources::$Email,['body' => $body]); return redirect()->route('loans.index'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function laptop_create(Request $request) { Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_create_laptop')) ? Response::allow() : Response::deny('you are not the chosen one'); $products = Product::where('product_category_id','=',ProductCategory::where('name','=','Laptop')->first()->id) ->doesntHave('subcategory') ->get() ; $products_valid = []; foreach($products as $product){ $available = $product->total - (count($product->loans) + count($product->reservations)); if($available >= 1){ array_push($products_valid,$product); } } return view('loans.laptop.create') ->with('users',User::all()) ->with('laptops',$products_valid) ->with('date_start_locked','true') ->with('date_end_permanent','true') ; } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse */ public function laptop_store(Request $request) { Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_create_laptop')) ? Response::allow() : Response::deny('you are not the chosen one'); $user = User::where('username','=',$request->user)->first(); $laptop = Product::where('id','=',$request->laptop_id)->first(); if(!$laptop){ return back()->withErrors('Laptop not found'); } $available = $laptop->total - (count($laptop->loans) + count($laptop->reservations)); if(!$available >= 1){ return back()->withErrors('Laptop not available'); } $phone = $request->telephone; $email_private = $request->email; $street_name = $request->street_name; $street_number = $request->street_number; $street_instruction = $request->street_direction; $city_zip = $request->zip; $city_name = $request->city; $date_start = $request->date_start; $date_end = $request->date_end; $bag_input = $request->bag; switch($bag_input){ case('on'): $bag = "yes"; break; default: $bag = Null; break; } $lock_input = $request->lock; switch($lock_input){ case('on'): $lock = "yes"; break; default: $lock = "no"; break; } $loan_type = LoanType::where('name','=','Loan')->first(); $now = date('Y-m-d'); if($request->permanent == 'on'){ $date_end = Null; } else{ $date_end = $request->date_end; } $user->loans()->create([ 'loanable_id' => $laptop->id, 'loanable_type' => get_class($laptop), 'loan_type_id' => $loan_type->id, 'date_start' => $now, 'date_end' => $date_end ]); Logger::LogLent($laptop->id,get_class($laptop),1,$user->id); // Generate the PDF $logo = "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"; // Data for the PDF $loaner_signature = $request->loanerSigRawData; $lender_signature = $request->lenderSigRawData; $date = new DateTime(); $timestamp = $date->getTimestamp(); $user_id = $user->id; // Set the PDF File data $pdf_file_name = $user->username."_".$timestamp; $pdf_file_extension = '.pdf'; $pdf_file = $pdf_file_name.$pdf_file_extension; // Create the PDF by putting data into the pdf view $pdf = PDF::loadView('pdf.laptop',['date_start' => $now,'date_end' => $date_end,'loaner' => $loaner_signature, 'lender' => $lender_signature,'user' => $user,'product' => $laptop,'telephone' => $phone,'email' => $email_private,'street_name' => $street_name,'street_number' => $street_number, 'street_instructions' => $street_instruction,'city_zip' => $city_zip,'city_name' => $city_name,'bag' => $bag,'lock' => $lock]); // Store the PDF file on the server $location = "laptops/"; $file_name = $location.$pdf_file; $file_put = Storage::put($file_name, $pdf->output()); $file_path = storage_path($file_name); $file = Storage::files($file_path); // Create the Contract $contract = new Contract(); $contract->user_id = $user->id; $contract->timestamp = $timestamp; $contract->type = "laptops"; $contract->save(); // Send Mail if($user->role->name == 'Underviser') { $email_sufix = "@sde.dk"; } else { $email_sufix = "@edu.sde.dk"; } $email = $user->username.$email_sufix; $mj = new Client(config('app.mail_username'), config('app.mail_password'),true); $body = [ 'FromEmail' => config('app.mail_from_address'), 'FromName' => config('app.mail_from_name'), 'Subject' => "Bærbar Udlån", 'Html-part' => view('emails.laptop') ->with('logo',$logo) ->with('user',$user) ->with('date',$date) ->render(), 'Recipients' => [ [ 'Email' => $email ] ], 'Attachments' => [ [ 'Content-type' => "application/pdf", 'Filename' => 'contract.pdf', 'content' => base64_encode($pdf->output()) ] ], 'Inline_attachments' => [ [ 'Content-type' => "image/png", 'Filename' => "logo.png", 'content' => $logo ] ] ]; // All resources are located in the Resources class $response = $mj->post(Resources::$Email,['body' => $body]); return redirect()->route('loans.index'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function return_page(Request $request) { Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_return')) ? Response::allow() : Response::deny('you are not the chosen one'); $cabels = Cabel::all(); $cabels_valid = []; foreach($cabels as $cabel){ $lent = count($cabel->loans); if($lent >= 1){ array_push($cabels_valid,$cabel); } } $products = Product::all(); $products_valid = []; foreach($products as $product){ $lent = count($product->loans); if($lent >= 1){ array_push($products_valid,$product); } } $users = User::all(); $note_types = NoteType::all(); return view('loans.return') ->with('users',$users) ->with('products',$products_valid) ->with('cabels',$cabels_valid) ->with('note_types',$note_types) ; } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse */ public function return_action(Request $request) { Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_return')) ? Response::allow() : Response::deny('you are not the chosen one'); $user = User::where('username','=',$request->user)->first(); $loan_type = LoanType::where('name','=','Loan')->first(); if(isset($request->products)){ foreach($request->products as $key => $value){ $product = Product::where('id','=',$request->product_id[$key])->first(); $loan_selection = Loan::where('user_id','=',$user->id) ->where('loanable_type','=',get_class($product)) ->where('loanable_id','=',$product->id) ->limit($request->product_amount[$key]) ->get(); foreach($loan_selection as $loan){ $loan->delete(); } Logger::LogReturn($product->id,get_class($product),$request->product_amount[$key],$user->id); } } if(isset($request->product_note_text)) { foreach($request->product_note_text as $key => $value) { $product = Product::where('id','=',$request->product_note_id[$key])->first(); $note = new Note(); $note->user_id = $user->id; $note->note_type_id = $request->product_note_type[$key]; $note->loanable_id = $request->product_note_id[$key]; $note->loanable_type = get_class($product); $note->note = $request->product_note_text[$key]; $note->save(); if(isset($request->product_note_remove[$key])){ if($request->product_note_remove[$key] == "on"){ $amount = $request->product_amount[$key]; $product->total -= $amount; $product->save(); Logger::LogAmountRemoved($product->id,get_class($product),$amount); } } Logger::LogNote($product->id,get_class($product),$user->id,$request->product_note_text[$key]); } } if(isset($request->cabels)){ foreach($request->cabels as $key => $value){ $cabel = Cabel::where('id','=',$request->cabel_id[$key])->first(); $loan_selection = Loan::where('user_id','=',$user->id) ->where('loanable_type','=',get_class($cabel)) ->where('loanable_id','=',$cabel->id) ->limit($request->cabel_amount[$key]) ->get(); foreach($loan_selection as $loan){ $loan->delete(); } Logger::LogReturn($cabel->id,get_class($cabel),$request->cabel_amount[$key],$user->id); } } if(isset($request->cabel_note_text)) { foreach($request->cabel_note_text as $key => $value) { $cabel = Cabel::where('id','=',$request->cabel_note_id[$key])->first(); $note = new Note(); $note->user_id = $user->id; $note->note_type_id = $request->cabel_note_type[$key]; $note->loanable_id = $request->cabel_note_id[$key]; $note->loanable_type = get_class($cabel); $note->note = $request->cabel_note_text[$key]; $note->save(); if(isset($request->cabel_note_remove[$key])){ if($request->cabel_note_remove[$key] == "on"){ $amount = $request->cabel_amount[$key]; $cabel->total -= $amount; $cabel->save(); Logger::LogAmountRemoved($cabel->id,get_class($cabel),$amount); } } Logger::LogNote($cabel->id,get_class($cabel),$user->id,$request->cabel_note_text[$key]); } } return redirect()->route('loans.index'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View */ public function adjust_page(Request $request, $loan) { Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_adjust')) ? Response::allow() : Response::deny('you are not the chosen one'); $loan_obj = Loan::where('id','=',$loan)->first(); return view('loans.adjust') ->with('users',User::all()) ->with('data',$loan_obj) ; } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\RedirectResponse */ public function adjust_action(Request $request, $loan) { Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_adjust')) ? Response::allow() : Response::deny('you are not the chosen one'); $new_date = $request->date_end; $primary_loan_obj = Loan::where('id','=',$loan)->first(); $loan_user = $primary_loan_obj->user_id; $loan_type = $primary_loan_obj->loan_type_id; $loan_start = $primary_loan_obj->date_start; $loan_loanable_id = $primary_loan_obj->loanable_id; $loan_loanable_type = $primary_loan_obj->loanable_type; $loans = Loan::where('user_id','=',$loan_user) ->where('loan_type_id','=',$loan_type) ->where('date_start','=',$loan_start) ->get() ; Logger::LogAdjusted($primary_loan_obj->id,get_class($primary_loan_obj),'Slut Dato : '.date('d.m.Y',strtotime($primary_loan_obj->date_end))." til ". date('d.m.Y',strtotime($new_date))); foreach($loans as $loan){ $loan->date_end = $new_date; $loan->save(); } return redirect()->route('loans.index'); } }