diff --git a/.vscode/launch.json b/.vscode/launch.json index d322412..4670127 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,7 +9,7 @@ "name": "Python: Test", "type": "python", "request": "launch", - "program": "${workspaceFolder}/test.py", + "program": "${workspaceFolder}/test_rota.py", "console": "integratedTerminal" }, diff --git a/fixnights.csv b/fixnights.csv new file mode 100644 index 0000000..4c88ce4 --- /dev/null +++ b/fixnights.csv @@ -0,0 +1,186 @@ +"Name","Madalina Drumea","Layla Bell","Alex wood","Max Ireland","Seren Peters","Charles Finan","Paul Ward","Delilah Trimmer","Tom Welsh","Kyaw Tint","Maththew O'Brien","Max Finzel","Zainab Sharaf","Jean Skumar","Michael Tomek","Dhuvresh Patel","Nicolas Dziadulewicz","Vilim Kalamar","Georgina Edwards","Jenn Haw fong","Paul Jenkins","Amoolya Mannava","Rebecca Murphy","Ross Kruger","Fiona Lyall","Wijhdan Abusrewil","Andrew MacCormick","Joel Lim","Mark Haley","Alexander Sanchez - cabello","Chong Yew Ng","Matthew Thorley","Sayed Hashim Alqarooni","Harriet Conley","Jon Skinner","Alexander Wijnberg","Cameron Bullock","Alan Eccles","Christian Greer","Hannah Lewis","Amina Odeh","Sarath Vennam","Richard Chaytor","Mo Babsail","Sherafghan PROC" +"Site","barnstaple","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth_twilights","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay twilights","truro","truro","truro","truro","truro","truro","truro","truro","truro","truro no proc" +"Grade","3","2","3","3","3","4","4","5","5","2","2","2","2","3","3","3","3","3","4","4","4","5","5","5","6","2","2","2","2","3","4","4","4","5","6","2","2","3","3","3","4","4","5","5","5" +"FTE","80","100","100","100","100","100","100","80","100","100","100","100","100","60","80","100","100","100","80","100","100","100","100","100","60","100","100","100","100","100","100","100","100","60","100","100","100","80","100","100","100","100","100","100","100" +"Week 1 Day Mon","","","","","","night_weekday","exeter_twilight","","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","","","night_weekday","","","","","","","torbay_twilight","truro_twilight","","","","","","","","","" +"Week 1 Day Tue","","","","","","night_weekday","exeter_twilight","","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","truro_twilight","","","","" +"Week 1 Day Wed","","exeter_twilight","","","","night_weekday","","","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","night_weekday","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight" +"Week 1 Day Thu","","","exeter_twilight","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","","night_weekday","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","","truro_twilight","","","" +"Week 1 Day Fri","","","","weekend_exeter","night_weekend","","","","","","","","","","night_weekend","plymouth_twilight","","","","","","","","","","","","","","","weekend_torbay","","","","","weekend_truro","","","","","","","","night_weekend","" +"Week 1 Day Sat","","","","weekend_exeter","night_weekend","","","","","","","","","","night_weekend","","","","weekend_plymouth2","","","weekend_plymouth1","","","","","","","","","weekend_torbay","","","","","weekend_truro","","","","","","","","night_weekend","" +"Week 1 Day Sun","","","","weekend_exeter","night_weekend","","","","","","","","","","night_weekend","","","","weekend_plymouth2","","","weekend_plymouth1","","","","","","","","","weekend_torbay","","","","","weekend_truro","","","","","","","","night_weekend","" +"Week 2 Day Mon","","","exeter_twilight","","","","","","","","","plymouth_twilight","night_weekday","","","night_weekday","","","","","","","","","","","torbay_twilight","","","","","night_weekday","","","","","","","","","","","truro_twilight","","" +"Week 2 Day Tue","","","","","","","exeter_twilight","","","","","","night_weekday","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","","night_weekday","","torbay_twilight","","","","truro_twilight","","","","","","","" +"Week 2 Day Wed","","exeter_twilight","","","","","","","","","","","night_weekday","","","night_weekday","","","","","","","","","plymouth_twilight","","","","","","","night_weekday","","torbay_twilight","","","truro_twilight","","","","","","","","" +"Week 2 Day Thu","","","","","exeter_twilight","","","","","","","","night_weekday","","","night_weekday","","","plymouth_twilight","","","","","","","","torbay_twilight","","","","","night_weekday","","","","","","","","","","","","truro_twilight","" +"Week 2 Day Fri","night_weekend","","","","","weekend_exeter","night_weekend","","","","","","","","","","","","","night_weekend","","plymouth_twilight","","","","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","","" +"Week 2 Day Sat","night_weekend","","","","","weekend_exeter","night_weekend","","","","","weekend_plymouth2","","","","","weekend_plymouth1","","","night_weekend","","","","","","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","","" +"Week 2 Day Sun","night_weekend","","","","","weekend_exeter","night_weekend","","","","","weekend_plymouth2","","","","","weekend_plymouth1","","","night_weekend","","","","","","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","","" +"Week 3 Day Mon","","","","","exeter_twilight","","","","","plymouth_twilight","","","","","","","","","","","","night_weekday","","","","","torbay_twilight","night_weekday","","","","","","","","","","truro_twilight","","night_weekday","","","","","" +"Week 3 Day Tue","","exeter_twilight","","","","","","","","","","","","","plymouth_twilight","","","","","","","night_weekday","","","","","","night_weekday","","","","torbay_twilight","","","","","","","truro_twilight","night_weekday","","","","","" +"Week 3 Day Wed","","","","","","exeter_twilight","","","","plymouth_twilight","","","","","","","","","","","","night_weekday","","","","","torbay_twilight","night_weekday","","","","","","","","","","","","night_weekday","","","","","truro_twilight" +"Week 3 Day Thu","","","","","","","exeter_twilight","","","","","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","night_weekday","torbay_twilight","","","","","","","","truro_twilight","","","night_weekday","","","","","" +"Week 3 Day Fri","","","night_weekend","","weekend_exeter","","","","","","","","","","","plymouth_twilight","","night_weekend","","","","","","","","","","","","","weekend_torbay","","","night_weekend","","","","","weekend_truro","","","","","","" +"Week 3 Day Sat","","","night_weekend","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","night_weekend","weekend_plymouth1","","","","","","","","","","","","weekend_torbay","","","night_weekend","","","","","weekend_truro","","","","","","" +"Week 3 Day Sun","","","night_weekend","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","night_weekend","weekend_plymouth1","","","","","","","","","","","","weekend_torbay","","","night_weekend","","","","","weekend_truro","","","","","","" +"Week 4 Day Mon","","","","","","","","","exeter_twilight","","","plymouth_twilight","","night_weekday","","","","","","","","","","","","","","","","","","night_weekday","","","torbay_twilight","","night_weekday","","","","","","truro_twilight","","" +"Week 4 Day Tue","","","","","","","exeter_twilight","","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","","","night_weekday","","","torbay_twilight","","night_weekday","truro_twilight","","","","","","","" +"Week 4 Day Wed","","","exeter_twilight","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","night_weekday","","","","","","","truro_twilight","" +"Week 4 Day Thu","","","exeter_twilight","","","","","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","night_weekday","","","","","","","","truro_twilight" +"Week 4 Day Fri","","","","","","night_weekend","","weekend_exeter","","","","night_weekend","","","","","","","","","plymouth_twilight","","","","","","","weekend_torbay","","","","","night_weekend","","","","","","","weekend_truro","","","","","" +"Week 4 Day Sat","","","","","","night_weekend","","weekend_exeter","","","weekend_plymouth1","night_weekend","","","","","","","","","","","","weekend_plymouth2","","","","weekend_torbay","","","","","night_weekend","","","","","","","weekend_truro","","","","","" +"Week 4 Day Sun","","","","","","night_weekend","","weekend_exeter","","","weekend_plymouth1","night_weekend","","","","","","","","","","","","weekend_plymouth2","","","","weekend_torbay","","","","","night_weekend","","","","","","","weekend_truro","","","","","" +"Week 5 Day Mon","","exeter_twilight","","","night_weekday","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","night_weekday","","","torbay_twilight","","","","","","","","truro_twilight","","","","","","","" +"Week 5 Day Tue","","","","","night_weekday","","","","exeter_twilight","","","","","","","","","plymouth_twilight","","night_weekday","","","","","","","night_weekday","","","torbay_twilight","","","","","","","","","","","truro_twilight","","","","" +"Week 5 Day Wed","","","","","night_weekday","exeter_twilight","","","","","","","","","","","","","","night_weekday","","","","","plymouth_twilight","","night_weekday","","","","","","","torbay_twilight","","","truro_twilight","","","","","","","","" +"Week 5 Day Thu","","","","exeter_twilight","night_weekday","","","","","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","night_weekday","","","torbay_twilight","","","","","","","","","","truro_twilight","","","","","" +"Week 5 Day Fri","","weekend_exeter","","","","","","","night_weekend","plymouth_twilight","","","","","","","night_weekend","","","","","","","","","","","","weekend_torbay","","","","","","","night_weekend","","","","","weekend_truro","","","","" +"Week 5 Day Sat","","weekend_exeter","","","","","","","night_weekend","","","","","weekend_plymouth2","","","night_weekend","","weekend_plymouth1","","","","","","","","","","weekend_torbay","","","","","","","night_weekend","","","","","weekend_truro","","","","" +"Week 5 Day Sun","","weekend_exeter","","","","","","","night_weekend","","","","","weekend_plymouth2","","","night_weekend","","weekend_plymouth1","","","","","","","","","","weekend_torbay","","","","","","","night_weekend","","","","","weekend_truro","","","","" +"Week 6 Day Mon","night_weekday","","","night_weekday","exeter_twilight","","","","","","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","torbay_twilight","","","","","","","","","","","","","","","truro_twilight","","" +"Week 6 Day Tue","night_weekday","","","night_weekday","","","","exeter_twilight","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","","","","","","","","","","","truro_twilight","" +"Week 6 Day Wed","night_weekday","","","night_weekday","","","exeter_twilight","","","plymouth_twilight","","","","","","","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","","","","","","","" +"Week 6 Day Thu","night_weekday","","","night_weekday","","","exeter_twilight","","","","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","","","","","","","" +"Week 6 Day Fri","","","weekend_exeter","","","night_weekend","","","","","night_weekend","","","","","","plymouth_bank_holidays","","","plymouth_twilight","","","","","","","weekend_torbay","","","","","","","","","","","","","","","","night_weekend","weekend_truro","" +"Week 6 Day Sat","","","weekend_exeter","","","night_weekend","","","","weekend_plymouth2","night_weekend","","","","","","","weekend_plymouth1","","","","","","","","","weekend_torbay","","","","","","","","","","","","","","","","night_weekend","weekend_truro","" +"Week 6 Day Sun","","","weekend_exeter","","","night_weekend","","","","weekend_plymouth2","night_weekend","","","","","","","weekend_plymouth1","","","","","","","","","weekend_torbay","","","","","","","","","","","","","","","","night_weekend","weekend_truro","" +"Week 7 Day Mon","","exeter_twilight","","","","","","","night_weekday","","","plymouth_twilight","","","","","night_weekday","","","","","","plymouth_bank_holidays","","","","","","","","torbay_twilight","","","","","","night_weekday","truro_twilight","","","","","","","" +"Week 7 Day Tue","","","","","","","exeter_twilight","","night_weekday","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","","","night_weekday","","","truro_twilight","","","","","" +"Week 7 Day Wed","","","","","","exeter_twilight","","","night_weekday","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","","","","","","torbay_twilight","","","","","night_weekday","","","","truro_twilight","","","","" +"Week 7 Day Thu","","","","","exeter_twilight","","","","night_weekday","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","","","torbay_twilight","","","","","","","","night_weekday","","","","","truro_twilight","","","" +"Week 7 Day Fri","","night_weekend","","","","","weekend_exeter","","","","","","","","","","","","","","","night_weekend","plymouth_twilight","","","","","","","","","","","weekend_torbay","","","","night_weekend","","weekend_truro","","","","","" +"Week 7 Day Sat","","night_weekend","","","","","weekend_exeter","","","","","","","","weekend_plymouth2","weekend_plymouth1","","","","","","night_weekend","","","","","","","","","","","","weekend_torbay","","","","night_weekend","","weekend_truro","","","","","" +"Week 7 Day Sun","","night_weekend","","","","","weekend_exeter","","","","","","","","weekend_plymouth2","weekend_plymouth1","","","","","","night_weekend","","","","","","","","","","","","weekend_torbay","","","","night_weekend","","weekend_truro","","","","","" +"Week 8 Day Mon","","","night_weekday","","","","","","exeter_twilight","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","torbay_twilight","","","night_weekday","","","","","","","","","","","","truro_twilight","","" +"Week 8 Day Tue","","","night_weekday","","","","","exeter_twilight","","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","","","","night_weekday","","torbay_twilight","","","","","","","","","","truro_twilight","","" +"Week 8 Day Wed","","","night_weekday","","","exeter_twilight","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","","","night_weekday","torbay_twilight","","","","","","","","truro_twilight","","","","","" +"Week 8 Day Thu","","exeter_twilight","night_weekday","","","","","","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","","","","","night_weekday","torbay_twilight","","","","","","","truro_twilight","","","","","","" +"Week 8 Day Fri","","","","","","","","weekend_exeter","","night_weekend","","","","","","","","","","","","","plymouth_twilight","","","","","","","night_weekend","","","weekend_torbay","","","","weekend_truro","","","","","night_weekend","","","" +"Week 8 Day Sat","","","","","","","","weekend_exeter","","night_weekend","weekend_plymouth2","","","","","","","","","","weekend_plymouth1","","","","","","","","","night_weekend","","","weekend_torbay","","","","weekend_truro","","","","","night_weekend","","","" +"Week 8 Day Sun","","","","","","","","weekend_exeter","","night_weekend","weekend_plymouth2","","","","","","","","","","weekend_plymouth1","","","","","","","","","night_weekend","","","weekend_torbay","","","","weekend_truro","","","","","night_weekend","","","" +"Week 9 Day Mon","","","","","","exeter_twilight","night_weekday","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","plymouth_bank_holidays","torbay_twilight","","","","","","","","","","truro_twilight","","","","","","","night_weekday","","" +"Week 9 Day Tue","","","exeter_twilight","","","","night_weekday","","","","","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight","","","night_weekday","","" +"Week 9 Day Wed","","exeter_twilight","","","","","night_weekday","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","","","truro_twilight","night_weekday","","" +"Week 9 Day Thu","","","","","exeter_twilight","","night_weekday","","","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","torbay_twilight","","","","","","","truro_twilight","","","","","","","night_weekday","","" +"Week 9 Day Fri","","","","weekend_exeter","","","","","night_weekend","","","","night_weekend","plymouth_twilight","","","","","","","","","","","","","weekend_torbay","","","","","","","","","","","","","night_weekend","weekend_truro","","","","" +"Week 9 Day Sat","","","","weekend_exeter","","","","","night_weekend","","","","night_weekend","","","","","","","","","","weekend_plymouth1","weekend_plymouth2","","","weekend_torbay","","","","","","","","","","","","","night_weekend","weekend_truro","","","","" +"Week 9 Day Sun","","","","weekend_exeter","","","","","night_weekend","","","","night_weekend","","","","","","","","","","weekend_plymouth1","weekend_plymouth2","","","weekend_torbay","","","","","","","","","","","","","night_weekend","weekend_truro","","","","" +"Week 10 Day Mon","","","","","exeter_twilight","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","night_weekday","","","","torbay_twilight","","","","","","","","","truro_twilight","","","night_weekday","","","" +"Week 10 Day Tue","","","","","","","","exeter_twilight","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","night_weekday","","","torbay_twilight","","","","","","","","","","","","","night_weekday","truro_twilight","","" +"Week 10 Day Wed","","","","exeter_twilight","","","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","night_weekday","","","","torbay_twilight","","","","","","","","","","","truro_twilight","night_weekday","","","" +"Week 10 Day Thu","","","","exeter_twilight","","","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","night_weekday","","","torbay_twilight","","","","","","","","","","truro_twilight","","","night_weekday","","","" +"Week 10 Day Fri","","","","","night_weekend","","weekend_exeter","","","","","night_weekend","","","","","","","","plymouth_twilight","","","","","","","","","","","","night_weekend","weekend_torbay","","","","","weekend_truro","","","","","","","" +"Week 10 Day Sat","","","","","night_weekend","","weekend_exeter","","","","","night_weekend","","weekend_plymouth2","","","weekend_plymouth1","","","","","","","","","","","","","","","night_weekend","weekend_torbay","","","","","weekend_truro","","","","","","","" +"Week 10 Day Sun","","","","","night_weekend","","weekend_exeter","","","","","night_weekend","","weekend_plymouth2","","","weekend_plymouth1","","","","","","","","","","","","","","","night_weekend","weekend_torbay","","","","","weekend_truro","","","","","","","" +"Week 11 Day Mon","","","exeter_twilight","","","","","","","night_weekday","","","plymouth_twilight","","night_weekday","","","","","","","","","","","","torbay_twilight","","","","","","","night_weekday","","","","","truro_twilight","","","","","","" +"Week 11 Day Tue","","","exeter_twilight","","","","","","","night_weekday","","","","","night_weekday","","","","","","","","","plymouth_twilight","","","torbay_twilight","","","","","","","night_weekday","","","","","","","","truro_twilight","","","" +"Week 11 Day Wed","","exeter_twilight","","","","","","","","night_weekday","","","","","night_weekday","","","","","","","","","plymouth_twilight","","","torbay_twilight","","","","","","","night_weekday","","","","","","","","truro_twilight","","","" +"Week 11 Day Thu","","","","","","","exeter_twilight","","","night_weekday","","","","","night_weekday","","plymouth_twilight","","","","","","","","","","torbay_twilight","","","","","","","night_weekday","","","","","","","truro_twilight","","","","" +"Week 11 Day Fri","","","","night_weekend","","","","","weekend_exeter","","","","","","","","","","","","","plymouth_twilight","night_weekend","","","","","weekend_torbay","","","","","","","","","night_weekend","","","","","","weekend_truro","","" +"Week 11 Day Sat","","","","night_weekend","","","","","weekend_exeter","","weekend_plymouth2","","","","","","","","","weekend_plymouth1","","","night_weekend","","","","","weekend_torbay","","","","","","","","","night_weekend","","","","","","weekend_truro","","" +"Week 11 Day Sun","","","","night_weekend","","","","","weekend_exeter","","weekend_plymouth2","","","","","","","","","weekend_plymouth1","","","night_weekend","","","","","weekend_torbay","","","","","","","","","night_weekend","","","","","","weekend_truro","","" +"Week 12 Day Mon","","exeter_twilight","","","","","","","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","","","","","","","torbay_twilight","","","night_weekday","","night_weekday","","","truro_twilight","","","","" +"Week 12 Day Tue","","","","","exeter_twilight","","","","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","torbay_twilight","","","night_weekday","","night_weekday","truro_twilight","","","","","","" +"Week 12 Day Wed","","","","exeter_twilight","","","","","","","","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","torbay_twilight","","","night_weekday","","night_weekday","","","","","","truro_twilight","" +"Week 12 Day Thu","","","","","","","","","exeter_twilight","plymouth_twilight","","","","","","","","","","","","night_weekday","","","","","","","","","","","torbay_twilight","","","night_weekday","","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","","","","","","","","exeter_twilight","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","truro_twilight","","night_weekday","","","","","","" +"Week 13 Day Tue","","","","","","","","","exeter_twilight","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","truro_twilight","night_weekday","","","","","","" +"Week 13 Day Wed","","","","","exeter_twilight","","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","night_weekday","","truro_twilight","","","","" +"Week 13 Day Thu","","","","","","","","","exeter_twilight","plymouth_bank_holidays","","night_weekday","","","","","","","","","","","","","plymouth_twilight","","","","","","","torbay_twilight","night_weekday","","","","","","night_weekday","","","","truro_twilight","","" +"Week 13 Day Fri","","","","weekend_exeter","","","","","","","","","","","","","","","","night_weekend","","plymouth_twilight","plymouth_bank_holidays","","","","night_weekend","","","","","","","weekend_torbay","","","","","","","","","","night_weekend","weekend_truro" +"Week 13 Day Sat","","","","weekend_exeter","","","","","","weekend_plymouth1","","","","","","","","weekend_plymouth2","","night_weekend","","","","","","","night_weekend","","","","","","","weekend_torbay","","","","","","","","","","night_weekend","weekend_truro" +"Week 13 Day Sun","","","","weekend_exeter","","","","","","weekend_plymouth1","","","","","","","","weekend_plymouth2","","night_weekend","","","","","","","night_weekend","","","","","","","weekend_torbay","","","","","","","","","","night_weekend","weekend_truro" +"Week 14 Day Mon","","night_weekday","","","","","exeter_twilight","","","","","","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","","night_weekday","","torbay_twilight","","","","truro_twilight","","","","","","","","","" +"Week 14 Day Tue","","night_weekday","exeter_twilight","","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","","night_weekday","","torbay_twilight","","","","","","truro_twilight","","","","","","","" +"Week 14 Day Wed","","night_weekday","","","","exeter_twilight","","","","","","","","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","night_weekday","","torbay_twilight","","","","","","","truro_twilight","","","","","","" +"Week 14 Day Thu","","night_weekday","","","exeter_twilight","","","","","","","","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","night_weekday","","torbay_twilight","","","","","","","","","","","","","truro_twilight" +"Week 14 Day Fri","","","night_weekend","","","","","","weekend_exeter","","night_weekend","","","","","","","","","plymouth_twilight","","","","","","weekend_torbay","","","","","night_weekend","","","","","weekend_truro","","","","","","","","","" +"Week 14 Day Sat","","","night_weekend","","","","","","weekend_exeter","","night_weekend","","weekend_plymouth1","","","","weekend_plymouth2","","","","","","","","","weekend_torbay","","","","","night_weekend","","","","","weekend_truro","","","","","","","","","" +"Week 14 Day Sun","","","night_weekend","","","","","","weekend_exeter","","night_weekend","","weekend_plymouth1","","","","weekend_plymouth2","","","","","","","","","weekend_torbay","","","","","night_weekend","","","","","weekend_truro","","","","","","","","","" +"Week 15 Day Mon","","","","","","exeter_twilight","","","","","","","","","","night_weekday","","","plymouth_twilight","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","","","","night_weekday","","","truro_twilight","" +"Week 15 Day Tue","","","","","","","exeter_twilight","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","","","","night_weekday","","","truro_twilight","" +"Week 15 Day Wed","","","","","","","exeter_twilight","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","truro_twilight","","","","night_weekday","","","","" +"Week 15 Day Thu","","","","","exeter_twilight","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","","","","night_weekday","","","","truro_twilight" +"Week 15 Day Fri","night_weekend","weekend_exeter","","night_weekend","","","","","","","","","","","plymouth_twilight","","","","","","","","night_weekend","","","","","","","","","","weekend_torbay","","","","","","weekend_truro","","","","","","" +"Week 15 Day Sat","night_weekend","weekend_exeter","","night_weekend","","","","","","","","","","","","","","","","weekend_plymouth1","weekend_plymouth2","","night_weekend","","","","","","","","","","weekend_torbay","","","","","","weekend_truro","","","","","","" +"Week 15 Day Sun","night_weekend","weekend_exeter","","night_weekend","","","","","","","","","","","","","","","","weekend_plymouth1","weekend_plymouth2","","night_weekend","","","","","","","","","","weekend_torbay","","","","","","weekend_truro","","","","","","" +"Week 16 Day Mon","","","","","","exeter_twilight","night_weekday","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","","night_weekday","","","","","","torbay_twilight","","","","","","","","","","","","","truro_twilight" +"Week 16 Day Tue","","","exeter_twilight","","","","night_weekday","","","","plymouth_twilight","","","","","","","night_weekday","","","","","","","","night_weekday","","","","","torbay_twilight","","","","","","","truro_twilight","","","","","","","" +"Week 16 Day Wed","","","","exeter_twilight","","","night_weekday","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","night_weekday","","","","","torbay_twilight","","","","","","","","","","","","","truro_twilight","" +"Week 16 Day Thu","","","","exeter_twilight","","","night_weekday","","","","","","","","","","","night_weekday","","plymouth_twilight","","","","","","night_weekday","","","","","torbay_twilight","","","","","","","","","truro_twilight","","","","","" +"Week 16 Day Fri","","","","","","weekend_exeter","","","","plymouth_twilight","","","night_weekend","","","","","","","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","weekend_truro","","","","","night_weekend","","" +"Week 16 Day Sat","","","","","","weekend_exeter","","","","","weekend_plymouth1","","night_weekend","","","","","","weekend_plymouth2","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","weekend_truro","","","","","night_weekend","","" +"Week 16 Day Sun","","","","","","weekend_exeter","","","","","weekend_plymouth1","","night_weekend","","","","","","weekend_plymouth2","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","weekend_truro","","","","","night_weekend","","" +"Week 17 Day Mon","","","","","","","exeter_twilight","","","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","torbay_twilight","night_weekday","","","","","","","","","","truro_twilight","","","","","","","night_weekday","" +"Week 17 Day Tue","","","","","exeter_twilight","","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","","","","night_weekday","","torbay_twilight","","","","","","","","truro_twilight","","","","","","","night_weekday","" +"Week 17 Day Wed","","","","","","exeter_twilight","","","","","","plymouth_twilight","","","","","night_weekday","","","","","","","","","","night_weekday","","torbay_twilight","","","","","","","truro_twilight","","","","","","","","night_weekday","" +"Week 17 Day Thu","","","","exeter_twilight","","","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","night_weekday","","torbay_twilight","","","","","","","","","","","truro_twilight","","","","night_weekday","" +"Week 17 Day Fri","","","weekend_exeter","","","","","","","","plymouth_twilight","","","","","","","","","","night_weekend","","","","","","","","","","weekend_torbay","","night_weekend","","","","","","night_weekend","","","","","","weekend_truro" +"Week 17 Day Sat","","","weekend_exeter","","","","","","","","","","","","","","","","","weekend_plymouth2","night_weekend","","","weekend_plymouth1","","","","","","","weekend_torbay","","night_weekend","","","","","","night_weekend","","","","","","weekend_truro" +"Week 17 Day Sun","","","weekend_exeter","","","","","","","","","","","","","","","","","weekend_plymouth2","night_weekend","","","weekend_plymouth1","","","","","","","weekend_torbay","","night_weekend","","","","","","night_weekend","","","","","","weekend_truro" +"Week 18 Day Mon","","","","","exeter_twilight","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","torbay_twilight","","","","","","","","","","night_weekday","","","","","","","truro_twilight","","" +"Week 18 Day Tue","","","","","","night_weekday","","exeter_twilight","","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","torbay_twilight","","","","","","","","night_weekday","","","","truro_twilight","","","","","" +"Week 18 Day Wed","","exeter_twilight","","","","night_weekday","","","","","","","","","","","","","","","","","night_weekday","plymouth_twilight","","torbay_twilight","","","","","","","","","","night_weekday","","","","","","","truro_twilight","","" +"Week 18 Day Thu","","","","","","night_weekday","","exeter_twilight","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","torbay_twilight","","","","night_weekday","","","","","","","truro_twilight","","" +"Week 18 Day Fri","","","","","weekend_exeter","","","","","","","","","","","","","night_weekend","","","","plymouth_twilight","","","","","","","night_weekend","weekend_torbay","","","","","","","weekend_truro","","","","night_weekend","","","","" +"Week 18 Day Sat","","","","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","weekend_plymouth1","night_weekend","","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","weekend_truro","","","","night_weekend","","","","" +"Week 18 Day Sun","","","","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","weekend_plymouth1","night_weekend","","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","weekend_truro","","","","night_weekend","","","","" +"Week 19 Day Mon","","","","exeter_twilight","","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","","torbay_twilight","","","","","night_weekday","","","","","","truro_twilight","","","","","night_weekday","" +"Week 19 Day Tue","","","","exeter_twilight","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","","","","","","","","","night_weekday","torbay_twilight","","","","","truro_twilight","","","","","night_weekday","" +"Week 19 Day Wed","","","","","","exeter_twilight","","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","","torbay_twilight","","","","","night_weekday","","","","","","","","truro_twilight","","","night_weekday","" +"Week 19 Day Thu","","","exeter_twilight","","","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","","torbay_twilight","","","","","night_weekday","","","","","","","","truro_twilight","","","night_weekday","" +"Week 19 Day Fri","","night_weekend","","","","","","weekend_exeter","","","","","","","","","","","","plymouth_twilight","","","","night_weekend","","weekend_torbay","","","","","","night_weekend","","","","","","","","","","","weekend_truro","","" +"Week 19 Day Sat","","night_weekend","","","","","","weekend_exeter","","","","","","","","","","","","","","weekend_plymouth1","weekend_plymouth2","night_weekend","","weekend_torbay","","","","","","night_weekend","","","","","","","","","","","weekend_truro","","" +"Week 19 Day Sun","","night_weekend","","","","","","weekend_exeter","","","","","","","","","","","","","","weekend_plymouth1","weekend_plymouth2","night_weekend","","weekend_torbay","","","","","","night_weekend","","","","","","","","","","","weekend_truro","","" +"Week 20 Day Mon","","","night_weekday","","","exeter_twilight","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","night_weekday","","","","truro_twilight" +"Week 20 Day Tue","","","night_weekday","","","","","","exeter_twilight","night_weekday","","plymouth_twilight","","","","","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","night_weekday","","","truro_twilight","" +"Week 20 Day Wed","","","night_weekday","","","","","","exeter_twilight","night_weekday","","plymouth_twilight","","","","","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","night_weekday","","","truro_twilight","" +"Week 20 Day Thu","","exeter_twilight","night_weekday","","","","","","","night_weekday","","","","","","","","","","","","","","plymouth_twilight","","","","","","","","","torbay_twilight","","","","","","","truro_twilight","night_weekday","","","","" +"Week 20 Day Fri","","","","","","weekend_exeter","","","","","","","","","","","","","night_weekend","","","","","plymouth_twilight","","","","night_weekend","","weekend_torbay","","","","","","","","","weekend_truro","","","night_weekend","","","" +"Week 20 Day Sat","","","","","","weekend_exeter","","","","","","","","","weekend_plymouth1","","","","night_weekend","weekend_plymouth2","","","","","","","","night_weekend","","weekend_torbay","","","","","","","","","weekend_truro","","","night_weekend","","","" +"Week 20 Day Sun","","","","","","weekend_exeter","","","","","","","","","weekend_plymouth1","","","","night_weekend","weekend_plymouth2","","","","","","","","night_weekend","","weekend_torbay","","","","","","","","","weekend_truro","","","night_weekend","","","" +"Week 21 Day Mon","","","","","","","","night_weekday","exeter_twilight","","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","night_weekday","","torbay_twilight","","","","","","","","","","","","","","truro_twilight" +"Week 21 Day Tue","","","","","exeter_twilight","","","night_weekday","","","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","night_weekday","","torbay_twilight","","","","","","truro_twilight","","","","","","","","" +"Week 21 Day Wed","","","","","","","","night_weekday","exeter_twilight","","","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","night_weekday","","torbay_twilight","","","","","","","","truro_twilight","","","","","","" +"Week 21 Day Thu","","","","exeter_twilight","","","","night_weekday","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","night_weekday","","torbay_twilight","","","","","","","","","","","","","truro_twilight","" +"Week 21 Day Fri","","weekend_exeter","","","","","","","","","","","","","","","","","","plymouth_twilight","night_weekend","","","","","","weekend_torbay","","","","","","","night_weekend","","night_weekend","","","","","","","","","weekend_truro" +"Week 21 Day Sat","","weekend_exeter","","","","","","","","","","weekend_plymouth1","","","","","","","","","night_weekend","weekend_plymouth2","","","","","weekend_torbay","","","","","","","night_weekend","","night_weekend","","","","","","","","","weekend_truro" +"Week 21 Day Sun","","weekend_exeter","","","","","","","","","","weekend_plymouth1","","","","","","","","","night_weekend","weekend_plymouth2","","","","","weekend_torbay","","","","","","","night_weekend","","night_weekend","","","","","","","","","weekend_truro" +"Week 22 Day Mon","","","exeter_twilight","","","","","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","torbay_twilight","","","","","night_weekday","","","","","","truro_twilight","","","","","night_weekday","","","" +"Week 22 Day Tue","","","exeter_twilight","","","","","","","","","","night_weekday","","","plymouth_twilight","","","","","","","","","","","","","","torbay_twilight","night_weekday","","","","","","","","","truro_twilight","","night_weekday","","","" +"Week 22 Day Wed","","","","","exeter_twilight","","","","","","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","","torbay_twilight","night_weekday","","","","","truro_twilight","","","","","","night_weekday","","","" +"Week 22 Day Thu","","","","","","","","exeter_twilight","","","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","","torbay_twilight","night_weekday","","","","","","","","","truro_twilight","","night_weekday","","","" +"Week 22 Day Fri","","","","weekend_exeter","","","","","","","","","","","","plymouth_twilight","","","","","","","","night_weekend","","weekend_torbay","","night_weekend","","","","","","","","","weekend_truro","night_weekend","","","","","","","" +"Week 22 Day Sat","","","","weekend_exeter","","","","","","","","","","weekend_plymouth1","","","","","","","","","weekend_plymouth2","night_weekend","","weekend_torbay","","night_weekend","","","","","","","","","weekend_truro","night_weekend","","","","","","","" +"Week 22 Day Sun","","","","weekend_exeter","","","","","","","","","","weekend_plymouth1","","","","","","","","","weekend_plymouth2","night_weekend","","weekend_torbay","","night_weekend","","","","","","","","","weekend_truro","night_weekend","","","","","","","" +"Week 23 Day Mon","","night_weekday","","","","exeter_twilight","","","","","","","","","","plymouth_twilight","","","","","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","night_weekday","","","truro_twilight","","","" +"Week 23 Day Tue","","night_weekday","","","","","","","exeter_twilight","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","night_weekday","","","truro_twilight","","","" +"Week 23 Day Wed","","night_weekday","","","","exeter_twilight","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","torbay_twilight","","","","","","","","","","","","","night_weekday","","","truro_twilight","","","" +"Week 23 Day Thu","","night_weekday","exeter_twilight","","","","","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","","","","","","","","","","torbay_twilight","","","","night_weekday","","","","","","truro_twilight" +"Week 23 Day Fri","","","","","weekend_exeter","","","night_weekend","","","","","","","","night_weekend","","","","","","","","plymouth_twilight","","","night_weekend","","","","","weekend_torbay","","","","","","","","weekend_truro","","","","","" +"Week 23 Day Sat","","","","","weekend_exeter","","","night_weekend","","weekend_plymouth2","","","weekend_plymouth1","","","night_weekend","","","","","","","","","","","night_weekend","","","","","weekend_torbay","","","","","","","","weekend_truro","","","","","" +"Week 23 Day Sun","","","","","weekend_exeter","","","night_weekend","","weekend_plymouth2","","","weekend_plymouth1","","","night_weekend","","","","","","","","","","","night_weekend","","","","","weekend_torbay","","","","","","","","weekend_truro","","","","","" +"Week 24 Day Mon","","","","exeter_twilight","","","","","night_weekday","","night_weekday","","","","","","","","","","","","plymouth_twilight","","","torbay_twilight","","","","night_weekday","","","","","","","","","","","","truro_twilight","","","" +"Week 24 Day Tue","","","","exeter_twilight","","","","","night_weekday","","night_weekday","","","","","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","torbay_twilight","","","","","","","","","truro_twilight","","","" +"Week 24 Day Wed","","","","","exeter_twilight","","","","night_weekday","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","torbay_twilight","","","","night_weekday","","","","","","","","","","","truro_twilight","","","","" +"Week 24 Day Thu","","","","","exeter_twilight","","","","night_weekday","","night_weekday","","","","","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","torbay_twilight","","","","","","truro_twilight","","","","","","" +"Week 24 Day Fri","night_weekend","weekend_exeter","","","","","","","","","","","","","","plymouth_twilight","","","","","","night_weekend","","","","","","","weekend_torbay","","","","","","","","night_weekend","","","","weekend_truro","","","","" +"Week 24 Day Sat","night_weekend","weekend_exeter","","","","","","","","","","","","","","","","","","","","night_weekend","weekend_plymouth1","weekend_plymouth2","","","","","weekend_torbay","","","","","","","","night_weekend","","","","weekend_truro","","","","" +"Week 24 Day Sun","night_weekend","weekend_exeter","","","","","","","","","","","","","","","","","","","","night_weekend","weekend_plymouth1","weekend_plymouth2","","","","","weekend_torbay","","","","","","","","night_weekend","","","","weekend_truro","","","","" +"Week 25 Day Mon","","","","night_weekday","","","","exeter_twilight","","","","","","plymouth_twilight","","","","","night_weekday","","","","","","","","","torbay_twilight","","","","","","","","","","truro_twilight","","night_weekday","","","","","" +"Week 25 Day Tue","","","","night_weekday","","","","exeter_twilight","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","night_weekday","","","","","" +"Week 25 Day Wed","","","","night_weekday","","","","","exeter_twilight","","","","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","torbay_twilight","","","","","","","","","","truro_twilight","night_weekday","","","","","" +"Week 25 Day Thu","","","","night_weekday","exeter_twilight","","","","","","","plymouth_twilight","","","","","","","night_weekday","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","night_weekday","","","","","" +"Week 25 Day Fri","","","","","","","night_weekend","","weekend_exeter","night_weekend","","","","","","","","","","","","plymouth_twilight","","","","","","","","","night_weekend","weekend_torbay","","","","","","","","","","weekend_truro","","","" +"Week 25 Day Sat","","","","","","","night_weekend","","weekend_exeter","night_weekend","","","weekend_plymouth1","","","","","","","","weekend_plymouth2","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","","","","weekend_truro","","","" +"Week 25 Day Sun","","","","","","","night_weekend","","weekend_exeter","night_weekend","","","weekend_plymouth1","","","","","","","","weekend_plymouth2","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","","","","weekend_truro","","","" +"Week 26 Day Mon","night_weekday","","exeter_twilight","","","","","","","","plymouth_twilight","","","","plymouth_bank_holidays","","","","","","","","","night_weekday","","","night_weekday","","","","","","","","torbay_twilight","","","","","","","","","","truro_twilight" +"Week 26 Day Tue","night_weekday","","","","","","","exeter_twilight","","","","","","","","","","","plymouth_twilight","","","","","night_weekday","","","night_weekday","","","","","","","","torbay_twilight","truro_twilight","","","","","","","","","" +"Week 26 Day Wed","night_weekday","","","","","","","","exeter_twilight","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","torbay_twilight","night_weekday","","","","","","","","","","","","","","","","","","truro_twilight" +"Week 26 Day Thu","night_weekday","","","","","","","","exeter_twilight","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","night_weekday","","","","","","","","torbay_twilight","","","","","","","truro_twilight","","","" +"Week 26 Day Fri","","","weekend_exeter","","","","","night_weekend","","","","","","","","night_weekend","","","","","","","plymouth_twilight","","","","","","night_weekend","weekend_torbay","","","","","","","","","","weekend_truro","","","","","" +"Week 26 Day Sat","","","weekend_exeter","","","","","night_weekend","","","","weekend_plymouth2","","","","night_weekend","","weekend_plymouth1","","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","","","","weekend_truro","","","","","" +"Week 26 Day Sun","","","weekend_exeter","","","","","night_weekend","","","","weekend_plymouth2","","","","night_weekend","","weekend_plymouth1","","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","","","","weekend_truro","","","","","" diff --git a/leave.csv b/leave.csv index f6be13c..ad9d9e2 100644 --- a/leave.csv +++ b/leave.csv @@ -205,29 +205,29 @@ Date,Exams,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 6/3/22,,,NO ONCALL,,,,Mat leave,,,,OOPT,,,,,,,,,A/L,,No Oncall,,,,Mat leave,,,OOPT,,IR oncall,,OOPC,,,,,,A/L,,,,,,,,,A/L,A/L,A/L,,,, 7/3/22,,OFF ONCALL,IDT,POST ONCALL,POST ONCALL,,OOPT,,,,OOPT,,,,,,,POST ONCALL,,,,No Oncall,,POST ONCALL,,Mat leave,,POST ONCALL,OOPT,,,,OOPC,,,POST ONCALL,POST ONCALL,,A/L,,,,,A/L,POST ONCALL,,,,,A/L,,,, 8/3/22,,OFF ONCALL,IDT,POST ONCALL,POST ONCALL,,OOPT,,,,OOPT,,,,,,,POST ONCALL,,,,No Oncall,,POST ONCALL,,Mat leave,,POST ONCALL,OOPT,,,,OOPC,,,POST ONCALL,POST ONCALL,,A/L,,,,,A/L,POST ONCALL,,,,,A/L,,,, -9/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,,,,,,,,,,,No Oncall,,,,Mat leave,POST ONCALL,,OOPT,,,,OOPC,,,,,,A/L,,,,,A/L,,,,,,A/L,,,, -10/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,A/L,,,,,A/L,,,,,,A/L,,,, -11/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,A/L,,,,,A/L,,,,,,A/L,,,, -12/3/22,,OFF ONCALL,IDT,POST ONCALL,,,OOPT,,,,OOPT,A/L,,,,,,POST ONCALL,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,POST ONCALL,,A/L,,,,,A/L,,A/L,,,,A/L,,,, -13/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,A/L,,,,,A/L,,A/L,,,,A/L,,,, -14/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, -15/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, -16/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,,,POST ONCALL,A/L,,A/L,,pre 2b,A/L,,,,, -17/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,A/L,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, -18/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, -19/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,IR ONCALL,,,A/L,,A/L,,pre 2b,,A/L,,,, -20/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,A/L,,,,,IR ONCALL,,,A/L,,A/L,,pre 2b,,A/L,,,, -21/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,A/L,,,,pre 2b,,A/L,,,, -22/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,A/L,,,OOPC,,,,,,,,,,,,,,,pre 2b,,A/L,,,, -23/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,pre 2b,,A/L,,,, -24/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,pre 2b,,A/L,,,, -25/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, -26/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, -27/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, -28/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,,,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,,,,, -29/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,,,,,,A/L,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, -30/3/22,2b,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, -31/3/22,2b,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +9/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,,,,,,,,,,,No Oncall,,,,Mat leave,POST ONCALL,A/L,OOPT,,,,OOPC,,,,,,A/L,,,,,A/L,,,,,,A/L,,,, +10/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,A/L,,,,,A/L,,,,,,A/L,,,, +11/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,A/L,,,,,A/L,,,,,,A/L,,,, +12/3/22,,OFF ONCALL,IDT,POST ONCALL,,,OOPT,,,,OOPT,A/L,,,,,,POST ONCALL,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,A/L,POST ONCALL,,A/L,,,,,A/L,,A/L,,,,A/L,,,, +13/3/22,,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,A/L,,,A/L,,,,,A/L,,A/L,,,,A/L,,,, +14/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, +15/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, +16/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,A/L,,,,,,,POST ONCALL,A/L,,A/L,,pre 2b,A/L,,,,, +17/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,A/L,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, +18/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,A/L,,,,,,,,A/L,,A/L,,pre 2b,,,,,, +19/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,A/L,,,,,IR ONCALL,,,A/L,,A/L,,pre 2b,,A/L,,,, +20/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,A/L,,,,,IR ONCALL,,,A/L,,A/L,,pre 2b,,A/L,,,, +21/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,,,,,,A/L,,,,pre 2b,,A/L,,,, +22/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,A/L,,,OOPC,,,,,,,,,,,,,,,pre 2b,,A/L,,,, +23/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,,,,,,,,,,pre 2b,,A/L,,,, +24/3/22,pre 2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,,,,,,,,,,pre 2b,,A/L,,,, +25/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +26/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +27/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,OOPT,A/L,,,,A/L,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +28/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,,,,,,A/L,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,,,,, +29/3/22,2b,OFF ONCALL,IDT,,,,OOPT,A/L,,,,,,,,A/L,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +30/3/22,2b,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, +31/3/22,2b,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,OOPC,,,,,,,,,,,,,,,2b,,A/L,,,, 1/4/22,2b,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,,,,,,,,,,,,2b,,,Ramadan,A/L,, 2/4/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,,,,A/L,,,,,,,,,,,Ramadan,A/L,, 3/4/22,,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights or twiligts,,,,,,,A/L,,,,,,,,,,,Ramadan,A/L,, @@ -255,8 +255,8 @@ Date,Exams,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 25/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,A/L,Mat leave,,,OOPT,,,,No nights,,,,,,,,,,,,,,,,A/L,,Ramadan,,, 26/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,A/L,Mat leave,,,OOPT,,,,No nights,,,,,,,,,,,,,,,,A/L,,Ramadan,,, 27/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,A/L,Mat leave,,,OOPT,,S/L,,No nights,,,,,,,,,,,,,,,,A/L,,Ramadan,,, -28/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,A/L,S/L,,No nights,,,,,,,A/L,,,,,,,,,A/L,,Ramadan,,, -29/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,No nights,,,,,,,A/L,,,,,,,,,A/L,,Ramadan,,, +28/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,A/L,S/L,,No nights,,,,,,,A/L,,,,,,,,,A/L,,Ramadan,,, +29/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,No nights,,,,,,,A/L,,,,,,,,,A/L,,Ramadan,,, 30/4/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A//L,,Ramadan,,, 1/5/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A//L,,Ramadan,,, 2/5/22,,OFF ONCALL,IDT,,,,OOPT,,,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,A/L,,,,,,,,,,,A//L,,Ramadan,,, @@ -266,11 +266,11 @@ Date,Exams,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 6/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,,,,IR ONCALL,,,,,,,,A/L,,Ramadan,,, 7/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,,,,IR ONCALL,,,,,,,,,,Ramadan,,, 8/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,Mat leave,,,OOPT,,,A/L,,,,,,,,,IR ONCALL,,,,,,,,,,Ramadan,,, -9/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, -10/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, -11/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, -12/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, -13/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, +9/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, +10/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, +11/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, +12/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, +13/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,A/L,,,,,,,,,,,,,,,,,,,Ramadan,,, 14/5/22,,OFF ONCALL,IDT,,,,OOPT,A/L,A/L,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,A/L,,,,,,,,,,,,,,A/L,,,,,,, 15/5/22,,OFF ONCALL,IDT,,,,OOPT,A/L,A/L,,,,,,,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,A/L,A/L,,,,,,,,,,,,,,A/L,,,,,,, 16/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,A/L,,,,, @@ -278,29 +278,29 @@ Date,Exams,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 18/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,A/L,,,,, 19/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,,,,,,,,,,,,,,,,A/L,,,,, 20/5/22,,OFF ONCALL,IDT,,,,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,A/L,,,,,,,,,,,,,,,,,,,, -21/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,A/L,,,,,,,,,,,,,,,,,,,, -22/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,,OOPT,,,,A/L,A/L,,,,,,,,,,,,,,,,,,,, -23/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, -24/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, -25/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, -26/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, -27/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,A/L,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, -28/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,A/L,,,,A/L,,,,A/L,,,No Oncall,,,A/L,Mat leave,,,OOPT,,,,,,,A/L,,,,,,,,,,A/L,,,,,,A/L,, -29/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,A/L,,,,A/L,,,,A/L,,,No Oncall,,,A/L,Mat leave,,,OOPT,,,,,,,A/L,,,,,,,,,,A/L,,,,,,A/L,, -30/5/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,A/L,Mat leave,,,OOPT,,A/L,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a -31/5/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,A/L,Mat leave,,,OOPT,,A/L,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a -1/6/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,A/L,Mat leave,,,OOPT,,A/L,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a -2/6/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a -3/6/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a -4/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a -5/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a -6/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,A/L,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,A/L,,,,Pre 2a,,Pre 2a -7/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,A/L,,,,Pre 2a,,Pre 2a -8/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a -9/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,A/L,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a -10/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,A/L,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a -11/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,A/L,,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a -12/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,A/L,,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +21/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,A/L,A/L,,,,,,,,,,,,,,,,,,,, +22/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,A/L,,,,,,,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,A/L,A/L,,,,,,,,,,,,,,,,,,,, +23/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, +24/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, +25/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, +26/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, +27/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,,A/L,,,No Oncall,,,A/L,Mat leave,,A/L,OOPT,,,,,,,,,,,,IR ONCALL,,,,,,,,,,,A/L,, +28/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,A/L,,,,A/L,,,,A/L,,,No Oncall,,,A/L,Mat leave,,A/L,OOPT,,,,,,,A/L,,,,,,,,,,A/L,,,,,,A/L,, +29/5/22,,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,A/L,,,,A/L,,,,A/L,,,No Oncall,,,A/L,Mat leave,,A/L,OOPT,,,,,,,A/L,,,,,,,,,,A/L,,,,,,A/L,, +30/5/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,A/L,Mat leave,,A/L,OOPT,,A/L,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +31/5/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,A/L,Mat leave,,A/L,OOPT,,A/L,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +1/6/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,A/L,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,A/L,Mat leave,,A/L,OOPT,,A/L,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +2/6/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +3/6/22,Pre 2a,OFF ONCALL,IDT,,,A/L,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +4/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +5/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,,,,A/L,,,Pre 2a,Pre 2a,,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +6/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,A/L,OOPT,A/L,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,A/L,,,,Pre 2a,,Pre 2a +7/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,A/L,,,,Pre 2a,,Pre 2a +8/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +9/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,A/L,,,pre 2b,,,A/L,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +10/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,A/L,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +11/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,A/L,,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a +12/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,A/L,,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,A/L,OOPT,,,,,,,,,,,,IR ONCALL,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a 13/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a 14/6/22,Pre 2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,,,,Pre 2a,Pre 2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,Pre 2a,,,,,,Pre 2a,,Pre 2a 15/6/22,2a,OFF ONCALL,IDT,,,,OOPT,,,,,pre 2b,,,,,,2a,2a,A/L,,No Oncall,,,,Mat leave,,,OOPT,,,,,,,,,,,,,,,,,2a,,,,,,2a,,2a @@ -384,4 +384,4 @@ Date,Exams,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 1/9/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,A/L,,,,,,A/L,,,,,,,,,,,A/L,OOPE,OOPT,,,, 2/9/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,A/L,,,,,,,,,,,A/L,OOPE,OOPT,,,, 3/9/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,A/L,,,,,,,,,,,,OOPE,OOPT,,,, -4/9/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,,,,,,,,,,,,No Oncall,,A/L,,,,,OOPT,,,,,,,,A/L,,,,,,,,,,,,OOPE,OOPT,,,, \ No newline at end of file +4/9/22,,OFF ONCALL,IDT,A/L,,,OOPT,,A/L,,OFF,,,,,,,,,,,No Oncall,,A/L,,,OFF,OFF,OOPT,OFF,,,,,,,A/L,,,,OFF,,,,,,,,OOPE,OOPT,OFF,,, \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index e08ff77..8f863f3 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,2 +1,3 @@ pyomo -govuk_bank_holidays \ No newline at end of file +govuk_bank_holidays +pytest \ No newline at end of file diff --git a/rota-flex.csv b/rota-flex.csv new file mode 100644 index 0000000..9b5f899 --- /dev/null +++ b/rota-flex.csv @@ -0,0 +1,186 @@ +"Name","Madalina Drumea","Layla Bell","Alex wood","Max Ireland","Seren Peters","Charles Finan","Paul Ward","Delilah Trimmer","Tom Welsh","Kyaw Tint","Maththew O'Brien","Max Finzel","Zainab Sharaf","Jean Skumar","Michael Tomek","Dhuvresh Patel","Nicolas Dziadulewicz","Vilim Kalamar","Georgina Edwards","Jenn Haw fong","Paul Jenkins","Amoolya Mannava","Rebecca Murphy","Ross Kruger","Fiona Lyall","Wijhdan Abusrewil","Andrew MacCormick","Joel Lim","Mark Haley","Alexander Sanchez - cabello","Chong Yew Ng","Matthew Thorley","Sayed Hashim Alqarooni","Harriet Conley","Jon Skinner","Alexander Wijnberg","Cameron Bullock","Alan Eccles","Christian Greer","Hannah Lewis","Amina Odeh","Sarath Vennam","Richard Chaytor","Mo Babsail","Sherafghan PROC" +"Site","barnstaple","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth_twilights","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay twilights","truro","truro","truro","truro","truro","truro","truro","truro","truro","truro no proc" +"Grade","3","2","3","3","3","4","4","5","5","2","2","2","2","3","3","3","3","3","4","4","4","5","5","5","6","2","2","2","2","3","4","4","4","5","6","2","2","3","3","3","4","4","5","5","5" +"FTE","80","100","100","100","100","100","100","80","100","100","100","100","100","60","80","100","100","100","80","100","100","100","100","100","60","100","100","100","100","100","100","100","100","60","100","100","100","80","100","100","100","100","100","100","100" +"Week 1 Day Mon","","","","","","","","exeter_twilight","","night_weekday","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","torbay_twilight","","","","","","","","","","truro_twilight","","","","","","","night_weekday","" +"Week 1 Day Tue","","","exeter_twilight","","","","","","","night_weekday","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","torbay_twilight","","","","","","","","","","truro_twilight","","","","","","","night_weekday","" +"Week 1 Day Wed","","exeter_twilight","","","","","","","","night_weekday","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","torbay_twilight","","","","","","","","","","","","","","","","","night_weekday","truro_twilight" +"Week 1 Day Thu","","exeter_twilight","","","","","","","","night_weekday","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","torbay_twilight","","","","","","","","","","","","truro_twilight","","night_weekday","" +"Week 1 Day Fri","night_weekend","","","","","weekend_exeter","","","","","plymouth_twilight","","","","","","","","","night_weekend","","","","","","","","night_weekend","","","weekend_torbay","","","","","","","","","","","","","","weekend_truro" +"Week 1 Day Sat","night_weekend","","","","","weekend_exeter","","","","","","","weekend_plymouth1","","","","weekend_plymouth2","","","night_weekend","","","","","","","","night_weekend","","","weekend_torbay","","","","","","","","","","","","","","weekend_truro" +"Week 1 Day Sun","night_weekend","","","","","weekend_exeter","","","","","","","weekend_plymouth1","","","","weekend_plymouth2","","","night_weekend","","","","","","","","night_weekend","","","weekend_torbay","","","","","","","","","","","","","","weekend_truro" +"Week 2 Day Mon","","night_weekday","","","","","exeter_twilight","","","plymouth_twilight","","","","","","","","","night_weekday","","","","","","","","","","torbay_twilight","","","","night_weekday","","","","","","","","","","","truro_twilight","" +"Week 2 Day Tue","","night_weekday","exeter_twilight","","","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","torbay_twilight","","","","night_weekday","","","","","","","","","","","truro_twilight","" +"Week 2 Day Wed","","night_weekday","","exeter_twilight","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","torbay_twilight","","","","night_weekday","","","","","","","","","","truro_twilight","","" +"Week 2 Day Thu","","night_weekday","","exeter_twilight","","","","","","","","","","","","","","","night_weekday","","","plymouth_twilight","","","","","","","torbay_twilight","","","","night_weekday","","","","","","","","","","","","truro_twilight" +"Week 2 Day Fri","","","weekend_exeter","","","","night_weekend","","","","","","","plymouth_twilight","","","","night_weekend","","","","","","","","","","","","","","weekend_torbay","","","","weekend_truro","","","","","","night_weekend","","","" +"Week 2 Day Sat","","","weekend_exeter","","","","night_weekend","","","","","","","","weekend_plymouth2","","","night_weekend","","","","","weekend_plymouth1","","","","","","","","","weekend_torbay","","","","weekend_truro","","","","","","night_weekend","","","" +"Week 2 Day Sun","","","weekend_exeter","","","","night_weekend","","","","","","","","weekend_plymouth2","","","night_weekend","","","","","weekend_plymouth1","","","","","","","","","weekend_torbay","","","","weekend_truro","","","","","","night_weekend","","","" +"Week 3 Day Mon","night_weekday","","","","exeter_twilight","night_weekday","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight","" +"Week 3 Day Tue","night_weekday","exeter_twilight","","","","night_weekday","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight","","","","","","" +"Week 3 Day Wed","night_weekday","","","","","night_weekday","exeter_twilight","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","truro_twilight","","","","","","" +"Week 3 Day Thu","night_weekday","","","","","night_weekday","exeter_twilight","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","","","","","","","truro_twilight" +"Week 3 Day Fri","","weekend_exeter","","","night_weekend","","","","","","","","plymouth_twilight","","","","","","","","","night_weekend","","","","","","","","night_weekend","weekend_torbay","","","","","","","","","weekend_truro","","","","","" +"Week 3 Day Sat","","weekend_exeter","","","night_weekend","","","","","","","","","","","weekend_plymouth2","","","","","weekend_plymouth1","night_weekend","","","","","","","","night_weekend","weekend_torbay","","","","","","","","","weekend_truro","","","","","" +"Week 3 Day Sun","","weekend_exeter","","","night_weekend","","","","","","","","","","","weekend_plymouth2","","","","","weekend_plymouth1","night_weekend","","","","","","","","night_weekend","weekend_torbay","","","","","","","","","weekend_truro","","","","","" +"Week 4 Day Mon","","","night_weekday","","","","exeter_twilight","","","","plymouth_twilight","","","","","","","","","","","","night_weekday","","","","","","","","","","torbay_twilight","","","night_weekday","","truro_twilight","","","","","","","" +"Week 4 Day Tue","","","night_weekday","","","","","","exeter_twilight","","","plymouth_twilight","","","","","","","","","","","night_weekday","","","","","torbay_twilight","","","","","","","","night_weekday","","","","","","","","truro_twilight","" +"Week 4 Day Wed","","","night_weekday","","exeter_twilight","","","","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","torbay_twilight","","","","","","","","night_weekday","","","","","","truro_twilight","","","" +"Week 4 Day Thu","","","night_weekday","","exeter_twilight","","","","","plymouth_twilight","","","","","","","","","","","","","night_weekday","","","","","","","","","torbay_twilight","","","","night_weekday","","","","","","truro_twilight","","","" +"Week 4 Day Fri","","","","","","weekend_exeter","night_weekend","","","","","","","","","plymouth_twilight","night_weekend","","","","","","","","","","","","night_weekend","","","","weekend_torbay","","","","","","","","","","","weekend_truro","" +"Week 4 Day Sat","","","","","","weekend_exeter","night_weekend","","","","","","","","","","night_weekend","","weekend_plymouth2","weekend_plymouth1","","","","","","","","","night_weekend","","","","weekend_torbay","","","","","","","","","","","weekend_truro","" +"Week 4 Day Sun","","","","","","weekend_exeter","night_weekend","","","","","","","","","","night_weekend","","weekend_plymouth2","weekend_plymouth1","","","","","","","","","night_weekend","","","","weekend_torbay","","","","","","","","","","","weekend_truro","" +"Week 5 Day Mon","","","","","","","","night_weekday","exeter_twilight","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight","night_weekday","","","" +"Week 5 Day Tue","","","","exeter_twilight","","","","night_weekday","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","","night_weekday","","","" +"Week 5 Day Wed","","","","","exeter_twilight","","","night_weekday","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","","night_weekday","","truro_twilight","" +"Week 5 Day Thu","","","","","exeter_twilight","","","night_weekday","","","","night_weekday","","","","","","","","","plymouth_twilight","","","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","night_weekday","","","" +"Week 5 Day Fri","","night_weekend","","weekend_exeter","","","","","","","","","","","","night_weekend","","plymouth_twilight","","","","","","","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","" +"Week 5 Day Sat","","night_weekend","","weekend_exeter","","","","","","","","","","","weekend_plymouth2","night_weekend","","","","","","","weekend_plymouth1","","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","" +"Week 5 Day Sun","","night_weekend","","weekend_exeter","","","","","","","","","","","weekend_plymouth2","night_weekend","","","","","","","weekend_plymouth1","","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","" +"Week 6 Day Mon","","","","","","","","exeter_twilight","","","","","","","","","","plymouth_twilight","night_weekday","","","","","night_weekday","","","night_weekday","","","","","","","","torbay_twilight","","","truro_twilight","","","","","","","" +"Week 6 Day Tue","","","","","","","exeter_twilight","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","night_weekday","","","night_weekday","torbay_twilight","","","","","","","","","","","","","","","truro_twilight","","" +"Week 6 Day Wed","","","","","","","exeter_twilight","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","night_weekday","","","night_weekday","torbay_twilight","","","","","","","","","","","","","","","truro_twilight","","" +"Week 6 Day Thu","","","","","","","","exeter_twilight","","","","","","","","","","","night_weekday","","","plymouth_twilight","","night_weekday","","","night_weekday","torbay_twilight","","","","","","","","","","","","truro_twilight","","","","","" +"Week 6 Day Fri","night_weekend","","","","weekend_exeter","","","","night_weekend","","","","","","","","","plymouth_bank_holidays","","night_weekend","plymouth_twilight","","","","","","","","","","weekend_torbay","","","","","","","","","","weekend_truro","","","","" +"Week 6 Day Sat","night_weekend","","","","weekend_exeter","","","","night_weekend","weekend_plymouth1","","weekend_plymouth2","","","","","","","","night_weekend","","","","","","","","","","","weekend_torbay","","","","","","","","","","weekend_truro","","","","" +"Week 6 Day Sun","night_weekend","","","","weekend_exeter","","","","night_weekend","weekend_plymouth1","","weekend_plymouth2","","","","","","","","night_weekend","","","","","","","","","","","weekend_torbay","","","","","","","","","","weekend_truro","","","","" +"Week 7 Day Mon","","","","","","exeter_twilight","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","plymouth_bank_holidays","","","","torbay_twilight","","","night_weekday","","","","","","","truro_twilight","","","","","","night_weekday","","" +"Week 7 Day Tue","","","","exeter_twilight","","","","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","torbay_twilight","","","night_weekday","","","","","","truro_twilight","","","","","","","night_weekday","","" +"Week 7 Day Wed","","","","","","","exeter_twilight","","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","torbay_twilight","","","night_weekday","","","","","","truro_twilight","","","","","","","night_weekday","","" +"Week 7 Day Thu","","","","","","","","exeter_twilight","","","night_weekday","","","","","","","","","","","","","plymouth_twilight","","","torbay_twilight","","","night_weekday","","","","","","","","","","","","truro_twilight","night_weekday","","" +"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_plymouth1","","","","night_weekend","weekend_plymouth2","","","","","night_weekend","","","","","weekend_torbay","","","weekend_truro","night_weekend","","","","","","","" +"Week 7 Day Sun","","","","","","","weekend_exeter","","","","","","","","","","","","weekend_plymouth1","","","","night_weekend","weekend_plymouth2","","","","","night_weekend","","","","","weekend_torbay","","","weekend_truro","night_weekend","","","","","","","" +"Week 8 Day Mon","","","night_weekday","","","exeter_twilight","","","","","","","night_weekday","","","","","","","","","plymouth_twilight","","","","","","","","","night_weekday","torbay_twilight","","","","truro_twilight","","","","","","","","","" +"Week 8 Day Tue","","exeter_twilight","night_weekday","","","","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","","","","night_weekday","torbay_twilight","","","","","","","","","","truro_twilight","","","" +"Week 8 Day Wed","","","night_weekday","","","","exeter_twilight","","","","","","night_weekday","","","","","","","","","plymouth_twilight","","","","","torbay_twilight","","","","night_weekday","","","","","","","","truro_twilight","","","","","","" +"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","","","","","","","","","","","","","","","night_weekend","","plymouth_twilight","","","","","","","weekend_torbay","","","","","","","","","","night_weekend","","","weekend_truro","","" +"Week 8 Day Sat","","night_weekend","","","","weekend_exeter","","","","weekend_plymouth2","weekend_plymouth1","","","","","","","","","","night_weekend","","","","","","","","","weekend_torbay","","","","","","","","","","night_weekend","","","weekend_truro","","" +"Week 8 Day Sun","","night_weekend","","","","weekend_exeter","","","","weekend_plymouth2","weekend_plymouth1","","","","","","","","","","night_weekend","","","","","","","","","weekend_torbay","","","","","","","","","","night_weekend","","","weekend_truro","","" +"Week 9 Day Mon","","","","exeter_twilight","","","","","","","","plymouth_twilight","","","","","plymouth_bank_holidays","","night_weekday","","","","","","","","","","night_weekday","","","","torbay_twilight","","","","","truro_twilight","night_weekday","","","","","","" +"Week 9 Day Tue","","","","","","","exeter_twilight","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","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","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","","","night_weekday","","","torbay_twilight","","","","","","","night_weekday","truro_twilight","","","","","" +"Week 9 Day Fri","","","","","","","","weekend_exeter","night_weekend","","","","","","","","","night_weekend","","","","plymouth_twilight","","","","","night_weekend","","","","weekend_torbay","","","","","weekend_truro","","","","","","","","","" +"Week 9 Day Sat","","","","","","","","weekend_exeter","night_weekend","","","","weekend_plymouth1","","","","","night_weekend","","","","","weekend_plymouth2","","","","night_weekend","","","","weekend_torbay","","","","","weekend_truro","","","","","","","","","" +"Week 9 Day Sun","","","","","","","","weekend_exeter","night_weekend","","","","weekend_plymouth1","","","","","night_weekend","","","","","weekend_plymouth2","","","","night_weekend","","","","weekend_torbay","","","","","weekend_truro","","","","","","","","","" +"Week 10 Day Mon","","exeter_twilight","","","","","night_weekday","","","","","night_weekday","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","","","","","","torbay_twilight","","","","truro_twilight","","","","","","" +"Week 10 Day Tue","","","","","exeter_twilight","","night_weekday","","","","","night_weekday","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","","","","","truro_twilight","","","","" +"Week 10 Day Wed","","","","","","","night_weekday","","exeter_twilight","","","night_weekday","","","night_weekday","","plymouth_twilight","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","","","truro_twilight","","","" +"Week 10 Day Thu","","","exeter_twilight","","","","night_weekday","","","","","night_weekday","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","","","","torbay_twilight","","","","","","truro_twilight","","","","" +"Week 10 Day Fri","","","","","weekend_exeter","","","","","","","","","night_weekend","","","plymouth_twilight","","","","","","","","","","","","","","","","night_weekend","weekend_torbay","","","night_weekend","weekend_truro","","","","","","","" +"Week 10 Day Sat","","","","","weekend_exeter","","","","","","","","","night_weekend","","","","","","weekend_plymouth1","","","","weekend_plymouth2","","","","","","","","","night_weekend","weekend_torbay","","","night_weekend","weekend_truro","","","","","","","" +"Week 10 Day Sun","","","","","weekend_exeter","","","","","","","","","night_weekend","","","","","","weekend_plymouth1","","","","weekend_plymouth2","","","","","","","","","night_weekend","weekend_torbay","","","night_weekend","weekend_truro","","","","","","","" +"Week 11 Day Mon","","","","","","","","","exeter_twilight","","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","torbay_twilight","night_weekday","","","","","","","","","night_weekday","truro_twilight","","","" +"Week 11 Day Tue","","","","","","","","","exeter_twilight","","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","torbay_twilight","","","","truro_twilight","","night_weekday","","","","" +"Week 11 Day Wed","","","","","","","exeter_twilight","","","","","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","night_weekday","torbay_twilight","","","","truro_twilight","","","","night_weekday","","","","" +"Week 11 Day Thu","","","","","exeter_twilight","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","","night_weekday","torbay_twilight","","","","truro_twilight","","","","night_weekday","","","","" +"Week 11 Day Fri","","","","night_weekend","","","","weekend_exeter","","","","","","","","","","night_weekend","","plymouth_twilight","","","","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","","night_weekend","","" +"Week 11 Day Sat","","","","night_weekend","","","","weekend_exeter","","","weekend_plymouth2","","","","weekend_plymouth1","","","night_weekend","","","","","","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","","night_weekend","","" +"Week 11 Day Sun","","","","night_weekend","","","","weekend_exeter","","","weekend_plymouth2","","","","weekend_plymouth1","","","night_weekend","","","","","","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","","night_weekend","","" +"Week 12 Day Mon","","","","","night_weekday","","","","exeter_twilight","","","","night_weekday","","","","","","","plymouth_twilight","","night_weekday","","","","","","","","torbay_twilight","","","","","","","","","","","","","","truro_twilight","" +"Week 12 Day Tue","","","","","night_weekday","","exeter_twilight","","","","","","night_weekday","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","torbay_twilight","","","","","","","truro_twilight","","","","","","","","" +"Week 12 Day Wed","","","","","night_weekday","","","","exeter_twilight","","","","night_weekday","","","","plymouth_twilight","","","","","night_weekday","","","","","","","","torbay_twilight","","","","","","","","","","truro_twilight","","","","","" +"Week 12 Day Thu","","","","","night_weekday","","","exeter_twilight","","","","","night_weekday","","","","","plymouth_twilight","","","","night_weekday","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight","","","","","" +"Week 12 Day Fri","","","","","","","weekend_exeter","","","","","","","","","night_weekend","plymouth_twilight","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","","","","","","weekend_truro","","","night_weekend","" +"Week 12 Day Sat","","","","","","","weekend_exeter","","","","","weekend_plymouth2","","weekend_plymouth1","","night_weekend","","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","","","","","","weekend_truro","","","night_weekend","" +"Week 12 Day Sun","","","","","","","weekend_exeter","","","","","weekend_plymouth2","","weekend_plymouth1","","night_weekend","","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","","","","","","weekend_truro","","","night_weekend","" +"Week 13 Day Mon","","","","","exeter_twilight","","","","night_weekday","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","","","","torbay_twilight","","","","","","","","night_weekday","","","","","","","","truro_twilight" +"Week 13 Day Tue","","","","","","","","exeter_twilight","night_weekday","","","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","torbay_twilight","","","","night_weekday","","","","","","truro_twilight","","" +"Week 13 Day Wed","","exeter_twilight","","","","","","","night_weekday","","","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","torbay_twilight","","","","","","","","","night_weekday","","","","","truro_twilight","","","" +"Week 13 Day Thu","","","","","exeter_twilight","","","","night_weekday","plymouth_bank_holidays","","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","","","","","","torbay_twilight","","","","night_weekday","","","","","","","","truro_twilight" +"Week 13 Day Fri","","weekend_exeter","","","","night_weekend","","","","","","plymouth_bank_holidays","","","","","night_weekend","","","plymouth_twilight","","","","","","","night_weekend","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","" +"Week 13 Day Sat","","weekend_exeter","","","","night_weekend","","","","","","","weekend_plymouth1","","","","night_weekend","","","","","weekend_plymouth2","","","","","night_weekend","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","" +"Week 13 Day Sun","","weekend_exeter","","","","night_weekend","","","","","","","weekend_plymouth1","","","","night_weekend","","","","","weekend_plymouth2","","","","","night_weekend","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","" +"Week 14 Day Mon","","","","","","","","","exeter_twilight","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","night_weekday","","","","","torbay_twilight","","","","","","","night_weekday","","","","truro_twilight","","","" +"Week 14 Day Tue","","","exeter_twilight","","","","","","","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","night_weekday","","","","","torbay_twilight","","","","","","","night_weekday","","","","","","truro_twilight","" +"Week 14 Day Wed","","","","","","exeter_twilight","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","night_weekday","","","torbay_twilight","","","","","","","","truro_twilight","night_weekday","","","","","","","" +"Week 14 Day Thu","","","","exeter_twilight","","","","","","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","night_weekday","","","torbay_twilight","","","","","","","","","night_weekday","","","","","truro_twilight","","" +"Week 14 Day Fri","","","","","","","night_weekend","","weekend_exeter","night_weekend","","","","","","","","","","","","","plymouth_twilight","","","","","","","","","","weekend_torbay","","","","","","","","night_weekend","weekend_truro","","","" +"Week 14 Day Sat","","","","","","","night_weekend","","weekend_exeter","night_weekend","weekend_plymouth2","","","","","","","","","","weekend_plymouth1","","","","","","","","","","","","weekend_torbay","","","","","","","","night_weekend","weekend_truro","","","" +"Week 14 Day Sun","","","","","","","night_weekend","","weekend_exeter","night_weekend","weekend_plymouth2","","","","","","","","","","weekend_plymouth1","","","","","","","","","","","","weekend_torbay","","","","","","","","night_weekend","weekend_truro","","","" +"Week 15 Day Mon","","","night_weekday","exeter_twilight","","","","","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","night_weekday","","","","","","","","torbay_twilight","","","truro_twilight","","","","","","","" +"Week 15 Day Tue","","","night_weekday","","exeter_twilight","","","","","","","","","","","","","","","","","","night_weekday","plymouth_twilight","","","night_weekday","","","","","","","torbay_twilight","","","","","","","","","","truro_twilight","" +"Week 15 Day Wed","","","night_weekday","","","exeter_twilight","","","","","","","","","","","","","","","","","night_weekday","","plymouth_twilight","","night_weekday","","","","","","","torbay_twilight","","","","","truro_twilight","","","","","","" +"Week 15 Day Thu","","","night_weekday","","","","exeter_twilight","","","plymouth_twilight","","","","","","","","","","","","","night_weekday","","","","night_weekday","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","","" +"Week 15 Day Fri","","","","night_weekend","","weekend_exeter","","","","","","","","","","","","","","","plymouth_twilight","","","night_weekend","","","","","","weekend_torbay","","night_weekend","","","","","","weekend_truro","","","","","","","" +"Week 15 Day Sat","","","","night_weekend","","weekend_exeter","","","","","","","","","","weekend_plymouth1","","","","weekend_plymouth2","","","","night_weekend","","","","","","weekend_torbay","","night_weekend","","","","","","weekend_truro","","","","","","","" +"Week 15 Day Sun","","","","night_weekend","","weekend_exeter","","","","","","","","","","weekend_plymouth1","","","","weekend_plymouth2","","","","night_weekend","","","","","","weekend_torbay","","night_weekend","","","","","","weekend_truro","","","","","","","" +"Week 16 Day Mon","","exeter_twilight","","","","","","","","","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","torbay_twilight","","","","night_weekday","","","","","","","","","night_weekday","","","truro_twilight","","" +"Week 16 Day Tue","","","exeter_twilight","","","","","","","","","","night_weekday","","","","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","torbay_twilight","","","","","truro_twilight","night_weekday","","","","","" +"Week 16 Day Wed","","","","","","exeter_twilight","","","","","","","night_weekday","","","plymouth_twilight","","","","","","","","","","","","","","","night_weekday","torbay_twilight","","","","","","","","night_weekday","","","truro_twilight","","" +"Week 16 Day Thu","","","","exeter_twilight","","","","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","torbay_twilight","","","","night_weekday","","","","","","","","","night_weekday","","","","truro_twilight","" +"Week 16 Day Fri","","night_weekend","weekend_exeter","","","","","","","","","plymouth_twilight","","","","","","","","","night_weekend","","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","night_weekend","","","","" +"Week 16 Day Sat","","night_weekend","weekend_exeter","","","","","","","","","","","","","","","","weekend_plymouth1","","night_weekend","weekend_plymouth2","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","night_weekend","","","","" +"Week 16 Day Sun","","night_weekend","weekend_exeter","","","","","","","","","","","","","","","","weekend_plymouth1","","night_weekend","weekend_plymouth2","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","night_weekend","","","","" +"Week 17 Day Mon","","","","","","exeter_twilight","","night_weekday","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","night_weekday","","","","","truro_twilight","","" +"Week 17 Day Tue","","","","exeter_twilight","","","","night_weekday","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","","torbay_twilight","","","","","","","","night_weekday","","","","","truro_twilight","","" +"Week 17 Day Wed","","","","","","exeter_twilight","","night_weekday","","","","","","night_weekday","","","","","","","plymouth_twilight","","","","","","","torbay_twilight","","","","","","","","","","night_weekday","","","truro_twilight","","","","" +"Week 17 Day Thu","","","exeter_twilight","","","","","night_weekday","","","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","night_weekday","","truro_twilight","","","","","" +"Week 17 Day Fri","","","","weekend_exeter","","","","","","","","","","","","","night_weekend","","","plymouth_twilight","","","","","","","","","weekend_torbay","","","","night_weekend","","","","night_weekend","","","","","weekend_truro","","","" +"Week 17 Day Sat","","","","weekend_exeter","","","","","","weekend_plymouth1","","weekend_plymouth2","","","","","night_weekend","","","","","","","","","","","","weekend_torbay","","","","night_weekend","","","","night_weekend","","","","","weekend_truro","","","" +"Week 17 Day Sun","","","","weekend_exeter","","","","","","weekend_plymouth1","","weekend_plymouth2","","","","","night_weekend","","","","","","","","","","","","weekend_torbay","","","","night_weekend","","","","night_weekend","","","","","weekend_truro","","","" +"Week 18 Day Mon","","","","","","exeter_twilight","","","","","","","","","","","","","","night_weekday","","","","plymouth_twilight","","night_weekday","torbay_twilight","","","","","","","","","","","","","night_weekday","truro_twilight","","","","" +"Week 18 Day Tue","","","","","","","exeter_twilight","","","","","","plymouth_twilight","","","","","","","night_weekday","","","","","","night_weekday","","","","","","torbay_twilight","","","","","","","","night_weekday","","","","","truro_twilight" +"Week 18 Day Wed","","","exeter_twilight","","","","","","","","","","","","","","","","","night_weekday","","","","","plymouth_twilight","night_weekday","","","","","","torbay_twilight","","","","","","","","night_weekday","","","","truro_twilight","" +"Week 18 Day Thu","","","exeter_twilight","","","","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","","night_weekday","","","","","","torbay_twilight","","","","","","","","night_weekday","","truro_twilight","","","" +"Week 18 Day Fri","","","","","weekend_exeter","","","","","plymouth_twilight","","","","","","","","","","","","","","night_weekend","","","","night_weekend","","","weekend_torbay","","","","","weekend_truro","","","night_weekend","","","","","","" +"Week 18 Day Sat","","","","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","","","","weekend_plymouth1","","","night_weekend","","","","night_weekend","","","weekend_torbay","","","","","weekend_truro","","","night_weekend","","","","","","" +"Week 18 Day Sun","","","","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","","","","weekend_plymouth1","","","night_weekend","","","","night_weekend","","","weekend_torbay","","","","","weekend_truro","","","night_weekend","","","","","","" +"Week 19 Day Mon","","exeter_twilight","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","","","torbay_twilight","","","","","night_weekday","","","","","","truro_twilight","night_weekday","","","","" +"Week 19 Day Tue","","","","exeter_twilight","","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","truro_twilight","","","night_weekday","","","","" +"Week 19 Day Wed","","","","","exeter_twilight","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","","","","","","","","torbay_twilight","night_weekday","","","","","truro_twilight","","night_weekday","","","","" +"Week 19 Day Thu","","exeter_twilight","","","","","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","","","","torbay_twilight","","","night_weekday","","","","","","","night_weekday","","","","truro_twilight" +"Week 19 Day Fri","","","weekend_exeter","","","","","","","","","","","","","night_weekend","","plymouth_twilight","","","","","","","","","","","night_weekend","","","weekend_torbay","","","","","","","","","","","night_weekend","weekend_truro","" +"Week 19 Day Sat","","","weekend_exeter","","","","","","","weekend_plymouth2","","","","","","night_weekend","","","","","","","weekend_plymouth1","","","","","","night_weekend","","","weekend_torbay","","","","","","","","","","","night_weekend","weekend_truro","" +"Week 19 Day Sun","","","weekend_exeter","","","","","","","weekend_plymouth2","","","","","","night_weekend","","","","","","","weekend_plymouth1","","","","","","night_weekend","","","weekend_torbay","","","","","","","","","","","night_weekend","weekend_truro","" +"Week 20 Day Mon","","exeter_twilight","","","","night_weekday","","","","","","","","","night_weekday","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","","","","","","","night_weekday","","","","","truro_twilight","","","","" +"Week 20 Day Tue","","","","","","night_weekday","","","exeter_twilight","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","torbay_twilight","","","","","","","","night_weekday","","","","","","","","","truro_twilight" +"Week 20 Day Wed","","exeter_twilight","","","","night_weekday","","","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","truro_twilight" +"Week 20 Day Thu","","","","","exeter_twilight","night_weekday","","","","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","","","","torbay_twilight","night_weekday","","","","","truro_twilight","","","","" +"Week 20 Day Fri","","","","","","","","weekend_exeter","night_weekend","","night_weekend","","","","","","","","","","","plymouth_twilight","","","","","","","","weekend_torbay","","","","","","","weekend_truro","","","night_weekend","","","","","" +"Week 20 Day Sat","","","","","","","","weekend_exeter","night_weekend","","night_weekend","","","","","","weekend_plymouth2","weekend_plymouth1","","","","","","","","","","","","weekend_torbay","","","","","","","weekend_truro","","","night_weekend","","","","","" +"Week 20 Day Sun","","","","","","","","weekend_exeter","night_weekend","","night_weekend","","","","","","weekend_plymouth2","weekend_plymouth1","","","","","","","","","","","","weekend_torbay","","","","","","","weekend_truro","","","night_weekend","","","","","" +"Week 21 Day Mon","","","","exeter_twilight","night_weekday","","","","","night_weekday","","","","","","","","","","","","","","plymouth_twilight","","","","","torbay_twilight","","","","","","","truro_twilight","","","","","","","","night_weekday","" +"Week 21 Day Tue","","","","exeter_twilight","night_weekday","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","","","night_weekday","" +"Week 21 Day Wed","","","","","night_weekday","exeter_twilight","","","","night_weekday","","","","","","","","","","","","","plymouth_twilight","","","","","","torbay_twilight","","","","","","","","","","","","","","","night_weekday","truro_twilight" +"Week 21 Day Thu","","","","","night_weekday","","","","exeter_twilight","night_weekday","","","","","","","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","","","","","night_weekday","" +"Week 21 Day Fri","","weekend_exeter","","","","","","","","","","","","","","","","","","plymouth_twilight","","night_weekend","","","","","weekend_torbay","","","","night_weekend","","","","","","","","","","","night_weekend","","","weekend_truro" +"Week 21 Day Sat","","weekend_exeter","","","","","","","","","","weekend_plymouth1","","weekend_plymouth2","","","","","","","","night_weekend","","","","","weekend_torbay","","","","night_weekend","","","","","","","","","","","night_weekend","","","weekend_truro" +"Week 21 Day Sun","","weekend_exeter","","","","","","","","","","weekend_plymouth1","","weekend_plymouth2","","","","","","","","night_weekend","","","","","weekend_torbay","","","","night_weekend","","","","","","","","","","","night_weekend","","","weekend_truro" +"Week 22 Day Mon","","","","night_weekday","","exeter_twilight","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","","","torbay_twilight","night_weekday","","","","","","truro_twilight","","","","","" +"Week 22 Day Tue","","","","night_weekday","","","","","exeter_twilight","","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","night_weekday","torbay_twilight","","truro_twilight","","","","","","","","" +"Week 22 Day Wed","","","","night_weekday","","","","","exeter_twilight","","","","","","","","","","","","night_weekday","","","plymouth_twilight","","torbay_twilight","","","","","","","","night_weekday","","","","","","","","","","","truro_twilight" +"Week 22 Day Thu","","","","night_weekday","exeter_twilight","","","","","","","","","","","","","","plymouth_twilight","","night_weekday","","","","","","","","torbay_twilight","","","","","night_weekday","","truro_twilight","","","","","","","","","" +"Week 22 Day Fri","","","weekend_exeter","","","night_weekend","","","","plymouth_twilight","night_weekend","","","","","","","","","","","","","","","","","weekend_torbay","","","","","night_weekend","","","","","weekend_truro","","","","","","","" +"Week 22 Day Sat","","","weekend_exeter","","","night_weekend","","","","","night_weekend","","","","","","","","weekend_plymouth2","","","","","weekend_plymouth1","","","","weekend_torbay","","","","","night_weekend","","","","","weekend_truro","","","","","","","" +"Week 22 Day Sun","","","weekend_exeter","","","night_weekend","","","","","night_weekend","","","","","","","","weekend_plymouth2","","","","","weekend_plymouth1","","","","weekend_torbay","","","","","night_weekend","","","","","weekend_truro","","","","","","","" +"Week 23 Day Mon","","exeter_twilight","","","","","","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","","torbay_twilight","","","night_weekday","","","","","","","","","truro_twilight","","","night_weekday","","","" +"Week 23 Day Tue","","","","","","","","","exeter_twilight","night_weekday","","plymouth_twilight","","","","","","","","","","","","","","","","","","night_weekday","","torbay_twilight","","","","","truro_twilight","","","","","night_weekday","","","" +"Week 23 Day Wed","","","exeter_twilight","","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","","","torbay_twilight","","night_weekday","","","","","","truro_twilight","","","","","","night_weekday","","","" +"Week 23 Day Thu","","","","exeter_twilight","","","","","","night_weekday","","","","","","","","","","","","plymouth_twilight","","","","","","","","night_weekday","","torbay_twilight","","","","","","","","","","night_weekday","","","truro_twilight" +"Week 23 Day Fri","","","","","","","","weekend_exeter","","","plymouth_twilight","","","","","","","","","","","","night_weekend","","","weekend_torbay","night_weekend","","","","","","","","","","","","night_weekend","","weekend_truro","","","","" +"Week 23 Day Sat","","","","","","","","weekend_exeter","","","","","weekend_plymouth2","","","","","weekend_plymouth1","","","","","night_weekend","","","weekend_torbay","night_weekend","","","","","","","","","","","","night_weekend","","weekend_truro","","","","" +"Week 23 Day Sun","","","","","","","","weekend_exeter","","","","","weekend_plymouth2","","","","","weekend_plymouth1","","","","","night_weekend","","","weekend_torbay","night_weekend","","","","","","","","","","","","night_weekend","","weekend_truro","","","","" +"Week 24 Day Mon","","","","exeter_twilight","","","","","","","","","","night_weekday","","","","","","","","plymouth_twilight","","night_weekday","","","","night_weekday","","","","","torbay_twilight","","","","","","","truro_twilight","","","","","" +"Week 24 Day Tue","","exeter_twilight","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","night_weekday","","","","night_weekday","","","","","torbay_twilight","","","truro_twilight","","","","","","","","","" +"Week 24 Day Wed","","exeter_twilight","","","","","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","","night_weekday","","","","night_weekday","","","","","torbay_twilight","","","","","","truro_twilight","","","","","","" +"Week 24 Day Thu","","","","","","","","","exeter_twilight","","","plymouth_twilight","","night_weekday","","","","","","","","","","night_weekday","","","","night_weekday","","","","","torbay_twilight","","","","","","truro_twilight","","","","","","" +"Week 24 Day Fri","night_weekend","","","weekend_exeter","","","","","","","","","","","","","","","","","","night_weekend","plymouth_twilight","","","","","","weekend_torbay","","","","","","","weekend_truro","night_weekend","","","","","","","","" +"Week 24 Day Sat","night_weekend","","","weekend_exeter","","","","","","","weekend_plymouth2","","","","weekend_plymouth1","","","","","","","night_weekend","","","","","","","weekend_torbay","","","","","","","weekend_truro","night_weekend","","","","","","","","" +"Week 24 Day Sun","night_weekend","","","weekend_exeter","","","","","","","weekend_plymouth2","","","","weekend_plymouth1","","","","","","","night_weekend","","","","","","","weekend_torbay","","","","","","","weekend_truro","night_weekend","","","","","","","","" +"Week 25 Day Mon","","","","","","","exeter_twilight","night_weekday","","","","","","","","night_weekday","","","","","","","","plymouth_twilight","","night_weekday","torbay_twilight","","","","","","","","","","","","","","","","","","truro_twilight" +"Week 25 Day Tue","","","","","","","","night_weekday","exeter_twilight","","","","","plymouth_twilight","","night_weekday","","","","","","","","","","night_weekday","","","","torbay_twilight","","","","","","","","","","","","","","","truro_twilight" +"Week 25 Day Wed","","exeter_twilight","","","","","","night_weekday","","","","","","","","night_weekday","","","","","","","","plymouth_twilight","","night_weekday","torbay_twilight","","","","","","","","","","","","","truro_twilight","","","","","" +"Week 25 Day Thu","","","","","","","exeter_twilight","night_weekday","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","","night_weekday","","","","torbay_twilight","","","","","","","truro_twilight","","","","","","","","" +"Week 25 Day Fri","","","","","night_weekend","","","","weekend_exeter","","plymouth_twilight","","","","","","","","","","night_weekend","","","","","","","weekend_torbay","","","","","","","","","","","night_weekend","","","weekend_truro","","","" +"Week 25 Day Sat","","","","","night_weekend","","","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","night_weekend","","","weekend_plymouth1","","","","weekend_torbay","","","","","","","","","","","night_weekend","","","weekend_truro","","","" +"Week 25 Day Sun","","","","","night_weekend","","","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","night_weekend","","","weekend_plymouth1","","","","weekend_torbay","","","","","","","","","","","night_weekend","","","weekend_truro","","","" +"Week 26 Day Mon","","","","exeter_twilight","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","plymouth_bank_holidays","","","","","","night_weekday","","","","torbay_twilight","night_weekday","","truro_twilight","","","","","","","" +"Week 26 Day Tue","","","exeter_twilight","","","","","","","","","","","","night_weekday","","","","","","","","plymouth_twilight","","","","","","","","night_weekday","","","","torbay_twilight","night_weekday","","","","truro_twilight","","","","","" +"Week 26 Day Wed","","","","","","","","","exeter_twilight","","","","","","night_weekday","","","plymouth_twilight","","","","","","","","","","","","","night_weekday","","","","torbay_twilight","night_weekday","","","","","truro_twilight","","","","" +"Week 26 Day Thu","","","","","","","exeter_twilight","","","","","","","","night_weekday","","","","","","","","","plymouth_twilight","","","","torbay_twilight","","","night_weekday","","","","","night_weekday","","","truro_twilight","","","","","","" +"Week 26 Day Fri","","","weekend_exeter","night_weekend","","","","","","","","","night_weekend","","","","","","","","","","","plymouth_twilight","","weekend_torbay","","","","","","night_weekend","","","","","","","","weekend_truro","","","","","" +"Week 26 Day Sat","","","weekend_exeter","night_weekend","","","","","","","","weekend_plymouth2","night_weekend","weekend_plymouth1","","","","","","","","","","","","weekend_torbay","","","","","","night_weekend","","","","","","","","weekend_truro","","","","","" +"Week 26 Day Sun","","","weekend_exeter","night_weekend","","","","","","","","weekend_plymouth2","night_weekend","weekend_plymouth1","","","","","","","","","","","","weekend_torbay","","","","","","night_weekend","","","","","","","","weekend_truro","","","","","" diff --git a/rota.csv b/rota.csv index 9953c6e..b0f9468 100644 --- a/rota.csv +++ b/rota.csv @@ -1,95 +1,186 @@ -"Name","Madalina Drumea","Layla Bell","Alex wood","Max Ireland","Seren Peters","Charles Finan","Paul Ward","Delilah Trimmer","Tom Welsh","Kyaw Tint","Maththew O'Brien","Max Finzel","Zainab Sharaf","Jean Skumar","Michael Tomek","Dhuvresh Patel","Nicolas Dziadulewicz","Vilim Kalamar","Georgina Edwards","Jenn Haw fong","Paul Jenkins","Amoolya Mannava","Rebecca Murphy","Ross Kruger","Fiona Lyall","Wijhdan Abusrewil","Andrew MacCormick","Joel Lim","Mark Haley","Alexander Sanchez - cabello","Chong Yew Ng","Matthew Thorley","Sayed Hashim Alqarooni","Harriet Conley","Jon Skinner","Alexander Wijnberg","Cameron Bullock","Alan Eccles","Christian Greer","Hannah Lewis","Amina Odeh","Sarath Vennam","Mo Babsail","Richard Chaytor","Sherafghan PROC" +"Name","Madalina Drumea","Layla Bell","Alex wood","Max Ireland","Seren Peters","Charles Finan","Paul Ward","Delilah Trimmer","Tom Welsh","Kyaw Tint","Maththew O'Brien","Max Finzel","Zainab Sharaf","Jean Skumar","Michael Tomek","Dhuvresh Patel","Nicolas Dziadulewicz","Vilim Kalamar","Georgina Edwards","Jenn Haw fong","Paul Jenkins","Amoolya Mannava","Rebecca Murphy","Ross Kruger","Fiona Lyall","Wijhdan Abusrewil","Andrew MacCormick","Joel Lim","Mark Haley","Alexander Sanchez - cabello","Chong Yew Ng","Matthew Thorley","Sayed Hashim Alqarooni","Harriet Conley","Jon Skinner","Alexander Wijnberg","Cameron Bullock","Alan Eccles","Christian Greer","Hannah Lewis","Amina Odeh","Sarath Vennam","Richard Chaytor","Mo Babsail","Sherafghan PROC" "Site","barnstaple","exeter","exeter","exeter","exeter","exeter","exeter","exeter","exeter","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth","plymouth_twilights","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay","torbay twilights","truro","truro","truro","truro","truro","truro","truro","truro","truro","truro no proc" "Grade","3","2","3","3","3","4","4","5","5","2","2","2","2","3","3","3","3","3","4","4","4","5","5","5","6","2","2","2","2","3","4","4","4","5","6","2","2","3","3","3","4","4","5","5","5" "FTE","80","100","100","100","100","100","100","80","100","100","100","100","100","60","80","100","100","100","80","100","100","100","100","100","60","100","100","100","100","100","100","100","100","60","100","100","100","80","100","100","100","100","100","100","100" -"Week 1 Day Mon","","","night_weekday","","","exeter_twilight","","","","","","","","","","","","","night_weekday","","","plymouth_twilight","","","","","night_weekday","","","","","","","","torbay_twilight","","","","","truro_twilight","","","","","" -"Week 1 Day Tue","","","night_weekday","","","","","exeter_twilight","","","","","","","","","plymouth_twilight","","night_weekday","","","","","","","","night_weekday","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","" -"Week 1 Day Wed","","","night_weekday","","","exeter_twilight","","","","","","","","","","","","","night_weekday","","","","plymouth_twilight","","","","night_weekday","","","","","","","","torbay_twilight","","","","","","","truro_twilight","","","" -"Week 1 Day Thu","","exeter_twilight","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","night_weekday","","","","","","","","torbay_twilight","","","","","truro_twilight","","","","","" -"Week 1 Day Fri","","","","","night_weekend","","weekend_exeter","","","","","night_weekend","","","","plymouth_twilight","","","","","","","","","","","","","weekend_torbay","","","","","","","","","","","","weekend_truro","","night_weekend","","" -"Week 1 Day Sat","","","","","night_weekend","","weekend_exeter","","","weekend_plymouth1","","night_weekend","","","","","","","","","weekend_plymouth2","","","","","","","","weekend_torbay","","","","","","","","","","","","weekend_truro","","night_weekend","","" -"Week 1 Day Sun","","","","","night_weekend","","weekend_exeter","","","weekend_plymouth1","","night_weekend","","","","","","","","","weekend_plymouth2","","","","","","","","weekend_torbay","","","","","","","","","","","","weekend_truro","","night_weekend","","" -"Week 2 Day Mon","","","exeter_twilight","night_weekday","","","","","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","","","torbay_twilight","","","","","","","night_weekday","","","","","","","","","","","truro_twilight" -"Week 2 Day Tue","","exeter_twilight","","night_weekday","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","truro_twilight","","","","","","","" -"Week 2 Day Wed","","","","night_weekday","exeter_twilight","","","","","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","","torbay_twilight","","","","","","","night_weekday","","","","","","","","","","truro_twilight","" -"Week 2 Day Thu","","","","night_weekday","","","exeter_twilight","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","torbay_twilight","","","","","","","night_weekday","","","","","","","","","truro_twilight","","" -"Week 2 Day Fri","","","","","","weekend_exeter","","","","","","","night_weekend","","","","","","","plymouth_twilight","","","","","","","","","","","weekend_torbay","night_weekend","","","","","weekend_truro","","","","","night_weekend","","","" -"Week 2 Day Sat","","","","","","weekend_exeter","","","","","","","night_weekend","","weekend_plymouth2","","weekend_plymouth1","","","","","","","","","","","","","","weekend_torbay","night_weekend","","","","","weekend_truro","","","","","night_weekend","","","" -"Week 2 Day Sun","","","","","","weekend_exeter","","","","","","","night_weekend","","weekend_plymouth2","","weekend_plymouth1","","","","","","","","","","","","","","weekend_torbay","night_weekend","","","","","weekend_truro","","","","","night_weekend","","","" -"Week 3 Day Mon","","","exeter_twilight","","","","","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","night_weekday","torbay_twilight","","","","","","","","","","night_weekday","","truro_twilight","","","","","" -"Week 3 Day Tue","","exeter_twilight","","","","","","","","","","","","","","","","","","","night_weekday","","","","plymouth_twilight","","night_weekday","torbay_twilight","","","","","","","","","","night_weekday","","truro_twilight","","","","","" -"Week 3 Day Wed","","","","","","exeter_twilight","","","","","","","","","","","","","plymouth_twilight","","night_weekday","","","","","","night_weekday","","","torbay_twilight","","","","","","","truro_twilight","night_weekday","","","","","","","" -"Week 3 Day Thu","","","exeter_twilight","","","","","","","","","plymouth_twilight","","","","","","","","","night_weekday","","","","","","night_weekday","torbay_twilight","","","","","","","","","","night_weekday","","","","","truro_twilight","","" -"Week 3 Day Fri","night_weekend","weekend_exeter","","","","","","","","","","","","","","","","","","","","plymouth_twilight","","night_weekend","","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","","weekend_truro" -"Week 3 Day Sat","night_weekend","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","","","","","","weekend_plymouth1","","","","night_weekend","","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","","weekend_truro" -"Week 3 Day Sun","night_weekend","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","","","","","","weekend_plymouth1","","","","night_weekend","","","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","","weekend_truro" -"Week 4 Day Mon","","","night_weekday","","exeter_twilight","","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","","","truro_twilight","","" -"Week 4 Day Tue","","","night_weekday","","","","","","exeter_twilight","","plymouth_twilight","","night_weekday","","","","","","","","","","","","","","","","","","","night_weekday","","","torbay_twilight","","truro_twilight","","","","","","","","" -"Week 4 Day Wed","","","night_weekday","exeter_twilight","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","","","","","truro_twilight" -"Week 4 Day Thu","","","night_weekday","exeter_twilight","","","","","","","","","night_weekday","","","","","","","","","","","","plymouth_twilight","","","","","torbay_twilight","","night_weekday","","","","","","","","","","","","","truro_twilight" -"Week 4 Day Fri","","","","","","night_weekend","","","weekend_exeter","","night_weekend","","","","","","plymouth_twilight","","","","","","","","","","","","","","weekend_torbay","","","","","","weekend_truro","","","","","","","night_weekend","" -"Week 4 Day Sat","","","","","","night_weekend","","","weekend_exeter","","night_weekend","","","weekend_plymouth1","","","","","","","","","weekend_plymouth2","","","","","","","","weekend_torbay","","","","","","weekend_truro","","","","","","","night_weekend","" -"Week 4 Day Sun","","","","","","night_weekend","","","weekend_exeter","","night_weekend","","","weekend_plymouth1","","","","","","","","","weekend_plymouth2","","","","","","","","weekend_torbay","","","","","","weekend_truro","","","","","","","night_weekend","" -"Week 5 Day Mon","","","","","exeter_twilight","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","night_weekday","","","","torbay_twilight","","","","","","","","truro_twilight","night_weekday","","","" -"Week 5 Day Tue","","","","","","","","exeter_twilight","","","","","","","","","","","","night_weekday","","plymouth_twilight","","","","","","","night_weekday","","","","torbay_twilight","","","","","truro_twilight","","","","night_weekday","","","" -"Week 5 Day Wed","","","","","exeter_twilight","","","","","","","","","","","","","","","night_weekday","","","","plymouth_twilight","","","","","night_weekday","","","","torbay_twilight","","","","","","","","","night_weekday","","truro_twilight","" -"Week 5 Day Thu","","","","","","","","","exeter_twilight","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","night_weekday","","","","torbay_twilight","","","","","","","","","night_weekday","","truro_twilight","" -"Week 5 Day Fri","","","","weekend_exeter","","","","","","plymouth_twilight","","","","","","","","night_weekend","","","","","","","","","","night_weekend","","weekend_torbay","","","","","","","","","","weekend_truro","night_weekend","","","","" -"Week 5 Day Sat","","","","weekend_exeter","","","","","","","","","","","weekend_plymouth1","","","night_weekend","","","","","","weekend_plymouth2","","","","night_weekend","","weekend_torbay","","","","","","","","","","weekend_truro","night_weekend","","","","" -"Week 5 Day Sun","","","","weekend_exeter","","","","","","","","","","","weekend_plymouth1","","","night_weekend","","","","","","weekend_plymouth2","","","","night_weekend","","weekend_torbay","","","","","","","","","","weekend_truro","night_weekend","","","","" -"Week 6 Day Mon","","exeter_twilight","","","night_weekday","","","","","night_weekday","","","","","","","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","","","","truro_twilight","","" -"Week 6 Day Tue","","","exeter_twilight","","night_weekday","","","","","night_weekday","","","","","","","","","","","","","","","plymouth_twilight","","","","torbay_twilight","","night_weekday","","","","","","","truro_twilight","","","","","","","" -"Week 6 Day Wed","","","","","night_weekday","","exeter_twilight","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","","","","","","","night_weekday","","","","torbay_twilight","","","","","","","","truro_twilight","","" -"Week 6 Day Thu","","","","","night_weekday","","exeter_twilight","","","night_weekday","","","","","","","","","","","","plymouth_twilight","","","","","","","torbay_twilight","","night_weekday","","","","","","","","truro_twilight","","","","","","" -"Week 6 Day Fri","night_weekend","weekend_exeter","","","","","","","night_weekend","","plymouth_twilight","","","","plymouth_bank_holidays","","night_weekend","","","","","","","","","","weekend_torbay","","","","","","","","","","","weekend_truro","","","","","","","" -"Week 6 Day Sat","night_weekend","weekend_exeter","","","","","","","night_weekend","","","","","","","","night_weekend","","","weekend_plymouth1","","","weekend_plymouth2","","","","weekend_torbay","","","","","","","","","","","weekend_truro","","","","","","","" -"Week 6 Day Sun","night_weekend","weekend_exeter","","","","","","","night_weekend","","","","","","","","night_weekend","","","weekend_plymouth1","","","weekend_plymouth2","","","","weekend_torbay","","","","","","","","","","","weekend_truro","","","","","","","" -"Week 7 Day Mon","","","exeter_twilight","","","night_weekday","","","","","night_weekday","","","","","","","","","","","","","plymouth_twilight","","","","","","","","torbay_twilight","","","","","","","","","","night_weekday","truro_twilight","","" -"Week 7 Day Tue","","","","","","night_weekday","","exeter_twilight","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","","","","","","","torbay_twilight","","","","truro_twilight","","","","","","night_weekday","","","" -"Week 7 Day Wed","","","exeter_twilight","","","night_weekday","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","","","","","","truro_twilight","","","night_weekday","","","" -"Week 7 Day Thu","","exeter_twilight","","","","night_weekday","","","","","night_weekday","","","","","","","","","","","","","plymouth_twilight","","","","","","","","torbay_twilight","","","","truro_twilight","","","","","","night_weekday","","","" -"Week 7 Day Fri","","","","weekend_exeter","","","night_weekend","","","","","","","","","","","night_weekend","","","","","plymouth_twilight","","","","","weekend_torbay","","","","","","","","","","","","night_weekend","","","","weekend_truro","" -"Week 7 Day Sat","","","","weekend_exeter","","","night_weekend","","","","","","","","","","","night_weekend","weekend_plymouth2","","","weekend_plymouth1","","","","","","weekend_torbay","","","","","","","","","","","","night_weekend","","","","weekend_truro","" -"Week 7 Day Sun","","","","weekend_exeter","","","night_weekend","","","","","","","","","","","night_weekend","weekend_plymouth2","","","weekend_plymouth1","","","","","","weekend_torbay","","","","","","","","","","","","night_weekend","","","","weekend_truro","" -"Week 8 Day Mon","","","","","","","","night_weekday","exeter_twilight","","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","truro_twilight","","","" -"Week 8 Day Tue","","","","","","","","night_weekday","exeter_twilight","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","truro_twilight","","","","" -"Week 8 Day Wed","","","","","","exeter_twilight","","night_weekday","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","","","truro_twilight","","","" -"Week 8 Day Thu","","","","","exeter_twilight","","","night_weekday","","","","","","night_weekday","","","","","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","truro_twilight","","","","","","" -"Week 8 Day Fri","","","weekend_exeter","","","","","","","night_weekend","","","","","","","","","","","plymouth_twilight","","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","night_weekend","","","","" -"Week 8 Day Sat","","","weekend_exeter","","","","","","","night_weekend","","","","","weekend_plymouth2","","","","","","","","","weekend_plymouth1","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","night_weekend","","","","" -"Week 8 Day Sun","","","weekend_exeter","","","","","","","night_weekend","","","","","weekend_plymouth2","","","","","","","","","weekend_plymouth1","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","night_weekend","","","","" -"Week 9 Day Mon","night_weekday","","","","","exeter_twilight","","","","","","plymouth_twilight","","","","","","","","","plymouth_bank_holidays","","night_weekday","","","","","","","","","","torbay_twilight","","","","","truro_twilight","","","","","","night_weekday","" -"Week 9 Day Tue","night_weekday","","","","exeter_twilight","","","","","","plymouth_twilight","","","","","","","","","","","","night_weekday","","","","","","","","","","torbay_twilight","","","truro_twilight","","","","","","","","night_weekday","" -"Week 9 Day Wed","night_weekday","","","exeter_twilight","","","","","","","","","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","night_weekday","" -"Week 9 Day Thu","night_weekday","","exeter_twilight","","","","","","","","","","","","","plymouth_twilight","","","","","","","night_weekday","","","","","","","","","","torbay_twilight","","","","","","","","truro_twilight","","","night_weekday","" -"Week 9 Day Fri","","weekend_exeter","","","","","","","","","","","","","","","","plymouth_twilight","","","","night_weekend","","","","weekend_torbay","","","night_weekend","","","","","","","","","","night_weekend","","","weekend_truro","","","" -"Week 9 Day Sat","","weekend_exeter","","","","","","","","","weekend_plymouth2","","weekend_plymouth1","","","","","","","","","night_weekend","","","","weekend_torbay","","","night_weekend","","","","","","","","","","night_weekend","","","weekend_truro","","","" -"Week 9 Day Sun","","weekend_exeter","","","","","","","","","weekend_plymouth2","","weekend_plymouth1","","","","","","","","","night_weekend","","","","weekend_torbay","","","night_weekend","","","","","","","","","","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","","","","","","","night_weekday","","exeter_twilight","","","","","","","night_weekday","","","","","","","plymouth_twilight","","","torbay_twilight","","","","","","","","","","night_weekday","","","truro_twilight","","","","","","" -"Week 10 Day Thu","","","","","","","night_weekday","exeter_twilight","","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","","torbay_twilight","","","","","night_weekday","","","","","","","truro_twilight","","" -"Week 10 Day Fri","","","weekend_exeter","","","","","","","","","","","","","","","","","night_weekend","plymouth_twilight","","","","","","night_weekend","","","","","","","weekend_torbay","","","","","","night_weekend","","","","weekend_truro","" -"Week 10 Day Sat","","","weekend_exeter","","","","","","","","","","","weekend_plymouth2","","","","","weekend_plymouth1","night_weekend","","","","","","","night_weekend","","","","","","","weekend_torbay","","","","","","night_weekend","","","","weekend_truro","" -"Week 10 Day Sun","","","weekend_exeter","","","","","","","","","","","weekend_plymouth2","","","","","weekend_plymouth1","night_weekend","","","","","","","night_weekend","","","","","","","weekend_torbay","","","","","","night_weekend","","","","weekend_truro","" -"Week 11 Day Mon","","","","exeter_twilight","","","","night_weekday","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","","","","night_weekday","torbay_twilight","","","","","","","","","","","","truro_twilight","","","","" -"Week 11 Day Tue","","","","exeter_twilight","","","","night_weekday","","","","","plymouth_twilight","","night_weekday","","","","","","","","","","","","","night_weekday","torbay_twilight","","","","","","","","","","","","","truro_twilight","","","" -"Week 11 Day Wed","","","","","exeter_twilight","","","night_weekday","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","","","night_weekday","torbay_twilight","","","","","","","","truro_twilight","","","","","","","","" -"Week 11 Day Thu","","","","","","","","night_weekday","exeter_twilight","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","","","night_weekday","torbay_twilight","","","","","","","","truro_twilight","","","","","","","","" -"Week 11 Day Fri","","night_weekend","","","weekend_exeter","","","","","","","","","","","","","","","plymouth_twilight","","night_weekend","","","","","","","","","","","weekend_torbay","","","weekend_truro","","","","","","","night_weekend","","" -"Week 11 Day Sat","","night_weekend","","","weekend_exeter","","","","","","weekend_plymouth2","","","","","","","","","","","night_weekend","weekend_plymouth1","","","","","","","","","","weekend_torbay","","","weekend_truro","","","","","","","night_weekend","","" -"Week 11 Day Sun","","night_weekend","","","weekend_exeter","","","","","","weekend_plymouth2","","","","","","","","","","","night_weekend","weekend_plymouth1","","","","","","","","","","weekend_torbay","","","weekend_truro","","","","","","","night_weekend","","" -"Week 12 Day Mon","","","","","","","","exeter_twilight","night_weekday","","","plymouth_twilight","","","","","","","","","","","","night_weekday","","night_weekday","","torbay_twilight","","","","","","","","","","","","","","","","","truro_twilight" -"Week 12 Day Tue","","","","","","","exeter_twilight","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","night_weekday","","night_weekday","","torbay_twilight","","","","","","","","","","","truro_twilight","","","","","","" -"Week 12 Day Wed","","exeter_twilight","","","","","","","night_weekday","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","night_weekday","","torbay_twilight","","","","","","","","","","","","truro_twilight","","","","","" -"Week 12 Day Thu","","","","","","","exeter_twilight","","night_weekday","","","","","","","","","","","","","plymouth_twilight","","night_weekday","","night_weekday","","torbay_twilight","","","","","","","","","","","","","","","","","truro_twilight" -"Week 12 Day Fri","","","","night_weekend","","","","weekend_exeter","","plymouth_twilight","","night_weekend","","","","","","","","","","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","weekend_truro","","","","","","" -"Week 12 Day Sat","","","","night_weekend","","","","weekend_exeter","","","","night_weekend","","","","","","weekend_plymouth2","weekend_plymouth1","","","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","weekend_truro","","","","","","" -"Week 12 Day Sun","","","","night_weekend","","","","weekend_exeter","","","","night_weekend","","","","","","weekend_plymouth2","weekend_plymouth1","","","","","","","","","","","","night_weekend","weekend_torbay","","","","","","","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","","","","","","","","","","","","","","night_weekday","plymouth_twilight","","","torbay_twilight","","","night_weekday","","","","","","","","","","","","","","","truro_twilight" -"Week 13 Day Wed","","","","","night_weekday","","exeter_twilight","","","","","","","","","plymouth_twilight","","","","","","","night_weekday","","","","torbay_twilight","","","night_weekday","","","","","","","","","truro_twilight","","","","","","" -"Week 13 Day Thu","","","","exeter_twilight","night_weekday","","","","","","","","","","","","","plymouth_twilight","","plymouth_bank_holidays","","","night_weekday","","","","torbay_twilight","","","night_weekday","","","","","","","","","","","","","","","truro_twilight" -"Week 13 Day Fri","","","","","","weekend_exeter","","","","","","","","","","","night_weekend","plymouth_twilight","plymouth_bank_holidays","","","","","","","weekend_torbay","","","","","","","night_weekend","","","","night_weekend","","","","","weekend_truro","","","" -"Week 13 Day Sat","","","","","","weekend_exeter","","","","","","","","","","weekend_plymouth2","night_weekend","","","","weekend_plymouth1","","","","","weekend_torbay","","","","","","","night_weekend","","","","night_weekend","","","","","weekend_truro","","","" -"Week 13 Day Sun","","","","","","weekend_exeter","","","","","","","","","","weekend_plymouth2","night_weekend","","","","weekend_plymouth1","","","","","weekend_torbay","","","","","","","night_weekend","","","","night_weekend","","","","","weekend_truro","","","" +"Week 1 Day Mon","night_weekday","","","","","night_weekday","exeter_twilight","","","","","","night_weekday","","","","","","","","","plymouth_twilight","","","","","","","torbay_twilight","","","","","","","","","","","","","","","truro_twilight","" +"Week 1 Day Tue","night_weekday","","exeter_twilight","","","night_weekday","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight","","","" +"Week 1 Day Wed","night_weekday","","exeter_twilight","","","night_weekday","","","","","plymouth_twilight","","night_weekday","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","","","","","truro_twilight","" +"Week 1 Day Thu","night_weekday","","","exeter_twilight","","night_weekday","","","","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","","torbay_twilight","","","","","","","","","","","","","","truro_twilight","" +"Week 1 Day Fri","","","","","","","weekend_exeter","","","","","","","","","","","night_weekend","","plymouth_twilight","","","","","","","weekend_torbay","","","","night_weekend","","","","","","night_weekend","","","","weekend_truro","","","","" +"Week 1 Day Sat","","","","","","","weekend_exeter","","","weekend_plymouth2","","","","","weekend_plymouth1","","","night_weekend","","","","","","","","","weekend_torbay","","","","night_weekend","","","","","","night_weekend","","","","weekend_truro","","","","" +"Week 1 Day Sun","","","","","","","weekend_exeter","","","weekend_plymouth2","","","","","weekend_plymouth1","","","night_weekend","","","","","","","","","weekend_torbay","","","","night_weekend","","","","","","night_weekend","","","","weekend_truro","","","","" +"Week 2 Day Mon","","","","","","exeter_twilight","","","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","night_weekday","","","","torbay_twilight","","","","","","night_weekday","","","","","","truro_twilight","" +"Week 2 Day Tue","","exeter_twilight","","","","","","","","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","night_weekday","","","","","","torbay_twilight","","","","night_weekday","","","","","","truro_twilight","" +"Week 2 Day Wed","","","","","","exeter_twilight","","","","","","","","","","","","","","","","","night_weekday","","plymouth_twilight","","","night_weekday","","","","","","torbay_twilight","","","","night_weekday","","","","","truro_twilight","","" +"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","","","","","","","","","night_weekend","","","","","","","","","plymouth_twilight","","","","","","","","weekend_torbay","","","","night_weekend","","","","","","","","","weekend_truro","","","" +"Week 2 Day Sat","","weekend_exeter","night_weekend","","","","","","","","weekend_plymouth2","night_weekend","","weekend_plymouth1","","","","","","","","","","","","","","","weekend_torbay","","","","night_weekend","","","","","","","","","weekend_truro","","","" +"Week 2 Day Sun","","weekend_exeter","night_weekend","","","","","","","","weekend_plymouth2","night_weekend","","weekend_plymouth1","","","","","","","","","","","","","","","weekend_torbay","","","","night_weekend","","","","","","","","","weekend_truro","","","" +"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","","","","","","","","","","","","","night_weekday","truro_twilight" +"Week 3 Day Wed","","","exeter_twilight","","","","","","","","plymouth_twilight","","","","","","","night_weekday","","","","","","","","","night_weekday","","","","torbay_twilight","","","","","","","","truro_twilight","","","","","night_weekday","" +"Week 3 Day Thu","","","exeter_twilight","","","","","","","","","plymouth_twilight","","","","","","night_weekday","","","","","","","","","night_weekday","","","torbay_twilight","","","","","","","","","","","","truro_twilight","","night_weekday","" +"Week 3 Day Fri","","","","","","weekend_exeter","night_weekend","","","plymouth_twilight","","","night_weekend","","","","","","","","","","","","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","" +"Week 3 Day Sat","","","","","","weekend_exeter","night_weekend","","","","","","night_weekend","","","weekend_plymouth1","","","","","weekend_plymouth2","","","","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","" +"Week 3 Day Sun","","","","","","weekend_exeter","night_weekend","","","","","","night_weekend","","","weekend_plymouth1","","","","","weekend_plymouth2","","","","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","" +"Week 4 Day Mon","","","night_weekday","","","","","exeter_twilight","","","","","","","","","","","","night_weekday","","","plymouth_twilight","","","","","torbay_twilight","","","","","","","","night_weekday","","","","","","","truro_twilight","","" +"Week 4 Day Tue","","","night_weekday","","","","","","exeter_twilight","","","","","","","","","","","night_weekday","","","plymouth_twilight","","","","","torbay_twilight","","","","","","","","night_weekday","","","","","","","","truro_twilight","" +"Week 4 Day Wed","","","night_weekday","","","exeter_twilight","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","torbay_twilight","","","","","","","","night_weekday","","","truro_twilight","","","","","","" +"Week 4 Day Thu","","","night_weekday","","","","","exeter_twilight","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","torbay_twilight","","","","","","","","night_weekday","","","","","","","","","truro_twilight" +"Week 4 Day Fri","","","","night_weekend","weekend_exeter","","","","","night_weekend","","","","","","","","","","","","","","plymouth_twilight","","","","","weekend_torbay","","","","","","","","weekend_truro","","","","","night_weekend","","","" +"Week 4 Day Sat","","","","night_weekend","weekend_exeter","","","","","night_weekend","weekend_plymouth2","","","","","","","","","","","","weekend_plymouth1","","","","","","weekend_torbay","","","","","","","","weekend_truro","","","","","night_weekend","","","" +"Week 4 Day Sun","","","","night_weekend","weekend_exeter","","","","","night_weekend","weekend_plymouth2","","","","","","","","","","","","weekend_plymouth1","","","","","","weekend_torbay","","","","","","","","weekend_truro","","","","","night_weekend","","","" +"Week 5 Day Mon","","","","","","exeter_twilight","","night_weekday","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","night_weekday","","","torbay_twilight","","","","","","truro_twilight","","","","","","" +"Week 5 Day Tue","","","","","","","exeter_twilight","night_weekday","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","","","","","night_weekday","","","torbay_twilight","","","","","","","","","","","truro_twilight","" +"Week 5 Day Wed","","","","","","","","night_weekday","exeter_twilight","","","","","","night_weekday","","plymouth_twilight","","","","","","","","","","","","","night_weekday","","","torbay_twilight","","","","","","","truro_twilight","","","","","" +"Week 5 Day Thu","","","","exeter_twilight","","","","night_weekday","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","","","","","","night_weekday","","","torbay_twilight","","","","truro_twilight","","","","","","","","" +"Week 5 Day Fri","","weekend_exeter","","","","","","","","","","","","","","plymouth_twilight","","","","","","","","night_weekend","","","","night_weekend","","","weekend_torbay","","","","","","","","night_weekend","weekend_truro","","","","","" +"Week 5 Day Sat","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","","","","","weekend_plymouth1","","","","","night_weekend","","","","night_weekend","","","weekend_torbay","","","","","","","","night_weekend","weekend_truro","","","","","" +"Week 5 Day Sun","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","","","","","weekend_plymouth1","","","","","night_weekend","","","","night_weekend","","","weekend_torbay","","","","","","","","night_weekend","weekend_truro","","","","","" +"Week 6 Day Mon","","","","","","","","exeter_twilight","","","","","","","","","night_weekday","","","plymouth_twilight","","","","","","","night_weekday","","torbay_twilight","","","","","","","","","","","","","truro_twilight","","night_weekday","" +"Week 6 Day Tue","","","exeter_twilight","","","","","","","","","","","","plymouth_twilight","","night_weekday","","","","","","","","","","night_weekday","","torbay_twilight","","","","","","","truro_twilight","","","","","","","","night_weekday","" +"Week 6 Day Wed","","exeter_twilight","","","","","","","","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","","night_weekday","","torbay_twilight","","","","","","","truro_twilight","","","","","","","","night_weekday","" +"Week 6 Day Thu","","","","","","","exeter_twilight","","","","","","","","","","night_weekday","","","plymouth_twilight","","","","","","","night_weekday","","torbay_twilight","","","","","","","truro_twilight","","","","","","","","night_weekday","" +"Week 6 Day Fri","","","","weekend_exeter","night_weekend","","","","","","plymouth_twilight","","","","","","","plymouth_bank_holidays","","","night_weekend","","","","","","","","","weekend_torbay","","","","","","","night_weekend","weekend_truro","","","","","","","" +"Week 6 Day Sat","","","","weekend_exeter","night_weekend","","","","","","","","","","weekend_plymouth2","","","","","weekend_plymouth1","night_weekend","","","","","","","","","weekend_torbay","","","","","","","night_weekend","weekend_truro","","","","","","","" +"Week 6 Day Sun","","","","weekend_exeter","night_weekend","","","","","","","","","","weekend_plymouth2","","","","","weekend_plymouth1","night_weekend","","","","","","","","","weekend_torbay","","","","","","","night_weekend","weekend_truro","","","","","","","" +"Week 7 Day Mon","","","","","","exeter_twilight","","","night_weekday","","night_weekday","","","","","","plymouth_twilight","","","","","","plymouth_bank_holidays","","","","","","","","torbay_twilight","night_weekday","","","","","","","","","","","truro_twilight","","" +"Week 7 Day Tue","","","","","","","exeter_twilight","","night_weekday","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","torbay_twilight","","","","","night_weekday","","","","","","","truro_twilight","","","","","","" +"Week 7 Day Wed","","","exeter_twilight","","","","","","night_weekday","","night_weekday","","","","","","","plymouth_twilight","","","","","","","","","torbay_twilight","","","","","night_weekday","","","","","truro_twilight","","","","","","","","" +"Week 7 Day Thu","","","","","exeter_twilight","","","","night_weekday","plymouth_twilight","night_weekday","","","","","","","","","","","","","","","","","","","","torbay_twilight","night_weekday","","","","","","","","truro_twilight","","","","","" +"Week 7 Day Fri","","","weekend_exeter","","","night_weekend","","","","","","","","","","night_weekend","","","","","","plymouth_twilight","","","","","","","","","","","","weekend_torbay","","","","","","","","night_weekend","weekend_truro","","" +"Week 7 Day Sat","","","weekend_exeter","","","night_weekend","","","","","","weekend_plymouth2","","","","night_weekend","weekend_plymouth1","","","","","","","","","","","","","","","","","weekend_torbay","","","","","","","","night_weekend","weekend_truro","","" +"Week 7 Day Sun","","","weekend_exeter","","","night_weekend","","","","","","weekend_plymouth2","","","","night_weekend","weekend_plymouth1","","","","","","","","","","","","","","","","","weekend_torbay","","","","","","","","night_weekend","weekend_truro","","" +"Week 8 Day Mon","","","","","","","","","exeter_twilight","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","torbay_twilight","night_weekday","","","","","","","","","","","truro_twilight","","night_weekday","","","","" +"Week 8 Day Tue","","","","","exeter_twilight","","","","","","plymouth_twilight","","","","","","","","","","","night_weekday","","","","","torbay_twilight","night_weekday","","","","","","","","","","","","truro_twilight","night_weekday","","","","" +"Week 8 Day Wed","","","","","","","exeter_twilight","","","","","","","","","","","","","","","night_weekday","","plymouth_twilight","","","torbay_twilight","night_weekday","","","","","","","","","","","","","night_weekday","truro_twilight","","","" +"Week 8 Day Thu","","","","exeter_twilight","","","","","","","","","","","","","","","","plymouth_twilight","","night_weekday","","","","","torbay_twilight","night_weekday","","","","","","","","","","","","","night_weekday","truro_twilight","","","" +"Week 8 Day Fri","","","","","","","","","weekend_exeter","","","","","","","","","night_weekend","","plymouth_twilight","","","","","","","","","","","","weekend_torbay","night_weekend","","","","","weekend_truro","","night_weekend","","","","","" +"Week 8 Day Sat","","","","","","","","","weekend_exeter","","","","","weekend_plymouth1","","","","night_weekend","","","","","weekend_plymouth2","","","","","","","","","weekend_torbay","night_weekend","","","","","weekend_truro","","night_weekend","","","","","" +"Week 8 Day Sun","","","","","","","","","weekend_exeter","","","","","weekend_plymouth1","","","","night_weekend","","","","","weekend_plymouth2","","","","","","","","","weekend_torbay","night_weekend","","","","","weekend_truro","","night_weekend","","","","","" +"Week 9 Day Mon","","","","","night_weekday","exeter_twilight","","","","","","plymouth_bank_holidays","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","night_weekday","truro_twilight","","" +"Week 9 Day Tue","","","","","night_weekday","","exeter_twilight","","","","","plymouth_twilight","","","","","","","night_weekday","","","","","","","","","","","","","","","","torbay_twilight","","","","","","truro_twilight","night_weekday","","","" +"Week 9 Day Wed","","","exeter_twilight","","night_weekday","","","","","plymouth_twilight","","","","","","","","","night_weekday","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","night_weekday","truro_twilight","","" +"Week 9 Day Thu","","","exeter_twilight","","night_weekday","","","","","","","","","","","","","","night_weekday","","plymouth_twilight","","","","","","","","","","","","","","torbay_twilight","","truro_twilight","","","","","night_weekday","","","" +"Week 9 Day Fri","","weekend_exeter","","","","","night_weekend","","","","","","","","","","night_weekend","plymouth_twilight","","","","","","","","weekend_torbay","","","","","","","","","","weekend_truro","","","night_weekend","","","","","","" +"Week 9 Day Sat","","weekend_exeter","","","","","night_weekend","","","","weekend_plymouth2","","","","","","night_weekend","","","","","","","weekend_plymouth1","","weekend_torbay","","","","","","","","","","weekend_truro","","","night_weekend","","","","","","" +"Week 9 Day Sun","","weekend_exeter","","","","","night_weekend","","","","weekend_plymouth2","","","","","","night_weekend","","","","","","","weekend_plymouth1","","weekend_torbay","","","","","","","","","","weekend_truro","","","night_weekend","","","","","","" +"Week 10 Day Mon","","","","night_weekday","","","","exeter_twilight","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","","","torbay_twilight","","","night_weekday","","","","","","","","","","","","truro_twilight","" +"Week 10 Day Tue","","","","night_weekday","","","","exeter_twilight","","plymouth_twilight","","night_weekday","","","","","","","","","","","","","","","","","torbay_twilight","","","night_weekday","","","","","","truro_twilight","","","","","","","" +"Week 10 Day Wed","","","","night_weekday","","","exeter_twilight","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","","","","torbay_twilight","","","night_weekday","","","","","","","","","","","truro_twilight","","" +"Week 10 Day Thu","","","","night_weekday","exeter_twilight","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","","","torbay_twilight","","","night_weekday","","","","","","","","","","","","truro_twilight","" +"Week 10 Day Fri","night_weekend","","","","","","","","weekend_exeter","night_weekend","","","","","","plymouth_twilight","","","","","","","","","","","","","","","","","weekend_torbay","","","","","","","weekend_truro","night_weekend","","","","" +"Week 10 Day Sat","night_weekend","","","","","","","","weekend_exeter","night_weekend","","","","","","","","","","weekend_plymouth1","","weekend_plymouth2","","","","","","","","","","","weekend_torbay","","","","","","","weekend_truro","night_weekend","","","","" +"Week 10 Day Sun","night_weekend","","","","","","","","weekend_exeter","night_weekend","","","","","","","","","","weekend_plymouth1","","weekend_plymouth2","","","","","","","","","","","weekend_torbay","","","","","","","weekend_truro","night_weekend","","","","" +"Week 11 Day Mon","","","night_weekday","","exeter_twilight","","","","","","","plymouth_twilight","","night_weekday","","","","","","","","","","","","","torbay_twilight","","","","","","","night_weekday","","","","","","","","","","","truro_twilight" +"Week 11 Day Tue","","","night_weekday","exeter_twilight","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","torbay_twilight","","","","","","","night_weekday","","","truro_twilight","","","","","","","","" +"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_plymouth2","","","","","","","","weekend_plymouth1","","","","","","","night_weekend","weekend_torbay","","","","","","","","","","","","","night_weekend","weekend_truro" +"Week 11 Day Sun","","","","","weekend_exeter","","","","","","","","night_weekend","","weekend_plymouth2","","","","","","","","weekend_plymouth1","","","","","","","night_weekend","weekend_torbay","","","","","","","","","","","","","night_weekend","weekend_truro" +"Week 12 Day Mon","","","","","","","","","exeter_twilight","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","night_weekday","","","torbay_twilight","","","","","","","truro_twilight","","","","","","","night_weekday","","" +"Week 12 Day Tue","","","","","","","","exeter_twilight","","","","","","plymouth_twilight","","night_weekday","","","","","","","","","","night_weekday","","","torbay_twilight","","","","","","","","","","","","truro_twilight","","night_weekday","","" +"Week 12 Day Wed","","","","","","","","","exeter_twilight","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","night_weekday","","","","","torbay_twilight","","","","","truro_twilight","","","","","","","night_weekday","","" +"Week 12 Day Thu","","exeter_twilight","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","night_weekday","","","","","torbay_twilight","","","","","","","","","","","","night_weekday","truro_twilight","" +"Week 12 Day Fri","","","","","","","weekend_exeter","night_weekend","","","","","","","","","night_weekend","","","","","","plymouth_twilight","","","","","weekend_torbay","","","","","","","","","night_weekend","","","","weekend_truro","","","","" +"Week 12 Day Sat","","","","","","","weekend_exeter","night_weekend","","","","weekend_plymouth1","","","","","night_weekend","","","","","weekend_plymouth2","","","","","","weekend_torbay","","","","","","","","","night_weekend","","","","weekend_truro","","","","" +"Week 12 Day Sun","","","","","","","weekend_exeter","night_weekend","","","","weekend_plymouth1","","","","","night_weekend","","","","","weekend_plymouth2","","","","","","weekend_torbay","","","","","","","","","night_weekend","","","","weekend_truro","","","","" +"Week 13 Day Mon","","night_weekday","","","","","","","exeter_twilight","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","night_weekday","","torbay_twilight","","","","","","truro_twilight","","","","","","" +"Week 13 Day Tue","","night_weekday","","","exeter_twilight","","","","","","","","","","","","","plymouth_twilight","","night_weekday","","","","","","","","","","","night_weekday","","","","torbay_twilight","","","truro_twilight","","","","","","","" +"Week 13 Day Wed","","night_weekday","","","","","exeter_twilight","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","","","","night_weekday","","torbay_twilight","","","truro_twilight","","","","","","","","","" +"Week 13 Day Thu","","night_weekday","","","exeter_twilight","","","","","","","plymouth_twilight","","","","","","","","night_weekday","plymouth_bank_holidays","","","","","","","","","","night_weekday","","torbay_twilight","","","","","","","","truro_twilight","","","","" +"Week 13 Day Fri","","","","","","weekend_exeter","","","night_weekend","","","","plymouth_bank_holidays","","","","plymouth_twilight","","night_weekend","","","","","","","","weekend_torbay","","night_weekend","","","","","","","","","","","","","","","","weekend_truro" +"Week 13 Day Sat","","","","","","weekend_exeter","","","night_weekend","","","","","","","","","weekend_plymouth1","night_weekend","","","","weekend_plymouth2","","","","weekend_torbay","","night_weekend","","","","","","","","","","","","","","","","weekend_truro" +"Week 13 Day Sun","","","","","","weekend_exeter","","","night_weekend","","","","","","","","","weekend_plymouth1","night_weekend","","","","weekend_plymouth2","","","","weekend_torbay","","night_weekend","","","","","","","","","","","","","","","","weekend_truro" +"Week 14 Day Mon","","","","exeter_twilight","","","","","","night_weekday","","plymouth_twilight","","","","","","","","","","","","","","torbay_twilight","","","","","","","night_weekday","","","","","","night_weekday","","","","truro_twilight","","" +"Week 14 Day Tue","","","","","exeter_twilight","","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","torbay_twilight","","","","","","","night_weekday","","","","","","night_weekday","","","truro_twilight","","","" +"Week 14 Day Wed","","","","","","exeter_twilight","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","","torbay_twilight","","","","","","night_weekday","","","","","","night_weekday","","","truro_twilight","","","" +"Week 14 Day Thu","","","","","exeter_twilight","","","","","night_weekday","","","","","","","","","","","","","plymouth_twilight","","","","torbay_twilight","","","","","","night_weekday","","","","","","night_weekday","","truro_twilight","","","","" +"Week 14 Day Fri","","","weekend_exeter","","","","","","","","night_weekend","","","","","plymouth_twilight","","","","","","","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","night_weekend","","" +"Week 14 Day Sat","","","weekend_exeter","","","","","","","","night_weekend","","","","","","","","","weekend_plymouth2","","weekend_plymouth1","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","night_weekend","","" +"Week 14 Day Sun","","","weekend_exeter","","","","","","","","night_weekend","","","","","","","","","weekend_plymouth2","","weekend_plymouth1","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","night_weekend","","" +"Week 15 Day Mon","","","","night_weekday","","exeter_twilight","","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","torbay_twilight","","","","","","","","","","truro_twilight","","","","","night_weekday","","","","" +"Week 15 Day Tue","","exeter_twilight","","night_weekday","","","","","","","","","night_weekday","","","","","","","","","","","plymouth_twilight","","","","","torbay_twilight","","","","","","","","","","truro_twilight","","night_weekday","","","","" +"Week 15 Day Wed","","","","night_weekday","","","exeter_twilight","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight","","","","night_weekday","","","","" +"Week 15 Day Thu","","","","night_weekday","","","","","exeter_twilight","","","","night_weekday","","","","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","","","","","","","","","","","night_weekday","","truro_twilight","","" +"Week 15 Day Fri","","weekend_exeter","","","night_weekend","","","","","","","","","","","night_weekend","","","","","","plymouth_twilight","","","","","","weekend_torbay","","","night_weekend","","","","","","","","","","","weekend_truro","","","" +"Week 15 Day Sat","","weekend_exeter","","","night_weekend","","","","","weekend_plymouth1","","","","","","night_weekend","","","","","","","","weekend_plymouth2","","","","weekend_torbay","","","night_weekend","","","","","","","","","","","weekend_truro","","","" +"Week 15 Day Sun","","weekend_exeter","","","night_weekend","","","","","weekend_plymouth1","","","","","","night_weekend","","","","","","","","weekend_plymouth2","","","","weekend_torbay","","","night_weekend","","","","","","","","","","","weekend_truro","","","" +"Week 16 Day Mon","","","","","","","exeter_twilight","","","","night_weekday","plymouth_twilight","","","","","","","","","","","","","","","","","","","","torbay_twilight","","night_weekday","","","","truro_twilight","","night_weekday","","","","","" +"Week 16 Day Tue","","","","","","","exeter_twilight","","","","night_weekday","","","","","","","","","","plymouth_twilight","","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","night_weekday","","","truro_twilight","","" +"Week 16 Day Wed","","","","","","exeter_twilight","","","","","night_weekday","","","","","","","","","","","","","plymouth_twilight","","torbay_twilight","","","","","","","","night_weekday","","","","","","night_weekday","truro_twilight","","","","" +"Week 16 Day Thu","","exeter_twilight","","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","","","","","night_weekday","","","","","truro_twilight","night_weekday","","","","","" +"Week 16 Day Fri","","","weekend_exeter","","","","","","","","","","plymouth_twilight","","","","","","","night_weekend","","","","","","weekend_torbay","night_weekend","","","","","","","","","","weekend_truro","","","","","","night_weekend","","" +"Week 16 Day Sat","","","weekend_exeter","","","","","","","","","","","","","","","","weekend_plymouth2","night_weekend","","weekend_plymouth1","","","","weekend_torbay","night_weekend","","","","","","","","","","weekend_truro","","","","","","night_weekend","","" +"Week 16 Day Sun","","","weekend_exeter","","","","","","","","","","","","","","","","weekend_plymouth2","night_weekend","","weekend_plymouth1","","","","weekend_torbay","night_weekend","","","","","","","","","","weekend_truro","","","","","","night_weekend","","" +"Week 17 Day Mon","","","","","","exeter_twilight","night_weekday","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","","","","","night_weekday","torbay_twilight","","","","","","truro_twilight","","","","","","","","","" +"Week 17 Day Tue","","exeter_twilight","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","","","","torbay_twilight","night_weekday","","","","","","","","","","","truro_twilight","","","","","" +"Week 17 Day Wed","","","exeter_twilight","","","","night_weekday","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","","","night_weekday","torbay_twilight","","","","","","","","","","truro_twilight","","","","","" +"Week 17 Day Thu","","","","","","","night_weekday","exeter_twilight","","","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","night_weekday","torbay_twilight","","","","","","","","","","truro_twilight","","","","","" +"Week 17 Day Fri","night_weekend","night_weekend","","weekend_exeter","","","","","","","","","","","","","","","","","","plymouth_twilight","","night_weekend","","","","","","","","","weekend_torbay","","","weekend_truro","","","","","","","","","" +"Week 17 Day Sat","night_weekend","night_weekend","","weekend_exeter","","","","","","","","","","","","","weekend_plymouth1","weekend_plymouth2","","","","","","night_weekend","","","","","","","","","weekend_torbay","","","weekend_truro","","","","","","","","","" +"Week 17 Day Sun","night_weekend","night_weekend","","weekend_exeter","","","","","","","","","","","","","weekend_plymouth1","weekend_plymouth2","","","","","","night_weekend","","","","","","","","","weekend_torbay","","","weekend_truro","","","","","","","","","" +"Week 18 Day Mon","","","","","exeter_twilight","","","","","","","","","","","","","","plymouth_twilight","","","night_weekday","","","","torbay_twilight","","night_weekday","","","","","","","","","","night_weekday","","","truro_twilight","","","","" +"Week 18 Day Tue","","","","","","","exeter_twilight","","","","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","night_weekday","","","","","","torbay_twilight","","","","night_weekday","","","truro_twilight","","","","" +"Week 18 Day Wed","","","exeter_twilight","","","","","","","","","","","","","","","","","","","night_weekday","","plymouth_twilight","","","","night_weekday","","","","","","torbay_twilight","","","","night_weekday","","truro_twilight","","","","","" +"Week 18 Day Thu","","","","","","","exeter_twilight","","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","","night_weekday","","","torbay_twilight","","","","","","","night_weekday","","","","","","","truro_twilight" +"Week 18 Day Fri","","","","","","night_weekend","","weekend_exeter","","","","","","","","","","","","night_weekend","plymouth_twilight","","","","","night_weekend","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","" +"Week 18 Day Sat","","","","","","night_weekend","","weekend_exeter","","","weekend_plymouth2","","","weekend_plymouth1","","","","","","night_weekend","","","","","","night_weekend","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","" +"Week 18 Day Sun","","","","","","night_weekend","","weekend_exeter","","","weekend_plymouth2","","","weekend_plymouth1","","","","","","night_weekend","","","","","","night_weekend","","","","weekend_torbay","","","","","","","","","","","","","weekend_truro","","" +"Week 19 Day Mon","","night_weekday","","exeter_twilight","","","","","","","","","","","","plymouth_twilight","","","","","","","","night_weekday","","","","","","","","torbay_twilight","","","","","","truro_twilight","night_weekday","","","","","","" +"Week 19 Day Tue","","night_weekday","","exeter_twilight","","","","","","","","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","","torbay_twilight","","","","","","","","","truro_twilight","night_weekday","","","","","","" +"Week 19 Day Wed","","night_weekday","","","","exeter_twilight","","","","","","plymouth_twilight","","","","","","","","","","","","night_weekday","","","","","","","","torbay_twilight","","","","","","","night_weekday","truro_twilight","","","","","" +"Week 19 Day Thu","","night_weekday","","","exeter_twilight","","","","","","","","","","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","","torbay_twilight","","","","","","","night_weekday","truro_twilight","","","","","" +"Week 19 Day Fri","","","weekend_exeter","","","","","","","","plymouth_twilight","","","","","night_weekend","","","","","","","","","","","night_weekend","","","","weekend_torbay","","","","","","","","","","night_weekend","","","weekend_truro","" +"Week 19 Day Sat","","","weekend_exeter","","","","","","","weekend_plymouth1","","","","","weekend_plymouth2","night_weekend","","","","","","","","","","","night_weekend","","","","weekend_torbay","","","","","","","","","","night_weekend","","","weekend_truro","" +"Week 19 Day Sun","","","weekend_exeter","","","","","","","weekend_plymouth1","","","","","weekend_plymouth2","night_weekend","","","","","","","","","","","night_weekend","","","","weekend_torbay","","","","","","","","","","night_weekend","","","weekend_truro","" +"Week 20 Day Mon","","exeter_twilight","","","","","","","night_weekday","","","","","","","","","","","","plymouth_twilight","night_weekday","","","","night_weekday","","","","","","","","","torbay_twilight","","","","","","","truro_twilight","","","" +"Week 20 Day Tue","","exeter_twilight","","","","","","","night_weekday","","","","","","","","","","","","","night_weekday","plymouth_twilight","","","night_weekday","","","","","","","","","torbay_twilight","","","","","","","truro_twilight","","","" +"Week 20 Day Wed","","","exeter_twilight","","","","","","night_weekday","","","","","","","","","","","","","night_weekday","","","plymouth_twilight","night_weekday","","","","","","","","","torbay_twilight","","","","","","truro_twilight","","","","" +"Week 20 Day Thu","","","","","exeter_twilight","","","","night_weekday","","","plymouth_twilight","","","","","","","","","","night_weekday","","","","night_weekday","","","","","","","","","torbay_twilight","","","","","","truro_twilight","","","","" +"Week 20 Day Fri","","","","","","night_weekend","","weekend_exeter","","plymouth_twilight","","","","","","","","","","","","","night_weekend","","","","","","night_weekend","","","","","weekend_torbay","","","","","weekend_truro","","","","","","" +"Week 20 Day Sat","","","","","","night_weekend","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","","","night_weekend","weekend_plymouth1","","","","","night_weekend","","","","","weekend_torbay","","","","","weekend_truro","","","","","","" +"Week 20 Day Sun","","","","","","night_weekend","","weekend_exeter","","","","","","","","","","weekend_plymouth2","","","","","night_weekend","weekend_plymouth1","","","","","night_weekend","","","","","weekend_torbay","","","","","weekend_truro","","","","","","" +"Week 21 Day Mon","","","","","","","","","exeter_twilight","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","","","","","","torbay_twilight","","night_weekday","","","","","","","night_weekday","","truro_twilight","","","" +"Week 21 Day Tue","","","","","exeter_twilight","","","","","","","","","","","night_weekday","","","","","plymouth_twilight","","","","","","","torbay_twilight","","","","","night_weekday","","","","","","","night_weekday","","","","","truro_twilight" +"Week 21 Day Wed","","","","","","exeter_twilight","","","","","","","","","","night_weekday","","","","","","plymouth_twilight","","","","","","torbay_twilight","","","","","night_weekday","","","","","","truro_twilight","night_weekday","","","","","" +"Week 21 Day Thu","","","","","exeter_twilight","","","","","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","torbay_twilight","","","","","night_weekday","","","","truro_twilight","","","night_weekday","","","","","" +"Week 21 Day Fri","","night_weekend","","weekend_exeter","","","","","","","","","","","","","night_weekend","","","plymouth_twilight","","","","","","","","","","","","weekend_torbay","","","","","","","","","","night_weekend","","weekend_truro","" +"Week 21 Day Sat","","night_weekend","","weekend_exeter","","","","","","","","","","","","","night_weekend","","weekend_plymouth2","","weekend_plymouth1","","","","","","","","","","","weekend_torbay","","","","","","","","","","night_weekend","","weekend_truro","" +"Week 21 Day Sun","","night_weekend","","weekend_exeter","","","","","","","","","","","","","night_weekend","","weekend_plymouth2","","weekend_plymouth1","","","","","","","","","","","weekend_torbay","","","","","","","","","","night_weekend","","weekend_truro","" +"Week 22 Day Mon","","","exeter_twilight","","","","","","","","","","","","night_weekday","","","","","","","plymouth_twilight","","night_weekday","","","","","","torbay_twilight","","","","","","","night_weekday","","","","","","","","truro_twilight" +"Week 22 Day Tue","","","","","exeter_twilight","","","","","","","","","","night_weekday","plymouth_twilight","","","","","","","","night_weekday","","","","","","torbay_twilight","","","","","","truro_twilight","night_weekday","","","","","","","","" +"Week 22 Day Wed","","","","","","exeter_twilight","","","","","","","","","night_weekday","","","","","","","","plymouth_twilight","night_weekday","","","","","","torbay_twilight","","","","","","","night_weekday","","","","","","","","truro_twilight" +"Week 22 Day Thu","","","","exeter_twilight","","","","","","","","","plymouth_twilight","","night_weekday","","","","","","","","","night_weekday","","","","","","torbay_twilight","","","","","","","night_weekday","","","truro_twilight","","","","","" +"Week 22 Day Fri","","","","","","weekend_exeter","","","night_weekend","","night_weekend","","","","","","","","","","plymouth_twilight","","","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","","" +"Week 22 Day Sat","","","","","","weekend_exeter","","","night_weekend","weekend_plymouth1","night_weekend","","","","","weekend_plymouth2","","","","","","","","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","","" +"Week 22 Day Sun","","","","","","weekend_exeter","","","night_weekend","weekend_plymouth1","night_weekend","","","","","weekend_plymouth2","","","","","","","","","","","","","","","night_weekend","","weekend_torbay","","","","","weekend_truro","","","","","","","" +"Week 23 Day Mon","","exeter_twilight","night_weekday","","","","","","","","","night_weekday","plymouth_twilight","","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","","","","","","","","truro_twilight","","","","","","" +"Week 23 Day Tue","","","night_weekday","","","","","exeter_twilight","","","","night_weekday","plymouth_twilight","","","","","","night_weekday","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","","","","truro_twilight" +"Week 23 Day Wed","","","night_weekday","","","","","","exeter_twilight","plymouth_twilight","","night_weekday","","","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","","","","","","","","","","","truro_twilight","","","" +"Week 23 Day Thu","","","night_weekday","","","","","exeter_twilight","","","","night_weekday","","","","","","","night_weekday","","","","plymouth_twilight","","","","","","","","","","","","torbay_twilight","","","","","","truro_twilight","","","","" +"Week 23 Day Fri","","","","weekend_exeter","","","","","","","","","","","","","","","","","night_weekend","","","plymouth_twilight","","","","weekend_torbay","","night_weekend","","","","","","night_weekend","","","","weekend_truro","","","","","" +"Week 23 Day Sat","","","","weekend_exeter","","","","","","","","","weekend_plymouth1","","weekend_plymouth2","","","","","","night_weekend","","","","","","","weekend_torbay","","night_weekend","","","","","","night_weekend","","","","weekend_truro","","","","","" +"Week 23 Day Sun","","","","weekend_exeter","","","","","","","","","weekend_plymouth1","","weekend_plymouth2","","","","","","night_weekend","","","","","","","weekend_torbay","","night_weekend","","","","","","night_weekend","","","","weekend_truro","","","","","" +"Week 24 Day Mon","night_weekday","","","","exeter_twilight","","","night_weekday","","night_weekday","","plymouth_twilight","","","","","","","","","","","","","","","","","","","","","torbay_twilight","","","","","truro_twilight","","","","","","","" +"Week 24 Day Tue","night_weekday","exeter_twilight","","","","","","night_weekday","","night_weekday","","","","","","","plymouth_twilight","","","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight","","","","","","","","" +"Week 24 Day Wed","night_weekday","exeter_twilight","","","","","","night_weekday","","night_weekday","","","plymouth_twilight","","","","","","","","","","","","","","","","","","","torbay_twilight","","","","","","","truro_twilight","","","","","","" +"Week 24 Day Thu","night_weekday","","","exeter_twilight","","","","night_weekday","","night_weekday","","","","","","","","","","","","","","","plymouth_twilight","","","","","","","torbay_twilight","","","","truro_twilight","","","","","","","","","" +"Week 24 Day Fri","","","","","night_weekend","","","","weekend_exeter","","","","","","","","plymouth_twilight","","","","","","night_weekend","","","","night_weekend","","","","","","weekend_torbay","","","","","","","","","weekend_truro","","","" +"Week 24 Day Sat","","","","","night_weekend","","","","weekend_exeter","","","","","","","","","weekend_plymouth1","","","","","night_weekend","weekend_plymouth2","","","night_weekend","","","","","","weekend_torbay","","","","","","","","","weekend_truro","","","" +"Week 24 Day Sun","","","","","night_weekend","","","","weekend_exeter","","","","","","","","","weekend_plymouth1","","","","","night_weekend","weekend_plymouth2","","","night_weekend","","","","","","weekend_torbay","","","","","","","","","weekend_truro","","","" +"Week 25 Day Mon","","","","exeter_twilight","","","night_weekday","","","plymouth_twilight","","","","night_weekday","","","","","","","","","","","","","","","","","torbay_twilight","","","","","night_weekday","","","","","","","","","truro_twilight" +"Week 25 Day Tue","","","","exeter_twilight","","","night_weekday","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","","","","","","torbay_twilight","","","","night_weekday","truro_twilight","","","","","","","","" +"Week 25 Day Wed","","","","","","","night_weekday","","exeter_twilight","","plymouth_twilight","","","night_weekday","","","","","","","","","","","","","","","","","torbay_twilight","","","","","night_weekday","","","truro_twilight","","","","","","" +"Week 25 Day Thu","","exeter_twilight","","","","","night_weekday","","","","","","plymouth_twilight","night_weekday","","","","","","","","","","","","","torbay_twilight","","","","","","","","","night_weekday","","","","","","truro_twilight","","","" +"Week 25 Day Fri","","","","","","","","weekend_exeter","","","","","","","","","","","","","","night_weekend","","plymouth_twilight","","","","","night_weekend","","","weekend_torbay","","","","","","night_weekend","","","","","","","weekend_truro" +"Week 25 Day Sat","","","","","","","","weekend_exeter","","","","","weekend_plymouth1","","","","","","weekend_plymouth2","","","night_weekend","","","","","","","night_weekend","","","weekend_torbay","","","","","","night_weekend","","","","","","","weekend_truro" +"Week 25 Day Sun","","","","","","","","weekend_exeter","","","","","weekend_plymouth1","","","","","","weekend_plymouth2","","","night_weekend","","","","","","","night_weekend","","","weekend_torbay","","","","","","night_weekend","","","","","","","weekend_truro" +"Week 26 Day Mon","","","","exeter_twilight","","","","","","","","","","","night_weekday","","","night_weekday","","","plymouth_bank_holidays","","night_weekday","plymouth_twilight","","","","","","torbay_twilight","","","","","","","truro_twilight","","","","","","","","" +"Week 26 Day Tue","","","","","exeter_twilight","","","","","","","","","plymouth_twilight","night_weekday","","","night_weekday","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight","","","","" +"Week 26 Day Wed","","","","","","","","","exeter_twilight","","","","plymouth_twilight","","night_weekday","","","night_weekday","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","","","","","","truro_twilight","","","","" +"Week 26 Day Thu","","","","","","","","","exeter_twilight","","plymouth_twilight","","","","night_weekday","","","night_weekday","","","","","night_weekday","","","","","","","torbay_twilight","","","","","","","","","","","","","","","truro_twilight" +"Week 26 Day Fri","","","","night_weekend","","","weekend_exeter","","","","","","plymouth_twilight","","","","","","","","night_weekend","","","","","weekend_torbay","","","","","","","","","","weekend_truro","","","","night_weekend","","","","","" +"Week 26 Day Sat","","","","night_weekend","","","weekend_exeter","","","","","","","weekend_plymouth2","","weekend_plymouth1","","","","","night_weekend","","","","","weekend_torbay","","","","","","","","","","weekend_truro","","","","night_weekend","","","","","" +"Week 26 Day Sun","","","","night_weekend","","","weekend_exeter","","","","","","","weekend_plymouth2","","weekend_plymouth1","","","","","night_weekend","","","","","weekend_torbay","","","","","","","","","","weekend_truro","","","","night_weekend","","","","","" diff --git a/rota.ipynb b/rota.ipynb index 9c103af..ed27b40 100644 --- a/rota.ipynb +++ b/rota.ipynb @@ -139,7 +139,7 @@ } ], "source": [ - "Rota.build_shifts_and_workers()\n", + "Rota.build_workers()\n", "print(Rota.sites)\n", "Rota.build_model()" ] diff --git a/run.py b/run.py index 3a43b59..1eeb3ff 100644 --- a/run.py +++ b/run.py @@ -1,452 +1,372 @@ from pyomo.environ import * from pyomo.opt import SolverFactory +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 +import os use_neos = False +use_cplex = False +solve = True -weeks_to_rota = 52 +weeks_to_rota = 26 -sites = ("truro", "exeter", "torquay", "barnstaple", "plymouth") +time_to_run = 258500 +# allow = 5000 +ratio = 0.001 -Rota = RotaBuilder(datetime.date(2020, 9, 7), - weeks_to_rota=weeks_to_rota, - balance_offset_modifier=1, - max_weekend_frequency=2, - max_night_frequency=2) +use_live_rota = False +suspend_on_finish = True -rota_collections = { - "current": deepcopy(Rota), - # "extended proc nights only": deepcopy(Rota), - # "no weekends": deepcopy(Rota), - # "no twighlights": deepcopy(Rota), - # "no nights": deepcopy(Rota), - # "nights + proc twighlights3 + normal weekends": deepcopy(Rota), - # "nights + proc twighlights4 + normal weekends": deepcopy(Rota), - # "nights + proc twighlights + proc weekends": deepcopy(Rota), -} -rota_collections['current'].add_shifts( - SingleShift(("exeter", ), "exeter_twilight", 12.5, days[:5]), - SingleShift(("truro", ), "truro_twilight", 12.5, days[:5]), - SingleShift(("torquay", ), "torquay_twilight", 12.5, days[:5]), - SingleShift(("plymouth", ), "plymouth_twilight", 12.5, days[:5]), - SingleShift(("exeter", ), - "weekend_exeter", - 12.5, - days[5:], - assign_as_block=True), - SingleShift(("truro", ), - "weekend_truro", - 12.5, - days[5:], - assign_as_block=True), - SingleShift(("torquay", ), - "weekend_torquay", - 12.5, - days[5:], - assign_as_block=True), - SingleShift(("plymouth", ), - "weekend_plymouth", - 8, - days[5:], - workers_required=2, - assign_as_block=True), - SingleShift((sites), - "night_weekday", - 12.25, - days[:4], - balance_offset=5, - balance_weighting=1, - workers_required=3, - force_as_block=False, - rota_on_nwds=True, - constraints=["night"]), - SingleShift((sites), - "night_weekend", - 12.25, - days[4:], - balance_offset=4, - balance_weighting=1, - workers_required=3, - force_as_block=False, - rota_on_nwds=True, - constraints=["night"]), +sites = ("truro", "exeter", "torbay", "barnstaple", "plymouth", "proc", "truro no proc") + +Rota = RotaBuilder( + # datetime.date(2022, 6, 6), + datetime.date(2022, 3, 7), + # Rota = RotaBuilder(datetime.date(2021, 12, 6), + # Rota = RotaBuilder(datetime.date(2021, 11, 8), + weeks_to_rota=weeks_to_rota, + balance_offset_modifier=1, + max_weekend_frequency=2, + max_night_frequency=2, + use_shift_balance_extra=True, + use_bank_holiday_extra=True, ) -# rota_collections['extended proc nights only'].add_shifts( -# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), -# SingleShift((sites), -# "night_weekday", -# 13, -# days[:4], -# balance_offset=5, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# SingleShift((sites), -# "night_weekend", -# 13, -# days[4:], -# balance_offset=4, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# ) +Rota.constraint_options["limit_to_1_st2_on_nights"] = True +Rota.constraint_options["ensure_1_st4_plus_on_nights"] = True +Rota.constraint_options["balance_nights"] = True +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["balance_shifts"] = True +Rota.constraint_options["balance_bank_holidays"] = True +Rota.constraint_options["avoid_st2_first_month"] = False +Rota.constraint_options["hard_constrain_pair_separation"] = True +Rota.constraint_options["max_weekends"] = 7 +Rota.constraint_options["prevent_monday_and_tuesday_after_full_weekends"] = [ + "truro", + "torbay", + "exeter", + "plymouth", + "plymouth no proc", + "truro no proc", +] +Rota.constraint_options["prevent_monday_after_full_weekends"] = [ + "plymouth", + "plymouth no proc", +] +Rota.constraint_options["prevent_fridays_before_full_weekends"] = [ + "plymouth", + "plymouth no proc", +] +Rota.constraint_options["prevent_thursdays_before_full_weekends"] = [ + "truro", + "torbay", + "exeter", + "truro no proc", +] -# rota_collections['no weekends'].add_shifts( -# SingleShift(("exeter", ), "exeter_twilight", 12.5, days[:5]), -# SingleShift(("truro", ), "truro_twilight", 12.5, days[:5]), -# SingleShift(("torquay", ), "torquay_twilight", 12.5, days[:5]), -# SingleShift(("plymouth", ), "plymouth_twilight", 12.5, days[:5]), -# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), -# SingleShift((sites), -# "night_weekday", -# 13, -# days[:4], -# balance_offset=5, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# SingleShift((sites), -# "night_weekend", -# 13, -# days[4:], -# balance_offset=4, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# ) - -# rota_collections['no twighlights'].add_shifts( -# SingleShift(("exeter", ), -# "weekend_exeter", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("truro", ), -# "weekend_truro", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("torquay", ), -# "weekend_torquay", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("plymouth", ), -# "weekend_plymouth", -# 8, -# days[5:], -# workers_required=2, -# assign_as_block=True), -# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), -# SingleShift((sites), -# "night_weekday", -# 13, -# days[:4], -# balance_offset=5, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# SingleShift((sites), -# "night_weekend", -# 13, -# days[4:], -# balance_offset=4, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# ) - -# rota_collections['no nights'].add_shifts( -# SingleShift(("exeter", ), "exeter_twilight", 12.5, days[:5]), -# SingleShift(("truro", ), "truro_twilight", 12.5, days[:5]), -# SingleShift(("torquay", ), "torquay_twilight", 12.5, days[:5]), -# SingleShift(("plymouth", ), "plymouth_twilight", 12.5, days[:5]), -# SingleShift(("exeter", ), -# "weekend_exeter", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("truro", ), -# "weekend_truro", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("torquay", ), -# "weekend_torquay", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("plymouth", ), -# "weekend_plymouth", -# 8, -# days[5:], -# workers_required=2, -# assign_as_block=True), -# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), -# ) - -# rota_collections['nights + proc twighlights4 + normal weekends'].add_shifts( -# SingleShift((sites), "proc_twilight", 12.5, days[:5], workers_required=4), -# SingleShift(("exeter", ), -# "weekend_exeter", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("truro", ), -# "weekend_truro", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("torquay", ), -# "weekend_torquay", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("plymouth", ), -# "weekend_plymouth", -# 8, -# days[5:], -# workers_required=2, -# assign_as_block=True), -# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), -# SingleShift((sites), -# "night_weekday", -# 12.25, -# days[:4], -# balance_offset=5, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# SingleShift((sites), -# "night_weekend", -# 12.25, -# days[4:], -# balance_offset=4, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# ) - -# rota_collections['nights + proc twighlights3 + normal weekends'].add_shifts( -# SingleShift((sites), "proc_twilight", 12.5, days[:5], workers_required=3), -# SingleShift(("exeter", ), -# "weekend_exeter", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("truro", ), -# "weekend_truro", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("torquay", ), -# "weekend_torquay", -# 12.5, -# days[5:], -# assign_as_block=True), -# SingleShift(("plymouth", ), -# "weekend_plymouth", -# 8, -# days[5:], -# workers_required=2, -# assign_as_block=True), -# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), -# SingleShift((sites), -# "night_weekday", -# 12.25, -# days[:4], -# balance_offset=5, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# SingleShift((sites), -# "night_weekend", -# 12.25, -# days[4:], -# balance_offset=4, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# ) - -# rota_collections['nights + proc twighlights + proc weekends'].add_shifts( -# SingleShift((sites), "proc_twilight", 12.5, days[:5], workers_required=3), -# SingleShift((sites), "proc_weekends", 12.5, days[5:], workers_required=3), -# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), -# SingleShift((sites), -# "night_weekday", -# 12.25, -# days[:4], -# balance_offset=5, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# SingleShift((sites), -# "night_weekend", -# 12.25, -# days[4:], -# balance_offset=4, -# balance_weighting=1, -# workers_required=3, -# force_as_block=False, -# rota_on_nwds=True, -# constraints=["night"]), -# ) +Rota.add_shifts( + SingleShift( + ("exeter",), + "exeter_twilight", + 12.5, + days[:4], + balance_offset=3, + constraints=["max_2_shifts_per_week"], + ), + SingleShift( + ("truro", "truro no proc"), "truro_twilight", 12.5, days[:4], balance_offset=3 + ), + SingleShift( + ("torbay", "torbay twilights"), + "torbay_twilight", + 12.5, + days[:4], + balance_offset=5, + assign_as_block=True, + ), + SingleShift( + ("plymouth", "plymouth_twilights"), + "plymouth_twilight", + 12.5, + days[:5], + balance_offset=3, + workers_required=1, + constraints=["max_2_shifts_per_week"], + ), + SingleShift( + ("exeter",), + "weekend_exeter", + 12.5, + days[4:], + balance_offset=4, + rota_on_nwds=True, + force_as_block=True, + ), + SingleShift( + ("truro", "truro no proc"), + "weekend_truro", + 12.5, + days[4:], + balance_offset=4, + rota_on_nwds=True, + force_as_block=True, + # force_as_block_unless_nwd=True + ), + SingleShift( + ("torbay",), + "weekend_torbay", + 12.5, + days[4:], + balance_offset=4, + rota_on_nwds=True, + force_as_block=True, + # force_as_block_unless_nwd=True + ), + SingleShift( + ("plymouth",), + "weekend_plymouth1", + 8, + days[5:], + balance_offset=4, + workers_required=1, + rota_on_nwds=True, + force_as_block=True, + ), + SingleShift( + ("plymouth",), + "weekend_plymouth2", + 8, + days[5:], + balance_offset=4, + workers_required=1, + rota_on_nwds=True, + force_as_block=True, + ), + SingleShift( + ("plymouth", "plymouth_twilights"), + "plymouth_bank_holidays", + 8, + days[5:], + balance_offset=2, + workers_required=1, + rota_on_nwds=True, + force_as_block=False, + bank_holidays_only=True, + ), + SingleShift( + (sites[:-1]), + "night_weekday", + 12.25, + days[:4], + balance_offset=4.9, + balance_weighting=1, + # hard_constrain_shift=False, + workers_required=3, + force_as_block=False, + rota_on_nwds=True, + constraints=["night"], + ), + SingleShift( + (sites[:-1]), + "night_weekend", + 12.25, + days[4:], + balance_offset=3.9, + balance_weighting=1, + # hard_constrain_shift=False, + workers_required=3, + force_as_block=False, + rota_on_nwds=True, + constraints=["night"], + ), +) +use_test_workers = False load_leave = True +Rota.build_shifts() if load_leave: import leave - leave = leave.load_leave() + workers = leave.load_leave(Rota, use_live_rota) + # Import trainee data -import csv - -with open('trainees.csv', newline='') as f: - reader = csv.reader(f, delimiter=',', quotechar='|') - next(reader) # skip header - +if use_test_workers: + # Rota.add_workers([ + # Worker(Rota, + # i, + # "Truro {}".format(i), + # "truro", + # 3, + # nwd=['Fri', "Sat", "Sun"]) for i in range(1, 2) + # ]) + Rota.add_workers( + [ + Worker( + Rota, + "Truro {}".format(i), + "truro", + 4, + id=i, + ) + for i in range(1, 9) + ] + ) + Rota.add_workers( + [Worker(Rota, i, "Plym {}".format(i), "plymouth", 4, 50) for i in range(9, 17)] + ) + Rota.add_workers( + [ + Worker( + Rota, i, "Plym {}".format(i), "plymouth", 4, 80, end_date="2020/10/05" + ) + for i in range(17, 19) + ] + ) +else: n = 0 - for row in reader: + for worker in workers: n = n + 1 - #print(row) - name, site, grade, fte, nwd, end_date, oop, extra = row + worker_name = worker + w = workers[worker] + site = w["site"] + grade = w["grade"] + fte = w["fte"] + nwd = w["nwd"] + end_date = w["end_date"] + oop = w["oop"] + grade = w["grade"] + pair = w["pair"] + # name, site, grade, fte, nwd, end_date, oop, twi, twi_we, night, night_we, pw1, pw2, extra = row # Ignore trainees if fte == 0 (what are they doing here anyway) - if fte == "0": + if fte == 0 or fte == "0" or fte == "": continue - nwds = nwd.split("/") if nwd else None + nwds = None + if nwd: + nwds = [] + for i in nwd.split(","): + nwd_start_date = Rota.start_date + nwd_end_date = Rota.rota_end_date + + if "[" in i: + a, b = i.split("[")[1][:-1].split("-") + nwd_start_date = datetime.datetime.strptime(a, "%d/%m/%y").date() + nwd_end_date = datetime.datetime.strptime(b, "%d/%m/%y").date() + + nwds.append( + ( + i.split("[")[0].strip()[:3].capitalize(), + nwd_start_date, + nwd_end_date, + ) + ) + # nwds = [i.strip()[:3].capitalize() for i in nwd.split("/")] if nwd else None end_date = end_date if end_date else None oop = oop.split("-") if oop else None + previous_shifts = {} + # if twi: + # worked = twi.split(" ")[0] + # allocated = twi.split(" ")[1][1:-1] + # previous_shifts["{}_twilight".format(site.lower())] = (worked, allocated) + # if twi_we: + # worked = twi_we.split(" ")[0] + # allocated = twi_we.split(" ")[1][1:-1] + # previous_shifts["weekend_{}".format(site.lower())] = (worked, allocated) + # if night: + # worked = night.split(" ")[0] + # allocated = night.split(" ")[1][1:-1] + # previous_shifts["night_weekday".format(site.lower())] = (worked, allocated) + # if night_we: + # worked = night_we.split(" ")[0] + # allocated = night_we.split(" ")[1][1:-1] + # previous_shifts["night_weekend".format(site.lower())] = (worked, allocated) + # if pw1: + # worked = pw1.split(" ")[0] + # allocated = pw1.split(" ")[1][1:-1] + # previous_shifts["weekend_plymouth1"] = (worked, allocated) + # if pw2: + # worked = pw2.split(" ")[0] + # allocated = pw2.split(" ")[1][1:-1] + # previous_shifts["weekend_plymouth2"] = (worked, allocated) - if load_leave: - if name not in leave: - raise ValueError("{} not found it leave requests".format(name)) + leave_requests = w["leave"] + work_requests = w["requests"] + site_pref = w["site_pref"] - leave_requests = [i[0] for i in leave[name] if i[0] != ""] + Rota.add_worker( + Worker( + Rota, + worker_name, + site.lower(), + int(grade[2]), + n, + int(fte), + nwds, + end_date, + oop, + not_available_to_work=leave_requests, + work_requests=work_requests, + proc_site=site_pref, + previous_shifts=previous_shifts, + pair=pair, + shift_balance_extra=w["shift_balance_extra"], + bank_holiday_extra=w["bank_holiday_extra"], + ) + ) - #print(nwds, end_date, oop) - for rot in rota_collections: +print("Building model") +Rota.build_workers() - Rota = rota_collections[rot] - Rota.add_worker( - Worker(Rota, n, name, site.lower(), int(grade[2]), int(fte), - nwds, end_date, oop, not_available_to_work=leave_requests)) -with open("rotas.html", "w") as f: - f.write(""" - - - - - - """) +Rota.sites.add("plymouth_twilights") -for rot in rota_collections: - print("Running rota: ", rot) - Rota = rota_collections[rot] +Rota.build_model() - Rota.build_shifts_and_workers() +print(Rota.get_worker_details()) - print("-Building model") - Rota.build_model() - print("-Building model: complete") +if not solve: + ResultsHolder = RotaResults(Rota) + ResultsHolder.export_rota_to_html() + sys.exit(0) - opt = SolverFactory('cbc') # choose a solver - #opt = SolverFactory('ipopt') # choose a solver +solver_options = {"ratio": ratio, "seconds": time_to_run, "threads": 10} - if use_neos: - print("-Solving with neos") - solver_manager = SolverManagerFactory('neos') # Solve in neos server - results = solver_manager.solve(Rota.model, - opt=opt, - logfile="{}.log".format(rot)) - else: - print("-Solving with local cbc") - results = opt.solve( - Rota.model, - tee=True, - options={ - "seconds": 10200, - "allow": 2000, - }, - logfile="{}.log".format(rot) - ) # solve the model with the, options="seconds=60" selected solver +Rota.solve_model(options=solver_options) - results.solver.status +# print(Rota.get_worker_details()) - ResultsHolder = RotaResults(Rota, results) +# optimizer = SolverFactory('cbc') +# result = optimizer.solve(prob,tee=True) +# result.Solver.Status = SolverStatus.warning +# prob.solutions.load_from(result) - week_table = ResultsHolder.get_work_table( - ) # list with the required workers - #worker_timetable = ResultsHolder.get_worker_timetable() - worker_timetable_brief = ResultsHolder.get_worker_timetable_brief( - show_prefs=False) +ResultsHolder = RotaResults(Rota) - worker_shift_summary = ResultsHolder.get_shift_summary() +worker_timetable_brief = ResultsHolder.get_worker_timetable_brief( + show_prefs=False, show_unavailable=False +) - ResultsHolder.export_rota_to_csv("rotas/" + rot) - with open("rotas.html", "a") as f: - f.write("
") - f.write("

