summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafi Zadanly <zadanlyr@gmail.com>2023-06-23 14:19:38 +0700
committerRafi Zadanly <zadanlyr@gmail.com>2023-06-23 14:19:38 +0700
commit3ed54712ca9856f3be937f8325db030d0796532e (patch)
treea0e96a3a10f59bde060113b941b681addca43f73
parent23014336a1fe1fe5ef54fad30cf6c3d9cc59b2d8 (diff)
Refactor pricelist on product price
-rw-r--r--indoteknik_api/controllers/api_v1/cart.py7
-rw-r--r--indoteknik_api/controllers/api_v1/product_variant.py3
-rw-r--r--indoteknik_api/controllers/api_v1/promotion.py4
-rw-r--r--indoteknik_api/controllers/api_v2/product.py4
-rw-r--r--indoteknik_api/controllers/api_v2/product_variant.py4
-rw-r--r--indoteknik_api/controllers/controller.py1
-rw-r--r--indoteknik_api/models/product_product.py8
-rw-r--r--indoteknik_api/models/product_template.py6
-rw-r--r--indoteknik_custom/models/promotion_program_line.py12
-rw-r--r--indoteknik_custom/models/website_user_cart.py14
10 files changed, 36 insertions, 27 deletions
diff --git a/indoteknik_api/controllers/api_v1/cart.py b/indoteknik_api/controllers/api_v1/cart.py
index 93d7b2f1..035a40b7 100644
--- a/indoteknik_api/controllers/api_v1/cart.py
+++ b/indoteknik_api/controllers/api_v1/cart.py
@@ -10,14 +10,15 @@ class Cart(controller.Controller):
@http.route(PREFIX_USER + 'cart', auth='public', methods=['GET', 'OPTIONS'])
@controller.Controller.must_authorized()
def get_cart_by_user_id(self, user_id, **kw):
+ user_cart = request.env['website.user.cart']
user_id = int(user_id)
limit = int(kw.get('limit', 0))
offset = int(kw.get('offset', 0))
query = [('user_id', '=', user_id)]
- carts = request.env['website.user.cart'].search(query, limit=limit, offset=offset, order='create_date desc')
+ carts = user_cart.search(query, limit=limit, offset=offset, order='create_date desc')
data = {
- 'product_total': request.env['website.user.cart'].search_count(query),
- 'products': [cart.get_product() for cart in carts]
+ 'product_total': user_cart.search_count(query),
+ 'products': carts.get_products()
}
return self.response(data)
diff --git a/indoteknik_api/controllers/api_v1/product_variant.py b/indoteknik_api/controllers/api_v1/product_variant.py
index 06ce5d3c..8de4669e 100644
--- a/indoteknik_api/controllers/api_v1/product_variant.py
+++ b/indoteknik_api/controllers/api_v1/product_variant.py
@@ -26,10 +26,9 @@ class ProductVariant(controller.Controller):
def get_product_variant_promotions(self, product_id):
product_id = int(product_id)
user_data = self.verify_user_token()
- pricelist = self.user_pricelist()
program_line = request.env['promotion.program.line']
program_lines = program_line.get_active_promotions(product_id)
- program_lines = program_lines.res_format(user=user_data, pricelist=pricelist)
+ program_lines = program_lines.res_format(user=user_data)
return self.response(program_lines)
diff --git a/indoteknik_api/controllers/api_v1/promotion.py b/indoteknik_api/controllers/api_v1/promotion.py
index a3dbf0ba..68a23ef2 100644
--- a/indoteknik_api/controllers/api_v1/promotion.py
+++ b/indoteknik_api/controllers/api_v1/promotion.py
@@ -62,10 +62,10 @@ class Promotion(controller.Controller):
('promotion_type', '=', 'special_price'),
('program_id', '=', int(id))
])
- pricelist = self.user_pricelist()
+
data = []
for line in program_lines:
- product = request.env['product.product'].v2_api_single_response(line.product_id, pricelist=pricelist)
+ product = request.env['product.product'].v2_api_single_response(line.product_id)
product_template = line.product_id.product_tmpl_id
product.update({
diff --git a/indoteknik_api/controllers/api_v2/product.py b/indoteknik_api/controllers/api_v2/product.py
index d9b43bda..19a97dec 100644
--- a/indoteknik_api/controllers/api_v2/product.py
+++ b/indoteknik_api/controllers/api_v2/product.py
@@ -12,12 +12,10 @@ class V2Product(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_templates = request.env['product.template'].search([('id', 'in', id)])
if product_templates:
- data = [request.env['product.template'].v2_api_single_response(x, pricelist=pricelist, with_detail='DEFAULT') for x in product_templates]
+ data = [request.env['product.template'].v2_api_single_response(x, 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 8a5bbeb1..b74e4936 100644
--- a/indoteknik_api/controllers/api_v2/product_variant.py
+++ b/indoteknik_api/controllers/api_v2/product_variant.py
@@ -12,13 +12,11 @@ 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, pricelist=pricelist) for x in product_products]
+ data = [request.env['product.product'].v2_api_single_response(x) for x in product_products]
return self.response(data)
diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py
index 90bc50ed..a9ad2724 100644
--- a/indoteknik_api/controllers/controller.py
+++ b/indoteknik_api/controllers/controller.py
@@ -21,6 +21,7 @@ class Controller(http.Controller):
def inner_wrapper(*args, **kwargs):
self = args[0]
auth = self.authenticate()
+ request.env.user_pricelist = self.user_pricelist()
if not auth:
return self.unauthorized_response()
if private:
diff --git a/indoteknik_api/models/product_product.py b/indoteknik_api/models/product_product.py
index 9e218565..1740f992 100644
--- a/indoteknik_api/models/product_product.py
+++ b/indoteknik_api/models/product_product.py
@@ -27,7 +27,7 @@ class ProductProduct(models.Model):
}
return data
- def v2_api_single_response(self, product_product, pricelist=False):
+ def v2_api_single_response(self, product_product):
product_template = product_product.product_tmpl_id
data = {
'id': product_product.id,
@@ -38,7 +38,7 @@ class ProductProduct(models.Model):
},
'code': product_product.default_code or '',
'name': product_product.display_name,
- 'price': product_product.calculate_website_price(pricelist),
+ 'price': product_product.calculate_website_price(),
'stock': product_product.qty_stock_vendor,
'weight': product_product.weight,
'attributes': [x.name for x in product_product.product_template_attribute_value_ids],
@@ -46,7 +46,9 @@ class ProductProduct(models.Model):
}
return data
- def calculate_website_price(self, pricelist):
+ def calculate_website_price(self):
+ pricelist = self.env.user_pricelist
+
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'))
diff --git a/indoteknik_api/models/product_template.py b/indoteknik_api/models/product_template.py
index 1a345967..68ab79c2 100644
--- a/indoteknik_api/models/product_template.py
+++ b/indoteknik_api/models/product_template.py
@@ -51,9 +51,7 @@ class ProductTemplate(models.Model):
data.update(data_with_detail)
return data
- 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)
+ def v2_api_single_response(self, product_template, with_detail=''):
data = {
'id': product_template.id,
'image': self.env['ir.attachment'].api_image('product.template', 'image_128', product_template.id),
@@ -67,7 +65,7 @@ class ProductTemplate(models.Model):
}
if with_detail != '':
- variants = [self.env['product.product'].v2_api_single_response(variant, pricelist=pricelist) for variant in product_template.product_variant_ids]
+ variants = [self.env['product.product'].v2_api_single_response(variant) for variant in product_template.product_variant_ids]
lowest_price = variants[0]['price']
for variant in variants:
if variant["price"]["price_discount"] < lowest_price["price_discount"]:
diff --git a/indoteknik_custom/models/promotion_program_line.py b/indoteknik_custom/models/promotion_program_line.py
index c888f01a..55331aea 100644
--- a/indoteknik_custom/models/promotion_program_line.py
+++ b/indoteknik_custom/models/promotion_program_line.py
@@ -126,9 +126,9 @@ class PromotionProgramLine(models.Model):
'label': dict(self._fields['promotion_type'].selection).get(self.promotion_type)
}
- def format(self, user = None, pricelist = False):
+ def format(self, user = None):
ir_attachment = self.env['ir.attachment']
- product_price = self.product_id.calculate_website_price(pricelist=pricelist)
+ product_price = self.product_id.calculate_website_price()
return {
'id': self.id,
'name': self.name,
@@ -142,7 +142,11 @@ class PromotionProgramLine(models.Model):
'price': self.calculate_price(price=product_price)
}
- def res_format(self, user, pricelist):
- data = [x.format(user, pricelist=pricelist) for x in self]
+ def res_format(self, user):
+ data = [x.format(user) for x in self]
+ return data
+
+ def res_format_cart(self, user):
+ data = self.format(user)
return data
diff --git a/indoteknik_custom/models/website_user_cart.py b/indoteknik_custom/models/website_user_cart.py
index dcd9fa5a..388151ab 100644
--- a/indoteknik_custom/models/website_user_cart.py
+++ b/indoteknik_custom/models/website_user_cart.py
@@ -12,12 +12,22 @@ class WebsiteUserCart(models.Model):
is_selected = fields.Boolean(string='Selected?', digits='Is selected to process checkout')
def get_product(self):
+ user_data = {
+ 'partner_id': self.user_id.partner_id.id,
+ 'user_id': self.user_id.id
+ }
product_product = self.env['product.product']
product = product_product.v2_api_single_response(self.product_id)
product['quantity'] = self.qty
product['subtotal'] = self.qty * product['price']['price_discount']
product['selected'] = self.is_selected
+ product['program'] = None
+ if self.program_line_id:
+ product['program'] = self.program_line_id.res_format_cart(user_data)
return product
+
+ def get_products(self):
+ return [x.get_product() for x in self]
def get_product_by_user(self, user_id, selected = False):
user_id = int(user_id)
@@ -25,7 +35,5 @@ class WebsiteUserCart(models.Model):
if selected:
parameters.append(('is_selected', '=', True))
carts = self.search(parameters)
- products = []
- for cart in carts:
- products.append(cart.get_product())
+ products = carts.get_products()
return products \ No newline at end of file