Пример #1
0
def _editprofile ():

    # Get user's details to be edited
    profile = User.query.filter(User.login_id == get_user()).first()
    form = UserForm(obj=profile)

    # If we are GET'ing the form then add data and show correct form & template
    if request.method == "GET":
        return render_template("profile.html", data=profile, form=form)

    del form.role # user can't change this in their profile
    del form.last_login # they aren't logging in at this stage

    # If we are POST'ing then we are making a change, so show message
    if form.validate_on_submit():
        if form.savebtn.data:

            # delete password if they haven't entered text to change it.
            if not form.password.data:
                del form.password

            form.populate_obj(profile)
            profile.last_modified = datetime.now()
            profile.modified_by = session["login_id"]
            db.session.commit()
            flash ("Saved Profile Details", 'success')
            return redirect(url_for('gui_blueprint._index'))

    else:
        flash_errors(form)
        return render_template("profile.html", data=profile, form=form)
Пример #2
0
 def __init__(self, *args, **kwargs):
     super(BookingForm, self).__init__(*args, **kwargs)
     self.description.render_kw = {'style': 'resize:none;'}
     self.tmp_start_t.render_kw = {
         'data-target': '#datetimepicker1',
         'data-toggle': 'datetimepicker',
         'readonly': '',
         'data-placement': 'top',
         'title': 'Click to choose start time'
     }
     self.tmp_end_t.render_kw = {
         'data-target': '#datetimepicker2',
         'data-toggle': 'datetimepicker',
         'readonly': '',
         'data-placement': 'top',
         'title': 'Click to choose end time'
     }
     self.complex.choices = [
         (a.id, a.complex_name)
         for a in Complex.query.order_by(Complex.complex_name)
     ]  # Complex Names
     self.cluster.choices = [
         (a.id, a.param_name) for a in Parameter.query.filter(
             Parameter.param_group == 97).order_by(Parameter.param_name)
     ]  # Cluster Names
     self.owner_id.default = get_user()
Пример #3
0
def _index ():

    if current_user.is_authenticated:
        admin = Booking.query.all()
        bookings = Booking.query.filter(Booking.owner_id.ilike(get_user())).all()
        return render_template("dashboard.html", data1=admin, data2=bookings)
    else:
        return redirect(url_for('gui_blueprint._login'))
Пример #4
0
def _approvebooking (id):

    if is_admin():
        booking = Booking.query.filter_by(id=id).first()
        if booking.approved_date:
            booking.approved_date = None
            booking.approved_by = None
            booking.approval_reason = "Manually set to not approved by " + get_user()
        else:
            booking.approved_date = datetime.now()
            booking.approved_by = get_user()
            booking.approval_reason = "Approved by " + get_user()
        flash("Toggled approval date for booking <{}>".format(booking.title))
        db.session.commit()
    else:
        flash ("Cannot toggle booking approval unless an administrator")

    return redirect(url_for('gui_blueprint._index'))
Пример #5
0
def _editbooking (id):

    #for key, value in request.form.items():
    #    print(key, value)

    booking = Booking.query.filter_by(id=id).first()
    form = BookingForm(obj=booking)

    if request.method == "GET":
        complex = Complex.query.filter(Complex.id==int(form.complex.data)).first() # Get complex object from query
        form.tmp_date.data = datetime.strptime(form.start_dt.data.split()[0], '%Y-%m-%d').strftime('%d-%m-%Y')
        form.tmp_start_t.data = form.start_dt.data.split()[1]
        form.tmp_end_t.data = form.end_dt.data.split()[1]
        form.complex_text.data = complex.complex_name
        flash_errors(form)
        return render_template("editbooking.html", form=form)

    if request.method == "POST":

        if request.form.get("deletebtn", False):
            db.session.delete(booking)
            db.session.commit()
            flash("Booking deleted successfully", 'success')
            return redirect(url_for('gui_blueprint._index'))

        # check from initial select form submitted as "Next"
        if request.form.get("nextbtn", False):
            cplx = int(request.form.get("complex_select", 1)) # Get Complex ID
            complex = Complex.query.filter(Complex.id==int(cplx)).first() # Get complex object from query

            s_time = complex.complex_push_start
            e_time = complex.complex_push_end
            form.start_dt.default = request.form.get("start") + " " + s_time
            form.end_dt.default = request.form.get("start") + " " + e_time
            form.tmp_date.default = request.form.get("start").replace("-","/")
            form.tmp_start_t.default = s_time
            form.tmp_end_t.default = e_time
            form.owner_id.data = get_user()

            if is_day_allowed(request.form.get("start"), complex.complex_push_days):
                form.approval_required.default = "0" # may change once the booking has been checked
            else:
                form.approval_required.default = "1"

            form.complex.default = request.form.get("complex_select", 1)
            form.complex_text.default = complex.complex_name

            form.process()
            return render_template("editbooking.html", form=form)

        # This is the actual booking page and we're trying to save the record
        # VALID
        if form.validate_on_submit():

            # We have made it to the process/checking section.  Data is valid so we determine if the booking
            # needs to be approved or not.  Bookings are always saved, but either as auto-approved or pending approval
            if request.form.get("checkbtn", False):
                db.session.autoflush = False
                complex = Complex.query.filter(Complex.id==int(form.complex.data)).first() # Get complex object from query

                if not booking: # this is a new record
                    booking = Booking()
                    db.session.add(booking)

                form.populate_obj(booking)
                booking.start_dt = datetime.strptime(form.start_dt.data, '%d-%m-%Y %H:%M')
                booking.end_dt = datetime.strptime(form.end_dt.data, '%d-%m-%Y %H:%M')
                booking.logged = datetime.now()

                # Check the booking meets the rules set out in the system for auto approvals
                # Does the booking meet the core rules?
                flag_core = is_booking_core_ok(form.tmp_date.data, form.complex.data)

                # Does this deviate from the standard day/time combination in the complex record?
                flag_cust = is_booking_custom(form.tmp_start_t.data, form.tmp_end_t.data, form.complex.data)

                # Does the booking have an approval flag already set?
                flag_reqd = (str(form.approval_required.data) != '1')

                if flag_core and not flag_cust and flag_reqd:

                    booking.approved_date = datetime.now()
                    booking.approved_by = 'Automatic Approval'
                    booking.approval_reason = booking.approved_by
                    flash ('Booking was saved and automatically approved', 'success')

                else:
                    # The booking will be saved, but pending approval
                    del booking.approved_date
                    del booking.approved_by

                    booking.approval_reason = 'Booking pending'

                    if not flag_core:
                        booking.approval_reason += ', too many bookings per day/complex)'
                    if flag_cust or not flag_reqd:
                        booking.approval_reason += ', non-standard start/end times requested'

                    flash ('Booking was saved but is pending approval by the Operations team', 'warning')

                db.session.autoflush = True
                db.session.commit()

            # we are just saving the record
            if request.form.get("savebtn", False):

                try:
                    form.start_dt.data = datetime.strptime(form.tmp_date.data + " " + form.tmp_start_t.data, '%d-%m-%Y %H:%M')
                    form.end_dt.data = datetime.strptime(form.tmp_date.data + " " + form.tmp_end_t.data, '%d-%m-%Y %H:%M')
                except:
                    pass

                form.populate_obj(booking)
                db.session.commit()

            return redirect(url_for('gui_blueprint._index'))

        # INVALID, so go back to edit page and get corrections by user.
        else:
            flash_errors(form)
            return render_template("editbooking.html", form=form)