Facturas de cliente
This commit is contained in:
parent
ecdc0379bd
commit
ec80d62d8c
@ -2,46 +2,51 @@ import type { ModuleClientParams } from "@erp/core/client";
|
||||
import { lazy } from "react";
|
||||
import { Outlet, type RouteObject } from "react-router-dom";
|
||||
|
||||
import { IssuedInvoiceListPage } from "./issued-invoices/pages/list/issued-invoice-list-page";
|
||||
|
||||
// Lazy load components
|
||||
const InvoicesLayout = lazy(() =>
|
||||
import("./shared/ui").then((m) => ({ default: m.CustomerInvoicesLayout }))
|
||||
const ProformaLayout = lazy(() =>
|
||||
import("./proformas/ui").then((m) => ({ default: m.ProformaLayout }))
|
||||
);
|
||||
|
||||
const ProformaListPage = lazy(() =>
|
||||
import("./pages").then((m) => ({ default: m.ProformaListPage }))
|
||||
const IssuedInvoicesLayout = lazy(() =>
|
||||
import("./issued-invoices/ui").then((m) => ({ default: m.IssuedInvoicesLayout }))
|
||||
);
|
||||
|
||||
const CustomerInvoiceAdd = lazy(() =>
|
||||
const ProformasListPage = lazy(() =>
|
||||
import("./proformas/pages").then((m) => ({ default: m.ProformaListPage }))
|
||||
);
|
||||
|
||||
const IssuedInvoiceListPage = lazy(() =>
|
||||
import("./issued-invoices/pages").then((m) => ({ default: m.IssuedInvoiceListPage }))
|
||||
);
|
||||
|
||||
/*const CustomerInvoiceAdd = lazy(() =>
|
||||
import("./pages").then((m) => ({ default: m.CustomerInvoiceCreate }))
|
||||
);
|
||||
const InvoiceUpdatePage = lazy(() =>
|
||||
import("./pages").then((m) => ({ default: m.InvoiceUpdatePage }))
|
||||
);
|
||||
);*/
|
||||
|
||||
export const CustomerInvoiceRoutes = (params: ModuleClientParams): RouteObject[] => {
|
||||
return [
|
||||
{
|
||||
path: "proformas",
|
||||
element: (
|
||||
<InvoicesLayout>
|
||||
<ProformaLayout>
|
||||
<Outlet context={params} />
|
||||
</InvoicesLayout>
|
||||
</ProformaLayout>
|
||||
),
|
||||
children: [
|
||||
{ path: "", index: true, element: <ProformaListPage /> }, // index
|
||||
{ path: "list", element: <ProformaListPage /> },
|
||||
{ path: "create", element: <CustomerInvoiceAdd /> },
|
||||
{ path: ":id/edit", element: <InvoiceUpdatePage /> },
|
||||
{ path: "", index: true, element: <ProformasListPage /> }, // index
|
||||
{ path: "list", element: <ProformasListPage /> },
|
||||
//{ path: "create", element: <CustomerInvoiceAdd /> },
|
||||
//{ path: ":id/edit", element: <InvoiceUpdatePage /> },
|
||||
],
|
||||
},
|
||||
{
|
||||
path: "customer-invoices",
|
||||
element: (
|
||||
<InvoicesLayout>
|
||||
<IssuedInvoicesLayout>
|
||||
<Outlet context={params} />
|
||||
</InvoicesLayout>
|
||||
</IssuedInvoicesLayout>
|
||||
),
|
||||
children: [
|
||||
{ path: "", index: true, element: <IssuedInvoiceListPage /> }, // index
|
||||
|
||||
@ -33,16 +33,19 @@ export function useIssuedInvoicesGridColumns(
|
||||
() => [
|
||||
// Nº
|
||||
{
|
||||
accessorKey: "invoice_number",
|
||||
id: "series_invoice_number",
|
||||
header: ({ column }) => (
|
||||
<DataTableColumnHeader
|
||||
className="text-right tabular-nums justify-end"
|
||||
column={column}
|
||||
title={t("pages.issued_invoices.list.grid_columns.invoice_number")}
|
||||
title={t("pages.issued_invoices.list.grid_columns.series_invoice_number")}
|
||||
/>
|
||||
),
|
||||
cell: ({ row }) => (
|
||||
<div className="text-right tabular-nums">{row.original.invoice_number}</div>
|
||||
<div className="text-right tabular-nums">
|
||||
{row.original.series}
|
||||
{row.original.invoice_number}
|
||||
</div>
|
||||
),
|
||||
enableHiding: false,
|
||||
enableSorting: false,
|
||||
@ -50,7 +53,7 @@ export function useIssuedInvoicesGridColumns(
|
||||
size: 48,
|
||||
minSize: 48,
|
||||
meta: {
|
||||
title: t("pages.issued_invoices.list.grid_columns.invoice_number"),
|
||||
title: t("pages.issued_invoices.list.grid_columns.series_invoice_number"),
|
||||
},
|
||||
},
|
||||
|
||||
@ -86,24 +89,6 @@ export function useIssuedInvoicesGridColumns(
|
||||
title: t("pages.issued_invoices.list.grid_columns.recipient"),
|
||||
},
|
||||
},
|
||||
// Serie
|
||||
{
|
||||
accessorKey: "series",
|
||||
header: ({ column }) => (
|
||||
<DataTableColumnHeader
|
||||
className="text-left"
|
||||
column={column}
|
||||
title={t("pages.issued_invoices.list.grid_columns.series")}
|
||||
/>
|
||||
),
|
||||
cell: ({ row }) => <div className="font-normal text-left">{row.original.series}</div>,
|
||||
enableSorting: false,
|
||||
size: 120,
|
||||
minSize: 100,
|
||||
meta: {
|
||||
title: t("pages.issued_invoices.list.grid_columns.series"),
|
||||
},
|
||||
},
|
||||
// Referencia
|
||||
{
|
||||
accessorKey: "reference",
|
||||
|
||||
@ -56,11 +56,6 @@ export const IssuedInvoicesGrid = ({
|
||||
|
||||
<DataTable
|
||||
columns={columns}
|
||||
columnVisibility={{
|
||||
subtotal_amount_fmt: false,
|
||||
discount_amount_fmt: false,
|
||||
taxes_amount_fmt: false,
|
||||
}}
|
||||
data={items}
|
||||
enablePagination
|
||||
manualPagination
|
||||
|
||||
@ -0,0 +1 @@
|
||||
export * from "./issued-invoices-layout";
|
||||
@ -0,0 +1,5 @@
|
||||
import type { PropsWithChildren } from "react";
|
||||
|
||||
export const IssuedInvoicesLayout = ({ children }: PropsWithChildren) => {
|
||||
return <div>{children}</div>;
|
||||
};
|
||||
@ -0,0 +1 @@
|
||||
export * from "./blocks";
|
||||
@ -5,13 +5,10 @@ import type { ColumnDef } from "@tanstack/react-table";
|
||||
import * as React from "react";
|
||||
import { Controller, useFormContext } from "react-hook-form";
|
||||
|
||||
import { ProformaTaxesMultiSelect } from "../../shared";
|
||||
import { AmountInputField } from "../../shared/ui/components/editor/items/amount-input-field";
|
||||
import { HoverCardTotalsSummary } from "../../shared/ui/components/editor/items/hover-card-total-summary";
|
||||
import { ItemDataTableRowActions } from "../../shared/ui/components/editor/items/items-data-table-row-actions";
|
||||
import { PercentageInputField } from "../../shared/ui/components/editor/items/percentage-input-field";
|
||||
import { QuantityInputField } from "../../shared/ui/components/editor/items/quantity-input-field";
|
||||
import { useProformaContext } from "../pages/update/context";
|
||||
import { AmountInputField } from "../ui/components/amount-input-field";
|
||||
import { PercentageInputField } from "../ui/components/percentage-input-field";
|
||||
import { QuantityInputField } from "../ui/components/quantity-input-field";
|
||||
|
||||
export interface ProformaItemFormData {
|
||||
id: string; // ← mapea RHF field.id aquí
|
||||
|
||||
@ -14,6 +14,7 @@ import {
|
||||
} from "@repo/shadcn-ui/components";
|
||||
import type { ColumnDef } from "@tanstack/react-table";
|
||||
import {
|
||||
ArrowBigRightDashIcon,
|
||||
CopyIcon,
|
||||
DownloadIcon,
|
||||
EditIcon,
|
||||
@ -305,7 +306,7 @@ export function useProformasGridColumns(
|
||||
|
||||
return (
|
||||
<ButtonGroup>
|
||||
{/* Editar (acción primaria) */}
|
||||
{/* Emitir factura: approved -> issued */}
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
@ -318,6 +319,27 @@ export function useProformasGridColumns(
|
||||
size="sm"
|
||||
type="button"
|
||||
variant="ghost"
|
||||
>
|
||||
<ArrowBigRightDashIcon aria-hidden="true" className="size-4 " />
|
||||
<span className="sr-only">Emitir</span>
|
||||
</Button>
|
||||
</TooltipTrigger>
|
||||
<TooltipContent>{t("common.edit_row")}</TooltipContent>
|
||||
</Tooltip>
|
||||
|
||||
{/* Editar (acción primaria) */}
|
||||
<Tooltip>
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
aria-label={t("common.edit_row")}
|
||||
className="cursor-pointer text-muted-foreground hover:text-primary hidden"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
onEdit?.(proforma);
|
||||
}}
|
||||
size="sm"
|
||||
type="button"
|
||||
variant="ghost"
|
||||
>
|
||||
<EditIcon aria-hidden="true" className="size-4 " />
|
||||
</Button>
|
||||
@ -330,7 +352,7 @@ export function useProformasGridColumns(
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
aria-label={t("common.duplicate_row")}
|
||||
className="cursor-pointer text-muted-foreground hover:text-primary"
|
||||
className="cursor-pointer text-muted-foreground hover:text-primary hidden"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
onDuplicate?.(proforma);
|
||||
@ -350,7 +372,7 @@ export function useProformasGridColumns(
|
||||
<TooltipTrigger asChild>
|
||||
<Button
|
||||
aria-label={t("common.download_pdf")}
|
||||
className="cursor-pointer text-muted-foreground hover:text-primary"
|
||||
className="cursor-pointer text-muted-foreground hover:text-primary hidden"
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
onDownloadPdf?.(proforma);
|
||||
|
||||
@ -85,11 +85,6 @@ export const ProformasGrid = ({
|
||||
|
||||
<DataTable
|
||||
columns={columns}
|
||||
columnVisibility={{
|
||||
subtotal_amount_fmt: false,
|
||||
discount_amount_fmt: false,
|
||||
taxes_amount_fmt: false,
|
||||
}}
|
||||
data={items}
|
||||
enablePagination
|
||||
manualPagination
|
||||
|
||||
@ -1 +1,2 @@
|
||||
export * from "./proforma-layout";
|
||||
export * from "./proforma-tax-summary";
|
||||
|
||||
@ -0,0 +1,5 @@
|
||||
import type { PropsWithChildren } from "react";
|
||||
|
||||
export const ProformaLayout = ({ children }: PropsWithChildren) => {
|
||||
return <div>{children}</div>;
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user