diff options
| author | IT Fixcomart <it@fixcomart.co.id> | 2022-11-03 15:34:12 +0700 |
|---|---|---|
| committer | IT Fixcomart <it@fixcomart.co.id> | 2022-11-03 15:34:12 +0700 |
| commit | 4aa474f3ced6681a1dfd5ec48806eb690e31c3d8 (patch) | |
| tree | d1dfdaea2768c47e3a53b4fed59223082cbe9481 /indoteknik_api/controllers/api_v1 | |
| parent | 76ccac9630b60ca3774eb83fb13f1a89ee3cabf1 (diff) | |
Rest API Promotion
Diffstat (limited to 'indoteknik_api/controllers/api_v1')
| -rw-r--r-- | indoteknik_api/controllers/api_v1/__init__.py | 1 | ||||
| -rw-r--r-- | indoteknik_api/controllers/api_v1/category.py | 10 | ||||
| -rw-r--r-- | indoteknik_api/controllers/api_v1/manufacture.py | 10 | ||||
| -rw-r--r-- | indoteknik_api/controllers/api_v1/product.py | 16 | ||||
| -rw-r--r-- | indoteknik_api/controllers/api_v1/promotion.py | 31 |
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 |
