start working on shift paring balancing
This commit is contained in:
@@ -2,6 +2,9 @@ import csv
|
||||
from datetime import datetime
|
||||
import re
|
||||
from requests import Session
|
||||
from loguru import logger
|
||||
|
||||
from rich.pretty import pprint
|
||||
|
||||
|
||||
from rota.workers import Worker, NotAvailableToWork, NonWorkingDays, WorkRequests, PreferenceNotToWork, OutOfProgramme
|
||||
@@ -9,6 +12,8 @@ from rota.workers import Worker, NotAvailableToWork, NonWorkingDays, WorkRequest
|
||||
date_re = r"[\d]{1,2}\/[\d]{1,2}\/[\d]{2}"
|
||||
|
||||
|
||||
live_rota = True
|
||||
|
||||
def load_leave(Rota):
|
||||
|
||||
with Session() as s:
|
||||
@@ -21,14 +26,17 @@ def load_leave(Rota):
|
||||
"Pragma": "no-cache"
|
||||
}
|
||||
|
||||
download = s.get("https://docs.google.com/spreadsheets/d/e/2PACX-1vRYqSKq-OYW1tNnGJtx9LIMo_FXVfcHBRPF4HEMcBxWPfmXimWtr5oEDR_rIUSXrOndb9YjP3iC_4bS/pub?gid=0&single=true&output=csv", headers=headers)
|
||||
decoded_content = download.content.decode('utf-8')
|
||||
if live_rota:
|
||||
download = s.get("https://docs.google.com/spreadsheets/d/e/2PACX-1vSRx9VWXSlRubPyA0RhiI-Oqf5eHNYYEc6rFzlraDbR5_8qqr5g13-4uV-gn4u-TjZxiSMv1fBUaESq/pub?gid=814517272&single=true&output=csv", headers=headers)
|
||||
decoded_content = download.content.decode('utf-8')
|
||||
|
||||
reader = csv.reader(decoded_content.splitlines(), delimiter=',')
|
||||
reader = csv.reader(decoded_content.splitlines(), delimiter=',')
|
||||
|
||||
#with open("/home/ross/Downloads/Draft PROC Rota March 24 - Sept 24 - Sheet1.csv") as f:
|
||||
# reader = csv.reader(f.read().splitlines(), delimiter=',')
|
||||
else:
|
||||
with open("/home/ross/Downloads/PROC Draft RK version.csv") as f:
|
||||
reader = csv.reader(f.read().splitlines(), delimiter=',')
|
||||
|
||||
n = 0
|
||||
leave = {}
|
||||
requests = {}
|
||||
site_prefs = {}
|
||||
@@ -37,7 +45,11 @@ def load_leave(Rota):
|
||||
|
||||
n = 1
|
||||
for row in reader:
|
||||
row_title = row[0]
|
||||
if n < 10:
|
||||
print(row)
|
||||
row_title = row[1]
|
||||
print(row_title)
|
||||
row_date = row[0]
|
||||
r = row[2:]
|
||||
# header, extract names
|
||||
if n == 1:
|
||||
@@ -70,16 +82,16 @@ def load_leave(Rota):
|
||||
if lower_item == "derriford twilights":
|
||||
lower_item = "plymouth_twilights"
|
||||
|
||||
if "PROC site" in row_title:
|
||||
if "PROC site" in row_title or row_title == "PROC nights from":
|
||||
worker["site_pref"] = lower_item
|
||||
|
||||
if row_title in ("Rotation", "Site"):
|
||||
elif row_title in ("Rotation", "Site", "Placement", "Placement location"):
|
||||
worker["site"] = lower_item
|
||||
|
||||
elif row_title == "Grade":
|
||||
elif row_title in ("Grade", "Grade (ST)"):
|
||||
worker["grade"] = lower_item
|
||||
|
||||
elif row_title == "%FTE":
|
||||
elif row_title in ("%FTE", "%FTE on-call", "FTE", "FTE on-call"):
|
||||
worker["fte"] = lower_item
|
||||
|
||||
elif "NWD" in row_title:
|
||||
@@ -98,7 +110,13 @@ def load_leave(Rota):
|
||||
|
||||
elif row_title in ("Start date",):
|
||||
if lower_item:
|
||||
date = datetime.strptime(lower_item, "%d/%m/%y").date()
|
||||
try:
|
||||
date = datetime.strptime(lower_item, "%d/%m/%y").date()
|
||||
except ValueError:
|
||||
date = datetime.strptime(lower_item, "%d/%m/%Y").date()
|
||||
except ValueError:
|
||||
logger.warning(f"Cannot parse date: {lower_item} (n: {n}, row: {row})")
|
||||
raise ValueError(f"Cannot parse date: {lower_item}")
|
||||
worker["start_date"] = date
|
||||
else:
|
||||
worker["start_date"] = None
|
||||
@@ -128,19 +146,25 @@ def load_leave(Rota):
|
||||
if lower_item:
|
||||
worker["bank_holiday_extra"] = int(lower_item)
|
||||
|
||||
elif re.match(date_re, row_title) is not None:
|
||||
elif re.match(date_re, row_date) is not None:
|
||||
|
||||
if lower_item != "":
|
||||
try:
|
||||
try:
|
||||
date = datetime.strptime(row[0], "%d/%m/%y").date()
|
||||
date = datetime.strptime(row_date, "%d/%m/%y").date()
|
||||
except ValueError:
|
||||
date = datetime.strptime(row[0], "%d/%m/%Y").date()
|
||||
date = datetime.strptime(row_date, "%d/%m/%Y").date()
|
||||
|
||||
# This may be easier to do as a dict
|
||||
if lower_item in shifts:
|
||||
worker["requests"].append(WorkRequests(date=date, shift=lower_item))
|
||||
elif lower_item in ("nights only"):
|
||||
if date.weekday() < 5:
|
||||
worker["requests"].append(WorkRequests(date=date, shift="night_weekday"))
|
||||
else:
|
||||
worker["requests"].append(WorkRequests(date=date, shift="night_weekend"))
|
||||
|
||||
elif lower_item in ("work_request", "happy to work", "offered"):
|
||||
elif lower_item in ("work_request", "happy to work", "offered", "may be", "volunteered"):
|
||||
worker["requests"].append(WorkRequests(date=date, shift="*"))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user