public function getFleetData($vehicle_id = null)
 {
     $vehicles = Vehicle::where('company_id', Auth::user()['company_id']);
     if (!empty($vehicle_id)) {
         $vehicles = $vehicles->where('id', $vehicle_id);
     }
     $vehicles = $vehicles->get();
     $tireData = [];
     $modelMaps = [];
     $gpsData = [];
     if (!empty($vehicles)) {
         $tires = PartRepositoryEloquent::getTiresVehicle();
         $fleetGpsData = $this->getFleetGpsData();
         $tireAndSensorData = $this->getFleetTireAndSensorData();
         foreach ($vehicles as $vehicle) {
             $modelMaps[$vehicle->model_vehicle_id] = $vehicle->model->map;
             $tireData[$vehicle->id] = [];
             $tiresPositions = PartRepositoryEloquent::getTiresPositions($tires, $vehicle->id);
             if (!empty($tiresPositions)) {
                 foreach ($tiresPositions as $position => $filled) {
                     if ($filled) {
                         if (!empty($tireAndSensorData[$vehicle->id][$position])) {
                             $tireData[$vehicle->id][$position] = $tireAndSensorData[$vehicle->id][$position];
                         } else {
                             $tireData[$vehicle->id][$position] = $tireAndSensorData[0];
                         }
                     }
                 }
             }
             $gpsData[$vehicle->id] = [];
             if (!empty($fleetGpsData[$vehicle->id])) {
                 $gpsData[$vehicle->id] = $fleetGpsData[$vehicle->id];
             }
         }
     }
     return ['vehicles' => $vehicles, 'tireData' => $tireData, 'gpsData' => $gpsData, 'modelMaps' => $modelMaps];
 }
 public static function getVehiclesStatistics()
 {
     $vehicles['in_use']['color'] = '#3871cf';
     $vehicles['in_use']['result'] = Vehicle::join('trips', 'vehicles.id', '=', 'trips.vehicle_id')->where('vehicles.company_id', Auth::user()['company_id'])->where('trips.pickup_date', '<=', Carbon::now())->where(function ($query) {
         $query->where('deliver_date', '>', Carbon::now())->orWhereNull('deliver_date');
     })->count();
     $vehicles['maintenance']['color'] = '#cf7138';
     $vehicles['maintenance']['result'] = Vehicle::join('entries', 'vehicles.id', '=', 'entries.vehicle_id')->join('types', 'types.id', '=', 'entries.entry_type_id')->where('vehicles.company_id', Auth::user()['company_id'])->where('types.entity_key', 'vehicle')->where('types.name', 'repair')->where('entries.datetime_ini', '<=', Carbon::now())->where(function ($query) {
         $query->where('datetime_end', '>', Carbon::now())->orWhereNull('datetime_end');
     })->count();
     $vehicles['available']['color'] = '#38cf71';
     $vehiclesOff = $vehicles['maintenance']['result'] + $vehicles['in_use']['result'];
     $vehicles['available']['result'] = Vehicle::where('vehicles.company_id', Auth::user()['company_id'])->count() - $vehiclesOff;
     return $vehicles;
 }