~eoc/openobject-server/6.1-overwrite_changes_translatable_fields

« back to all changes in this revision

Viewing changes to openerp/osv/orm.py

  • Committer: Mariano Ruiz
  • Date: 2014-07-28 16:15:10 UTC
  • Revision ID: mrsarm@gmail.com-20140728161510-h19p223f47ogvjbi
[FIX] orm: All changes (calls to ``write`` method) made in no 'en_US' language will be written in 'en_US' too (in the table model). This is a different approach to solve #400256

Show diffs side-by-side

added added

removed removed

Lines of Context:
5016
5016
    _register = False # not visible in ORM registry, meant to be python-inherited only
5017
5017
    _transient = False # True in a TransientModel
5018
5018
 
 
5019
    def write(self, cr, user, ids, vals, context=None):
 
5020
        """
 
5021
        When the main language in the company is not English, you cannot change
 
5022
        the value of a translatable field in the table if you not switch the
 
5023
        client interface to 'en_US', because the new value will be written
 
5024
        to ir_translation table instead of the table model.
 
5025
 
 
5026
        This complicates usability, and the default language for "model" values
 
5027
        hardcoded as 'en_US' should be configurable
 
5028
        (see https://bugs.launchpad.net/openobject-server/+bug/400256).
 
5029
 
 
5030
        With this patch, all changes made in no 'en_US' language will be
 
5031
        written in 'en_US' too (in the table model). Anyway, the behavior is
 
5032
        not activated by default, you must be activate it adding this key-value
 
5033
        in the ``openerp-server.conf`` file:
 
5034
 
 
5035
            override_translated = True
 
5036
        """
 
5037
        result = super(Model, self).write(cr, user, ids, vals, context)
 
5038
        if vals and context and context.get('lang', 'en_US') != 'en_US' \
 
5039
                and tools.config.override_translated:
 
5040
            vals_en = {}
 
5041
            for field in vals:
 
5042
                if field in self._columns and self._columns[field].translate:
 
5043
                    vals_en[field] = vals[field]
 
5044
            if vals_en:
 
5045
                super(Model, self).write(cr, user, ids, vals_en, {'lang': 'en_US'})
 
5046
        return result
 
5047
 
5019
5048
class TransientModel(BaseModel):
5020
5049
    """Model super-class for transient records, meant to be temporarily
5021
5050
       persisted, and regularly vaccuum-cleaned.