This commit is contained in:
Lizandro Guarnizo
2026-01-06 15:35:59 -05:00
commit a768146f65
602 changed files with 42505 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
<?php
use Illuminate\Support\Facades\Route;
Route::apiResource('settings', App\Http\Controllers\SettingController::class);
Route::apiResource('productos', App\Http\Controllers\ProductoController::class);
Route::apiResource('categorias', App\Http\Controllers\CategoriaController::class);
Route::apiResource('clientes', App\Http\Controllers\ClienteController::class);
Route::apiResource('proveedors', App\Http\Controllers\ProveedorController::class);
Route::apiResource('ventas', App\Http\Controllers\VentaController::class);
Route::apiResource('detalle-ventas', App\Http\Controllers\DetalleVentaController::class);
Route::apiResource('compras', App\Http\Controllers\CompraController::class);
Route::apiResource('detalle-compras', App\Http\Controllers\DetalleCompraController::class);
Route::apiResource('inventarios', App\Http\Controllers\InventarioController::class);
Route::apiResource('cajas', App\Http\Controllers\CajaController::class);
Route::apiResource('movimiento-cajas', App\Http\Controllers\MovimientoCajaController::class);
+29
View File
@@ -0,0 +1,29 @@
<?php
use Illuminate\Foundation\Console\ClosureCommand;
use Illuminate\Foundation\Inspiring;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Schedule;
// Reporte de ventas semanal
Schedule::command('reporte:ventas')->daily();
/* // Verificación de alertas de stock - ejecutar cada 6 horas
Schedule::command('stock:verificar-alertas')
->everySixHours()
->withoutOverlapping()
->onFailure(function () {
\Illuminate\Support\Facades\Log::error('Error al ejecutar verificación de alertas de stock');
});
*/
// También ejecutar al inicio del día laboral
Schedule::command('stock:verificar-alertas')
->dailyAt('08:00')
->withoutOverlapping()
->description('Verificación matutina de niveles de stock');
Artisan::command('inspire', function () {
/** @var ClosureCommand $this */
$this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');
+57
View File
@@ -0,0 +1,57 @@
<?php
use App\Http\Controllers\VentaController;
use Illuminate\Support\Facades\Route;
use Picqer\Barcode\BarcodeGeneratorPNG;
use App\Models\Producto;
use App\Models\ProductVariant;
use App\Models\Setting;
Route::get('/', function () {
return redirect('/admin');
});
Route::get('/imprimir-barcode', function (Illuminate\Http\Request $request) {
$barcode = $request->query('barcode');
// Validar que el código tenga 13 dígitos
if (strlen($barcode) !== 13) {
abort(400, 'El código de barras debe tener exactamente 13 dígitos.');
}
// Buscar el nombre del producto por código de barras directamente en `productos`
$nombreProducto = Producto::where('codigo_barras', $barcode)->value('nombre');
if (empty($nombreProducto)) {
// Si no se encontró en productos, buscar en ProductVariant y acceder al producto relacionado
$variant = ProductVariant::where('barcode', $barcode)->with(['producto', 'color', 'size'])->first();
if ($variant && $variant->producto) {
$nombreProducto = $variant->producto->nombre;
}
$color = ($variant && $variant->color && $variant->color->name !== 'N/A') ? $variant->color->name : null;
$size = ($variant && $variant->size && $variant->size->name !== 'N/A') ? $variant->size->name : null;
// Concatenar solo si color y size no son nulos
$nombreProducto = $nombreProducto
. ($color ? ' ' . $color : '')
. ($size ? ' ' . $size : '');
}
$logo = Setting::first()->logo;
// dd($logo);
// Generar el código de barras en formato PNG
$generator = new BarcodeGeneratorPNG();
$barcodeImage = base64_encode($generator->getBarcode($barcode, $generator::TYPE_EAN_13));
return view('imprimir_barcode', compact('barcode', 'barcodeImage','nombreProducto','logo'));
})->name('imprimir.barcode');
Route::get('/imprimir-recibo/{venta}', [VentaController::class, 'imprimirRecibo'])->name('imprimir-recibo');