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

5 years ago
  1. # © 2019 Le Filament (<http://www.le-filament.com>)
  2. # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
  3. from odoo import fields, http, tools, _
  4. from odoo.http import request
  5. from odoo.addons.website_sale.controllers.main import WebsiteSale
  6. class VracoopWebsiteSale(WebsiteSale):
  7. @http.route(['/shop/retrait'], type='http', auth="public", website=True)
  8. def retrait(self, **post):
  9. points_retrait = request.env['vracoop.point.retrait'].search([])
  10. print("--- points_retrait ---", str(points_retrait))
  11. order = request.website.sale_get_order()
  12. # redirection = self.checkout_redirection(order)
  13. # if redirection:
  14. # return redirection
  15. render_values = {
  16. 'points_retrait': points_retrait,
  17. }
  18. # render_values = self._get_shop_payment_values(order, **post)
  19. # render_values['only_services'] = order and order.only_services or False
  20. # if render_values['errors']:
  21. # render_values.pop('acquirers', '')
  22. # render_values.pop('tokens', '')
  23. return request.render("vracoop_click_and_collect.vracoop_retrait", render_values)
  24. @http.route(['/shop/checkout'], type='http', auth="public", website=True)
  25. def checkout(self, **post):
  26. res = super(VracoopWebsiteSale, self).checkout(**post)
  27. order = request.website.sale_get_order()
  28. redirection = self.checkout_redirection(order)
  29. if redirection:
  30. return redirection
  31. if order.partner_id.id == request.website.user_id.sudo().partner_id.id:
  32. return request.redirect('/shop/address')
  33. for f in self._get_mandatory_billing_fields():
  34. if not order.partner_id[f]:
  35. return request.redirect('/shop/address?partner_id=%d' % order.partner_id.id)
  36. values = self.checkout_values(**post)
  37. if post.get('express'):
  38. return request.redirect('/shop/retrait')
  39. values.update({'website_sale_order': order})
  40. # Avoid useless rendering if called in ajax
  41. if post.get('xhr'):
  42. return 'ok'
  43. return request.render("website_sale.checkout", values)
  44. @http.route(['/shop/address'], type='http', methods=['GET', 'POST'], auth="public", website=True)
  45. def address(self, **kw):
  46. res = super(VracoopWebsiteSale, self).address(**kw)
  47. Partner = request.env['res.partner'].with_context(show_address=1).sudo()
  48. order = request.website.sale_get_order()
  49. redirection = self.checkout_redirection(order)
  50. if redirection:
  51. return redirection
  52. mode = (False, False)
  53. can_edit_vat = False
  54. def_country_id = order.partner_id.country_id
  55. values, errors = {}, {}
  56. partner_id = int(kw.get('partner_id', -1))
  57. # IF PUBLIC ORDER
  58. if order.partner_id.id == request.website.user_id.sudo().partner_id.id:
  59. mode = ('new', 'billing')
  60. can_edit_vat = True
  61. country_code = request.session['geoip'].get('country_code')
  62. if country_code:
  63. def_country_id = request.env['res.country'].search([('code', '=', country_code)], limit=1)
  64. else:
  65. def_country_id = request.website.user_id.sudo().country_id
  66. # IF ORDER LINKED TO A PARTNER
  67. else:
  68. if partner_id > 0:
  69. if partner_id == order.partner_id.id:
  70. mode = ('edit', 'billing')
  71. can_edit_vat = order.partner_id.can_edit_vat()
  72. else:
  73. shippings = Partner.search([('id', 'child_of', order.partner_id.commercial_partner_id.ids)])
  74. if partner_id in shippings.mapped('id'):
  75. mode = ('edit', 'shipping')
  76. else:
  77. return Forbidden()
  78. if mode:
  79. values = Partner.browse(partner_id)
  80. elif partner_id == -1:
  81. mode = ('new', 'shipping')
  82. else: # no mode - refresh without post?
  83. return request.redirect('/shop/checkout')
  84. # IF POSTED
  85. if 'submitted' in kw:
  86. pre_values = self.values_preprocess(order, mode, kw)
  87. errors, error_msg = self.checkout_form_validate(mode, kw, pre_values)
  88. post, errors, error_msg = self.values_postprocess(order, mode, pre_values, errors, error_msg)
  89. if errors:
  90. errors['error_message'] = error_msg
  91. values = kw
  92. else:
  93. partner_id = self._checkout_form_save(mode, post, kw)
  94. if mode[1] == 'billing':
  95. order.partner_id = partner_id
  96. order.onchange_partner_id()
  97. if not kw.get('use_same'):
  98. kw['callback'] = kw.get('callback') or \
  99. (not order.only_services and (mode[0] == 'edit' and '/shop/checkout' or '/shop/address'))
  100. elif mode[1] == 'shipping':
  101. order.partner_shipping_id = partner_id
  102. order.message_partner_ids = [(4, partner_id), (3, request.website.partner_id.id)]
  103. if not errors:
  104. return request.redirect(kw.get('callback') or '/shop/retrait')
  105. country = 'country_id' in values and values['country_id'] != '' and request.env['res.country'].browse(int(values['country_id']))
  106. country = country and country.exists() or def_country_id
  107. render_values = {
  108. 'website_sale_order': order,
  109. 'partner_id': partner_id,
  110. 'mode': mode,
  111. 'checkout': values,
  112. 'can_edit_vat': can_edit_vat,
  113. 'country': country,
  114. 'countries': country.get_website_sale_countries(mode=mode[1]),
  115. "states": country.get_website_sale_states(mode=mode[1]),
  116. 'error': errors,
  117. 'callback': kw.get('callback'),
  118. 'only_services': order and order.only_services,
  119. }
  120. return request.render("website_sale.address", render_values)