From 2b8190efb8a17fb2c58f98380c7df805f8798fdd Mon Sep 17 00:00:00 2001 From: Ross Date: Sun, 13 Jun 2021 21:14:21 +0100 Subject: [PATCH] update --- leave.csv | 50 ++++----- leave.py | 44 ++++---- rota.csv | 281 +++++++++++++++++--------------------------------- shifts.py | 52 ++++++++-- test.py | 106 ++++--------------- timetable.css | 16 ++- workers.py | 2 + 7 files changed, 223 insertions(+), 328 deletions(-) diff --git a/leave.csv b/leave.csv index cb2110f..d20833e 100644 --- a/leave.csv +++ b/leave.csv @@ -2,8 +2,8 @@ Rota 2021/2022,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Name,,Stephanie Bailey,Luciana Calovi Motschenbacher,Layla Bell,Seren Peters,Alex wood,Salma Aslam,Max Ireland,Charles Finan,Paul Ward,Tom Welsh,Matt Murphey,Delilah Trimmer,Max Finzel,Zainab Sharaf,Maththew O'Brien,Kyaw Tint,Nicolas Dziadulewicz,Jean Skumar,Michael Tomek,Vilim Kalamar,Dhuvresh Patel,Khalil Madbak,Georgina Edwards,Jenn Haw fong,Paul Jenkins,Jenna Millington,Amoolya Mannava,Ross Kruger,Sophie McGlade,Rebecca Murphy,Natasha Hougham,Jon Skinner,Fiona Lyall,Joel Lim,Wijhdan Abusrewil,Mark Haley,Andrew MacCormick,Alexander Sanchez - cabello,Sayed Hashim Alqarooni,Chong Yew Ng,Matthew Thorley,Harriet Conley,Cameron Bullock,Alexander Wijnberg,Christian Greer,Alan Eccles,Hannah Lewis,Sarath Vennam,Amina Odeh,Mo Babsail,Richard Chaytor,Sherafghan,Madalina Drumea,Mark Fellows,Clement Leung Rotation,,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Exeter,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Derriford,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Torbay,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Truro,Barnstaple,Taunton,Taunton Grade,,ST2,ST2,ST2,ST3,ST3,ST3,ST3,ST4,ST4,ST5,ST5,ST5,ST2,ST2,ST2,ST2,ST3,ST3,ST3,ST3,ST3,ST4,ST4,ST4,ST4,ST4,ST5,ST5,ST5,ST5,ST5,ST6,ST6,ST2,ST2,ST2,ST2,ST3,ST4,ST4,ST4,ST5,ST2,ST2,ST3,ST3,ST3,ST4,ST4,ST5,ST5,ST5 (until dec),ST3,ST2,ST4 -PROC site,,Derriford,,,Torbay,,,,Derriford,,,,Derriford,Derriford,,,,,,,,,,,,Derriford,,,Derriford,,Exeter,,,,,,Derriford,Derriford,,,,,Plymouth,Exeter,,,,,,,,,Derriford,,NA,NA -%FTE,,100,100,100,100,100,60,100,100,100,100,100,60,100,100,100,100,100,60,80,100,100,100,80,100,100,60,100,100,80,100,100,100,100,100,60,100,100,100,100,100,100,60,100,100,100,80,100,100,100,100,100,100,0,0,0 +PROC site,,Derriford,,,Torbay,Exeter,,,Derriford,,,,Derriford,Derriford,,Torbay,,,,,,,,,,Derriford,,,Derriford,,Exeter,,,,,,Derriford,Derriford,,,,,Plymouth,Exeter,,,,,,,,,Derriford,,NA,NA +%FTE,,100,100,100,100,100,60,100,100,100,100,100,60,100,100,100,100,100,60,80,100,100,100,80,100,100,60,100,100,80,100,100,0,0,100,60,100,100,100,100,100,100,60,100,100,100,80,100,100,100,100,100,100,0,0,0 NWD,,,,,,,Thursday/Friday,,Tuesday/Thursday,,,Thursday,Monday/Tuesday,,,,,,Thursday/Friday,Wednesday,,,,Friday,,,,,,Friday,,,,,,Monday/Tuesday,,,,,,,monday/thursday,,,,Friday,,,,,,,,, Flexible NWD,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, End Date,,,,,,,,,,,,04/02/22,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,01/12/21,,, @@ -65,8 +65,8 @@ Date,Exams,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 27/10/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, 28/10/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, 29/10/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -30/10/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -31/10/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +30/10/21,,,,,,A/L,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +31/10/21,,,,,,A/L,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, 1/11/21,Pre 2a,,,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,,,,,,Pre 2a,,Pre 2a,,,,,,,, 2/11/21,Pre 2a,,,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,,,,,,Pre 2a,,Pre 2a,,,,,,,, 3/11/21,Pre 2a,,,,Pre 2a,Pre 2a,Mat leave,Pre 2a,,,,,,,,,,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,Pre 2a,,,Mat leave,,,,OOPT,,,,,Pre 2a,,,Pre 2a,,,,,,,Pre 2a,,Pre 2a,,,,,,,, @@ -86,15 +86,15 @@ Date,Exams,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 17/11/21,2A,,,,2A,2A,Mat leave,2A,,,,,,,,,,2A,2A,2A,2A,2A,2A,2A,,,Mat leave,,,,OOPT,,,,,2A,,,2A,,,,,,,2A,,2A,,,,,,,, 18/11/21,,,,,,,Mat leave,,,,,S/L,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, 19/11/21,,,,,,,Mat leave,,,,,S/L,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -20/11/21,,,,,,,Mat leave,,,,,S/L,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -21/11/21,,,,,,,Mat leave,,,,,S/L,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -22/11/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -23/11/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -24/11/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -25/11/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -26/11/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -27/11/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, -28/11/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +20/11/21,,,,,,A/L,Mat leave,,,,,S/L,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +21/11/21,,,,,,A/L,Mat leave,,,,,S/L,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +22/11/21,,,,,,A/L,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +23/11/21,,,,,,A/L,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +24/11/21,,,,,,A/L,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +25/11/21,,,,,,A/L,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +26/11/21,,,,,,A/L,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +27/11/21,,,,,,A/L,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, +28/11/21,,,,,,A/L,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, 29/11/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, 30/11/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, 1/12/21,,,,,,,Mat leave,,,,,,,,,,,,,,,,,,,,Mat leave,,,,OOPT,,,,,,,,,,,,,,,,,,,,,,,,, @@ -270,18 +270,18 @@ Date,Exams,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 20/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 21/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 22/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -23/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -24/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -25/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -26/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -27/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -28/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -29/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -30/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -31/5/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -1/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -2/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, -3/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +23/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +24/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +25/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +26/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +27/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +28/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +29/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +30/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +31/5/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +1/6/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +2/6/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, +3/6/22,,,,,,,,,,,,CCT,,,,A/L,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 4/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 5/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 6/6/22,,,,,,,,,,,,CCT,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, diff --git a/leave.py b/leave.py index ead298f..d0dde8a 100644 --- a/leave.py +++ b/leave.py @@ -1,13 +1,22 @@ import csv -def load_leave(Rota, file_name="leave.csv"): +def load_leave(Rota, use_live_rota): - shifts = Rota.get_shift_names() - - workers = {} + if use_live_rota: + from gsheets import Sheets + sheets = Sheets.from_files('~/client_secrets.json', '~/storage.json') + url = 'https://docs.google.com/spreadsheets/d/1SQh433Y2lj_KMyH3Ie7CeAl_x_Iq5XQ2GHeFm9ZDXYw/' + s = sheets.get(url) + s.sheets[2].to_csv("leave.csv", encoding='utf-8', dialect='excel') + + file_name="leave.csv" with open(file_name, newline="") as f: + shifts = Rota.get_shift_names() + + workers = {} + reader = csv.reader(f, delimiter=',', quotechar='|') leave = {} @@ -46,28 +55,28 @@ def load_leave(Rota, file_name="leave.csv"): workers[order[i]]["site_pref"] = lower_item if row_title == "Rotation": - workers[order[i]]["site"] = lower_item - + workers[order[i]]["site"] = lower_item + elif row_title == "Grade": - workers[order[i]]["grade"] = lower_item - + workers[order[i]]["grade"] = lower_item + elif row_title == "%FTE": workers[order[i]]["fte"] = lower_item - + elif row_title == "NWD": workers[order[i]]["nwd"] = lower_item - + elif row_title == "Flexible NWD": - workers[order[i]]["flexible_nwd"] = lower_item - + workers[order[i]]["flexible_nwd"] = lower_item + elif row_title == "End Date": - workers[order[i]]["end_date"] = lower_item - + workers[order[i]]["end_date"] = lower_item + elif row_title == "OOP": - workers[order[i]]["oop"] = lower_item - + workers[order[i]]["oop"] = lower_item + elif row_title == "Group": - workers[order[i]]["group"] = lower_item + workers[order[i]]["group"] = lower_item elif n > 11: @@ -83,5 +92,4 @@ def load_leave(Rota, file_name="leave.csv"): return workers - #load_leave() \ No newline at end of file diff --git a/rota.csv b/rota.csv index 6f71c3c..1d91944 100644 --- a/rota.csv +++ b/rota.csv @@ -1,186 +1,95 @@ -"Name","Layla Bell","Luciana Calovi Motschenbacher","Stephanie Bailey","Salma Aslam","Alex wood","Max Ireland","Seren Peters","Charles Finan","Paul Ward","Delilah Trimmer","Matt Murphey","Tom Welsh","Kyaw Tint","Maththew O'Brien","Max Finzel","Zainab Sharaf","Jean Skumar","Michael Tomek","Dhuvresh Patel","Nicolas Dziadulewicz","Vilim Kalamar","Jenna Millington","Georgina Edwards","Jenn Haw fong","Khalil Madbak","Paul Jenkins","Rebecca Murphy","Sophie McGlade","Amoolya Mannava","Natasha Hougham","Ross Kruger","Fiona Lyall","Jon Skinner","Wijhdan Abusrewil","Andrew MacCormick","Joel Lim","Mark Haley","Alexander Sanchez - cabello","Chong Yew Ng","Matthew Thorley","Sayed Hashim Alqarooni","Harriet Conley","Alexander Wijnberg","Cameron Bullock","Alan Eccles","Christian Greer","Hannah Lewis","Amina Odeh","Sarath Vennam","Sherafghan","Mo Babsail","Richard Chaytor" -"Site","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","truro","truro","truro","truro","truro","truro","truro","truro","truro","truro" -"Grade","2","2","2","3","3","3","3","4","4","5","5","5","2","2","2","2","3","3","3","3","3","4","4","4","4","4","5","5","5","5","5","6","6","2","2","2","2","3","4","4","4","5","2","2","3","3","3","4","4","5","5","5" -"FTE","100.0","100.0","100.0","60.0","100.0","100.0","100.0","100.0","100.0","60.0","100.0","100.0","100.0","100.0","100.0","100.0","60.0","80.0","100.0","100.0","100.0","60.0","80.0","100.0","100.0","100.0","100.0","80.0","100.0","100.0","100.0","100.0","100.0","60.0","100.0","100.0","100.0","100.0","100.0","100.0","100.0","60.0","100.0","100.0","80.0","100.0","100.0","100.0","100.0","100.0","100.0","100.0" -"Week 1 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 1 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 1 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 1 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 1 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 1 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 1 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 2 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 2 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 2 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 2 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 2 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 2 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 2 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 3 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 3 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 3 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 3 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 3 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 3 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 3 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 4 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 4 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 4 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 4 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 4 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 4 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 4 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 5 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 5 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 5 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 5 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 5 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 5 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 5 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 6 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 6 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 6 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 6 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 6 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 6 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 6 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 7 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 7 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 7 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 7 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 7 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 7 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 7 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 8 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 8 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 8 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 8 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 8 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 8 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 8 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 9 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 9 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 9 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 9 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 9 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 9 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 9 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 10 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 10 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 10 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 10 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 10 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 10 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 10 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 11 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 11 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 11 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 11 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 11 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 11 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 11 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 12 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 12 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 12 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 12 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 12 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 12 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 12 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 13 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 13 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 13 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 13 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 13 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 13 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 13 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 14 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 14 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 14 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 14 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 14 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 14 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 14 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 15 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 15 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 15 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 15 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 15 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 15 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 15 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 16 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 16 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 16 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 16 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 16 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 16 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 16 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 17 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 17 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 17 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 17 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 17 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 17 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 17 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 18 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 18 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 18 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 18 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 18 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 18 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 18 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 19 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 19 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 19 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 19 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 19 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 19 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 19 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 20 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 20 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 20 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 20 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 20 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 20 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 20 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 21 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 21 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 21 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 21 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 21 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 21 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 21 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 22 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 22 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 22 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 22 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 22 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 22 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 22 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 23 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 23 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 23 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 23 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 23 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 23 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 23 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 24 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 24 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 24 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 24 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 24 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 24 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 24 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 25 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 25 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 25 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 25 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 25 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 25 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 25 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 26 Day Mon","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 26 Day Tue","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 26 Day Wed","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 26 Day Thu","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 26 Day Fri","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 26 Day Sat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" -"Week 26 Day Sun","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","" +"Name","Layla Bell","Luciana Calovi Motschenbacher","Stephanie Bailey","Salma Aslam","Alex wood","Max Ireland","Seren Peters","Charles Finan","Paul Ward","Delilah Trimmer","Matt Murphey","Tom Welsh","Kyaw Tint","Maththew O'Brien","Max Finzel","Zainab Sharaf","Jean Skumar","Michael Tomek","Dhuvresh Patel","Nicolas Dziadulewicz","Vilim Kalamar","Jenna Millington","Georgina Edwards","Jenn Haw fong","Khalil Madbak","Paul Jenkins","Rebecca Murphy","Sophie McGlade","Amoolya Mannava","Natasha Hougham","Ross Kruger","Wijhdan Abusrewil","Andrew MacCormick","Joel Lim","Mark Haley","Alexander Sanchez - cabello","Chong Yew Ng","Matthew Thorley","Sayed Hashim Alqarooni","Harriet Conley","Alexander Wijnberg","Cameron Bullock","Alan Eccles","Christian Greer","Hannah Lewis","Amina Odeh","Sarath Vennam","Sherafghan","Mo Babsail","Richard Chaytor" +"Site","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","truro","truro","truro","truro","truro","truro","truro","truro","truro","truro" +"Grade","2","2","2","3","3","3","3","4","4","5","5","5","2","2","2","2","3","3","3","3","3","4","4","4","4","4","5","5","5","5","5","2","2","2","2","3","4","4","4","5","2","2","3","3","3","4","4","5","5","5" +"FTE","100.0","100.0","100.0","60.0","100.0","100.0","100.0","100.0","100.0","60.0","100.0","100.0","100.0","100.0","100.0","100.0","60.0","80.0","100.0","100.0","100.0","60.0","80.0","100.0","100.0","100.0","100.0","80.0","100.0","100.0","100.0","60.0","100.0","100.0","100.0","100.0","100.0","100.0","100.0","60.0","100.0","100.0","80.0","100.0","100.0","100.0","100.0","100.0","100.0","100.0" +"Week 1 Day Mon","","","","","","exeter_twilight","","night_weekday","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","night_weekday","","","truro_twilight","","","","" +"Week 1 Day Tue","","","","","","","","night_weekday","","","","exeter_twilight","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","night_weekday","","","","","","","" +"Week 1 Day Wed","","","exeter_twilight","","","","","night_weekday","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","night_weekday","","","","","","","" +"Week 1 Day Thu","","","","","","exeter_twilight","","night_weekday","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","night_weekday","","","truro_twilight","","","","" +"Week 1 Day Fri","","","","","night_weekend","","","","weekend_exeter","","","","","","","","","","","","night_weekend","","","","plymouth_twilight","","","","","","","","","","","","","weekend_torbay","night_weekend","","weekend_truro","","","","","","","","","" +"Week 1 Day Sat","","","","","night_weekend","","","","weekend_exeter","","","","","","","","","","","","night_weekend","","weekend_plymouth1","","","","","weekend_plymouth2","","","","","","","","","","weekend_torbay","night_weekend","","weekend_truro","","","","","","","","","" +"Week 1 Day Sun","","","","","night_weekend","","","","weekend_exeter","","","","","","","","","","","","night_weekend","","weekend_plymouth1","","","","","weekend_plymouth2","","","","","","","","","","weekend_torbay","night_weekend","","weekend_truro","","","","","","","","","" +"Week 2 Day Mon","","","","","","","","exeter_twilight","","","","night_weekday","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","night_weekday","","" +"Week 2 Day Tue","","","","","","","exeter_twilight","","","","","night_weekday","","","","","","","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","torbay_twilight","","","","","","","","","","truro_twilight","night_weekday","","" +"Week 2 Day Wed","","","","","","","","exeter_twilight","","","","night_weekday","","","","","","","","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","torbay_twilight","","","","","truro_twilight","","","","","","night_weekday","","" +"Week 2 Day Thu","exeter_twilight","","","","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","","","torbay_twilight","","","","","","truro_twilight","","","","","night_weekday","","" +"Week 2 Day Fri","","","weekend_exeter","","","","","","","","","","","","","","","","","","","","","","","","","","night_weekend","","plymouth_twilight","","weekend_torbay","","","night_weekend","","","","","","weekend_truro","","","night_weekend","","","","","" +"Week 2 Day Sat","","","weekend_exeter","","","","","","","","","","","","","","","weekend_plymouth1","","","","","","","","weekend_plymouth2","","","night_weekend","","","","weekend_torbay","","","night_weekend","","","","","","weekend_truro","","","night_weekend","","","","","" +"Week 2 Day Sun","","","weekend_exeter","","","","","","","","","","","","","","","weekend_plymouth1","","","","","","","","weekend_plymouth2","","","night_weekend","","","","weekend_torbay","","","night_weekend","","","","","","weekend_truro","","","night_weekend","","","","","" +"Week 3 Day Mon","","","","","","exeter_twilight","night_weekday","","","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","","","truro_twilight","","","","","","","","","night_weekday" +"Week 3 Day Tue","exeter_twilight","","","","","","night_weekday","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","","","truro_twilight","","","","","","","","","night_weekday" +"Week 3 Day Wed","","","exeter_twilight","","","","night_weekday","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","truro_twilight","","","","","night_weekday" +"Week 3 Day Thu","exeter_twilight","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","truro_twilight","","","","","night_weekday" +"Week 3 Day Fri","","","","","weekend_exeter","night_weekend","","","","","","","","","","","","plymouth_twilight","","","","","","","","","","","","","night_weekend","","","weekend_torbay","","","","","","","weekend_truro","","","night_weekend","","","","","","" +"Week 3 Day Sat","","","","","weekend_exeter","night_weekend","","","","","","","","","","","","","","","","","","","weekend_plymouth2","","","","","weekend_plymouth1","night_weekend","","","weekend_torbay","","","","","","","weekend_truro","","","night_weekend","","","","","","" +"Week 3 Day Sun","","","","","weekend_exeter","night_weekend","","","","","","","","","","","","","","","","","","","weekend_plymouth2","","","","","weekend_plymouth1","night_weekend","","","weekend_torbay","","","","","","","weekend_truro","","","night_weekend","","","","","","" +"Week 4 Day Mon","","","","","","","exeter_twilight","","","","","","","","","","","","","","plymouth_twilight","","night_weekday","","","","","","","","","","torbay_twilight","","","night_weekday","","","","","","truro_twilight","","","night_weekday","","","","","" +"Week 4 Day Tue","","","exeter_twilight","","","","","","","","","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","","","torbay_twilight","","","night_weekday","","","","","","truro_twilight","","","night_weekday","","","","","" +"Week 4 Day Wed","","exeter_twilight","","","","","","","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","torbay_twilight","","","night_weekday","","","","","truro_twilight","","","","night_weekday","","","","","" +"Week 4 Day Thu","","","","","exeter_twilight","","","","","","","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","","","torbay_twilight","","","night_weekday","","","","","","","","truro_twilight","night_weekday","","","","","" +"Week 4 Day Fri","","weekend_exeter","","","","","","","","","night_weekend","","","","","","","","night_weekend","plymouth_twilight","","","","","","","","","","","","weekend_torbay","","","","","","","","","","","","","","","","night_weekend","","weekend_truro" +"Week 4 Day Sat","","weekend_exeter","","","","","","","","","night_weekend","","weekend_plymouth2","weekend_plymouth1","","","","","night_weekend","","","","","","","","","","","","","weekend_torbay","","","","","","","","","","","","","","","","night_weekend","","weekend_truro" +"Week 4 Day Sun","","weekend_exeter","","","","","","","","","night_weekend","","weekend_plymouth2","weekend_plymouth1","","","","","night_weekend","","","","","","","","","","","","","weekend_torbay","","","","","","","","","","","","","","","","night_weekend","","weekend_truro" +"Week 5 Day Mon","exeter_twilight","","","","","night_weekday","","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","","night_weekday","","","","","","torbay_twilight","","","","","night_weekday","","","truro_twilight","","","","","","" +"Week 5 Day Tue","","","","","exeter_twilight","night_weekday","","","","","","","","","","","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","torbay_twilight","","","","","","night_weekday","","","truro_twilight","","","","","","" +"Week 5 Day Wed","","","","","","night_weekday","","","","","","exeter_twilight","","","","","","","","","","","plymouth_twilight","","","","","","","night_weekday","","","","","","torbay_twilight","","","","","night_weekday","","","","","","","truro_twilight","","" +"Week 5 Day Thu","","","exeter_twilight","","","night_weekday","","","","","","","","","","","","","","","","","plymouth_twilight","","","","","","","night_weekday","","","","","","torbay_twilight","","","","","night_weekday","","","truro_twilight","","","","","","" +"Week 5 Day Fri","weekend_exeter","","","","","","night_weekend","","","","","","plymouth_twilight","","","","","","","","","","","","","night_weekend","","","","","","","night_weekend","","weekend_torbay","","","","","","","","","","weekend_truro","","","","","" +"Week 5 Day Sat","weekend_exeter","","","","","","night_weekend","","","","","","","","weekend_plymouth1","","","","","","","","weekend_plymouth2","","","night_weekend","","","","","","","night_weekend","","weekend_torbay","","","","","","","","","","weekend_truro","","","","","" +"Week 5 Day Sun","weekend_exeter","","","","","","night_weekend","","","","","","","","weekend_plymouth1","","","","","","","","weekend_plymouth2","","","night_weekend","","","","","","","night_weekend","","weekend_torbay","","","","","","","","","","weekend_truro","","","","","" +"Week 6 Day Mon","","","","","","","","","","night_weekday","","exeter_twilight","","night_weekday","","","plymouth_twilight","","","","","","","","","","","","","","","","","","","torbay_twilight","","","night_weekday","","","","","","","truro_twilight","","","","" +"Week 6 Day Tue","","","","","","","","","","night_weekday","","exeter_twilight","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","","","","","","torbay_twilight","","","night_weekday","","","","","truro_twilight","","","","","","" +"Week 6 Day Wed","","","","","","","","exeter_twilight","","night_weekday","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","torbay_twilight","night_weekday","","","","","","truro_twilight","","","","","" +"Week 6 Day Thu","exeter_twilight","","","","","","","","","night_weekday","","","","night_weekday","","","","","","","","","","","","","","","","","plymouth_twilight","","","","","torbay_twilight","","","night_weekday","","","","","","","","","","","truro_twilight" +"Week 6 Day Fri","","","","","","","","","","","","weekend_exeter","","","","","","","","night_weekend","","","","","","plymouth_twilight","","","","","","","","","","","night_weekend","weekend_torbay","","","","night_weekend","","","","","","","weekend_truro","" +"Week 6 Day Sat","","","","","","","","","","","","weekend_exeter","weekend_plymouth2","","","","","","","night_weekend","","","","","","","","","weekend_plymouth1","","","","","","","","night_weekend","weekend_torbay","","","","night_weekend","","","","","","","weekend_truro","" +"Week 6 Day Sun","","","","","","","","","","","","weekend_exeter","weekend_plymouth2","","","","","","","night_weekend","","","","","","","","","weekend_plymouth1","","","","","","","","night_weekend","weekend_torbay","","","","night_weekend","","","","","","","weekend_truro","" +"Week 7 Day Mon","","","","","exeter_twilight","","","","night_weekday","","","","","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","night_weekday","","","","","","","torbay_twilight","","","","","truro_twilight","","","","","","" +"Week 7 Day Tue","","","","","","exeter_twilight","","","night_weekday","","","","","","plymouth_twilight","","night_weekday","","","","","","","","","","","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight" +"Week 7 Day Wed","","","","","","","","","night_weekday","","","exeter_twilight","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","truro_twilight","","","","","" +"Week 7 Day Thu","","exeter_twilight","","","","","","","night_weekday","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","" +"Week 7 Day Fri","","","","","","weekend_exeter","","","","","","","","","","","","","plymouth_twilight","","","","","","","night_weekend","","","","","","","night_weekend","","","weekend_torbay","","","","","","","","weekend_truro","","","","","","night_weekend" +"Week 7 Day Sat","","","","","","weekend_exeter","","","","","","","","","","","","weekend_plymouth2","","","","","","weekend_plymouth1","","night_weekend","","","","","","","night_weekend","","","weekend_torbay","","","","","","","","weekend_truro","","","","","","night_weekend" +"Week 7 Day Sun","","","","","","weekend_exeter","","","","","","","","","","","","weekend_plymouth2","","","","","","weekend_plymouth1","","night_weekend","","","","","","","night_weekend","","","weekend_torbay","","","","","","","","weekend_truro","","","","","","night_weekend" +"Week 8 Day Mon","","","exeter_twilight","","night_weekday","","","","","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","","","","","night_weekday","" +"Week 8 Day Tue","","","","","night_weekday","","","","","","exeter_twilight","","","","","night_weekday","","","plymouth_twilight","","","","","","","","","","","","","","","","","","","","torbay_twilight","","","truro_twilight","","","","","","","night_weekday","" +"Week 8 Day Wed","","","","","night_weekday","","","","","","exeter_twilight","","","","","night_weekday","","","","","","","","","","","","plymouth_twilight","","","","torbay_twilight","","","","","","","","","","truro_twilight","","","","","","","night_weekday","" +"Week 8 Day Thu","","","","","night_weekday","","exeter_twilight","","","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","truro_twilight","night_weekday","" +"Week 8 Day Fri","","night_weekend","","","","","","","","weekend_exeter","","","","","","","","","","","","","","","","","","","","plymouth_twilight","night_weekend","weekend_torbay","","","","","","night_weekend","","","","","weekend_truro","","","","","","","" +"Week 8 Day Sat","","night_weekend","","","","","","","","weekend_exeter","","","","","","","weekend_plymouth1","","","","weekend_plymouth2","","","","","","","","","","night_weekend","weekend_torbay","","","","","","night_weekend","","","","","weekend_truro","","","","","","","" +"Week 8 Day Sun","","night_weekend","","","","","","","","weekend_exeter","","","","","","","weekend_plymouth1","","","","weekend_plymouth2","","","","","","","","","","night_weekend","weekend_torbay","","","","","","night_weekend","","","","","weekend_truro","","","","","","","" +"Week 9 Day Mon","","","","","","","","exeter_twilight","","","","","","","night_weekday","","","","","","","","","","","","","","","plymouth_twilight","","","","","torbay_twilight","","night_weekday","","","","","","","","","","night_weekday","truro_twilight","","" +"Week 9 Day Tue","","","","","","","","","exeter_twilight","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","","","","","torbay_twilight","","night_weekday","","","","truro_twilight","","","","","","night_weekday","","","" +"Week 9 Day Wed","","","","","","","","","exeter_twilight","","","","plymouth_twilight","","night_weekday","","","","","","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","","night_weekday","","","truro_twilight" +"Week 9 Day Thu","","","","","","","","","exeter_twilight","","","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","","night_weekday","","truro_twilight","" +"Week 9 Day Fri","","","","","","","","weekend_exeter","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","night_weekend","","","","night_weekend","","","","","weekend_torbay","","","","","","","night_weekend","","weekend_truro","","" +"Week 9 Day Sat","","","","","","","","weekend_exeter","","","","","","weekend_plymouth1","","","","","","","","","","weekend_plymouth2","","","","","","night_weekend","","","","night_weekend","","","","","weekend_torbay","","","","","","","night_weekend","","weekend_truro","","" +"Week 9 Day Sun","","","","","","","","weekend_exeter","","","","","","weekend_plymouth1","","","","","","","","","","weekend_plymouth2","","","","","","night_weekend","","","","night_weekend","","","","","weekend_torbay","","","","","","","night_weekend","","weekend_truro","","" +"Week 10 Day Mon","","exeter_twilight","","","","","","","","","night_weekday","","night_weekday","","","","","","","","","","","","","","","plymouth_twilight","","","","","torbay_twilight","","","","","night_weekday","","","","","","","","","truro_twilight","","","" +"Week 10 Day Tue","","","","","","","","","exeter_twilight","","night_weekday","","night_weekday","","","","","","","","","","","","","","","plymouth_twilight","","","","","torbay_twilight","","","","","night_weekday","","","","","","","","","truro_twilight","","","" +"Week 10 Day Wed","","","","","","","","","","exeter_twilight","night_weekday","","night_weekday","","","","","","","","","","","","","","","","","","plymouth_twilight","","torbay_twilight","","","","","night_weekday","","","","","truro_twilight","","","","","","","" +"Week 10 Day Thu","","exeter_twilight","","","","","","","","","night_weekday","","night_weekday","","","","","","","","","","","","","plymouth_twilight","","","","","","","torbay_twilight","","","","","night_weekday","","","","","","","","truro_twilight","","","","" +"Week 10 Day Fri","weekend_exeter","","","","","","","","night_weekend","","","","","","","plymouth_twilight","","","","","","","","","","","","","night_weekend","","","","","","night_weekend","","weekend_torbay","","","","","","","","","","weekend_truro","","","" +"Week 10 Day Sat","weekend_exeter","","","","","","","","night_weekend","","","","","","weekend_plymouth1","","","","","","","","","","","","","weekend_plymouth2","night_weekend","","","","","","night_weekend","","weekend_torbay","","","","","","","","","","weekend_truro","","","" +"Week 10 Day Sun","weekend_exeter","","","","","","","","night_weekend","","","","","","weekend_plymouth1","","","","","","","","","","","","","weekend_plymouth2","night_weekend","","","","","","night_weekend","","weekend_torbay","","","","","","","","","","weekend_truro","","","" +"Week 11 Day Mon","","night_weekday","","","","","","","","","exeter_twilight","","","","","","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","","torbay_twilight","","","","","","","","","","","","","","truro_twilight","night_weekday","" +"Week 11 Day Tue","","night_weekday","","","","","","","","","exeter_twilight","","","","","","","","","","","","","night_weekday","","","","","","plymouth_twilight","","","","torbay_twilight","","","","","","","","truro_twilight","","","","","","","night_weekday","" +"Week 11 Day Wed","","night_weekday","","","","","","","","","exeter_twilight","","","","","","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","","torbay_twilight","","","","","","","","","","","","","","","night_weekday","truro_twilight" +"Week 11 Day Thu","","night_weekday","","","exeter_twilight","","","","","","","","","","","","","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","torbay_twilight","","","","","","","","","","","","","","","night_weekday","truro_twilight" +"Week 11 Day Fri","","","","","","","weekend_exeter","night_weekend","","","","","","","","","","","plymouth_twilight","","","","","","night_weekend","","","","","","","","","","","","","","weekend_torbay","","","night_weekend","weekend_truro","","","","","","","" +"Week 11 Day Sat","","","","","","","weekend_exeter","night_weekend","","","","","","","","weekend_plymouth1","","","","","","","","","night_weekend","","","","","weekend_plymouth2","","","","","","","","","weekend_torbay","","","night_weekend","weekend_truro","","","","","","","" +"Week 11 Day Sun","","","","","","","weekend_exeter","night_weekend","","","","","","","","weekend_plymouth1","","","","","","","","","night_weekend","","","","","weekend_plymouth2","","","","","","","","","weekend_torbay","","","night_weekend","weekend_truro","","","","","","","" +"Week 12 Day Mon","","","night_weekday","","","exeter_twilight","","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","","night_weekday","truro_twilight","","","" +"Week 12 Day Tue","","","night_weekday","","","","","","exeter_twilight","","","","","","","","","night_weekday","","","plymouth_twilight","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","","night_weekday","truro_twilight","","","" +"Week 12 Day Wed","","","night_weekday","","","","","exeter_twilight","","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight","night_weekday","","","","" +"Week 12 Day Thu","","","night_weekday","","","","exeter_twilight","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","","night_weekday","","","","truro_twilight" +"Week 12 Day Fri","","","","","","","","","","","weekend_exeter","","","","","","","","","night_weekend","","","","","","","","","","plymouth_twilight","","","","","night_weekend","weekend_torbay","","","","","","","","","","","night_weekend","","weekend_truro","" +"Week 12 Day Sat","","","","","","","","","","","weekend_exeter","","","weekend_plymouth2","","","","","weekend_plymouth1","night_weekend","","","","","","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","","","","","night_weekend","","weekend_truro","" +"Week 12 Day Sun","","","","","","","","","","","weekend_exeter","","","weekend_plymouth2","","","","","weekend_plymouth1","night_weekend","","","","","","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","","","","","night_weekend","","weekend_truro","" +"Week 13 Day Mon","night_weekday","exeter_twilight","","","","","","","","","","","","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","torbay_twilight","","","","","","night_weekday","","","","truro_twilight","","" +"Week 13 Day Tue","night_weekday","","","","","","exeter_twilight","","","","","","","","","","","","","","","","","","","plymouth_twilight","","night_weekday","","","","","","","","","","torbay_twilight","","","","","","night_weekday","","truro_twilight","","","","" +"Week 13 Day Wed","night_weekday","","","","","","","","","exeter_twilight","","","","","","","","","","","","","","","","","","night_weekday","","","plymouth_twilight","","","","","","","torbay_twilight","","","","","","night_weekday","","truro_twilight","","","","" +"Week 13 Day Thu","night_weekday","","","","exeter_twilight","","","","","","","","","","","","","","","","","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","torbay_twilight","","","","","","night_weekday","","","","","truro_twilight","" +"Week 13 Day Fri","","","weekend_exeter","","","","","","","","","night_weekend","","plymouth_twilight","","","","","","","","","","night_weekend","","","","","","","","","","night_weekend","","","weekend_torbay","","","","","","","","","weekend_truro","","","","" +"Week 13 Day Sat","","","weekend_exeter","","","","","","","","","night_weekend","","","","weekend_plymouth2","","","","","","","","night_weekend","weekend_plymouth1","","","","","","","","","night_weekend","","","weekend_torbay","","","","","","","","","weekend_truro","","","","" +"Week 13 Day Sun","","","weekend_exeter","","","","","","","","","night_weekend","","","","weekend_plymouth2","","","","","","","","night_weekend","weekend_plymouth1","","","","","","","","","night_weekend","","","weekend_torbay","","","","","","","","","weekend_truro","","","","" diff --git a/shifts.py b/shifts.py index 73956f6..f051a17 100644 --- a/shifts.py +++ b/shifts.py @@ -74,6 +74,9 @@ class SingleShift(object): self.total_shifts = length * len(days) * len(shift_days) + def __str__(self): + return f"name: {self.name}, site: {self.site}, length: {self.length}, balance weighting: {self.balance_weighting}, balance offset: {self.balance_offset}, hard_constrain: {self.hard_constrain_shift}, workers required : {self.workers_required}, rota on nwds {self.rota_on_nwds}, assign as block: {self.assign_as_block}, force as block: {self.force_as_block}, constraints: {self.constraints}, total shifts: {self.total_shifts}" + def get_shift_summary(self): """ Returns a text summary of the shift @@ -154,7 +157,7 @@ class RotaBuilder(object): "prevent_monday_and_tuesday_after_full_weekends": [], "prevent_fridays_before_full_weekends": [], "prevent_thursdays_before_full_weekends": [], - "avoid_st1_first_month": False, + "avoid_st2_first_month": False, } # Generate a map for week, day combinations to a given date @@ -612,7 +615,7 @@ class RotaBuilder(object): for worker in self.workers: if self.constraint_options[ - "avoid_st1_first_month"] and worker.grade == 2: + "avoid_st2_first_month"] and worker.grade == 2: # Avoid ST1s on the first month self.model.constraints.add(0 == sum( self.model.works[worker.id, week, day, shift] for week, @@ -1201,8 +1204,10 @@ class RotaBuilder(object): self.full_time_equivalent = sum([w.fte_adj for w in self.workers]) self.full_time_equivalent_sites = {} + self.workers_at_sites = {} for site in self.sites: + self.workers_at_sites[site] = [w for w in self.workers if w.site == site] self.full_time_equivalent_sites[site] = sum( [w.fte_adj for w in self.workers if w.site == site]) @@ -1579,6 +1584,8 @@ class RotaResults(object): timetable = [] + timetable.append("

