diff --git a/addons/account/account.py b/addons/account/account.py index 2fbc32b1bfd..1ab819c01c6 100644 --- a/addons/account/account.py +++ b/addons/account/account.py @@ -30,7 +30,7 @@ from openerp import SUPERUSER_ID from openerp import tools from openerp.osv import fields, osv, expression from openerp.tools.translate import _ -from openerp.tools.float_utils import float_round +from openerp.tools.float_utils import float_round as round import openerp.addons.decimal_precision as dp @@ -2144,7 +2144,7 @@ class account_tax(osv.osv): tax_compute_precision = precision if taxes and taxes[0].company_id.tax_calculation_rounding_method == 'round_globally': tax_compute_precision += 5 - totalin = totalex = float_round(price_unit * quantity, precision) + totalin = totalex = round(price_unit * quantity, precision) tin = [] tex = [] for tax in taxes: diff --git a/addons/account_check_writing/account_voucher.py b/addons/account_check_writing/account_voucher.py index e4933708f7a..c3abe28eef0 100644 --- a/addons/account_check_writing/account_voucher.py +++ b/addons/account_check_writing/account_voucher.py @@ -41,6 +41,23 @@ class account_voucher(osv.osv): 'number': fields.char('Number', size=32), } + def _amount_to_text(self, cr, uid, amount, currency_id, context=None): + # Currency complete name is not available in res.currency model + # Exceptions done here (EUR, USD, BRL) cover 75% of cases + # For other currencies, display the currency code + currency = self.pool['res.currency'].browse(cr, uid, currency_id, context=context) + if currency.name.upper() == 'EUR': + currency_name = 'Euro' + elif currency.name.upper() == 'USD': + currency_name = 'Dollars' + elif currency.name.upper() == 'BRL': + currency_name = 'reais' + else: + currency_name = currency.name + #TODO : generic amount_to_text is not ready yet, otherwise language (and country) and currency can be passed + #amount_in_word = amount_to_text(amount, context=context) + return amount_to_text(amount, currency=currency_name) + def onchange_amount(self, cr, uid, ids, amount, rate, partner_id, journal_id, currency_id, ttype, date, payment_rate_currency_id, company_id, context=None): """ Inherited - add amount_in_word and allow_check_writting in returned value dictionary """ if not context: @@ -48,22 +65,7 @@ class account_voucher(osv.osv): default = super(account_voucher, self).onchange_amount(cr, uid, ids, amount, rate, partner_id, journal_id, currency_id, ttype, date, payment_rate_currency_id, company_id, context=context) if 'value' in default: amount = 'amount' in default['value'] and default['value']['amount'] or amount - - # Currency complete name is not available in res.currency model - # Exceptions done here (EUR, USD, BRL) cover 75% of cases - # For other currencies, display the currency code - currency = self.pool['res.currency'].browse(cr, uid, currency_id, context=context) - if currency.name.upper() == 'EUR': - currency_name = 'Euro' - elif currency.name.upper() == 'USD': - currency_name = 'Dollars' - elif currency.name.upper() == 'BRL': - currency_name = 'reais' - else: - currency_name = currency.name - #TODO : generic amount_to_text is not ready yet, otherwise language (and country) and currency can be passed - #amount_in_word = amount_to_text(amount, context=context) - amount_in_word = amount_to_text(amount, currency=currency_name) + amount_in_word = self._amount_to_text(cr, uid, amount, currency_id, context=context) default['value'].update({'amount_in_word':amount_in_word}) if journal_id: allow_check_writing = self.pool.get('account.journal').browse(cr, uid, journal_id, context=context).allow_check_writing @@ -92,6 +94,19 @@ class account_voucher(osv.osv): }, 'nodestroy': True } + def create(self, cr, uid, vals, context=None): + if vals.get('amount') and vals.get('journal_id') and 'amount_in_word' not in vals: + vals['amount_in_word'] = self._amount_to_text(cr, uid, vals['amount'], vals.get('currency_id') or \ + self.pool['account.journal'].browse(cr, uid, vals['journal_id'], context=context).currency.id or \ + self.pool['res.company'].browse(cr, uid, vals['company_id']).currency_id.id, context=context) + return super(account_voucher, self).create(cr, uid, vals, context=context) + + def write(self, cr, uid, ids, vals, context=None): + if vals.get('amount') and vals.get('journal_id') and 'amount_in_word' not in vals: + vals['amount_in_word'] = self._amount_to_text(cr, uid, vals['amount'], vals.get('currency_id') or \ + self.pool['account.journal'].browse(cr, uid, vals['journal_id'], context=context).currency.id or \ + self.pool['res.company'].browse(cr, uid, vals['company_id']).currency_id.id, context=context) + return super(account_voucher, self).write(cr, uid, ids, vals, context=context) def fields_view_get(self, cr, uid, view_id=None, view_type=False, context=None, toolbar=False, submenu=False): """ diff --git a/addons/audittrail/audittrail.py b/addons/audittrail/audittrail.py index ca4a15bca6e..71008e0855b 100644 --- a/addons/audittrail/audittrail.py +++ b/addons/audittrail/audittrail.py @@ -463,14 +463,12 @@ def process_data(cr, uid, pool, res_ids, model, method, old_values=None, new_val # if at least one modification has been found for model_id, resource_id in lines: line_model = pool.get('ir.model').browse(cr, SUPERUSER_ID, model_id).model - name = pool.get(line_model).name_get(cr, uid, [resource_id])[0][1] vals = { 'method': method, 'object_id': model_id, 'user_id': uid, 'res_id': resource_id, - 'name': name, } if (model_id, resource_id) not in old_values and method not in ('copy', 'read'): # the resource was not existing so we are forcing the method to 'create' @@ -481,7 +479,11 @@ def process_data(cr, uid, pool, res_ids, model, method, old_values=None, new_val # the resource is not existing anymore so we are forcing the method to 'unlink' # (because it could also come with the value 'write' if we are deleting the # record through a one2many field) + name = old_values[(model_id, resource_id)]['value'].get('name',False) vals.update({'method': 'unlink'}) + else : + name = pool[line_model].name_get(cr, uid, [resource_id])[0][1] + vals.update({'name': name}) # create the audittrail log in super admin mode, only if a change has been detected if lines[(model_id, resource_id)]: log_id = pool.get('audittrail.log').create(cr, SUPERUSER_ID, vals) diff --git a/addons/crm/crm_lead.py b/addons/crm/crm_lead.py index a1dab0c7e8a..27a84c442b9 100644 --- a/addons/crm/crm_lead.py +++ b/addons/crm/crm_lead.py @@ -313,7 +313,10 @@ class crm_lead(format_address, osv.osv): stage = self.pool.get('crm.case.stage').browse(cr, uid, stage_id, context=context) if not stage.on_change: return {'value': {}} - return {'value': {'probability': stage.probability}} + vals = {'probability': stage.probability} + if stage.probability >= 100 or (stage.probability == 0 and stage.sequence > 1): + vals['date_closed'] = fields.datetime.now() + return {'value': vals} def on_change_partner_id(self, cr, uid, ids, partner_id, context=None): values = {} @@ -407,7 +410,7 @@ class crm_lead(format_address, osv.osv): 'probability = 0 %, select "Change Probability Automatically".\n' 'Create a specific stage or edit an existing one by editing columns of your opportunity pipe.')) for stage_id, lead_ids in stages_leads.items(): - self.write(cr, uid, lead_ids, {'stage_id': stage_id, 'date_closed': fields.datetime.now()}, context=context) + self.write(cr, uid, lead_ids, {'stage_id': stage_id}, context=context) return True def case_mark_won(self, cr, uid, ids, context=None): @@ -428,7 +431,7 @@ class crm_lead(format_address, osv.osv): 'probability = 100 % and select "Change Probability Automatically".\n' 'Create a specific stage or edit an existing one by editing columns of your opportunity pipe.')) for stage_id, lead_ids in stages_leads.items(): - self.write(cr, uid, lead_ids, {'stage_id': stage_id, 'date_closed': fields.datetime.now()}, context=context) + self.write(cr, uid, lead_ids, {'stage_id': stage_id}, context=context) return True def case_escalate(self, cr, uid, ids, context=None): diff --git a/addons/portal/mail_message.py b/addons/portal/mail_message.py index 8837c605233..36b06484e9e 100644 --- a/addons/portal/mail_message.py +++ b/addons/portal/mail_message.py @@ -35,7 +35,7 @@ class mail_message(osv.Model): """ if uid == SUPERUSER_ID: return super(mail_message, self)._search(cr, uid, args, offset=offset, limit=limit, order=order, - context=context, count=False, access_rights_uid=access_rights_uid) + context=context, count=count, access_rights_uid=access_rights_uid) group_ids = self.pool.get('res.users').browse(cr, uid, uid, context=context).groups_id group_user_id = self.pool.get("ir.model.data").get_object_reference(cr, uid, 'base', 'group_user')[1] if group_user_id not in [group.id for group in group_ids]: diff --git a/addons/website_event_sale/tests/test_ui.py b/addons/website_event_sale/tests/test_ui.py index 1e5d727de92..b73c75d3f91 100644 --- a/addons/website_event_sale/tests/test_ui.py +++ b/addons/website_event_sale/tests/test_ui.py @@ -5,6 +5,8 @@ def load_tests(loader, base, _): {'redirect': '/page/website.homepage'})) base.addTest(test_ui.WebsiteUiSuite(test_ui.full_path(__file__,'website_event_sale_test.js'), {'redirect': '/page/website.homepage', 'user': 'demo', 'password': 'demo'})) - base.addTest(test_ui.WebsiteUiSuite(test_ui.full_path(__file__,'website_event_sale_test.js'), - {'path': '/', 'user': None})) + # Test has been commented in SAAS-3 ONLY, it must be activated in trunk. + # Log for test JS has been improved in trunk, so we stop to loss time in saas-3 and debug it directly in trunk. + # Tech Saas & AL agreement + # base.addTest(test_ui.WebsiteUiSuite(test_ui.full_path(__file__,'website_event_sale_test.js'), {'path': '/', 'user': None})) return base \ No newline at end of file diff --git a/addons/website_sale/tests/test_ui.py b/addons/website_sale/tests/test_ui.py index 394a9ca8e4f..9a9c5a3777a 100644 --- a/addons/website_sale/tests/test_ui.py +++ b/addons/website_sale/tests/test_ui.py @@ -7,6 +7,8 @@ def load_tests(loader, base, _): {'redirect': '/page/website.homepage'})) base.addTest(test_ui.WebsiteUiSuite(test_ui.full_path(__file__,'website_sale-sale_process-test.js'), {'redirect': '/page/website.homepage', 'user': 'demo', 'password': 'demo'})) - base.addTest(test_ui.WebsiteUiSuite(test_ui.full_path(__file__,'website_sale-sale_process-test.js'), - {'path': '/', 'user': None})) + # Test has been commented in SAAS-3 ONLY, it must be activated in trunk. + # Log for test JS has been improved in trunk, so we stop to loss time in saas-3 and debug it directly in trunk. + # Tech Saas & AL agreement + # base.addTest(test_ui.WebsiteUiSuite(test_ui.full_path(__file__,'website_sale-sale_process-test.js'), {'path': '/', 'user': None})) return base \ No newline at end of file