def page_draft_reservation_confirm():
    '''
    The reservation wizard is done.
    Make the reservation non-draft and give the user a confirmation number.
    '''
    formdata = request.form
    res = getReservationByID(int(formdata['resID']))
    res.set_status(CONST.unarrived_status)

    content = "Reservation completed. You confirmation number is: " + str(res.getID())

    return render('basic.html', content = content)
def page_reservation_wizard_3_new_guest():
    '''
    The user has selected to create a new guest.
    Display the form to create a new guest
    and use that new guest as the guest on the reservation.
    '''
    from RoomReserve.admin.guest import form_CreateGuest #, processCreateGuestForm
    formdata = request.form
    res = getReservationByID(int(formdata['resID']))

    form = form_CreateGuest()

    return render('reswizard/wizard3_newguest.html', form=form, res=res)
def page_reservation_wizard_3_new_guest_process():
    # the form has been filled out, import the data
    formdata = request.form
    from RoomReserve.admin.guest import form_CreateGuest, processCreateGuestForm
    myGuest = processCreateGuestForm(formdata)
    if myGuest == False:
        # the guest could not be created.
        return render('basic.html', content="Could not create guest.")
    myGuestID = myGuest.get_id()
    myRes = getReservationByID(int(formdata['resID']))
    myRes.setGuest(guestID=myGuestID)


    return render('reswizard/confirm.html', res=myRes)
def page_reservation_wizard_3():
    '''
    Updates the reservation with the selected room.

    Asks for the guest information
    '''
    formdata = request.form
    res = getReservationByID(int(formdata['resID']))
    room = getRoomByID(int(formdata['roomID']))

    res.setRoom(room=room)
    buildingName = getBuildingById(room.get_building_id()).get_name()

    from RoomReserve.admin.guestsearch import form_SearchGuest
    guestSearchForm = form_SearchGuest()

    from RoomReserve.admin.guest import form_CreateGuest
    createGuestForm = form_CreateGuest()

    return render('reswizard/wizard3.html', guestSearchForm=guestSearchForm,\
        room=getRoomByID(res.getRoomID()), buildingName=buildingName, resID=res.getID())
def page_newres():

  def pullAvailableRooms(itemlist):

    [capacity, indatey, indatem, indated, outdatey, outdatem, outdated] = itemlist

    indate = str(indatey) + "/" +  str(indatem) + "/" +  str(indated)
    outdate = str(outdatey) + "/" +  str(outdatem) + "/" +  str(outdated)
    indate = delorean.parse(indate).naive()
    outdate = delorean.parse(outdate).naive()

    availableRooms = find_available_rooms(indate, outdate, capacity=capacity)

    return availableRooms

  def allowEdit():
    '''
    Figures out if the current user should be allowed
    to edit the guest object.
    Parameters: GuestID for the guest we want to edit
    '''
    if current_user.is_standard():
      # Only admins and standard users can edit guests
      return True
    else:
      return False
      
  if request.method == 'POST' and 'roomID' in request.form:
    formdata = request.form
    try:
      res = getReservationByID(int(formdata['resID']))
      res.setRoom(formdata['roomID'])
    except:
      return render("basic.html", content="Could not set room")
    return render("newReservation.html", pullAvailableRooms=pullAvailableRooms, getGuest=getGuest, allowEdit=allowEdit, guests=getAllGuests(), form=NewGuestForm(), successpage=True)

  if request.method == 'POST' and 'dates' in request.form:
    formdata = request.form
    indate = formdata['dates'].split()[0].split('/')
    indate = indate[2] + '/' + indate[1] + '/' + indate[0] 
    outdate = formdata['dates'].split()[2].split('/')
    outdate = outdate[2] + '/' + outdate[1] + '/' + outdate[0] 
    if formdata['capacity'] == "":
        capacity = 1
    else:
        capacity = int(formdata['capacity'])

    indate = delorean.parse(indate).naive()
    outdate = delorean.parse(outdate).naive()


    #availableRooms = find_available_rooms(indate, outdate, capacity=capacity)
    if formdata['newguestfirst'] != "" and formdata['newguestfirst'] != None:
      if formdata['guestID'] != "" and formdata['guestID'] != None:
        return render("basic.html", content="Tried to create new guest and use existing guest in same instance.")
      else:
        try:
          firstname = formdata['newguestfirst']
          lastname = formdata['newguestlast']
          email = formdata['newguestemail']

          phone = re.sub(r'[^\w]', '', formdata['newguestphone'])
          phone = int(phone)

          address = formdata['newguestaddress']

          payment = re.sub(r'[^\w]', '', formdata['newguestpayment'])
          try:
              payment = int(payment)
          except ValueError:
              payment = 0

          notes = formdata['newguestnotes']
        except Exception as e:
          print(e)
          return render("basic.html", content="An issue with new guest data occured.")

        myguest = createGuest(firstname, lastname, email, phone, address, payment, notes)
        if myguest == False:
          return render("basic.html", content="Could not create guest.")
        myguestid = myguest.get_id()
    elif formdata['guestID'] != "" and formdata['guestID'] != None:
      myguestid = int(formdata['guestID'])
      print("Got the guest (existing)")

    else:
      return render("basic.html", content="No guest selected")


    if 'roomselect' in formdata.keys():
      firstroom = find_first_available_room(indate, outdate, capacity=capacity)
      if firstroom == None:
        return render("basic.html", content="No rooms are available for selected capacity and date range. Try a different date range or try splitting the group into multiples.")
      else:
        firstroomid = firstroom.getID()
      try:
        createReservation(guestID=myguestid, madeby=current_user.getID(), roomID=firstroomid, checkin=indate, checkout=outdate, status=CONST.unarrived_status)
      except:
        return render("basic.html", content="Could not complete reservation")

    else:
      availableRooms = find_available_rooms(indate, outdate, capacity=capacity)
      
      if len(availableRooms) == 0:
        return render("basic.html", content="No rooms are available for selected capacity and date range. Try a different date range or try splitting the group into multiples.")
      try:
        myres = createReservation(guestID=myguestid, madeby=current_user.getID(), roomID=-1, checkin=indate, checkout=outdate, status=CONST.draft_status)
      except:
        return render("basic.html", content="Could not complete draft reservation")

      return render("roompick.html", resID = myres.getID(), rooms=availableRooms)
    return render("newReservation.html", pullAvailableRooms=pullAvailableRooms, getGuest=getGuest, allowEdit=allowEdit, guests=getAllGuests(), form=NewGuestForm(), successpage=True)


  return render("newReservation.html", pullAvailableRooms=pullAvailableRooms, getGuest=getGuest, allowEdit=allowEdit, guests=getAllGuests(), form=NewGuestForm())
def page_reservation_wizard_3_search_existing_guest_process():
    formdata = request.form
    myRes = getReservationByID(int(formdata['resID']))
    myRes.setGuest(guestID=int(formdata['guestID']))

    return render('reswizard/confirm.html', res=myRes)