gemcap-be-common 1.2.140 → 1.3.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/classes/bank-transaction-item.d.ts +17 -0
- package/classes/bank-transaction-item.js +64 -0
- package/classes/bank-transaction-item.ts +66 -0
- package/classes/bank-uploaded-transaction.d.ts +17 -0
- package/classes/bank-uploaded-transaction.js +35 -0
- package/classes/bank-uploaded-transaction.ts +35 -0
- package/classes/inventory-item.d.ts +41 -0
- package/classes/inventory-item.js +44 -0
- package/classes/inventory-item.ts +63 -0
- package/classes/payable-account-item.d.ts +22 -0
- package/classes/payable-account-item.js +27 -0
- package/classes/payable-account-item.ts +35 -0
- package/classes/quickbook-item.d.ts +37 -0
- package/classes/quickbook-item.js +51 -0
- package/classes/quickbook-item.ts +59 -0
- package/classes/receivable-item.d.ts +26 -0
- package/classes/receivable-item.js +28 -0
- package/classes/receivable-item.ts +38 -0
- package/constants/date-formats.contsants.d.ts +1 -0
- package/constants/date-formats.contsants.js +4 -0
- package/constants/date-formats.contsants.ts +1 -0
- package/db/brokers.db.d.ts +185 -0
- package/db/brokers.db.js +35 -2
- package/db/brokers.db.ts +34 -1
- package/db/collateral-adjustments.db.d.ts +34 -0
- package/db/collateral-adjustments.db.js +52 -0
- package/db/collateral-adjustments.db.ts +54 -0
- package/db/collaterals.db.d.ts +1 -1
- package/db/equipment.db.d.ts +40 -0
- package/db/equipment.db.js +55 -0
- package/db/equipment.db.ts +56 -0
- package/db/financial-spreading.db.ts +2 -1
- package/db/groups.d.ts +5 -0
- package/db/groups.js +57 -0
- package/db/groups.ts +52 -0
- package/db/inventories.d.ts +91 -0
- package/db/inventories.js +449 -0
- package/db/inventories.ts +481 -0
- package/db/inventory-availability.d.ts +3 -0
- package/db/inventory-availability.js +103 -0
- package/db/inventory-availability.ts +113 -0
- package/db/new-summary.d.ts +31 -0
- package/db/new-summary.js +1295 -0
- package/db/new-summary.ts +1509 -0
- package/db/payable-accounts.d.ts +30 -0
- package/db/payable-accounts.js +55 -0
- package/db/payable-accounts.ts +50 -0
- package/db/reserve.db.d.ts +34 -0
- package/db/reserve.db.js +52 -0
- package/db/reserve.db.ts +48 -0
- package/db/uploads.db.d.ts +2 -0
- package/db/uploads.db.js +29 -0
- package/db/uploads.db.ts +24 -0
- package/helpers/main.helper.d.ts +31 -0
- package/helpers/main.helper.js +63 -0
- package/helpers/main.helper.ts +63 -0
- package/models/AccountPayableItem.model.d.ts +6 -6
- package/models/AllocatedBankTransaction.model.d.ts +54 -0
- package/models/AllocatedBankTransaction.model.js +70 -0
- package/models/AllocatedBankTransaction.model.ts +94 -0
- package/models/AllocatedData.model.d.ts +33 -0
- package/models/AllocatedData.model.js +19 -0
- package/models/AllocatedData.model.ts +24 -0
- package/models/BBCDate.model.d.ts +3 -3
- package/models/BBCSheet.model.d.ts +3 -3
- package/models/Banks.model.d.ts +3 -3
- package/models/Borrower.model.d.ts +3 -3
- package/models/BorrowerData.model.d.ts +3 -3
- package/models/BorrowerDataInsurance.model.d.ts +3 -3
- package/models/BorrowerDataTerm.model.d.ts +3 -3
- package/models/BorrowerSummary.model.js +1 -1
- package/models/BorrowerSummary.model.ts +1 -1
- package/models/CalandarDay.model.d.ts +40 -0
- package/models/CalandarDay.model.js +47 -0
- package/models/CalandarDay.model.ts +61 -0
- package/models/CashAllocationProduct.model.d.ts +119 -0
- package/models/CashAllocationProduct.model.js +102 -0
- package/models/CashAllocationProduct.model.ts +112 -0
- package/models/CashAllocationReference.model.d.ts +37 -0
- package/models/CashAllocationReference.model.js +27 -0
- package/models/CashAllocationReference.model.ts +40 -0
- package/models/CollateralAdjustment.model.d.ts +51 -0
- package/models/CollateralAdjustment.model.js +61 -0
- package/models/CollateralAdjustment.model.ts +98 -0
- package/models/Company.model.d.ts +35 -0
- package/models/Company.model.js +18 -0
- package/models/Company.model.ts +29 -0
- package/models/CustomerAPGroup.model.d.ts +32 -0
- package/models/CustomerAPGroup.model.js +24 -0
- package/models/CustomerAPGroup.model.ts +31 -0
- package/models/Equipment.model.d.ts +53 -0
- package/models/Equipment.model.js +140 -0
- package/models/Equipment.model.ts +172 -0
- package/models/FinancialCompliance.model.d.ts +39 -0
- package/models/FinancialCompliance.model.js +64 -0
- package/models/FinancialCompliance.model.ts +78 -0
- package/models/FinancialComplianceBorrower.model.d.ts +58 -0
- package/models/FinancialComplianceBorrower.model.js +82 -0
- package/models/FinancialComplianceBorrower.model.ts +118 -0
- package/models/FinancialIndexes.model.d.ts +36 -0
- package/models/FinancialIndexes.model.js +27 -0
- package/models/FinancialIndexes.model.ts +37 -0
- package/models/Inventory.model.d.ts +18 -18
- package/models/InventoryAvailability.model.d.ts +21 -21
- package/models/InventoryAvailabilityItem.model.d.ts +6 -6
- package/models/InventoryItem.model.d.ts +24 -24
- package/models/InventoryManualEntry.model.d.ts +9 -9
- package/models/InventorySeasonalRates.model.d.ts +3 -3
- package/models/LoanBroker.model.d.ts +3 -3
- package/models/LoanCharges.model.d.ts +12 -12
- package/models/LoanProducts.model.d.ts +9 -9
- package/models/LoanStatementStatus.model.d.ts +35 -0
- package/models/LoanStatementStatus.model.js +34 -0
- package/models/LoanStatementStatus.model.ts +45 -0
- package/models/LoanStatementTransaction.model.d.ts +9 -9
- package/models/LoanTransactionFile.model.d.ts +41 -0
- package/models/LoanTransactionFile.model.js +44 -0
- package/models/LoanTransactionFile.model.ts +61 -0
- package/models/MappedGroup.model.d.ts +37 -0
- package/models/MappedGroup.model.js +33 -0
- package/models/MappedGroup.model.ts +46 -0
- package/models/MonthEndData.Model.d.ts +41 -0
- package/models/MonthEndData.Model.js +42 -0
- package/models/MonthEndData.Model.ts +53 -0
- package/models/OrganizationEmails.model.d.ts +44 -0
- package/models/OrganizationEmails.model.js +40 -0
- package/models/OrganizationEmails.model.ts +54 -0
- package/models/ProductBroker.model.d.ts +9 -9
- package/models/QuickbooksAccount.model.d.ts +39 -0
- package/models/QuickbooksAccount.model.js +43 -0
- package/models/QuickbooksAccount.model.ts +57 -0
- package/models/Receivable.model.d.ts +12 -12
- package/models/ReceivableAvailability.model.d.ts +54 -54
- package/models/ReceivableAvailabilityItem.model.d.ts +57 -57
- package/models/ReceivableItem.model.d.ts +6 -6
- package/models/Reserve.model.d.ts +51 -0
- package/models/Reserve.model.js +96 -0
- package/models/Reserve.model.ts +125 -0
- package/models/TermLoan.model.d.ts +3 -3
- package/models/TermLoanCalculated.model.d.ts +6 -6
- package/models/TransactionAttachedFile.Model.d.ts +35 -0
- package/models/TransactionAttachedFile.Model.js +37 -0
- package/models/TransactionAttachedFile.Model.ts +48 -0
- package/models/UploadedBankTransaction.model.d.ts +56 -0
- package/models/UploadedBankTransaction.model.js +78 -0
- package/models/UploadedBankTransaction.model.ts +110 -0
- package/models/UploadedData.model.d.ts +36 -0
- package/models/UploadedData.model.js +23 -0
- package/models/UploadedData.model.ts +35 -0
- package/models/UploadedFile.model.d.ts +40 -0
- package/models/UploadedFile.model.js +41 -0
- package/models/UploadedFile.model.ts +57 -0
- package/models/UploadedSheet.model.d.ts +46 -0
- package/models/UploadedSheet.model.js +27 -0
- package/models/UploadedSheet.model.ts +51 -0
- package/package.json +10 -1
- package/repositories/globals.repository.d.ts +8 -0
- package/repositories/globals.repository.js +24 -0
- package/repositories/globals.repository.ts +21 -0
- package/services/attached-files.service.d.ts +57 -0
- package/services/attached-files.service.js +103 -0
- package/services/attached-files.service.ts +123 -0
- package/services/availability.service.d.ts +77 -0
- package/services/availability.service.js +897 -0
- package/services/availability.service.ts +1034 -0
- package/services/bank-uploaded-transactions.service.d.ts +33 -0
- package/services/bank-uploaded-transactions.service.js +430 -0
- package/services/bank-uploaded-transactions.service.ts +475 -0
- package/services/banks.service.d.ts +36 -0
- package/services/banks.service.js +91 -0
- package/services/banks.service.ts +95 -0
- package/services/borrower-summary.service.d.ts +35 -0
- package/services/borrower-summary.service.js +310 -0
- package/services/borrower-summary.service.ts +334 -0
- package/services/borrowers.service.d.ts +103 -0
- package/services/borrowers.service.js +268 -0
- package/services/borrowers.service.ts +302 -0
- package/services/brokers.service.d.ts +212 -0
- package/services/brokers.service.js +160 -0
- package/services/brokers.service.ts +200 -0
- package/services/calendar.service.d.ts +53 -0
- package/services/calendar.service.js +108 -0
- package/services/calendar.service.ts +128 -0
- package/services/cash-allocation.service.d.ts +40 -0
- package/services/cash-allocation.service.js +92 -0
- package/services/cash-allocation.service.ts +105 -0
- package/services/collateral-adjustments.service.d.ts +38 -0
- package/services/collateral-adjustments.service.js +82 -0
- package/services/collateral-adjustments.service.ts +95 -0
- package/services/collaterals.service.d.ts +69 -0
- package/services/collaterals.service.js +279 -0
- package/services/collaterals.service.ts +319 -0
- package/services/companies.service.d.ts +5 -0
- package/services/companies.service.js +21 -0
- package/services/companies.service.ts +23 -0
- package/services/compliance-borrowers.service.d.ts +152 -0
- package/services/compliance-borrowers.service.js +569 -0
- package/services/compliance-borrowers.service.ts +617 -0
- package/services/equipment.service.d.ts +42 -0
- package/services/equipment.service.js +120 -0
- package/services/equipment.service.ts +149 -0
- package/services/file-manager.service.d.ts +44 -0
- package/services/file-manager.service.js +120 -0
- package/services/file-manager.service.ts +146 -0
- package/services/financial-compliance.service.d.ts +58 -0
- package/services/financial-compliance.service.js +281 -0
- package/services/financial-compliance.service.ts +309 -0
- package/services/financial-indexes.service.d.ts +20 -0
- package/services/financial-indexes.service.js +241 -0
- package/services/financial-indexes.service.ts +257 -0
- package/services/financial-spreading.service.d.ts +74 -0
- package/services/financial-spreading.service.js +450 -0
- package/services/financial-spreading.service.ts +517 -0
- package/services/globals.service.d.ts +5 -0
- package/services/globals.service.js +11 -0
- package/services/globals.service.ts +8 -0
- package/services/groups.service.d.ts +39 -0
- package/services/groups.service.js +65 -0
- package/services/groups.service.ts +64 -0
- package/services/inventory-availability.service.d.ts +13 -0
- package/services/inventory-availability.service.js +170 -0
- package/services/inventory-availability.service.ts +187 -0
- package/services/inventory.service.d.ts +118 -0
- package/services/inventory.service.js +239 -0
- package/services/inventory.service.ts +276 -0
- package/services/loan-charges.service.d.ts +83 -0
- package/services/loan-charges.service.js +343 -0
- package/services/loan-charges.service.ts +396 -0
- package/services/loan-payments.service.d.ts +94 -0
- package/services/loan-payments.service.js +485 -0
- package/services/loan-payments.service.ts +541 -0
- package/services/loan-products.service.d.ts +12 -0
- package/services/loan-products.service.js +55 -0
- package/services/loan-products.service.ts +58 -0
- package/services/loan-statement-balance.service.d.ts +16 -0
- package/services/loan-statement-balance.service.js +106 -0
- package/services/loan-statement-balance.service.ts +113 -0
- package/services/loan-statement-effects.service.d.ts +8 -0
- package/services/loan-statement-effects.service.js +42 -0
- package/services/loan-statement-effects.service.ts +41 -0
- package/services/loan-statement-status.service.d.ts +208 -0
- package/services/loan-statement-status.service.js +159 -0
- package/services/loan-statement-status.service.ts +177 -0
- package/services/loan-statement.service.d.ts +186 -0
- package/services/loan-statement.service.js +935 -0
- package/services/loan-statement.service.ts +1040 -0
- package/services/loan-transactions.service.d.ts +169 -0
- package/services/loan-transactions.service.js +941 -0
- package/services/loan-transactions.service.ts +1042 -0
- package/services/lock.service.d.ts +6 -0
- package/services/lock.service.js +45 -0
- package/services/lock.service.ts +45 -0
- package/services/manual-entry.service.d.ts +20 -0
- package/services/manual-entry.service.js +186 -0
- package/services/manual-entry.service.ts +201 -0
- package/services/month-end-data.service.d.ts +34 -0
- package/services/month-end-data.service.js +30 -0
- package/services/month-end-data.service.ts +35 -0
- package/services/nodemailer.service.d.ts +96 -0
- package/services/nodemailer.service.js +689 -0
- package/services/nodemailer.service.ts +774 -0
- package/services/organization-emails.service.d.ts +31 -0
- package/services/organization-emails.service.js +10 -0
- package/services/organization-emails.service.ts +7 -0
- package/services/organizations.service.d.ts +34 -0
- package/services/organizations.service.js +74 -0
- package/services/organizations.service.ts +84 -0
- package/services/pdf.service.d.ts +61 -0
- package/services/pdf.service.js +547 -0
- package/services/pdf.service.ts +642 -0
- package/services/quickbooks.service.d.ts +99 -0
- package/services/quickbooks.service.js +640 -0
- package/services/quickbooks.service.ts +734 -0
- package/services/reports/investor-summary.service.d.ts +28 -0
- package/services/reports/investor-summary.service.js +136 -0
- package/services/reports/investor-summary.service.ts +159 -0
- package/services/reports.service.d.ts +126 -0
- package/services/reports.service.js +584 -0
- package/services/reports.service.ts +702 -0
- package/services/reserve.service.d.ts +37 -0
- package/services/reserve.service.js +76 -0
- package/services/reserve.service.ts +79 -0
- package/services/sentry.service.d.ts +11 -0
- package/services/sentry.service.js +49 -0
- package/services/sentry.service.ts +33 -0
- package/services/signs.service.d.ts +69 -0
- package/services/signs.service.js +230 -0
- package/services/signs.service.ts +260 -0
- package/services/term-loan.service.d.ts +30 -0
- package/services/term-loan.service.js +614 -0
- package/services/term-loan.service.ts +696 -0
- package/services/uploads.service.d.ts +134 -0
- package/services/uploads.service.js +587 -0
- package/services/uploads.service.ts +643 -0
- package/services/user-logs.service.d.ts +23 -0
- package/services/user-logs.service.js +160 -0
- package/services/user-logs.service.ts +177 -0
- package/services/users.service.d.ts +4 -4
- package/services/yield.service.d.ts +46 -0
- package/services/yield.service.js +42 -12
- package/services/yield.service.ts +38 -8
- package/tsconfig.json +5 -5
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -0,0 +1,587 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
+
};
|
|
28
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
+
exports.UploadsService = void 0;
|
|
30
|
+
const path_1 = __importDefault(require("path"));
|
|
31
|
+
const fs_1 = __importDefault(require("fs"));
|
|
32
|
+
const XLSX = __importStar(require("xlsx"));
|
|
33
|
+
const mongoose_1 = __importDefault(require("mongoose"));
|
|
34
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
35
|
+
const decimal_js_1 = __importDefault(require("decimal.js"));
|
|
36
|
+
const excel_helper_1 = require("../helpers/excel.helper");
|
|
37
|
+
const collaterals_db_1 = require("../db/collaterals.db");
|
|
38
|
+
const collaterals_enum_1 = require("../enums/collaterals.enum");
|
|
39
|
+
const validators_enums_1 = require("../enums/validators.enums");
|
|
40
|
+
const column_desciptions_helper_1 = require("../helpers/column-desciptions.helper");
|
|
41
|
+
const date_helper_1 = require("../helpers/date.helper");
|
|
42
|
+
const upload_types_enum_1 = require("../enums/upload-types.enum");
|
|
43
|
+
const BBCDate_model_1 = require("../models/BBCDate.model");
|
|
44
|
+
const AvailabilitySigns_model_1 = require("../models/AvailabilitySigns.model");
|
|
45
|
+
const ReceivableAvailability_model_1 = require("../models/ReceivableAvailability.model");
|
|
46
|
+
const BBCSheet_model_1 = require("../models/BBCSheet.model");
|
|
47
|
+
const InventoryManualEntry_model_1 = require("../models/InventoryManualEntry.model");
|
|
48
|
+
const UserLog_model_1 = require("../models/UserLog.model");
|
|
49
|
+
const microservice_tasks_db_1 = require("../db/microservice-tasks.db");
|
|
50
|
+
const microservice_task_enum_1 = require("../enums/microservice-task.enum");
|
|
51
|
+
const User_model_1 = require("../models/User.model");
|
|
52
|
+
const UploadedFile_model_1 = __importDefault(require("../models/UploadedFile.model"));
|
|
53
|
+
const UploadedSheet_model_1 = __importDefault(require("../models/UploadedSheet.model"));
|
|
54
|
+
const UploadedData_model_1 = __importDefault(require("../models/UploadedData.model"));
|
|
55
|
+
const inventory_item_1 = require("../classes/inventory-item");
|
|
56
|
+
const receivable_item_1 = require("../classes/receivable-item");
|
|
57
|
+
const payable_account_item_1 = require("../classes/payable-account-item");
|
|
58
|
+
const uploads_db_1 = require("../db/uploads.db");
|
|
59
|
+
const inventories_1 = require("../db/inventories");
|
|
60
|
+
const bank_transaction_item_1 = require("../classes/bank-transaction-item");
|
|
61
|
+
const Equipment_model_1 = __importDefault(require("../models/Equipment.model"));
|
|
62
|
+
const Reserve_model_1 = __importDefault(require("../models/Reserve.model"));
|
|
63
|
+
const quickbook_item_1 = require("../classes/quickbook-item");
|
|
64
|
+
const bank_uploaded_transaction_1 = require("../classes/bank-uploaded-transaction");
|
|
65
|
+
const validators = {
|
|
66
|
+
[validators_enums_1.EValidators.NOT_EMPTY]: (field, value) => {
|
|
67
|
+
if (!value || value.toString().trim() === '') {
|
|
68
|
+
return { error: `value ${field} must not be empty!` };
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
[validators_enums_1.EValidators.NUMBER_GT_NULL]: (field, value) => {
|
|
72
|
+
if (value === 0 || value < 0) {
|
|
73
|
+
return { error: `value ${field} must be greater than 0!` };
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
[validators_enums_1.EValidators.NUMBER_GTE_NULL]: (field, value) => {
|
|
77
|
+
if (value < 0) {
|
|
78
|
+
return { error: `value ${field} must be greater or equal 0!` };
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
[validators_enums_1.EValidators.IS_NUMBER]: (field, value) => {
|
|
82
|
+
if (typeof value === 'object' || isNaN(Number(value))) {
|
|
83
|
+
return { error: `value ${field} must be number!` };
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
[validators_enums_1.EValidators.IS_DATE]: (field, value) => {
|
|
87
|
+
if (!value) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (value.toString().trim() !== '' && Object.prototype.toString.call((0, date_helper_1.convertAnyToDate)(value)) !== '[object Date]') {
|
|
91
|
+
return { error: `value ${field} must be date!` };
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
class UploadsService {
|
|
96
|
+
rootDir;
|
|
97
|
+
bankUploadedTransactionsService;
|
|
98
|
+
getCollateralsService;
|
|
99
|
+
getLoanTransactionsService;
|
|
100
|
+
getQuickbooksService;
|
|
101
|
+
getLockService;
|
|
102
|
+
userLogsService;
|
|
103
|
+
borrowerService;
|
|
104
|
+
constructor(rootDir, bankUploadedTransactionsService, getCollateralsService, getLoanTransactionsService, getQuickbooksService, getLockService, userLogsService, borrowerService) {
|
|
105
|
+
this.rootDir = rootDir;
|
|
106
|
+
this.bankUploadedTransactionsService = bankUploadedTransactionsService;
|
|
107
|
+
this.getCollateralsService = getCollateralsService;
|
|
108
|
+
this.getLoanTransactionsService = getLoanTransactionsService;
|
|
109
|
+
this.getQuickbooksService = getQuickbooksService;
|
|
110
|
+
this.getLockService = getLockService;
|
|
111
|
+
this.userLogsService = userLogsService;
|
|
112
|
+
this.borrowerService = borrowerService;
|
|
113
|
+
}
|
|
114
|
+
async createUploadFile(file, borrowerId, userId, uploadType) {
|
|
115
|
+
const borrowerIdToWrite = new mongoose_1.default.Types.ObjectId(borrowerId);
|
|
116
|
+
const newFile = {
|
|
117
|
+
borrowerId: borrowerIdToWrite,
|
|
118
|
+
filename: file.filename,
|
|
119
|
+
originalName: file.originalname,
|
|
120
|
+
userId: new mongoose_1.default.Types.ObjectId(userId),
|
|
121
|
+
type: uploadType,
|
|
122
|
+
};
|
|
123
|
+
return await UploadedFile_model_1.default.create(newFile);
|
|
124
|
+
}
|
|
125
|
+
async convertFileToData(uploadedFileId) {
|
|
126
|
+
const uploadedFile = await UploadedFile_model_1.default.findById(uploadedFileId).lean();
|
|
127
|
+
if (!uploadedFile) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const absolutePath = path_1.default.join(this.rootDir, 'uploads', uploadedFile.filename);
|
|
131
|
+
let excelData;
|
|
132
|
+
fs_1.default.readFile(absolutePath, async (err, data) => {
|
|
133
|
+
if (err) {
|
|
134
|
+
console.error({ err });
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const xlsxOptions = { cellDates: true, dateNF: 'yyyy/mm/dd;@' };
|
|
138
|
+
const workbook = XLSX.read(data, xlsxOptions);
|
|
139
|
+
excelData = Object.keys(workbook.Sheets).reduce((acc, ws) => {
|
|
140
|
+
const worksheet = workbook.Sheets[ws];
|
|
141
|
+
const arrayList = XLSX.utils.sheet_to_json(worksheet, { header: 1, defval: null });
|
|
142
|
+
const trimmedArray = this.trimExcelArray(arrayList);
|
|
143
|
+
return { ...acc, [ws]: trimmedArray.map((arr) => Object.assign({}, arr)) };
|
|
144
|
+
}, {});
|
|
145
|
+
await Promise.all(Object.entries(excelData).map(async ([sheetName, sheetData]) => {
|
|
146
|
+
const newSheet = {
|
|
147
|
+
fileId: new mongoose_1.default.Types.ObjectId(uploadedFileId),
|
|
148
|
+
sheetName: sheetName,
|
|
149
|
+
total: sheetData.length,
|
|
150
|
+
};
|
|
151
|
+
const createdSheet = await UploadedSheet_model_1.default.create(newSheet);
|
|
152
|
+
sheetData.map(async (data, order) => {
|
|
153
|
+
const convertedData = Object.entries(data).reduce((acc, [key, value]) => {
|
|
154
|
+
return {
|
|
155
|
+
...acc,
|
|
156
|
+
[key]: typeof value === 'number' ? new decimal_js_1.default(value).toDecimalPlaces(2).toNumber() : value,
|
|
157
|
+
};
|
|
158
|
+
}, {});
|
|
159
|
+
const newData = {
|
|
160
|
+
sheetId: new mongoose_1.default.Types.ObjectId(String(createdSheet._id)),
|
|
161
|
+
order,
|
|
162
|
+
data: convertedData,
|
|
163
|
+
};
|
|
164
|
+
await UploadedData_model_1.default.create(newData);
|
|
165
|
+
});
|
|
166
|
+
}));
|
|
167
|
+
fs_1.default.unlink(absolutePath, async (err) => {
|
|
168
|
+
if (err) {
|
|
169
|
+
console.error(err);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
async convertDataToFile(dataToConvert) {
|
|
175
|
+
return (0, excel_helper_1.convertDataToFile)(dataToConvert);
|
|
176
|
+
}
|
|
177
|
+
async convertDataToFileWithStyleOld(dataToConvert, options) {
|
|
178
|
+
return (0, excel_helper_1.convertDataToFileWithStyleOld)(dataToConvert, options);
|
|
179
|
+
}
|
|
180
|
+
async deleteFile(uploadedFileId) {
|
|
181
|
+
await UploadedFile_model_1.default.deleteOne({ _id: uploadedFileId });
|
|
182
|
+
}
|
|
183
|
+
async deleteSheet(uploadedSheetId) {
|
|
184
|
+
const sheet = await UploadedSheet_model_1.default.findById(uploadedSheetId).lean();
|
|
185
|
+
const file = await UploadedFile_model_1.default.findById(sheet.fileId).lean();
|
|
186
|
+
const borrowerId = file.borrowerId ? file.borrowerId.toString() : null;
|
|
187
|
+
await UploadedSheet_model_1.default.deleteOne({ _id: uploadedSheetId });
|
|
188
|
+
await UploadedData_model_1.default.deleteMany({ sheetId: uploadedSheetId });
|
|
189
|
+
const sheets = await UploadedSheet_model_1.default.find({ fileId: file._id });
|
|
190
|
+
if (!sheets.length) {
|
|
191
|
+
await UploadedFile_model_1.default.deleteOne({ _id: file._id });
|
|
192
|
+
}
|
|
193
|
+
return await this.getUploadedSheets(borrowerId, file.type);
|
|
194
|
+
}
|
|
195
|
+
async deleteAllSheets(uploadType) {
|
|
196
|
+
const files = await UploadedFile_model_1.default.find({ type: uploadType });
|
|
197
|
+
const fileIds = files.map((i) => i._id);
|
|
198
|
+
const sheets = await UploadedSheet_model_1.default.find({ fileId: { $in: fileIds } });
|
|
199
|
+
const sheetIds = sheets.map((i) => i._id);
|
|
200
|
+
await UploadedSheet_model_1.default.deleteMany({ _id: { $in: sheetIds } });
|
|
201
|
+
await UploadedData_model_1.default.deleteMany({ sheetId: { $in: sheetIds } });
|
|
202
|
+
await UploadedFile_model_1.default.deleteMany({ _id: { $in: fileIds } });
|
|
203
|
+
}
|
|
204
|
+
trimExcelArray(data) {
|
|
205
|
+
let dataFiltered = data.filter((arr) => arr.some((elem) => elem !== null && elem !== 0 && elem.toString().trim() !== ''));
|
|
206
|
+
if (!dataFiltered.length) {
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
const dataRotated = dataFiltered[0].map((_, index) => dataFiltered.map(row => row[index]).reverse());
|
|
210
|
+
let dataRotatedFiltered = dataRotated.filter((arr) => arr.some((elem) => elem !== null && elem !== 0 && elem.toString().trim() !== ''));
|
|
211
|
+
return dataRotatedFiltered[0].map((_, index) => dataRotatedFiltered.map((row) => row[row.length - 1 - index]));
|
|
212
|
+
}
|
|
213
|
+
async getUploadedRawFiles(borrowerId, uploadType) {
|
|
214
|
+
const findFilter = uploadType === upload_types_enum_1.EUploadTypes.BBC
|
|
215
|
+
? { borrowerId, type: uploadType }
|
|
216
|
+
: { type: uploadType };
|
|
217
|
+
const uploadedFiles = await UploadedFile_model_1.default.find(findFilter).lean();
|
|
218
|
+
const files = await Promise.all(uploadedFiles.map(async (file) => {
|
|
219
|
+
const sheets = await UploadedSheet_model_1.default.find({ fileId: file._id });
|
|
220
|
+
if (!sheets.length) {
|
|
221
|
+
return file;
|
|
222
|
+
}
|
|
223
|
+
}));
|
|
224
|
+
return files.filter((file) => !!file);
|
|
225
|
+
}
|
|
226
|
+
async getUploadedSheets(borrowerId, uploadType) {
|
|
227
|
+
const borrowerFilter = uploadType === upload_types_enum_1.EUploadTypes.BBC ? { borrowerId: new mongoose_1.default.Types.ObjectId(borrowerId) } : {};
|
|
228
|
+
const files = await UploadedFile_model_1.default.aggregate([
|
|
229
|
+
{
|
|
230
|
+
$match: {
|
|
231
|
+
...borrowerFilter,
|
|
232
|
+
'type': uploadType,
|
|
233
|
+
},
|
|
234
|
+
}, {
|
|
235
|
+
$sort: {
|
|
236
|
+
'createdAt': 1,
|
|
237
|
+
},
|
|
238
|
+
},
|
|
239
|
+
]);
|
|
240
|
+
const fileIds = files.map((file) => file._id);
|
|
241
|
+
const sheets = await UploadedSheet_model_1.default.aggregate([
|
|
242
|
+
{
|
|
243
|
+
$match: {
|
|
244
|
+
'fileId': {
|
|
245
|
+
$in: fileIds,
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
}, {
|
|
249
|
+
$lookup: {
|
|
250
|
+
from: 'uploadedfiles',
|
|
251
|
+
localField: 'fileId',
|
|
252
|
+
foreignField: '_id',
|
|
253
|
+
as: 'file',
|
|
254
|
+
},
|
|
255
|
+
}, {
|
|
256
|
+
$unwind: {
|
|
257
|
+
path: '$file',
|
|
258
|
+
},
|
|
259
|
+
}, {
|
|
260
|
+
$sort: {
|
|
261
|
+
'createdAt': 1,
|
|
262
|
+
},
|
|
263
|
+
},
|
|
264
|
+
]);
|
|
265
|
+
return sheets.map((sheet) => {
|
|
266
|
+
return {
|
|
267
|
+
_id: sheet._id,
|
|
268
|
+
sheetName: sheet.sheetName,
|
|
269
|
+
fileId: sheet.file._id,
|
|
270
|
+
fileName: sheet.file.originalName,
|
|
271
|
+
total: sheet.total,
|
|
272
|
+
};
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
async getUploadedData(sheetId, paginatorOptions) {
|
|
276
|
+
const uploadedData = await UploadedData_model_1.default.aggregate([
|
|
277
|
+
{
|
|
278
|
+
$match: {
|
|
279
|
+
'sheetId': new mongoose_1.default.Types.ObjectId(sheetId),
|
|
280
|
+
},
|
|
281
|
+
}, {
|
|
282
|
+
$sort: {
|
|
283
|
+
'order': 1,
|
|
284
|
+
},
|
|
285
|
+
},
|
|
286
|
+
...(0, collaterals_db_1.ITEMS_PAGINATION)(paginatorOptions),
|
|
287
|
+
]);
|
|
288
|
+
const totalItems = (await UploadedSheet_model_1.default.findById(sheetId)).total;
|
|
289
|
+
return {
|
|
290
|
+
paginatorOptions,
|
|
291
|
+
totalItems,
|
|
292
|
+
items: uploadedData.map((row) => row.data),
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
transformNumberIntoDate(mappedRow, collateralType) {
|
|
296
|
+
const dateFields = column_desciptions_helper_1.COLLATERALS[collateralType].filter((field) => field.isDate).map((field) => field.db_title);
|
|
297
|
+
Object.entries(mappedRow).forEach(([key, value]) => {
|
|
298
|
+
if (dateFields.includes(key) && typeof value === 'number') {
|
|
299
|
+
mappedRow[key] = (0, date_helper_1.excelDateToJSDate)(value);
|
|
300
|
+
}
|
|
301
|
+
});
|
|
302
|
+
return mappedRow;
|
|
303
|
+
}
|
|
304
|
+
validateRow(mappedRow, collateralType) {
|
|
305
|
+
try {
|
|
306
|
+
const rowValidationErrors = [];
|
|
307
|
+
Object.entries(mappedRow).forEach(([field, value]) => {
|
|
308
|
+
const foundDesc = column_desciptions_helper_1.COLLATERALS[collateralType].find((columnDesc) => field === columnDesc.db_title);
|
|
309
|
+
const fieldValidationErrors = [];
|
|
310
|
+
if (!foundDesc) {
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
if (foundDesc.validators) {
|
|
314
|
+
foundDesc.validators.forEach((validator) => {
|
|
315
|
+
const validationError = validators[validator](field, value);
|
|
316
|
+
if (!!validationError) {
|
|
317
|
+
fieldValidationErrors.push(validationError);
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
}
|
|
321
|
+
if (fieldValidationErrors.length) {
|
|
322
|
+
rowValidationErrors.push({ [field]: fieldValidationErrors });
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
return rowValidationErrors;
|
|
326
|
+
}
|
|
327
|
+
catch (e) {
|
|
328
|
+
console.error(e);
|
|
329
|
+
return [{ row: e }];
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
async mapData(mapData, paginators) {
|
|
333
|
+
const mappedData = await this.prepareData(mapData);
|
|
334
|
+
const hasDateMismatch = mappedData.approved.items.some((item) => {
|
|
335
|
+
if ((0, dayjs_1.default)(item.date).format('YYYY-MM-DD') !== mapData.effectiveDate) {
|
|
336
|
+
}
|
|
337
|
+
return (0, dayjs_1.default)(item.date).format('YYYY-MM-DD') !== mapData.effectiveDate;
|
|
338
|
+
});
|
|
339
|
+
const paginateItems = (items, paginator) => {
|
|
340
|
+
const startItem = paginator.pageIndex * paginator.pageSize;
|
|
341
|
+
return items.slice(startItem, startItem + paginator.pageSize);
|
|
342
|
+
};
|
|
343
|
+
return Object.keys(mappedData).reduce((acc, key) => {
|
|
344
|
+
return {
|
|
345
|
+
...acc,
|
|
346
|
+
hasDateMismatch,
|
|
347
|
+
[key]: {
|
|
348
|
+
totalItems: mappedData[key].totalItems,
|
|
349
|
+
items: paginateItems(mappedData[key].items, paginators[key]),
|
|
350
|
+
paginatorOptions: paginators[key],
|
|
351
|
+
},
|
|
352
|
+
};
|
|
353
|
+
}, {});
|
|
354
|
+
}
|
|
355
|
+
async convertData(mapData, userId) {
|
|
356
|
+
const { approved } = await this.prepareData(mapData);
|
|
357
|
+
const fileData = await (0, uploads_db_1.getSheetWithFile)(mapData.sheetId);
|
|
358
|
+
const borrowerId = fileData[0].file.borrowerId?.toString() ?? null;
|
|
359
|
+
const bbcDate = dayjs_1.default.utc(mapData.bbcDate).startOf('day').toDate();
|
|
360
|
+
if (borrowerId) {
|
|
361
|
+
const lockService = this.getLockService();
|
|
362
|
+
const isDateLocked = await lockService.isDateLocked(bbcDate, borrowerId);
|
|
363
|
+
if (isDateLocked) {
|
|
364
|
+
return { success: false, message: 'This period is signed and locked', data: null };
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
const newCollateralData = {
|
|
368
|
+
borrowerId,
|
|
369
|
+
bbcDate,
|
|
370
|
+
fileName: fileData[0].file.originalName,
|
|
371
|
+
sheetName: fileData[0].sheetName,
|
|
372
|
+
items: approved.items,
|
|
373
|
+
};
|
|
374
|
+
const uploadOption = {
|
|
375
|
+
fileName: fileData[0].file.originalName,
|
|
376
|
+
sheetName: fileData[0].sheetName,
|
|
377
|
+
effectiveDate: mapData.effectiveDate,
|
|
378
|
+
};
|
|
379
|
+
try {
|
|
380
|
+
let taskId;
|
|
381
|
+
switch (mapData.sheetType) {
|
|
382
|
+
case collaterals_enum_1.ECollaterals.LOAN_TRANSACTIONS: {
|
|
383
|
+
const loanTransactionsService = this.getLoanTransactionsService();
|
|
384
|
+
await loanTransactionsService.uploadLoanTransactions(newCollateralData.items, uploadOption, userId);
|
|
385
|
+
await this.userLogsService.createUserLog({
|
|
386
|
+
userId,
|
|
387
|
+
logType: UserLog_model_1.ELogType.TRANSACTIONS_UPLOAD,
|
|
388
|
+
action: UserLog_model_1.ELogActionType.UPLOAD,
|
|
389
|
+
details: { mapData, uploadOption },
|
|
390
|
+
});
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
case collaterals_enum_1.ECollaterals.QUICKBOOKS: {
|
|
394
|
+
const quickbooksService = this.getQuickbooksService();
|
|
395
|
+
await quickbooksService.uploadAccounts(newCollateralData.items, true);
|
|
396
|
+
break;
|
|
397
|
+
}
|
|
398
|
+
case collaterals_enum_1.ECollaterals.UPLOADED_BANK_TRANSACTIONS: {
|
|
399
|
+
taskId = await this.bankUploadedTransactionsService.uploadTransactions(newCollateralData.items);
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
default: {
|
|
403
|
+
const collateralsService = this.getCollateralsService();
|
|
404
|
+
const bbcDateId = await collateralsService.saveCollateralItems(newCollateralData, collaterals_enum_1.ECollaterals[mapData.sheetType]);
|
|
405
|
+
const user = await User_model_1.UserModel.findById(userId).lean();
|
|
406
|
+
if (user) {
|
|
407
|
+
const params = {
|
|
408
|
+
borrowerId: new mongoose_1.default.Types.ObjectId(borrowerId),
|
|
409
|
+
bbcDateId,
|
|
410
|
+
userId: new mongoose_1.default.Types.ObjectId(userId),
|
|
411
|
+
};
|
|
412
|
+
await (0, microservice_tasks_db_1.createMicroserviceTasks)(microservice_task_enum_1.EMicroserviceTask.POST_UPLOAD, params);
|
|
413
|
+
}
|
|
414
|
+
await this.userLogsService.createUserLog({
|
|
415
|
+
userId,
|
|
416
|
+
logType: UserLog_model_1.ELogType.COLLATERAL_UPLOAD,
|
|
417
|
+
action: UserLog_model_1.ELogActionType.UPLOAD,
|
|
418
|
+
details: { mapData, uploadOption, borrowerId, bbcDate },
|
|
419
|
+
});
|
|
420
|
+
break;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
await this.removeConvertedData(mapData.sheetId);
|
|
424
|
+
return { success: true, message: 'Successfully uploaded', data: { taskId } };
|
|
425
|
+
}
|
|
426
|
+
catch (e) {
|
|
427
|
+
console.error({ e });
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
async prepareData(mapData) {
|
|
431
|
+
const { startRow, endRow, bbcDate, sheetType, mappedColumns, sheetId } = mapData;
|
|
432
|
+
const excelData = await this.getUploadedData(sheetId);
|
|
433
|
+
const SLICED_DATA = excelData.items.slice(startRow - 1, endRow);
|
|
434
|
+
const MAPPED_DATA = (SLICED_DATA.reduce((acc, row) => {
|
|
435
|
+
const RES = Object.entries(mappedColumns).reduce((result, [key, value]) => {
|
|
436
|
+
if (value !== null) {
|
|
437
|
+
return { ...result, [key]: row[value] ?? null };
|
|
438
|
+
}
|
|
439
|
+
return result;
|
|
440
|
+
}, {});
|
|
441
|
+
return [...acc, RES];
|
|
442
|
+
}, []));
|
|
443
|
+
let skuDates = [];
|
|
444
|
+
if (mapData.sheetType === collaterals_enum_1.ECollaterals.INVENTORY) {
|
|
445
|
+
const uploadedSheet = await UploadedSheet_model_1.default.findById(mapData.sheetId).lean();
|
|
446
|
+
const uploadedFile = await UploadedFile_model_1.default.findById(uploadedSheet.fileId).lean();
|
|
447
|
+
skuDates = await (0, inventories_1.getAllTimeOldestSKUDateNew)(uploadedFile.borrowerId.toString(), mapData.bbcDate);
|
|
448
|
+
}
|
|
449
|
+
const approvedItems = [];
|
|
450
|
+
const removedItems = [];
|
|
451
|
+
try {
|
|
452
|
+
await Promise.all(MAPPED_DATA.map(async (row, index) => {
|
|
453
|
+
const extraErrors = [];
|
|
454
|
+
const mappedCollateralTypes = {
|
|
455
|
+
[collaterals_enum_1.ECollaterals.INVENTORY]: () => new inventory_item_1.InventoryItem(row, bbcDate, skuDates),
|
|
456
|
+
[collaterals_enum_1.ECollaterals.RECEIVABLE]: () => new receivable_item_1.ReceivableItem(row, bbcDate),
|
|
457
|
+
[collaterals_enum_1.ECollaterals.ACCOUNT_PAYABLE]: () => new payable_account_item_1.PayableAccountItem(row, bbcDate),
|
|
458
|
+
[collaterals_enum_1.ECollaterals.LOAN_TRANSACTIONS]: async () => {
|
|
459
|
+
const newItem = new bank_transaction_item_1.LoanTransactionItem(row, this.borrowerService);
|
|
460
|
+
const classErrors = await newItem.initialize();
|
|
461
|
+
if (classErrors.length) {
|
|
462
|
+
classErrors.forEach((error) => extraErrors.push(error));
|
|
463
|
+
}
|
|
464
|
+
const cleanItem = { ...newItem, transactionType: '' };
|
|
465
|
+
cleanItem.transactionType = newItem.isStatement ? 'STATEMENT' : newItem.transactionType;
|
|
466
|
+
delete cleanItem.isStatement;
|
|
467
|
+
return cleanItem;
|
|
468
|
+
},
|
|
469
|
+
[collaterals_enum_1.ECollaterals.UPLOADED_BANK_TRANSACTIONS]: async () => new bank_uploaded_transaction_1.BankUploadedTransactionItem({
|
|
470
|
+
...row,
|
|
471
|
+
order: index,
|
|
472
|
+
}, mapData.extraOptions),
|
|
473
|
+
[collaterals_enum_1.ECollaterals.QUICKBOOKS]: async () => {
|
|
474
|
+
const newItem = new quickbook_item_1.IQuickbooksUploadItem(row, mapData.extraOptions);
|
|
475
|
+
const classErrors = await newItem.initialize();
|
|
476
|
+
if (classErrors.length) {
|
|
477
|
+
classErrors.forEach((error) => extraErrors.push(error));
|
|
478
|
+
}
|
|
479
|
+
return newItem;
|
|
480
|
+
},
|
|
481
|
+
};
|
|
482
|
+
const item = await mappedCollateralTypes[collaterals_enum_1.ECollaterals[sheetType]]();
|
|
483
|
+
const mappedRow = this.transformNumberIntoDate(item, collaterals_enum_1.ECollaterals[sheetType]);
|
|
484
|
+
const validationErrors = this.validateRow(mappedRow, collaterals_enum_1.ECollaterals[sheetType]);
|
|
485
|
+
const allErrors = [...extraErrors, ...validationErrors];
|
|
486
|
+
if (allErrors.length) {
|
|
487
|
+
const errors = allErrors.map((errorValues) => {
|
|
488
|
+
return Object.values(errorValues).reduce((acc, obj) => {
|
|
489
|
+
const errorsV = obj.map((v) => v.error);
|
|
490
|
+
return [...acc, errorsV];
|
|
491
|
+
}, []);
|
|
492
|
+
});
|
|
493
|
+
removedItems[index] = {
|
|
494
|
+
...row,
|
|
495
|
+
checked: true,
|
|
496
|
+
validationErrors: errors.join(', '),
|
|
497
|
+
};
|
|
498
|
+
}
|
|
499
|
+
else {
|
|
500
|
+
approvedItems[index] = mappedRow;
|
|
501
|
+
}
|
|
502
|
+
}));
|
|
503
|
+
const approvedItemsOnly = approvedItems.filter(Boolean);
|
|
504
|
+
const removedItemsOnly = removedItems.filter(Boolean);
|
|
505
|
+
return {
|
|
506
|
+
approved: {
|
|
507
|
+
items: approvedItemsOnly,
|
|
508
|
+
totalItems: approvedItemsOnly.length,
|
|
509
|
+
},
|
|
510
|
+
removed: {
|
|
511
|
+
items: removedItemsOnly,
|
|
512
|
+
totalItems: removedItemsOnly.length,
|
|
513
|
+
},
|
|
514
|
+
};
|
|
515
|
+
}
|
|
516
|
+
catch (e) {
|
|
517
|
+
console.error(e);
|
|
518
|
+
throw new Error('error while loading');
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
async removeConvertedData(sheetId) {
|
|
522
|
+
try {
|
|
523
|
+
const uploadedFile = await UploadedSheet_model_1.default.findById(sheetId);
|
|
524
|
+
const fileId = uploadedFile.fileId;
|
|
525
|
+
await UploadedSheet_model_1.default.deleteOne({ _id: sheetId });
|
|
526
|
+
await UploadedData_model_1.default.deleteMany({ sheetId: sheetId });
|
|
527
|
+
const siblingsSheets = await UploadedSheet_model_1.default.find({ fileId });
|
|
528
|
+
if (!siblingsSheets.length) {
|
|
529
|
+
await UploadedFile_model_1.default.deleteOne({ _id: fileId });
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
catch (e) {
|
|
533
|
+
console.error({ e });
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
async removeEntriesWithoutFiles() {
|
|
537
|
+
try {
|
|
538
|
+
const uploadedFiles = await UploadedFile_model_1.default.find({});
|
|
539
|
+
await Promise.all(uploadedFiles.map(async (file) => {
|
|
540
|
+
const sheets = await UploadedSheet_model_1.default.find({ fileId: file._id });
|
|
541
|
+
if (!sheets.length) {
|
|
542
|
+
await UploadedFile_model_1.default.findByIdAndDelete(file._id);
|
|
543
|
+
}
|
|
544
|
+
}));
|
|
545
|
+
}
|
|
546
|
+
catch (e) {
|
|
547
|
+
console.error({ e });
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
async cleanUploads() {
|
|
551
|
+
try {
|
|
552
|
+
fs_1.default.readdir(path_1.default.join(this.rootDir, 'uploads'), async (err, files) => {
|
|
553
|
+
await Promise.all(files.map((file) => {
|
|
554
|
+
fs_1.default.unlink(path_1.default.join(this.rootDir, 'uploads', file), (err) => {
|
|
555
|
+
if (err) {
|
|
556
|
+
console.error({ err });
|
|
557
|
+
}
|
|
558
|
+
});
|
|
559
|
+
}));
|
|
560
|
+
});
|
|
561
|
+
await UploadedFile_model_1.default.deleteMany();
|
|
562
|
+
await UploadedSheet_model_1.default.deleteMany();
|
|
563
|
+
await UploadedData_model_1.default.deleteMany();
|
|
564
|
+
}
|
|
565
|
+
catch (e) {
|
|
566
|
+
console.error({ e });
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
async removeEmptyBBC(remove = false) {
|
|
570
|
+
const bbcDates = await BBCDate_model_1.BBCDateModel.find().lean();
|
|
571
|
+
for (const bbcDate of bbcDates) {
|
|
572
|
+
const sheets = await BBCSheet_model_1.BBCSheetModel.find({ bbcDateId: bbcDate._id });
|
|
573
|
+
if (sheets.length === 0) {
|
|
574
|
+
console.log(bbcDate._id.toString(), 'can be deleted');
|
|
575
|
+
if (remove) {
|
|
576
|
+
await BBCDate_model_1.BBCDateModel.findByIdAndDelete(bbcDate._id);
|
|
577
|
+
await AvailabilitySigns_model_1.AvailabilitySignsModel.deleteMany({ bbcDateId: bbcDate._id });
|
|
578
|
+
await Equipment_model_1.default.deleteMany({ bbcDateId: bbcDate._id });
|
|
579
|
+
await InventoryManualEntry_model_1.InventoryManualEntryModel.deleteMany({ bbcDateId: bbcDate._id });
|
|
580
|
+
await ReceivableAvailability_model_1.ReceivableAvailabilityModel.deleteMany({ bbcDateId: bbcDate._id });
|
|
581
|
+
await Reserve_model_1.default.deleteMany({ bbcDateId: bbcDate._id });
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
exports.UploadsService = UploadsService;
|