Search code examples
javascriptodoocustomizationposodoo-13

Add client search criteria Odoo13's POS


I've added some custom field's to the res.partner's model and I want to add this fields to the POS's search criteria. The fields I've added in my models.js file can be appreciated in the following code:

odoo.define('my_module.models', function (require) {
    "use strict";

    var models = require('point_of_sale.models');

    models.load_fields('res.partner', [
        'billing_name',
        'partner_billing_number'
    ]);

    models.load_models([{
        model: 'res.partner',
        fields: ['billing_name', 'partner_billing_number'],
        loaded: function(self, partners){self.db.add_partners(partners)},
    }]);

});

Then I've tried to add this fields to the search criteria with my db.js file with the following code:

odoo.define('my_module.db', function (require) {
    "use strict";

    var core = require('web.core');

    var PosDB = core.Class.extend({
        _partner_search_string: function(partner){
            var str = partner.name || '';
            if(partner.billing_name){
                str += '|' + partner.billing_name;
            }
            if(partner.partner_billing_number){
                str += '|' + partner.partner_billing_number;
            }
            str = partner.id + ':' +str.replace(/:/g,'') + '\n';
            return str;
        },

        add_partners:function (partners) {
            for(let i=0, len=partners.length; i < len; i++){
                var partner = partners[i];
                var search_string = this._partner_search_string(partner);
                this.partner_search_string[partner] += search_string;
            }
        }
    });

    return PosDB;

});

So far I was not able to add both search fields to the search criteria, it even broke the code a bit. What is missing in my code? How can I achieve this?


Solution

  • odoo.define('my_module.models', function (require) {
        "use strict";
    
    var PosDB = require('point_of_sale.DB');
    var models = require('point_of_sale.models');
    models.load_fields('res.partner', [
            'billing_name',
            'partner_billing_number'
        ]);
    
    PosDB.include({
        _partner_search_string: function(partner){
            var str =  partner.name || '';
            if(partner.barcode){
                str += '|' + partner.barcode;
            }
            if(partner.address){
                str += '|' + partner.address;
            }
            if(partner.phone){
                str += '|' + partner.phone.split(' ').join('');
            }
            if(partner.mobile){
                str += '|' + partner.mobile.split(' ').join('');
            }
            if(partner.email){
                str += '|' + partner.email;
            }
            if(partner.vat){
                str += '|' + partner.vat;
            }
            if(partner.billing_name){
                str += '|' + partner.billing_name;
            }
            if(partner.partner_billing_number){
                str += '|' + partner.partner_billing_number;
            }
            str = '' + partner.id + ':' + str.replace(':','') + '\n';
            return str;
        },
    });
    
    });
    

    Use this only one file i hope you will get your required output.