feat: Initial commit - Mexus App
Sistema de Gestión de Obras de Construcción completo con: - Dashboard con KPIs y gráficos - Módulo de obras con fases y tareas - Control financiero (gastos, presupuestos) - Gestión de recursos (personal, subcontratistas) - Inventario de materiales con alertas de stock - Reportes con exportación CSV - Autenticación con roles (NextAuth.js v5) - API REST completa - Documentación de API y base de datos - Configuración Docker para despliegue Stack: Next.js 14+, TypeScript, Tailwind CSS, Prisma, PostgreSQL Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
42
src/app/(dashboard)/recursos/materiales/page.tsx
Normal file
42
src/app/(dashboard)/recursos/materiales/page.tsx
Normal file
@@ -0,0 +1,42 @@
|
||||
import { auth } from "@/lib/auth";
|
||||
import { prisma } from "@/lib/prisma";
|
||||
import { MaterialesClient } from "./materiales-client";
|
||||
|
||||
async function getMateriales(empresaId: string) {
|
||||
const materiales = await prisma.material.findMany({
|
||||
where: { empresaId },
|
||||
include: {
|
||||
movimientos: {
|
||||
orderBy: { createdAt: "desc" },
|
||||
take: 5,
|
||||
include: {
|
||||
obra: { select: { nombre: true } },
|
||||
},
|
||||
},
|
||||
},
|
||||
orderBy: { nombre: "asc" },
|
||||
});
|
||||
|
||||
const obras = await prisma.obra.findMany({
|
||||
where: { empresaId },
|
||||
select: { id: true, nombre: true },
|
||||
});
|
||||
|
||||
const alertas = materiales.filter(
|
||||
(m) => m.activo && m.stockActual <= m.stockMinimo
|
||||
);
|
||||
|
||||
return { materiales, obras, alertas };
|
||||
}
|
||||
|
||||
export default async function MaterialesPage() {
|
||||
const session = await auth();
|
||||
|
||||
if (!session?.user?.empresaId) {
|
||||
return <div>Error: No se encontro la empresa</div>;
|
||||
}
|
||||
|
||||
const data = await getMateriales(session.user.empresaId);
|
||||
|
||||
return <MaterialesClient data={data} />;
|
||||
}
|
||||
Reference in New Issue
Block a user