From b78ec4549bb75ee18467c6d7d1f7374b3aab7e67 Mon Sep 17 00:00:00 2001
From: Rodia <alejandro.ayala@onecluster.org>
Date: Tue, 11 Feb 2025 20:34:32 -0500
Subject: [PATCH] Feat: Add enpoints SaleOrder

---
 routes.py                    | 31 +++++++++++++++++++++--
 tests/SaleOrderApiTest.py    | 13 +++++++++-
 tests/test_api_sale_order.py | 49 +++++++++++++++++++++++++++++++++---
 3 files changed, 87 insertions(+), 6 deletions(-)

diff --git a/routes.py b/routes.py
index e452462..0e63c2f 100644
--- a/routes.py
+++ b/routes.py
@@ -16,7 +16,7 @@ sale_order_application = user_application('sale_order')
 @with_pool
 @with_transaction()
 @sale_order_application
-def order(request, pool):
+def post_order(request, pool):
     Order = pool.get('sale.order')
     with Transaction().set_context(
             {'company': 1, 'locations': [3]}):
@@ -24,4 +24,31 @@ def order(request, pool):
             data = json.loads(
                 request.get_data().decode()
             )
-            Order.create([dict(data)])
+            order, = Order.create([dict(data)])
+
+            return order.id
+
+
+@app.route(
+    '/<database_name>/sale_order/order/<order>', methods=['GET'])
+@allow_null_origin
+@with_pool
+@with_transaction()
+@sale_order_application
+def get_order(request, pool, order: int):
+    Order = pool.get('sale.order')
+    with Transaction().set_context({
+            'company': 1,
+            'locations': [3]}):
+        if request.method == 'GET':
+            orders = Order.search_read([
+                ('id', '=', order)
+            ], order=[
+                ('id', 'ASC')
+            ], fields_names=[
+                'id',
+                'party',
+                'lines'
+            ])
+
+            return orders
diff --git a/tests/SaleOrderApiTest.py b/tests/SaleOrderApiTest.py
index 81e5535..497d4a5 100644
--- a/tests/SaleOrderApiTest.py
+++ b/tests/SaleOrderApiTest.py
@@ -16,8 +16,19 @@ post_sale_order = requests.post(
                 'Authorization': f'bearer {key}',
             }, data=json.dumps({
                 "party": 2573,
-                "pickup_location": 'on_site'
+                "pickup_location": 'on_site',
+                "lines": [[
+                    "create", [{
+                        "quantity": "5",
+                        "unitprice": "10"
+                    }]]]
             })
 )
 
+get_sale_order = requests.get(
+    base_url + '/order/1',
+    headers={
+        'Authorization': f'bearer {key}',
+    })
+
 pudb.set_trace()
diff --git a/tests/test_api_sale_order.py b/tests/test_api_sale_order.py
index e944603..fdbcfc4 100644
--- a/tests/test_api_sale_order.py
+++ b/tests/test_api_sale_order.py
@@ -30,15 +30,18 @@ class SaleOrderApiRouteTestCase(RouteTestCase):
             Product = pool.get('product.product')
             Uom = pool.get('product.uom')
             Application = pool.get('res.user.application')
+
             Application(
                 key=self.key,
                 user=1,
                 application='sale_order',
-                state='validated').save()
+                state='validated'
+            ).save()
 
+            self.unit = Uom.search([('name', '=', 'Unit')])[0].id
             self.productTemplate, =  ProductTemplate.create([{
                 'name': 'Product',
-                'default_uom': Uom.search([('name', '=', 'Unit')])[0].id,
+                'default_uom': self.unit,
             }])
             self.product, = Product.create([
                 {'template': self.productTemplate.id}
@@ -56,7 +59,47 @@ class SaleOrderApiRouteTestCase(RouteTestCase):
                 'Authorization': f'bearer {self.key}',
             }, data=json.dumps({
                 "party": self.party.id,
-                "pickup_location": 'on_site'
+                "pickup_location": 'on_site',
+                "lines": [[
+                    "create", [{
+                        "product": self.product.id,
+                        "unit": self.unit,
+                        "quantity": "5",
+                        "unitprice": "10"
+                    }]
+                ]]
             }))
 
         self.assertEqual(response.status_code, HTTPStatus.OK)
+
+    def test_get_sale_orders(self):
+        client = self.client()
+
+        order = 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',
+                "lines": [[
+                    "create", [{
+                        "product": self.product.id,
+                        "unit": self.unit,
+                        "quantity": "5",
+                        "unitprice": "10"
+                    }]
+                ]]
+            }))
+
+        response = client.get(
+            f'/{self.db_name}/sale_order/order/{order.text}',
+            headers={
+                'Authorization': f'bearer {self.key}',
+            })
+
+        orders = json.loads(
+            response.get_data().decode())
+
+        self.assertEqual(response.status_code, HTTPStatus.OK)
+        self.assertEqual(len(orders), 1)