Пример #1
0
 /**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     $faker = Faker::create();
     for ($i = 0; $i < 30; $i++) {
         Vehicle::create(['color' => $faker->safeColorName(), 'power' => $faker->randomNumber(), 'capacity' => $faker->randomFloat(), 'speed' => $faker->randomFloat(), 'maker_id' => $faker->numberBetween(1, 5)]);
     }
 }
Пример #2
0
 /**
  * Display a listing of the resource.
  *
  * @return Response
  */
 public function index()
 {
     $vehicles = Vehicle::all();
     if (!$vehicles) {
         return response()->json(['message' => 'No vehicles found', 'code' => 404], 404);
     }
     return response()->json(['data' => $vehicles], 200);
 }
Пример #3
0
 /**
  * Display a listing of the vehicles.
  *
  * @return Response
  */
 public function index()
 {
     $limit = Input::get('limit') ?: 5;
     $vehicles = Vehicle::paginate($limit);
     // dd(get_class_methods($lessons));
     $data = ['data' => $this->vehicleTransformer->transformCollection($vehicles->all())];
     return $this->respondWithPagination($vehicles, $data);
 }
Пример #4
0
 /**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     DB::statement('SET FOREIGN_KEY_CHECKS = 0');
     Model::unguard();
     Maker::truncate();
     //delete the previous db data and then seed the db
     Vehicle::truncate();
     $this->call('MakerTableSeeder');
     $this->call('VehicleTableSeeder');
     Model::reguard();
 }
Пример #5
0
 /**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     DB::statement('SET FOREIGN_KEY_CHECKS=0');
     Maker::truncate();
     Vehicle::truncate();
     User::truncate();
     DB::statement('SET FOREIGN_KEY_CHECKS=1');
     Model::unguard();
     $this->call(MakerTableSeeder::class);
     $this->call(VehicleTableSeeder::class);
     $this->call(UserTableSeeder::class);
     Model::reguard();
 }
Пример #6
0
 /**
  * Display a listing of the resource.
  *
  * @return \Illuminate\Http\Response
  */
 public function index()
 {
     // Retreiving from the db without cashing may slow down the db server, so
     // it's better to use caching function in Laravel to avoid that
     //$vehicles = Vehicle::all();
     $tableName = 'vehicles';
     $interval = 15 / 60;
     // 15 seconds
     $results = Cache::remember($tableName, $interval, function () {
         return Vehicle::simplePaginate(5);
     });
     return response()->json(['count' => $results->count(), 'currentPage' => $results->currentPage(), 'hasMorePages' => $results->hasMorePages(), 'perPage' => $results->perPage(), 'nextUrl' => $results->nextPageUrl(), 'prevUrl' => $results->previousPageUrl(), 'data' => $results->items()], 200);
 }
 public function testAverageFillupConsumptionCalculation()
 {
     $averageUser = $this->getTestUser();
     $vehicle = Vehicle::firstOrCreate(['user_id' => $averageUser->id, 'registration' => 'ASD-567']);
     $fillupsData = $this->getFillupData($vehicle->id);
     $fillups = [];
     foreach ($fillupsData as $fillupData) {
         array_push($fillups, Fillup::firstOrCreate($fillupData));
     }
     $this->assertEquals(0, AverageConsumptionService::getFillupConsumption($fillups[0]->id));
     $this->assertEquals(60 / ((1500 - 1000) / 100), AverageConsumptionService::getFillupConsumption($fillups[1]->id));
     $this->assertEquals(70 / ((2000 - 1500) / 100), AverageConsumptionService::getFillupConsumption($fillups[2]->id));
 }
Пример #8
0
 /**
  * Run the database seeds.
  *
  * @return void
  */
 public function run()
 {
     //disable foreign key check for this connection before running seeders
     DB::statement('SET FOREIGN_KEY_CHECKS=0;');
     Vehicle::truncate();
     Maker::truncate();
     User::truncate();
     Model::unguard();
     $this->call('MakersSeed');
     $this->call('VehiclesSeed');
     $this->call('UsersSeed');
     //might not be necessary
     DB::statement('SET FOREIGN_KEY_CHECKS=1;');
 }
Пример #9
0
 /**
  * Check that the vehicle in the request belongs to the logged in user
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  \Callable  $next
  * @return mixed
  */
 public function handle($request, Closure $next)
 {
     $requestUri = $request->getRequestUri();
     $regex = '/^\\/.*\\/vehicle\\/(\\d+)\\/?.*/';
     $result = preg_match($regex, $requestUri, $matches);
     if ($result === 1) {
         $vehicleId = $matches[1];
         $userId = $request->user()->id;
         try {
             $vehicle = Vehicle::findOrFail($vehicleId);
         } catch (ModelNotFoundException $e) {
             return response("Not found", 404);
         }
         if ($vehicle->user_id !== $userId) {
             return response("Forbidden", 403);
         }
     }
     return $next($request);
 }
