summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorXavier Morel <xmo@odoo.com>2019-11-26 07:57:01 +0000
committerXavier Morel <xmo@odoo.com>2019-12-03 13:59:25 +0000
commitee15b8461d5b98d8711012d0d58fe8dbee2c733e (patch)
treecb530e41254dd92468ad8eb3cbd6d5346cac8777 /addons
parent4e4813aee68ad0a867951822f9b5f7eaf3ce7e60 (diff)
[REM] payment: dynamic domains
Make the domain stricter as well: * no reason to have / match a token if the payment method is not electronic * don't lose the capture mode * don't remove the company filter though it's probably not useful (as the journal and payment should already be in the same company so the check on the token's acquirer's journal should be enough) The domain used to select the default payment should not matter too much. Task 2147923 closes odoo/odoo#40959 Signed-off-by: Xavier Morel (xmo) <xmo@odoo.com>
Diffstat (limited to 'addons')
-rw-r--r--addons/payment/models/account_payment.py35
-rw-r--r--addons/payment/views/account_payment_views.xml1
2 files changed, 25 insertions, 11 deletions
diff --git a/addons/payment/models/account_payment.py b/addons/payment/models/account_payment.py
index dc939989104..5c398c8f634 100644
--- a/addons/payment/models/account_payment.py
+++ b/addons/payment/models/account_payment.py
@@ -12,27 +12,40 @@ class AccountPayment(models.Model):
payment_transaction_id = fields.Many2one('payment.transaction', string='Payment Transaction', readonly=True)
payment_token_id = fields.Many2one(
'payment.token', string="Saved payment token",
- domain="[('acquirer_id.capture_manually', '=', False), ('company_id', '=', company_id)]",
+ domain="""[
+ (payment_method_code == 'electronic', '=', 1),
+ ('company_id', '=', company_id),
+ ('acquirer_id.capture_manually', '=', False),
+ ('acquirer_id.journal_id', '=', journal_id),
+ ('partner_id', 'in', related_partner_ids),
+ ]""",
help="Note that tokens from acquirers set to only authorize transactions (instead of capturing the amount) are not available.")
+ related_partner_ids = fields.Many2many('res.partner', compute='_compute_related_partners')
def _get_payment_chatter_link(self):
self.ensure_one()
return '<a href=# data-oe-model=account.payment data-oe-id=%d>%s</a>' % (self.id, self.name)
+ @api.depends('partner_id.commercial_partner_id.child_ids')
+ def _compute_related_partners(self):
+ for p in self:
+ p.related_partner_ids = (
+ p.partner_id
+ | p.partner_id.commercial_partner_id
+ | p.partner_id.commercial_partner_id.child_ids
+ )._origin
+
@api.onchange('partner_id', 'payment_method_id', 'journal_id')
def _onchange_set_payment_token_id(self):
- res = {}
-
- if not self.payment_method_code == 'electronic' or not self.partner_id or not self.journal_id:
+ if not (self.payment_method_code == 'electronic' and self.partner_id and self.journal_id):
self.payment_token_id = False
- return res
+ return
- partners = self.partner_id | self.partner_id.commercial_partner_id | self.partner_id.commercial_partner_id.child_ids
- domain = [('partner_id', 'in', partners.ids), ('acquirer_id.journal_id', '=', self.journal_id.id)]
- self.payment_token_id = self.env['payment.token'].search(domain, limit=1)
-
- res['domain'] = {'payment_token_id': domain}
- return res
+ self.payment_token_id = self.env['payment.token'].search([
+ ('partner_id', 'in', self.related_partner_ids.ids),
+ ('acquirer_id.capture_manually', '=', False),
+ ('acquirer_id.journal_id', '=', self.journal_id.id),
+ ], limit=1)
def _prepare_payment_transaction_vals(self):
self.ensure_one()
diff --git a/addons/payment/views/account_payment_views.xml b/addons/payment/views/account_payment_views.xml
index 5d25c93773c..c6ce4c1a88d 100644
--- a/addons/payment/views/account_payment_views.xml
+++ b/addons/payment/views/account_payment_views.xml
@@ -11,6 +11,7 @@
</xpath>
<field name="payment_method_id" position="after">
<field name="payment_method_code" invisible="1"/>
+ <field name="related_partner_ids" invisible="1"/>
<field name="payment_token_id" options="{'no_create': True}"
attrs="{'invisible': [('payment_method_code', '!=', 'electronic')], 'readonly': [('state', '!=', 'draft')]}"/>
</field>