diff --git a/addons/account_asset/account_asset_invoice.py b/addons/account_asset/account_asset_invoice.py index 88027ca8125..8e8187b93bf 100644 --- a/addons/account_asset/account_asset_invoice.py +++ b/addons/account_asset/account_asset_invoice.py @@ -17,8 +17,9 @@ class AccountInvoice(models.Model): result = super(AccountInvoice, self).action_move_create() for inv in self: if inv.number: - if self.env['account.asset.asset'].sudo().search([('code', '=', inv.number)]): - raise Warning(_('You already have assets with the reference %s.\nPlease delete these assets before creating new ones for this invoice.') % (inv.number,)) + asset_ids = self.env['account.asset.asset'].sudo().search([('invoice_id', '=', inv.id), ('company_id', '=', inv.company_id.id)]) + if asset_ids: + asset_ids.write({'active': False}) inv.invoice_line_ids.asset_create() return result diff --git a/addons/hr_recruitment/views/hr_recruitment_views.xml b/addons/hr_recruitment/views/hr_recruitment_views.xml index 8f7357dec8b..0b619ac3a83 100644 --- a/addons/hr_recruitment/views/hr_recruitment_views.xml +++ b/addons/hr_recruitment/views/hr_recruitment_views.xml @@ -556,6 +556,7 @@ kanban,tree,form [('res_model','=','hr.applicant')] + {'create': False}

Search through resumes and motivation letters. diff --git a/addons/mail/models/mail_message.py b/addons/mail/models/mail_message.py index 6cc7327fb36..c0b369d7309 100644 --- a/addons/mail/models/mail_message.py +++ b/addons/mail/models/mail_message.py @@ -741,7 +741,13 @@ class Message(models.Model): ON channel_partner.channel_id = channel.id AND channel_partner.partner_id = (%%s) WHERE m.id = ANY (%%s)""" % self._table, (self.env.user.partner_id.id, self.env.user.partner_id.id, self.ids,)) for mid, rmod, rid, author_id, parent_id, partner_id, channel_id in self._cr.fetchall(): - message_values[mid] = {'model': rmod, 'res_id': rid, 'author_id': author_id, 'parent_id': parent_id, 'partner_id': partner_id, 'channel_id': channel_id} + message_values[mid] = { + 'model': rmod, + 'res_id': rid, + 'author_id': author_id, + 'parent_id': parent_id, + 'notified': any((message_values[mid].get('notified'), partner_id, channel_id)) + } else: self._cr.execute("""SELECT DISTINCT id, model, res_id, author_id, parent_id FROM "%s" WHERE id = ANY (%%s)""" % self._table, (self.ids,)) for mid, rmod, rid, author_id, parent_id in self._cr.fetchall(): @@ -780,7 +786,7 @@ class Message(models.Model): other_ids = set(self.ids).difference(set(author_ids), set(notified_ids)) model_record_ids = _generate_model_record_ids(message_values, other_ids) if operation in ['read', 'write']: - notified_ids = [mid for mid, message in message_values.iteritems() if message.get('partner_id') or message.get('channel_id')] + notified_ids = [mid for mid, message in message_values.iteritems() if message.get('notified')] elif operation == 'create': for doc_model, doc_ids in model_record_ids.items(): followers = self.env['mail.followers'].sudo().search([ diff --git a/addons/sale/sales_team.py b/addons/sale/sales_team.py index c4a593cf11d..309419eb97f 100644 --- a/addons/sale/sales_team.py +++ b/addons/sale/sales_team.py @@ -18,7 +18,7 @@ class crm_team(osv.Model): res = dict.fromkeys(ids, 0) domain = [ ('team_id', 'in', ids), - ('state', '=', 'manual'), + ('invoice_status', '=', 'to invoice'), ] amounts = obj.read_group(cr, uid, domain, ['amount_total', 'team_id'], ['team_id'], context=context) for rec in amounts: diff --git a/addons/sales_team/models/crm_team.py b/addons/sales_team/models/crm_team.py index fb01d618331..abe9f2eba9c 100644 --- a/addons/sales_team/models/crm_team.py +++ b/addons/sales_team/models/crm_team.py @@ -15,7 +15,7 @@ class CrmTeam(models.Model): def _get_default_team_id(self, user_id=None): if not user_id: user_id = self.env.uid - team_id = self.env['crm.team'].search( + team_id = self.env['crm.team'].sudo().search( ['|', ('user_id', '=', user_id), ('member_ids', 'in', [user_id])], limit=1) if not team_id and 'default_team_id' in self.env.context: diff --git a/addons/website_crm/views/website_crm.xml b/addons/website_crm/views/website_crm.xml index db2086b07a1..fc4208a1e7e 100644 --- a/addons/website_crm/views/website_crm.xml +++ b/addons/website_crm/views/website_crm.xml @@ -44,7 +44,7 @@

- + Send
diff --git a/addons/website_form/static/src/js/website_form.js b/addons/website_form/static/src/js/website_form.js index cea891ef135..ad5dcaa5cb7 100644 --- a/addons/website_form/static/src/js/website_form.js +++ b/addons/website_form/static/src/js/website_form.js @@ -47,6 +47,7 @@ odoo.define('website_form.animation', function (require) { send: function(e) { e.preventDefault(); // Prevent the default submit behavior + this.$target.find('.o_website_form_send').off(); // Prevent users from crazy clicking var self = this; @@ -211,6 +212,10 @@ odoo.define('website_form.animation', function (require) { }, update_status: function(status) { + var self = this; + if (status != 'success') { // Restore send button behavior if result is an error + this.$target.find('.o_website_form_send').on('click',function(e) {self.send(e);}); + } this.$target.find('#o_website_form_result').replaceWith(qweb.render("website_form.status_" + status)) }, }); diff --git a/addons/website_hr_recruitment/views/templates.xml b/addons/website_hr_recruitment/views/templates.xml index 3ac6736a7e2..38643a7479e 100644 --- a/addons/website_hr_recruitment/views/templates.xml +++ b/addons/website_hr_recruitment/views/templates.xml @@ -195,7 +195,7 @@
- + Submit
diff --git a/addons/website_project_issue/security/ir.model.access.csv b/addons/website_project_issue/security/ir.model.access.csv index e55c4c4a1cf..d84e0831aba 100644 --- a/addons/website_project_issue/security/ir.model.access.csv +++ b/addons/website_project_issue/security/ir.model.access.csv @@ -1,3 +1,2 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_issues,project_issue,project_issue.model_project_issue,base.group_portal,1,0,0,0 -access_case_section,crm_team,sales_team.model_crm_team,base.group_portal,1,0,0,0 diff --git a/openerp/addons/base/ir/ir_http.py b/openerp/addons/base/ir/ir_http.py index 5148b11c8d8..e04bd270eea 100644 --- a/openerp/addons/base/ir/ir_http.py +++ b/openerp/addons/base/ir/ir_http.py @@ -300,7 +300,7 @@ class ir_http(osv.AbstractModel): mimetype = obj.mimetype elif filename: mimetype = mimetypes.guess_type(filename)[0] - elif getattr(env[model]._fields[field], 'attachment', False): + if not mimetype and getattr(env[model]._fields[field], 'attachment', False): # for binary fields, fetch the ir_attachement for mimetype check attach_mimetype = env['ir.attachment'].search_read(domain=[('res_model', '=', model), ('res_id', '=', id), ('res_field', '=', field)], fields=['mimetype'], limit=1) mimetype = attach_mimetype and attach_mimetype[0]['mimetype']