public static function calculatePercentage($speciesId, $sectorId, $speciesWeight, $precision = 3) { if (!is_array($speciesWeight) && strpos($speciesWeight, '-') !== false) { $weighArray = explode('-', $speciesWeight); if (count($weighArray) == 2) { list($lbs, $oz) = $weighArray; $dr = 0; } else { list($lbs, $oz, $dr) = $weighArray; } $speciesWeight = ['lbs' => $lbs, 'oz' => $oz, 'dr' => $dr]; } $standardWeight = (new Weight())->where('species_id', '=', $speciesId)->where('sector_id', '=', $sectorId)->get(); $percentage = Helpers::toDrams($speciesWeight) / Helpers::toDrams($standardWeight[0]->weight) * 100; return round($percentage, $precision); }
/** * Store a newly created resource in storage. * * @param WeighInsRequest|Request $request * @return \Illuminate\Http\Response */ public function store(WeighInsRequest $request) { // TODO: extract this as it is also used in weigh ins request // Clear up the entries $request['entries'] = array_filter(array_map(function ($entry) { return array_filter($entry); }, $request['entries'])); // If any exceptions are thrown any DB operations // will be automatically rolled back. DB::transaction(function () use($request) { $weighIn = new WeighIn(); // Deal with boat section if (!empty($request['boat']) && !empty($request['boat']['name'])) { if (isset($request['boat']['id'])) { // assign a boat to the weigh-in $boat = Boat::findOrFail($request['boat']['id']); } else { // create a new boat $boat = new Boat(); $boat->name = $request['boat']['name']; $boat->charter = isset($request['boat']['charter']) ? true : false; if (!empty($request['boat']['skipper']['id'])) { $boat->skipper()->associate(User::find($request['boat']['skipper']['id'])); } $boat->save(); } $weighIn->boat()->associate($boat); } // TODO: discuss with Rob if it makes sense // if(!empty($request['team_id'])){ // $weighIn->team()->associate(Team::find($request['team_id'])); // } $weighIn->date = $request['date']; $weighIn->entry_ticket_number = $request['entry_ticket_number']; $weighIn->sheet_number = $request['sheet_number']; $weighIn->team_number = !empty($request['team_number']) ? $request['team_number'] : null; $weighIn->event()->associate(Event::find($request['event_id'])); $weighIn->site()->associate(Site::find($request['weigh_in_site_id'])); $weighIn->user()->associate(User::find($request['user_id'])); $weighIn->save(); foreach ($request['entries'] as $e) { $entry = new Entry(); $entry->weight = Helpers::toDrams($e['species_weight']); $entry->percentage = Weight::calculatePercentage($e['species_id'], $e['sector_id'], $e['species_weight']); $entry->sector()->associate(Sector::find($e['sector_id'])); $entry->location()->associate(Location::find($e['location_id'])); $entry->event()->associate(Event::find($request['event_id'])); $entry->species()->associate(Species::find($e['species_id'])); $entry->user()->associate(User::find($request['user_id'])); $entry->weighIn()->associate($weighIn); $entry->save(); if (isset($e['categories'])) { $categories = []; foreach ($e['categories'] as $catId) { $categories[$catId] = ['event_id' => (int) $request['event_id']]; } $entry->categories()->sync($categories); } } //dd($request); }); flash()->success('Success!', "New weigh-in has been created!"); return redirect(route('admin.weigh-ins.create')); }
/** * Update the specified resource in storage. * * @param SpeciesRequest|Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(SpeciesRequest $request, $id) { // Fetch the edited specie from the database $species = Species::findOrFail($id); DB::transaction(function () use($request, $species) { // Update the fields $species->name = $request['name']; $species->type()->associate(Type::findOrFail($request['type_id'])); $species->save(); foreach ($request['weights'] as $sectorId => $sectorWeight) { Weight::where('species_id', $species->id)->where('sector_id', $sectorId)->update(['weight' => Helpers::toDrams($sectorWeight)]); } }); flash()->success('Success!', "Species data has been updated!"); return redirect(route('admin.settings.species.index')); }