{}

".format(rot)) - #f.write("----------------------------") - f.write("\n\n") +print(worker_timetable_brief) - for s in Rota.shifts: - f.write("
{}
".format(rot, s.name, s.get_shift_summary())) - f.write("\n") - f.write("\n\n") - f.write(ResultsHolder.get_worker_timetable_html(table_name=rot)) - f.write("\n\n") - f.write("
{}
".format(worker_shift_summary)) - 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() - #multi = ResultsHolder.get_multinight() +ResultsHolder.export_rota_to_html() +ResultsHolder.export_rota_to_csv("rota") - #break - -with open("rotas.html", "a") as f: - f.write("") \ No newline at end of file +if suspend_on_finish: + os.system("systemctl suspend") diff --git a/run2.py b/run2.py new file mode 100644 index 0000000..f4559ce --- /dev/null +++ b/run2.py @@ -0,0 +1,464 @@ +from pyomo.environ import * +from pyomo.opt import SolverFactory +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 + +use_neos = False + +weeks_to_rota = 52 + +sites = ("truro", "exeter", "torquay", "barnstaple", "plymouth") + +Rota = RotaBuilder( + datetime.date(2020, 9, 7), + weeks_to_rota=weeks_to_rota, + balance_offset_modifier=1, + max_weekend_frequency=2, + max_night_frequency=2, +) + +rota_collections = { + "current": deepcopy(Rota), + # "extended proc nights only": deepcopy(Rota), + # "no weekends": deepcopy(Rota), + # "no twighlights": deepcopy(Rota), + # "no nights": deepcopy(Rota), + # "nights + proc twighlights3 + normal weekends": deepcopy(Rota), + # "nights + proc twighlights4 + normal weekends": deepcopy(Rota), + # "nights + proc twighlights + proc weekends": deepcopy(Rota), +} + +rota_collections["current"].add_shifts( + SingleShift(("exeter",), "exeter_twilight", 12.5, days[:5]), + SingleShift(("truro",), "truro_twilight", 12.5, days[:5]), + SingleShift(("torquay",), "torquay_twilight", 12.5, days[:5]), + SingleShift(("plymouth",), "plymouth_twilight", 12.5, days[:5]), + SingleShift(("exeter",), "weekend_exeter", 12.5, days[5:], assign_as_block=True), + SingleShift(("truro",), "weekend_truro", 12.5, days[5:], assign_as_block=True), + SingleShift(("torquay",), "weekend_torquay", 12.5, days[5:], assign_as_block=True), + SingleShift( + ("plymouth",), + "weekend_plymouth", + 8, + days[5:], + workers_required=2, + assign_as_block=True, + ), + SingleShift( + (sites), + "night_weekday", + 12.25, + days[:4], + balance_offset=5, + balance_weighting=1, + workers_required=3, + force_as_block=False, + rota_on_nwds=True, + constraints=["night"], + ), + SingleShift( + (sites), + "night_weekend", + 12.25, + days[4:], + balance_offset=4, + balance_weighting=1, + workers_required=3, + force_as_block=False, + rota_on_nwds=True, + constraints=["night"], + ), +) + +# rota_collections['extended proc nights only'].add_shifts( +# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), +# SingleShift((sites), +# "night_weekday", +# 13, +# days[:4], +# balance_offset=5, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# SingleShift((sites), +# "night_weekend", +# 13, +# days[4:], +# balance_offset=4, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# ) + +# rota_collections['no weekends'].add_shifts( +# SingleShift(("exeter", ), "exeter_twilight", 12.5, days[:5]), +# SingleShift(("truro", ), "truro_twilight", 12.5, days[:5]), +# SingleShift(("torquay", ), "torquay_twilight", 12.5, days[:5]), +# SingleShift(("plymouth", ), "plymouth_twilight", 12.5, days[:5]), +# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), +# SingleShift((sites), +# "night_weekday", +# 13, +# days[:4], +# balance_offset=5, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# SingleShift((sites), +# "night_weekend", +# 13, +# days[4:], +# balance_offset=4, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# ) + +# rota_collections['no twighlights'].add_shifts( +# SingleShift(("exeter", ), +# "weekend_exeter", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("truro", ), +# "weekend_truro", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("torquay", ), +# "weekend_torquay", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("plymouth", ), +# "weekend_plymouth", +# 8, +# days[5:], +# workers_required=2, +# assign_as_block=True), +# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), +# SingleShift((sites), +# "night_weekday", +# 13, +# days[:4], +# balance_offset=5, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# SingleShift((sites), +# "night_weekend", +# 13, +# days[4:], +# balance_offset=4, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# ) + +# rota_collections['no nights'].add_shifts( +# SingleShift(("exeter", ), "exeter_twilight", 12.5, days[:5]), +# SingleShift(("truro", ), "truro_twilight", 12.5, days[:5]), +# SingleShift(("torquay", ), "torquay_twilight", 12.5, days[:5]), +# SingleShift(("plymouth", ), "plymouth_twilight", 12.5, days[:5]), +# SingleShift(("exeter", ), +# "weekend_exeter", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("truro", ), +# "weekend_truro", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("torquay", ), +# "weekend_torquay", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("plymouth", ), +# "weekend_plymouth", +# 8, +# days[5:], +# workers_required=2, +# assign_as_block=True), +# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), +# ) + +# rota_collections['nights + proc twighlights4 + normal weekends'].add_shifts( +# SingleShift((sites), "proc_twilight", 12.5, days[:5], workers_required=4), +# SingleShift(("exeter", ), +# "weekend_exeter", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("truro", ), +# "weekend_truro", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("torquay", ), +# "weekend_torquay", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("plymouth", ), +# "weekend_plymouth", +# 8, +# days[5:], +# workers_required=2, +# assign_as_block=True), +# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), +# SingleShift((sites), +# "night_weekday", +# 12.25, +# days[:4], +# balance_offset=5, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# SingleShift((sites), +# "night_weekend", +# 12.25, +# days[4:], +# balance_offset=4, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# ) + +# rota_collections['nights + proc twighlights3 + normal weekends'].add_shifts( +# SingleShift((sites), "proc_twilight", 12.5, days[:5], workers_required=3), +# SingleShift(("exeter", ), +# "weekend_exeter", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("truro", ), +# "weekend_truro", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("torquay", ), +# "weekend_torquay", +# 12.5, +# days[5:], +# assign_as_block=True), +# SingleShift(("plymouth", ), +# "weekend_plymouth", +# 8, +# days[5:], +# workers_required=2, +# assign_as_block=True), +# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), +# SingleShift((sites), +# "night_weekday", +# 12.25, +# days[:4], +# balance_offset=5, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# SingleShift((sites), +# "night_weekend", +# 12.25, +# days[4:], +# balance_offset=4, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# ) + +# rota_collections['nights + proc twighlights + proc weekends'].add_shifts( +# SingleShift((sites), "proc_twilight", 12.5, days[:5], workers_required=3), +# SingleShift((sites), "proc_weekends", 12.5, days[5:], workers_required=3), +# #SingleShift((sites), "night", 12.5, days, balance_weighting=1, workers_required=3, rota_on_nwds=True), +# SingleShift((sites), +# "night_weekday", +# 12.25, +# days[:4], +# balance_offset=5, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# SingleShift((sites), +# "night_weekend", +# 12.25, +# days[4:], +# balance_offset=4, +# balance_weighting=1, +# workers_required=3, +# force_as_block=False, +# rota_on_nwds=True, +# constraints=["night"]), +# ) + + +load_leave = True + +if load_leave: + import leave + + leave = leave.load_leave() + +# Import trainee data +import csv + +with open("trainees.csv", newline="") as f: + reader = csv.reader(f, delimiter=",", quotechar="|") + next(reader) # skip header + + n = 0 + for row in reader: + n = n + 1 + # print(row) + name, site, grade, fte, nwd, end_date, oop, extra = row + + # Ignore trainees if fte == 0 (what are they doing here anyway) + if fte == "0": + continue + + nwds = nwd.split("/") if nwd else None + end_date = end_date if end_date else None + oop = oop.split("-") if oop else None + + if load_leave: + if name not in leave: + raise ValueError("{} not found it leave requests".format(name)) + + leave_requests = [i[0] for i in leave[name] if i[0] != ""] + + # print(nwds, end_date, oop) + for rot in rota_collections: + + Rota = rota_collections[rot] + Rota.add_worker( + Worker( + Rota, + n, + name, + site.lower(), + int(grade[2]), + int(fte), + nwds, + end_date, + oop, + not_available_to_work=leave_requests, + ) + ) + +with open("rotas.html", "w") as f: + f.write( + """ + + + + + + """ + ) + +for rot in rota_collections: + print("Running rota: ", rot) + Rota = rota_collections[rot] + + Rota.build_workers() + + print("-Building model") + Rota.build_model() + print("-Building model: complete") + + opt = SolverFactory("cbc") # choose a solver + # opt = SolverFactory('ipopt') # choose a solver + + if use_neos: + print("-Solving with neos") + solver_manager = SolverManagerFactory("neos") # Solve in neos server + results = solver_manager.solve( + Rota.model, opt=opt, logfile="{}.log".format(rot) + ) + else: + print("-Solving with local cbc") + results = opt.solve( + Rota.model, + tee=True, + options={ + "seconds": 10200, + "allow": 2000, + }, + logfile="{}.log".format(rot), + ) # solve the model with the, options="seconds=60" selected solver + + results.solver.status + + ResultsHolder = RotaResults(Rota, results) + + week_table = ResultsHolder.get_work_table() # list with the required workers + # worker_timetable = ResultsHolder.get_worker_timetable() + worker_timetable_brief = ResultsHolder.get_worker_timetable_brief(show_prefs=False) + + worker_shift_summary = ResultsHolder.get_shift_summary() + + ResultsHolder.export_rota_to_csv("rotas/" + rot) + with open("rotas.html", "a") as f: + f.write("
") + f.write("

{}

".format(rot)) + # f.write("----------------------------") + f.write("\n\n") + + for s in Rota.shifts: + f.write( + "
{}
".format( + rot, s.name, s.get_shift_summary() + ) + ) + f.write("\n") + f.write("\n\n") + + f.write(ResultsHolder.get_worker_timetable_html(table_name=rot)) + f.write("\n\n") + f.write( + "
{}
".format(worker_shift_summary) + ) + 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() + # multi = ResultsHolder.get_multinight() + + # break + +with open("rotas.html", "a") as f: + f.write("") diff --git a/test.py b/runfixnights.py similarity index 95% rename from test.py rename to runfixnights.py index 776d868..b85c533 100644 --- a/test.py +++ b/runfixnights.py @@ -17,9 +17,9 @@ solve = True weeks_to_rota = 26 -time_to_run = 258500 +time_to_run = 108500 # allow = 5000 -ratio = 0.01 +ratio = 0.001 use_live_rota = False suspend_on_finish = True @@ -81,16 +81,18 @@ Rota.add_shifts( "exeter_twilight", 12.5, days[:4], - balance_offset=1.5, + balance_offset=3, constraints=["max_2_shifts_per_week"], ), - SingleShift(("truro", "truro no proc"), "truro_twilight", 12.5, days[:4]), + SingleShift( + ("truro", "truro no proc"), "truro_twilight", 12.5, days[:4], balance_offset=3 + ), SingleShift( ("torbay", "torbay twilights"), "torbay_twilight", 12.5, days[:4], - balance_offset=4, + balance_offset=3, assign_as_block=True, ), SingleShift( @@ -98,7 +100,7 @@ Rota.add_shifts( "plymouth_twilight", 12.5, days[:5], - balance_offset=1.5, + balance_offset=3, workers_required=1, constraints=["max_2_shifts_per_week"], ), @@ -107,7 +109,7 @@ Rota.add_shifts( "weekend_exeter", 12.5, days[4:], - balance_offset=3.5, + balance_offset=4, rota_on_nwds=True, force_as_block=True, ), @@ -116,7 +118,7 @@ Rota.add_shifts( "weekend_truro", 12.5, days[4:], - balance_offset=3.5, + balance_offset=4, rota_on_nwds=True, force_as_block=True, # force_as_block_unless_nwd=True @@ -126,7 +128,7 @@ Rota.add_shifts( "weekend_torbay", 12.5, days[4:], - balance_offset=3.5, + balance_offset=4, rota_on_nwds=True, force_as_block=True, # force_as_block_unless_nwd=True @@ -136,7 +138,7 @@ Rota.add_shifts( "weekend_plymouth1", 8, days[5:], - balance_offset=2.5, + balance_offset=4, workers_required=1, rota_on_nwds=True, force_as_block=True, @@ -146,7 +148,7 @@ Rota.add_shifts( "weekend_plymouth2", 8, days[5:], - balance_offset=2.5, + balance_offset=4, workers_required=1, rota_on_nwds=True, force_as_block=True, @@ -156,7 +158,7 @@ Rota.add_shifts( "plymouth_bank_holidays", 8, days[5:], - balance_offset=1.5, + balance_offset=2, workers_required=1, rota_on_nwds=True, force_as_block=False, @@ -167,7 +169,7 @@ Rota.add_shifts( "night_weekday", 12.25, days[:4], - balance_offset=5, + balance_offset=4, balance_weighting=1, # hard_constrain_shift=False, workers_required=3, @@ -180,7 +182,7 @@ Rota.add_shifts( "night_weekend", 12.25, days[4:], - balance_offset=4, + balance_offset=3, balance_weighting=1, # hard_constrain_shift=False, workers_required=3, @@ -329,7 +331,7 @@ else: ) print("Building model") -Rota.build_shifts_and_workers() +Rota.build_workers() Rota.sites.add("plymouth_twilights") @@ -363,8 +365,8 @@ worker_timetable_brief = ResultsHolder.get_worker_timetable_brief( print(worker_timetable_brief) -ResultsHolder.export_rota_to_html() -ResultsHolder.export_rota_to_csv("rota") +ResultsHolder.export_rota_to_html("fixnights") +ResultsHolder.export_rota_to_csv("fixnights") if suspend_on_finish: os.system("systemctl suspend") diff --git a/shifts.py b/shifts.py index bcf31f4..78d85cf 100644 --- a/shifts.py +++ b/shifts.py @@ -1,6 +1,6 @@ import datetime import itertools -from typing import List, Tuple +from typing import Iterable, List, Sequence, Tuple import datetime @@ -31,30 +31,37 @@ from govuk_bank_holidays.bank_holidays import BankHolidays bank_holidays = BankHolidays() bank_holiday_map = {} -for bank_holiday in bank_holidays.get_holidays(): +for bank_holiday in bank_holidays.get_holidays(division="england-and-wales"): bank_holiday_map[bank_holiday["date"]] = bank_holiday["title"] +SHIFT_BOUNDS = { + "bank_holiday": (0, 4), + "shift_count": (0, 400), + "night_shift_count": (0, 19), + "weekend_count": (0, 60), +} + class SingleShift(object): """Class to hold all details for a shift""" def __init__( self, - sites, - name, - length, - shift_days, + sites: Iterable[str], + name: str, + length: float, + shift_days: Sequence[str], # balance_by_site=True, - balance_offset=2, # this could be generated dynamically - balance_weighting=1, - workers_required=1, - rota_on_nwds=False, - assign_as_block=False, - force_as_block=False, - force_as_block_unless_nwd=False, - hard_constrain_shift=True, - bank_holidays_only=False, - constraints=[], + balance_offset: float = 2, # this could be generated dynamically + balance_weighting: float = 1, + workers_required: float = 1, + rota_on_nwds: bool = False, + assign_as_block: bool = False, + force_as_block: bool = False, + force_as_block_unless_nwd: bool = False, + hard_constrain_shift: bool = True, + bank_holidays_only: bool = False, + constraints: Iterable[str] = [], ): self.site = sites self.name = name @@ -102,7 +109,7 @@ class RotaBuilder(object): balance_offset_modifier: int = 1, ltft_balance_offset: int = 1, max_night_frequency: int = 2, - max_weekend_frequency: int = 2, + max_weekend_frequency: int = 2, # Requires balance weekends use_previous_shifts: bool = False, use_shift_balance_extra: bool = False, use_bank_holiday_extra: bool = False, @@ -143,7 +150,7 @@ class RotaBuilder(object): self.workers = [] self.worker_pairs = [] - self.night_blocks = ["weekday", "weekend", "none"] + # self.night_blocks = ["weekday", "weekend", "none"] self.sites = None @@ -164,9 +171,9 @@ class RotaBuilder(object): "balance_bank_holidays": True, "balance_blocks": True, "balance_shifts": True, - "minimise_shift_diffs": True, + "minimise_shift_diffs": False, # less sophisticated version of balance_shifts "balance_weekends": True, - "max_weekends": False, + "max_weekends": 100, "max_shifts_per_week": 4, "max_shifts_per_month": 12, "prevent_monday_after_full_weekends": [], @@ -188,13 +195,15 @@ class RotaBuilder(object): self.results = None - def solve_model(self, solver="cbc", use_neos=False, options={}): + def solve_model( + self, solver: str = "cbc", use_neos: bool = False, options: dict = {} + ): print("Setting up solver") self.opt = SolverFactory(solver) print("Solving") if use_neos: - solver_manager = SolverManagerFactory("neos") # Solve in neos server + solver_manager = SolverManagerFactory("neos") # Solve using neos server # results = solver_manager.solve(Rota.model, opt=opt, logfile="test.log") results = solver_manager.solve( self.model, keepfiles=True, tee=True, opt=self.opt, logfile="test.log" @@ -291,6 +300,7 @@ class RotaBuilder(object): ((worker.id) for worker in self.workers), within=NonNegativeIntegers, initialize=0, + bounds=SHIFT_BOUNDS["bank_holiday"], ) self.model.bank_holiday_count_w = Var( ((worker.id) for worker in self.workers), @@ -350,6 +360,7 @@ class RotaBuilder(object): ), domain=NonNegativeReals, initialize=0, + bounds=SHIFT_BOUNDS["shift_count"], ) self.model.shift_count_diff = Var( @@ -388,6 +399,7 @@ class RotaBuilder(object): ((worker.id) for worker in self.workers), domain=NonNegativeReals, initialize=0, + bounds=SHIFT_BOUNDS["night_shift_count"], ) self.model.night_shift_count_t1 = Var( @@ -453,6 +465,7 @@ class RotaBuilder(object): ((worker.id) for worker in self.workers), domain=NonNegativeIntegers, initialize=0, + bounds=SHIFT_BOUNDS["weekend_count"], ) self.model.weekend_shift_count_t1 = Var( @@ -554,7 +567,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( @@ -564,14 +577,15 @@ class RotaBuilder(object): ) ) # And it is not assigned if the worker is from the wrong site - self.model.constraints.add( - 0 - == sum( - self.model.works[worker.id, week, day, shift] - for worker in self.workers - if worker.site not in site_required + if [worker for worker in self.workers if worker.site not in site_required]: + self.model.constraints.add( + 0 + == sum( + self.model.works[worker.id, week, day, shift] + for worker in self.workers + if worker.site not in site_required + ) ) - ) # # Ensure shifts are only assigned by workers from the allowed sites # self.model.constraints.add(0 == sum( # self.model.works[worker.id, week, day, shift] @@ -754,7 +768,6 @@ class RotaBuilder(object): else: full_workers.append(w) - print(shift.name, [n.name for n in nwd_workers]) if not nwd_workers: # Just do the usual self.model.constraints.add( @@ -768,7 +781,6 @@ class RotaBuilder(object): ) else: - print(shift.name) self.model.constraints.add( sum( self.model.blocks_worker_shift_assigned[ @@ -824,7 +836,7 @@ class RotaBuilder(object): ) for week_blocks in self.get_week_block_iterator(4): - # Prevent weekend shifts more than once every n weeks + # Prevent more than n number shifts per 4 weeks self.model.constraints.add( self.constraint_options["max_shifts_per_month"] >= sum( @@ -859,7 +871,7 @@ class RotaBuilder(object): ) ) - if self.constraint_options["max_weekends"]: + if self.constraint_options["max_weekends"] > -1: self.model.constraints.add( self.constraint_options["max_weekends"] >= self.model.worker_weekend_count[worker.id] @@ -957,25 +969,22 @@ class RotaBuilder(object): # t1-t2 is the target # As the objective is to minimise t1+t2 and t1 and t2 are positive reals # t1+t2 approximates the absolute target (which otherwise requires a quadratic solver) + # TODO: quadratic implementation so perfect solutions will be chosen if self.constraint_options["balance_shifts"]: self.model.constraints.add( self.model.shift_count_t1[worker.id] - self.model.shift_count_t2[worker.id] == sum( - ( - self.model.shift_count_diff[worker.id, shift.name] - ) + (self.model.shift_count_diff[worker.id, shift.name]) * shift.balance_weighting for shift in self.get_shifts() ) ) - # if "night" not in shift.constraints)) if self.constraint_options["balance_bank_holidays"]: extra_bank_holiday = 0 if self.use_bank_holiday_extra: - print(worker.name, worker.bank_holiday_extra) extra_bank_holiday = worker.bank_holiday_extra self.model.constraints.add( @@ -1023,16 +1032,6 @@ class RotaBuilder(object): for shift in self.get_shifts_with_constraint("night") ) - # min_shifts = night_shift_target_number - 20 - # max_shifts = night_shift_target_number + 20 - - # self.model.constraints.add( - # inequality( - # min_shifts, - # self.model.night_shift_count[worker.id], - # max_shifts, - # )) - self.model.constraints.add( self.model.night_shift_count_t1[worker.id] - self.model.night_shift_count_t2[worker.id] @@ -1091,59 +1090,50 @@ class RotaBuilder(object): worker.weekend_shift_target_number = weekend_shift_target_number - # min_shifts = weekend_shift_target_number - 20 - # max_shifts = weekend_shift_target_number + 20 - - # self.model.constraints.add( - # inequality( - # min_shifts, - # self.model.worker_weekend_count[worker.id], - # max_shifts, - # )) - - self.model.constraints.add( - self.model.weekend_shift_count_t1[worker.id] - - self.model.weekend_shift_count_t2[worker.id] - == self.model.worker_weekend_count[worker.id] - - weekend_shift_target_number - ) - - xU = self.constraint_options["max_weekends"] - - xL = 1 - self.model.constraints.add( - inequality( - xL, + if weekend_shift_target_number > 0: + self.model.constraints.add( self.model.weekend_shift_count_t1[worker.id] - + self.model.weekend_shift_count_t2[worker.id] - + 1, - xU, + - self.model.weekend_shift_count_t2[worker.id] + == self.model.worker_weekend_count[worker.id] + - weekend_shift_target_number ) - ) - self.model.constraints.add( - self.model.weekend_shift_count_w[worker.id] - >= xL - * ( - self.model.weekend_shift_count_t1[worker.id] - + self.model.weekend_shift_count_t2[worker.id] - + 1 - ) - * 2 - - xL * xL - ) + xU = self.constraint_options["max_weekends"] - self.model.constraints.add( - self.model.weekend_shift_count_w[worker.id] - >= xU - * ( - self.model.weekend_shift_count_t1[worker.id] - + self.model.weekend_shift_count_t2[worker.id] - + 1 + xL = 1 + self.model.constraints.add( + inequality( + xL, + self.model.weekend_shift_count_t1[worker.id] + + self.model.weekend_shift_count_t2[worker.id] + + 1, + xU, + ) + ) + + self.model.constraints.add( + self.model.weekend_shift_count_w[worker.id] + >= xL + * ( + self.model.weekend_shift_count_t1[worker.id] + + self.model.weekend_shift_count_t2[worker.id] + + 1 + ) + * 2 + - xL * xL + ) + + self.model.constraints.add( + self.model.weekend_shift_count_w[worker.id] + >= xU + * ( + self.model.weekend_shift_count_t1[worker.id] + + self.model.weekend_shift_count_t2[worker.id] + + 1 + ) + * 2 + - xU * xU ) - * 2 - - xU * xU - ) # Ensure worker is not allocated shifts on non working days if worker.nwd: @@ -1176,6 +1166,7 @@ class RotaBuilder(object): ) ) + if self.constraint_options["balance_weekends"]: for week_blocks in self.get_week_block_iterator( self.max_weekend_frequency ): @@ -1660,7 +1651,7 @@ class RotaBuilder(object): # add objective function to the model. rule (pass function) or expr (pass expression directly) self.model.obj = Objective(rule=obj_rule, sense=minimize) - def add_worker(self, worker: Worker): + def add_worker(self, worker: Worker) -> None: """Add a worker to the rota Args: @@ -1668,7 +1659,7 @@ class RotaBuilder(object): """ self.workers.append(worker) - def add_workers(self, workers: List): + def add_workers(self, workers: List) -> None: """Add multiple worker to the rota Args: @@ -1676,12 +1667,14 @@ class RotaBuilder(object): """ self.workers.extend(workers) - def build_shifts_and_workers(self): + def build_workers(self) -> None: """Process loaded shifts and workers Must be called prior to attempting to solve """ # self.build_shifts() + if not self.workers: + raise NoWorkers("Workers must be added prior to calling build_workers") self.workers = sorted(self.workers) @@ -1703,7 +1696,7 @@ class RotaBuilder(object): for p in pairs: self.worker_pairs.append(tuple(pairs[p])) - def add_shift(self, shift): + def add_shift(self, shift) -> None: """Add a shift to the collection :param SingleShift shift: Shift object @@ -1711,7 +1704,7 @@ class RotaBuilder(object): """ self.shifts.append(shift) - def add_shifts(self, *shifts: SingleShift): + def add_shifts(self, *shifts: SingleShift) -> None: """Add multiple shifts Returns: @@ -1719,7 +1712,7 @@ class RotaBuilder(object): """ self.shifts.extend(shifts) - def get_shift_names_by_week_day(self, week, day: DayStr): + def get_shift_names_by_week_day(self, week, day: DayStr) -> Set(): """Returns the shifts required for a specific day Returns: @@ -1748,7 +1741,9 @@ class RotaBuilder(object): return self.shifts_by_name[name].length def build_shifts(self): - """ """ + """ + Process the added shifts + """ self.shifts_by_name = {} self.shift_names = [] # type: List[ShiftName] @@ -1874,8 +1869,9 @@ class RotaBuilder(object): list: two dimensional list containing weeks in blocks """ blocks = [] - for i in range(len(self.weeks)): - blocks.append(self.weeks[i : i + block_length]) + for i in range(len(self.weeks) - block_length + 1): + block = self.weeks[i : i + block_length] + blocks.append(block) return blocks def get_required_workers_and_site_combinations(self): @@ -1919,10 +1915,10 @@ class RotaBuilder(object): s.extend(self.shifts_to_force_as_blocks()) return s - def get_workers_for_shift(self, shift): + def get_workers_for_shift(self, shift: SingleShift) -> List[Worker]: return [worker for worker in self.workers if worker.site in shift.site] - def get_workers_total_fte(self): + def get_workers_total_fte(self) -> float: return self.full_time_equivalent def get_worker_details(self): @@ -1938,6 +1934,9 @@ class RotaBuilder(object): t = "\n".join(l) return f"Full time equivalent trainees by site:\n{t}" + def get_workers(self): + return self.workers + def get_bank_holiday_week_days(self): return [ (week, day) @@ -1951,11 +1950,11 @@ class RotaResults(object): self.rota = rota # self.results = results - def export_rota_to_html(self, filename="rota"): + def export_rota_to_html(self, filename: str = "rota"): with open(f"{filename}.html", "w") as f: f.write(self.get_worker_timetable_html(True)) - def export_rota_to_csv(self, filename="rota"): + def export_rota_to_csv(self, filename: str = "rota"): works = self.rota.model.works with open(f"{filename}.csv", "w", newline="") as f: wr = csv.writer(f, quoting=csv.QUOTE_ALL) @@ -2179,17 +2178,15 @@ class RotaResults(object): shift_count_dict[s] = c shift_count = shift_count + f"{s}: {c}, " - shift_diff_dict = {} for shift in self.rota.get_shifts(): diff = model.shift_count_diff[worker.id, shift.name].value shift_diff_dict[shift.name] = diff - worker_td = """ + + {html}""" @@ -2431,3 +2430,15 @@ class RotaResults(object): ) """ + + +class NoActiveSites(Exception): + """Raised when there are no active sites""" + + pass + + +class NoWorkers(Exception): + """Raised when there are no active sites""" + + pass diff --git a/test_rota.py b/test_rota.py new file mode 100644 index 0000000..47663f4 --- /dev/null +++ b/test_rota.py @@ -0,0 +1,167 @@ +from black import main +import pytest +from shifts import NoWorkers, RotaBuilder, RotaResults, SingleShift, days + +import datetime + +from workers import Worker + + +class TestDemoRota: + # Set up rota + weeks_to_rota = 10 + start_date = datetime.date(2022, 3, 7) + + Rota = RotaBuilder( + start_date, + weeks_to_rota=weeks_to_rota, + balance_offset_modifier=1, + max_weekend_frequency=1, + ) + + Rota.constraint_options["max_shifts_per_week"] = 5 + Rota.constraint_options["max_shifts_per_month"] = 31 + Rota.constraint_options["ensure_derriford_reg_for_nights"] = False + Rota.constraint_options["limit_to_1_st2_on_nights"] = False + Rota.constraint_options["ensure_1_st4_plus_on_nights"] = False + Rota.constraint_options["constrain_time_off_after_nights"] = False + Rota.constraint_options["balance_nights_across_site"] = False + Rota.constraint_options["balance_shifts"] = True + Rota.constraint_options["balance_nights"] = False + Rota.constraint_options["minimise_shift_diffs"] = True + #Rota.constraint_options["balance_weekends"] = False + + # Add a few workers + worker1 = Worker(Rota, "worker1", "group1", 1) + worker2 = Worker(Rota, "worker2", "group1", 1) + worker3 = Worker(Rota, "worker3", "group1", 1) + worker4 = Worker(Rota, "worker4", "group1", 1) + worker5 = Worker(Rota, "worker5", "group2", 1, fte=60) + worker6 = Worker(Rota, "worker6", "group2", 1, fte=40) + + Rota.add_workers((worker1, worker2, worker3, worker4, worker5, worker6)) + + # Add a weekday and weekend shift + Rota.add_shifts( + SingleShift( + ("group1", "group2"), + "weekday", + 12.5, + days[:5], + balance_offset=10, + workers_required=1, + # We use a different balance weighting for each shift as otherwise + # the shifts can be treated equally (and no target diff) + balance_weighting=0.5, + ), + SingleShift(("group1",), "weekend", 12.5, days[5:], balance_offset=40, + #balance_weighting=0.5 + ), + ) + + Rota.build_shifts() + Rota.build_workers() + Rota.build_model() + + print(Rota.get_worker_details()) + + for w in Rota.get_workers(): + print(w) + print(w.get_shift_targets()) + + solver_options = {"ratio": 0, "seconds": 1000, "threads": 10} + + Rota.solve_model(options=solver_options) + + # print(Rota.get_worker_details()) + + # optimizer = SolverFactory('cbc') + # result = optimizer.solve(prob,tee=True) + # result.Solver.Status = SolverStatus.warning + # prob.solutions.load_from(result) + + ResultsHolder = RotaResults(Rota) + + + worker_timetable_brief = ResultsHolder.get_worker_timetable_brief( + show_prefs=False, show_unavailable=False + ) + + print(worker_timetable_brief) + ResultsHolder.export_rota_to_html("test") + + def test_start_date(self): + assert self.Rota.start_date == self.start_date + + def test_end_date(self): + assert self.Rota.rota_end_date == self.start_date + datetime.timedelta( + weeks=self.weeks_to_rota + ) + + def test_rota_workers_number(self): + assert len(self.Rota.workers) == 6 + + def test_rota_workers_total_fte(self): + assert self.Rota.get_workers_total_fte() == 500 + + def test_weekday_workers(self): + weekday_shift_workers = self.Rota.get_workers_for_shift( + self.Rota.get_shift_by_name("weekday") + ) + + for worker in weekday_shift_workers: + assert worker.proportion_rota_to_work == 1 + + assert len(weekday_shift_workers) == 6 + + def test_weekend_workers(self): + weekend_shift_workers = self.Rota.get_workers_for_shift( + self.Rota.get_shift_by_name("weekend") + ) + + for worker in weekend_shift_workers: + assert worker.proportion_rota_to_work == 1 + + # assert worker.get_shift_targets() == {} + + assert len(weekend_shift_workers) == 4 + + def test_worker_shift_targets(self): + for worker in self.Rota.workers: + match worker.site: + case "group1": + assert worker.proportion_rota_to_work == 1 + assert worker.get_shift_targets() == {"weekday": 10, "weekend": 5} + case "group2": + assert worker.proportion_rota_to_work == 1 + + match worker.fte: + case 60: + assert worker.get_shift_targets() == {"weekday": 6, "weekend": 0} + case 40: + assert worker.get_shift_targets() == {"weekday": 4, "weekend": 0} + case _: + assert 1 == 0 + case _: + assert 1 == 0 + + def test_rota_sites(self): + assert self.Rota.sites == {"group1", "group2"} + + +class TestNoWorkerRota: + weeks_to_rota = 10 + start_date = datetime.date(2022, 3, 7) + + Rota = RotaBuilder( + start_date, + weeks_to_rota=weeks_to_rota, + ) + + def test_no_workers(self): + with pytest.raises(NoWorkers): + self.Rota.build_workers() + + +if __name__ == "__main__": + t = TestDemoRota() diff --git a/timetable.css b/timetable.css index c58686c..db629d3 100644 --- a/timetable.css +++ b/timetable.css @@ -1,12 +1,12 @@ html { - + /* color: red; */ } table { /* margin-top: 50px; */ padding-top: 100px; - text-align:center; + text-align: center; /* table-layout : fixed; */ /* width:150px */ /* width: 200%; */ @@ -20,34 +20,38 @@ table { .table-div { /* overflow-x: auto; */ - width: 80%; - overflow-x: scroll; - margin-left: 200px; - overflow-y: visible; - padding: 0; + width: 80%; + overflow-x: scroll; + margin-left: 200px; + overflow-y: visible; + padding: 0; } .table-div th { - text-align:center; - white-space:nowrap; + text-align: center; + white-space: nowrap; transform: rotate(90deg) translateX(-100px); position: sticky; - top:0; + top: 0; } + .table-div th p { - margin:0 -100% ; - display:inline-block; -} -.table-div th p:before{ - content:''; - width:0; - padding-top:110%;/* takes width as reference, + 10% for faking some extra padding */ - display:inline-block; - vertical-align:middle; + margin: 0 -100%; + display: inline-block; } -.table-div td, th { +.table-div th p:before { + content: ''; + width: 0; + padding-top: 110%; + /* takes width as reference, + 10% for faking some extra padding */ + display: inline-block; + vertical-align: middle; +} + +.table-div td, +th { max-width: 10px; padding: 0px; } @@ -60,7 +64,7 @@ table { background-color: lightblue; } -.table-div tr:hover .unavailable{ +.table-div tr:hover .unavailable { background-color: lightgray; } @@ -89,18 +93,23 @@ table { .plymouth { color: #9169FF; } + .exeter { color: #5F60E8; } + .truro { color: #0074D9; } + .torquay { color: #5FA8E8; } + .unavailable { color: lightgray; } + .shift-requested { color: green; } @@ -108,41 +117,43 @@ table { .worker-summary { position: absolute; display: none; - overflow-x: visible; + overflow-x: visible; width: 100%; text-align: left; } + .site-summary { - display: inline-flex; + display: inline-flex; } .site-summary .site { - border: 1px solid black; - padding: 5px; - margin: 20px; + border: 1px solid black; + padding: 5px; + margin: 20px; } .site-name { - font-weight: bold; + font-weight: bold; } .worker-summary span { - min-width: 160px; - display: inline-flex; + min-width: 160px; + display: inline-flex; } .training-days-lost { - padding-top: 5px; + padding-top: 5px; } .tdl-settings { padding: 2px; } -.table-div + pre { +.table-div+pre { display: none; } -.shift-breakdown-button + pre { + +.shift-breakdown-button+pre { display: none; } @@ -154,20 +165,19 @@ table { color: brown; } -.th { +.th {} -} - -.table-div th.worker, td.worker { - position: absolute; - width: 200px; - max-width: 200px; - left: 0; - top: auto; - border-top-width: 1px; - /*only relevant for first row*/ - margin-top: -1px; - /*compensate for top border*/ +.table-div th.worker, +td.worker { + position: absolute; + width: 200px; + max-width: 200px; + left: 0; + top: auto; + border-top-width: 1px; + /*only relevant for first row*/ + margin-top: -1px; + /*compensate for top border*/ } .hidden { @@ -184,8 +194,8 @@ table { } [data-night-at-derriford="0"] { - border: 1px dotted orange ; - /* Attribute has this exact value */ + border: 1px dotted orange; + /* Attribute has this exact value */ } th.site-title { @@ -194,7 +204,7 @@ th.site-title { .name { max-width: 90px; - display:inline-flex; + display: inline-flex; white-space: nowrap; overflow: hidden; /*text-overflow: ellipsis;*/ @@ -210,4 +220,8 @@ th.site-title { summary h2 { display: inline; +} + +.derriford-night.shift-highlight { + background-color: yellow; } \ No newline at end of file diff --git a/timetable.js b/timetable.js index df1109b..a919049 100644 --- a/timetable.js +++ b/timetable.js @@ -123,6 +123,7 @@ function generateExtra() { "nwds": worker_td.attr("data-nwds"), "fte": worker_td.attr("data-fte_adj"), "end_date": worker_td.attr("data-end_date"), + "shift_diff": worker_td.attr("data-shift-diff"), "shifts": shifts, "shift_types": shifts_unique, "weekends_worked": weekends_worked, @@ -141,7 +142,16 @@ function generateExtra() { bank_holidays_worked = bank_holidays.length; - worker_td.after(`
Total shifts: ${total_shifts}, Weekends: ${weekends_worked}, Bank holidays: ${bank_holidays_worked},
`) + shift_diff = JSON.parse(worker_td.attr("data-shift-diff")); + summed_shift_diff = Object.values(shift_diff).reduce((a, b) => a + b); + + worker_td.after(`
+ Total shifts: ${total_shifts}, + Weekends: ${weekends_worked}, + Bank holidays: ${bank_holidays_worked}, + Summed shift diff: ${summed_shift_diff}, + +
`) }) @@ -308,6 +318,10 @@ $("td").hover((e) => { } if (e.target.dataset.shift != undefined && e.target.dataset.shift.length > 0) { $(`td[data-shift=${e.target.dataset.shift}]`).addClass("shift-highlight") + + if (e.target.dataset.shift.includes("night")) { + $(`td[data-night-at-derriford=1]`).siblings().addClass("derriford-night") + } } }, (e) => { @@ -315,5 +329,28 @@ $("td").hover((e) => { //end hover $("td.pair-match").removeClass("pair-match") $("td.shift-highlight").removeClass("shift-highlight") + $("td.derriford-night").removeClass("derriford-night") -}) \ No newline at end of file +}) + +$("#rota-table tr td:first-child").each((n, td) => { + $(td).click(() => { + viewWorker(td); + }) +}) + +function viewWorker(worker) { + ds = worker.dataset; + dlg = $(`
+ Site: ${ds.site}
+ FTE: ${ds.fte} (${ds.fte_adj})
+ End date: ${ds.end_date} +
`) + $("body").append(dlg) + + dlg.dialog() + + + console.log(worker); + +} \ No newline at end of file diff --git a/workers.py b/workers.py index 0759cbc..42d10d3 100644 --- a/workers.py +++ b/workers.py @@ -8,9 +8,9 @@ import uuid class Worker: def __init__( self, - Rota, - name, - site, + Rota, # Aim to remove (workers should be independent of rotas) + name: str, + site: str, grade: int, id=None, fte: int = 100, @@ -27,7 +27,7 @@ class Worker: pair: int = 0, ): - # We can either have a user generated ID + # We can either have a user generated ID if id is not None: self.id = id else: @@ -147,6 +147,7 @@ class Worker: # Calculate the proportion of the rota that is being worked self.proportion_rota_to_work = days_to_work / Rota.rota_days_length + self.days_to_work = days_to_work # We have to adjust the full time equivalent for people who CCT / leave the rota early self.fte_adj = self.fte * self.proportion_rota_to_work @@ -156,7 +157,7 @@ class Worker: # print(self.name, self.nwd) - def __lt__(self, other): + def __lt__(self, other) -> bool: return (self.site, self.grade, self.fte_adj, self.name) < ( other.site, other.grade, @@ -164,7 +165,7 @@ class Worker: other.name, ) - def __str__(self): + def __str__(self) -> str: nwd = ", ".join([str(i) for i in self.nwd]) if self.nwd is not None else "" return "{} {} [{}] PROC SITE:{} ({})".format( @@ -175,8 +176,11 @@ class Worker: self.night_at_derriford, ) - def get_details(self): + def get_details(self) -> str: return "{} {} {}".format(self.id, self.site[0], self.grade) - def get_full_details(self): + def get_full_details(self) -> str: return "{}/{}/{}".format(self.site, self.grade, self.name) + + def get_shift_targets(self) -> dict: + return self.shift_target_number