From cd1450e11b1fb0ce48c74423e52fa2fefa5f11da Mon Sep 17 00:00:00 2001 From: Rodia Date: Sun, 29 Dec 2024 19:29:01 -0500 Subject: [PATCH] Feat: GET sales --- modules/sale_don_confiao/routes.py | 29 ++++++-- .../tests/test_api_donconfiao.py | 70 ++++++++++++++++--- modules/sale_don_confiao/tryton.cfg | 1 + 3 files changed, 87 insertions(+), 13 deletions(-) diff --git a/modules/sale_don_confiao/routes.py b/modules/sale_don_confiao/routes.py index b588655..ec2689f 100644 --- a/modules/sale_don_confiao/routes.py +++ b/modules/sale_don_confiao/routes.py @@ -1,3 +1,4 @@ +from trytond.transaction import Transaction from trytond.wsgi import app from trytond.protocols.wrappers import ( with_pool, @@ -11,9 +12,7 @@ don_confiao_application = user_application( @app.route('//sale_don_confiao/parties', methods=[ - 'GET']) -@app.route('//sale_don_confiao/parties', methods=[ - 'POST']) + 'GET', 'POST']) @allow_null_origin @with_pool @with_transaction() @@ -42,10 +41,32 @@ def parties(request, pool): @with_pool @with_transaction() @don_confiao_application -def get_products(request, pool): +def products(request, pool): Product = pool.get('product.product') products = Product.search_read( [], order=[('id', 'ASC')], fields_names=['id', 'name']) return products + + +@app.route('//sale_don_confiao/sales', methods=['GET']) +@allow_null_origin +@with_pool +@with_transaction() +@don_confiao_application +def sales(request, pool): + data = json.loads( + request.get_data().decode() + ) + with Transaction().set_context( + {'company': data['company']}): + Sale = pool.get('sale.sale') + sales = Sale.search_read([ + # ('company', '=', data['company']), + # ('state', '=', 'draft') + ], order=[ + ('id', 'ASC') + ], fields_names=['id', 'party.name']) + + return sales diff --git a/modules/sale_don_confiao/tests/test_api_donconfiao.py b/modules/sale_don_confiao/tests/test_api_donconfiao.py index 693167d..340c24f 100644 --- a/modules/sale_don_confiao/tests/test_api_donconfiao.py +++ b/modules/sale_don_confiao/tests/test_api_donconfiao.py @@ -5,6 +5,7 @@ import uuid import json from trytond.tests.test_tryton import DB_NAME from trytond.transaction import Transaction +from decimal import Decimal class DonConfiaoApiRouteTestCase( @@ -19,11 +20,8 @@ class DonConfiaoApiRouteTestCase( def setUpDatabase(cls): pool = Pool() Application = pool.get('res.user.application') - Company = pool.get('company.company') Party = pool.get('party.party') - # Product = pool.get('product.product') - Application( key=cls.key, user=1, @@ -34,12 +32,6 @@ class DonConfiaoApiRouteTestCase( customer.name = 'Dunkan' customer.save() - company = Company( - party=1, - currency=1 - ) - company.save() - def test_get_parties(self): client = self.client() response = client.get( @@ -111,3 +103,63 @@ class DonConfiaoApiRouteTestCase( response.get_data().decode()) self.assertEqual(response.status_code, HTTPStatus.OK) self.assertEqual(len(products), 1) + + def test_get_sales(self): + pool = Pool(DB_NAME) + transaction = Transaction().start(DB_NAME, user=0, _lock_tables=[ + 'product_product']) + with transaction: + Company = pool.get( + 'company.company') + Currency = pool.get('currency.currency') + Sale = pool.get('sale.sale') + currency, = Currency.create([{ + 'name': 'COP', + 'code': 'COP' + }]) + company, = Company.create([{ + 'party': 1, + 'currency': currency.id + }]) + + ProductTemplate = pool.get('product.template') + Product = pool.get('product.product') + Uom = pool.get('product.uom') + template, = ProductTemplate.create([ + {'name': 'Product', + 'salable': True, + 'default_uom': Uom.search([('name', '=', 'Unit')])[0].id, + 'sale_uom': Uom.search([('name', '=', 'Unit')])[0].id + } + ]) + + product, = Product.create([ + {'template': template.id}]) + + sale, = Sale.create([{ + 'party': 1, + 'company': 1, + 'currency': 1, + 'lines': [['create', [{ + 'type': 'line', + 'product': product.id, + 'quantity': 1, + 'unit_price': Decimal(10), + 'unit': Uom.search([('name', '=', 'Unit')])[0].id + }]]], + 'state': 'draft' + }]) + + self.assertIsInstance(sale, Sale) + self.assertEqual(sale.state, 'draft') + + client = self.client() + response = client.get( + f'/{self.db_name}/sale_don_confiao/sales', + headers={ + 'Authorization': f'bearer {self.key}', + }, data=json.dumps({ + 'company': company.id + })) + + self.assertEqual(response.status_code, HTTPStatus.OK) diff --git a/modules/sale_don_confiao/tryton.cfg b/modules/sale_don_confiao/tryton.cfg index 945cdf4..6e98f9b 100644 --- a/modules/sale_don_confiao/tryton.cfg +++ b/modules/sale_don_confiao/tryton.cfg @@ -4,4 +4,5 @@ depends: ir party product + sale xml: