add bank holiday shifts

This commit is contained in:
Ross
2021-06-15 22:39:09 +01:00
parent ffb63a3978
commit 01005176a5
6 changed files with 143 additions and 159 deletions
+2 -2
View File
@@ -1,9 +1,9 @@
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
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 Twilights,Derriford Twilights,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,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
%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,60,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,,,
1 Rota 2021/2022
2 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
3 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 Twilights Derriford Derriford Twilights Torbay Torbay Torbay Torbay Torbay Torbay Torbay Torbay Torbay Truro Truro Truro Truro Truro Truro Truro Truro Truro Truro Barnstaple Taunton Taunton
4 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
5 PROC site Derriford Torbay Exeter Derriford Derriford Derriford Torbay Derriford Derriford Exeter Derriford Derriford Plymouth Exeter Derriford NA NA
6 %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 100 0 60 100 60 100 100 100 100 100 100 60 100 100 100 80 100 100 100 100 100 100 0 0 0
7 NWD Thursday/Friday Tuesday/Thursday Thursday Monday/Tuesday Thursday/Friday Wednesday Friday Friday Monday/Tuesday monday/thursday Friday
8 Flexible NWD
9 End Date 04/02/22 01/12/21
+3
View File
@@ -50,6 +50,9 @@ def load_leave(Rota, use_live_rota):
lower_item = r[i].lower()
if lower_item == "derriford":
lower_item = "plymouth"
if lower_item == "derriford twilights":
lower_item = "plymouth_twilights"
if row_title == "PROC site":
workers[order[i]]["site_pref"] = lower_item
+46 -95
View File
@@ -1,95 +1,46 @@
"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","","","",""
"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","Mo Babsail","Richard Chaytor","Sherafghan"
"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_twilights","plymouth_twilights","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","60.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","","","","","","","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","","","","night_weekday","","truro_twilight","","","",""
"Week 1 Day Tue","exeter_twilight","","","","","","","","","","","night_weekday","","","","","","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","","night_weekday","","truro_twilight","","","",""
"Week 1 Day Wed","","","","","","","","","","exeter_twilight","","night_weekday","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","","","","","","","","","","","","","","","","","","night_weekday","","truro_twilight","","","",""
"Week 1 Day Thu","","","","","","","exeter_twilight","","","","","night_weekday","","","","plymouth_twilight","","","","","night_weekday","","","","","","","","","","","","","","","","","","","","","","","","","night_weekday","","","truro_twilight","","",""
"Week 1 Day Fri","","","","","night_weekend","","","","","","","","","plymouth_twilight","","","","","","","","","","","","night_weekend","","","","","","","","","","","","","","","","","","","","","","","","night_weekend","",""
"Week 1 Day Sat","","weekend_exeter","","","night_weekend","","","","","","","","weekend_plymouth1","","","","","","","","","","","","","night_weekend","","","","weekend_plymouth2","","","","","","weekend_torbay","","","","","","","","","","","weekend_truro","","","night_weekend","",""
"Week 1 Day Sun","","weekend_exeter","","","night_weekend","","","","","","","","weekend_plymouth1","","","","","","","","","","","","","night_weekend","","","","weekend_plymouth2","","","","","","weekend_torbay","","","","","","","","","","","weekend_truro","","","night_weekend","",""
"Week 2 Day Mon","","","","","","","","","","","exeter_twilight","","","","","","","","","","","","","night_weekday","","","","night_weekday","","","plymouth_twilight","","","","","","","","","","","","","","truro_twilight","","","","","","","night_weekday"
"Week 2 Day Tue","exeter_twilight","","","","","","","","","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","","night_weekday","","","","","","","","","","","","","","","","","","","","","truro_twilight","","","night_weekday"
"Week 2 Day Wed","","","","","exeter_twilight","","","","","","","","","","","","","","plymouth_twilight","","","","","night_weekday","","","","night_weekday","","","","","","","","","","","","","","","truro_twilight","","","","","","","","","night_weekday"
"Week 2 Day Thu","","","","","exeter_twilight","","","","","","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","night_weekday","","","","","","","","","","","","","","","","","","","","truro_twilight","","","","night_weekday"
"Week 2 Day Fri","","","","","","","","","","","","","","","","","","night_weekend","","","","","","","","","","","plymouth_twilight","","","","","","","","","","","","night_weekend","","","","night_weekend","","","","","","",""
"Week 2 Day Sat","","","","","","","","weekend_exeter","","","","","","weekend_plymouth1","","","","night_weekend","","","","","","","weekend_plymouth2","","","","","","","","","","","","","","","weekend_torbay","night_weekend","","","","night_weekend","","","","","","weekend_truro",""
"Week 2 Day Sun","","","","","","","","weekend_exeter","","","","","","weekend_plymouth1","","","","night_weekend","","","","","","","weekend_plymouth2","","","","","","","","","","","","","","","weekend_torbay","night_weekend","","","","night_weekend","","","","","","weekend_truro",""
"Week 3 Day Mon","","","","","","night_weekday","","","exeter_twilight","night_weekday","","","","","","","","","plymouth_twilight","","","","","","","","","","","night_weekday","","","","","","","","","","","","","truro_twilight","","","","","","","","",""
"Week 3 Day Tue","","exeter_twilight","","","","night_weekday","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","","","","","","night_weekday","","","","","","","","","","","","","","","","","","","","truro_twilight","",""
"Week 3 Day Wed","exeter_twilight","","","","","night_weekday","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","","","","","night_weekday","","","","","","","","","","","","","truro_twilight","","","","","","","","",""
"Week 3 Day Thu","","","","","exeter_twilight","night_weekday","","","","night_weekday","","","","","","","","","plymouth_twilight","","","","","","","","","","","night_weekday","","","","","","","","","","","","","","","","","","","","","","truro_twilight"
"Week 3 Day Fri","","","","","","","","","","","","night_weekend","","","","","","","","night_weekend","","","","","","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","","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","","night_weekday","","","","","","","","","night_weekday","","","","","","","","","plymouth_bank_holidays","","plymouth_twilight","","","","","","","","torbay_twilight","","","","","","","","","truro_twilight","","","","","","night_weekday",""
"Week 4 Day Tue","","","","","","","","night_weekday","exeter_twilight","","","","","","","","night_weekday","","","","","","","","plymouth_bank_holidays","","","","plymouth_twilight","","","","","","torbay_twilight","","","","","","","","","","","","","","truro_twilight","","night_weekday",""
"Week 4 Day Wed","exeter_twilight","","","","","","","night_weekday","","","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","","","","","","","","","","","","","","","","","","","truro_twilight","night_weekday",""
"Week 4 Day Thu","","","","","","","","night_weekday","exeter_twilight","","","","","","plymouth_twilight","","night_weekday","","","","","","","","","","","","","","","","","","","","","","","","","","","truro_twilight","","","","","","","night_weekday",""
"Week 4 Day Fri","","","","","","","","","","","night_weekend","","","","","plymouth_twilight","","","night_weekend","","","","","","","","","","","","night_weekend","","","","","","","","","","","","","","","","","","","","",""
"Week 4 Day Sat","","","","","","","weekend_exeter","","","","night_weekend","","","","","","","","night_weekend","","","","","","","","","weekend_plymouth1","weekend_plymouth2","","night_weekend","","","weekend_torbay","","","","","","","","","","","","weekend_truro","","","","","",""
"Week 4 Day Sun","","","","","","","weekend_exeter","","","","night_weekend","","","","","","","","night_weekend","","","","","","","","","weekend_plymouth1","weekend_plymouth2","","night_weekend","","","weekend_torbay","","","","","","","","","","","","weekend_truro","","","","","",""
"Week 5 Day Mon","","exeter_twilight","","","","","","","","","","","","","","plymouth_twilight","","","","","","","","","night_weekday","","","","","","","plymouth_bank_holidays","","","","","","","","night_weekday","torbay_twilight","","truro_twilight","","","","night_weekday","","","","",""
"Week 5 Day Tue","","","exeter_twilight","","","","","","","","","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","","","","","","","","","","","night_weekday","","","","truro_twilight","","","night_weekday","","","","",""
"Week 5 Day Wed","","","","","","","","","","","exeter_twilight","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","","night_weekday","","","","","","","night_weekday","","","","truro_twilight",""
"Week 5 Day Thu","exeter_twilight","","","","","","","","","","","","","","","plymouth_twilight","","","","","","","","","night_weekday","","","","","","","","","","","","","","","night_weekday","","","","","","","night_weekday","","","truro_twilight","",""
"Week 5 Day Fri","","","","","","","","","night_weekend","","","","","night_weekend","","","","","","","","","","","","","","","","","plymouth_twilight","","","","","","","","night_weekend","","","","","","","","","","","","",""
"Week 5 Day Sat","","","","","","weekend_exeter","","","night_weekend","","","","","night_weekend","weekend_plymouth1","","","","","","","","","weekend_plymouth2","","","","","","","","","","","weekend_torbay","","","","night_weekend","","","","weekend_truro","","","","","","","","",""
"Week 5 Day Sun","","","","","","weekend_exeter","","","night_weekend","","","","","night_weekend","weekend_plymouth1","","","","","","","","","weekend_plymouth2","","","","","","","","","","","weekend_torbay","","","","night_weekend","","","","weekend_truro","","","","","","","","",""
"Week 6 Day Mon","","","","","","","night_weekday","","","","exeter_twilight","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","","","","night_weekday","","","","","","","","","","","","truro_twilight","","",""
"Week 6 Day Tue","","exeter_twilight","","","","","night_weekday","","","","","","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","night_weekday","","","","","","","","truro_twilight","","","","","","",""
"Week 6 Day Wed","","","","","","","night_weekday","","","","exeter_twilight","","","","","","","","","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","truro_twilight","","","","","","","","",""
"Week 6 Day Thu","","","","","","","night_weekday","","exeter_twilight","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","","","","","","","","","","night_weekday","","","","","","","truro_twilight","","","","","","","",""
"Week 6 Day Fri","","","night_weekend","","","","","","","","","","","","plymouth_twilight","","","","","","","","","","","","","","","","","","","","","","","night_weekend","","","","","","","","","","","night_weekend","","",""
"Week 6 Day Sat","weekend_exeter","","night_weekend","","","","","","","","","","","","","","weekend_plymouth2","","","","","","","","","weekend_plymouth1","","","","","","","","weekend_torbay","","","","night_weekend","","","","","","","","","","","night_weekend","","","weekend_truro"
"Week 6 Day Sun","weekend_exeter","","night_weekend","","","","","","","","","","","","","","weekend_plymouth2","","","","","","","","","weekend_plymouth1","","","","","","","","weekend_torbay","","","","night_weekend","","","","","","","","","","","night_weekend","","","weekend_truro"
1 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 Mo Babsail Richard Chaytor Sherafghan
2 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_twilights plymouth_twilights torbay torbay torbay torbay torbay torbay torbay torbay torbay truro truro truro truro truro truro truro truro truro truro
3 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
4 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 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
5 Week 1 Day Mon exeter_twilight exeter_twilight night_weekday night_weekday plymouth_twilight night_weekday night_weekday plymouth_twilight torbay_twilight night_weekday night_weekday truro_twilight
6 Week 1 Day Tue exeter_twilight night_weekday exeter_twilight night_weekday plymouth_twilight night_weekday night_weekday plymouth_twilight torbay_twilight truro_twilight night_weekday night_weekday truro_twilight
7 Week 1 Day Wed exeter_twilight night_weekday exeter_twilight night_weekday plymouth_twilight night_weekday plymouth_twilight night_weekday torbay_twilight truro_twilight night_weekday night_weekday truro_twilight
8 Week 1 Day Thu exeter_twilight exeter_twilight night_weekday night_weekday plymouth_twilight plymouth_twilight night_weekday night_weekday torbay_twilight night_weekday night_weekday truro_twilight truro_twilight
9 Week 1 Day Fri night_weekend weekend_exeter plymouth_twilight night_weekend plymouth_twilight night_weekend weekend_torbay night_weekend weekend_truro night_weekend
10 Week 1 Day Sat weekend_exeter night_weekend weekend_exeter weekend_plymouth1 night_weekend weekend_plymouth1 night_weekend weekend_plymouth2 weekend_plymouth2 weekend_torbay weekend_torbay night_weekend weekend_truro weekend_truro night_weekend
11 Week 1 Day Sun weekend_exeter night_weekend weekend_exeter weekend_plymouth1 night_weekend weekend_plymouth1 night_weekend weekend_plymouth2 weekend_plymouth2 weekend_torbay weekend_torbay night_weekend weekend_truro weekend_truro night_weekend
12 Week 2 Day Mon exeter_twilight exeter_twilight night_weekday plymouth_twilight night_weekday night_weekday night_weekday plymouth_twilight torbay_twilight truro_twilight truro_twilight night_weekday
13 Week 2 Day Tue exeter_twilight exeter_twilight night_weekday plymouth_twilight night_weekday night_weekday night_weekday plymouth_twilight torbay_twilight truro_twilight night_weekday
14 Week 2 Day Wed exeter_twilight exeter_twilight night_weekday plymouth_twilight night_weekday night_weekday night_weekday plymouth_twilight torbay_twilight truro_twilight truro_twilight night_weekday
15 Week 2 Day Thu exeter_twilight exeter_twilight night_weekday plymouth_twilight plymouth_twilight night_weekday night_weekday night_weekday torbay_twilight truro_twilight truro_twilight night_weekday
16 Week 2 Day Fri weekend_exeter night_weekend night_weekend plymouth_twilight plymouth_twilight weekend_torbay night_weekend night_weekend weekend_truro night_weekend night_weekend
17 Week 2 Day Sat weekend_exeter weekend_exeter weekend_plymouth1 weekend_plymouth1 night_weekend weekend_plymouth2 weekend_plymouth2 night_weekend weekend_torbay night_weekend weekend_torbay night_weekend weekend_truro night_weekend night_weekend weekend_truro
18 Week 2 Day Sun weekend_exeter weekend_exeter weekend_plymouth1 weekend_plymouth1 night_weekend weekend_plymouth2 weekend_plymouth2 night_weekend weekend_torbay night_weekend weekend_torbay night_weekend weekend_truro night_weekend night_weekend weekend_truro
19 Week 3 Day Mon exeter_twilight night_weekday night_weekday exeter_twilight night_weekday plymouth_twilight plymouth_twilight night_weekday night_weekday torbay_twilight truro_twilight night_weekday
20 Week 3 Day Tue exeter_twilight exeter_twilight night_weekday night_weekday night_weekday plymouth_twilight plymouth_twilight night_weekday night_weekday torbay_twilight truro_twilight truro_twilight night_weekday
21 Week 3 Day Wed exeter_twilight exeter_twilight night_weekday night_weekday night_weekday plymouth_twilight night_weekday plymouth_twilight night_weekday torbay_twilight truro_twilight truro_twilight night_weekday
22 Week 3 Day Thu exeter_twilight exeter_twilight night_weekday night_weekday night_weekday plymouth_twilight plymouth_twilight night_weekday night_weekday torbay_twilight truro_twilight night_weekday truro_twilight
23 Week 3 Day Fri weekend_exeter night_weekend night_weekend plymouth_twilight night_weekend night_weekend plymouth_twilight weekend_torbay weekend_truro night_weekend night_weekend
24 Week 3 Day Sat weekend_exeter weekend_exeter night_weekend night_weekend weekend_plymouth2 weekend_plymouth1 night_weekend weekend_plymouth2 weekend_plymouth1 night_weekend weekend_torbay weekend_torbay weekend_truro weekend_truro night_weekend night_weekend
25 Week 3 Day Sun weekend_exeter weekend_exeter night_weekend night_weekend weekend_plymouth2 weekend_plymouth1 night_weekend weekend_plymouth2 weekend_plymouth1 night_weekend weekend_torbay weekend_torbay weekend_truro weekend_truro night_weekend night_weekend
26 Week 4 Day Mon exeter_twilight exeter_twilight night_weekday night_weekday plymouth_twilight night_weekday plymouth_bank_holidays plymouth_twilight torbay_twilight torbay_twilight night_weekday truro_twilight truro_twilight night_weekday night_weekday
27 Week 4 Day Tue exeter_twilight night_weekday exeter_twilight plymouth_twilight night_weekday night_weekday plymouth_bank_holidays plymouth_twilight torbay_twilight night_weekday truro_twilight night_weekday truro_twilight night_weekday
28 Week 4 Day Wed exeter_twilight exeter_twilight night_weekday plymouth_twilight night_weekday plymouth_twilight night_weekday torbay_twilight night_weekday truro_twilight night_weekday truro_twilight night_weekday
29 Week 4 Day Thu exeter_twilight night_weekday exeter_twilight plymouth_twilight night_weekday night_weekday torbay_twilight night_weekday truro_twilight truro_twilight night_weekday night_weekday
30 Week 4 Day Fri weekend_exeter night_weekend plymouth_twilight night_weekend plymouth_twilight night_weekend weekend_torbay weekend_truro night_weekend
31 Week 4 Day Sat weekend_exeter weekend_exeter night_weekend weekend_plymouth2 weekend_plymouth1 night_weekend weekend_plymouth1 weekend_plymouth2 night_weekend weekend_torbay weekend_truro weekend_truro night_weekend
32 Week 4 Day Sun weekend_exeter weekend_exeter night_weekend weekend_plymouth2 weekend_plymouth1 night_weekend weekend_plymouth1 weekend_plymouth2 night_weekend weekend_torbay weekend_truro weekend_truro night_weekend
33 Week 5 Day Mon exeter_twilight exeter_twilight night_weekday plymouth_twilight plymouth_twilight night_weekday night_weekday plymouth_bank_holidays torbay_twilight night_weekday torbay_twilight night_weekday truro_twilight truro_twilight night_weekday
34 Week 5 Day Tue exeter_twilight exeter_twilight night_weekday plymouth_twilight plymouth_twilight night_weekday night_weekday torbay_twilight night_weekday night_weekday truro_twilight truro_twilight night_weekday
35 Week 5 Day Wed night_weekday exeter_twilight exeter_twilight plymouth_twilight plymouth_twilight night_weekday night_weekday torbay_twilight night_weekday night_weekday night_weekday truro_twilight truro_twilight
36 Week 5 Day Thu exeter_twilight exeter_twilight night_weekday plymouth_twilight plymouth_twilight night_weekday night_weekday torbay_twilight night_weekday night_weekday truro_twilight night_weekday truro_twilight
37 Week 5 Day Fri weekend_exeter night_weekend night_weekend plymouth_twilight night_weekend night_weekend plymouth_twilight night_weekend weekend_torbay night_weekend weekend_truro
38 Week 5 Day Sat weekend_exeter weekend_exeter night_weekend night_weekend night_weekend weekend_plymouth1 weekend_plymouth2 weekend_plymouth2 night_weekend night_weekend weekend_torbay weekend_torbay night_weekend weekend_truro weekend_truro
39 Week 5 Day Sun weekend_exeter weekend_exeter night_weekend night_weekend night_weekend weekend_plymouth1 weekend_plymouth2 weekend_plymouth2 night_weekend night_weekend weekend_torbay weekend_torbay night_weekend weekend_truro weekend_truro
40 Week 6 Day Mon night_weekday night_weekday exeter_twilight exeter_twilight night_weekday plymouth_twilight plymouth_twilight night_weekday night_weekday torbay_twilight night_weekday truro_twilight truro_twilight
41 Week 6 Day Tue exeter_twilight night_weekday night_weekday exeter_twilight night_weekday plymouth_twilight night_weekday plymouth_twilight night_weekday torbay_twilight night_weekday truro_twilight truro_twilight
42 Week 6 Day Wed night_weekday exeter_twilight night_weekday exeter_twilight night_weekday night_weekday plymouth_twilight plymouth_twilight night_weekday torbay_twilight night_weekday truro_twilight truro_twilight
43 Week 6 Day Thu exeter_twilight night_weekday exeter_twilight night_weekday plymouth_twilight night_weekday night_weekday plymouth_twilight night_weekday torbay_twilight night_weekday truro_twilight truro_twilight
44 Week 6 Day Fri night_weekend weekend_exeter plymouth_twilight night_weekend plymouth_twilight night_weekend night_weekend weekend_torbay night_weekend night_weekend weekend_truro
45 Week 6 Day Sat weekend_exeter night_weekend weekend_exeter weekend_plymouth2 weekend_plymouth2 night_weekend weekend_plymouth1 weekend_plymouth1 weekend_torbay night_weekend night_weekend weekend_torbay night_weekend night_weekend weekend_truro weekend_truro
46 Week 6 Day Sun weekend_exeter night_weekend weekend_exeter weekend_plymouth2 weekend_plymouth2 night_weekend weekend_plymouth1 weekend_plymouth1 weekend_torbay night_weekend night_weekend weekend_torbay night_weekend night_weekend weekend_truro 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 night_weekday truro_twilight
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 night_weekday truro_twilight
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
+74 -55
View File
@@ -50,6 +50,7 @@ class SingleShift(object):
assign_as_block=False,
force_as_block=False,
hard_constrain_shift=True,
bank_holidays_only=False,
constraints=[],
):
self.site = sites
@@ -71,11 +72,13 @@ class SingleShift(object):
self.assign_as_block = assign_as_block
self.force_as_block = force_as_block
self.constraints = constraints
self.bank_holidays_only = bank_holidays_only
self.total_shifts = length * len(days) * len(shift_days)
#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}"
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):
"""
@@ -456,7 +459,7 @@ class RotaBuilder(object):
workers_required,
site_required,
) in self.get_required_workers_and_site_combinations():
print(week, day, shift, workers_required, site_required)
#print(week, day, shift, workers_required, site_required)
self.model.constraints.add(workers_required == sum(
self.model.works[worker.id, week, day, shift]
for worker in self.workers if worker.site in site_required))
@@ -487,24 +490,26 @@ class RotaBuilder(object):
# Define a maximum number hours that can be worked per week
# NOTE: this works on a calander week not a 7 day period
def maxHoursPerWeekRule(model, wid, week):
return 72 >= sum(
shift.length * model.works[wid, week, day, shift.name]
for day, shift in self.get_day_shiftclass_combinations())
# TODO: consider fixing
#def maxHoursPerWeekRule(model, wid, week):
# return 72 >= sum(
# shift.length * model.works[wid, week, day, shift.name]
# for day, shift in self.get_day_shiftclass_combinations())
self.model.max_hours_per_week_constraint = Constraint(
[worker.id for worker in self.workers],
self.weeks,
rule=maxHoursPerWeekRule)
#self.model.max_hours_per_week_constraint = Constraint(
# [worker.id for worker in self.workers],
# self.weeks,
# rule=maxHoursPerWeekRule)
# Define an upper limit for hours worked over the rota period
def maxHoursRule(model, wid):
return 8000 >= sum(
shift.length * model.works[wid, week, day, shift.name]
for week, day, shift in self.get_all_shiftclass_combinations())
#def maxHoursRule(model, wid):
# return 8000 >= sum(
# shift.length * model.works[wid, week, day, shift.name]
# for week, day, shift in self.get_all_shiftclass_combinations())
self.model.max_hours_constraint = Constraint(
[worker.id for worker in self.workers], rule=maxHoursRule)
#self.model.max_hours_constraint = Constraint(
# [worker.id for worker in self.workers], rule=maxHoursRule)
# Limit to 1 ST2 (or below) on a night shift
def nightShiftMaxSTRule(model, week, shift):
@@ -643,8 +648,8 @@ class RotaBuilder(object):
): # Each site specfies which sites self.workers can fullfill it
# calaculate the total number of shifts that need assigning over the rota
total_shifts = (len(self.weeks) * len(shift.shift_days) *
shift.workers_required)
#total_shifts = (len(self.weeks) * len(shift.shift_days) *
total_shifts = self.shift_counts[shift] * shift.workers_required
full_time_equivalent_joined = sum([
self.full_time_equivalent_sites[i] for i in shift.site
@@ -659,7 +664,7 @@ class RotaBuilder(object):
worked, allocated = worker.previous_shifts[shift.name]
target_shifts = target_shifts + float(allocated) - float(worked)
print(worker.name, shift.name, target_shifts)
worker.shift_target_number[shift.name] = target_shifts
if shift.hard_constrain_shift:
@@ -1022,17 +1027,17 @@ class RotaBuilder(object):
n3week, n3day = weeks_days[n]
n3 = 0
if self.get_shift_names_by_day(day):
if self.get_shift_names_by_week_day(week, day):
# Unable to work (hard constraint not preference)
self.model.constraints.add(
self.model.available[worker.id, week, day] >= sum(
self.model.works[worker.id, week, day, shift]
for shift in self.get_shift_names_by_day(day)))
for shift in self.get_shift_names_by_week_day(week, day)))
# single shift per day
self.model.constraints.add(1 >= sum(
self.model.works[worker.id, week, day, shift]
for shift in self.get_shift_names_by_day(day)))
for shift in self.get_shift_names_by_week_day(week, day)))
# if working a night ensure preceeding (1) or subsequent (2) shifts can only be nights
@@ -1050,7 +1055,7 @@ class RotaBuilder(object):
constraint_shift.name] +
sum(n1 *
self.model.works[worker.id, nweek, nday, shift]
for shift in self.get_shift_names_by_day(nday)
for shift in self.get_shift_names_by_week_day(nweek, nday)
if shift != constraint_shift.name))
self.model.constraints.add(
@@ -1058,28 +1063,28 @@ class RotaBuilder(object):
constraint_shift.name] +
sum(n2 * self.model.works[worker.id, n2week, n2day,
shift]
for shift in self.get_shift_names_by_day(n2day)
for shift in self.get_shift_names_by_week_day(n2week, n2day)
if shift != constraint_shift.name))
# self.model.constraints.add(
# 1 >= self.model.works[worker.id, week, day,
# constraint_shift.name] +
# sum(n3 * self.model.works[worker.id, n3week, n3day,
# shift]
# for shift in self.get_shift_names_by_day(n3day)
# for shift in self.get_shift_names_by_week_day(week, n3day)
# if shift != constraint_shift.name))
self.model.constraints.add(
1 >= self.model.works[worker.id, week, day,
constraint_shift.name] +
sum(p1 *
self.model.works[worker.id, pweek, pday, shift]
for shift in self.get_shift_names_by_day(pday)
for shift in self.get_shift_names_by_week_day(pweek, pday)
if shift != constraint_shift.name))
self.model.constraints.add(
1 >= self.model.works[worker.id, week, day,
constraint_shift.name] +
sum(p2 * self.model.works[worker.id, p2week, p2day,
shift]
for shift in self.get_shift_names_by_day(p2day)
for shift in self.get_shift_names_by_week_day(p2week, p2day)
if shift != constraint_shift.name))
self.define_objectives()
@@ -1227,14 +1232,14 @@ class RotaBuilder(object):
"""
self.shifts.extend(shifts)
def get_shift_names_by_day(self, day: DayStr):
def get_shift_names_by_week_day(self, week, day: DayStr):
"""Returns the shifts required for a specific day
Returns:
set: Set of ShiftName
"""
return self.day_shifts_dict[day]
return self.week_day_shifts_dict[(week, day)]
def get_shift_by_name(self, name):
"""
@@ -1260,28 +1265,42 @@ class RotaBuilder(object):
self.shifts_by_name = {}
self.shift_names = [] # type: List[ShiftName]
self.day_shifts_dict = {day: set() for day in days}
#self.week_day_shifts_dict = {(week, day): set() for week in self.weeks for day in days}
self.week_day_shifts_dict = {}
self.sites = set()
self.week_day_shift_product = []
self.week_day_shiftclass_product = []
self.shift_counts = defaultdict(int)
for week, day in self.weeks_days_product:
self.week_day_shifts_dict[(week, day)] = set()
for s in self.shifts:
if s.bank_holidays_only:
if self.week_day_date_map[(week, day)] in bank_holiday_map:
self.week_day_shift_product.append((week, day, s.name))
self.week_day_shiftclass_product.append((week, day, s))
self.week_day_shifts_dict[(week, day)].add(s.name)
self.shift_counts[s] = self.shift_counts[s] + 1
else:
if day in s.shift_days:
self.week_day_shift_product.append((week, day, s.name))
self.week_day_shiftclass_product.append((week, day, s))
self.week_day_shifts_dict[(week, day)].add(s.name)
self.shift_counts[s] = self.shift_counts[s] + 1
#print(self.week_day_shift_product)
for s in self.shifts:
self.shifts_by_name[s.name] = s
self.shift_names.append(s.name)
for day in s.shift_days:
self.day_shifts_dict[day].add(s.name)
#for day in s.shift_days:
# self.week_day_shifts_dict[(week, day)].add(s.name)
for site in s.site:
self.sites.add(site)
self.week_day_shift_product = []
self.week_day_shiftclass_product = []
for week, day in self.weeks_days_product:
for s in self.shifts:
if day in s.shift_days:
self.week_day_shift_product.append((week, day, s.name))
self.week_day_shiftclass_product.append((week, day, s))
self.sites.add(site)
# Todo replace with week_day.....
self.day_shift_product = []
self.day_shiftclass_product = []
for s in self.shifts:
@@ -1384,7 +1403,7 @@ class RotaBuilder(object):
"""
l = []
for week, day, shift in self.week_day_shiftclass_product:
if day in shift.shift_days:
#if day in shift.shift_days:
l.append((week, day, shift.name, shift.workers_required,
shift.site))
@@ -1429,7 +1448,7 @@ class RotaBuilder(object):
w = defaultdict(list)
for worker in self.workers:
print(worker)
#print(worker)
w[worker.site].append(worker)
l = []
@@ -1474,7 +1493,7 @@ class RotaResults(object):
for worker in self.rota.workers:
i = ""
for shift in self.rota.get_shift_names_by_day(day):
for shift in self.rota.get_shift_names_by_week_day(week, day):
if works[worker.id, week, day, shift].value == 1:
i = shift
@@ -1531,7 +1550,7 @@ class RotaResults(object):
w = ["{:20}".format(worker.name)]
for week, day in self.rota.get_week_day_combinations():
a = "-"
for shift in self.rota.get_shift_names_by_day(day):
for shift in self.rota.get_shift_names_by_week_day(week, day):
if model.works[worker.id, week, day, shift].value == 1:
shifts.append(shift)
a = shift[0]
@@ -1624,7 +1643,7 @@ class RotaResults(object):
a = "-"
shift_name = ""
for shift in self.rota.get_shift_names_by_day(day):
for shift in self.rota.get_shift_names_by_week_day(week, day):
if model.works[worker.id, week, day, shift].value == 1:
shifts.append(shift)
a = shift[0]
@@ -1673,13 +1692,13 @@ class RotaResults(object):
shift_count = shift_count + "{}: {}, ".format(s, c)
worker_td = "<td title='Site: {}' class='worker {}' data-nwds='{}' data-site='{}' data-worker='{}' data-fte='{}' data-fte_adj='{}' data-end_date='{}' data-worker-targets='{}' data-shift-counts='{}' data-weekend-target='{}' data-night-at-derriford='{}'><span class='name' title='{}'>{}</span> ({}) [{}]</td>".format(
worker.site, worker.site, nwds, worker.site, worker.name, worker.name,
worker.site, worker.site, nwds, worker.site, 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,
worker.weekend_shift_target_number, worker.night_at_derriford, worker.name, worker.name, worker.grade,
worker.fte)
print(shift_count_dict)
#print(shift_count_dict)
shift_count = shift_count + "#weekends_worked: {}\\#".format(
model.worker_weekend_count[worker.id].value)
@@ -1687,7 +1706,7 @@ class RotaResults(object):
bank_holiday_count = model.bank_holiday_count[worker.id].value
bank_holiday_count_w = model.bank_holiday_count_w[
worker.id].value - 1
print(worker.name, bank_holiday_count, bank_holiday_count_w)
#print(worker.name, bank_holiday_count, bank_holiday_count_w)
timetable.append("<tr class='worker-row'>{}{}</tr>".format(
worker_td, "".join(shift_tds)))
#timetable.append("<tr>{}</tr>".format("".join(w), shift_count))
@@ -1837,14 +1856,13 @@ class RotaResults(object):
site].value,
self.rota.model.night_per_site_t2[week, block,
site].value)
"""
def get_night_details(self):
for worker in self.rota.workers:
print(
"{:20}".format(worker.name),
"worked: {},".format(
self.rota.model.night_shift_count[(worker.id)].value),
"target: {},".format(
worker.shift_target_number["night_weekday"] +
worker.shift_target_number["night_weekend"]),
"target_diff: {},".format(
@@ -1854,6 +1872,7 @@ class RotaResults(object):
"balance: {},".format(
self.rota.model.night_shift_count_w[worker.id].value),
)
"""
def get_weekend_details(self):
for worker in self.rota.workers:
+17 -6
View File
@@ -10,11 +10,11 @@ import datetime
import sys
use_neos = False
use_neos = True
use_cplex = False
solve = True
weeks_to_rota = 13
weeks_to_rota = 6
time_to_run = 28500
#allow = 5000
@@ -25,8 +25,8 @@ use_live_rota = False
sites = ("truro", "exeter", "torbay", "barnstaple", "plymouth")
Rota = RotaBuilder(datetime.date(2021, 9, 6),
#Rota = RotaBuilder(datetime.date(2021, 11, 8),
#Rota = RotaBuilder(datetime.date(2021, 9, 6),
Rota = RotaBuilder(datetime.date(2021, 12, 6),
weeks_to_rota=weeks_to_rota,
balance_offset_modifier=2,
max_weekend_frequency=2,
@@ -60,7 +60,7 @@ Rota.add_shifts(
days[:4],
balance_offset=3,
assign_as_block=True),
SingleShift(("plymouth", ),
SingleShift(("plymouth", "plymouth_twilights"),
"plymouth_twilight",
12.5,
days[:5],
@@ -104,6 +104,15 @@ Rota.add_shifts(
workers_required=1,
rota_on_nwds=True,
force_as_block=True),
SingleShift(("plymouth", "plymouth_twilights"),
"plymouth_bank_holidays",
8,
days[5:],
balance_offset=3,
workers_required=1,
rota_on_nwds=True,
force_as_block=False,
bank_holidays_only=True),
SingleShift(
(sites),
"night_weekday",
@@ -264,6 +273,8 @@ else:
print("Building model")
Rota.build_shifts_and_workers()
Rota.sites.add("plymouth_twilights")
Rota.build_model()
print(Rota.get_worker_details())
@@ -319,7 +330,7 @@ worker_timetable = ResultsHolder.get_worker_timetable()
worker_timetable_brief = ResultsHolder.get_worker_timetable_brief(
show_prefs=False, show_unavailable=False)
#print(worker_timetable_brief)
print(worker_timetable_brief)
#print(Rota.get_workers_total_fte())
ResultsHolder.get_weekend_details()
+1 -1
View File
@@ -106,7 +106,7 @@ class Worker:
day)] = 1 / (len(pref_not_to_work) + 1)
if not_available_to_work is not None:
print(not_available_to_work)
#print(not_available_to_work)
# loop throught dates converting to week / day combination
for date, reason in not_available_to_work:
days_from_start = (