diff options
| author | IT Fixcomart <it@fixcomart.co.id> | 2023-07-24 03:31:59 +0000 |
|---|---|---|
| committer | IT Fixcomart <it@fixcomart.co.id> | 2023-07-24 03:31:59 +0000 |
| commit | c1ac22304b557b9982b5fb79d23d29b6faf48090 (patch) | |
| tree | a1e6db531a5bf19994374e895d5d8a8c9abf1ffa /indoteknik_api/controllers/api_v1/sale_order.py | |
| parent | 6966c00bf2ef2bd9c2261d9363ac6b463a7766dd (diff) | |
| parent | 30909e82d7ff1f3cac4700e284f80552a0d38523 (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.py | 135 |
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 |
