diff --git a/__init__.py b/__init__.py index 1ad9771..7420ab6 100644 --- a/__init__.py +++ b/__init__.py @@ -1,7 +1,8 @@ from trytond.pool import Pool -from . import sale_order, user +from . import sale_order, user, routes -__all__ = ['register'] +__all__ = [ + 'register', 'routes'] def register(): diff --git a/routes.py b/routes.py index 3878296..e452462 100644 --- a/routes.py +++ b/routes.py @@ -1,4 +1,5 @@ from trytond.wsgi import app +from trytond.transaction import Transaction from trytond.protocols.wrappers import ( with_pool, with_transaction, @@ -6,20 +7,21 @@ from trytond.protocols.wrappers import ( allow_null_origin) import json -sale_order = user_application('sale_order') +sale_order_application = user_application('sale_order') -@app.route('//sale_order/order', methods=['POST']) +@app.route( + '//sale_order/order', methods=['POST']) @allow_null_origin @with_pool @with_transaction() -@sale_order +@sale_order_application def order(request, pool): - raise Exception(request) Order = pool.get('sale.order') - if request.method == 'POST': - data = json.loads( - request.get_data().decode() - ) - - Order.create([dict(data)]) + with Transaction().set_context( + {'company': 1, 'locations': [3]}): + if request.method == 'POST': + data = json.loads( + request.get_data().decode() + ) + Order.create([dict(data)]) diff --git a/sale_order.py b/sale_order.py index fe23fc4..77d05b2 100644 --- a/sale_order.py +++ b/sale_order.py @@ -33,12 +33,15 @@ class SaleOrder (Workflow, ModelView, ModelSQL): party = fields.Many2One( 'party.party', "Party", required=True, states=_states) order_address = fields.Many2One( - 'party.address', 'Address', required=True, states=_states) + 'party.address', 'Address', states=_states) pickup_location = fields.Selection([ ("on_site", "On Site"), ("at_home", "At Home")], 'Pickup Location', states=_states) order_mobile = fields.Char('Mobile', states=_states) - date = fields.Date("Date", required=True, states=_states) + date = fields.Date("Date", required=True, states={ + 'readonly': Eval('state').in_(['confirmed', 'done']), + 'required': Eval('pickup_location') == 'at_home' + }) lines = fields.One2Many( 'order.line', 'order', 'Lines', states=_states) total_order = fields.Function( diff --git a/tests/SaleOrderApiTest.py b/tests/SaleOrderApiTest.py new file mode 100644 index 0000000..81e5535 --- /dev/null +++ b/tests/SaleOrderApiTest.py @@ -0,0 +1,23 @@ +import pudb +import requests +import json + +url = 'http://localhost:18030' +key = 'f46f14d77db646b0ac0802e7bdab9cbb' + ( + '1d53ad96387242e1918c45854dce5238707fed31daa64cab88569d119512153') + ( + '64db6ced393b44f198ab9a3967b6f4ddf') +db = 'tryton' +application_name = 'sale_order' +base_url = '{}/{}/{}'.format(url, db, application_name) + +post_sale_order = requests.post( + base_url + '/order', + headers={ + 'Authorization': f'bearer {key}', + }, data=json.dumps({ + "party": 2573, + "pickup_location": 'on_site' + }) +) + +pudb.set_trace() diff --git a/tests/test_api_sale_order.py b/tests/test_api_sale_order.py index 35b8fd7..e944603 100644 --- a/tests/test_api_sale_order.py +++ b/tests/test_api_sale_order.py @@ -13,6 +13,7 @@ class SaleOrderApiRouteTestCase(RouteTestCase): """Sale Order API Routes""" module = 'sale_order' + key = uuid.uuid4().hex @classmethod @@ -28,6 +29,13 @@ class SaleOrderApiRouteTestCase(RouteTestCase): ProductTemplate = pool.get('product.template') 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() + self.productTemplate, = ProductTemplate.create([{ 'name': 'Product', 'default_uom': Uom.search([('name', '=', 'Unit')])[0].id, @@ -48,6 +56,7 @@ class SaleOrderApiRouteTestCase(RouteTestCase): 'Authorization': f'bearer {self.key}', }, data=json.dumps({ "party": self.party.id, + "pickup_location": 'on_site' })) self.assertEqual(response.status_code, HTTPStatus.OK)