43 lines
1.9 KiB
Python

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo.addons.website_sale.controllers import main as website_sale_controller
from odoo.tools import email_re
from odoo import http, _
from odoo.http import request
from werkzeug.exceptions import BadRequest
class WebsiteSale(website_sale_controller.WebsiteSale):
@http.route(['/shop/add/stock_notification'], type="json", auth="public", website=True)
def add_stock_email_notification(self, email, product_id):
if not email_re.match(email):
raise BadRequest(_("Invalid Email"))
product = request.env['product.product'].browse(int(product_id))
partners = request.env['res.partner'].sudo()._mail_find_partner_from_emails([email], force_create=True)
partner = partners[0]
if not product._has_stock_notification(partner):
product.sudo().stock_notification_partner_ids += partner
if request.website.is_public_user():
request.session['product_with_stock_notification_enabled'] = request.session.get(
'product_with_stock_notification_enabled',
set()
) | {product_id}
request.session['stock_notification_email'] = email
def _prepare_product_values(self, product, category='', search='', **kwargs):
values = super()._prepare_product_values(product, category, search, **kwargs)
# We need the user mail to prefill the back of stock notification, so we put it in the value that will be sent
values['user_email'] = request.env.user.email or request.session.get('stock_notification_email', '')
return values
class CustomerPortal(website_sale_controller.CustomerPortal):
def _sale_reorder_get_line_context(self):
return {
**super()._sale_reorder_get_line_context(),
'website_sale_stock_get_quantity': True,
}