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');