Пример #10
0
 /**
  * Post the add vehicle form.
  *
  * @return Response
  */
 public function postAddVehicle(Request $request)
 {
     //validation
     $v = Validator::make($request->all(), ['reg_no' => 'required|min:2|max:15', 'make' => 'required|max:25', 'model' => 'required|max:25', 'transmission' => 'required|in:Automatic,Manual']);
     //Checking validation outcome
     if ($v->fails()) {
         /**
          * Validation failed
          * Redirecting back to the page with errors and inputs
          */
         return back()->withErrors($v)->withInput();
     } else {
         /**
          * Validation passed
          * Creating the vehicle record
          */
         $vehicle = Vehicle::create(['instructor_id' => $request->user()->instructor->instructor_id, 'reg_no' => $request->reg_no, 'make' => $request->make, 'model' => $request->model, 'transmission' => $request->transmission]);
         if ($vehicle) {
             return redirect()->action('InstructorController@getIndex')->with('message', 'Vehicle added!')->with('alert-class', 'alert-info');
         } else {
             return redirect()->action('InstructorController@getIndex')->with('message', 'Unable to add vehicle')->with('alert-class', 'alert-danger');
         }
         //End of if statement
     }
     //End of if statement
 }
Пример #11
0
 public function getAddFillupView(Request $request, $vehicleId)
 {
     $activeUser = $request->user();
     $vehicle = Vehicle::findOrFail($vehicleId);
     return view('fillup.create')->with(['activeUser' => $activeUser, 'vehicle' => $vehicle]);
 }
Пример #12
0
 /**
  * Remove the specified resource from storage.
  *
  * @param  int  $id
  * @return Response
  */
 public function destroy($id)
 {
     $success = Vehicle::find($id)->delete();
     if ($success) {
         return redirect('/vehicles');
     } else {
         return redirect('/vehicles', 422);
     }
 }
Пример #13
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function handle()
 {
     // Let's get all credit sales that have not been paid yet.
     $creditSales = Sale::where('Credit', '=', true)->where('Cancelled', '=', false)->get();
     // Check if any of them are due soon.
     $today = date('Y-m-d H:i:s');
     foreach ($creditSales as $sale) {
         // Get the client or institution that made the credit purchase.
         $creditor = null;
         if ($sale->CreditorType == 1) {
             $creditor = Client::find($sale->CreditorId);
         } else {
             $creditor = Institution::find($sale->CreditorId);
         }
         // First check if the payment is late.
         if (date('Y-m-d H:i:s', strtotime($sale->Created) + $creditor->CreditDays * 86400) < $today) {
             // If it's past due for more than a month notify admins so they can deal with it.
             if (date('Y-m-d H:i:s', strtotime($sale->Created) + ($creditor->CreditDays + 30) * 86400) < $today) {
                 // In this case we don't have a vehicle and the provider doesn't provide delivery so we must notify an administrator.
                 $users = User::where('UserLevel', '=', 1)->get();
                 foreach ($users as $admin) {
                     Notification::create(array('UserId' => $admin->Id, 'Created' => date('Y-m-d H:i:s'), 'Reason' => 'Aergia ha tratado de cobrar la venta de credito con factura: ' . $sale->Id . ', sin embargo no se ha registrado el pago de la factura y esta tiene mas de un mes de vencimiento. Aergia no seguira tratando de cobrar esta factura, por favor darle seguimiento al caso.', 'Url' => '/creditdue/' . $sale->Id, 'Seen' => false));
                 }
             } else {
                 // Check to see if there is a transport request active to collect payment.
                 $transport = Transport::where('Type', '=', 7)->where('ReasonId', '=', $sale->Id)->where('Date', '>', date('Y-m-d'))->get();
                 if (count($transport) == 0) {
                     // Get a vehicle that can be used to go to charge creditor.
                     $vehicles = Vehicle::where('BranchId', '=', $sale->BranchId)->where('Repair', '=', false)->get();
                     $vehicle = null;
                     foreach ($vehicles as $v) {
                         if (!$vehicle) {
                             $vehicle = $v;
                         }
                         // In this case the smaller the vehicle the more suitable it should be.
                         // TODO: This could be improved.
                         if ($v->Type < $vehicle->Type) {
                             $vehicle = $v;
                         }
                     }
                     if (!$vehicle) {
                         // In this case we don't have a vehicle to go charge creditor so we must notify an administrator.
                         $users = User::where('UserLevel', '=', 1)->get();
                         foreach ($users as $admin) {
                             Notification::create(array('UserId' => $admin->Id, 'Created' => date('Y-m-d H:i:s'), 'Reason' => 'Aergia no fue capaz de organizar el cobro de la factura: ' . $sale->Id . ' ya que no tuvo vehiculos disponibles para hacerlo. Por favor organizar el cobro de la factura.', 'Url' => '/creditdue/' . $sale->Id, 'Seen' => false));
                         }
                     } else {
                         // Get location of creditor.
                         $location = Location::find($creditor->LocationId);
                         $paymentCollection = Transport::create(array('Date' => date('Y-m-d', strtotime("+1 day")), 'Time' => '00:00:00', 'VehicleId' => $vehicle->Id, 'DriverId' => 0, 'StartLatitude' => 0, 'StartLongitude' => 0, 'Journey' => '[]', 'EndLatitude' => $location->Latitude, 'EndLongitude' => $location->Longitude, 'EndAddress' => $creditor->Address, 'Distance' => 0, 'ReasonId' => $sale->Id, 'Type' => 7, 'State' => 2, 'Order' => 0, 'Depreciation' => 0));
                         // Inform creditor of when you shall collect payment.
                         if ($creditor->Email != '') {
                             Mail::send('emails.ai.creditorReminder', ['sale' => $sale, 'creditor' => $creditor, 'transport' => $paymentCollection], function ($message) use($sale, $creditor) {
                                 $message->to($creditor->Email);
                                 $message->subject('Cobro Factura: ' . $sale->Id);
                             });
                         }
                     }
                 }
             }
         }
     }
 }
