[MERGE] forward port branch saas-11 up to f23394b83a
This commit is contained in:
@@ -405,7 +405,7 @@ class AccountInvoice(models.Model):
|
|||||||
default_model='account.invoice',
|
default_model='account.invoice',
|
||||||
default_res_id=self.id,
|
default_res_id=self.id,
|
||||||
default_use_template=bool(template),
|
default_use_template=bool(template),
|
||||||
default_template_id=template.id,
|
default_template_id=template and template.id or False,
|
||||||
default_composition_mode='comment',
|
default_composition_mode='comment',
|
||||||
mark_invoice_as_sent=True,
|
mark_invoice_as_sent=True,
|
||||||
custom_layout="account.mail_template_data_notification_email_account_invoice"
|
custom_layout="account.mail_template_data_notification_email_account_invoice"
|
||||||
|
|||||||
@@ -164,7 +164,7 @@ class IrModelFieldsAnonymizeWizard(models.TransientModel):
|
|||||||
table_name = self.env[model_name]._table
|
table_name = self.env[model_name]._table
|
||||||
|
|
||||||
# get the current value
|
# get the current value
|
||||||
self.env.cr.execute("select id, %s from %s" % (field_name, table_name))
|
self.env.cr.execute('select id, "%s" from "%s"' % (field_name, table_name))
|
||||||
for record in self.env.cr.dictfetchall():
|
for record in self.env.cr.dictfetchall():
|
||||||
data.append({"model_id": model_name, "field_id": field_name, "id": record['id'], "value": record[field_name]})
|
data.append({"model_id": model_name, "field_id": field_name, "id": record['id'], "value": record[field_name]})
|
||||||
|
|
||||||
@@ -196,7 +196,7 @@ class IrModelFieldsAnonymizeWizard(models.TransientModel):
|
|||||||
if anonymized_value is None:
|
if anonymized_value is None:
|
||||||
raise UserError('%s: %s' % (error_type, _("Anonymized value can not be empty.")))
|
raise UserError('%s: %s' % (error_type, _("Anonymized value can not be empty.")))
|
||||||
|
|
||||||
sql = "update %(table)s set %(field)s = %%(anonymized_value)s where id = %%(id)s" % {
|
sql = 'update "%(table)s" set "%(field)s" = %%(anonymized_value)s where id = %%(id)s' % {
|
||||||
'table': table_name,
|
'table': table_name,
|
||||||
'field': field_name,
|
'field': field_name,
|
||||||
}
|
}
|
||||||
@@ -285,7 +285,7 @@ class IrModelFieldsAnonymizeWizard(models.TransientModel):
|
|||||||
custom_updates.sort(key=itemgetter('sequence'))
|
custom_updates.sort(key=itemgetter('sequence'))
|
||||||
queries = [(record['query'], record['query_type']) for record in custom_updates if record['query_type']]
|
queries = [(record['query'], record['query_type']) for record in custom_updates if record['query_type']]
|
||||||
elif table_name:
|
elif table_name:
|
||||||
queries = [("update %(table)s set %(field)s = %%(value)s where id = %%(id)s" % {
|
queries = [('update "%(table)s" set "%(field)s" = %%(value)s where id = %%(id)s' % {
|
||||||
'table': table_name,
|
'table': table_name,
|
||||||
'field': line['field_id'],
|
'field': line['field_id'],
|
||||||
}, 'sql')]
|
}, 'sql')]
|
||||||
|
|||||||
@@ -705,7 +705,7 @@ class Message(models.Model):
|
|||||||
def _invalidate_documents(self):
|
def _invalidate_documents(self):
|
||||||
""" Invalidate the cache of the documents followed by ``self``. """
|
""" Invalidate the cache of the documents followed by ``self``. """
|
||||||
for record in self:
|
for record in self:
|
||||||
if record.res_id:
|
if record.model and record.res_id:
|
||||||
self.env[record.model].invalidate_cache(ids=[record.res_id])
|
self.env[record.model].invalidate_cache(ids=[record.res_id])
|
||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
|
|||||||
@@ -189,6 +189,7 @@ td {
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
display: table;
|
display: table;
|
||||||
border: none;
|
border: none;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
.pos .window .subwindow{
|
.pos .window .subwindow{
|
||||||
display: table-row;
|
display: table-row;
|
||||||
@@ -213,6 +214,19 @@ td {
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.pos .clientlist-screen .window,
|
||||||
|
.pos .clientlist-screen .full-content .subwindow{
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
.pos .clientlist-screen .full-content .subwindow-container{
|
||||||
|
display: block;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
.pos .clientlist-screen .full-content .subwindow.collapsed,
|
||||||
|
.pos .clientlist-screen .full-content .subwindow-container.collapsed{
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
/* ---- Scrollers ----- */
|
/* ---- Scrollers ----- */
|
||||||
|
|
||||||
.pos .scroller-container{
|
.pos .scroller-container{
|
||||||
@@ -703,6 +717,7 @@ td {
|
|||||||
display: inline-block;
|
display: inline-block;
|
||||||
float: right;
|
float: right;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
width: 216px;
|
||||||
margin: 16px;
|
margin: 16px;
|
||||||
margin-top: 8px;
|
margin-top: 8px;
|
||||||
margin-left: 0px;
|
margin-left: 0px;
|
||||||
|
|||||||
@@ -1335,6 +1335,9 @@ var ClientListScreenWidget = ScreenWidget.extend({
|
|||||||
var new_height = contents.height();
|
var new_height = contents.height();
|
||||||
|
|
||||||
if(!this.details_visible){
|
if(!this.details_visible){
|
||||||
|
// resize client list to take into account client details
|
||||||
|
parent.height('-=' + new_height);
|
||||||
|
|
||||||
if(clickpos < scroll + new_height + 20 ){
|
if(clickpos < scroll + new_height + 20 ){
|
||||||
parent.scrollTop( clickpos - 20 );
|
parent.scrollTop( clickpos - 20 );
|
||||||
}else{
|
}else{
|
||||||
@@ -1364,6 +1367,7 @@ var ClientListScreenWidget = ScreenWidget.extend({
|
|||||||
});
|
});
|
||||||
} else if (visibility === 'hide') {
|
} else if (visibility === 'hide') {
|
||||||
contents.empty();
|
contents.empty();
|
||||||
|
parent.height('100%');
|
||||||
if( height > scroll ){
|
if( height > scroll ){
|
||||||
contents.css({height:height+'px'});
|
contents.css({height:height+'px'});
|
||||||
contents.animate({height:0},400,function(){
|
contents.animate({height:0},400,function(){
|
||||||
|
|||||||
@@ -137,7 +137,10 @@ class PortalWizardUser(models.TransientModel):
|
|||||||
user_portal = None
|
user_portal = None
|
||||||
# create a user if necessary, and make sure it is in the portal group
|
# create a user if necessary, and make sure it is in the portal group
|
||||||
if not user:
|
if not user:
|
||||||
company_id = wizard_user.partner_id.company_id.id
|
if wizard_user.partner_id.company_id:
|
||||||
|
company_id = wizard_user.partner_id.company_id.id
|
||||||
|
else:
|
||||||
|
company_id = self.env['res.company']._company_default_get('res.users')
|
||||||
user_portal = wizard_user.sudo().with_context(company_id=company_id)._create_user()
|
user_portal = wizard_user.sudo().with_context(company_id=company_id)._create_user()
|
||||||
else:
|
else:
|
||||||
user_portal = user
|
user_portal = user
|
||||||
|
|||||||
@@ -338,11 +338,11 @@ class InventoryLine(models.Model):
|
|||||||
theoretical_qty = self.product_id.uom_id._compute_quantity(theoretical_qty, self.product_uom_id)
|
theoretical_qty = self.product_id.uom_id._compute_quantity(theoretical_qty, self.product_uom_id)
|
||||||
self.theoretical_qty = theoretical_qty
|
self.theoretical_qty = theoretical_qty
|
||||||
|
|
||||||
@api.onchange('product_id', 'product_uom_id')
|
@api.onchange('product_id')
|
||||||
def onchange_product_or_uom(self):
|
def onchange_product(self):
|
||||||
res = {}
|
res = {}
|
||||||
# If no UoM or incorrect UoM put default one from product
|
# If no UoM or incorrect UoM put default one from product
|
||||||
if self.product_id and (not self.product_uom_id or self.product_id.uom_id.category_id != self.product_uom_id.category_id):
|
if self.product_id:
|
||||||
self.product_uom_id = self.product_id.uom_id
|
self.product_uom_id = self.product_id.uom_id
|
||||||
res['domain'] = {'product_uom_id': [('category_id', '=', self.product_id.uom_id.category_id.id)]}
|
res['domain'] = {'product_uom_id': [('category_id', '=', self.product_id.uom_id.category_id.id)]}
|
||||||
return res
|
return res
|
||||||
|
|||||||
@@ -378,7 +378,7 @@ class Website(models.Model):
|
|||||||
request.session['sale_order_id'] = sale_order.id
|
request.session['sale_order_id'] = sale_order.id
|
||||||
|
|
||||||
if request.website.partner_id.id != partner.id:
|
if request.website.partner_id.id != partner.id:
|
||||||
partner.write({'last_website_so_id': sale_order_id})
|
partner.write({'last_website_so_id': sale_order.id})
|
||||||
|
|
||||||
if sale_order:
|
if sale_order:
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
Italy, 2017-01-24
|
||||||
|
|
||||||
|
I hereby agree to the terms of the Odoo Individual Contributor License Agreement v1.0.
|
||||||
|
|
||||||
|
I declare that I am authorized and able to make this agreement and sign this declaration.
|
||||||
|
|
||||||
|
Signed,
|
||||||
|
|
||||||
|
Sergio Corato sergiocorato@gmail.com https://github.com/sergiocorato
|
||||||
Reference in New Issue
Block a user