From 1ed7cfaf7430d28e41104e7e34bf54bade71f9fe Mon Sep 17 00:00:00 2001 From: Rodrigo Rodriguez Date: Mon, 16 Aug 2021 17:38:05 -0300 Subject: [PATCH] fix(basic.gblib): NOW keyword is now formatting values with two zeros. --- package-lock.json | 7 +- package.json | 1 + .../basic.gblib/services/DialogKeywords.ts | 34 ++++-- packages/basic.gblib/services/GBVMService.ts | 12 +- .../basic.gblib/services/SystemKeywords.ts | 103 +++++++++++------- 5 files changed, 106 insertions(+), 51 deletions(-) diff --git a/package-lock.json b/package-lock.json index b4ccc64a..1d7f0cf0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "botserver", - "version": "2.0.129", + "version": "2.0.135", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -12883,6 +12883,11 @@ "moment": ">= 2.9.0" } }, + "momentjs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/momentjs/-/momentjs-2.0.0.tgz", + "integrity": "sha1-c9+QS0+kGPbjxgXoMc727VUY69Q=" + }, "months": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/months/-/months-1.2.0.tgz", diff --git a/package.json b/package.json index 7eb2e3a8..a00f148d 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "ibm-watson": "6.1.1", "js-beautify": "1.13.13", "marked": "2.0.7", + "momentjs": "^2.0.0", "ms-rest-azure": "3.0.0", "nexmo": "2.9.1", "node-cron": "3.0.0", diff --git a/packages/basic.gblib/services/DialogKeywords.ts b/packages/basic.gblib/services/DialogKeywords.ts index a330fcdc..5354e8db 100644 --- a/packages/basic.gblib/services/DialogKeywords.ts +++ b/packages/basic.gblib/services/DialogKeywords.ts @@ -143,9 +143,6 @@ export class DialogKeywords { * */ public getWeekFromDate(date) { - if (!(date instanceof Date)) { - date = new Date(date); - } const contentLocale = this.min.core.getParam( this.min.instance, @@ -153,7 +150,16 @@ export class DialogKeywords { GBConfigService.get('DEFAULT_CONTENT_LANGUAGE') ); - return date.toLocaleString(this.getContentLocaleWithCulture(contentLocale), { weekday: 'short' }); + let dt = SystemKeywords.getDateFromLocaleString(date, contentLocale); + + if (dt) { + if (!(dt instanceof Date)) { + dt = new Date(dt); + } + let week = dt.toLocaleString(this.getContentLocaleWithCulture(contentLocale), { weekday: 'short' }); + return week.substr(0,3); + } + return 'NULL'; } /** @@ -241,16 +247,28 @@ export class DialogKeywords { * */ public getHourFromDate(date) { - if (!(date instanceof Date)) { - date = new Date(date); - } function addZero(i) { if (i < 10) { i = "0" + i; } return i; } - return addZero(date.getHours()) + ':' + addZero(date.getMinutes()); + + const contentLocale = this.min.core.getParam( + this.min.instance, + 'Default Content Language', + GBConfigService.get('DEFAULT_CONTENT_LANGUAGE') + ); + + let dt = SystemKeywords.getDateFromLocaleString(date, contentLocale); + + if (dt) { + if (!(dt instanceof Date)) { + dt = new Date(dt); + } + return addZero(dt.getHours()) + ':' + addZero(dt.getMinutes()); + } + return 'NULL'; } /** diff --git a/packages/basic.gblib/services/GBVMService.ts b/packages/basic.gblib/services/GBVMService.ts index 2f2ea643..36c64523 100644 --- a/packages/basic.gblib/services/GBVMService.ts +++ b/packages/basic.gblib/services/GBVMService.ts @@ -103,7 +103,7 @@ export class GBVMService extends GBService { } else { await s.deleteScheduleIfAny(min, mainName); - } + } text = text.replace(/SET SCHEDULE (.*)/gi, ''); fs.writeFileSync(urlJoin(folder, vbsFile), text); } @@ -246,12 +246,12 @@ export class GBVMService extends GBService { code = code.replace(/(\w+)\s*=\s*find\s*(.*)\s*or talk\s*(.*)/gi, ($0, $1, $2, $3) => { return `${$1} = sys().find(${$2})\n - if (!${$1}) {= + if (!${$1}) { if (resolve){ resolve(); } talk (${$3})\n; - return; + return -1; } `; }); @@ -792,7 +792,7 @@ export class GBVMService extends GBService { // Creates a class DialogKeywords which is the *this* pointer // in BASIC. - const user =step? await min.userProfile.get(step.context, {}): null; + const user = step ? await min.userProfile.get(step.context, {}) : null; const sandbox: DialogKeywords = new DialogKeywords(min, deployer, step, user); // Injects the .gbdialog generated code into the VM. @@ -821,7 +821,9 @@ export class GBVMService extends GBService { let ret = null; try { ret = await sandbox[mainMethod](step); - + if (ret == -1) { + await step.endDialog(); + } } catch (error) { throw new Error(`BASIC ERROR: ${error.message ? error.message : error}\n Stack:${error.stack}`); } diff --git a/packages/basic.gblib/services/SystemKeywords.ts b/packages/basic.gblib/services/SystemKeywords.ts index 4317e1f6..e11074ba 100644 --- a/packages/basic.gblib/services/SystemKeywords.ts +++ b/packages/basic.gblib/services/SystemKeywords.ts @@ -81,8 +81,18 @@ export class SystemKeywords { } public async sortBy(array, memberName) { - return array ? array.sort(p => { if (p) { return p[memberName]; } }) : - null; + return array; + // return array ? array.sort(p => { + + // var c = new Date(a.date); + // var d = new Date(b.date); + // return c - d; + // }); + + // if (p) { + // return ; + // } + // }): null; } /** @@ -276,6 +286,35 @@ export class SystemKeywords { return val; } + public isValidDate(dt) { + const contentLocale = this.min.core.getParam( + this.min.instance, + 'Default Content Language', + GBConfigService.get('DEFAULT_CONTENT_LANGUAGE') + ); + + let date = SystemKeywords.getDateFromLocaleString(dt, contentLocale); + if (!date) { + return false; + } + + if (!(date instanceof Date)) { + date = new Date(date); + } + + return !isNaN(date.valueOf()); + } + + public isValidNumber(number) { + if (number === '') { return false } + return !isNaN(number); + } + + public isValidHour(value) { + return /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/.test(value); + } + + /** * Finds a value or multi-value results in a tabular file. * @@ -349,28 +388,6 @@ export class SystemKeywords { GBConfigService.get('DEFAULT_CONTENT_LANGUAGE') ); - function isValidDate(dt) { - let date = SystemKeywords.getDateFromLocaleString(dt, contentLocale); - if (!date) { - - return false; - } - - if (!(date instanceof Date)) { - date = new Date(date); - } - - return !isNaN(date.valueOf()); - } - - function isValidNumber(number) { - if (number === '') { return false } - return !isNaN(number); - } - - function isValidHour(value) { - return /^([01]?[0-9]|2[0-3]):[0-5][0-9]$/.test(value); - } // Increments columnIndex by looping until find a column match. const filters = []; @@ -389,12 +406,12 @@ export class SystemKeywords { } filter.columnIndex = columnIndex; - if (isValidHour(filter.value)) { + if (this.isValidHour(filter.value)) { filter.dataType = 'hourInterval'; - } else if (isValidDate(filter.value)) { + } else if (this.isValidDate(filter.value)) { filter.value = SystemKeywords.getDateFromLocaleString(filter.value, contentLocale); filter.dataType = 'date'; - } else if (isValidNumber(filter.value)) { + } else if (this.isValidNumber(filter.value)) { filter.value = Number.parseInt(filter.value); filter.dataType = 'number'; } else { @@ -451,6 +468,11 @@ export class SystemKeywords { case 'hourInterval': switch (filter.operator) { + case '=': + if (result && result.toLowerCase().trim() === filter.value.toLowerCase().trim()) { + filterAcceptCount++; + } + break; case 'in': const e = result.split(';'); const hr = Number.parseInt(filter.value.split(':')[0]); @@ -522,22 +544,29 @@ export class SystemKeywords { } } - private static getDateFromLocaleString(date: any, contentLocale: any) { - const parts = /^([0-3]?[0-9]).([0-3]?[0-9]).((?:[0-9]{2})?[0-9]{2})$/gi.exec(date); + public static getDateFromLocaleString(date: any, contentLocale: any) { + let parts = /^([0-3]?[0-9]).([0-3]?[0-9]).((?:[0-9]{2})?[0-9]{2})\s*(10|11|12|[1-9]):([0-5][0-9])/gi.exec(date); + if (parts && parts[5]) { + switch (contentLocale) { + case 'pt': + return new Date(Number.parseInt(parts[3]), Number.parseInt(parts[2]) - 1, Number.parseInt(parts[1]), + Number.parseInt(parts[4]), Number.parseInt(parts[5]), 0, 0); + case 'en': + return new Date(Number.parseInt(parts[3]), Number.parseInt(parts[1]) - 1, Number.parseInt(parts[2]), + Number.parseInt(parts[4]), Number.parseInt(parts[5]), 0, 0); + } + } + + parts = /^([0-3]?[0-9]).([0-3]?[0-9]).((?:[0-9]{2})?[0-9]{2})$/gi.exec(date); if (parts && parts[3]) { switch (contentLocale) { case 'pt': - date = new Date(Number.parseInt(parts[2]), Number.parseInt(parts[1]), Number.parseInt(parts[3]), 0, 0, 0, 0); - break; + return new Date(Number.parseInt(parts[2]), Number.parseInt(parts[1]) - 1, Number.parseInt(parts[3]), 0, 0, 0, 0); case 'en': - date = new Date(Number.parseInt(parts[1]), Number.parseInt(parts[2]), Number.parseInt(parts[3]), 0, 0, 0, 0); - break; + return new Date(Number.parseInt(parts[1]), Number.parseInt(parts[2]) - 1, Number.parseInt(parts[3]), 0, 0, 0, 0); } - return date; - } - else { - return null; } + return null; } /**