Пример #14
0
 public function updateVehiclePosition(Request $request)
 {
     $all = $request->all();
     $Vehicle = Vehicle::where('user_id', '=', JWTAuth::parseToken()->toUser()->id)->first();
     $lastTracked = VehicleLocation::where('vehicle_id', $Vehicle->id)->orderBy('timestamp', 'desc')->first();
     if (abs($lastTracked->lat - $all['position']["latitude"]) == 0 && abs($lastTracked->lon - $all['position']["longitude"]) == 0) {
         $lastTracked->updated_at = date('Y-m-d H:i:s', time());
         $lastTracked->timestamp = time();
         $lastTracked->save();
     } else {
     }
     $vehicleLocation = new \App\VehicleLocation(array('lat' => $all['position']["latitude"], 'lon' => $all['position']['longitude'], 'vehicle_id' => $Vehicle->id, 'timestamp' => time(), 'connection_type' => 'spotter_app'));
     $vehicleLocation->save();
     $Vehicle->updated_at = date('Y-m-d H:i:s', time());
     $Vehicle->save();
     //echo $vehicleLocation->id;
     //$result['vessels'] = $vehicles->toArray();
     //return $result;
     return $Vehicle;
 }
Пример #15
0
 /**
  * Show the form for editing the specified resource.
  *
  * @param  int  $id
  * @return \Illuminate\Http\Response
  */
 public function edit($id)
 {
     $estimate = Estimate::findOrFail($id);
     $vehicles = Vehicle::lists('reg_no', 'id')->all();
     $customer_list = Customer::lists('name', 'id')->all();
     $departments = Department::lists('name', 'id');
     $items = Item::lists('name', 'id')->all();
     $estimate_details = DB::table('estimate_details')->where('estimate_id', '=', $id)->get();
     return view('estimates.edit', compact('estimate', 'vehicles', 'estimate_details', 'customer_list', 'departments', 'items'));
 }
