/** * 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)]); } }
/** * 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); }
/** * 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); }
/** * 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(); }
/** * 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(); }
/** * 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)); }
/** * 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;'); }
/** * 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); }
/** * 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 }
public function getAddFillupView(Request $request, $vehicleId) { $activeUser = $request->user(); $vehicle = Vehicle::findOrFail($vehicleId); return view('fillup.create')->with(['activeUser' => $activeUser, 'vehicle' => $vehicle]); }
/** * 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); } }
/** * 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); }); } } } } } } }
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; }
/** * 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')); }
/** * 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; } } }
/** * 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')); }
private function assertVehicleExists($vehicleId) { try { $vehicle = Vehicle::findOrFail($vehicleId); } catch (ModelNotFoundException $e) { abort(404); } }
/** * 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')); }
/** * 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); } }
/** * 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(); }
/** * 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')); }
/** * 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(); } } } } } }
/** * 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')); }
public function destroy($id) { return response()->json(\App\Vehicle::destroy($id)); }
/** * Display a listing of the resource. * * @return Response */ public function index() { $vehicles = Vehicle::all(); return response()->json(['data' => $vehicles], 200); }
/** * 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'); }