From becf5f929a4fefb3cc611bf870f8976c0a16b622 Mon Sep 17 00:00:00 2001
From: Rodia <alejandro.ayala@onecluster.org>
Date: Sat, 15 Feb 2025 12:17:37 -0500
Subject: [PATCH] Fix: Create POST Order Line

---
 routes.py                    | 74 ++++++++++++++++++++++++------------
 setup.py                     |  2 +-
 tests/SaleOrderApiTest.py    | 15 ++++++++
 tests/test_api_sale_order.py | 28 ++++++++++++++
 4 files changed, 94 insertions(+), 25 deletions(-)

diff --git a/routes.py b/routes.py
index e41bd8f..7e04783 100644
--- a/routes.py
+++ b/routes.py
@@ -10,30 +10,6 @@ import json
 sale_order_application = user_application('sale_order')
 
 
-@app.route(
-    '/<database_name>/sale_order/order', methods=['POST'])
-@allow_null_origin
-@with_pool
-@with_transaction()
-@sale_order_application
-def post_order(request, pool):
-    Order = pool.get('sale.order')
-    with Transaction().set_context(
-            {'company': 1, 'locations': [3]}):
-        if request.method == 'POST':
-            data = json.loads(
-                request.get_data().decode()
-            )
-            order, = Order.create([dict(data)])
-
-            response_data = {
-                    'id': order.id,
-                    'status': 'success',
-                    'message': 'Order created successfully',
-            }
-            return json.dumps(response_data), 201
-
-
 @app.route(
     '/<database_name>/sale_order/order/<order>', methods=['GET'])
 @allow_null_origin
@@ -59,6 +35,56 @@ def get_order(request, pool, order: int):
             return orders
 
 
+@app.route(
+    '/<database_name>/sale_order/order', methods=['POST'])
+@allow_null_origin
+@with_pool
+@with_transaction()
+@sale_order_application
+def post_order(request, pool):
+    Order = pool.get('sale.order')
+    with Transaction().set_context(
+            {'company': 1, 'locations': [3]}):
+        if request.method == 'POST':
+            data = json.loads(
+                request.get_data().decode()
+            )
+            order, = Order.create([dict(data)])
+
+            response_data = {
+                    'id': order.id,
+                    'status': 'success',
+                    'message': 'Order created successfully',
+            }
+            return json.dumps(response_data), 201
+
+
+@app.route(
+    '/<database_name>/sale_order/<order>/order_line', methods=['POST'])
+@allow_null_origin
+@with_pool
+@with_transaction()
+@sale_order_application
+def order_line(request, pool, order: int):
+    OrderLine = pool.get('order.line')
+    with Transaction().set_context(
+            {'company': 1,
+             'locations': [3]}):
+        if request.method == 'POST':
+            data = json.loads(
+                request.get_data().decode()
+            )
+
+            order_lines = OrderLine.create([dict(data)])
+
+            response_data = {
+                    'order_lines': [line.id for line in order_lines],
+                    'status': 'success',
+                    'message': 'Order lines created successfully',
+            }
+            return json.dumps(response_data), 201
+
+
 @app.route(
     '/<database_name>/sale_order/confirm_order/<order>', methods=['POST'])
 @allow_null_origin
diff --git a/setup.py b/setup.py
index 05e62c8..bedb2ca 100755
--- a/setup.py
+++ b/setup.py
@@ -107,7 +107,7 @@ setup(name=name,
         ],
     license='GPL-3',
     python_requires='>=3.8',
-    install_requires=requires,
+    # install_requires=requires,
     extras_require={
         'test': tests_require,
         },
diff --git a/tests/SaleOrderApiTest.py b/tests/SaleOrderApiTest.py
index d17d8e8..fcdb2f2 100644
--- a/tests/SaleOrderApiTest.py
+++ b/tests/SaleOrderApiTest.py
@@ -27,10 +27,25 @@ post_sale_order = requests.post(
             })
 )
 
+order = json.loads(json.loads(post_sale_order.text)[0]).get("id")
+
 get_sale_order = requests.get(
     base_url + '/order/1',
     headers={
         'Authorization': f'bearer {key}',
     })
 
+post_line_order = requests.post(
+        base_url.replace(
+            'sale_don_confiao', 'sale_order') + f'/{order}/order_line',
+        headers={
+            'Authorization': f'bearer {key}',
+            }, data=json.dumps({
+                "order": order,
+                "product": "1",
+                "unit": "1",
+                "quantity": "5",
+                "unitprice": "10"
+            }))
+
 pudb.set_trace()
diff --git a/tests/test_api_sale_order.py b/tests/test_api_sale_order.py
index f439e4e..041cc5a 100644
--- a/tests/test_api_sale_order.py
+++ b/tests/test_api_sale_order.py
@@ -138,3 +138,31 @@ class SaleOrderApiRouteTestCase(RouteTestCase):
 
         self.assertEqual(response.status_code, HTTPStatus.OK)
         self.assertEqual(response_data['state'], 'confirmed')
+
+    def test_post_line_order(self):
+        client = self.client()
+
+        response = client.post(
+            f'/{self.db_name}/sale_order/order',
+            headers={
+                'Authorization': f'bearer {self.key}',
+            }, data=json.dumps({
+                "party": self.party.id,
+                "pickup_location": 'on_site'})
+        )
+
+        order = json.loads(json.loads(response.text)[0]).get("id")
+
+        response = client.post(
+            f'/{self.db_name}/sale_order/{order}/order_line',
+            headers={
+                'Authorization': f'bearer {self.key}',
+            }, data=json.dumps({
+                "order": order,
+                "product": self.product.id,
+                "unit": self.unit,
+                "quantity": "5",
+                "unitprice": "10"
+            }))
+
+        self.assertEqual(response.status_code, HTTPStatus.OK)