diff --git a/store/forms.py b/store/forms.py index 25703edb29161a1b947c64b5af21ad6452de58a4..7f088a7253409cb6f527a9eedda4f8edf9ae9418 100644 --- a/store/forms.py +++ b/store/forms.py @@ -48,6 +48,18 @@ class SearchForm(FlaskForm): class AccessDataForm(FlaskForm): - table = SelectField("Table", choices=["Item", "Item Set"]) + table = SelectField( + "Table", choices=["Item", "Item Set"], validators=[validators.DataRequired()] + ) id = IntegerField("ID", [validators.DataRequired()]) submit = SubmitField("Submit") + + +class AddForm(FlaskForm): + table = SelectField( + "Table", choices=["Item", "Item Set"], validators=[validators.DataRequired()] + ) + description = StringField("Description", validators=[validators.DataRequired()]) + # Default value so item set doesn't have validation errors despite not needing it. + price = IntegerField(default=0, validators=[validators.DataRequired()]) + submit = SubmitField("Submit") diff --git a/store/models.py b/store/models.py index 06b869cb95456d1241b9cdf471fa9a21a0ea3be1..076efd6f5f7d3ad7804a555cca3d8e3587cb0049 100644 --- a/store/models.py +++ b/store/models.py @@ -58,7 +58,6 @@ class ItemSet(db.Model): id = db.Column(db.Integer, primary_key=True) description = db.Column(db.String(256), nullable=False) - quantity = db.Column(db.Integer, nullable=False) items = db.relationship( "Item", secondary=itemSets, @@ -70,6 +69,10 @@ class ItemSet(db.Model): def price(self): return sum(int(item.price) for item in self.items) + @property + def quantity(self): + return len(self.items) + def __repr__(self): return f"id: {self.id}, description: {self.description}, items: {self.items}, quantity: {self.price}, price: { self.calculate_price() }" # TODO: Rename price to quantity diff --git a/store/routes.py b/store/routes.py index 7e1710311da59ff174dbb60315f60d60cf3a9a54..a8f3b35df73c1b3d084ffb3afac10adc1d7d27ab 100644 --- a/store/routes.py +++ b/store/routes.py @@ -362,7 +362,40 @@ def database_management(): ) -# 25701, 12522 +@app.route("/database_management_add", methods=["GET", "POST"]) +@login_required +def database_management_add(): + if current_user.userType != "admin": + flash("Unauthorized access") + return redirect(url_for("home")) + + form = AddForm() + if form.validate_on_submit(): + description = form.description.data + price = form.price.data + + item = None + if form.table.data == "Item": + item = Item(description=description, price=price) + elif form.table.data == "Item Set": + item = ItemSet(description=description) + db.session.add(item) + db.session.commit() + + access_data_form = AccessDataForm() + return render_template( + "userContent/database_management.html", + access_data_form=access_data_form, + main_item=item, + is_item=type(item) is Item, + ) + + return render_template( + "userContent/database_management_add.html", + form=form, + ) + + @app.route("/add_item_to_set", methods=["GET", "POST"]) def add_item_to_set(): print("Adding Item", file=sys.stderr) diff --git a/store/templates/userContent/admin.html b/store/templates/userContent/admin.html index 1632a25a1e3a468e36006d27e44172a27e929746..35187f877c03846f0c9a72b16db649f42845f9aa 100644 --- a/store/templates/userContent/admin.html +++ b/store/templates/userContent/admin.html @@ -6,6 +6,8 @@ <ul> <li><a href="{{ url_for('accountDetails')}}">View my Account details</a></li> <li><a href="{{ url_for('view_address')}}">View my shipping address</a></li> - <li><a href="{{ url_for('database_management')}}">View database management</a></li> + <li><a href="{{ url_for('database_management')}}">Edit existing entries</a></li> + <li><a href="{{ url_for('database_management_add')}}">Add new entries</a></li> + </ul> {% endblock %} \ No newline at end of file diff --git a/store/templates/userContent/database_management.html b/store/templates/userContent/database_management.html index 8a382d4ccbad7c07aa44b8b91e5f330e5f05575c..1c731139628312a3db62625d6754993fa3eba1ab 100644 --- a/store/templates/userContent/database_management.html +++ b/store/templates/userContent/database_management.html @@ -33,7 +33,7 @@ <button onclick="deleteItemSet({{main_item.id}})">Delete</button> {% endif %} - {% if main_item.items %} + {% if not is_item %} <div> <h1>Items contained in set: </h1> <table> @@ -49,8 +49,8 @@ <tr> <td>{{ item['description'] }}</td> <td>£{{ item['price'] }}</td> + <button onclick="deleteItemFromSet({{item.id}}, {{main_item.id}})">Delete</button> </tr> - <button onclick="deleteItemFromSet({{item.id}}, {{main_item.id}})">Delete</button> {% endfor %} </tbody> </table> diff --git a/store/templates/userContent/database_management_add.html b/store/templates/userContent/database_management_add.html new file mode 100644 index 0000000000000000000000000000000000000000..1ebfc8a0ad44f8cd446ef927f15ab0358f889916 --- /dev/null +++ b/store/templates/userContent/database_management_add.html @@ -0,0 +1,34 @@ +{% from "_formhelpers.html" import render_field %} +{%extends 'base.html' %} +{% block title %} Database Management | Antiques Online {% endblock %} +{% block content %} +<form method="POST"> + {{form.hidden_tag()}} + <dl> + <table> + <tr> + <td>{{ render_field(form.table) }} </td> + </tr> + <tr> + <td>{{ render_field(form.description) }} </td> + </tr> + <tr id="price_optional"> + <td>{{ render_field(form.price) }} </td> + </tr> + </div> + </table> + </dl> + <br> + {{form.submit()}} + <br> +</form> + +<script> + $(document).ready(function () { + $('#table').change(function () { + $('#price_optional').toggle(); + }); + }); +</script> + +{% endblock %} \ No newline at end of file