diff options
| author | Rafi Zadanly <zadanlyr@gmail.com> | 2023-04-18 15:45:05 +0700 |
|---|---|---|
| committer | Rafi Zadanly <zadanlyr@gmail.com> | 2023-04-18 15:45:05 +0700 |
| commit | 60d754cb1b2044adafddd4893212028a3264f620 (patch) | |
| tree | 4b034580ffe571245c3b7b51810a50952b70d53d | |
| parent | 456d4b07e52c3664fd2c22e2b7748cbb2912539d (diff) | |
price tier on user session, variant and product
| -rw-r--r-- | indoteknik_api/controllers/api_v1/sale_order.py | 9 | ||||
| -rw-r--r-- | indoteknik_api/controllers/api_v2/product.py | 6 | ||||
| -rw-r--r-- | indoteknik_api/controllers/api_v2/product_variant.py | 4 | ||||
| -rw-r--r-- | indoteknik_api/models/product_product.py | 34 | ||||
| -rw-r--r-- | indoteknik_api/models/product_template.py | 4 | ||||
| -rw-r--r-- | indoteknik_api/models/res_users.py | 17 |
6 files changed, 59 insertions, 15 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py index e237ebaa..44986166 100644 --- a/indoteknik_api/controllers/api_v1/sale_order.py +++ b/indoteknik_api/controllers/api_v1/sale_order.py @@ -213,10 +213,11 @@ class SaleOrder(controller.Controller): @http.route(PREFIX_PARTNER + 'sale_order/checkout', auth='public', method=['POST', 'OPTIONS'], csrf=False) @controller.Controller.must_authorized(private=True, private_key='partner_id') def create_partner_sale_order(self, **kw): - product_pricelist_default_discount_id = int(request.env['ir.config_parameter'].get_param('product.pricelist.default_discount_id')) - product_pricelist_tier1 = int(request.env['ir.config_parameter'].get_param('product.pricelist.tier1')) - product_pricelist_tier2 = int(request.env['ir.config_parameter'].get_param('product.pricelist.tier2')) - product_pricelist_tier3 = int(request.env['ir.config_parameter'].get_param('product.pricelist.tier3')) + config = request.env['ir.config_parameter'] + product_pricelist_default_discount_id = int(config.get_param('product.pricelist.default_discount_id')) + product_pricelist_tier1 = int(config.get_param('product.pricelist.tier1')) + product_pricelist_tier2 = int(config.get_param('product.pricelist.tier2')) + product_pricelist_tier3 = int(config.get_param('product.pricelist.tier3')) params = self.get_request_params(kw, { 'partner_id': ['number'], diff --git a/indoteknik_api/controllers/api_v2/product.py b/indoteknik_api/controllers/api_v2/product.py index 772906f6..d9b43bda 100644 --- a/indoteknik_api/controllers/api_v2/product.py +++ b/indoteknik_api/controllers/api_v2/product.py @@ -5,17 +5,19 @@ from odoo.http import request class V2Product(controller.Controller): prefix = '/api/v2/' - @http.route(prefix + 'product/<id>', auth='public', methods=['GET']) + @http.route(prefix + 'product/<id>', auth='public', methods=['GET', 'OPTIONS']) @controller.Controller.must_authorized() def v2_get_product_by_id(self, **kw): id = kw.get('id') if not id: return self.response(code=400, description='id is required') + + pricelist = self.user_pricelist() data = [] id = [int(x) for x in id.split(',')] product_templates = request.env['product.template'].search([('id', 'in', id)]) if product_templates: - data = [request.env['product.template'].v2_api_single_response(x, with_detail='DEFAULT') for x in product_templates] + data = [request.env['product.template'].v2_api_single_response(x, pricelist=pricelist, with_detail='DEFAULT') for x in product_templates] return self.response(data)
\ No newline at end of file diff --git a/indoteknik_api/controllers/api_v2/product_variant.py b/indoteknik_api/controllers/api_v2/product_variant.py index b74e4936..8a5bbeb1 100644 --- a/indoteknik_api/controllers/api_v2/product_variant.py +++ b/indoteknik_api/controllers/api_v2/product_variant.py @@ -12,11 +12,13 @@ class V2ProductVariant(controller.Controller): if not id: return self.response(code=400, description='id is required') + pricelist = self.user_pricelist() + data = [] id = [int(x) for x in id.split(',')] product_products = request.env['product.product'].search([('id', 'in', id)]) if product_products: - data = [request.env['product.product'].v2_api_single_response(x) for x in product_products] + data = [request.env['product.product'].v2_api_single_response(x, pricelist=pricelist) for x in product_products] return self.response(data) diff --git a/indoteknik_api/models/product_product.py b/indoteknik_api/models/product_product.py index 9c59040f..a648ad51 100644 --- a/indoteknik_api/models/product_product.py +++ b/indoteknik_api/models/product_product.py @@ -1,4 +1,5 @@ from odoo import models +from odoo.http import request import math @@ -26,9 +27,32 @@ class ProductProduct(models.Model): } return data - def v2_api_single_response(self, product_product): - product_pricelist_default_discount_id = self.env['ir.config_parameter'].get_param('product.pricelist.default_discount_id') - product_pricelist_default_discount_id = int(product_pricelist_default_discount_id) + def v2_api_single_response(self, product_product, pricelist=False): + config = self.env['ir.config_parameter'] + product_pricelist_tier1 = int(config.get_param('product.pricelist.tier1')) + product_pricelist_tier2 = int(config.get_param('product.pricelist.tier2')) + product_pricelist_tier3 = int(config.get_param('product.pricelist.tier3')) + + discount_percentage = product_product._get_website_disc(0) + price_discount = product_product._get_website_price_after_disc_and_tax() + + price_tier = False + pricelists = { + 'tier1': product_product._get_pricelist_tier1, + 'tier2': product_product._get_pricelist_tier2, + 'tier3': product_product._get_pricelist_tier3, + } + if pricelist.id == product_pricelist_tier1: price_tier = 'tier1' + if pricelist.id == product_pricelist_tier2: price_tier = 'tier2' + if pricelist.id == product_pricelist_tier3: price_tier = 'tier3' + + if price_tier: + price = pricelists[price_tier]() + discount_key = 'discount_%s' % price_tier + price_key = 'price_%s' % price_tier + if price[discount_key] > 0: discount_percentage = price[discount_key] + if price[price_key] > 0: price_discount = price[price_key] + product_template = product_product.product_tmpl_id data = { 'id': product_product.id, @@ -41,8 +65,8 @@ class ProductProduct(models.Model): 'name': product_product.display_name, 'price': { 'price': product_product._get_website_price_exclude_tax(), - 'discount_percentage': product_product._get_website_disc(0), - 'price_discount': product_product._get_website_price_after_disc_and_tax() + 'discount_percentage': discount_percentage, + 'price_discount': price_discount }, 'stock': product_product.qty_stock_vendor, 'weight': product_product.weight, diff --git a/indoteknik_api/models/product_template.py b/indoteknik_api/models/product_template.py index 4d16727f..b9df0f5f 100644 --- a/indoteknik_api/models/product_template.py +++ b/indoteknik_api/models/product_template.py @@ -51,7 +51,7 @@ class ProductTemplate(models.Model): data.update(data_with_detail) return data - def v2_api_single_response(self, product_template, with_detail=''): + def v2_api_single_response(self, product_template, pricelist=False, with_detail=''): product_pricelist_default_discount_id = self.env['ir.config_parameter'].get_param('product.pricelist.default_discount_id') product_pricelist_default_discount_id = int(product_pricelist_default_discount_id) data = { @@ -71,7 +71,7 @@ class ProductTemplate(models.Model): data_with_detail = { 'image': self.env['ir.attachment'].api_image('product.template', 'image_512', product_template.id), 'display_name': product_template.display_name, - 'variants': [self.env['product.product'].v2_api_single_response(variant) for variant in product_template.product_variant_ids], + 'variants': [self.env['product.product'].v2_api_single_response(variant, pricelist=pricelist) for variant in product_template.product_variant_ids], 'description': product_template.website_description or '', } data.update(data_with_detail) diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py index 5032f3af..b0807e9f 100644 --- a/indoteknik_api/models/res_users.py +++ b/indoteknik_api/models/res_users.py @@ -5,6 +5,12 @@ class ResUsers(models.Model): _inherit = 'res.users' def api_single_response(self, res_user, with_detail=''): + config = self.env['ir.config_parameter'] + product_pricelist_tier1 = int(config.get_param('product.pricelist.tier1')) + product_pricelist_tier2 = int(config.get_param('product.pricelist.tier2')) + product_pricelist_tier3 = int(config.get_param('product.pricelist.tier3')) + + user_pricelist = res_user.property_product_pricelist data = { 'id': res_user.id, 'parent_id': res_user.parent_id.id or False, @@ -14,8 +20,17 @@ class ResUsers(models.Model): 'phone': res_user.phone or '', 'mobile': res_user.mobile or '', 'external': res_user.share, - 'company': res_user.company_type == 'company' + 'company': res_user.company_type == 'company', + 'pricelist': False } + + if user_pricelist.id == product_pricelist_tier1: + data['pricelist'] = 'tier1' + if user_pricelist.id == product_pricelist_tier2: + data['pricelist'] = 'tier2' + if user_pricelist.id == product_pricelist_tier3: + data['pricelist'] = 'tier3' + if res_user.parent_id: data.update({ 'company': res_user.parent_id.company_type == 'company' }) |
