summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-10-07 10:39:46 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-10-07 10:39:46 +0700
commit421d1b210b3c19028ba45331b0c476ceafb72523 (patch)
tree922a567a2f5ec88ba4a7fe3d6d4c07bddb688203
parentd6501fd1c30eab8686e87595327ee2887e587a49 (diff)
parented2ae23c3bff0c97f8b159ad1dad0a2c93cc2ef3 (diff)
Merge commit 'ed2ae23c3bff0c97f8b159ad1dad0a2c93cc2ef3'
-rw-r--r--indoteknik_api/controllers/product_controller.py63
-rw-r--r--indoteknik_api/models/product_pricelist.py25
2 files changed, 48 insertions, 40 deletions
diff --git a/indoteknik_api/controllers/product_controller.py b/indoteknik_api/controllers/product_controller.py
index 0f29971c..a57cf0a5 100644
--- a/indoteknik_api/controllers/product_controller.py
+++ b/indoteknik_api/controllers/product_controller.py
@@ -1,8 +1,11 @@
from datetime import datetime
+import logging
from . import controller
from odoo import http
from odoo.http import request
+_logger = logging.getLogger(__name__)
+
class ProductController(controller.Controller):
prefix_url = '/api/product'
@@ -78,34 +81,38 @@ class ProductController(controller.Controller):
@http.route(prefix_url + '/flash_sale', auth='public', methods=['GET'])
def get_flash_sale_product(self, **kw):
- self.authenticate(kw)
- base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url')
- product_pricelist_default = request.env['ir.config_parameter'].sudo().get_param('product.pricelist.default')
- active_flash_sale = request.env['product.pricelist'].get_active_flash_sale()
- data = {}
- if active_flash_sale:
- flash_sale = {
- 'banner': base_url + 'api/image/product.pricelist/banner/' + str(active_flash_sale.id) if active_flash_sale.banner else '',
- 'duration': round((active_flash_sale.end_date - datetime.now()).total_seconds()),
- 'products': []
- }
- product_pricelist_item = request.env['product.pricelist.item'].search([('pricelist_id', '=', active_flash_sale.id)])
- product_variant_ids = [x.product_id.id for x in product_pricelist_item]
- product_templates = self.search_with_api_params('product.template', kw, [('product_variant_ids', 'in', product_variant_ids)])
- for product in product_templates:
- flash_sale['products'].append({
- 'id': product.id,
- 'name': product.name,
- 'image': base_url + 'api/image/product.template/image_128/' + str(product.id) if product.image_128 else '',
- 'lowest_price': request.env['product.pricelist'].get_lowest_product_variant_price(product.id, int(product_pricelist_default)),
- 'stock': self.get_stock_by_product(product),
- 'total_variant': len(product.product_variant_ids),
- 'manufacture': self.get_manufacture_by_product(product),
- 'promotion': self.get_promotion_by_product(product),
- })
- data.update({'flash_sale': flash_sale})
- else:
- return self.response(code=404, description='Data not found')
+ try:
+ self.authenticate(kw)
+ base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url')
+ product_pricelist_default = request.env['ir.config_parameter'].sudo().get_param('product.pricelist.default')
+ active_flash_sale = request.env['product.pricelist'].get_active_flash_sale()
+ data = {}
+ if active_flash_sale:
+ flash_sale = {
+ 'banner': base_url + 'api/image/product.pricelist/banner/' + str(active_flash_sale.id) if active_flash_sale.banner else '',
+ 'duration': round((active_flash_sale.end_date - datetime.now()).total_seconds()),
+ 'products': []
+ }
+ product_pricelist_item = request.env['product.pricelist.item'].search([('pricelist_id', '=', active_flash_sale.id)])
+ product_variant_ids = [x.product_id.id for x in product_pricelist_item]
+ product_templates = self.search_with_api_params('product.template', kw, [('product_variant_ids', 'in', product_variant_ids)])
+ for product in product_templates:
+ flash_sale['products'].append({
+ 'id': product.id,
+ 'name': product.name,
+ 'image': base_url + 'api/image/product.template/image_128/' + str(product.id) if product.image_128 else '',
+ 'lowest_price': request.env['product.pricelist'].get_lowest_product_variant_price(product.id, int(product_pricelist_default)),
+ 'stock': self.get_stock_by_product(product),
+ 'total_variant': len(product.product_variant_ids),
+ 'manufacture': self.get_manufacture_by_product(product),
+ 'promotion': self.get_promotion_by_product(product),
+ })
+ data.update({'flash_sale': flash_sale})
+ else:
+ return self.response(code=404, description='Data not found')
+ except Exception as e:
+ _logger.info(self.prefix_url + '/flash_sale: ' + str(e))
+ return self.response(code=500, description='Internal server error')
return self.response(data)
def get_stock_by_product(self, product_template: object):
diff --git a/indoteknik_api/models/product_pricelist.py b/indoteknik_api/models/product_pricelist.py
index 3a807f3a..f40efd5d 100644
--- a/indoteknik_api/models/product_pricelist.py
+++ b/indoteknik_api/models/product_pricelist.py
@@ -35,20 +35,21 @@ class ProductPricelist(models.Model):
is_compute_formula = False
else:
is_compute_formula = False
-
- product = self.env['product.product'].browse(product_id)
- if product:
- for tax in product.taxes_id:
- if not tax.price_include:
- price *= (100 + tax.amount) / 100
-
+
price_discount = price
- for discount in discounts:
- price_discount *= (100 - discount) / 100
-
discount_percentage = 0
- if len(discounts) > 0:
- discount_percentage = (price - price_discount) / price * 100
+ if price > 0:
+ product = self.env['product.product'].browse(product_id)
+ if product:
+ for tax in product.taxes_id:
+ if not tax.price_include:
+ price *= (100 + tax.amount) / 100
+
+ for discount in discounts:
+ price_discount *= (100 - discount) / 100
+
+ if len(discounts) > 0:
+ discount_percentage = (price - price_discount) / price * 100
return {
'price': price,