**Impacted versions:** 11.0

**Steps to reproduce:**
Add a bunch of `company_dependent` fields on `res_bank`:

```
class ResBank(models.Model):
    _inherit = "res.bank"

    cpa_add_routing_record = fields.Boolean(company_dependent=True)
    cpa_short_name = fields.Char(company_dependent=True, size=15, default='A NAME')
    cpa_client_number = fields.Char(company_dependent=True, size=10)
    cpa_file_creation_number = fields.Integer(company_dependent=True, default=1)
    cpa_test_record_allowed = fields.Boolean(company_dependent=True, default=True)
    cpa_institutional_id_number_for_returns = fields.Integer(company_dependent=True, size=9)
    cpa_account_number_for_returns = fields.Char(company_dependent=True, size=12)
    cpa_processing_center = fields.Selection([
        ('81510', "A"),
        ('278', "B"),
    ], company_dependent=True)
```

Then add a constrain:
```
    @api.constrains('cpa_processing_center', 'cpa_account_number_for_returns')
    def _check_cpa_account_number_for_returns_for_desj(self):
        if self.cpa_processing_center == '81510' and not self.cpa_account_number_for_returns:
            raise ValidationError("boom")
```
Run this test class:

```
class TestResBank(tests.TransactionCase):
    def setUp(self):
        super(TestResBank, self).setUp()
        self._createBankJournal()

    def _createBankJournal(self):
        self.bank = self.env['res.bank'].create({
            'name': 'ING',
            'cpa_file_creation_number': 22,
            'cpa_client_number': '0385910000',
            'cpa_short_name': 'Sartigan',
            'cpa_processing_center': '278',
            'cpa_add_routing_record': True
        })

    def testConstrains_order_1(self):
        """Passes"""
        self.bank.write({
            'cpa_institutional_id_number_for_returns': 918283746,
            'cpa_account_number_for_returns': '98765h',
            'cpa_processing_center': '81510',
            'cpa_add_routing_record': False,
        })

    def testConstrains_order_2(self):
        """Fails!"""
        self.bank.write({
            'cpa_processing_center': '81510',
            'cpa_add_routing_record': False,
            'cpa_institutional_id_number_for_returns': 918283746,
            'cpa_account_number_for_returns': '98765h',
        })

```

**Current behavior:**
The first test passes but the second one fails

**Expected behavior:**
Both tests pass

**More details:**
- The two tests are essentially identical except the order of the fields in the write method is different. 
- I believe the order should not matter. 
- The problem does not happen if company_dependent is removed from all fields 
- I think the constrain is trigerred before all fields are set 

Here's a module I made solely to trigger the bug:
[model_constrains.zip](https://github.com/odoo/odoo/files/1482451/model_constrains.zip)
odoo/addons/base/res/ir_property.py
""" Read the property field `name` for the records of model `model` with
            the given `ids`, and return a dictionary mapping `ids` to their
            corresponding value.
        """
        if not ids:
            return {}
        domain = self._get_domain(name, model)
        if domain is None:
            return dict.fromkeys(ids, False)
        
        refs = {('%s,%s' % (model, id)): id for id in ids}
        refs[False] = False
        domain += [('res_id', 'in', list(refs))]
        
        props = self.search(domain, order='company_id asc')
        result = {}
        for prop in props:
            
            id = refs.pop(prop.res_id, None)
            if id is not None:
                result[id] = prop.get_by_record()
        
        default_value = result.pop(False, False)
        for id in ids:
            result.setdefault(id, default_value)
        return result
    @api.model
    def set_multi(self, name, model, values, default_value=None):