flaglib
Version:
Ignition event 15 added.
525 lines (429 loc) • 13.1 kB
JavaScript
var util = require('util');
var ActiveGroupUser = require('./groupuser.js');
var Util = require('./util.js');
var LatLon = require('./LatLon.js');
var usercommands = require('./usercommands.js');
var SMS = require('./sms.js');
module.exports = ActiveSessions;
var PID = "0";
var PST = "1";
var PET = "2";
var DID = "3";
var DST = "4";
var DET = "5";
var O_PID = "6";
var O_PST = "7";
var O_PET = "8";
var O_PDAY = "9";
var O_DID = "10";
var O_DST = "11";
var O_DET = "12";
var O_DDAY = "13"
var AD = "14"; //active days
var utility = new Util();
/*
* This class is Active session holder for both pickup and srop sessions.
* psid - pickup session id
* psst - pickup session start time
* psed - pickup session end time
* dsid - drop session id
* dsst - drop session start time
* dset - drop session end time
* o_ - overide of pickup or drop time.
* _p(d)day - overide day (only 1 day can be overridden).
*/
function ActiveSessions(psid, psst, psed, dsid, dsst, dset,o_psid, o_psst, o_psed,o_pday, o_dsid, o_dsst, o_dset,o_dday, ad) {
this.o_psid = o_psid;
this.o_psst = o_psst;
this.o_psed = o_psed;
this.o_pday = o_pday;
this.psid = psid;
this.psst = psst;
this.psed = psed;
this.o_dsid = o_dsid;
this.o_dsst = o_dsst;
this.o_dset = o_dset;
this.dsid = dsid;
this.dsst = dsst;
this.dset = dset;
this.o_dday = o_dday;
this.activedays = ad;
}
ActiveSessions.prototype.isInValid = function(){
return this.invalid;
}
/*
* This function takes the device current time and check if it is in between either pickup session boundary
* or drop session boundary.
* if out of both sessions,return -1, otherwise return the sesison id.
*/
// ActiveSessions.prototype.isActive = function(pdate){
// var id = -1;
// var date = new Date(pdate);
// var minutes = date.getHours()*60+date.getMinutes();
// if ( (minutes>=this.psst) && (minutes <=this.psed) ){
// //no nearby alert check if it falls out of session boundaries.
// id = this.psid;
// }else if( (minutes>=this.dsst) && (minutes <=this.dset) ){
// id = this.dsid;
// }
// return id;
// }
/*
* If it is pickup = returns "P", if it is drop, returns "D".
* If inactive return -1.
*/
ActiveSessions.prototype.isActive = function(time){
var id = -1;
/* check if today is saturday or sunday
* saturday = 6, sunday =0;
*/
var day = new Date().getDay();
//If only 5 days working and today is saturday or sunday
if ( (this.activedays == 5) && ((day == 6)|| (day == 0))){
return -1;
}
//If only 6 days working and today is sunday
if ( (this.activedays == 6) && (day == 0)){
return -1;
}
minutes = convertTimeToNumber(time);
var _psid = null;
var _psst = 0;
var _psed = 0;
var _dsid = null;
var _dsst = 0;
var _dset = 0;
var day = new Date().getDay();
if (day == this.o_pday){
_psid = this.o_psid;
_psst = this.o_psst;
_psed = this.o_psed;
}else{
_psid = this.psid;
_psst = this.psst;
_psed = this.psed;
}
if (day == this.o_dday){
_dsid = this.o_dsid;
_dsst = this.o_dsst;
_dset = this.o_dset;
}else{
_dsid = this.dsid;
_dsst = this.dsst;
_dset = this.dset;
}
console.log("************"+"minutes:"+minutes+" _psst:"+_psst+" _psed:"+_psed);
console.log("************"+"minutes:"+minutes+" _psst:"+_dsst+" _psed:"+_dset);
//if ( (minutes>=_psst) && (minutes <=_psed) ){
//+30 minutes end time for buffer
if ( (_psid != null) && (minutes>=_psst) && (minutes <=(_psed+(30*60))) ){
//no nearby alert check if it falls out of session boundaries.
id = "P";//this.psid;
//}else if( (minutes>=_dsst) && (minutes <=_dset) ){
// -30 minutes start time of drop time
}else if( (_dsid != null) && (minutes>=(_dsst-(30*60))) && (minutes <=_dset) ){
id = "D";//this.dsid;
}
return id;
}
ActiveSessions.prototype.getTimeAfterTripStart = function(date){
var diff = 0;
//convert time to "HH:MM:SS" format
var str = ""+date.slice(6, 8)+":"+ date.slice(8, 10)+":"+ date.slice(10, 12);
console.log("getTimeAfterTripStart: "+str);
diff = this.getTimeDiff(str,0);
return diff;
}
ActiveSessions.prototype.getTimeBeforeTripEnd = function(date){
var diff = 0;
//convert time to "HH:MM:SS" format
var str = ""+date.slice(6, 8)+":"+ date.slice(8, 10)+":"+ date.slice(10, 12);
console.log("getTimeBeforeTripEnd: "+str);
diff = this.getTimeDiff(str,1);
return diff;
}
/*
* if where = 0 , gets time diff from begin
* if where = 1, gets time diff fro end
*/
ActiveSessions.prototype.getTimeDiff = function(time,where){
var id = -1;
/* check if today is saturday or sunday
* saturday = 6, sunday =0;
*/
minutes = convertTimeToNumber(time);
var _psid = null;
var _psst = 0;
var _psed = 0;
var _dsid = null;
var _dsst = 0;
var _dset = 0;
var day = new Date().getDay();
if (day == this.o_pday){
_psid = this.o_psid;
_psst = this.o_psst;
_psed = this.o_psed;
}else{
_psid = this.psid;
_psst = this.psst;
_psed = this.psed;
}
if (day == this.o_dday){
_dsid = this.o_dsid;
_dsst = this.o_dsst;
_dset = this.o_dset;
}else{
_dsid = this.dsid;
_dsst = this.dsst;
_dset = this.dset;
}
var diff = -1;
if (where == 0){
diff = 0;
}else{
diff = 9999999999;
}
if ( (minutes>=_psst) && (minutes <=(_psed+(30*60))) ){
//no nearby alert check if it falls out of session boundaries.
id = "P";//this.psid;
//}else if( (minutes>=_dsst) && (minutes <=_dset) ){
// -30 minutes start time of drop time
}else if( (minutes>=(_dsst-(30*60))) && (minutes <=_dset) ){
id = "D";//this.dsid;
}
if (id == "P"){
if(where == 1){
diff = _psed - minutes;
}else{
diff = minutes - _psst;
}
}else if(id == "D"){
return _dset - minutes;
if(where == 1){
diff = _dset - minutes;
}else{
diff = minutes - _dsst;
}
}
console.log("ActiveSessions.prototype.getTimeDiff: minutes: ",minutes+ " _psed: "+_psed+" _psst: "+_psst+" _dset:"+_dset +" _dsst:"+_dsst+" id:"+id);
return diff;
}
ActiveSessions.prototype.getTimeToExpire = function(time){
var id = -1;
/* check if today is saturday or sunday
* saturday = 6, sunday =0;
*/
var day = new Date().getDay();
//If only 5 days working and today is saturday or sunday
if ( (this.activedays == 5) && ((day == 6)|| (day == 0))){
return -1;
}
//If only 6 days working and today is sunday
if ( (this.activedays == 6) && (day == 0)){
return -1;
}
minutes = convertTimeToNumber(time);
var _psid = null;
var _psst = 0;
var _psed = 0;
var _dsid = null;
var _dsst = 0;
var _dset = 0;
var day = new Date().getDay();
if (day == this.o_pday){
_psid = this.o_psid;
_psst = this.o_psst;
_psed = this.o_psed;
}else{
_psid = this.psid;
_psst = this.psst;
_psed = this.psed;
}
if (day == this.o_dday){
_dsid = this.o_dsid;
_dsst = this.o_dsst;
_dset = this.o_dset;
}else{
_dsid = this.dsid;
_dsst = this.dsst;
_dset = this.dset;
}
if (id == "P"){
return _psed - minutes;
}else if(id == "D"){
return _dset - minutes;
}
return 9999999999;
}
/*
* If it is pickup = returns "P", if it is drop, returns "D".
* If inactive return -1.
*/
ActiveSessions.prototype.isActiveFromGroupDate = function(groupData,time, sessionTime){
var id = -1;
/* check if today is saturday or sunday
* saturday = 6, sunday =0;
*/
var day = new Date(time).getDay();
//If only 5 days working and today is saturday or sunday
if ( (groupData.active_days == 5) && ((day == 6)|| (day == 0))){
return -1;
}
//If only 6 days working and today is sunday
if ( (groupData.active_days == 6) && (day == 0)){
return -1;
}
minutes = convertTimeToNumber(sessionTime);
var _psid = null;
var _psst = 0;
var _psed = 0;
var _dsst = 0;
var _dset = 0;
var _dsid = null;
if (day == groupData.override_pickup_session_active_day){
_psid = groupData.override_pickup_session_id;
_psst = convertTimeToNumber(groupData.override_pickup_start_time);
_psed = convertTimeToNumber(groupData.override_pickup_stop_time);
}else{
_psid = groupData.pickup_session_id;
_psst = convertTimeToNumber(groupData.pickup_start_time);
_psed = convertTimeToNumber(groupData.pickup_stop_time);
}
if (day == groupData.override_drop_session_active_day){
_dsid = groupData.override_drop_session_id;
_dsst = convertTimeToNumber(groupData.override_drop_start_time);
_dset = convertTimeToNumber(groupData.override_drop_stop_time);
}else{
_dsid = groupData.drop_session_id;
_dsst = convertTimeToNumber(groupData.drop_start_time);
_dset = convertTimeToNumber(groupData.drop_stop_time);
}
console.log("isActiveFromGroupDate: _psid:"+_psid+" _dsid:"+_dsid+" minutes: "+minutes+" _psst:"+_psst+" _psed:"+_psed+" _dsst:"+_dsst+" _dset:"+_dset);
//if ( (minutes>=_psst) && (minutes <=_psed) ){
//+30 minutes end time for buffer
if ( (_psid != null) && (minutes>=_psst) && (minutes <=(_psed+(30*60))) ){
//no nearby alert check if it falls out of session boundaries.
id = "P";//this.psid;
//}else if( (minutes>=_dsst) && (minutes <=_dset) ){
// -30 minutes start time of drop time
}else if( (_dsid != null) && (minutes>=(_dsst-(30*60))) && (minutes <=_dset) ){
id = "D";//this.dsid;
}
return id;
}
ActiveSessions.prototype.getTimeToExpireFromGroupDate = function(groupData,time, sessionTime){
var id = -1;
/* check if today is saturday or sunday
* saturday = 6, sunday =0;
*/
var day = new Date(time).getDay();
//If only 5 days working and today is saturday or sunday
if ( (groupData.active_days == 5) && ((day == 6)|| (day == 0))){
return -1;
}
//If only 6 days working and today is sunday
if ( (groupData.active_days == 6) && (day == 0)){
return -1;
}
minutes = convertTimeToNumber(sessionTime);
var _psid = null;
var _psst = 0;
var _psed = 0;
var _dsst = 0;
var _dset = 0;
var _dsid = null;
if (day == groupData.override_pickup_session_active_day){
_psid = groupData.override_pickup_session_id;
_psst = convertTimeToNumber(groupData.override_pickup_start_time);
_psed = convertTimeToNumber(groupData.override_pickup_stop_time);
}else{
_psid = groupData.pickup_session_id;
_psst = convertTimeToNumber(groupData.pickup_start_time);
_psed = convertTimeToNumber(groupData.pickup_stop_time);
}
if (day == groupData.override_drop_session_active_day){
_dsid = groupData.override_drop_session_id;
_dsst = convertTimeToNumber(groupData.override_drop_start_time);
_dset = convertTimeToNumber(groupData.override_drop_stop_time);
}else{
_dsid = groupData.drop_session_id;
_dsst = convertTimeToNumber(groupData.drop_start_time);
_dset = convertTimeToNumber(groupData.drop_stop_time);
}
if ( (_psid != null) && (minutes>=_psst) && (minutes <=(_psed+(30*60))) ){
//no nearby alert check if it falls out of session boundaries.
id = "P";//this.psid;
//}else if( (minutes>=_dsst) && (minutes <=_dset) ){
// -30 minutes start time of drop time
}else if( (_dsid != null) && (minutes>=(_dsst-(30*60))) && (minutes <=_dset) ){
id = "D";//this.dsid;
}
if (id == "P"){
return _psed - minutes;
}else if(id == "D"){
return _dset - minutes;
}
return 9999999999;
}
function convertTimeToNumber(time){
var hms = time || '00:15:00'; // your input string
var a = hms.split(':') || '00:15:00'; // split it at the colons
// minutes are worth 60 seconds. Hours are worth 60 minutes.
var seconds =( (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]) ) || 900; // defaul to 00:15:00
return seconds;
}
/*
* Parse JSON obejct and create objects
*/
ActiveSessions.prototype.fromJSON = function(data){
if (data == null){
this.invalid = true;
return;
}
var flagJson = null;
flagJson = JSON.parse(utility.hex2a(data));
console.log(flagJson[PST] +' psst time is ::', convertTimeToNumber(flagJson[PST]));
this.psid = flagJson[PID];
this.psst = convertTimeToNumber(flagJson[PST]);
this.psed = convertTimeToNumber(flagJson[PET]);
this.dsid = flagJson[DID];
this.dsst = convertTimeToNumber(flagJson[DST]);
this.dset = convertTimeToNumber(flagJson[DET]);
this.o_psid = flagJson[O_PID];
this.o_psst = convertTimeToNumber(flagJson[O_PST]);
this.o_psed = convertTimeToNumber(flagJson[O_PET]);
this.o_pday = flagJson[O_PDAY];
this.o_dsid = flagJson[O_DID];
this.o_dsst = convertTimeToNumber(flagJson[O_DST]);
this.o_dset = convertTimeToNumber(flagJson[O_DET]);
this.o_dday = flagJson[O_DDAY];
this.activedays = flagJson[AD];
console.log(" "+this.psid);
console.log(" "+this.psst);
console.log(" "+this.psed);
console.log(" "+this.dsid);
console.log(" "+this.dsst);
console.log(" "+this.dset);
}
/*
* Parse it to JSON to store
*/
ActiveSessions.prototype.toJSON = function(){
var mainObj = {};
mainObj[PID] = this.psid;
mainObj[PST] = this.psst;
mainObj[PET] = this.psed;
mainObj[DID] = this.dsid;
mainObj[DST] = this.dsst;
mainObj[DET] = this.dset;
mainObj[O_PID] = this.o_psid;
mainObj[O_PST] = this.o_psst;
mainObj[O_PET] = this.o_psed;
mainObj[O_DID] = this.o_dsid;
mainObj[O_DST] = this.o_dsst;
mainObj[O_DET] = this.o_dset;
mainObj[O_DDAY] = this.o_dday;
mainObj[AD] = this.activedays;
return utility.convertFromAscii2Hexa(JSON.stringify(mainObj));
}