public function reserve_post($id) { // GET THE LAST RESERVATION $last_user_reservation = Reservation::where('user_id', Sentry::getUser()->id)->orderBy('created_at', 'desc')->first(); if (!is_null($last_user_reservation)) { $current_time = time(); $last_user_reservation_time = strtotime($last_user_reservation->created_at); $interval = abs($current_time - $last_user_reservation_time) / 3600; if ($interval < 15) { return Redirect::to('clients')->with('info', 'You must wait 15 hours before you can reserve again.'); } } if (is_null(Property::find($id))) { return Redirect::to('properties'); } $monitoring = Monitoring::where('block', Input::get('block'))->where('lot', Input::get('lot')) - first(); if (!is_null($monitoring) && $monitoring->status == false) { return Redirect::to('clients')->with('info', 'This s**t is not available sorry.'); } $rules = array('total_contract_price' => 'required', 'reservation_fee' => 'required', 'downpayment' => 'required', 'equity' => 'required', 'total_months' => 'required', 'monthly_fee' => 'required', 'agent_id' => 'required', 'terms' => 'required', 'block' => 'required|numeric', 'lot' => 'required|numeric'); $validator = Validator::make(Input::all(), $rules); if ($validator->fails()) { return Redirect::to('clients/reserve/' . $id)->withInput()->withErrors($validator); } else { $property = Property::find($id); $user = $this->user; // 0. CHANGE PROPERTY STATUS TO 0 $downpayment = intval(Input::get('downpayment')) / 100 * $property->price; $equity = $property->price - $downpayment - $property->reservation_fee; $total_months = intval(Input::get('total_months')); // 1. SAVE TO THE DATABASE $reservation = new Reservation(); $reservation->property_id = $id; $reservation->user_id = $this->user->id; $reservation->agent_id = Input::get('agent_id'); $reservation->total_contract_price = intval(Input::get('total_contract_price')); $reservation->downpayment = $downpayment; $reservation->reservation_fee = $property->reservation_fee; $reservation->block = Input::get('block'); $reservation->lot = Input::get('lot'); // LOANABLE AMOUNT $reservation->equity = $equity; $reservation->total_months = $total_months; $reservation->monthly_fee = $equity / $total_months; $reservation->terms = Input::get('terms'); //$reservation->unit_type = Input::get('unit_type'); $reservation->save(); // 2. NEW TRANSACTION $transaction = new Transaction(); $transaction->reference_number = date('Ymd') . '-' . strtoupper(str_random(5)); $transaction->property_id = $id; $transaction->user_id = $this->user->id; $transaction->reservation_id = $reservation->id; $transaction->status = 'Pending'; $transaction->amount = $property->reservation_fee; $transaction->remarks = "Property Reservation"; $transaction->save(); // UPDATE MONITORING DB::table('monitorings')->where('block', Input::get('block'))->where('lot', Input::get('lot'))->update(array('status' => false)); // 3.GENERATE INVOICE $x = View::make('admin.transactions.show', compact('transaction', 'user', 'property')); $pdf = storage_path() . '/invoices/' . $transaction->reference_number . '.pdf'; $dompdf = new DOMPDF(); $dompdf->load_html($x); $dompdf->render(); $output = $dompdf->output(); @file_put_contents($pdf, $output); // 3.1 GENERATE RESERVATION INFORMATION PDF $y = View::make('admin.reservations.pdf', compact('transaction', 'user', 'reservation', 'property')); $res = storage_path() . '/reservations/reservation-' . $transaction->reference_number . '.pdf'; $dompdf = new DOMPDF(); $dompdf->load_html($y); $dompdf->render(); $output = $dompdf->output(); @file_put_contents($res, $output); // 4. EMAIL DEVELOPER,ADMIN AND BUYER $admin = User::find(1); $developer = $property->developer; $data['transaction'] = $transaction; Mail::send('mails.default', $data, function ($message) use($transaction, $pdf, $developer, $admin, $res) { $user = Sentry::getUser(); $message->to($user->email)->subject("Property Reservation Notification"); $message->to($developer->email)->subject("Property Reservation Notification"); $message->to($admin->email)->subject("Property Reservation Notification"); $message->attach($pdf); $message->attach($res); }); return Redirect::to('clients')->with('success', 'Your reservation has been sent to administrator for approval.'); } }
Route::get('search', 'PropertyController@search'); }); // Administration Routes Route::group(array('before' => 'client', 'prefix' => 'clients'), function () { // RESERVATIONS Route::get('/', 'PublicClientsController@main'); Route::get('reserve/{id}', 'PublicClientsController@reserve'); Route::post('reserve/{id}', 'PublicClientsController@reserve_post'); Route::get('profile', 'PublicClientsController@profile'); Route::post('profile', 'PublicClientsController@profile_post'); Route::get('reservation/{id}', 'PublicClientsController@reservation'); Route::get('invoice/{id}', 'PublicClientsController@invoice'); Route::get('all', 'PublicClientsController@all'); Route::post('request/lots', function () { $block = Input::get('block'); $monitoring = Monitoring::where('block', $block[0])->where('status', 1)->get(); $array = array(); foreach ($monitoring as $m) { array_push($array, $m->lot); } header("content-type:text/json"); echo json_encode($array); }); }); // Administration Routes Route::group(array('before' => 'client_not_logged_in', 'prefix' => 'clients'), function () { Route::get('login', 'PublicClientsController@login'); Route::post('login', 'PublicClientsController@login_post'); Route::get('register', 'PublicClientsController@register'); Route::post('register', 'PublicClientsController@register_post'); Route::get('forgot-password', 'PublicClientsController@forgot');