@wirecat/cli-memo 0.131.63 → 0.131.65
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/bin/memo.js +2 -2
- package/dist/bundle/{app-server-QBJG7OGQ.js → app-server-7KM4MSDA.js} +9 -9
- package/dist/bundle/{auto-LGA3VXKQ.js → auto-4KOZDLIU.js} +16 -16
- package/dist/bundle/{chunk-LK6D26RK.js → chunk-3SCHFNUH.js} +5 -5
- package/dist/bundle/{chunk-HGNWJJDT.js → chunk-3YNJBKGV.js} +13 -1
- package/dist/bundle/{chunk-Q3VEUHC7.js → chunk-6OS7PTOC.js} +3 -3
- package/dist/bundle/{chunk-BOMHJR2E.js → chunk-BEMVAPYA.js} +3 -3
- package/dist/bundle/{chunk-K4WCDPDL.js → chunk-C4DJLVJQ.js} +4 -4
- package/dist/bundle/{chunk-2UCLF4AO.js → chunk-DXTNBVLV.js} +394 -115
- package/dist/bundle/{chunk-GNHDE7FH.js → chunk-FHZKHKBJ.js} +9 -9
- package/dist/bundle/{chunk-TBSWOVM3.js → chunk-FKUA3BTM.js} +14 -14
- package/dist/bundle/{chunk-RSG7BRXI.js → chunk-FUIUS3IG.js} +25 -1
- package/dist/bundle/{chunk-TSKGEK2S.js → chunk-LVLFLWGY.js} +3 -3
- package/dist/bundle/{chunk-O2NQCWRM.js → chunk-ML46T7UC.js} +8 -8
- package/dist/bundle/{chunk-WDZOEBTE.js → chunk-NH3A5QTW.js} +2 -2
- package/dist/bundle/{chunk-6OZ2WI7Y.js → chunk-NIJZXGJN.js} +1 -1
- package/dist/bundle/{chunk-EGI6JHIA.js → chunk-NRHF7TQ4.js} +2 -2
- package/dist/bundle/{chunk-WDWKG7FJ.js → chunk-PVGK67AJ.js} +17 -0
- package/dist/bundle/{chunk-E5JQFEIQ.js → chunk-QHNAPLVB.js} +4 -4
- package/dist/bundle/{chunk-SJ55SMBE.js → chunk-QTF4ZXOL.js} +2 -1
- package/dist/bundle/{chunk-5Q534L4I.js → chunk-SIOUPPN7.js} +5 -4
- package/dist/bundle/{chunk-OXBETHGN.js → chunk-UXAP7MNL.js} +4 -4
- package/dist/bundle/{chunk-3ZXWLFUG.js → chunk-VLUDHCCX.js} +3 -3
- package/dist/bundle/{chunk-4BKSE3CG.js → chunk-X5CRFU4E.js} +4 -4
- package/dist/bundle/{chunk-YVJAD5E7.js → chunk-YLG2M2TF.js} +38 -5
- package/dist/bundle/{command-contract-SIXWLKAS.js → command-contract-PLB2JGFJ.js} +2 -2
- package/dist/bundle/{entry-SFLEGFSN.js → entry-MUE6HWX3.js} +1 -1
- package/dist/bundle/{failure-OGSLUNT6.js → failure-CRWMZZBO.js} +14 -14
- package/dist/bundle/{first-run-ZKDGFY6P.js → first-run-3JYWLJCH.js} +1 -1
- package/dist/bundle/{first-screen-IQEU7XF2.js → first-screen-QH34AIFV.js} +3 -3
- package/dist/bundle/{mcp-Y4XMDC5Q.js → mcp-QX2D6EXA.js} +6 -6
- package/dist/bundle/memo.js +6 -6
- package/dist/bundle/{program-ZHLCEVWB.js → program-RM2L3LIT.js} +1798 -434
- package/dist/bundle/{server-IQILK5YP.js → server-L622PMVC.js} +9 -9
- package/dist/bundle/{server-NKI7SVK5.js → server-SJVP2XXD.js} +6 -6
- package/dist/bundle/{server-I5BPRS5C.js → server-XKSIHWM2.js} +19 -19
- package/dist/bundle/{store-6H4FPFTX.js → store-M5QSIRWJ.js} +1 -1
- package/dist/bundle/{store-maintenance-command-IFVWSQMJ.js → store-maintenance-command-PQCO5ICC.js} +5 -5
- package/dist/bundle/{update-YMILPFRY.js → update-PQUASMQN.js} +15 -15
- package/dist/digest/command.d.ts.map +1 -1
- package/dist/digest/command.js +4 -3
- package/dist/digest/command.js.map +1 -1
- package/dist/digest/digest.d.ts.map +1 -1
- package/dist/digest/digest.js +2 -0
- package/dist/digest/digest.js.map +1 -1
- package/dist/digest/sync-health.d.ts +6 -3
- package/dist/digest/sync-health.d.ts.map +1 -1
- package/dist/digest/sync-health.js +46 -20
- package/dist/digest/sync-health.js.map +1 -1
- package/dist/digest/tasks.d.ts +2 -0
- package/dist/digest/tasks.d.ts.map +1 -1
- package/dist/digest/tasks.js +3 -1
- package/dist/digest/tasks.js.map +1 -1
- package/dist/discovery/command.d.ts.map +1 -1
- package/dist/discovery/command.js +6 -0
- package/dist/discovery/command.js.map +1 -1
- package/dist/events/command.d.ts +4 -0
- package/dist/events/command.d.ts.map +1 -0
- package/dist/events/command.js +35 -0
- package/dist/events/command.js.map +1 -0
- package/dist/events/events.d.ts +52 -0
- package/dist/events/events.d.ts.map +1 -0
- package/dist/events/events.js +199 -0
- package/dist/events/events.js.map +1 -0
- package/dist/examples.d.ts.map +1 -1
- package/dist/examples.js +90 -3
- package/dist/examples.js.map +1 -1
- package/dist/finance/command.d.ts +1 -1
- package/dist/finance/command.d.ts.map +1 -1
- package/dist/finance/command.js +13 -30
- package/dist/finance/command.js.map +1 -1
- package/dist/finance/contracts-command.d.ts +12 -0
- package/dist/finance/contracts-command.d.ts.map +1 -0
- package/dist/finance/contracts-command.js +110 -0
- package/dist/finance/contracts-command.js.map +1 -0
- package/dist/finance/deals-command.d.ts.map +1 -1
- package/dist/finance/deals-command.js +5 -4
- package/dist/finance/deals-command.js.map +1 -1
- package/dist/finance/lines-command.d.ts +37 -0
- package/dist/finance/lines-command.d.ts.map +1 -0
- package/dist/finance/lines-command.js +70 -0
- package/dist/finance/lines-command.js.map +1 -0
- package/dist/finance/orders-command.d.ts.map +1 -1
- package/dist/finance/orders-command.js +5 -2
- package/dist/finance/orders-command.js.map +1 -1
- package/dist/finance/products-command.d.ts +12 -0
- package/dist/finance/products-command.d.ts.map +1 -0
- package/dist/finance/products-command.js +99 -0
- package/dist/finance/products-command.js.map +1 -0
- package/dist/finance/subscriptions-command.d.ts +12 -0
- package/dist/finance/subscriptions-command.d.ts.map +1 -0
- package/dist/finance/subscriptions-command.js +153 -0
- package/dist/finance/subscriptions-command.js.map +1 -0
- package/dist/finance/transactions-command.d.ts +12 -0
- package/dist/finance/transactions-command.d.ts.map +1 -0
- package/dist/finance/transactions-command.js +137 -0
- package/dist/finance/transactions-command.js.map +1 -0
- package/dist/finance/wallets-command.d.ts +12 -0
- package/dist/finance/wallets-command.d.ts.map +1 -0
- package/dist/finance/wallets-command.js +106 -0
- package/dist/finance/wallets-command.js.map +1 -0
- package/dist/finance/written.d.ts +37 -0
- package/dist/finance/written.d.ts.map +1 -0
- package/dist/finance/written.js +36 -0
- package/dist/finance/written.js.map +1 -0
- package/dist/knowledge/command.d.ts.map +1 -1
- package/dist/knowledge/command.js +3 -2
- package/dist/knowledge/command.js.map +1 -1
- package/dist/mcp/permissions.d.ts +1 -1
- package/dist/mcp/permissions.d.ts.map +1 -1
- package/dist/mcp/permissions.js +1 -0
- package/dist/mcp/permissions.js.map +1 -1
- package/dist/options.d.ts +2 -0
- package/dist/options.d.ts.map +1 -1
- package/dist/options.js +2 -0
- package/dist/options.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +174 -0
- package/dist/program.js.map +1 -1
- package/dist/reasons.d.ts.map +1 -1
- package/dist/reasons.js +24 -0
- package/dist/reasons.js.map +1 -1
- package/dist/records/import.d.ts +2 -4
- package/dist/records/import.d.ts.map +1 -1
- package/dist/records/import.js +41 -41
- package/dist/records/import.js.map +1 -1
- package/dist/records/input.d.ts +20 -0
- package/dist/records/input.d.ts.map +1 -0
- package/dist/records/input.js +115 -0
- package/dist/records/input.js.map +1 -0
- package/dist/records/mapping.d.ts +16 -1
- package/dist/records/mapping.d.ts.map +1 -1
- package/dist/records/mapping.js +24 -11
- package/dist/records/mapping.js.map +1 -1
- package/dist/records/record-commands.d.ts +8 -0
- package/dist/records/record-commands.d.ts.map +1 -0
- package/dist/records/record-commands.js +89 -0
- package/dist/records/record-commands.js.map +1 -0
- package/dist/records/sources.d.ts +48 -0
- package/dist/records/sources.d.ts.map +1 -0
- package/dist/records/sources.js +72 -0
- package/dist/records/sources.js.map +1 -0
- package/dist/review/kinds.d.ts +1 -1
- package/dist/review/kinds.d.ts.map +1 -1
- package/dist/review/kinds.js +4 -0
- package/dist/review/kinds.js.map +1 -1
- package/dist/review/review.d.ts.map +1 -1
- package/dist/review/review.js +4 -0
- package/dist/review/review.js.map +1 -1
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +34 -0
- package/dist/rows.js.map +1 -1
- package/dist/search/lane-gates.js +1 -1
- package/dist/search/lane-gates.js.map +1 -1
- package/dist/show/command.d.ts +3 -0
- package/dist/show/command.d.ts.map +1 -1
- package/dist/show/command.js +21 -1
- package/dist/show/command.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/skills/cli-memo/SKILL.md +8 -5
- package/skills/cli-memo/topics/money.md +20 -1
- package/skills/cli-memo/topics/proposals.md +8 -5
- package/skills/cli-memo/topics/search.md +7 -0
- package/skills/morning-digest/SKILL.md +2 -1
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { MessageStore } from "@wirecat/cli-core/store";
|
|
2
|
+
import type { Command } from "commander";
|
|
3
|
+
import { type answers } from "../answer.js";
|
|
4
|
+
import { whoRuns } from "../author.js";
|
|
5
|
+
type By = Awaited<ReturnType<typeof whoRuns>>;
|
|
6
|
+
interface LineInput {
|
|
7
|
+
by: By;
|
|
8
|
+
quantity: string;
|
|
9
|
+
unitPrice?: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
product?: string;
|
|
12
|
+
}
|
|
13
|
+
/** The two parents with lines; each keeps its own store calls and the words its help names it by. */
|
|
14
|
+
export declare const LINE_PARENTS: {
|
|
15
|
+
readonly order: {
|
|
16
|
+
readonly has: "an order that has a currency (orders add with an amount)";
|
|
17
|
+
readonly shown: "orders show";
|
|
18
|
+
readonly add: (store: MessageStore, ref: string, line: LineInput) => Promise<import("@wirecat/cli-core/store").OrderDetail>;
|
|
19
|
+
readonly remove: (store: MessageStore, ref: string, input: {
|
|
20
|
+
position: number;
|
|
21
|
+
by: By;
|
|
22
|
+
}) => Promise<import("@wirecat/cli-core/store").OrderDetail>;
|
|
23
|
+
};
|
|
24
|
+
readonly invoice: {
|
|
25
|
+
readonly has: "an invoice that is not void; the total never falls below what confirmed payments settled";
|
|
26
|
+
readonly shown: "invoices show";
|
|
27
|
+
readonly add: (store: MessageStore, ref: string, line: LineInput) => Promise<import("@wirecat/cli-core/store").InvoiceDetail>;
|
|
28
|
+
readonly remove: (store: MessageStore, ref: string, input: {
|
|
29
|
+
position: number;
|
|
30
|
+
by: By;
|
|
31
|
+
}) => Promise<import("@wirecat/cli-core/store").InvoiceDetail>;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
/** `memo orders lines` and `memo invoices lines`: what it is made of; its total is then their sum. */
|
|
35
|
+
export declare const lineCommands: (parent: Command, kind: keyof typeof LINE_PARENTS, run: ReturnType<typeof answers>["run"], env: NodeJS.ProcessEnv) => void;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=lines-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lines-command.d.ts","sourceRoot":"","sources":["../../src/finance/lines-command.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,cAAc,CAAA;AACvD,OAAO,EAAY,OAAO,EAAE,MAAM,cAAc,CAAA;AAIhD,KAAK,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,CAAA;AAE7C,UAAU,SAAS;IACjB,EAAE,EAAE,EAAE,CAAA;IACN,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,qGAAqG;AACrG,eAAO,MAAM,YAAY;aACvB,KAAK;iBACH,GAAG,EAAE,0DAA0D;iBAC/D,KAAK,EAAE,aAAa;iBACpB,GAAG,UAAU,YAAY,OAAO,MAAM,QAAQ,SAAS;iBACvD,MAAM,UAAU,YAAY,OAAO,MAAM,SAAS;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,EAAE,CAAA;SAAE;;aAGhF,OAAO;iBACL,GAAG,EAAE,0FAA0F;iBAC/F,KAAK,EAAE,eAAe;iBACtB,GAAG,UAAU,YAAY,OAAO,MAAM,QAAQ,SAAS;iBACvD,MAAM,UAAU,YAAY,OAAO,MAAM,SAAS;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,EAAE,CAAA;SAAE;;CAGxE,CAAA;AAEV,sGAAsG;AACtG,eAAO,MAAM,YAAY,WACf,OAAO,QACT,MAAM,OAAO,YAAY,OAC1B,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC,KAAK,CAAC,OACjC,MAAM,CAAC,UAAU,KACrB,IAkEF,CAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { annotate } from "@wirecat/cli-base/commands";
|
|
2
|
+
import { LOCAL_WRITE } from "@wirecat/cli-core/cli";
|
|
3
|
+
import { itemAnswer } from "../answer.js";
|
|
4
|
+
import { byOption, whoRuns } from "../author.js";
|
|
5
|
+
import { positive } from "../options.js";
|
|
6
|
+
import { given, json, needed } from "./written.js";
|
|
7
|
+
/** The two parents with lines; each keeps its own store calls and the words its help names it by. */
|
|
8
|
+
export const LINE_PARENTS = {
|
|
9
|
+
order: {
|
|
10
|
+
has: "an order that has a currency (orders add with an amount)",
|
|
11
|
+
shown: "orders show",
|
|
12
|
+
add: (store, ref, line) => store.orders.addLine(ref, line),
|
|
13
|
+
remove: (store, ref, input) => store.orders.removeLine(ref, input),
|
|
14
|
+
},
|
|
15
|
+
invoice: {
|
|
16
|
+
has: "an invoice that is not void; the total never falls below what confirmed payments settled",
|
|
17
|
+
shown: "invoices show",
|
|
18
|
+
add: (store, ref, line) => store.finance.addInvoiceLine(ref, line),
|
|
19
|
+
remove: (store, ref, input) => store.finance.removeInvoiceLine(ref, input),
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
/** `memo orders lines` and `memo invoices lines`: what it is made of; its total is then their sum. */
|
|
23
|
+
export const lineCommands = (parent, kind, run, env) => {
|
|
24
|
+
const { has, shown, add, remove } = LINE_PARENTS[kind];
|
|
25
|
+
const one = kind === "order" ? "an order" : "an invoice";
|
|
26
|
+
const who = `you change any ${kind}'s lines; an agent only those of ${one} it proposed that is still proposed`;
|
|
27
|
+
const lines = parent
|
|
28
|
+
.command("lines")
|
|
29
|
+
.description(`the lines of ${one}, each a quantity at a price; its total is their sum. ${who}`)
|
|
30
|
+
.summary(`the lines of ${one}`);
|
|
31
|
+
const asker = (ref) => `change ${ref}'s lines as yours?`;
|
|
32
|
+
json(byOption(annotate(lines.command("add"), {
|
|
33
|
+
effects: LOCAL_WRITE,
|
|
34
|
+
output: { entity: kind },
|
|
35
|
+
literal_after_dashes: true,
|
|
36
|
+
})
|
|
37
|
+
.option("--product <product>", "the product or service it is: its name and price are copied onto the line")
|
|
38
|
+
.option("--amount <decimal>", "the price of one, such as 10000.00; the product's when left out with --product")))
|
|
39
|
+
.description(`add a line at the end of ${has}: quantity × price, and the total becomes the sum of the lines. With ` +
|
|
40
|
+
`--product its name and price are copied, so a later price change leaves the line as it is, and --amount ` +
|
|
41
|
+
`sets another price; without --product, --amount is needed. ${who}`)
|
|
42
|
+
.summary(`add a line to ${one}`)
|
|
43
|
+
.argument(`<${kind}>`, `${kind}:<id>`)
|
|
44
|
+
.argument("<quantity>", "how many, a decimal such as 12 or 1.5")
|
|
45
|
+
.argument("[description...]", "what the line is, in a few words; the product's name when left out")
|
|
46
|
+
.action(async (ref, quantity, words, options, command) => {
|
|
47
|
+
if (options.product === undefined)
|
|
48
|
+
needed(options.amount, "--amount", "the price of one, or --product");
|
|
49
|
+
const by = await whoRuns(command, env, { asOwner: options.asOwner, question: asker(ref) });
|
|
50
|
+
await run(options.json, async (store) => itemAnswer(await add(store, ref, {
|
|
51
|
+
by,
|
|
52
|
+
quantity,
|
|
53
|
+
...given({
|
|
54
|
+
unitPrice: options.amount,
|
|
55
|
+
description: words.length > 0 ? words.join(" ") : undefined,
|
|
56
|
+
product: options.product,
|
|
57
|
+
}),
|
|
58
|
+
})));
|
|
59
|
+
});
|
|
60
|
+
json(byOption(annotate(lines.command("remove"), { effects: LOCAL_WRITE, output: { entity: kind } })))
|
|
61
|
+
.description(`take a line off ${one}; the others keep their positions, and the last line stays. ${who}`)
|
|
62
|
+
.summary(`take a line off ${one}`)
|
|
63
|
+
.argument(`<${kind}>`, `${kind}:<id>`)
|
|
64
|
+
.argument("<position>", `the line's position, from 1, as ${shown} lists it`, positive)
|
|
65
|
+
.action(async (ref, position, options, command) => {
|
|
66
|
+
const by = await whoRuns(command, env, { asOwner: options.asOwner, question: asker(ref) });
|
|
67
|
+
await run(options.json, async (store) => itemAnswer(await remove(store, ref, { position, by })));
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=lines-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lines-command.js","sourceRoot":"","sources":["../../src/finance/lines-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orders-command.d.ts","sourceRoot":"","sources":["../../src/finance/orders-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAK1D,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,yBAAyB,CAAA;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"orders-command.d.ts","sourceRoot":"","sources":["../../src/finance/orders-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAK1D,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,yBAAyB,CAAA;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAWxC,eAAO,MAAM,WAAW;qBACd,OAAO;sBACN,QAAQ;;CAUe,CAAA;AAElC,eAAO,MAAM,UAAU,UACd,YAAY,SACZ,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,UACrC,MAAM,+DAaf,CAAA;AAqBD,iGAAiG;AACjG,eAAO,MAAM,aAAa,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IA4E1F,CAAA"}
|
|
@@ -6,8 +6,11 @@ import { answers, itemAnswer } from "../answer.js";
|
|
|
6
6
|
import { byOption, whoRuns } from "../author.js";
|
|
7
7
|
import { positive } from "../options.js";
|
|
8
8
|
import { pageOf } from "../page.js";
|
|
9
|
+
import { withSources } from "../records/sources.js";
|
|
9
10
|
import { canonicalProject } from "../vocabulary/project.js";
|
|
10
11
|
import { dayOf, partyOf } from "./finance.js";
|
|
12
|
+
import { lineCommands } from "./lines-command.js";
|
|
13
|
+
import { json } from "./written.js";
|
|
11
14
|
export const ORDER_QUERY = {
|
|
12
15
|
entity: "order",
|
|
13
16
|
backend: "native",
|
|
@@ -39,7 +42,6 @@ const oneOf = (value, allowed, flag) => {
|
|
|
39
42
|
throw new CliError("validation_error", `${flag} is one of ${allowed.join(", ")}`, { param: flag });
|
|
40
43
|
return value;
|
|
41
44
|
};
|
|
42
|
-
const json = (command) => command.option("--json", "print JSON; --json=ref,title keeps only those fields");
|
|
43
45
|
/** `memo orders`: what the owner, his business or a client ordered, and how far delivery got. */
|
|
44
46
|
export const orderCommands = (program, streams, env) => {
|
|
45
47
|
const { run } = answers(program, streams, env);
|
|
@@ -53,7 +55,7 @@ export const orderCommands = (program, streams, env) => {
|
|
|
53
55
|
json(annotate(orders.command("show"), { effects: LOCAL_READ, output: { entity: "order" } }))
|
|
54
56
|
.description("one order with its customer, shop, amount, status and the mail it was read from")
|
|
55
57
|
.argument("<ref>", "order:<id>")
|
|
56
|
-
.action((ref, options) => run(options.json, async (store) => itemAnswer(await store.orders.get(ref))));
|
|
58
|
+
.action((ref, options, command) => run(options.json, async (store) => itemAnswer(await withSources(command, store, await store.orders.get(ref)))));
|
|
57
59
|
json(byOption(annotate(orders.command("add"), { effects: LOCAL_WRITE, output: { entity: "order" }, literal_after_dashes: true })
|
|
58
60
|
.option("--kind <kind>", `why it was ordered: ${ORDER_PURPOSES.join(", ")}`)
|
|
59
61
|
.option("--person <uid>", "whom it is for, when not you: person:<id>")
|
|
@@ -88,5 +90,6 @@ export const orderCommands = (program, streams, env) => {
|
|
|
88
90
|
}));
|
|
89
91
|
});
|
|
90
92
|
});
|
|
93
|
+
lineCommands(orders, "order", run, env);
|
|
91
94
|
};
|
|
92
95
|
//# sourceMappingURL=orders-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orders-command.js","sourceRoot":"","sources":["../../src/finance/orders-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAgB,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAA;AAErD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACnF,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAGjG,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"orders-command.js","sourceRoot":"","sources":["../../src/finance/orders-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Streams } from "@wirecat/cli-base";
|
|
2
|
+
import type { MessageStore } from "@wirecat/cli-core/store";
|
|
3
|
+
import type { Command } from "commander";
|
|
4
|
+
export declare const PRODUCT_QUERY: {
|
|
5
|
+
readonly entity: "product";
|
|
6
|
+
readonly backend: "native";
|
|
7
|
+
readonly fields: readonly [import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec];
|
|
8
|
+
};
|
|
9
|
+
export declare const listProducts: (store: MessageStore, words: readonly string[] | string | undefined, limit?: number) => Promise<import("@wirecat/cli-core/cli").ListBody<unknown>>;
|
|
10
|
+
/** `memo products`: what the owner sells or buys, written directly by anyone, as it feeds no total. */
|
|
11
|
+
export declare const productCommands: (program: Command, streams: Streams, env: NodeJS.ProcessEnv) => void;
|
|
12
|
+
//# sourceMappingURL=products-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"products-command.d.ts","sourceRoot":"","sources":["../../src/finance/products-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAKhD,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,yBAAyB,CAAA;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AASxC,eAAO,MAAM,aAAa;qBAChB,SAAS;sBACR,QAAQ;;CAOe,CAAA;AAElC,eAAO,MAAM,YAAY,UAChB,YAAY,SACZ,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,UACrC,MAAM,+DAUf,CAAA;AAqBD,uGAAuG;AACvG,eAAO,MAAM,eAAe,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAoG5F,CAAA"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { annotate } from "@wirecat/cli-base/commands";
|
|
2
|
+
import { CATALOG_KINDS } from "@wirecat/cli-core";
|
|
3
|
+
import { LOCAL_READ, LOCAL_WRITE, queryTerms, termField, withQuery } from "@wirecat/cli-core/cli";
|
|
4
|
+
import { answers, itemAnswer } from "../answer.js";
|
|
5
|
+
import { authorOf } from "../author.js";
|
|
6
|
+
import { positive } from "../options.js";
|
|
7
|
+
import { pageOf } from "../page.js";
|
|
8
|
+
import { withSources } from "../records/sources.js";
|
|
9
|
+
import { today } from "./finance.js";
|
|
10
|
+
import { given, json, onOff, optionalChoice } from "./written.js";
|
|
11
|
+
export const PRODUCT_QUERY = {
|
|
12
|
+
entity: "product",
|
|
13
|
+
backend: "native",
|
|
14
|
+
fields: [
|
|
15
|
+
termField("kind", "enum", "kind:service", { values: CATALOG_KINDS }),
|
|
16
|
+
termField("supplier", "ref", 'supplier:"organization:3"'),
|
|
17
|
+
termField("archived", "bool", "archived:true"),
|
|
18
|
+
termField("name", "kw", 'name:"Bike rental"'),
|
|
19
|
+
],
|
|
20
|
+
};
|
|
21
|
+
export const listProducts = async (store, words, limit) => {
|
|
22
|
+
const terms = queryTerms(words, PRODUCT_QUERY, "products list");
|
|
23
|
+
const filter = given({
|
|
24
|
+
kind: terms.get("kind"),
|
|
25
|
+
supplier: terms.get("supplier"),
|
|
26
|
+
archived: terms.has("archived") ? terms.get("archived") === "true" : undefined,
|
|
27
|
+
name: terms.get("name"),
|
|
28
|
+
});
|
|
29
|
+
return pageOf("products list", limit, (most) => store.products.list({ ...filter, limit: most }));
|
|
30
|
+
};
|
|
31
|
+
/** `memo products`: what the owner sells or buys, written directly by anyone, as it feeds no total. */
|
|
32
|
+
export const productCommands = (program, streams, env) => {
|
|
33
|
+
const { run } = answers(program, streams, env);
|
|
34
|
+
const products = program
|
|
35
|
+
.command("products")
|
|
36
|
+
.description("goods and services you sell or buy, with their prices; a line that names one copies its price, so a later " +
|
|
37
|
+
"price change leaves the line as it was")
|
|
38
|
+
.summary("goods and services you sell or buy, with their prices");
|
|
39
|
+
withQuery(json(annotate(products.command("list"), { effects: LOCAL_READ })).description("products and services, by name; archived:true lists those no longer sold"), PRODUCT_QUERY)
|
|
40
|
+
.option("--limit <n>", "most products, up to 500", positive, 100)
|
|
41
|
+
.action((words, { json, limit }) => run(json, (store) => listProducts(store, words, limit)));
|
|
42
|
+
json(annotate(products.command("show"), { effects: LOCAL_READ, output: { entity: "product" } }))
|
|
43
|
+
.description("one product or service with its price, unit, supplier and stock code")
|
|
44
|
+
.argument("<product>", "product:<id>")
|
|
45
|
+
.action((ref, options, command) => run(options.json, async (store) => itemAnswer(await withSources(command, store, await store.products.get(ref)))));
|
|
46
|
+
json(annotate(products.command("add"), {
|
|
47
|
+
effects: LOCAL_WRITE,
|
|
48
|
+
output: { entity: "product" },
|
|
49
|
+
literal_after_dashes: true,
|
|
50
|
+
})
|
|
51
|
+
.option("--kind <kind>", `${CATALOG_KINDS.join(" or ")}; product when left out`)
|
|
52
|
+
.option("--unit <text>", "what one of it is counted in, such as hour or month")
|
|
53
|
+
.option("--sku <code>", "the stock code the seller gives it")
|
|
54
|
+
.option("--supplier <party>", "who supplies it, when not you: person:<uid> or organization:<id>")
|
|
55
|
+
.option("--description <text>", "what it is, in a sentence"))
|
|
56
|
+
.description("add a product or service you sell or buy; anyone adds one directly, as a price feeds no total")
|
|
57
|
+
.summary("add a product or service")
|
|
58
|
+
.argument("<name>", "its name, as an invoice or order line prints it")
|
|
59
|
+
.argument("[amount]", "the price of one unit, a decimal such as 10000.00")
|
|
60
|
+
.argument("[currency]", "ISO 4217, such as RUB; given with the amount")
|
|
61
|
+
.action((name, amount, currency, options) => run(options.json, async (store) => itemAnswer(await store.products.add({
|
|
62
|
+
by: authorOf(env),
|
|
63
|
+
name,
|
|
64
|
+
...given({
|
|
65
|
+
kind: optionalChoice(options.kind, CATALOG_KINDS, "--kind"),
|
|
66
|
+
unitPrice: amount,
|
|
67
|
+
currency,
|
|
68
|
+
unit: options.unit,
|
|
69
|
+
sku: options.sku,
|
|
70
|
+
supplier: options.supplier,
|
|
71
|
+
description: options.description,
|
|
72
|
+
}),
|
|
73
|
+
}))));
|
|
74
|
+
json(annotate(products.command("update"), { effects: LOCAL_WRITE, output: { entity: "product" } })
|
|
75
|
+
.option("--amount <decimal>", "the new price of one unit, such as 12000.00; give --currency with it")
|
|
76
|
+
.option("--currency <code>", "an ISO 4217 code, such as RUB")
|
|
77
|
+
.option("--title <title>", "its new name")
|
|
78
|
+
.option("--unit <text>", "what one of it is counted in, such as hour or month")
|
|
79
|
+
.option("--description <text>", "what it is, in a sentence")
|
|
80
|
+
.option("--archived <on|off>", "on: no longer sold, and lines and subscriptions keep pointing at it; off: sold again"))
|
|
81
|
+
.description("change a product's price, name, unit or description, or archive it; lines already written keep theirs")
|
|
82
|
+
.summary("change or archive a product")
|
|
83
|
+
.argument("<product>", "product:<id>")
|
|
84
|
+
.action((ref, options) => run(options.json, async (store) => {
|
|
85
|
+
const archived = onOff(options.archived, "--archived");
|
|
86
|
+
return itemAnswer(await store.products.update(ref, {
|
|
87
|
+
by: authorOf(env),
|
|
88
|
+
...given({
|
|
89
|
+
name: options.title,
|
|
90
|
+
unitPrice: options.amount,
|
|
91
|
+
currency: options.currency,
|
|
92
|
+
unit: options.unit,
|
|
93
|
+
description: options.description,
|
|
94
|
+
archivedDate: archived === undefined ? undefined : archived ? today() : null,
|
|
95
|
+
}),
|
|
96
|
+
}));
|
|
97
|
+
}));
|
|
98
|
+
};
|
|
99
|
+
//# sourceMappingURL=products-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"products-command.js","sourceRoot":"","sources":["../../src/finance/products-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Streams } from "@wirecat/cli-base";
|
|
2
|
+
import type { MessageStore } from "@wirecat/cli-core/store";
|
|
3
|
+
import type { Command } from "commander";
|
|
4
|
+
export declare const SUBSCRIPTION_QUERY: {
|
|
5
|
+
readonly entity: "subscription";
|
|
6
|
+
readonly backend: "native";
|
|
7
|
+
readonly fields: readonly [import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec];
|
|
8
|
+
};
|
|
9
|
+
export declare const listSubscriptions: (store: MessageStore, words: readonly string[] | string | undefined, limit?: number) => Promise<import("@wirecat/cli-core/cli").ListBody<unknown>>;
|
|
10
|
+
/** `memo subscriptions`: what the owner bills or pays on a schedule, and its price history. */
|
|
11
|
+
export declare const subscriptionCommands: (program: Command, streams: Streams, env: NodeJS.ProcessEnv) => void;
|
|
12
|
+
//# sourceMappingURL=subscriptions-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions-command.d.ts","sourceRoot":"","sources":["../../src/finance/subscriptions-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAKhD,OAAO,KAAK,EAAE,YAAY,EAAsB,MAAM,yBAAyB,CAAA;AAC/E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAUxC,eAAO,MAAM,kBAAkB;qBACrB,cAAc;sBACb,QAAQ;;CAUe,CAAA;AAElC,eAAO,MAAM,iBAAiB,UACrB,YAAY,SACZ,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,UACrC,MAAM,+DAcf,CAAA;AAyCD,+FAA+F;AAC/F,eAAO,MAAM,oBAAoB,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IAoKjG,CAAA"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { annotate } from "@wirecat/cli-base/commands";
|
|
2
|
+
import { FINANCE_REVIEWS, INVOICE_DIRECTIONS, SUBSCRIPTION_STATUSES } from "@wirecat/cli-core";
|
|
3
|
+
import { LOCAL_READ, LOCAL_WRITE, queryTerms, termField, withQuery } from "@wirecat/cli-core/cli";
|
|
4
|
+
import { answers, itemAnswer } from "../answer.js";
|
|
5
|
+
import { byOption, whoRuns } from "../author.js";
|
|
6
|
+
import { positive } from "../options.js";
|
|
7
|
+
import { pageOf } from "../page.js";
|
|
8
|
+
import { withSources } from "../records/sources.js";
|
|
9
|
+
import { canonicalProject } from "../vocabulary/project.js";
|
|
10
|
+
import { dayOf, today } from "./finance.js";
|
|
11
|
+
import { choice, given, json, needed, optionalChoice, PROPOSES, writeMeta, writtenBy } from "./written.js";
|
|
12
|
+
export const SUBSCRIPTION_QUERY = {
|
|
13
|
+
entity: "subscription",
|
|
14
|
+
backend: "native",
|
|
15
|
+
fields: [
|
|
16
|
+
termField("status", "enum", "status:active", { values: SUBSCRIPTION_STATUSES }),
|
|
17
|
+
termField("direction", "enum", "direction:payable", { values: INVOICE_DIRECTIONS }),
|
|
18
|
+
termField("supplier", "ref", 'supplier:"organization:3"'),
|
|
19
|
+
termField("customer", "ref", 'customer:"organization:3"'),
|
|
20
|
+
termField("project", "kw", "project:PMED"),
|
|
21
|
+
termField("review", "enum", "review:proposed", { values: FINANCE_REVIEWS }),
|
|
22
|
+
termField("renews", "time", "renews:2026-12-01"),
|
|
23
|
+
],
|
|
24
|
+
};
|
|
25
|
+
export const listSubscriptions = async (store, words, limit) => {
|
|
26
|
+
const terms = queryTerms(words, SUBSCRIPTION_QUERY, "subscriptions list");
|
|
27
|
+
const project = terms.get("project");
|
|
28
|
+
const filter = given({
|
|
29
|
+
status: terms.get("status"),
|
|
30
|
+
direction: terms.get("direction"),
|
|
31
|
+
supplier: terms.get("supplier"),
|
|
32
|
+
customer: terms.get("customer"),
|
|
33
|
+
review: terms.get("review"),
|
|
34
|
+
renewsBy: dayOf(terms.get("renews")),
|
|
35
|
+
project: project === undefined ? undefined : await canonicalProject(store, project),
|
|
36
|
+
});
|
|
37
|
+
return pageOf("subscriptions list", limit, (most) => store.subscriptions.list({ ...filter, limit: most }));
|
|
38
|
+
};
|
|
39
|
+
const parts = (command) => command
|
|
40
|
+
.option("--status <state>", `${SUBSCRIPTION_STATUSES.join(", ")}; trial needs --trial-end-date`)
|
|
41
|
+
.option("--supplier <party>", "who supplies it: person:<uid> or organization:<id>; you, when you bill it")
|
|
42
|
+
.option("--customer <party>", "who receives it and pays for it: person:<uid> or organization:<id>; you, when you pay")
|
|
43
|
+
.option("--product <product>", "the product or service it is for: product:<id>")
|
|
44
|
+
.option("--contract <contract>", "the contract it runs under: contract:<id>")
|
|
45
|
+
.option("--every <count-unit>", "how often it is charged: a count and a unit, such as 1-month or 1-year")
|
|
46
|
+
.option("--start-date <date>", "the first day it runs, YYYY-MM-DD")
|
|
47
|
+
.option("--trial-end-date <date>", "the day its free trial ends, YYYY-MM-DD");
|
|
48
|
+
const fieldsOf = (options) => given({
|
|
49
|
+
status: optionalChoice(options.status, SUBSCRIPTION_STATUSES, "--status"),
|
|
50
|
+
supplier: options.supplier,
|
|
51
|
+
customer: options.customer,
|
|
52
|
+
product: options.product,
|
|
53
|
+
contract: options.contract,
|
|
54
|
+
every: options.every,
|
|
55
|
+
startDate: dayOf(options.startDate),
|
|
56
|
+
trialEndDate: dayOf(options.trialEndDate),
|
|
57
|
+
endDate: dayOf(options.endDate),
|
|
58
|
+
});
|
|
59
|
+
/** `memo subscriptions`: what the owner bills or pays on a schedule, and its price history. */
|
|
60
|
+
export const subscriptionCommands = (program, streams, env) => {
|
|
61
|
+
const { run } = answers(program, streams, env);
|
|
62
|
+
const subscriptions = program
|
|
63
|
+
.command("subscriptions")
|
|
64
|
+
.description("subscriptions you bill or pay: who supplies it, who pays, how often, and every price it had; a price is " +
|
|
65
|
+
"never changed, a new one is added")
|
|
66
|
+
.summary("subscriptions you bill or pay, and their prices");
|
|
67
|
+
withQuery(json(annotate(subscriptions.command("list"), { effects: LOCAL_READ })).description("subscriptions, newest first; renews:2026-12-01 lists those that renew by then"), SUBSCRIPTION_QUERY)
|
|
68
|
+
.option("--limit <n>", "most subscriptions, up to 500", positive, 100)
|
|
69
|
+
.action((words, { json, limit }) => run(json, (store) => listSubscriptions(store, words, limit)));
|
|
70
|
+
json(annotate(subscriptions.command("show"), { effects: LOCAL_READ, output: { entity: "subscription" } }))
|
|
71
|
+
.description("one subscription with its parties, dates, current price and every price it had")
|
|
72
|
+
.argument("<subscription>", "subscription:<id>")
|
|
73
|
+
.action((ref, options, command) => run(options.json, async (store) => itemAnswer(await withSources(command, store, await store.subscriptions.get(ref)))));
|
|
74
|
+
json(writeMeta(parts(annotate(subscriptions.command("add"), {
|
|
75
|
+
effects: LOCAL_WRITE,
|
|
76
|
+
output: { entity: "subscription" },
|
|
77
|
+
literal_after_dashes: true,
|
|
78
|
+
})).option("--kind <kind>", "receivable (you bill it) or payable (you pay it)")))
|
|
79
|
+
.description(`record a subscription and its first price; ${PROPOSES}`)
|
|
80
|
+
.summary("record a subscription; an agent's waits for your review")
|
|
81
|
+
.argument("<name>", "what it is, such as Hosting")
|
|
82
|
+
.argument("<amount>", "its price for one period, a decimal such as 990.00")
|
|
83
|
+
.argument("<currency>", "ISO 4217, such as RUB")
|
|
84
|
+
.action(async (name, amount, currency, options, command) => {
|
|
85
|
+
const by = await whoRuns(command, env, {
|
|
86
|
+
asOwner: options.asOwner,
|
|
87
|
+
question: "record this subscription as yours?",
|
|
88
|
+
});
|
|
89
|
+
await run(options.json, async (store) => {
|
|
90
|
+
const startDate = dayOf(options.startDate) ?? today();
|
|
91
|
+
return itemAnswer(await store.subscriptions.add({
|
|
92
|
+
...(await writtenBy(store, by, options)),
|
|
93
|
+
...fieldsOf(options),
|
|
94
|
+
name,
|
|
95
|
+
direction: choice(options.kind, INVOICE_DIRECTIONS, "--kind"),
|
|
96
|
+
every: needed(options.every, "--every", "how often it is charged, such as 1-month"),
|
|
97
|
+
startDate,
|
|
98
|
+
prices: [{ amount, currency, effectiveFrom: startDate }],
|
|
99
|
+
}));
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
json(byOption(parts(annotate(subscriptions.command("update"), { effects: LOCAL_WRITE, output: { entity: "subscription" } }))
|
|
103
|
+
.option("--title <title>", "its new name")
|
|
104
|
+
.option("--end-date <date>", "the last day it runs, YYYY-MM-DD")))
|
|
105
|
+
.description("change a subscription's status, schedule, dates or parties; pause it with --status paused. You change any, an " +
|
|
106
|
+
"agent only one it proposed that is still proposed. A new price is subscriptions prices add")
|
|
107
|
+
.summary("change a subscription")
|
|
108
|
+
.argument("<subscription>", "subscription:<id>")
|
|
109
|
+
.action(async (ref, options, command) => {
|
|
110
|
+
const by = await whoRuns(command, env, { asOwner: options.asOwner, question: `change ${ref} as yours?` });
|
|
111
|
+
await run(options.json, async (store) => itemAnswer(await store.subscriptions.update(ref, { by, ...fieldsOf(options), ...given({ name: options.title }) })));
|
|
112
|
+
});
|
|
113
|
+
json(byOption(annotate(subscriptions.command("cancel"), { effects: LOCAL_WRITE, output: { entity: "subscription" } }).option("--occurred-time <time>", "the day it was cancelled, such as 2026-11-01; today when left out")))
|
|
114
|
+
.description("mark a subscription cancelled on a day; it stays, with its prices")
|
|
115
|
+
.summary("cancel a subscription")
|
|
116
|
+
.argument("<subscription>", "subscription:<id>")
|
|
117
|
+
.action(async (ref, options, command) => {
|
|
118
|
+
const by = await whoRuns(command, env, { asOwner: options.asOwner, question: `cancel ${ref} as yours?` });
|
|
119
|
+
await run(options.json, async (store) => itemAnswer(await store.subscriptions.update(ref, {
|
|
120
|
+
by,
|
|
121
|
+
status: "cancelled",
|
|
122
|
+
cancelledDate: dayOf(options.occurredTime) ?? today(),
|
|
123
|
+
})));
|
|
124
|
+
});
|
|
125
|
+
const prices = subscriptions
|
|
126
|
+
.command("prices")
|
|
127
|
+
.description("the prices a subscription had, each from a day on; one is never changed, a new one is added")
|
|
128
|
+
.summary("a subscription's prices");
|
|
129
|
+
json(byOption(annotate(prices.command("add"), { effects: LOCAL_WRITE, output: { entity: "subscription_price" } })
|
|
130
|
+
.option("--start-date <date>", "the first day the price holds, YYYY-MM-DD; the subscription's start when left out")
|
|
131
|
+
.option("--reason <text>", "why an agent proposes it, for the owner who decides")))
|
|
132
|
+
.description(`add a price from a day on; the earlier ones stay as they were. ${PROPOSES}, and the subscription stays as it is`)
|
|
133
|
+
.summary("add a subscription's new price")
|
|
134
|
+
.argument("<subscription>", "subscription:<id>")
|
|
135
|
+
.argument("<amount>", "the price for one period, a decimal such as 1190.00")
|
|
136
|
+
.argument("<currency>", "ISO 4217, such as RUB")
|
|
137
|
+
.action(async (ref, amount, currency, options, command) => {
|
|
138
|
+
const by = await whoRuns(command, env, {
|
|
139
|
+
asOwner: options.asOwner,
|
|
140
|
+
question: `add a price to ${ref} as yours?`,
|
|
141
|
+
});
|
|
142
|
+
await run(options.json, async (store) => itemAnswer(await store.subscriptions.addPrice(ref, {
|
|
143
|
+
by,
|
|
144
|
+
amount,
|
|
145
|
+
currency,
|
|
146
|
+
...given({
|
|
147
|
+
effectiveFrom: dayOf(options.startDate),
|
|
148
|
+
reason: by === "owner" ? undefined : options.reason,
|
|
149
|
+
}),
|
|
150
|
+
})));
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
//# sourceMappingURL=subscriptions-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions-command.js","sourceRoot":"","sources":["../../src/finance/subscriptions-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Streams } from "@wirecat/cli-base";
|
|
2
|
+
import type { MessageStore } from "@wirecat/cli-core/store";
|
|
3
|
+
import type { Command } from "commander";
|
|
4
|
+
export declare const TRANSACTION_QUERY: {
|
|
5
|
+
readonly entity: "transaction";
|
|
6
|
+
readonly backend: "native";
|
|
7
|
+
readonly fields: readonly [import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec, import("@wirecat/cli-base/query").FieldSpec];
|
|
8
|
+
};
|
|
9
|
+
export declare const listTransactions: (store: MessageStore, words: readonly string[] | string | undefined, limit?: number) => Promise<import("@wirecat/cli-core/cli").ListBody<unknown>>;
|
|
10
|
+
/** `memo transactions`: what a bank statement says moved, and the categories it is split into. */
|
|
11
|
+
export declare const transactionCommands: (program: Command, streams: Streams, env: NodeJS.ProcessEnv) => void;
|
|
12
|
+
//# sourceMappingURL=transactions-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions-command.d.ts","sourceRoot":"","sources":["../../src/finance/transactions-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAKhD,OAAO,KAAK,EAAE,YAAY,EAAqB,MAAM,yBAAyB,CAAA;AAC9E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAUxC,eAAO,MAAM,iBAAiB;qBACpB,aAAa;sBACZ,QAAQ;;CAUe,CAAA;AAElC,eAAO,MAAM,gBAAgB,UACpB,YAAY,SACZ,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,UACrC,MAAM,+DAcf,CAAA;AAUD,kGAAkG;AAClG,eAAO,MAAM,mBAAmB,YAAa,OAAO,WAAW,OAAO,OAAO,MAAM,CAAC,UAAU,KAAG,IA2JhG,CAAA"}
|