diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2024-07-02 10:06:29 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2024-07-02 10:06:29 +0700 |
| commit | a10024fec206f68791c87a5a4e56e4c6bce28f5c (patch) | |
| tree | 627d0ca2443eecbcb44b1b4eeda98f94c9ea3496 /indoteknik_api/controllers | |
| parent | 51c19eca13239fe20ae592f8e9ee0d23f8904c5f (diff) | |
| parent | f9c5b3dffcd71bfa9dea74c946d7b4277db66bd6 (diff) | |
Merge branch 'production' into feature/add_voucher_pastihemat_productsolr
Diffstat (limited to 'indoteknik_api/controllers')
| -rw-r--r-- | indoteknik_api/controllers/api_v1/partner.py | 36 | ||||
| -rw-r--r-- | indoteknik_api/controllers/api_v1/sale_order.py | 13 | ||||
| -rw-r--r-- | indoteknik_api/controllers/controller.py | 11 |
3 files changed, 52 insertions, 8 deletions
diff --git a/indoteknik_api/controllers/api_v1/partner.py b/indoteknik_api/controllers/api_v1/partner.py index e61c98c1..a6e14a19 100644 --- a/indoteknik_api/controllers/api_v1/partner.py +++ b/indoteknik_api/controllers/api_v1/partner.py @@ -7,6 +7,42 @@ class Partner(controller.Controller): _name = 'res.partner' prefix = '/api/v1/' + def get_partner_child_ids(self, partner_id): + partner = request.env[self._name].search([('id', '=', partner_id)], limit=1) + if not partner.parent_id: + partner_child_ids = [x['id'] for x in partner.child_ids] + [partner.id] + if partner.parent_id: + partner_child_ids = [x['id'] for x in partner.parent_id.child_ids] + return partner_child_ids + + @http.route(prefix + 'partner/<id>/list/site', auth='public', methods=['GET', 'OPTIONS']) + @controller.Controller.must_authorized() + def get_list_partner_by_id(self, **kw): + params = self.get_request_params(kw, { + 'id': ['required', 'number'] + }) + + if not params['valid']: + return self.response(code=400, description=params) + + partner_id = params['value']['id'] + + partner_child_ids = self.get_partner_child_ids(partner_id) + + partners = request.env['res.partner'].search([('id', 'in', partner_child_ids)]) + + site_names = set() + for partner in partners: + if partner.site_id: + site_names.add(partner.site_id.name) + + data = { + 'sites': list(site_names) + } + + return self.response(data) + + @http.route(prefix + 'partner/<id>/address', auth='public', methods=['GET', 'OPTIONS']) @controller.Controller.must_authorized() def get_partner_address_by_id(self, **kw): diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index 1e5e8a66..ea2d381c 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -52,6 +52,7 @@ class SaleOrder(controller.Controller): params = self.get_request_params(kw, { 'partner_id': ['number'], 'name': [], + 'site': [], 'limit': ['default:0', 'number'], 'offset': ['default:0', 'number'], 'context': [] @@ -80,11 +81,11 @@ class SaleOrder(controller.Controller): ('partner_purchase_order_name', 'ilike', '%' + name + '%') ] - # if params['value']['site']: - # site = params['value']['site'].replace(' ', '%') - # domain += [ - # ('partner_id.site_id.name', 'ilike', '%' + site + '%') - # ] + if params['value']['site']: + site = params['value']['site'].replace(' ', '%') + domain += [ + ('partner_id.site_id.name', 'ilike', '%' + site + '%') + ] sale_orders = request.env['sale.order'].search( domain, offset=offset, limit=limit) @@ -330,6 +331,7 @@ class SaleOrder(controller.Controller): 'delivery_amount': ['number', 'default:0'], 'carrier_id': [], 'delivery_service_type': [], + 'flash_sale': ['boolean'], 'voucher': [], 'source': [], 'estimated_arrival_days': ['number', 'default:0'] @@ -363,6 +365,7 @@ class SaleOrder(controller.Controller): 'shipping_paid_by': 'customer', 'carrier_id': params['value']['carrier_id'], 'delivery_service_type': params['value']['delivery_service_type'], + 'flash_sale': params['value']['flash_sale'], 'customer_type': 'nonpkp', 'npwp': '0', 'user_id': 1180 # User ID: Ima Nurhikmah diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 017e5c12..a34a2688 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -80,9 +80,10 @@ class Controller(http.Controller): 'value': {}, 'query': {} } - + for key, rules in queries.items(): is_number = 'number' in rules + is_boolean = 'boolean' in rules is_exclude_if_null = 'exclude_if_null' in rules alias = next((r.replace('alias:', '') for r in rules if r.startswith('alias:')), key) default = next((r.replace('default:', '') for r in rules if r.startswith('default:')), None) @@ -92,8 +93,10 @@ class Controller(http.Controller): value = '' if 'required' in rules and not value: result['reason'].append(f"{key} is required") - if 'number' in rules and value and not value.isdigit(): + if is_number and value and not value.isdigit(): result['reason'].append(f"{key} must be a number") + if is_boolean and value and value.lower() not in ['true', 'false', '1', '0']: + result['reason'].append(f"{key} must be a boolean") result['query'][key] = value @@ -101,6 +104,8 @@ class Controller(http.Controller): value = default if is_number and value.isdigit(): value = int(value) + if is_boolean: + value = value.lower() in ['true', '1'] if not value and is_exclude_if_null: continue @@ -108,7 +113,7 @@ class Controller(http.Controller): result['value'][alias] = value result['valid'] = not result['reason'] - + return result def time_to_str(self, object, format): |
