Browse Source

cambios

quite el estatus de momento de lo comente por si lo necesitamos en el futuro y tambien ya quedo bien todolo demas
main
sergiomarquez778 2 weeks ago
parent
commit
cfca95dffb
  1. 0
      -i
  2. 68
      app/Http/Controllers/MarcaController.php
  3. 6
      app/Models/Marca.php
  4. 36
      database/migrations/2025_01_18_230913_create_marcs_table.php
  5. 4
      database/migrations/2025_02_28_192615_create_marcas_table.php
  6. 128
      resources/views/marcas.blade.php
  7. 32
      resources/views/marcasCrearEditar.blade.php

68
app/Http/Controllers/MarcaController.php

@ -4,42 +4,38 @@ namespace App\Http\Controllers;
use App\Models\Marca;
use Illuminate\Http\Request;
use App\Models\Marc;
class MarcaController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index(Request $request)
{
$busqueda = $request->busqueda;
public function index(Request $request)
{
$busqueda = $request->busqueda;
if ($busqueda) {
// Busca en la tabla 'marcs' usando la relación
$marcas = Marca::whereHas('Marc', function($query) use ($busqueda) {
$query->where('name', 'LIKE', "%{$busqueda}%");
})->get();
if ($busqueda) {
// Busca en la columna 'marca' de la tabla 'marcas'
$marcas = Marca::where('marca', 'LIKE', "%{$busqueda}%")->get();
if ($marcas->isEmpty()) {
return redirect()->route('marca.index')
->with('error', 'No existe ninguna marca con el nombre "' . $busqueda . '". Por favor, inténtalo de nuevo.');
}
} else {
// Si no hay búsqueda, mostrar todas las marcas
$marcas = Marca::all();
if ($marcas->isEmpty()) {
return redirect()->route('marca.index')
->with('error', 'No existe ninguna marca con el nombre "' . $busqueda . '". Por favor, inténtalo de nuevo.');
}
return view('marcas', ['marcas' => $marcas]);
} else {
// Si no hay búsqueda, mostrar todas las marcas
$marcas = Marca::where('eliminado', 0)->get();
}
return view('marcas', ['marcas' => $marcas]);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$marcs = Marc::all(); // Asegúrate de que el modelo Marc esté correctamente importado
return view('marcasCrearEditar', ['marcs' => $marcs]); // Pasa la variable correctamente
return view('marcasCrearEditar', ['marca' => null]); // No se necesita pasar marcas
}
/**
@ -47,9 +43,12 @@ class MarcaController extends Controller
*/
public function store(Request $request)
{
$marca = new Marca($request->all());
// Crea una nueva marca
$marca = new Marca();
$marca->marca = $request->marca; // Asigna el nombre ingresado por el usuario
$marca->eliminado = 0; // Marca como activa por defecto
$marca->save();
return redirect()->route('marca.index')->with('success', 'Marca creada exitosamente.');
}
@ -59,8 +58,7 @@ class MarcaController extends Controller
public function edit($id)
{
$marca = Marca::findOrFail($id); // Busca la marca por ID
$marcs = Marc::all(); // Recupera todas las marcas para el select
return view('marcasCrearEditar', ['marca' => $marca, 'marcs' => $marcs]); // Pasa la marca y las marcas a la vista
return view('marcasCrearEditar', ['marca' => $marca]); // Pasa la marca a la vista
}
/**
@ -69,15 +67,8 @@ class MarcaController extends Controller
public function update(Request $request, $id)
{
$marca = Marca::findOrFail($id); // Encuentra la marca por ID
// Si el campo 'recuperar' está presente, cambia el estado a activo
if ($request->has('recuperar')) {
$marca->eliminado = 0; // Marca como activa
} else {
// Actualiza los datos de la marca directamente
$marca->fill($request->all()); // Rellena los datos sin validación
}
$marca->marca = $request->marca; // Actualiza el nombre de la marca
$marca->eliminado = 0; // Cambia el estado a activo si se está editando
$marca->save(); // Guarda los cambios
return redirect()->route('marca.index')->with('success', 'Marca actualizada correctamente.');
@ -88,17 +79,10 @@ class MarcaController extends Controller
*/
public function destroy($id)
{
// Encuentra la marca por ID
$marca = Marca::findOrFail($id);
// Cambia el campo 'eliminado' a 1 (inactivo)
$marca->eliminado = 1; // Marca como inactiva
$marca = Marca::findOrFail($id); // Encuentra la marca por ID
$marca->eliminado = 1; // Cambia el estado a inactivo
$marca->save(); // Guarda los cambios
// Redirige con un mensaje de éxito
return redirect()->route('marca.index')->with('success', 'Marca inactivada correctamente.');
}
/**
* Recover the specified resource.
*/
}

6
app/Models/Marca.php

@ -12,9 +12,9 @@ class Marca extends Model
protected $table = 'marcas';
protected $fillable = ['marcs_id'];
public function Marc():HasOne{
protected $fillable = ['marca'];
/*public function Marc():HasOne{
return $this->hasOne(marc::class, 'id','marcs_id');
}
}*/
}

36
database/migrations/2025_01_18_230913_create_marcs_table.php

@ -16,8 +16,40 @@ return new class extends Migration
$table->string('name');
$table->timestamps();
});
DB::table('marcs')->insert(['name'=> 'chevorel']);
DB::table('marcs')->insert(['name'=> 'nissan']);
DB::table('marcs')->insert([
['name' => 'chevrolet'],
['name' => 'nissan'],
['name' => 'ford'],
['name' => 'toyota'],
['name' => 'honda'],
['name' => 'bmw'],
['name' => 'audi'],
['name' => 'mercedes-benz'],
['name' => 'volkswagen'],
['name' => 'hyundai'],
['name' => 'kia'],
['name' => 'subaru'],
['name' => 'mazda'],
['name' => 'peugeot'],
['name' => 'renault'],
['name' => 'fiat'],
['name' => 'land rover'],
['name' => 'jaguar'],
['name' => 'tesla'],
['name' => 'porsche'],
['name' => 'volvo'],
['name' => 'mitsubishi'],
['name' => 'chrysler'],
['name' => 'dodge'],
['name' => 'jeep'],
['name' => 'buick'],
['name' => 'gmc'],
['name' => 'infiniti'],
['name' => 'lexus'],
['name' => 'acura'],
['name' => 'alfa romeo'],
// Agrega más marcas según sea necesario
]);
}
/**

4
database/migrations/2025_02_28_192615_create_marcas_table.php

@ -13,9 +13,9 @@ return new class extends Migration
{
Schema::create('marcas', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('marcs_id');
$table->string('marca');
$table->timestamps();
$table->foreign('marcs_id')->references('id')->on('marcs');
// funciona como enlace de una tabla a otra par agregar valores ya definidos $table->foreign('marcs_id')->references('id')->on('marcs');
});
}

128
resources/views/marcas.blade.php

@ -2,7 +2,9 @@
@section('content')
<div class="container mx-auto px-4 py-6">
<!-- Encabezado -->
<!-- Mensajes de éxito y error -->
@if(session('success'))
<div id="success-message" class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded relative mb-4" role="alert">
<span class="block sm:inline">{{ session('success') }}</span>
@ -18,15 +20,13 @@
<div class="bg-white rounded-lg shadow-lg">
<div class="p-4 border-b border-gray-200 flex justify-between items-center">
<h2 class="text-2xl font-bold">Gestión de Marcas</h2>
<a href="{{ route('marca.create') }}"
class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 flex items-center gap-2">
<a href="{{ route('marca.create') }}" class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 flex items-center gap-2">
<i class="fas fa-plus"></i>
Agregar
</a>
</div>
<!-- Barra de búsqueda -->
<div class="p-4 border-b border-gray-200 bg-gray-50">
<!-- Barra de búsqueda -->
<div class="p-4 border-b border-gray-200 bg-gray-50">
<form action="{{ route('marca.index') }}" method="GET" class="flex gap-2">
<div class="relative w-full sm:w-64">
<input type="text"
@ -39,7 +39,7 @@
</div>
</div>
<button type="submit" class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600">
Buscar/Actualizar
Buscar
</button>
@if(request('busqueda'))
<a href="{{ route('marca.index') }}" class="px-4 py-2 bg-gray-500 text-white rounded-lg hover:bg-gray-600">
@ -55,6 +55,7 @@
<tr>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">ID</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Marca</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Acciones</th>
</tr>
</thead>
@ -64,28 +65,42 @@
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">{{ $marca->id }}</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">
<i class="fas fa-car text-blue-500 mr-2"></i>
{{ $marca->Marc->name }}
{{ $marca->marca }}
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm">
<div class="flex gap-2">
<a href="#"
onclick="confirmarEdicion('{{ route('marca.edit', $marca->id) }}')"
class="text-blue-600 hover:text-blue-900">
<i class="fas fa-edit"></i>
{{-- todo esto funciona para mostrar el estatus de tiempo real dela actividad
<td class="px-6 py-4 whitespace-nowrap text-sm">
@if($marca->eliminado == 0)
<span class="flex items-center">
<span class="h-2 w-2 bg-green-500 rounded-full mr-2"></span> Activo
</span>
@else
<span class="flex items-center">
<span class="h-2 w-2 bg-red-500 rounded-full mr-2"></span> Inactivo
</span>
@endif
</td>--}}
<td class="flex space-x-2 px-6 py-4 whitespace-nowrap text-sm">
@if($marca->eliminado == 1)
<form action="{{ route('marca.update', $marca->id) }}" method="POST" class="d-inline">
@csrf
@method('PUT')
<input type="hidden" name="recuperar" value="1">
<a href="#" onclick="event.preventDefault(); this.closest('form').submit();" class="text-success">
<i class="fas fa-undo" style="color: green;"></i>
</a>
</form>
@else
<a href="{{ route('marca.edit', $marca->id) }}" class="text-warning">
<i class="fas fa-edit" style="color: orange;"></i>
</a>
<form action="{{ route('marca.destroy', $marca->id) }}"
method="POST"
class="inline"
onsubmit="return false;">
<form action="{{ route('marca.destroy', $marca->id) }}" method="POST" class="d-inline">
@csrf
@method('DELETE')
<button type="button"
onclick="confirmarEliminacion(this)"
class="text-red-600 hover:text-red-900">
<i class="fas fa-trash"></i>
</button>
<a href="#" onclick="event.preventDefault(); this.closest('form').submit();" class="text-danger">
<i class="fas fa-trash" style="color: red;"></i>
</a>
</form>
</div>
@endif
</td>
</tr>
@endforeach
@ -96,51 +111,26 @@
</div>
<script>
function confirmarEdicion(url) {
Swal.fire({
title: '¿Editar marca?',
text: "¿Estás seguro de que deseas editar esta marca?",
icon: 'question',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Sí, editar',
cancelButtonText: 'Cancelar'
}).then((result) => {
if (result.isConfirmed) {
window.location.href = url;
// Desaparecer el mensaje después de 3 segundos
setTimeout(function() {
var message = document.getElementById('success-message');
if (message) {
message.style.transition = 'opacity 0.5s ease';
message.style.opacity = '0';
setTimeout(function() {
message.remove();
}, 500); // Tiempo para remover el elemento después de la transición
}
});
}
function confirmarEliminacion(button) {
Swal.fire({
title: '¿Estás seguro?',
text: "Esta acción no se puede deshacer",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Sí, eliminar',
cancelButtonText: 'Cancelar'
}).then((result) => {
if (result.isConfirmed) {
button.closest('form').onsubmit = null;
button.closest('form').submit();
}, 3000); // Tiempo en milisegundos antes de comenzar a desaparecer
setTimeout(function() {
var noResultsMessage = document.getElementById('no-results-message');
if (noResultsMessage) {
noResultsMessage.style.transition = 'opacity 0.5s ease';
noResultsMessage.style.opacity = '0';
setTimeout(function() {
noResultsMessage.remove();
}, 500); // Tiempo para remover el elemento después de la transición
}
});
}
// Desaparecer el mensaje después de 3 segundos
setTimeout(function() {
var message = document.getElementById('success-message');
if (message) {
message.style.transition = 'opacity 0.5s ease';
message.style.opacity = '0';
setTimeout(function() {
message.remove();
}, 500); // Tiempo para remover el elemento después de la transición
}
}, 3000); // Tiempo en milisegundos antes de comenzar a desaparecer
}, 3000); // Tiempo en milisegundos antes de comenzar a desaparecer
</script>
@endsection
@endsection

32
resources/views/marcasCrearEditar.blade.php

@ -30,7 +30,6 @@
</div>
</div>
@endif
<!-- Formulario -->
<form id="marcaForm"
action="{{ isset($marca) ? route('marca.update', $marca->id) : route('marca.store') }}"
@ -42,20 +41,31 @@
<div class="space-y-6">
<!-- Campo Nombre -->
<div class="mb-6">
<label for="marcs_id" class="block text-sm font-medium text-gray-700">Selecciona una Marca 🏷️</label>
<select name="marcs_id" id="marcs_id" class="mt-1 block w-full border border-gray-300 rounded-md shadow-sm focus:ring-blue-500 focus:border-blue-500" required>
<option value="" disabled selected></option>
@foreach($marcs as $marc)
<option value="{{ $marc->id }}">{{ $marc->name }}</option>
@endforeach
</select>
<div>
<label for="marca" class="block text-sm font-medium text-gray-700 mb-2">
Nombre de la Marca
</label>
<div class="relative rounded-md shadow-sm">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
<i class="fas fa-tag text-gray-400"></i>
</div>
<input type="text"
name="marca"
id="marca"
class="block w-full pl-10 pr-3 py-2 border border-gray-300 rounded-md focus:ring-2 focus:ring-blue-500 focus:border-blue-500"
required
placeholder="Ingresa el nombre de la marca"
value="{{ isset($marca) ? $marca->marca : old('marca') }}">
</div>
@error('marca')
<p class="mt-1 text-sm text-red-600">{{ $message }}</p>
@enderror
</div>
<!-- Botones de acción -->
<div class="flex justify-end space-x-2 pt-4 border-t border-gray-200">
<a href="{{ route('marca.index') }}"
class="px-4 py-2 border border-gray-300 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
class="px-4 py-2 border border-gray-300 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500">
Cancelar
</a>
<button type="submit"
@ -69,4 +79,4 @@
</div>
</div>
</div>
@endsection
@endsection
Loading…
Cancel
Save