diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py
index f34810b6bc6..ba6e8502efd 100644
--- a/addons/account/models/partner.py
+++ b/addons/account/models/partner.py
@@ -298,10 +298,16 @@ class ResPartner(models.Model):
partner.total_invoiced = sum(price['total'] for price in price_totals if price['partner_id'] in child_ids)
@api.multi
- def _journal_item_count(self):
+ def _compute_journal_item_count(self):
+ AccountMoveLine = self.env['account.move.line']
for partner in self:
- partner.journal_item_count = self.env['account.move.line'].search_count([('partner_id', '=', partner.id)])
- partner.contracts_count = self.env['account.analytic.account'].search_count([('partner_id', '=', partner.id)])
+ partner.journal_item_count = AccountMoveLine.search_count([('partner_id', '=', partner.id)])
+
+ @api.multi
+ def _compute_contracts_count(self):
+ AccountAnalyticAccount = self.env['account.analytic.account']
+ for partner in self:
+ partner.contracts_count = AccountAnalyticAccount.search_count([('partner_id', '=', partner.id)])
def get_followup_lines_domain(self, date, overdue_only=False, only_unblocked=False):
domain = [('reconciled', '=', False), ('account_id.deprecated', '=', False), ('account_id.internal_type', '=', 'receivable'), '|', ('debit', '!=', 0), ('credit', '!=', 0), ('company_id', '=', self.env.user.company_id.id)]
@@ -383,9 +389,8 @@ class ResPartner(models.Model):
groups='account.group_account_invoice')
currency_id = fields.Many2one('res.currency', compute='_get_company_currency', readonly=True,
string="Currency", help='Utility field to express amount currency')
-
- contracts_count = fields.Integer(compute='_journal_item_count', string="Contracts", type='integer')
- journal_item_count = fields.Integer(compute='_journal_item_count', string="Journal Items", type="integer")
+ contracts_count = fields.Integer(compute='_compute_contracts_count', string="Contracts", type='integer')
+ journal_item_count = fields.Integer(compute='_compute_journal_item_count', string="Journal Items", type="integer")
issued_total = fields.Monetary(compute='_compute_issued_total', string="Journal Items")
property_account_payable_id = fields.Many2one('account.account', company_dependent=True,
string="Account Payable", oldname="property_account_payable",
diff --git a/addons/mail/models/res_users.py b/addons/mail/models/res_users.py
index 19630150a75..6aa3e307876 100644
--- a/addons/mail/models/res_users.py
+++ b/addons/mail/models/res_users.py
@@ -2,6 +2,7 @@
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import _, api, exceptions, fields, models
+from odoo.addons.base.res.res_users import is_selection_groups
class Users(models.Model):
@@ -54,11 +55,14 @@ class Users(models.Model):
@api.multi
def write(self, vals):
write_res = super(Users, self).write(vals)
+ sel_groups = [vals[k] for k in vals if is_selection_groups(k) and vals[k]]
if vals.get('groups_id'):
# form: {'group_ids': [(3, 10), (3, 3), (4, 10), (4, 3)]} or {'group_ids': [(6, 0, [ids]}
user_group_ids = [command[1] for command in vals['groups_id'] if command[0] == 4]
user_group_ids += [id for command in vals['groups_id'] if command[0] == 6 for id in command[2]]
self.env['mail.channel'].search([('group_ids', 'in', user_group_ids)])._subscribe_users()
+ elif sel_groups:
+ self.env['mail.channel'].search([('group_ids', 'in', sel_groups)])._subscribe_users()
return write_res
def _create_welcome_message(self):
diff --git a/addons/mail/security/ir.model.access.csv b/addons/mail/security/ir.model.access.csv
index 95439743574..77eb51c7859 100644
--- a/addons/mail/security/ir.model.access.csv
+++ b/addons/mail/security/ir.model.access.csv
@@ -22,7 +22,7 @@ access_mail_alias_all,mail.alias.all,model_mail_alias,,1,0,0,0
access_mail_alias_user,mail.alias.user,model_mail_alias,base.group_user,1,1,1,1
access_mail_alias_system,mail.alias.system,model_mail_alias,base.group_system,1,1,1,1
access_mail_message_subtype_all,mail.message.subtype.all,model_mail_message_subtype,,1,0,0,0
-access_mail_message_subtype_user,mail.message.subtype.user,model_mail_message_subtype,,1,1,1,1
+access_mail_message_subtype_user,mail.message.subtype.user,model_mail_message_subtype,base.group_user,1,1,1,1
access_mail_tracking_value_all,mail.tracking.value.all,model_mail_tracking_value,,0,0,0,0
access_mail_tracking_value_portal,mail.tracking.value.portal,model_mail_tracking_value,base.group_portal,0,0,0,0
access_mail_tracking_value_user,mail.tracking.value.user,model_mail_tracking_value,base.group_user,0,0,0,0
diff --git a/addons/point_of_sale/static/src/js/models.js b/addons/point_of_sale/static/src/js/models.js
index 19400b2fe93..c5cf1c77e5c 100644
--- a/addons/point_of_sale/static/src/js/models.js
+++ b/addons/point_of_sale/static/src/js/models.js
@@ -508,7 +508,7 @@ exports.PosModel = Backbone.Model.extend({
.then(function(){ load_model(index + 1); },
function(err){ loaded.reject(err); });
}catch(err){
- console.error(err.stack);
+ console.error(err.message, err.stack);
loaded.reject(err);
}
},function(err){
diff --git a/addons/stock/wizard/stock_immediate_transfer.py b/addons/stock/wizard/stock_immediate_transfer.py
index 365e9dbb382..2183e454023 100644
--- a/addons/stock/wizard/stock_immediate_transfer.py
+++ b/addons/stock/wizard/stock_immediate_transfer.py
@@ -33,4 +33,4 @@ class StockImmediateTransfer(models.TransientModel):
pack.write({'qty_done': pack.product_qty})
else:
pack.unlink()
- self.pick_id.do_transfer()
+ return self.pick_id.do_transfer()
diff --git a/addons/stock_account/models/stock.py b/addons/stock_account/models/stock.py
index f66900de681..5bb399257c9 100644
--- a/addons/stock_account/models/stock.py
+++ b/addons/stock_account/models/stock.py
@@ -71,7 +71,10 @@ class StockQuant(models.Model):
valuation_update = newprice - quant.cost
# this is where we post accounting entries for adjustment, if needed
# If neg quant period already closed (likely with manual valuation), skip update
- if not quant.company_id.currency_id.is_zero(valuation_update) and move._check_lock_date():
+ lock_date = max(move.company_id.period_lock_date, move.company_id.fiscalyear_lock_date)
+ if self.user_has_groups('account.group_account_manager'):
+ lock_date = move.company_id.fiscalyear_lock_date
+ if not quant.company_id.currency_id.is_zero(valuation_update) and lock_date and move.date[:10] > lock_date:
quant.with_context(force_valuation_amount=valuation_update)._account_entry_move(move)
# update the standard price of the product, only if we would have
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py
index dbf747c6832..fd68fa704dc 100644
--- a/addons/website/controllers/main.py
+++ b/addons/website/controllers/main.py
@@ -63,7 +63,7 @@ class Website(Home):
@http.route('/', type='http', auth="public", website=True)
def index(self, **kw):
page = 'homepage'
- main_menu = request.env.ref('website.main_menu', raise_if_not_found=False)
+ main_menu = request.website.menu_id or request.env.ref('website.main_menu', raise_if_not_found=False)
if main_menu:
first_menu = main_menu.child_id and main_menu.child_id[0]
if first_menu:
diff --git a/addons/website_blog/views/website_blog_templates.xml b/addons/website_blog/views/website_blog_templates.xml
index f6f513668ac..bcaa3a4c2aa 100644
--- a/addons/website_blog/views/website_blog_templates.xml
+++ b/addons/website_blog/views/website_blog_templates.xml
@@ -102,6 +102,7 @@