dtable-statistic 4.0.12 → 4.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.
@@ -5,7 +5,8 @@ import { getOption, getCollaborator, getNumberDisplayString, isNumber, CellType,
5
5
  import { isCellValueChanged } from './cell-value';
6
6
  import { getSelectColumnOptions, getDateColumnFormat } from './column';
7
7
  import { getKnownCreatorByEmail } from './collaborator';
8
- import { EMPTY_NAME } from '../constants';
8
+ import { EMPTY_NAME, STATISTICS_COUNT_TYPE } from '../constants';
9
+ import { getPivotTableSummaryTotal } from './pivot-table';
9
10
  var isEmptyName = function isEmptyName(title) {
10
11
  return title === null || title === '';
11
12
  };
@@ -96,276 +97,8 @@ var getValidValueForColumn = function getValidValueForColumn(column, value) {
96
97
  if (type === CellType.TEXT) return value ? value : '';
97
98
  return '';
98
99
  };
99
- var getUpdatedOneDimensionStatisticTableResultToTable = function getUpdatedOneDimensionStatisticTableResultToTable(_ref3) {
100
- var updateTable = _ref3.updateTable,
101
- statisticalResult = _ref3.statisticalResult;
102
- var pivotResult = statisticalResult.pivotResult,
103
- groupbyColumn = statisticalResult.groupbyColumn,
104
- statisticTableColumns = statisticalResult.statisticTableColumns;
105
- if (!groupbyColumn) return {};
106
- var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
107
- if (!nameColumn) return {};
108
- var pivot_rows = pivotResult.pivot_rows,
109
- pivot_columns = pivotResult.pivot_columns;
110
- var tableRows = updateTable.rows;
111
- var columnMap = {};
112
- var newRows = [];
113
- var updatedRows = {};
114
- var oldRows = {};
115
- var rowIds = [];
116
-
117
- // one dimension table no summary columns
118
- if (pivot_columns.length < 2) {
119
- columnMap['total'] = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
120
-
121
- // updated rows
122
- pivot_rows.forEach(function (item) {
123
- var name = item.name,
124
- original_name = item.original_name,
125
- total = item.total;
126
- var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
127
- var row = tableRows.find(function (row) {
128
- return row[nameColumn.key] === groupName;
129
- });
130
- var totalColumn = columnMap['total'];
131
- if (row) {
132
- // update old row
133
- var updateRow = {};
134
- var oldRow = {};
135
- var validTotalCellValue = getValidValueForColumn(totalColumn, total.total);
136
- if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
137
- updateRow[totalColumn.key] = validTotalCellValue;
138
- oldRow[totalColumn.key] = row[totalColumn.key];
139
- }
140
- if (Object.keys(updateRow).length > 0) {
141
- var rowId = row._id;
142
- rowIds.push(rowId);
143
- updatedRows[rowId] = updateRow;
144
- oldRows[rowId] = oldRow;
145
- }
146
- } else {
147
- // insert new row
148
- var newRow = {};
149
- newRow[nameColumn.key] = groupName;
150
- if (totalColumn) {
151
- newRow[totalColumn.key] = getValidValueForColumn(totalColumn, total.total);
152
- }
153
- newRows.push(newRow);
154
- }
155
- });
156
- return {
157
- newRows: newRows,
158
- updatedRows: updatedRows,
159
- rowIds: rowIds,
160
- oldRows: oldRows
161
- };
162
- }
163
-
164
- // one dimension table with summary columns
165
- Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
166
- var key = item.key;
167
- var column = statisticTableColumns.find(function (column) {
168
- return column.key === key;
169
- });
170
- if (column) {
171
- columnMap[key] = TableUtils.getTableColumnByName(updateTable, column.name);
172
- }
173
- });
174
-
175
- // updated rows
176
- var nameColumnKey = nameColumn.key;
177
- pivot_rows.forEach(function (item) {
178
- var name = item.name,
179
- original_name = item.original_name,
180
- total = item.total;
181
- var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
182
- var row = tableRows.find(function (row) {
183
- return row[nameColumnKey] === groupName;
184
- });
185
- if (row) {
186
- var updateRow = {};
187
- var oldRow = {};
188
- Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
189
- var key = item.key;
190
- var column = columnMap[key];
191
- var totalCellValue = getValidValueForColumn(column, total[key]);
192
- if (column && isCellValueChanged(row[column.key], totalCellValue, column.type)) {
193
- updateRow[column.key] = totalCellValue;
194
- oldRow[column.key] = row[column.key];
195
- }
196
- });
197
- if (Object.keys(updateRow).length > 0) {
198
- var rowId = row._id;
199
- rowIds.push(rowId);
200
- updatedRows[rowId] = updateRow;
201
- oldRows[rowId] = oldRow;
202
- }
203
- } else {
204
- var newRow = _defineProperty({}, nameColumn.key, groupName);
205
- Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
206
- var key = item.key;
207
- var column = columnMap[key];
208
- if (column) {
209
- var totalCellValue = getValidValueForColumn(column, total[key]);
210
- newRow[column.key] = totalCellValue;
211
- }
212
- });
213
- newRows.push(newRow);
214
- }
215
- });
216
- return {
217
- newRows: newRows,
218
- updatedRows: updatedRows,
219
- rowIds: rowIds,
220
- oldRows: oldRows
221
- };
222
- };
223
- var getUpdatedTwoDimensionStatisticTableResultToTable = function getUpdatedTwoDimensionStatisticTableResultToTable(_ref4) {
224
- var updateTable = _ref4.updateTable,
225
- statisticalResult = _ref4.statisticalResult;
226
- var pivotResult = statisticalResult.pivotResult,
227
- groupbyColumn = statisticalResult.groupbyColumn;
228
- var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
229
- if (!nameColumn) return {};
230
- var pivot_rows = pivotResult.pivot_rows,
231
- pivot_columns = pivotResult.pivot_columns;
232
- var tableRows = updateTable.rows;
233
- var columnMap = {};
234
- var newRows = [];
235
- var updatedRows = {};
236
- var rowIds = [];
237
- var oldRows = {};
238
-
239
- // updated columns
240
- Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
241
- var key = item.key,
242
- original_key = item.original_key;
243
- var columnName = isEmptyName(original_key) ? intl.get(EMPTY_NAME) : key;
244
- columnMap[columnName] = TableUtils.getTableColumnByName(updateTable, columnName);
245
- });
246
- columnMap['total'] = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
247
-
248
- // updated rows
249
- var _loop = function _loop(i) {
250
- var pivotRow = pivot_rows[i];
251
- var name = pivotRow.name,
252
- original_name = pivotRow.original_name,
253
- cells = pivotRow.cells,
254
- total = pivotRow.total;
255
- if (isEmptyName(original_name)) {
256
- name = intl.get(EMPTY_NAME);
257
- }
258
- var nameColumnKey = nameColumn.key;
259
- var row = tableRows.find(function (row) {
260
- return row[nameColumnKey] === name;
261
- });
262
- var totalColumn = columnMap['total'];
263
- if (row) {
264
- // update old row
265
- var updatedRow = {};
266
- var oldRow = {}; // op used
267
- var validTotalCellValue = getValidValueForColumn(totalColumn, total);
268
- if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
269
- updatedRow[totalColumn.key] = validTotalCellValue;
270
- oldRow[totalColumn.key] = row[totalColumn.key];
271
- }
272
- Object.keys(cells).forEach(function (key) {
273
- var columnName = isEmptyName(key) ? intl.get(EMPTY_NAME) : key;
274
- var column = columnMap[columnName];
275
- var validCellValue = getValidValueForColumn(column, cells[key].total);
276
- if (column && isCellValueChanged(row[column.key], validCellValue, column.type)) {
277
- updatedRow[column.key] = validCellValue;
278
- oldRow[column.key] = row[column.key];
279
- }
280
- });
281
- if (Object.keys(updatedRow).length > 0) {
282
- var rowId = row._id;
283
- rowIds.push(rowId);
284
- updatedRows[rowId] = updatedRow;
285
- oldRows[rowId] = oldRow;
286
- }
287
- } else {
288
- // insert new row
289
- var newRow = {};
290
- newRow[nameColumnKey] = name;
291
- if (totalColumn) {
292
- newRow[totalColumn.key] = getValidValueForColumn(totalColumn, name);
293
- }
294
- Object.keys(cells).forEach(function (key) {
295
- var columnName = isEmptyName(key) ? intl.get(EMPTY_NAME) : key;
296
- var column = columnMap[columnName];
297
- if (column) {
298
- newRow[column.key] = getValidValueForColumn(column, cells[key].total);
299
- }
300
- });
301
- if (Object.keys(newRow).length > 0) {
302
- newRows.push(newRow);
303
- }
304
- }
305
- };
306
- for (var i = 0; i < pivot_rows.length; i++) {
307
- _loop(i);
308
- }
309
- return {
310
- newRows: newRows,
311
- updatedRows: updatedRows,
312
- oldRows: oldRows,
313
- rowIds: rowIds
314
- };
315
- };
316
-
317
- /**
318
- * statisticalResult: {
319
- * columnGroupbyColumn: null,
320
- * groupbyColumn: null,
321
- * pivotResult: {
322
- * pivot_columns: [],
323
- * pivot_rows: [
324
- * { name: 'xxx', original_name: 'xxx', total }
325
- * ]
326
- * },
327
- * statisticTableColumns: null,
328
- * summaryColumn: null,
329
- * }
330
- *
331
- * @return {
332
- * columns: [
333
- * {
334
- * name: xxx,
335
- * type: CellType.DATE
336
- * data: { format }
337
- * }, {
338
- * name: xxx,
339
- * type: CellType.NUMBER
340
- * data: { decimal, thousands, precision, enable_precision, format }
341
- * },
342
- * ],
343
- * rows: [
344
- * { columnName: value, xxx },
345
- * ]
346
- * }
347
- */
348
- export var exportStatisticToTable = function exportStatisticToTable(_ref5) {
349
- var statisticalResult = _ref5.statisticalResult;
350
- var pivotResult = statisticalResult.pivotResult,
351
- groupbyColumn = statisticalResult.groupbyColumn,
352
- columnGroupbyColumn = statisticalResult.columnGroupbyColumn;
353
- var pivot_columns = pivotResult.pivot_columns;
354
- if (!groupbyColumn) return {};
355
-
356
- // two dimension table
357
- if (columnGroupbyColumn) {
358
- return getTwoDimensionStatisticTableResultToTable({
359
- statisticalResult: statisticalResult
360
- });
361
- }
362
- if (!Array.isArray(pivot_columns)) return {};
363
- return getOneDimensionStatisticTableResultToTable({
364
- statisticalResult: statisticalResult
365
- });
366
- };
367
- export var getOneDimensionStatisticTableResultToTable = function getOneDimensionStatisticTableResultToTable(_ref6) {
368
- var statisticalResult = _ref6.statisticalResult;
100
+ var exportOneDimensionToTable = function exportOneDimensionToTable(_ref3) {
101
+ var statisticalResult = _ref3.statisticalResult;
369
102
  var pivotResult = statisticalResult.pivotResult,
370
103
  groupbyColumn = statisticalResult.groupbyColumn,
371
104
  statisticTableColumns = statisticalResult.statisticTableColumns,
@@ -393,8 +126,8 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
393
126
  var isIncludeHour = false;
394
127
  if (summaryColumn) {
395
128
  if (isSummaryDateColumn(summaryColumn)) {
396
- var _ref7 = summaryColumn.data || {},
397
- format = _ref7.format;
129
+ var _ref4 = summaryColumn.data || {},
130
+ format = _ref4.format;
398
131
  columnData = {
399
132
  format: format
400
133
  };
@@ -406,12 +139,12 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
406
139
  such as the data attribute in the function column, which contains other content that is not
407
140
  useful for creating a new column
408
141
  */
409
- var _ref8 = summaryColumn.data || {},
410
- decimal = _ref8.decimal,
411
- thousands = _ref8.thousands,
412
- precision = _ref8.precision,
413
- enable_precision = _ref8.enable_precision,
414
- _format = _ref8.format;
142
+ var _ref5 = summaryColumn.data || {},
143
+ decimal = _ref5.decimal,
144
+ thousands = _ref5.thousands,
145
+ precision = _ref5.precision,
146
+ enable_precision = _ref5.enable_precision,
147
+ _format = _ref5.format;
415
148
  columnData = {
416
149
  decimal: decimal,
417
150
  thousands: thousands,
@@ -432,7 +165,7 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
432
165
 
433
166
  // generator rows
434
167
  pivot_rows.forEach(function (item) {
435
- var _newRow2;
168
+ var _newRow;
436
169
  var name = item.name,
437
170
  original_name = item.original_name,
438
171
  total = item.total;
@@ -441,7 +174,7 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
441
174
  if (_isDateSummaryColumn && cellValue) {
442
175
  cellValue = isIncludeHour ? dayjs(cellValue).format('YYYY-MM-DD HH:mm') : dayjs(cellValue).format('YYYY-MM-DD');
443
176
  }
444
- var newRow = (_newRow2 = {}, _defineProperty(_newRow2, groupbyColumn.name, groupName), _defineProperty(_newRow2, intl.get('Total'), cellValue), _newRow2);
177
+ var newRow = (_newRow = {}, _defineProperty(_newRow, groupbyColumn.name, groupName), _defineProperty(_newRow, intl.get('Total'), cellValue), _newRow);
445
178
  rows.push(newRow);
446
179
  });
447
180
  return {
@@ -462,8 +195,8 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
462
195
  var columnType = CellType.NUMBER;
463
196
  if (isSummaryDateColumn(column)) {
464
197
  columnType = CellType.DATE;
465
- var _ref9 = column.data || {},
466
- _format2 = _ref9.format;
198
+ var _ref6 = column.data || {},
199
+ _format2 = _ref6.format;
467
200
  _columnData = {
468
201
  format: _format2
469
202
  };
@@ -473,12 +206,12 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
473
206
  such as the data attribute in the function column, which contains other content that is not
474
207
  useful for creating a new column
475
208
  */
476
- var _ref10 = column.data || {},
477
- _decimal = _ref10.decimal,
478
- _thousands = _ref10.thousands,
479
- _precision = _ref10.precision,
480
- _enable_precision = _ref10.enable_precision,
481
- _format3 = _ref10.format;
209
+ var _ref7 = column.data || {},
210
+ _decimal = _ref7.decimal,
211
+ _thousands = _ref7.thousands,
212
+ _precision = _ref7.precision,
213
+ _enable_precision = _ref7.enable_precision,
214
+ _format3 = _ref7.format;
482
215
  _columnData = {
483
216
  decimal: _decimal,
484
217
  thousands: _thousands,
@@ -505,12 +238,14 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
505
238
  var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
506
239
  var newRow = _defineProperty({}, groupbyColumn.name, groupName);
507
240
  Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
508
- var key = item.key;
241
+ var key = item.key,
242
+ method = item.method;
509
243
  var column = columnMap[key];
244
+ var cellValueKey = key + method;
510
245
  var name = column.name,
511
246
  type = column.type,
512
247
  data = column.data;
513
- var cellValue = total[key];
248
+ var cellValue = total[cellValueKey];
514
249
  if (type === CellType.DATE && cellValue) {
515
250
  var dateFormat = data && data.format && data.format.indexOf('HH:mm') > -1 ? 'YYYY-MM-DD HH:mm' : 'YYYY-MM-DD';
516
251
  cellValue = dayjs(cellValue).format(dateFormat);
@@ -524,8 +259,8 @@ export var getOneDimensionStatisticTableResultToTable = function getOneDimension
524
259
  rows: rows
525
260
  };
526
261
  };
527
- export var getTwoDimensionStatisticTableResultToTable = function getTwoDimensionStatisticTableResultToTable(_ref11) {
528
- var statisticalResult = _ref11.statisticalResult;
262
+ var exportTwoDimensionToTable = function exportTwoDimensionToTable(_ref8) {
263
+ var statisticalResult = _ref8.statisticalResult;
529
264
  var pivotResult = statisticalResult.pivotResult,
530
265
  groupbyColumn = statisticalResult.groupbyColumn,
531
266
  summaryColumn = statisticalResult.summaryColumn;
@@ -550,8 +285,8 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
550
285
  if (summaryColumn) {
551
286
  if (isSummaryDateColumn(summaryColumn)) {
552
287
  _isDateSummaryColumn = true;
553
- var _ref12 = summaryColumn.data || {},
554
- format = _ref12.format;
288
+ var _ref9 = summaryColumn.data || {},
289
+ format = _ref9.format;
555
290
  columnData = {
556
291
  format: format
557
292
  };
@@ -562,12 +297,12 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
562
297
  such as the data attribute in the function column, which contains other content that is not
563
298
  useful for creating a new column
564
299
  */
565
- var _ref13 = summaryColumn.data || {},
566
- decimal = _ref13.decimal,
567
- thousands = _ref13.thousands,
568
- precision = _ref13.precision,
569
- enable_precision = _ref13.enable_precision,
570
- _format4 = _ref13.format;
300
+ var _ref10 = summaryColumn.data || {},
301
+ decimal = _ref10.decimal,
302
+ thousands = _ref10.thousands,
303
+ precision = _ref10.precision,
304
+ enable_precision = _ref10.enable_precision,
305
+ _format4 = _ref10.format;
571
306
  columnData = {
572
307
  decimal: decimal,
573
308
  thousands: thousands,
@@ -628,23 +363,487 @@ export var getTwoDimensionStatisticTableResultToTable = function getTwoDimension
628
363
  rows: rows
629
364
  };
630
365
  };
631
- export var updateStatisticToTable = function updateStatisticToTable(_ref14) {
632
- var updateTable = _ref14.updateTable,
633
- statisticalResult = _ref14.statisticalResult;
634
- var groupbyColumn = statisticalResult.groupbyColumn,
635
- columnGroupbyColumn = statisticalResult.columnGroupbyColumn;
636
- if (!groupbyColumn) return {};
637
-
638
- // two dimension table
366
+ var getTwoDimensionWithSummaryColumns = function getTwoDimensionWithSummaryColumns(_ref11) {
367
+ var statisticalResult = _ref11.statisticalResult;
368
+ var pivotResult = statisticalResult.pivotResult,
369
+ groupbyColumn = statisticalResult.groupbyColumn;
370
+ var pivot_rows = pivotResult.pivot_rows,
371
+ pivot_columns = pivotResult.pivot_columns,
372
+ pivot_summary_multiple_columns = pivotResult.pivot_summary_multiple_columns,
373
+ formulaRows = pivotResult.formulaRows,
374
+ isSqlQuery = pivotResult.isSqlQuery;
375
+ var summaryColumns = pivot_summary_multiple_columns.filter(Boolean);
376
+ if (!groupbyColumn || summaryColumns.length === 0 || !Array.isArray(pivot_columns) || pivot_columns.length === 0 || !Array.isArray(pivot_rows) || pivot_rows.length === 0) return {};
377
+ var groupbyColumnName = groupbyColumn.name;
378
+ var firstSummaryColumn = summaryColumns[0];
379
+ var columns = [{
380
+ // name column
381
+ key: '0000',
382
+ type: CellType.TEXT,
383
+ name: groupbyColumnName,
384
+ data: null
385
+ }];
386
+ var tmpColumns = [];
387
+ pivot_columns.forEach(function (pivotColumn) {
388
+ var pivotColumnKey = pivotColumn.key,
389
+ original_key = pivotColumn.original_key;
390
+ var pivotColumnColumnName = isEmptyName(original_key) ? intl.get(EMPTY_NAME) : pivotColumnKey;
391
+ summaryColumns.forEach(function (summaryColumn) {
392
+ var key = summaryColumn.key,
393
+ type = summaryColumn.type,
394
+ sqlKey = summaryColumn.sqlKey,
395
+ column_name = summaryColumn.column_name,
396
+ data = summaryColumn.data,
397
+ method = summaryColumn.method;
398
+ var newColumnName = "".concat(pivotColumnColumnName, "-").concat(column_name);
399
+ columns.push({
400
+ // just support number column
401
+ type: CellType.NUMBER,
402
+ name: newColumnName,
403
+ data: data
404
+ });
405
+ tmpColumns.push({
406
+ name: newColumnName,
407
+ pivotColumnKey: pivotColumnKey,
408
+ key: key,
409
+ type: type,
410
+ sqlKey: sqlKey,
411
+ method: method
412
+ });
413
+ });
414
+ });
415
+ columns.push({
416
+ type: CellType.NUMBER,
417
+ name: intl.get('Total'),
418
+ data: firstSummaryColumn.data
419
+ });
420
+ var rows = [];
421
+ pivot_rows.forEach(function (pivotRow) {
422
+ var name = pivotRow.name,
423
+ original_name = pivotRow.original_name,
424
+ cells = pivotRow.cells;
425
+ if (isEmptyName(original_name)) {
426
+ name = intl.get(EMPTY_NAME);
427
+ }
428
+ var newRow = _defineProperty({}, groupbyColumnName, name);
429
+ var total = 0;
430
+ tmpColumns.forEach(function (tmpColumn) {
431
+ var name = tmpColumn.name,
432
+ pivotColumnKey = tmpColumn.pivotColumnKey,
433
+ key = tmpColumn.key,
434
+ type = tmpColumn.type,
435
+ sqlKey = tmpColumn.sqlKey,
436
+ method = tmpColumn.method;
437
+ var cell = cells && cells[pivotColumnKey];
438
+ var cellRows = cell && cell.rows;
439
+ if (!Array.isArray(cellRows) || cellRows.length === 0) {
440
+ newRow[name] = 0;
441
+ } else {
442
+ var cellValue = getPivotTableSummaryTotal(type, key, sqlKey, STATISTICS_COUNT_TYPE.ADVANCED, method, cellRows, formulaRows, isSqlQuery);
443
+ newRow[name] = cellValue;
444
+ total += cellValue;
445
+ }
446
+ });
447
+ newRow[intl.get('Total')] = total;
448
+ rows.push(newRow);
449
+ });
450
+ return {
451
+ columns: columns,
452
+ rows: rows
453
+ };
454
+ };
455
+ var exportTwoDimensionWithSummaryColumnsToTable = function exportTwoDimensionWithSummaryColumnsToTable(_ref12) {
456
+ var statisticalResult = _ref12.statisticalResult;
457
+ return getTwoDimensionWithSummaryColumns({
458
+ statisticalResult: statisticalResult
459
+ });
460
+ };
461
+ var updatedOneDimensionToTable = function updatedOneDimensionToTable(_ref13) {
462
+ var updateTable = _ref13.updateTable,
463
+ statisticalResult = _ref13.statisticalResult;
464
+ var pivotResult = statisticalResult.pivotResult,
465
+ groupbyColumn = statisticalResult.groupbyColumn,
466
+ statisticTableColumns = statisticalResult.statisticTableColumns;
467
+ if (!groupbyColumn) return {};
468
+ var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
469
+ if (!nameColumn) return {};
470
+ var pivot_rows = pivotResult.pivot_rows,
471
+ pivot_columns = pivotResult.pivot_columns;
472
+ var tableRows = updateTable.rows;
473
+ var columnMap = {};
474
+ var newRows = [];
475
+ var updatedRows = {};
476
+ var oldRows = {};
477
+ var rowIds = [];
478
+
479
+ // one dimension table no summary columns
480
+ if (pivot_columns.length < 2) {
481
+ columnMap['total'] = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
482
+
483
+ // updated rows
484
+ pivot_rows.forEach(function (item) {
485
+ var name = item.name,
486
+ original_name = item.original_name,
487
+ total = item.total;
488
+ var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
489
+ var row = tableRows.find(function (row) {
490
+ return row[nameColumn.key] === groupName;
491
+ });
492
+ var totalColumn = columnMap['total'];
493
+ if (row) {
494
+ // update old row
495
+ var updateRow = {};
496
+ var oldRow = {};
497
+ var validTotalCellValue = getValidValueForColumn(totalColumn, total.total);
498
+ if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
499
+ updateRow[totalColumn.key] = validTotalCellValue;
500
+ oldRow[totalColumn.key] = row[totalColumn.key];
501
+ }
502
+ if (Object.keys(updateRow).length > 0) {
503
+ var rowId = row._id;
504
+ rowIds.push(rowId);
505
+ updatedRows[rowId] = updateRow;
506
+ oldRows[rowId] = oldRow;
507
+ }
508
+ } else {
509
+ // insert new row
510
+ var newRow = {};
511
+ newRow[nameColumn.key] = groupName;
512
+ if (totalColumn) {
513
+ newRow[totalColumn.key] = getValidValueForColumn(totalColumn, total.total);
514
+ }
515
+ newRows.push(newRow);
516
+ }
517
+ });
518
+ return {
519
+ newRows: newRows,
520
+ updatedRows: updatedRows,
521
+ rowIds: rowIds,
522
+ oldRows: oldRows
523
+ };
524
+ }
525
+
526
+ // one dimension table with summary columns
527
+ Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
528
+ var key = item.key;
529
+ var column = statisticTableColumns.find(function (column) {
530
+ return column.key === key;
531
+ });
532
+ if (column) {
533
+ columnMap[key] = TableUtils.getTableColumnByName(updateTable, column.name);
534
+ }
535
+ });
536
+
537
+ // updated rows
538
+ var nameColumnKey = nameColumn.key;
539
+ pivot_rows.forEach(function (item) {
540
+ var name = item.name,
541
+ original_name = item.original_name,
542
+ total = item.total;
543
+ var groupName = isEmptyName(original_name) ? intl.get(EMPTY_NAME) : name;
544
+ var row = tableRows.find(function (row) {
545
+ return row[nameColumnKey] === groupName;
546
+ });
547
+ if (row) {
548
+ var updateRow = {};
549
+ var oldRow = {};
550
+ Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
551
+ var key = item.key,
552
+ method = item.method;
553
+ var column = columnMap[key];
554
+ var cellValueKey = key + method;
555
+ var totalCellValue = getValidValueForColumn(column, total[cellValueKey]);
556
+ if (column && isCellValueChanged(row[column.key], totalCellValue, column.type)) {
557
+ updateRow[column.key] = totalCellValue;
558
+ oldRow[column.key] = row[column.key];
559
+ }
560
+ });
561
+ if (Object.keys(updateRow).length > 0) {
562
+ var rowId = row._id;
563
+ rowIds.push(rowId);
564
+ updatedRows[rowId] = updateRow;
565
+ oldRows[rowId] = oldRow;
566
+ }
567
+ } else {
568
+ var newRow = _defineProperty({}, nameColumn.key, groupName);
569
+ Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
570
+ var key = item.key,
571
+ method = item.method;
572
+ var cellValueKey = key + method;
573
+ var column = columnMap[key];
574
+ if (column) {
575
+ var totalCellValue = getValidValueForColumn(column, total[cellValueKey]);
576
+ newRow[column.key] = totalCellValue;
577
+ }
578
+ });
579
+ newRows.push(newRow);
580
+ }
581
+ });
582
+ return {
583
+ newRows: newRows,
584
+ updatedRows: updatedRows,
585
+ rowIds: rowIds,
586
+ oldRows: oldRows
587
+ };
588
+ };
589
+ var updateTwoDimensionToTable = function updateTwoDimensionToTable(_ref14) {
590
+ var updateTable = _ref14.updateTable,
591
+ statisticalResult = _ref14.statisticalResult;
592
+ var pivotResult = statisticalResult.pivotResult,
593
+ groupbyColumn = statisticalResult.groupbyColumn;
594
+ var nameColumn = TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
595
+ if (!nameColumn) return {};
596
+ var pivot_rows = pivotResult.pivot_rows,
597
+ pivot_columns = pivotResult.pivot_columns;
598
+ var tableRows = updateTable.rows;
599
+ var columnMap = {};
600
+ var newRows = [];
601
+ var updatedRows = {};
602
+ var rowIds = [];
603
+ var oldRows = {};
604
+
605
+ // updated columns
606
+ var updateColumns = [];
607
+ Array.isArray(pivot_columns) && pivot_columns.forEach(function (item) {
608
+ var key = item.key,
609
+ original_key = item.original_key;
610
+ var columnName = isEmptyName(original_key) ? intl.get(EMPTY_NAME) : key;
611
+ var column = TableUtils.getTableColumnByName(updateTable, columnName);
612
+ columnMap[columnName] = column;
613
+ updateColumns.push(column);
614
+ });
615
+ var totalColumn = TableUtils.getTableColumnByName(updateTable, intl.get('Total'));
616
+ columnMap['total'] = totalColumn;
617
+ updateColumns.push(totalColumn);
618
+
619
+ // updated rows
620
+ var _loop = function _loop(i) {
621
+ var pivotRow = pivot_rows[i];
622
+ var name = pivotRow.name,
623
+ original_name = pivotRow.original_name,
624
+ cells = pivotRow.cells,
625
+ total = pivotRow.total;
626
+ if (isEmptyName(original_name)) {
627
+ name = intl.get(EMPTY_NAME);
628
+ }
629
+ var nameColumnKey = nameColumn.key;
630
+ var row = tableRows.find(function (row) {
631
+ return row[nameColumnKey] === name;
632
+ });
633
+ var totalColumn = columnMap['total'];
634
+ if (row) {
635
+ // update old row
636
+ var rowId = row._id;
637
+ var updatedRow = {};
638
+ var oldRow = {}; // op used
639
+ var validTotalCellValue = getValidValueForColumn(totalColumn, total);
640
+ if (totalColumn && isCellValueChanged(row[totalColumn.key], validTotalCellValue, totalColumn.type)) {
641
+ updatedRow[totalColumn.key] = validTotalCellValue;
642
+ oldRow[totalColumn.key] = row[totalColumn.key];
643
+ }
644
+ var keys = Object.keys(cells);
645
+ if (keys.length === 0) {
646
+ updateColumns.forEach(function (column) {
647
+ var key = column.key,
648
+ type = column.type;
649
+ var newCellValue = key === totalColumn.key ? 0 : null;
650
+ if (isCellValueChanged(row[key], newCellValue, type)) {
651
+ updatedRow[key] = newCellValue;
652
+ oldRow[key] = row[key];
653
+ }
654
+ });
655
+ } else {
656
+ keys.forEach(function (key) {
657
+ var columnName = isEmptyName(key) ? intl.get(EMPTY_NAME) : key;
658
+ var column = columnMap[columnName];
659
+ var validCellValue = getValidValueForColumn(column, cells[key].total);
660
+ if (column && isCellValueChanged(row[column.key], validCellValue, column.type)) {
661
+ updatedRow[column.key] = validCellValue;
662
+ oldRow[column.key] = row[column.key];
663
+ }
664
+ });
665
+ }
666
+ if (Object.keys(updatedRow).length > 0) {
667
+ rowIds.push(rowId);
668
+ updatedRows[rowId] = updatedRow;
669
+ oldRows[rowId] = oldRow;
670
+ }
671
+ } else {
672
+ // insert new row
673
+ var newRow = {};
674
+ newRow[nameColumnKey] = name;
675
+ if (totalColumn) {
676
+ newRow[totalColumn.key] = getValidValueForColumn(totalColumn, name);
677
+ }
678
+ Object.keys(cells).forEach(function (key) {
679
+ var columnName = isEmptyName(key) ? intl.get(EMPTY_NAME) : key;
680
+ var column = columnMap[columnName];
681
+ if (column) {
682
+ newRow[column.key] = getValidValueForColumn(column, cells[key].total);
683
+ }
684
+ });
685
+ if (Object.keys(newRow).length > 0) {
686
+ newRows.push(newRow);
687
+ }
688
+ }
689
+ };
690
+ for (var i = 0; i < pivot_rows.length; i++) {
691
+ _loop(i);
692
+ }
693
+ return {
694
+ newRows: newRows,
695
+ updatedRows: updatedRows,
696
+ oldRows: oldRows,
697
+ rowIds: rowIds
698
+ };
699
+ };
700
+ var updateTwoDimensionWithSummaryColumnsToTable = function updateTwoDimensionWithSummaryColumnsToTable(_ref15) {
701
+ var updateTable = _ref15.updateTable,
702
+ statisticalResult = _ref15.statisticalResult;
703
+ var groupbyColumn = statisticalResult.groupbyColumn;
704
+ var nameColumn = groupbyColumn && TableUtils.getTableColumnByName(updateTable, groupbyColumn.name);
705
+ if (!nameColumn) return {};
706
+ var _getTwoDimensionWithS = getTwoDimensionWithSummaryColumns({
707
+ statisticalResult: statisticalResult
708
+ }),
709
+ exportingColumns = _getTwoDimensionWithS.columns,
710
+ exportingRows = _getTwoDimensionWithS.rows;
711
+ if (!Array.isArray(exportingColumns) || exportingColumns.length === 0 || !Array.isArray(exportingRows) || exportingRows.length === 0) {
712
+ return {};
713
+ }
714
+ var tableRows = updateTable.rows,
715
+ tableColumns = updateTable.columns;
716
+ var nameColumnKey = nameColumn.key;
717
+ var groupbyColumnName = groupbyColumn.name;
718
+ var newRows = [];
719
+ var updatedRows = {};
720
+ var rowIds = [];
721
+ var oldRows = {};
722
+ var nameCellValueExistRowMap = {};
723
+ tableRows.forEach(function (row) {
724
+ var nameCellValue = row[nameColumnKey];
725
+ if (!nameCellValueExistRowMap[nameCellValue]) {
726
+ nameCellValueExistRowMap[nameCellValue] = row;
727
+ }
728
+ });
729
+ exportingRows.forEach(function (exportingRow) {
730
+ var nameCellValue = exportingRow[groupbyColumnName];
731
+ var existRow = nameCellValueExistRowMap[nameCellValue];
732
+ if (existRow) {
733
+ // update the row already exist
734
+ var exportingRowData = {};
735
+ var existRowData = {};
736
+ tableColumns.forEach(function (tableColumn) {
737
+ var tableColumnKey = tableColumn.key,
738
+ tableColumnType = tableColumn.type,
739
+ tableColumnName = tableColumn.name;
740
+ var existCellValue = existRow[tableColumnKey];
741
+ var exportingCellValue = exportingRow[tableColumnName];
742
+ if (tableColumn && isCellValueChanged(existCellValue, exportingCellValue, tableColumnType)) {
743
+ exportingRowData[tableColumnKey] = exportingCellValue;
744
+ existRowData[tableColumnKey] = existCellValue;
745
+ }
746
+ });
747
+ if (Object.keys(exportingRowData).length > 0) {
748
+ var rowId = existRow._id;
749
+ rowIds.push(rowId);
750
+ updatedRows[rowId] = exportingRowData;
751
+ oldRows[rowId] = existRowData;
752
+ }
753
+ } else {
754
+ // create new row which not exist
755
+ newRows.push(exportingRow);
756
+ }
757
+ });
758
+ return {
759
+ newRows: newRows,
760
+ updatedRows: updatedRows,
761
+ oldRows: oldRows,
762
+ rowIds: rowIds
763
+ };
764
+ };
765
+
766
+ /**
767
+ * statisticalResult: {
768
+ * columnGroupbyColumn: null,
769
+ * groupbyColumn: null,
770
+ * pivotResult: {
771
+ * pivot_columns: [],
772
+ * pivot_rows: [
773
+ * { name: 'xxx', original_name: 'xxx', total }
774
+ * ]
775
+ * },
776
+ * statisticTableColumns: null,
777
+ * summaryColumn: null,
778
+ * }
779
+ *
780
+ * @return {
781
+ * columns: [
782
+ * {
783
+ * name: xxx,
784
+ * type: CellType.DATE
785
+ * data: { format }
786
+ * }, {
787
+ * name: xxx,
788
+ * type: CellType.NUMBER
789
+ * data: { decimal, thousands, precision, enable_precision, format }
790
+ * },
791
+ * ],
792
+ * rows: [
793
+ * { columnName: value, xxx },
794
+ * ]
795
+ * }
796
+ */
797
+ export var exportStatisticToTable = function exportStatisticToTable(_ref16) {
798
+ var statisticalResult = _ref16.statisticalResult;
799
+ var pivotResult = statisticalResult.pivotResult,
800
+ groupbyColumn = statisticalResult.groupbyColumn,
801
+ columnGroupbyColumn = statisticalResult.columnGroupbyColumn;
802
+ var pivot_columns = pivotResult.pivot_columns,
803
+ pivot_summary_multiple_columns = pivotResult.pivot_summary_multiple_columns;
804
+ if (!groupbyColumn) return {};
805
+
806
+ // two dimension table
639
807
  if (columnGroupbyColumn) {
640
- return getUpdatedTwoDimensionStatisticTableResultToTable({
808
+ if (Array.isArray(pivot_summary_multiple_columns) && pivot_summary_multiple_columns.length > 0) {
809
+ return exportTwoDimensionWithSummaryColumnsToTable({
810
+ statisticalResult: statisticalResult
811
+ });
812
+ }
813
+ return exportTwoDimensionToTable({
814
+ statisticalResult: statisticalResult
815
+ });
816
+ }
817
+ if (!Array.isArray(pivot_columns)) return {};
818
+ return exportOneDimensionToTable({
819
+ statisticalResult: statisticalResult
820
+ });
821
+ };
822
+ export var updateStatisticToTable = function updateStatisticToTable(_ref17) {
823
+ var updateTable = _ref17.updateTable,
824
+ statisticalResult = _ref17.statisticalResult;
825
+ var groupbyColumn = statisticalResult.groupbyColumn,
826
+ columnGroupbyColumn = statisticalResult.columnGroupbyColumn,
827
+ pivotResult = statisticalResult.pivotResult;
828
+ var pivot_summary_multiple_columns = pivotResult.pivot_summary_multiple_columns;
829
+ if (!groupbyColumn) return {};
830
+
831
+ // two dimension table
832
+ if (columnGroupbyColumn) {
833
+ if (Array.isArray(pivot_summary_multiple_columns) && pivot_summary_multiple_columns.length > 0) {
834
+ return updateTwoDimensionWithSummaryColumnsToTable({
835
+ updateTable: updateTable,
836
+ statisticalResult: statisticalResult
837
+ });
838
+ }
839
+ return updateTwoDimensionToTable({
641
840
  updateTable: updateTable,
642
841
  statisticalResult: statisticalResult
643
842
  });
644
843
  }
645
844
 
646
845
  // one dimension table
647
- return getUpdatedOneDimensionStatisticTableResultToTable({
846
+ return updatedOneDimensionToTable({
648
847
  updateTable: updateTable,
649
848
  statisticalResult: statisticalResult
650
849
  });