diff --git a/app/forms.py b/app/forms.py index 48ee503..ca6a047 100644 --- a/app/forms.py +++ b/app/forms.py @@ -30,6 +30,7 @@ class OrderForm(Form): class OrderItemForm(Form): product_id = SelectField('Item', coerce=int) + extra = StringField('Extra') submit_button = SubmitField('Submit') def populate(self, location): diff --git a/app/migrations/versions/4e94c0b08ed_.py b/app/migrations/versions/4e94c0b08ed_.py new file mode 100644 index 0000000..550e057 --- /dev/null +++ b/app/migrations/versions/4e94c0b08ed_.py @@ -0,0 +1,26 @@ +"""Add extra message + +Revision ID: 4e94c0b08ed +Revises: 42709384216 +Create Date: 2015-06-24 21:42:41.466973 + +""" + +# revision identifiers, used by Alembic. +revision = '4e94c0b08ed' +down_revision = '42709384216' + +from alembic import op +import sqlalchemy as sa +from sqlalchemy.dialects import mysql + +def upgrade(): + ### commands auto generated by Alembic - please adjust! ### + op.add_column('order_item', sa.Column('extra', sa.String(length=254), nullable=True)) + ### end Alembic commands ### + + +def downgrade(): + ### commands auto generated by Alembic - please adjust! ### + op.drop_column('order_item', 'extra') + ### end Alembic commands ### diff --git a/app/models.py b/app/models.py index b4b8d85..e4cb847 100644 --- a/app/models.py +++ b/app/models.py @@ -102,12 +102,18 @@ class Order(db.Model): user["paid"] = user.get("paid", True) and item.paid user["products"] = user.get("products", []) + [item.product] group[item.get_name()] = user + return group def group_by_product(self): - group = defaultdict(int) + group = dict() for item in self.items: - group[item.product.name] += 1 + product = group.get(item.product.name, dict()) + product['count'] = product.get("count", 0) + 1 + if item.extra: + product["extras"] = product.get("extras", []) + [item.extra] + group[item.product.name] = product + return group def can_close(self, user_id): @@ -128,6 +134,7 @@ class OrderItem(db.Model): order_id = db.Column(db.Integer, db.ForeignKey('order.id'), nullable=False) product_id = db.Column(db.Integer, db.ForeignKey('product.id')) paid = db.Column(db.Boolean, default=False) + extra = db.Column(db.String(254), nullable=True) name = db.Column(db.String(120)) def configure(self, user, order, product): diff --git a/app/static/css/main.css b/app/static/css/main.css index 34bf47a..451f630 100644 --- a/app/static/css/main.css +++ b/app/static/css/main.css @@ -18,3 +18,7 @@ body { .full-width { width: 100%; } + +.product .extras { + padding-left: 20px; +} \ No newline at end of file diff --git a/app/templates/order.html b/app/templates/order.html index ca7f1dc..974a0c2 100644 --- a/app/templates/order.html +++ b/app/templates/order.html @@ -38,6 +38,11 @@ {{ form.product_id(class='form-control select') }} {{ util.render_form_field_errors(form.product_id) }} +