@servicelabsco/slabs-access-manager 0.1.62 → 0.1.64
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/dist/access/dtos/common.list.filter.dto.d.ts +1 -0
- package/dist/access/dtos/common.list.filter.dto.js +5 -0
- package/dist/access/dtos/common.list.filter.dto.js.map +1 -1
- package/dist/access/libraries/process.common.list.d.ts +1 -0
- package/dist/access/libraries/process.common.list.js +11 -1
- package/dist/access/libraries/process.common.list.js.map +1 -1
- package/dist/access/services/listing.service.js +1 -1
- package/dist/access/services/listing.service.js.map +1 -1
- package/dist/accessUtility/dtos/index.d.ts +1 -0
- package/dist/accessUtility/dtos/index.js +1 -0
- package/dist/accessUtility/dtos/index.js.map +1 -1
- package/dist/accessUtility/dtos/upload.modification.attributes.dto.d.ts +3 -0
- package/dist/accessUtility/dtos/upload.modification.attributes.dto.js +8 -0
- package/dist/accessUtility/dtos/upload.modification.attributes.dto.js.map +1 -0
- package/dist/accessUtility/entities/index.d.ts +1 -0
- package/dist/accessUtility/entities/index.js +1 -0
- package/dist/accessUtility/entities/index.js.map +1 -1
- package/dist/accessUtility/entities/upload.modification.entity.d.ts +14 -0
- package/dist/accessUtility/entities/upload.modification.entity.js +59 -0
- package/dist/accessUtility/entities/upload.modification.entity.js.map +1 -0
- package/dist/accessUtility/es6.classes.d.ts +9 -3
- package/dist/accessUtility/es6.classes.js +13 -0
- package/dist/accessUtility/es6.classes.js.map +1 -1
- package/dist/accessUtility/jobs/analyse.bulk.upload.job.d.ts +12 -0
- package/dist/accessUtility/jobs/analyse.bulk.upload.job.js +39 -0
- package/dist/accessUtility/jobs/analyse.bulk.upload.job.js.map +1 -0
- package/dist/accessUtility/jobs/bulk.upload.job.d.ts +4 -6
- package/dist/accessUtility/jobs/bulk.upload.job.js +9 -22
- package/dist/accessUtility/jobs/bulk.upload.job.js.map +1 -1
- package/dist/accessUtility/jobs/index.d.ts +3 -0
- package/dist/accessUtility/jobs/index.js +3 -0
- package/dist/accessUtility/jobs/index.js.map +1 -1
- package/dist/accessUtility/jobs/push.to.bulk.item.job.d.ts +8 -0
- package/dist/accessUtility/jobs/push.to.bulk.item.job.js +38 -0
- package/dist/accessUtility/jobs/push.to.bulk.item.job.js.map +1 -0
- package/dist/accessUtility/jobs/upload.modification.job.d.ts +7 -0
- package/dist/accessUtility/jobs/upload.modification.job.js +29 -0
- package/dist/accessUtility/jobs/upload.modification.job.js.map +1 -0
- package/dist/accessUtility/libraries/analyse.bulk.upload.d.ts +4 -3
- package/dist/accessUtility/libraries/analyse.bulk.upload.js +8 -5
- package/dist/accessUtility/libraries/analyse.bulk.upload.js.map +1 -1
- package/dist/accessUtility/libraries/read.xls.file.d.ts +18 -2
- package/dist/accessUtility/libraries/read.xls.file.js +153 -49
- package/dist/accessUtility/libraries/read.xls.file.js.map +1 -1
- package/dist/accessUtility/services/bulk.upload.service.d.ts +3 -2
- package/dist/accessUtility/services/bulk.upload.service.js +13 -5
- package/dist/accessUtility/services/bulk.upload.service.js.map +1 -1
- package/dist/accessUtility/services/es6.jobs.service.d.ts +7 -1
- package/dist/accessUtility/services/es6.jobs.service.js +15 -3
- package/dist/accessUtility/services/es6.jobs.service.js.map +1 -1
- package/dist/accessUtility/subscribers/index.d.ts +1 -0
- package/dist/accessUtility/subscribers/index.js +1 -0
- package/dist/accessUtility/subscribers/index.js.map +1 -1
- package/dist/accessUtility/subscribers/upload.modification.subscriber.d.ts +12 -0
- package/dist/accessUtility/subscribers/upload.modification.subscriber.js +40 -0
- package/dist/accessUtility/subscribers/upload.modification.subscriber.js.map +1 -0
- package/dist/config/entity.constants.d.ts +2 -0
- package/dist/config/entity.constants.js +2 -0
- package/dist/config/entity.constants.js.map +1 -1
- package/dist/migrations/1706353589375-CreateUploadModificationTable.d.ts +5 -0
- package/dist/migrations/1706353589375-CreateUploadModificationTable.js +21 -0
- package/dist/migrations/1706353589375-CreateUploadModificationTable.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PushToBulkItemJob = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
|
|
15
|
+
const bulk_upload_item_entity_1 = require("../entities/bulk.upload.item.entity");
|
|
16
|
+
let PushToBulkItemJob = class PushToBulkItemJob extends nestjs_utility_services_1.CommonJob {
|
|
17
|
+
constructor(queueService) {
|
|
18
|
+
super('74802720e87b9c71c5afe3c375e45a46');
|
|
19
|
+
this.queueService = queueService;
|
|
20
|
+
this.priority = 8;
|
|
21
|
+
}
|
|
22
|
+
async handle(data) {
|
|
23
|
+
const item = await bulk_upload_item_entity_1.BulkUploadItemEntity.firstOrNew({
|
|
24
|
+
bulk_upload_id: data.bulk_upload_id,
|
|
25
|
+
row_num: data.row,
|
|
26
|
+
sheet: data.sheet,
|
|
27
|
+
type_id: data.type_id,
|
|
28
|
+
});
|
|
29
|
+
item.data = data.data;
|
|
30
|
+
return item.save();
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
exports.PushToBulkItemJob = PushToBulkItemJob;
|
|
34
|
+
exports.PushToBulkItemJob = PushToBulkItemJob = __decorate([
|
|
35
|
+
(0, common_1.Injectable)(),
|
|
36
|
+
__metadata("design:paramtypes", [nestjs_utility_services_1.QueueService])
|
|
37
|
+
], PushToBulkItemJob);
|
|
38
|
+
//# sourceMappingURL=push.to.bulk.item.job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push.to.bulk.item.job.js","sourceRoot":"","sources":["../../../src/accessUtility/jobs/push.to.bulk.item.job.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,oFAAiF;AACjF,iFAA2E;AAGpE,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,mCAAS;IAG5C,YAA+B,YAA0B;QACrD,KAAK,CAAC,kCAAkC,CAAC,CAAC;QADf,iBAAY,GAAZ,YAAY,CAAc;QAF/C,aAAQ,GAAW,CAAC,CAAC;IAI/B,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,IAAS;QAClB,MAAM,IAAI,GAAG,MAAM,8CAAoB,CAAC,UAAU,CAAC;YAC/C,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,OAAO,EAAE,IAAI,CAAC,GAAG;YACjB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEtB,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;CACJ,CAAA;AAlBY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAIoC,sCAAY;GAHhD,iBAAiB,CAkB7B"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { CommonJob, DatabaseEventDto, QueueService } from '@servicelabsco/nestjs-utility-services';
|
|
2
|
+
import { UploadModificationEntity } from '../entities/upload.modification.entity';
|
|
3
|
+
export declare class UploadModificationJob extends CommonJob {
|
|
4
|
+
protected readonly queueService: QueueService;
|
|
5
|
+
constructor(queueService: QueueService);
|
|
6
|
+
handle(evt: DatabaseEventDto<UploadModificationEntity>): Promise<UploadModificationEntity>;
|
|
7
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.UploadModificationJob = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
|
|
15
|
+
let UploadModificationJob = class UploadModificationJob extends nestjs_utility_services_1.CommonJob {
|
|
16
|
+
constructor(queueService) {
|
|
17
|
+
super('3df180588e626a20bbb81ad7003a4930');
|
|
18
|
+
this.queueService = queueService;
|
|
19
|
+
}
|
|
20
|
+
async handle(evt) {
|
|
21
|
+
return evt.entity;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
exports.UploadModificationJob = UploadModificationJob;
|
|
25
|
+
exports.UploadModificationJob = UploadModificationJob = __decorate([
|
|
26
|
+
(0, common_1.Injectable)(),
|
|
27
|
+
__metadata("design:paramtypes", [nestjs_utility_services_1.QueueService])
|
|
28
|
+
], UploadModificationJob);
|
|
29
|
+
//# sourceMappingURL=upload.modification.job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.modification.job.js","sourceRoot":"","sources":["../../../src/accessUtility/jobs/upload.modification.job.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,oFAAmG;AAG5F,IAAM,qBAAqB,GAA3B,MAAM,qBAAsB,SAAQ,mCAAS;IAChD,YAA+B,YAA0B;QACrD,KAAK,CAAC,kCAAkC,CAAC,CAAC;QADf,iBAAY,GAAZ,YAAY,CAAc;IAEzD,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,GAA+C;QACxD,OAAO,GAAG,CAAC,MAAM,CAAC;IACtB,CAAC;CACJ,CAAA;AAPY,sDAAqB;gCAArB,qBAAqB;IADjC,IAAA,mBAAU,GAAE;qCAEoC,sCAAY;GADhD,qBAAqB,CAOjC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { UploadService } from '@servicelabsco/nestjs-utility-services';
|
|
2
2
|
import { ReadXlsFile } from './read.xls.file';
|
|
3
3
|
import { BulkUploadService } from '../services/bulk.upload.service';
|
|
4
|
-
import {
|
|
4
|
+
import { PushToBulkItemJob } from '../jobs/push.to.bulk.item.job';
|
|
5
5
|
export declare class AnalyseBulkUpload extends ReadXlsFile {
|
|
6
6
|
protected readonly uploadService: UploadService;
|
|
7
7
|
private readonly bulkUploadService;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
protected readonly pushToBulkItemJob: PushToBulkItemJob;
|
|
9
|
+
constructor(uploadService: UploadService, bulkUploadService: BulkUploadService, pushToBulkItemJob: PushToBulkItemJob);
|
|
10
|
+
process(id: number): Promise<void>;
|
|
10
11
|
private setStats;
|
|
11
12
|
private getCount;
|
|
12
13
|
}
|
|
@@ -5,16 +5,19 @@ const read_xls_file_1 = require("./read.xls.file");
|
|
|
5
5
|
const bulk_upload_entity_1 = require("../entities/bulk.upload.entity");
|
|
6
6
|
const bulk_upload_item_entity_1 = require("../entities/bulk.upload.item.entity");
|
|
7
7
|
class AnalyseBulkUpload extends read_xls_file_1.ReadXlsFile {
|
|
8
|
-
constructor(uploadService, bulkUploadService) {
|
|
8
|
+
constructor(uploadService, bulkUploadService, pushToBulkItemJob) {
|
|
9
9
|
super();
|
|
10
10
|
this.uploadService = uploadService;
|
|
11
11
|
this.bulkUploadService = bulkUploadService;
|
|
12
|
+
this.pushToBulkItemJob = pushToBulkItemJob;
|
|
12
13
|
}
|
|
13
|
-
async process(
|
|
14
|
-
const entity = await bulk_upload_entity_1.BulkUploadEntity.first(
|
|
14
|
+
async process(id) {
|
|
15
|
+
const entity = await bulk_upload_entity_1.BulkUploadEntity.first(id);
|
|
15
16
|
this.upload = entity;
|
|
16
17
|
const types = await this.bulkUploadService.getUploadTypes(entity);
|
|
17
|
-
await this.handle(types);
|
|
18
|
+
const rows = await this.handle(types);
|
|
19
|
+
entity.total_rows = rows;
|
|
20
|
+
await entity.save();
|
|
18
21
|
await this.setStats(entity, types);
|
|
19
22
|
}
|
|
20
23
|
async setStats(entity, types) {
|
|
@@ -24,7 +27,7 @@ class AnalyseBulkUpload extends read_xls_file_1.ReadXlsFile {
|
|
|
24
27
|
stats[sheet] = await this.getCount(entity, type);
|
|
25
28
|
}
|
|
26
29
|
entity.analysed_at = new Date();
|
|
27
|
-
entity.stats = { ...entity.stats,
|
|
30
|
+
entity.stats = { ...entity.stats, analysis: stats };
|
|
28
31
|
await entity.save();
|
|
29
32
|
}
|
|
30
33
|
async getCount(entity, type) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyse.bulk.upload.js","sourceRoot":"","sources":["../../../src/accessUtility/libraries/analyse.bulk.upload.ts"],"names":[],"mappings":";;;AACA,mDAA8C;AAE9C,uEAAkE;AAElE,iFAA2E;
|
|
1
|
+
{"version":3,"file":"analyse.bulk.upload.js","sourceRoot":"","sources":["../../../src/accessUtility/libraries/analyse.bulk.upload.ts"],"names":[],"mappings":";;;AACA,mDAA8C;AAE9C,uEAAkE;AAElE,iFAA2E;AAG3E,MAAa,iBAAkB,SAAQ,2BAAW;IAC9C,YACuB,aAA4B,EAC9B,iBAAoC,EAClC,iBAAoC;QAEvD,KAAK,EAAE,CAAC;QAJW,kBAAa,GAAb,aAAa,CAAe;QAC9B,sBAAiB,GAAjB,iBAAiB,CAAmB;QAClC,sBAAiB,GAAjB,iBAAiB,CAAmB;IAG3D,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACpB,MAAM,MAAM,GAAG,MAAM,qCAAgB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAElE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEtC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC;QAEzB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;QAEpB,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,MAAwB,EAAE,KAA6B;QAC1E,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAEtC,KAAK,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAEpD,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,MAAwB,EAAE,IAA0B;QACvE,OAAO,8CAAoB,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;IAChH,CAAC;CACJ;AA1CD,8CA0CC"}
|
|
@@ -1,24 +1,40 @@
|
|
|
1
1
|
import { UploadService } from '@servicelabsco/nestjs-utility-services';
|
|
2
2
|
import { BulkUploadEntity } from '../entities/bulk.upload.entity';
|
|
3
3
|
import { BulkUploadTypeEntity } from '../entities/bulk.upload.type.entity';
|
|
4
|
+
import { PushToBulkItemJob } from '../jobs/push.to.bulk.item.job';
|
|
4
5
|
export declare class ReadXlsFile {
|
|
5
6
|
protected upload: BulkUploadEntity;
|
|
6
7
|
protected readonly uploadService: UploadService;
|
|
8
|
+
protected readonly pushToBulkItemJob: PushToBulkItemJob;
|
|
7
9
|
protected workbook: any;
|
|
8
10
|
private promises;
|
|
9
|
-
|
|
11
|
+
private rowNumber;
|
|
12
|
+
private totalRows;
|
|
13
|
+
private throughCache;
|
|
14
|
+
private sheetCount;
|
|
15
|
+
protected handle(types: BulkUploadTypeEntity[]): Promise<number>;
|
|
16
|
+
private readFiles;
|
|
17
|
+
private getFiles;
|
|
10
18
|
private processXls;
|
|
11
19
|
private processCsv;
|
|
12
20
|
private getDictionaryOfType;
|
|
13
21
|
private excelInit;
|
|
14
22
|
private readWorksheet;
|
|
15
|
-
private
|
|
23
|
+
private handleSheetName;
|
|
24
|
+
private handleSheetIndex;
|
|
25
|
+
private handleAvailableSheets;
|
|
26
|
+
private setSheetCount;
|
|
27
|
+
private setWorksheet;
|
|
16
28
|
private readCsv;
|
|
17
29
|
private processRow;
|
|
30
|
+
private setData;
|
|
18
31
|
private castValue;
|
|
19
32
|
private getDictionary;
|
|
20
33
|
private mapHeader;
|
|
21
34
|
private getStringValue;
|
|
22
35
|
private getNumberValue;
|
|
23
36
|
private getBooleanValue;
|
|
37
|
+
private getDateValue;
|
|
38
|
+
private shouldIgnore;
|
|
39
|
+
private getDate;
|
|
24
40
|
}
|
|
@@ -2,100 +2,170 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ReadXlsFile = void 0;
|
|
4
4
|
const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-services");
|
|
5
|
-
const path_1 = require("path");
|
|
6
|
-
const fs_1 = require("fs");
|
|
7
|
-
const ExcelJS = require("exceljs");
|
|
8
5
|
const csv = require("csv-parser");
|
|
6
|
+
const date_fns_1 = require("date-fns");
|
|
7
|
+
const fs_1 = require("fs");
|
|
8
|
+
const path_1 = require("path");
|
|
9
9
|
const bulk_upload_item_entity_1 = require("../entities/bulk.upload.item.entity");
|
|
10
|
+
const ExcelJS = require("exceljs");
|
|
10
11
|
class ReadXlsFile {
|
|
11
12
|
constructor() {
|
|
12
13
|
this.promises = [];
|
|
14
|
+
this.rowNumber = 0;
|
|
15
|
+
this.totalRows = 0;
|
|
16
|
+
this.throughCache = true;
|
|
17
|
+
this.sheetCount = {};
|
|
13
18
|
}
|
|
14
19
|
async handle(types) {
|
|
20
|
+
await this.readFiles(types);
|
|
21
|
+
return this.totalRows || this.rowNumber;
|
|
22
|
+
}
|
|
23
|
+
async readFiles(types) {
|
|
15
24
|
const extension = this.upload.file_url.split('.').pop().toLowerCase();
|
|
16
25
|
if (extension === 'csv')
|
|
17
26
|
return this.processCsv(types);
|
|
18
27
|
if (extension === 'xlsx')
|
|
19
28
|
return this.processXls(types);
|
|
20
|
-
|
|
21
|
-
|
|
29
|
+
throw new nestjs_utility_services_1.OperationException(`Cannot read this extension file`);
|
|
30
|
+
}
|
|
31
|
+
getFiles() {
|
|
32
|
+
const upload = this.upload;
|
|
33
|
+
const url = decodeURIComponent(upload.file_url);
|
|
34
|
+
const size = upload.attributes?.size;
|
|
35
|
+
if (size && size <= 20000000)
|
|
36
|
+
return [url];
|
|
37
|
+
const count = upload.attributes?.file_count;
|
|
38
|
+
if (!count)
|
|
39
|
+
return;
|
|
40
|
+
const extension = url.split('.').pop();
|
|
41
|
+
const baseFile = url.replace(`.${extension}`, '');
|
|
42
|
+
const urls = [];
|
|
43
|
+
for (let i = 0; i < count; ++i) {
|
|
44
|
+
const url = `${baseFile}_${i}.${extension}`;
|
|
45
|
+
urls.push(url);
|
|
46
|
+
}
|
|
47
|
+
return urls;
|
|
22
48
|
}
|
|
23
49
|
async processXls(types) {
|
|
24
|
-
|
|
25
|
-
if (!types.length)
|
|
26
|
-
return this.readAllSheets();
|
|
50
|
+
const files = this.getFiles();
|
|
27
51
|
for (const type of types) {
|
|
28
|
-
|
|
29
|
-
|
|
52
|
+
this.rowNumber = 0;
|
|
53
|
+
for (const file of files) {
|
|
54
|
+
await this.excelInit(file);
|
|
55
|
+
await this.readWorksheet(type);
|
|
56
|
+
}
|
|
57
|
+
this.totalRows += this.rowNumber;
|
|
30
58
|
}
|
|
31
59
|
}
|
|
32
60
|
async processCsv(types) {
|
|
33
|
-
const
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
61
|
+
const sheet = types[0].name.toLowerCase();
|
|
62
|
+
const files = this.getFiles();
|
|
63
|
+
for (const file of files) {
|
|
64
|
+
const buffer = await this.uploadService.getBufferFromUrl(file);
|
|
65
|
+
const tempPath = (0, path_1.join)(__dirname, `../../../tmp/${this.upload.uuid}.${nestjs_utility_services_1.PlatformUtility.generateRandomAlpha(6).toLowerCase()}.${sheet}.csv`);
|
|
66
|
+
(0, fs_1.writeFileSync)(tempPath, buffer);
|
|
67
|
+
await this.readCsv(tempPath, types[0], sheet);
|
|
68
|
+
await (0, fs_1.unlink)(tempPath, () => { });
|
|
69
|
+
}
|
|
39
70
|
}
|
|
40
|
-
getDictionaryOfType(type) {
|
|
41
|
-
|
|
42
|
-
const sheetName = type?.name || 'sheet 1';
|
|
43
|
-
return { columns, sheetName };
|
|
71
|
+
async getDictionaryOfType(type) {
|
|
72
|
+
return this.getDictionary(type.columns);
|
|
44
73
|
}
|
|
45
|
-
async excelInit() {
|
|
74
|
+
async excelInit(url) {
|
|
46
75
|
this.workbook = new ExcelJS.Workbook();
|
|
47
|
-
const buffer = await this.uploadService.getBufferFromUrl(
|
|
48
|
-
|
|
76
|
+
const buffer = await this.uploadService.getBufferFromUrl(url);
|
|
77
|
+
return this.workbook.xlsx.load(buffer);
|
|
49
78
|
}
|
|
50
|
-
async readWorksheet(
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
79
|
+
async readWorksheet(type) {
|
|
80
|
+
if (type.sheet.all)
|
|
81
|
+
return this.handleAvailableSheets(type);
|
|
82
|
+
if (type.sheet.index)
|
|
83
|
+
return this.handleSheetIndex(type);
|
|
84
|
+
if (type.sheet.name)
|
|
85
|
+
return this.handleSheetName(type);
|
|
56
86
|
}
|
|
57
|
-
async
|
|
87
|
+
async handleSheetName(type) {
|
|
88
|
+
return this.setWorksheet(type, type.sheet.name);
|
|
89
|
+
}
|
|
90
|
+
async handleSheetIndex(type) {
|
|
91
|
+
const worksheet = this.workbook.getWorksheet(type.sheet.index);
|
|
92
|
+
return this.setWorksheet(type, worksheet.name);
|
|
93
|
+
}
|
|
94
|
+
async handleAvailableSheets(type) {
|
|
58
95
|
for (let i = 1; i < 100; ++i) {
|
|
59
96
|
const worksheet = this.workbook.getWorksheet(i);
|
|
60
97
|
const sheet = worksheet?.name;
|
|
61
98
|
if (!sheet)
|
|
62
99
|
continue;
|
|
63
|
-
|
|
100
|
+
this.totalRows += this.rowNumber;
|
|
101
|
+
this.rowNumber = this.sheetCount[sheet] || 0;
|
|
102
|
+
await this.setWorksheet(type, sheet);
|
|
103
|
+
this.setSheetCount(sheet);
|
|
64
104
|
}
|
|
65
105
|
}
|
|
66
|
-
|
|
106
|
+
setSheetCount(sheet) {
|
|
107
|
+
if (!this.sheetCount[sheet])
|
|
108
|
+
this.sheetCount[sheet] = 0;
|
|
109
|
+
this.sheetCount[sheet] = this.rowNumber;
|
|
110
|
+
}
|
|
111
|
+
async setWorksheet(type, sheet) {
|
|
112
|
+
const tempPath = (0, path_1.join)(__dirname, `../../../tmp/${this.upload.uuid}.${nestjs_utility_services_1.PlatformUtility.generateRandomAlpha(6).toLowerCase()}.${sheet}.csv`);
|
|
113
|
+
const writeStream = (0, fs_1.createWriteStream)(tempPath);
|
|
114
|
+
await this.workbook.csv.write(writeStream, { sheetName: sheet });
|
|
115
|
+
await this.readCsv(tempPath, type, sheet);
|
|
116
|
+
global.console.log('tempPath', tempPath);
|
|
117
|
+
return (0, fs_1.unlink)(tempPath, () => { });
|
|
118
|
+
}
|
|
119
|
+
async readCsv(tempPath, type, sheet) {
|
|
67
120
|
const fn = this;
|
|
68
|
-
|
|
121
|
+
const columns = await this.getDictionaryOfType(type);
|
|
69
122
|
return new Promise((resolve, reject) => {
|
|
70
123
|
this.promises = [];
|
|
71
124
|
(0, fs_1.createReadStream)(tempPath)
|
|
72
125
|
.pipe(csv({
|
|
73
|
-
mapHeaders: ({ header, index }) => fn.mapHeader(header, columns
|
|
126
|
+
mapHeaders: ({ header, index }) => fn.mapHeader(header, columns.headers),
|
|
74
127
|
mapValues: ({ header, index, value }) => fn.castValue(columns, header, value),
|
|
75
128
|
}))
|
|
76
129
|
.on('data', (data) => {
|
|
77
|
-
++rowNumber;
|
|
78
|
-
|
|
130
|
+
++fn.rowNumber;
|
|
131
|
+
global.console.log('processing row num', fn.rowNumber);
|
|
132
|
+
fn.promises.push(fn.processRow(sheet, fn.rowNumber, data, type, columns));
|
|
79
133
|
})
|
|
80
134
|
.on('end', () => {
|
|
81
|
-
resolve(rowNumber);
|
|
135
|
+
resolve(fn.rowNumber);
|
|
82
136
|
});
|
|
83
137
|
});
|
|
84
138
|
}
|
|
85
|
-
async processRow(sheet,
|
|
86
|
-
|
|
87
|
-
|
|
139
|
+
async processRow(sheet, row, data, type, columns) {
|
|
140
|
+
this.setData(type, data);
|
|
141
|
+
const shouldIgnore = this.shouldIgnore(data, columns.mandatory);
|
|
142
|
+
if (shouldIgnore)
|
|
143
|
+
data = { ...data, ignore_data: shouldIgnore };
|
|
144
|
+
if (this.throughCache) {
|
|
145
|
+
const obj = { sheet, row, data, bulk_upload_id: this.upload.id, type_id: type.id };
|
|
146
|
+
return this.pushToBulkItemJob.dispatch(obj);
|
|
147
|
+
}
|
|
148
|
+
const r = await bulk_upload_item_entity_1.BulkUploadItemEntity.firstOrNew({ bulk_upload_id: this.upload.id, sheet, row_num: row, type_id: type.id });
|
|
149
|
+
r.data = data;
|
|
88
150
|
await r.save();
|
|
89
151
|
}
|
|
90
|
-
|
|
91
|
-
if (!
|
|
92
|
-
return
|
|
152
|
+
setData(type, data) {
|
|
153
|
+
if (!type?.script?.script)
|
|
154
|
+
return data;
|
|
155
|
+
eval(type.script.script);
|
|
156
|
+
return data;
|
|
157
|
+
}
|
|
158
|
+
castValue(columns, header, value) {
|
|
93
159
|
if (columns.stringColumns.includes(header))
|
|
94
160
|
return this.getStringValue(value);
|
|
95
161
|
if (columns.numberColumns.includes(header))
|
|
96
162
|
return this.getNumberValue(value);
|
|
97
163
|
if (columns.booleanColumns.includes(header))
|
|
98
164
|
return this.getBooleanValue(value);
|
|
165
|
+
if (columns.dateColumns.includes(header)) {
|
|
166
|
+
const column = columns.dateObject[header];
|
|
167
|
+
return this.getDateValue(value, column);
|
|
168
|
+
}
|
|
99
169
|
return this.getStringValue(value);
|
|
100
170
|
}
|
|
101
171
|
getDictionary(columns) {
|
|
@@ -103,6 +173,9 @@ class ReadXlsFile {
|
|
|
103
173
|
const stringColumns = [];
|
|
104
174
|
const numberColumns = [];
|
|
105
175
|
const booleanColumns = [];
|
|
176
|
+
const dateColumns = [];
|
|
177
|
+
const dateObject = {};
|
|
178
|
+
const mandatory = [];
|
|
106
179
|
columns.forEach((column) => {
|
|
107
180
|
const header = column.identifier;
|
|
108
181
|
headers[column.name] = header;
|
|
@@ -112,25 +185,30 @@ class ReadXlsFile {
|
|
|
112
185
|
numberColumns.push(header);
|
|
113
186
|
if (column.column_type_id === 5)
|
|
114
187
|
booleanColumns.push(header);
|
|
188
|
+
if ([3, 4].includes(column.column_type_id)) {
|
|
189
|
+
dateColumns.push(header);
|
|
190
|
+
dateObject[header] = column;
|
|
191
|
+
}
|
|
192
|
+
if (column.is_mandatory && column.column_type_id !== 5)
|
|
193
|
+
mandatory.push(header);
|
|
115
194
|
});
|
|
116
|
-
return { headers, stringColumns, numberColumns, booleanColumns };
|
|
195
|
+
return { headers, stringColumns, numberColumns, booleanColumns, dateColumns, dateObject, mandatory };
|
|
117
196
|
}
|
|
118
|
-
mapHeader(header, headers
|
|
119
|
-
|
|
120
|
-
str = str.trim().replaceAll(' ', '_');
|
|
197
|
+
mapHeader(header, headers) {
|
|
198
|
+
const str = header.replace(/[^a-zA-Z0-9_ ]/g, '');
|
|
121
199
|
return headers[str] || str.toLowerCase();
|
|
122
200
|
}
|
|
123
201
|
getStringValue(str) {
|
|
124
202
|
if (!str)
|
|
125
203
|
return null;
|
|
126
204
|
if (str.length)
|
|
127
|
-
return str.trim();
|
|
205
|
+
return str.replaceAll(`'`, '').trim();
|
|
128
206
|
return null;
|
|
129
207
|
}
|
|
130
208
|
getNumberValue(str) {
|
|
131
209
|
if (!str)
|
|
132
210
|
return null;
|
|
133
|
-
str = str.
|
|
211
|
+
str = str.replace(/[^a-zA-Z0-9.]/g, '').trim();
|
|
134
212
|
if (str.length)
|
|
135
213
|
return +str.trim();
|
|
136
214
|
return null;
|
|
@@ -140,10 +218,36 @@ class ReadXlsFile {
|
|
|
140
218
|
return null;
|
|
141
219
|
if (!str.length)
|
|
142
220
|
return null;
|
|
221
|
+
str = str.replace(/[^a-zA-Z0-9]/g, '').trim();
|
|
143
222
|
if (str.toLowerCase() === 'true')
|
|
144
223
|
return true;
|
|
145
224
|
return false;
|
|
146
225
|
}
|
|
226
|
+
getDateValue(str, column) {
|
|
227
|
+
if (!str)
|
|
228
|
+
return null;
|
|
229
|
+
try {
|
|
230
|
+
const d = this.getDate(str, column);
|
|
231
|
+
const offset = column.attributes?.offset || 0;
|
|
232
|
+
return d instanceof Date && isFinite(d.getSeconds()) ? (0, date_fns_1.subMinutes)(d, offset) : null;
|
|
233
|
+
}
|
|
234
|
+
catch (error) {
|
|
235
|
+
return null;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
shouldIgnore(data, mandatory) {
|
|
239
|
+
for (const str of mandatory) {
|
|
240
|
+
if (!data[str])
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
return false;
|
|
244
|
+
}
|
|
245
|
+
getDate(str, column) {
|
|
246
|
+
const format = column.attributes?.format;
|
|
247
|
+
if (!format)
|
|
248
|
+
return new Date(str);
|
|
249
|
+
return (0, date_fns_1.parse)(str, format, new Date());
|
|
250
|
+
}
|
|
147
251
|
}
|
|
148
252
|
exports.ReadXlsFile = ReadXlsFile;
|
|
149
253
|
//# sourceMappingURL=read.xls.file.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read.xls.file.js","sourceRoot":"","sources":["../../../src/accessUtility/libraries/read.xls.file.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"read.xls.file.js","sourceRoot":"","sources":["../../../src/accessUtility/libraries/read.xls.file.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { BulkUploadEntity } from '../entities/bulk.upload.entity';
|
|
2
|
-
import { BulkUploadTypeEntity } from '../entities/bulk.upload.type.entity';
|
|
3
1
|
import { AccessBusinessEntity } from '../../access/entities/access.business.entity';
|
|
4
2
|
import { DocumentFileUploadDto } from '../dtos/document.file.upload.dto';
|
|
3
|
+
import { BulkUploadEntity } from '../entities/bulk.upload.entity';
|
|
4
|
+
import { BulkUploadTypeEntity } from '../entities/bulk.upload.type.entity';
|
|
5
5
|
export declare class BulkUploadService {
|
|
6
6
|
setUpload(business: AccessBusinessEntity, typeId: number, files: DocumentFileUploadDto): Promise<BulkUploadEntity>;
|
|
7
7
|
getUploadTypes(upload: BulkUploadEntity): Promise<BulkUploadTypeEntity[]>;
|
|
8
|
+
private getTypeScript;
|
|
8
9
|
getSheets(upload: BulkUploadEntity): Promise<string[]>;
|
|
9
10
|
}
|
|
@@ -12,6 +12,7 @@ const nestjs_utility_services_1 = require("@servicelabsco/nestjs-utility-service
|
|
|
12
12
|
const bulk_definition_entity_1 = require("../entities/bulk.definition.entity");
|
|
13
13
|
const bulk_definition_load_entity_1 = require("../entities/bulk.definition.load.entity");
|
|
14
14
|
const bulk_upload_entity_1 = require("../entities/bulk.upload.entity");
|
|
15
|
+
const upload_modification_entity_1 = require("../entities/upload.modification.entity");
|
|
15
16
|
let BulkUploadService = class BulkUploadService {
|
|
16
17
|
async setUpload(business, typeId, files) {
|
|
17
18
|
const type = await bulk_definition_entity_1.BulkDefinitionEntity.first(typeId);
|
|
@@ -24,19 +25,26 @@ let BulkUploadService = class BulkUploadService {
|
|
|
24
25
|
return record.save();
|
|
25
26
|
}
|
|
26
27
|
async getUploadTypes(upload) {
|
|
27
|
-
if (!upload.definition_id)
|
|
28
|
-
return [];
|
|
29
28
|
const loads = await bulk_definition_load_entity_1.BulkDefinitionLoadEntity.find({
|
|
30
29
|
where: { definition_id: upload.definition_id },
|
|
31
30
|
relations: ['type', 'type.columns'],
|
|
32
31
|
order: { priority: 'ASC' },
|
|
33
32
|
});
|
|
34
33
|
const types = [];
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
for (const load of loads) {
|
|
35
|
+
const type = load.type;
|
|
36
|
+
const script = await this.getTypeScript(upload.business_id, load.type_id);
|
|
37
|
+
types.push({ ...type, script });
|
|
38
|
+
}
|
|
38
39
|
return types;
|
|
39
40
|
}
|
|
41
|
+
async getTypeScript(businessId, typeId) {
|
|
42
|
+
const r = await upload_modification_entity_1.UploadModificationEntity.findOne({
|
|
43
|
+
where: { business_id: businessId, type_id: typeId, active: true },
|
|
44
|
+
relations: ['script'],
|
|
45
|
+
});
|
|
46
|
+
return r?.script;
|
|
47
|
+
}
|
|
40
48
|
async getSheets(upload) {
|
|
41
49
|
const types = await this.getUploadTypes(upload);
|
|
42
50
|
const sheets = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bulk.upload.service.js","sourceRoot":"","sources":["../../../src/accessUtility/services/bulk.upload.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,oFAA4E;
|
|
1
|
+
{"version":3,"file":"bulk.upload.service.js","sourceRoot":"","sources":["../../../src/accessUtility/services/bulk.upload.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAC5C,oFAA4E;AAG5E,+EAA0E;AAC1E,yFAAmF;AACnF,uEAAkE;AAElE,uFAAkF;AAG3E,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC1B,KAAK,CAAC,SAAS,CAAC,QAA8B,EAAE,MAAc,EAAE,KAA4B;QACxF,MAAM,IAAI,GAAG,MAAM,6CAAoB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,4CAAkB,CAAC,wBAAwB,CAAC,CAAC;QAElE,MAAM,MAAM,GAAG,qCAAgB,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC;QAE9B,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;QAE9C,MAAM,CAAC,UAAU,GAAG,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;QAE3E,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAwB;QACzC,MAAM,KAAK,GAAG,MAAM,sDAAwB,CAAC,IAAI,CAAC;YAC9C,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE;YAC9C,SAAS,EAAE,CAAC,MAAM,EAAE,cAAc,CAAC;YACnC,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;SAC7B,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAE1E,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,KAAK,CAAC;IACjB,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,UAAkB,EAAE,MAAc;QAC1D,MAAM,CAAC,GAAG,MAAM,qDAAwB,CAAC,OAAO,CAAC;YAC7C,KAAK,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;YACjE,SAAS,EAAE,CAAC,QAAQ,CAAC;SACxB,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,MAAwB;QACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ,CAAA;AApDY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;GACA,iBAAiB,CAoD7B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AnalyseBulkUploadJob } from '../jobs/analyse.bulk.upload.job';
|
|
1
2
|
import { BulkDefinitionJob } from '../jobs/bulk.definition.job';
|
|
2
3
|
import { BulkDefinitionLoadJob } from '../jobs/bulk.definition.load.job';
|
|
3
4
|
import { BulkDefinitionProcessingJob } from '../jobs/bulk.definition.processing.job';
|
|
@@ -7,8 +8,11 @@ import { BulkUploadJob } from '../jobs/bulk.upload.job';
|
|
|
7
8
|
import { BulkUploadTypeJob } from '../jobs/bulk.upload.type.job';
|
|
8
9
|
import { DataMappingJob } from '../jobs/data.mapping.job';
|
|
9
10
|
import { ListingModelJob } from '../jobs/listing.model.job';
|
|
11
|
+
import { PushToBulkItemJob } from '../jobs/push.to.bulk.item.job';
|
|
10
12
|
import { TagAssignmentJob } from '../jobs/tag.assignment.job';
|
|
13
|
+
import { UploadModificationJob } from '../jobs/upload.modification.job';
|
|
11
14
|
export declare class Es6JobsService {
|
|
15
|
+
private readonly analyseBulkUploadJob;
|
|
12
16
|
private readonly bulkDefinitionJob;
|
|
13
17
|
private readonly bulkDefinitionLoadJob;
|
|
14
18
|
private readonly bulkDefinitionProcessingJob;
|
|
@@ -18,9 +22,11 @@ export declare class Es6JobsService {
|
|
|
18
22
|
private readonly bulkUploadTypeJob;
|
|
19
23
|
private readonly dataMappingJob;
|
|
20
24
|
private readonly listingModelJob;
|
|
25
|
+
private readonly pushToBulkItemJob;
|
|
21
26
|
private readonly tagAssignmentJob;
|
|
27
|
+
private readonly uploadModificationJob;
|
|
22
28
|
private jobs;
|
|
23
|
-
constructor(bulkDefinitionJob: BulkDefinitionJob, bulkDefinitionLoadJob: BulkDefinitionLoadJob, bulkDefinitionProcessingJob: BulkDefinitionProcessingJob, bulkUploadColumnJob: BulkUploadColumnJob, bulkUploadItemJob: BulkUploadItemJob, bulkUploadJob: BulkUploadJob, bulkUploadTypeJob: BulkUploadTypeJob, dataMappingJob: DataMappingJob, listingModelJob: ListingModelJob, tagAssignmentJob: TagAssignmentJob);
|
|
29
|
+
constructor(analyseBulkUploadJob: AnalyseBulkUploadJob, bulkDefinitionJob: BulkDefinitionJob, bulkDefinitionLoadJob: BulkDefinitionLoadJob, bulkDefinitionProcessingJob: BulkDefinitionProcessingJob, bulkUploadColumnJob: BulkUploadColumnJob, bulkUploadItemJob: BulkUploadItemJob, bulkUploadJob: BulkUploadJob, bulkUploadTypeJob: BulkUploadTypeJob, dataMappingJob: DataMappingJob, listingModelJob: ListingModelJob, pushToBulkItemJob: PushToBulkItemJob, tagAssignmentJob: TagAssignmentJob, uploadModificationJob: UploadModificationJob);
|
|
24
30
|
alignJobs(): void;
|
|
25
31
|
setJobs(): void;
|
|
26
32
|
}
|