You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

45 lines
2.2 KiB

# -*- coding: utf-8 -*-
import logging
from odoo import fields, http, tools, _
from odoo.http import request
from odoo.addons.website_sale.controllers.main import WebsiteSale
class websale(WebsiteSale):
@http.route(['/shop/buy_now'], type='http', auth="public", methods=['POST'], website=True)
def pay(self, product_id_buy, add_qty=1):
product_custom_attribute_values = None
no_variant_attribute_values = None
partner = request.website.env.user.partner_id
pricelist_id = request.session.get('website_sale_current_pl') or request.website.get_current_pricelist().id
pricelist = request.website.env['product.pricelist'].browse(pricelist_id).sudo()
so_data = request.website._prepare_sale_order_values(partner, pricelist)
sale_order = request.website.env['sale.order'].with_context(
force_company=request.website.company_id.id).sudo().create(
so_data)
# set fiscal position
if request.website.partner_id.id != partner.id:
sale_order.onchange_partner_shipping_id()
else: # For public user, fiscal position based on geolocation
country_code = request.session['geoip'].get('country_code')
if country_code:
country_id = request.env['res.country'].search([('code', '=', country_code)], limit=1).id
fp_id = request.env['account.fiscal.position'].sudo().with_context(force_company=request.website.company_id.id)._get_fpos_by_region(country_id)
sale_order.fiscal_position_id = fp_id
else:
# if no geolocation, use the public user fp
sale_order.onchange_partner_shipping_id()
request.session['sale_order_id'] = sale_order.id
sale_order.sudo()._cart_update(
product_id=int(product_id_buy),
add_qty=add_qty,
set_qty=0,
product_custom_attribute_values=product_custom_attribute_values,
no_variant_attribute_values=no_variant_attribute_values
)
# Take sale order id for payment confirmation page
request.session['sale_last_order_id'] = sale_order.id
return request.redirect("/shop/payment")