[MERGE] forward port branch 9.0 up to d9d455bea3
This commit is contained in:
@@ -31,8 +31,8 @@ class base_config_settings(osv.TransientModel):
|
||||
google_id = self.pool.get('ir.model.data').get_object_reference(cr, uid, 'auth_oauth', 'provider_google')[1]
|
||||
rg = self.pool.get('auth.oauth.provider').read(cr, uid, [google_id], ['enabled','client_id'], context=context)
|
||||
return {
|
||||
'auth_oauth_google_enabled': rg[0]['enabled'],
|
||||
'auth_oauth_google_client_id': rg[0]['client_id'],
|
||||
'auth_oauth_google_enabled': rg[0]['enabled'] if rg else False,
|
||||
'auth_oauth_google_client_id': rg[0]['client_id'] if rg else False,
|
||||
'server_uri_google': self.get_uri(cr, uid, context)
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,8 @@ from openerp.exceptions import UserError
|
||||
|
||||
|
||||
def geo_find(addr):
|
||||
if not addr:
|
||||
return None
|
||||
url = 'https://maps.googleapis.com/maps/api/geocode/json?sensor=false&address='
|
||||
url += urllib2.quote(addr.encode('utf8'))
|
||||
|
||||
|
||||
@@ -572,10 +572,10 @@ class PosOrder(models.Model):
|
||||
'location_id': location_id,
|
||||
'location_dest_id': destination_id,
|
||||
}
|
||||
pos_qty = any([x.qty > 0 for x in order.lines])
|
||||
pos_qty = any([x.qty > 0 for x in order.lines if x.product_id.type in ['product', 'consu']])
|
||||
if pos_qty:
|
||||
order_picking = Picking.create(picking_vals.copy())
|
||||
neg_qty = any([x.qty < 0 for x in order.lines])
|
||||
neg_qty = any([x.qty < 0 for x in order.lines if x.product_id.type in ['product', 'consu']])
|
||||
if neg_qty:
|
||||
return_vals = picking_vals.copy()
|
||||
return_vals.update({
|
||||
|
||||
@@ -508,7 +508,10 @@ class PurchaseOrderLine(models.Model):
|
||||
qty = 0.0
|
||||
for inv_line in line.invoice_lines:
|
||||
if inv_line.invoice_id.state not in ['cancel']:
|
||||
qty += inv_line.uom_id._compute_qty_obj(inv_line.uom_id, inv_line.quantity, line.product_uom)
|
||||
if inv_line.invoice_id.type == 'in_invoice':
|
||||
qty += inv_line.uom_id._compute_qty_obj(inv_line.uom_id, inv_line.quantity, line.product_uom)
|
||||
elif inv_line.invoice_id.type == 'in_refund':
|
||||
qty -= inv_line.uom_id._compute_qty_obj(inv_line.uom_id, inv_line.quantity, line.product_uom)
|
||||
line.qty_invoiced = qty
|
||||
|
||||
@api.depends('order_id.state', 'move_ids.state')
|
||||
|
||||
@@ -10,4 +10,4 @@ class SaleReport(models.Model):
|
||||
margin = fields.Float('Margin')
|
||||
|
||||
def _select(self):
|
||||
return super(SaleReport, self)._select() + ", SUM(l.margin) AS margin"
|
||||
return super(SaleReport, self)._select() + ", SUM(l.margin / COALESCE(cr.rate, 1.0)) AS margin"
|
||||
|
||||
@@ -166,9 +166,10 @@ var FormView = View.extend(common.FieldManagerMixin, {
|
||||
if (this.fields_view.toolbar) {
|
||||
this.sidebar.add_toolbar(this.fields_view.toolbar);
|
||||
}
|
||||
var canDuplicate = this.is_action_enabled('create') && this.is_action_enabled('duplicate');
|
||||
this.sidebar.add_items('other', _.compact([
|
||||
this.is_action_enabled('delete') && { label: _t('Delete'), callback: this.on_button_delete },
|
||||
this.is_action_enabled('create') && { label: _t('Duplicate'), callback: this.on_button_duplicate }
|
||||
canDuplicate && { label: _t('Duplicate'), callback: this.on_button_duplicate }
|
||||
]));
|
||||
|
||||
this.sidebar.appendTo($node);
|
||||
|
||||
@@ -712,14 +712,15 @@ var KanbanView = View.extend({
|
||||
add_new_column: function (event) {
|
||||
var self = this;
|
||||
var model = new Model(this.relation, this.search_context);
|
||||
model.call('create', [{name: event.data.value}], {
|
||||
var name = event.data.value;
|
||||
model.call('name_create', [name], {
|
||||
context: this.search_context,
|
||||
}).then(function (id) {
|
||||
}).then(function (result) {
|
||||
var dataset = new data.DataSetSearch(self, self.model, self.dataset.get_context(), []);
|
||||
var group_data = {
|
||||
records: [],
|
||||
title: event.data.value,
|
||||
id: id,
|
||||
id: result[0],
|
||||
attributes: {folded: false},
|
||||
dataset: dataset,
|
||||
values: {},
|
||||
|
||||
@@ -214,7 +214,7 @@
|
||||
<record id="view_model_fields_form" model="ir.ui.view">
|
||||
<field name="model">ir.model.fields</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Fields">
|
||||
<form string="Fields" duplicate="false">
|
||||
<sheet>
|
||||
<group>
|
||||
<field name="name"/>
|
||||
@@ -320,7 +320,7 @@
|
||||
<record id="view_model_fields_tree" model="ir.ui.view">
|
||||
<field name="model">ir.model.fields</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="Fields">
|
||||
<tree string="Fields" duplicate="false">
|
||||
<field name="name"/>
|
||||
<field name="field_description"/>
|
||||
<field name="model_id"/>
|
||||
|
||||
@@ -13,6 +13,19 @@ class Company(models.Model):
|
||||
_description = 'Companies'
|
||||
_order = 'sequence, name'
|
||||
|
||||
@api.multi
|
||||
def copy(self, default=None):
|
||||
"""
|
||||
Duplicating a company without specifying a partner duplicate the partner
|
||||
"""
|
||||
self.ensure_one()
|
||||
default = dict(default or {})
|
||||
if not default.get('name') and not default.get('partner_id'):
|
||||
copy_partner = self.partner_id.copy()
|
||||
default['partner_id'] = copy_partner.id
|
||||
default['name'] = copy_partner.name
|
||||
return super(Company, self).copy(default)
|
||||
|
||||
_header = """
|
||||
<header>
|
||||
<pageTemplate>
|
||||
|
||||
Reference in New Issue
Block a user