Пример #16
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function handle()
 {
     // Get contracts that are still active.
     $contracts = Contract::where('State', '!=', 'used')->where('State', '!=', 'cancelled')->where('State', '!=', 'paid')->get();
     foreach ($contracts as $contract) {
         // Check if we have visited this month.
         if ($contract->Visited) {
             // Check if we should reset this.
             if ($contract->QuotaInterval == 'mensuales') {
                 if ('01' == date('d')) {
                     $contract->Visited = false;
                     $contract->save();
                 }
             } else {
                 if ($contract->QuotaInterval == 'quincenales') {
                     if ('01' == date('d')) {
                         $contract->Visited = false;
                         $contract->save();
                     } else {
                         if ('16' == date('d')) {
                             $contract->Visited = false;
                             $contract->save();
                         }
                     }
                 } else {
                     if (date('D') == 'Mon') {
                         $contract->Visited = false;
                         $contract->save();
                     }
                 }
             }
         }
         // Check if we need to organize a visit for this contract.
         if (!$contract->Visited) {
             if ($contract->StartDate < date('Y-m-d')) {
                 $visitDates = explode(',', $contract->PaymentDates);
                 foreach ($visitDates as $date) {
                     if ($date == date('d', strtotime("+3 days"))) {
                         // Check if we already have a visit programmed for this contract.
                         $transports = Transport::where('Type', '=', '8')->where('ReasonId', '=', $contract->Id)->where('Date', '=', date('Y-m-d', strtotime("+3 days")))->get();
                         if (count($transports) == 0) {
                             // Get an appropriate vehicle for this.
                             $vehicles = Vehicle::where('BranchId', '=', $contract->BranchId)->where('Repair', '=', false)->get();
                             $vehicle = null;
                             foreach ($vehicles as $v) {
                                 if (!$vehicle) {
                                     $vehicle = $v;
                                 }
                                 // In this case the smaller the vehicle the more suitable it should be.
                                 // TODO: This could be improved.
                                 if ($v->Type < $vehicle->Type) {
                                     $vehicle = $v;
                                 }
                             }
                             if (!$vehicle) {
                                 // In this case we don't have a vehicle and the provider doesn't provide delivery so we must notify an administrator.
                                 $users = User::where('UserLevel', '=', 1)->get();
                                 foreach ($users as $admin) {
                                     Notification::create(array('UserId' => $admin->Id, 'Created' => date('Y-m-d H:i:s'), 'Reason' => 'Aergia no fue capaz de organizar el cobro para el contrato ' . $contract->Code . '. Por favor revisar y organizar el cobro de la cuota de este contrato.', 'Url' => '/contract/' . $contract->Id, 'Seen' => false));
                                 }
                             } else {
                                 // Get location of client.
                                 $client = Client::find($contract->ClientId);
                                 $location = Location::find($client->LocationId);
                                 $transport = Transport::create(array('Date' => date('Y-m-d', strtotime("+3 day")), 'Time' => '00:00:00', 'VehicleId' => $vehicle->Id, 'DriverId' => 0, 'StartLatitude' => 0, 'StartLongitude' => 0, 'Journey' => '[]', 'EndLatitude' => $location->Latitude, 'EndLongitude' => $location->Longitude, 'EndAddress' => $client->Address, 'Distance' => 0, 'ReasonId' => $contract->Id, 'Type' => 8, 'State' => 2, 'Order' => 0, 'Depreciation' => 0));
                                 // Inform creditor of when you shall collect payment.
                                 if ($client->Email != '') {
                                     Mail::send('emails.ai.contractReminder', ['contract' => $contract, 'transport' => $transport], function ($message) use($contract, $client) {
                                         $message->to($client->Email);
                                         $message->subject('Cobro de Cuota de Contrato: ' . $contract->Code);
                                     });
                                 }
                             }
                         }
                     }
                 }
             }
         }
         // TODO: Not sure if I want to do something in these cases.
         switch ($contract->State) {
             case 'usedpending':
                 break;
             case 'late':
                 break;
         }
     }
 }
Пример #17
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function handle()
 {
     // Get all transport requests for today group them by vehicle.
     $transportRequests = Transport::where('Date', '=', date('Y-m-d'))->where('State', '=', 2)->orderBy('VehicleId')->get();
     if (count($transportRequests) > 0) {
         // Seperate all transport request of first vehicle.
         $vehicleId = 0;
         $selectedTransport = array();
         $sortedByVehicle = array();
         foreach ($transportRequests as $transport) {
             if ($vehicleId == 0) {
                 $vehicleId = $transport->VehicleId;
             }
             if ($vehicleId != $transport->VehicleId) {
                 array_push($sortedByVehicle, $selectedTransport);
                 $selectedTransport = array();
                 $vehicleId = $transport->VehicleId;
             } else {
                 array_push($selectedTransport, $transport);
             }
         }
         // Add final set to sortedByVehicle array.
         array_push($sortedByVehicle, $selectedTransport);
         $clusterArray = array();
         foreach ($sortedByVehicle as $s) {
             // Get other available vehicles of selected vehicle type.
             $vehicle = Vehicle::find($s[0]->VehicleId);
             $vehicles = Vehicle::where('Type', '=', $vehicle->Type)->where('Repair', '=', false)->get();
             // Check if we have more transport requests than vehicles.
             if (count($s) >= count($vehicles)) {
                 // If we do go ahead with K-means algorithm.
                 $kmean = array();
                 $used = array();
                 foreach ($vehicles as $v) {
                     // Randomly select x amount of indexes from lat lon cluster array and add them to k object.
                     array_push($kmean, array('VehicleId' => $v->Id, 'Mean' => $this->getRandomLocation($s, $used), 'Cluster' => array()));
                 }
                 // Now compare all lat lon points by distance to selected points and add them to closest point cluster.
                 foreach ($s as $t) {
                     $index = $this->getClosest($t, $kmean);
                     array_push($kmean[$index]['Cluster'], $t);
                 }
                 // Start loop until no further changes are made.
                 $changed = true;
                 $limit = 500;
                 while ($changed && $limit > 1) {
                     $changed = false;
                     // Update each mean in k object.
                     foreach ($kmean as $i => $k) {
                         $newMean = $this->calculateMean($k['Cluster']);
                         if ($newMean['Lat'] != $k['Mean']['Lat'] || $newMean['Lat'] != $k['Mean']['Lat']) {
                             $kmean[$i]['Mean'] = $newMean;
                             $changed = true;
                         }
                         // Clean cluster array in each k-object.
                         $kmean[$i]['Cluster'] = array();
                     }
                     // Compare lat lon points by distance again.
                     foreach ($s as $t) {
                         $index = $this->getClosest($t, $kmean);
                         array_push($kmean[$index]['Cluster'], $t);
                     }
                     // Emergency exit.
                     $limit--;
                 }
                 // Now that this set has been organized update them in database.
                 foreach ($kmean as $k) {
                     foreach ($k['Cluster'] as $index => $t) {
                         $t->Order = $index + 1;
                         $t->VehicleId = $k['VehicleId'];
                         print_r($t);
                         $t->save();
                     }
                 }
             } else {
                 // TODO: This is here to improve transport selection when there is very little to do.
                 echo 'less transport requests';
             }
         }
     }
 }
 /** vehicle license renewal request view */
 public function renewal_request($id)
 {
     $check = Vehicle::findOrFail($id);
     $vehicle = DB::table('vehicles')->join('vehicle_types', 'vehicle_types.id', '=', 'vehicles.vehicle_type_id')->select('vehicles.*', 'vehicle_types.type')->where('vehicles.id', $id)->first();
     /* $license_types = DB::table('license_types')
        ->join('license_type_vehicle','license_types.id', '=', 'license_type_vehicle.license_type_id')
        ->leftJoin('license_renewal_requests', 'license_type_vehicle.license_type_id', '=', 'license_renewal_requests.license_type_id')
        ->select('license_types.id as license_type_id','license_types.type', 'license_type_vehicle.license_start_on', 'license_type_vehicle.license_end_on','license_type_vehicle.id as license_type_vehicle_id','license_renewal_requests.status')
        ->where('license_type_vehicle.vehicle_id','=',$id)
        ->whereNull('license_type_vehicle.deleted_at')
        ->get();*/
     $license_types = DB::table('license_types')->join('license_type_vehicle', 'license_types.id', '=', 'license_type_vehicle.license_type_id')->select('license_types.id as license_type_id', 'license_types.type', 'license_type_vehicle.license_start_on', 'license_type_vehicle.license_end_on')->where('license_type_vehicle.vehicle_id', '=', $id)->whereNull('license_type_vehicle.deleted_at')->get();
     $renewal_request = DB::select(DB::raw("SELECT vehicle_id, license_type_id, status FROM( SELECT * FROM `license_renewal_requests` WHERE vehicle_id={$id} ORDER BY requested_on DESC) as inv GROUP BY license_type_id,vehicle_id"));
     $request = array();
     if (!empty($renewal_request)) {
         foreach ($renewal_request as $value) {
             $request[$value->license_type_id] = $value->status;
         }
     }
     return view('vehicle.renewal_request', compact('vehicle', 'license_types', 'request'));
 }
