summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2024-07-02 10:06:29 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2024-07-02 10:06:29 +0700
commita10024fec206f68791c87a5a4e56e4c6bce28f5c (patch)
tree627d0ca2443eecbcb44b1b4eeda98f94c9ea3496 /indoteknik_api/controllers
parent51c19eca13239fe20ae592f8e9ee0d23f8904c5f (diff)
parentf9c5b3dffcd71bfa9dea74c946d7b4277db66bd6 (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.py36
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py13
-rw-r--r--indoteknik_api/controllers/controller.py11
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):