1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
import base64
from .. import api_controller
from odoo import http
from odoo.http import request
class ProductApi(api_controller.ApiController):
@http.route('/api/product/search', auth='public', methods=['GET'])
def search_product(self, **kw):
self.authenticate(kw)
query = kw.get('query')
if not query:
return self.response(code=400, description='Field query is required')
query = '%' + query.replace(' ', '%') + '%'
domain = [
('sale_ok', '=', True),
'|',
('default_code', 'ilike', query),
('name', 'ilike', query)
]
manufactures = kw.get('manufactures')
if manufactures:
manufactures = [int(x) for x in manufactures.split(',')]
domain.append(('x_manufacture', 'in', manufactures))
categories = kw.get('categories')
if categories:
categories = [int(x) for x in categories.split(',')]
domain.append(('public_categ_ids', 'child_of', categories))
product_variants = request.env['product.product'].search(domain)
product_variant_ids = [v['id'] for v in product_variants]
base_url = request.env['ir.config_parameter'].sudo().get_param('web.base.url')
domain = [
('product_variant_ids', 'in', product_variant_ids)
]
product_templates = self.search_with_api_params('product.template', kw, domain)
data = {
'total_records': len(request.env['product.template'].search(domain)),
'products': []
}
for product_template in product_templates:
stock = 0
for product_variant in product_template.product_variant_ids:
stock += product_variant.qty_stock_vendor
discount_price = 0
price = product_template.web_price
if price > 0:
if product_template.taxes_id:
if not product_template.taxes_id.price_include:
price += (price * product_template.taxes_id.amount / 100)
else:
price += (price * 11 / 100)
promotion = {}
manufacture = {}
if product_template.x_manufacture:
manufacture.update({
'id': product_template.x_manufacture.id,
'name': product_template.x_manufacture.x_name,
})
domain = [
('rule_products_domain', 'ilike', product_template.x_manufacture.x_name),
('active', '=', True)
]
coupon_program = request.env['coupon.program'].search(domain, limit=1)
if coupon_program:
discount_price = price - (price * coupon_program.discount_percentage / 100)
icon_1 = (base_url + 'api/image/coupon.program/x_studio_field_Ifopn/' + str(coupon_program.id)) if coupon_program.x_studio_field_Ifopn else ''
icon_2 = (base_url + 'api/image/coupon.program/x_studio_field_2Ul77/' + str(coupon_program.id)) if coupon_program.x_studio_field_2Ul77 else ''
promotion.update({
'name': coupon_program.name,
'discount_percentage': coupon_program.discount_percentage,
'icon_1': icon_1,
'icon_2': icon_2
})
data['products'].append({
'id': product_template.id,
'image': base_url + 'api/image/product.template/image_128/' + str(product_template.id) if product_template.image_128 else '',
'name': product_template.name,
'price': price,
'discount_price': discount_price,
'total_variant': len(product_template.product_variant_ids),
'stock': stock,
'manufacture': manufacture,
'promotion': promotion,
})
return self.response(data)
|