Skip to content

Commit 5bfeb89

Browse files
authored
Merge pull request #54 from chechojgb/buttonsLovers
add: grafico stock StockActualProductosBL
2 parents 3faddd7 + c94ce63 commit 5bfeb89

File tree

5 files changed

+111
-47
lines changed

5 files changed

+111
-47
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
3+
namespace App\Http\Controllers;
4+
5+
use App\Models\BLPedido;
6+
use App\Models\BlProducto;
7+
use Illuminate\Http\Request;
8+
use Illuminate\Support\Facades\Auth;
9+
use Inertia\Inertia;
10+
11+
class DashboardController extends Controller
12+
{
13+
public function index()
14+
{
15+
$user = Auth::user();
16+
$productos = BlProducto::with(['color', 'empaques.movimientos'])
17+
->get()
18+
->map(function ($producto) {
19+
return [
20+
'id' => $producto->id,
21+
'tipo_producto' => $producto->tipo_producto,
22+
'tamanio' => $producto->tamanio,
23+
'color_nombre' => $producto->color->codigo,
24+
'descripcion' => $producto->descripcion,
25+
'stock_total' => $producto->empaques->sum(function ($empaque) {
26+
return $empaque->movimientos->sum('cantidad') * $empaque->cantidad_por_empaque;
27+
}),
28+
];
29+
})
30+
->where('stock_total', '>', 1)
31+
->take(10);
32+
// dd($productos->pluck('descripcion'));
33+
$rankingProductos = BLPedido::with(['items.empaque.producto'])
34+
->get()
35+
->flatMap(function ($pedido) {
36+
return $pedido->items->map(function ($item) {
37+
$cantidad = $item->cantidad_empaques ;
38+
return [
39+
'producto_id' => $item->empaque->producto->id,
40+
'nombre' => $item->empaque->producto->descripcion,
41+
'cantidad' => $cantidad,
42+
];
43+
});
44+
})
45+
->groupBy('producto_id')
46+
->map(function ($items, $productoId) {
47+
return [
48+
'id' => $productoId,
49+
'nombre' => $items->first()['nombre'],
50+
'cantidad' => $items->sum('cantidad'),
51+
];
52+
})
53+
->sortByDesc('cantidad')
54+
->values()
55+
->take(5); // top 5
56+
57+
58+
return Inertia::render('dashboard', [
59+
'productos' => $productos,
60+
'user' => $user,
61+
'pedidos' => $rankingProductos
62+
]);
63+
}
64+
}

resources/js/components/BL/StockActualProductosBL.jsx

Lines changed: 28 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,40 @@
1-
import { Doughnut } from 'react-chartjs-2';
2-
import { Chart as ChartJS, ArcElement, Tooltip, Legend } from 'chart.js';
1+
import { Doughnut } from "react-chartjs-2";
2+
import { Chart as ChartJS, ArcElement, Tooltip, Legend } from "chart.js";
33

44
ChartJS.register(ArcElement, Tooltip, Legend);
55

6-
const productosStock = [
7-
{ nombre: 'Botón Z6', cantidad: 500 },
8-
{ nombre: 'Botón R4', cantidad: 300 },
9-
{ nombre: 'Botón L2', cantidad: 200 },
10-
{ nombre: 'Botón M1', cantidad: 100 },
11-
{ nombre: 'Botón N8', cantidad: 50 },
12-
];
6+
const colores = ["#4ade80", "#60a5fa", "#facc15", "#fb923c", "#f87171"];
137

