@powerhousedao/contributor-billing 0.0.41 → 0.0.43
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.
- package/dist/document-models/billing-statement/gen/schema/types.d.ts +4 -4
- package/dist/document-models/billing-statement/gen/utils.d.ts.map +1 -1
- package/dist/document-models/billing-statement/gen/utils.js +7 -3
- package/dist/document-models/billing-statement/src/tests/document-model.test.js +1 -1
- package/dist/document-models/invoice/gen/schema/types.d.ts +4 -4
- package/dist/document-models/invoice/gen/utils.d.ts.map +1 -1
- package/dist/document-models/invoice/gen/utils.js +9 -5
- package/dist/document-models/invoice/src/tests/document-model.test.js +1 -1
- package/dist/editors/contributor-billing/components/EditorContainer.js +1 -1
- package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTable.d.ts +1 -1
- package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTable.d.ts.map +1 -1
- package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTable.js +24 -48
- package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTableRow.d.ts +1 -6
- package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTableRow.d.ts.map +1 -1
- package/dist/editors/contributor-billing/components/InvoiceTable/InvoiceTableRow.js +1 -1
- package/dist/editors/contributor-billing/editor.js +1 -1
- package/dist/editors/invoice/ingestPDF.js +1 -1
- package/dist/editors/invoice/invoiceToGnosis.js +2 -2
- package/dist/editors/invoice/lineItems.d.ts +2 -2
- package/dist/editors/invoice/lineItems.d.ts.map +1 -1
- package/dist/editors/invoice/lineItems.js +2 -5
- package/dist/editors/invoice/requestFinance.js +1 -1
- package/dist/editors/invoice/uploadPdfChunked.js +1 -1
- package/dist/scripts/invoice/gnosisTransactionBuilder.js +1 -1
- package/dist/scripts/invoice/pdfToDocumentAi.d.ts +1 -1
- package/dist/scripts/invoice/pdfToDocumentAi.d.ts.map +1 -1
- package/dist/scripts/invoice/pdfToDocumentAi.js +3 -3
- package/dist/subgraphs/billing-statement/resolvers.js +14 -14
- package/dist/subgraphs/invoice/resolvers.js +36 -36
- package/package.json +13 -12
|
@@ -54,21 +54,21 @@ export type Scalars = {
|
|
|
54
54
|
Amount_Crypto: {
|
|
55
55
|
input: {
|
|
56
56
|
unit: string;
|
|
57
|
-
value:
|
|
57
|
+
value: string;
|
|
58
58
|
};
|
|
59
59
|
output: {
|
|
60
60
|
unit: string;
|
|
61
|
-
value:
|
|
61
|
+
value: string;
|
|
62
62
|
};
|
|
63
63
|
};
|
|
64
64
|
Amount_Currency: {
|
|
65
65
|
input: {
|
|
66
66
|
unit: string;
|
|
67
|
-
value:
|
|
67
|
+
value: string;
|
|
68
68
|
};
|
|
69
69
|
output: {
|
|
70
70
|
unit: string;
|
|
71
|
-
value:
|
|
71
|
+
value: string;
|
|
72
72
|
};
|
|
73
73
|
};
|
|
74
74
|
Amount_Fiat: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../document-models/billing-statement/gen/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../document-models/billing-statement/gen/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAQxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAChC,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,kBAAkB,EAAE,qBAUhC,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAE,0BAA+B,CAAC;AAEhE,QAAA,MAAM,KAAK,EAAE,kBAAkB,CAAC,wBAAwB,CAoCvD,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { baseCreateDocument, baseCreateExtendedState, baseSaveToFile, baseSaveToFileHandle, baseLoadFromFile, baseLoadFromInput, } from "document-model";
|
|
1
|
+
import { baseCreateDocument, baseCreateExtendedState, baseSaveToFile, baseSaveToFileHandle, baseLoadFromFile, baseLoadFromInput, generateId, } from "document-model";
|
|
2
2
|
import { reducer } from "./reducer.js";
|
|
3
3
|
export const initialGlobalState = {
|
|
4
4
|
contributor: "",
|
|
@@ -21,10 +21,14 @@ const utils = {
|
|
|
21
21
|
};
|
|
22
22
|
},
|
|
23
23
|
createExtendedState(extendedState) {
|
|
24
|
-
return baseCreateExtendedState({ ...extendedState
|
|
24
|
+
return baseCreateExtendedState({ ...extendedState }, utils.createState);
|
|
25
25
|
},
|
|
26
26
|
createDocument(state) {
|
|
27
|
-
|
|
27
|
+
const document = baseCreateDocument(utils.createExtendedState(state), utils.createState);
|
|
28
|
+
document.header.documentType = "powerhouse/billing-statement";
|
|
29
|
+
// for backwards compatibility, but this is NOT a valid signed document id
|
|
30
|
+
document.header.id = generateId();
|
|
31
|
+
return document;
|
|
28
32
|
},
|
|
29
33
|
saveToFile(document, path, name) {
|
|
30
34
|
return baseSaveToFile(document, path, ".phdm", name);
|
|
@@ -7,7 +7,7 @@ describe("Billing Statement Document Model", () => {
|
|
|
7
7
|
it("should create a new Billing Statement document", () => {
|
|
8
8
|
const document = utils.createDocument();
|
|
9
9
|
expect(document).toBeDefined();
|
|
10
|
-
expect(document.documentType).toBe("powerhouse/billing-statement");
|
|
10
|
+
expect(document.header.documentType).toBe("powerhouse/billing-statement");
|
|
11
11
|
});
|
|
12
12
|
it("should create a new Billing Statement document with a valid initial state", () => {
|
|
13
13
|
const document = utils.createDocument();
|
|
@@ -54,21 +54,21 @@ export type Scalars = {
|
|
|
54
54
|
Amount_Crypto: {
|
|
55
55
|
input: {
|
|
56
56
|
unit: string;
|
|
57
|
-
value:
|
|
57
|
+
value: string;
|
|
58
58
|
};
|
|
59
59
|
output: {
|
|
60
60
|
unit: string;
|
|
61
|
-
value:
|
|
61
|
+
value: string;
|
|
62
62
|
};
|
|
63
63
|
};
|
|
64
64
|
Amount_Currency: {
|
|
65
65
|
input: {
|
|
66
66
|
unit: string;
|
|
67
|
-
value:
|
|
67
|
+
value: string;
|
|
68
68
|
};
|
|
69
69
|
output: {
|
|
70
70
|
unit: string;
|
|
71
|
-
value:
|
|
71
|
+
value: string;
|
|
72
72
|
};
|
|
73
73
|
};
|
|
74
74
|
Amount_Fiat: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../document-models/invoice/gen/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../document-models/invoice/gen/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kBAAkB,EAQxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAGpB,eAAO,MAAM,kBAAkB,EAAE,YA8IhC,CAAC;AACF,eAAO,MAAM,iBAAiB,EAAE,iBAAsB,CAAC;AAEvD,QAAA,MAAM,KAAK,EAAE,kBAAkB,CAAC,eAAe,CAoC9C,CAAC;AAEF,eAAe,KAAK,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { baseCreateDocument, baseCreateExtendedState, baseSaveToFile, baseSaveToFileHandle, baseLoadFromFile, baseLoadFromInput, } from "document-model";
|
|
1
|
+
import { baseCreateDocument, baseCreateExtendedState, baseSaveToFile, baseSaveToFileHandle, baseLoadFromFile, baseLoadFromInput, generateId, } from "document-model";
|
|
2
2
|
import { reducer } from "./reducer.js";
|
|
3
3
|
export const initialGlobalState = {
|
|
4
|
-
closureReason: null,
|
|
5
4
|
invoiceNo: "",
|
|
6
5
|
dateIssued: "",
|
|
7
6
|
dateDue: "",
|
|
@@ -139,9 +138,10 @@ export const initialGlobalState = {
|
|
|
139
138
|
rejections: [],
|
|
140
139
|
payments: [],
|
|
141
140
|
exported: {
|
|
142
|
-
timestamp: "",
|
|
143
141
|
exportedLineItems: [],
|
|
142
|
+
timestamp: "",
|
|
144
143
|
},
|
|
144
|
+
closureReason: null,
|
|
145
145
|
};
|
|
146
146
|
export const initialLocalState = {};
|
|
147
147
|
const utils = {
|
|
@@ -153,10 +153,14 @@ const utils = {
|
|
|
153
153
|
};
|
|
154
154
|
},
|
|
155
155
|
createExtendedState(extendedState) {
|
|
156
|
-
return baseCreateExtendedState({ ...extendedState
|
|
156
|
+
return baseCreateExtendedState({ ...extendedState }, utils.createState);
|
|
157
157
|
},
|
|
158
158
|
createDocument(state) {
|
|
159
|
-
|
|
159
|
+
const document = baseCreateDocument(utils.createExtendedState(state), utils.createState);
|
|
160
|
+
document.header.documentType = "powerhouse/invoice";
|
|
161
|
+
// for backwards compatibility, but this is NOT a valid signed document id
|
|
162
|
+
document.header.id = generateId();
|
|
163
|
+
return document;
|
|
160
164
|
},
|
|
161
165
|
saveToFile(document, path, name) {
|
|
162
166
|
return baseSaveToFile(document, path, ".phdm", name);
|
|
@@ -7,7 +7,7 @@ describe("Invoice Document Model", () => {
|
|
|
7
7
|
it("should create a new Invoice document", () => {
|
|
8
8
|
const document = utils.createDocument();
|
|
9
9
|
expect(document).toBeDefined();
|
|
10
|
-
expect(document.documentType).toBe("powerhouse/invoice");
|
|
10
|
+
expect(document.header?.documentType).toBe("powerhouse/invoice");
|
|
11
11
|
});
|
|
12
12
|
it("should create a new Invoice document with a valid initial state", () => {
|
|
13
13
|
const document = utils.createDocument();
|
|
@@ -19,7 +19,7 @@ export const EditorContainer = (props) => {
|
|
|
19
19
|
const ext = documentModelModule.documentModel.extension;
|
|
20
20
|
await exportDocument(document, title, ext);
|
|
21
21
|
}
|
|
22
|
-
}, [document?.revision
|
|
22
|
+
}, [document?.header?.revision?.global, document?.header?.revision?.local]);
|
|
23
23
|
const loadingContent = (_jsx("div", { className: "flex-1 flex justify-center items-center h-full", children: _jsx(DefaultEditorLoader, {}) }));
|
|
24
24
|
if (!document)
|
|
25
25
|
return loadingContent;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type UiFileNode } from "@powerhousedao/design-system";
|
|
2
|
-
import { DocumentModelModule } from "document-model";
|
|
2
|
+
import { type DocumentModelModule } from "document-model";
|
|
3
3
|
import { type InvoiceAction } from "../../../../document-models/invoice/index.js";
|
|
4
4
|
interface InvoiceTableProps {
|
|
5
5
|
files: UiFileNode[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InvoiceTable.d.ts","sourceRoot":"","sources":["../../../../../editors/contributor-billing/components/InvoiceTable/InvoiceTable.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"InvoiceTable.d.ts","sourceRoot":"","sources":["../../../../../editors/contributor-billing/components/InvoiceTable/InvoiceTable.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAI/D,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAI1D,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,8CAA8C,CAAC;AActD,UAAU,iBAAiB;IACzB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,eAAe,CAAC,EAAE,GAAG,KAAK,IAAI,CAAC;IAChE,QAAQ,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACpC,WAAW,EAAE,CACX,QAAQ,EACJ;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,GACzB,CAAC,CAAC,IAAI,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,KAAK;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,KACjE,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,sBAAsB,EAAE,mBAAmB,EAAE,CAAC;IAC9C,qBAAqB,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5D,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC,CAAC;IAC7D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,YAAY,GAAI,0LAc1B,iBAAiB,4CA2pBnB,CAAC"}
|
|
@@ -4,8 +4,8 @@ import { useState, useMemo } from "react";
|
|
|
4
4
|
import { HeaderControls } from "./HeaderControls.js";
|
|
5
5
|
import { InvoiceTableSection } from "./InvoiceTableSection.js";
|
|
6
6
|
import { InvoiceTableRow } from "./InvoiceTableRow.js";
|
|
7
|
-
import { useDriveContext
|
|
8
|
-
import {
|
|
7
|
+
import { useDriveContext } from "@powerhousedao/reactor-browser";
|
|
8
|
+
import { createPresignedHeader } from "document-model";
|
|
9
9
|
import { mapTags } from "../../../billing-statement/lineItemTags/tagMapping.js";
|
|
10
10
|
import { exportInvoicesToXeroCSV } from "../../../../scripts/contributor-billing/createXeroCsv.js";
|
|
11
11
|
import { toast } from "@powerhousedao/design-system";
|
|
@@ -116,14 +116,15 @@ export const InvoiceTable = ({ files, state, setActiveDocumentId, getDispatch, s
|
|
|
116
116
|
return;
|
|
117
117
|
const invoiceFile = files.find((file) => file.id === id);
|
|
118
118
|
const invoiceState = state[id];
|
|
119
|
-
const newDocumentId = generateId();
|
|
120
119
|
await addDocument(driveId, `bill-${invoiceFile?.name}`, "powerhouse/billing-statement", undefined, {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
120
|
+
header: {
|
|
121
|
+
...createPresignedHeader(),
|
|
122
|
+
...{
|
|
123
|
+
slug: `bill-${makeSlug(invoiceFile?.name || "")}`,
|
|
124
|
+
name: `bill-${cleanName(invoiceFile?.name || "")}`,
|
|
125
|
+
documentType: "powerhouse/billing-statement",
|
|
126
|
+
},
|
|
127
|
+
},
|
|
127
128
|
state: {
|
|
128
129
|
global: {
|
|
129
130
|
contributor: id,
|
|
@@ -150,25 +151,15 @@ export const InvoiceTable = ({ files, state, setActiveDocumentId, getDispatch, s
|
|
|
150
151
|
},
|
|
151
152
|
local: {},
|
|
152
153
|
},
|
|
153
|
-
revision: {
|
|
154
|
-
global: 0,
|
|
155
|
-
local: 0,
|
|
156
|
-
},
|
|
157
154
|
operations: {
|
|
158
155
|
global: [],
|
|
159
156
|
local: [],
|
|
160
157
|
},
|
|
158
|
+
history: {
|
|
159
|
+
global: [],
|
|
160
|
+
local: [],
|
|
161
|
+
},
|
|
161
162
|
initialState: {
|
|
162
|
-
id: newDocumentId,
|
|
163
|
-
slug: `bill-${cleanName(invoiceFile?.name || "")}`,
|
|
164
|
-
name: `bill-${cleanName(invoiceFile?.name || "")}`,
|
|
165
|
-
documentType: "powerhouse/billing-statement",
|
|
166
|
-
created: new Date().toISOString(),
|
|
167
|
-
lastModified: new Date().toISOString(),
|
|
168
|
-
revision: {
|
|
169
|
-
global: 0,
|
|
170
|
-
local: 0,
|
|
171
|
-
},
|
|
172
163
|
state: {
|
|
173
164
|
global: {
|
|
174
165
|
contributor: id,
|
|
@@ -221,22 +212,7 @@ export const InvoiceTable = ({ files, state, setActiveDocumentId, getDispatch, s
|
|
|
221
212
|
state: selectedInvoices[idx],
|
|
222
213
|
})));
|
|
223
214
|
try {
|
|
224
|
-
|
|
225
|
-
// Object.entries(exportedInvoices).forEach(
|
|
226
|
-
// ([invoiceId, invoiceData]: [string, any]) => {
|
|
227
|
-
// const dispatch = selectedInvoiceDispatchMap[invoiceId];
|
|
228
|
-
// if (dispatch) {
|
|
229
|
-
// dispatch(
|
|
230
|
-
// actions.setExportedData({
|
|
231
|
-
// timestamp: invoiceData.exportTimestamp as string,
|
|
232
|
-
// exportedLineItems: invoiceData.exportedLines as string[][],
|
|
233
|
-
// })
|
|
234
|
-
// );
|
|
235
|
-
// } else {
|
|
236
|
-
// console.warn(`No dispatch function found for invoice ${invoiceId}`);
|
|
237
|
-
// }
|
|
238
|
-
// }
|
|
239
|
-
// );
|
|
215
|
+
await exportInvoicesToXeroCSV(selectedInvoices, baseCurrency);
|
|
240
216
|
toast("Invoices exported successfully", {
|
|
241
217
|
type: "success",
|
|
242
218
|
});
|
|
@@ -255,29 +231,29 @@ export const InvoiceTable = ({ files, state, setActiveDocumentId, getDispatch, s
|
|
|
255
231
|
return (_jsxs("div", { className: "w-full h-full bg-white rounded-lg p-4 border border-gray-200 shadow-md mt-4 overflow-x-auto", children: [_jsx(HeaderControls, { statusOptions: statusOptions, onStatusChange: handleStatusChange, onBatchAction: onBatchAction, onExport: handleCSVExport, selectedStatuses: selectedInvoiceStatuses }), shouldShowSection("DRAFT") && (_jsx(InvoiceTableSection, { title: "Draft", count: draft.length, onSelectDocumentModel: onSelectDocumentModel, filteredDocumentModels: filteredDocumentModels, children: _jsxs("table", { className: "w-full text-sm border-separate border-spacing-0 border border-gray-400", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-gray-50", children: [_jsx("th", { className: "px-2 py-2 w-8" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Invoice" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Invoice No." }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issue Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Due Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Currency" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Amount" }), _jsx("th", { className: "px-2 py-2", children: "Exported" })] }) }), _jsx("tbody", { children: draft.map((row) => (_jsx(InvoiceTableRow, { files: files, row: row, isSelected: !!selected[row.id], onSelect: (checked) => setSelected((prev) => ({
|
|
256
232
|
...prev,
|
|
257
233
|
[row.id]: checked,
|
|
258
|
-
})),
|
|
234
|
+
})), setActiveDocumentId: setActiveDocumentId, onDeleteNode: handleDelete, renameNode: renameNode }, row.id))) })] }) })), shouldShowSection("ISSUED") && (_jsx(InvoiceTableSection, { title: "Issued", count: issued.length, children: _jsxs("table", { className: "w-full text-sm border-separate border-spacing-0 border border-gray-400", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-gray-50", children: [_jsx("th", { className: "px-2 py-2 w-8" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issuer" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Invoice No." }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issue Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Due Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Currency" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Amount" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Billing Statement" }), _jsx("th", { className: "px-2 py-2", children: "Exported" })] }) }), _jsx("tbody", { children: issued.map((row) => (_jsx(InvoiceTableRow, { files: files, row: row, isSelected: !!selected[row.id], onSelect: (checked) => setSelected((prev) => ({
|
|
259
235
|
...prev,
|
|
260
236
|
[row.id]: checked,
|
|
261
|
-
})),
|
|
237
|
+
})), setActiveDocumentId: setActiveDocumentId, onDeleteNode: handleDelete, renameNode: renameNode, onCreateBillingStatement: handleCreateBillingStatement, billingDocStates: billingDocStates }, row.id))) })] }) })), shouldShowSection("ACCEPTED") && (_jsx(InvoiceTableSection, { title: "Accepted", count: accepted.length, color: "bg-green-100 text-green-600", children: _jsxs("table", { className: "w-full text-sm border-separate border-spacing-0 border border-gray-400", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-gray-50", children: [_jsx("th", { className: "px-2 py-2 w-8" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issuer" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Invoice No." }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issue Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Due Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Currency" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Amount" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Billing Statement" }), _jsx("th", { className: "px-2 py-2", children: "Exported" })] }) }), _jsx("tbody", { children: accepted.map((row) => (_jsx(InvoiceTableRow, { files: files, row: row, isSelected: !!selected[row.id], onSelect: (checked) => setSelected((prev) => ({
|
|
262
238
|
...prev,
|
|
263
239
|
[row.id]: checked,
|
|
264
|
-
})),
|
|
240
|
+
})), setActiveDocumentId: setActiveDocumentId, onDeleteNode: handleDelete, renameNode: renameNode, onCreateBillingStatement: handleCreateBillingStatement, billingDocStates: billingDocStates }, row.id))) })] }) })), shouldShowSection("PAYMENTSCHEDULED") && (_jsx(InvoiceTableSection, { title: "Payment Scheduled", count: paymentScheduled.length, color: "bg-green-100 text-green-600", children: _jsxs("table", { className: "w-full text-sm border-separate border-spacing-0 border border-gray-400", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-gray-50", children: [_jsx("th", { className: "px-2 py-2 w-8" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issuer" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Invoice No." }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issue Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Due Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Currency" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Amount" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Billing Statement" }), _jsx("th", { className: "px-2 py-2", children: "Exported" })] }) }), _jsx("tbody", { children: paymentScheduled.map((row) => (_jsx(InvoiceTableRow, { files: files, row: row, isSelected: !!selected[row.id], onSelect: (checked) => setSelected((prev) => ({
|
|
265
241
|
...prev,
|
|
266
242
|
[row.id]: checked,
|
|
267
|
-
})),
|
|
243
|
+
})), setActiveDocumentId: setActiveDocumentId, onDeleteNode: handleDelete, renameNode: renameNode, onCreateBillingStatement: handleCreateBillingStatement, billingDocStates: billingDocStates }, row.id))) })] }) })), shouldShowSection("PAYMENTSENT") && (_jsx(InvoiceTableSection, { title: "Payment Sent", count: paymentSent.length, color: "bg-green-100 text-green-600", children: _jsxs("table", { className: "w-full text-sm border-separate border-spacing-0 border border-gray-400", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-gray-50", children: [_jsx("th", { className: "px-2 py-2 w-8" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issuer" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Invoice No." }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issue Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Due Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Currency" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Amount" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Billing Statement" }), _jsx("th", { className: "px-2 py-2", children: "Exported" })] }) }), _jsx("tbody", { children: paymentSent.map((row) => (_jsx(InvoiceTableRow, { files: files, row: row, isSelected: !!selected[row.id], onSelect: (checked) => setSelected((prev) => ({
|
|
268
244
|
...prev,
|
|
269
245
|
[row.id]: checked,
|
|
270
|
-
})),
|
|
246
|
+
})), setActiveDocumentId: setActiveDocumentId, onDeleteNode: handleDelete, renameNode: renameNode, onCreateBillingStatement: handleCreateBillingStatement, billingDocStates: billingDocStates }, row.id))) })] }) })), shouldShowSection("PAYMENTISSUE") && (_jsx(InvoiceTableSection, { title: "Payment Issue", count: paymentIssue.length, color: "bg-yellow-100 text-yellow-600", children: _jsxs("table", { className: "w-full text-sm border-separate border-spacing-0 border border-gray-400", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-gray-50", children: [_jsx("th", { className: "px-2 py-2 w-8" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issuer" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Invoice No." }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issue Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Due Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Currency" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Amount" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Billing Statement" }), _jsx("th", { className: "px-2 py-2", children: "Exported" })] }) }), _jsx("tbody", { children: paymentIssue.map((row) => (_jsx(InvoiceTableRow, { files: files, row: row, isSelected: !!selected[row.id], onSelect: (checked) => setSelected((prev) => ({
|
|
271
247
|
...prev,
|
|
272
248
|
[row.id]: checked,
|
|
273
|
-
})),
|
|
249
|
+
})), setActiveDocumentId: setActiveDocumentId, onDeleteNode: handleDelete, renameNode: renameNode, onCreateBillingStatement: handleCreateBillingStatement, billingDocStates: billingDocStates }, row.id))) })] }) })), shouldShowSection("PAYMENTCLOSED") && (_jsx(InvoiceTableSection, { title: "Payment Closed", count: paymentClosed.length, color: "bg-red-500 text-black-600", children: _jsxs("table", { className: "w-full text-sm border-separate border-spacing-0 border border-gray-400", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-gray-50", children: [_jsx("th", { className: "px-2 py-2 w-8" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issuer" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Invoice No." }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issue Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Due Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Currency" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Amount" }), _jsx("th", { className: "px-2 py-2", children: "Exported" })] }) }), _jsx("tbody", { children: paymentClosed.map((row) => (_jsx(InvoiceTableRow, { files: files, row: row, isSelected: !!selected[row.id], onSelect: (checked) => setSelected((prev) => ({
|
|
274
250
|
...prev,
|
|
275
251
|
[row.id]: checked,
|
|
276
|
-
})),
|
|
252
|
+
})), setActiveDocumentId: setActiveDocumentId, onDeleteNode: handleDelete, renameNode: renameNode }, row.id))) })] }) })), shouldShowSection("REJECTED") && (_jsx(InvoiceTableSection, { title: "Rejected", count: rejected.length, color: "bg-red-500 text-black-600", children: _jsxs("table", { className: "w-full text-sm border-separate border-spacing-0 border border-gray-400", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-gray-50", children: [_jsx("th", { className: "px-2 py-2 w-8" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issuer" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Invoice No." }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issue Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Due Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Currency" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Amount" }), _jsx("th", { className: "px-2 py-2", children: "Exported" })] }) }), _jsx("tbody", { children: rejected.map((row) => (_jsx(InvoiceTableRow, { files: files, row: row, isSelected: !!selected[row.id], onSelect: (checked) => setSelected((prev) => ({
|
|
277
253
|
...prev,
|
|
278
254
|
[row.id]: checked,
|
|
279
|
-
})),
|
|
255
|
+
})), setActiveDocumentId: setActiveDocumentId, onDeleteNode: handleDelete, renameNode: renameNode }, row.id))) })] }) })), shouldShowSection("OTHER") && (_jsx(InvoiceTableSection, { title: "Other", count: otherInvoices.length, children: _jsxs("table", { className: "w-full text-sm border-separate border-spacing-0 border border-gray-400", children: [_jsx("thead", { children: _jsxs("tr", { className: "bg-gray-50", children: [_jsx("th", { className: "px-2 py-2 w-8" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issuer" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Invoice No." }), _jsx("th", { className: "px-2 py-2 text-center", children: "Issue Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Due Date" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Currency" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Amount" }), _jsx("th", { className: "px-2 py-2 text-center", children: "Exported" })] }) }), _jsx("tbody", { children: otherInvoices.map((row) => (_jsx(InvoiceTableRow, { files: files, row: row, isSelected: !!selected[row.id], onSelect: (checked) => setSelected((prev) => ({
|
|
280
256
|
...prev,
|
|
281
257
|
[row.id]: checked,
|
|
282
|
-
})),
|
|
258
|
+
})), setActiveDocumentId: setActiveDocumentId, onDeleteNode: handleDelete, renameNode: renameNode }, row.id))) })] }) }))] }, `${Object.keys(state).length}`));
|
|
283
259
|
};
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import { type UiFileNode } from "@powerhousedao/design-system";
|
|
2
|
-
export declare const InvoiceTableRow: ({ files, row, isSelected, onSelect,
|
|
2
|
+
export declare const InvoiceTableRow: ({ files, row, isSelected, onSelect, setActiveDocumentId, onDeleteNode, renameNode, onCreateBillingStatement, billingDocStates, }: {
|
|
3
3
|
files?: UiFileNode[];
|
|
4
4
|
row: any;
|
|
5
5
|
isSelected: boolean;
|
|
6
6
|
onSelect: (checked: boolean) => void;
|
|
7
|
-
menuOptions: {
|
|
8
|
-
label: string;
|
|
9
|
-
value: string;
|
|
10
|
-
}[];
|
|
11
|
-
onMenuAction: (action: string) => void;
|
|
12
7
|
setActiveDocumentId: (id: string) => void;
|
|
13
8
|
onDeleteNode: (nodeId: string) => void;
|
|
14
9
|
renameNode: (nodeId: string, name: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InvoiceTableRow.d.ts","sourceRoot":"","sources":["../../../../../editors/contributor-billing/components/InvoiceTable/InvoiceTableRow.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,UAAU,EAEhB,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,eAAe,GAAI,
|
|
1
|
+
{"version":3,"file":"InvoiceTableRow.d.ts","sourceRoot":"","sources":["../../../../../editors/contributor-billing/components/InvoiceTable/InvoiceTableRow.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,UAAU,EAEhB,MAAM,8BAA8B,CAAC;AAEtC,eAAO,MAAM,eAAe,GAAI,kIAU7B;IACD,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,GAAG,EAAE,GAAG,CAAC;IACT,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,mBAAmB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,wBAAwB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,gBAAgB,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC1D,4CA2GA,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useState, useRef } from "react";
|
|
3
3
|
import { FileItem, } from "@powerhousedao/design-system";
|
|
4
|
-
export const InvoiceTableRow = ({ files, row, isSelected, onSelect,
|
|
4
|
+
export const InvoiceTableRow = ({ files, row, isSelected, onSelect, setActiveDocumentId, onDeleteNode, renameNode, onCreateBillingStatement, billingDocStates, }) => {
|
|
5
5
|
const [menuOpen, setMenuOpen] = useState(false);
|
|
6
6
|
const menuRef = useRef(null);
|
|
7
7
|
const billingDoc = billingDocStates?.find((doc) => doc.contributor === row.id);
|
|
@@ -41,7 +41,7 @@ export function BaseEditor(props) {
|
|
|
41
41
|
dispatch(copyNodeAction);
|
|
42
42
|
}
|
|
43
43
|
}, [dispatch, props.document.state.global.nodes]);
|
|
44
|
-
return (_jsx("div", { className: "new-drive-explorer", children: _jsx(DriveExplorer, { driveId: props.document.id, nodes: nodes, onAddFolder: onAddFolder, onDeleteNode: onDeleteNode, renameNode: renameNode, onCopyNode: onCopyNode, context: context, document: props.document, dispatch: dispatch }, nodes.length) }));
|
|
44
|
+
return (_jsx("div", { className: "new-drive-explorer", children: _jsx(DriveExplorer, { driveId: props.document.header.id, nodes: nodes, onAddFolder: onAddFolder, onDeleteNode: onDeleteNode, renameNode: renameNode, onCopyNode: onCopyNode, context: context, document: props.document, dispatch: dispatch }, nodes.length) }));
|
|
45
45
|
}
|
|
46
46
|
export default function Editor(props) {
|
|
47
47
|
return (_jsx(DriveContextProvider, { value: props.context, children: _jsx(WagmiContext, { children: _jsx(BaseEditor, { ...props }) }) }));
|
|
@@ -6,7 +6,7 @@ import { uploadPdfChunked } from "./uploadPdfChunked.js";
|
|
|
6
6
|
import { getCountryCodeFromName } from "./utils/utils.js";
|
|
7
7
|
let GRAPHQL_URL = 'http://localhost:4001/graphql/invoice';
|
|
8
8
|
if (!window.document.baseURI.includes('localhost')) {
|
|
9
|
-
GRAPHQL_URL = 'https://switchboard.powerhouse.xyz/graphql/invoice';
|
|
9
|
+
GRAPHQL_URL = 'https://switchboard-staging.powerhouse.xyz/graphql/invoice';
|
|
10
10
|
}
|
|
11
11
|
export async function loadPDFFile({ file, dispatch, }) {
|
|
12
12
|
if (!file)
|
|
@@ -4,7 +4,7 @@ import { actions, } from "../../document-models/invoice/index.js";
|
|
|
4
4
|
import { generateId } from "document-model";
|
|
5
5
|
let GRAPHQL_URL = "http://localhost:4001/graphql/invoice";
|
|
6
6
|
if (!window.document.baseURI.includes('localhost')) {
|
|
7
|
-
GRAPHQL_URL = 'https://switchboard.powerhouse.xyz/graphql/invoice';
|
|
7
|
+
GRAPHQL_URL = 'https://switchboard-staging.powerhouse.xyz/graphql/invoice';
|
|
8
8
|
}
|
|
9
9
|
const InvoiceToGnosis = ({ docState, dispatch }) => {
|
|
10
10
|
const [isLoading, setIsLoading] = useState(false);
|
|
@@ -131,6 +131,6 @@ const InvoiceToGnosis = ({ docState, dispatch }) => {
|
|
|
131
131
|
}
|
|
132
132
|
};
|
|
133
133
|
const urlChainName = parseChainName(chainName);
|
|
134
|
-
return (_jsxs("div", { className: "space-y-4", children: [currency && chainName && currency !== "" && chainName !== "" && (_jsx("button", { className: "bg-blue-500 text-black px-4 py-2 rounded-md hover:bg-blue-600", onClick: handleInvoiceToGnosis, disabled: isLoading, children: isLoading ? "Processing..." : "Send Payment to Gnosis >" })), error && (_jsx("div", { className: "text-red-500 bg-red-50 p-3 rounded-md", children: error })), safeTxHash && (_jsxs("div", { className: "bg-gray-50 p-4 rounded-md space-y-2", children: [_jsxs("p", { className: "font-medium", children: ["Safe Transaction Hash:", _jsx("span", { className: "font-mono text-sm ml-2 break-all", children: safeTxHash })] }), _jsx("a", { href: `https://app.safe.global/transactions/queue?safe=${urlChainName}:
|
|
134
|
+
return (_jsxs("div", { className: "space-y-4", children: [currency && chainName && currency !== "" && chainName !== "" && (_jsx("button", { className: "bg-blue-500 text-black px-4 py-2 rounded-md hover:bg-blue-600", onClick: handleInvoiceToGnosis, disabled: isLoading, children: isLoading ? "Processing..." : "Send Payment to Gnosis >" })), error && (_jsx("div", { className: "text-red-500 bg-red-50 p-3 rounded-md", children: error })), safeTxHash && (_jsxs("div", { className: "bg-gray-50 p-4 rounded-md space-y-2", children: [_jsxs("p", { className: "font-medium", children: ["Safe Transaction Hash:", _jsx("span", { className: "font-mono text-sm ml-2 break-all", children: safeTxHash })] }), _jsx("a", { href: `https://app.safe.global/transactions/queue?safe=${urlChainName}:0x1FB6bEF04230d67aF0e3455B997a28AFcCe1F45e`, target: "_blank", rel: "noopener noreferrer", className: "text-blue-500 hover:text-blue-600 underline block", children: "View Transaction" })] })), invoiceStatusResponse && (_jsxs("div", { className: "bg-gray-50 p-4 rounded-md", children: [_jsx("p", { className: "font-medium", children: "Payment Details:" }), _jsx("p", { className: "text-gray-700", children: invoiceStatusResponse })] }))] }));
|
|
135
135
|
};
|
|
136
136
|
export default InvoiceToGnosis;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { EditInvoiceInput, DeleteLineItemInput, InvoiceTag } from "../../document-models/invoice/index.js";
|
|
2
|
-
import { Dispatch } from "react";
|
|
1
|
+
import { type EditInvoiceInput, type DeleteLineItemInput, type InvoiceTag } from "../../document-models/invoice/index.js";
|
|
2
|
+
import { type Dispatch } from "react";
|
|
3
3
|
export declare function formatNumber(value: number): string;
|
|
4
4
|
type LineItem = {
|
|
5
5
|
currency: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lineItems.d.ts","sourceRoot":"","sources":["../../../editors/invoice/lineItems.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,gBAAgB,
|
|
1
|
+
{"version":3,"file":"lineItems.d.ts","sourceRoot":"","sources":["../../../editors/invoice/lineItems.tsx"],"names":[],"mappings":"AAIA,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EAChB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,OAAO,CAAC;AAaf,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAsBlD;AAED,KAAK,QAAQ,GAAG;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC3B,CAAC;AAwNF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IAChD,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC5D,QAAQ,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7D,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,UAAU,EAAE,CAAC;CACxC,CAAC;AAEF,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,eAAe,GAChB,EAAE,mBAAmB,2CA6LrB"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/* eslint-disable react/jsx-max-depth */
|
|
3
|
-
/* eslint-disable react/jsx-no-bind */
|
|
4
|
-
/* eslint-disable react/button-has-type */
|
|
5
2
|
import { RWAButton } from "@powerhousedao/design-system";
|
|
6
3
|
import { forwardRef, useState, useMemo, useRef, } from "react";
|
|
7
|
-
import {
|
|
4
|
+
import { generateId } from "document-model";
|
|
8
5
|
import { Tag } from "lucide-react";
|
|
9
6
|
import { NumberForm } from "./components/numberForm.js";
|
|
10
7
|
import { InputField } from "./components/inputField.js";
|
|
@@ -127,7 +124,7 @@ const EditableLineItem = forwardRef(function EditableLineItem(props, ref) {
|
|
|
127
124
|
: Number(editedItem.taxPercent)
|
|
128
125
|
: (editedItem.taxPercent ?? 0);
|
|
129
126
|
const completeItem = {
|
|
130
|
-
id: editedItem.id ??
|
|
127
|
+
id: editedItem.id ?? generateId(),
|
|
131
128
|
currency: editedItem.currency,
|
|
132
129
|
description: editedItem.description ?? "",
|
|
133
130
|
quantity: quantity,
|
|
@@ -4,7 +4,7 @@ import { actions, } from "../../document-models/invoice/index.js";
|
|
|
4
4
|
import { generateId } from "document-model";
|
|
5
5
|
let GRAPHQL_URL = 'http://localhost:4001/graphql/invoice';
|
|
6
6
|
if (!window.document.baseURI.includes('localhost')) {
|
|
7
|
-
GRAPHQL_URL = 'https://switchboard.powerhouse.xyz/graphql/invoice';
|
|
7
|
+
GRAPHQL_URL = 'https://switchboard-staging.powerhouse.xyz/graphql/invoice';
|
|
8
8
|
}
|
|
9
9
|
const RequestFinance = ({ docState, dispatch }) => {
|
|
10
10
|
const [isLoading, setIsLoading] = useState(false);
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
let GRAPHQL_URL = 'http://localhost:4001/graphql/invoice';
|
|
9
9
|
if (!window.document.baseURI.includes('localhost')) {
|
|
10
|
-
GRAPHQL_URL = 'https://switchboard.powerhouse.xyz/graphql/invoice';
|
|
10
|
+
GRAPHQL_URL = 'https://switchboard-staging.powerhouse.xyz/graphql/invoice';
|
|
11
11
|
}
|
|
12
12
|
export async function uploadPdfChunked(pdfData, endpoint = GRAPHQL_URL, chunkSize = 500 * 1024, // 500KB chunks
|
|
13
13
|
onProgress) {
|
|
@@ -4,7 +4,7 @@ import { OperationType } from '@safe-global/types-kit';
|
|
|
4
4
|
import { ethers, AbiCoder } from 'ethers';
|
|
5
5
|
import dotenv from 'dotenv';
|
|
6
6
|
dotenv.config();
|
|
7
|
-
const safeAddress = process.env.
|
|
7
|
+
const safeAddress = process.env.DEV_STAGING_SAFE_ADDRESS;
|
|
8
8
|
if (!safeAddress) {
|
|
9
9
|
throw new Error('Missing SAFE_ADDRESS in .env');
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdfToDocumentAi.d.ts","sourceRoot":"","sources":["../../../scripts/invoice/pdfToDocumentAi.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,YAAY,
|
|
1
|
+
{"version":3,"file":"pdfToDocumentAi.d.ts","sourceRoot":"","sources":["../../../scripts/invoice/pdfToDocumentAi.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,YAAY,EAGlB,MAAM,wCAAwC,CAAC;AAoBlD,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,GAAG;;GAyDtD"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DocumentProcessorServiceClient } from '@google-cloud/documentai';
|
|
2
2
|
import { GoogleAuth } from 'google-auth-library';
|
|
3
|
-
import
|
|
3
|
+
import { generateId } from 'document-model';
|
|
4
4
|
export async function uploadPdfAndGetJson(inputDoc) {
|
|
5
5
|
try {
|
|
6
6
|
console.log("Starting PDF upload and processing"); // Log when processing starts
|
|
@@ -257,7 +257,7 @@ function normalizeAccountType(accountType) {
|
|
|
257
257
|
}
|
|
258
258
|
function parseAddress(addressText) {
|
|
259
259
|
// Split into lines and clean each line
|
|
260
|
-
|
|
260
|
+
const addressLines = addressText.split(/[,\n]/).map(line => line.trim()).filter(Boolean);
|
|
261
261
|
const addressData = {
|
|
262
262
|
streetAddress: '',
|
|
263
263
|
extendedAddress: null,
|
|
@@ -590,7 +590,7 @@ function mapDocumentAiToInvoice(entities, existingInvoice) {
|
|
|
590
590
|
totalPriceTaxExcl: parsedQuantity * parsedUnitPrice,
|
|
591
591
|
totalPriceTaxIncl: parsedQuantity * parsedUnitPrice,
|
|
592
592
|
currency: invoiceData.currency || 'USD',
|
|
593
|
-
id:
|
|
593
|
+
id: generateId(),
|
|
594
594
|
taxPercent: 0
|
|
595
595
|
});
|
|
596
596
|
}
|
|
@@ -15,25 +15,25 @@ export const getResolvers = (subgraph) => {
|
|
|
15
15
|
return {
|
|
16
16
|
...doc,
|
|
17
17
|
driveId: driveId,
|
|
18
|
-
state: doc
|
|
19
|
-
stateJSON: doc
|
|
20
|
-
revision: doc
|
|
18
|
+
state: doc?.state?.global ?? "",
|
|
19
|
+
stateJSON: doc?.state?.global,
|
|
20
|
+
revision: doc?.header?.revision?.global,
|
|
21
21
|
};
|
|
22
22
|
},
|
|
23
23
|
getDocuments: async (args) => {
|
|
24
24
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
25
25
|
const docsIds = await reactor.getDocuments(driveId);
|
|
26
|
-
const docs = await Promise.all(docsIds.map(async (docId) => {
|
|
26
|
+
const docs = await Promise.all((docsIds ?? []).map(async (docId) => {
|
|
27
27
|
const doc = await reactor.getDocument(driveId, docId);
|
|
28
28
|
return {
|
|
29
29
|
...doc,
|
|
30
30
|
driveId: driveId,
|
|
31
|
-
state: doc
|
|
32
|
-
stateJSON: doc
|
|
33
|
-
revision: doc
|
|
31
|
+
state: doc?.state?.global ?? "",
|
|
32
|
+
stateJSON: doc?.state?.global,
|
|
33
|
+
revision: doc?.header?.revision?.global,
|
|
34
34
|
};
|
|
35
35
|
}));
|
|
36
|
-
return docs.filter((doc) => doc.documentType === "powerhouse/billing-statement");
|
|
36
|
+
return docs.filter((doc) => doc.header?.documentType === "powerhouse/billing-statement");
|
|
37
37
|
},
|
|
38
38
|
};
|
|
39
39
|
},
|
|
@@ -66,42 +66,42 @@ export const getResolvers = (subgraph) => {
|
|
|
66
66
|
const docId = args.docId || "";
|
|
67
67
|
const doc = await reactor.getDocument(driveId, docId);
|
|
68
68
|
await reactor.addAction(driveId, docId, actions.editBillingStatement({ ...args.input }));
|
|
69
|
-
return doc
|
|
69
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
70
70
|
},
|
|
71
71
|
BillingStatement_editContributor: async (_, args) => {
|
|
72
72
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
73
73
|
const docId = args.docId || "";
|
|
74
74
|
const doc = await reactor.getDocument(driveId, docId);
|
|
75
75
|
await reactor.addAction(driveId, docId, actions.editContributor({ ...args.input }));
|
|
76
|
-
return doc
|
|
76
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
77
77
|
},
|
|
78
78
|
BillingStatement_editStatus: async (_, args) => {
|
|
79
79
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
80
80
|
const docId = args.docId || "";
|
|
81
81
|
const doc = await reactor.getDocument(driveId, docId);
|
|
82
82
|
await reactor.addAction(driveId, docId, actions.editStatus({ ...args.input }));
|
|
83
|
-
return doc
|
|
83
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
84
84
|
},
|
|
85
85
|
BillingStatement_addLineItem: async (_, args) => {
|
|
86
86
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
87
87
|
const docId = args.docId || "";
|
|
88
88
|
const doc = await reactor.getDocument(driveId, docId);
|
|
89
89
|
await reactor.addAction(driveId, docId, actions.addLineItem({ ...args.input }));
|
|
90
|
-
return doc
|
|
90
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
91
91
|
},
|
|
92
92
|
BillingStatement_editLineItem: async (_, args) => {
|
|
93
93
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
94
94
|
const docId = args.docId || "";
|
|
95
95
|
const doc = await reactor.getDocument(driveId, docId);
|
|
96
96
|
await reactor.addAction(driveId, docId, actions.editLineItem({ ...args.input }));
|
|
97
|
-
return doc
|
|
97
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
98
98
|
},
|
|
99
99
|
BillingStatement_editLineItemTag: async (_, args) => {
|
|
100
100
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
101
101
|
const docId = args.docId || "";
|
|
102
102
|
const doc = await reactor.getDocument(driveId, docId);
|
|
103
103
|
await reactor.addAction(driveId, docId, actions.editLineItemTag({ ...args.input }));
|
|
104
|
-
return doc
|
|
104
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
105
105
|
},
|
|
106
106
|
},
|
|
107
107
|
};
|
|
@@ -16,25 +16,25 @@ export const getResolvers = (subgraph) => {
|
|
|
16
16
|
return {
|
|
17
17
|
driveId: driveId,
|
|
18
18
|
...doc,
|
|
19
|
-
state: doc
|
|
20
|
-
stateJSON: doc
|
|
21
|
-
revision: doc
|
|
19
|
+
state: doc?.state?.global ?? "",
|
|
20
|
+
stateJSON: doc?.state?.global,
|
|
21
|
+
revision: doc?.header?.revision?.global,
|
|
22
22
|
};
|
|
23
23
|
},
|
|
24
24
|
getDocuments: async (args) => {
|
|
25
25
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
26
26
|
const docsIds = await reactor.getDocuments(driveId);
|
|
27
|
-
const docs = await Promise.all(docsIds.map(async (docId) => {
|
|
27
|
+
const docs = await Promise.all((docsIds ?? []).map(async (docId) => {
|
|
28
28
|
const doc = await reactor.getDocument(driveId, docId);
|
|
29
29
|
return {
|
|
30
30
|
driveId: driveId,
|
|
31
31
|
...doc,
|
|
32
|
-
state: doc
|
|
33
|
-
stateJSON: doc
|
|
34
|
-
revision: doc
|
|
32
|
+
state: doc?.state?.global,
|
|
33
|
+
stateJSON: doc?.state?.global,
|
|
34
|
+
revision: doc?.header?.revision?.global,
|
|
35
35
|
};
|
|
36
36
|
}));
|
|
37
|
-
return docs.filter((doc) => doc.documentType === "powerhouse/invoice");
|
|
37
|
+
return docs.filter((doc) => doc.header?.documentType === "powerhouse/invoice");
|
|
38
38
|
},
|
|
39
39
|
};
|
|
40
40
|
},
|
|
@@ -67,196 +67,196 @@ export const getResolvers = (subgraph) => {
|
|
|
67
67
|
const docId = args.docId || "";
|
|
68
68
|
const doc = await reactor.getDocument(driveId, docId);
|
|
69
69
|
await reactor.addAction(driveId, docId, actions.editInvoice({ ...args.input }));
|
|
70
|
-
return doc
|
|
70
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
71
71
|
},
|
|
72
72
|
Invoice_editStatus: async (_, args) => {
|
|
73
73
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
74
74
|
const docId = args.docId || "";
|
|
75
75
|
const doc = await reactor.getDocument(driveId, docId);
|
|
76
76
|
await reactor.addAction(driveId, docId, actions.editStatus({ ...args.input }));
|
|
77
|
-
return doc
|
|
77
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
78
78
|
},
|
|
79
79
|
Invoice_editPaymentData: async (_, args) => {
|
|
80
80
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
81
81
|
const docId = args.docId || "";
|
|
82
82
|
const doc = await reactor.getDocument(driveId, docId);
|
|
83
83
|
await reactor.addAction(driveId, docId, actions.editPaymentData({ ...args.input }));
|
|
84
|
-
return doc
|
|
84
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
85
85
|
},
|
|
86
86
|
Invoice_setExportedData: async (_, args) => {
|
|
87
87
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
88
88
|
const docId = args.docId || "";
|
|
89
89
|
const doc = await reactor.getDocument(driveId, docId);
|
|
90
90
|
await reactor.addAction(driveId, docId, actions.setExportedData({ ...args.input }));
|
|
91
|
-
return doc
|
|
91
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
92
92
|
},
|
|
93
93
|
Invoice_addPayment: async (_, args) => {
|
|
94
94
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
95
95
|
const docId = args.docId || "";
|
|
96
96
|
const doc = await reactor.getDocument(driveId, docId);
|
|
97
97
|
await reactor.addAction(driveId, docId, actions.addPayment({ ...args.input }));
|
|
98
|
-
return doc
|
|
98
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
99
99
|
},
|
|
100
100
|
Invoice_editIssuer: async (_, args) => {
|
|
101
101
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
102
102
|
const docId = args.docId || "";
|
|
103
103
|
const doc = await reactor.getDocument(driveId, docId);
|
|
104
104
|
await reactor.addAction(driveId, docId, actions.editIssuer({ ...args.input }));
|
|
105
|
-
return doc
|
|
105
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
106
106
|
},
|
|
107
107
|
Invoice_editIssuerBank: async (_, args) => {
|
|
108
108
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
109
109
|
const docId = args.docId || "";
|
|
110
110
|
const doc = await reactor.getDocument(driveId, docId);
|
|
111
111
|
await reactor.addAction(driveId, docId, actions.editIssuerBank({ ...args.input }));
|
|
112
|
-
return doc
|
|
112
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
113
113
|
},
|
|
114
114
|
Invoice_editIssuerWallet: async (_, args) => {
|
|
115
115
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
116
116
|
const docId = args.docId || "";
|
|
117
117
|
const doc = await reactor.getDocument(driveId, docId);
|
|
118
118
|
await reactor.addAction(driveId, docId, actions.editIssuerWallet({ ...args.input }));
|
|
119
|
-
return doc
|
|
119
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
120
120
|
},
|
|
121
121
|
Invoice_editPayer: async (_, args) => {
|
|
122
122
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
123
123
|
const docId = args.docId || "";
|
|
124
124
|
const doc = await reactor.getDocument(driveId, docId);
|
|
125
125
|
await reactor.addAction(driveId, docId, actions.editPayer({ ...args.input }));
|
|
126
|
-
return doc
|
|
126
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
127
127
|
},
|
|
128
128
|
Invoice_editPayerBank: async (_, args) => {
|
|
129
129
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
130
130
|
const docId = args.docId || "";
|
|
131
131
|
const doc = await reactor.getDocument(driveId, docId);
|
|
132
132
|
await reactor.addAction(driveId, docId, actions.editPayerBank({ ...args.input }));
|
|
133
|
-
return doc
|
|
133
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
134
134
|
},
|
|
135
135
|
Invoice_editPayerWallet: async (_, args) => {
|
|
136
136
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
137
137
|
const docId = args.docId || "";
|
|
138
138
|
const doc = await reactor.getDocument(driveId, docId);
|
|
139
139
|
await reactor.addAction(driveId, docId, actions.editPayerWallet({ ...args.input }));
|
|
140
|
-
return doc
|
|
140
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
141
141
|
},
|
|
142
142
|
Invoice_addLineItem: async (_, args) => {
|
|
143
143
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
144
144
|
const docId = args.docId || "";
|
|
145
145
|
const doc = await reactor.getDocument(driveId, docId);
|
|
146
146
|
await reactor.addAction(driveId, docId, actions.addLineItem({ ...args.input }));
|
|
147
|
-
return doc
|
|
147
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
148
148
|
},
|
|
149
149
|
Invoice_editLineItem: async (_, args) => {
|
|
150
150
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
151
151
|
const docId = args.docId || "";
|
|
152
152
|
const doc = await reactor.getDocument(driveId, docId);
|
|
153
153
|
await reactor.addAction(driveId, docId, actions.editLineItem({ ...args.input }));
|
|
154
|
-
return doc
|
|
154
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
155
155
|
},
|
|
156
156
|
Invoice_deleteLineItem: async (_, args) => {
|
|
157
157
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
158
158
|
const docId = args.docId || "";
|
|
159
159
|
const doc = await reactor.getDocument(driveId, docId);
|
|
160
160
|
await reactor.addAction(driveId, docId, actions.deleteLineItem({ ...args.input }));
|
|
161
|
-
return doc
|
|
161
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
162
162
|
},
|
|
163
163
|
Invoice_setLineItemTag: async (_, args) => {
|
|
164
164
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
165
165
|
const docId = args.docId || "";
|
|
166
166
|
const doc = await reactor.getDocument(driveId, docId);
|
|
167
167
|
await reactor.addAction(driveId, docId, actions.setLineItemTag({ ...args.input }));
|
|
168
|
-
return doc
|
|
168
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
169
169
|
},
|
|
170
170
|
Invoice_setInvoiceTag: async (_, args) => {
|
|
171
171
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
172
172
|
const docId = args.docId || "";
|
|
173
173
|
const doc = await reactor.getDocument(driveId, docId);
|
|
174
174
|
await reactor.addAction(driveId, docId, actions.setInvoiceTag({ ...args.input }));
|
|
175
|
-
return doc
|
|
175
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
176
176
|
},
|
|
177
177
|
Invoice_cancel: async (_, args) => {
|
|
178
178
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
179
179
|
const docId = args.docId || "";
|
|
180
180
|
const doc = await reactor.getDocument(driveId, docId);
|
|
181
181
|
await reactor.addAction(driveId, docId, actions.cancel({ ...args.input }));
|
|
182
|
-
return doc
|
|
182
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
183
183
|
},
|
|
184
184
|
Invoice_issue: async (_, args) => {
|
|
185
185
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
186
186
|
const docId = args.docId || "";
|
|
187
187
|
const doc = await reactor.getDocument(driveId, docId);
|
|
188
188
|
await reactor.addAction(driveId, docId, actions.issue({ ...args.input }));
|
|
189
|
-
return doc
|
|
189
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
190
190
|
},
|
|
191
191
|
Invoice_reset: async (_, args) => {
|
|
192
192
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
193
193
|
const docId = args.docId || "";
|
|
194
194
|
const doc = await reactor.getDocument(driveId, docId);
|
|
195
195
|
await reactor.addAction(driveId, docId, actions.reset({ ...args.input }));
|
|
196
|
-
return doc
|
|
196
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
197
197
|
},
|
|
198
198
|
Invoice_reject: async (_, args) => {
|
|
199
199
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
200
200
|
const docId = args.docId || "";
|
|
201
201
|
const doc = await reactor.getDocument(driveId, docId);
|
|
202
202
|
await reactor.addAction(driveId, docId, actions.reject({ ...args.input }));
|
|
203
|
-
return doc
|
|
203
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
204
204
|
},
|
|
205
205
|
Invoice_accept: async (_, args) => {
|
|
206
206
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
207
207
|
const docId = args.docId || "";
|
|
208
208
|
const doc = await reactor.getDocument(driveId, docId);
|
|
209
209
|
await reactor.addAction(driveId, docId, actions.accept({ ...args.input }));
|
|
210
|
-
return doc
|
|
210
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
211
211
|
},
|
|
212
212
|
Invoice_reinstate: async (_, args) => {
|
|
213
213
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
214
214
|
const docId = args.docId || "";
|
|
215
215
|
const doc = await reactor.getDocument(driveId, docId);
|
|
216
216
|
await reactor.addAction(driveId, docId, actions.reinstate({ ...args.input }));
|
|
217
|
-
return doc
|
|
217
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
218
218
|
},
|
|
219
219
|
Invoice_schedulePayment: async (_, args) => {
|
|
220
220
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
221
221
|
const docId = args.docId || "";
|
|
222
222
|
const doc = await reactor.getDocument(driveId, docId);
|
|
223
223
|
await reactor.addAction(driveId, docId, actions.schedulePayment({ ...args.input }));
|
|
224
|
-
return doc
|
|
224
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
225
225
|
},
|
|
226
226
|
Invoice_reapprovePayment: async (_, args) => {
|
|
227
227
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
228
228
|
const docId = args.docId || "";
|
|
229
229
|
const doc = await reactor.getDocument(driveId, docId);
|
|
230
230
|
await reactor.addAction(driveId, docId, actions.reapprovePayment({ ...args.input }));
|
|
231
|
-
return doc
|
|
231
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
232
232
|
},
|
|
233
233
|
Invoice_registerPaymentTx: async (_, args) => {
|
|
234
234
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
235
235
|
const docId = args.docId || "";
|
|
236
236
|
const doc = await reactor.getDocument(driveId, docId);
|
|
237
237
|
await reactor.addAction(driveId, docId, actions.registerPaymentTx({ ...args.input }));
|
|
238
|
-
return doc
|
|
238
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
239
239
|
},
|
|
240
240
|
Invoice_reportPaymentIssue: async (_, args) => {
|
|
241
241
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
242
242
|
const docId = args.docId || "";
|
|
243
243
|
const doc = await reactor.getDocument(driveId, docId);
|
|
244
244
|
await reactor.addAction(driveId, docId, actions.reportPaymentIssue({ ...args.input }));
|
|
245
|
-
return doc
|
|
245
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
246
246
|
},
|
|
247
247
|
Invoice_confirmPayment: async (_, args) => {
|
|
248
248
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
249
249
|
const docId = args.docId || "";
|
|
250
250
|
const doc = await reactor.getDocument(driveId, docId);
|
|
251
251
|
await reactor.addAction(driveId, docId, actions.confirmPayment({ ...args.input }));
|
|
252
|
-
return doc
|
|
252
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
253
253
|
},
|
|
254
254
|
Invoice_closePayment: async (_, args) => {
|
|
255
255
|
const driveId = args.driveId || DEFAULT_DRIVE_ID;
|
|
256
256
|
const docId = args.docId || "";
|
|
257
257
|
const doc = await reactor.getDocument(driveId, docId);
|
|
258
258
|
await reactor.addAction(driveId, docId, actions.closePayment({ ...args.input }));
|
|
259
|
-
return doc
|
|
259
|
+
return (doc?.header?.revision.global ?? 0) + 1;
|
|
260
260
|
},
|
|
261
261
|
Invoice_processGnosisPayment,
|
|
262
262
|
Invoice_createRequestFinancePayment,
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerhousedao/contributor-billing",
|
|
3
3
|
"description": "Document models that help contributors of open organisations get paid anonymously for their work on a monthly basis.",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.43",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"files": [
|
|
@@ -57,9 +57,9 @@
|
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@google-cloud/documentai": "^8.12.0",
|
|
60
|
-
"@powerhousedao/builder-tools": "
|
|
61
|
-
"@powerhousedao/common": "
|
|
62
|
-
"@powerhousedao/design-system": "
|
|
60
|
+
"@powerhousedao/builder-tools": "latest",
|
|
61
|
+
"@powerhousedao/common": "latest",
|
|
62
|
+
"@powerhousedao/design-system": "latest",
|
|
63
63
|
"@powerhousedao/document-engineering": "^1.13.0",
|
|
64
64
|
"@react-pdf/renderer": "^4.3.0",
|
|
65
65
|
"@safe-global/api-kit": "^3.0.1",
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"@types/cors": "^2.8.17",
|
|
71
71
|
"axios": "^1.9.0",
|
|
72
72
|
"cors": "^2.8.5",
|
|
73
|
-
"document-model": "
|
|
73
|
+
"document-model": "latest",
|
|
74
74
|
"dotenv": "^16.5.0",
|
|
75
75
|
"error": "^10.4.0",
|
|
76
76
|
"ethers": "^6.14.0",
|
|
@@ -78,24 +78,25 @@
|
|
|
78
78
|
"graphql": "^16.10.0",
|
|
79
79
|
"graphql-tag": "^2.12.6",
|
|
80
80
|
"lucide-react": "^0.511.0",
|
|
81
|
+
"tailwind-merge": "^3.3.1",
|
|
81
82
|
"world-countries": "^5.1.0",
|
|
82
83
|
"zod": "^3.24.2"
|
|
83
84
|
},
|
|
84
85
|
"devDependencies": {
|
|
85
86
|
"@eslint/js": "^9.25.0",
|
|
86
87
|
"@powerhousedao/analytics-engine-core": "^0.5.0",
|
|
87
|
-
"@powerhousedao/codegen": "
|
|
88
|
-
"@powerhousedao/ph-cli": "
|
|
89
|
-
"@powerhousedao/reactor-api": "
|
|
90
|
-
"@powerhousedao/reactor-browser": "
|
|
91
|
-
"@powerhousedao/reactor-local": "
|
|
92
|
-
"@powerhousedao/scalars": "
|
|
88
|
+
"@powerhousedao/codegen": "latest",
|
|
89
|
+
"@powerhousedao/ph-cli": "latest",
|
|
90
|
+
"@powerhousedao/reactor-api": "latest",
|
|
91
|
+
"@powerhousedao/reactor-browser": "latest",
|
|
92
|
+
"@powerhousedao/reactor-local": "latest",
|
|
93
|
+
"@powerhousedao/scalars": "latest",
|
|
93
94
|
"@tailwindcss/cli": "^4.1.8",
|
|
94
95
|
"@types/node": "^22.15.17",
|
|
95
96
|
"@types/react": "^19.1.4",
|
|
96
97
|
"@vitejs/plugin-react": "^4.4.1",
|
|
97
98
|
"bun-types": "^1.2.11",
|
|
98
|
-
"document-drive": "
|
|
99
|
+
"document-drive": "latest",
|
|
99
100
|
"eslint": "^9.25.0",
|
|
100
101
|
"eslint-plugin-react": "^7.37.5",
|
|
101
102
|
"eslint-plugin-react-hooks": "^5.2.0",
|