- Install Tampermonkey
- Add scripts to Tampermonkey
- Go to https://na32.salesforce.com/a1W?rlid=00N50000002ejrH&id=a0y50000000onx0
- Insert your join date (which you could find in Jigsaw)
- Enjoy your automatic leave balance calculation
Last active
August 29, 2015 14:28
-
-
Save sbycrosz/619106af3335dca89317 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Leave Balance Calculator | |
// @namespace | |
// @version 0.0.1 | |
// @description | |
// @author Sam | |
// @match https://na32.salesforce.com/a1W?rlid=00N50000002ejrH&id=a0y50000000onx0 | |
// @grant none | |
// ==/UserScript== | |
var AvailableLeaveCalculator = { | |
calculate: function(joinDate, currentDate, leavesTaken) { | |
var monthSinceJoin = Math.floor((currentDate - joinDate) / (1000 * 3600 * 24 * 30) + 1); | |
var availableLeavesPerYear = 20; | |
var accruedLeaves = monthSinceJoin * (availableLeavesPerYear / 12); | |
var availableLeaves = accruedLeaves - leavesTaken; | |
return availableLeaves; | |
} | |
} | |
var NodeListUtility = { | |
toArray: function(nodeList){ | |
return Array.prototype.slice.call(nodeList); | |
} | |
}; | |
var AnnualLeavePage = function(){ | |
this._leaveCalculatorContainer = document.createElement("div"); | |
var container = document.getElementById("bodyCell"); | |
container.insertBefore(this._leaveCalculatorContainer, container.firstChild); | |
this.displayJoinDateForm = function(){ | |
var form = document.createElement("form"); | |
form.innerHTML = "\ | |
Join date : <input id='joinDate' type='date'/> \ | |
<input type='submit'/>\ | |
"; | |
this._leaveCalculatorContainer.appendChild(form); | |
return form; | |
}; | |
this.getLeavesTakenTotal = function(){ | |
var leavesTakenRowNodes = document.querySelectorAll(".list .dataRow td:nth-child(8)"); | |
var leavesTakenRowArray = NodeListUtility.toArray(leavesTakenRowNodes); | |
var leavesTakenTotal = leavesTakenRowArray.map(function(element){return element.innerHTML;}) | |
.map(function(number){return parseFloat(number);}) | |
.reduce(function(sum, element){return sum + element;}, 0); | |
return leavesTakenTotal; | |
}; | |
this.displayAvailableLeaves = function(availableLeaves){ | |
this._leaveCalculatorContainer.innerHTML = "\ | |
<h1>\ | |
Your Leave Balance is " + availableLeaves.toFixed(2) + " day(s) \ | |
<h1>"; | |
}; | |
}; | |
var AnnualLeaveExtension = function(_page){ | |
var page = _page; | |
this._getJoinDate = function(){ | |
return new Promise(function (resolve) { | |
var savedJoinDate = window.localStorage.getItem("joinDate"); | |
if (!!savedJoinDate) { | |
resolve(new Date(savedJoinDate)); | |
} else { | |
var form = page.displayJoinDateForm(); | |
form.addEventListener("submit", function(event){ | |
event.preventDefault() | |
var joinDate = new Date(document.getElementById("joinDate").value); | |
window.localStorage.setItem("joinDate", joinDate); | |
resolve(joinDate); | |
}); | |
} | |
}); | |
}; | |
this.run = function(){ | |
this._getJoinDate() | |
.then(function(joinDate) { | |
var leavesTaken = page.getLeavesTakenTotal(); | |
var availableLeaves = AvailableLeaveCalculator.calculate(joinDate, new Date(), leavesTaken); | |
page.displayAvailableLeaves(availableLeaves); | |
}); | |
}; | |
}; | |
new AnnualLeaveExtension(new AnnualLeavePage()).run(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment