diff --git a/addons/account/account_invoice.py b/addons/account/account_invoice.py index 3c73bc8a9f8..2c770e3a933 100644 --- a/addons/account/account_invoice.py +++ b/addons/account/account_invoice.py @@ -488,7 +488,7 @@ class account_invoice(models.Model): @api.multi def onchange_payment_term_date_invoice(self, payment_term_id, date_invoice): if not date_invoice: - date_invoice = fields.Date.today() + date_invoice = fields.Date.context_today(self) if not payment_term_id: # To make sure the invoice due date should contain due date which is # entered by user when there is no payment term defined @@ -729,7 +729,7 @@ class account_invoice(models.Model): total_currency = 0 for line in invoice_move_lines: if self.currency_id != company_currency: - currency = self.currency_id.with_context(date=self.date_invoice or fields.Date.today()) + currency = self.currency_id.with_context(date=self.date_invoice or fields.Date.context_today(self)) line['currency_id'] = currency.id line['amount_currency'] = line['price'] line['price'] = currency.compute(line['price'], company_currency) @@ -892,7 +892,7 @@ class account_invoice(models.Model): 'ref': inv.reference or inv.name, 'line_id': line, 'journal_id': journal.id, - 'date': date, + 'date': inv.date_invoice, 'narration': inv.comment, 'company_id': inv.company_id.id, } @@ -1088,7 +1088,7 @@ class account_invoice(models.Model): values['journal_id'] = journal.id values['type'] = TYPE2REFUND[invoice['type']] - values['date_invoice'] = date or fields.Date.today() + values['date_invoice'] = date or fields.Date.context_today(invoice) values['state'] = 'draft' values['number'] = False @@ -1118,7 +1118,7 @@ class account_invoice(models.Model): SIGN = {'out_invoice': -1, 'in_invoice': 1, 'out_refund': 1, 'in_refund': -1} direction = SIGN[self.type] # take the chosen date - date = self._context.get('date_p') or fields.Date.today() + date = self._context.get('date_p') or fields.Date.context_today(self) # Take the amount in currency and the currency of the payment if self._context.get('amount_currency') and self._context.get('currency_id'): @@ -1506,7 +1506,7 @@ class account_invoice_tax(models.Model): company = self.env['res.company'].browse(company_id) if currency_id and company.currency_id: currency = self.env['res.currency'].browse(currency_id) - currency = currency.with_context(date=date_invoice or fields.Date.today()) + currency = currency.with_context(date=date_invoice or fields.Date.context_today(self)) base = currency.compute(base * factor, company.currency_id, round=False) return {'value': {'base_amount': base}} @@ -1516,14 +1516,14 @@ class account_invoice_tax(models.Model): company = self.env['res.company'].browse(company_id) if currency_id and company.currency_id: currency = self.env['res.currency'].browse(currency_id) - currency = currency.with_context(date=date_invoice or fields.Date.today()) + currency = currency.with_context(date=date_invoice or fields.Date.context_today(self)) amount = currency.compute(amount * factor, company.currency_id, round=False) return {'value': {'tax_amount': amount}} @api.v8 def compute(self, invoice): tax_grouped = {} - currency = invoice.currency_id.with_context(date=invoice.date_invoice or fields.Date.today()) + currency = invoice.currency_id.with_context(date=invoice.date_invoice or fields.Date.context_today(invoice)) company_currency = invoice.company_id.currency_id for line in invoice.invoice_line: taxes = line.invoice_line_tax_id.compute_all( diff --git a/addons/auth_ldap/users_ldap.py b/addons/auth_ldap/users_ldap.py index 70323bb6a0e..2c7523db430 100644 --- a/addons/auth_ldap/users_ldap.py +++ b/addons/auth_ldap/users_ldap.py @@ -237,7 +237,7 @@ class res_company(osv.osv): _inherit = "res.company" _columns = { 'ldaps': fields.one2many( - 'res.company.ldap', 'company', 'LDAP Parameters', copy=True), + 'res.company.ldap', 'company', 'LDAP Parameters', copy=True, groups="base.group_system"), } diff --git a/addons/base_gengo/res_company.py b/addons/base_gengo/res_company.py index 8400db8f943..dc8c4debed2 100644 --- a/addons/base_gengo/res_company.py +++ b/addons/base_gengo/res_company.py @@ -26,10 +26,10 @@ class res_company(osv.Model): _name = "res.company" _inherit = "res.company" _columns = { - "gengo_private_key": fields.text("Gengo Private Key", copy=False), - "gengo_public_key": fields.text("Gengo Public Key", copy=False), - "gengo_comment": fields.text("Comments", help="This comment will be automatically be enclosed in each an every request sent to Gengo"), - "gengo_auto_approve": fields.boolean("Auto Approve Translation ?", help="Jobs are Automatically Approved by Gengo."), + "gengo_private_key": fields.text("Gengo Private Key", copy=False, groups="base.group_system"), + "gengo_public_key": fields.text("Gengo Public Key", copy=False, groups="base.group_user"), + "gengo_comment": fields.text("Comments", help="This comment will be automatically be enclosed in each an every request sent to Gengo", groups="base.group_user"), + "gengo_auto_approve": fields.boolean("Auto Approve Translation ?", help="Jobs are Automatically Approved by Gengo.", groups="base.group_user"), "gengo_sandbox": fields.boolean("Sandbox Mode", help="Check this box if you're using the sandbox mode of Gengo, mainly used for testing purpose."), } diff --git a/addons/board/static/src/js/dashboard.js b/addons/board/static/src/js/dashboard.js index f31a277ab66..0d1d210a4de 100644 --- a/addons/board/static/src/js/dashboard.js +++ b/addons/board/static/src/js/dashboard.js @@ -429,7 +429,7 @@ instance.web.SearchViewDrawer.include({ add_common_inputs: function() { this._super(); var vm = this.getParent().getParent(); - if (vm.inner_action && vm.inner_action.views) { + if (vm.inner_action && vm.inner_action.id && vm.inner_action.views) { (new instance.board.AddToDashboard(this)); } } diff --git a/addons/delivery/stock.py b/addons/delivery/stock.py index f836a919e9f..8e7b5836355 100644 --- a/addons/delivery/stock.py +++ b/addons/delivery/stock.py @@ -91,9 +91,10 @@ class stock_picking(osv.osv): _('The carrier %s (id: %d) has no delivery grid!') \ % (picking.carrier_id.name, picking.carrier_id.id)) + quantity = sum([line.product_uom_qty for line in picking.move_lines]) price = grid_obj.get_price_from_picking(cr, uid, grid_id, invoice.amount_untaxed, picking.weight, picking.volume, - context=context) + quantity, context=context) account_id = picking.carrier_id.product_id.property_account_income.id if not account_id: account_id = picking.carrier_id.product_id.categ_id\ diff --git a/addons/email_template/security/ir.model.access.csv b/addons/email_template/security/ir.model.access.csv index adce0420793..80be050ecbc 100644 --- a/addons/email_template/security/ir.model.access.csv +++ b/addons/email_template/security/ir.model.access.csv @@ -1,3 +1,3 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_email_template,email.template,model_email_template,,1,1,1,0 +access_email_template,email.template,model_email_template,base.group_user,1,1,1,0 access_email_template_system,email.template system,model_email_template,base.group_system,1,1,1,1 diff --git a/addons/email_template/wizard/mail_compose_message.py b/addons/email_template/wizard/mail_compose_message.py index f79aa77ddc9..b2cbf806ee7 100644 --- a/addons/email_template/wizard/mail_compose_message.py +++ b/addons/email_template/wizard/mail_compose_message.py @@ -59,7 +59,7 @@ class mail_compose_message(osv.TransientModel): return res _columns = { - 'template_id': fields.many2one('email.template', 'Use template', select=True), + 'template_id': fields.many2one('email.template', 'Use template', select=True, groups="base.group_user"), } def send_mail(self, cr, uid, ids, context=None): diff --git a/addons/email_template/wizard/mail_compose_message_view.xml b/addons/email_template/wizard/mail_compose_message_view.xml index 810aa54603a..3c5ffd4ad22 100644 --- a/addons/email_template/wizard/mail_compose_message_view.xml +++ b/addons/email_template/wizard/mail_compose_message_view.xml @@ -6,6 +6,7 @@ mail.compose.message.form mail.compose.message + diff --git a/addons/fetchmail/fetchmail.py b/addons/fetchmail/fetchmail.py index b496b8bca76..3a465577c96 100644 --- a/addons/fetchmail/fetchmail.py +++ b/addons/fetchmail/fetchmail.py @@ -235,12 +235,12 @@ openerp_mailgate: "|/path/to/openerp-mailgate.py --host=localhost -u %(uid)d -p save_original=server.original, strip_attachments=(not server.attach), context=context) + pop_server.dele(num) except Exception: _logger.exception('Failed to process mail from %s server %s.', server.type, server.name) failed += 1 if res_id and server.action_id: action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids': [res_id], 'active_model': context.get("thread_model", server.object_id.model)}) - pop_server.dele(num) cr.commit() _logger.info("Fetched %d email(s) on %s server %s; %d succeeded, %d failed.", numMsgs, server.type, server.name, (numMsgs - failed), failed) except Exception: diff --git a/addons/hr_holidays/hr_holidays.py b/addons/hr_holidays/hr_holidays.py index 80848941f87..f299639265e 100644 --- a/addons/hr_holidays/hr_holidays.py +++ b/addons/hr_holidays/hr_holidays.py @@ -325,8 +325,14 @@ class hr_holidays(osv.osv): if context is None: context = {} context = dict(context, mail_create_nolog=True) - hol_id = super(hr_holidays, self).create(cr, uid, values, context=context) - return hol_id + if values.get('state') and values['state'] not in ['draft', 'confirm', 'cancel'] and not self.pool['res.users'].has_group(cr, uid, 'base.group_hr_user'): + raise osv.except_osv(_('Warning!'), _('You cannot set a leave request as \'%s\'. Contact a human resource manager.') % values.get('state')) + return super(hr_holidays, self).create(cr, uid, values, context=context) + + def write(self, cr, uid, ids, vals, context=None): + if vals.get('state') and vals['state'] not in ['draft', 'confirm', 'cancel'] and not self.pool['res.users'].has_group(cr, uid, 'base.group_hr_user'): + raise osv.except_osv(_('Warning!'), _('You cannot set a leave request as \'%s\'. Contact a human resource manager.') % vals.get('state')) + return super(hr_holidays, self).write(cr, uid, ids, vals, context=context) def holidays_reset(self, cr, uid, ids, context=None): self.write(cr, uid, ids, { diff --git a/addons/hr_holidays/security/ir_rule.xml b/addons/hr_holidays/security/ir_rule.xml index 1ff12f41244..77c98db5d71 100644 --- a/addons/hr_holidays/security/ir_rule.xml +++ b/addons/hr_holidays/security/ir_rule.xml @@ -5,6 +5,17 @@ Employee Holidays [('employee_id.user_id','=',user.id)] + + + + + + + + Employee Holidays Create, Write, Unlink + + [('employee_id.user_id','=',user.id), ('state', 'in', ['draft', 'confirm', 'cancel'])] + diff --git a/addons/hw_escpos/escpos/printer.py b/addons/hw_escpos/escpos/printer.py index dd5aa93e361..523f9a39779 100644 --- a/addons/hw_escpos/escpos/printer.py +++ b/addons/hw_escpos/escpos/printer.py @@ -31,7 +31,7 @@ class Usb(Escpos): self.interface = interface self.in_ep = in_ep self.out_ep = out_ep - self.open() + self.open() def open(self): diff --git a/addons/mail/mail_alias.py b/addons/mail/mail_alias.py index 303d398dfb9..25fd826ca38 100644 --- a/addons/mail/mail_alias.py +++ b/addons/mail/mail_alias.py @@ -61,7 +61,7 @@ class mail_alias(osv.Model): def _get_alias_domain(self, cr, uid, ids, name, args, context=None): ir_config_parameter = self.pool.get("ir.config_parameter") - domain = ir_config_parameter.get_param(cr, uid, "mail.catchall.domain", context=context) + domain = ir_config_parameter.get_param(cr, SUPERUSER_ID, "mail.catchall.domain", context=context) return dict.fromkeys(ids, domain or "") _columns = { diff --git a/addons/mail/static/src/js/announcement.js b/addons/mail/static/src/js/announcement.js index 60c0fde8472..9cc1d8bc6c3 100644 --- a/addons/mail/static/src/js/announcement.js +++ b/addons/mail/static/src/js/announcement.js @@ -42,6 +42,8 @@ openerp_announcement = function(instance) { $('.openerp_webclient_container').css('height', 'calc(100% - 64px)'); $('head').append($css); + }).fail(function(result, ev){ + ev.preventDefault(); }); } }); diff --git a/addons/pad/pad.py b/addons/pad/pad.py index cec784eb277..68b19c3a1d6 100644 --- a/addons/pad/pad.py +++ b/addons/pad/pad.py @@ -5,6 +5,7 @@ import re import string import urllib2 import logging +from openerp import SUPERUSER_ID from openerp.tools.translate import _ from openerp.tools import html2plaintext from py_etherpad import EtherpadLiteClient @@ -19,7 +20,7 @@ class pad_common(osv.osv_memory): return bool(user.company_id.pad_server) def pad_generate_url(self, cr, uid, context=None): - company = self.pool.get('res.users').browse(cr, uid, uid, context=context).company_id; + company = self.pool.get('res.users').browse(cr, SUPERUSER_ID, uid, context=context).company_id pad = { "server" : company.pad_server, diff --git a/addons/pad/res_company.py b/addons/pad/res_company.py index 95f1d9c1118..02c034c3df6 100644 --- a/addons/pad/res_company.py +++ b/addons/pad/res_company.py @@ -5,7 +5,7 @@ class company_pad(osv.osv): _inherit = 'res.company' _columns = { 'pad_server': fields.char('Pad Server', help="Etherpad lite server. Example: beta.primarypad.com"), - 'pad_key': fields.char('Pad Api Key', help="Etherpad lite api key."), + 'pad_key': fields.char('Pad Api Key', help="Etherpad lite api key.", groups="base.group_system"), } diff --git a/addons/point_of_sale/point_of_sale.py b/addons/point_of_sale/point_of_sale.py index 1e074975391..b1ceac49412 100644 --- a/addons/point_of_sale/point_of_sale.py +++ b/addons/point_of_sale/point_of_sale.py @@ -836,7 +836,7 @@ class pos_order(osv.osv): 'amount': data['amount'], 'date': data.get('payment_date', time.strftime('%Y-%m-%d')), 'name': order.name + ': ' + (data.get('payment_name', '') or ''), - 'partner_id': order.partner_id and order.partner_id.id or None, + 'partner_id': order.partner_id and self.pool.get("res.partner")._find_accounting_partner(order.partner_id).id or False, } account_def = property_obj.get(cr, uid, 'property_account_receivable', 'res.partner', context=context) args['account_id'] = (order.partner_id and order.partner_id.property_account_receivable \ diff --git a/addons/product_visible_discount/product_visible_discount.py b/addons/product_visible_discount/product_visible_discount.py index 64e2e18cedb..1a605966baa 100644 --- a/addons/product_visible_discount/product_visible_discount.py +++ b/addons/product_visible_discount/product_visible_discount.py @@ -83,9 +83,11 @@ class sale_order_line(osv.osv): if so_pricelist.visible_discount and list_price[pricelist] != 0 and new_list_price != 0: if product.company_id and so_pricelist.currency_id.id != product.company_id.currency_id.id: # new_list_price is in company's currency while price in pricelist currency + ctx = context.copy() + ctx['date'] = date_order new_list_price = self.pool['res.currency'].compute(cr, uid, product.company_id.currency_id.id, so_pricelist.currency_id.id, - new_list_price, context=context) + new_list_price, context=ctx) discount = (new_list_price - price) / new_list_price * 100 if discount > 0: result['price_unit'] = new_list_price diff --git a/addons/resource/security/ir.model.access.csv b/addons/resource/security/ir.model.access.csv index bf8504e2f46..6112565d9bf 100644 --- a/addons/resource/security/ir.model.access.csv +++ b/addons/resource/security/ir.model.access.csv @@ -2,6 +2,6 @@ id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink access_resource_calendar,resource.calendar,model_resource_calendar,base.group_system,1,1,1,1 access_resource_calendar_attendance,resource.calendar.attendance,model_resource_calendar_attendance,base.group_system,1,1,1,1 access_resource_resource,resource.resource,model_resource_resource,base.group_system,1,0,0,0 -access_resource_resource_all,resource.resource all,model_resource_resource,,1,0,0,0 +access_resource_resource_all,resource.resource all,model_resource_resource,base.group_user,1,0,0,0 access_resource_calendar_leaves_user,resource.calendar.leaves,model_resource_calendar_leaves,base.group_user,1,0,0,0 access_resource_calendar_leaves,resource.calendar.leaves,model_resource_calendar_leaves,base.group_system,1,1,1,1 diff --git a/addons/sale/sale.py b/addons/sale/sale.py index 4c28f7cc26e..51e26483e18 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -1036,6 +1036,8 @@ class sale_order_line(osv.osv): flag=False, # Force name update context=context )['value'] + if defaults.get('tax_id'): + defaults['tax_id'] = [[6, 0, defaults['tax_id']]] values = dict(defaults, **values) return super(sale_order_line, self).create(cr, uid, values, context=context) diff --git a/addons/sale_margin/sale_margin.py b/addons/sale_margin/sale_margin.py index 4c2e9ffc4f4..36b0a74015c 100644 --- a/addons/sale_margin/sale_margin.py +++ b/addons/sale_margin/sale_margin.py @@ -31,11 +31,15 @@ class sale_order_line(osv.osv): lang=lang, update_tax=update_tax, date_order=date_order, packaging=packaging, fiscal_position=fiscal_position, flag=flag, context=context) if not pricelist: return res + if context is None: + context = {} frm_cur = self.pool.get('res.users').browse(cr, uid, uid).company_id.currency_id.id to_cur = self.pool.get('product.pricelist').browse(cr, uid, [pricelist])[0].currency_id.id if product: purchase_price = self.pool.get('product.product').browse(cr, uid, product).standard_price - price = self.pool.get('res.currency').compute(cr, uid, frm_cur, to_cur, purchase_price, round=False) + ctx = context.copy() + ctx['date'] = date_order + price = self.pool.get('res.currency').compute(cr, uid, frm_cur, to_cur, purchase_price, round=False, context=ctx) res['value'].update({'purchase_price': price}) return res diff --git a/addons/stock/stock_incoterms.xml b/addons/stock/stock_incoterms.xml index 42865a8164c..064480d6aea 100644 --- a/addons/stock/stock_incoterms.xml +++ b/addons/stock/stock_incoterms.xml @@ -51,15 +51,15 @@ DAT - Delivered At Terminal + DELIVERED AT TERMINAL DAP - Delivered At Place + DELIVERED AT PLACE - + DDP - Delivered Duty Paid + DELIVERED DUTY PAID diff --git a/addons/stock/stock_view.xml b/addons/stock/stock_view.xml index 79d5aa1f69e..6b72f9976df 100644 --- a/addons/stock/stock_view.xml +++ b/addons/stock/stock_view.xml @@ -1589,7 +1589,7 @@ - +