예제 #1
0
 /**
  * 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);
     });
 }
예제 #2
0
 public function allInventario(Request $request, $report)
 {
     $data = $request->all();
     $deposito = Auth::user()->deposito;
     $usuario = Auth::user()->email;
     $depositoN = Deposito::where('id', $deposito)->value('nombre');
     $fecha = date("d/m/Y");
     $hora = date("H:i:s");
     $validator = Validator::make($data, ['date' => 'date_format:d/m/Y|date_limit_current']);
     if ($validator->fails()) {
         abort('404');
     }
     if ($report != 'total' && $report != 'parcial') {
         abort('404');
     }
     /**
      *Si se pasa una fecha se transforma al formato a utilizar,
      *de lo contrario se toma la fecha del mes actual.
      */
     if (isset($data['date']) && !empty($data['date'])) {
         $dateConvert = str_replace('/', '-', $data['date']);
         $date = Date('Y-m-d', strtotime($dateConvert));
     } else {
         $date = date('Y-m-d');
     }
     //Año inicial del rango de fecha a consultar
     $init_year_search = date('Y-01-01', strtotime($date));
     /**
      *Define la fecha inicial en el rango de fecha a consultar
      *como la fecha de la ultima carga de inventario.
      */
     $first_date = DB::table('entradas')->where('deposito', $deposito)->where('type', 'cinventario')->whereBetween(DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d")'), [$init_year_search, $date])->orderBy('id', 'desc')->value(DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d")'));
     /**
      *Si no se encontro carga de inventario, la fecha incial en el rango de
      *fecha a consultar se define como el año inicial del rango
      *de fecha a consultar.
      */
     if (!$first_date) {
         $first_date = $init_year_search;
     }
     if ($report == 'total') {
         /**
          *Obtiene los ids de todos los insumos que han entrada en el inventario
          *desde el año inicial de la fecha a consultar, hasta la fecha a consultar.
          */
         $insumoIds = Insumos_entrada::distinct('insumo')->whereBetween(DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d")'), [$first_date, $date])->where('deposito', $deposito)->lists('insumo');
     }
     //Obtiene los datos de los insumos cuyos ids se han encontrado.
     $query = DB::table('insumos')->leftjoin('inventarios', function ($join) use($deposito) {
         $join->on('insumos.id', '=', 'inventarios.insumo')->where('inventarios.deposito', '=', $deposito);
     })->select('insumos.id as id', 'insumos.codigo', 'insumos.descripcion');
     if ($report == 'parcial') {
         $query->whereIn('insumos.id', $data['insumos']);
         $title = "INVENTARIO PARCIAL";
     } else {
         $query->whereIn('insumos.id', $insumoIds);
         $title = "INVENTARIO TOTAL";
     }
     $query->orderBy('insumos.descripcion', 'asc');
     /**
      *Si el inventario consultado es el de la fecha actual, obtiene la existencia en
      *base a la tabla inventarios. de lo contrario obtiene la existencia en base al
      *ultimo movimiento del insumo en el periodo de fecha consultado.
      */
     if (date('Y-m-d') == $date) {
         $insumos = $query->addSelect(DB::raw('IFNULL(inventarios.existencia, 0) as existencia'))->get();
     } else {
         //Obtiene todos los insumos sin existencia.
         $insumos = $query->get();
         //Calcula la existencia de cada insumo que se ha encontrado.
         foreach ($insumos as $insumo) {
             //Obtien la ultima entrada del insumo a calcular existencia
             $entradas = DB::table('insumos_entradas')->where('insumo', $insumo->id)->where('deposito', $deposito)->whereBetween(DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d")'), [$first_date, $date])->select('existencia', 'created_at')->orderBy('created_at', 'desc')->take(1);
             //Obtiene la ultima salida del insumo a calcular existencia
             $salidas = DB::table('insumos_salidas')->where('insumo', $insumo->id)->where('deposito', $deposito)->whereBetween(DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d")'), [$first_date, $date])->select('existencia', 'created_at')->orderBy('created_at', 'desc')->take(1);
             /**
              *Une los resultados de la ultima entrada y la ultima salida del insumo a calcular
              *y obtiene el ultimo movimiento.
              */
             $existencia = $entradas->unionAll($salidas)->orderBy('created_at', 'desc')->first();
             //Asigna la existencia del insumo en base al ultimo movimiento.
             $insumo->existencia = $existencia->existencia;
         }
     }
     //Filtro para filtrar registor en base a la existencia.
     if (isset($data['filter'])) {
         if ($data['filter'] == 'true') {
             foreach ($insumos as $key => $insumo) {
                 if ($insumo->existencia == 0) {
                     unset($insumos[$key]);
                 }
             }
             $title = "INVENTARIO SIN FALLAS";
         } else {
             if ($data['filter'] == 'false') {
                 foreach ($insumos as $key => $insumo) {
                     if ($insumo->existencia > 0) {
                         unset($insumos[$key]);
                     }
                 }
             }
         }
     }
     $view = \View::make('reportes.pdfs.allInventario', compact('insumos', 'usuario', 'depositoN', 'fecha', 'hora', 'title'), ['date' => $data['date']])->render();
     $pdf = \App::make('dompdf.wrapper');
     $pdf->loadHTML($view);
     return $pdf->stream($title);
 }
예제 #3
0
 private function insumosMove($date, $deposito)
 {
     $entradas = Insumos_entrada::distinct('insumo')->where(DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d")'), $date)->where('deposito', $deposito)->select('insumo');
     $salidas = Insumos_salida::distinct('insumo')->where(DB::raw('DATE_FORMAT(created_at, "%Y-%m-%d")'), $date)->where('deposito', $deposito)->select('insumo');
     $movimientos = $entradas->union($salidas);
     return $movimientos->lists('insumo');
 }
예제 #4
0
 public function registrar(Request $request)
 {
     $data = $request->all();
     $usuario = Auth::user()->id;
     $deposito = Auth::user()->deposito;
     $validator = Validator::make($data, ['documento' => 'required|numeric|documento_entrada', 'tercero' => 'numeric|tercero:documento', 'insumos' => 'required|insumos'], $this->menssage);
     if ($validator->fails()) {
         return Response()->json(['status' => 'danger', 'menssage' => $validator->errors()->first()]);
     } else {
         if (!isset($data['tercero']) || empty($data['tercero'])) {
             $tipo = Documento::where('id', $data['documento'])->value('tipo');
             if ($tipo == 'interno') {
                 $data['tercero'] = $deposito;
             } else {
                 return Response()->json(['status' => 'danger', 'menssage' => 'Seleccione un tercero']);
             }
         }
         $insumos = $data['insumos'];
         //Codigo para la entrada
         $code = $this->generateCode('E', $deposito);
         $entrada = Entrada::create(['codigo' => $code, 'tercero' => $data['tercero'], 'documento' => $data['documento'], 'usuario' => $usuario, 'deposito' => $deposito])['id'];
         foreach ($insumos as $insumo) {
             $existencia = inventarioController::almacenaInsumo($insumo['id'], $insumo['cantidad'], $deposito, 'entrada', $entrada);
             $lote = isset($insumo['lote']) && !empty($insumo['lote']) ? $insumo['lote'] : NULL;
             $fecha = isset($insumo['fecha']) && !empty($insumo['fecha']) ? $insumo['fecha'] : NULL;
             Insumos_entrada::create(['entrada' => $entrada, 'insumo' => $insumo['id'], 'cantidad' => $insumo['cantidad'], 'lote' => $lote, 'fechaV' => $fecha, 'deposito' => $deposito, 'existencia' => $existencia]);
         }
         return Response()->json(['status' => 'success', 'menssage' => 'Entrada completada satisfactoriamente', 'codigo' => $code]);
     }
 }