@marcfargas/odoo-cli 0.1.0

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.
Files changed (81) hide show
  1. package/dist/cli.d.ts +27 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +152 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/commands/accounting.d.ts +16 -0
  6. package/dist/commands/accounting.d.ts.map +1 -0
  7. package/dist/commands/accounting.js +363 -0
  8. package/dist/commands/accounting.js.map +1 -0
  9. package/dist/commands/attendance.d.ts +14 -0
  10. package/dist/commands/attendance.d.ts.map +1 -0
  11. package/dist/commands/attendance.js +339 -0
  12. package/dist/commands/attendance.js.map +1 -0
  13. package/dist/commands/config.d.ts +12 -0
  14. package/dist/commands/config.d.ts.map +1 -0
  15. package/dist/commands/config.js +159 -0
  16. package/dist/commands/config.js.map +1 -0
  17. package/dist/commands/mail.d.ts +12 -0
  18. package/dist/commands/mail.d.ts.map +1 -0
  19. package/dist/commands/mail.js +236 -0
  20. package/dist/commands/mail.js.map +1 -0
  21. package/dist/commands/modules.d.ts +14 -0
  22. package/dist/commands/modules.d.ts.map +1 -0
  23. package/dist/commands/modules.js +351 -0
  24. package/dist/commands/modules.js.map +1 -0
  25. package/dist/commands/records.d.ts +15 -0
  26. package/dist/commands/records.d.ts.map +1 -0
  27. package/dist/commands/records.js +591 -0
  28. package/dist/commands/records.js.map +1 -0
  29. package/dist/commands/schema.d.ts +16 -0
  30. package/dist/commands/schema.d.ts.map +1 -0
  31. package/dist/commands/schema.js +381 -0
  32. package/dist/commands/schema.js.map +1 -0
  33. package/dist/commands/state.d.ts +14 -0
  34. package/dist/commands/state.d.ts.map +1 -0
  35. package/dist/commands/state.js +373 -0
  36. package/dist/commands/state.js.map +1 -0
  37. package/dist/commands/timesheets.d.ts +15 -0
  38. package/dist/commands/timesheets.d.ts.map +1 -0
  39. package/dist/commands/timesheets.js +453 -0
  40. package/dist/commands/timesheets.js.map +1 -0
  41. package/dist/commands/url.d.ts +12 -0
  42. package/dist/commands/url.d.ts.map +1 -0
  43. package/dist/commands/url.js +149 -0
  44. package/dist/commands/url.js.map +1 -0
  45. package/dist/help/extra-help.d.ts +18 -0
  46. package/dist/help/extra-help.d.ts.map +1 -0
  47. package/dist/help/extra-help.js +207 -0
  48. package/dist/help/extra-help.js.map +1 -0
  49. package/dist/middleware/auth.d.ts +29 -0
  50. package/dist/middleware/auth.d.ts.map +1 -0
  51. package/dist/middleware/auth.js +68 -0
  52. package/dist/middleware/auth.js.map +1 -0
  53. package/dist/middleware/common-params.d.ts +90 -0
  54. package/dist/middleware/common-params.d.ts.map +1 -0
  55. package/dist/middleware/common-params.js +169 -0
  56. package/dist/middleware/common-params.js.map +1 -0
  57. package/dist/middleware/safety.d.ts +30 -0
  58. package/dist/middleware/safety.d.ts.map +1 -0
  59. package/dist/middleware/safety.js +64 -0
  60. package/dist/middleware/safety.js.map +1 -0
  61. package/dist/output/errors.d.ts +69 -0
  62. package/dist/output/errors.d.ts.map +1 -0
  63. package/dist/output/errors.js +193 -0
  64. package/dist/output/errors.js.map +1 -0
  65. package/dist/output/formatter.d.ts +80 -0
  66. package/dist/output/formatter.d.ts.map +1 -0
  67. package/dist/output/formatter.js +285 -0
  68. package/dist/output/formatter.js.map +1 -0
  69. package/dist/output/stream-writer.d.ts +33 -0
  70. package/dist/output/stream-writer.d.ts.map +1 -0
  71. package/dist/output/stream-writer.js +74 -0
  72. package/dist/output/stream-writer.js.map +1 -0
  73. package/dist/parsing/domain-parser.d.ts +61 -0
  74. package/dist/parsing/domain-parser.d.ts.map +1 -0
  75. package/dist/parsing/domain-parser.js +427 -0
  76. package/dist/parsing/domain-parser.js.map +1 -0
  77. package/dist/parsing/json-arg.d.ts +48 -0
  78. package/dist/parsing/json-arg.d.ts.map +1 -0
  79. package/dist/parsing/json-arg.js +165 -0
  80. package/dist/parsing/json-arg.js.map +1 -0
  81. package/package.json +53 -0