Rota start date: {} ({} weeks)

".format(self.rota.start_date.isoformat(), self.rota.weeks[-1])) + date_row = [""] n = 0 @@ -1590,7 +1597,13 @@ class RotaResults(object): timetable.append("{}".format( "".join(date_row))) + current_site = "" + for worker in self.rota.workers: + if worker.site != current_site: + timetable.append("{} n={} fte={}".format(worker.site, len(self.rota.workers_at_sites[worker.site]), self.rota.full_time_equivalent_sites[worker.site])) + current_site = worker.site + shifts = [] if worker.nwd is not None: nwds = ", ".join(worker.nwd) @@ -1619,13 +1632,20 @@ class RotaResults(object): break title = "{} ({})".format(shift_name, d) css_class = day + unavailable_reason = "" if model.available[worker.id, week, day] > 0: available = True - unavailable_reason = "" else: available = False css_class = "unavailable" - unavailable_reason = self.rota.unavailable_to_work + try: + unavailable_reason = self.rota.unavailable_to_work_reason[(worker.id, week, day)] + except KeyError: + print("Error getting reason") + print(worker.id, worker.name) + print("Week {}, Day {}".format(week, day)) + unavailable_reason = "????" + title = "{} / {}".format(title, unavailable_reason) bank_holiday = "" if d in bank_holiday_map: @@ -1641,8 +1661,8 @@ class RotaResults(object): self.rota.work_requests_map[(worker.id, week, day)]) shift_tds.append( - "{}" - .format(title, css_class, shift_name, available, d, week, + "{}" + .format(title, css_class, shift_name, available, unavailable_reason, d, week, day, requests, bank_holiday, a)) shift_count = "" @@ -1652,8 +1672,8 @@ class RotaResults(object): shift_count_dict[s] = c shift_count = shift_count + "{}: {}, ".format(s, c) - worker_td = "{} ({}) [{}]".format( - worker.site, worker.site, nwds, worker.site, worker.name, + worker_td = "{} ({}) [{}]".format( + worker.site, worker.site, nwds, worker.site, worker.name, worker.name, worker.fte, worker.fte_adj, worker.end_date, worker_targets, json.dumps(shift_count_dict), worker.weekend_shift_target_number, worker.night_at_derriford, worker.name, worker.grade, @@ -1697,8 +1717,22 @@ class RotaResults(object):
{}
+
+

