0

I want to hide specific payment method (cash on delivery) if specific shipping method selected before. For example, if I check shipping method A , then in the next step, payment methods I have only one method to check ( other methods disabled or unable to check). I try to edit and add many2many relational field of payment.acquirer model in shdelivery.carrier and use this filed in controller but it not work , so far I havent' find the solution.

this is my code snapshot:

my python code:

class ShippingMethod(models.Model):
_inherit = 'delivery.carrier'

payment_acquirer_ids = fields.Many2many('payment.acquirer',string='Payment Mathods')

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

my controller

class WebsiteSaleDeliveryExtraCost(WebsiteSale):

@http.route(['/shop/change_shipping_method'], type='json', auth='public', methods=['POST'], website=True, csrf=False)
def change_shipping_method(self, **post):
    carrier_id = post.get('carrier_id')
    print('******00******', request.session)
    carrier = request.env['delivery.carrier'].browse(int(carrier_id))
    acquirer_ids = carrier.payment_acquirer_ids.ids
    acquirers = request.env['payment.acquirer'].search([('id','in',acquirer_ids)])
    # if acquirers:
    #    return request.redirect("/shop/payment")
    return acquirers.ids

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

her is JavaScript code to route controller:

odoo.define('website_sale_delivery_extra_cost.checkout', function (require) {
'use strict';

var core = require('web.core');
var publicWidget = require('web.public.widget');
require('website_sale_delivery.checkout')
var _t = core._t;
// hide payment method base on shipping method
publicWidget.registry.websiteSaleDelivery.include({
  selector: '.oe_website_sale',
    events: {
        'click #delivery_carrier .o_delivery_carrier_select': '_change_shipping_method',
    },

     _change_shipping_method: function (ev) {
      var self = this;
          var $radio = $(ev.currentTarget).find('input[type="radio"]');
            if ($radio.val()){
           this._rpc({
                    route: '/shop/change_shipping_method',
                    params: {
                        carrier_id: $radio.val(),
                    }}).then(function (data) {
                    if (data.length >= 1) {
                    console.log(data[0]);
                    console.log('---------');

                    return   { location.reload(); };
                    } else {
                        return false;
                    }
                }); // end of then
            } //end of if
    },
     /**
     * @private
     */
    _trackGA: function () {
        var websiteGA = window.ga || function () {};
        websiteGA.apply(this, arguments);
    },
    /**
     * @private
     */
    _vpv: function (page) { //virtual page view
        this._trackGA('send', 'pageview', {
          'page': page,
          'title': document.title,
        });
    },


});
});

Any other ideas how to solve this issue ?

0 Answers0