Advertisement
Guest User

Untitled

a guest
Sep 18th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.46 KB | None | 0 0
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use App\Models\Equation;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Validator;
  8. use App\Models\Crop;
  9. use Illuminate\Support\Facades\Auth;
  10. use Illuminate\Http\Response;
  11. use Illuminate\Support\Facades\DB;
  12. use App\Models\FertilityValue;
  13. use App\Models\EquationCrop;
  14.  
  15. /**
  16. * Controlador de equações
  17. *
  18. * @author Gérley Adriano <gerley@sysout.com.br>
  19. * @since 10 de set de 2019
  20. * @version 1.0.0
  21.  */
  22. class EquationController extends Controller {
  23.    
  24.     /**
  25.      * Insere uma nova equação para uma determinada safra
  26.      *
  27.      * @param  \Illuminate\Http\Request  $request
  28.      * @return \Illuminate\Http\Response
  29.      */
  30.     public function insert(Request $request) {
  31.        
  32.         $validator = $this->validation($request);
  33.        
  34.         if (!$validator->fails()) {
  35.            
  36.             try {
  37.                
  38.                 $equation = $request->has_edited ? new Equation() : Equation::findByCrop($request->crop_id, Auth::user())->where('equations.id', $request->equation_id)->select('equations.*')->first();
  39.                
  40.                 $this->save($request, $equation);
  41.                
  42.                 //Recarrega os dados da equação
  43.                 return Equation::where('id', $equation->id)->with('attribute', 'culture')->first();
  44.                
  45.             } catch (\Exception $e) {
  46.        
  47.                 return response("Erro interno ao tentar inserir uma nova equação.", Response::HTTP_BAD_REQUEST);
  48.             }
  49.         }
  50.        
  51.         return response("Dados inválidos", Response::HTTP_BAD_REQUEST);
  52.     }
  53.    
  54.     /**
  55.      * Valida uma requição de equação
  56.      *
  57.      * @param  \Illuminate\Http\Request  $request
  58.      * @return \Illuminate\Support\Facades\Validator $validator
  59.      */
  60.     private function validation(Request $request) {
  61.        
  62.         $validator = Validator::make($request->all(), [
  63.             'name' => 'required|string|max:80',
  64.             'crop_id' => 'bail|required|numeric',
  65.             'equation' => 'required|string',
  66.             'product_attribute_id' => 'bail|required|numeric|exists:product_attributes,id',
  67.             'culture_id' => 'bail|nullable|numeric|exists:cultures,id',
  68.         ]);
  69.        
  70.         $validator->sometimes('id', 'bail|required|min:1|max:2147483647|exists:equations,id', function($input) {
  71.             return $input->_method == 'PUT';
  72.         });
  73.        
  74.         $validator->sometimes('has_edited', 'required|boolean', function($input) {
  75.             return $input->_method == 'PUT';
  76.         });
  77.            
  78.         $validator->after(function($validator) use ($request) {
  79.            
  80.             $crop = Crop::findById($request->crop_id, Auth::user())->select('crops.*')->limit(1)->exists();
  81.            
  82.             if (!$crop) {
  83.  
  84.                 $validator->errors()->add('crop_id', 'Safra inválida');
  85.             }
  86.         });
  87.                
  88.         return $validator;
  89.     }
  90.    
  91.     /**
  92.      * Salva uma equação no sistema
  93.      *
  94.      * @param  \Illuminate\Http\Request  $request
  95.      * * @param  \App\Models\Product  $equation
  96.      */
  97.     private function save(Request $request, $equation) {
  98.        
  99.         DB::transaction(function() use ($request, $equation) {
  100.            
  101.             if (!$equation->id) {
  102.                
  103.                 $equation->name = $request->name;
  104.                 $equation->equation = $request->equation;
  105.                 $equation->user_id = $request->user()->id;
  106.                 $equation->product_attribute_id = $request->product_attribute_id;
  107.                 $equation->culture_id = $request->culture_id;
  108.                 $equation->save();
  109.             }
  110.  
  111.             $equationCrop = new EquationCrop();
  112.             $equationCrop->equation_id = $equation->id ?? $request->equation_id;
  113.             $equationCrop->crop_id = $request->crop_id;
  114.             $equationCrop->save();
  115.         });
  116.     }
  117.    
  118.     /**
  119.      * Apresenta os dados de uma determinada equação
  120.      *
  121.      * @param  integer $id
  122.      * @return \Illuminate\Http\Response
  123.      */
  124.     public function get($id) {
  125.        
  126.         if ($id) {
  127.  
  128.             $equation = Equation::findEquationsByUser(Auth::user())->where('equations.id', $id)
  129.             ->select('equations.*')
  130.             ->first();
  131.            
  132.             if ($equation) {
  133.                
  134.                 return $equation;
  135.             }
  136.         }
  137.        
  138.         return response('Dados inválidos', Response::HTTP_BAD_REQUEST);
  139.     }
  140.    
  141.     /**
  142.      * Edita uma determinada equação
  143.      *
  144.      * @param  \Illuminate\Http\Request  $request
  145.      * @return \Illuminate\Http\Response
  146.      */
  147.     public function update(Request $request) {
  148.        
  149.         $validator = $this->validation($request);
  150.        
  151.         if (!$validator->fails()) {
  152.            
  153. //             $equation = Equation::findById($request->id, Auth::user())->select('equations.*')->with(['attribute', 'culture'])->first();
  154.  
  155.             $equation = Equation::where('equations.id', $request->id)->select('equations.*')->first();
  156.            
  157.             if ($equation) {
  158.  
  159.                 $this->save($request, $equation);
  160.                
  161.                 //Recarrega os dados da equação
  162.                 return Equation::where('id', $equation->id)->with('attribute', 'culture')->first();
  163.             }
  164.         }
  165.        
  166.         return response('Dados inválidos', Response::HTTP_BAD_REQUEST);
  167.     }
  168.    
  169.     /**
  170.      * Remove uma equação do sistema
  171.      *
  172.      * @param  \App\Models\Equation  $equation
  173.      * @return \Illuminate\Http\Response
  174.      */
  175.     public function delete(Request $request) {
  176.        
  177.         $this->validate($request, [ 'id' => 'required|numeric' ]);
  178.  
  179.         $equation = Equation::findByCrop($request->crop_id, Auth::user())
  180.         ->where('equations.id', $request->id)
  181.         ->select('equations.*', 'cr.id as crop_id')
  182.         ->first();
  183.  
  184.         if ($equation) {
  185.            
  186.             try {
  187.                
  188.                 return DB::transaction(function() use ($equation) {
  189.                    
  190.                     if (is_null($equation->user_id)) {
  191.                        
  192.                         $equationCrop = EquationCrop::where('equation_id', $equation->id)->where('crop_id', $equation->crop_id);
  193.                        
  194.                         $equationCrop->delete();
  195.                     } else {
  196.  
  197.                         $equation->delete();
  198.                     }
  199.                    
  200.                     return [ 'status' => true, 'message' => 'Equação removida com sucesso', 'code' => Response::HTTP_NO_CONTENT ];
  201.                 });
  202.                    
  203.             } catch (\Exception $e) {
  204.                
  205.                 return response('Erro interno durante a remoção, tente novamente mais tarde.', Response::HTTP_INTERNAL_SERVER_ERROR);
  206.             }
  207.         }
  208.        
  209.         return response('Erro ao tentar remover a equação selecionada, tente novamente mais tarde.', Response::HTTP_BAD_REQUEST);
  210.     }
  211.    
  212.     /**
  213.      * Lista as formulas cadastradas por safra
  214.      *
  215.      * @param unknown $cropId
  216.      * @return array
  217.      */
  218.     public function listEquationsAndFertilitiesByCrop($cropId) {
  219.        
  220.         $data = [];
  221.        
  222.         if ($cropId) {
  223.            
  224.             $data['equations'] = Equation::search($cropId, Auth::user())->select('equations.*')->get();
  225.            
  226.             $fertilities = FertilityValue::findValuesByCrop($cropId)
  227.             ->select('p.element_id', 'fertility_values.fertility_id',
  228.                 'fertility_values.values','fertility_values.field_id',
  229.                 'p.name', 'fe.collection_profile_id')
  230.                 ->get();
  231.                
  232.                 $data['fertilities'] = [];
  233.                
  234.                 foreach($fertilities as $f) {
  235.                    
  236.                     if (!isset($data['fertilities'][$f->collection_profile_id])) {
  237.                         $data['fertilities'][$f->collection_profile_id] = [];
  238.                     }
  239.                    
  240.                     if (!isset($data['fertilities'][$f->collection_profile_id][$f->field_id])) {
  241.                         $data['fertilities'][$f->collection_profile_id][$f->field_id] = [];
  242.                     }
  243.                    
  244.                     $data['fertilities'][$f->collection_profile_id][$f->field_id][$f->element_id] = json_decode($f->values);
  245.                 }
  246.         }
  247.        
  248.         return $data;
  249.     }
  250. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement