diff options
| author | IT Fixcomart <it@fixcomart.co.id> | 2022-10-07 09:28:10 +0700 |
|---|---|---|
| committer | IT Fixcomart <it@fixcomart.co.id> | 2022-10-07 09:28:10 +0700 |
| commit | ed2ae23c3bff0c97f8b159ad1dad0a2c93cc2ef3 (patch) | |
| tree | c1eb12550a6c3bd6754f120ec40a19f884dae590 | |
| parent | eec9d6f5c8e8a22dcca2b09a7e86c95d9813647c (diff) | |
Add try-except in flash_sale api
| -rw-r--r-- | indoteknik_api/controllers/product_controller.py | 63 |
1 files changed, 35 insertions, 28 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): |