package/dist/cli.d.ts ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * odoo-cli — CLI for Odoo ERP
4
+ *
5
+ * Entry point. Sets up Commander program with global flags and all command groups.
6
+ *
7
+ * Output contract:
8
+ * stdout = data only (JSON, table, CSV, ndjson) — always parseable
9
+ * stderr = errors, progress, warnings, decorative messages
10
+ *
11
+ * Safety model:
12
+ * READ → no --confirm required
13
+ * WRITE → --confirm required
14
+ * DESTRUCTIVE → --confirm required (+ explicit warning)
15
+ *
16
+ * Exit codes:
17
+ * 0 success
18
+ * 1 usage error
19
+ * 2 auth / network error
20
+ * 3 not found
21
+ * 4 permission denied
22
+ * 5 validation error
23
+ * 6 conflict
24
+ * 10 partial success
25
+ */
26
+ export {};
27
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;GAuBG"}
package/dist/cli.js ADDED
@@ -0,0 +1,152 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * odoo-cli — CLI for Odoo ERP
5
+ *
6
+ * Entry point. Sets up Commander program with global flags and all command groups.
7
+ *
8
+ * Output contract:
9
+ * stdout = data only (JSON, table, CSV, ndjson) — always parseable
10
+ * stderr = errors, progress, warnings, decorative messages
11
+ *
12
+ * Safety model:
13
+ * READ → no --confirm required
14
+ * WRITE → --confirm required
15
+ * DESTRUCTIVE → --confirm required (+ explicit warning)
16
+ *
17
+ * Exit codes:
18
+ * 0 success
19
+ * 1 usage error
20
+ * 2 auth / network error
21
+ * 3 not found
22
+ * 4 permission denied
23
+ * 5 validation error
24
+ * 6 conflict
25
+ * 10 partial success
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ const commander_1 = require("commander");
29
+ const config_1 = require("./commands/config");
30
+ const records_1 = require("./commands/records");
31
+ const mail_1 = require("./commands/mail");
32
+ const modules_1 = require("./commands/modules");
33
+ const attendance_1 = require("./commands/attendance");
34
+ const timesheets_1 = require("./commands/timesheets");
35
+ const accounting_1 = require("./commands/accounting");
36
+ const url_1 = require("./commands/url");
37
+ const schema_1 = require("./commands/schema");
38
+ const state_1 = require("./commands/state");
39
+ const errors_1 = require("./output/errors");
40
+ const common_params_1 = require("./middleware/common-params");
41
+ const formatter_1 = require("./output/formatter");
42
+ // Resolve package version at runtime (CJS-compatible)
43
+ let version = '0.1.0';
44
+ try {
45
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
46
+ const pkg = require('../package.json');
47
+ version = pkg.version;
48
+ }
49
+ catch {
50
+ // fallback to default
51
+ }
52
+ const program = new commander_1.Command();
53
+ program
54
+ .name('odoo')
55
+ .description(`CLI for Odoo ERP — records, mail, modules, attendance, timesheets, accounting, schema
56
+
57
+ AUTHENTICATION (env vars or flags)
58
+ ODOO_URL Odoo base URL (or --url)
59
+ ODOO_DB Database name (or --db)
60
+ ODOO_USERNAME Username (or --user)
61
+ ODOO_PASSWORD Password (or --password, avoid in CLI!)
62
+
63
+ SAFETY MODEL
64
+ READ No confirmation needed. Safe to run anywhere.
65
+ WRITE Requires --confirm. Mutates Odoo data.
66
+ DESTRUCTIVE Requires --confirm. May permanently delete data. ⚠
67
+
68
+ Each command's help shows its safety level: [READ], [WRITE], or [DESTRUCTIVE].
69
+
70
+ OUTPUT
71
+ stdout = data only (json, table, csv, ndjson) — always parseable
72
+ stderr = errors, progress, warnings
73
+
74
+ Format auto-detection: TTY → table, pipe → json
75
+ Override with --format json|table|csv|ndjson
76
+
77
+ FIRST RUN
78
+ odoo config check # verify connection
79
+ odoo records search res.partner --limit 5
80
+ odoo schema models --search sale
81
+ `)
82
+ .version(version, '-v, --version', 'Show version')
83
+ .helpOption('-h, --help', 'Show help')
84
+ .addHelpText('after', `
85
+ More help:
86
+ odoo <command> --help # command-specific help
87
+ odoo <command> --help-extra # full skill documentation (paged)
88
+
89
+ Examples:
90
+ odoo config check
91
+ odoo records search crm.lead --fields id,name,stage_id --limit 20
92
+ odoo records create res.partner --data '{"name":"Acme"}' --confirm
93
+ odoo mail note crm.lead 42 "Called customer" --confirm
94
+ odoo modules list --filter installed
95
+ odoo schema fields crm.lead --type many2one
96
+ `);
97
+ // ── Global flags ────────────────────────────────────────────────────
98
+ // These are available on the root program and inherited by subcommands.
99
+ // Defined in common-params.ts (single source of truth).
100
+ program.addOption((0, common_params_1.urlOption)());
101
+ program.addOption((0, common_params_1.dbOption)());
102
+ program.addOption((0, common_params_1.userOption)());
103
+ program.addOption((0, common_params_1.passwordOption)());
104
+ program.addOption((0, common_params_1.formatOption)());
105
+ program.addOption((0, common_params_1.noColorOption)());
106
+ program.addOption((0, common_params_1.quietOption)());
107
+ // Wire --quiet and --no-color flags into output modules.
108
+ // Commander sets opts.color = false when --no-color is passed.
109
+ program.hook('preAction', (thisCommand) => {
110
+ const opts = thisCommand.optsWithGlobals();
111
+ (0, errors_1.setQuiet)(!!opts.quiet);
112
+ (0, formatter_1.setNoColor)(opts.color === false);
113
+ (0, errors_1.setNoColor)(opts.color === false);
114
+ });
115
+ // ── Commands ────────────────────────────────────────────────────────
116
+ program.addCommand((0, config_1.buildConfigCommand)());
117
+ program.addCommand((0, records_1.buildRecordsCommand)());
118
+ program.addCommand((0, mail_1.buildMailCommand)());
119
+ program.addCommand((0, modules_1.buildModulesCommand)());
120
+ program.addCommand((0, attendance_1.buildAttendanceCommand)());
121
+ program.addCommand((0, timesheets_1.buildTimesheetsCommand)());
122
+ program.addCommand((0, accounting_1.buildAccountingCommand)());
123
+ program.addCommand((0, url_1.buildUrlCommand)());
124
+ program.addCommand((0, schema_1.buildSchemaCommand)());
125
+ program.addCommand((0, state_1.buildStateCommand)());
126
+ // ── Error handling ──────────────────────────────────────────────────
127
+ // Commander's built-in error handling — exit 1 on usage errors
128
+ program.exitOverride((err) => {
129
+ if (err.code === 'commander.helpDisplayed') {
130
+ process.exit(0);
131
+ }
132
+ if (err.code === 'commander.version') {
133
+ process.exit(0);
134
+ }
135
+ process.stderr.write(err.message + '\n');
136
+ process.exit(1);
137
+ });
138
+ // Global uncaught error handler — last resort
139
+ process.on('uncaughtException', (err) => {
140
+ const code = (0, errors_1.handleError)(err);
141
+ process.exit(code);
142
+ });
143
+ process.on('unhandledRejection', (err) => {
144
+ const code = (0, errors_1.handleError)(err);
145
+ process.exit(code);
146
+ });
147
+ // ── Main ────────────────────────────────────────────────────────────
148
+ program.parseAsync(process.argv).catch((err) => {
149
+ const code = (0, errors_1.handleError)(err);
150
+ process.exit(code);
151
+ });
152
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `odoo accounting` command group — all read-only accounting queries.
3
+ *
4
+ * Commands:
5
+ * accounting cash-accounts Discover cash/bank journal accounts [READ]
6
+ * accounting cash-balance Show balance as-of a date [READ]
7
+ * accounting trace-recon Show reconciliation for a move [READ]
8
+ * accounting posted-moves List posted journal entries [READ]
9
+ * accounting days-to-pay Payment term analysis for an invoice [READ]
10
+ *
11
+ * All commands are READ — no mutations, no --confirm required.
12
+ * Requires account module (Invoicing/Accounting) to be installed.
13
+ */
14
+ import { Command } from 'commander';
15
+ export declare function buildAccountingCommand(): Command;
16
+ //# sourceMappingURL=accounting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounting.d.ts","sourceRoot":"","sources":["../../src/commands/accounting.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,sBAAsB,IAAI,OAAO,CAmChD"}
@@ -0,0 +1,363 @@
1
+ "use strict";
2
+ /**
3
+ * `odoo accounting` command group — all read-only accounting queries.
4
+ *
5
+ * Commands:
6
+ * accounting cash-accounts Discover cash/bank journal accounts [READ]
7
+ * accounting cash-balance Show balance as-of a date [READ]
8
+ * accounting trace-recon Show reconciliation for a move [READ]
9
+ * accounting posted-moves List posted journal entries [READ]
10
+ * accounting days-to-pay Payment term analysis for an invoice [READ]
11
+ *
12
+ * All commands are READ — no mutations, no --confirm required.
13
+ * Requires account module (Invoicing/Accounting) to be installed.
14
+ */
15
+ var __importDefault = (this && this.__importDefault) || function (mod) {
16
+ return (mod && mod.__esModule) ? mod : { "default": mod };
17
+ };
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.buildAccountingCommand = buildAccountingCommand;
20
+ const commander_1 = require("commander");
21
+ const debug_1 = __importDefault(require("debug"));
22
+ const auth_1 = require("../middleware/auth");
23
+ const common_params_1 = require("../middleware/common-params");
24
+ const formatter_1 = require("../output/formatter");
25
+ const errors_1 = require("../output/errors");
26
+ const stream_writer_1 = require("../output/stream-writer");
27
+ const extra_help_1 = require("../help/extra-help");
28
+ const log = (0, debug_1.default)('odoo-cli:accounting');
29
+ function buildAccountingCommand() {
30
+ const acc = new commander_1.Command('accounting')
31
+ .description('Read-only accounting queries — cash discovery, balances, reconciliation')
32
+ .addHelpText('after', `
33
+ All commands are READ-ONLY — no confirmation required.
34
+ Requires: account Odoo module (Invoicing/Accounting).
35
+
36
+ Examples:
37
+ odoo accounting cash-accounts
38
+ odoo accounting cash-balance --as-of 2024-03-31
39
+ odoo accounting posted-moves --from 2024-01-01 --to 2024-03-31
40
+ odoo accounting trace-recon 42
41
+ odoo accounting days-to-pay 1042
42
+ `);
43
+ // --help-extra
44
+ acc.option('--help-extra', 'Show extended skill documentation for accounting');
45
+ acc.hook('preAction', async (thisCommand) => {
46
+ const opts = thisCommand.opts();
47
+ if (opts.helpExtra) {
48
+ await (0, extra_help_1.showHelpExtra)('accounting');
49
+ process.exit(0);
50
+ }
51
+ });
52
+ acc.addCommand(buildCashAccountsCommand());
53
+ acc.addCommand(buildCashBalanceCommand());
54
+ acc.addCommand(buildTraceReconCommand());
55
+ acc.addCommand(buildPostedMovesCommand());
56
+ acc.addCommand(buildDaysToPayCommand());
57
+ return acc;
58
+ }
59
+ function buildCashAccountsCommand() {
60
+ const cmd = new commander_1.Command('cash-accounts')
61
+ .description('Discover cash and bank journal accounts [READ]')
62
+ .addHelpText('after', `
63
+ Examples:
64
+ odoo accounting cash-accounts
65
+ odoo accounting cash-accounts --format json
66
+ `);
67
+ (0, common_params_1.addAuthOptions)(cmd);
68
+ (0, common_params_1.addOutputOptions)(cmd);
69
+ cmd.action(async () => {
70
+ const opts = cmd.optsWithGlobals();
71
+ log('accounting cash-accounts');
72
+ let client;
73
+ try {
74
+ client = await (0, auth_1.createAuthClient)(opts);
75
+ }
76
+ catch (err) {
77
+ process.exit((0, errors_1.handleError)(err));
78
+ }
79
+ try {
80
+ const accounts = await client.accounting.discoverCashAccounts();
81
+ const format = (0, formatter_1.resolveFormat)(opts.format);
82
+ const rows = accounts.map((a) => ({
83
+ journal_name: a.journalName,
84
+ journal_type: a.journalType,
85
+ account_id: a.accountId,
86
+ account_name: a.accountName,
87
+ }));
88
+ await (0, formatter_1.render)(rows, format);
89
+ }
90
+ catch (err) {
91
+ process.exit((0, errors_1.handleError)(err));
92
+ }
93
+ finally {
94
+ client?.logout();
95
+ }
96
+ });
97
+ return cmd;
98
+ }
99
+ function buildCashBalanceCommand() {
100
+ const cmd = new commander_1.Command('cash-balance')
101
+ .description('Show cash/bank balance as-of a date [READ]')
102
+ .addHelpText('after', `
103
+ Examples:
104
+ odoo accounting cash-balance
105
+ odoo accounting cash-balance --as-of 2024-03-31
106
+ BALANCE=$(odoo accounting cash-balance --format json | jq '[.[].balance] | add')
107
+ `);
108
+ (0, common_params_1.addAuthOptions)(cmd);
109
+ (0, common_params_1.addOutputOptions)(cmd);
110
+ cmd.option('--as-of <date>', 'Balance date YYYY-MM-DD (default: today)');
111
+ cmd.option('--journal-id <n,...>', 'Specific journal IDs (default: all cash/bank)');
112
+ cmd.action(async () => {
113
+ const opts = cmd.optsWithGlobals();
114
+ log('accounting cash-balance as-of=%s', opts.asOf);
115
+ const asOf = opts.asOf ?? new Date().toISOString().split('T')[0];
116
+ let client;
117
+ try {
118
+ client = await (0, auth_1.createAuthClient)(opts);
119
+ }
120
+ catch (err) {
121
+ process.exit((0, errors_1.handleError)(err));
122
+ }
123
+ try {
124
+ const format = (0, formatter_1.resolveFormat)(opts.format);
125
+ let cashAccountIds;
126
+ if (opts.journalId) {
127
+ // Resolve account IDs from journal IDs
128
+ const journalIds = opts.journalId.split(',').map((s) => parseInt(s.trim(), 10));
129
+ const journals = await client.searchRead('account.journal', [['id', 'in', journalIds]], { fields: ['default_account_id'] });
130
+ cashAccountIds = journals
131
+ .filter((j) => Array.isArray(j.default_account_id))
132
+ .map((j) => j.default_account_id[0]);
133
+ }
134
+ else {
135
+ cashAccountIds = await client.accounting.getCashAccountIds();
136
+ }
137
+ if (cashAccountIds.length === 0) {
138
+ process.stderr.write('No cash/bank accounts found\n');
139
+ process.exit(errors_1.EXIT_CODES.NOT_FOUND);
140
+ }
141
+ // Get per-account balances
142
+ const accounts = await client.accounting.discoverCashAccounts();
143
+ const rows = [];
144
+ let totalBalance = 0;
145
+ for (const account of accounts) {
146
+ if (!cashAccountIds.includes(account.accountId))
147
+ continue;
148
+ const balance = await client.accounting.getCashBalance([account.accountId], asOf);
149
+ rows.push({
150
+ journal: account.journalName,
151
+ balance,
152
+ currency: 'EUR', // Odoo doesn't easily expose currency per account without more calls
153
+ });
154
+ totalBalance += balance;
155
+ }
156
+ if (format === 'json' || format === 'ndjson') {
157
+ await (0, stream_writer_1.writeStdout)(JSON.stringify(rows, null, format === 'json' ? 2 : 0) + '\n');
158
+ }
159
+ else {
160
+ await (0, formatter_1.render)(rows.map((r) => ({ ...r, balance: r.balance.toFixed(2) })), format);
161
+ process.stderr.write(`TOTAL: ${totalBalance.toFixed(2)}\n`);
162
+ }
163
+ }
164
+ catch (err) {
165
+ process.exit((0, errors_1.handleError)(err));
166
+ }
167
+ finally {
168
+ client?.logout();
169
+ }
170
+ });
171
+ return cmd;
172
+ }
173
+ function buildTraceReconCommand() {
174
+ const cmd = new commander_1.Command('trace-recon')
175
+ .description('Show reconciliation trace for a journal entry move [READ]')
176
+ .argument('<move-id>', 'Journal entry (account.move) ID')
177
+ .addHelpText('after', `
178
+ Examples:
179
+ odoo accounting trace-recon 42
180
+ odoo accounting trace-recon 42 --format json
181
+ `);
182
+ (0, common_params_1.addAuthOptions)(cmd);
183
+ (0, common_params_1.addOutputOptions)(cmd);
184
+ cmd.action(async (moveIdStr) => {
185
+ const opts = cmd.optsWithGlobals();
186
+ const moveId = parseInt(moveIdStr, 10);
187
+ if (isNaN(moveId)) {
188
+ process.stderr.write(`✗ Error: Invalid move-id '${moveIdStr}'\n`);
189
+ process.exit(errors_1.EXIT_CODES.USAGE_ERROR);
190
+ }
191
+ log('accounting trace-recon %d', moveId);
192
+ let client;
193
+ try {
194
+ client = await (0, auth_1.createAuthClient)(opts);
195
+ }
196
+ catch (err) {
197
+ process.exit((0, errors_1.handleError)(err));
198
+ }
199
+ try {
200
+ const format = (0, formatter_1.resolveFormat)(opts.format);
201
+ // Find reconcile_id on the move's lines
202
+ const lines = await client.searchRead('account.move.line', [
203
+ ['move_id', '=', moveId],
204
+ ['full_reconcile_id', '!=', false],
205
+ ], { fields: ['full_reconcile_id'], limit: 1 });
206
+ if (lines.length === 0) {
207
+ process.stderr.write(`No reconciliation found for move#${moveId}\n`);
208
+ process.exit(errors_1.EXIT_CODES.NOT_FOUND);
209
+ }
210
+ const fullReconcileId = lines[0].full_reconcile_id[0];
211
+ const trace = await client.accounting.traceReconciliation(fullReconcileId);
212
+ if (format === 'json' || format === 'ndjson') {
213
+ await (0, stream_writer_1.writeStdout)(JSON.stringify(trace, null, format === 'json' ? 2 : 0) + '\n');
214
+ }
215
+ else {
216
+ const rows = trace.lines.map((l) => ({
217
+ move_id: l.move_id,
218
+ account: Array.isArray(l.account_id) ? l.account_id[1] : l.account_id,
219
+ partner: Array.isArray(l.partner_id) ? l.partner_id[1] : '',
220
+ debit: typeof l.debit === 'number' ? l.debit.toFixed(2) : '',
221
+ credit: typeof l.credit === 'number' ? l.credit.toFixed(2) : '',
222
+ }));
223
+ await (0, formatter_1.render)(rows, format);
224
+ }
225
+ }
226
+ catch (err) {
227
+ process.exit((0, errors_1.handleError)(err));
228
+ }
229
+ finally {
230
+ client?.logout();
231
+ }
232
+ });
233
+ return cmd;
234
+ }
235
+ function buildPostedMovesCommand() {
236
+ const cmd = new commander_1.Command('posted-moves')
237
+ .description('List posted journal entries [READ]')
238
+ .addHelpText('after', `
239
+ Examples:
240
+ odoo accounting posted-moves --from 2024-01-01 --to 2024-03-31
241
+ odoo accounting posted-moves --journal-id 5 --format csv > moves.csv
242
+ `);
243
+ (0, common_params_1.addAuthOptions)(cmd);
244
+ (0, common_params_1.addOutputOptions)(cmd);
245
+ cmd.option('--from <date>', 'Start date YYYY-MM-DD');
246
+ cmd.option('--to <date>', 'End date YYYY-MM-DD');
247
+ cmd.option('--journal-id <n,...>', 'Filter by journal IDs');
248
+ cmd.action(async () => {
249
+ const opts = cmd.optsWithGlobals();
250
+ log('accounting posted-moves from=%s to=%s', opts.from, opts.to);
251
+ let client;
252
+ try {
253
+ client = await (0, auth_1.createAuthClient)(opts);
254
+ }
255
+ catch (err) {
256
+ process.exit((0, errors_1.handleError)(err));
257
+ }
258
+ try {
259
+ const domain = [];
260
+ if (opts.from)
261
+ domain.push(['date', '>=', opts.from]);
262
+ if (opts.to)
263
+ domain.push(['date', '<=', opts.to]);
264
+ if (opts.journalId) {
265
+ const jIds = opts.journalId.split(',').map((s) => parseInt(s.trim(), 10));
266
+ domain.push(['journal_id', 'in', jIds]);
267
+ }
268
+ const lines = await client.accounting.getPostedMoveLines(domain, {
269
+ fields: [
270
+ 'move_id',
271
+ 'date',
272
+ 'account_id',
273
+ 'partner_id',
274
+ 'name',
275
+ 'debit',
276
+ 'credit',
277
+ 'balance',
278
+ ],
279
+ limit: 200,
280
+ });
281
+ const format = (0, formatter_1.resolveFormat)(opts.format);
282
+ const rows = lines.map((l) => ({
283
+ move: Array.isArray(l.move_id) ? l.move_id[1] : l.move_id,
284
+ date: l.date,
285
+ account: Array.isArray(l.account_id) ? l.account_id[1] : l.account_id,
286
+ partner: Array.isArray(l.partner_id) ? l.partner_id[1] : '',
287
+ description: l.name ?? '',
288
+ debit: typeof l.debit === 'number' ? l.debit.toFixed(2) : '',
289
+ credit: typeof l.credit === 'number' ? l.credit.toFixed(2) : '',
290
+ }));
291
+ await (0, formatter_1.render)(rows, format);
292
+ }
293
+ catch (err) {
294
+ process.exit((0, errors_1.handleError)(err));
295
+ }
296
+ finally {
297
+ client?.logout();
298
+ }
299
+ });
300
+ return cmd;
301
+ }
302
+ function buildDaysToPayCommand() {
303
+ const cmd = new commander_1.Command('days-to-pay')
304
+ .description('Payment term analysis for an invoice [READ]')
305
+ .argument('<move-id>', 'Invoice (account.move) ID')
306
+ .addHelpText('after', `
307
+ Returns null if the invoice is not yet paid.
308
+
309
+ Examples:
310
+ odoo accounting days-to-pay 1042
311
+ odoo accounting days-to-pay 1042 --format json
312
+ `);
313
+ (0, common_params_1.addAuthOptions)(cmd);
314
+ (0, common_params_1.addOutputOptions)(cmd);
315
+ cmd.action(async (moveIdStr) => {
316
+ const opts = cmd.optsWithGlobals();
317
+ const moveId = parseInt(moveIdStr, 10);
318
+ if (isNaN(moveId)) {
319
+ process.stderr.write(`✗ Error: Invalid move-id '${moveIdStr}'\n`);
320
+ process.exit(errors_1.EXIT_CODES.USAGE_ERROR);
321
+ }
322
+ log('accounting days-to-pay %d', moveId);
323
+ let client;
324
+ try {
325
+ client = await (0, auth_1.createAuthClient)(opts);
326
+ }
327
+ catch (err) {
328
+ process.exit((0, errors_1.handleError)(err));
329
+ }
330
+ try {
331
+ const result = await client.accounting.calculateDaysToPay(moveId);
332
+ const format = (0, formatter_1.resolveFormat)(opts.format);
333
+ if (!result) {
334
+ if (format === 'json' || format === 'ndjson') {
335
+ await (0, stream_writer_1.writeStdout)(JSON.stringify(null) + '\n');
336
+ }
337
+ else {
338
+ process.stdout.write('Invoice is not yet paid (no reconciliation found)\n');
339
+ }
340
+ return;
341
+ }
342
+ if (format === 'json' || format === 'ndjson') {
343
+ await (0, stream_writer_1.writeStdout)(JSON.stringify(result, null, format === 'json' ? 2 : 0) + '\n');
344
+ }
345
+ else {
346
+ await (0, formatter_1.renderKeyValue)({
347
+ invoice_id: String(moveId),
348
+ days: String(result.days),
349
+ invoice_date: result.invoiceDate,
350
+ payment_date: result.paymentDate,
351
+ }, format);
352
+ }
353
+ }
354
+ catch (err) {
355
+ process.exit((0, errors_1.handleError)(err));
356
+ }
357
+ finally {
358
+ client?.logout();
359
+ }
360
+ });
361
+ return cmd;
362
+ }
363
+ //# sourceMappingURL=accounting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounting.js","sourceRoot":"","sources":["../../src/commands/accounting.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * `odoo attendance` command group.
3
+ *
4
+ * Commands:
5
+ * attendance clock-in Record clock-in [WRITE]
6
+ * attendance clock-out Record clock-out [WRITE]
7
+ * attendance status Show current status [READ]
8
+ * attendance list List records by date range [READ]
9
+ *
10
+ * Requires hr_attendance module to be installed.
11
+ */
12
+ import { Command } from 'commander';
13
+ export declare function buildAttendanceCommand(): Command;
14
+ //# sourceMappingURL=attendance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attendance.d.ts","sourceRoot":"","sources":["../../src/commands/attendance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyDpC,wBAAgB,sBAAsB,IAAI,OAAO,CAyChD"}