наследование

POS имеет два типа классов: модели, виджеты. Расширение этих классов немного отличается.

Примечание

Не у всех классов есть простой способ заставить их наследовать. Некоторые трюки доступны здесь <https://odoo-development.readthedocs.io/en/latest/dev/pos/gui.html>`__

модель

Классы моделей работают только с данными и не работают с пользовательским интерфейсом напрямую.

Чтобы расширить класс такого типа, вам нужно использовать метод `` extend``. Создает копию класса с переопределенным методом. Обычно вам нужно переопределить исходный класс обновленным. Также, чтобы вызвать оригинальный метод, поместите оригинальный класс в переменную.

Вот пример <https://github.com/it-projects-llc/pos-addons/blob/fb8b072/pos_debt_notebook/static/src/js/pos.js#L23-L33>`__:

odoo.define('pos_debt_notebook.pos', function (require) {
  "use strict";

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

  // save original class
var _super_posmodel = models.PosModel.prototype;
  // override original class with extended one
  models.PosModel = models.PosModel.extend({
    initialize: function (session, attributes) {
      var self = this;
      // some new code in this method
      models.load_fields('product.product',['credit_product']);
      // call original method via "apply"
      _super_posmodel.initialize.apply(this, arguments);
  },
})

Виджет

Классы виджетов работают с пользовательским интерфейсом.

Расширение виджета намного проще, чем расширение модели: просто используйте `` include`` и `` _super``.

Вот пример <https://github.com/it-projects-llc/pos-addons/blob/fb8b072/pos_debt_notebook/static/src/js/pos.js#L379-L385>`__:

odoo.define('pos_debt_notebook.pos', function (require) {
  "use strict";
  var screens = require('point_of_sale.screens');

  // "include" updates original method
  screens.PaymentScreenWidget.include({
    init: function(parent, options) {
    // call super in a easy way
    this._super(parent, options);
    // add some new code
    this.pos.on('updateDebtHistory', function(partner_ids){
      this.update_debt_history(partner_ids);
      }, this);
    },
  })
})