ciclos

commit c0c47dd99226bce4c78458c9fa2b5c2bb3c70586

Author: Pedro Lucas Porcellis <pedrolucasporcellis@gmail.com>

Add selected products to the current order

 src/blueprints/orders.py | 12 +++++++++++-
 src/templates/cycle.html | 4 ++--
 src/types/order.py | 20 ++++++++++++++++++++
 src/types/order_product.py | 22 ++++++++++++++++++++++


diff --git a/src/blueprints/orders.py b/src/blueprints/orders.py
index 6a8a37c89e36e154fbc76c6a2664939ffe524c48..a8e8f0d5df5267363c7b2ec980eab19b178241fb 100644
--- a/src/blueprints/orders.py
+++ b/src/blueprints/orders.py
@@ -15,4 +15,14 @@         return '', 401
 
     Order.create_for(current_user, current_cycle) 
     return redirect(url_for('cycles.show', id = current_cycle.id))
-  
+
+@orders.route('/<id>', methods = ['POST'])
+def update(id):
+    order = Order.query.filter_by(id = id).first()
+
+    if not order:
+        order = Order.create_for(current_user, current_cycle)
+    
+    order.add_products(request.form.getlist('product_ids'))
+
+    return order.to_json()




diff --git a/src/templates/cycle.html b/src/templates/cycle.html
index 13f498542578d167ca684b79b4b855e37e04ba29..a70e9665cfab79abcd6bfd919f4c7648524c9916 100644
--- a/src/templates/cycle.html
+++ b/src/templates/cycle.html
@@ -10,7 +10,7 @@   {% endif %}
 </section>
 
 <section class="products">
-  <form action="" method="post">
+  <form action="{{url_for('orders.update', id = current_order.id)}}" method="POST">
     <table>
       <thead>
         <tr>
@@ -25,7 +25,7 @@         {% for product in products %}
           <tr>
             <td>
               {% if current_order %}
-                <input type="checkbox" name="product_ids" > 
+                <input type="checkbox" name="product_ids" value="{{product.id}}"> 
               {% endif %}
             </td>
             <td> {{ product.title }} </td>




diff --git a/src/types/order.py b/src/types/order.py
index f115753b9b9c57c14413acb54d9d042d9259d718..6312222d1a1d7371655018a29223cfc4c0318ee0 100644
--- a/src/types/order.py
+++ b/src/types/order.py
@@ -1,5 +1,6 @@
 from . import db
 from datetime import datetime as dt
+from .order_product import OrderProduct
 
 class Order(db.Model):
     __tablename__ = 'orders'
@@ -9,6 +10,8 @@     user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable = False)
     cycle_id = db.Column(db.Integer, db.ForeignKey('cycles.id'), nullable = False)
     created_at = db.Column(db.DateTime, default = dt.utcnow)
     updated_at = db.Column(db.DateTime, default = dt.utcnow)
+
+    order_products = db.relationship('OrderProduct', backref="order", lazy = True)
 
     def __init__(self, user_id, cycle_id):
         self.user_id = user_id
@@ -21,3 +24,20 @@
     def create(self):
         db.session.add(self)
         db.session.commit()
+
+    def add_products(self, product_ids):
+        # Delete the current products for this order
+        for product in self.order_products:
+            db.session.delete(product)
+            db.session.commit()
+
+        # Create the new entries
+        for product_id in product_ids:
+            OrderProduct(self.id, product_id, 1).create()
+    
+    def to_json(self):
+        return {
+            "user_id": self.user_id,
+            "cycle_id": self.cycle_id,
+            "products": list(map(lambda x: x.product_id, self.order_products))
+        }




diff --git a/src/types/order_product.py b/src/types/order_product.py
new file mode 100644
index 0000000000000000000000000000000000000000..69b044f6b7116eedd1ba091a81f38fc70a241c98
--- /dev/null
+++ b/src/types/order_product.py
@@ -0,0 +1,22 @@
+from . import db
+from datetime import datetime as dt
+
+class OrderProduct(db.Model):
+    __tablename__ = "order_products"
+
+    id = db.Column(db.Integer, primary_key = True)
+    product_id = db.Column(db.Integer, db.ForeignKey('products.id'), nullable = False)
+    order_id = db.Column(db.Integer, db.ForeignKey('orders.id'), nullable = False)
+    quantity = db.Column(db.Integer, default = 1, nullable = False)
+
+    created_at = db.Column(db.DateTime, default = dt.utcnow)
+    updated_at = db.Column(db.DateTime, default = dt.utcnow)
+
+    def __init__(self, order_id, product_id, quantity):
+        self.order_id = order_id
+        self.product_id = product_id
+        self.quantity = quantity
+
+    def create(self):
+        db.session.add(self)
+        db.session.commit()