.
This commit is contained in:
+151
-39
@@ -146,7 +146,6 @@ function generateExtra() {
|
||||
bank_holidays = shift_tds.filter(".bank-holiday").filter(function (i) {
|
||||
return $(this).attr('data-shift') != "";
|
||||
});
|
||||
console.log("BH", bank_holidays.length)
|
||||
|
||||
bank_holidays_worked = bank_holidays.length;
|
||||
|
||||
@@ -156,6 +155,8 @@ function generateExtra() {
|
||||
total_summed_shift_diffs = total_summed_shift_diffs + summed_shift_diff;
|
||||
total_summed_shift_diffs_abs = total_summed_shift_diffs_abs + Math.abs(summed_shift_diff);
|
||||
|
||||
worker_td.get(0).dataset.shiftDiffSummed = summed_shift_diff.toPrecision(2);
|
||||
|
||||
|
||||
worker_td.after(`<div class='worker-summary auto-generated'>
|
||||
<span>Total shifts: ${total_shifts}, </span>
|
||||
@@ -165,9 +166,13 @@ function generateExtra() {
|
||||
|
||||
</div>`)
|
||||
|
||||
if (Math.abs(summed_shift_diff) >= 1) {
|
||||
worker_td.addClass("large-shift-diff")
|
||||
$(tr).find(".shift-diff-span").addClass("large-shift-diff")
|
||||
if (summed_shift_diff >= 1) {
|
||||
worker_td.addClass("large-shift-diff-pos")
|
||||
$(tr).find(".shift-diff-span").addClass("large-shift-diff-pos")
|
||||
} else if (summed_shift_diff <= -1) {
|
||||
worker_td.addClass("large-shift-diff-neg")
|
||||
$(tr).find(".shift-diff-span").addClass("large-shift-diff-neg")
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
@@ -176,12 +181,9 @@ function generateExtra() {
|
||||
sites = {};
|
||||
sites_days_lost = {}
|
||||
for (const worker in workers) {
|
||||
//console.log(worker, workers[worker]);
|
||||
w = workers[worker];
|
||||
if (w.fte == 100) {
|
||||
//console.log(w.shift_types);
|
||||
for (let shift of w.shift_types) {
|
||||
//console.log(shift);
|
||||
if (!(w.site in sites)) {
|
||||
sites[w.site] = {};
|
||||
|
||||
@@ -234,16 +236,17 @@ function generateExtra() {
|
||||
}
|
||||
|
||||
shifts = generateExtra();
|
||||
console.log(shifts)
|
||||
|
||||
if (shifts.size < 1) {
|
||||
shifts = $("#shifts-container").data("shifts");
|
||||
}
|
||||
console.log(shifts)
|
||||
|
||||
oshifts = Array.from(shifts).sort()
|
||||
|
||||
$("body").append("<div><table class='tsummary'></table></div>")
|
||||
$("body").append("<div><button id='show-colour-diff'>Show colour diff</button><table class='tsummary'></table></div>")
|
||||
$("#show-colour-diff").on("click", (evt) => {
|
||||
$("table.tsummary").find(`td.target-assigned`).toggleClass("no-colour");
|
||||
});
|
||||
|
||||
$("table.tsummary").append("<tr class='header'></tr>");
|
||||
h = $("table.tsummary tr.header");
|
||||
@@ -269,6 +272,13 @@ $(".table-div .worker-row .worker").each((n, tr) => {
|
||||
row.append(`<td>${jtr.data("fte")}</td>`)
|
||||
row.append(`<td>${parseFloat(jtr.data("fte_adj")).toFixed(2)}</td>`)
|
||||
|
||||
if (jtr.data("shift-diff-summed") >= 1) {
|
||||
row.addClass("large-shift-diff-pos")
|
||||
} else if (jtr.data("shift-diff-summed") <= -1) {
|
||||
row.addClass("large-shift-diff-neg")
|
||||
|
||||
}
|
||||
|
||||
shift_counts = jtr.data("shift-counts")
|
||||
shift_targets = jtr.data("worker-targets")
|
||||
|
||||
@@ -279,7 +289,7 @@ $(".table-div .worker-row .worker").each((n, tr) => {
|
||||
} else {
|
||||
c = 0;
|
||||
}
|
||||
row.append(`<td>${c} (${shift_targets[s].toFixed(2)})</td>`)
|
||||
row.append(`<td class="target-assigned ${s}" data-assigned=${c} data-target=${shift_targets[s].toFixed(2)} data-diff=${shift_targets[s].toFixed(2)-c}>${c} (${shift_targets[s].toFixed(2)})</td>`)
|
||||
|
||||
} else {
|
||||
row.append(`<td>-</td>`)
|
||||
@@ -289,6 +299,77 @@ $(".table-div .worker-row .worker").each((n, tr) => {
|
||||
$("table.tsummary").append(row)
|
||||
})
|
||||
|
||||
shift_max_diff_map = {};
|
||||
shift_min_diff_map = {};
|
||||
|
||||
oshifts.forEach((s) => {
|
||||
shift_max_diff_map[s] = 0;
|
||||
shift_min_diff_map[s] = 0;
|
||||
$("table.tsummary").find(`td.target-assigned.${s}`).each((n, td) => {
|
||||
shift_max_diff_map[s] = Math.max(shift_max_diff_map[s], td.dataset.diff)
|
||||
shift_min_diff_map[s] = Math.min(shift_min_diff_map[s], td.dataset.diff)
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
oshifts.forEach((shift) => {
|
||||
$("table.tsummary").find(`td.target-assigned.${shift}`).each((n, td) => {
|
||||
diff = td.dataset.diff;
|
||||
|
||||
if (diff > 0) {
|
||||
max_diff = shift_max_diff_map[shift];
|
||||
var h = 120 - Math.floor((max_diff - diff) * 120 / max_diff);
|
||||
var s = diff / max_diff;
|
||||
//var s = 0.5;
|
||||
var v = 1;
|
||||
$(td).css({
|
||||
backgroundColor: hsv2rgb(h, s, 1)
|
||||
})
|
||||
} else {
|
||||
min_diff = shift_min_diff_map[shift]
|
||||
|
||||
var h = Math.floor((min_diff - diff) * 120 / min_diff);
|
||||
var s = diff / min_diff;
|
||||
//var s = 0.5;
|
||||
var v = 1;
|
||||
$(td).css({
|
||||
backgroundColor: hsv2rgb(h, s, 1)
|
||||
})
|
||||
|
||||
}
|
||||
$(td).addClass("no-colour")
|
||||
//s = Math.max(shift_max_diff_map[s], td.dataset.diff)
|
||||
//shift_min_diff_map[s] = Math.min(shift_max_diff_map[s], td.dataset.diff)
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
oshifts.forEach((shift) => {
|
||||
button = $(`<button data-shift='${shift}'>${shift}</button>`)
|
||||
|
||||
button.on("click", (evt) => {
|
||||
console.log(evt.target.dataset.shift)
|
||||
$("#shift-timetable-div").empty();
|
||||
table = $("<table>");
|
||||
$("table#main-table th.date").each((n, th) => {
|
||||
row = $("<tr>")
|
||||
row.append(`<td>${th.dataset.date}</td>`);
|
||||
$(`table#main-table td[data-date='${th.dataset.date}'][data-shift='${evt.target.dataset.shift}']`).each((n, td) => {
|
||||
|
||||
//row.append(`<td>${}</td>`)
|
||||
row.append($(td).closest("tr").children("td:first").clone())
|
||||
|
||||
});
|
||||
|
||||
table.append(row)
|
||||
});
|
||||
$("#shift-timetable-div").append(table);
|
||||
|
||||
})
|
||||
|
||||
$("#shift-timetable-options").append(button)
|
||||
});
|
||||
|
||||
//$("table.summary")
|
||||
|
||||
// $("body").prepend("<div id='global-settings'>Settings:<br />Customise training days lost per shift (you need to press recalculate for changes to take effect)<form></form></div>")
|
||||
@@ -340,11 +421,8 @@ $("td").hover((e) => {
|
||||
if (e.target.dataset.shift != undefined && e.target.dataset.shift.length > 0) {
|
||||
$(`td[data-shift=${e.target.dataset.shift}]`).addClass("shift-highlight")
|
||||
|
||||
console.log(`td[data-remote-site='${e.target.dataset.shiftRemoteSite}']`)
|
||||
console.log($(e.target).closest('tr').find(`td[data-remote-site='${e.target.dataset.shiftRemoteSite}']`))
|
||||
|
||||
$(`td[data-remote-site='${e.target.dataset.shiftRemoteSite}']`).closest('tr').find(`td[data-shift=${e.target.dataset.shift}]`).addClass("remote-site-match")
|
||||
// console.log(e.target.dataset.shiftRemoteSite , worker_td.dataset.remoteSite)
|
||||
// if (e.target.dataset.shiftRemoteSite == worker_td.dataset.remoteSite) {
|
||||
// $(`td[data-shift-remote-site=${e.target.dataset.shiftRemoteSite}]`).addClass("remote-site-match")
|
||||
// }
|
||||
@@ -373,11 +451,11 @@ function viewWorker(worker) {
|
||||
Start date: ${ds.start_date}</br>
|
||||
End date: ${ds.end_date}</br>
|
||||
Non working days: ${ds.nwds}</br>
|
||||
Remote site: ${ds.remoteSite}
|
||||
Remote site: ${ds.remoteSite}</br>
|
||||
Summed shift diff: ${ds.shiftDiffSummed}
|
||||
</div>`)
|
||||
$("body").append(dlg)
|
||||
|
||||
console.log(ds.shiftCounts)
|
||||
shifts = JSON.parse(ds.shiftCounts)
|
||||
shift_targets = JSON.parse(ds.workerTargets)
|
||||
shift_diffs = JSON.parse(ds.shiftDiff)
|
||||
@@ -399,39 +477,73 @@ function viewWorker(worker) {
|
||||
row.insertCell().appendChild(document.createTextNode(shifts[shift]))
|
||||
row.insertCell().appendChild(document.createTextNode(shift_targets[shift].toPrecision(2)))
|
||||
row.insertCell().appendChild(document.createTextNode(shift_diffs[shift].toPrecision(2)))
|
||||
//console.log(shift, shifts[shift]);
|
||||
}
|
||||
|
||||
dlg.get(0).appendChild(shift_count_table)
|
||||
dlg.dialog()
|
||||
|
||||
|
||||
console.log(worker);
|
||||
|
||||
}
|
||||
|
||||
$("#export-div").append($("#main-table").clone().attr("id", "gen-table").addClass("transposed"))
|
||||
|
||||
$("#gen-table").each(function() {
|
||||
var $this = $(this);
|
||||
var newrows = [];
|
||||
//$this.find("th.site-title").parent().remove();
|
||||
$this.find("tr").each(function(rowToColIndex){
|
||||
$(this).find("td, th").each(function(colToRowIndex){
|
||||
if(newrows[colToRowIndex] === undefined) { newrows[colToRowIndex] = $("<tr></tr>"); }
|
||||
while(newrows[colToRowIndex].find("td, th").length < rowToColIndex){
|
||||
newrows[colToRowIndex].append($("<td></td>"));
|
||||
}
|
||||
newrows[colToRowIndex].append($(this));
|
||||
});
|
||||
});
|
||||
$this.find("tr").remove();
|
||||
$.each(newrows, function(){
|
||||
$this.append(this);
|
||||
$("#gen-table").each(function () {
|
||||
var $this = $(this);
|
||||
var newrows = [];
|
||||
//$this.find("th.site-title").parent().remove();
|
||||
$this.find("tr").each(function (rowToColIndex) {
|
||||
$(this).find("td, th").each(function (colToRowIndex) {
|
||||
if (newrows[colToRowIndex] === undefined) {
|
||||
newrows[colToRowIndex] = $("<tr></tr>");
|
||||
}
|
||||
while (newrows[colToRowIndex].find("td, th").length < rowToColIndex) {
|
||||
newrows[colToRowIndex].append($("<td></td>"));
|
||||
}
|
||||
newrows[colToRowIndex].append($(this));
|
||||
});
|
||||
});
|
||||
$this.find("tr").remove();
|
||||
$.each(newrows, function () {
|
||||
$this.append(this);
|
||||
});
|
||||
|
||||
$this.find("td.rota-day").each((n, el) => {
|
||||
console.log(el)
|
||||
$(el).text(el.dataset.shift)
|
||||
});
|
||||
});
|
||||
$this.find("td.rota-day").each((n, el) => {
|
||||
$(el).text(el.dataset.shift)
|
||||
});
|
||||
});
|
||||
|
||||
function hsv2rgb(h, s, v) {
|
||||
// adapted from http://schinckel.net/2012/01/10/hsv-to-rgb-in-javascript/
|
||||
var rgb, i, data = [];
|
||||
if (s === 0) {
|
||||
rgb = [v, v, v];
|
||||
} else {
|
||||
h = h / 60;
|
||||
i = Math.floor(h);
|
||||
data = [v * (1 - s), v * (1 - s * (h - i)), v * (1 - s * (1 - (h - i)))];
|
||||
switch (i) {
|
||||
case 0:
|
||||
rgb = [v, data[2], data[0]];
|
||||
break;
|
||||
case 1:
|
||||
rgb = [data[1], v, data[0]];
|
||||
break;
|
||||
case 2:
|
||||
rgb = [data[0], v, data[2]];
|
||||
break;
|
||||
case 3:
|
||||
rgb = [data[0], data[1], v];
|
||||
break;
|
||||
case 4:
|
||||
rgb = [data[2], data[0], v];
|
||||
break;
|
||||
default:
|
||||
rgb = [v, data[0], data[1]];
|
||||
break;
|
||||
}
|
||||
}
|
||||
return '#' + rgb.map(function (x) {
|
||||
return ("0" + Math.round(x * 255).toString(16)).slice(-2);
|
||||
}).join('');
|
||||
};
|
||||
Reference in New Issue
Block a user