diff --git a/loan.py b/loan.py new file mode 100644 index 0000000..9ce2f73 --- /dev/null +++ b/loan.py @@ -0,0 +1,79 @@ +from wtforms import SubmitField, StringField, HiddenField, validators, TextAreaField +from flask_wtf import FlaskForm +from flask import request, render_template +from wtforms.fields.html5 import DateField +from __main__ import db, app, ma + +################################################################################ +# Class describing Loan in the database, and via sqlalchemy, connected to the DB as well +################################################################################ +class Loan(db.Model): + id = db.Column(db.Integer, unique=True, nullable=False, primary_key=True) + surname = db.Column(db.String(30), unique=False, nullable=False) + firstnames = db.Column(db.String(50), unique=False, nullable=False) + contact_details = db.Column(db.String(256), unique=False, nullable=False) + date_lent = db.Column(db.Date, nullable=False ) + + def __repr__(self): + return "".format(self.id,self.firstnames, self.surname) + +################################################################################ +# Helper class that inherits a .dump() method to turn class Loan into json / useful in jinja2 +################################################################################ +class LoanSchema(ma.SQLAlchemyAutoSchema): + class Meta: + model = Loan + ordered = True + +################################################################################ +# Helper class that defines a form for loan, used to make html
, with field validation (via wtforms) +################################################################################ +class LoanForm(FlaskForm): + id = HiddenField() + firstnames = StringField('FirstName(s):', [validators.DataRequired()]) + surname = StringField('Surname:', [validators.DataRequired()]) + contact_details = TextAreaField('Contact Details:', [validators.DataRequired()]) + surname = StringField('Surname:', [validators.DataRequired()]) + date_lent = DateField('Date Lent:', format='%Y-%m-%d' ) + submit = SubmitField('Save' ) + delete = SubmitField('Delete' ) + +################################################################################ +# Routes for loan data +# +# /loans -> GET only -> prints out list of all loans +################################################################################ +@app.route("/loans", methods=["GET"]) +def loans(): + loans = Loan.query.all() + return render_template("loans.html", loans=loans) + +################################################################################ +# /loan/ -> GET/POST(save or delete) -> shows/edits/delets a single loan +################################################################################ +@app.route("/loan/", methods=["GET", "POST"]) +def loan(id): + ### DDP: should this be request.form or request.values? + alert="Success" + loan_form = LoanForm(request.form) + if request.method == 'POST' and loan_form.validate_on_submit(): + id = request.form['id'] + loan = Loan.query.get(id) + try: + request.form['submit'] + except: + message="Sorry, Deleting unsupported at present" + alert="Danger" + else: + loan.firstnames = request.form['firstnames'] + loan.surname = request.form['surname'] + loan.surname = request.form['surname'] + loan.contact_details = request.form['contact_details'] + loan.date_lent = request.form['date_lent'] + db.session.commit() + message="Successfully Updated Loan (id={})".format(id) + else: + loan = Loan.query.get(id) + loan_form = LoanForm(request.values, obj=loan) + message="" + return render_template("loan.html", loan=loan, alert=alert, message=message, loan_form=loan_form) diff --git a/templates/books_for_loan.html b/templates/books_for_loan.html new file mode 100644 index 0000000..df05161 --- /dev/null +++ b/templates/books_for_loan.html @@ -0,0 +1,17 @@ +

Loaned Books

+ + + + + + {% for book in books %} + + {% if book.sub_book_num is defined %} + + {% else %} + + {% endif %} + + {% endfor %} + +
Title
    {{book.title}}{{book.title}}
diff --git a/templates/loan.html b/templates/loan.html new file mode 100644 index 0000000..e831ee1 --- /dev/null +++ b/templates/loan.html @@ -0,0 +1,53 @@ +{% extends "base.html" %} +{% block main_content %} +
+

Loan

+ {% if message|length %} +
+ {{message}} +
+ {% endif %} +
+
+ + {{ loan_form.csrf_token }} + {{ loan_form.id }} +
+ {{ loan_form.firstnames.label( class="col-lg-2" ) }} + {{ loan_form.firstnames( class="form-control col-lg-10" ) }} +
+
+ {{ loan_form.surname.label( class="col-lg-2" ) }} + {{ loan_form.surname( class="form-control col-lg-10" ) }} +
+
+ {{ loan_form.date_lent.label( class="col-lg-2" ) }} + {{ loan_form.date_lent( class="form-control col-lg-10" ) }} +
+
+ {{ loan_form.contact_details.label( class="col-lg-2" ) }} + {{ loan_form.contact_details( class="form-control col-lg-10", rows="5" ) }} +
+
+
+
+
+ {{ loan_form.delete( class="btn btn-outline-danger col-lg-2" )}} + {{ loan_form.submit( class="btn btn-primary col-lg-2" )}} +
+ +
+
+
+
+
+
+
+{% endblock main_content %} +{% block script_content %} + +{% endblock script_content %} diff --git a/templates/loans.html b/templates/loans.html new file mode 100644 index 0000000..3d3d209 --- /dev/null +++ b/templates/loans.html @@ -0,0 +1,16 @@ +{% extends "base.html" %} + +{% block main_content %} +

Loans

+ + + + + + {% for loan in loans %} + + + {% endfor %} + +
SurnameFirstname(s)Date LentContact Details
{{loan.surname}}{{loan.firstnames}}{{loan.date_lent}}{{loan.contact_details}}
+{% endblock main_content %}