UNPKG

flaglib

Version:

Ignition event 15 added.

525 lines (429 loc) 13.1 kB
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)); }