// ==UserScript==
// @name IOA IQ
// @namespace https://www.conanluo.com/
// @version 1.2.40
// @description route the route
// @author Conan
// @match https://*.itinerisonline.com/*
// @require https://code.jquery.com/jquery-2.2.4.min.js
// @icon https://www.google.com/s2/favicons?sz=64&domain=itinerisonline.com
// @grant none
// ==/UserScript==
(function($){
let addrs,prtObjInfo
/*for high light route begin*/
let colors=["000000","b51548","188225","f3f600","AAAA00","443ea1","b1f9d1","aa77aa","01b4fa","f685e6","e08536","dddddd"];
let address=[];
let popRtUrl="https://work.conanluo.com/popRoute.html?arr="
/*for high light route end*/
let drivers={
29714:"Wilson",
25937:"Bert",
30094:"Lok",
29757:"Zhong",
24954:"Mauricio",
27707:"Raymond",
30263:"Jabari",
30125:"Jerry",
25442:"Walter",
13395:"Ken",
30269:"Jackie",
22836:"Joe",
27753:"Jerald",
30380:"Jay",
30264:"Victor",
27760:"Conan",
}
let vans={
"IOA-11":"10",
"IOA-12":"1",
"IOA-13":"7",
"IOA-14":"11",
"IOA-15":"2",
"IOA-16":"9",
"IOA-17":"8",
"IOA-19":"3",
"IOA-20":"6",
"IOA-21":"5",
"IOA-22":"4",
"V-310":"MV",
"V-378":"13",
"IOA-06":"12"
}
//for compare
let isCompare=false
/****************************
frame changed. begin
*****************************/
//setup top button
let topBtn=`
<nav id='topBtnDiv' class="form-inline row" style="margin-left:15px;">
<textarea id="compare" class="form-control compareSet" style="width:100px; height:35px; display:none"></textarea>
<button id="compareBtn" class="btn btn-primary">Compare Mode</button>
<button id='hightLightRoute' class='btn btn-success'>hightLightRoute</button>
<button id='popAmRoute' class='btn btn-danger'>popAmRoute</button>
<button id='popPmRoute' class='btn btn-danger'>popPmRoute</button>
<button id='popMedication' class='btn btn-danger'>popMedication</button>
<button id='clearDeadPixel' class='btn btn-warning' onclick="$('#timelineCurrentTime').hide();">clearDeadPixel</button>
<button id='mainPage0' class='btn btn-primary goToPage'>createSchedule</button>
<button id='mainPage1' class='btn btn-primary mainUse goToPage'>todayRoute1</button>
<button id='mainPage2' class='btn btn-primary mainUse goToPage'>todayRoute2</button>
<textarea id="compare2" class="form-control compareSet" style="width:100px; height:35px; display:none"></textarea>
</nav>
`;
$("body").prepend(topBtn);
//set up the listenner for each top button
//
$(".goToPage").click(function(){
let flag=this.id.replace("mainPage","");
top.location=getMainUrl(getToday(),flag);
location.reload();
})
$("#hightLightRoute").click(function(){
let conanCode=$.ajax({"url":"https://work.conanluo.com/prts_info3.js","async":false}).responseText;
console.log(conanCode)
eval(conanCode)
resetRouteFrame()
})
/****************************
//search add toggle() listener start
*****************************/
function setNav(){
if($("#showNavBtn").length<=0){
$(".navbar-header").prepend(`<button id='showNavBtn' class='btn btn-success' style='padding:1px;margin-top:9px;height:30px'>show/hide Nav</button>`)
$("#showNavBtn").click(function(){
$("#topBtnDiv").toggle()
})
}
}
/****************************
//search add toggle() listener End
*****************************/
/****************************
frame changed. begin
*****************************/
/*
resetRoute
*/
function resetRouteFrame(){
$(".vehicle-group").each(function(){
let id=$(this).attr("id");
let driverID=id.split("@")[0];
let van=$(this).find(".vehicle-name").find("strong").text()
//$(this).perpend(`<span color='orange'>465456</span>`)
if(driverID){
$(this).find("span").first().html(
`<font style='font-size:20px;color:DarkMagenta'>Route ${vans[van]}</font>
<font color="6495ED" style="font-size:17px;background:lightgrey">${drivers[driverID]}<br></font>`)
}else if(vans[van]){
$(this).find("span").first().html(
`<font style='font-size:20px;color:DarkMagenta'>Route ${vans[van]}</font> `)
}
//console.log(van)
})
}
/**************
hide unwanted elements
**************/
$(".fa-toggle-down").click()
/**************
**************/
setTimeout(function(){
resetRouteFrame()
$(".fa-toggle-down").click()
},1000);
setInterval(function(){
resetRouteFrame();
setNav()
},1000)
/****************************
Functions Begin
*****************************/
/**
*getMainUrl, return the Link back to main-use page -> /affiliate/#/admin/schedule
*/
function getMainUrl(today,flag){
let billToId=flag<=1?"":"490078,%20294341";
let returnString=""
console.log(billToId)
if(flag>=1) returnString =`/affiliate/#/admin/schedule?serviceDate=${today.year}-${today.month}-${today.day}&division=ca04&billToId=${billToId}&billToCustomQuery=`;
else if(flag==0) returnString = `/affiliate/#/trip-import?billToId=${490078}&popOutCode=true`
return returnString
}
function getToday(){
let today=new Date(),
mMonth=today.getMonth()+1,
mDay=today.getDate(),
mYear=today.getFullYear();
mMonth = mMonth<10?"0"+mMonth:mMonth;
mDay = mDay<10?"0"+mDay:mDay;
return {"year":mYear,"month":mMonth,"day":mDay}
}
/**highlight Route Begin**/
async function delay(time){
return new Promise((res,rej)=>{
setTimeout(_=>res(),time)
})
}
$("#hightLightRoute").click(function(){
(async () => {
let da=document.getElementsByClassName("table table-condensed table-hover selectable")[0].getElementsByTagName("tr");
for(let i=0;i<da.length;i++){
if(!((da[i].innerText+"").indexOf("3575 Geary ")>-1)){
let splitWord="\t";
if((da[i].innerText+"").indexOf("\tPU")>-1)
splitWord+="PU ";
else if((da[i].innerText+"").indexOf("\tDO")>-1)
splitWord+="DO ";
else continue;
da[i].click();
let name=da[i].innerText.split(splitWord)[1].split("\t")[0];
await delay(100);
let prt=document.getElementsByClassName("da selected")[0]
prt.innerText=name
changeBg(da[i],prt,1)
}
}
//show color
let colorHtml="<div class='panel-primary'><h3 class='panel-heading'>The Color For The Route</h3>"
for(let i=0;i<colors.length;i++){
let x=i;
if(x==11 || x==0) x="Check Which Route"
else x="Route "+x
colorHtml+=`<span style="padding:5px 30px; background-color:#${colors[i]};${i==5||i==0?"color:white;":""}">${x}</span> `
}
if($("#show_route_color").length<=0)
$(".tab-pane").prepend(`<div id="show_route_color"></div>`)
$("#show_route_color").html(colorHtml+'</div><br><hr><br>')
// $("#ch").text(address.join("@"))
})();
})
function changeBg(da,prt,type){//Boulevard, Avenue, Street
// let color=type==1?"red":"green";
let slt=type==1?"\tPU ":"\tDO ";
// let name=da.innerText.split(slt)[1].split("\t")[0];
let addr=da.innerText.split("\t")[6];
address.push(addr)
//console.log(addrs[addr.replace(", San Francisco","")]);
let addrIndex=addr.replace(", San Francisco","").replaceAll("Street","St").replaceAll("Avenue","Ave").replaceAll("Boulevard","Blvd");
/**/
try{
addrIndex=addrIndex.split(" #")[0]
//console.log(addrIndex)
}catch(e){
try {
addrIndex=addrIndex.split(" Apt")[0];
} catch (error) {
}
}
/**/
$(prt).css("background-color","#"+colors[addrs[addrIndex]])
// $(prt).css("background-color","#999999")
}
/**highlight Route End**/
/**pop out Route Begin**/
$("#popAmRoute").click(function(){
let prtArrAm=[[],[],[],[],[],[],[],[],[],[],[],[],[],[]];
$(".schedule-monitor>tbody").each(function(i,o){
//$(o).find('td').each(function(j,td){
//console.log($(td).text(),`---${i}---${j}`)
//})
//console.log($(o).find('td').eq(17).text(),`---${i}---`)//ioa -> AM route
if($(o).find('td').eq(17).text().includes("IOA")) {
//3 -> Van Number, 8 -> name
let van = ($(o).find('td').eq(3).text()).trim()
let name = ($(o).find('td').eq(8).text())
let time = ($(o).find('td').eq(16).text()).trim()
if(vans[van]){
let tempNum=vans[van]=="MV"?"0":vans[van];
prtArrAm[tempNum].push(name+" - @__"+time);
prtArrAm[tempNum].sort()
}
}
})
console.log(prtArrAm.toString())
let url=popRtUrl+JSON.stringify(prtArrAm)
window.open(url+`&rt= AM Route Sheet`)
console.log(url)
})
/**pop out Route End**/
/**Pop up Pm Route Begin**/
$("#popPmRoute").click(function(){
const PICK_UP_TIME="15:30";
const EARLY_PICK_UP_TIME_2="14:00";
const EARLY_PICK_UP_TIME_3="15:00";
(async () => {
let pmArr=[];//index number is route number, 11 => joe & 12=> wilson
//console.log($("#schedule-area").html())
let schedule=document.getElementById("schedule-area").getElementsByClassName("vehicle-group");
for(let i=0; i<schedule.length; i++){
if(schedule[i].id=="@"){
continue;
}
let tempArr=[];
let route="";
schedule[i].click()
route=$(schedule[i]).find("font").eq(0).text().replace("Route ","")
if(route=="Mini Van" || route=="MV"){
route=$(schedule[i]).find("font").eq(1).text().trim()
route=route=="Joe"?0:13
}
//console.log(route)
let checkList=document.getElementById("checkpoint-list").getElementsByTagName("tr")
for(let j=0;j<checkList.length;j++){
if($(checkList[j].getElementsByTagName("td")[0]).find("a").text().trim()===PICK_UP_TIME){
let tempPrt=$(checkList[j].getElementsByTagName("td")[4]).text().replace(" PU ","").trim()
tempArr.push(tempPrt)
}else if($(checkList[j].getElementsByTagName("td")[0]).find("a").text().trim()===EARLY_PICK_UP_TIME_2){
let tempPrt=$(checkList[j].getElementsByTagName("td")[4]).text().replace(" PU ","").trim()+" - @2pm"
tempArr.push(tempPrt)
}else if($(checkList[j].getElementsByTagName("td")[0]).find("a").text().trim()===EARLY_PICK_UP_TIME_3){
let tempPrt=$(checkList[j].getElementsByTagName("td")[4]).text().replace(" PU ","").trim()+" - @3pm"
tempArr.push(tempPrt)
}
// console.log($(checkList[j].getElementsByTagName("td")[6]).text().trim()===CENTER_ADDRESS)
}
pmArr[parseInt(route)]=tempArr.sort()
await delay(10)
//1break;
//console.log(schedule[i].id)
}
//console.log(pmArr[1])
//test file
//let url="https://conanluo.com/ioa/popPmRoute.html?"
let url=popRtUrl
let param="["
for(let i=0;i<pmArr.length;i++){
let tempArr;
console.log(i+"---"+pmArr[i])
if(pmArr[i]===undefined){
param+="undefined,"
}else{
tempArr=pmArr[i]
param+="["
for(let j=0;j<tempArr.length;j++){
param+=`"${tempArr[j]}"`
if((j+1)!=tempArr.length) param+=","
}
param+="],"
}
}
param+="undefined]"
window.open(url+"arr="+param+`&rt= PM Route Sheet`)
//finished then relocate
//document.location.href="www.baidu.com"
})();
})
/**Pop up Pm Route End**/
/**Pop up Medication list Begin**/
$("#popMedication").click(function(){
let prtArrAm=[[],[],[],[],[],[],[],[],[],[],[],[],[],[]];
$('tr').has('.fa-cube').each(function(i,o){
//3 -> Van Number, 8 -> name
let van = ($(o).find('td').eq(3).text()).trim()
let name = ($(o).find('td').eq(8).text())
let time = ($(o).find('td').eq(16).text()).trim()
if(vans[van]){
let tempNum=vans[van]=="MV"?"0":vans[van];
prtArrAm[tempNum].push(name);
prtArrAm[tempNum].sort()
}
})
console.log(prtArrAm.toString())
let url=popRtUrl+JSON.stringify(prtArrAm)
window.open(url+`&rt= Medication List`)
console.log(url)
})
/**Pop up Medication list End**/
/**Compare the new DAR and old schedule Start**/
$("#compareBtn").click(function(){
if(!isCompare){
isCompare=!isCompare;
$("#compare").show()
$("#compareBtn").text("CompareCheck")
}else{
let tempData=$("#compare").val();
let arr=tempData.split("\n");
let rslArr=[];
for(let i=0;i<arr.length;i++){
let tempArr=arr[i].split("\t")
let trans=tempArr[0]=="Y"||tempArr[2]=="Yes";
if(trans&&rslArr.indexOf(tempArr[1])<0)
rslArr.push(tempArr[1])
}
$(".tab-content .tab-pane").hide();
$(".tab-content .tab-pane").eq(1).show()
let newRslt=[...rslArr]
$(".tab-content .tab-pane").eq(1).find("tbody").each(function(){
for(let i=0;i<rslArr.length;i++){
let name=rslArr[i]
//console.log(name)
if($(this).text().indexOf(name)>0){
$(this).hide()
newRslt=newRslt.filter(n=>n!==name)
break;
}
}
})
if($("#missing_prt").length>0){
$("#missing_prt").html(`Missing:<hr><font color=orange>${newRslt.join("<br>")}</font><hr>`)
}else{
$(".tab-content .tab-pane").eq(1).prepend(`<div id="missing_prt">Missing:<hr><font color=orange>${newRslt.join("<br>")}</font><hr></div>`)
}
$("#compare2").show()
$("#compare2").val('Y\t'+newRslt.join("\nY\t"))
console.log(newRslt.join("\nY\t"))
}
})
/**Compare the new DAR and old schedule End**/
})($)