odoo - добавить таблицу в общую стоимость заказа на продажу

Я пытаюсь добавить дополнительную строку в заказ на продажу между общей стоимостью без налогов и общей стоимостью налогов. При просмотре строки report_saleorder.xml my следует добавить следующий код:

<div class="row">
                <div class="col-xs-4 pull-right">
                    <table class="table table-condensed">
                        <tr class="border-black">
                            <td><strong>Total Without Taxes</strong></td>
                            <td class="text-right">
                                <span t-field="o.amount_untaxed"
                                    t-field-options='{"widget": "monetary", "display_currency": "o.pricelist_id.currency_id"}'/>
                            </td>
                        </tr>
                        <tr>
                            <td>Taxes</td>
                            <td class="text-right">
                                <span t-field="o.amount_tax"
                                    t-field-options='{"widget": "monetary", "display_currency": "o.pricelist_id.currency_id"}'/>
                            </td>
                        </tr>
                        <tr class="border-black">
                            <td><strong>Total</strong></td>
                            <td class="text-right">
                                <span t-field="o.amount_total"
                                    t-field-options='{"widget": "monetary", "display_currency": "o.pricelist_id.currency_id"}'/>
                            </td>
                        </tr>
                    </table>
                </div>
            </div>

Поскольку редактирование основного xml не вариант, мне было интересно, можно ли это сделать с помощью <xpath>, но я не уверен, как это сделать. Я уже создал field в своем файле sale.py, и, глядя на их код, мой xml должен выглядеть примерно так

<tr>
     <td>Insurance</td>
     <td class="text-right">
         <span t-field="o.amount_insurance" t-field-options='{"widget": "monetary", "display_currency": "o.pricelist_id.currency_id"}'/>
     </td>
</tr>

Любая помощь в том, как я смогу это сделать, будет очень признательна


person ThomasS    schedule 29.07.2015    source источник


Ответы (1)


Да, вы абсолютно правы, изменение существующего кода - не очень хорошая идея, так как при обновлении модуля вы потеряете изменения, поэтому правильный путь - не наследовать представление, и в этом случае вам нужно наследовать шаблон представления report_saleorder_document и добавить необходимое поле как желаемое поле с использованием тега xpath:

Если вы делаете это в самом интерфейсе, создайте новую запись представления со следующим синтаксисом и наследуйте ее от report_saleorder_document.

<?xml version="1.0"?>

<data inherit_id="sale.report_saleorder_document">
    <xpath expr="//div[@class='col-xs-4 pull-right']/table/tr[2]" position="after">
    <tr>
         <td>Insurance</td>
             <td class="text-right">
             <span t-field="o.amount_insurance" t-field-options='{"widget": "monetary", "display_currency": "o.pricelist_id.currency_id"}'/>
         </td>
    </tr>
    </xpath>
</data>

И если вы делаете по коду, добавьте унаследованное определение представления. это должно выглядеть так:

введите здесь описание изображения

Для изменений через код создайте новый файл и добавьте следующий код:

<?xml version="1.0" encoding="utf-8"?>
<openerp>
<data>
  <template id="report_saleorder_insurance_inherit" inherit_id="sale.report_saleorder_document">
        <xpath expr="//div[@class='col-xs-4 pull-right']/table/tr[2]" position="after">
        <tr>
             <td>Insurance</td>
                 <td class="text-right">
                 <span t-field="o.amount_insurance" t-field-options='{"widget": "monetary", "display_currency": "o.pricelist_id.currency_id"}'/>
             </td>
        </tr>
        </xpath>
 </template>
</data>
</openerp>

и не забудьте зарегистрировать наш файл под манифестом

Лучшие

person ifixthat    schedule 29.07.2015
comment
Изображение, которое вы показываете, именно то, что мне нужно! Но я действительно не понимаю, где я должен разместить ваш код. Просто сделать для него новый xml-файл или вставить в существующий? Я пробовал оба, но это дает мне AssertionError: Did not expect element xpath there - person ThomasS; 29.07.2015
comment
@ThomasS: обновлен ответ с более подробной информацией о файле кода, который вы хотите сделать. после добавления нового файла обновите список модулей и модуль. или используйте опцию -u -d из терминала. - person ifixthat; 29.07.2015
comment
Я поместил код, который вы мне дали, в отдельный XML-файл и добавил этот файл в __openerp__.py, но я не вижу никаких новых изменений. Я перезапустил службу, и модуль обновился без проблем. Есть ли что-то, что я пропустил, или есть идеи, почему кажется, что xml не используется? Большое спасибо за помощь до сих пор! - person ThomasS; 29.07.2015
comment
Не уверен, что вы делаете, но этот надежный код, здесь более конкретный xpath, если вы используете модуль макета заказа на продажу ‹xpath expr=//div[@class='row']/div[@class='col-xs-4 pull -right']/table/tr[2] position=after› - person ifixthat; 29.07.2015