@newpeak/barista-cli 0.1.6 ā 0.1.7
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/README.en.md +714 -0
- package/README.ja.md +708 -0
- package/README.md +68 -0
- package/README.vi.md +714 -0
- package/dist/commands/liberica/index.d.ts.map +1 -1
- package/dist/commands/liberica/index.js +4 -0
- package/dist/commands/liberica/index.js.map +1 -1
- package/dist/commands/liberica/materials/create.d.ts.map +1 -1
- package/dist/commands/liberica/materials/create.js +35 -9
- package/dist/commands/liberica/materials/create.js.map +1 -1
- package/dist/commands/liberica/orgs/index.d.ts.map +1 -1
- package/dist/commands/liberica/orgs/index.js.map +1 -1
- package/dist/commands/liberica/users/create.d.ts.map +1 -1
- package/dist/commands/liberica/users/create.js +1 -0
- package/dist/commands/liberica/users/create.js.map +1 -1
- package/dist/commands/liberica/warehouses/create.d.ts +3 -0
- package/dist/commands/liberica/warehouses/create.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/create.js +196 -0
- package/dist/commands/liberica/warehouses/create.js.map +1 -0
- package/dist/commands/liberica/warehouses/delete.d.ts +3 -0
- package/dist/commands/liberica/warehouses/delete.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/delete.js +111 -0
- package/dist/commands/liberica/warehouses/delete.js.map +1 -0
- package/dist/commands/liberica/warehouses/disable.d.ts +3 -0
- package/dist/commands/liberica/warehouses/disable.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/disable.js +173 -0
- package/dist/commands/liberica/warehouses/disable.js.map +1 -0
- package/dist/commands/liberica/warehouses/enable.d.ts +3 -0
- package/dist/commands/liberica/warehouses/enable.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/enable.js +173 -0
- package/dist/commands/liberica/warehouses/enable.js.map +1 -0
- package/dist/commands/liberica/warehouses/get.d.ts +3 -0
- package/dist/commands/liberica/warehouses/get.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/get.js +90 -0
- package/dist/commands/liberica/warehouses/get.js.map +1 -0
- package/dist/commands/liberica/warehouses/index.d.ts +3 -0
- package/dist/commands/liberica/warehouses/index.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/index.js +23 -0
- package/dist/commands/liberica/warehouses/index.js.map +1 -0
- package/dist/commands/liberica/warehouses/list.d.ts +3 -0
- package/dist/commands/liberica/warehouses/list.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/list.js +101 -0
- package/dist/commands/liberica/warehouses/list.js.map +1 -0
- package/dist/commands/liberica/warehouses/locations/create.d.ts +3 -0
- package/dist/commands/liberica/warehouses/locations/create.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/locations/create.js +199 -0
- package/dist/commands/liberica/warehouses/locations/create.js.map +1 -0
- package/dist/commands/liberica/warehouses/locations/delete.d.ts +3 -0
- package/dist/commands/liberica/warehouses/locations/delete.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/locations/delete.js +115 -0
- package/dist/commands/liberica/warehouses/locations/delete.js.map +1 -0
- package/dist/commands/liberica/warehouses/locations/disable.d.ts +3 -0
- package/dist/commands/liberica/warehouses/locations/disable.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/locations/disable.js +173 -0
- package/dist/commands/liberica/warehouses/locations/disable.js.map +1 -0
- package/dist/commands/liberica/warehouses/locations/enable.d.ts +3 -0
- package/dist/commands/liberica/warehouses/locations/enable.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/locations/enable.js +173 -0
- package/dist/commands/liberica/warehouses/locations/enable.js.map +1 -0
- package/dist/commands/liberica/warehouses/locations/get.d.ts +3 -0
- package/dist/commands/liberica/warehouses/locations/get.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/locations/get.js +73 -0
- package/dist/commands/liberica/warehouses/locations/get.js.map +1 -0
- package/dist/commands/liberica/warehouses/locations/index.d.ts +3 -0
- package/dist/commands/liberica/warehouses/locations/index.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/locations/index.js +21 -0
- package/dist/commands/liberica/warehouses/locations/index.js.map +1 -0
- package/dist/commands/liberica/warehouses/locations/list.d.ts +3 -0
- package/dist/commands/liberica/warehouses/locations/list.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/locations/list.js +104 -0
- package/dist/commands/liberica/warehouses/locations/list.js.map +1 -0
- package/dist/commands/liberica/warehouses/locations/update.d.ts +3 -0
- package/dist/commands/liberica/warehouses/locations/update.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/locations/update.js +128 -0
- package/dist/commands/liberica/warehouses/locations/update.js.map +1 -0
- package/dist/commands/liberica/warehouses/update.d.ts +3 -0
- package/dist/commands/liberica/warehouses/update.d.ts.map +1 -0
- package/dist/commands/liberica/warehouses/update.js +143 -0
- package/dist/commands/liberica/warehouses/update.js.map +1 -0
- package/dist/core/api/client.d.ts +16 -0
- package/dist/core/api/client.d.ts.map +1 -1
- package/dist/core/api/client.js +286 -0
- package/dist/core/api/client.js.map +1 -1
- package/dist/index.js +1 -3
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +4 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/location.d.ts +53 -0
- package/dist/types/location.d.ts.map +1 -0
- package/dist/types/location.js +2 -0
- package/dist/types/location.js.map +1 -0
- package/dist/types/warehouse.d.ts +68 -0
- package/dist/types/warehouse.d.ts.map +1 -0
- package/dist/types/warehouse.js +2 -0
- package/dist/types/warehouse.js.map +1 -0
- package/docs/commands/liberica/locations/create.md +195 -0
- package/docs/commands/liberica/locations/list.md +171 -0
- package/docs/commands/liberica/warehouses/create.md +222 -0
- package/docs/commands/liberica/warehouses/list.md +184 -0
- package/package.json +1 -1
- package/src/commands/liberica/index.ts +4 -0
- package/src/commands/liberica/materials/create.ts +32 -9
- package/src/commands/liberica/orgs/index.ts +0 -1
- package/src/commands/liberica/users/create.ts +1 -0
- package/src/commands/liberica/warehouses/create.ts +204 -0
- package/src/commands/liberica/warehouses/delete.ts +112 -0
- package/src/commands/liberica/warehouses/disable.ts +174 -0
- package/src/commands/liberica/warehouses/enable.ts +174 -0
- package/src/commands/liberica/warehouses/get.ts +101 -0
- package/src/commands/liberica/warehouses/index.ts +25 -0
- package/src/commands/liberica/warehouses/list.ts +136 -0
- package/src/commands/liberica/warehouses/locations/create.ts +209 -0
- package/src/commands/liberica/warehouses/locations/delete.ts +116 -0
- package/src/commands/liberica/warehouses/locations/disable.ts +174 -0
- package/src/commands/liberica/warehouses/locations/enable.ts +174 -0
- package/src/commands/liberica/warehouses/locations/get.ts +84 -0
- package/src/commands/liberica/warehouses/locations/index.ts +23 -0
- package/src/commands/liberica/warehouses/locations/list.ts +140 -0
- package/src/commands/liberica/warehouses/locations/update.ts +135 -0
- package/src/commands/liberica/warehouses/update.ts +142 -0
- package/src/core/api/client.ts +396 -0
- package/src/index.ts +1 -3
- package/src/types/index.ts +4 -4
- package/src/types/location.ts +66 -0
- package/src/types/warehouse.ts +82 -0
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { configManager } from '../../../core/config/manager.js';
|
|
5
|
+
import { apiClient } from '../../../core/api/client.js';
|
|
6
|
+
import { Environment } from '../../../types/index.js';
|
|
7
|
+
import { Warehouse } from '../../../types/warehouse.js';
|
|
8
|
+
|
|
9
|
+
export function createWarehouseDisableCommand(): Command {
|
|
10
|
+
const disableCommand = new Command('disable');
|
|
11
|
+
disableCommand
|
|
12
|
+
.description('Disable (deactivate) a warehouse')
|
|
13
|
+
.argument('[warehouse-id]', 'Warehouse ID (mutually exclusive with --ids)')
|
|
14
|
+
.option('--ids <ids>', 'Comma-separated warehouse IDs for batch operations')
|
|
15
|
+
.option('--force', 'Skip confirmation prompt')
|
|
16
|
+
.option('--dry-run', 'Preview the operation without executing')
|
|
17
|
+
.option('--json', 'Output as JSON')
|
|
18
|
+
.action(async (warehouseId: string | undefined, options: Record<string, unknown>) => {
|
|
19
|
+
const context = configManager.getCurrentContext();
|
|
20
|
+
const environment = context.environment as Environment;
|
|
21
|
+
const tenant = context.tenant;
|
|
22
|
+
const force = options.force === true;
|
|
23
|
+
const dryRun = options.dryRun === true;
|
|
24
|
+
const jsonOutput = options.json === true;
|
|
25
|
+
|
|
26
|
+
const batchIds = options.ids
|
|
27
|
+
? (options.ids as string).split(',').map((id) => id.trim()).filter((id) => id !== '')
|
|
28
|
+
: [];
|
|
29
|
+
|
|
30
|
+
if (!warehouseId && batchIds.length === 0) {
|
|
31
|
+
const errMsg = 'Invalid warehouse ID. Provide <warehouse-id> or use --ids for batch operations.';
|
|
32
|
+
if (jsonOutput) {
|
|
33
|
+
console.log(JSON.stringify({ success: false, error: { code: 'INVALID_ID', message: errMsg } }));
|
|
34
|
+
} else {
|
|
35
|
+
console.error(chalk.red(`\nā ${errMsg}\n`));
|
|
36
|
+
}
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const allIds = warehouseId ? [warehouseId] : batchIds;
|
|
41
|
+
|
|
42
|
+
if (!jsonOutput) {
|
|
43
|
+
console.log(chalk.bold(`\n⬠Disable Warehouse (${environment})\n`));
|
|
44
|
+
if (batchIds.length > 0) {
|
|
45
|
+
console.log(chalk.gray(` Warehouse IDs: ${batchIds.join(', ')}`));
|
|
46
|
+
} else {
|
|
47
|
+
console.log(chalk.gray(` Warehouse ID: ${warehouseId}`));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (dryRun) {
|
|
52
|
+
if (jsonOutput) {
|
|
53
|
+
console.log(JSON.stringify({
|
|
54
|
+
success: true,
|
|
55
|
+
dryRun: true,
|
|
56
|
+
warehouseIds: allIds,
|
|
57
|
+
message: 'No actual API call will be made',
|
|
58
|
+
}));
|
|
59
|
+
} else {
|
|
60
|
+
console.log(chalk.cyan('\nš Dry-Run Mode: No actual API call will be made\n'));
|
|
61
|
+
console.log(chalk.gray(` This operation will disable ${allIds.length} warehouse(s).`));
|
|
62
|
+
console.log();
|
|
63
|
+
}
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const warehouses: Warehouse[] = [];
|
|
68
|
+
for (const id of allIds) {
|
|
69
|
+
try {
|
|
70
|
+
const response = await apiClient.getWarehouse(environment, tenant, id);
|
|
71
|
+
if (!response.success || !response.data || !('warehouseId' in response.data)) {
|
|
72
|
+
const errMsg = `Warehouse not found: ${id}`;
|
|
73
|
+
if (jsonOutput) {
|
|
74
|
+
console.log(JSON.stringify({ success: false, error: { code: 'NOT_FOUND', message: errMsg } }));
|
|
75
|
+
} else {
|
|
76
|
+
console.error(chalk.red(`\nā ${errMsg}\n`));
|
|
77
|
+
}
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
warehouses.push(response.data as Warehouse);
|
|
81
|
+
} catch (error) {
|
|
82
|
+
const errMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
83
|
+
const jsonErr = { success: false, error: { code: 'FETCH_ERROR', message: 'Failed to fetch warehouse: ' + errMsg } };
|
|
84
|
+
if (jsonOutput) {
|
|
85
|
+
console.log(JSON.stringify(jsonErr));
|
|
86
|
+
} else {
|
|
87
|
+
console.error(chalk.red(`\nā Failed to fetch warehouse: ${errMsg}\n`));
|
|
88
|
+
}
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const allAlreadyDisabled = warehouses.every((w) => w.statusFlag === 2);
|
|
94
|
+
if (allAlreadyDisabled) {
|
|
95
|
+
const names = warehouses.map((w) => `"${w.warehouseName}"`).join(', ');
|
|
96
|
+
const errMsg = `Warehouse(s) ${names} ${warehouses.length === 1 ? 'is' : 'are'} already disabled`;
|
|
97
|
+
if (jsonOutput) {
|
|
98
|
+
console.log(JSON.stringify({ success: false, error: { code: 'ALREADY_DISABLED', message: errMsg } }));
|
|
99
|
+
} else {
|
|
100
|
+
console.error(chalk.yellow(`\nā ${errMsg}\n`));
|
|
101
|
+
}
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (!force) {
|
|
106
|
+
if (!jsonOutput) {
|
|
107
|
+
if (warehouses.length === 1) {
|
|
108
|
+
console.log(chalk.gray(` Name: ${warehouses[0].warehouseName}`));
|
|
109
|
+
console.log(chalk.gray(` Code: ${warehouses[0].warehouseCode}`));
|
|
110
|
+
} else {
|
|
111
|
+
warehouses.forEach((w, i) => {
|
|
112
|
+
console.log(chalk.gray(` [${i + 1}] ${w.warehouseName} (${w.warehouseCode})`));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const { confirm } = await inquirer.prompt([
|
|
118
|
+
{
|
|
119
|
+
type: 'confirm',
|
|
120
|
+
name: 'confirm',
|
|
121
|
+
message: warehouses.length === 1
|
|
122
|
+
? `Disable warehouse "${warehouses[0].warehouseName}"?`
|
|
123
|
+
: `Disable ${warehouses.length} warehouses?`,
|
|
124
|
+
default: false,
|
|
125
|
+
},
|
|
126
|
+
]);
|
|
127
|
+
|
|
128
|
+
if (!confirm) {
|
|
129
|
+
if (jsonOutput) {
|
|
130
|
+
console.log(JSON.stringify({ success: false, error: { code: 'CANCELLED', message: 'Operation cancelled' } }));
|
|
131
|
+
} else {
|
|
132
|
+
console.log(chalk.gray('\n Operation cancelled.\n'));
|
|
133
|
+
}
|
|
134
|
+
process.exit(0);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
try {
|
|
139
|
+
const response = await apiClient.batchDisableWarehouses(environment, tenant, allIds);
|
|
140
|
+
|
|
141
|
+
if (response.success) {
|
|
142
|
+
if (jsonOutput) {
|
|
143
|
+
console.log(JSON.stringify({ success: true, warehouseIds: allIds }));
|
|
144
|
+
} else {
|
|
145
|
+
const names = warehouses.map((w) => w.warehouseName).join(', ');
|
|
146
|
+
console.log(chalk.green(`\nā Warehouse(s) ${names || allIds.join(', ')} disabled\n`));
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
const errorMsg = response.error?.message || 'Unknown error';
|
|
150
|
+
const errorCode = response.error?.code || 'DISABLE_ERROR';
|
|
151
|
+
if (jsonOutput) {
|
|
152
|
+
console.log(JSON.stringify({ success: false, error: { code: errorCode, message: errorMsg } }));
|
|
153
|
+
} else {
|
|
154
|
+
console.error(chalk.red(`\nā Failed to disable warehouse(s): ${errorMsg}`));
|
|
155
|
+
if (response.error?.code) {
|
|
156
|
+
console.error(chalk.gray(` Error code: ${response.error.code}`));
|
|
157
|
+
}
|
|
158
|
+
console.error();
|
|
159
|
+
}
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
} catch (error) {
|
|
163
|
+
const errMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
164
|
+
if (jsonOutput) {
|
|
165
|
+
console.log(JSON.stringify({ success: false, error: { code: 'ERROR', message: errMsg } }));
|
|
166
|
+
} else {
|
|
167
|
+
console.error(chalk.red(`\nā Error: ${errMsg}\n`));
|
|
168
|
+
}
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
return disableCommand;
|
|
174
|
+
}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import inquirer from 'inquirer';
|
|
4
|
+
import { configManager } from '../../../core/config/manager.js';
|
|
5
|
+
import { apiClient } from '../../../core/api/client.js';
|
|
6
|
+
import { Environment } from '../../../types/index.js';
|
|
7
|
+
import { Warehouse } from '../../../types/warehouse.js';
|
|
8
|
+
|
|
9
|
+
export function createWarehouseEnableCommand(): Command {
|
|
10
|
+
const enableCommand = new Command('enable');
|
|
11
|
+
enableCommand
|
|
12
|
+
.description('Enable (activate) a warehouse')
|
|
13
|
+
.argument('[warehouse-id]', 'Warehouse ID (mutually exclusive with --ids)')
|
|
14
|
+
.option('--ids <ids>', 'Comma-separated warehouse IDs for batch operations')
|
|
15
|
+
.option('--force', 'Skip confirmation prompt')
|
|
16
|
+
.option('--dry-run', 'Preview the operation without executing')
|
|
17
|
+
.option('--json', 'Output as JSON')
|
|
18
|
+
.action(async (warehouseId: string | undefined, options: Record<string, unknown>) => {
|
|
19
|
+
const context = configManager.getCurrentContext();
|
|
20
|
+
const environment = context.environment as Environment;
|
|
21
|
+
const tenant = context.tenant;
|
|
22
|
+
const force = options.force === true;
|
|
23
|
+
const dryRun = options.dryRun === true;
|
|
24
|
+
const jsonOutput = options.json === true;
|
|
25
|
+
|
|
26
|
+
const batchIds = options.ids
|
|
27
|
+
? (options.ids as string).split(',').map((id) => id.trim()).filter((id) => id !== '')
|
|
28
|
+
: [];
|
|
29
|
+
|
|
30
|
+
if (!warehouseId && batchIds.length === 0) {
|
|
31
|
+
const errMsg = 'Invalid warehouse ID. Provide <warehouse-id> or use --ids for batch operations.';
|
|
32
|
+
if (jsonOutput) {
|
|
33
|
+
console.log(JSON.stringify({ success: false, error: { code: 'INVALID_ID', message: errMsg } }));
|
|
34
|
+
} else {
|
|
35
|
+
console.error(chalk.red(`\nā ${errMsg}\n`));
|
|
36
|
+
}
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const allIds = warehouseId ? [warehouseId] : batchIds;
|
|
41
|
+
|
|
42
|
+
if (!jsonOutput) {
|
|
43
|
+
console.log(chalk.bold(`\nā Enable Warehouse (${environment})\n`));
|
|
44
|
+
if (batchIds.length > 0) {
|
|
45
|
+
console.log(chalk.gray(` Warehouse IDs: ${batchIds.join(', ')}`));
|
|
46
|
+
} else {
|
|
47
|
+
console.log(chalk.gray(` Warehouse ID: ${warehouseId}`));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (dryRun) {
|
|
52
|
+
if (jsonOutput) {
|
|
53
|
+
console.log(JSON.stringify({
|
|
54
|
+
success: true,
|
|
55
|
+
dryRun: true,
|
|
56
|
+
warehouseIds: allIds,
|
|
57
|
+
message: 'No actual API call will be made',
|
|
58
|
+
}));
|
|
59
|
+
} else {
|
|
60
|
+
console.log(chalk.cyan('\nš Dry-Run Mode: No actual API call will be made\n'));
|
|
61
|
+
console.log(chalk.gray(` This operation will enable ${allIds.length} warehouse(s).`));
|
|
62
|
+
console.log();
|
|
63
|
+
}
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const warehouses: Warehouse[] = [];
|
|
68
|
+
for (const id of allIds) {
|
|
69
|
+
try {
|
|
70
|
+
const response = await apiClient.getWarehouse(environment, tenant, id);
|
|
71
|
+
if (!response.success || !response.data || !('warehouseId' in response.data)) {
|
|
72
|
+
const errMsg = `Warehouse not found: ${id}`;
|
|
73
|
+
if (jsonOutput) {
|
|
74
|
+
console.log(JSON.stringify({ success: false, error: { code: 'NOT_FOUND', message: errMsg } }));
|
|
75
|
+
} else {
|
|
76
|
+
console.error(chalk.red(`\nā ${errMsg}\n`));
|
|
77
|
+
}
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
warehouses.push(response.data as Warehouse);
|
|
81
|
+
} catch (error) {
|
|
82
|
+
const errMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
83
|
+
const jsonErr = { success: false, error: { code: 'FETCH_ERROR', message: 'Failed to fetch warehouse: ' + errMsg } };
|
|
84
|
+
if (jsonOutput) {
|
|
85
|
+
console.log(JSON.stringify(jsonErr));
|
|
86
|
+
} else {
|
|
87
|
+
console.error(chalk.red(`\nā Failed to fetch warehouse: ${errMsg}\n`));
|
|
88
|
+
}
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const allAlreadyEnabled = warehouses.every((w) => w.statusFlag === 1);
|
|
94
|
+
if (allAlreadyEnabled) {
|
|
95
|
+
const names = warehouses.map((w) => `"${w.warehouseName}"`).join(', ');
|
|
96
|
+
const errMsg = `Warehouse(s) ${names} ${warehouses.length === 1 ? 'is' : 'are'} already enabled`;
|
|
97
|
+
if (jsonOutput) {
|
|
98
|
+
console.log(JSON.stringify({ success: false, error: { code: 'ALREADY_ENABLED', message: errMsg } }));
|
|
99
|
+
} else {
|
|
100
|
+
console.error(chalk.yellow(`\nā ${errMsg}\n`));
|
|
101
|
+
}
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
if (!force) {
|
|
106
|
+
if (!jsonOutput) {
|
|
107
|
+
if (warehouses.length === 1) {
|
|
108
|
+
console.log(chalk.gray(` Name: ${warehouses[0].warehouseName}`));
|
|
109
|
+
console.log(chalk.gray(` Code: ${warehouses[0].warehouseCode}`));
|
|
110
|
+
} else {
|
|
111
|
+
warehouses.forEach((w, i) => {
|
|
112
|
+
console.log(chalk.gray(` [${i + 1}] ${w.warehouseName} (${w.warehouseCode})`));
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const { confirm } = await inquirer.prompt([
|
|
118
|
+
{
|
|
119
|
+
type: 'confirm',
|
|
120
|
+
name: 'confirm',
|
|
121
|
+
message: warehouses.length === 1
|
|
122
|
+
? `Enable warehouse "${warehouses[0].warehouseName}"?`
|
|
123
|
+
: `Enable ${warehouses.length} warehouses?`,
|
|
124
|
+
default: false,
|
|
125
|
+
},
|
|
126
|
+
]);
|
|
127
|
+
|
|
128
|
+
if (!confirm) {
|
|
129
|
+
if (jsonOutput) {
|
|
130
|
+
console.log(JSON.stringify({ success: false, error: { code: 'CANCELLED', message: 'Operation cancelled' } }));
|
|
131
|
+
} else {
|
|
132
|
+
console.log(chalk.gray('\n Operation cancelled.\n'));
|
|
133
|
+
}
|
|
134
|
+
process.exit(0);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
try {
|
|
139
|
+
const response = await apiClient.batchEnableWarehouses(environment, tenant, allIds);
|
|
140
|
+
|
|
141
|
+
if (response.success) {
|
|
142
|
+
if (jsonOutput) {
|
|
143
|
+
console.log(JSON.stringify({ success: true, warehouseIds: allIds }));
|
|
144
|
+
} else {
|
|
145
|
+
const names = warehouses.map((w) => w.warehouseName).join(', ');
|
|
146
|
+
console.log(chalk.green(`\nā Warehouse(s) ${names || allIds.join(', ')} enabled\n`));
|
|
147
|
+
}
|
|
148
|
+
} else {
|
|
149
|
+
const errorMsg = response.error?.message || 'Unknown error';
|
|
150
|
+
const errorCode = response.error?.code || 'ENABLE_ERROR';
|
|
151
|
+
if (jsonOutput) {
|
|
152
|
+
console.log(JSON.stringify({ success: false, error: { code: errorCode, message: errorMsg } }));
|
|
153
|
+
} else {
|
|
154
|
+
console.error(chalk.red(`\nā Failed to enable warehouse(s): ${errorMsg}`));
|
|
155
|
+
if (response.error?.code) {
|
|
156
|
+
console.error(chalk.gray(` Error code: ${response.error.code}`));
|
|
157
|
+
}
|
|
158
|
+
console.error();
|
|
159
|
+
}
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
} catch (error) {
|
|
163
|
+
const errMsg = error instanceof Error ? error.message : 'Unknown error';
|
|
164
|
+
if (jsonOutput) {
|
|
165
|
+
console.log(JSON.stringify({ success: false, error: { code: 'ERROR', message: errMsg } }));
|
|
166
|
+
} else {
|
|
167
|
+
console.error(chalk.red(`\nā Error: ${errMsg}\n`));
|
|
168
|
+
}
|
|
169
|
+
process.exit(1);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
return enableCommand;
|
|
174
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { configManager } from '../../../core/config/manager.js';
|
|
4
|
+
import { apiClient } from '../../../core/api/client.js';
|
|
5
|
+
import { Environment } from '../../../types/index.js';
|
|
6
|
+
import { Warehouse } from '../../../types/warehouse.js';
|
|
7
|
+
|
|
8
|
+
export function createWarehouseGetCommand(): Command {
|
|
9
|
+
const getCommand = new Command('get');
|
|
10
|
+
getCommand.description('Get warehouse details by ID');
|
|
11
|
+
getCommand.arguments('<warehouse-id>');
|
|
12
|
+
getCommand.option('--json', 'Output as JSON');
|
|
13
|
+
|
|
14
|
+
getCommand.action(async (warehouseId: string, options: Record<string, unknown>) => {
|
|
15
|
+
const context = configManager.getCurrentContext();
|
|
16
|
+
const environment = (options.env as Environment) || context.environment;
|
|
17
|
+
const tenant = (options.tenant as string) || context.tenant;
|
|
18
|
+
|
|
19
|
+
if (!warehouseId) {
|
|
20
|
+
console.error(chalk.red('\nā Warehouse ID is required\n'));
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (!warehouseId || warehouseId.trim() === '') {
|
|
25
|
+
console.error(chalk.red('\nā Invalid warehouse ID.\n'));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
const response = await apiClient.getWarehouse(environment, tenant, warehouseId);
|
|
31
|
+
|
|
32
|
+
if (!response.success) {
|
|
33
|
+
const errorCode = response.error?.code || 'UNKNOWN_ERROR';
|
|
34
|
+
const errorMessage = response.error?.message || 'Unknown error';
|
|
35
|
+
|
|
36
|
+
// Handle "warehouse not found" case
|
|
37
|
+
if (errorCode === '01001150001' || errorMessage.includes('äøååØ')) {
|
|
38
|
+
console.error(chalk.red(`\nā Warehouse not found: ${warehouseId}\n`));
|
|
39
|
+
} else {
|
|
40
|
+
console.error(chalk.red(`\nā Error: ${errorMessage} (${errorCode})\n`));
|
|
41
|
+
}
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const warehouse = response.data as Warehouse | null;
|
|
46
|
+
|
|
47
|
+
if (!warehouse) {
|
|
48
|
+
console.error(chalk.red('\nā Warehouse not found\n'));
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
if (options.json) {
|
|
53
|
+
console.log(JSON.stringify({
|
|
54
|
+
success: true,
|
|
55
|
+
data: warehouse,
|
|
56
|
+
}, null, 2));
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Table output
|
|
61
|
+
console.log(chalk.bold('\nš Warehouse Details\n'));
|
|
62
|
+
console.log(` ${chalk.gray('ID:')} ${warehouse.warehouseId}`);
|
|
63
|
+
console.log(` ${chalk.gray('Code:')} ${warehouse.warehouseCode}`);
|
|
64
|
+
console.log(` ${chalk.gray('Name:')} ${warehouse.warehouseName}`);
|
|
65
|
+
if (warehouse.warehouseType) {
|
|
66
|
+
console.log(` ${chalk.gray('Type:')} ${warehouse.warehouseType}`);
|
|
67
|
+
}
|
|
68
|
+
if (warehouse.warehouseClasses) {
|
|
69
|
+
console.log(` ${chalk.gray('Classes:')} ${warehouse.warehouseClasses}`);
|
|
70
|
+
}
|
|
71
|
+
if (warehouse.address) {
|
|
72
|
+
console.log(` ${chalk.gray('Address:')} ${warehouse.address}`);
|
|
73
|
+
}
|
|
74
|
+
if (warehouse.contact) {
|
|
75
|
+
console.log(` ${chalk.gray('Contact:')} ${warehouse.contact}`);
|
|
76
|
+
}
|
|
77
|
+
if (warehouse.phone) {
|
|
78
|
+
console.log(` ${chalk.gray('Phone:')} ${warehouse.phone}`);
|
|
79
|
+
}
|
|
80
|
+
if (warehouse.manager) {
|
|
81
|
+
console.log(` ${chalk.gray('Manager:')} ${warehouse.manager}`);
|
|
82
|
+
}
|
|
83
|
+
if (warehouse.enableLocation !== undefined) {
|
|
84
|
+
console.log(` ${chalk.gray('Enable Location:')} ${warehouse.enableLocation ? 'Yes' : 'No'}`);
|
|
85
|
+
}
|
|
86
|
+
if (warehouse.enableNegativeInventory !== undefined) {
|
|
87
|
+
console.log(` ${chalk.gray('Enable Negative:')} ${warehouse.enableNegativeInventory ? 'Yes' : 'No'}`);
|
|
88
|
+
}
|
|
89
|
+
if (warehouse.remark) {
|
|
90
|
+
console.log(` ${chalk.gray('Remark:')} ${warehouse.remark}`);
|
|
91
|
+
}
|
|
92
|
+
console.log(` ${chalk.gray('Status:')} ${warehouse.statusFlag === 1 ? 'Enable' : 'Disable'}`);
|
|
93
|
+
console.log();
|
|
94
|
+
} catch (error) {
|
|
95
|
+
console.error(chalk.red(`\nā Unexpected error: ${error instanceof Error ? error.message : 'Unknown error'}\n`));
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
return getCommand;
|
|
101
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { createWarehouseCreateCommand } from './create.js';
|
|
3
|
+
import { createWarehouseListCommand } from './list.js';
|
|
4
|
+
import { createWarehouseGetCommand } from './get.js';
|
|
5
|
+
import { createWarehouseUpdateCommand } from './update.js';
|
|
6
|
+
import { createWarehouseDeleteCommand } from './delete.js';
|
|
7
|
+
import { createWarehouseEnableCommand } from './enable.js';
|
|
8
|
+
import { createWarehouseDisableCommand } from './disable.js';
|
|
9
|
+
import { createLocationsCommand } from './locations/index.js';
|
|
10
|
+
|
|
11
|
+
export function createWarehousesCommand(): Command {
|
|
12
|
+
const warehousesCommand = new Command('warehouses');
|
|
13
|
+
warehousesCommand.description('Manage warehouses');
|
|
14
|
+
|
|
15
|
+
warehousesCommand.addCommand(createWarehouseListCommand());
|
|
16
|
+
warehousesCommand.addCommand(createWarehouseGetCommand());
|
|
17
|
+
warehousesCommand.addCommand(createWarehouseCreateCommand());
|
|
18
|
+
warehousesCommand.addCommand(createWarehouseUpdateCommand());
|
|
19
|
+
warehousesCommand.addCommand(createWarehouseDeleteCommand());
|
|
20
|
+
warehousesCommand.addCommand(createWarehouseEnableCommand());
|
|
21
|
+
warehousesCommand.addCommand(createWarehouseDisableCommand());
|
|
22
|
+
warehousesCommand.addCommand(createLocationsCommand());
|
|
23
|
+
|
|
24
|
+
return warehousesCommand;
|
|
25
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import Table from 'cli-table3';
|
|
4
|
+
import { configManager } from '../../../core/config/manager.js';
|
|
5
|
+
import { apiClient } from '../../../core/api/client.js';
|
|
6
|
+
import { WarehouseListResponse, StatusFlag } from '../../../types/warehouse.js';
|
|
7
|
+
import { Environment } from '../../../types/index.js';
|
|
8
|
+
|
|
9
|
+
export function createWarehouseListCommand(): Command {
|
|
10
|
+
const listCommand = new Command('list');
|
|
11
|
+
listCommand.description('List warehouses with pagination');
|
|
12
|
+
|
|
13
|
+
listCommand
|
|
14
|
+
.option('-p, --page <number>', 'Page number', '1')
|
|
15
|
+
.option('-s, --size <number>', 'Page size', '20')
|
|
16
|
+
.option('--status <number>', 'Status filter (1=enable, 2=disable)')
|
|
17
|
+
.option('--name <string>', 'Warehouse name filter (search by name)')
|
|
18
|
+
.option('--code <string>', 'Warehouse code filter (exact match)')
|
|
19
|
+
.option('--json', 'Output as JSON')
|
|
20
|
+
.action(async (options) => {
|
|
21
|
+
const context = configManager.getCurrentContext();
|
|
22
|
+
const environment = (options.env as Environment) || context.environment;
|
|
23
|
+
const tenant = options.tenant || context.tenant;
|
|
24
|
+
|
|
25
|
+
const page = parseInt(options.page as string, 10) - 1;
|
|
26
|
+
const size = parseInt(options.size as string, 10);
|
|
27
|
+
|
|
28
|
+
const params: {
|
|
29
|
+
pageNo: number;
|
|
30
|
+
pageSize: number;
|
|
31
|
+
status?: StatusFlag;
|
|
32
|
+
warehouseCode?: string;
|
|
33
|
+
warehouseName?: string;
|
|
34
|
+
} = { pageNo: page, pageSize: size };
|
|
35
|
+
|
|
36
|
+
if (options.status !== undefined) {
|
|
37
|
+
const statusNum = parseInt(options.status as string, 10);
|
|
38
|
+
if (statusNum === 1 || statusNum === 2) {
|
|
39
|
+
params.status = statusNum as StatusFlag;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (options.code !== undefined) {
|
|
44
|
+
params.warehouseCode = options.code as string;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (options.name !== undefined) {
|
|
48
|
+
params.warehouseName = options.name as string;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const response = await apiClient.listWarehouses(environment, tenant, params);
|
|
52
|
+
|
|
53
|
+
if (!response.success) {
|
|
54
|
+
console.error(chalk.red(`\nā Failed to list warehouses: ${response.error?.message || 'Unknown error'}`));
|
|
55
|
+
if (response.error?.code) {
|
|
56
|
+
console.error(chalk.gray(` Error code: ${response.error.code}`));
|
|
57
|
+
}
|
|
58
|
+
console.error();
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const data = response.data as WarehouseListResponse | null;
|
|
63
|
+
|
|
64
|
+
if (!data) {
|
|
65
|
+
if (options.json) {
|
|
66
|
+
console.log(JSON.stringify({ success: true, data: { items: [], pagination: { pageNo: 0, pageSize: 20, totalRows: 0 } } }, null, 2));
|
|
67
|
+
} else {
|
|
68
|
+
console.log(chalk.bold('\nš¦ Warehouse List\n'));
|
|
69
|
+
console.log(chalk.gray(' No warehouses found\n'));
|
|
70
|
+
}
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (options.json) {
|
|
75
|
+
console.log(
|
|
76
|
+
JSON.stringify(
|
|
77
|
+
{
|
|
78
|
+
success: true,
|
|
79
|
+
data: {
|
|
80
|
+
items: data.rows || [],
|
|
81
|
+
pagination: {
|
|
82
|
+
pageNo: data.pageNo,
|
|
83
|
+
pageSize: data.pageSize,
|
|
84
|
+
totalRows: data.totalRows,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
null,
|
|
89
|
+
2
|
|
90
|
+
)
|
|
91
|
+
);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const records = data.rows || [];
|
|
96
|
+
|
|
97
|
+
if (records.length === 0) {
|
|
98
|
+
console.log(chalk.bold('\nš¦ Warehouse List\n'));
|
|
99
|
+
console.log(chalk.gray(' No warehouses found\n'));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
console.log(chalk.bold('\nš¦ Warehouse List\n'));
|
|
104
|
+
|
|
105
|
+
const table = new Table({
|
|
106
|
+
head: [chalk.bold('ID'), chalk.bold('Code'), chalk.bold('Name'), chalk.bold('Type'), chalk.bold('Status')],
|
|
107
|
+
colWidths: [12, 15, 25, 15, 10],
|
|
108
|
+
style: {
|
|
109
|
+
head: [],
|
|
110
|
+
border: [],
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
for (const warehouse of records) {
|
|
115
|
+
const statusText = warehouse.statusFlag === 1 ? chalk.green('Enable') : chalk.red('Disable');
|
|
116
|
+
table.push([
|
|
117
|
+
warehouse.warehouseId,
|
|
118
|
+
warehouse.warehouseCode || '-',
|
|
119
|
+
warehouse.warehouseName || '-',
|
|
120
|
+
warehouse.warehouseType || '-',
|
|
121
|
+
statusText,
|
|
122
|
+
]);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
console.log(table.toString());
|
|
126
|
+
console.log();
|
|
127
|
+
console.log(
|
|
128
|
+
chalk.gray(
|
|
129
|
+
` Total: ${data.totalRows} | Page: ${data.pageNo} / ${Math.ceil(data.totalRows / data.pageSize) || 1} | Size: ${data.pageSize}`
|
|
130
|
+
)
|
|
131
|
+
);
|
|
132
|
+
console.log();
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
return listCommand;
|
|
136
|
+
}
|