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.
@@ -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(item.file, item.csvType, argv.out, spinner, ws)
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(argv.fromFile, type, argv.out, spinner, ws)
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)
@@ -1,8 +1,8 @@
1
- UserCode,Name,Email,Password,MacroFilterCodes,CanShareOrder,CanSendOrder,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
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,CanShareOrder,CanSendOrder,SharingUsers,Role
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.1.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
  }