14-
const colores = ['#4ade80', '#60a5fa', '#facc15', '#fb923c', '#f87171'];
15-
16-
const data = {
17-
labels: productosStock.map(p => p.nombre),
18-
datasets: [
19-
{
20-
data: productosStock.map(p => p.cantidad),
21-
backgroundColor: colores,
22-
borderWidth: 1,
23-
},
24-
],
25-
};
8+
export default function StockActualProductosBL({ productosStock }) {
9+
// console.log(productosStock);
10+
const productosStockArray = Object.values(productosStock);
11+
const data = {
12+
labels: productosStockArray.map((p) => p.descripcion),
13+
datasets: [
14+
{
15+
data: productosStockArray.map((p) => p.stock_total),
16+
backgroundColor: colores,
17+
borderWidth: 1,
18+
},
19+
],
20+
};
2621

27-
const options = {
28-
responsive: true,
29-
maintainAspectRatio: false,
30-
cutout: '70%',
31-
plugins: {
32-
legend: {
33-
position: 'bottom',
34-
labels: {
35-
boxWidth: 12,
36-
font: {
37-
size: 10,
22+
const options = {
23+
responsive: true,
24+
maintainAspectRatio: false,
25+
cutout: "70%",
26+
plugins: {
27+
legend: {
28+
position: "bottom",
29+
labels: {
30+
boxWidth: 12,
31+
font: { size: 10 },
32+
color: "#374151",
3833
},
39-
color: '#374151',
4034
},
4135
},
42-
},
43-
};
36+
};
4437

45-
export default function StockActualProductosBL() {
4638
return (
4739
<div className="relative flex flex-col h-full p-4">
4840
<h3 className="text-base font-semibold text-gray-900 dark:text-white mb-3">

resources/js/components/welcome/dashboard.jsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ const breadcrumbs = [
1919
},
2020
];
2121

22-
export default function Dashboard({user}) {
22+
export default function Dashboard({user, productos, pedidos}) {
23+
console.log(pedidos);
24+
2325
return (
2426
<AppLayout breadcrumbs={[{ title: 'Dashboard', href: '/dashboard' }]}>
2527
<Head title="Dashboard" />
@@ -71,7 +73,7 @@ export default function Dashboard({user}) {
7173

7274
<div className="grid auto-rows-fr gap-4 md:grid-cols-3 flex-1">
7375
<div className="border-sidebar-border/70 dark:border-sidebar-border relative overflow-hidden rounded-xl border ">
74-
<StockActualProductosBL/>
76+
<StockActualProductosBL productosStock={productos}/>
7577
</div>
7678
<div className="border-sidebar-border/70 dark:border-sidebar-border relative overflow-hidden rounded-xl border">
7779
<RankingBotonesVendidosBL/>

resources/js/pages/dashboard.jsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import { LoadProvider } from '@/components/context/loadContext';
22
import Dashboard from '@/components/welcome/dashboard';
33

4-
export default function MainApp({user}) {
4+
export default function MainApp({user, productos, pedidos}) {
55
return (
66
<LoadProvider total={5}>
7-
<Dashboard user={user}/>
7+
<Dashboard user={user} productos={productos} pedidos={pedidos}/>
88
</LoadProvider>
99
);
1010
}

routes/web.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@
1111
use App\Http\Controllers\BlEmpaqueController;
1212
use App\Http\Controllers\BlMovimientoController;
1313
use App\Http\Controllers\BLPedidosController;
14+
use App\Http\Controllers\DashboardController;
1415
use App\Models\BLPedido;
16+
use App\Models\BlProducto;
1517
use App\Models\SshSession;
1618
// use Illuminate\Container\Attributes\Auth;
1719
use Illuminate\Support\Facades\Auth;
20+
use Tests\Feature\DashboardTest;
1821

1922
require __DIR__.'/settings.php';
2023
require __DIR__.'/auth.php';
@@ -28,13 +31,16 @@
2831
})->name('homeAR');
2932

3033
Route::middleware(['auth', 'verified'])->group(function () {
31-
Route::get('dashboard', function () {
32-
// return Inertia::render('dashboard');
33-
return Inertia::render('dashboard', [
34-
$user = Auth::user(),
35-
'user' => $user,
36-
]);
37-
})->name('dashboard');
34+
// Route::get('dashboard', function () {
35+
// // return Inertia::render('dashboard');
36+
// return Inertia::render('dashboard', [
37+
// $user = Auth::user(),
38+
// $productos = BlProducto::get(),
39+
// 'user' => $user,
40+
// 'productos' => $productos,
41+
// ]);
42+
// })->name('dashboard');
43+
Route::get('dashboard', [DashboardController::class, 'index'])->name('dashboard');
3844

3945
Route::get('perfil', function () {
4046
return Inertia::render('Perfil');

0 commit comments

Comments
 (0)