59 lines
2.9 KiB
Python
59 lines
2.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
from odoo import http
|
|
from odoo.addons.payment import utils as payment_utils
|
|
from odoo.addons.website_sale_delivery.controllers.main import WebsiteSaleDelivery
|
|
from odoo.http import request
|
|
|
|
|
|
class WebsiteSaleLoyaltyDelivery(WebsiteSaleDelivery):
|
|
|
|
@http.route()
|
|
def update_eshop_carrier(self, **post):
|
|
Monetary = request.env['ir.qweb.field.monetary']
|
|
result = super().update_eshop_carrier(**post)
|
|
order = request.website.sale_get_order()
|
|
free_shipping_lines = None
|
|
|
|
if order:
|
|
order._update_programs_and_rewards()
|
|
order.validate_taxes_on_sales_order()
|
|
free_shipping_lines = order._get_free_shipping_lines()
|
|
|
|
if free_shipping_lines:
|
|
currency = order.currency_id
|
|
if request.env.user.has_group('account.group_show_line_subtotals_tax_excluded'):
|
|
amount_free_shipping = sum(free_shipping_lines.mapped('price_subtotal'))
|
|
else:
|
|
amount_free_shipping = sum(free_shipping_lines.mapped('price_total'))
|
|
result.update({
|
|
'new_amount_delivery_discounted': Monetary.value_to_html(order.amount_delivery + amount_free_shipping, {'display_currency': currency}),
|
|
'new_amount_delivery_discount': Monetary.value_to_html(amount_free_shipping, {'display_currency': currency}),
|
|
'new_amount_untaxed': Monetary.value_to_html(order.amount_untaxed, {'display_currency': currency}),
|
|
'new_amount_tax': Monetary.value_to_html(order.amount_tax, {'display_currency': currency}),
|
|
'new_amount_total': Monetary.value_to_html(order.amount_total, {'display_currency': currency}),
|
|
'new_amount_order_discounted': Monetary.value_to_html(order.reward_amount - amount_free_shipping, {'display_currency': currency}),
|
|
'new_amount_total_raw': order.amount_total,
|
|
'delivery_discount_minor_amount': payment_utils.to_minor_currency_units(
|
|
amount_free_shipping, currency
|
|
),
|
|
})
|
|
return result
|
|
|
|
@http.route()
|
|
def cart_carrier_rate_shipment(self, carrier_id, **kw):
|
|
Monetary = request.env['ir.qweb.field.monetary']
|
|
order = request.website.sale_get_order(force_create=True)
|
|
free_shipping_lines = order._get_free_shipping_lines()
|
|
# Avoid computing carrier price delivery is free (coupon). It means if
|
|
# the carrier has error (eg 'delivery only for Belgium') it will show
|
|
# Free until the user clicks on it.
|
|
if free_shipping_lines:
|
|
return {
|
|
'carrier_id': carrier_id,
|
|
'status': True,
|
|
'is_free_delivery': True,
|
|
'new_amount_delivery': Monetary.value_to_html(0.0, {'display_currency': order.currency_id}),
|
|
'error_message': None,
|
|
}
|
|
return super().cart_carrier_rate_shipment(carrier_id, **kw)
|