from odoo import models import math class ProductProduct(models.Model): _inherit = 'product.product' def 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) product_template = product_product.product_tmpl_id data = { 'id': product_product.id, 'parent': { 'id': product_template.id, 'name': product_template.name, 'image': self.env['ir.attachment'].api_image('product.template', 'image_256', product_template.id), }, 'code': product_product.default_code or '', 'name': product_product.display_name, 'price': self.env['product.pricelist'].compute_price(product_pricelist_default_discount_id, product_product.id), 'stock': product_product.qty_stock_vendor, 'weight': product_product.weight, 'attributes': [x.name for x in product_product.product_template_attribute_value_ids], 'manufacture' : self.api_manufacture(product_product) } 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) product_template = product_product.product_tmpl_id data = { 'id': product_product.id, 'parent': { 'id': product_template.id, 'name': product_template.name, 'image': self.env['ir.attachment'].api_image('product.template', 'image_256', product_template.id), }, 'code': product_product.default_code or '', '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() }, 'stock': product_product.qty_stock_vendor, 'weight': product_product.weight, 'attributes': [x.name for x in product_product.product_template_attribute_value_ids], 'manufacture' : self.api_manufacture(product_product) } return data def api_manufacture(self, product_template): if product_template.x_manufacture: manufacture = product_template.x_manufacture return { 'id': manufacture.id, 'name': manufacture.x_name, 'image_promotion_1': self.env['ir.attachment'].api_image('x_manufactures', 'image_promotion_1', manufacture.id), 'image_promotion_2': self.env['ir.attachment'].api_image('x_manufactures', 'image_promotion_2', manufacture.id), } return {} def _get_website_price_include_tax(self): default_pricelist_id = int(1) query = [ ('pricelist_id.id', '=', default_pricelist_id), ('product_id.id', '=', self.id) ] pl_item1 = self.env['product.pricelist.item'].search(query, limit=1) retValue = pl_item1.fixed_price retValue = math.floor(retValue) return retValue def _get_website_price_exclude_tax(self): default_divide_tax = float(1.11) price_incl = self._get_website_price_include_tax() res = price_incl / default_divide_tax return math.floor(res) def _get_website_disc(self, partner_id): default_discount_id = int(4) # compile partner partner = self.env['res.partner'].search([('id', '=', partner_id)], limit=1) if partner: if not partner.parent_id: # it means this is a parent default_discount_id = partner.custom_pricelist_id else: # it means this is NOT parent default_discount_id = partner.parent_id.custom_pricelist_id query = [ ('pricelist_id.id', '=', default_discount_id), ('product_id.id', '=', self.id) ] pl_item2 = self.env['product.pricelist.item'].search(query, limit=1) retValue = pl_item2.price_discount return retValue def _get_website_price_after_disc_and_tax(self): default_divide_tax = float(1.11) price_after_disc = self._get_website_price_after_disc() res = price_after_disc / default_divide_tax res = math.floor(res) return res def _get_website_price_after_disc(self): discount = self._get_website_disc(0) price_incl = self._get_website_price_include_tax() res = 0 if discount > 0: res = price_incl - (price_incl * discount / 100) else: res = price_incl return math.floor(res) def _get_website_tax(self): default_percent_tax = float(11) price_after_disc = self._get_website_price_after_disc_and_tax() res = price_after_disc * default_percent_tax / 100 return math.floor(res)