public function getInsumo(Request $request)
 {
     $data = $request->all();
     $validator = Validator::make($data, ['insumo' => 'required|insumo', 'fechaI' => 'required', 'fechaF' => 'required'], $this->menssage);
     if ($validator->fails()) {
         return Response()->json(['status' => 'danger', 'menssage' => $validator->errors()->first()]);
     } else {
         $deposito = Auth::user()->deposito;
         $insumo = Insumo::where('id', $data['insumo'])->value('descripcion');
         $insumos = DB::table('insumos_salidas')->whereBetween(DB::raw('DATE_FORMAT(insumos_salidas.created_at,"%Y-%m-%d")'), [$data['fechaI'], $data['fechaF']])->where('insumos_salidas.insumo', $data['insumo'])->where('insumos_salidas.deposito', $deposito)->join('salidas', 'insumos_salidas.salida', '=', 'salidas.id')->join('departamentos', 'salidas.departamento', '=', 'departamentos.id')->select('departamentos.nombre as name', DB::raw('sum(insumos_salidas.despachado) as y'))->groupBy('departamentos.nombre')->orderBy('y', 'desc')->get();
         $title = 'Salidas de ' . $insumo . ', del (' . $data['fechaI'] . ' a ' . $data['fechaF'] . ')';
         return ['status' => 'success', 'data' => $insumos, 'title' => $title];
     }
 }
 /**
  * Bootstrap any application services.
  *
  * @return void
  */
 public function boot()
 {
     /**
      * Custom validation rules
      */
     Validator::extend('alpha_spaces', function ($attribute, $value) {
         return preg_match('/^[\\pL\\s]+$/u', $value);
     });
     Validator::extend('cedula', function ($attribute, $value) {
         return preg_match('/^([0-9]{6,8})$/', $value);
     });
     Validator::extend('rif', function ($attribute, $value) {
         return preg_match('/^([J,G,N]-([0-9]{8,12}))$/', $value);
     });
     Validator::extend('equal_provedor', function ($attribute, $value, $parameters) {
         $orden = Input::get($parameters[0]);
         $entrada = Entrada::where('orden', $orden)->value('provedor');
         if (!$entrada) {
             return true;
         } else {
             if ($value != $entrada) {
                 return false;
             }
             return true;
         }
     });
     Validator::extend('diff_provedor', function ($attribute, $value, $parameters) {
         if (empty($value)) {
             return true;
         } else {
             $id = Input::get($parameters[0]);
             $entrada = Entrada::where('id', $id)->value('provedor');
             if ($value == $entrada) {
                 return false;
             }
             return true;
         }
     });
     Validator::extend('diff_orden', function ($attribute, $value, $parameters) {
         if (empty($value)) {
             return true;
         } else {
             $id = Input::get($parameters[0]);
             $entrada = Entrada::where('id', $id)->value('orden');
             if ($value == $entrada) {
                 return false;
             }
             return true;
         }
     });
     Validator::extend('diff_departamento', function ($attribute, $value, $parameters) {
         $id = Input::get($parameters[0]);
         $salida = Salida::where('id', $id)->value('departamento');
         if ($value == $salida) {
             return false;
         }
         return true;
     });
     Validator::extend('insumos', function ($attribute, $value) {
         if (empty($value) || !is_array($value)) {
             return false;
         } else {
             foreach ($value as $insumo) {
                 if (!isset($insumo['cantidad']) || !isset($insumo['id']) || $insumo['cantidad'] <= 0 || !Insumo::where('id', $insumo['id'])->first()) {
                     return false;
                 }
             }
         }
         return true;
     });
     Validator::extend('insumos_salida', function ($attribute, $value) {
         if (empty($value) || !is_array($value)) {
             return false;
         } else {
             foreach ($value as $insumo) {
                 if (!isset($insumo['solicitado']) || !isset($insumo['despachado']) || !isset($insumo['id']) || $insumo['solicitado'] <= 0 || $insumo['despachado'] <= 0 || $insumo['solicitado'] < $insumo['despachado'] || !Insumo::withTrashed()->where('id', $insumo['id'])->first()) {
                     return false;
                 }
             }
         }
         return true;
     });
     Validator::extend('insumos_alarmas', function ($attribute, $value) {
         if (empty($value) || !is_array($value)) {
             return false;
         } else {
             foreach ($value as $insumo) {
                 if (!isset($insumo['id']) || !isset($insumo['min']) || !isset($insumo['med'])) {
                     return false;
                 }
                 if ($insumo['min'] <= 0 || $insumo['med'] <= 0 || $insumo['min'] >= $insumo['med']) {
                     return false;
                 }
             }
         }
         return true;
     });
     Validator::extend('insumos_validate_e', function ($attribute, $value) {
         foreach ($value as $insumo) {
             if (!isset($insumo['cantidad'])) {
                 continue;
             }
             $originalI = Insumos_entrada::where('id', $insumo['id'])->first();
             if (!isset($insumo['id']) || !$originalI || $originalI['cantidad'] == $insumo['cantidad'] || $insumo['cantidad'] < 0) {
                 return false;
             }
         }
         return true;
     });
     Validator::extend('insumos_validate_s', function ($attribute, $value) {
         foreach ($value as $insumo) {
             if (!isset($insumo['despachado'])) {
                 continue;
             }
             $originalI = insumos_salida::where('id', $insumo['id'])->first();
             if (!isset($insumo['id']) || !$originalI || $insumo['despachado'] == $originalI['despachado'] || $insumo['despachado'] < 0) {
                 return false;
             }
             if (!isset($insumo['solicitado'])) {
                 if ($originalI['solicitado'] < $insumo['despachado']) {
                     return false;
                 }
             } else {
                 if (!is_int($insumo['solicitado']) || $insumo['solicitado'] < 0 || $insumo['solicitado'] == $originalI['solicitado']) {
                     return false;
                 }
             }
         }
         return true;
     });
     Validator::extend('one_insumo_entrada', function ($attribute, $value, $parameters) {
         $entrada = Input::get($parameters[0]);
         $insumos = Insumos_entrada::where('entrada', $entrada)->get();
         if ($insumos->count() == 1 && isset($value[0]['cantidad']) && $value[0]['cantidad'] == 0) {
             return false;
         }
         return true;
     });
     Validator::extend('one_insumo_salida', function ($attribute, $value, $parameters) {
         $salida = Input::get($parameters[0]);
         $insumos = Insumos_salida::where('salida', $salida)->get();
         if ($insumos->count() == 1 && isset($value[0]['despachado']) && $value[0]['despachado'] == 0) {
             return false;
         }
         return true;
     });
     Validator::extend('insumo', function ($attribute, $value) {
         if (!Insumo::where('id', $value)->first()) {
             return false;
         }
         return true;
     });
     Validator::extend('insumo_with_daleted', function ($attribute, $value) {
         if (!insumo::withTrashed()->where('id', $value)->first()) {
             return false;
         }
         return true;
     });
     Validator::extend('deposito', function ($attribute, $value) {
         if (!Deposito::where('id', $value)->first()) {
             return false;
         }
         return true;
     });
     Validator::extend('date_limit_current', function ($attribute, $value) {
         $value = str_replace('/', '-', $value);
         if (strtotime($value) > strtotime(date("Y-m-d"))) {
             return false;
         }
         return true;
     });
     Validator::extend('insumos_ids_array', function ($attribute, $value) {
         if (!is_array($value)) {
             return false;
         }
         foreach ($value as $v) {
             if (!insumos_salida::where('id', $v)->first()) {
                 return false;
             }
         }
         return true;
     });
     Validator::extend('documento_salida', function ($attribute, $value) {
         $documento = Documento::where('id', $value)->first();
         if (!$documento) {
             return false;
         }
         return $documento->naturaleza == 'salida';
     });
     Validator::extend('documento_entrada', function ($attribute, $value) {
         $documento = Documento::where('id', $value)->first();
         if (!$documento) {
             return false;
         }
         return $documento->naturaleza == 'entrada';
     });
     Validator::extend('tercero', function ($attribute, $value, $parameters) {
         $documento = Input::get($parameters[0]);
         $tipo = Documento::where('id', $documento)->value('tipo');
         if ($tipo == 'interno') {
             return true;
         }
         if ($tipo == 'proveedor') {
             return Provedore::where('id', $value)->first();
         }
         if ($tipo == 'servicio') {
             return Departamento::where('id', $value)->first();
         }
         if ($tipo == 'deposito') {
             $deposito = Auth::user()->deposito;
             return Deposito::where('id', $value)->where('id', '!=', $deposito)->first();
         }
     });
     Validator::extend('permissions', function ($attribute, $value) {
         if (!is_array($value)) {
             return false;
         } else {
             foreach ($value as $permiso) {
                 if (!Permission::where('id', $permiso)->first()) {
                     return false;
                 }
             }
         }
         return true;
     });
     Validator::extend('rol', function ($attribute, $value) {
         return Role::where('id', $value)->first();
     });
     Validator::extend('movimiento', function ($attribute, $value, $parameters) {
         $documento = Input::get($parameters[0]);
         $documento = Documento::where('id', $documento)->value('id');
         $deposito = Auth::user()->deposito;
         if (Entrada::where('id', $value)->where('documento', $documento)->where('deposito', $deposito)->first()) {
             return true;
         } else {
             if (Salida::where('id', $value)->where('documento', $documento)->where('deposito', $deposito)->first()) {
                 return true;
             } else {
                 return false;
             }
         }
     });
     Validator::extend('documento', function ($attribute, $value) {
         return Documento::where('id', $value)->first();
     });
     Validator::extend('documento_same_nature', function ($attribute, $value, $parameters) {
         $id = Input::get($parameters[0]);
         $ori_naturaleza = Documento::where('id', $id)->value('naturaleza');
         $up_naturaleza = Documento::where('id', $value)->value('naturaleza');
         return $ori_naturaleza == $up_naturaleza;
     });
     Validator::extend('document_not_equal', function ($attribute, $value, $parameters) {
         $id = Input::get($parameters[0]);
         $ori_documento = Documento::where('id', $id)->value('id');
         $up_documento = Documento::where('id', $value)->value('id');
         return !($ori_documento == $up_documento);
     });
 }
 public function getInsumos()
 {
     if (!\Request::ajax()) {
         abort(403);
     }
     $insumos = \App\Insumo::select('nombre', 'id')->get();
     return $insumos;
 }
 /**
  * Update the specified resource in storage.
  *
  * @param  \Illuminate\Http\Request  $request
  * @param  int  $id
  * @return \Illuminate\Http\Response
  */
 public function update(Request $request, $id)
 {
     $rules = ['nombre' => 'required', 'costo' => 'required', 'precio' => 'required', 'id_tipo' => ['required', 'not_in:0'], 'id_unidad' => ['required', 'not_in:0'], 'expiracion' => 'required'];
     //validamos los campos
     $this->validate($request, $rules);
     //recibe todos los campos
     $data = $request->all();
     $insumo = \App\Insumo::find($id);
     $insumo->nombre = $data['nombre'];
     $insumo->descripcion = $data['descripcion'];
     $insumo->costo = $data['costo'];
     $insumo->precio = $data['precio'];
     $insumo->id_tipo = $data['id_tipo'];
     $insumo->id_unidad = $data['id_unidad'];
     $insumo->expiracion = $data['expiracion'];
     $insumo->save();
     \Session::flash('msj_success', 'Se ha editado correctamente el insumo: ' . $data['nombre']);
     return redirect()->route('insumo.index');
 }
 public function elimInsumo(Request $request, $id)
 {
     $insumo = Insumo::where('id', $id)->first();
     if (!$insumo) {
         return Response()->json(['status' => 'danger', 'menssage' => 'Esta insumo no existe']);
     } else {
         Insumo::where('id', $id)->delete();
         return Response()->json(['status' => 'success', 'menssage' => 'Insumo Eliminado']);
     }
 }