Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Http\Controllers;
- use App\Models\Equation;
- use Illuminate\Http\Request;
- use Illuminate\Support\Facades\Validator;
- use App\Models\Crop;
- use Illuminate\Support\Facades\Auth;
- use Illuminate\Http\Response;
- use Illuminate\Support\Facades\DB;
- use App\Models\FertilityValue;
- use App\Models\EquationCrop;
- /**
- * Controlador de equações
- *
- * @author Gérley Adriano <gerley@sysout.com.br>
- * @since 10 de set de 2019
- * @version 1.0.0
- */
- class EquationController extends Controller {
- /**
- * Insere uma nova equação para uma determinada safra
- *
- * @param \Illuminate\Http\Request $request
- * @return \Illuminate\Http\Response
- */
- public function insert(Request $request) {
- $validator = $this->validation($request);
- if (!$validator->fails()) {
- try {
- $equation = $request->has_edited ? new Equation() : Equation::findByCrop($request->crop_id, Auth::user())->where('equations.id', $request->equation_id)->select('equations.*')->first();
- $this->save($request, $equation);
- //Recarrega os dados da equação
- return Equation::where('id', $equation->id)->with('attribute', 'culture')->first();
- } catch (\Exception $e) {
- return response("Erro interno ao tentar inserir uma nova equação.", Response::HTTP_BAD_REQUEST);
- }
- }
- return response("Dados inválidos", Response::HTTP_BAD_REQUEST);
- }
- /**
- * Valida uma requição de equação
- *
- * @param \Illuminate\Http\Request $request
- * @return \Illuminate\Support\Facades\Validator $validator
- */
- private function validation(Request $request) {
- $validator = Validator::make($request->all(), [
- 'name' => 'required|string|max:80',
- 'crop_id' => 'bail|required|numeric',
- 'equation' => 'required|string',
- 'product_attribute_id' => 'bail|required|numeric|exists:product_attributes,id',
- 'culture_id' => 'bail|nullable|numeric|exists:cultures,id',
- ]);
- $validator->sometimes('id', 'bail|required|min:1|max:2147483647|exists:equations,id', function($input) {
- return $input->_method == 'PUT';
- });
- $validator->sometimes('has_edited', 'required|boolean', function($input) {
- return $input->_method == 'PUT';
- });
- $validator->after(function($validator) use ($request) {
- $crop = Crop::findById($request->crop_id, Auth::user())->select('crops.*')->limit(1)->exists();
- if (!$crop) {
- $validator->errors()->add('crop_id', 'Safra inválida');
- }
- });
- return $validator;
- }
- /**
- * Salva uma equação no sistema
- *
- * @param \Illuminate\Http\Request $request
- * * @param \App\Models\Product $equation
- */
- private function save(Request $request, $equation) {
- DB::transaction(function() use ($request, $equation) {
- if (!$equation->id) {
- $equation->name = $request->name;
- $equation->equation = $request->equation;
- $equation->user_id = $request->user()->id;
- $equation->product_attribute_id = $request->product_attribute_id;
- $equation->culture_id = $request->culture_id;
- $equation->save();
- }
- $equationCrop = new EquationCrop();
- $equationCrop->equation_id = $equation->id ?? $request->equation_id;
- $equationCrop->crop_id = $request->crop_id;
- $equationCrop->save();
- });
- }
- /**
- * Apresenta os dados de uma determinada equação
- *
- * @param integer $id
- * @return \Illuminate\Http\Response
- */
- public function get($id) {
- if ($id) {
- $equation = Equation::findEquationsByUser(Auth::user())->where('equations.id', $id)
- ->select('equations.*')
- ->first();
- if ($equation) {
- return $equation;
- }
- }
- return response('Dados inválidos', Response::HTTP_BAD_REQUEST);
- }
- /**
- * Edita uma determinada equação
- *
- * @param \Illuminate\Http\Request $request
- * @return \Illuminate\Http\Response
- */
- public function update(Request $request) {
- $validator = $this->validation($request);
- if (!$validator->fails()) {
- // $equation = Equation::findById($request->id, Auth::user())->select('equations.*')->with(['attribute', 'culture'])->first();
- $equation = Equation::where('equations.id', $request->id)->select('equations.*')->first();
- if ($equation) {
- $this->save($request, $equation);
- //Recarrega os dados da equação
- return Equation::where('id', $equation->id)->with('attribute', 'culture')->first();
- }
- }
- return response('Dados inválidos', Response::HTTP_BAD_REQUEST);
- }
- /**
- * Remove uma equação do sistema
- *
- * @param \App\Models\Equation $equation
- * @return \Illuminate\Http\Response
- */
- public function delete(Request $request) {
- $this->validate($request, [ 'id' => 'required|numeric' ]);
- $equation = Equation::findByCrop($request->crop_id, Auth::user())
- ->where('equations.id', $request->id)
- ->select('equations.*', 'cr.id as crop_id')
- ->first();
- if ($equation) {
- try {
- return DB::transaction(function() use ($equation) {
- if (is_null($equation->user_id)) {
- $equationCrop = EquationCrop::where('equation_id', $equation->id)->where('crop_id', $equation->crop_id);
- $equationCrop->delete();
- } else {
- $equation->delete();
- }
- return [ 'status' => true, 'message' => 'Equação removida com sucesso', 'code' => Response::HTTP_NO_CONTENT ];
- });
- } catch (\Exception $e) {
- return response('Erro interno durante a remoção, tente novamente mais tarde.', Response::HTTP_INTERNAL_SERVER_ERROR);
- }
- }
- return response('Erro ao tentar remover a equação selecionada, tente novamente mais tarde.', Response::HTTP_BAD_REQUEST);
- }
- /**
- * Lista as formulas cadastradas por safra
- *
- * @param unknown $cropId
- * @return array
- */
- public function listEquationsAndFertilitiesByCrop($cropId) {
- $data = [];
- if ($cropId) {
- $data['equations'] = Equation::search($cropId, Auth::user())->select('equations.*')->get();
- $fertilities = FertilityValue::findValuesByCrop($cropId)
- ->select('p.element_id', 'fertility_values.fertility_id',
- 'fertility_values.values','fertility_values.field_id',
- 'p.name', 'fe.collection_profile_id')
- ->get();
- $data['fertilities'] = [];
- foreach($fertilities as $f) {
- if (!isset($data['fertilities'][$f->collection_profile_id])) {
- $data['fertilities'][$f->collection_profile_id] = [];
- }
- if (!isset($data['fertilities'][$f->collection_profile_id][$f->field_id])) {
- $data['fertilities'][$f->collection_profile_id][$f->field_id] = [];
- }
- $data['fertilities'][$f->collection_profile_id][$f->field_id][$f->element_id] = json_decode($f->values);
- }
- }
- return $data;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement