From 39964e6cf23438e1f09d1a167fd6afa5dc6eba47 Mon Sep 17 00:00:00 2001 From: Nicolas Martinelli Date: Tue, 12 Sep 2017 14:19:31 +0200 Subject: [PATCH] [FIX] account: mark as reconciled - Create 2 companies: - Company A and check VIES VAT Check - Company B and do not check VIES VAT Check - Set current company of admin to Company A and do not allow Company B - Create a demo user on Company B and give him Adviser group in Accounting. - Log in with the demo user. - Create a Customer A as a company with: Country = Spain TIN = ES85847955H - Create a contact on Customer A: "Contact Sample" - Create a Customer invoice on "Contact Sample" partner - Through the menu Accounting/Payments, create a new payment on "Contact Sample" partner with the total amount of the invoice. - Open the menu Manual Payments and invoicing matching. The invoice and the payment should be proposed for reconciliation. Do CTRL+ENTER. An error message appears: 'The VAT number [ES85847955H] for partner [Contact Sample] either failed the VIES VAT validation check or did not respect the expected format ESA12345674.' This message should not appear as the current user is on Company B which doesn't have the flag "VIES VAT Check" checked. The issue comes from the `sudo` in `mark_as_reconciled`, which will lead to `self.env.user` to be the admin in the VAT check, and therefore `self.env.user.company_id` will be Company A. Closes #19274 opw-770018 --- addons/account/models/partner.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/addons/account/models/partner.py b/addons/account/models/partner.py index 253a2e2b680..bfd3dc7d589 100644 --- a/addons/account/models/partner.py +++ b/addons/account/models/partner.py @@ -365,7 +365,12 @@ class ResPartner(models.Model): @api.multi def mark_as_reconciled(self): self.env['account.partial.reconcile'].check_access_rights('write') - return self.sudo().write({'last_time_entries_checked': time.strftime(DEFAULT_SERVER_DATETIME_FORMAT)}) + if self.ids: + self.env.cr.execute( + 'UPDATE res_partner SET last_time_entries_checked = %s WHERE id IN %s', + (time.strftime(DEFAULT_SERVER_DATETIME_FORMAT), tuple(self.ids),) + ) + return True @api.one def _get_company_currency(self):