Skip to content

Commit b8d0fa4

Browse files
committed
feat: Implemented routes for creation & charging(invoice)
1 parent 1dca10e commit b8d0fa4

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

app/api/event_invoices.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from flask_rest_jsonapi import ResourceDetail, ResourceList, ResourceRelationship
2+
from flask import jsonify, request
23

34
from app.api.bootstrap import api
45
from app.api.helpers.db import safe_query
@@ -10,6 +11,12 @@
1011
from app.models.discount_code import DiscountCode
1112
from app.models.event_invoice import EventInvoice
1213
from app.models.user import User
14+
from app.api.helpers.payment import PayPalPaymentsManager
15+
from app.api.helpers.errors import BadRequestError
16+
17+
18+
from app.api.helpers.permissions import jwt_required
19+
from app.api.orders import order_misc_routes
1320

1421

1522
class EventInvoiceList(ResourceList):
@@ -127,3 +134,59 @@ def before_get_object(self, view_kwargs):
127134
'methods': {
128135
'before_get_object': before_get_object
129136
}}
137+
138+
139+
@order_misc_routes.route('/event-invoices/<string:invoice_identifier>/create-paypal-payment', methods=['POST'])
140+
@jwt_required
141+
def create_paypal_payment_invoice(invoice_identifier):
142+
"""
143+
Create a paypal payment.
144+
:return: The payment id of the created payment.
145+
"""
146+
try:
147+
return_url = request.json['data']['attributes']['return-url']
148+
cancel_url = request.json['data']['attributes']['cancel-url']
149+
except TypeError:
150+
return BadRequestError({'source': ''}, 'Bad Request Error').respond()
151+
152+
event_invoice = safe_query(db, EventInvoice, 'identifier', invoice_identifier, 'identifier')
153+
status, response = PayPalPaymentsManager.create_payment(event_invoice, return_url, cancel_url)
154+
155+
if status:
156+
return jsonify(status=True, payment_id=response)
157+
else:
158+
return jsonify(status=False, error=response)
159+
160+
161+
@order_misc_routes.route('/event-invoices/<string:invoice_identifier>/charge', methods=['POST'])
162+
@jwt_required
163+
def charge_paypal_payment_invoice(invoice_identifier):
164+
"""
165+
Create a paypal payment.
166+
:return: The payment id of the created payment.
167+
"""
168+
try:
169+
paypal_payment_id = request.json['data']['attributes']['paypal_payment_id']
170+
paypal_payer_id = request.json['data']['attributes']['paypal_payer_id']
171+
except:
172+
return BadRequestError({'source': ''}, 'Bad Request Error').respond()
173+
event_invoice = safe_query(db, EventInvoice, 'identifier', invoice_identifier, 'identifier')
174+
# save the paypal payment_id with the order
175+
event_invoice.paypal_token = paypal_payment_id
176+
save_to_db(event_invoice)
177+
178+
# create the transaction.
179+
status, error = PayPalPaymentsManager.execute_payment(paypal_payer_id, paypal_payment_id)
180+
181+
if status:
182+
# successful transaction hence update the order details.
183+
event_invoice.paid_via = 'paypal'
184+
event_invoice.status = 'completed'
185+
event_invoice.transaction_id = paypal_payment_id
186+
event_invoice.completed_at = datetime.utcnow()
187+
save_to_db(event_invoice)
188+
189+
return True, 'Charge successful'
190+
else:
191+
# return the error message from Paypal
192+
return False, error

0 commit comments

Comments
 (0)