page.tsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. "use client"
  2. import { FacturaHeader } from "@/components/factura/FacturaHeader"
  3. import { InfoTributariaForm } from "@/components/factura/InfoTributariaForm"
  4. import { InfoFacturaForm } from "@/components/factura/InfoFacturaForm"
  5. import { DetallesList } from "@/components/factura/DetallesList"
  6. import { ResumenTotales } from "@/components/factura/ResumenTotales"
  7. import { FacturaActions } from "@/components/factura/FacturaActions"
  8. import { XmlViewer } from "@/components/factura/XmlViewer"
  9. import { useFacturaState } from "@/hooks/factura/useFacturaState"
  10. import { useFacturaCalculations } from "@/hooks/factura/useFacturaCalculations"
  11. import { useXmlGeneration } from "@/hooks/factura/useXmlGeneration"
  12. export default function FacturaPage() {
  13. const {
  14. infoTributaria,
  15. infoFactura,
  16. detalles,
  17. xmlGenerado,
  18. setXmlGenerado,
  19. handleInfoTributariaChange,
  20. handleInfoFacturaChange,
  21. agregarDetalle,
  22. actualizarDetalle,
  23. eliminarDetalle,
  24. updateInfoFactura
  25. } = useFacturaState()
  26. const { calcularTotalesImpuestos } = useFacturaCalculations(detalles, updateInfoFactura)
  27. const { generarXml, descargarXml } = useXmlGeneration()
  28. const handleGenerarXml = () => {
  29. const totalesImpuestos = calcularTotalesImpuestos()
  30. generarXml(
  31. infoTributaria,
  32. infoFactura,
  33. detalles,
  34. totalesImpuestos,
  35. setXmlGenerado
  36. )
  37. }
  38. const handleDescargarXml = () => {
  39. descargarXml(xmlGenerado, infoTributaria.ruc)
  40. }
  41. return (
  42. <div className="space-y-6">
  43. {/* Header */}
  44. <FacturaHeader />
  45. {/* Info Tributaria */}
  46. <InfoTributariaForm
  47. infoTributaria={infoTributaria}
  48. onChange={handleInfoTributariaChange}
  49. />
  50. {/* Info Factura */}
  51. <InfoFacturaForm
  52. infoFactura={infoFactura}
  53. onChange={handleInfoFacturaChange}
  54. />
  55. {/* Detalles */}
  56. <DetallesList
  57. detalles={detalles}
  58. onAgregarDetalle={agregarDetalle}
  59. onActualizarDetalle={actualizarDetalle}
  60. onEliminarDetalle={eliminarDetalle}
  61. />
  62. {/* Totales */}
  63. <ResumenTotales
  64. detalles={detalles}
  65. importeTotal={infoFactura.importeTotal}
  66. />
  67. {/* Acciones */}
  68. <FacturaActions
  69. onGenerarXml={handleGenerarXml}
  70. onDescargarXml={handleDescargarXml}
  71. xmlGenerado={xmlGenerado}
  72. />
  73. {/* XML Generado */}
  74. <XmlViewer xmlGenerado={xmlGenerado} />
  75. </div>
  76. )
  77. }