diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-01-21 08:21:31 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-01-21 08:21:31 +0700 |
| commit | 33a366ae44bc045439087170ed69b86033cda2d8 (patch) | |
| tree | ec2414c7bcbdb0548efc251a0fc792d4f93d66ab /indoteknik_api | |
| parent | ac80b37ffeaefc9efeec732c167ba272bc1a984b (diff) | |
api sale order and user
Diffstat (limited to 'indoteknik_api')
| -rw-r--r-- | indoteknik_api/controllers/api_v1/sale_order.py | 58 | ||||
| -rw-r--r-- | indoteknik_api/controllers/controller.py | 8 | ||||
| -rw-r--r-- | indoteknik_api/models/__init__.py | 1 | ||||
| -rw-r--r-- | indoteknik_api/models/res_users.py | 19 | ||||
| -rw-r--r-- | indoteknik_api/models/sale_order.py | 14 |
5 files changed, 79 insertions, 21 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index a8c5bacc..dce72a76 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -6,6 +6,36 @@ import json class SaleOrder(controller.Controller): prefix = '/api/v1/' + @http.route(prefix + 'sale_order', auth='public', method=['GET', 'OPTIONS']) + def get_sale_order(self, **kw): + if not self.authenticate(): + return self.response(code=401, description='Unauthorized') + + params = self.get_request_params(kw, { + 'name': [], + 'partner_id': ['required', 'number'], + 'limit': ['default:0', 'number'], + 'offset': ['default:0', 'number'], + }) + limit = params['value']['limit'] + offset = params['value']['offset'] + + if not params['valid']: + return self.response(code=400, description=params) + + parent_partner_id = request.env['res.partner'].search([('id', '=', params['value']['partner_id'])], limit=1).parent_id.id + partner_childs = request.env['res.partner'].search([('parent_id', '=', int(parent_partner_id))]) + partner_child_ids = [v['id'] for v in partner_childs] + [params['value']['partner_id']] + + domain = [('partner_id', 'in', partner_child_ids)] + sale_orders = request.env['sale.order'].search(domain, offset=offset, limit=limit) + data = { + 'sale_order_total': request.env['sale.order'].search_count(domain), + 'sale_orders': [request.env['sale.order'].api_v1_single_response(x) for x in sale_orders] + } + + return self.response(data) + @http.route(prefix + 'sale_order/checkout', auth='public', method=['POST', 'OPTIONS'], csrf=False) def create_sale_order(self, **kw): if not self.authenticate(): @@ -13,10 +43,19 @@ class SaleOrder(controller.Controller): product_pricelist_default_discount_id = request.env['ir.config_parameter'].get_param('product.pricelist.default_discount_id') product_pricelist_default_discount_id = int(product_pricelist_default_discount_id) + + params = self.get_request_params(kw, { + 'partner_id': ['required', 'number'], + 'partner_shipping_id': ['required', 'number'], + 'partner_invoice_id': ['required', 'number'], + 'order_line': ['required', 'default:[]'], + 'po_number': [], + 'po_file': [], + }) - partner_id = kw.get('partner_id') - partner_shipping_id = kw.get('partner_shipping_id') - partner_invoice_id = kw.get('partner_invoice_id') + if not params['valid']: + return self.response(code=400, description=params) + parameters = { 'warehouse_id': 8, 'carrier_id': 1, @@ -28,15 +67,16 @@ class SaleOrder(controller.Controller): 'currency_id': 12, 'state': 'draft', 'picking_policy': 'direct', - 'partner_id': partner_id, - 'partner_shipping_id': partner_shipping_id, - 'real_shipping_id': partner_shipping_id, - 'partner_invoice_id': partner_invoice_id + 'partner_id': params['value']['partner_id'], + 'partner_shipping_id': params['value']['partner_shipping_id'], + 'real_shipping_id': params['value']['partner_shipping_id'], + 'partner_invoice_id': params['value']['partner_invoice_id'], + 'partner_purchase_order_name': params['value']['po_number'], + 'partner_purchase_order_file': params['value']['po_file'] } sale_order = request.env['sale.order'].create([[parameters]]) - order_line = kw.get('order_line', "[]") - order_line = json.loads(order_line) + order_line = json.loads(params['value']['order_line']) parameters = [] for line in order_line: price = request.env['product.pricelist'].compute_price(product_pricelist_default_discount_id, line['product_id']) diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index a08d9fa4..18f54d71 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -68,19 +68,19 @@ class Controller(http.Controller): elif rule == 'number' and value and not value.isdigit(): result['reason'].append(key + ' must be ' + rule) + result['query'][key] = value if not value and default: value = default if is_number and value.isdigit(): value = int(value) - if not value: + if not value and not default: value = None result['value'][alias] = value - result['query'][key] = value if len(result['reason']) > 0: result['valid'] = False - if not result['valid']: - del result['value'] + # if not result['valid']: + # del result['value'] return result def time_to_str(self, object, format): diff --git a/indoteknik_api/models/__init__.py b/indoteknik_api/models/__init__.py index 4447c215..12a1f7fd 100644 --- a/indoteknik_api/models/__init__.py +++ b/indoteknik_api/models/__init__.py @@ -3,5 +3,6 @@ from . import product_pricelist from . import product_product from . import product_template from . import res_users +from . import sale_order from . import x_manufactures from . import website_content diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py index 152e3017..99a3838d 100644 --- a/indoteknik_api/models/res_users.py +++ b/indoteknik_api/models/res_users.py @@ -12,24 +12,27 @@ class ResUsers(models.Model): 'email': res_user.login, 'phone': res_user.phone or '', 'mobile': res_user.mobile or '', - 'external': res_user.share + 'external': res_user.share, + 'company': res_user.company_type == 'company' } + if res_user.parent_id: + data.update({ 'company': res_user.parent_id.company_type == 'company' }) return data def api_address_response(self, user): data = { 'id': user.id, - 'type': user.type, - 'name': user.name, - 'mobile': user.mobile, - 'email': user.email, - 'street': user.street, - 'street2': user.street2, + 'type': user.type or '', + 'name': user.name or '', + 'mobile': user.mobile or '', + 'email': user.email or '', + 'street': user.street or '', + 'street2': user.street2 or '', 'city': None, 'district': None, 'sub_district': None, - 'zip': user.zip + 'zip': user.zip or '' } if user.kota_id: diff --git a/indoteknik_api/models/sale_order.py b/indoteknik_api/models/sale_order.py new file mode 100644 index 00000000..3359ee6a --- /dev/null +++ b/indoteknik_api/models/sale_order.py @@ -0,0 +1,14 @@ +from odoo import models + + +class SaleOrder(models.Model): + _inherit = 'sale.order' + + def api_v1_single_response(self, sale_order): + data = { + 'id': sale_order.id, + 'name': sale_order.name, + 'sales': sale_order.user_id.name, + 'amount_total': sale_order.amount_total + } + return data |
