from odoo import models class ProductTemplate(models.Model): _inherit = 'product.template' def api_single_response(self, product_template, 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) voucher = self.get_voucher_pastihemat(product_template.x_manufacture.id) newVoucherPastiHemat = {"min_purchase": voucher.min_purchase_amount or 0, "discount_type": voucher.discount_type or '', "discount_amount": voucher.discount_amount or 0, "max_discount": voucher.max_discount_amount or 0,} data = { 'id': product_template.id, 'image': self.env['ir.attachment'].api_image('product.template', 'image_128', product_template.id), 'code': product_template.default_code or '', 'name': product_template.name, 'lowest_price': self.env['product.pricelist'].get_lowest_product_variant_price(product_template, product_pricelist_default_discount_id), 'variant_total': len(product_template.product_variant_ids), 'stock_total': product_template.qty_stock_vendor, 'weight': product_template.weight, 'manufacture': self.api_manufacture(product_template), 'categories': self.api_categories(product_template), "newVoucherPastiHemat": newVoucherPastiHemat } if with_detail != '': data_with_detail = { 'image': self.env['ir.attachment'].api_image('product.template', 'image_512', product_template.id), 'display_name': product_template.display_name, 'variants': [self.env['product.product'].api_single_response(variant) for variant in product_template.product_variant_ids], 'description': product_template.website_description or '', } data.update(data_with_detail) if with_detail == 'SOLR': is_image_found = self.env['ir.attachment'].is_found('product.template', 'image_128', product_template.id) rate = 0 if data['lowest_price']['price'] > 0: rate += 1 if product_template.have_promotion_program: rate += 1 if is_image_found: rate += 1 if product_template.website_description: rate += 1 if product_template.qty_stock_vendor > 0: rate += 1 data_with_detail = { 'solr_flag': product_template.solr_flag, 'product_rating': rate, 'search_rank': product_template.search_rank, 'search_rank_weekly': product_template.search_rank_weekly } data.update(data_with_detail) return data 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), 'code': product_template.default_code or '', 'name': product_template.name, 'sni': product_template.sni, 'tkdn': product_template.tkdn, 'variant_total': len(product_template.product_variant_ids), 'stock_total': product_template.qty_stock_vendor, 'weight': product_template.weight, 'manufacture': self.api_manufacture(product_template), 'categories': self.api_categories(product_template), } if with_detail != '': 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"]: lowest_price = variant['price'] template_pricelist = product_template._get_active_flash_sale() data_with_detail = { 'flash_sale': { 'remaining_time': template_pricelist._remaining_time_in_second() if template_pricelist else 0, 'tag': template_pricelist.flashsale_tag if template_pricelist else None }, 'lowest_price': lowest_price, 'image': self.env['ir.attachment'].api_image('product.template', 'image_512', product_template.id), 'display_name': product_template.display_name, 'variants': variants, 'description': product_template.website_description or '', } data.update(data_with_detail) if with_detail == 'SOLR': is_image_found = self.env['ir.attachment'].is_found('product.template', 'image_128', product_template.id) rate = 0 if data['lowest_price']['price'] > 0: rate += 1 if product_template.have_promotion_program: rate += 1 if is_image_found: rate += 1 if product_template.website_description: rate += 1 if product_template.qty_stock_vendor > 0: rate += 1 data_with_detail = { 'solr_flag': product_template.solr_flag, 'product_rating': rate, 'search_rank': product_template.search_rank, 'search_rank_weekly': product_template.search_rank_weekly } data.update(data_with_detail) 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 api_categories(self, product_template): if product_template.public_categ_ids: categories = [] for category in product_template.public_categ_ids: categories.append({ 'id': category.id, 'name': category.name }) return categories return []