feat(web): banners y routing puntos-de-venta

This commit is contained in:
2026-04-17 12:36:48 -03:00
parent 4b96cdefcc
commit 056045232c
4 changed files with 83 additions and 0 deletions

View File

@@ -14,6 +14,7 @@ import {
PanelLeftOpen, PanelLeftOpen,
Newspaper, Newspaper,
Columns3, Columns3,
Store,
} from 'lucide-react' } from 'lucide-react'
import { cn } from '@/lib/utils' import { cn } from '@/lib/utils'
import { Badge } from '@/components/ui/badge' import { Badge } from '@/components/ui/badge'
@@ -61,6 +62,12 @@ const adminItems: NavItem[] = [
icon: Columns3, icon: Columns3,
requiredPermission: 'administracion:secciones:gestionar', requiredPermission: 'administracion:secciones:gestionar',
}, },
{
label: 'Puntos de Venta',
href: '/admin/puntos-de-venta',
icon: Store,
requiredPermission: 'administracion:puntos_de_venta:gestionar',
},
] ]
interface SidebarNavProps { interface SidebarNavProps {

View File

@@ -0,0 +1,19 @@
import { AlertTriangle } from 'lucide-react'
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'
interface MedioInactivoBannerProps {
medioNombre: string
}
export function MedioInactivoBanner({ medioNombre }: MedioInactivoBannerProps) {
return (
<Alert variant="destructive" className="mb-4">
<AlertTriangle className="h-4 w-4" />
<AlertTitle>Medio desactivado</AlertTitle>
<AlertDescription>
El medio &quot;{medioNombre}&quot; está desactivado. Las operaciones de edición, activación y
desactivación de sus puntos de venta están bloqueadas hasta que se reactive el medio.
</AlertDescription>
</Alert>
)
}

View File

@@ -0,0 +1,19 @@
import { AlertTriangle } from 'lucide-react'
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert'
interface PdvInactivoBannerProps {
puntoDeVentaNombre: string
}
export function PdvInactivoBanner({ puntoDeVentaNombre }: PdvInactivoBannerProps) {
return (
<Alert variant="destructive" className="mb-4">
<AlertTriangle className="h-4 w-4" />
<AlertTitle>Punto de venta desactivado</AlertTitle>
<AlertDescription>
El punto de venta &quot;{puntoDeVentaNombre}&quot; está desactivado. Reactivalo para habilitar
nuevamente sus operaciones.
</AlertDescription>
</Alert>
)
}

View File

@@ -21,6 +21,10 @@ import { SeccionesListPage } from './features/secciones/pages/SeccionesListPage'
import { CreateSeccionPage } from './features/secciones/pages/CreateSeccionPage' import { CreateSeccionPage } from './features/secciones/pages/CreateSeccionPage'
import { EditSeccionPage } from './features/secciones/pages/EditSeccionPage' import { EditSeccionPage } from './features/secciones/pages/EditSeccionPage'
import { SeccionDetailPage } from './features/secciones/pages/SeccionDetailPage' import { SeccionDetailPage } from './features/secciones/pages/SeccionDetailPage'
import { PuntosDeVentaListPage } from './features/puntos-de-venta/pages/PuntosDeVentaListPage'
import { CreatePuntoDeVentaPage } from './features/puntos-de-venta/pages/CreatePuntoDeVentaPage'
import { PuntoDeVentaDetailPage } from './features/puntos-de-venta/pages/PuntoDeVentaDetailPage'
import { EditPuntoDeVentaPage } from './features/puntos-de-venta/pages/EditPuntoDeVentaPage'
import { HomePage } from './pages/HomePage' import { HomePage } from './pages/HomePage'
import { PublicLayout } from './layouts/PublicLayout' import { PublicLayout } from './layouts/PublicLayout'
import { ProtectedLayout } from './layouts/ProtectedLayout' import { ProtectedLayout } from './layouts/ProtectedLayout'
@@ -240,6 +244,40 @@ export function AppRoutes() {
} }
/> />
{/* Puntos de Venta routes */}
<Route
path="/admin/puntos-de-venta"
element={
<ProtectedPage requiredPermissions={['administracion:puntos_de_venta:gestionar']}>
<PuntosDeVentaListPage />
</ProtectedPage>
}
/>
<Route
path="/admin/puntos-de-venta/nuevo"
element={
<ProtectedPage requiredPermissions={['administracion:puntos_de_venta:gestionar']}>
<CreatePuntoDeVentaPage />
</ProtectedPage>
}
/>
<Route
path="/admin/puntos-de-venta/:id"
element={
<ProtectedPage requiredPermissions={['administracion:puntos_de_venta:gestionar']}>
<PuntoDeVentaDetailPage />
</ProtectedPage>
}
/>
<Route
path="/admin/puntos-de-venta/:id/edit"
element={
<ProtectedPage requiredPermissions={['administracion:puntos_de_venta:gestionar']}>
<EditPuntoDeVentaPage />
</ProtectedPage>
}
/>
<Route path="*" element={<Navigate to="/" replace />} /> <Route path="*" element={<Navigate to="/" replace />} />
</Routes> </Routes>
) )