"use client" import { useState } from 'react' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog" import { Badge } from "@/components/ui/badge" import { Switch } from "@/components/ui/switch" import { useConfiguracionesTributarias } from '@/hooks/useConfiguracionesTributarias' import { Plus, Edit, Trash2, Save, RotateCcw } from 'lucide-react' export function ConfiguracionTributariaManager() { const { configuraciones, loading, error, createConfiguracion, updateConfiguracion, deleteConfiguracion, incrementarSecuencial, reiniciarSecuencial, } = useConfiguracionesTributarias() const [editingConfig, setEditingConfig] = useState(null) const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false) const [isResetDialogOpen, setIsResetDialogOpen] = useState(false) const [resetConfigId, setResetConfigId] = useState(null) const [resetSecuencial, setResetSecuencial] = useState('') const [formData, setFormData] = useState({ ambiente: '1', tipoEmision: '1', razonSocial: '', nombreComercial: '', ruc: '', dirMatriz: '', estab: '001', ptoEmi: '001', secuencial: '000000001', activo: true, }) const resetForm = () => { setFormData({ ambiente: '1', tipoEmision: '1', razonSocial: '', nombreComercial: '', ruc: '', dirMatriz: '', estab: '001', ptoEmi: '001', secuencial: '000000001', activo: true, }) } const handleCreate = async () => { try { await createConfiguracion(formData) setIsCreateDialogOpen(false) resetForm() } catch (error) { console.error('Error creating configuration:', error) } } const handleUpdate = async (id: string) => { try { await updateConfiguracion(id, formData) setEditingConfig(null) resetForm() } catch (error) { console.error('Error updating configuration:', error) } } const handleDelete = async (id: string) => { if (confirm('¿Está seguro de que desea eliminar esta configuración?')) { try { await deleteConfiguracion(id) } catch (error) { console.error('Error deleting configuration:', error) } } } const handleIncrementSecuencial = async (id: string) => { try { await incrementarSecuencial(id) } catch (error) { console.error('Error incrementing secuencial:', error) } } const handleResetSecuencial = (id: string, currentSecuencial: string) => { setResetConfigId(id) setResetSecuencial(currentSecuencial) setIsResetDialogOpen(true) } const confirmResetSecuencial = async () => { if (!resetConfigId || !resetSecuencial) return try { await reiniciarSecuencial(resetConfigId, resetSecuencial) setIsResetDialogOpen(false) setResetConfigId(null) setResetSecuencial('') } catch (error) { console.error('Error resetting secuencial:', error) } } const cancelReset = () => { setIsResetDialogOpen(false) setResetConfigId(null) setResetSecuencial('') } const startEdit = (config: any) => { setEditingConfig(config.id) setFormData({ ambiente: config.ambiente, tipoEmision: config.tipoEmision, razonSocial: config.razonSocial, nombreComercial: config.nombreComercial, ruc: config.ruc, dirMatriz: config.dirMatriz, estab: config.estab, ptoEmi: config.ptoEmi, secuencial: config.secuencial, activo: config.activo, }) } const cancelEdit = () => { setEditingConfig(null) resetForm() } if (loading && configuraciones.length === 0) { return
Cargando...
} if (error) { return
Error: {error}
} return (

Configuraciones Tributarias

Gestiona la información tributaria de tu empresa

Nueva Configuración Tributaria Ingresa los datos de la configuración tributaria setIsCreateDialogOpen(false)} />
{configuraciones.map((config) => (
{config.razonSocial} {config.activo ? "Activa" : "Inactiva"} RUC: {config.ruc} | {config.nombreComercial}
{editingConfig === config.id ? ( <> ) : ( <> )}
{editingConfig === config.id ? ( handleUpdate(config.id)} onCancel={cancelEdit} isEdit /> ) : (

{config.ambiente === '1' ? 'Pruebas' : 'Producción'}

{config.estab}

{config.ptoEmi}

{config.secuencial}

{config.dirMatriz}

)}
))} {configuraciones.length === 0 && !loading && (

No hay configuraciones tributarias registradas

)}
{/* Diálogo para reiniciar secuencial */} Reiniciar Secuencial Ingresa el nuevo número de secuencial para esta configuración.
setResetSecuencial(e.target.value)} placeholder="000000001" maxLength={9} />

Ingresa un número entre 0 y 999999999. El sistema lo formateará automáticamente.

) } interface ConfiguracionFormProps { formData: any setFormData: (data: any) => void onSave: () => void onCancel: () => void isEdit?: boolean } function ConfiguracionForm({ formData, setFormData, onSave, onCancel, isEdit = false }: ConfiguracionFormProps) { return (
setFormData({ ...formData, ruc: e.target.value })} placeholder="13 dígitos" maxLength={13} />
setFormData({ ...formData, razonSocial: e.target.value })} placeholder="Empresa S.A." />
setFormData({ ...formData, nombreComercial: e.target.value })} placeholder="Nombre Comercial" />
setFormData({ ...formData, estab: e.target.value })} placeholder="001" maxLength={3} />
setFormData({ ...formData, ptoEmi: e.target.value })} placeholder="001" maxLength={3} />
setFormData({ ...formData, secuencial: e.target.value })} placeholder="000000001" maxLength={9} />
setFormData({ ...formData, dirMatriz: e.target.value })} placeholder="Av. Principal 123 y Secundaria" />
{isEdit && (
setFormData({ ...formData, activo: checked })} />
)}
) }