Загрузка данных в POS

По умолчанию POS загружает следующие модели:

`` res.users``, `` res.company``, `` decimal.precision``, `` uom.uom``, `` res.partner``, `` res.country``, `` account.tax``, `` pos.session``, `` pos.config``, `` res.users``, `` stock.location``, `` product.pricelist``, `` product. pricelist.item``, `` product.category``, `` res.currency``, `` pos.category``, `` product.product``, `` account.bank.statement``, `` account.journal``, `` account.fiscal.position``, `` account.fiscal.position.tax``.

Если мы добавили новое поле в бэкэнд и хотим, чтобы они были представлены в POS, мы можем использовать метод ** load_fields ** внутри `` PosModel`` ** ** инициализирующей функции **.

В следующем примере, взятом из модуля `` POS Debt &amp; Credit notebook``, мы добавим несколько новых полей в модель `` account.journal```: <https://github.com/it-projects-llc/pos-addons/blob/fb8b0724fd4b5a0e66a64ece17643025e45330a8/pos_debt_notebook/static/src/js/pos.js#L29-L30::>`__

var models = require('point_of_sale.models');
models.load_fields('account.journal', ['debt', 'debt_limit', 'credits_via_discount', 'pos_cash_out',
                    'category_ids', 'credits_autopay']);

Для загрузки новой модели в POS мы используем `` load_models (models, options) ``. Описание взято из odoo

Загружает `` openerp`` модели в точке стартапа.

`` load_models`` принимает массив объявлений загрузчика модели.

Модели будут загружены в порядке массива. Если имя модели `` openerp`` не указано, данные сервера не будут загружены, но систему можно использовать для предварительной обработки данных перед загрузкой.

Аргументы загрузчика могут быть функциями, которые возвращают динамическое значение. Функция принимает `` PosModel`` в качестве первого аргумента и временный объект, который используется всеми моделями и может использоваться для хранения переходной информации между загрузками моделей.

Нет управления зависимостями. Модели должны быть загружены в правильном порядке. Недавно добавленные модели загружаются в конце, но параметры «после» и «до» могут использоваться для загрузки непосредственно перед / после другой модели.

models: [{
    model: [string] the name of the openerp model to load.
    label: [string] The label displayed during load.
    fields: [[string]|function] the list of fields to be loaded.
            Empty Array / Null loads all fields.
    order:  [[string]|function] the models will be ordered by the provided fields
    domain: [domain|function] the domain that determines what
            models need to be loaded. Null loads everything
    ids:    [[id]|function] the id list of the models that must
            be loaded. Overrides domain.
    context: [Dict|function] the openerp context for the model read
    condition: [function] do not load the models if it evaluates to
            false.
    loaded: [function(self,model)] this function is called once the
            models have been loaded, with the data as second argument
            if the function returns a deferred, the next model will
            wait until it resolves before loading.
 }]

options:
    before: [string] The model will be loaded before the named models
            (applies to both model name and label)
    after:  [string] The model will be loaded after the (last loaded)
            named model. (applies to both model name and label)

В приведенном ниже примере все записи соответствуют модели домена `` account.invoice``.

** загруженная ** функция является обработчиком для загруженных данных.

Здесь вы можете продолжить и сохранить этот пример <https://github.com/it-projects-llc/pos-addons/blob/d0323907e35082d6d10416c2f7ef8497aa47dc31/pos_invoice_pay/static/src/js/main.js#L51-L64::>`__ берется из модуля` Оплата заказов и счетов через POS``:

var models = require('point_of_sale.models');
  models.load_models({
    model: 'account.invoice',
    fields: ['name', 'partner_id', 'date_invoice', 'number', 'date_due', 'origin', 'user_id ', 'residual ', 'state ', 'amount_untaxed ', 'amount_tax '],
    domain: [['state', '=', 'open'],['type', '=', 'out_invoice']],
    loaded: function (self, invoices) {
      var invoices_ids = _.pluck(invoices, 'id');
      self.prepare_invoices_data(invoices);
      self.invoices = invoices;
      self.db.add_invoices(invoices);
      self.get_invoice_lines(invoices_ids);
  }
});