[MERGE] forward port branch 10.0 up to e245135421
This commit is contained in:
@@ -796,6 +796,14 @@ class AccountTax(models.Model):
|
|||||||
return incl_tax.compute_all(price)['total_excluded']
|
return incl_tax.compute_all(price)['total_excluded']
|
||||||
return price
|
return price
|
||||||
|
|
||||||
|
@api.model
|
||||||
|
def _fix_tax_included_price_company(self, price, prod_taxes, line_taxes, company_id):
|
||||||
|
if company_id:
|
||||||
|
#To keep the same behavior as in _compute_tax_id
|
||||||
|
prod_taxes = prod_taxes.filtered(lambda tax: tax.company_id == company_id)
|
||||||
|
line_taxes = line_taxes.filtered(lambda tax: tax.company_id == company_id)
|
||||||
|
return self._fix_tax_included_price(price, prod_taxes, line_taxes)
|
||||||
|
|
||||||
class AccountReconcileModel(models.Model):
|
class AccountReconcileModel(models.Model):
|
||||||
_name = "account.reconcile.model"
|
_name = "account.reconcile.model"
|
||||||
_description = "Preset to create journal entries during a invoices and payments matching"
|
_description = "Preset to create journal entries during a invoices and payments matching"
|
||||||
|
|||||||
@@ -505,6 +505,7 @@ class AccountInvoice(models.Model):
|
|||||||
|
|
||||||
self.account_id = account_id
|
self.account_id = account_id
|
||||||
self.payment_term_id = payment_term_id
|
self.payment_term_id = payment_term_id
|
||||||
|
self.date_due = False
|
||||||
self.fiscal_position_id = fiscal_position
|
self.fiscal_position_id = fiscal_position
|
||||||
|
|
||||||
if type in ('in_invoice', 'out_refund'):
|
if type in ('in_invoice', 'out_refund'):
|
||||||
@@ -1119,7 +1120,7 @@ class AccountInvoice(models.Model):
|
|||||||
if self.origin:
|
if self.origin:
|
||||||
communication = '%s (%s)' % (communication, self.origin)
|
communication = '%s (%s)' % (communication, self.origin)
|
||||||
|
|
||||||
payment = self.env['account.payment'].create({
|
payment_vals = {
|
||||||
'invoice_ids': [(6, 0, self.ids)],
|
'invoice_ids': [(6, 0, self.ids)],
|
||||||
'amount': pay_amount or self.residual,
|
'amount': pay_amount or self.residual,
|
||||||
'payment_date': date or fields.Date.context_today(self),
|
'payment_date': date or fields.Date.context_today(self),
|
||||||
@@ -1131,7 +1132,11 @@ class AccountInvoice(models.Model):
|
|||||||
'payment_method_id': payment_method.id,
|
'payment_method_id': payment_method.id,
|
||||||
'payment_difference_handling': writeoff_acc and 'reconcile' or 'open',
|
'payment_difference_handling': writeoff_acc and 'reconcile' or 'open',
|
||||||
'writeoff_account_id': writeoff_acc and writeoff_acc.id or False,
|
'writeoff_account_id': writeoff_acc and writeoff_acc.id or False,
|
||||||
})
|
}
|
||||||
|
if self.env.context.get('tx_currency_id'):
|
||||||
|
payment_vals['currency_id'] = self.env.context.get('tx_currency_id')
|
||||||
|
|
||||||
|
payment = self.env['account.payment'].create(payment_vals)
|
||||||
payment.post()
|
payment.post()
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
<td><span t-esc="aml.move_id.name <> '/' and aml.move_id.name or ('*'+str(aml.move_id.id))"/></td>
|
<td><span t-esc="aml.move_id.name <> '/' and aml.move_id.name or ('*'+str(aml.move_id.id))"/></td>
|
||||||
<td><span t-field="aml.date"/></td>
|
<td><span t-field="aml.date"/></td>
|
||||||
<td><span t-field="aml.account_id.code"/></td>
|
<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.sudo().partner_id and aml.sudo().partner_id.name and aml.sudo().partner_id.name[:23] or ''"/></td>
|
||||||
<td><span t-esc="aml.name[:35]"/></td>
|
<td><span t-esc="aml.name[:35]"/></td>
|
||||||
<td><span t-esc="aml.debit" t-options="{'widget': 'monetary', 'display_currency': 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><span t-esc="aml.credit" t-options="{'widget': 'monetary', 'display_currency': res_company.currency_id}"/></td>
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ class ImBus(models.Model):
|
|||||||
class ImDispatch(object):
|
class ImDispatch(object):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.channels = {}
|
self.channels = {}
|
||||||
|
self.started = False
|
||||||
|
|
||||||
def poll(self, dbname, channels, last, options=None, timeout=TIMEOUT):
|
def poll(self, dbname, channels, last, options=None, timeout=TIMEOUT):
|
||||||
if options is None:
|
if options is None:
|
||||||
@@ -127,8 +128,17 @@ class ImDispatch(object):
|
|||||||
with registry.cursor() as cr:
|
with registry.cursor() as cr:
|
||||||
env = api.Environment(cr, SUPERUSER_ID, {})
|
env = api.Environment(cr, SUPERUSER_ID, {})
|
||||||
notifications = env['bus.bus'].poll(channels, last, options)
|
notifications = env['bus.bus'].poll(channels, last, options)
|
||||||
|
|
||||||
|
# immediatly returns in peek mode
|
||||||
|
if options.get('peek'):
|
||||||
|
return dict(notifications=notifications, channels=channels)
|
||||||
|
|
||||||
# or wait for future ones
|
# or wait for future ones
|
||||||
if not notifications:
|
if not notifications:
|
||||||
|
if not self.started:
|
||||||
|
# Lazy start of events listener
|
||||||
|
self.start()
|
||||||
|
|
||||||
event = self.Event()
|
event = self.Event()
|
||||||
for channel in channels:
|
for channel in channels:
|
||||||
self.channels.setdefault(hashable(channel), []).append(event)
|
self.channels.setdefault(hashable(channel), []).append(event)
|
||||||
@@ -178,15 +188,16 @@ class ImDispatch(object):
|
|||||||
import gevent
|
import gevent
|
||||||
self.Event = gevent.event.Event
|
self.Event = gevent.event.Event
|
||||||
gevent.spawn(self.run)
|
gevent.spawn(self.run)
|
||||||
elif odoo.multi_process:
|
|
||||||
# disabled in prefork mode
|
|
||||||
return
|
|
||||||
else:
|
else:
|
||||||
# threaded mode
|
# threaded mode
|
||||||
self.Event = threading.Event
|
self.Event = threading.Event
|
||||||
t = threading.Thread(name="%s.Bus" % __name__, target=self.run)
|
t = threading.Thread(name="%s.Bus" % __name__, target=self.run)
|
||||||
t.daemon = True
|
t.daemon = True
|
||||||
t.start()
|
t.start()
|
||||||
|
self.started = True
|
||||||
return self
|
return self
|
||||||
|
|
||||||
dispatch = ImDispatch().start()
|
dispatch = None
|
||||||
|
if not odoo.multi_process or odoo.evented:
|
||||||
|
# We only use the event dispatcher in threaded and gevent mode
|
||||||
|
dispatch = ImDispatch()
|
||||||
|
|||||||
@@ -866,7 +866,7 @@ class PosOrderLine(models.Model):
|
|||||||
self.tax_ids = self.product_id.taxes_id.filtered(lambda r: not self.company_id or r.company_id == self.company_id)
|
self.tax_ids = self.product_id.taxes_id.filtered(lambda r: not self.company_id or r.company_id == self.company_id)
|
||||||
fpos = self.order_id.fiscal_position_id
|
fpos = self.order_id.fiscal_position_id
|
||||||
tax_ids_after_fiscal_position = fpos.map_tax(self.tax_ids, self.product_id, self.order_id.partner_id) if fpos else self.tax_ids
|
tax_ids_after_fiscal_position = fpos.map_tax(self.tax_ids, self.product_id, self.order_id.partner_id) if fpos else self.tax_ids
|
||||||
self.price_unit = self.env['account.tax']._fix_tax_included_price(price, self.product_id.taxes_id, tax_ids_after_fiscal_position)
|
self.price_unit = self.env['account.tax']._fix_tax_included_price_company(price, self.product_id.taxes_id, tax_ids_after_fiscal_position, self.company_id)
|
||||||
|
|
||||||
@api.onchange('qty', 'discount', 'price_unit', 'tax_ids')
|
@api.onchange('qty', 'discount', 'price_unit', 'tax_ids')
|
||||||
def _onchange_qty(self):
|
def _onchange_qty(self):
|
||||||
|
|||||||
@@ -817,7 +817,7 @@ class PurchaseOrderLine(models.Model):
|
|||||||
if not seller:
|
if not seller:
|
||||||
return
|
return
|
||||||
|
|
||||||
price_unit = self.env['account.tax']._fix_tax_included_price(seller.price, self.product_id.supplier_taxes_id, self.taxes_id) if seller else 0.0
|
price_unit = self.env['account.tax']._fix_tax_included_price_company(seller.price, self.product_id.supplier_taxes_id, self.taxes_id, self.company_id) if seller else 0.0
|
||||||
if price_unit and seller and self.order_id.currency_id and seller.currency_id != self.order_id.currency_id:
|
if price_unit and seller and self.order_id.currency_id and seller.currency_id != self.order_id.currency_id:
|
||||||
price_unit = seller.currency_id.compute(price_unit, self.order_id.currency_id)
|
price_unit = seller.currency_id.compute(price_unit, self.order_id.currency_id)
|
||||||
|
|
||||||
@@ -890,7 +890,7 @@ class ProcurementOrder(models.Model):
|
|||||||
date=procurement.purchase_line_id.order_id.date_order and procurement.purchase_line_id.order_id.date_order[:10],
|
date=procurement.purchase_line_id.order_id.date_order and procurement.purchase_line_id.order_id.date_order[:10],
|
||||||
uom_id=procurement.purchase_line_id.product_uom)
|
uom_id=procurement.purchase_line_id.product_uom)
|
||||||
|
|
||||||
price_unit = self.env['account.tax']._fix_tax_included_price(seller.price, procurement.purchase_line_id.product_id.supplier_taxes_id, procurement.purchase_line_id.taxes_id) if seller else 0.0
|
price_unit = self.env['account.tax']._fix_tax_included_price_company(seller.price, procurement.purchase_line_id.product_id.supplier_taxes_id, procurement.purchase_line_id.taxes_id, self.company_id) if seller else 0.0
|
||||||
if price_unit and seller and procurement.purchase_line_id.order_id.currency_id and seller.currency_id != procurement.purchase_line_id.order_id.currency_id:
|
if price_unit and seller and procurement.purchase_line_id.order_id.currency_id and seller.currency_id != procurement.purchase_line_id.order_id.currency_id:
|
||||||
price_unit = seller.currency_id.compute(price_unit, procurement.purchase_line_id.order_id.currency_id)
|
price_unit = seller.currency_id.compute(price_unit, procurement.purchase_line_id.order_id.currency_id)
|
||||||
|
|
||||||
@@ -949,7 +949,7 @@ class ProcurementOrder(models.Model):
|
|||||||
if taxes_id:
|
if taxes_id:
|
||||||
taxes_id = taxes_id.filtered(lambda x: x.company_id.id == self.company_id.id)
|
taxes_id = taxes_id.filtered(lambda x: x.company_id.id == self.company_id.id)
|
||||||
|
|
||||||
price_unit = self.env['account.tax']._fix_tax_included_price(seller.price, self.product_id.supplier_taxes_id, taxes_id) if seller else 0.0
|
price_unit = self.env['account.tax']._fix_tax_included_price_company(seller.price, self.product_id.supplier_taxes_id, taxes_id, self.company_id) if seller else 0.0
|
||||||
if price_unit and seller and po.currency_id and seller.currency_id != po.currency_id:
|
if price_unit and seller and po.currency_id and seller.currency_id != po.currency_id:
|
||||||
price_unit = seller.currency_id.compute(price_unit, po.currency_id)
|
price_unit = seller.currency_id.compute(price_unit, po.currency_id)
|
||||||
|
|
||||||
@@ -1074,7 +1074,7 @@ class ProcurementOrder(models.Model):
|
|||||||
date=po.date_order and po.date_order[:10],
|
date=po.date_order and po.date_order[:10],
|
||||||
uom_id=procurement.product_id.uom_po_id)
|
uom_id=procurement.product_id.uom_po_id)
|
||||||
|
|
||||||
price_unit = self.env['account.tax']._fix_tax_included_price(seller.price, line.product_id.supplier_taxes_id, line.taxes_id) if seller else 0.0
|
price_unit = self.env['account.tax']._fix_tax_included_price_company(seller.price, line.product_id.supplier_taxes_id, line.taxes_id, self.company_id) if seller else 0.0
|
||||||
if price_unit and seller and po.currency_id and seller.currency_id != po.currency_id:
|
if price_unit and seller and po.currency_id and seller.currency_id != po.currency_id:
|
||||||
price_unit = seller.currency_id.compute(price_unit, po.currency_id)
|
price_unit = seller.currency_id.compute(price_unit, po.currency_id)
|
||||||
|
|
||||||
|
|||||||
@@ -910,7 +910,7 @@ class SaleOrderLine(models.Model):
|
|||||||
self._compute_tax_id()
|
self._compute_tax_id()
|
||||||
|
|
||||||
if self.order_id.pricelist_id and self.order_id.partner_id:
|
if self.order_id.pricelist_id and self.order_id.partner_id:
|
||||||
vals['price_unit'] = self.env['account.tax']._fix_tax_included_price(self._get_display_price(product), product.taxes_id, self.tax_id)
|
vals['price_unit'] = self.env['account.tax']._fix_tax_included_price_company(self._get_display_price(product), product.taxes_id, self.tax_id, self.company_id)
|
||||||
self.update(vals)
|
self.update(vals)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
@@ -930,7 +930,7 @@ class SaleOrderLine(models.Model):
|
|||||||
uom=self.product_uom.id,
|
uom=self.product_uom.id,
|
||||||
fiscal_position=self.env.context.get('fiscal_position')
|
fiscal_position=self.env.context.get('fiscal_position')
|
||||||
)
|
)
|
||||||
self.price_unit = self.env['account.tax']._fix_tax_included_price(self._get_display_price(product), product.taxes_id, self.tax_id)
|
self.price_unit = self.env['account.tax']._fix_tax_included_price_company(self._get_display_price(product), product.taxes_id, self.tax_id, self.company_id)
|
||||||
|
|
||||||
@api.multi
|
@api.multi
|
||||||
def unlink(self):
|
def unlink(self):
|
||||||
@@ -1006,7 +1006,7 @@ class SaleOrderLine(models.Model):
|
|||||||
|
|
||||||
price, rule_id = self.order_id.pricelist_id.with_context(pricelist_context).get_product_price_rule(self.product_id, self.product_uom_qty or 1.0, self.order_id.partner_id)
|
price, rule_id = self.order_id.pricelist_id.with_context(pricelist_context).get_product_price_rule(self.product_id, self.product_uom_qty or 1.0, self.order_id.partner_id)
|
||||||
new_list_price, currency_id = self.with_context(context_partner)._get_real_price_currency(self.product_id, rule_id, self.product_uom_qty, self.product_uom, self.order_id.pricelist_id.id)
|
new_list_price, currency_id = self.with_context(context_partner)._get_real_price_currency(self.product_id, rule_id, self.product_uom_qty, self.product_uom, self.order_id.pricelist_id.id)
|
||||||
new_list_price = self.env['account.tax']._fix_tax_included_price(new_list_price, self.product_id.taxes_id, self.tax_id)
|
new_list_price = self.env['account.tax']._fix_tax_included_price_company(new_list_price, self.product_id.taxes_id, self.tax_id, self.company_id)
|
||||||
|
|
||||||
if new_list_price != 0:
|
if new_list_price != 0:
|
||||||
if self.product_id.company_id and self.order_id.pricelist_id.currency_id != self.product_id.company_id.currency_id:
|
if self.product_id.company_id and self.order_id.pricelist_id.currency_id != self.product_id.company_id.currency_id:
|
||||||
|
|||||||
@@ -290,6 +290,13 @@ class ProcurementOrder(models.Model):
|
|||||||
1000 orderpoints.
|
1000 orderpoints.
|
||||||
This is appropriate for batch jobs only.
|
This is appropriate for batch jobs only.
|
||||||
"""
|
"""
|
||||||
|
if company_id and self.env.user.company_id.id != company_id:
|
||||||
|
# To ensure that the company_id is taken into account for
|
||||||
|
# all the processes triggered by this method
|
||||||
|
# i.e. If a PO is generated by the run of the procurements the
|
||||||
|
# sequence to use is the one for the specified company not the
|
||||||
|
# one of the user's company
|
||||||
|
self = self.with_context(company_id=company_id, force_company=company_id)
|
||||||
|
|
||||||
OrderPoint = self.env['stock.warehouse.orderpoint']
|
OrderPoint = self.env['stock.warehouse.orderpoint']
|
||||||
domain = self._get_orderpoint_domain(company_id=company_id)
|
domain = self._get_orderpoint_domain(company_id=company_id)
|
||||||
|
|||||||
@@ -567,8 +567,11 @@ class Picking(models.Model):
|
|||||||
'location_dest_id': mapping.location_dst_id,
|
'location_dest_id': mapping.location_dst_id,
|
||||||
'product_uom_id': uom.id,
|
'product_uom_id': uom.id,
|
||||||
'pack_lot_ids': [
|
'pack_lot_ids': [
|
||||||
(0, 0, {'lot_id': lot, 'qty': 0.0, 'qty_todo': lots_grouped[mapping][lot]})
|
(0, 0, {
|
||||||
for lot in lots_grouped.get(mapping, {}).keys()],
|
'lot_id': lot,
|
||||||
|
'qty': 0.0,
|
||||||
|
'qty_todo': mapping.product.uom_id._compute_quantity(lots_grouped[mapping][lot], uom)
|
||||||
|
}) for lot in lots_grouped.get(mapping, {}).keys()],
|
||||||
}
|
}
|
||||||
product_id_to_vals.setdefault(mapping.product.id, list()).append(val_dict)
|
product_id_to_vals.setdefault(mapping.product.id, list()).append(val_dict)
|
||||||
|
|
||||||
|
|||||||
@@ -728,6 +728,12 @@ var AbstractField = FormWidget.extend(FieldInterface, {
|
|||||||
set_value: function(value_) {
|
set_value: function(value_) {
|
||||||
this.set({'value': value_});
|
this.set({'value': value_});
|
||||||
},
|
},
|
||||||
|
/**
|
||||||
|
Method to set value of a field when loading a record
|
||||||
|
*/
|
||||||
|
set_value_from_record: function(record) {
|
||||||
|
this.set_value.call(this, record[this.name] || false);
|
||||||
|
},
|
||||||
get_value: function() {
|
get_value: function() {
|
||||||
return this.get('value');
|
return this.get('value');
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -453,12 +453,18 @@ var AbstractManyField = common.AbstractField.extend({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
_on_load_record: function (record) {
|
set_value_from_record: function (record) {
|
||||||
|
this._super.apply(this, arguments);
|
||||||
|
// we want to update starting_ids straight away so the value can be used as soon as
|
||||||
|
// possible without inconsistency
|
||||||
this.starting_ids = [];
|
this.starting_ids = [];
|
||||||
// don't set starting_ids for the new record
|
// don't set starting_ids for the new record
|
||||||
if (record.id && record[this.name] && (!isNaN(record.id) || record.id.indexOf(this.dataset.virtual_id_prefix) === -1)) {
|
if (record.id && record[this.name] && (!isNaN(record.id) || record.id.indexOf(this.dataset.virtual_id_prefix) === -1)) {
|
||||||
this.starting_ids = this.get('value').slice();
|
this.starting_ids = this.get('value').slice();
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_on_load_record: function (record) {
|
||||||
this.trigger("load_record", record);
|
this.trigger("load_record", record);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -308,7 +308,7 @@ var FormView = View.extend(common.FieldManagerMixin, {
|
|||||||
_(this.fields).each(function (field, f) {
|
_(this.fields).each(function (field, f) {
|
||||||
field._dirty_flag = false;
|
field._dirty_flag = false;
|
||||||
field._inhibit_on_change_flag = true;
|
field._inhibit_on_change_flag = true;
|
||||||
var result = field.set_value(self.datarecord[f] || false);
|
var result = field.set_value_from_record(self.datarecord);
|
||||||
field._inhibit_on_change_flag = false;
|
field._inhibit_on_change_flag = false;
|
||||||
set_values.push(result);
|
set_values.push(result);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class PaymentTransaction(models.Model):
|
|||||||
|
|
||||||
created_invoice.action_invoice_open()
|
created_invoice.action_invoice_open()
|
||||||
if tx.acquirer_id.journal_id:
|
if tx.acquirer_id.journal_id:
|
||||||
created_invoice.pay_and_reconcile(tx.acquirer_id.journal_id, pay_amount=created_invoice.amount_total)
|
created_invoice.with_context(tx_currency_id=tx.currency_id.id).pay_and_reconcile(tx.acquirer_id.journal_id, pay_amount=created_invoice.amount_total)
|
||||||
if created_invoice.payment_ids:
|
if created_invoice.payment_ids:
|
||||||
created_invoice.payment_ids[0].payment_transaction_id = tx
|
created_invoice.payment_ids[0].payment_transaction_id = tx
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ class SaleOrder(models.Model):
|
|||||||
if order.pricelist_id and order.partner_id:
|
if order.pricelist_id and order.partner_id:
|
||||||
order_line = order._cart_find_product_line(product.id)
|
order_line = order._cart_find_product_line(product.id)
|
||||||
if order_line:
|
if order_line:
|
||||||
pu = self.env['account.tax']._fix_tax_included_price(pu, product.taxes_id, order_line[0].tax_id)
|
pu = self.env['account.tax']._fix_tax_included_price_company(pu, product.taxes_id, order_line[0].tax_id, self.company_id)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'product_id': product_id,
|
'product_id': product_id,
|
||||||
@@ -159,10 +159,11 @@ class SaleOrder(models.Model):
|
|||||||
'pricelist': order.pricelist_id.id,
|
'pricelist': order.pricelist_id.id,
|
||||||
})
|
})
|
||||||
product = self.env['product.product'].with_context(product_context).browse(product_id)
|
product = self.env['product.product'].with_context(product_context).browse(product_id)
|
||||||
values['price_unit'] = self.env['account.tax']._fix_tax_included_price(
|
values['price_unit'] = self.env['account.tax']._fix_tax_included_price_company(
|
||||||
order_line._get_display_price(product),
|
order_line._get_display_price(product),
|
||||||
order_line.product_id.taxes_id,
|
order_line.product_id.taxes_id,
|
||||||
order_line.tax_id
|
order_line.tax_id,
|
||||||
|
self.company_id
|
||||||
)
|
)
|
||||||
|
|
||||||
order_line.write(values)
|
order_line.write(values)
|
||||||
|
|||||||
@@ -48,6 +48,11 @@ related to testing Odoo content (modules, mainly):
|
|||||||
.. autoclass:: odoo.tests.common.SingleTransactionCase
|
.. autoclass:: odoo.tests.common.SingleTransactionCase
|
||||||
:members: browse_ref, ref
|
:members: browse_ref, ref
|
||||||
|
|
||||||
|
.. autoclass:: odoo.tests.common.SavepointCase
|
||||||
|
|
||||||
|
.. autoclass:: odoo.tests.common.HttpCase
|
||||||
|
:members: browse_ref, ref, url_open, phantom_js
|
||||||
|
|
||||||
By default, tests are run once right after the corresponding module has been
|
By default, tests are run once right after the corresponding module has been
|
||||||
installed. Test cases can also be configured to run after all modules have
|
installed. Test cases can also be configured to run after all modules have
|
||||||
been installed, and not run right after the module installation:
|
been installed, and not run right after the module installation:
|
||||||
|
|||||||
@@ -220,6 +220,11 @@
|
|||||||
<field name="state_id"/>
|
<field name="state_id"/>
|
||||||
<field name="image"/>
|
<field name="image"/>
|
||||||
<field name="lang"/>
|
<field name="lang"/>
|
||||||
|
<!-- fields in form x2many view to diminish requests -->
|
||||||
|
<field name="comment"/>
|
||||||
|
<field name="customer"/>
|
||||||
|
<field name="display_name"/>
|
||||||
|
<field name="supplier"/>
|
||||||
<templates>
|
<templates>
|
||||||
<t t-name="kanban-box">
|
<t t-name="kanban-box">
|
||||||
<t t-set="color" t-value="kanban_color(record.color.raw_value)"/>
|
<t t-set="color" t-value="kanban_color(record.color.raw_value)"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user