Пример #19
0
 private function assertVehicleExists($vehicleId)
 {
     try {
         $vehicle = Vehicle::findOrFail($vehicleId);
     } catch (ModelNotFoundException $e) {
         abort(404);
     }
 }
Пример #20
0
 /**
  * Function that locates vehicles.
  *
  * @return Response
  */
 public function locateVehicle()
 {
     // Validate Input.
     $validator = Validator::make(Input::all(), array('vehicle' => 'required'));
     if ($validator->fails()) {
         return response()->json(['error' => 'Informacion incompleta!']);
     }
     // Check that user is part of authorized staff.
     if (Auth::user()->Type != 1) {
         // If they are unauthorized no point in returning anything.
         return response()->json(array());
     }
     // Get vehicle or vehicles.
     $branchId = Worker::find(Auth::user()->TypeId)->BranchId;
     $vehicle = array();
     if (Input::get('vehicle') == 0) {
         $vehicle = Vehicle::where('BranchId', '=', $branchId)->get();
     } else {
         $vehicle = Vehicle::where('Id', '=', Input::get('vehicle'))->get();
     }
     $response['state'] = 'Success';
     $response['vehicle'] = $vehicle;
     return response()->json($response);
 }
 /**
  * Remove the specified resource from storage.
  *
  * @param  int  $id
  *
  * @return Response
  */
 public function destroy($id)
 {
     Vehicle::destroy($id);
     Session::flash('flash_message', 'Vehicle deleted!');
     return redirect('camp/vehicles');
 }
 /**  */
 public function update_license($id)
 {
     $license_types = Vehicle::findOrFail($id)->license_types->toArray();
     $license_type_arr = array();
     if (!empty($license_types)) {
         foreach ($license_types as $license_type) {
             $license_type_arr[$license_type['id']] = $license_type['type'];
         }
     }
     $vehicle_id = $id;
     return view('vehicle.update_license', compact('license_type_arr', 'vehicle_id'));
 }
Пример #23
0
 /**
  * Remove the specified resource from storage.
  *
  * @param  int $id
  * @return Response
  */
 public function destroy($id)
 {
     try {
         $vehicle = Vehicle::findOrFail($id);
         $vehicle->delete();
         return response('', 204);
     } catch (ModelNotFoundException $e) {
         abort(404);
     }
 }
