Skip to content

Commit 5234c86

Browse files
authored
Merge pull request #43 from chechojgb/buttonsLovers
add: se agrega back agregar pedidos.
2 parents 4549739 + 05e5e73 commit 5234c86

13 files changed

+343
-181
lines changed

app/Http/Controllers/BLPedidosController.php

Lines changed: 99 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,21 @@
88
use App\Models\BlColor;
99
use App\Models\BlEmpaque;
1010
use App\Models\BlMovimiento;
11-
use Illuminate\Container\Attributes\Auth;
11+
use App\Models\BLPedido;
12+
use App\Models\BLPedidoItem;
13+
use App\Models\User;
14+
// use Illuminate\Container\Attributes\DB;
15+
use Illuminate\Support\Facades\DB as FacadesDB;
1216
use Inertia\Inertia;
17+
use Illuminate\Support\Facades\DB;
1318
use Illuminate\Support\Str;
19+
use Illuminate\Support\Facades\Auth;
1420

1521
class BLPedidosController extends Controller
1622
{
1723
public function index()
1824
{
25+
$user = Auth::user();
1926
$productos = BlProducto::with(['color', 'empaques.movimientos'])
2027
->get()
2128
->map(function ($producto) {
@@ -36,8 +43,98 @@ public function index()
3643
return Inertia::render('BLPedidos', [
3744
'productos' => $productos,
3845
'colores' => BlColor::all(), // Para formularios
39-
'user' => auth()->user(),
46+
'user' => $user,
4047
'clientes' => $clientes, // Para formularios
4148
]);
4249
}
50+
51+
public function store(Request $request)
52+
{
53+
$user = Auth::user();
54+
55+
$validated = $request->validate([
56+
'cliente_id' => 'required|numeric|exists:bl_clientes,id',
57+
'fecha_acordada' => 'required|date',
58+
'nota' => 'nullable|string|max:255',
59+
'productos' => 'required|array|min:1',
60+
'productos.*.producto_id' => 'required|numeric|exists:bl_productos,id',
61+
'productos.*.cantidad' => 'required|numeric|min:1'
62+
]);
63+
64+
DB::beginTransaction();
65+
66+
try {
67+
// Crear el pedido principal
68+
$pedido = BLPedido::create([
69+
'cliente_id' => $validated['cliente_id'],
70+
'fecha_pedido' => $validated['fecha_acordada'],
71+
'estado' => 'pendiente',
72+
'notas' => $validated['nota'] ?? null,
73+
'usuario_id' => $user->id,
74+
]);
75+
76+
foreach ($validated['productos'] as $producto) {
77+
$cantidadSolicitada = $producto['cantidad'];
78+
79+
// Buscar empaques disponibles para ese producto (ordenados por fecha ascendente)
80+
$empaquesDisponibles = BLEmpaque::where('producto_id', $producto['producto_id'])
81+
->where('estado', 'disponible')
82+
->orderBy('created_at')
83+
->get();
84+
85+
$itemsPedido = [];
86+
$cantidadAsignada = 0;
87+
88+
foreach ($empaquesDisponibles as $empaque) {
89+
if ($cantidadAsignada >= $cantidadSolicitada) {
90+
break;
91+
}
92+
93+
$cantidadAsignada += $empaque->cantidad;
94+
95+
$itemsPedido[] = [
96+
'pedido_id' => $pedido->id,
97+
'cantidad_empaques' => $empaque->cantidad,
98+
'empaque_id' => $empaque->id,
99+
'nota' => null,
100+
];
101+
102+
// Marcar empaque como "asignado"
103+
$empaque->estado = 'asignado';
104+
$empaque->save();
105+
}
106+
107+
// Si no se alcanzó la cantidad, se anota en el último ítem
108+
if ($cantidadAsignada < $cantidadSolicitada && count($itemsPedido) > 0) {
109+
$faltante = $cantidadSolicitada - $cantidadAsignada;
110+
$itemsPedido[count($itemsPedido) - 1]['nota'] = "Faltan $faltante unidades para completar este pedido";
111+
}
112+
113+
// Insertar ítems del producto (si hay alguno)
114+
if (count($itemsPedido) > 0) {
115+
BLPedidoItem::create($itemsPedido);
116+
}
117+
}
118+
119+
DB::commit();
120+
121+
return response()->json([
122+
'success' => true,
123+
'message' => 'Pedido creado correctamente',
124+
'pedido_id' => $pedido->id
125+
], 201);
126+
127+
} catch (\Exception $e) {
128+
DB::rollBack();
129+
130+
return response()->json([
131+
'success' => false,
132+
'message' => 'Error al crear el pedido',
133+
'error' => $e->getMessage()
134+
], 500);
135+
}
136+
}
137+
138+
139+
43140
}

app/Http/Controllers/BlProductoController.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ public function store(Request $request)
148148
'cantidad_por_empaque' => $validated['cantidad_por_empaque'],
149149
'codigo_barras' => $validated['codigo_barras'],
150150
'codigo_unico' => $validated['codigo_unico'],
151+
'estado' => 'Disponible'
151152
]);
152153

153154

app/Models/BLPedido.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
class BLPedido extends Model
1111
{
12-
protected $table = 'bl_pedidos';
12+
protected $table = 'bl_pedidos';
1313

1414
protected $fillable = [
1515
'cliente_id',

app/Models/BLPedidoItem.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ class BLPedidoItem extends Model
1212
'pedido_id',
1313
'empaque_id',
1414
'cantidad_empaques',
15-
'precio_unitario'
15+
'precio_unitario',
16+
'nota'
1617
];
1718

1819
// Relación: Un item pertenece a un pedido

app/Models/BlEmpaque.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
class BlEmpaque extends Model
1010
{
1111
protected $table = 'bl_empaques';
12-
protected $fillable = ['producto_id', 'codigo_unico', 'cantidad_por_empaque', 'codigo_barras'];
12+
protected $fillable = ['producto_id', 'codigo_unico', 'cantidad_por_empaque', 'codigo_barras', 'estado'];
1313

1414
// Relación: Un empaque pertenece a un producto
1515
public function producto(): BelongsTo

database/migrations/2025_08_05_175915_add_contacto_to_bl_clientes_table.php

Lines changed: 0 additions & 26 deletions
This file was deleted.

database/migrations/2025_08_05_180406_add_ciudad_to_bl_clientes_table.php

Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
return new class extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*/
12+
public function up(): void
13+
{
14+
Schema::table('bl_empaques', function (Blueprint $table) {
15+
$table->string('estado')->nullable()->after('codigo_barras');
16+
});
17+
}
18+
19+
/**
20+
* Reverse the migrations.
21+
*/
22+
public function down(): void
23+
{
24+
Schema::table('bl_empaques', function (Blueprint $table) {
25+
$table->string('estado');
26+
});
27+
}
28+
29+
};
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
return new class extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*/
12+
public function up(): void
13+
{
14+
Schema::table('bl_pedido_items', function (Blueprint $table) {
15+
$table->string('nota')->nullable()->after('cantidad_empaques');
16+
});
17+
}
18+
19+
/**
20+
* Reverse the migrations.
21+
*/
22+
public function down(): void
23+
{
24+
Schema::table('bl_pedido_items', function (Blueprint $table) {
25+
$table->string('nota');
26+
});
27+
}
28+
};

0 commit comments

Comments
 (0)