[IMP] qweb: t-esc, t-raw and t-field 'ir.qweb.field' models with t-options

Remove 'field' from 'value_to_html' method attributes
't-esc' escape the result of the widget.
(Added 'remove_span' as option for monetary widget)

E.g.: <t t-esc="32" t-options='t-options='{"widget": "monetary", "display_currency": website.currency_id, "remove_span": True}'>
result: $ 365.00

Use t-options instead of t-field-options
Add backward compatibility
Remove 'values' attribute from record_to_html
Remove 'field' attribute from value_to_html
+ few fix for 'ir.qweb.field' and cache
This commit is contained in:
Christophe Matthieu
2016-07-05 19:12:01 +02:00
68 changed files with 764 additions and 682 deletions
@@ -50,13 +50,13 @@
</tr>
<tr t-if="get_partner_lines">
<th>Account Total</th>
<th class="text-right"><span t-esc="format(get_direction[6], 'monetary', res_company.currency_id)"/></th>
<th class="text-right"><span t-esc="format(get_direction[4], 'monetary', res_company.currency_id)"/></th>
<th class="text-right"><span t-esc="format(get_direction[3], 'monetary', res_company.currency_id)"/></th>
<th class="text-right"><span t-esc="format(get_direction[2], 'monetary', res_company.currency_id)"/></th>
<th class="text-right"><span t-esc="format(get_direction[1], 'monetary', res_company.currency_id)"/></th>
<th class="text-right"><span t-esc="format(get_direction[0], 'monetary', res_company.currency_id)"/></th>
<th class="text-right"><span t-esc="format(get_direction[5], 'monetary', res_company.currency_id)"/></th>
<th class="text-right"><span t-esc="get_direction[6]" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></th>
<th class="text-right"><span t-esc="get_direction[4]" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></th>
<th class="text-right"><span t-esc="get_direction[3]" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></th>
<th class="text-right"><span t-esc="get_direction[2]" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></th>
<th class="text-right"><span t-esc="get_direction[1]" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></th>
<th class="text-right"><span t-esc="get_direction[0]" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></th>
<th class="text-right"><span t-esc="get_direction[5]" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></th>
</tr>
</thead>
<tbody>
@@ -65,25 +65,25 @@
<span t-esc="partner['name']"/>
</td>
<td class="text-right">
<span t-esc="format(partner['direction'], 'monetary', res_company.currency_id)"/>
<span t-esc="partner['direction']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(partner['4'], 'monetary', res_company.currency_id)"/>
<span t-esc="partner['4']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(partner['3'], 'monetary', res_company.currency_id)"/>
<span t-esc="partner['3']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(partner['2'], 'monetary', res_company.currency_id)"/>
<span t-esc="partner['2']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(partner['1'], 'monetary', res_company.currency_id)"/>
<span t-esc="partner['1']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(partner['0'], 'monetary', res_company.currency_id)"/>
<span t-esc="partner['0']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(partner['total'], 'monetary', res_company.currency_id)"/>
<span t-esc="partner['total']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
</tbody>
+5 -5
View File
@@ -43,13 +43,13 @@
<span t-att-style="style" t-esc="a.get('name')"/>
</td>
<td class="text-right" style="white-space: text-nowrap;">
<span t-att-style="style" t-esc="format(a.get('debit'), 'monetary', res_company.currency_id)"/>
<span t-att-style="style" t-esc="a.get('debit')" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right" style="white-space: text-nowrap;">
<span t-att-style="style" t-esc="format(a.get('credit'), 'monetary', res_company.currency_id)"/>
<span t-att-style="style" t-esc="a.get('credit')" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right" style="white-space: text-nowrap;">
<span t-att-style="style" t-esc="format(a.get('balance'), 'monetary', res_company.currency_id)"/>
<span t-att-style="style" t-esc="a.get('balance')" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</t>
</tr>
@@ -73,7 +73,7 @@
<span style="color: white;" t-esc="'..' * a.get('level', 0)"/>
<span t-att-style="style" t-esc="a.get('name')"/>
</td>
<td class="text-right"><span t-att-style="style" t-esc="format(a.get('balance'), 'monetary', res_company.currency_id)"/></td>
<td class="text-right"><span t-att-style="style" t-esc="a.get('balance')" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</t>
</tr>
</tbody>
@@ -96,7 +96,7 @@
<span style="color: white;" t-esc="'..'"/>
<span t-att-style="style" t-esc="a.get('name')"/>
</td>
<td class="text-right"><span t-att-style="style" t-esc="format(a.get('balance'), 'monetary', res_company.currency_id)"/></td>
<td class="text-right"><span t-att-style="style" t-esc="a.get('balance')" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
<td class="text-right"><span t-att-style="style" t-esc="a.get('balance_cmp')"/></td>
</t>
</tr>
@@ -66,13 +66,13 @@
<span t-esc="account['name']"/>
</td>
<td class="text-right">
<span t-esc="format(account['debit'], 'monetary', res_company.currency_id)"/>
<span t-esc="account['debit']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(account['credit'], 'monetary', res_company.currency_id)"/>
<span t-esc="account['credit']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(account['balance'], 'monetary', res_company.currency_id)"/>
<span t-esc="account['balance']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td groups="base.group_multi_currency"/>
</tr>
@@ -84,13 +84,13 @@
<td><span t-esc="line['move_name']"/></td>
<td><span t-esc="line['lname']"/></td>
<td class="text-right">
<span t-esc="format(line['debit'], 'monetary', res_company.currency_id)"/>
<span t-esc="line['debit']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(line['credit'], 'monetary', res_company.currency_id)"/>
<span t-esc="line['credit']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(line['balance'], 'monetary', res_company.currency_id)"/>
<span t-esc="line['balance']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right" groups="base.group_multi_currency">
<span t-esc="line['amount_currency'] if line['amount_currency'] > 0.00 else ''"/>
+4 -4
View File
@@ -8,7 +8,7 @@
<div class="row">
<div name="invoice_address" class="col-xs-5 col-xs-offset-7">
<address t-field="o.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />
<span t-if="o.partner_id.vat">TIN: <span t-field="o.partner_id.vat"/></span>
</div>
</div>
@@ -85,7 +85,7 @@
</td>
<td class="text-right">
<span t-field="l.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
</tbody>
@@ -97,7 +97,7 @@
<tr class="border-black">
<td><strong>Subtotal</strong></td>
<td class="text-right">
<span t-field="o.amount_untaxed" t-field-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
<span t-field="o.amount_untaxed" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
<t t-foreach="o._get_tax_amount_by_group()" t-as="amount_by_group">
@@ -111,7 +111,7 @@
<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.currency_id}'/>
<span t-field="o.amount_total" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
</table>
+7 -7
View File
@@ -51,10 +51,10 @@
<td><span t-field="aml.account_id.code"/></td>
<td><span t-esc="aml.sudo().partner_id and aml.sudo().partner_id.name[:23] or ''"/></td>
<td><span t-esc="aml.name[:35]"/></td>
<td><span t-esc="format(aml.debit, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="format(aml.credit, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="aml.debit" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
<td><span t-esc="aml.credit" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
<td t-if="data['form']['amount_currency'] and aml.amount_currency">
<span t-esc="format(aml.amount_currency, 'monetary', aml.currency_id)"/>
<span t-esc="aml.amount_currency" t-options="{'widget': 'monetary', 'display_currency': aml.currency_id}"/>
</td>
</tr>
</tbody>
@@ -65,8 +65,8 @@
<table class="table table-condensed">
<tr>
<td><strong>Total</strong></td>
<td><span t-esc="format(sum_debit(data, o), 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="format(sum_credit(data, o), 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="sum_debit(data, o)" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
<td><span t-esc="sum_credit(data, o)" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
</table>
</div>
@@ -87,8 +87,8 @@
<t t-set="taxes" t-value="get_taxes(data, o)"/>
<tr t-foreach="taxes" t-as="tax">
<td><span t-esc="tax.name"/></td>
<td><span t-esc="format(taxes[tax]['base_amount'], 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="format(taxes[tax]['tax_amount'], 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="taxes[tax]['base_amount']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
<td><span t-esc="taxes[tax]['tax_amount']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
</tbody>
</table>
+6 -6
View File
@@ -44,10 +44,10 @@
<span t-esc="line['ref']"/>
</td>
<td class="text-right">
<span t-esc="format(line['debit'], 'monetary', currency)"/>
<span t-esc="line['debit']" t-options="{'widget': 'monetary', 'display_currency': currency}"/>
</td>
<td class="text-right">
<span t-esc="format(line['credit'], 'monetary', currency)"/>
<span t-esc="line['credit']" t-options="{'widget': 'monetary', 'display_currency': currency}"/>
</td>
<td class="text-center">
<span t-if="line['blocked']">x</span>
@@ -56,16 +56,16 @@
<tr>
<td colspan="3"></td>
<td><strong>Subtotal :</strong></td>
<td class="text-right"><span t-esc="format(Totals[o.id][currency]['due'], 'monetary', currency)"/></td>
<td class="text-right"><span t-esc="format(Totals[o.id][currency]['paid'], 'monetary', currency)"/></td>
<td class="text-right"><span t-esc="format(Totals[o.id][currency]['mat'], 'monetary', currency)"/></td>
<td class="text-right"><span t-esc="Totals[o.id][currency]['due']" t-options="{'widget': 'monetary', 'display_currency': currency}"/></td>
<td class="text-right"><span t-esc="Totals[o.id][currency]['paid']" t-options="{'widget': 'monetary', 'display_currency': currency}"/></td>
<td class="text-right"><span t-esc="Totals[o.id][currency]['mat']" t-options="{'widget': 'monetary', 'display_currency': currency}"/></td>
<td></td>
</tr>
<tr>
<td colspan="3"></td>
<td><strong>Balance :</strong></td>
<td class="text-right">
<span t-esc="format(Totals[o.id][currency]['due'] - Totals[o.id][currency]['paid'], 'monetary', currency)"/>
<span t-esc="Totals[o.id][currency]['due'] - Totals[o.id][currency]['paid']" t-options="{'widget': 'monetary', 'display_currency': currency}"/>
</td>
</tr>
</table>
@@ -46,13 +46,13 @@
- <strong t-esc="o.name"/>
</td>
<td class="text-right">
<strong t-esc="format(sum_partner(data, o, 'debit'), 'monetary', res_company.currency_id)"/>
<strong t-esc="sum_partner(data, o, 'debit')" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<strong t-esc="format(sum_partner(data, o, 'credit'), 'monetary', res_company.currency_id)"/>
<strong t-esc="sum_partner(data, o, 'credit')" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<strong t-esc="format(sum_partner(data, o, 'debit - credit'), 'monetary', res_company.currency_id)"/>
<strong t-esc="sum_partner(data, o, 'debit - credit')" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr t-foreach="lines(data, o)" t-as="line">
@@ -69,16 +69,16 @@
<span t-esc="line['displayed_name']"/>
</td>
<td class="text-right">
<span t-esc="format(line['debit'], 'monetary', res_company.currency_id)"/>
<span t-esc="line['debit']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(line['credit'], 'monetary', res_company.currency_id)"/>
<span t-esc="line['credit']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(line['progress'], 'monetary', res_company.currency_id)"/>
<span t-esc="line['progress']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td t-if="amount_currency">
<span t-esc="format(line['amount_currency'], 'monetary', line['currency_id'])"/>
<span t-esc="line['amount_currency']" t-options="{'widget': 'monetary', 'display_currency': line['currency_id']}"/>
</td>
</tr>
</tbody>
+3 -3
View File
@@ -50,13 +50,13 @@
<span t-att-style="style" t-esc="account['name']"/>
</td>
<td class="text-right">
<span t-att-style="style" t-esc="format(account['debit'], 'monetary', res_company.currency_id)"/>
<span t-att-style="style" t-esc="account['debit']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-att-style="style" t-esc="format(account['credit'], 'monetary', res_company.currency_id)"/>
<span t-att-style="style" t-esc="account['credit']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-att-style="style" t-esc="format(account['balance'], 'monetary', res_company.currency_id)"/>
<span t-att-style="style" t-esc="account['balance']" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
</tbody>
+1 -1
View File
@@ -59,7 +59,7 @@
<th>Address</th>
<td t-att-class="(not company_id.partner_id.street or not company_id.partner_id.zip) and 'danger'">
<span t-field="company_id.partner_id"
t-field-options='{"widget": "contact", "fields": ["address"], "no_marker": True}'/>
t-options='{"widget": "contact", "fields": ["address"], "no_marker": True}'/>
</td>
<td>
<a class="fa fa-arrow-right" t-attf-href="#{prepare_backend_url('base.action_res_company_form', 'form')}&amp;id=#{company_id.id}">
@@ -7,11 +7,14 @@ class TestFloatExport(common.TransactionCase):
self.Model = self.registry('decimal.precision.test')
def get_converter(self, name):
converter = self.registry('ir.qweb.field.float')
field = self.Model._fields[name]
float_obj = self.registry('ir.qweb.field.float')
_, precision = self.Model._fields[name].digits or (None, None)
return lambda value, options=None: converter.value_to_html(
self.cr, self.uid, value, field, options=options, context=None)
def converter(value, options=None):
record = self.Model.new(self.cr, self.uid, {name: value}, context=None)
return float_obj.record_to_html(
self.cr, self.uid, record, name, options or {}, context=None)
return converter
def test_basic_float(self):
converter = self.get_converter('float')
@@ -30,13 +33,13 @@ class TestFloatExport(common.TransactionCase):
converter(42.12345),
"42.12")
converter = self.get_converter('float_4')
converter = self.get_converter('float') # don't use float_4 because the field value 42.12345 is already orm converted to 42.1235
self.assertEqual(
converter(42.0),
converter(42.0, {'precision': 4}),
'42.0000')
self.assertEqual(
converter(42.12345),
'42.1234')
converter(42.12345, {'precision': 4}),
'42.1235')
def test_precision_domain(self):
DP = self.registry('decimal.precision')
@@ -57,7 +60,7 @@ class TestFloatExport(common.TransactionCase):
converter(42.0, {'decimal_precision': 'B'}),
'42.000000')
converter = self.get_converter('float_4')
converter = self.get_converter('float') # don't use float_4 because the field value 42.12345 is orm converted to 42.1235
self.assertEqual(
converter(42.12345, {'decimal_precision': 'A'}),
'42.12')
@@ -18,7 +18,7 @@
<img t-att-src="'data:image/png;base64,%s' % o.event_id.organizer_id.company_id.logo_web" style="max-height:1cm; max-width:4cm;"/>
</span>
<h5 t-field="o.event_id.name"/>
<h5>( <i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="o.event_id.date_begin" t-field-options='{"hide_seconds": True}'> </span> <i>to</i> <span itemprop="endDate" t-field="o.event_id.date_end" t-field-options='{"hide_seconds": True}'> </span> )</h5>
<h5>( <i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="o.event_id.date_begin" t-options='{"hide_seconds": True}'> </span> <i>to</i> <span itemprop="endDate" t-field="o.event_id.date_end" t-options='{"hide_seconds": True}'> </span> )</h5>
</div>
<div class="row">
<div class="col-xs-12 text-center" id="o_event_name">
@@ -69,7 +69,7 @@
</div>
</span>
<h4 t-field="event.name"/>
<h5>( <i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="event.date_begin" t-field-options='{"hide_seconds": True}'> </span> <i>to</i> <span itemprop="endDate" t-field="event.date_end" t-field-options='{"hide_seconds": True}'> </span> )</h5>
<h5>( <i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="event.date_begin" t-options='{"hide_seconds": True}'> </span> <i>to</i> <span itemprop="endDate" t-field="event.date_end" t-options='{"hide_seconds": True}'> </span> )</h5>
</div>
</div>
<div class="row" t-ignore="true">
@@ -64,7 +64,7 @@
</td>
<td class="text-right">
<span t-field="line.total_amount"
t-field-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
</tbody>
@@ -77,7 +77,7 @@
<td><strong>Total</strong></td>
<td class="text-right">
<span t-field="o.total_amount"
t-field-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
</table>
+2 -2
View File
@@ -55,7 +55,7 @@
</td>
<td>
<span t-field="line.unit_amount"
t-field-options='{"widget": "monetary", "display_currency": line.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": line.currency_id}'/>
</td>
<td class="text-center">
<span t-field="line.quantity"/>
@@ -75,7 +75,7 @@
</td>
<td class="text-right">
<span t-field="line.total_amount"
t-field-options='{"widget": "monetary", "display_currency": line.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": line.currency_id}'/>
</td>
</tr>
</t>
+1 -1
View File
@@ -20,7 +20,7 @@
<td><strong>Address</strong></td>
<td colspan="3">
<div t-field="o.employee_id.address_home_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
</td>
</tr>
<tr>
@@ -20,7 +20,7 @@
<td><strong>Address</strong></td>
<td colspan="3">
<div t-field="o.employee_id.address_home_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
</td>
</tr>
<tr>
+1 -1
View File
@@ -12,7 +12,7 @@ class LivechatController(http.Controller):
def livechat_lib(self, ext, **kwargs):
# _get_asset return the bundle html code (script and link list) but we want to use the attachment content
xmlid = 'im_livechat.external_lib'
files, remains = request.registry["ir.qweb"]._get_asset_content(request.cr, request.uid, xmlid, request.context)
files, remains = request.env["ir.qweb"]._get_asset_content(xmlid, options=request.context)
asset = AssetsBundle(xmlid, files, remains)
mock_attachment = getattr(asset, ext)()
+137 -137
View File
@@ -33,11 +33,11 @@
<tr>
<td>Capital souscrit - non appel&#xE9;</td>
<td class="text-right">
<span t-esc="format(bavar1, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar1" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td></td>
<td class="text-right">
<span t-esc="format(bavar1, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar1" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -59,83 +59,83 @@
<tr>
<td>Frais d'&#xE9;tablissement</td>
<td class="text-right">
<span t-esc="format(bavar2, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar2" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar2b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar2b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar2+bavar2b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar2+bavar2b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Frais de recherche et de d&#xE9;veloppement</td>
<td class="text-right">
<span t-esc="format(bavar3, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar3" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar3b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar3b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar3+bavar3b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar3+bavar3b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Concessions, brevets, licences,..., droits et valeurs similaires</td>
<td class="text-right">
<span t-esc="format(bavar4, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar4" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar4b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar4b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar4+bavar4b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar4+bavar4b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Fonds commercial</td>
<td class="text-right">
<span t-esc="format(bavar5, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar5" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar5b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar5b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar5+bavar5b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar5+bavar5b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Autres</td>
<td class="text-right">
<span t-esc="format(bavar6, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar6" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar6b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar6b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar6+bavar6b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar6+bavar6b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Immobilisations incorporelles en cours</td>
<td class="text-right">
<span t-esc="format(bavar7, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar7" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar7b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar7b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar7+bavar7b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar7+bavar7b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Avances et acomptes</td>
<td class="text-right">
<span t-esc="format(bavar8, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar8" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td></td>
<td class="text-right">
<span t-esc="format(bavar8, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar8" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -149,71 +149,71 @@
<tr>
<td>Terrains</td>
<td class="text-right">
<span t-esc="format(bavar9, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar9" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar9b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar9b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar9+bavar9b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar9+bavar9b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Constructions</td>
<td class="text-right">
<span t-esc="format(bavar10, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar10" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar10b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar10b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar10+bavar10b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar10+bavar10b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Installations techniques,mat&#xE9;riel et outillage</td>
<td class="text-right">
<span t-esc="format(bavar11, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar11" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar11b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar11b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar11+bavar11b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar11+bavar11b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Autres</td>
<td class="text-right">
<span t-esc="format(bavar12, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar12" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar12b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar12b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar12+bavar12b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar12+bavar12b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Immobilisations corporelles en cours</td>
<td class="text-right">
<span t-esc="format(bavar13, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar13" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar13b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar13b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar13+bavar13b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar13+bavar13b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Avances et acomptes</td>
<td class="text-right">
<span t-esc="format(bavar14, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar14" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td></td>
<td class="text-right">
<span t-esc="format(bavar14, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar14" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -227,73 +227,73 @@
<tr>
<td>Participations</td>
<td class="text-right">
<span t-esc="format(bavar15, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar15" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar15b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar15b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar15+bavar15b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar15+bavar15b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Cr&#xE9;ances rattach&#xE9;es &#xE0; des participations</td>
<td class="text-right">
<span t-esc="format(bavar16, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar16" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar16b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar16b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar16+bavar16b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar16+bavar16b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Titres immobilis&#xE9;s de l'activit&#xE9; de portefeuille</td>
<td class="text-right">
<span t-esc="format(bavar17, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar17" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar17b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar17b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar17+bavar17b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar17+bavar17b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Autres titres immobilis&#xE9;s</td>
<td class="text-right">
<span t-esc="format(bavar18, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar18" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar18b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar18b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar18+bavar18b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar18+bavar18b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Pr&#xEA;ts</td>
<td class="text-right">
<span t-esc="format(bavar19, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar19" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar19b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar19b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar19+bavar19b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar19+bavar19b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Autres</td>
<td class="text-right">
<span t-esc="format(bavar20, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar20" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar20b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar20b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar20+bavar20b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar20+bavar20b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -301,13 +301,13 @@
<strong>TOTAL I</strong>
</td>
<td class="text-right">
<span t-esc="format(at1a, 'monetary', res_company.currency_id)"/>
<span t-esc="at1a" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-at1b, 'monetary', res_company.currency_id)"/>
<span t-esc="-at1b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(at1, 'monetary', res_company.currency_id)"/>
<span t-esc="at1" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -325,59 +325,59 @@
<tr>
<td>Mati&#xE8;res premi&#xE8;res et autres approvisionnements</td>
<td class="text-right">
<span t-esc="format(bavar21, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar21" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar21b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar21b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar21+bavar21b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar21+bavar21b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>En-cours de production [biens et services]</td>
<td class="text-right">
<span t-esc="format(bavar22, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar22" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar22b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar22b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar22+bavar22b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar22+bavar22b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Produits interm&#xE9;diaires et finis</td>
<td class="text-right">
<span t-esc="format(bavar23, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar23" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar23b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar23b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar23+bavar23b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar23+bavar23b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Marchandises</td>
<td class="text-right">
<span t-esc="format(bavar24, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar24" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar24b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar24b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar24+bavar24b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar24+bavar24b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Avances et acomptes vers&#xE9;s sur commandes</td>
<td class="text-right">
<span t-esc="format(bavar25, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar25" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td></td>
<td class="text-right">
<span t-esc="format(bavar25, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar25" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -389,35 +389,35 @@
<tr>
<td>Cr&#xE9;ances clients et comptes rattach&#xE9;s</td>
<td class="text-right">
<span t-esc="format(bavar26, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar26" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar26b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar26b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar26+bavar26b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar26+bavar26b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Autres</td>
<td class="text-right">
<span t-esc="format(bavar27, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar27" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar27b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar27b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar27+bavar27b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar27+bavar27b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Capital souscrit - appel&#xE9; , non vers&#xE9;</td>
<td class="text-right">
<span t-esc="format(bavar28, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar28" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td></td>
<td class="text-right">
<span t-esc="format(bavar28, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar28" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -429,55 +429,55 @@
<tr>
<td>Actions propres</td>
<td class="text-right">
<span t-esc="format(bavar29, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar29" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar29b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar29b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar29+bavar29b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar29+bavar29b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Autres titres</td>
<td class="text-right">
<span t-esc="format(bavar30, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar30" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-bavar30b, 'monetary', res_company.currency_id)"/>
<span t-esc="-bavar30b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(bavar30+bavar30b, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar30+bavar30b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Instruments de tr&#xE9;sorerie</td>
<td class="text-right">
<span t-esc="format(bavar31, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar31" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td></td>
<td class="text-right">
<span t-esc="format(bavar31, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar31" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Disponibilit&#xE9;s</td>
<td class="text-right">
<span t-esc="format(bavar32, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar32" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td></td>
<td class="text-right">
<span t-esc="format(bavar32, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar32" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Charges constat&#xE9;s d'avance</td>
<td class="text-right">
<span t-esc="format(bavar33, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar33" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td></td>
<td class="text-right">
<span t-esc="format(bavar33, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar33" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -485,43 +485,43 @@
<strong>TOTAL II</strong>
</td>
<td class="text-right">
<span t-esc="format(at2a, 'monetary', res_company.currency_id)"/>
<span t-esc="at2a" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-at2b, 'monetary', res_company.currency_id)"/>
<span t-esc="-at2b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(at2, 'monetary', res_company.currency_id)"/>
<span t-esc="at2" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Charges &#xE0; r&#xE9;partir sur plusieurs exercices ( III )</td>
<td class="text-right">
<span t-esc="format(bavar34, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar34" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td></td>
<td class="text-right">
<span t-esc="format(bavar34, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar34" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Primes de remboursement des emprunts ( IV )</td>
<td class="text-right">
<span t-esc="format(bavar35, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar35" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td></td>
<td class="text-right">
<span t-esc="format(bavar35, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar35" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>&#xC9;carts de conversion actif ( V )</td>
<td class="text-right">
<span t-esc="format(bavar36, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar36" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td></td>
<td class="text-right">
<span t-esc="format(bavar36, 'monetary', res_company.currency_id)"/>
<span t-esc="bavar36" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -529,13 +529,13 @@
<strong>TOTAL ACTIF ( I + II + III + IV + V )</strong>
</td>
<td class="text-right">
<span t-esc="format(at1a+at2a, 'monetary', res_company.currency_id)"/>
<span t-esc="at1a+at2a" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(-at1b-at2b, 'monetary', res_company.currency_id)"/>
<span t-esc="-at1b-at2b" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
<td class="text-right">
<span t-esc="format(actif, 'monetary', res_company.currency_id)"/>
<span t-esc="actif" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
</table>
@@ -549,19 +549,19 @@
</tr>
<tr>
<td>Capital [dont vers&#xE9;...]</td>
<td><span t-esc="format(bpvar1, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar1" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Primes d'&#xE9;mission, de fusion, d'apport</td>
<td><span t-esc="format(bpvar2, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar2" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>&#xC9;carts de r&#xE9;&#xE9;valuation</td>
<td><span t-esc="format(bpvar3, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar3" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>&#xC9;cart d'&#xE9;quivalence</td>
<td><span t-esc="format(bpvar4, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar4" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td><strong>R&#xC9;SERVES</strong></td>
@@ -569,37 +569,37 @@
</tr>
<tr>
<td>R&#xE9;serve l&#xE9;gale</td>
<td><span t-esc="format(bpvar5, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar5" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>R&#xE9;serves statutaires ou contractuelles</td>
<td><span t-esc="format(bpvar6, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar6" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>R&#xE9;serves r&#xE9;glement&#xE9;es</td><td><span t-esc="format(bpvar7, 'monetary', res_company.currency_id)"/></td></tr>
<td>R&#xE9;serves r&#xE9;glement&#xE9;es</td><td><span t-esc="bpvar7" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td></tr>
<tr>
<td>Autres r&#xE9;serves</td>
<td><span t-esc="format(bpvar8, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar8" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Report &#xE0; nouveau</td>
<td><span t-esc="format(bpvar9, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar9" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td><strong>R&#xC9;SULTAT DE L'EXERCICE [b&#xE9;n&#xE9;fice ou perte]</strong></td>
<td><span t-esc="format(bpvar10, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar10" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Subventions d'investissement</td>
<td><span t-esc="format(bpvar11, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar11" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Provisions r&#xE9;glement&#xE9;es</td>
<td><span t-esc="format(bpvar12, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar12" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td class="text-right"><strong>TOTAL I</strong></td>
<td><span t-esc="format(pt1, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="pt1" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td><strong>PROVISIONS</strong></td>
@@ -607,15 +607,15 @@
</tr>
<tr>
<td>Provisions pour risques</td>
<td><span t-esc="format(bpvar13, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar13" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Provisions pour charges</td>
<td><span t-esc="format(bpvar14, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar14" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td class="text-right"><strong>TOTAL II</strong></td>
<td><span t-esc="format(pt2, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="pt2" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td><strong>DETTES</strong></td>
@@ -623,59 +623,59 @@
</tr>
<tr>
<td>Emprunts obligataires convertibles</td>
<td><span t-esc="format(bpvar15, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar15" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Autres emprunts obligataires</td>
<td><span t-esc="format(bpvar16, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar16" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Emprunts et dettes aupr&#xE8;s des &#xE9;tablissements de cr&#xE9;dit</td>
<td><span t-esc="format(bpvar17, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar17" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Emprunts et dettes financi&#xE8;res diverses</td>
<td><span t-esc="format(bpvar18, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar18" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Avances et acomptes re&#xE7;us sur commandes en cours</td>
<td><span t-esc="format(bpvar19, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar19" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Dettes fournisseurs et comptes rattach&#xE9;s </td>
<td><span t-esc="format(bpvar20, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar20" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Dettes fiscales et sociales</td>
<td><span t-esc="format(bpvar21, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar21" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Dettes sur immobilisations et comptes rattach&#xE9;s</td>
<td><span t-esc="format(bpvar22, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar22" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Autres dettes</td>
<td><span t-esc="format(bpvar23, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar23" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Instruments de tr&#xE9;sorerie</td>
<td><span t-esc="format(bpvar24, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar24" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>Produits constat&#xE9;s d'avance</td>
<td><span t-esc="format(bpvar25, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar25" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td class="text-right"><strong>TOTAL III</strong></td>
<td><span t-esc="format(pt3, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="pt3" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>&#xC9;carts de conversion passif <font face="Times-Roman">( IV )</font></td>
<td><span t-esc="format(bpvar26, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="bpvar26" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td><strong>TOTAL G&#xC9;N&#xC9;RAL (I + II + III + IV)</strong></td>
<td><span t-esc="format(passif, 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="passif" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
<tr>
<td>&amp;nbsp;</td>
@@ -683,7 +683,7 @@
</tr>
<tr>
<td><strong>ACTIF - PASSIF</strong></td>
<td><span t-esc="format(round(actif-passif,2), 'monetary', res_company.currency_id)"/></td>
<td><span t-esc="round(actif-passif,2)" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
</tbody>
</table>
+53 -53
View File
@@ -35,61 +35,61 @@
<tr>
<td>Achat de marchandises</td>
<td>
<span class="text-right" t-esc="format(cdrc1, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc1" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Variation des stocks</td>
<td>
<span class="text-right" t-esc="format(cdrc2, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc2" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Achats de mati&#xE8;res premi&#xE8;res et autres approvisionnements</td>
<td>
<span class="text-right" t-esc="format(cdrc3, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc3" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Variation des stocks</td>
<td>
<span class="text-right" t-esc="format(cdrc4, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc4" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Autres achats et charges externes</td>
<td>
<span class="text-right" t-esc="format(cdrc5, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc5" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Redevances de cr&#xE9;dit-bail mobilier</td>
<td>
<span class="text-right" t-esc="format(cdrc6, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc6" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Redevances de cr&#xE9;dit-bail immobilier</td>
<td>
<span class="text-right" t-esc="format(cdrc7, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc7" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Imp&#xF4;ts, taxes et versements assimil&#xE9;s</td>
<td>
<span class="text-right" t-esc="format(cdrc8, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc8" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Salaires et traitements</td>
<td>
<span class="text-right" t-esc="format(cdrc9, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc9" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Charges sociales</td>
<td>
<span class="text-right" t-esc="format(cdrc10, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc10" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -99,43 +99,43 @@
<tr>
<td>Sur immobilisations : dotations aux amortissements</td>
<td>
<span class="text-right" t-esc="format(cdrc11, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc11" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Sur immobilisations : dotations aux d&#xE9;pr&#xE9;ciations</td>
<td>
<span class="text-right" t-esc="format(cdrc12, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc12" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Sur actif circulant : dotations aux d&#xE9;pr&#xE9;ciations</td>
<td>
<span class="text-right" t-esc="format(cdrc13, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc13" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Dotations aux provisions</td>
<td>
<span class="text-right" t-esc="format(cdrc14, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc14" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Autres charges</td>
<td>
<span class="text-right" t-esc="format(cdrc15, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc15" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td class="text-right"><strong>TOTAL I</strong></td>
<td>
<span class="text-right" t-esc="format(ct1, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="ct1" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td><strong>Quotes-parts de r&#xE9;sultat sur op&#xE9;rations faites en commun ( II )</strong></td>
<td>
<span class="text-right" t-esc="format(cdrc16, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc16" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -145,31 +145,31 @@
<tr>
<td>Dotations aux amortissements, aux d&#xE9;pr&#xE9;ciations et aux provisions</td>
<td>
<span class="text-right" t-esc="format(cdrc17, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc17" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Int&#xE9;r&#xEA;ts et charges assimil&#xE9;es</td>
<td>
<span class="text-right" t-esc="format(cdrc18, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc18" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Diff&#xE9;rences n&#xE9;gatives de change</td>
<td>
<span class="text-right" t-esc="format(cdrc19, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc19" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Charges nettes sur cessions de valeurs mobili&#xE8;res de placement</td>
<td>
<span class="text-right" t-esc="format(cdrc20, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc20" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td class="text-right"><strong>TOTAL III</strong></td>
<td>
<span class="text-right" t-esc="format(ct3, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="ct3" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -179,43 +179,43 @@
<tr>
<td>Sur op&#xE9;rations de gestion</td>
<td>
<span class="text-right" t-esc="format(cdrc21, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc21" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Sur op&#xE9;rations en capital</td>
<td>
<span class="text-right" t-esc="format(cdrc22, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc22" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Dotations aux amortissements, aux d&#xE9;pr&#xE9;ciations et aux provisions</td>
<td>
<span class="text-right" t-esc="format(cdrc23, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc23" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td class="text-right"><strong>TOTAL IV</strong></td>
<td>
<span class="text-right" t-esc="format(ct4, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="ct4" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td><strong>Participation des salariés aux résultats ( V )</strong></td>
<td>
<span class="text-right" t-esc="format(cdrc24, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc24" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td><strong>Impôts sur les bénéfices ( VI )</strong></td>
<td>
<span class="text-right" t-esc="format(cdrc25, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrc25" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td class="text-right"><strong>TOTAL CHARGES ( I + II + III + IV+ V+ VI )</strong></td>
<td>
<span class="text-right" t-esc="format(charges, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="charges" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
@@ -236,67 +236,67 @@
<tr>
<td>Vente de marchandises</td>
<td>
<span class="text-right" t-esc="format(cdrp1, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp1" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Production vendue [biens et services]</td>
<td>
<span class="text-right" t-esc="format(cdrp2, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp2" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td><strong>Sous-total A - Montant net du chiffre d'affaires</strong></td>
<td>
<span class="text-right" t-esc="format(pta, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="pta" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Production stock&#xE9;e</td>
<td>
<span class="text-right" t-esc="format(cdrp3, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp3" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Production immobilis&#xE9;e</td>
<td>
<span class="text-right" t-esc="format(cdrp4, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp4" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Subventions d'exploitation</td>
<td>
<span class="text-right" t-esc="format(cdrp5, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp5" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Reprises sur provisions, d&#xE9;pr&#xE9;ciations (et amortissements) et transferts de charges</td>
<td>
<span class="text-right" t-esc="format(cdrp6, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp6" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Autres produits</td>
<td>
<span class="text-right" t-esc="format(cdrp7, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp7" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td><strong>Sous-total B</strong></td>
<td>
<span class="text-right" t-esc="format(ptb, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="ptb" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td class="text-right"><strong>TOTAL I ( A + B )</strong></td>
<td>
<span class="text-right" t-esc="format(pt1, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="pt1" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td><strong>Quotes-parts de r&#xE9;sultat sur op&#xE9;rations faites en commun (II)</strong></td>
<td>
<span class="text-right" t-esc="format(cdrp8, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp8" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -306,43 +306,43 @@
<tr>
<td>De participation</td>
<td>
<span class="text-right" t-esc="format(cdrp9, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp9" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>D'autres valeurs mobili&#xE8;res et cr&#xE9;ances de l'actif immobilis&#xE9;</td>
<td>
<span class="text-right" t-esc="format(cdrp10, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp10" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Autres int&#xE9;r&#xEA;ts et produits assimil&#xE9;s</td>
<td>
<span class="text-right" t-esc="format(cdrp11, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp11" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Reprises sur provisions, d&#xE9;pr&#xE9;ciations et transferts de charges</td>
<td>
<span class="text-right" t-esc="format(cdrp12, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp12" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Diff&#xE9;rences positives de change</td>
<td>
<span class="text-right" t-esc="format(cdrp13, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp13" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Produits nets sur cessions de valeurs mobili&#xE8;res de placement</td>
<td>
<span class="text-right" t-esc="format(cdrp14, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp14" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td class="text-right"><strong>TOTAL III</strong></td>
<td>
<span class="text-right" t-esc="format(pt3, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="pt3" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
@@ -352,37 +352,37 @@
<tr>
<td>Sur op&#xE9;rations de gestion</td>
<td>
<span class="text-right" t-esc="format(cdrp15, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp15" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Sur op&#xE9;rations en capital</td>
<td>
<span class="text-right" t-esc="format(cdrp16, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp16" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td>Reprises sur provisions, d&#xE9;pr&#xE9;ciations et transferts de charges</td>
<td>
<span class="text-right" t-esc="format(cdrp17, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="cdrp17" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td class="text-right"><strong>TOTAL IV</strong></td>
<td>
<span class="text-right" t-esc="format(pt4, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="pt4" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td class="text-right"><strong>TOTAL DES PRODUITS ( I + II + III + IV )</strong></td>
<td>
<span class="text-right" t-esc="format(produits, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="produits" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
<tr>
<td class="text-right"><strong>PRODUITS - CHARGES</strong></td>
<td>
<span class="text-right" t-esc="format(produits-charges, 'monetary', res_company.currency_id)"/>
<span class="text-right" t-esc="produits-charges" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/>
</td>
</tr>
</tbody>
@@ -17,7 +17,7 @@
<tr>
<td>
<div t-field="o.employee_id.company_id.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />SIRET:
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />SIRET:
<span t-esc="o.employee_id.company_id.siret or '_'"/> APE:
<span t-esc="o.employee_id.company_id.ape or '_'"/>
</td>
@@ -25,7 +25,7 @@
<tr>
<td>
<div t-field="o.employee_id.address_home_id"
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
</td>
</tr>
</table>
@@ -20,7 +20,7 @@
<td><strong>Address</strong></td>
<td colspan="3">
<div t-field="o.employee_id.address_home_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
</td>
</tr>
<tr>
@@ -9,7 +9,7 @@
<div class="row">
<div class="col-xs-5 col-xs-offset-7">
<div t-field="user.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />
</div>
</div>
@@ -51,7 +51,7 @@
</td>
<td class="text-right">
<span t-field="line.price"
t-field-options='{"widget": "monetary", "display_currency": user.company_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": user.company_id.currency_id}'/>
</td>
</tr>
</t>
@@ -14,19 +14,19 @@
<div t-if="o.partner_invoice_id">
<strong t-if="o.address_id != o.partner_invoice_id">Invoice address: </strong>
<div t-field="o.partner_invoice_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
<p t-if="o.partner_id.vat">VAT: <span t-field="o.partner_id.vat"/></p>
</div>
<div t-if="o.address_id != o.partner_invoice_id">
<strong>Shipping address :</strong>
<div t-field="o.address_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
<p t-if="o.partner_id.vat">VAT: <span t-field="o.partner_id.vat"/></p>
</div>
</div>
<div class="col-xs-5 col-xs-offset-1">
<div t-field="o.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />
</div>
</div>
@@ -88,7 +88,7 @@
</td>
<td class="text-right">
<span t-field="line.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": o.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.pricelist_id.currency_id}'/>
</td>
</t>
</tr>
@@ -112,7 +112,7 @@
</td>
<td class="text-right">
<span t-field="fees.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": o.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.pricelist_id.currency_id}'/>
</td>
</t>
</tr>
@@ -127,21 +127,21 @@
<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}'/>
t-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}'/>
t-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}'/>
t-options='{"widget": "monetary", "display_currency": o.pricelist_id.currency_id}'/>
</td>
</tr>
</table>
@@ -34,11 +34,11 @@
</div>
<div class="col-xs-3">
<strong>Starting Balance</strong>:<br/>
<span t-field="o.balance_start" t-field-options='{"widget": "monetary", "display_currency": res_company.currency_id}'/>
<span t-field="o.balance_start" t-options='{"widget": "monetary", "display_currency": res_company.currency_id}'/>
</div>
<div class="col-xs-3">
<strong>Ending Balance</strong>:<br/>
<span t-field="o.balance_end_real" t-field-options='{"widget": "monetary", "display_currency": res_company.currency_id}'/>
<span t-field="o.balance_end_real" t-options='{"widget": "monetary", "display_currency": res_company.currency_id}'/>
</div>
</div>
@@ -56,7 +56,7 @@
<td><span t-esc="line.partner_id.name"/></td>
<td class="text-right">
<span t-field="line.amount"
t-field-options='{"widget": "monetary", "display_currency": res_company.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": res_company.currency_id}'/>
</td>
</tr>
</tbody>
@@ -67,7 +67,7 @@
<table class="table table-condensed">
<tr class="border-black">
<td><strong>Total</strong></td>
<td class="text-right"><span t-esc="format(sum([line.amount for line in o.line_ids]), 'monetary', res_company.currency_id)"/></td>
<td class="text-right"><span t-esc="sum([line.amount for line in o.line_ids])" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
</tr>
</table>
</div>
@@ -11,18 +11,18 @@
<strong>Shipping address:</strong>
<div t-if="o.dest_address_id">
<div t-field="o.dest_address_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
</div>
<div t-if="not o.dest_address_id and o.picking_type_id and o.picking_type_id.warehouse_id">
<span t-field="o.picking_type_id.warehouse_id.name"/>
<div t-field="o.picking_type_id.warehouse_id.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
</div>
</div>
<div class="col-xs-5 col-xs-offset-1">
<div t-field="o.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
<p t-if="o.partner_id.vat">VAT: <span t-field="o.partner_id.vat"/></p>
</div>
</div>
@@ -76,7 +76,7 @@
</td>
<td class="text-right">
<span t-field="line.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
</tbody>
@@ -89,21 +89,21 @@
<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.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.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.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.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.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
</table>
@@ -12,17 +12,17 @@
<strong>Shipping address:</strong>
<div t-if="o.dest_address_id">
<div t-field="o.dest_address_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
</div>
<div t-if="not o.dest_address_id and o.picking_type_id.warehouse_id">
<span t-field="o.picking_type_id.warehouse_id.name"/>
<div t-field="o.picking_type_id.warehouse_id.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
</div>
</div>
<div class="col-xs-5 col-xs-offset-1">
<div t-field="o.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
<p t-if="o.partner_id.vat">VAT: <span t-field="o.partner_id.vat"/></p>
</div>
</div>
+1 -1
View File
@@ -12,7 +12,7 @@ class BarcodeConverter(osv.AbstractModel):
_name = 'ir.qweb.field.barcode'
_inherit = 'ir.qweb.field'
def value_to_html(self, cr, uid, value, field, options=None, context=None):
def value_to_html(self, cr, uid, value, options, context=None):
options = options or {}
barcode_type = options.get('type', 'Code128')
barcode = self.pool['report'].barcode(
+1 -1
View File
@@ -108,7 +108,7 @@
<div class="row">
<div class="col-xs-3" name="company_address">
<div t-field="company.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'
style="border-bottom: 1px solid black;"/>
</div>
</div>
@@ -7,7 +7,7 @@
<div class="row">
<div class="col-xs-5 col-xs-offset-7">
<address t-field="o.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />
<span t-field="o.partner_id.vat"/>
</div>
</div>
@@ -67,7 +67,7 @@
<td t-if="display_discount" groups="sale.group_discount_per_so_line"><span t-field="l.discount"/></td>
<td class="text-right">
<span t-field="l.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
</tbody>
@@ -79,19 +79,19 @@
<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.currency_id}'/>
<span t-field="o.amount_untaxed" t-options='{"widget": "monetary", "display_currency": o.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.currency_id}'/>
<span t-field="o.amount_tax" t-options='{"widget": "monetary", "display_currency": o.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.currency_id}'/>
<span t-field="o.amount_total" t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
</table>
@@ -112,7 +112,7 @@
<td><span t-field="t.name"/></td>
<td class="text-right">
<span t-field="t.amount"
t-field-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
</tbody>
@@ -49,11 +49,11 @@
</td>
<td class="text-right" groups="sale.group_show_price_subtotal">
<span t-field="l.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
<td class="text-right" groups="sale.group_show_price_total">
<span t-field="l.price_total"
t-field-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": o.currency_id}'/>
</td>
</tr>
</t>
@@ -63,7 +63,7 @@
<td colspan="6">
<strong>Subtotal: </strong>
<t t-set="subtotal" t-value="sum(line.price_subtotal for line in layout_category['lines'])"/>
<span t-esc="format(subtotal, 'monetary', o.currency_id)"/>
<span t-esc="subtotal" t-options="{'widget': 'monetary', 'display_currency': o.currency_id}"/>
</td>
</tr>
</t>
@@ -87,12 +87,12 @@
<strong t-if="o.partner_shipping_id == o.partner_id">Invoicing and shipping address:</strong>
<strong t-if="o.partner_shipping_id != o.partner_id">Invoicing address:</strong>
<div t-field="o.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
<span t-if="o.partner_id.vat">TIN: <span t-field="o.partner_id.vat"/></span>
<div t-if="o.partner_shipping_id != o.partner_id" class="mt8">
<strong>Shipping address:</strong>
<div t-field="o.partner_shipping_id"
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
<span t-if="o.partner_id.vat">TIN: <span t-field="o.partner_id.vat"/></span>
</div>
</div>
+8 -8
View File
@@ -11,18 +11,18 @@
<strong t-if="doc.partner_shipping_id == doc.partner_invoice_id">Invoicing and shipping address:</strong>
<strong t-if="doc.partner_shipping_id != doc.partner_invoice_id">Invoicing address:</strong>
<div t-field="doc.partner_invoice_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
<p t-if="doc.partner_id.vat">VAT: <span t-field="doc.partner_id.vat"/></p>
<div t-if="doc.partner_shipping_id != doc.partner_invoice_id" class="mt8">
<strong>Shipping address:</strong>
<div t-field="doc.partner_shipping_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
<p t-if="doc.partner_id.vat">VAT: <span t-field="doc.partner_id.vat"/></p>
</div>
</div>
<div class="col-xs-5 col-xs-offset-1">
<div t-field="doc.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />
t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}' />
</div>
</div>
@@ -98,11 +98,11 @@
</td>
<td class="text-right" groups="sale.group_show_price_subtotal">
<span t-field="l.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/>
</td>
<td class="text-right" groups="sale.group_show_price_total">
<span t-field="l.price_total"
t-field-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/>
</td>
</tr>
</t>
@@ -112,7 +112,7 @@
<td colspan="6">
<strong>Subtotal: </strong>
<t t-set="subtotal" t-value="sum(line.price_subtotal for line in layout_category['lines'])"/>
<span t-esc="format(subtotal, 'monetary', doc.pricelist_id.currency_id)"/>
<span t-esc="subtotal" t-options="{'widget': 'monetary', 'display_currency': doc.pricelist_id.currency_id}"/>
</td>
</tr>
</t>
@@ -133,7 +133,7 @@
<td><strong>Total Without Taxes</strong></td>
<td class="text-right">
<span t-field="doc.amount_untaxed"
t-field-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/>
</td>
</tr>
<t t-foreach="doc._get_tax_amount_by_group()" t-as="amount_by_group">
@@ -148,7 +148,7 @@
<td><strong>Total</strong></td>
<td class="text-right">
<span t-field="doc.amount_total"
t-field-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/>
</td>
</tr>
</table>
+1 -1
View File
@@ -13,7 +13,7 @@
</div>
<div t-if="o.partner_id" name="partner_header">
<div t-field="o.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True}'/>
</div>
</div>
</div>
@@ -24,12 +24,12 @@
<div t-if="o.move_lines and o.move_lines[0].partner_id and o.move_lines[0].partner_id.id != o.partner_id.id">
<span><strong>Delivery Address:</strong></span>
<div t-field="o.move_lines[0].partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
</div>
<div t-if="o.picking_type_id.code != 'internal' and (not o.move_lines or not o.move_lines[0].partner_id) and o.picking_type_id.warehouse_id.partner_id">
<span><strong>Warehouse Address:</strong></span>
<div t-field="o.picking_type_id.warehouse_id.partner_id"
t-field-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["address", "name", "phone", "fax"], "no_marker": True, "phone_icons": True}'/>
</div>
</div>
<div class="col-xs-5 col-xs-offset-1">
@@ -44,7 +44,7 @@
</div>
<div t-if="o.partner_id" name="partner_header">
<div t-field="o.partner_id"
t-field-options='{"widget": "contact", "fields": ["name", "phone"], "no_marker": True, "phone_icons": True}'/>
t-options='{"widget": "contact", "fields": ["name", "phone"], "no_marker": True, "phone_icons": True}'/>
<p t-if="o.sudo().partner_id.vat">VAT: <span t-field="o.sudo().partner_id.vat"/></p>
</div>
</div>
+1 -2
View File
@@ -31,7 +31,6 @@ from openerp.osv import orm, fields
from openerp.tools import ustr, DEFAULT_SERVER_DATE_FORMAT, DEFAULT_SERVER_DATETIME_FORMAT
from openerp.tools import html_escape as escape
from openerp.addons.base.ir import ir_qweb
from openerp.tools.translate import translate
REMOTE_CONNECTION_TIMEOUT = 2.5
@@ -296,7 +295,7 @@ class Image(orm.AbstractModel):
_inherit = 'ir.qweb.field.image'
@api.model
def record_to_html(self, record, field_name, options, values=None):
def record_to_html(self, record, field_name, options):
assert options['tagName'] != 'img',\
"Oddly enough, the root tag of an image field can not be img. " \
"That is because the image goes into the tag, or it gets the " \
+1 -2
View File
@@ -344,7 +344,6 @@ class Website(openerp.addons.web.controllers.main.Home):
"""
cr, uid, context, pool = request.cr, request.uid, request.context, request.registry
view = pool["ir.ui.view"]
qweb = pool["ir.qweb"]
context = dict(request.context or {}, active_test=True)
@@ -356,7 +355,7 @@ class Website(openerp.addons.web.controllers.main.Home):
set_active(enable, True)
if get_bundle:
return qweb._get_asset(cr, uid, 'web.assets_frontend', context)
return request.env["ir.qweb"]._get_asset('web.assets_frontend', options=context)
return True
+1 -1
View File
@@ -904,7 +904,7 @@ Sitemap: <t t-esc="url_root"/>sitemap.xml
<template id="company_description" name="Company Description">
<address itemscope="itemscope" itemtype="http://schema.org/Organization">
<!-- TODO widget contact must add itemprop attributes -->
<div t-field="res_company.partner_id" t-field-options='{
<div t-field="res_company.partner_id" t-options='{
"widget": "contact",
"fields": ["name", "address", "phone", "mobile", "fax", "email"]}'/>
</address>
@@ -136,7 +136,7 @@
<div t-foreach="blog_posts" t-as="blog_post" class="mb32">
<t t-if="blog_post.author_avatar">
<span t-field="blog_post.author_avatar" class="o_not_editable" t-field-options='{"widget": "image", "class": "img-circle pull-right mt16 media-object"}' />
<span t-field="blog_post.author_avatar" class="o_not_editable" t-options='{"widget": "image", "class": "img-circle pull-right mt16 media-object"}' />
</t>
<a t-attf-href="/blog/#{ slug(blog_post.blog_id) }/post/#{ slug(blog_post) }">
<h2 t-field="blog_post.name" class="mb4">Untitled Post</h2>
@@ -144,12 +144,12 @@
<div class="text-muted">
<h4 t-field="blog_post.subtitle" class="mb4 mt4"></h4>
<div name='blog_post_data' class='mb0'>
<span t-field="blog_post.author_id" style="display: inline-block;" t-field-options='{
<span t-field="blog_post.author_id" style="display: inline-block;" t-options='{
"widget": "contact",
"fields": ["name"]
}'/>
&#5760; <t t-if="blog_post.published_date"><span t-field="blog_post.published_date" t-field-options='{"format": "MMMM yyyy"}'/></t>
<t t-if="not blog_post.published_date"><span t-field="blog_post.create_date" t-field-options='{"format": "MMMM yyyy"}'/></t>
&#5760; <t t-if="blog_post.published_date"><span t-field="blog_post.published_date" t-options='{"format": "MMMM yyyy"}'/></t>
<t t-if="not blog_post.published_date"><span t-field="blog_post.create_date" t-options='{"format": "MMMM yyyy"}'/></t>
<span t-if="len(blog_post.message_ids) &gt; 0">
&#5760; <t t-esc="len(blog_post.message_ids)"/>
<t t-if="len(blog_post.message_ids) &lt;= 1" >comment</t>
@@ -211,9 +211,9 @@
<p class="post-meta text-muted text-center" name="blog_post_data"/>
<div>
<t t-if="blog_post.author_avatar">
<span t-field="blog_post.author_avatar" class="o_not_editable" t-field-options='{"widget": "image", "class": "img-circle", "style":"width: 30px; margin-right: 10px; display:inline"}' />
<span t-field="blog_post.author_avatar" class="o_not_editable" t-options='{"widget": "image", "class": "img-circle", "style":"width: 30px; margin-right: 10px; display:inline"}' />
</t>
<span t-field="blog_post.author_id" style="display: inline-block;" t-field-options='{
<span t-field="blog_post.author_id" style="display: inline-block;" t-options='{
"widget": "contact",
"fields": ["name"]
}'/>
@@ -236,9 +236,9 @@
<h2 t-field="next_post.subtitle" placeholder="Subtitle"/>
<div>
<t t-if="next_post.author_avatar">
<span t-field="next_post.author_avatar" t-field-options='{"widget": "image", "class": "img-circle", "style":"width: 30px; margin-right: 10px; display:inline"}' />
<span t-field="next_post.author_avatar" t-options='{"widget": "image", "class": "img-circle", "style":"width: 30px; margin-right: 10px; display:inline"}' />
</t>
<span t-field="next_post.author_id" style="display: inline-block;" t-field-options='{
<span t-field="next_post.author_id" style="display: inline-block;" t-options='{
"widget": "contact",
"fields": ["name"]
}'/>
@@ -90,7 +90,7 @@
<div class="media">
<a class="pull-left" t-attf-href="/partners/#{slug(partner)}?#{current_grade and 'grade_id=%s&amp;' % current_grade.id}#{current_country and 'country_id=%s' % current_country.id}"
t-field="partner.image"
t-field-options='{"widget": "image", "class": "media-object", "max_width": 128}'
t-options='{"widget": "image", "class": "media-object", "max_width": 128}'
></a>
<div class="media-body o_partner_body" style="min-height: 64px;">
<a class="media-heading" t-attf-href="/partners/#{slug(partner)}?#{current_grade and 'grade_id=%s&amp;' % current_grade.id}#{current_country and 'country_id=%s' % current_country.id}">
@@ -171,7 +171,7 @@
<div t-foreach="partner.implemented_partner_ids" t-as="reference" class="media">
<t t-if="reference.website_published">
<a class="pull-left" t-attf-href="/customers/#{slug(reference)}">
<span t-field="reference.image_small" t-field-options='{"widget": "image", "class": "center-block"}'/>
<span t-field="reference.image_small" t-options='{"widget": "image", "class": "center-block"}'/>
</a>
<div class="media-body" style="min-height: 64px;">
<a class="media-heading" t-attf-href="/customers/#{slug(reference)}">
@@ -329,7 +329,7 @@
<a t-attf-href="/my/opportunity/#{opp.id}"><span t-field="opp.name"/></a>
</td>
<td>
<span class="text-nowrap" t-esc="format(opp.planned_revenue, 'monetary', opp.company_currency)"/> at <span t-field="opp.probability" />%
<span class="text-nowrap" t-esc="opp.planned_revenue" t-options="{'widget': 'monetary', 'display_currency': opp.company_currency}"/> at <span t-field="opp.probability" />%
</td>
<td><span t-field="opp.contact_name" /></td>
<td>
@@ -433,7 +433,7 @@
</div>
<div class="row mt16" t-if="lead.partner_assigned_id">
<label class="col-xs-4">Assigned Partner</label>
<address class="col-xs-8" t-field="lead.partner_assigned_id" t-field-options='{"widget": "contact", "fields": ["name", "email", "phone"], "no_marker": True}'/>
<address class="col-xs-8" t-field="lead.partner_assigned_id" t-options='{"widget": "contact", "fields": ["name", "email", "phone"], "no_marker": True}'/>
</div>
<div class="row mt16" t-if="lead.campaign_id">
<label class="col-xs-4">Campaign</label>
@@ -559,7 +559,7 @@
</div>
<div class="row">
<div class="col-md-4">
<strong><span class="text-nowrap" t-esc="format(opportunity.planned_revenue, 'monetary', opportunity.company_currency)"/> at <span t-field="opportunity.probability"/>%</strong>
<strong><span class="text-nowrap" t-esc="opportunity.planned_revenue" t-options="{'widget': 'monetary', 'display_currency': opportunity.company_currency}"/> at <span t-field="opportunity.probability"/>%</strong>
</div>
<div class="col-md-4">
<strong>Expected Closing: <span t-field="opportunity.date_deadline" /></strong>
@@ -45,7 +45,7 @@
<div class="media">
<a class="pull-left" t-attf-href="/customers/#{slug(partner)}"
t-field="partner.image_small"
t-field-options='{"widget": "image", "class": "media-object"}'
t-options='{"widget": "image", "class": "media-object"}'
></a>
<div class="media-body" style="min-height: 64px;">
<a class="media-heading" t-attf-href="/customers/#{slug(partner)}">
@@ -174,11 +174,11 @@
</h4>
<div><a t-attf-href="/partners/#{slug(partner.assigned_partner_id)}"
t-field="partner.assigned_partner_id.image_medium"
t-field-options='{"widget": "image", "class": "center-block"}'
t-options='{"widget": "image", "class": "center-block"}'
/>
</div>
<address class="well text-left">
<div t-field="partner.assigned_partner_id" t-field-options='{
<div t-field="partner.assigned_partner_id" t-options='{
"widget": "contact",
"fields": ["address", "website", "phone", "fax", "email"]
}'/>
@@ -194,7 +194,7 @@
<div t-foreach="partner.implemented_partner_ids" t-as="reference" class="media">
<t t-if="reference.website_published">
<a class="pull-left" t-attf-href="/customers/#{slug(reference)}">
<span t-field="reference.image_small" t-field-options='{"widget": "image", "class": "center-block"}'/>
<span t-field="reference.image_small" t-options='{"widget": "image", "class": "center-block"}'/>
</a>
<div class="media-body" style="min-height: 64px;">
<a class="media-heading" t-attf-href="/customers/#{slug(reference)}">
@@ -67,9 +67,9 @@
</t>
</div>
<div>
<i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="event.with_context(tz=event.date_tz).date_begin" t-field-options='{"hide_seconds":"True"}'> </span> <i>to</i> <span itemprop="endDate" t-field="event.with_context(tz=event.date_tz).date_end" t-field-options='{"hide_seconds":"True"}'> </span>
<i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'> </span> <i>to</i> <span itemprop="endDate" t-field="event.with_context(tz=event.date_tz).date_end" t-options='{"hide_seconds":"True"}'> </span>
</div>
<div itemprop="location" t-field="event.address_id" t-field-options='{
<div itemprop="location" t-field="event.address_id" t-options='{
"widget": "contact",
"fields": ["city"]
}'/>
@@ -241,7 +241,7 @@
<h1 class="text-center">Event Location</h1>
</section>
<h4 class="text-center text-muted"
t-field="event.address_id" t-field-options='{
t-field="event.address_id" t-options='{
"widget": "contact",
"fields": ["address", "phone", "mobile", "fax"]
}'/>
@@ -272,12 +272,12 @@
<small t-if="event.is_participating" class="label label-info">Participating</small>
</div>
<h4 class="text-center text-muted">
<i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="event.with_context(tz=event.date_tz).date_begin" t-field-options='{"hide_seconds":"True"}'/> to
<span itemprop="endDate" t-field="event.with_context(tz=event.date_tz).date_end" t-field-options='{"hide_seconds":"True"}'/>
<i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'/> to
<span itemprop="endDate" t-field="event.with_context(tz=event.date_tz).date_end" t-options='{"hide_seconds":"True"}'/>
<t t-if="event.date_tz">(<span t-field="event.date_tz"/>)</t>
</h4>
<h4 class="text-center text-muted"
t-field="event.address_id" t-field-options='{
t-field="event.address_id" t-options='{
"widget": "contact",
"fields": ["city"]
}'/>
@@ -320,7 +320,7 @@
<t t-raw="comment.body"/>
<small class="pull-right muted text-right">
<div t-field="comment.author_id"/>
<div t-field="comment.date" t-field-options='{"hide_seconds":"True"}'/>
<div t-field="comment.date" t-options='{"hide_seconds":"True"}'/>
</small>
</div>
</li>
@@ -337,7 +337,7 @@
<a t-att-href="event.google_map_link()" target="_BLANK">
<img t-att-src="event.google_map_img()" width="100%%"/>
</a>
<div itemprop="location" class="mt16 mb8" t-field="event.address_id" t-field-options='{
<div itemprop="location" class="mt16 mb8" t-field="event.address_id" t-options='{
"widget": "contact",
"fields": ["address", "phone", "mobile", "fax", "email"]
}'/>
@@ -349,8 +349,8 @@
<h4>When</h4>
</div>
<div class="panel-body">
<i class="fa fa-clock-o"></i> From <span t-field="event.with_context(tz=event.date_tz).date_begin" t-field-options='{"hide_seconds":"True"}'> </span><br/>
<i class="fa fa-clock-o"></i> To <span t-field="event.with_context(tz=event.date_tz).date_end" t-field-options='{"hide_seconds":"True"}'> </span>
<i class="fa fa-clock-o"></i> From <span t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'> </span><br/>
<i class="fa fa-clock-o"></i> To <span t-field="event.with_context(tz=event.date_tz).date_end" t-options='{"hide_seconds":"True"}'> </span>
</div>
</div>
@@ -358,7 +358,7 @@
<div class="panel-heading">
<h4>Organizer</h4>
</div>
<div class="panel-body" t-field="event.organizer_id" t-field-options='{
<div class="panel-body" t-field="event.organizer_id" t-options='{
"widget": "contact",
"fields": ["name", "phone", "mobile", "fax", "email"]
}'/>
@@ -507,7 +507,7 @@
<div class="col-md-9 mt16">
<h4><a t-attf-href="/event/#{slug(event)}"><t t-esc="event.name"/></a></h4>
<i class="fa fa-clock-o"/> <span itemprop="startDate" t-esc="event.date_begin_located[:-3]"> </span> <i>to</i> <span itemprop="endDate" t-esc="event.date_end_located[:-3]"> </span>
<div itemprop="location" class="mt16 mb8" t-field="event.address_id" t-field-options='{
<div itemprop="location" class="mt16 mb8" t-field="event.address_id" t-options='{
"widget": "contact",
"fields": ["address", "phone", "mobile", "fax", "email"]
}'/>
@@ -38,13 +38,13 @@
<td>
<t t-if="ticket.price or editable">
<t t-if="(ticket.price-ticket.price_reduce) &gt; 1">
<del class="text-danger mr4" style="white-space: nowrap;" t-field="ticket.price" t-field-options='{
<del class="text-danger mr4" style="white-space: nowrap;" t-field="ticket.price" t-options='{
"widget": "monetary",
"from_currency": website.currency_id,
"display_currency": user_id.partner_id.property_product_pricelist.currency_id
}'/>
</t>
<span t-field="ticket.price_reduce" t-field-options='{
<span t-field="ticket.price_reduce" t-options='{
"widget": "monetary",
"display_currency": website.pricelist_id.currency_id
}'/>
@@ -19,7 +19,7 @@
<t t-if="sponsor.url">
<a t-att-href="sponsor.url" style="position: relative; display: inline-block;">
<span t-field="sponsor.image_medium"
t-field-options='{"widget": "image", "class": "shadow"}'/>
t-options='{"widget": "image", "class": "shadow"}'/>
<div class="ribbon-wrapper">
<div t-field="sponsor.sponsor_type_id" t-attf-class="ribbon ribbon_#{sponsor.sponsor_type_id.name}"/>
</div>
@@ -28,7 +28,7 @@
<t t-if="not sponsor.url">
<span style="position: relative; display: inline-block;">
<span t-field="sponsor.image_medium"
t-field-options='{"widget": "image", "class": "shadow"}'/>
t-options='{"widget": "image", "class": "shadow"}'/>
<div class="ribbon-wrapper">
<div t-field="sponsor.sponsor_type_id" t-attf-class="ribbon ribbon_#{sponsor.sponsor_type_id.name}"/>
</div>
@@ -120,7 +120,7 @@
<div class="col-sm-2">
<t t-if="track.image">
<span t-field="track.image"
t-field-options='{"widget": "image", "class": "img-circle"}'/>
t-options='{"widget": "image", "class": "img-circle"}'/>
</t>
</div>
<div class="col-sm-10">
@@ -132,7 +132,7 @@
<li t-if="track.speaker_ids" class="text-muted fa fa-user">
<t t-esc="', '.join([speaker.name for speaker in track.speaker_ids])"></t>
</li>
<li t-if="track.date" class="text-muted fa fa-calendar"> <span t-field="track.date" t-field-options='{"hide_seconds":"True"}'/></li>
<li t-if="track.date" class="text-muted fa fa-calendar"> <span t-field="track.date" t-options='{"hide_seconds":"True"}'/></li>
<li class="text-muted fa fa-map-marker" t-if="track.location_id">
<span t-field="track.location_id"/>
</li>
@@ -228,7 +228,7 @@
<div class="row">
<div class="col-sm-2">
<span t-field="speaker.sudo().image_medium"
t-field-options='{"widget": "image", "class": "img-circle"}'/>
t-options='{"widget": "image", "class": "img-circle"}'/>
</div><div class="col-sm-10">
<h4 t-field="speaker.name" class="mb4"/>
<div class="fa fa-home mb16" t-if="speaker.website">
@@ -246,9 +246,9 @@
</div>
<div class="panel-body">
<b>Date</b><br/>
<span t-field="track.date" t-field-options='{"hide_seconds":"True"}'/><br/>
<span t-field="track.date" t-options='{"hide_seconds":"True"}'/><br/>
<b>Duration</b><br/>
<span t-field="track.duration" t-field-options='{"widget": "duration", "unit": "hour"}'/><br/>
<span t-field="track.duration" t-options='{"widget": "duration", "unit": "hour"}'/><br/>
<b>Location</b><br/>
<span t-field="track.location_id"/><br/>
</div>
+19 -19
View File
@@ -201,12 +201,12 @@
</div>
<div class="panel-body">
<table class="table">
<thead><tr><td> Asked: <strong><span t-field="question.create_date" t-field-options='{"format":"short"}'/></strong></td></tr></thead>
<thead><tr><td> Asked: <strong><span t-field="question.create_date" t-options='{"format":"short"}'/></strong></td></tr></thead>
<tr><td> Seen: <strong><t t-raw="question.views"/></strong>
<span t-if="question.views&gt;1"> times</span>
<span t-if="question.views&lt;=1"> time</span>
</td></tr>
<tr><td> Last updated: <strong><span t-field="question.write_date" t-field-options='{"format":"short"}'/></strong></td></tr>
<tr><td> Last updated: <strong><span t-field="question.write_date" t-options='{"format":"short"}'/></strong></td></tr>
</table>
</div>
</div>
@@ -252,8 +252,8 @@
<i t-if="question.post_type == 'question'" t-attf-class="fa fa-question-circle" t-att-title="question.post_type.capitalize()" />
<i t-if="question.post_type == 'discussion'" t-attf-class="fa fa-comments-o" t-att-title="question.post_type.capitalize()" />
<i t-if="question.post_type == 'link'" t-attf-class="fa fa-link" t-att-title="question.post_type.capitalize()" />
<span>By </span><span t-field="question.create_uid" t-field-options='{"widget": "contact", "country_image": True, "fields": ["name", "country_id"]}' style="display: inline-block;"/>
<span> • </span><span t-field="question.write_date" t-field-options='{"format":"short"}'/>
<span>By </span><span t-field="question.create_uid" t-options='{"widget": "contact", "country_image": True, "fields": ["name", "country_id"]}' style="display: inline-block;"/>
<span> • </span><span t-field="question.write_date" t-options='{"format":"short"}'/>
<span> • </span><span t-field="question.views" /> View<t t-if="question.views&gt;1">s</t>
<span> • </span><a t-attf-href="/forum/#{ slug(forum) }/question/#{ slug(question) }">
@@ -782,9 +782,9 @@
<span>By </span>
<a t-att-href="(question.create_uid.id == request.session.uid or question.create_uid.sudo().website_published) and '/forum/%s/user/%s' % (slug(forum), question.create_uid.id) or None"
t-field="question.create_uid"
t-field-options='{"widget": "contact", "country_image": True, "fields": ["name", "country_id"]}'
t-options='{"widget": "contact", "country_image": True, "fields": ["name", "country_id"]}'
style="display: inline-block;"/>
<span> on </span><span t-field="question.create_date" t-field-options='{"format":"short"}'/>
<span> on </span><span t-field="question.create_date" t-options='{"format":"short"}'/>
<span> • </span><span t-field="question.views"/> views
</div>
@@ -795,7 +795,7 @@
<t t-if="question.closed_uid">
<b> by <a t-attf-href="/forum/#{ slug(forum) }/user/#{ question.closed_uid.id }"
t-field="question.closed_uid"
t-field-options='{"widget": "contact", "fields": ["name"]}'
t-options='{"widget": "contact", "fields": ["name"]}'
style="display: inline-block;"/></b>
</t>
<b> on <span t-field="question.closed_date"/></b>
@@ -940,11 +940,11 @@
</a>
<a t-att-href="user_profile_url"
t-field="answer.create_uid"
t-field-options='{"widget": "contact", "country_image": True, "fields": ["name", "country_id"]}'
t-options='{"widget": "contact", "country_image": True, "fields": ["name", "country_id"]}'
style="display: inline-block;"/>
<div class="text-muted">
<a t-attf-href="/forum/#{slug(question.forum_id)}/question/#{slug(question)}#answer_#{answer.id}">On</a>
<span t-field="answer.create_date" t-field-options='{"format":"short"}'/>
<span t-field="answer.create_date" t-options='{"format":"short"}'/>
</div>
</div>
<div class="clearfix"><span t-field="answer.content" class="oe_no_empty"/></div>
@@ -1028,12 +1028,12 @@
<div class="o_forum_tooltip_header">
<h4 class="o_forum_tooltip_heading"><a t-att-href="user_profile_url"
t-field="answer.create_uid"
t-field-options='{"widget": "contact", "country_image": True, "fields": ["name", "country_id"]}'
t-options='{"widget": "contact", "country_image": True, "fields": ["name", "country_id"]}'
style="display: inline-block;"/>
</h4>
<span t-field="answer.create_uid" t-field-options='{"widget": "contact", "UserBio": True, "badges": True, "fields": ["karma"]}'/>
<span t-field="answer.create_uid" t-options='{"widget": "contact", "UserBio": True, "badges": True, "fields": ["karma"]}'/>
</div>
<div t-field="answer.create_uid" t-field-options='{"widget": "contact", "website_description": True, "fields": ["partner_id"]}'/>
<div t-field="answer.create_uid" t-options='{"widget": "contact", "website_description": True, "fields": ["partner_id"]}'/>
</div>
</template>
@@ -1065,9 +1065,9 @@
</t>
</t>
<a t-attf-href="/forum/#{slug(forum)}/partner/#{message.author_id.id}"
t-field="message.author_id" t-field-options='{"widget": "contact", "country_image": True, "fields": ["name", "country_id"]}'
t-field="message.author_id" t-options='{"widget": "contact", "country_image": True, "fields": ["name", "country_id"]}'
style="display: inline-block;"/>
on <span t-field="message.date" t-field-options='{"format":"short"}'/>
on <span t-field="message.date" t-options='{"format":"short"}'/>
</small>
</div>
<div class="css_editable_mode_hidden">
@@ -1214,7 +1214,7 @@
<div>
<a t-attf-href="/forum/#{slug(forum)}/user/#{user.id}" t-field="user.name"/>
<t t-if="user.country_id">
<span t-field="user.country_id.image" t-field-options='{"widget": "image", "class": "country_flag"}' class='ml4'/>
<span t-field="user.country_id.image" t-options='{"widget": "image", "class": "country_flag"}' class='ml4'/>
</t>
<b class='ml8'><t t-esc="user.karma"/></b>
<t t-raw="separator"/>
@@ -1355,10 +1355,10 @@
</tr>
<tr>
<td>member since</td>
<td><span t-field="user.create_date" t-field-options='{"format": "short"}'/></td>
<td><span t-field="user.create_date" t-options='{"format": "short"}'/></td>
</tr><tr>
<td>last connection</td>
<td><span t-field="user.login_date" t-field-options='{"format": "short"}'/></td>
<td><span t-field="user.login_date" t-options='{"format": "short"}'/></td>
</tr>
<tr>
<td rowspan="2" valign="top"><span class="text-muted">bio</span></td>
@@ -1374,7 +1374,7 @@
<span t-field="user.city"/>
<span t-if="user.city and user.country_id">, </span>
<span t-field="user.country_id"/>
<t t-if="user.country_id"> <span t-field="user.country_id.image" t-field-options='{"widget": "image", "class": "country_flag"}'/></t>
<t t-if="user.country_id"> <span t-field="user.country_id.image" t-options='{"widget": "image", "class": "country_flag"}'/></t>
</td>
</tr>
@@ -1443,7 +1443,7 @@
<div class="tab-pane" id="activity" t-if="uid == user.id">
<ul class="list-unstyled">
<li t-foreach="activities" t-as="activity">
<span t-field="activity.date" t-field-options='{"format": "short"}'/>
<span t-field="activity.date" t-options='{"format": "short"}'/>
<span t-esc="activity.subtype_id.name" class="label label-info"/>
<t t-set="post" t-value="posts[activity.res_id]"/>
<span t-if="post[1]">
@@ -67,7 +67,7 @@
</small>
</h3>
<span t-field="job.address_id" t-field-options='{
<span t-field="job.address_id" t-options='{
"widget": "contact",
"fields": ["address"],
"no_tag_br": True
@@ -110,7 +110,7 @@
<div class="oe_structure" style="clear:both;">
<h1 class="text-center" t-field="job.name"/>
<h5 class="text-center" t-field="job.address_id" t-field-options='{
<h5 class="text-center" t-field="job.address_id" t-options='{
"widget": "contact",
"fields": ["address"],
"no_tag_br": True
@@ -209,7 +209,7 @@
<small>
by
<t t-if="message.author_id">
<span t-field="message.author_id" style="display: inline-block;" t-field-options='{
<span t-field="message.author_id" style="display: inline-block;" t-options='{
"widget": "contact",
"fields": ["name"]
}'/>
@@ -272,7 +272,7 @@
<small>
by
<t t-if="thread.author_id">
<span t-field="thread.author_id" style="display: inline-block;" t-field-options='{
<span t-field="thread.author_id" style="display: inline-block;" t-options='{
"widget": "contact",
"fields": ["name"]
}'/>
@@ -62,7 +62,7 @@
<div class="media">
<a class="pull-left" t-attf-href="/members/#{slug(partner)}"
t-field="partner.image_small"
t-field-options='{"widget": "image", "class": "media-object"}'
t-options='{"widget": "image", "class": "media-object"}'
></a>
<div class="media-body" style="min-height: 64px;">
<a class="media-heading" t-attf-href="/members/#{slug(partner)}">
@@ -21,9 +21,9 @@
</t>
<h1 class="col-md-12 text-center" id="partner_name" t-field="partner.display_name"/>
<div class="col-md-4">
<div t-field="partner.image" t-field-options='{"widget": "image", "class": "center-block mb16"}'/>
<div t-field="partner.image" t-options='{"widget": "image", "class": "center-block mb16"}'/>
<address class="well">
<div t-field="partner.self" t-field-options='{
<div t-field="partner.self" t-options='{
"widget": "contact",
"fields": ["address", "website", "phone", "fax", "email"]
}'/>
@@ -104,7 +104,7 @@
<div class="form-group">
<label for="form_amount" class="col-sm-3 control-label">Amount</label>
<div class="col-sm-9">
<span name="form_amount" class="form-control" t-esc="format(amount, 'monetary', currency)"/>
<span name="form_amount" class="form-control" t-esc="amount" t-options="{'widget': 'monetary', 'display_currency': currency}"/>
</div>
</div>
<div class="col-sm-9 col-sm-offset-3 text-muted mt16" t-raw="acquirer.pre_msg"/>
@@ -148,7 +148,7 @@
<div class="form-group">
<label for="form_amount" class="col-sm-3 control-label">Amount</label>
<div class="col-sm-9">
<span name="form_amount" class="form-control" t-esc="format(tx.amount, 'monetary', tx.currency_id)"/>
<span name="form_amount" class="form-control" t-esc="tx.amount" t-options="{'widget': 'monetary', 'display_currency': tx.currency_id}"/>
</div>
</div>
<div class="col-sm-12">
+1 -1
View File
@@ -57,7 +57,7 @@
</div>
<div class="o_my_details">
<h3 class="page-header">Your Details <a href="/my/account" class="btn btn-default btn-xs">Change</a></h3>
<div t-field="user.partner_id" t-field-options='{"widget": "contact", "fields": ["email", "phone", "address", "name"]}'/>
<div t-field="user.partner_id" t-options='{"widget": "contact", "fields": ["email", "phone", "address", "name"]}'/>
</div>
<div class="o_my_archives" t-if="archive_groups">
<t t-call="website_portal.portal_archive_groups"/>
+12 -12
View File
@@ -91,7 +91,7 @@
<span class="label label-default"><i class="fa fa-fw fa-clock-o"/> Expired</span>
</t>
</td>
<td><span t-field="quotation.amount_total" t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
<td><span t-field="quotation.amount_total" t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
</td>
</tr>
</t>
@@ -136,7 +136,7 @@
<span class="label label-default"><i class="fa fa-fw fa-check"/> Done</span>
</t>
</td>
<td><span t-field="order.amount_total" t-field-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/></td>
<td><span t-field="order.amount_total" t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/></td>
</tr>
</t>
</table>
@@ -186,7 +186,7 @@
<td>
<a t-if="invoice.state == 'open'" t-attf-href="/website_payment/pay?reference=#{invoice.number}&amp;amount=#{invoice.residual}&amp;currency_id=#{invoice.currency_id.id}&amp;country_id=#{invoice.partner_id.country_id.id}" alt="Pay Now" class="btn btn-xs btn-primary"><i class="fa fa-arrow-circle-right"/> Pay Now</a>
</td>
<td><span t-field="invoice.residual" t-field-options='{"widget": "monetary", "display_currency": invoice.currency_id}'/></td>
<td><span t-field="invoice.residual" t-options='{"widget": "monetary", "display_currency": invoice.currency_id}'/></td>
</tr>
</t>
</table>
@@ -251,7 +251,7 @@
<div class="panel-body">
<!-- <hr/> -->
<div class="mb8">
<strong>Date:</strong> <span t-field="order.create_date" t-field-options='{"widget": "date"}'/>
<strong>Date:</strong> <span t-field="order.create_date" t-options='{"widget": "date"}'/>
</div>
<div class='row'>
<div class="col-md-6">
@@ -259,7 +259,7 @@
<strong>Invoicing Address</strong>
</div>
<div>
<address t-field="order.partner_invoice_id" t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
<address t-field="order.partner_invoice_id" t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
</div>
<t t-set="invoices" t-value="[i for i in order.invoice_ids if i.state not in ['draft', 'cancel']]"/>
<t t-if="invoices">
@@ -289,7 +289,7 @@
<strong>Shipping Address</strong>
</div>
<div>
<address t-field="order.partner_shipping_id" t-field-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
<address t-field="order.partner_shipping_id" t-options='{"widget": "contact", "fields": ["address", "name"], "no_marker": True}'/>
</div>
</div>
</div>
@@ -319,7 +319,7 @@
<span t-esc="ol.product_id.name"/>
</div>
<div class="col-md-2 text-right">
<span t-field="ol.price_unit" t-field-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
<span t-field="ol.price_unit" t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
</div>
<div class="col-md-2 text-right">
<t t-if="ol._name == 'sale.order.line'">
@@ -330,7 +330,7 @@
</t>
</div>
<div class="col-md-2 text-right">
<span t-field="ol.price_subtotal" t-field-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
<span t-field="ol.price_subtotal" t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
</div>
</div>
</t>
@@ -342,7 +342,7 @@
<div>
<strong>Contact</strong>
</div>
<div t-field="order.user_id.partner_id" t-field-options='{"widget": "contact", "fields": ["email", "phone"]}'/>
<div t-field="order.user_id.partner_id" t-options='{"widget": "contact", "fields": ["email", "phone"]}'/>
</div>
<div class="col-md-6">
<div class="row">
@@ -350,7 +350,7 @@
Untaxed Amount:
</div>
<div class="col-md-2 text-right">
<span t-field="order.amount_untaxed" t-field-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
<span t-field="order.amount_untaxed" t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
</div>
</div>
<div class="row">
@@ -358,7 +358,7 @@
Taxes:
</div>
<div class="col-md-2 text-right">
<span t-field="order.amount_tax" t-field-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
<span t-field="order.amount_tax" t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
</div>
</div>
<div class="row">
@@ -366,7 +366,7 @@
<strong>Total:</strong>
</div>
<div class="col-md-2 text-right">
<strong><span t-field="order.amount_total" t-field-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/></strong>
<strong><span t-field="order.amount_total" t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/></strong>
</div>
</div>
</div>
@@ -88,19 +88,19 @@
</div>
<div class="panel-body">
<div class="mb8">
<strong>Date:</strong> <span t-field="issue.create_date" t-field-options='{"widget": "date"}'/>
<strong>Date:</strong> <span t-field="issue.create_date" t-options='{"widget": "date"}'/>
</div>
<div class='row'>
<div class="col-md-6" t-if="issue.user_id">
<strong>Assigned to</strong>
<div>
<address t-field="issue.user_id" t-field-options='{"widget": "contact", "fields": ["name", "email", "phone"], "no_marker": True}'/>
<address t-field="issue.user_id" t-options='{"widget": "contact", "fields": ["name", "email", "phone"], "no_marker": True}'/>
</div>
</div>
<div class="col-md-6">
<strong>Reported by</strong>
<div t-if="issue.partner_id">
<address t-field="issue.partner_id" t-field-options='{"widget": "contact", "fields": ["name", "email"], "no_marker": True}'/>
<address t-field="issue.partner_id" t-options='{"widget": "contact", "fields": ["name", "email"], "no_marker": True}'/>
</div>
</div>
</div>
@@ -17,7 +17,7 @@
<td><span t-esc="timesheet.date"/></td>
<td><span t-esc="timesheet.name"/></td>
<td><span t-esc="timesheet.user_id.name"/></td>
<td><span t-field="timesheet.unit_amount" t-field-options='{"widget": "duration", "unit": "hour"}'/></td>
<td><span t-field="timesheet.unit_amount" t-options='{"widget": "duration", "unit": "hour"}'/></td>
</tr>
</table>
</t>
@@ -38,7 +38,7 @@
<td>
<strong class="text-right">
<div t-field="option.price_unit"
t-field-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'
t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'
t-att-style="option.discount and 'text-decoration: line-through' or None"
t-att-class="option.discount and 'text-danger' or None"/>
<div t-if="option.discount">
@@ -62,7 +62,7 @@
</td>
<td class="text-right">
<div t-field="line.price_unit"
t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'
t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'
t-att-style="line.discount and 'text-decoration: line-through' or None"
t-att-class="(line.discount and 'text-danger' or '') + ' text-right'"/>
<!-- TODO: apply monetary widget formating -->
@@ -72,11 +72,11 @@
</td>
<td class="text-right" groups="sale.group_show_price_subtotal">
<span t-field="line.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
</td>
<td class="text-right" groups="sale.group_show_price_total">
<span t-field="line.price_total"
t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
</td>
<td class="text-center">
<a t-attf-href="./update_line/#{ line.id }/?order_id=#{ quotation.id }&amp;unlink=True&amp;token=#{ quotation.access_token }" class="mb8 js_update_line_json hidden-print" t-if="line.option_line_id">
@@ -92,7 +92,7 @@
<td class="text-right" style="padding-bottom: 32px"><strong>Subtotal:</strong></td>
<td class="text-right" style="padding-bottom: 32px">
<t t-set="subtotal" t-value="sum(line.price_subtotal for line in layout_category['lines'])"/>
<strong data-id="total_amount" t-esc="format(subtotal, 'monetary', quotation.pricelist_id.currency_id)"/>
<strong data-id="total_amount" t-esc="subtotal" t-options="{'widget': 'monetary', 'display_currency': quotation.pricelist_id.currency_id}"/>
</td>
<td></td>
</tr>
@@ -103,7 +103,7 @@
<td></td><td></td><td></td><td></td>
<td class="text-right"><strong>Subtotal:</strong></td>
<td class="text-right">
<strong data-id="total_amount" t-field="quotation.amount_untaxed" t-field-options='{"widget": "monetary","display_currency": quotation.pricelist_id.currency_id}'/>
<strong data-id="total_amount" t-field="quotation.amount_untaxed" t-options='{"widget": "monetary","display_currency": quotation.pricelist_id.currency_id}'/>
</td>
<td></td>
</tr>
@@ -112,7 +112,7 @@
<td></td><td></td><td></td><td></td>
<td class="text-right">Taxes:</td>
<td class="text-right">
<span data-id="total_amount" t-field="quotation.amount_tax" t-field-options='{"widget": "monetary","display_currency": quotation.pricelist_id.currency_id}'/>
<span data-id="total_amount" t-field="quotation.amount_tax" t-options='{"widget": "monetary","display_currency": quotation.pricelist_id.currency_id}'/>
</td>
<td></td>
</tr>
@@ -120,7 +120,7 @@
<td></td><td></td><td></td><td></td>
<td class="text-right"><strong>Total:</strong></td>
<td class="text-right">
<strong data-id="total_amount" t-field="quotation.amount_total" t-field-options='{"widget": "monetary","display_currency": quotation.pricelist_id.currency_id}'/>
<strong data-id="total_amount" t-field="quotation.amount_total" t-options='{"widget": "monetary","display_currency": quotation.pricelist_id.currency_id}'/>
</td>
<td></td>
</tr>
@@ -224,22 +224,22 @@
<p class="text-muted mb8">Your advantage:</p>
<t t-if="quotation.amount_untaxed == quotation.amount_total">
<strong t-field="quotation.amount_total"
t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
<strong t-field="quotation.amount_undiscounted"
t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'
t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'
style="text-decoration: line-through"
class="text-danger"/>
</t>
<t t-if="quotation.amount_untaxed != quotation.amount_total">
<strong t-field="quotation.amount_untaxed"
t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
<strong t-field="quotation.amount_undiscounted"
t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'
t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'
style="text-decoration: line-through"
class="text-danger"/>
<br />
(<span t-field="quotation.amount_total"
t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/> Incl. tax)
t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/> Incl. tax)
</t>
</div>
</div>
@@ -296,7 +296,7 @@
<span>I agree that by signing this proposal, I
accept it on the behalf of </span><b t-field="quotation.company_id"/><span>, for an amount of </span>
<b data-id="total_amount" t-field="quotation.amount_total"
t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
<span>with payment terms: </span><b t-field="quotation.payment_term_id"/>.
</p>
<div id="signer" class="form-group">
@@ -323,7 +323,7 @@
<span>I agree that by paying this proposal, I
accept it on the behalf of </span><b t-field="quotation.company_id"/><span>, for an amount of </span>
<b data-id="total_amount" t-field="quotation.amount_total"
t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
<span>with payment terms: </span><b t-field="quotation.payment_term_id"/>.
</p>
</div>
@@ -474,7 +474,7 @@
<div class="row">
<label class="col-sm-4 col-xs-4 text-right">Bill To:</label>
<div class="col-sm-8 col-xs-8">
<div t-field="quotation.partner_invoice_id" t-field-options='{
<div t-field="quotation.partner_invoice_id" t-options='{
"widget": "contact",
"fields": ["address", "name", "phone", "email"]
}'/>
@@ -483,7 +483,7 @@
<div t-if="quotation.partner_shipping_id.id != quotation.partner_invoice_id.id" class="row">
<label class="col-sm-4 col-xs-4 text-right">Ship To:</label>
<div class="col-sm-8 col-xs-8">
<div t-field="quotation.partner_shipping_id" t-field-options='{
<div t-field="quotation.partner_shipping_id" t-options='{
"widget": "contact",
"fields": ["address", "name", "phone"]
}'/>
@@ -494,7 +494,7 @@
<div class="row">
<label class="col-sm-5 col-xs-5 text-right">Your Contact:</label>
<div class="col-sm-7 col-xs-7">
<div t-field="quotation.user_id" t-field-options='{
<div t-field="quotation.user_id" t-options='{
"widget": "contact",
"fields": ["name", "phone", "email"]
}'/>
@@ -591,7 +591,7 @@
<td>
<strong class="text-right">
<div t-field="option.price_unit"
t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'
t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'
t-att-style="option.discount and 'text-decoration: line-through' or None"
t-att-class="option.discount and 'text-danger' or None"/>
<div t-if="option.discount">
@@ -703,7 +703,7 @@
<span class="label label-default"><i class="fa fa-fw fa-clock-o"/> Expired</span>
</t>
</td>
<td><span t-field="quotation.amount_total" t-field-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
<td><span t-field="quotation.amount_total" t-options='{"widget": "monetary", "display_currency": quotation.pricelist_id.currency_id}'/>
</td>
</tr>
</t>
@@ -35,7 +35,7 @@
</td>
<td class="text-right">
<span t-field="doc.amount_total"
t-field-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": doc.pricelist_id.currency_id}'/>
</td>
</tr>
</tbody>
+35 -35
View File
@@ -76,7 +76,7 @@
</div>
<div class="oe_product_image">
<a itemprop="url" t-att-href="keep('/shop/product/%s' % slug(product), page=(pager['page']['num'] if pager['page']['num']&gt;1 else None))">
<span itemprop="image" t-field="product.image" t-field-options="{'widget': 'image', 'resize': None if product_image_big else '300x300'}" t-att-alt="product.name" />
<span itemprop="image" t-field="product.image" t-options="{'widget': 'image', 'resize': None if product_image_big else '300x300'}" t-att-alt="product.name" />
</a>
</div>
<t t-if="show_publish">
@@ -97,9 +97,9 @@
<div itemprop="offers" itemscope="itemscope" itemtype="http://schema.org/Offer" class="product_price" t-if="product.product_variant_ids">
<b>
<t t-if="(compute_currency(product.lst_price) - product.price ) &gt; 0.1">
<del class="text-danger mr8" style="white-space: nowrap;" t-esc="format(compute_currency(request.website.get_product_price(product, public=True)), 'monetary', website.get_current_pricelist().currency_id, website.currency_id)" />
<del class="text-danger mr8" style="white-space: nowrap;" t-esc="compute_currency(request.website.get_product_price(product, public=True))" t-options="{'widget': 'monetary', 'display_currency': website.get_current_pricelist().currency_id, 'from_currency': website.currency_id}" />
</t>
<span t-esc="format(request.website.get_product_price(product), 'monetary', website.currency_id)" />
<span t-esc="request.website.get_product_price(product)" t-options="{'widget': 'monetary', 'display_currency': website.currency_id}" />
<span itemprop="price" style="display:none;" t-esc="product.price" />
<span itemprop="priceCurrency" style="display:none;" t-esc="website.currency_id.name" />
</b>
@@ -366,7 +366,7 @@
</div>
<div class="row">
<div class="col-sm-7 col-md-7 col-lg-7">
<span itemprop="image" t-field="product.image" t-field-options="{'widget': 'image', 'class': 'product_detail_img', 'alt-field': 'name'}" />
<span itemprop="image" t-field="product.image" t-options="{'widget': 'image', 'class': 'product_detail_img', 'alt-field': 'name'}" />
</div>
<div class="col-sm-5 col-md-5 col-lg-4 col-lg-offset-1" id="product_details">
<h1 itemprop="name" t-field="product.name">Product Name</h1>
@@ -420,7 +420,7 @@
<t t-foreach="product.alternative_product_ids" t-as="alt_product">
<div class="col-md-2 thumbnail" style="width: 170px; height:130px; float:left; display:inline; margin-right: 10px; overflow:hidden;">
<div class="mt16 text-center" style="height: 100%;">
<div t-field="alt_product.image_small" t-field-options="{'widget': 'image', 'class': 'img-rounded shadow o_alternative_product' }" />
<div t-field="alt_product.image_small" t-options="{'widget': 'image', 'class': 'img-rounded shadow o_alternative_product' }" />
<h5>
<a t-attf-href="/shop/product/#{ slug(alt_product) }" style="display: block">
<span t-att-title="alt_product.name" t-field="alt_product.name" style="display: block;" />
@@ -495,16 +495,16 @@
<div itemprop="offers" itemscope="itemscope" itemtype="http://schema.org/Offer" class="product_price mt16">
<h4 class="oe_price_h4 css_editable_mode_hidden">
<span class="text-danger oe_default_price" style="text-decoration: line-through; white-space: nowrap;"
t-esc="format(compute_currency(request.website.get_product_price(product, public=True)), 'monetary', website.get_current_pricelist().currency_id, website.currency_id)"
t-esc="compute_currency(request.website.get_product_price(product, public=True))" t-options="{'widget': 'monetary', 'display_currency': website.get_current_pricelist().currency_id, 'from_currency': website.currency_id}"
/>
<b class="oe_price" style="white-space: nowrap;" t-esc="format(request.website.get_product_price(product), 'monetary', website.currency_id)"/>
<b class="oe_price" style="white-space: nowrap;" t-esc="request.website.get_product_price(product)" t-options="{'widget': 'monetary', 'display_currency': website.currency_id}"/>
<span itemprop="price" style="display:none;" t-esc="product.price"/>
<span itemprop="priceCurrency" style="display:none;" t-esc="website.currency_id.name"/>
</h4>
<h4 class="css_non_editable_mode_hidden">
<!-- keep field for editor -->
<span t-field="product.lst_price"
t-field-options='{
t-options='{
"widget": "monetary",
"display_currency": product.currency_id
}'/>
@@ -524,7 +524,7 @@
<input type="radio" name="product_id" class="js_product_change" t-att-checked="'checked' if variant_id_index == 0 else None" t-att-value="variant_id.id" t-att-data-lst_price="variant_id.lst_price" t-att-data-price="variant_id.price"/>
<span t-esc="variant_id.name_get()[0][1]"/>
<span class="badge" t-if="variant_id.price_extra">
<t t-esc="variant_id.price_extra > 0 and '+' or ''"/><span t-field="variant_id.price_extra" style="white-space: nowrap;" t-field-options='{
<t t-esc="variant_id.price_extra > 0 and '+' or ''"/><span t-field="variant_id.price_extra" style="white-space: nowrap;" t-options='{
"widget": "monetary",
"from_currency": product.currency_id,
"display_currency": website.currency_id
@@ -549,7 +549,7 @@
<option t-att-value="value_id.id">
<span t-field="value_id.name"/>
<span t-if="value_id.price_extra">
<t t-esc="value_id.price_extra > 0 and '+' or ''"/><span t-field="value_id.price_extra" style="white-space: nowrap;" t-field-options='{
<t t-esc="value_id.price_extra > 0 and '+' or ''"/><span t-field="value_id.price_extra" style="white-space: nowrap;" t-options='{
"widget": "monetary",
"from_currency": product.currency_id,
"display_currency": website.currency_id
@@ -569,7 +569,7 @@
<input type="radio" class="js_variant_change" t-att-checked="'checked' if not inc else None" t-att-name="'attribute-%s-%s' % (product.id, variant_id.attribute_id.id)" t-att-value="value_id.id" style="vertical-align: top; margin-right: 10px;"/>
<span t-field="value_id.name"/>
<span class="badge" t-if="value_id.price_extra">
<t t-esc="value_id.price_extra > 0 and '+' or ''"/><span t-field="value_id.price_extra" style="white-space: nowrap;" t-field-options='{
<t t-esc="value_id.price_extra > 0 and '+' or ''"/><span t-field="value_id.price_extra" style="white-space: nowrap;" t-options='{
"widget": "monetary",
"from_currency": product.currency_id,
"display_currency": website.currency_id
@@ -762,7 +762,7 @@
<tr>
<td colspan="2" t-if="not line.product_id.product_tmpl_id"></td>
<td align="center" t-if="line.product_id.product_tmpl_id">
<span t-field="line.product_id.image_small" t-field-options="{'widget': 'image', 'class': 'img-rounded'}" />
<span t-field="line.product_id.image_small" t-options="{'widget': 'image', 'class': 'img-rounded'}" />
</td>
<td t-if="line.product_id.product_tmpl_id">
<div>
@@ -786,10 +786,10 @@
</td>
<td class="text-center" id="td-price" name="price">
<t t-if="(compute_currency(line.product_id.lst_price) - line.price_reduce ) &gt; 0.1">
<del class="text-danger mr8" style="white-space: nowrap;" t-esc="format(compute_currency(website.get_product_price(line.product_id, public=True)), 'monetary', website.get_current_pricelist().currency_id, website.currency_id)" />
<del class="text-danger mr8" style="white-space: nowrap;" t-esc="compute_currency(website.get_product_price(line.product_id, public=True))" t-options="{'widget': 'monetary', 'display_currency': website.get_current_pricelist().currency_id, 'from_currency': website.currency_id}" />
</t>
<span t-field="line.price_reduce_taxexcl" style="white-space: nowrap;" t-field-options="{'widget': 'monetary', 'from_currency': line.company_id.currency_id, 'display_currency': website.currency_id}" groups="sale.group_show_price_subtotal" />
<span t-field="line.price_reduce_taxinc" style="white-space: nowrap;" t-field-options="{'widget': 'monetary', 'from_currency': line.company_id.currency_id, 'display_currency': website.currency_id}" groups="sale.group_show_price_total" />
<span t-field="line.price_reduce_taxexcl" style="white-space: nowrap;" t-options="{'widget': 'monetary', 'from_currency': line.company_id.currency_id, 'display_currency': website.currency_id}" groups="sale.group_show_price_subtotal" />
<span t-field="line.price_reduce_taxinc" style="white-space: nowrap;" t-options="{'widget': 'monetary', 'from_currency': line.company_id.currency_id, 'display_currency': website.currency_id}" groups="sale.group_show_price_total" />
</td>
</tr>
</t>
@@ -846,7 +846,7 @@
<t t-foreach="website_sale_order.website_order_line" t-as="line">
<div class="row mb8 cart_line">
<div class="col-xs-3">
<span t-field="line.product_id.image_small" t-field-options="{'widget': 'image', 'class': 'img-rounded'}" />
<span t-field="line.product_id.image_small" t-options="{'widget': 'image', 'class': 'img-rounded'}" />
</div>
<div class="col-xs-9">
<a t-attf-href="/shop/product/#{ slug(line.product_id.product_tmpl_id) }">
@@ -886,7 +886,7 @@
<tr t-foreach="suggested_products" t-as="product">
<td>
<a t-attf-href="/shop/product/#{ slug(product.product_tmpl_id) }">
<span t-field="product.image_small" t-field-options="{'widget': 'image', 'class': 'img-rounded'}" />
<span t-field="product.image_small" t-options="{'widget': 'image', 'class': 'img-rounded'}" />
</a>
</td>
<td>
@@ -899,9 +899,9 @@
</td>
<td>
<t t-if="(compute_currency(product.lst_price) - product.price) &gt; 0.1">
<del class="text-danger mr8" style="white-space: nowrap;" t-field="product.lst_price" t-field-options="{'widget': 'monetary','from_currency': product.currency_id, 'display_currency': website.currency_id}" />
<del class="text-danger mr8" style="white-space: nowrap;" t-field="product.lst_price" t-options="{'widget': 'monetary','from_currency': product.currency_id, 'display_currency': website.currency_id}" />
</t>
<span t-field="product.price" style="white-space: nowrap;" t-field-options="{'widget': 'monetary','display_currency': website.currency_id}" />
<span t-field="product.price" style="white-space: nowrap;" t-options="{'widget': 'monetary','display_currency': website.currency_id}" />
</td>
<td class="text-center">
<input class="js_quantity" name="product_id" t-att-data-product-id="product.id" type="hidden" />
@@ -1028,7 +1028,7 @@
<a class='btn btn-link pull-right fa fa-edit js_edit_address no-decoration' title="Edit this address"></a>
<div t-att-class="'panel panel-default %s' % (selected and 'border_primary' or 'js_change_shipping')">
<div class='panel-body' style='min-height: 130px;'>
<t t-raw="format(contact, 'htmlcontact', dict(fields=['name', 'address'], no_marker=True))"/>
<t t-esc="contact" t-options="dict(widget='contact', fields=['name', 'address'], no_marker=True)"/>
</div>
<div class='panel-footer' t-if='not readonly'>
<span class='btn-ship' t-att-style="'' if selected else 'display:none;'">
@@ -1199,7 +1199,7 @@
<td colspan="2" t-if="not line.product_id.product_tmpl_id"></td>
<td t-if="line.product_id.product_tmpl_id">
<a t-attf-href="/shop/product/#{ slug(line.product_id.product_tmpl_id) }">
<span t-field="line.product_id.image_small" t-field-options="{'widget': 'image', 'class': 'img-rounded'}" />
<span t-field="line.product_id.image_small" t-options="{'widget': 'image', 'class': 'img-rounded'}" />
</a>
</td>
<td t-if="line.product_id.product_tmpl_id">
@@ -1209,7 +1209,7 @@
<div t-esc="line.product_uom_qty" />
</td>
<td class="text-center">
<span t-field="line.price_unit" style="white-space: nowrap;" t-field-options="{'widget': 'monetary','from_currency': website_sale_order.pricelist_id.currency_id,'display_currency': website.currency_id}" />
<span t-field="line.price_unit" style="white-space: nowrap;" t-options="{'widget': 'monetary','from_currency': website_sale_order.pricelist_id.currency_id,'display_currency': website.currency_id}" />
</td>
</tr>
</tbody>
@@ -1224,14 +1224,14 @@
<div class="panel panel-info">
<div class="panel-heading">Bill To:</div>
<div class="panel-body">
<div t-field="order.partner_invoice_id" t-field-options="{'widget': 'contact','fields': ['address', 'name', 'phone', 'email']}" />
<div t-field="order.partner_invoice_id" t-options="{'widget': 'contact','fields': ['address', 'name', 'phone', 'email']}" />
</div>
</div>
<t t-if="website_sale_order and not website_sale_order.only_services">
<div class="panel panel-info">
<div class="panel-heading">Ship To:</div>
<div class="panel-body">
<div t-field="order.partner_shipping_id" t-field-options="{'widget': 'contact', 'fields': ['address', 'name', 'phone']}" />
<div t-field="order.partner_shipping_id" t-options="{'widget': 'contact', 'fields': ['address', 'name', 'phone']}" />
</div>
</div>
@@ -1341,13 +1341,13 @@
<td>
<span class="text-right">
<div t-field="line.price_unit"
t-field-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
</span>
</td>
<td>
<div class="text-right"
t-field="line.price_subtotal"
t-field-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
</td>
</tr>
</tbody>
@@ -1356,14 +1356,14 @@
<td colspan="2"></td>
<td class="text-right">Subtotal:</td>
<td class="text-right">
<span t-field="order.amount_untaxed" style="white-space: nowrap;" t-field-options="{'widget': 'monetary','from_currency': order.pricelist_id.currency_id,'display_currency': website.currency_id}" />
<span t-field="order.amount_untaxed" style="white-space: nowrap;" t-options="{'widget': 'monetary','from_currency': order.pricelist_id.currency_id,'display_currency': website.currency_id}" />
</td>
</tr>
<tr>
<td class='noborder' colspan="2"></td>
<td class="text-right noborder">Taxes:</td>
<td class="text-right noborder">
<span t-field="order.amount_tax" style="white-space: nowrap;" t-field-options="{'widget': 'monetary', 'from_currency': order.pricelist_id.currency_id, 'display_currency': website.currency_id}" />
<span t-field="order.amount_tax" style="white-space: nowrap;" t-options="{'widget': 'monetary', 'from_currency': order.pricelist_id.currency_id, 'display_currency': website.currency_id}" />
</td>
</tr>
<tr>
@@ -1371,7 +1371,7 @@
<td class="text-right"><strong>Total:</strong></td>
<td class="text-right">
<strong t-field="order.amount_total"
t-field-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
t-options='{"widget": "monetary", "display_currency": order.pricelist_id.currency_id}'/>
</td>
</tr>
</tfooter>
@@ -1392,7 +1392,7 @@
<strong>Total:</strong>
</td>
<td class="text-right" width="100">
<strong t-field="order.amount_total" t-field-options="{'widget': 'monetary', 'display_currency': order.pricelist_id.currency_id}" />
<strong t-field="order.amount_total" t-options="{'widget': 'monetary', 'display_currency': order.pricelist_id.currency_id}" />
</td>
</tr>
</tbody>
@@ -1404,14 +1404,14 @@
<div class="panel panel-info">
<div class="panel-heading">Bill To:</div>
<div class="panel-body">
<div t-field="order.partner_invoice_id" t-field-options="{'widget': 'contact','fields': ['address', 'name', 'phone', 'email']}" />
<div t-field="order.partner_invoice_id" t-options="{'widget': 'contact','fields': ['address', 'name', 'phone', 'email']}" />
</div>
</div>
<t t-if="not order.only_services">
<div class="panel panel-info">
<div class="panel-heading">Ship To:</div>
<div class="panel-body">
<div t-field="order.partner_shipping_id" t-field-options="{'widget': 'contact','fields': ['address', 'name', 'phone']}" />
<div t-field="order.partner_shipping_id" t-options="{'widget': 'contact','fields': ['address', 'name', 'phone']}" />
</div>
</div>
</t>
@@ -1459,19 +1459,19 @@
<div class="row" id="order_total_untaxed">
<span class="col-xs-6 text-right text-muted">Subtotal:</span>
<span class="col-xs-6 text-left text-muted">
<span t-field="website_sale_order.amount_untaxed" style="white-space: nowrap;" t-field-options="{'widget': 'monetary','from_currency': website_sale_order.pricelist_id.currency_id,'display_currency': website.currency_id}" />
<span t-field="website_sale_order.amount_untaxed" style="white-space: nowrap;" t-options="{'widget': 'monetary','from_currency': website_sale_order.pricelist_id.currency_id,'display_currency': website.currency_id}" />
</span>
</div>
<div class="row" id="order_total_taxes">
<span class="col-xs-6 text-right text-muted" title="Taxes may be updated after providing shipping address"> Taxes:</span>
<span class="col-xs-6 text-left text-muted">
<span t-field="website_sale_order.amount_tax" style="white-space: nowrap;" t-field-options="{'widget': 'monetary', 'from_currency': website_sale_order.pricelist_id.currency_id, 'display_currency': website.currency_id}" />
<span t-field="website_sale_order.amount_tax" style="white-space: nowrap;" t-options="{'widget': 'monetary', 'from_currency': website_sale_order.pricelist_id.currency_id, 'display_currency': website.currency_id}" />
</span>
</div>
<div class="row" id="order_total">
<span class="col-xs-6 text-right h4">Total:</span>
<span class="col-xs-6 text-left h4" style="white-space: nowrap;">
<span t-field="website_sale_order.amount_total" style="white-space: nowrap;" t-field-options="{'widget': 'monetary','from_currency': website_sale_order.pricelist_id.currency_id,'display_currency': website.currency_id}" />
<span t-field="website_sale_order.amount_total" style="white-space: nowrap;" t-options="{'widget': 'monetary','from_currency': website_sale_order.pricelist_id.currency_id,'display_currency': website.currency_id}" />
</span>
</div>
</div>
@@ -7,7 +7,7 @@
<div class="row" id="order_delivery" t-if="website_sale_order and website_sale_order.has_delivery">
<span class="col-xs-6 text-right text-muted" title="Delivery will be updated after choosing a new delivery method"> Delivery:</span>
<span class="col-xs-6 text-left text-muted">
<span t-field="website_sale_order.amount_delivery" style="white-space: nowrap;" t-field-options='{
<span t-field="website_sale_order.amount_delivery" style="white-space: nowrap;" t-options='{
"widget": "monetary",
"from_currency": website_sale_order.currency_id,
"display_currency": user_id.partner_id.property_product_pricelist.currency_id
@@ -36,7 +36,7 @@
t-att-checked="order.carrier_id and order.carrier_id.id == delivery.id and 'checked' or False"/>
<abbr t-att-title="delivery.website_description"><span t-field="delivery.name"/></abbr>
<span class="badge" t-field="delivery.price"
t-field-options='{
t-options='{
"widget": "monetary",
"from_currency": delivery.product_id.company_id.currency_id,
"display_currency": website_sale_order.currency_id
@@ -45,7 +45,7 @@
<tbody>
<tr id="product_confirmation">
<td width="100">
<span t-field="product.image_medium" t-field-options='{"widget": "image" }'/>
<span t-field="product.image_medium" t-options='{"widget": "image" }'/>
</td>
<td colspan="2">
<strong t-field="product.display_name"/>
@@ -57,7 +57,7 @@
<td>
<span t-attf-class="text-danger oe_default_price" t-att-style="'' if (compute_currency(product.lst_price) - product.price) &gt; 0.1 else 'display: none;'" style="text-decoration: line-through; white-space: nowrap;"
t-field="product.lst_price"
t-field-options='{
t-options='{
"widget": "monetary",
"from_currency": product.currency_id,
"display_currency": website.currency_id
@@ -65,7 +65,7 @@
<span class="oe_price" style="white-space: nowrap;"
t-att-data-product-id="product.id"
t-field="product.price"
t-field-options='{
t-options='{
"widget": "monetary",
"display_currency": website.currency_id
}'/>
@@ -88,7 +88,7 @@
<tr class="js_product" t-foreach="product.optional_product_ids" t-as="product">
<td width="100">
<input type="hidden" class="product_id" t-attf-name="optional-product-#{option_inc}" t-att-value="int(product.product_variant_ids[0]) if len(product.product_variant_ids) == 1 else '0'"/>
<span t-field="product.image_small" t-field-options='{"widget": "image"}'/>
<span t-field="product.image_small" t-options='{"widget": "image"}'/>
</td>
<td>
<div class="pull-left">
@@ -104,14 +104,14 @@
<td>
<span class="text-danger oe_optional" t-att-style="'' if (compute_currency(product.lst_price) - product.price) &gt; 0.1 else 'display: none;'" style="text-decoration: line-through; white-space: nowrap;"
t-field="product.lst_price"
t-field-options='{
t-options='{
"widget": "monetary",
"from_currency": product.currency_id,
"display_currency": website.currency_id
}'/><br/>
<span class="oe_price" style="white-space: nowrap;"
t-field="product.price"
t-field-options='{
t-options='{
"widget": "monetary",
"display_currency": website.currency_id
}'/>
@@ -12,7 +12,7 @@
<div id='picking_info'>
<a t-att-href="report_url"><span class="fa fa-download"/></a>
<a t-att-href="report_url"><span t-field="i.name"/></a>
<span class="text-muted" t-field="i.date" t-field-options='{"widget": "date"}'/>
<span class="text-muted" t-field="i.date" t-options='{"widget": "date"}'/>
<t t-if="i.state == 'done'">
<span class="label label-success label-text-align"><i class="fa fa-fw fa-truck"/> Shipped</span>
</t>
@@ -580,7 +580,7 @@
<t t-call="website.publish_short">
<t t-set="object" t-value="message"/>
</t>
<span t-field="message.author_id" style="display: inline-block;" t-field-options='{"widget": "contact", "fields": ["name"]}'/>
<span t-field="message.author_id" style="display: inline-block;" t-options='{"widget": "contact", "fields": ["name"]}'/>
<span class="text-muted">on<span t-field="message.date"/></span>
<div t-field="message.body" class="discussion_scroll_post"></div>
</div>
+1 -1
View File
@@ -10,7 +10,7 @@ diff --git a/academy/templates.xml b/academy/templates.xml
<div class="container">
<h3 t-field="person.name"/>
- <p>Last modified: <i t-field="person.write_date"/></p>
+ <p>Last modified: <i t-field="person.write_date" t-field-options='{"format": "long"}'/></p>
+ <p>Last modified: <i t-field="person.write_date" t-options='{"format": "long"}'/></p>
<div t-field="person.biography"/>
</div>
</div>
+2 -2
View File
@@ -9,8 +9,8 @@ diff --git a/academy/templates.xml b/academy/templates.xml
<div class="oe_structure">
<div class="container">
<h3 t-field="person.name"/>
- <p>Last modified: <i t-field="person.write_date" t-field-options='{"format": "long"}'/></p>
+ <p>Last modified: <i t-field="person.write_date" t-field-options='{"widget": "relative"}'/></p>
- <p>Last modified: <i t-field="person.write_date" t-options='{"format": "long"}'/></p>
+ <p>Last modified: <i t-field="person.write_date" t-options='{"widget": "relative"}'/></p>
<div t-field="person.biography"/>
</div>
</div>
+1 -1
View File
@@ -334,7 +334,7 @@ The ``t-field`` directive can only be used when performing field access
to automatically format based on field type, and is integrated in the
website's rich text edition.
``t-field-options`` can be used to customize fields, the most common option
``t-options`` can be used to customize fields, the most common option
is ``widget``, other options are field- or widget-dependent.
debugging
+1 -1
View File
@@ -161,7 +161,7 @@ For example, let's look at the Sale Order report from the Sale module::
<div class="col-xs-6">
<strong t-if="doc.partner_shipping_id == doc.partner_invoice_id">Invoice and shipping address:</strong>
<strong t-if="doc.partner_shipping_id != doc.partner_invoice_id">Invoice address:</strong>
<div t-field="doc.partner_invoice_id" t-field-options="{&quot;no_marker&quot;: True}"/>
<div t-field="doc.partner_invoice_id" t-options="{&quot;no_marker&quot;: True}"/>
<...>
<div class="oe_structure"/>
</div>
+1 -1
View File
@@ -12,7 +12,7 @@
<span itemprop="name" t-esc="object.parent_name"/>
</t>
<t t-if="options.get('country_image') and 'country_id' in fields and object.country_id and object.country_id.image">
<span t-field="object.country_id.image" t-field-options='{"widget": "image", "class": "country_flag"}'/>
<span t-field="object.country_id.image" t-options='{"widget": "image", "class": "country_flag"}'/>
</t>
</div>
<div itemprop="address" itemscope="itemscope" itemtype="http://schema.org/PostalAddress">
+87 -86
View File
@@ -5,7 +5,7 @@ from odoo import api, fields, models, _
from PIL import Image
from cStringIO import StringIO
import babel
from openerp.tools import html_escape as escape, posix_to_ldml, safe_eval
from openerp.tools import html_escape as escape, posix_to_ldml, safe_eval, float_utils
from .qweb import unicodifier
import logging
@@ -82,7 +82,7 @@ class FieldConverter(models.AbstractModel):
return data
@api.model
def value_to_html(self, value, field, options=None):
def value_to_html(self, value, options):
""" value_to_html(value, field, options=None)
Converts a single value to its HTML version/output
@@ -91,21 +91,14 @@ class FieldConverter(models.AbstractModel):
return html_escape(unicodifier(value) or u'', options)
@api.model
def record_to_html(self, record, field_name, options, values=None):
""" record_to_html(record, field_name, options, values)
def record_to_html(self, record, field_name, options):
""" record_to_html(record, field_name, options)
Converts the specified field of the browse_record ``record`` to HTML
:rtype: unicode
"""
field = record._fields[field_name]
try:
value = record[field_name]
return False if value is False else record.env[self._name].value_to_html(value, field, options=options)
except Exception:
_logger.warning("Could not get field %s for model %s",
field_name, record._name, exc_info=True)
return None
value = record[field_name]
return False if value is False else record.env[self._name].value_to_html(value, options=options)
@api.model
def user_lang(self):
@@ -126,7 +119,7 @@ class IntegerConverter(models.AbstractModel):
_inherit = 'ir.qweb.field'
@api.model
def value_to_html(self, value, field, options=None):
def value_to_html(self, value, options):
return unicodifier(self.user_lang().format('%d', value, grouping=True))
@@ -135,16 +128,19 @@ class FloatConverter(models.AbstractModel):
_inherit = 'ir.qweb.field'
@api.model
def precision(self, field, options=None):
_, precision = field.digits or (None, None)
return precision
def value_to_html(self, value, options):
if 'decimal_precision' in options:
precision = self.env['decimal.precision'].search([('name', '=', options['decimal_precision'])]).digits
else:
precision = options['precision']
@api.model
def value_to_html(self, value, field, options=None):
precision = self.precision(field, options=options)
fmt = '%f' if precision is None else '%.{precision}f'
lang = self.user_lang()
formatted = lang.format(fmt.format(precision=precision), value, grouping=True)
if precision is None:
fmt = '%f'
else:
value = float_utils.float_round(value, precision_digits=precision)
fmt = '%.{precision}f'.format(precision=precision)
formatted = self.user_lang().format(fmt, value, grouping=True)
# %f does not strip trailing zeroes. %g does but its precision causes
# it to switch to scientific notation starting at a million *and* to
@@ -152,15 +148,23 @@ class FloatConverter(models.AbstractModel):
# strip trailing 0.
if precision is None:
formatted = re.sub(r'(?:(0|\d+?)0+)$', r'\1', formatted)
return unicodifier(formatted)
@api.model
def record_to_html(self, record, field_name, options):
if 'precision' not in options and 'decimal_precision' not in options:
_, precision = record._fields[field_name].digits or (None, None)
options = dict(options, precision=precision)
return super(FloatConverter, self).record_to_html(record, field_name, options)
class DateConverter(models.AbstractModel):
_name = 'ir.qweb.field.date'
_inherit = 'ir.qweb.field'
@api.model
def value_to_html(self, value, field, options=None):
def value_to_html(self, value, options):
if not value or len(value) < 10:
return ''
lang = self.user_lang()
@@ -183,7 +187,7 @@ class DateTimeConverter(models.AbstractModel):
_inherit = 'ir.qweb.field'
@api.model
def value_to_html(self, value, field, options=None):
def value_to_html(self, value, options):
if not value:
return ''
lang = self.user_lang()
@@ -211,7 +215,7 @@ class TextConverter(models.AbstractModel):
_inherit = 'ir.qweb.field'
@api.model
def value_to_html(self, value, field, options=None):
def value_to_html(self, value, options):
"""
Escapes the value and converts newlines to br. This is bullshit.
"""
@@ -223,11 +227,16 @@ class SelectionConverter(models.AbstractModel):
_inherit = 'ir.qweb.field'
@api.model
def value_to_html(self, value, field, options=None):
def value_to_html(self, value, options):
if not value:
return ''
selection = dict(field.get_description(self.env)['selection'])
return html_escape(unicodifier(selection[value]) or u'', options)
return html_escape(unicodifier(options['selection'][value]) or u'', options)
@api.model
def record_to_html(self, record, field_name, options):
if 'selection' not in options:
options = dict(options, selection=dict(record._fields[field_name].get_description(self.env)['selection']))
return super(SelectionConverter, self).record_to_html(record, field_name, options)
class ManyToOneConverter(models.AbstractModel):
@@ -235,8 +244,7 @@ class ManyToOneConverter(models.AbstractModel):
_inherit = 'ir.qweb.field'
@api.model
def record_to_html(self, record, field_name, options, values=None):
value = record[field_name]
def value_to_html(self, value, options):
if not value:
return False
value = value.sudo().display_name
@@ -250,7 +258,7 @@ class HTMLConverter(models.AbstractModel):
_inherit = 'ir.qweb.field'
@api.model
def value_to_html(self, value, field, options=None):
def value_to_html(self, value, options):
return unicodifier(value) or u''
@@ -267,7 +275,7 @@ class ImageConverter(models.AbstractModel):
_inherit = 'ir.qweb.field'
@api.model
def value_to_html(self, value, field, options=None):
def value_to_html(self, value, options):
try:
image = Image.open(StringIO(value.decode('base64')))
image.verify()
@@ -297,25 +305,8 @@ class MonetaryConverter(models.AbstractModel):
_inherit = 'ir.qweb.field'
@api.model
def record_to_html(self, record, field_name, options, values=None):
field = record._fields[field_name]
# for backward compatibility to remove after v10
if isinstance(options.get('display_currency'), str):
_logger.warning("Use new syntax for '%s' monetary widget 'display_currency' option (instead of deprecated JSON syntax) to improve speed." % options['display_currency'])
options['display_currency'] = safe_eval.safe_eval(options['display_currency'], mode='eval', globals_dict=values)
if isinstance(options.get('from_currency'), str):
_logger.warning("Use new syntax for '%s' monetary widget 'from_currency' option (instead of deprecated JSON syntax) to improve speed." % options['from_currency'])
options['from_currency'] = safe_eval.safe_eval(options['from_currency'], mode='eval', globals_dict=values)
# end backward
display_currency = False
#currency should be specified by monetary field
if field.type == 'monetary' and field.currency_field:
display_currency = record[field.currency_field]
#otherwise fall back to old method
if not display_currency:
display_currency = options['display_currency']
def value_to_html(self, value, options):
display_currency = options['display_currency']
# lang.format mandates a sprintf-style format. These formats are non-
# minimal (they have a default fixed precision instead), and
@@ -324,26 +315,30 @@ class MonetaryConverter(models.AbstractModel):
# (integer > 0) from the currency's rounding (a float generally < 1.0).
fmt = "%.{0}f".format(display_currency.decimal_places)
from_amount = record[field_name]
if options.get('from_currency'):
from_amount = options['from_currency'].compute(from_amount, display_currency)
value = options['from_currency'].compute(value, display_currency)
lang = self.user_lang()
formatted_amount = lang.format(fmt, display_currency.round(from_amount),
formatted_amount = lang.format(fmt, display_currency.round(value),
grouping=True, monetary=True).replace(r' ', u'\N{NO-BREAK SPACE}')
pre = post = u''
if display_currency.position == 'before':
pre = u'{symbol}\N{NO-BREAK SPACE}'
pre = u'{symbol}\N{NO-BREAK SPACE}'.format(symbol=display_currency.symbol)
else:
post = u'\N{NO-BREAK SPACE}{symbol}'
post = u'\N{NO-BREAK SPACE}{symbol}'.format(symbol=display_currency.symbol)
return u'{pre}<span class="oe_currency_value">{0}</span>{post}'.format(
formatted_amount, pre=pre, post=post,
).format(
symbol=display_currency.symbol,
)
return u'{pre}<span class="oe_currency_value">{0}</span>{post}'.format(formatted_amount, pre=pre, post=post)
@api.model
def record_to_html(self, record, field_name, options):
options = dict(options)
#currency should be specified by monetary field
field = record._fields[field_name]
if not options.get('display_currency') and field.type == 'monetary' and field.currency_field:
options['display_currency'] = record[field.currency_field]
return self.value_to_html(record[field_name], options)
TIMEDELTA_UNITS = (
('year', 3600 * 24 * 365),
@@ -372,10 +367,12 @@ class DurationConverter(models.AbstractModel):
_inherit = 'ir.qweb.field'
@api.model
def value_to_html(self, value, field, options=None):
def value_to_html(self, value, options):
units = dict(TIMEDELTA_UNITS)
if value < 0:
raise ValueError(_("Durations can't be negative"))
if not options or options.get('unit') not in units:
raise ValueError(_("A unit must be provided to duration widgets"))
@@ -400,48 +397,52 @@ class RelativeDatetimeConverter(models.AbstractModel):
_inherit = 'ir.qweb.field'
@api.model
def value_to_html(self, value, field, options=None):
def value_to_html(self, value, options):
locale = babel.Locale.parse(self.user_lang().code)
if isinstance(value, basestring):
value = fields.Datetime.from_string(value)
# value should be a naive datetime in UTC. So is fields.Datetime.now()
reference = fields.Datetime.from_string(field.now())
reference = fields.Datetime.from_string(options['now'])
return unicodifier(babel.dates.format_timedelta(value - reference, add_direction=True, locale=locale))
@api.model
def record_to_html(self, record, field_name, options):
if 'now' not in options:
options = dict(options, now=record._fields[field_name].now())
return super(RelativeDatetimeConverter, self).record_to_html(record, field_name, options)
class Contact(models.AbstractModel):
_name = 'ir.qweb.field.contact'
_inherit = 'ir.qweb.field.many2one'
@api.model
def record_to_html(self, record, field_name, options, values=None):
opf = options and options.get('fields') or ["name", "address", "phone", "mobile", "fax", "email"]
def value_to_html(self, value, options):
if not value.exists():
return False
value_rec = record[field_name]
if not value_rec:
return None
value_rec = value_rec.sudo().with_context(show_address=True)
value = value_rec.name_get()[0][1]
opf = options and options.get('fields') or ["name", "address", "phone", "mobile", "fax", "email"]
value = value.sudo().with_context(show_address=True)
name_get = value.name_get()[0][1]
val = {
'name': value.split("\n")[0],
'address': escape("\n".join(value.split("\n")[1:])).strip(),
'phone': value_rec.phone,
'mobile': value_rec.mobile,
'fax': value_rec.fax,
'city': value_rec.city,
'country_id': value_rec.country_id.display_name,
'website': value_rec.website,
'email': value_rec.email,
'name': name_get.split("\n")[0],
'address': escape("\n".join(name_get.split("\n")[1:])).strip(),
'phone': value.phone,
'mobile': value.mobile,
'fax': value.fax,
'city': value.city,
'country_id': value.country_id.display_name,
'website': value.website,
'email': value.email,
'fields': opf,
'object': value_rec,
'object': value,
'options': options
}
return unicodifier(self.env.ref('base.contact').render(val, engine='ir.qweb'))
return self.env['ir.qweb'].render('base.contact', val)
class QwebView(models.AbstractModel):
@@ -449,7 +450,7 @@ class QwebView(models.AbstractModel):
_inherit = 'ir.qweb.field.many2one'
@api.model
def record_to_html(self, record, field_name, options, values=None):
def record_to_html(self, record, field_name, options):
if not getattr(record, field_name):
return None
+49 -22
View File
@@ -2,11 +2,11 @@
import ast
from urlparse import urlparse
from lxml import html
import math
from .qweb import QWeb, Contextifier
from .assetsbundle import AssetsBundle
from lxml import etree
from collections import OrderedDict
from openerp import api, models, tools
from openerp.tools import safe_eval
@@ -144,11 +144,41 @@ class IrQWeb(models.AbstractModel, QWeb):
))
]
# for backward compatibility to remove after v10
def _compile_widget_options(self, el, directive_type):
field_options = super(IrQWeb, self)._compile_widget_options(el, directive_type)
if ('t-%s-options' % directive_type) in el.attrib:
if tools.config['dev_mode']:
_logger.warning("Use new syntax t-options instead of t-%s-options" % directive_type)
if not field_options:
field_options = el.attrib.pop('t-%s-options' % directive_type)
if field_options and 'monetary' in field_options:
try:
options = "{'widget': 'monetary'"
for k, v in json.loads(field_options).iteritems():
print k, v
if k in ('display_currency', 'from_currency'):
options = "%s, '%s': %s" % (options, k, v)
else:
options = "%s, '%s': '%s'" % (options, k, v)
options = "%s}" % options
field_options = options
_logger.warning("Use new syntax for '%s' monetary widget t-options (python dict instead of deprecated JSON syntax)." % etree.tostring(el))
except ValueError:
pass
return field_options
# end backward
# method called by computing code
@tools.conditional(
# in non-xml-debug mode we want assets to be cached forever, and the admin can force a cache clear
# by restarting the server after updating the source code (or using the "Clear server cache" in debug tools)
'xml' not in tools.config['dev_mode'],
tools.ormcache('xmlid', 'options.get("lang", "en_US")', 'css', 'js', 'debug', 'async', 'values.get("time_cache_assets")'),
tools.ormcache('xmlid', 'options.get("lang", "en_US")', 'css', 'js', 'debug', 'async'),
)
def _get_asset(self, xmlid, options, css=True, js=True, debug=False, async=False, values=None):
files, remains = self._get_asset_content(xmlid, options)
@@ -231,33 +261,30 @@ class IrQWeb(models.AbstractModel, QWeb):
converter = self.env[model] if model in self.env else self.env['ir.qweb.field']
# get content
content = converter.record_to_html(record, field_name, field_options, values)
content = converter.record_to_html(record, field_name, field_options)
attributes = converter.attributes(record, field_name, field_options, values)
return (attributes, content, inherit_branding or translate)
# formating methods
def _format_func_monetary(self, value, display_currency=None, from_currency=None):
env = display_currency.env
precision = int(round(math.log10(display_currency.rounding)))
fmt = "%.{0}f".format(-precision if precision < 0 else 0)
lang = env['res.lang']._lang_get(env.context.get('lang', 'en_US'))
formatted_amount = lang.format(fmt, value, grouping=True, monetary=True).replace(r' ', u'\N{NO-BREAK SPACE}')
pre = post = u''
if display_currency.position == 'before':
pre = u'{symbol}\N{NO-BREAK SPACE}'
else:
post = u'\N{NO-BREAK SPACE}{symbol}'
return u'{pre}{0}{post}'.format(
formatted_amount, pre=pre, post=post
).format(symbol=display_currency.symbol,)
def _get_widget(self, value, expression, tagName, field_options, options, values):
field_options['type'] = field_options['widget']
field_options['tagName'] = tagName
field_options['expression'] = expression
def _format_func_htmlcontact(self, value, options, values=None):
return self.pool['ir.qweb.field.contact'].record_to_html(
self.env.cr, self.env.uid, dict(contact=value), 'contact', dict(options or {}), context=self.env.context
)
# field converter
model = 'ir.qweb.field.' + field_options['type']
converter = self.env[model] if model in self.env else self.env['ir.qweb.field']
# get content
content = converter.value_to_html(value, field_options)
attributes = OrderedDict()
attributes['data-oe-type'] = field_options['type']
attributes['data-oe-expression'] = field_options['expression']
return (attributes, content, None)
# compile expression add safe_eval
def _compile_expr(self, expr):
""" Compiles a purported Python expression to ast, verifies that it's safe
(according to safe_eval's semantics) and alter its variable references to
+138 -68
View File
@@ -6,7 +6,8 @@ import re
import traceback
from itertools import count
from textwrap import dedent
from werkzeug.utils import escape
import werkzeug
from werkzeug.utils import escape as _escape
from itertools import izip, tee
import __builtin__
builtin_defaults = {name: getattr(__builtin__, name) for name in dir(__builtin__)}
@@ -141,16 +142,8 @@ class QWebException(Exception):
def __repr__(self):
return str(self)
import werkzeug
from werkzeug.utils import escape
# Avoid DeprecationWarning while still remaining compatible with werkzeug pre-0.9
if getattr(werkzeug, '__version__', '0.0') < '0.9.0':
def qweb_escape(text):
return escape(unicodifier(text), quote=True)
else:
def qweb_escape(text):
return escape(unicodifier(text))
escape = (lambda text: _escape(text, quote=True)) if getattr(werkzeug, '__version__', '0.0') < '0.9.0' else _escape
def unicodifier(val):
if val is None or val is False:
@@ -493,14 +486,14 @@ class QWeb(object):
* collections
* itertools
Define:
* qweb_escape
* escape
* unicodifier (empty string for a None or False, otherwise unicode string)
"""
return ast.parse(dedent("""
from collections import OrderedDict
import itertools
from itertools import repeat, imap
from openerp.addons.base.ir.ir_qweb.qweb import qweb_escape, unicodifier, foreach_iterator
from openerp.addons.base.ir.ir_qweb.qweb import escape, unicodifier, foreach_iterator
"""))
def _create_def(self, options, body, prefix='fn', lineno=None):
@@ -684,11 +677,11 @@ class QWeb(object):
return [
'debug',
'groups', 'foreach', 'if', 'else',
'field',
'field', 'esc', 'raw',
'tag',
'call',
'set',
'esc', 'raw', 'content',
'content',
]
def _is_static_node(self, el):
@@ -704,7 +697,7 @@ class QWeb(object):
content = self._compile_directive_content(el, options)
if el.tag == 't':
return content
tag = u'<%s%s' % (el.tag, u''.join([u' %s="%s"' % (name, qweb_escape(value)) for name, value in el.attrib.iteritems()]))
tag = u'<%s%s' % (el.tag, u''.join([u' %s="%s"' % (name, escape(unicodifier(value))) for name, value in el.attrib.iteritems()]))
if el.tag in self._void_elements:
return [self._append(ast.Str(tag + '/>'))] + content
else:
@@ -795,7 +788,7 @@ class QWeb(object):
# append(u' ')
# append(name)
# append(u'="')
# append(qweb_escape(value))
# append(escape(unicodifier((value)))
# append(u'"')
body.append(ast.For(
target=ast.Tuple(elts=[ast.Name(id='name', ctx=ast.Store()), ast.Name(id='value', ctx=ast.Store())], ctx=ast.Store()),
@@ -829,8 +822,12 @@ class QWeb(object):
self._append(ast.Name(id='name', ctx=ast.Load())),
self._append(ast.Str(u'="')),
self._append(ast.Call(
func=ast.Name(id='qweb_escape', ctx=ast.Load()),
args=[ast.Name(id='value', ctx=ast.Load())], keywords=[],
func=ast.Name(id='escape', ctx=ast.Load()),
args=[ast.Call(
func=ast.Name(id='unicodifier', ctx=ast.Load()),
args=[ast.Name(id='value', ctx=ast.Load())], keywords=[],
starargs=None, kwargs=None
)], keywords=[],
starargs=None, kwargs=None
)),
self._append(ast.Str(u'"')),
@@ -844,6 +841,8 @@ class QWeb(object):
def _compile_tag(self, el, content, options, attr_already_created=False):
""" Compile the tag of the given element into a list of AST nodes. """
if el.tag == 't':
return content
body = [self._append(ast.Str(u'<%s' % el.tag))]
body.extend(self._compile_all_attributes(el, options, attr_already_created))
if el.tag in self._void_elements:
@@ -869,8 +868,6 @@ class QWeb(object):
def _compile_directive_tag(self, el, options):
el.attrib.pop('t-tag', None)
content = self._compile_directives(el, options)
if el.tag == 't':
return content
return self._compile_tag(el, content, options, False)
def _compile_directive_set(self, el, options):
@@ -924,45 +921,6 @@ class QWeb(object):
value=value
)]
def _compile_directive_esc(self, el, options):
return [
# content = t-raw value
ast.Assign(
targets=[ast.Name(id='content', ctx=ast.Store())],
value=self._compile_expr0(el.attrib.pop('t-esc')),
),
# if content is not None: display
self._if_content_is_not_Falsy(
# append(escape($content))
body=[self._append(ast.Call(
func=ast.Name(id='qweb_escape', ctx=ast.Load()),
args=[ast.Name(id='content', ctx=ast.Load())], keywords=[],
starargs=None, kwargs=None
))],
# append(body default value)
orelse=self._compile_directive_content(el, options),
)
]
def _compile_directive_raw(self, el, options):
return [
# content = t-raw value
ast.Assign(
targets=[ast.Name(id='content', ctx=ast.Store())],
value=self._compile_expr0(el.attrib.pop('t-raw')),
),
self._if_content_is_not_Falsy(
# append($content)
body=[self._append(ast.Call(
func=ast.Name(id='unicodifier', ctx=ast.Load()),
args=[ast.Name(id='content', ctx=ast.Load())], keywords=[],
starargs=None, kwargs=None
))],
# append(body default value)
orelse=self._compile_directive_content(el, options),
)
]
def _compile_directive_content(self, el, options):
body = []
if el.text is not None:
@@ -1048,6 +1006,103 @@ class QWeb(object):
def _compile_tail(self, el):
return el.tail is not None and [self._append(ast.Str(unicodifier(el.tail)))] or []
def _compile_directive_esc(self, el, options):
field_options = self._compile_widget_options(el, 'esc')
content = self._compile_widget(el, el.attrib.pop('t-esc'), field_options, 'escape')
return content + self._compile_widget_value(el, options)
def _compile_directive_raw(self, el, options):
field_options = self._compile_widget_options(el, 'raw')
content = self._compile_widget(el, el.attrib.pop('t-raw'), field_options)
return content + self._compile_widget_value(el, options)
def _compile_widget(self, el, expression, field_options, escape=None):
# if isinstance(value, basestring):
# value = escape(unicodifier(value))
escaped = ast.If(
test=ast.Call(
func=ast.Name(id='isinstance', ctx=ast.Load()),
args=[
ast.Name(id='content', ctx=ast.Load()),
ast.Name(id='basestring', ctx=ast.Load())
], keywords=[],
starargs=None, kwargs=None
),
body=[ast.Assign(
targets=[ast.Name(id='content', ctx=ast.Store())],
value=ast.Call(
func=ast.Name(id=escape, ctx=ast.Load()),
args=[ast.Call(
func=ast.Name(id='unicodifier', ctx=ast.Load()),
args=[ast.Name(id='content', ctx=ast.Load())], keywords=[],
starargs=None, kwargs=None
)], keywords=[],
starargs=None, kwargs=None
) if escape else ast.Name(id='content', ctx=ast.Load())
)],
orelse=[]
)
if field_options:
return [
# value = t-(esc|raw)
ast.Assign(
targets=[ast.Name(id='content', ctx=ast.Store())],
value=self._compile_expr0(expression)
),
escaped,
# t_attrs, content, force_display = self._get_widget(value, expression, tagName, field options, template options, values)
ast.Assign(
targets=[ast.Tuple(elts=[
ast.Name(id='t_attrs', ctx=ast.Store()),
ast.Name(id='content', ctx=ast.Store()),
ast.Name(id='force_display', ctx=ast.Store())
], ctx=ast.Store())],
value=ast.Call(
func=ast.Attribute(
value=ast.Name(id='self', ctx=ast.Load()),
attr='_get_widget',
ctx=ast.Load()
),
args=[
ast.Name(id='content', ctx=ast.Load()),
ast.Str(expression),
ast.Str(el.tag),
field_options and self._compile_expr(field_options) or ast.Dict(keys=[], values=[]),
ast.Name(id='options', ctx=ast.Load()),
ast.Name(id='values', ctx=ast.Load()),
],
keywords=[], starargs=None, kwargs=None
)
)
]
return [
# t_attrs, content, force_display = OrderedDict(), t-(esc|raw), None
ast.Assign(
targets=[ast.Tuple(elts=[
ast.Name(id='t_attrs', ctx=ast.Store()),
ast.Name(id='content', ctx=ast.Store()),
ast.Name(id='force_display', ctx=ast.Store()),
], ctx=ast.Store())],
value=ast.Tuple(elts=[
ast.Call(
func=ast.Name(id='OrderedDict', ctx=ast.Load()),
args=[],
keywords=[], starargs=None, kwargs=None
),
self._compile_expr0(expression),
ast.Name(id='None', ctx=ast.Load()),
], ctx=ast.Load())
),
escaped
]
# for backward compatibility to remove after v10
def _compile_widget_options(self, el, directive_type):
return el.attrib.pop('t-options', None)
# end backward
def _compile_directive_field(self, el, options):
""" Compile something like ``<span t-field="record.phone">+1 555 555 8069</span>`` """
node_name = el.tag
@@ -1060,10 +1115,10 @@ class QWeb(object):
"t-field must have at least a dot like 'record.field_name'"
expression = el.attrib.pop('t-field')
field_options = el.attrib.pop('t-field-options', None)
field_options = self._compile_widget_options(el, 'field')
record, field_name = expression.rsplit('.', 1)
content = [
return [
# t_attrs, content, force_display = self._get_field(record, field_name, expression, tagName, field options, template options, values)
ast.Assign(
targets=[ast.Tuple(elts=[
@@ -1089,8 +1144,9 @@ class QWeb(object):
keywords=[], starargs=None, kwargs=None
)
)
]
] + self._compile_widget_value(el, options)
def _compile_widget_value(self, el, options):
# if force_display:
# display the tag without content
orelse = [ast.If(
@@ -1145,17 +1201,22 @@ class QWeb(object):
]
# if content is not None:
# display the tag
# display the tag (unicodifier(content))
# else
# if default_content:
# display the tag with default content
# elif force_display:
# display the tag without content
content.append(self._if_content_is_not_Falsy(
body=self._compile_tag(el, [self._append(ast.Name(id='content', ctx=ast.Load()))], options, True),
return [self._if_content_is_not_Falsy(
body=self._compile_tag(el, [self._append(
ast.Call(
func=ast.Name(id='unicodifier', ctx=ast.Load()),
args=[ast.Name(id='content', ctx=ast.Load())], keywords=[],
starargs=None, kwargs=None
)
)], options, True),
orelse=orelse,
))
return content
)]
def _compile_directive_call(self, el, options):
tmpl = el.attrib.pop('t-call')
@@ -1299,7 +1360,16 @@ class QWeb(object):
* string or None: content
* boolean: force_display display the tag if the content and default_content are None
"""
return (OrderedDict(), escape(unicodifier(getattr(record, field_name, None))), False)
return self._get_widget(getattr(record, field_name, None), expression, tagName, field_options, options, values)
def _get_widget(self, value, expression, tagName, field_options, options, values):
"""
:returns: tuple:
* OrderedDict: attributes
* string or None: content
* boolean: force_display display the tag if the content and default_content are None
"""
return (OrderedDict(), value, False)
# compile expression
@@ -30,8 +30,11 @@ class TestExport(common.TransactionCase):
break
except KeyError: pass
return lambda value, options=None, context=None: model.value_to_html(
self.cr, self.uid, value, field, options=options, context=context)
def converter(value, options=None, context=None):
record = self.Model.new(self.cr, self.uid, {name: value}, context=context)
return model.record_to_html(
self.cr, self.uid, record, name, options or {}, context=context)
return converter
class TestBasicExport(TestExport):
_model = 'test_converter.test_model'
@@ -104,7 +107,7 @@ class TestCurrencyExport(TestExport):
'widget': 'monetary',
'display_currency': dest,
}
return converter.record_to_html(self.cr, self.uid, obj, 'value', options, {'obj': obj})
return converter.record_to_html(self.cr, self.uid, obj, 'value', options)
def test_currency_post(self):
currency = self.create(self.Currency, name="Test", symbol=u"test")
@@ -188,36 +191,23 @@ class TestTextExport(TestBasicExport):
class TestMany2OneExport(TestBasicExport):
def test_many2one(self):
Sub = self.registry('test_converter.test_model.sub')
converter = self.get_converter('many2one')
id0 = self.Model.create(self.cr, self.uid, {
'many2one': Sub.create(self.cr, self.uid, {'name': "Foo"})
})
id1 = self.Model.create(self.cr, self.uid, {
'many2one': Sub.create(self.cr, self.uid, {'name': "Fo<b>o</b>"})
})
def converter(record):
converter = self.registry('ir.qweb.field.many2one')
field_name = 'many2one'
return converter.record_to_html(self.cr, self.uid, record, field_name, {})
value = converter(self.Model.browse(self.cr, self.uid, id0))
value = converter(Sub.create(self.cr, self.uid, {'name': "Foo"}))
self.assertEqual(value, "Foo")
value = converter(self.Model.browse(self.cr, self.uid, id1))
value = converter(Sub.create(self.cr, self.uid, {'name': "Fo<b>o</b>"}))
self.assertEqual(value, "Fo&lt;b&gt;o&lt;/b&gt;")
class TestBinaryExport(TestBasicExport):
def test_image(self):
field = self.get_field('binary')
converter = self.registry('ir.qweb.field.image')
with open(os.path.join(directory, 'test_vectors', 'image'), 'rb') as f:
content = f.read()
encoded_content = content.encode('base64')
value = converter.value_to_html(self.cr, self.uid, encoded_content, field)
value = converter.value_to_html(self.cr, self.uid, encoded_content, {})
self.assertEqual(
value, '<img src="data:image/jpeg;base64,%s">' % (
@@ -229,30 +219,23 @@ class TestBinaryExport(TestBasicExport):
with self.assertRaises(ValueError):
converter.value_to_html(
self.cr, self.uid, 'binary', content.encode('base64'), field)
self.cr, self.uid, 'binary', content.encode('base64'), {})
with open(os.path.join(directory, 'test_vectors', 'pptx'), 'rb') as f:
content = f.read()
with self.assertRaises(ValueError):
converter.value_to_html(
self.cr, self.uid, 'binary', content.encode('base64'), field)
self.cr, self.uid, 'binary', content.encode('base64'), {})
class TestSelectionExport(TestBasicExport):
def test_selection(self):
[record] = self.Model.browse(self.cr, self.uid, [self.Model.create(self.cr, self.uid, {
'selection': 4,
'selection_str': 'C',
})])
converter = self.registry('ir.qweb.field.selection')
field_name = 'selection'
value = converter.record_to_html(self.cr, self.uid, record, field_name, {})
converter = self.get_converter('selection')
value = converter(4)
self.assertEqual(value, e(u"réponse <D>"))
field_name = 'selection_str'
value = converter.record_to_html(self.cr, self.uid, record, field_name, {})
converter = self.get_converter('selection_str')
value = converter('C')
self.assertEqual(value, u"Qu'est-ce qu'il fout ce maudit pancake, tabernacle ?")
class TestHTMLExport(TestBasicExport):