closer-cli 0.1.0 → 0.5.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.
- package/cmds/importData.js +6 -2
- package/cmds/importData_cmds/multiple.js +15 -3
- package/cmds/importData_cmds/single.js +14 -3
- package/csv/simple_users.csv +8 -8
- package/csv/users.csv +1 -1
- package/helpers.js +17 -5
- package/package.json +2 -1
package/cmds/importData.js
CHANGED
|
@@ -24,13 +24,17 @@ exports.builder = yargs => {
|
|
|
24
24
|
.option('out', {
|
|
25
25
|
alias: 'o',
|
|
26
26
|
describe: 'Directory path that will contain errored CSV files',
|
|
27
|
-
type: 'string'
|
|
28
|
-
default: '.out'
|
|
27
|
+
type: 'string'
|
|
29
28
|
})
|
|
30
29
|
.option('skipTasksBeforeImport', {
|
|
31
30
|
describe: 'Skip tasks before start import process',
|
|
32
31
|
type: 'bool'
|
|
33
32
|
})
|
|
33
|
+
.option('csvDelimiter', {
|
|
34
|
+
describe: 'CSV Delimiter',
|
|
35
|
+
type: 'string',
|
|
36
|
+
default: ','
|
|
37
|
+
})
|
|
34
38
|
.implies('non-interactive', ['type', 'mode'])
|
|
35
39
|
}
|
|
36
40
|
|
|
@@ -6,6 +6,7 @@ const path = require('path')
|
|
|
6
6
|
const chalk = require('chalk')
|
|
7
7
|
const prompts = require('prompts')
|
|
8
8
|
const Ora = require('ora')
|
|
9
|
+
|
|
9
10
|
const {
|
|
10
11
|
getCsvFilesFromDir,
|
|
11
12
|
ALLOWED_CSV_FILES,
|
|
@@ -17,7 +18,8 @@ const {
|
|
|
17
18
|
download,
|
|
18
19
|
callBeforeDataImportProcess,
|
|
19
20
|
callAfterDataImportProcess,
|
|
20
|
-
getExecutionTime
|
|
21
|
+
getExecutionTime,
|
|
22
|
+
getArchiveFolder
|
|
21
23
|
} = require('../../helpers')
|
|
22
24
|
|
|
23
25
|
exports.command = 'multiple [options]'
|
|
@@ -52,6 +54,9 @@ exports.builder = yargs => {
|
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
exports.handler = async argv => {
|
|
57
|
+
// eslint-disable-next-line no-param-reassign
|
|
58
|
+
argv.out = argv.out || getArchiveFolder(argv.endpoint)
|
|
59
|
+
|
|
55
60
|
const hrstart = process.hrtime()
|
|
56
61
|
const report = {
|
|
57
62
|
start: new Date(),
|
|
@@ -172,7 +177,7 @@ exports.handler = async argv => {
|
|
|
172
177
|
// Validate CSV headers sequentially
|
|
173
178
|
//
|
|
174
179
|
for (const item of parsedFiles) {
|
|
175
|
-
const validation = await validateCsvFromFile(item.file, item.csvType, ws)
|
|
180
|
+
const validation = await validateCsvFromFile(item.file, item.csvType, ws, argv.csvDelimiter)
|
|
176
181
|
validations.push(validation)
|
|
177
182
|
}
|
|
178
183
|
|
|
@@ -227,7 +232,14 @@ exports.handler = async argv => {
|
|
|
227
232
|
// Import CSV files sequentially
|
|
228
233
|
//
|
|
229
234
|
for (const item of parsedFiles) {
|
|
230
|
-
const csvReport = await importCsvFromFile(
|
|
235
|
+
const csvReport = await importCsvFromFile(
|
|
236
|
+
item.file,
|
|
237
|
+
item.csvType,
|
|
238
|
+
argv.out,
|
|
239
|
+
spinner,
|
|
240
|
+
ws,
|
|
241
|
+
argv.csvDelimiter
|
|
242
|
+
)
|
|
231
243
|
csvReports.push(csvReport)
|
|
232
244
|
}
|
|
233
245
|
|
|
@@ -13,7 +13,8 @@ const {
|
|
|
13
13
|
callBeforeDataImportProcess,
|
|
14
14
|
ALLOWED_CSV_FILES,
|
|
15
15
|
download,
|
|
16
|
-
validateCsvFromFile
|
|
16
|
+
validateCsvFromFile,
|
|
17
|
+
getArchiveFolder
|
|
17
18
|
} = require('../../helpers')
|
|
18
19
|
|
|
19
20
|
exports.command = 'single [options]'
|
|
@@ -48,6 +49,9 @@ exports.builder = yargs => {
|
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
exports.handler = async argv => {
|
|
52
|
+
// eslint-disable-next-line no-param-reassign
|
|
53
|
+
argv.out = argv.out || getArchiveFolder(argv.endpoint)
|
|
54
|
+
|
|
51
55
|
const spinner = new Ora()
|
|
52
56
|
const hrstart = process.hrtime()
|
|
53
57
|
|
|
@@ -153,7 +157,7 @@ exports.handler = async argv => {
|
|
|
153
157
|
spinner.succeed('Downloaded file')
|
|
154
158
|
}
|
|
155
159
|
|
|
156
|
-
const validation = await validateCsvFromFile(filepath, type, ws)
|
|
160
|
+
const validation = await validateCsvFromFile(filepath, type, ws, argv.csvDelimiter)
|
|
157
161
|
|
|
158
162
|
if (validation.error) {
|
|
159
163
|
console.log(`ERROR => [${chalk.red(validation.inputFile)}] ${validation.error}`)
|
|
@@ -172,7 +176,14 @@ exports.handler = async argv => {
|
|
|
172
176
|
}
|
|
173
177
|
|
|
174
178
|
if (argv.fromFile) {
|
|
175
|
-
csvReport = await importCsvFromFile(
|
|
179
|
+
csvReport = await importCsvFromFile(
|
|
180
|
+
argv.fromFile,
|
|
181
|
+
type,
|
|
182
|
+
argv.out,
|
|
183
|
+
spinner,
|
|
184
|
+
ws,
|
|
185
|
+
argv.csvDelimiter
|
|
186
|
+
)
|
|
176
187
|
}
|
|
177
188
|
|
|
178
189
|
const refreshedOrders = await refreshOrders(spinner, ws)
|
package/csv/simple_users.csv
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
UserCode,Name,Email,Password,MacroFilterCodes,
|
|
2
|
-
MR,Mario Rossi,mario.rossi@closer.sale,projectx,SS2020|FW2020|SS2021,TRUE,TRUE,EZ|EF|NR|FP|NDR|FC
|
|
3
|
-
EZ,Enrico Zeffiro,enrico.zeffiro@h-farm.com,projectx,SS2020|FW2020|SS2021,TRUE,TRUE,MR|EF|NR|FP|NDR|FC
|
|
4
|
-
EF,Emanuele Fornaro,emanuele.fornaro@h-farm.com,projectx,SS2020|FW2020,TRUE,TRUE,MR|EZ|NR|FP|NDR|FC
|
|
5
|
-
NR,Nicole Raffino,nicole.raffino@h-farm.com,projectx,SS2020|FW2020,TRUE,TRUE,MR|EZ|EF|FP|NDR|FC
|
|
6
|
-
FP,Francesco Pasqua,francesco.pasqua@h-farm.com,projectx,SS2020|FW2020,TRUE,TRUE,MR|EZ|EF|NR|NDR|FC
|
|
7
|
-
NDR,Nicola Dei Rossi,nicola.deirossi@h-farm.com,projectx,FW2020,TRUE,TRUE,MR|EZ|EF|NR|FP|FC
|
|
8
|
-
FC,Fabio Carraro,fabio.carraro@h-farm.com,projectx,SS2020|FW2020,TRUE,TRUE,MR|EZ|EF|NR|FP|NDR
|
|
1
|
+
UserCode,Name,Email,Password,MacroFilterCodes,CanSendOrder,CanCloseOrder,SharingUsers
|
|
2
|
+
MR,Mario Rossi,mario.rossi@closer.sale,projectx,SS2020|FW2020|SS2021,TRUE,TRUE,EZ|EF|NR|FP|NDR|FC
|
|
3
|
+
EZ,Enrico Zeffiro,enrico.zeffiro@h-farm.com,projectx,SS2020|FW2020|SS2021,TRUE,TRUE,MR|EF|NR|FP|NDR|FC
|
|
4
|
+
EF,Emanuele Fornaro,emanuele.fornaro@h-farm.com,projectx,SS2020|FW2020,TRUE,TRUE,MR|EZ|NR|FP|NDR|FC
|
|
5
|
+
NR,Nicole Raffino,nicole.raffino@h-farm.com,projectx,SS2020|FW2020,TRUE,TRUE,MR|EZ|EF|FP|NDR|FC
|
|
6
|
+
FP,Francesco Pasqua,francesco.pasqua@h-farm.com,projectx,SS2020|FW2020,TRUE,TRUE,MR|EZ|EF|NR|NDR|FC
|
|
7
|
+
NDR,Nicola Dei Rossi,nicola.deirossi@h-farm.com,projectx,FW2020,TRUE,TRUE,MR|EZ|EF|NR|FP|FC
|
|
8
|
+
FC,Fabio Carraro,fabio.carraro@h-farm.com,projectx,SS2020|FW2020,TRUE,TRUE,MR|EZ|EF|NR|FP|NDR
|
package/csv/users.csv
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
UserCode,Name,Email,Password,GroupCodes,MacroFilterCodes,
|
|
1
|
+
UserCode,Name,Email,Password,GroupCodes,MacroFilterCodes,CanSendOrder,CanCloseOrder,SharingUsers,Role
|
|
2
2
|
MR,Mario Rossi,mario.rossicloser.sale,projectx,AI|WA,SS2020|FW2020|SS2021,TRUE,TRUE,EZ|EF|NR|FP|NDR|FC,
|
|
3
3
|
EZ,Enrico Zeffiro,enrico.zeffiro@h-farm.com,projectx,AI|WA,SS2020|FW2020|SS2021,TRUE,TRUE,MR|EF|NR|FP|NDR|FC,
|
|
4
4
|
EF,Emanuele Fornaro,emanuele.fornaro@h-farm.com,projectx,AI|WA,SS2020|FW2020,TRUE,TRUE,MR|EZ|NR|FP|NDR|FC,
|
package/helpers.js
CHANGED
|
@@ -10,6 +10,7 @@ const parse = require('csv-parse/lib/sync')
|
|
|
10
10
|
const stringify = require('csv-stringify/lib/sync')
|
|
11
11
|
const got = require('got')
|
|
12
12
|
const { createWriteStream } = require('fs')
|
|
13
|
+
const slugify = require('slugify')
|
|
13
14
|
|
|
14
15
|
exports.createSocketConnection = (endpoint, adminSecret) => {
|
|
15
16
|
const protocol = endpoint.includes('localhost') ? 'ws' : 'wss'
|
|
@@ -24,10 +25,11 @@ exports.ALLOWED_CSV_FILES = {
|
|
|
24
25
|
product: 'products.csv',
|
|
25
26
|
price: 'prices.csv',
|
|
26
27
|
group: 'groups.csv',
|
|
28
|
+
lookup: 'lookups.csv',
|
|
27
29
|
user: 'users.csv',
|
|
28
30
|
customer: 'customers.csv',
|
|
29
|
-
lookup: 'lookups.csv',
|
|
30
31
|
label: 'labels.csv',
|
|
32
|
+
filterPosition: 'filterPosition.csv',
|
|
31
33
|
fieldConfiguration: 'fieldConfigurations.csv',
|
|
32
34
|
userCustomer: 'userCustomers.csv'
|
|
33
35
|
}
|
|
@@ -38,7 +40,7 @@ exports.getCsvFilesFromDir = dir =>
|
|
|
38
40
|
exports.getGoogleSheetCsvUrl = (docId, sheet) =>
|
|
39
41
|
`https://docs.google.com/spreadsheets/d/${docId}/gviz/tq?tqx=out:csv&sheet=${sheet}`
|
|
40
42
|
|
|
41
|
-
exports.importCsvFromFile = (file, csvType, outputDir, spinner, ws) =>
|
|
43
|
+
exports.importCsvFromFile = (file, csvType, outputDir, spinner, ws, delimiter = ',') =>
|
|
42
44
|
new Promise(resolve => {
|
|
43
45
|
const socket = this.createSocketConnection(ws.endpoint, ws.adminSecret)
|
|
44
46
|
|
|
@@ -166,7 +168,7 @@ exports.importCsvFromFile = (file, csvType, outputDir, spinner, ws) =>
|
|
|
166
168
|
columns: true,
|
|
167
169
|
skip_empty_lines: true,
|
|
168
170
|
skipLinesWithEmptyValues: true,
|
|
169
|
-
delimiter
|
|
171
|
+
delimiter
|
|
170
172
|
})
|
|
171
173
|
|
|
172
174
|
if (rows.length > 0) {
|
|
@@ -217,7 +219,7 @@ exports.importCsvFromFile = (file, csvType, outputDir, spinner, ws) =>
|
|
|
217
219
|
})
|
|
218
220
|
})
|
|
219
221
|
|
|
220
|
-
exports.validateCsvFromFile = (file, csvType, ws) =>
|
|
222
|
+
exports.validateCsvFromFile = (file, csvType, ws, delimiter = ',') =>
|
|
221
223
|
new Promise(resolve => {
|
|
222
224
|
const socket = this.createSocketConnection(ws.endpoint, ws.adminSecret)
|
|
223
225
|
|
|
@@ -247,7 +249,7 @@ exports.validateCsvFromFile = (file, csvType, ws) =>
|
|
|
247
249
|
columns: true,
|
|
248
250
|
skip_empty_lines: true,
|
|
249
251
|
skipLinesWithEmptyValues: true,
|
|
250
|
-
delimiter
|
|
252
|
+
delimiter
|
|
251
253
|
})
|
|
252
254
|
|
|
253
255
|
const packet = {
|
|
@@ -703,3 +705,13 @@ exports.flushMedia = (spinner, ws) =>
|
|
|
703
705
|
resolve({ error: e.message })
|
|
704
706
|
})
|
|
705
707
|
})
|
|
708
|
+
|
|
709
|
+
exports.getArchiveFolder = instanceEndpoint => {
|
|
710
|
+
const date = new Date()
|
|
711
|
+
const prefix = 'closer'
|
|
712
|
+
const instance = slugify(instanceEndpoint.split('/')[0], { lower: true })
|
|
713
|
+
const [isoDateString, isoTimeString] = date.toISOString().split('T')
|
|
714
|
+
const dateString = isoDateString.split('-').join('')
|
|
715
|
+
const timeString = isoTimeString.split(':').join('').split('.')[0]
|
|
716
|
+
return `${prefix}_${instance}/${dateString}_${timeString}`.split(':').join('')
|
|
717
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "closer-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"ora": "^5.4.1",
|
|
20
20
|
"prompts": "^2.4.2",
|
|
21
21
|
"require-directory": "^2.1.1",
|
|
22
|
+
"slugify": "^1.6.3",
|
|
22
23
|
"ws": "^8.0.0",
|
|
23
24
|
"yargs": "^17.0.1"
|
|
24
25
|
}
|