lingo: pass for-payment on reading invoice for payment (#76853)
gitea/combo/pipeline/head This commit looks good
Details
gitea/combo/pipeline/head This commit looks good
Details
Only if the regie announced its support in its invoices/ endpoint.
This commit is contained in:
parent
cb33b47a19
commit
bbb12f507f
|
@ -418,12 +418,15 @@ class Regie(models.Model):
|
|||
log_errors=True,
|
||||
raise_4xx=False,
|
||||
update_paid=False,
|
||||
for_payment=False,
|
||||
):
|
||||
if not self.is_remote():
|
||||
return self.basketitem_set.get(pk=invoice_id)
|
||||
url = self.webservice_url + '/invoice/%s/' % invoice_id
|
||||
if payer_external_id:
|
||||
url += '?payer_external_id=%s' % payer_external_id
|
||||
if self.has_invoice_for_payment and for_payment:
|
||||
url += ('?' if '?' not in url else '&') + 'payment'
|
||||
response = requests.get(
|
||||
url,
|
||||
user=user if not payer_external_id else None,
|
||||
|
@ -1073,7 +1076,9 @@ class Transaction(models.Model):
|
|||
to_be_paid_remote_items = []
|
||||
for item_id in items:
|
||||
try:
|
||||
remote_item = regie.get_invoice(user=self.user, invoice_id=item_id, raise_4xx=True)
|
||||
remote_item = regie.get_invoice(
|
||||
user=self.user, invoice_id=item_id, raise_4xx=True, for_payment=True
|
||||
)
|
||||
with atomic(savepoint=False):
|
||||
self.items.add(self.create_paid_invoice_basket_item(item_id, remote_item))
|
||||
regie.pay_invoice(item_id, self.order_id, self.bank_transaction_date or self.end_date)
|
||||
|
|
|
@ -512,7 +512,7 @@ class PayView(PayMixin, View):
|
|||
regie = Regie.objects.get(pk=regie_id)
|
||||
# get all items data from regie webservice
|
||||
for item_id in request.POST.getlist('item'):
|
||||
remote_items.append(regie.get_invoice(user, item_id, update_paid=True))
|
||||
remote_items.append(regie.get_invoice(user, item_id, update_paid=True, for_payment=True))
|
||||
except (requests.exceptions.RequestException, RemoteInvoiceException):
|
||||
messages.error(request, _('Technical error: impossible to retrieve invoices.'))
|
||||
return HttpResponseRedirect(next_url)
|
||||
|
|
|
@ -1664,3 +1664,26 @@ def test_has_invoice_for_payment_provisionning(remote_regie, remote_invoices_htt
|
|||
remote_regie.get_invoices(user)
|
||||
remote_regie.refresh_from_db()
|
||||
assert remote_regie.has_invoice_for_payment
|
||||
|
||||
|
||||
def test_pay_with_has_invoice_for_payment(rf, remote_regie, remote_invoices_httmock):
|
||||
remote_regie.webservice_url = remote_invoices_httmock.url
|
||||
remote_regie.save()
|
||||
|
||||
remote_invoices_httmock.invoice.update(INVOICES[0])
|
||||
user = User.objects.create()
|
||||
request = rf.post('/pay/', {'regie': remote_regie.id, 'item': 1})
|
||||
request.user = user
|
||||
request.session = mock.MagicMock()
|
||||
request._messages = mock.Mock()
|
||||
pay_view = PayView.as_view()
|
||||
|
||||
pay_view(request)
|
||||
assert remote_invoices_httmock.invoice_mock.call['count'] == 1
|
||||
assert '?payment' not in remote_invoices_httmock.invoice_mock.call['requests'][0].url
|
||||
|
||||
remote_regie.has_invoice_for_payment = True
|
||||
remote_regie.save()
|
||||
pay_view(request)
|
||||
assert remote_invoices_httmock.invoice_mock.call['count'] == 2
|
||||
assert '?payment' in remote_invoices_httmock.invoice_mock.call['requests'][1].url
|
||||
|
|
Loading…
Reference in New Issue