from openerp import api, fields, models class ProductTemplate(models.Model): _inherit = 'product.template' @api.model def get_products(self): domain = [('sale_ok', '=', True), ('active', '=', True)] products = [] # map products for product in self.env['product.template'].search(domain): variants = [] # map variants for variant in product.product_variant_ids: if not variant.active: continue # prices = [] attributes = [] # for price in variant.product_tmpl_id.pricelist_item_ids.filtered(lambda x: x.product_id.id == variant.id): # prices.append({ # 'id': price.id, # 'price': price.price_surcharge # }) # map product attribute for attribute_value in variant.attribute_value_ids: attributes.append({ 'id': attribute_value.id, 'price': attribute_value.name, 'display_name': attribute_value.display_name }) variants.append({ 'id': variant.id, 'display_name': variant.display_name, 'ean13': variant.ean13, 'image_medium': variant.image_medium, 'list_price': variant.list_price, 'minimum_price': variant.minimum_price, 'maximum_price': variant.maximum_price, 'name': variant.name, 'qty_available': variant.qty_available, 'attributes': attributes }) products.append({ 'id': product.id, 'display_name': product.display_name, 'ean13': product.ean13, 'image_medium': product.image_medium, 'list_price': product.list_price, 'name': product.name, 'qty_available': product.qty_available, 'category': { 'id': product.categ_id.id, 'display_name': product.categ_id.display_name, 'name': product.categ_id.name, 'account_journal': { 'id': product.categ_id.property_stock_journal.id, 'code': product.categ_id.property_stock_journal.code, 'company': { 'id': product.categ_id.property_stock_journal.company_id.id, 'name': product.categ_id.property_stock_journal.company_id.name, 'currency': { 'id': product.categ_id.property_stock_journal.company_id.currency_id.id, 'name': product.categ_id.property_stock_journal.company_id.currency_id.name } }, 'currency': { 'id': product.categ_id.property_stock_journal.currency.id, 'name': product.categ_id.property_stock_journal.currency.name }, 'display_name': product.categ_id.property_stock_journal.display_name, 'name': product.categ_id.property_stock_journal.name, } }, 'uom': { 'id': product.uom_id.id, 'name': product.uom_id.name }, 'uos': { 'id': product.uos_id.id, 'name': product.uos_id.name }, 'variant_count': product.product_variant_count, 'variants': variants }) return products