Ken
Thank you. Here is the form code…
...
CHOICE = django.forms.ChoiceField
...
VAL_ERR = django.forms.ValidationError
...
class RequestApproveForm(django.forms.Form):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
rsings = grandmas4hire.controllers.get_rsings()
rsets = grandmas4hire.controllers.get_rsets()
provs = grandmas4hire.bighelp.provs()
provs = [(e[0], f"{e[1]} {e[2]}") for e in provs]
provs = [("0", "None selected.")] + provs
p_field = CHOICE(choices = provs, initial = "0")
windows = list(grandmas4hire.controllers.WINDOW.items())
w_field = CHOICE(choices = windows, initial = "1.0")
for e in rsings:
self.fields[f"rsing_{e.id}_w"] = w_field
self.fields[f"rsing_{e.id}_p"] = p_field
for e in rsets:
self.fields[f"rset_{e.id}_w"] = w_field
self.fields[f"rset_{e.id}_p"] = p_field
def clean(self):
unavail = False
for e in grandmas4hire.controllers.get_rsings():
w = self.cleaned_data[f"rsing_{e.id}_w"]
p = self.cleaned_data[f"rsing_{e.id}_p"]
unavail_ = grandmas4hire.controllers.unavail(e.id,
None,
p,
w)
if unavail_:
unavail = unavail_
prov = grandmas4hire.bighelp.prov_name(p)
break
for e in grandmas4hire.controllers.get_rsets():
w = self.cleaned_data[f"rset_{e.id}_w"]
p = self.cleaned_data[f"rset_{e.id}_p"]
unavail_ = grandmas4hire.controllers.unavail(None,
e.id,
p,
w)
if unavail_:
unavail = unavail_
prov = grandmas4hire.bighelp.prov_name(p)
break
if unavail:
date = unavail[0].strftime("%-m/%-d/%Y")
time = datetime.time(hour = unavail[1], minute = 0)
time = time.strftime("%-I:%M %p")
msg = f"{prov} is unavailable at {time} on {date}."
raise VAL_ERR(msg)
Here is the function that uses it…
def manage_requests(request):
rsings = get_rsings()
rsets = get_rsets()
if request.method == "POST":
form = grandmas4hire.forms.RequestApproveForm(request.POST)
if form.is_valid():
reply = manage_requests_post(form, rsings, rsets)
else:
reply = django.shortcuts.render(request,
"manage_requests.html",
{"form" : form,
"rsings" : rsings,
"rsets" : rsets})
else:
msg = request.GET.get("msg")
form = grandmas4hire.forms.RequestApproveForm()
for e in rsings:
setattr(e, "w", form.fields[f"rsing_{e.id}_w"])
setattr(e, "p", form.fields[f"rsing_{e.id}_p"])
for e in rsets:
setattr(e, "w", form.fields[f"rset_{e.id}_w"])
setattr(e, "p", form.fields[f"rset_{e.id}_p"])
reply = django.shortcuts.render(request,
"manage_requests.html",
{"form" : form,
"rsings" : rsings,
"rsets" : rsets,
"msg" : msg})
return reply
Here is the helper function…
def manage_requests_post(form, rsings, rsets):
msg = "No request(s) approved."
for e in rsings:
p = form.cleaned_data[f"rsing_{e.id}_p"]
w = form.cleaned_data[f"rsing_{e.id}_w"]
if p != "0":
msg = "Request(s) approved."
manage_requests_execute(e.id, None, p, w)
for e in rsets:
p = form.cleaned_data[f"rset_{e.id}_p"]
w = form.cleaned_data[f"rset_{e.id}_w"]
if p != "0":
msg = "Request(s) approved."
manage_requests_execute(None, e.id, p, w)
url = "/manage_requests"
url = add_url_param(url, "msg", msg)
reply = django.shortcuts.redirect(url)
return reply
Tell me if you need anything else.
Thanks again.
Chris