Таможенная квитанция

В POS есть два типа чеков:

  1. `` PosTicket`` - отображается на экране после оплаты;
  2. `` XmlReceipt`` - печатает в PosBox после нажатия кнопки Распечатать квитанцию на экране оплаты, если PosBox подключен к принтеру ESC POC.

Эти два чека реализованы в `` Qweb`` и генерируются после заказа на покупку. Если `` PosTicket`` разрешает любой дизайн в `` Qweb``, то для `` XmlReceipt`` вы можете использовать только строго определенные теги, которые поддерживаются принтером ESC POC.

Используя механизм `` t-extend``, который принимает имя шаблона для изменения в качестве параметра, вы можете расширить существующие шаблоны `` Qweb`` для получения. После этого может быть выполнена модификация с любым количеством поддиректив t-jquery.

Директивы `` t-jquery`` используют селектор CSS. Этот селектор используется в расширенном шаблоне для выбора узлов контекста, для которых может быть применена `` t-операция``. Если вы хотите добавить, например, другой заголовок для продукта в `` XmlReceipt``, вам нужно создать `` Qweb`` со следующим содержимым:

<t t-extend="XmlReceipt">
  <t t-jquery="t[t-if='simple'] line" t-operation="after">
    <t t-set="second_product_name" t-value="line.second_product_name"/>
      <t t-if="pos.config.show_second_product_name_in_receipt and second_product_name">
        <line>
          <left>(<t t-esc='second_product_name' />)</left>
        </line>
      </t>
    </t>
  </t>
</t>

Для того же действия для PosTicket:

<t t-extend="PosTicket">
  <t t-jquery=".receipt-orderlines tr[t-foreach='orderlines']" t-operation="append">
  <t t-set="second_product_name" t-value="orderline.get_product().second_product_name"/>
  </t>
</t>

Одним из сложных, но в то же время гибких методов создания квитанции Клиента является загрузка поля с Сервера, где в текстовой форме описан шаблон `` Qweb``. После загрузки и перед печатью этот текстовый шаблон необходимо преобразовать в «формат XML» и получить данные на основе этого шаблона.

template_receipt_qweb = fields.Text(string="Custom Receipt Qweb")

В POS вам нужно преобразовать этот текстовый формат в `` XML`` и сгенерировать квитанцию, используя этот шаблон:

convert_to_xml: function (template) {
  var parser = new DOMParser();
  var xmlDoc = parser.parseFromString(template, "text/xml");
  return xmlDoc.documentElement;
},

Использование этого шаблона вместо стандартных требует генерации полученного `` XML``, для этого вам необходимо подключить `` Qweb``:

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

Чтобы определить пользовательскую функцию, которая будет генерировать `` Qweb`` пользователя следующим образом:

custom_qweb_render: function (template, options) {
  var template_name = $(template).attr('t-name');
  Qweb.templates[template_name] = template;
  return Qweb._render(template_name, options);
},

Эту функцию необходимо вызывать каждый раз, когда генерируется квитанция.