abm productos
This commit is contained in:
parent
05f350af9c
commit
2ac77a2af1
|
|
@ -8,39 +8,11 @@ use Illuminate\Http\Request;
|
|||
use Illuminate\Support\Facades\Auth;
|
||||
class LoginController extends Controller
|
||||
{
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Login Controller
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This controller handles authenticating users for the application and
|
||||
| redirecting them to your home screen. The controller uses a trait
|
||||
| to conveniently provide its functionality to your applications.
|
||||
|
|
||||
*/
|
||||
|
||||
use AuthenticatesUsers;
|
||||
|
||||
/**
|
||||
* Where to redirect users after login.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $redirectTo = '/categorias';
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware('guest')->except('logout');
|
||||
$this->middleware('auth')->only('logout');
|
||||
}
|
||||
|
||||
public function login(Request $request)
|
||||
{
|
||||
{
|
||||
|
||||
|
||||
$credentials = $request->validate([
|
||||
'email' => 'required|email',
|
||||
|
|
@ -61,7 +33,9 @@ class LoginController extends Controller
|
|||
public function logout(Request $request)
|
||||
{
|
||||
Auth::logout();
|
||||
|
||||
$request->session()->invalidate();
|
||||
|
||||
$request->session()->regenerateToken();
|
||||
|
||||
return redirect('/login');
|
||||
|
|
|
|||
|
|
@ -4,10 +4,68 @@ namespace App\Http\Controllers;
|
|||
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\Producto;
|
||||
use App\Models\Categorias;
|
||||
use App\Models\CodigoBarras;
|
||||
class ProductoController extends Controller
|
||||
{
|
||||
public function index(Request $request){
|
||||
$productos = Producto::with('categorias','codigo_barras')->get();
|
||||
return view('productos.index', ["productos"=>$productos]);
|
||||
}
|
||||
public function show($id){
|
||||
|
||||
$producto = Producto::with('categorias','codigo_barras')->findOrfail($id);
|
||||
return view('productos.show', ["prod"=>$producto]);
|
||||
}
|
||||
|
||||
public function destroy(Request $request, $id){
|
||||
$producto = Producto::findOrfail($id);
|
||||
$producto->delete();
|
||||
$request->session()->flash('mensaje-success', 'El producto fue eliminado.');
|
||||
return redirect('/productos');
|
||||
}
|
||||
|
||||
|
||||
public function create(){
|
||||
$categorias= Categorias::get();
|
||||
return view('productos.new',["categorias"=>$categorias]);
|
||||
}
|
||||
|
||||
public function store(Request $request){
|
||||
|
||||
$codigo_barras= new CodigoBarras();
|
||||
$codigo_barras->fill([
|
||||
'codigo' => $request->input('codigo_barras'),
|
||||
]);
|
||||
$codigo_barras->save();
|
||||
|
||||
$producto = new Producto();
|
||||
$producto->fill([
|
||||
'nombre' => $request->input('nombre'),
|
||||
'descripcion' => $request->input('descripcion'),
|
||||
'precio' => $request->input('precio'),
|
||||
'categoria_id' => $request->input('categoria'),
|
||||
'codigo_barras_id' => $codigo_barras->id_codigo_barras,
|
||||
]);
|
||||
$producto->save();
|
||||
$request->session()->flash('mensaje-success', 'El producto fue agregado.');
|
||||
return redirect('/productos');
|
||||
}
|
||||
|
||||
public function edit($id){
|
||||
$producto = Producto::findOrfail($id);
|
||||
return view('productos.edit', ["prod"=>$producto]);
|
||||
}
|
||||
|
||||
public function update(Request $request, $id){
|
||||
$producto = Producto::findOrfail($id);
|
||||
$producto->fill([
|
||||
'nombre' => $request->input('nombre'),
|
||||
'descripcion' => $request->input('descripcion'),
|
||||
'precio' => $request->input('precio'),
|
||||
]);
|
||||
$producto->update();
|
||||
$request->session()->flash('mensaje-success', 'El producto fue modificado.');
|
||||
return redirect('/productos');
|
||||
}
|
||||
}
|
||||
|
|
|
|||
68
resources/views/productos/edit.blade.php
Normal file
68
resources/views/productos/edit.blade.php
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
@extends('layouts.admin')
|
||||
@section('contenido')
|
||||
|
||||
|
||||
<div class="row justify-content-center align-items-center">
|
||||
|
||||
<div class="col-lg-11 col-md-11 col-sm-11 col-xs-11">
|
||||
<h3>Editar Producto</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-10">
|
||||
|
||||
@include('compartido.mensajes')
|
||||
@include('compartido.errores')
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
|
||||
|
||||
<form method="POST"
|
||||
action="{{ route('productos.update', $prod->id_producto) }}"
|
||||
enctype="multipart/form-data">
|
||||
@csrf
|
||||
@method('PUT')
|
||||
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="form-group col-md-3">
|
||||
|
||||
<label for="nombre" class="form-check-label">Nombre (*)</label>
|
||||
<input type="text" name="nombre" id="nombre" class="form-control"
|
||||
value="{{ old('nombre', $prod->nombre) }}" >
|
||||
</div>
|
||||
|
||||
<div class="form-group col-md-3">
|
||||
<label for="descripcion" class="form-check-label">Descripcion (*)</label>
|
||||
<input type="text" name="descripcion" id="descripcion" class="form-control"
|
||||
value="{{ old('descripcion', $prod->descripcion) }}" >
|
||||
</div>
|
||||
<div class="form-group col-md-3">
|
||||
<label for="precio" class="form-check-label">Precio (*)</label>
|
||||
<input type="number" name="precio" id="precio" class="form-control"
|
||||
value="{{ old('precio', $prod->precio) }}" >
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="row justify-content-center align-items-center">
|
||||
<div class="col-md-2">
|
||||
|
||||
<button class="btn btn-success btn-block btn-lg">Guardar</button>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
|
||||
<a href="{{ route('productos.index') }}" class="btn btn-primary btn-block btn-lg" title="Salir">Salir</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@endsection
|
||||
|
||||
@push('scripts')
|
||||
<script>
|
||||
|
||||
</script>
|
||||
@endpush
|
||||
|
|
@ -1,15 +1,9 @@
|
|||
@extends('layouts.admin')
|
||||
@section('contenido')
|
||||
|
||||
<!-- row => fila del sistema de grillas Bootstrap
|
||||
justify-content-center => centra horizontalmente los contenidos
|
||||
align-items-center => centra verticalmente
|
||||
no centran el texto, centran las columnas dentro de la fila
|
||||
-->
|
||||
|
||||
<div class="row justify-content-center align-items-center">
|
||||
<!-- col-12 => ocupa todo el ancho en pantallas pequeñas
|
||||
col-md-11 => ocupa 11/12 del ancho en pantallas medianas o mayores -->
|
||||
|
||||
<div class="col-12 col-md-11">
|
||||
<h3>Listado de Productos</h3>
|
||||
</div>
|
||||
|
|
@ -17,11 +11,8 @@
|
|||
|
||||
<div class="row justify-content-center align-items-center">
|
||||
<div class="col-md-2">
|
||||
<!-- btn => estilo de botón Bootstrap
|
||||
btn-success => verde (acción positiva)
|
||||
btn-block => ocupa todo el ancho de la columna
|
||||
btn-lg => tamaño grande -->
|
||||
<a href="{{ route('categorias.create') }}"
|
||||
|
||||
<a href="{{ route('productos.create') }}"
|
||||
class="btn btn-success btn-block btn-lg"
|
||||
title="Nueva Categoria">
|
||||
Nuevo
|
||||
|
|
@ -34,17 +25,14 @@
|
|||
<div class="row justify-content-center align-items-center">
|
||||
<div class="col-12 col-md-11">
|
||||
|
||||
<!-- Includes de Blade para mensajes de éxito y errores -->
|
||||
|
||||
@include('compartido.mensajes')
|
||||
@include('compartido.errores')
|
||||
|
||||
<!-- table-responsive => hace que la tabla sea "scrollable" en pantallas pequeñas -->
|
||||
|
||||
<div class="table-responsive">
|
||||
|
||||
<!-- table => tabla con estilos básicos
|
||||
table-striped => filas alternadas con fondo gris
|
||||
table-bordered => agrega bordes a todas las celdas
|
||||
table-hover => resalta la fila al pasar el mouse -->
|
||||
|
||||
<table class="table table-striped table-bordered table-hover" id="example">
|
||||
<thead>
|
||||
<tr>
|
||||
|
|
@ -72,21 +60,21 @@
|
|||
@csrf
|
||||
@method('DELETE')
|
||||
|
||||
<!-- btn-info => azul claro (información) -->
|
||||
|
||||
<a class="btn btn-info"
|
||||
href="{{ route('productos.show', $prod->id_producto) }}"
|
||||
title="Ver más">
|
||||
<i class="fa fa-eye"></i>
|
||||
</a>
|
||||
|
||||
<!-- btn-warning => amarillo (advertencia / editar) -->
|
||||
|
||||
<a class="btn btn-warning"
|
||||
href="{{ route('productos.edit', $prod->id_producto) }}"
|
||||
title="Editar">
|
||||
<i class="fa fa-pencil"></i>
|
||||
</a>
|
||||
|
||||
<!-- btn-danger => rojo (acción destructiva como eliminar) -->
|
||||
|
||||
<button class="btn btn-danger"
|
||||
onclick="return confirm('¿Está seguro de eliminar la categoría?');"
|
||||
title="Eliminar">
|
||||
|
|
@ -110,7 +98,6 @@
|
|||
@endpush
|
||||
@push('scripts')
|
||||
<script>
|
||||
// DataTables (plugin JS para mejorar tablas: búsqueda, paginación, exportación)
|
||||
$('#example').DataTable({
|
||||
dom: 'Bfrtip',
|
||||
buttons: ['excel'],
|
||||
|
|
@ -118,3 +105,7 @@
|
|||
});
|
||||
</script>
|
||||
@endpush
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
92
resources/views/productos/new.blade.php
Normal file
92
resources/views/productos/new.blade.php
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
@extends('layouts.admin')
|
||||
@section ('contenido')
|
||||
|
||||
|
||||
<div class="row justify-content-center align-items-center">
|
||||
|
||||
<div class="col-lg-11 col-md-11 col-sm-11 col-xs-11">
|
||||
<h3>Nuevo Producto</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-10">
|
||||
|
||||
@include('compartido.mensajes')
|
||||
@include('compartido.errores')
|
||||
</div>
|
||||
</div>
|
||||
</br>
|
||||
|
||||
|
||||
<form method="post" action="{{ route('productos.store') }}" enctype=multipart/form-data>
|
||||
@csrf
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="form-group col-md-3">
|
||||
|
||||
<label for="nombre" class="form-check-label">Nombre (*)</label>
|
||||
<input type="text" name="nombre" id="nombre" value="{{ old('nombre') }}" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="form-group col-md-3">
|
||||
<label for="descripcion" class="form-check-label">Descripcion (*)</label>
|
||||
<input type="text" name="descripcion" id="descripcion" value="{{old('descripcion')}}" class="form-control">
|
||||
</div>
|
||||
|
||||
<div class="form-group col-md-3">
|
||||
<label for="precio" class="form-check-label">Precio (*)</label>
|
||||
<input type="number" name="precio" id="precio" value="{{old('precio')}}" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
<br>
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<label for="categoria" >Categoria (*)</label>
|
||||
<select name="categoria" id="categoria" style="width:100%" required>
|
||||
@foreach($categorias as $cat)
|
||||
<option></option>
|
||||
<option value="{{$cat->id_categoria}}"
|
||||
{{old('categoria') == $cat->id_categoria ? 'selected': ''}}>
|
||||
|
||||
{{$cat->nombre}}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
|
||||
</div>
|
||||
<div class="form-group col-md-4">
|
||||
|
||||
<label for="nombre" class="form-check-label">Codigo Barras (*)</label>
|
||||
<input type="text" name="codigo_barras" id="codigo_barras" value="{{ old('codigo_barras') }}" class="form-control">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</br>
|
||||
<div class="row justify-content-center align-items-center">
|
||||
<div class="col-md-2">
|
||||
|
||||
<button class="btn btn-success btn-block btn-lg">Guardar</button>
|
||||
</div>
|
||||
<div class="col-md-2">
|
||||
|
||||
<a href="{{ route('productos.index') }}" class="btn btn-primary btn-block btn-lg" title="Salir">Salir</a>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@endsection
|
||||
@push('styles')
|
||||
<link rel="stylesheet"
|
||||
href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css">
|
||||
@endpush
|
||||
|
||||
@push('scripts')
|
||||
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>
|
||||
<script>
|
||||
$('#categoria').select2({
|
||||
placeholder:"Seleccione un categoria"
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
46
resources/views/productos/show.blade.php
Normal file
46
resources/views/productos/show.blade.php
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
@extends('layouts.admin')
|
||||
@section ('contenido')
|
||||
<div class="row justify-content-center align-items-center">
|
||||
<div class="col-lg-11 col-md-11 col-sm-11 col-xs-11">
|
||||
<h3>Ver Producto</h3>
|
||||
<div class="progress" style="height: 2px;"></div>
|
||||
</div>
|
||||
</div>
|
||||
</br>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-3">
|
||||
<label for="nombre" class="form-check-label">Nombre (*)</label>
|
||||
<input type="text" name="nombre" id="nombre" class="form-control" value="{{$prod->nombre}}" readonly>
|
||||
</div>
|
||||
<div class="form-group col-md-3">
|
||||
<label for="descripcion" class="form-check-label">Descripción (*)</label>
|
||||
<input type="text" name="descripcion" id="descripcion" class="form-control" value="{{$prod->descripcion}}" readonly>
|
||||
</div>
|
||||
<div class="form-group col-md-3">
|
||||
<label for="precio" class="form-check-label">Precio (*)</label>
|
||||
<input type="text" name="precio" id="descripcion" class="form-control" value="{{$prod->precio}}" readonly>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="row">
|
||||
|
||||
<div class="form-group col-md-5">
|
||||
<label for="categoria" class="form-check-label"> Categoria (*)</label>
|
||||
<input type="text" name="categoria" id="categoria" class="form-control" value="{{$prod->categorias->nombre}}" readonly>
|
||||
|
||||
</div>
|
||||
<div class="form-group col-md-3">
|
||||
<label for="categoria" class="form-check-label"> Codigo Barras (*)</label>
|
||||
<input type="text" name="categoria" id="categoria" class="form-control" value="{{$prod->codigo_barras->codigo}}" readonly>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<legend></legend>
|
||||
<div class="row justify-content-center align-items-center">
|
||||
<div class="col-md-2">
|
||||
<a href="{{ route('productos.index') }}" class="btn btn-primary btn-block btn-lg" title="Salir">Salir</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@endsection
|
||||
Loading…
Reference in New Issue
Block a user