Exemplo n.º 1
0
 /**
  * Store a newly created vehicle in database.
  *
  * @return Response
  */
 public function store()
 {
     //VEHICLE DATA
     $vehicles_year = trim(Input::get('vehicles_year'));
     $vehicles_make_id = trim(Input::get('vehicles_make_id'));
     $vehicles_name_trim = trim(Input::get('vehicles_name_trim'));
     $vehicles_name_trim_ar = explode(',', $vehicles_name_trim);
     $model_name = trim($vehicles_name_trim_ar[0]);
     if (count($vehicles_name_trim_ar) > 1) {
         $model_trim = trim($vehicles_name_trim_ar[1]);
     } else {
         $model_trim = "";
     }
     $vehicles_body = trim(Input::get('vehicles_body'));
     if ($vehicles_body == -1) {
         $vehicles_body = "";
     }
     $vehicles_weight_kg = trim(Input::get('vehicles_weight_kg'));
     // BEGIN ADDING NEW WEIGHT TO MODEL
     if (Input::get('new_wt') == 1) {
         // IF BODY IS NULL (SOME MODELS HAS NULL BODY)
         if ($vehicles_body == "") {
             // GETTING MODEL
             $model = Model::where('model_year', $vehicles_year)->where('model_make_id', $vehicles_make_id)->where('model_name', $model_name)->where('model_trim', $model_trim)->whereNull('model_body')->where('model_weight_kg', NULL)->first();
         } else {
             $model = Model::where('model_year', $vehicles_year)->where('model_make_id', $vehicles_make_id)->where('model_name', $model_name)->where('model_trim', $model_trim)->where('model_body', $vehicles_body)->where('model_weight_kg', NULL)->first();
         }
         $model->model_weight_kg = $vehicles_weight_kg;
         $model->save();
     }
     // END ADDING NEW WEIGHT TO MODEL
     // BEGIN ADDING NEW MODEL INTO DATABASE
     if (Input::get('new_model') == 1) {
         // IF BOTH ARE NOT BLANK
         if ($model_trim != "" && $vehicles_body != "") {
             $newModel = Model::create(['model_make_id' => $vehicles_make_id, 'model_name' => $model_name, 'model_trim' => $model_trim, 'model_year' => $vehicles_year, 'model_body' => $vehicles_body, 'model_weight_kg' => $vehicles_weight_kg]);
         } else {
             if ($model_trim == "" && $vehicles_body != "") {
                 $newModel = Model::create(['model_make_id' => $vehicles_make_id, 'model_name' => $model_name, 'model_trim' => $model_trim, 'model_year' => $vehicles_year, 'model_body' => $vehicles_body, 'model_weight_kg' => $vehicles_weight_kg]);
             } else {
                 if ($model_trim != "" && $vehicles_body == "") {
                     $newModel = Model::create(['model_make_id' => $vehicles_make_id, 'model_name' => $model_name, 'model_trim' => $model_trim, 'model_year' => $vehicles_year, 'model_weight_kg' => $vehicles_weight_kg]);
                 } else {
                     $newModel = Model::create(['model_make_id' => $vehicles_make_id, 'model_name' => $model_name, 'model_trim' => $model_trim, 'model_year' => $vehicles_year, 'model_weight_kg' => $vehicles_weight_kg]);
                 }
             }
         }
         $newModelId = $newModel->id;
     }
     // END ADDING NEW MODEL INTO DATABASE
     // BEGIN VEHICLE
     if ($vehicles_body != "") {
         $vehicle = Input::only(['vehicles_vin', 'vehicles_year', 'vehicles_make_id', 'vehicles_name_trim', 'vehicles_body', 'vehicles_weight_kg', 'vehicles_use_type', 'vehicles_use_type', 'vehicles_class', 'vehicles_color', 'vehicles_status', 'vehicles_odometer']);
     } else {
         $vehicle = Input::only(['vehicles_vin', 'vehicles_year', 'vehicles_make_id', 'vehicles_name_trim', 'vehicles_weight_kg', 'vehicles_use_type', 'vehicles_use_type', 'vehicles_class', 'vehicles_color', 'vehicles_status', 'vehicles_odometer']);
     }
     $validator_vehicle = Validator::make($vehicle, Vehicle::$rules);
     if ($validator_vehicle->passes()) {
         // GETTING AND ADDING MODEL ID
         // IF NEW MODEL WAS CREATED
         if (isset($newModelId) && $newModelId != "") {
             $vehicle['vehicles_model_id'] = $newModelId;
         } else {
             // IF BODY IS NULL
             if ($vehicles_body == "") {
                 // GETTING MODEL
                 $vehicle['vehicles_model_id'] = Model::where('model_year', $vehicles_year)->where('model_make_id', $vehicles_make_id)->where('model_name', $model_name)->where('model_trim', $model_trim)->whereNull('model_body')->first()->id;
             } else {
                 $vehicle['vehicles_model_id'] = Model::where('model_year', $vehicles_year)->where('model_make_id', $vehicles_make_id)->where('model_name', $model_name)->where('model_trim', $model_trim)->where('model_body', $vehicles_body)->first()->id;
             }
         }
         // INSERT VEHICLE DATA AND GET ID
         $vehicle_inserted_id = Vehicle::create($vehicle)->id;
     } else {
         return Redirect::route('vehicle.create')->withErrors($validator_vehicle)->withInput();
     }
     // END VEHICLE
     // BEGIN OWNERS
     $owners_index = Input::get('owners_index');
     $owners_index_arr = array_filter(explode(',', $owners_index));
     // LOOP THROUGH EACH OWNER AND ASSOCIATE WITH DRIVERS
     foreach ($owners_index_arr as $owners_index_id) {
         $drivers_license_no = Input::get('drivers_license_no' . $owners_index_id);
         if (trim($drivers_license_no) != "") {
             $drivers_status = Driver::where('drivers_license_no', $drivers_license_no)->first();
             // IF DRIVER DOESN'T EXISTS, CREATE DRIVER
             if ($drivers_status == NULL) {
                 $owner_info['drivers_fname'] = Input::get('drivers_fname' . $owners_index_id);
                 $owner_info['drivers_mname'] = Input::get('drivers_mname' . $owners_index_id);
                 $owner_info['drivers_lname'] = Input::get('drivers_lname' . $owners_index_id);
                 $owner_info['drivers_nin'] = Input::get('drivers_nin' . $owners_index_id);
                 $owner_info['drivers_license_no'] = Input::get('drivers_license_no' . $owners_index_id);
                 $owner_info['drivers_street'] = Input::get('drivers_street' . $owners_index_id);
                 $owner_info['drivers_city'] = Input::get('drivers_city' . $owners_index_id);
                 $owner_info['drivers_po_box'] = Input::get('drivers_po_box' . $owners_index_id);
                 $owner_info['drivers_country'] = Input::get('drivers_country' . $owners_index_id);
                 $owner_info['drivers_cell1'] = Input::get('drivers_cell1' . $owners_index_id);
                 $owner_info['drivers_cell2'] = Input::get('drivers_cell2' . $owners_index_id);
                 $owner_info['drivers_email'] = Input::get('drivers_email' . $owners_index_id);
                 $owner_info['drivers_driving_status'] = Input::get('drivers_driving_status' . $owners_index_id);
                 $insert_owner_into_driver_table = Driver::create($owner_info);
                 // USED TO ASSOCIATE WITH VEHICLE
                 $owner_ids[] = $insert_owner_into_driver_table->id;
                 // USED TO SEND SMS
                 $ownerNamePh[$owner_info['drivers_cell1']]['name'] = $owner_info['drivers_fname'] . " " . $owner_info['drivers_lname'];
                 $ownerNamePh[$owner_info['drivers_cell1']]['address'] = $owner_info['drivers_street'] . ", " . $owner_info['drivers_city'] . " - " . $owner_info['drivers_po_box'];
                 $ownerNamePh[$owner_info['drivers_cell1']]['email'] = $owner_info['drivers_email'];
             } else {
                 $driverExist = Driver::where('drivers_license_no', $drivers_license_no)->first();
                 // USED TO ASSOCIATE WITH VEHICLE
                 $owner_ids[] = $driverExist->id;
                 // USED TO SEND SMS
                 $ownerNamePh[$driverExist->drivers_cell1]['name'] = $driverExist->drivers_fname . " " . $driverExist->drivers_lname;
                 $ownerNamePh[$driverExist->drivers_cell1]['address'] = $driverExist->drivers_street . " " . $driverExist->drivers_city . " - " . $driverExist->drivers_po_box;
                 $ownerNamePh[$driverExist->drivers_cell1]['email'] = $driverExist->drivers_email;
             }
         }
     }
     // LINK VEHICLE WITH OWNERS
     if (!empty($owner_ids)) {
         foreach ($owner_ids as $owner_ids_fet) {
             $owner_ids_fet = (int) $owner_ids_fet;
             Vehicle::find($vehicle_inserted_id)->owners()->attach($owner_ids_fet);
         }
     }
     // END OWNERS
     //BEGIN AUTHORIZED DRIVERS
     $authorized_index = Input::get('authorized_index');
     // IF AUTHORIZED DRIVERS EXIST, ASSOCIATE WITH DRIVERS.(CHECKING USING LICENSE)
     if ($authorized_index != "") {
         $authorized_index_arr = explode(',', $authorized_index);
         foreach ($authorized_index_arr as $authorized_index_id) {
             $authorized_license_no = Input::get('authorized_license_no' . $authorized_index_id);
             $authorized_status = Driver::where('drivers_license_no', $authorized_license_no)->first();
             //IF DRIVER DOESN'T EXISTS, CREATE DRIVER
             if ($authorized_status == NULL) {
                 $authorized_info['drivers_fname'] = Input::get('authorized_fname' . $authorized_index_id);
                 $authorized_info['drivers_mname'] = Input::get('authorized_mname' . $authorized_index_id);
                 $authorized_info['drivers_lname'] = Input::get('authorized_lname' . $authorized_index_id);
                 $authorized_info['drivers_nin'] = Input::get('authorized_nin' . $authorized_index_id);
                 $authorized_info['drivers_license_no'] = Input::get('authorized_license_no' . $authorized_index_id);
                 $authorized_info['drivers_street'] = Input::get('authorized_street' . $authorized_index_id);
                 $authorized_info['drivers_city'] = Input::get('authorized_city' . $authorized_index_id);
                 $authorized_info['drivers_po_box'] = Input::get('authorized_po_box' . $authorized_index_id);
                 $authorized_info['drivers_country'] = Input::get('authorized_country' . $authorized_index_id);
                 $authorized_info['drivers_cell1'] = Input::get('authorized_cell1' . $authorized_index_id);
                 $authorized_info['drivers_cell2'] = Input::get('authorized_cell2' . $authorized_index_id);
                 $authorized_info['drivers_email'] = Input::get('authorized_email' . $authorized_index_id);
                 $authorized_info['drivers_driving_status'] = Input::get('authorized_driving_status' . $authorized_index_id);
                 $insert_authorized_into_driver_table = Driver::create($authorized_info);
                 $authorized_ids[] = $insert_authorized_into_driver_table->id;
             } else {
                 $authorized_ids[] = Driver::where('drivers_license_no', $authorized_license_no)->first()->id;
             }
         }
         // LINK VEHICLE WITH AUTHORIZED DRIVERS
         foreach ($authorized_ids as $authorized_ids_fet) {
             $authorized_ids_fet = (int) $authorized_ids_fet;
             Vehicle::find($vehicle_inserted_id)->authorizedDrivers()->attach($authorized_ids_fet);
         }
     }
     // END AUTHORIZED DRIVERS
     // BEGIN INSURANCE
     if (Input::get('insurances_company') != "") {
         $insurance_arr = new Insurance(Input::only('insurances_company', 'insurances_policy_no', 'insurances_exp_date', 'insurances_agent_fname', 'insurances_agent_lname', 'insurances_agent_cell', 'insurances_agent_city', 'insurances_agent_email'));
         Vehicle::find($vehicle_inserted_id)->insurance()->save($insurance_arr);
     }
     // END INSURANCE
     // BEGIN LIEN HOLDER
     if (Input::get('lien_index')) {
         $lien_arr = new Lien(Input::only('liens_collateral_id', 'liens_collateral_value', 'liens_bank_name', 'liens_bank_branch', 'liens_bank_street', 'liens_bank_city'));
         //$lien_arr['liens_vehicle_id'] = $vehicle_inserted_id;
         //Lien::create($lien_arr);
         Vehicle::find($vehicle_inserted_id)->lien()->save($lien_arr);
     }
     // END LIEN HOLDER
     // BEGIN FILES
     $files_col = Input::file();
     $files_count = count(array_filter($files_col['files']));
     // IF FILES EXISTS
     if ($files_count) {
         foreach ($files_col['files'] as $files) {
             $filename_ar = explode('.', $files->getClientOriginalName());
             $document_ext = end($filename_ar);
             $path = public_path() . '/vehicledata/documents';
             // GENERATE RANDOM FILE NAME AND ADD EXTENSION
             $randName = md5(rand() * time());
             $document_name = $randName . '.' . $document_ext;
             // MOVE FILE AND ENTRY INTO DATABASE
             if ($files->move($path, $document_name)) {
                 //Document::create(['documents_vehicle_id' => $vehicle_inserted_id, 'documents_name' => $document_name]);
                 Vehicle::find($vehicle_inserted_id)->documents()->save(new Document(['documents_name' => $document_name]));
             }
         }
     }
     // END FILES
     // BEGIN REGISTRATION
     if (isset($vehicle_inserted_id) && $vehicle_inserted_id != "") {
         $registrations_vehicle_id = $vehicle_inserted_id;
         $registrations_no = Input::get('registrations_no');
         $registrations_licence_plate_no = Input::get('registrations_licence_plate_no');
         if ($registrations_no != "" && $registrations_licence_plate_no != "" && $registrations_vehicle_id != "") {
             $vehicles_use_type = Input::get('vehicles_use_type');
             $vehicles_class = Input::get('vehicles_class');
             if ($vehicles_use_type != "" && $vehicles_class != "") {
                 $vehicles_use_type_table_name = VehicleUseType::find($vehicles_use_type)->vehicle_use_types_table_name;
                 //REGISTRATION FEES
                 $vehicles_class_col_name = $vehicles_use_type_table_name . '_total';
                 $registrations_fees = DB::table($vehicles_use_type_table_name)->find($vehicles_class)->{$vehicles_class_col_name};
                 // INCREMENT REGISTRATION SEQUENCE
                 $vehicles_sequence_col_name = $vehicles_use_type_table_name . '_sequence';
                 $currentSequence = DB::table($vehicles_use_type_table_name)->find($vehicles_class)->{$vehicles_sequence_col_name};
                 $newSequence = $currentSequence + 1;
                 DB::table($vehicles_use_type_table_name)->where('id', $vehicles_class)->update([$vehicles_sequence_col_name => $newSequence]);
                 $registration_ar = compact('registrations_vehicle_id', 'registrations_no', 'registrations_licence_plate_no', 'registrations_fees');
                 //Registration::create($registration_ar);
                 Vehicle::find($vehicle_inserted_id)->registration()->save(new Registration($registration_ar));
                 // BEGIN TAKE LOGS
                 $newVehiclesStatus = Input::get('vehicles_status');
                 $newVehicleColor = Input::get('vehicles_color');
                 $newVehicleUseType = Input::get('vehicles_use_type');
                 $newVehiclesRegistrationNo = Input::get('registrations_no');
                 $vehicles_odometer = Input::get('vehicles_odometer');
                 LogVehicleStatus::create(['log_vehicle_status_vehicle_id' => $registrations_vehicle_id, 'log_vehicle_status_vehicle_status_id' => $newVehiclesStatus]);
                 LogVehicleColor::create(['log_vehicle_color_vehicle_id' => $registrations_vehicle_id, 'log_vehicle_color_color_id' => $newVehicleColor]);
                 LogVehicleUseType::create(['log_vehicle_use_type_vehicle_id' => $registrations_vehicle_id, 'log_vehicle_use_type_use_type' => $newVehicleUseType, 'log_vehicle_use_type_registration_no' => $newVehiclesRegistrationNo]);
                 LogVehicleOdometer::create(['log_vehicle_odometer_vehicle_id' => $registrations_vehicle_id, 'log_vehicle_odometer_old_odometer' => $vehicles_odometer, 'log_vehicle_odometer_status' => 1]);
                 // END TAKE LOGS
                 // BEGIN ASSOCIATE TEMPORARY VEHICLE FINES(IF ANY)
                 $vehicles_vin = Input::get('vehicles_vin');
                 $vehicleTemp = VehicleTemp::whereVehiclesVin($vehicles_vin)->first();
                 if ($vehicleTemp) {
                     // VEHICLE FINES
                     $violateVehicleTemp = $vehicleTemp->tempVehicleViolatile;
                     if ($violateVehicleTemp->count()) {
                         foreach ($violateVehicleTemp as $violateVehicleTempFet) {
                             ViolateVehicle::create(['vehicle_id' => $registrations_vehicle_id, 'driver_id' => $violateVehicleTempFet->driver_id, 'vehicle_fine_id' => $violateVehicleTempFet->vehicle_fine_id, 'vehicle_fine_unique_id' => $violateVehicleTempFet->vehicle_fine_unique_id, 'officer_id' => $violateVehicleTempFet->officer_id, 'geo_location' => $violateVehicleTempFet->geo_location, 'location_name' => $violateVehicleTempFet->location_name, 'longitude' => $violateVehicleTempFet->longitude, 'latitude' => $violateVehicleTempFet->latitude, 'status' => 2]);
                             ViolateVehicleTemp::find($violateVehicleTempFet->id)->update(['status' => 1]);
                         }
                     }
                     //DRIVER FINES
                     $violateDriverTemp = $vehicleTemp->tempDriverViolatile;
                     if ($violateDriverTemp->count()) {
                         foreach ($violateDriverTemp as $violateDriverTempFet) {
                             ViolateDriver::create(['vehicle_id' => $registrations_vehicle_id, 'driver_id' => $owner_ids[0], 'driver_fine_id' => $violateDriverTempFet->driver_fine_id, 'driver_fine_unique_id' => $violateDriverTempFet->driver_fine_unique_id, 'officer_id' => $violateDriverTempFet->officer_id, 'geo_location' => $violateDriverTempFet->geo_location, 'location_name' => $violateDriverTempFet->location_name, 'longitude' => $violateDriverTempFet->longitude, 'latitude' => $violateDriverTempFet->latitude, 'status' => 2]);
                             ViolateDriverTemp::find($violateDriverTempFet->id)->update(['status' => 1]);
                         }
                     }
                 }
                 //BEGIN SEND EMAIL
                 $owners = Driver::find($owner_ids);
                 $namesAr = $owners->lists('drivers_lname', 'drivers_fname');
                 foreach ($namesAr as $fname => $lname) {
                     $names[] = $fname . " " . $lname;
                 }
                 $names = implode(', ', $names);
                 $emails = $owners->lists('drivers_email');
                 $model = Model::find($vehicle['vehicles_model_id']);
                 $color = Color::find($newVehicleColor)->colors_name;
                 $data = compact('names', 'owners', 'model', 'color', 'newVehiclesRegistrationNo', 'registrations_licence_plate_no');
                 Mail::send('emails.vehicle.registration', $data, function ($message) use($emails) {
                     $message->to($emails)->subject('New vehicle Registration');
                 });
                 //END SEND EMAIL
                 // RETURN TO PRINT OUT
                 return Redirect::route('vehicle.print', [$registrations_vehicle_id]);
             }
         }
     } else {
         echo "Nothing is saved because fields are not filled";
         die;
     }
     // END REGISTRATION
 }