Odoo18-Base/addons/website_sale/controllers/reorder.py
2025-01-06 10:57:38 +07:00

58 lines
2.7 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.exceptions import AccessError, MissingError
from odoo.http import request, route
from odoo.addons.sale.controllers import portal as sale_portal
class CustomerPortal(sale_portal.CustomerPortal):
def _sale_reorder_get_line_context(self):
return {}
@route('/my/orders/reorder_modal_content', type='json', auth='public', website=True)
def my_orders_reorder_modal_content(self, order_id, access_token):
try:
sale_order = self._document_check_access('sale.order', order_id, access_token=access_token)
except (AccessError, MissingError):
return request.redirect('/my')
currency = request.env['website'].get_current_website().currency_id
result = {
'currency': currency.id,
'products': [],
}
for line in sale_order.order_line:
if line.display_type:
continue
if line._is_delivery():
continue
combination = line.product_id.product_template_attribute_value_ids | line.product_no_variant_attribute_value_ids
res = {
'product_template_id': line.product_id.product_tmpl_id.id,
'product_id': line.product_id.id,
'combination': combination.ids,
'no_variant_attribute_value_ids': line.product_no_variant_attribute_value_ids.ids,
'product_custom_attribute_values': [
{ # Same input format as provided by product configurator
'custom_product_template_attribute_value_id': pcav.custom_product_template_attribute_value_id.id,
'custom_value': pcav.custom_value,
} for pcav in line.product_custom_attribute_value_ids
],
'type': line.product_id.type,
'name': line.name_short,
'description_sale': line.product_id.description_sale or '' + line._get_sale_order_line_multiline_description_variants(),
'qty': line.product_uom_qty,
'add_to_cart_allowed': line.with_user(request.env.user).sudo()._is_reorder_allowed(),
'has_image': bool(line.product_id.image_128),
}
if res['add_to_cart_allowed']:
res['combinationInfo'] = line.product_id.product_tmpl_id.with_context(
**self._sale_reorder_get_line_context()
)._get_combination_info(combination, res['product_id'], res['qty'])
else:
res['combinationInfo'] = {}
result['products'].append(res)
return result