summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2022-11-03 15:34:12 +0700
committerIT Fixcomart <it@fixcomart.co.id>2022-11-03 15:34:12 +0700
commit4aa474f3ced6681a1dfd5ec48806eb690e31c3d8 (patch)
treed1dfdaea2768c47e3a53b4fed59223082cbe9481 /indoteknik_api/controllers
parent76ccac9630b60ca3774eb83fb13f1a89ee3cabf1 (diff)
Rest API Promotion
Diffstat (limited to 'indoteknik_api/controllers')
-rw-r--r--indoteknik_api/controllers/api_v1/__init__.py1
-rw-r--r--indoteknik_api/controllers/api_v1/category.py10
-rw-r--r--indoteknik_api/controllers/api_v1/manufacture.py10
-rw-r--r--indoteknik_api/controllers/api_v1/product.py16
-rw-r--r--indoteknik_api/controllers/api_v1/promotion.py31
5 files changed, 63 insertions, 5 deletions
diff --git a/indoteknik_api/controllers/api_v1/__init__.py b/indoteknik_api/controllers/api_v1/__init__.py
index c8280c9a..c43a8bd0 100644
--- a/indoteknik_api/controllers/api_v1/__init__.py
+++ b/indoteknik_api/controllers/api_v1/__init__.py
@@ -4,4 +4,5 @@ from . import category
from . import flash_sale
from . import manufacture
from . import product
+from . import promotion
from . import sale_order \ No newline at end of file
diff --git a/indoteknik_api/controllers/api_v1/category.py b/indoteknik_api/controllers/api_v1/category.py
index 792b59b2..88296d58 100644
--- a/indoteknik_api/controllers/api_v1/category.py
+++ b/indoteknik_api/controllers/api_v1/category.py
@@ -1,6 +1,7 @@
from .. import controller
from odoo import http
from odoo.http import request
+import ast
class Category(controller.Controller):
@@ -27,8 +28,15 @@ class Category(controller.Controller):
return self.response(code=400, description='manufacture_id is required')
product_variants = request.env['product.product'].search([('x_manufacture', '=', int(manufacture_id))])
category_ids = [x.id for variant in product_variants for x in variant.public_categ_ids]
+ elif page == 'promotion':
+ promotion_id = kw.get('promotion_id')
+ if not promotion_id:
+ return self.response(code=400, description='promotion_id is required')
+ coupon_program = request.env['coupon.program'].search([('id', '=', promotion_id)])
+ product_variants = request.env['product.product'].search(ast.literal_eval(coupon_program.rule_products_domain))
+ category_ids = [x.id for variant in product_variants for x in variant.public_categ_ids]
else:
- return self.response(code=400, description='page possible value is flash-sale, manufacture')
+ return self.response(code=400, description='page possible value is flash-sale, ready-stock, manufacture, promotion')
categories = request.env['product.public.category'].search([('id', 'in', category_ids)])
data = []
diff --git a/indoteknik_api/controllers/api_v1/manufacture.py b/indoteknik_api/controllers/api_v1/manufacture.py
index 135a6e5d..3cb7b70c 100644
--- a/indoteknik_api/controllers/api_v1/manufacture.py
+++ b/indoteknik_api/controllers/api_v1/manufacture.py
@@ -1,6 +1,7 @@
from .. import controller
from odoo import http
from odoo.http import request
+import ast
class Manufacture(controller.Controller):
@@ -27,8 +28,15 @@ class Manufacture(controller.Controller):
return self.response(code=400, description='category_id is required')
product_variants = request.env['product.product'].search([('public_categ_ids', '=', int(category_id))])
manufacture_ids = [x.x_manufacture.id for x in product_variants]
+ elif page == 'promotion':
+ promotion_id = kw.get('promotion_id')
+ if not promotion_id:
+ return self.response(code=400, description='promotion_id is required')
+ coupon_program = request.env['coupon.program'].search([('id', '=', promotion_id)])
+ product_variants = request.env['product.product'].search(ast.literal_eval(coupon_program.rule_products_domain))
+ manufacture_ids = [x.x_manufacture.id for x in product_variants]
else:
- return self.response(code=400, description='page possible value is flash-sale, category')
+ return self.response(code=400, description='page possible value is flash-sale, ready-stock, category, promotion')
manufactures = request.env['x_manufactures'].search([('id', 'in', manufacture_ids)])
data = []
diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py
index 904670e7..aa22a876 100644
--- a/indoteknik_api/controllers/api_v1/product.py
+++ b/indoteknik_api/controllers/api_v1/product.py
@@ -1,6 +1,7 @@
from .. import controller
from odoo import http
from odoo.http import request
+import ast
class Product(controller.Controller):
@@ -14,17 +15,18 @@ class Product(controller.Controller):
name = kw.get('name')
manufactures = kw.get('manufactures')
categories = kw.get('categories')
+ promotions = kw.get('promotions')
ready_stock = kw.get('ready_stock')
solr_flag = kw.get('solr_flag')
- require_betweens = ['name', 'manufactures', 'categories', 'ready_stock', 'solr_flag']
+ require_betweens = ['name', 'manufactures', 'categories', 'ready_stock', 'solr_flag', 'promotions']
is_fulfill = False
for required in require_betweens:
if kw.get(required):
is_fulfill = True
if not is_fulfill:
- return self.response(code=400, description='name or manufactures or categories or ready_stock or solr_flag is required')
+ return self.response(code=400, description='name or manufactures or categories or ready_stock or solr_flag or promotions is required')
query = [('sale_ok', '=', True)]
@@ -47,7 +49,15 @@ class Product(controller.Controller):
if solr_flag:
query.append(('solr_flag', '=', int(solr_flag)))
-
+
+ if promotions:
+ coupon_programs = request.env['coupon.program'].search([('id', 'in', promotions.split(','))])
+ promotion_query = [x for coupon_program in coupon_programs for x in ast.literal_eval(coupon_program.rule_products_domain)]
+ if len(promotion_query) > 1:
+ or_in_promotion_query = ["|" for x in range(len(promotion_query) - 1)]
+ promotion_query = or_in_promotion_query + promotion_query
+ query += promotion_query
+
is_with_detail = True if kw.get('with_detail') == '1' else False
price_from = kw.get('price_from')
diff --git a/indoteknik_api/controllers/api_v1/promotion.py b/indoteknik_api/controllers/api_v1/promotion.py
new file mode 100644
index 00000000..8e66e543
--- /dev/null
+++ b/indoteknik_api/controllers/api_v1/promotion.py
@@ -0,0 +1,31 @@
+from .. import controller
+from odoo import http
+from odoo.http import request
+import ast
+
+
+class Promotion(controller.Controller):
+ prefix = '/api/v1/'
+
+ @http.route(prefix + 'promotion/<id>', auth='public', methods=['GET'])
+ def get_product_by_id(self, **kw):
+ if not self.authenticate():
+ return self.response(code=401, description='Unauthorized')
+
+ base_url = request.env['ir.config_parameter'].get_param('web.base.url')
+ id = kw.get('id')
+ if not id:
+ return self.response(code=400, description='id is required')
+
+ data = {}
+ id = int(id)
+ coupon_program = request.env['coupon.program'].search([('id', '=', id)])
+ if coupon_program:
+ data = {
+ 'banner': base_url + 'api/image/coupon.program/x_studio_banner_promo/' + str(coupon_program.id) if coupon_program.x_studio_banner_promo else '',
+ 'image': base_url + 'api/image/coupon.program/x_studio_image_promo/' + str(coupon_program.id) if coupon_program.x_studio_image_promo else '',
+ 'name': coupon_program.name,
+ }
+
+ return self.response(data)
+ \ No newline at end of file