@provis/provis-common-be-module 1.4.25 → 1.4.27
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/helpers/amountDescription.d.ts +1 -0
- package/dist/helpers/amountDescription.js +44 -0
- package/dist/helpers/excelDateToJsDate.d.ts +4 -0
- package/dist/helpers/excelDateToJsDate.js +30 -0
- package/dist/helpers/index.d.ts +2 -1
- package/dist/helpers/index.js +3 -1
- package/dist/helpers/readExcel.d.ts +4 -0
- package/dist/helpers/readExcel.js +105 -0
- package/dist/interface/read.excel.interface.d.ts +12 -0
- package/dist/interface/read.excel.interface.js +2 -0
- package/package.json +7 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function terbilang(value: number): string;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
function terbilang(value) {
|
|
4
|
+
const satuan = ['', 'satu', 'dua', 'tiga', 'empat', 'lima', 'enam', 'tujuh', 'delapan', 'sembilan'];
|
|
5
|
+
const belasan = ['sepuluh', 'sebelas', 'dua belas', 'tiga belas', 'empat belas', 'lima belas', 'enam belas', 'tujuh belas', 'delapan belas', 'sembilan belas'];
|
|
6
|
+
const puluhan = ['', '', 'dua puluh', 'tiga puluh', 'empat puluh', 'lima puluh', 'enam puluh', 'tujuh puluh', 'delapan puluh', 'sembilan puluh'];
|
|
7
|
+
let result = '';
|
|
8
|
+
if (value < 10) {
|
|
9
|
+
result = satuan[value];
|
|
10
|
+
}
|
|
11
|
+
else if (value < 20) {
|
|
12
|
+
result = belasan[value - 10];
|
|
13
|
+
}
|
|
14
|
+
else if (value < 100) {
|
|
15
|
+
result = puluhan[Math.floor(value / 10)] + ' ' + satuan[value % 10];
|
|
16
|
+
}
|
|
17
|
+
else if (value < 200) {
|
|
18
|
+
result = 'seratus ' + terbilang(value - 100);
|
|
19
|
+
}
|
|
20
|
+
else if (value < 1000) {
|
|
21
|
+
result = satuan[Math.floor(value / 100)] + ' ratus ' + terbilang(value % 100);
|
|
22
|
+
}
|
|
23
|
+
else if (value < 2000) {
|
|
24
|
+
result = 'seribu ' + terbilang(value - 1000);
|
|
25
|
+
}
|
|
26
|
+
else if (value < 1000000) {
|
|
27
|
+
result = terbilang(Math.floor(value / 1000)) + ' ribu ' + terbilang(value % 1000);
|
|
28
|
+
}
|
|
29
|
+
else if (value < 1000000000) {
|
|
30
|
+
result = terbilang(Math.floor(value / 1000000)) + ' juta ' + terbilang(value % 1000000);
|
|
31
|
+
}
|
|
32
|
+
else if (value < 1000000000000) {
|
|
33
|
+
result = terbilang(Math.floor(value / 1000000000)) + ' milyar ' + terbilang(value % 1000000000);
|
|
34
|
+
}
|
|
35
|
+
else if (value < 1000000000000000) {
|
|
36
|
+
result = terbilang(Math.floor(value / 1000000000000)) + ' triliun ' + terbilang(value % 1000000000000);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
result = 'Angka terlalu besar';
|
|
40
|
+
}
|
|
41
|
+
// Menghilangkan spasi yang double
|
|
42
|
+
return result.replace(/\s+/g, ' ').trim();
|
|
43
|
+
}
|
|
44
|
+
exports.default = terbilang;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = ({ initialValue, }) => {
|
|
4
|
+
try {
|
|
5
|
+
if (!initialValue) {
|
|
6
|
+
throw new Error('initial value is not found');
|
|
7
|
+
}
|
|
8
|
+
const datePattern = /^\d{2}-\d{2}-\d{4}$/;
|
|
9
|
+
if (datePattern.test(String(initialValue))) {
|
|
10
|
+
const parts = String(initialValue).split('-');
|
|
11
|
+
const day = parseInt(parts[0]);
|
|
12
|
+
const month = parseInt(parts[1]);
|
|
13
|
+
const year = parseInt(parts[2]);
|
|
14
|
+
return `${year}-${month}-${day}`;
|
|
15
|
+
}
|
|
16
|
+
const utc_days = Math.floor(initialValue - 25569);
|
|
17
|
+
const utc_value = utc_days * 86400;
|
|
18
|
+
const date_info = new Date(utc_value * 1000);
|
|
19
|
+
const fractional_day = initialValue - Math.floor(initialValue) + 0.0000001;
|
|
20
|
+
let total_seconds = Math.floor(86400 * fractional_day);
|
|
21
|
+
const seconds = total_seconds % 60;
|
|
22
|
+
total_seconds -= seconds;
|
|
23
|
+
const hours = Math.floor(total_seconds / (60 * 60));
|
|
24
|
+
const minutes = Math.floor(total_seconds / 60) % 60;
|
|
25
|
+
return new Date(date_info.getFullYear(), date_info.getMonth(), date_info.getDate(), hours, minutes, seconds);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
throw new Error(`error convert ${err.message}`);
|
|
29
|
+
}
|
|
30
|
+
};
|
package/dist/helpers/index.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import addDateTime from "./addDateTime";
|
|
2
|
+
import amountDescription from './amountDescription';
|
|
2
3
|
import axiosGet from "./axiosGet";
|
|
3
4
|
import axiosPost from "./axiosPost";
|
|
4
5
|
import axiosPut from "./axiosPut";
|
|
@@ -15,4 +16,4 @@ import getObjByKeys from "./getObjByKeys";
|
|
|
15
16
|
import loop from "./loop";
|
|
16
17
|
import loopBackward from "./loopBackward";
|
|
17
18
|
import searchValue from "./searchValue";
|
|
18
|
-
export { addDateTime, axiosGet, axiosPost, axiosPut, compareDiffObj, convertCurrencySymbol, convertDateTimeFormat, convertObjToNumber, convertToCurrency, filterObj, generateRelationId, getCurrentDate, getDiffValue, getObjByKeys, loop, loopBackward, searchValue, };
|
|
19
|
+
export { addDateTime, amountDescription, axiosGet, axiosPost, axiosPut, compareDiffObj, convertCurrencySymbol, convertDateTimeFormat, convertObjToNumber, convertToCurrency, filterObj, generateRelationId, getCurrentDate, getDiffValue, getObjByKeys, loop, loopBackward, searchValue, };
|
package/dist/helpers/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.searchValue = exports.loopBackward = exports.loop = exports.getObjByKeys = exports.getDiffValue = exports.getCurrentDate = exports.generateRelationId = exports.filterObj = exports.convertToCurrency = exports.convertObjToNumber = exports.convertDateTimeFormat = exports.convertCurrencySymbol = exports.compareDiffObj = exports.axiosPut = exports.axiosPost = exports.axiosGet = exports.addDateTime = void 0;
|
|
3
|
+
exports.searchValue = exports.loopBackward = exports.loop = exports.getObjByKeys = exports.getDiffValue = exports.getCurrentDate = exports.generateRelationId = exports.filterObj = exports.convertToCurrency = exports.convertObjToNumber = exports.convertDateTimeFormat = exports.convertCurrencySymbol = exports.compareDiffObj = exports.axiosPut = exports.axiosPost = exports.axiosGet = exports.amountDescription = exports.addDateTime = void 0;
|
|
4
4
|
const addDateTime_1 = require("./addDateTime");
|
|
5
5
|
exports.addDateTime = addDateTime_1.default;
|
|
6
|
+
const amountDescription_1 = require("./amountDescription");
|
|
7
|
+
exports.amountDescription = amountDescription_1.default;
|
|
6
8
|
const axiosGet_1 = require("./axiosGet");
|
|
7
9
|
exports.axiosGet = axiosGet_1.default;
|
|
8
10
|
const axiosPost_1 = require("./axiosPost");
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
const helpers_1 = require("../helpers");
|
|
13
|
+
const XLSX = require("xlsx");
|
|
14
|
+
const excelDateToJsDate_1 = require("./excelDateToJsDate");
|
|
15
|
+
const constants_1 = require("../constants");
|
|
16
|
+
function readExcel(file, data) {
|
|
17
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
const dataPost = [];
|
|
19
|
+
let validationPassed = true;
|
|
20
|
+
let errorMessage = '';
|
|
21
|
+
try {
|
|
22
|
+
const { listKey, headerExcel, startRow, startColumn } = data;
|
|
23
|
+
const workbook = XLSX.read(file, { type: 'buffer' });
|
|
24
|
+
const sheet = workbook.Sheets[workbook.SheetNames[0]];
|
|
25
|
+
const merges = sheet['!merges'] || [];
|
|
26
|
+
const endRange = XLSX.utils.decode_range(sheet['!ref']);
|
|
27
|
+
const endRow = endRange.e.r;
|
|
28
|
+
const endColumn = endRange.e.c;
|
|
29
|
+
let tempData = {};
|
|
30
|
+
const rows = XLSX.utils.sheet_to_json(sheet, {
|
|
31
|
+
range: {
|
|
32
|
+
s: { c: startColumn || 0, r: startRow || 0 },
|
|
33
|
+
e: { c: endColumn, r: endRow },
|
|
34
|
+
},
|
|
35
|
+
});
|
|
36
|
+
for (let i = 0; i < rows.length; i++) {
|
|
37
|
+
const rowData = rows[i];
|
|
38
|
+
const obj = {};
|
|
39
|
+
let isReset = false;
|
|
40
|
+
for (let j = 0; j < listKey.length; j++) {
|
|
41
|
+
const { name: key, isMandatory, type } = listKey[j];
|
|
42
|
+
const header = headerExcel[j];
|
|
43
|
+
obj[key] = rowData[header];
|
|
44
|
+
if (obj[key] != undefined) {
|
|
45
|
+
tempData[key] = obj[key];
|
|
46
|
+
}
|
|
47
|
+
for (const merge of merges) {
|
|
48
|
+
if (i >= merge.s.r &&
|
|
49
|
+
i <= merge.e.r &&
|
|
50
|
+
j >= merge.s.c &&
|
|
51
|
+
j <= merge.e.c) {
|
|
52
|
+
console.log(`Merged Cell => ${key} | ${header}`, rowData[header]);
|
|
53
|
+
obj[key] = tempData[key];
|
|
54
|
+
const nextRow = rows[i + 1];
|
|
55
|
+
if (nextRow) {
|
|
56
|
+
if (nextRow[header] != undefined &&
|
|
57
|
+
nextRow[header] != obj[key]) {
|
|
58
|
+
isReset = true;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (isMandatory && obj[key] == undefined) {
|
|
64
|
+
validationPassed = false;
|
|
65
|
+
errorMessage += `Error in column: ${headerExcel[j]} at row ${i + 1}\n`;
|
|
66
|
+
}
|
|
67
|
+
obj[key] = convertValue(type, obj[key]);
|
|
68
|
+
}
|
|
69
|
+
if (isReset) {
|
|
70
|
+
tempData = {};
|
|
71
|
+
}
|
|
72
|
+
dataPost.push(obj);
|
|
73
|
+
}
|
|
74
|
+
if (!validationPassed) {
|
|
75
|
+
throw new Error(errorMessage);
|
|
76
|
+
}
|
|
77
|
+
return dataPost;
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
console.error(`[error][${(0, helpers_1.getCurrentDate)()}] ${err.message}`);
|
|
81
|
+
throw err;
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function convertValue(type, value) {
|
|
86
|
+
try {
|
|
87
|
+
if (value == undefined)
|
|
88
|
+
return undefined;
|
|
89
|
+
switch (type) {
|
|
90
|
+
case 'date':
|
|
91
|
+
return (0, helpers_1.convertDateTimeFormat)({
|
|
92
|
+
initialValue: (0, excelDateToJsDate_1.default)({ initialValue: value }).toString(),
|
|
93
|
+
dateTimeFormatFrom: constants_1.config.date_format_timestamp,
|
|
94
|
+
dateTimeFormatTo: constants_1.config.date_simple_format,
|
|
95
|
+
}).toString();
|
|
96
|
+
default:
|
|
97
|
+
return value;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
console.error(`[error][provis-read-excel] Failed to convert type: ${type}, value: ${value}, error: ${error.message}`);
|
|
102
|
+
return undefined;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.default = readExcel;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@provis/provis-common-be-module",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.27",
|
|
4
4
|
"description": "This common module for Provis internal backend use lib",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
"license": "ISC",
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"axios": "^0.21.1",
|
|
15
|
-
"uniqid": "^5.3.0"
|
|
15
|
+
"uniqid": "^5.3.0",
|
|
16
|
+
"xlsx": "^0.16.8"
|
|
16
17
|
},
|
|
17
|
-
"devDependencies": {
|
|
18
|
-
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@types/node": "^20.12.12"
|
|
20
|
+
}
|
|
21
|
+
}
|