stable (pre shift requests)
This commit is contained in:
@@ -4,3 +4,8 @@ sample.txt
|
||||
*.csv
|
||||
*.html
|
||||
*.log
|
||||
current.log
|
||||
extended proc nights only.log
|
||||
no nights.log
|
||||
no twighlights.log
|
||||
no weekends.log
|
||||
|
||||
@@ -23,7 +23,7 @@ sites = ("truro", "exeter", "torquay", "barnstaple", "plymouth")
|
||||
|
||||
Rota = RotaBuilder(datetime.date(2020, 9, 7),
|
||||
weeks_to_rota=weeks_to_rota,
|
||||
balance_offset_modifier=4,
|
||||
balance_offset_modifier=1,
|
||||
max_weekend_frequency=2,
|
||||
max_night_frequency=2)
|
||||
|
||||
@@ -259,9 +259,14 @@ rota_collections['nights + proc twighlights + normal weekends'].add_shifts(
|
||||
|
||||
rota_collections['nights + proc twighlights + proc weekends'].add_shifts(
|
||||
SingleShift((sites),
|
||||
"proc_twilight_and_weekends",
|
||||
"proc_twilight",
|
||||
12.5,
|
||||
days,
|
||||
days[:5],
|
||||
workers_required=3),
|
||||
SingleShift((sites),
|
||||
"proc_weekends",
|
||||
12.5,
|
||||
days[5:],
|
||||
workers_required=3),
|
||||
#SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True),
|
||||
SingleShift((sites),
|
||||
|
||||
@@ -14,8 +14,15 @@ Object.defineProperties(Array.prototype, {
|
||||
}
|
||||
});
|
||||
|
||||
rows = $(".table-div table .worker-row");
|
||||
//console.log(trs)
|
||||
const mean = arr => arr.reduce( ( p, c ) => p + c, 0 ) / arr.length;
|
||||
|
||||
tables = $(".table-div");
|
||||
|
||||
tables.each((n, table) => {
|
||||
console.log(table)
|
||||
|
||||
rows = $(table).find(".worker-row");
|
||||
console.log(rows)
|
||||
|
||||
workers = {};
|
||||
|
||||
@@ -59,14 +66,19 @@ rows.each((n, tr) => {
|
||||
shift_counts[el] = shifts.count(el);
|
||||
total_shifts = total_shifts + shifts.count(el);
|
||||
|
||||
// 5 days for weekday nights
|
||||
if(el == "night_weekday") { days_lost = days_lost + shifts.count(el) / 4 * 5 }
|
||||
// 4 days for weekend nights
|
||||
if(el == "night_weekend") {
|
||||
days_lost = days_lost + shifts.count(el) / 3 * 4
|
||||
whole_weekends_worked = whole_weekends_worked - shifts.count(el) / 3
|
||||
}
|
||||
// 0.5 for twilights
|
||||
if(el.includes("twilight")) { days_lost = days_lost + shifts.count(el) / 2 }
|
||||
|
||||
});
|
||||
|
||||
// Also 1 day for a whole weekend
|
||||
days_lost = days_lost + whole_weekends_worked
|
||||
console.log(worker, whole_weekends_worked);
|
||||
|
||||
@@ -92,8 +104,55 @@ rows.each((n, tr) => {
|
||||
|
||||
})
|
||||
|
||||
$("th.worker").append($("<button>Toggle Summary</button>").click(() => {
|
||||
$(".rota-day").toggle();
|
||||
$(".worker-summary").toggle();
|
||||
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] = {};
|
||||
|
||||
}
|
||||
if (!(shift in sites[w.site])) {
|
||||
sites[w.site][shift] = [w.shift_counts[shift]];
|
||||
} else {
|
||||
sites[w.site][shift].push(w.shift_counts[shift]);
|
||||
}
|
||||
}
|
||||
if (!(w.site in sites_days_lost)) {
|
||||
sites_days_lost[w.site] = [w.days_lost];
|
||||
|
||||
} else {
|
||||
sites_days_lost[w.site].push(w.days_lost);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate site shift summaries
|
||||
$(table).append("<div class='site-summary'>Average shifts for a 100% FTE trainee</div>");
|
||||
|
||||
for (const site in sites) {
|
||||
console.log(site, $("div"));
|
||||
$(table).find(".site-summary").append(`<div class='site site-${site}'><span class='site-name'>${site}</span></div>`);
|
||||
|
||||
for (const shift in sites[site]) {
|
||||
console.log(sites[site][shift]);
|
||||
average = mean(sites[site][shift])
|
||||
$(table).find(`.site-${site}`).append(`<div>${shift}: ${average.toFixed(2)}</div>`);
|
||||
}
|
||||
|
||||
days_lost_avg = mean(sites_days_lost[site]);
|
||||
$(table).find(`.site-${site}`).append(`<div class='training-days-lost'>Training days lost: ${days_lost_avg.toFixed(2)}</div>`);
|
||||
}
|
||||
|
||||
|
||||
$(table).before($("<button>Toggle Summary</button>").click(() => {
|
||||
$(table).find(".rota-day").toggle();
|
||||
$(table).find(".worker-summary").toggle();
|
||||
|
||||
}))
|
||||
});
|
||||
@@ -53,6 +53,11 @@ tr:hover {
|
||||
background-color: lightblue;
|
||||
}
|
||||
|
||||
tr:hover .unavailable{
|
||||
|
||||
background-color: lightgray;
|
||||
}
|
||||
|
||||
th.worker {
|
||||
max-width: 100%;
|
||||
width: 200px;
|
||||
@@ -79,3 +84,25 @@ th.worker {
|
||||
position: absolute;
|
||||
display: none;
|
||||
}
|
||||
.site-summary {
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
.site-summary .site {
|
||||
border: 1px solid black;
|
||||
padding: 5px;
|
||||
margin: 20px;
|
||||
}
|
||||
|
||||
.site-name {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.worker-summary span {
|
||||
min-width: 160px;
|
||||
display: inline-flex;
|
||||
}
|
||||
|
||||
.training-days-lost {
|
||||
padding-top: 5px;
|
||||
}
|
||||
Reference in New Issue
Block a user