/**
  * This function is used to add a quote by a customer
  *
  * @param string POST data
  *
  * @return if validation errors found redirect to same route 'request-a-quote' with validation errors and input data |
  *         else insert the quote to the database tables 'quote-requests' and 'requested-services' then return $message |
  *         catch if any error found when executing the database query and return $message
  */
 public function AddQuoteCustomer()
 {
     /*
      * Get all the existing Quote IDs from the database
      */
     $getid = Quote_Requests::select('id')->get();
     /*
      * condition used to generate the Quote ID
      * check if the collection return to the $getid variable is empty
      * if not empty get the last Quote ID from the table 'quote_requests' and increment it by 1 the assign to $id
      * else assign 1 to $id
      */
     if (!$getid->isEmpty()) {
         $getid = Quote_Requests::select('id')->orderBy('id', 'desc')->first()->get();
         foreach ($getid as $key) {
             $id = (int) $key->id + 1;
         }
     } else {
         $id = 1;
     }
     $request = Request::all();
     /*
      * Laravel Validation for quote
      */
     $rules = array('firstname' => 'required|alpha', 'address' => 'required', 'city' => 'required|alpha', 'zip' => 'numeric', 'email' => 'required|email', 'phone' => 'digits:10', 'contact' => 'required', 'eventType' => 'required', 'task' => 'required', 'guests' => 'required', 'eventdate' => 'required|date', 'eventdays' => 'required|numeric', 'eventtime' => 'required', 'objective' => 'required', 'guesttype' => 'required');
     $validation = Validator::make($request, $rules);
     if ($validation->fails()) {
         return redirect('dashboard/request-a-quote')->withErrors($validation)->withInput();
     } else {
         /*
          * Customer Details
          */
         $fname = $request['firstname'];
         $lname = $request['lastname'];
         $address = $request['address'];
         $city = $request['city'];
         $zip = $request['zip'];
         $email = $request['email'];
         $phone = $request['phone'];
         $contactVia = $request['contact'];
         /*
          * Event Details
          */
         $eventType = $request['eventType'];
         $task = $request['task'];
         $taskCount = count($request['task']);
         $guests = $request['guests'];
         $eventDate = $request['eventdate'];
         $eventDays = $request['eventdays'];
         $eventTime = $request['eventtime'];
         $objective = $request['objective'];
         $guestType = implode(", ", $request['guesttype']);
         /*
          * Active User Details
          */
         $username = Auth::user()->name;
         $userID = Auth::user()->id;
         $addedDate = date('Y-m-d H:i:s');
         $eventDate = date('Y-m-d', strtotime(str_replace('-', '/', $eventDate)));
         try {
             /*
              * Insert the new Quote to Database Table 'quote_requests'
              */
             $quoteRequests = new Quote_Requests();
             $quoteRequests->id = $id;
             $quoteRequests->UserID = $userID;
             $quoteRequests->Username = $username;
             $quoteRequests->FirstName = $fname;
             $quoteRequests->LastName = $lname;
             $quoteRequests->Address = $address;
             $quoteRequests->City = $city;
             $quoteRequests->Zip = $zip;
             $quoteRequests->Email = $email;
             $quoteRequests->Phone = $phone;
             $quoteRequests->Contact_Via = $contactVia;
             $quoteRequests->EventType = $eventType;
             $quoteRequests->ServiceCount = $taskCount;
             $quoteRequests->Guests = $guests;
             $quoteRequests->EventDate = $eventDate;
             $quoteRequests->NoOfDays = $eventDays;
             $quoteRequests->EventTime = $eventTime;
             $quoteRequests->Objective = $objective;
             $quoteRequests->EventFor = $guestType;
             $quoteRequests->AddedDateTime = $addedDate;
             $quoteRequests->Status = 'Pending';
             $quoteRequests->save();
             /*
              * Insert the newly requested Services to Database Table 'requested_services'
              */
             foreach ($task as $key) {
                 $requestedServices = new Requested_Services();
                 $requestedServices->QuoteID = $id;
                 $requestedServices->Service = $key;
                 $requestedServices->Cost = 0;
                 $requestedServices->save();
             }
             $newemail = new EmailController();
             $newemail->requestQuoteEmail($username, $email, $id);
             return redirect('dashboard/request-a-quote')->with('message', 'success');
         } catch (QueryException $e) {
             return redirect('dashboard/request-a-quote')->with('message', 'fail');
         }
     }
 }