summaryrefslogtreecommitdiff
path: root/indoteknik_api
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2023-07-24 08:38:12 +0000
committerIT Fixcomart <it@fixcomart.co.id>2023-07-24 08:38:12 +0000
commitc344ccd81208b5b466ae047dbb9e084dd5d0f358 (patch)
treec07caf6a1df48719b828fbe270bb62ccc3e0c947 /indoteknik_api
parent989002aca3ed9b1e724e9b98d8ca3513ba598663 (diff)
parent2ad6b4ecf783b5dfe0d4aa11f238cbf6aefd9747 (diff)
Merged in production (pull request #66)
Production
Diffstat (limited to 'indoteknik_api')
-rw-r--r--indoteknik_api/controllers/api_v1/cart.py53
-rw-r--r--indoteknik_api/controllers/api_v1/product.py31
-rw-r--r--indoteknik_api/controllers/api_v1/product_variant.py12
-rw-r--r--indoteknik_api/controllers/api_v1/promotion.py70
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py132
-rw-r--r--indoteknik_api/controllers/api_v1/voucher.py69
-rw-r--r--indoteknik_api/controllers/api_v2/product.py4
-rw-r--r--indoteknik_api/controllers/api_v2/product_variant.py4
-rw-r--r--indoteknik_api/controllers/controller.py1
-rw-r--r--indoteknik_api/models/product_product.py71
-rw-r--r--indoteknik_api/models/product_template.py6
-rw-r--r--indoteknik_api/models/res_users.py1
12 files changed, 307 insertions, 147 deletions
diff --git a/indoteknik_api/controllers/api_v1/cart.py b/indoteknik_api/controllers/api_v1/cart.py
index a8628432..0265ec57 100644
--- a/indoteknik_api/controllers/api_v1/cart.py
+++ b/indoteknik_api/controllers/api_v1/cart.py
@@ -5,55 +5,70 @@ from odoo.http import request
class Cart(controller.Controller):
prefix = '/api/v1/'
+ PREFIX_USER = prefix + 'user/<user_id>/'
- @http.route(prefix + 'cart', auth='public', methods=['GET'])
+ @http.route(PREFIX_USER + 'cart', auth='public', methods=['GET', 'OPTIONS'])
@controller.Controller.must_authorized()
- def get_cart_by_user_id(self, **kw):
- user_id = int(kw.get('user_id', 0))
+ def get_cart_by_user_id(self, user_id, **kw):
+ user_cart = request.env['website.user.cart']
+ user_id = int(user_id)
limit = int(kw.get('limit', 0))
offset = int(kw.get('offset', 0))
query = [('user_id', '=', user_id)]
- carts = request.env['website.user.cart'].search(query, limit=limit, offset=offset, order='create_date desc')
+ carts = user_cart.search(query, limit=limit, offset=offset, order='create_date desc')
data = {
- 'product_total': request.env['website.user.cart'].search_count(query),
- 'products': []
+ 'product_total': user_cart.search_count(query),
+ 'products': carts.get_products()
}
- for cart in carts:
- product = request.env['product.product'].api_single_response(cart.product_id)
- product['template_id'] = cart.product_id.product_tmpl_id.id
- product['quantity'] = cart.qty
- data['products'].append(product)
return self.response(data)
- @http.route(prefix + 'cart/create-or-update', auth='public', methods=['POST'], csrf=False)
+ @http.route(PREFIX_USER + 'cart/count', auth='public', methods=['GET', 'OPTIONS'])
@controller.Controller.must_authorized()
- def create_or_update_cart(self, **kw):
- user_id = int(kw.get('user_id', 0))
+ def get_cart_count_by_user_id(self, user_id, **kw):
+ user_id = int(user_id)
+ query = [('user_id', '=', user_id)]
+ carts = request.env['website.user.cart'].search_count(query)
+ return self.response(carts)
+
+ @http.route(PREFIX_USER + 'cart/create-or-update', auth='public', methods=['POST', 'OPTIONS'], csrf=False)
+ @controller.Controller.must_authorized()
+ def create_or_update_cart(self, user_id, **kw):
+ user_id = int(user_id)
product_id = int(kw.get('product_id', 0))
qty = int(kw.get('qty', 0))
+ is_selected = kw.get('selected', False)
+ program_line_id = kw.get('program_line_id', False)
+ program_line_id = False if program_line_id == 'null' or not program_line_id else int(program_line_id)
+ if is_selected:
+ is_selected = True if is_selected == 'true' else False
if not user_id or not product_id or not qty:
return self.response(code=400, description='user_id, product_id and qty is required')
query = [('user_id', '=', user_id), ('product_id', '=', product_id)]
cart = request.env['website.user.cart'].search(query, limit=1)
result = {}
+ data_to_update = {
+ 'qty': qty,
+ 'is_selected': is_selected,
+ 'program_line_id': program_line_id
+ }
if cart:
- cart.write({'qty': qty})
+ cart.write(data_to_update)
result['id'] = cart.id
else:
create = request.env['website.user.cart'].create({
'user_id': user_id,
'product_id': product_id,
- 'qty': qty
+ **data_to_update
})
result['id'] = create.id
return self.response(result)
- @http.route(prefix + 'cart', auth='public', methods=['DELETE'], csrf=False)
+ @http.route(PREFIX_USER + 'cart', auth='public', methods=['DELETE', 'OPTIONS'], csrf=False)
@controller.Controller.must_authorized()
- def delete_cart_by_user_id(self, **kw):
- user_id = int(kw.get('user_id', 0))
+ def delete_cart_by_user_id(self, user_id, **kw):
+ user_id = int(user_id)
query = [('user_id', '=', user_id)]
product_ids = kw.get('product_ids')
if product_ids:
diff --git a/indoteknik_api/controllers/api_v1/product.py b/indoteknik_api/controllers/api_v1/product.py
index 8803bae3..7ec6459b 100644
--- a/indoteknik_api/controllers/api_v1/product.py
+++ b/indoteknik_api/controllers/api_v1/product.py
@@ -16,31 +16,40 @@ class Product(controller.Controller):
@controller.Controller.must_authorized()
def get_product_template_stock_by_id(self, **kw):
id = int(kw.get('id'))
+ date_7_days_ago = datetime.now() - timedelta(days=7)
product = request.env['product.product'].search([('id', '=', id)], limit=1)
product_sla = request.env['product.sla'].search([('product_variant_id', '=', id)], limit=1)
-
+ stock_vendor = request.env['stock.vendor'].search([
+ ('product_variant_id', '=', id),
+ ('write_date', '>=', date_7_days_ago.strftime("%Y-%m-%d %H:%M:%S"))
+ ], limit=1)
+
qty_available = product.qty_onhand_bandengan
- qty_available -= 10
- if qty_available < 10:
- qty_available = 0
qty = 0
sla_date = '-'
-
+
is_altama_product = product.x_manufacture.id in [10,122,89]
if is_altama_product:
try:
+ # Qty Altama
qty_altama = request.env['product.template'].get_stock_altama(product.default_code)
qty_altama -= int(qty_altama * 0.1)
qty_altama = math.ceil(float(qty_altama))
- qty = qty_altama
- if qty_available > 10:
- qty += qty_available
+ total_adem = qty_altama
+ # Qty Stock Vendor
+ qty_vendor = stock_vendor.quantity
+ qty_vendor -= int(qty_vendor * 0.1)
+ qty_vendor = math.ceil(float(qty_vendor))
+ total_excell = qty_vendor
+ if qty_available > 0:
+ qty = qty_available + total_adem + total_excell
sla_date = '1 Hari'
- elif qty_altama > 0:
+ elif qty_altama > 0 or qty_vendor > 0:
+ qty = total_adem if qty_altama > 0 else total_excell
sla_date = '2-4 Hari'
- else:
- sla_date = 'Indent'
+ else:
+ sla_date = '3-7 Hari'
except:
print('error')
else:
diff --git a/indoteknik_api/controllers/api_v1/product_variant.py b/indoteknik_api/controllers/api_v1/product_variant.py
index 999ced6f..8de4669e 100644
--- a/indoteknik_api/controllers/api_v1/product_variant.py
+++ b/indoteknik_api/controllers/api_v1/product_variant.py
@@ -2,6 +2,7 @@ from .. import controller
from odoo import http
from odoo.http import request
+
class ProductVariant(controller.Controller):
prefix = '/api/v1/'
@@ -20,3 +21,14 @@ class ProductVariant(controller.Controller):
return self.response(data)
+ @http.route(prefix + 'product_variant/<product_id>/promotions', auth='public', methods=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized()
+ def get_product_variant_promotions(self, product_id):
+ product_id = int(product_id)
+ user_data = self.verify_user_token()
+
+ program_line = request.env['promotion.program.line']
+ program_lines = program_line.get_active_promotions(product_id)
+ program_lines = program_lines.res_format(user=user_data)
+
+ return self.response(program_lines)
diff --git a/indoteknik_api/controllers/api_v1/promotion.py b/indoteknik_api/controllers/api_v1/promotion.py
index b137fe2e..f84b8c1c 100644
--- a/indoteknik_api/controllers/api_v1/promotion.py
+++ b/indoteknik_api/controllers/api_v1/promotion.py
@@ -1,12 +1,13 @@
from .. import controller
from odoo import http
from odoo.http import request
-import ast
+from datetime import datetime
class Promotion(controller.Controller):
prefix = '/api/v1/'
-
+
+
@http.route(prefix + 'promotion/<id>', auth='public', methods=['GET'])
@controller.Controller.must_authorized()
def get_promotion_by_id(self, **kw):
@@ -14,7 +15,7 @@ class Promotion(controller.Controller):
id = kw.get('id')
if not id:
return self.response(code=400, description='id is required')
-
+
data = {}
id = int(id)
coupon_program = request.env['coupon.program'].search([('id', '=', id)])
@@ -24,6 +25,67 @@ class Promotion(controller.Controller):
'image': base_url + 'api/image/coupon.program/x_studio_image_promo/' + str(coupon_program.id) if coupon_program.x_studio_image_promo else '',
'name': coupon_program.name,
}
+
+ return self.response(data)
+
+
+ @http.route(prefix + 'promotion/home', auth='public', methods=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized()
+ def v1_get_promotion_home(self):
+ current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
+ programs = request.env['promotion.program'].search([
+ ('start_time', '<=', current_time),
+ ('end_time', '>=', current_time),
+ ('program_line.display_on_homepage', '=', True)
+ ])
+
+ if not programs:
+ return self.response(None)
+
+ data = []
+ for program in programs:
+ data_program = {
+ 'id': program.id,
+ 'name': program.name,
+ 'banner': request.env['ir.attachment'].api_image('promotion.program', 'banner', program.id),
+ 'icon': request.env['ir.attachment'].api_image('promotion.program', 'icon', program.id)
+ }
+ data.append(data_program)
+
+ return self.response(data)
+
+
+ @http.route(prefix + 'promotion/home/<id>', auth='public', methods=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized()
+ def v1_get_promotion_home_detail(self, id):
+ program_lines = request.env['promotion.program.line'].search([
+ ('display_on_homepage', '=', True),
+ ('promotion_type', '=', 'special_price'),
+ ('program_id', '=', int(id))
+ ])
+ data = []
+ for line in program_lines:
+ product = request.env['product.product'].v2_api_single_response(line.product_id)
+ product_template = line.product_id.product_tmpl_id
+
+ product.update({
+ 'id': product['parent']['id'],
+ 'image': product['parent']['image'],
+ 'name': product['parent']['name'],
+ 'variant_total': len(product_template.product_variant_ids),
+ 'lowest_price': line.calculate_price(product['price']),
+ 'stock_total': product['stock'],
+ 'icon': {
+ 'top': request.env['ir.attachment'].api_image('promotion.program', 'icon_top', line.program_id.id),
+ 'bottom': request.env['ir.attachment'].api_image('promotion.program', 'icon_bottom', line.program_id.id)
+ }
+ })
+
+ product.pop('parent', None)
+ product.pop('price', None)
+ product.pop('stock', None)
+ data.append(product)
+
return self.response(data)
- \ No newline at end of file
+
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index 713b3bff..6c878197 100644
--- a/indoteknik_api/controllers/api_v1/sale_order.py
+++ b/indoteknik_api/controllers/api_v1/sale_order.py
@@ -231,21 +231,24 @@ class SaleOrder(controller.Controller):
sale_order.state = 'cancel'
data = sale_order.id
return self.response(data)
-
+
+ @http.route(prefix + 'user/<user_id>/sale_order/checkout', auth='public', method=['GET', 'OPTIONS'], csrf=False)
+ @controller.Controller.must_authorized(private=True, private_key='user_id')
+ def get_user_checkout_so(self, user_id, **kw):
+ cart = request.env['website.user.cart']
+ voucher_code = kw.get('voucher')
+ voucher = request.env['voucher'].search([('code', '=', voucher_code)], limit=1)
+ result = cart.get_user_checkout(user_id, voucher)
+ return self.response(result)
+
@http.route(PREFIX_PARTNER + 'sale_order/checkout', auth='public', method=['POST', 'OPTIONS'], csrf=False)
@controller.Controller.must_authorized(private=True, private_key='partner_id')
def create_partner_sale_order(self, **kw):
config = request.env['ir.config_parameter']
- product_pricelist_default_discount_id = int(
- config.get_param('product.pricelist.default_discount_id'))
- product_pricelist_tier1 = int(
- config.get_param('product.pricelist.tier1'))
- product_pricelist_tier2 = int(
- config.get_param('product.pricelist.tier2'))
- product_pricelist_tier3 = int(
- config.get_param('product.pricelist.tier3'))
+ product_pricelist_default_discount_id = int(config.get_param('product.pricelist.default_discount_id'))
params = self.get_request_params(kw, {
+ 'user_id': ['number'],
'partner_id': ['number'],
'partner_shipping_id': ['required', 'number'],
'partner_invoice_id': ['required', 'number'],
@@ -258,7 +261,7 @@ class SaleOrder(controller.Controller):
'delivery_service_type': [],
'voucher': []
})
-
+
if not params['valid']:
return self.response(code=400, description=params)
@@ -290,71 +293,78 @@ class SaleOrder(controller.Controller):
if params['value']['type'] == 'sale_order':
parameters['approval_status'] = 'pengajuan1'
sale_order = request.env['sale.order'].create([parameters])
- order_line = json.loads(params['value']['order_line'])
parameters = []
- partner = request.env['res.partner'].browse(
- params['value']['partner_id'])
- partner_pricelist = partner.property_product_pricelist
- for line in order_line:
- product = request.env['product.product'].search(
- [('id', '=', line['product_id'])], limit=1)
- discount = product._get_website_disc(0)
-
- price_tier = False
- pricelist = {
- 'tier1': product._get_pricelist_tier1,
- 'tier2': product._get_pricelist_tier2,
- 'tier3': product._get_pricelist_tier3,
- }
- partner_pricelist_id = partner_pricelist.id if partner_pricelist else False
- if partner_pricelist_id == product_pricelist_tier1:
- price_tier = 'tier1'
- if partner_pricelist_id == product_pricelist_tier2:
- price_tier = 'tier2'
- if partner_pricelist_id == product_pricelist_tier3:
- price_tier = 'tier3'
-
- if price_tier:
- price = pricelist[price_tier]()
- discount_key = 'discount_%s' % price_tier
- if price[discount_key] > 0:
- discount = price[discount_key]
-
- flashsale = product._get_flashsale_price()
- flashsale_discount = flashsale['flashsale_discount']
- if flashsale_discount > 0 and flashsale_discount > discount:
- discount = flashsale_discount
-
- parameters.append({
+ user_id = params['value']['user_id']
+ user_cart = request.env['website.user.cart']
+ products = user_cart.get_product_by_user(user_id=user_id, selected=True)
+ for product in products:
+ total_qty = product['quantity']
+ price_unit = product['price']['price']
+ price_discount =product['price']['discount_percentage']
+ if product['program'] and product['program']['type']['value'] != 'special_price':
+ total_qty += sum(x['quantity'] for x in product['program']['items'])
+ price_unit = product['subtotal'] / total_qty
+ price_discount = 0
+
+ param = {
'company_id': 1,
'order_id': sale_order.id,
- 'product_id': line['product_id'],
- 'product_uom_qty': line['quantity'],
- 'price_unit': product._get_website_price_exclude_tax(),
- 'discount': discount
- })
+ 'price_unit': price_unit,
+ 'discount': price_discount
+ }
+
+ primary_product = {
+ **param,
+ 'product_id': product['id'],
+ 'product_uom_qty': product['quantity']
+ }
+ if product['program']:
+ primary_product.update({
+ 'program_line_id': product['program']['id']
+ })
+ parameters.append(primary_product)
+
+ if not product['program']:
+ continue
+
+ for item in product['program']['items']:
+ parameters.append({
+ **param,
+ 'product_id': item['id'],
+ 'product_uom_qty': item['quantity'],
+ })
request.env['sale.order.line'].create(parameters)
- amount_untaxed = sale_order.amount_untaxed
- voucher = request.env['voucher'].search([
- ('code', '=', params['value']['voucher'])
- ])
+ voucher_code = params['value']['voucher']
+ voucher = request.env['voucher'].search([('code', '=', voucher_code)])
if voucher:
+ amount_untaxed = 0
+ manufacture_ids = [x.id for x in voucher.manufacture_ids]
+ for line in sale_order.order_line:
+ manufacture_id = line.product_id.x_manufacture.id or False
+ if len(manufacture_ids) == 0 or manufacture_id in manufacture_ids:
+ amount_untaxed += line.price_subtotal
+
voucher_discount = voucher.calculate_discount(amount_untaxed)
sale_order.voucher_id = voucher.id
sale_order.amount_voucher_disc = voucher_discount
- total_qty = sum(line.product_uom_qty for line in sale_order.order_line)
- voucher_discount_item = voucher_discount / total_qty
for line in sale_order.order_line:
- discount_decimal = line.discount / 100
- voucher_discount_line = voucher_discount_item / (1 - discount_decimal)
- price = line.price_unit - voucher_discount_line
- line.price_unit = price
- line.amount_voucher_disc = voucher_discount_item * line.product_uom_qty
+ manufacture_id = line.product_id.x_manufacture.id or False
+ if len(manufacture_ids) > 0 and manufacture_id not in manufacture_ids:
+ continue
+ voucher_discount_line = line.price_subtotal / amount_untaxed * voucher_discount
+ line.amount_voucher_disc = voucher_discount_line
+ discount_decimal = line.discount / 100
+ voucher_discount_item = voucher_discount_line / line.product_uom_qty
+ voucher_disc_before_line_disc = voucher_discount_item / (1 - discount_decimal)
+ line.price_unit -= voucher_disc_before_line_disc
+
+ cart_ids = [x['cart_id'] for x in products]
+ user_cart.browse(cart_ids).unlink()
return self.response({
'id': sale_order.id,
'name': sale_order.name
diff --git a/indoteknik_api/controllers/api_v1/voucher.py b/indoteknik_api/controllers/api_v1/voucher.py
index 0990a1a0..a6a88cad 100644
--- a/indoteknik_api/controllers/api_v1/voucher.py
+++ b/indoteknik_api/controllers/api_v1/voucher.py
@@ -2,21 +2,76 @@ from .. import controller
from odoo import http
from odoo.http import request
+
class Voucher(controller.Controller):
prefix = '/api/v1/'
- @http.route(prefix + 'voucher', auth='public', methods=['GET', 'OPTIONS'])
- @controller.Controller.must_authorized()
+ @http.route(prefix + 'user/<user_id>/voucher', auth='public', methods=['GET', 'OPTIONS'])
+ @controller.Controller.must_authorized(private=True, private_key='user_id')
def get_vouchers(self, **kw):
+ cart = request.env['website.user.cart']
code = kw.get('code')
- visibility = 'public'
+ user_id = kw.get('user_id')
+ visibility = ['public']
parameter = []
if code:
- visibility = 'private'
+ visibility.append('private')
parameter += [('code', '=', code)]
+ user_pricelist = request.env.user_pricelist
+ if user_pricelist:
+ parameter += [('excl_pricelist_ids', 'not in', [user_pricelist.id])]
- parameter += [('visibility', '=', visibility)]
+ parameter += [('visibility', 'in', visibility)]
vouchers = request.env['voucher'].get_active_voucher(parameter)
- data = vouchers.res_format()
- return self.response(data)
+ vouchers = vouchers.res_format()
+ checkout = cart.get_user_checkout(user_id)
+
+ for voucher in vouchers:
+ apply_status = ''
+ products = checkout['products']
+ min_purchase_amount = voucher['min_purchase_amount']
+ max_discount_amount = voucher['max_discount_amount']
+ discount_type = voucher['discount_type']
+ discount_amount = voucher['discount_amount']
+ can_apply = True
+ difference_to_apply = 0
+
+ manufacture_ids = voucher['manufacture_ids']
+ subtotal = 0
+ has_match_manufacture = False
+ for product in products:
+ price = product['price']['price']
+ price_discount = product['price']['price_discount']
+ quantity = product['quantity']
+ manufacture_id = product['manufacture']['id'] or False
+
+ if len(manufacture_ids) == 0 or manufacture_id in manufacture_ids:
+ purchase_amt = price * quantity
+ discount_amt = (price - price_discount) * quantity
+ subtotal += purchase_amt - discount_amt
+ has_match_manufacture = True
+
+ if not has_match_manufacture:
+ can_apply = False
+ apply_status = 'UM'
+ elif subtotal < min_purchase_amount:
+ can_apply = False
+ apply_status = 'MPA'
+ difference_to_apply = min_purchase_amount - subtotal
+
+ discount_voucher = 0
+ if discount_type == 'fixed_price':
+ discount_voucher = discount_amount
+ if discount_type == 'percentage':
+ discount_voucher = subtotal * discount_amount / 100
+
+ if max_discount_amount > 0 and discount_voucher > max_discount_amount:
+ discount_voucher = max_discount_amount
+
+ voucher['can_apply'] = can_apply
+ voucher['apply_status'] = apply_status
+ voucher['discount_voucher'] = discount_voucher
+ voucher['difference_to_apply'] = difference_to_apply
+
+ return self.response(vouchers)
diff --git a/indoteknik_api/controllers/api_v2/product.py b/indoteknik_api/controllers/api_v2/product.py
index d9b43bda..19a97dec 100644
--- a/indoteknik_api/controllers/api_v2/product.py
+++ b/indoteknik_api/controllers/api_v2/product.py
@@ -12,12 +12,10 @@ class V2Product(controller.Controller):
if not id:
return self.response(code=400, description='id is required')
- pricelist = self.user_pricelist()
-
data = []
id = [int(x) for x in id.split(',')]
product_templates = request.env['product.template'].search([('id', 'in', id)])
if product_templates:
- data = [request.env['product.template'].v2_api_single_response(x, pricelist=pricelist, with_detail='DEFAULT') for x in product_templates]
+ data = [request.env['product.template'].v2_api_single_response(x, with_detail='DEFAULT') for x in product_templates]
return self.response(data) \ No newline at end of file
diff --git a/indoteknik_api/controllers/api_v2/product_variant.py b/indoteknik_api/controllers/api_v2/product_variant.py
index 8a5bbeb1..b74e4936 100644
--- a/indoteknik_api/controllers/api_v2/product_variant.py
+++ b/indoteknik_api/controllers/api_v2/product_variant.py
@@ -12,13 +12,11 @@ class V2ProductVariant(controller.Controller):
if not id:
return self.response(code=400, description='id is required')
- pricelist = self.user_pricelist()
-
data = []
id = [int(x) for x in id.split(',')]
product_products = request.env['product.product'].search([('id', 'in', id)])
if product_products:
- data = [request.env['product.product'].v2_api_single_response(x, pricelist=pricelist) for x in product_products]
+ data = [request.env['product.product'].v2_api_single_response(x) for x in product_products]
return self.response(data)
diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py
index 0fcf4814..1e9f01ee 100644
--- a/indoteknik_api/controllers/controller.py
+++ b/indoteknik_api/controllers/controller.py
@@ -21,6 +21,7 @@ class Controller(http.Controller):
def inner_wrapper(*args, **kwargs):
self = args[0]
auth = self.authenticate()
+ request.env.user_pricelist = self.user_pricelist()
if not auth:
return self.unauthorized_response()
if private:
diff --git a/indoteknik_api/models/product_product.py b/indoteknik_api/models/product_product.py
index edf95a58..334b58c5 100644
--- a/indoteknik_api/models/product_product.py
+++ b/indoteknik_api/models/product_product.py
@@ -29,20 +29,46 @@ class ProductProduct(models.Model):
}
return data
- def v2_api_single_response(self, product_product, pricelist=False):
+ def v2_api_single_response(self, product_product):
+ 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': product_product.calculate_website_price(),
+ '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 has_active_program(self):
+ program_line = self.env['promotion.program.line']
+ product_promotions = program_line.get_active_promotions(self.id)
+ return True if len(product_promotions) > 0 else False
+
+ def calculate_website_price(self):
+ pricelist = self.env.user_pricelist
+
config = self.env['ir.config_parameter']
product_pricelist_tier1 = int(config.get_param('product.pricelist.tier1'))
product_pricelist_tier2 = int(config.get_param('product.pricelist.tier2'))
product_pricelist_tier3 = int(config.get_param('product.pricelist.tier3'))
- discount_percentage = product_product._get_website_disc(0)
- price_discount = product_product._get_website_price_after_disc_and_tax()
+ discount_percentage = self._get_website_disc(0)
+ price_discount = self._get_website_price_after_disc_and_tax()
price_tier = False
pricelists = {
- 'tier1': product_product._get_pricelist_tier1,
- 'tier2': product_product._get_pricelist_tier2,
- 'tier3': product_product._get_pricelist_tier3,
+ 'tier1': self._get_pricelist_tier1,
+ 'tier2': self._get_pricelist_tier2,
+ 'tier3': self._get_pricelist_tier3,
}
pricelist_id = pricelist.id if pricelist else False
if pricelist_id == product_pricelist_tier1: price_tier = 'tier1'
@@ -56,36 +82,11 @@ class ProductProduct(models.Model):
if price[discount_key] > 0: discount_percentage = price[discount_key]
if price[price_key] > 0: price_discount = price[price_key]
- flashsale = product_product._get_flashsale_price()
- flashsale_price = flashsale['flashsale_price']
- flashsale_discount = flashsale['flashsale_discount']
- if flashsale_price > 0 and flashsale_price < price_discount:
- price_discount = flashsale_price
- discount_percentage = flashsale_discount
-
- stock = product_product.qty_stock_vendor
- stock = stock if stock > 0 else 1
- 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': discount_percentage,
- 'price_discount': price_discount
- },
- 'stock': stock,
- 'weight': product_product.weight,
- 'attributes': [x.name for x in product_product.product_template_attribute_value_ids],
- 'manufacture' : self.api_manufacture(product_product)
+ return {
+ 'price': self._get_website_price_exclude_tax(),
+ 'discount_percentage': discount_percentage,
+ 'price_discount': price_discount
}
- return data
def api_manufacture(self, product_template):
if product_template.x_manufacture:
diff --git a/indoteknik_api/models/product_template.py b/indoteknik_api/models/product_template.py
index 1a345967..68ab79c2 100644
--- a/indoteknik_api/models/product_template.py
+++ b/indoteknik_api/models/product_template.py
@@ -51,9 +51,7 @@ class ProductTemplate(models.Model):
data.update(data_with_detail)
return data
- def v2_api_single_response(self, product_template, pricelist=False, 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)
+ 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),
@@ -67,7 +65,7 @@ class ProductTemplate(models.Model):
}
if with_detail != '':
- variants = [self.env['product.product'].v2_api_single_response(variant, pricelist=pricelist) for variant in product_template.product_variant_ids]
+ 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"]:
diff --git a/indoteknik_api/models/res_users.py b/indoteknik_api/models/res_users.py
index 69981e41..0fe9008b 100644
--- a/indoteknik_api/models/res_users.py
+++ b/indoteknik_api/models/res_users.py
@@ -20,6 +20,7 @@ class ResUsers(models.Model):
data = {
'id': res_user.id,
'parent_id': res_user.parent_id.id or False,
+ 'parent_name': res_user.parent_id.name or False,
'partner_id': res_user.partner_id.id,
'name': res_user.name,
'email': res_user.login,