summaryrefslogtreecommitdiff
path: root/indoteknik_api/controllers/api_v1/sale_order.py
diff options
context:
space:
mode:
authorIT Fixcomart <it@fixcomart.co.id>2023-07-24 03:31:59 +0000
committerIT Fixcomart <it@fixcomart.co.id>2023-07-24 03:31:59 +0000
commitc1ac22304b557b9982b5fb79d23d29b6faf48090 (patch)
treea1e6db531a5bf19994374e895d5d8a8c9abf1ffa /indoteknik_api/controllers/api_v1/sale_order.py
parent6966c00bf2ef2bd9c2261d9363ac6b463a7766dd (diff)
parent30909e82d7ff1f3cac4700e284f80552a0d38523 (diff)
Merged in feature/voucher-cart (pull request #65)
Feature/voucher cart
Diffstat (limited to 'indoteknik_api/controllers/api_v1/sale_order.py')
-rw-r--r--indoteknik_api/controllers/api_v1/sale_order.py135
1 files changed, 74 insertions, 61 deletions
diff --git a/indoteknik_api/controllers/api_v1/sale_order.py b/indoteknik_api/controllers/api_v1/sale_order.py
index e036751e..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,68 +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:
- sale_order.voucher_id = voucher.id
+ 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)
- total_qty = sum(line.product_uom_qty for line in sale_order.order_line)
- voucher_discount_item = voucher_discount / total_qty
+ sale_order.voucher_id = voucher.id
+ sale_order.amount_voucher_disc = voucher_discount
+
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
+ 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