Hello,
I am wondering if anyone could help me solve this issue:
I am trying to have a calculation on the client side figure out how much time is between now (current time) and a due date set on the page.
1: I am grabbing the date from the dueDate field on the page and setting it to a variable
2: Getting the current date and time and setting that to a variable
3 & 4: Initializing int (Number) variables via meta programming standards (not critical step)
5: set a while loop, checking if boolean/checkbox is checked off.
6: Subtracting values to find the difference with Math.abs();
7: defining the variable even further with Math.ceil();
8: Setting the value to a field on the page, with "this.set"
This was working before I added the while() condition, am I going wrong somewhere?
I have already been trying to figure this out for 3 hours so hopefully someone can see my mistake and teach me something new, haha.
Thanks, Community!
Like
I would do something like this
define("ActivityPageV2", [], function() {
return {
entitySchemaName: "Activity",
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
methods: {
onDueDateChanged: function() {
var now = new Date();
var dueDate = this.get("DueDate");
var diffHrs = this.getDateDiff(now, dueDate, "hours");
this.set("KwlString1", diffHrs.toString());
},
getDateDiff: function(firstDate, secondDate, identifier) {
var diffMs = (secondDate - firstDate); // milliseconds between firstDate & secondDate
var diffDays = Math.floor(diffMs / 1000 / 60 / 60 / 24);
var diffHrs = Math.floor(diffMs / 1000 / 60 / 60);
var diffMins = Math.floor(diffMs / 1000 / 60);
switch (identifier) {
case "milliseconds":
return diffMs;
case "minutes":
return diffMins;
case "hours":
return diffHrs;
case "days":
return diffDays;
default:
return diffMs;
}
}
},
attributes: {
"OnDueDateChangeAttribute": {
dependencies: [
{
columns: ["DueDate"],
methodName: "onDueDateChanged"
}
]
}
},
rules: {},
businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
diff: /**SCHEMA_DIFF*/[
{
"operation": "insert",
"name": "STRING8bd032e4-6e0f-4e1c-afdb-2ecf1041382b",
"values": {
"layout": {
"colSpan": 12,
"rowSpan": 1,
"column": 0,
"row": 9,
"layoutName": "Header"
},
"bindTo": "KwlString1",
"enabled": true
},
"parentName": "Header",
"propertyName": "items",
"index": 17
}
]/**SCHEMA_DIFF*/
};
});
Eugene Podkovka,
Thank you for your quick response. It works well, but I was wondering how you would modify the method to:
- Only set the "diffHours" once the page is initialized.
- Go into a while loop checking "while a checkbox is unchecked - run loop" that would set the hours/minutes/seconds remaining every second (or n time to create a "live" feel to the process).
- Once checkbox is checked, stop entire process and save current time.
I added the a while loop to check if the boolean/checkbox is false (0) and it seems to be working.
As for getting this while loop to run after initialization, this is where I am having troubles, and after going through bpm'online's and the Mozilla Foundation's Documentation I turn to you, Eugene.
methods: {
onDueDateChanged: function() {
var now = new Date();
var completeTask = this.get("UsrCompleteTask");
var dueDate = this.get("DueDate");
var diffHrs = this.getDateDiff(now, dueDate, "minutes");
while(completeTask == 0) {
this.set("UsrSTRING1", diffHrs.toString());
}
},
getDateDiff: function(firstDate, secondDate, identifier) {
var diffMs = (secondDate - firstDate); // milliseconds between firstDate & secondDate
var diffDays = Math.floor(diffMs / 1000 / 60 / 60 / 24);
var diffHrs = Math.floor(diffMs / 1000 / 60 / 60);
var diffMins = Math.floor(diffMs / 1000 / 60);
switch (identifier) {
case "milliseconds":
return diffMs;
case "minutes":
return diffMins;
case "hours":
return diffHrs;
case "days":
return diffDays;
default:
return diffMs;
}
}
},Any knowledge on how to create this would be greatly appreciated, and thanks again on your previous response!
- Only set the "diffHours" once the page is initialized.
Please override the "onEntityInitialized" method and set the "diffHours" there.
2. Go into a while loop checking "while a checkbox is unchecked - run loop" that would set the hours/minutes/seconds remaining every second (or n time to create a "live" feel to the process).
3. Once checkbox is checked, stop entire process and save current time.
If you need to track when people physically work on an activity then It's a very bad idea. Just let people manage how much time they spend on a task by themselves.
Anyway, technically it would be more correct to save a current date time value when the checkbox is checked and then save it when the checkbox is unchecked. Then calculate the difference.