Rota settings

+
+
+        {}
+        
+
+ +
+

Shifts settings

+
+ {} +
+
- """.format(table_name, "\n".join(timetable)) + """.format(table_name, "\n".join(timetable), json.dumps(self.rota.constraint_options, indent=4), "
".join(str(i) for i in self.rota.shifts)) if include_html_tag: html = """ diff --git a/test.py b/test.py index e67af0b..4eb4c32 100644 --- a/test.py +++ b/test.py @@ -6,34 +6,29 @@ from pyomo.opt.results import SolverStatus from shifts import SingleShift, RotaBuilder, RotaResults, days from workers import Worker -from copy import deepcopy - -import math - -import scipy.stats as stats - -import statistics - import datetime -import itertools -import operator + import sys -use_neos = True +use_neos = False +use_cplex = False solve = True -weeks_to_rota = 26 +weeks_to_rota = 13 time_to_run = 28500 -allow = 10000 +#allow = 5000 +ratio = 0.5 + +use_live_rota = True -use_cplex = True sites = ("truro", "exeter", "torbay", "barnstaple", "plymouth") Rota = RotaBuilder(datetime.date(2021, 9, 6), +#Rota = RotaBuilder(datetime.date(2021, 11, 8), weeks_to_rota=weeks_to_rota, - balance_offset_modifier=1, + balance_offset_modifier=2, max_weekend_frequency=2, max_night_frequency=2) @@ -44,7 +39,8 @@ Rota.constraint_options["constrain_time_off_after_nights"] = True Rota.constraint_options["balance_nights_across_sites"] = True Rota.constraint_options["balance_blocks"] = True Rota.constraint_options["balance_weekends"] = True -Rota.constraint_options["avoid_st1_first_month"] = True +Rota.constraint_options["balance_bank_holidays"] = True +Rota.constraint_options["avoid_st2_first_month"] = True Rota.constraint_options["max_weekends"] = 20 Rota.constraint_options["prevent_monday_and_tuesday_after_full_weekends"] = [ "truro", "torbay", "exeter" @@ -142,7 +138,7 @@ Rota.build_shifts_and_workers() if load_leave: import leave - workers = leave.load_leave(Rota) + workers = leave.load_leave(Rota, use_live_rota) # Import trainee data @@ -250,37 +246,6 @@ else: work_requests = w["requests"] site_pref = w["site_pref"] - #print(nwds, end_date, oop) - # Rota.add_worker( - # Worker(Rota, n, name, site.lower(), int(grade[2]), 100, - # )) - # if name.startswith(("Alex", "Michal", "Ross")): - # Rota.add_worker( - # Worker(Rota, - # n, - # name, - # site.lower(), - # int(grade[2]), - # int(fte), - # nwds, - # end_date, - # oop, - # work_requests=(("2020/09/07", "night_weekday"), ))) - # continue - # if "Salma" in name: - # Rota.add_worker( - # Worker(Rota, - # n, - # name, - # site.lower(), - # int(grade[2]), - # int(fte), - # nwds, - # end_date, - # oop, - # work_requests=(("2020/12/25", - # "exeter_twilight"), ))) - # continue Rota.add_worker( Worker(Rota, n, @@ -315,7 +280,8 @@ else: opt = SolverFactory('cbc') # choose a solver #opt = SolverFactory('ipopt') # choose a solver - opt.options['allow'] = allow + #opt.options['allow'] = allow + opt.options['ratio'] = ratio opt.options['seconds'] = time_to_run print("Solving") @@ -330,7 +296,8 @@ else: options={ "seconds": time_to_run, #"allow": allow, - "threads": 2, + "ratio": ratio, + "threads": 10, }, logfile="test.log" ) # solve the model with the, options="seconds=60" selected solver @@ -361,41 +328,4 @@ ResultsHolder.get_weekend_details() with open("test.html", "w") as f: f.write(ResultsHolder.get_worker_timetable_html(True)) -ResultsHolder.export_rota_to_csv("rota") - -# for i in ResultsHolder.rota.model.blocks_worker_shift_count: -# n = ResultsHolder.rota.model.blocks_worker_shift_count[i].value - -# if n > 0: -# print(i, n) -# #print(ResultsHolder.rota.model.blocks_assigned[i].value) -# else: -# pass -# #print("SHIT") -# for i in ResultsHolder.rota.model.blocks_assigned: -# n = ResultsHolder.rota.model.blocks_assigned[i].value -# if n: -# print(i, n) -# #print(ResultsHolder.rota.model.blocks_assigned[i].value) -# else: -# pass - -# ResultsHolder.export_rota_to_csv("rotas/"+rot) -# with open("cest", "a") as f: -# f.write(rot) -# f.write("\n\n") - -# for s in Rota.shifts: -# f.write(s.get_shift_summary()) -# f.write("\n") -# f.write("\n\n") - -# f.write(worker_timetable_brief) -# f.write("\n\n\n") -#workers_no_pref = ResultsHolder.get_no_preference(Rota.model.no_pref) # list with the non-satisfied workers (work on Sat but not on Sun) - -# worker_night_block = ResultsHolder.get_night_blocks() -# worker_shift_summary = ResultsHolder.get_shift_summary() -# multi = ResultsHolder.get_multinight() - -#break +ResultsHolder.export_rota_to_csv("rota") \ No newline at end of file diff --git a/timetable.css b/timetable.css index 9c852fe..060eb00 100644 --- a/timetable.css +++ b/timetable.css @@ -182,7 +182,19 @@ table { } -[data-night-at-derriford="1"] { - background-color: yellow; +[data-night-at-derriford="0"] { + border: 1px dotted orange ; /* Attribute has this exact value */ +} + +th.site-title { + transform: unset; +} + +.name { + max-width: 90px; + display:inline-block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } \ No newline at end of file diff --git a/workers.py b/workers.py index 6886c55..1fa3a20 100644 --- a/workers.py +++ b/workers.py @@ -61,6 +61,7 @@ class Worker: for weeks_days in Rota.weeks_days_product[days_to_work:]: week, day = weeks_days Rota.unavailable_to_work.add((self.id, week, day)) + Rota.unavailable_to_work_reason[(self.id, week, day)] = "END DATE" if oop is not None: start_oop, end_oop = oop @@ -88,6 +89,7 @@ class Worker: days_until_oop:days_until_oop + oop_length]: week, day = weeks_days Rota.unavailable_to_work.add((self.id, week, day)) + Rota.unavailable_to_work_reason[(self.id, week, day)] = "OOP ()".format(oop) if pref_not_to_work is not None: # loop throught dates converting to week / day combination