@codemind.ec/medusa-plugin-invoice 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -4,11 +4,11 @@ const adminSdk = require("@medusajs/admin-sdk");
|
|
|
4
4
|
const ui = require("@medusajs/ui");
|
|
5
5
|
const Medusa = require("@medusajs/js-sdk");
|
|
6
6
|
const react = require("react");
|
|
7
|
-
const icons = require("@medusajs/icons");
|
|
8
7
|
const reactQuery = require("@tanstack/react-query");
|
|
9
|
-
const reactRouterDom = require("react-router-dom");
|
|
10
8
|
const reactHookForm = require("react-hook-form");
|
|
11
9
|
const zod = require("@medusajs/framework/zod");
|
|
10
|
+
const reactRouterDom = require("react-router-dom");
|
|
11
|
+
const icons = require("@medusajs/icons");
|
|
12
12
|
const CodeMirror = require("@uiw/react-codemirror");
|
|
13
13
|
const langHtml = require("@codemirror/lang-html");
|
|
14
14
|
const themeOneDark = require("@codemirror/theme-one-dark");
|
|
@@ -72,82 +72,6 @@ const OrderInvoiceWidget = ({ data: order }) => {
|
|
|
72
72
|
adminSdk.defineWidgetConfig({
|
|
73
73
|
zone: "order.details.side.before"
|
|
74
74
|
});
|
|
75
|
-
const TYPE_LABELS = {
|
|
76
|
-
order_invoice: "Comprobante de Pedido",
|
|
77
|
-
quote_proforma: "Cotización Proforma"
|
|
78
|
-
};
|
|
79
|
-
const InvoiceTemplatesPage = () => {
|
|
80
|
-
const navigate = reactRouterDom.useNavigate();
|
|
81
|
-
const queryClient = reactQuery.useQueryClient();
|
|
82
|
-
const { data, isLoading } = reactQuery.useQuery({
|
|
83
|
-
queryFn: () => sdk.client.fetch("/admin/invoice-templates"),
|
|
84
|
-
queryKey: ["invoice-templates"]
|
|
85
|
-
});
|
|
86
|
-
const deleteMutation = reactQuery.useMutation({
|
|
87
|
-
mutationFn: (id) => sdk.client.fetch(`/admin/invoice-templates/${id}`, { method: "DELETE" }),
|
|
88
|
-
onSuccess: () => {
|
|
89
|
-
queryClient.invalidateQueries({ queryKey: ["invoice-templates"] });
|
|
90
|
-
ui.toast.success("Plantilla eliminada");
|
|
91
|
-
},
|
|
92
|
-
onError: () => {
|
|
93
|
-
ui.toast.error("No se pudo eliminar la plantilla");
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
const templates = (data == null ? void 0 : data.invoice_templates) ?? [];
|
|
97
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { children: [
|
|
98
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 24 }, children: [
|
|
99
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h1", children: "Plantillas de Documentos" }),
|
|
100
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: 8 }, children: [
|
|
101
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: () => navigate("/invoice-config"), children: "Configuración" }),
|
|
102
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: () => navigate("/invoice-templates/new"), children: "+ Nueva Plantilla" })
|
|
103
|
-
] })
|
|
104
|
-
] }),
|
|
105
|
-
isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center", padding: 40 }, children: "Cargando..." }) : templates.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center", padding: 40, color: "#6c757d" }, children: "No hay plantillas. Se crearán automáticamente al reiniciar el servidor." }) : /* @__PURE__ */ jsxRuntime.jsxs(ui.Table, { children: [
|
|
106
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Header, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Table.Row, { children: [
|
|
107
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Nombre" }),
|
|
108
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Slug" }),
|
|
109
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Tipo" }),
|
|
110
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Estado" }),
|
|
111
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Actualizado" }),
|
|
112
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { style: { textAlign: "right" }, children: "Acciones" })
|
|
113
|
-
] }) }),
|
|
114
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Body, { children: templates.map((tpl) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
115
|
-
ui.Table.Row,
|
|
116
|
-
{
|
|
117
|
-
onClick: () => navigate(`/invoice-templates/${tpl.id}`),
|
|
118
|
-
style: { cursor: "pointer" },
|
|
119
|
-
children: [
|
|
120
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: tpl.name }),
|
|
121
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx("code", { style: { fontSize: 12 }, children: tpl.slug }) }),
|
|
122
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: TYPE_LABELS[tpl.type] ?? tpl.type }),
|
|
123
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: tpl.is_default ? /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "blue", children: "Por defecto" }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "grey", children: "Personalizada" }) }),
|
|
124
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: new Date(tpl.updated_at).toLocaleDateString("es-ES") }),
|
|
125
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { style: { textAlign: "right" }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
126
|
-
ui.Button,
|
|
127
|
-
{
|
|
128
|
-
variant: "danger",
|
|
129
|
-
size: "small",
|
|
130
|
-
disabled: tpl.is_default,
|
|
131
|
-
onClick: (e) => {
|
|
132
|
-
e.stopPropagation();
|
|
133
|
-
if (confirm("¿Eliminar esta plantilla?")) {
|
|
134
|
-
deleteMutation.mutate(tpl.id);
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
children: "Eliminar"
|
|
138
|
-
}
|
|
139
|
-
) })
|
|
140
|
-
]
|
|
141
|
-
},
|
|
142
|
-
tpl.id
|
|
143
|
-
)) })
|
|
144
|
-
] })
|
|
145
|
-
] });
|
|
146
|
-
};
|
|
147
|
-
const config$1 = adminSdk.defineRouteConfig({
|
|
148
|
-
label: "Plantillas PDF",
|
|
149
|
-
icon: icons.DocumentText
|
|
150
|
-
});
|
|
151
75
|
zod.z.object({
|
|
152
76
|
company_name: zod.z.string().optional(),
|
|
153
77
|
company_ruc: zod.z.string().optional(),
|
|
@@ -214,7 +138,7 @@ const InvoiceConfigPage = () => {
|
|
|
214
138
|
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { className: "divide-y p-0", children: [
|
|
215
139
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-6 py-4", children: [
|
|
216
140
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h1", children: "Configuración de Comprobante" }),
|
|
217
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: () => navigate("/invoice-templates"), children: "Gestionar Plantillas" })
|
|
141
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: () => navigate("/invoice-config/invoice-templates"), children: "Gestionar Plantillas" })
|
|
218
142
|
] }),
|
|
219
143
|
/* @__PURE__ */ jsxRuntime.jsx(reactHookForm.FormProvider, { ...form, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
220
144
|
"form",
|
|
@@ -341,9 +265,85 @@ const InvoiceConfigPage = () => {
|
|
|
341
265
|
) })
|
|
342
266
|
] });
|
|
343
267
|
};
|
|
344
|
-
const config = adminSdk.defineRouteConfig({
|
|
268
|
+
const config$1 = adminSdk.defineRouteConfig({
|
|
345
269
|
label: "Comprobante de Pedido"
|
|
346
270
|
});
|
|
271
|
+
const TYPE_LABELS = {
|
|
272
|
+
order_invoice: "Comprobante de Pedido",
|
|
273
|
+
quote_proforma: "Cotización Proforma"
|
|
274
|
+
};
|
|
275
|
+
const InvoiceTemplatesPage = () => {
|
|
276
|
+
const navigate = reactRouterDom.useNavigate();
|
|
277
|
+
const queryClient = reactQuery.useQueryClient();
|
|
278
|
+
const { data, isLoading } = reactQuery.useQuery({
|
|
279
|
+
queryFn: () => sdk.client.fetch("/admin/invoice-templates"),
|
|
280
|
+
queryKey: ["invoice-templates"]
|
|
281
|
+
});
|
|
282
|
+
const deleteMutation = reactQuery.useMutation({
|
|
283
|
+
mutationFn: (id) => sdk.client.fetch(`/admin/invoice-templates/${id}`, { method: "DELETE" }),
|
|
284
|
+
onSuccess: () => {
|
|
285
|
+
queryClient.invalidateQueries({ queryKey: ["invoice-templates"] });
|
|
286
|
+
ui.toast.success("Plantilla eliminada");
|
|
287
|
+
},
|
|
288
|
+
onError: () => {
|
|
289
|
+
ui.toast.error("No se pudo eliminar la plantilla");
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
const templates = (data == null ? void 0 : data.invoice_templates) ?? [];
|
|
293
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { children: [
|
|
294
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 24 }, children: [
|
|
295
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Heading, { level: "h1", children: "Plantillas de Documentos" }),
|
|
296
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: 8 }, children: [
|
|
297
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: () => navigate("/invoice-config"), children: "Configuración" }),
|
|
298
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: () => navigate("/invoice-config/invoice-templates/new"), children: "+ Nueva Plantilla" })
|
|
299
|
+
] })
|
|
300
|
+
] }),
|
|
301
|
+
isLoading ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center", padding: 40 }, children: "Cargando..." }) : templates.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center", padding: 40, color: "#6c757d" }, children: "No hay plantillas. Se crearán automáticamente al reiniciar el servidor." }) : /* @__PURE__ */ jsxRuntime.jsxs(ui.Table, { children: [
|
|
302
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Header, { children: /* @__PURE__ */ jsxRuntime.jsxs(ui.Table.Row, { children: [
|
|
303
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Nombre" }),
|
|
304
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Slug" }),
|
|
305
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Tipo" }),
|
|
306
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Estado" }),
|
|
307
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { children: "Actualizado" }),
|
|
308
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.HeaderCell, { style: { textAlign: "right" }, children: "Acciones" })
|
|
309
|
+
] }) }),
|
|
310
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Body, { children: templates.map((tpl) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
311
|
+
ui.Table.Row,
|
|
312
|
+
{
|
|
313
|
+
onClick: () => navigate(`/invoice-config/invoice-templates/${tpl.id}`),
|
|
314
|
+
style: { cursor: "pointer" },
|
|
315
|
+
children: [
|
|
316
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: tpl.name }),
|
|
317
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: /* @__PURE__ */ jsxRuntime.jsx("code", { style: { fontSize: 12 }, children: tpl.slug }) }),
|
|
318
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: TYPE_LABELS[tpl.type] ?? tpl.type }),
|
|
319
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: tpl.is_default ? /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "blue", children: "Por defecto" }) : /* @__PURE__ */ jsxRuntime.jsx(ui.Badge, { color: "grey", children: "Personalizada" }) }),
|
|
320
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { children: new Date(tpl.updated_at).toLocaleDateString("es-ES") }),
|
|
321
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Table.Cell, { style: { textAlign: "right" }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
322
|
+
ui.Button,
|
|
323
|
+
{
|
|
324
|
+
variant: "danger",
|
|
325
|
+
size: "small",
|
|
326
|
+
disabled: tpl.is_default,
|
|
327
|
+
onClick: (e) => {
|
|
328
|
+
e.stopPropagation();
|
|
329
|
+
if (confirm("¿Eliminar esta plantilla?")) {
|
|
330
|
+
deleteMutation.mutate(tpl.id);
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
children: "Eliminar"
|
|
334
|
+
}
|
|
335
|
+
) })
|
|
336
|
+
]
|
|
337
|
+
},
|
|
338
|
+
tpl.id
|
|
339
|
+
)) })
|
|
340
|
+
] })
|
|
341
|
+
] });
|
|
342
|
+
};
|
|
343
|
+
const config = adminSdk.defineRouteConfig({
|
|
344
|
+
label: "Plantillas PDF",
|
|
345
|
+
icon: icons.DocumentText
|
|
346
|
+
});
|
|
347
347
|
const NewTemplatePage = () => {
|
|
348
348
|
const navigate = reactRouterDom.useNavigate();
|
|
349
349
|
const [name, setName] = react.useState("");
|
|
@@ -356,7 +356,7 @@ const NewTemplatePage = () => {
|
|
|
356
356
|
}),
|
|
357
357
|
onSuccess: (data) => {
|
|
358
358
|
ui.toast.success("Plantilla creada");
|
|
359
|
-
navigate(`/invoice-templates/${data.invoice_template.id}`);
|
|
359
|
+
navigate(`/invoice-config/invoice-templates/${data.invoice_template.id}`);
|
|
360
360
|
},
|
|
361
361
|
onError: () => {
|
|
362
362
|
ui.toast.error("Error al crear la plantilla");
|
|
@@ -404,7 +404,7 @@ const NewTemplatePage = () => {
|
|
|
404
404
|
] })
|
|
405
405
|
] }),
|
|
406
406
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: 8, marginTop: 16 }, children: [
|
|
407
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: () => navigate("/invoice-templates"), children: "Cancelar" }),
|
|
407
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", onClick: () => navigate("/invoice-config/invoice-templates"), children: "Cancelar" }),
|
|
408
408
|
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { onClick: handleCreate, isLoading: createMutation.isPending, children: "Crear Plantilla" })
|
|
409
409
|
] })
|
|
410
410
|
] })
|
|
@@ -645,7 +645,7 @@ const TemplateEditorPage = () => {
|
|
|
645
645
|
return /* @__PURE__ */ jsxRuntime.jsxs(ui.Container, { children: [
|
|
646
646
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 16 }, children: [
|
|
647
647
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: 12 }, children: [
|
|
648
|
-
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", size: "small", onClick: () => navigate("/invoice-templates"), children: "← Volver" }),
|
|
648
|
+
/* @__PURE__ */ jsxRuntime.jsx(ui.Button, { variant: "secondary", size: "small", onClick: () => navigate("/invoice-config/invoice-templates"), children: "← Volver" }),
|
|
649
649
|
/* @__PURE__ */ jsxRuntime.jsx("div", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
650
650
|
ui.Input,
|
|
651
651
|
{
|
|
@@ -743,28 +743,28 @@ const widgetModule = { widgets: [
|
|
|
743
743
|
] };
|
|
744
744
|
const routeModule = {
|
|
745
745
|
routes: [
|
|
746
|
-
{
|
|
747
|
-
Component: InvoiceTemplatesPage,
|
|
748
|
-
path: "/invoice-templates"
|
|
749
|
-
},
|
|
750
746
|
{
|
|
751
747
|
Component: InvoiceConfigPage,
|
|
752
748
|
path: "/invoice-config"
|
|
753
749
|
},
|
|
750
|
+
{
|
|
751
|
+
Component: InvoiceTemplatesPage,
|
|
752
|
+
path: "/invoice-config/invoice-templates"
|
|
753
|
+
},
|
|
754
754
|
{
|
|
755
755
|
Component: NewTemplatePage,
|
|
756
|
-
path: "/invoice-templates/new"
|
|
756
|
+
path: "/invoice-config/invoice-templates/new"
|
|
757
757
|
},
|
|
758
758
|
{
|
|
759
759
|
Component: TemplateEditorPage,
|
|
760
|
-
path: "/invoice-templates/:id"
|
|
760
|
+
path: "/invoice-config/invoice-templates/:id"
|
|
761
761
|
}
|
|
762
762
|
]
|
|
763
763
|
};
|
|
764
764
|
const menuItemModule = {
|
|
765
765
|
menuItems: [
|
|
766
766
|
{
|
|
767
|
-
label: config.label,
|
|
767
|
+
label: config$1.label,
|
|
768
768
|
icon: void 0,
|
|
769
769
|
path: "/invoice-config",
|
|
770
770
|
nested: void 0,
|
|
@@ -772,9 +772,9 @@ const menuItemModule = {
|
|
|
772
772
|
translationNs: void 0
|
|
773
773
|
},
|
|
774
774
|
{
|
|
775
|
-
label: config
|
|
776
|
-
icon: config
|
|
777
|
-
path: "/invoice-templates",
|
|
775
|
+
label: config.label,
|
|
776
|
+
icon: config.icon,
|
|
777
|
+
path: "/invoice-config/invoice-templates",
|
|
778
778
|
nested: void 0,
|
|
779
779
|
rank: void 0,
|
|
780
780
|
translationNs: void 0
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import { defineWidgetConfig, defineRouteConfig } from "@medusajs/admin-sdk";
|
|
3
|
-
import { Container, Heading, Text, Button, toast,
|
|
3
|
+
import { Container, Heading, Text, Button, toast, Label, Input, Textarea, Table, Badge, Select } from "@medusajs/ui";
|
|
4
4
|
import Medusa from "@medusajs/js-sdk";
|
|
5
5
|
import { useState, useCallback, useEffect, useRef, useMemo } from "react";
|
|
6
|
-
import {
|
|
7
|
-
import { useQueryClient, useQuery, useMutation } from "@tanstack/react-query";
|
|
8
|
-
import { useNavigate, useParams } from "react-router-dom";
|
|
6
|
+
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
9
7
|
import { useForm, FormProvider, Controller } from "react-hook-form";
|
|
10
8
|
import { z } from "@medusajs/framework/zod";
|
|
9
|
+
import { useNavigate, useParams } from "react-router-dom";
|
|
10
|
+
import { DocumentText } from "@medusajs/icons";
|
|
11
11
|
import CodeMirror from "@uiw/react-codemirror";
|
|
12
12
|
import { html } from "@codemirror/lang-html";
|
|
13
13
|
import { oneDark } from "@codemirror/theme-one-dark";
|
|
@@ -67,82 +67,6 @@ const OrderInvoiceWidget = ({ data: order }) => {
|
|
|
67
67
|
defineWidgetConfig({
|
|
68
68
|
zone: "order.details.side.before"
|
|
69
69
|
});
|
|
70
|
-
const TYPE_LABELS = {
|
|
71
|
-
order_invoice: "Comprobante de Pedido",
|
|
72
|
-
quote_proforma: "Cotización Proforma"
|
|
73
|
-
};
|
|
74
|
-
const InvoiceTemplatesPage = () => {
|
|
75
|
-
const navigate = useNavigate();
|
|
76
|
-
const queryClient = useQueryClient();
|
|
77
|
-
const { data, isLoading } = useQuery({
|
|
78
|
-
queryFn: () => sdk.client.fetch("/admin/invoice-templates"),
|
|
79
|
-
queryKey: ["invoice-templates"]
|
|
80
|
-
});
|
|
81
|
-
const deleteMutation = useMutation({
|
|
82
|
-
mutationFn: (id) => sdk.client.fetch(`/admin/invoice-templates/${id}`, { method: "DELETE" }),
|
|
83
|
-
onSuccess: () => {
|
|
84
|
-
queryClient.invalidateQueries({ queryKey: ["invoice-templates"] });
|
|
85
|
-
toast.success("Plantilla eliminada");
|
|
86
|
-
},
|
|
87
|
-
onError: () => {
|
|
88
|
-
toast.error("No se pudo eliminar la plantilla");
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
const templates = (data == null ? void 0 : data.invoice_templates) ?? [];
|
|
92
|
-
return /* @__PURE__ */ jsxs(Container, { children: [
|
|
93
|
-
/* @__PURE__ */ jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 24 }, children: [
|
|
94
|
-
/* @__PURE__ */ jsx(Heading, { level: "h1", children: "Plantillas de Documentos" }),
|
|
95
|
-
/* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: 8 }, children: [
|
|
96
|
-
/* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => navigate("/invoice-config"), children: "Configuración" }),
|
|
97
|
-
/* @__PURE__ */ jsx(Button, { onClick: () => navigate("/invoice-templates/new"), children: "+ Nueva Plantilla" })
|
|
98
|
-
] })
|
|
99
|
-
] }),
|
|
100
|
-
isLoading ? /* @__PURE__ */ jsx("div", { style: { textAlign: "center", padding: 40 }, children: "Cargando..." }) : templates.length === 0 ? /* @__PURE__ */ jsx("div", { style: { textAlign: "center", padding: 40, color: "#6c757d" }, children: "No hay plantillas. Se crearán automáticamente al reiniciar el servidor." }) : /* @__PURE__ */ jsxs(Table, { children: [
|
|
101
|
-
/* @__PURE__ */ jsx(Table.Header, { children: /* @__PURE__ */ jsxs(Table.Row, { children: [
|
|
102
|
-
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Nombre" }),
|
|
103
|
-
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Slug" }),
|
|
104
|
-
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Tipo" }),
|
|
105
|
-
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Estado" }),
|
|
106
|
-
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Actualizado" }),
|
|
107
|
-
/* @__PURE__ */ jsx(Table.HeaderCell, { style: { textAlign: "right" }, children: "Acciones" })
|
|
108
|
-
] }) }),
|
|
109
|
-
/* @__PURE__ */ jsx(Table.Body, { children: templates.map((tpl) => /* @__PURE__ */ jsxs(
|
|
110
|
-
Table.Row,
|
|
111
|
-
{
|
|
112
|
-
onClick: () => navigate(`/invoice-templates/${tpl.id}`),
|
|
113
|
-
style: { cursor: "pointer" },
|
|
114
|
-
children: [
|
|
115
|
-
/* @__PURE__ */ jsx(Table.Cell, { children: tpl.name }),
|
|
116
|
-
/* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx("code", { style: { fontSize: 12 }, children: tpl.slug }) }),
|
|
117
|
-
/* @__PURE__ */ jsx(Table.Cell, { children: TYPE_LABELS[tpl.type] ?? tpl.type }),
|
|
118
|
-
/* @__PURE__ */ jsx(Table.Cell, { children: tpl.is_default ? /* @__PURE__ */ jsx(Badge, { color: "blue", children: "Por defecto" }) : /* @__PURE__ */ jsx(Badge, { color: "grey", children: "Personalizada" }) }),
|
|
119
|
-
/* @__PURE__ */ jsx(Table.Cell, { children: new Date(tpl.updated_at).toLocaleDateString("es-ES") }),
|
|
120
|
-
/* @__PURE__ */ jsx(Table.Cell, { style: { textAlign: "right" }, children: /* @__PURE__ */ jsx(
|
|
121
|
-
Button,
|
|
122
|
-
{
|
|
123
|
-
variant: "danger",
|
|
124
|
-
size: "small",
|
|
125
|
-
disabled: tpl.is_default,
|
|
126
|
-
onClick: (e) => {
|
|
127
|
-
e.stopPropagation();
|
|
128
|
-
if (confirm("¿Eliminar esta plantilla?")) {
|
|
129
|
-
deleteMutation.mutate(tpl.id);
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
children: "Eliminar"
|
|
133
|
-
}
|
|
134
|
-
) })
|
|
135
|
-
]
|
|
136
|
-
},
|
|
137
|
-
tpl.id
|
|
138
|
-
)) })
|
|
139
|
-
] })
|
|
140
|
-
] });
|
|
141
|
-
};
|
|
142
|
-
const config$1 = defineRouteConfig({
|
|
143
|
-
label: "Plantillas PDF",
|
|
144
|
-
icon: DocumentText
|
|
145
|
-
});
|
|
146
70
|
z.object({
|
|
147
71
|
company_name: z.string().optional(),
|
|
148
72
|
company_ruc: z.string().optional(),
|
|
@@ -209,7 +133,7 @@ const InvoiceConfigPage = () => {
|
|
|
209
133
|
return /* @__PURE__ */ jsxs(Container, { className: "divide-y p-0", children: [
|
|
210
134
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between px-6 py-4", children: [
|
|
211
135
|
/* @__PURE__ */ jsx(Heading, { level: "h1", children: "Configuración de Comprobante" }),
|
|
212
|
-
/* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => navigate("/invoice-templates"), children: "Gestionar Plantillas" })
|
|
136
|
+
/* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => navigate("/invoice-config/invoice-templates"), children: "Gestionar Plantillas" })
|
|
213
137
|
] }),
|
|
214
138
|
/* @__PURE__ */ jsx(FormProvider, { ...form, children: /* @__PURE__ */ jsxs(
|
|
215
139
|
"form",
|
|
@@ -336,9 +260,85 @@ const InvoiceConfigPage = () => {
|
|
|
336
260
|
) })
|
|
337
261
|
] });
|
|
338
262
|
};
|
|
339
|
-
const config = defineRouteConfig({
|
|
263
|
+
const config$1 = defineRouteConfig({
|
|
340
264
|
label: "Comprobante de Pedido"
|
|
341
265
|
});
|
|
266
|
+
const TYPE_LABELS = {
|
|
267
|
+
order_invoice: "Comprobante de Pedido",
|
|
268
|
+
quote_proforma: "Cotización Proforma"
|
|
269
|
+
};
|
|
270
|
+
const InvoiceTemplatesPage = () => {
|
|
271
|
+
const navigate = useNavigate();
|
|
272
|
+
const queryClient = useQueryClient();
|
|
273
|
+
const { data, isLoading } = useQuery({
|
|
274
|
+
queryFn: () => sdk.client.fetch("/admin/invoice-templates"),
|
|
275
|
+
queryKey: ["invoice-templates"]
|
|
276
|
+
});
|
|
277
|
+
const deleteMutation = useMutation({
|
|
278
|
+
mutationFn: (id) => sdk.client.fetch(`/admin/invoice-templates/${id}`, { method: "DELETE" }),
|
|
279
|
+
onSuccess: () => {
|
|
280
|
+
queryClient.invalidateQueries({ queryKey: ["invoice-templates"] });
|
|
281
|
+
toast.success("Plantilla eliminada");
|
|
282
|
+
},
|
|
283
|
+
onError: () => {
|
|
284
|
+
toast.error("No se pudo eliminar la plantilla");
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
const templates = (data == null ? void 0 : data.invoice_templates) ?? [];
|
|
288
|
+
return /* @__PURE__ */ jsxs(Container, { children: [
|
|
289
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 24 }, children: [
|
|
290
|
+
/* @__PURE__ */ jsx(Heading, { level: "h1", children: "Plantillas de Documentos" }),
|
|
291
|
+
/* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: 8 }, children: [
|
|
292
|
+
/* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => navigate("/invoice-config"), children: "Configuración" }),
|
|
293
|
+
/* @__PURE__ */ jsx(Button, { onClick: () => navigate("/invoice-config/invoice-templates/new"), children: "+ Nueva Plantilla" })
|
|
294
|
+
] })
|
|
295
|
+
] }),
|
|
296
|
+
isLoading ? /* @__PURE__ */ jsx("div", { style: { textAlign: "center", padding: 40 }, children: "Cargando..." }) : templates.length === 0 ? /* @__PURE__ */ jsx("div", { style: { textAlign: "center", padding: 40, color: "#6c757d" }, children: "No hay plantillas. Se crearán automáticamente al reiniciar el servidor." }) : /* @__PURE__ */ jsxs(Table, { children: [
|
|
297
|
+
/* @__PURE__ */ jsx(Table.Header, { children: /* @__PURE__ */ jsxs(Table.Row, { children: [
|
|
298
|
+
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Nombre" }),
|
|
299
|
+
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Slug" }),
|
|
300
|
+
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Tipo" }),
|
|
301
|
+
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Estado" }),
|
|
302
|
+
/* @__PURE__ */ jsx(Table.HeaderCell, { children: "Actualizado" }),
|
|
303
|
+
/* @__PURE__ */ jsx(Table.HeaderCell, { style: { textAlign: "right" }, children: "Acciones" })
|
|
304
|
+
] }) }),
|
|
305
|
+
/* @__PURE__ */ jsx(Table.Body, { children: templates.map((tpl) => /* @__PURE__ */ jsxs(
|
|
306
|
+
Table.Row,
|
|
307
|
+
{
|
|
308
|
+
onClick: () => navigate(`/invoice-config/invoice-templates/${tpl.id}`),
|
|
309
|
+
style: { cursor: "pointer" },
|
|
310
|
+
children: [
|
|
311
|
+
/* @__PURE__ */ jsx(Table.Cell, { children: tpl.name }),
|
|
312
|
+
/* @__PURE__ */ jsx(Table.Cell, { children: /* @__PURE__ */ jsx("code", { style: { fontSize: 12 }, children: tpl.slug }) }),
|
|
313
|
+
/* @__PURE__ */ jsx(Table.Cell, { children: TYPE_LABELS[tpl.type] ?? tpl.type }),
|
|
314
|
+
/* @__PURE__ */ jsx(Table.Cell, { children: tpl.is_default ? /* @__PURE__ */ jsx(Badge, { color: "blue", children: "Por defecto" }) : /* @__PURE__ */ jsx(Badge, { color: "grey", children: "Personalizada" }) }),
|
|
315
|
+
/* @__PURE__ */ jsx(Table.Cell, { children: new Date(tpl.updated_at).toLocaleDateString("es-ES") }),
|
|
316
|
+
/* @__PURE__ */ jsx(Table.Cell, { style: { textAlign: "right" }, children: /* @__PURE__ */ jsx(
|
|
317
|
+
Button,
|
|
318
|
+
{
|
|
319
|
+
variant: "danger",
|
|
320
|
+
size: "small",
|
|
321
|
+
disabled: tpl.is_default,
|
|
322
|
+
onClick: (e) => {
|
|
323
|
+
e.stopPropagation();
|
|
324
|
+
if (confirm("¿Eliminar esta plantilla?")) {
|
|
325
|
+
deleteMutation.mutate(tpl.id);
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
children: "Eliminar"
|
|
329
|
+
}
|
|
330
|
+
) })
|
|
331
|
+
]
|
|
332
|
+
},
|
|
333
|
+
tpl.id
|
|
334
|
+
)) })
|
|
335
|
+
] })
|
|
336
|
+
] });
|
|
337
|
+
};
|
|
338
|
+
const config = defineRouteConfig({
|
|
339
|
+
label: "Plantillas PDF",
|
|
340
|
+
icon: DocumentText
|
|
341
|
+
});
|
|
342
342
|
const NewTemplatePage = () => {
|
|
343
343
|
const navigate = useNavigate();
|
|
344
344
|
const [name, setName] = useState("");
|
|
@@ -351,7 +351,7 @@ const NewTemplatePage = () => {
|
|
|
351
351
|
}),
|
|
352
352
|
onSuccess: (data) => {
|
|
353
353
|
toast.success("Plantilla creada");
|
|
354
|
-
navigate(`/invoice-templates/${data.invoice_template.id}`);
|
|
354
|
+
navigate(`/invoice-config/invoice-templates/${data.invoice_template.id}`);
|
|
355
355
|
},
|
|
356
356
|
onError: () => {
|
|
357
357
|
toast.error("Error al crear la plantilla");
|
|
@@ -399,7 +399,7 @@ const NewTemplatePage = () => {
|
|
|
399
399
|
] })
|
|
400
400
|
] }),
|
|
401
401
|
/* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: 8, marginTop: 16 }, children: [
|
|
402
|
-
/* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => navigate("/invoice-templates"), children: "Cancelar" }),
|
|
402
|
+
/* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: () => navigate("/invoice-config/invoice-templates"), children: "Cancelar" }),
|
|
403
403
|
/* @__PURE__ */ jsx(Button, { onClick: handleCreate, isLoading: createMutation.isPending, children: "Crear Plantilla" })
|
|
404
404
|
] })
|
|
405
405
|
] })
|
|
@@ -640,7 +640,7 @@ const TemplateEditorPage = () => {
|
|
|
640
640
|
return /* @__PURE__ */ jsxs(Container, { children: [
|
|
641
641
|
/* @__PURE__ */ jsxs("div", { style: { display: "flex", justifyContent: "space-between", alignItems: "center", marginBottom: 16 }, children: [
|
|
642
642
|
/* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: 12 }, children: [
|
|
643
|
-
/* @__PURE__ */ jsx(Button, { variant: "secondary", size: "small", onClick: () => navigate("/invoice-templates"), children: "← Volver" }),
|
|
643
|
+
/* @__PURE__ */ jsx(Button, { variant: "secondary", size: "small", onClick: () => navigate("/invoice-config/invoice-templates"), children: "← Volver" }),
|
|
644
644
|
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(
|
|
645
645
|
Input,
|
|
646
646
|
{
|
|
@@ -738,28 +738,28 @@ const widgetModule = { widgets: [
|
|
|
738
738
|
] };
|
|
739
739
|
const routeModule = {
|
|
740
740
|
routes: [
|
|
741
|
-
{
|
|
742
|
-
Component: InvoiceTemplatesPage,
|
|
743
|
-
path: "/invoice-templates"
|
|
744
|
-
},
|
|
745
741
|
{
|
|
746
742
|
Component: InvoiceConfigPage,
|
|
747
743
|
path: "/invoice-config"
|
|
748
744
|
},
|
|
745
|
+
{
|
|
746
|
+
Component: InvoiceTemplatesPage,
|
|
747
|
+
path: "/invoice-config/invoice-templates"
|
|
748
|
+
},
|
|
749
749
|
{
|
|
750
750
|
Component: NewTemplatePage,
|
|
751
|
-
path: "/invoice-templates/new"
|
|
751
|
+
path: "/invoice-config/invoice-templates/new"
|
|
752
752
|
},
|
|
753
753
|
{
|
|
754
754
|
Component: TemplateEditorPage,
|
|
755
|
-
path: "/invoice-templates/:id"
|
|
755
|
+
path: "/invoice-config/invoice-templates/:id"
|
|
756
756
|
}
|
|
757
757
|
]
|
|
758
758
|
};
|
|
759
759
|
const menuItemModule = {
|
|
760
760
|
menuItems: [
|
|
761
761
|
{
|
|
762
|
-
label: config.label,
|
|
762
|
+
label: config$1.label,
|
|
763
763
|
icon: void 0,
|
|
764
764
|
path: "/invoice-config",
|
|
765
765
|
nested: void 0,
|
|
@@ -767,9 +767,9 @@ const menuItemModule = {
|
|
|
767
767
|
translationNs: void 0
|
|
768
768
|
},
|
|
769
769
|
{
|
|
770
|
-
label: config
|
|
771
|
-
icon: config
|
|
772
|
-
path: "/invoice-templates",
|
|
770
|
+
label: config.label,
|
|
771
|
+
icon: config.icon,
|
|
772
|
+
path: "/invoice-config/invoice-templates",
|
|
773
773
|
nested: void 0,
|
|
774
774
|
rank: void 0,
|
|
775
775
|
translationNs: void 0
|
|
@@ -16,7 +16,7 @@ async function POST(req, res) {
|
|
|
16
16
|
entity: "invoice_config",
|
|
17
17
|
fields: ["*"],
|
|
18
18
|
});
|
|
19
|
-
const Handlebars = await import("handlebars");
|
|
19
|
+
const Handlebars = (await import("handlebars")).default;
|
|
20
20
|
const htmlToPdfmake = (await import("html-to-pdfmake")).default;
|
|
21
21
|
const { JSDOM } = await import("jsdom");
|
|
22
22
|
const compiled = Handlebars.compile(template.html_content);
|
|
@@ -116,4 +116,4 @@ function buildQuoteProformaSample() {
|
|
|
116
116
|
],
|
|
117
117
|
};
|
|
118
118
|
}
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL2ludm9pY2UtdGVtcGxhdGVzL1tpZF0vcHJldmlldy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLG9CQTREQztBQS9ERCxnRkFBeUU7QUFHbEUsS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUE7SUFDekIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsa0NBQWMsQ0FBNEIsQ0FBQTtJQUU1RSxNQUFNLFFBQVEsR0FBRyxNQUFNLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUUxRCxvRUFBb0U7SUFDcEUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLElBQUksS0FBSyxlQUFlO1FBQ3BELENBQUMsQ0FBQyx1QkFBdUIsRUFBRTtRQUMzQixDQUFDLENBQUMsd0JBQXdCLEVBQUUsQ0FBQTtJQUU5QixnRUFBZ0U7SUFDaEUsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDeEMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzNDLE1BQU0sRUFBRSxnQkFBZ0I7UUFDeEIsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDO0tBQ2QsQ0FBQyxDQUFBO0lBRUYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtJQUN2RCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxPQUFPLENB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
|
|
@@ -56,7 +56,7 @@ class BaseDocumentStrategy {
|
|
|
56
56
|
* `TDocumentDefinitions` using handlebars compilation + html-to-pdfmake.
|
|
57
57
|
*/
|
|
58
58
|
async renderHtmlTemplate(htmlTemplate, data) {
|
|
59
|
-
const Handlebars = await import("handlebars");
|
|
59
|
+
const Handlebars = (await import("handlebars")).default;
|
|
60
60
|
const htmlToPdfmake = (await import("html-to-pdfmake")).default;
|
|
61
61
|
const { JSDOM } = await import("jsdom");
|
|
62
62
|
const compiled = Handlebars.compile(htmlTemplate);
|
|
@@ -107,4 +107,4 @@ class TemplateFactory {
|
|
|
107
107
|
exports.TemplateFactory = TemplateFactory;
|
|
108
108
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
109
109
|
TemplateFactory.registry = new Map();
|
|
110
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9pbnZvaWNlLWdlbmVyYXRvci90ZW1wbGF0ZXMvc3RyYXRlZ3kudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBR0Esc0NBQWlEO0FBbUJqRCxpRkFBaUY7QUFFakYscUVBQXFFO0FBQ3JFLE1BQU0sbUJBQW1CLEdBQXFDO0lBQzFELEdBQUcsRUFBRSxPQUFPO0lBQ1osR0FBRyxFQUFFLE9BQU87SUFDWixHQUFHLEVBQUUsT0FBTztJQUNaLEdBQUcsRUFBRSxPQUFPO0lBQ1osR0FBRyxFQUFFLE9BQU87SUFDWixHQUFHLEVBQUUsT0FBTztJQUNaLEdBQUcsRUFBRSxPQUFPO0lBQ1osR0FBRyxFQUFFLE9BQU87SUFDWixHQUFHLEVBQUUsT0FBTztDQUNOLENBQUE7QUFFVixNQUFzQixvQkFBb0I7SUFFNUIsb0JBQW9CLENBQUMsWUFBb0I7UUFDL0MsT0FBTyxtQkFBbUIsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUE7SUFDckUsQ0FBQztJQUVELHlFQUF5RTtJQUMvRCxZQUFZLENBQUMsTUFBYyxFQUFFLFFBQWdCO1FBQ25ELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUNsRCxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDakMsS0FBSyxFQUFFLFVBQVU7WUFDakIsUUFBUTtTQUNYLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDckIsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ08sS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQVc7UUFDeEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUVoRCxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQztZQUMvQixDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQixJQUFJLHVCQUF1QixHQUFHLEdBQUcsRUFBRTtZQUN0RSxDQUFDLENBQUMsR0FBRyxDQUFBO1FBRVQsSUFBSSxDQUFDO1lBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFjLE9BQU8sRUFBRTtnQkFDbkQsWUFBWSxFQUFFLGFBQWE7YUFDOUIsQ0FBQyxDQUFBO1lBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQzVELE1BQU0sUUFBUSxHQUNULFFBQVEsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUF3QixJQUFJLFdBQVcsQ0FBQTtZQUMzRSxPQUFPLFFBQVEsUUFBUSxXQUFXLE1BQU0sRUFBRSxDQUFBO1FBQzlDLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLElBQUksQ0FBQywyQ0FBMkMsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDdkUsT0FBTyxFQUFFLENBQUE7UUFDYixDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNPLEtBQUssQ0FBQyxrQkFBa0IsQ0FDOUIsWUFBb0IsRUFDcEIsSUFBNkI7UUFFN0IsTUFBTSxVQUFVLEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQTtRQUN2RCxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQU0sTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7UUFDL0QsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRXZDLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDakQsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBRTNCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNoQyxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQTJCLEVBQUUsQ0FBQyxDQUFBO1FBRTVFLE9BQU87WUFDSCxRQUFRLEVBQUUsSUFBSTtZQUNkLFdBQVcsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUM3QixPQUFPO1lBQ1AsWUFBWSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFO1NBQ3BELENBQUE7SUFDTCxDQUFDO0NBT0o7QUF6RUQsb0RBeUVDO0FBTUQ7Ozs7R0FJRztBQUNILE1BQWEsZUFBZTtJQUl4Qjs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQ1gsVUFBa0IsRUFDbEIsUUFBcUM7UUFFckMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQ3RELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBUyxVQUFrQjtRQUNyQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBRTdDLENBQUE7UUFFZixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDaEIsTUFBTSxJQUFJLDhCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQy9DLENBQUM7UUFFRCxPQUFPLElBQUksWUFBWSxFQUFFLENBQUE7SUFDN0IsQ0FBQztJQUVELDJFQUEyRTtJQUMzRSxNQUFNLENBQUMsY0FBYztRQUNqQixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3RELENBQUM7O0FBckNMLDBDQXNDQztBQXJDRyw4REFBOEQ7QUFDdEMsd0JBQVEsR0FBRyxJQUFJLEdBQUcsRUFBb0MsQ0FBQSJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codemind.ec/medusa-plugin-invoice",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Invoice & quotation PDF widget for Medusa v2 admin — download order receipts and manage company billing config.",
|
|
5
5
|
"author": "Kollor <dev@codemind.ec> (https://codemind.ec)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -44,8 +44,6 @@
|
|
|
44
44
|
"prepublishOnly": "medusa plugin:build"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
|
-
"@codemirror/lang-html": "^6.4.11",
|
|
48
|
-
"@codemirror/theme-one-dark": "^6.1.3",
|
|
49
47
|
"@medusajs/admin-sdk": "2.13.3",
|
|
50
48
|
"@medusajs/admin-shared": "2.13.3",
|
|
51
49
|
"@medusajs/cli": "2.13.3",
|
|
@@ -62,7 +60,6 @@
|
|
|
62
60
|
"@types/pdfmake": "^0.2.11",
|
|
63
61
|
"@types/react": "^18.3.3",
|
|
64
62
|
"@types/react-dom": "^18.3.0",
|
|
65
|
-
"@uiw/react-codemirror": "^4.25.8",
|
|
66
63
|
"handlebars": "^4.7.8",
|
|
67
64
|
"prop-types": "^15.8.1",
|
|
68
65
|
"react": "^18.3.1",
|
|
@@ -73,6 +70,9 @@
|
|
|
73
70
|
"vite": "^5.4.14"
|
|
74
71
|
},
|
|
75
72
|
"dependencies": {
|
|
73
|
+
"@codemirror/lang-html": "^6.4.11",
|
|
74
|
+
"@codemirror/theme-one-dark": "^6.1.3",
|
|
75
|
+
"@uiw/react-codemirror": "^4.25.8",
|
|
76
76
|
"axios": "^1.7.7",
|
|
77
77
|
"html-to-pdfmake": "^2.5.33",
|
|
78
78
|
"jsdom": "^29.0.1",
|