Пример #24
0
 /**
  * Show a list of all the languages posts formatted for Datatables.
  *
  * @return Datatables JSON
  */
 public function data()
 {
     //weird workaround because datable was broken
     $users = Vehicle::all();
     return Datatables::of($users)->remove_column('created_at')->remove_column('updated_at')->remove_column('deleted_at')->remove_column('locations')->remove_column('last_tracked')->remove_column('type')->remove_column('key')->remove_column('user_id')->remove_column('marker_color')->add_column('actions', '@if ($id!="1337123123")<a href="{{{ URL::to(\'admin/vehicle/\' . $id . \'/edit\' ) }}}" class="btn btn-success btn-sm iframe" ><span class="glyphicon glyphicon-pencil"></span>  {{ trans("admin/modal.edit") }}</a>
                 <a href="{{{ URL::to(\'admin/vehicle/\' . $id . \'/delete\' ) }}}" class="btn btn-sm btn-danger iframe"><span class="glyphicon glyphicon-trash"></span> {{ trans("admin/modal.delete") }}</a>
             @endif')->make();
 }
Пример #25
0
 /**
  * Display a listing of the resource.
  *
  * @return \Illuminate\Http\Response
  */
 public function index()
 {
     $customers = Customer::all();
     $vehicles = Vehicle::all();
     return view('customers.customers', compact('customers', 'vehicles'));
 }
Пример #26
0
 /**
  * Execute the console command.
  *
  * @return mixed
  */
 public function handle()
 {
     // Get providers.
     $providers = Provider::all();
     // Get the branches.
     $branches = Branch::all();
     // Loop through them and check which ones are set to auto order.
     foreach ($providers as $provider) {
         if ($provider->AIManaged) {
             foreach ($branches as $branch) {
                 // Now let's get all the products for this provider.
                 $products = Stock::where('BranchId', '=', $branch->Id)->where('ProviderId', '=', $provider->Id)->get();
                 $order = array();
                 foreach ($products as $product) {
                     if ($product->Quantity <= $product->Minimum) {
                         $order[$product->Code] = array('Code' => $product->Code, 'Description' => $product->Description, 'Exist' => $product->Quantity, 'Cost' => $product->Cost, 'Minimum' => $product->Minimum, 'Order' => 0, 'Average' => 0, 'Sold' => 0);
                     }
                 }
                 // Get all the products sold in selected sample range.
                 $today = date('Y-m-d H:i:s');
                 switch ($provider->SampleRange) {
                     case '1week':
                         $startDate = date('Y-m-d H:i:s', strtotime($today) - 604800);
                         $sales = Sale::where('BranchId', '=', $branch->Id)->where('Created', '>=', $startDate)->where('Created', '<=', $today)->get();
                         foreach ($sales as $sale) {
                             $breakdown = SaleBreakdown::where('SaleId', '=', $sale->Id)->get();
                             foreach ($breakdown as $item) {
                                 if (array_key_exists($item->Code, $order)) {
                                     $order[$item->Code]['Sold'] += $item->Quantity;
                                 }
                             }
                         }
                         // Now calculate average of each product.
                         foreach ($order as $index => $product) {
                             $order[$index]['Average'] = $product['Sold'] / 7;
                         }
                         break;
                     case '2week':
                         $startDate = date('Y-m-d H:i:s', strtotime($today) - 1209600);
                         $sales = Sale::where('BranchId', '=', $branch->Id)->where('Created', '>=', $startDate)->where('Created', '<=', $today)->get();
                         foreach ($sales as $sale) {
                             $breakdown = SaleBreakdown::where('SaleId', '=', $sale->Id)->get();
                             foreach ($breakdown as $item) {
                                 if (array_key_exists($item->Code, $order)) {
                                     $order[$item->Code]['Sold'] += $item->Quantity;
                                 }
                             }
                         }
                         // Now calculate average of each product.
                         foreach ($order as $index => $product) {
                             $order[$index]['Average'] = $product['Sold'] / 14;
                         }
                         break;
                     case '1month':
                         $startDate = date('Y-m-d H:i:s', strtotime($today) - 2419200);
                         $sales = Sale::where('BranchId', '=', $branch->Id)->where('Created', '>=', $startDate)->where('Created', '<=', $today)->get();
                         foreach ($sales as $sale) {
                             $breakdown = SaleBreakdown::where('SaleId', '=', $sale->Id)->get();
                             foreach ($breakdown as $item) {
                                 if (array_key_exists($item->Code, $order)) {
                                     $order[$item->Code]['Sold'] += $item->Quantity;
                                 }
                             }
                         }
                         // Now calculate average of each product.
                         foreach ($order as $index => $product) {
                             $order[$index]['Average'] = $product['Sold'] / 30;
                         }
                         break;
                     case '3month':
                         $startDate = date('Y-m-d H:i:s', strtotime($today) - 7257600);
                         $sales = Sale::where('BranchId', '=', $branch->Id)->where('Created', '>=', $startDate)->where('Created', '<=', $today)->get();
                         foreach ($sales as $sale) {
                             $breakdown = SaleBreakdown::where('SaleId', '=', $sale->Id)->get();
                             foreach ($breakdown as $item) {
                                 if (array_key_exists($item->Code, $order)) {
                                     $order[$item->Code]['Sold'] += $item->Quantity;
                                 }
                             }
                         }
                         // Now calculate average of each product.
                         foreach ($order as $index => $product) {
                             $order[$index]['Average'] = $product['Sold'] / 90;
                         }
                         break;
                     case '1year':
                         $startDate = date('Y-m-d H:i:s', strtotime($today) - 29030400);
                         $sales = Sale::where('BranchId', '=', $branch->Id)->where('Created', '>=', $startDate)->where('Created', '<=', $today)->get();
                         foreach ($sales as $sale) {
                             $breakdown = SaleBreakdown::where('SaleId', '=', $sale->Id)->get();
                             foreach ($breakdown as $item) {
                                 if (array_key_exists($item->Code, $order)) {
                                     $order[$item->Code]['Sold'] += $item->Quantity;
                                 }
                             }
                         }
                         // Now calculate average of each product.
                         foreach ($order as $index => $product) {
                             $order[$index]['Average'] = $product['Sold'] / 365;
                         }
                         break;
                 }
                 // Now calculate amount to order based on average, existence, minimum and order range.
                 switch ($provider->OrderRange) {
                     case '3day':
                         foreach ($order as $index => $product) {
                             $estimatedOrder = $product['Average'] * 3;
                             // Order should be at least twice minimum required with existence influded.
                             if ($estimatedOrder + $product['Exist'] < $product['Minimum'] * 2) {
                                 $estimatedOrder = $product['Minimum'] * 2;
                             }
                             $order[$index]['Order'] = ceil($estimatedOrder);
                         }
                         break;
                     case '1week':
                         foreach ($order as $index => $product) {
                             $estimatedOrder = $product['Average'] * 7;
                             // Order should be at least twice minimum required with existence influded.
                             if ($estimatedOrder + $product['Exist'] < $product['Minimum'] * 2) {
                                 $estimatedOrder = $product['Minimum'] * 2;
                             }
                             $order[$index]['Order'] = ceil($estimatedOrder);
                         }
                         break;
                     case '2week':
                         foreach ($order as $index => $product) {
                             $estimatedOrder = $product['Average'] * 14;
                             // Order should be at least twice minimum required with existence influded.
                             if ($estimatedOrder + $product['Exist'] < $product['Minimum'] * 2) {
                                 $estimatedOrder = $product['Minimum'] * 2;
                             }
                             $order[$index]['Order'] = ceil($estimatedOrder);
                         }
                         break;
                     case '1month':
                         foreach ($order as $index => $product) {
                             $estimatedOrder = $product['Average'] * 30;
                             // Order should be at least twice minimum required with existence influded.
                             if ($estimatedOrder + $product['Exist'] < $product['Minimum'] * 2) {
                                 $estimatedOrder = $product['Minimum'] * 2;
                             }
                             $order[$index]['Order'] = ceil($estimatedOrder);
                         }
                         break;
                     case '3month':
                         foreach ($order as $index => $product) {
                             $estimatedOrder = $product['Average'] * 90;
                             // Order should be at least twice minimum required with existence influded.
                             if ($estimatedOrder + $product['Exist'] < $product['Minimum'] * 2) {
                                 $estimatedOrder = $product['Minimum'] * 2;
                             }
                             $order[$index]['Order'] = ceil($estimatedOrder);
                         }
                         break;
                 }
                 // Check if we have recently made an order for this provider to fix order.
                 $aiOrders = AIOrder::where('GenerationDate', '>', date('Y-m-d H:i:s', strtotime($today) - 259200))->where('Received', '=', false)->where('BranchId', '=', $branch->Id)->get();
                 foreach ($aiOrders as $o) {
                     // Get breakdown and remove quantity from order.
                     $breakdown = AIOrderBreakdown::where('AIOrderId', '=', $o->Id)->get();
                     foreach ($breakdown as $item) {
                         if (array_key_exists($item->Code, $order)) {
                             $order[$item->Code]['Order'] -= $item->Quantity;
                         }
                     }
                 }
                 // Check if we have anything to order.
                 $sendOrder = false;
                 foreach ($order as $item) {
                     if ($item['Order'] > 0) {
                         $sendOrder = true;
                     }
                 }
                 if (!$sendOrder) {
                     return 1;
                 }
                 // Generate Order.
                 $aiOrder = AIOrder::create(array('GenerationDate' => date('Y-m-d H:i:s'), 'ConfirmationDate' => '0000-00-00 00:00:00', 'ProviderId' => $provider->Id, 'BranchId' => $branch->Id, 'Received' => false, 'EstimatedDelivery' => date('Y-m-d', strtotime("+3 days"))));
                 foreach ($order as $item) {
                     AIOrderBreakdown::create(array('AIOrderId' => $aiOrder->Id, 'Code' => $item['Code'], 'Quantity' => $item['Order']));
                 }
                 $breakdown = AIOrderBreakdown::where('AIOrderId', '=', $aiOrder->Id)->get();
                 // Now if the provider has delivery send email with order.
                 if ($provider->Delivery) {
                     // Now check what method we will use to make order.
                     if ($provider->Method == 'email') {
                         try {
                             Mail::send('emails.ai.makeOrder', ['order' => $aiOrder, 'breakdown' => $breakdown], function ($message) use($provider, $aiOrder) {
                                 $message->to($provider->Email);
                                 $message->subject('Orden de Compra: ' . $aiOrder->Id);
                             });
                         } catch (\Exception $e) {
                             // In this case we should let an administrator know that the email order failed.
                             $users = User::where('UserLevel', '=', 1)->get();
                             foreach ($users as $admin) {
                                 Notification::create(array('UserId' => $admin->Id, 'Created' => date('Y-m-d H:i:s'), 'Reason' => 'Aergia no fue capaz de organizar un pedido via correo para ' . $provider->Name . '. Por favor revisar orden y organizar su compra.', 'Url' => '/ai/order/' . $aiOrder->Id, 'Seen' => false));
                             }
                         }
                     } else {
                         if ($provider->Method == 'ai') {
                             // TODO: Establish Contact via AI.
                         }
                     }
                 } else {
                     // If the provider doesn't have delivery program a trip to make purchase.
                     $vehicles = Vehicle::where('BranchId', '=', $branch->Id)->where('Repair', '=', false)->get();
                     $vehicle = null;
                     foreach ($vehicles as $v) {
                         if (!$vehicle) {
                             $vehicle = $v;
                         }
                         // In this case the bigger the vehicle the more suitable it should be.
                         // TODO: This could be improved.
                         if ($v->Type > $vehicle->Type) {
                             $vehicle = $v;
                         }
                     }
                     if (!$vehicle) {
                         // In this case we don't have a vehicle and the provider doesn't provide delivery so we must notify an administrator.
                         $users = User::where('UserLevel', '=', 1)->get();
                         foreach ($users as $admin) {
                             Notification::create(array('UserId' => $admin->Id, 'Created' => date('Y-m-d H:i:s'), 'Reason' => 'Aergia no fue capaz de organizar un pedido a para ' . $provider->Name . '. Por favor revisar orden y organizar su compra.', 'Url' => '/ai/order/' . $aiOrder->Id, 'Seen' => false));
                         }
                     } else {
                         // Get location of provider.
                         $location = Location::find($provider->LocationId);
                         $transport = Transport::create(array('Date' => date('Y-m-d', strtotime("+1 day")), 'Time' => '00:00:00', 'VehicleId' => $vehicle->Id, 'DriverId' => 0, 'StartLatitude' => 0, 'StartLongitude' => 0, 'Journey' => '[]', 'EndLatitude' => $location->Latitude, 'EndLongitude' => $location->Longitude, 'EndAddress' => $provider->Address, 'Distance' => 0, 'ReasonId' => $aiOrder->Id, 'Type' => 9, 'State' => 2, 'Order' => 0, 'Depreciation' => 0));
                         // Update Estimated Delivery Date.
                         $aiOrder->EstimatedDelivery = date('Y-m-d', strtotime("+1 day"));
                         $aiOrder->save();
                     }
                 }
             }
         }
     }
 }
Пример #27
0
 /**
  * Show the application dashboard to the user.
  *
  * @return Response
  */
 public function map()
 {
     $current_user = User::where('id', Auth::id())->get();
     if (count($current_user) == 0) {
         $user_operation_areas = [];
         foreach (Operation_area::select()->get() as $op_area) {
             $user_operation_areas[] = $op_area->id;
         }
     } else {
         $user_operation_areas = explode(',', $current_user[0]->operation_areas);
     }
     $operation_areas = Operation_area::select()->whereIn('id', $user_operation_areas)->get();
     $emergency_cases = emergencyCase::select()->whereIn('operation_area', $user_operation_areas)->orderBy('created_at', 'desc')->get();
     $vehicles = Vehicle::select()->where('public', '=', true)->get();
     return view('pages.home_map', compact('operation_areas', 'emergency_cases', 'vehicles'));
 }
Пример #28
0
 public function destroy($id)
 {
     return response()->json(\App\Vehicle::destroy($id));
 }
Пример #29
0
 /**
  * Display a listing of the resource.
  *
  * @return Response
  */
 public function index()
 {
     $vehicles = Vehicle::all();
     return response()->json(['data' => $vehicles], 200);
 }
Пример #30
0
 /**
  * Update the specified resource in storage.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  int  $id
  * @return \Illuminate\Http\Response
  */
 public function update(VehicleRequest $request, $id)
 {
     $vehicle = Vehicle::findOrFail($id);
     $vehicle->update($request->all());
     return redirect('vehicles');
 }