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.
144 lines
6.0 KiB
144 lines
6.0 KiB
# © 2019 Le Filament (<http://www.le-filament.com>)
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
|
|
|
|
from odoo import fields, http, tools, _
|
|
from odoo.http import request
|
|
from odoo.addons.website_sale.controllers.main import WebsiteSale
|
|
|
|
|
|
class VracoopWebsiteSale(WebsiteSale):
|
|
|
|
@http.route(['/shop/retrait'], type='http', auth="public", website=True)
|
|
def retrait(self, **post):
|
|
points_retrait = request.env['vracoop.point.retrait'].search([])
|
|
print("--- points_retrait ---", str(points_retrait))
|
|
order = request.website.sale_get_order()
|
|
# redirection = self.checkout_redirection(order)
|
|
# if redirection:
|
|
# return redirection
|
|
render_values = {
|
|
'points_retrait': points_retrait,
|
|
}
|
|
# render_values = self._get_shop_payment_values(order, **post)
|
|
# render_values['only_services'] = order and order.only_services or False
|
|
|
|
# if render_values['errors']:
|
|
# render_values.pop('acquirers', '')
|
|
# render_values.pop('tokens', '')
|
|
|
|
return request.render("vracoop_click_and_collect.vracoop_retrait", render_values)
|
|
|
|
@http.route(['/shop/checkout'], type='http', auth="public", website=True)
|
|
def checkout(self, **post):
|
|
res = super(VracoopWebsiteSale, self).checkout(**post)
|
|
order = request.website.sale_get_order()
|
|
|
|
redirection = self.checkout_redirection(order)
|
|
if redirection:
|
|
return redirection
|
|
|
|
if order.partner_id.id == request.website.user_id.sudo().partner_id.id:
|
|
return request.redirect('/shop/address')
|
|
|
|
for f in self._get_mandatory_billing_fields():
|
|
if not order.partner_id[f]:
|
|
return request.redirect('/shop/address?partner_id=%d' % order.partner_id.id)
|
|
|
|
values = self.checkout_values(**post)
|
|
|
|
if post.get('express'):
|
|
return request.redirect('/shop/retrait')
|
|
|
|
values.update({'website_sale_order': order})
|
|
|
|
# Avoid useless rendering if called in ajax
|
|
if post.get('xhr'):
|
|
return 'ok'
|
|
return request.render("website_sale.checkout", values)
|
|
|
|
|
|
@http.route(['/shop/address'], type='http', methods=['GET', 'POST'], auth="public", website=True)
|
|
def address(self, **kw):
|
|
res = super(VracoopWebsiteSale, self).address(**kw)
|
|
Partner = request.env['res.partner'].with_context(show_address=1).sudo()
|
|
order = request.website.sale_get_order()
|
|
|
|
redirection = self.checkout_redirection(order)
|
|
if redirection:
|
|
return redirection
|
|
|
|
mode = (False, False)
|
|
can_edit_vat = False
|
|
def_country_id = order.partner_id.country_id
|
|
values, errors = {}, {}
|
|
|
|
partner_id = int(kw.get('partner_id', -1))
|
|
|
|
# IF PUBLIC ORDER
|
|
if order.partner_id.id == request.website.user_id.sudo().partner_id.id:
|
|
mode = ('new', 'billing')
|
|
can_edit_vat = True
|
|
country_code = request.session['geoip'].get('country_code')
|
|
if country_code:
|
|
def_country_id = request.env['res.country'].search([('code', '=', country_code)], limit=1)
|
|
else:
|
|
def_country_id = request.website.user_id.sudo().country_id
|
|
# IF ORDER LINKED TO A PARTNER
|
|
else:
|
|
if partner_id > 0:
|
|
if partner_id == order.partner_id.id:
|
|
mode = ('edit', 'billing')
|
|
can_edit_vat = order.partner_id.can_edit_vat()
|
|
else:
|
|
shippings = Partner.search([('id', 'child_of', order.partner_id.commercial_partner_id.ids)])
|
|
if partner_id in shippings.mapped('id'):
|
|
mode = ('edit', 'shipping')
|
|
else:
|
|
return Forbidden()
|
|
if mode:
|
|
values = Partner.browse(partner_id)
|
|
elif partner_id == -1:
|
|
mode = ('new', 'shipping')
|
|
else: # no mode - refresh without post?
|
|
return request.redirect('/shop/checkout')
|
|
|
|
# IF POSTED
|
|
if 'submitted' in kw:
|
|
pre_values = self.values_preprocess(order, mode, kw)
|
|
errors, error_msg = self.checkout_form_validate(mode, kw, pre_values)
|
|
post, errors, error_msg = self.values_postprocess(order, mode, pre_values, errors, error_msg)
|
|
|
|
if errors:
|
|
errors['error_message'] = error_msg
|
|
values = kw
|
|
else:
|
|
partner_id = self._checkout_form_save(mode, post, kw)
|
|
if mode[1] == 'billing':
|
|
order.partner_id = partner_id
|
|
order.onchange_partner_id()
|
|
if not kw.get('use_same'):
|
|
kw['callback'] = kw.get('callback') or \
|
|
(not order.only_services and (mode[0] == 'edit' and '/shop/checkout' or '/shop/address'))
|
|
elif mode[1] == 'shipping':
|
|
order.partner_shipping_id = partner_id
|
|
|
|
order.message_partner_ids = [(4, partner_id), (3, request.website.partner_id.id)]
|
|
if not errors:
|
|
return request.redirect(kw.get('callback') or '/shop/retrait')
|
|
|
|
country = 'country_id' in values and values['country_id'] != '' and request.env['res.country'].browse(int(values['country_id']))
|
|
country = country and country.exists() or def_country_id
|
|
render_values = {
|
|
'website_sale_order': order,
|
|
'partner_id': partner_id,
|
|
'mode': mode,
|
|
'checkout': values,
|
|
'can_edit_vat': can_edit_vat,
|
|
'country': country,
|
|
'countries': country.get_website_sale_countries(mode=mode[1]),
|
|
"states": country.get_website_sale_states(mode=mode[1]),
|
|
'error': errors,
|
|
'callback': kw.get('callback'),
|
|
'only_services': order and order.only_services,
|
|
}
|
|
return request.render("website_sale.address", render_values)
|