Check rule only if _check_access is set and enforce companies rule

issue4080
review343891009
This commit is contained in:
Cédric Krier committed 2021-04-10 23:46:23 +02:00
1 parent c088651066
commit be6a53d231
2 files changed
+72 -113

No files matched your search

+72 -100
View File
@@ -984,7 +984,8 @@ class Account(ModelSQL, ModelView):
},
})
if Pool().test:
cls.__rpc__['webhook'] = RPC(readonly=False, instantiate=0)
cls.__rpc__['webhook'] = RPC(
readonly=False, instantiate=0, check_access=False)
@fields.depends('webhook_identifier')
def on_change_with_webhook_endpoint(self, name=None):
@@ -1088,20 +1089,17 @@ class Account(ModelSQL, ModelView):
if not payments:
logger.error("%s: No payment '%s'", _event, charge['id'])
for payment in payments:
# TODO: remove when https://bugs.tryton.org/issue4080
with Transaction().set_context(company=payment.company.id):
payment = Payment(payment.id)
if payment.state == 'succeeded':
Payment.proceed([payment])
payment.stripe_captured = charge['captured']
payment.stripe_amount = (
charge['amount'] - charge['amount_refunded'])
payment.save()
if payment.amount:
if charge['status'] == 'succeeded' and charge['captured']:
Payment.succeed([payment])
else:
Payment.fail([payment])
if payment.state == 'succeeded':
Payment.proceed([payment])
payment.stripe_captured = charge['captured']
payment.stripe_amount = (
charge['amount'] - charge['amount_refunded'])
payment.save()
if payment.amount:
if charge['status'] == 'succeeded' and charge['captured']:
Payment.succeed([payment])
else:
Payment.fail([payment])
return bool(payments)
def webhook_charge_captured(self, payload):
@@ -1127,17 +1125,14 @@ class Account(ModelSQL, ModelView):
if not refunds:
logger.error("charge.refund.updated: No refund '%s'", rf['id'])
for refund in refunds:
# TODO: remove when https://bugs.tryton.org/issue4080
with Transaction().set_context(company=refund.payment.company.id):
refund = Refund(refund.id)
if rf.status == 'pending':
Refund.processing([refund])
elif rf.status == 'succeeded':
Refund.succeed([refund])
elif rf.status in {'failed', 'canceled'}:
refund.stripe_error_code = rf['failure_reason']
Refund.fail([refund])
refund.save()
if rf.status == 'pending':
Refund.processing([refund])
elif rf.status == 'succeeded':
Refund.succeed([refund])
elif rf.status in {'failed', 'canceled'}:
refund.stripe_error_code = rf['failure_reason']
Refund.fail([refund])
refund.save()
return bool(refunds)
def webhook_charge_failed(self, payload, _event='charge.failed'):
@@ -1163,15 +1158,12 @@ class Account(ModelSQL, ModelView):
if not payments:
logger.error("%s: No payment '%s'", _event, charge['id'])
for payment in payments:
# TODO: remove when https://bugs.tryton.org/issue4080
with Transaction().set_context(company=payment.company.id):
payment = Payment(payment.id)
payment.stripe_error_message = charge['failure_message']
payment.stripe_error_code = charge['failure_code']
payment.stripe_error_param = None
payment.save()
if charge['status'] == 'failed':
Payment.fail([payment])
payment.stripe_error_message = charge['failure_message']
payment.stripe_error_code = charge['failure_code']
payment.stripe_error_param = None
payment.save()
if charge['status'] == 'failed':
Payment.fail([payment])
return bool(payments)
def webhook_charge_dispute_created(self, payload):
@@ -1194,12 +1186,9 @@ class Account(ModelSQL, ModelView):
logger.error(
"charge.dispute.created: No payment '%s'", source['charge'])
for payment in payments:
# TODO: remove when https://bugs.tryton.org/issue4080
with Transaction().set_context(company=payment.company.id):
payment = Payment(payment.id)
payment.stripe_dispute_reason = source['reason']
payment.stripe_dispute_status = source['status']
payment.save()
payment.stripe_dispute_reason = source['reason']
payment.stripe_dispute_status = source['status']
payment.save()
return bool(payments)
def webhook_charge_dispute_closed(self, payload):
@@ -1222,18 +1211,15 @@ class Account(ModelSQL, ModelView):
logger.error(
"charge.dispute.closed: No payment '%s'", source['charge'])
for payment in payments:
# TODO: remove when https://bugs.tryton.org/issue4080
with Transaction().set_context(company=payment.company.id):
payment = Payment(payment.id)
payment.stripe_dispute_reason = source['reason']
payment.stripe_dispute_status = source['status']
payment.save()
if source['status'] == 'lost':
Payment.fail([payment])
if payment.stripe_amount > source['amount']:
payment.stripe_amount -= source['amount']
payment.save()
Payment.succeed([payment])
payment.stripe_dispute_reason = source['reason']
payment.stripe_dispute_status = source['status']
payment.save()
if source['status'] == 'lost':
Payment.fail([payment])
if payment.stripe_amount > source['amount']:
payment.stripe_amount -= source['amount']
payment.save()
Payment.succeed([payment])
return bool(payments)
def webhook_source_chargeable(self, payload):
@@ -1257,9 +1243,7 @@ class Account(ModelSQL, ModelView):
('stripe_token', '=', source['id']),
])
for payment in payments:
# TODO: remove when https://bugs.tryton.org/issue4080
with Transaction().set_context(company=payment.company.id):
Payment.fail([payment])
Payment.fail([payment])
return True
def webhook_source_canceled(self, payload):
@@ -1271,9 +1255,7 @@ class Account(ModelSQL, ModelView):
('stripe_token', '=', source['id']),
])
for payment in payments:
# TODO: remove when https://bugs.tryton.org/issue4080
with Transaction().set_context(company=payment.company.id):
Payment.fail([payment])
Payment.fail([payment])
return True
def webhook_payment_intent_succeeded(self, payload):
@@ -1289,19 +1271,16 @@ class Account(ModelSQL, ModelView):
"payment_intent.succeeded: No payment '%s'",
payment_intent['id'])
for payment in payments:
# TODO: remove when https://bugs.tryton.org/issue4080
with Transaction().set_context(company=payment.company.id):
payment = Payment(payment.id)
if payment.state == 'succeeded':
Payment.proceed([payment])
payment.stripe_captured = bool(
payment_intent['amount_received'])
payment.stripe_amount = payment_intent['amount_received']
payment.save()
if payment.amount:
Payment.succeed([payment])
else:
Payment.fail([payment])
if payment.state == 'succeeded':
Payment.proceed([payment])
payment.stripe_captured = bool(
payment_intent['amount_received'])
payment.stripe_amount = payment_intent['amount_received']
payment.save()
if payment.amount:
Payment.succeed([payment])
else:
Payment.fail([payment])
return bool(payments)
def webhook_payment_intent_amount_capturable_updated(self, payload):
@@ -1317,16 +1296,14 @@ class Account(ModelSQL, ModelView):
"payment_intent.amount_capturable_updated: No payment '%s'",
payment_intent['id'])
for payment in payments:
# TODO: remove when https://bugs.tryton.org/issue4080
with Transaction().set_context(company=payment.company.id):
payment = Payment(payment.id)
if payment.state == 'succeeded':
Payment.proceed([payment])
payment.stripe_capturable = bool(
payment_intent['amount_capturable'])
if payment.stripe_amount > payment_intent['amount_capturable']:
payment.stripe_amount = payment_intent['amount_capturable']
payment.save()
payment = Payment(payment.id)
if payment.state == 'succeeded':
Payment.proceed([payment])
payment.stripe_capturable = bool(
payment_intent['amount_capturable'])
if payment.stripe_amount > payment_intent['amount_capturable']:
payment.stripe_amount = payment_intent['amount_capturable']
payment.save()
return bool(payments)
def webhook_payment_intent_payment_failed(self, payload):
@@ -1342,20 +1319,17 @@ class Account(ModelSQL, ModelView):
"payment_intent.payment_failed: No payment '%s'",
payment_intent['id'])
for payment in payments:
# TODO: remove when https://bugs.tryton.org/issue4080
with Transaction().set_context(company=payment.company.id):
payment = Payment(payment.id)
error = payment_intent['last_payment_error']
if error:
payment.stripe_error_message = error['message']
payment.stripe_error_code = error['code']
payment.stripe_error_param = None
payment.save()
if payment_intent['status'] in [
'requires_payment_method', 'requires_source']:
payment._send_email_checkout()
else:
Payment.fail([payment])
error = payment_intent['last_payment_error']
if error:
payment.stripe_error_message = error['message']
payment.stripe_error_code = error['code']
payment.stripe_error_param = None
payment.save()
if payment_intent['status'] in [
'requires_payment_method', 'requires_source']:
payment._send_email_checkout()
else:
Payment.fail([payment])
return bool(payments)
def webhook_payment_intent_canceled(self, payload):
@@ -1371,10 +1345,8 @@ class Account(ModelSQL, ModelView):
"payment_intent.canceled: No payment '%s'",
payment_intent['id'])
for payment in payments:
# TODO: remove when https://bugs.tryton.org/issue4080
with Transaction().set_context(company=payment.company.id):
payment = Payment(payment.id)
Payment.fail([payment])
payment = Payment(payment.id)
Payment.fail([payment])
return bool(payments)
@classmethod
-13
View File
@@ -92,19 +92,6 @@ this repository contains the full copyright notices and license terms. -->
action="act_refund_form"
id="menu_refund_form"/>
<record model="ir.rule.group" id="rule_group_refund">
<field name="name">User in company</field>
<field name="model" search="[('model', '=', 'account.payment.stripe.refund')]"/>
<field name="global_p" eval="True"/>
</record>
<record model="ir.rule" id="rule_refund1">
<field
name="domain"
eval="[('payment.company', '=', Eval('user', {}).get('company', None))]"
pyson="1"/>
<field name="rule_group" ref="rule_group_refund"/>
</record>
<record model="ir.model.button" id="refund_draft_button">
<field name="name">draft</field>
<field name="string">Draft</field>