def after_update_object(self, order, data, view_kwargs): """ :param order: :param data: :param view_kwargs: :return: """ # create pdf tickets. create_pdf_tickets_for_holder(order) if order.status == 'cancelled': send_order_cancel_email(order) send_notif_ticket_cancel(order) # delete the attendees so that the tickets are unlocked. delete_related_attendees_for_order(order) elif order.status == 'completed': send_email_to_attendees(order, current_user.id) send_notif_to_attendees(order, current_user.id) order_url = make_frontend_url(path='/orders/{identifier}'.format( identifier=order.identifier)) for organizer in order.event.organizers: send_notif_ticket_purchase_organizer(organizer, order.invoice_number, order_url, order.event.name, order.identifier)
def charge_paypal_order_payment(order, paypal_payer_id, paypal_payment_id): """ Charge the user through paypal. :param order: Order for which to charge for. :param paypal_payment_id: payment_id :param paypal_payer_id: payer_id :return: """ # save the paypal payment_id with the order order.paypal_token = paypal_payment_id save_to_db(order) # create the transaction. status, error = PayPalPaymentsManager.execute_payment( paypal_payer_id, paypal_payment_id ) if status: # successful transaction hence update the order details. order.paid_via = 'paypal' order.status = 'completed' order.transaction_id = paypal_payment_id order.completed_at = datetime.utcnow() save_to_db(order) # create tickets create_pdf_tickets_for_holder(order) # send email and notifications send_email_to_attendees(order, order.user_id) send_notif_to_attendees(order, order.user_id) order_url = make_frontend_url( path='/orders/{identifier}'.format(identifier=order.identifier) ) for organizer in order.event.organizers: send_notif_ticket_purchase_organizer( organizer, order.invoice_number, order_url, order.event.name, order.id ) if order.event.owner: send_notif_ticket_purchase_organizer( order.event.owner, order.invoice_number, order_url, order.event.name, order.id, ) return True, 'Charge successful' else: # payment failed hence expire the order order.status = 'expired' save_to_db(order) # delete related attendees to unlock the tickets delete_related_attendees_for_order(order) # return the error message from Paypal return False, error
def verify_order_payment(order_identifier): order = Order.query.filter_by(identifier=order_identifier).first() try: session = StripePaymentsManager.retrieve_session( order.event, order.stripe_session_id) payment_intent = StripePaymentsManager.retrieve_payment_intent( order.event, session.payment_intent) except Exception as e: raise e if session['payment_status'] == 'paid': order.status = 'completed' order.completed_at = datetime.utcnow() order.paid_via = payment_intent['charges']['data'][0][ 'payment_method_details']['type'] order.transaction_id = payment_intent['charges']['data'][0][ 'balance_transaction'] save_to_db(order) on_order_completed(order) else: order.status = 'expired' db.session.commit() # delete related attendees to unlock the tickets delete_related_attendees_for_order(order) return jsonify({'payment_status': session['payment_status']})
def after_update_object(self, order, data, view_kwargs): """ :param order: :param data: :param view_kwargs: :return: """ # create pdf tickets. create_pdf_tickets_for_holder(order) if order.status == 'cancelled' and order.deleted_at is None: send_order_cancel_email(order) send_notif_ticket_cancel(order) # delete the attendees so that the tickets are unlocked. delete_related_attendees_for_order(order) elif (order.status == 'completed' or order.status == 'placed') and order.deleted_at is None: # Send email to attendees with invoices and tickets attached order_identifier = order.identifier key = UPLOAD_PATHS['pdf']['ticket_attendee'].format( identifier=order_identifier) ticket_path = 'generated/tickets/{}/{}/'.format( key, generate_hash(key)) + order_identifier + '.pdf' key = UPLOAD_PATHS['pdf']['order'].format( identifier=order_identifier) invoice_path = 'generated/invoices/{}/{}/'.format( key, generate_hash(key)) + order_identifier + '.pdf' # send email and notifications. send_email_to_attendees(order=order, purchaser_id=current_user.id, attachments=[ticket_path, invoice_path]) send_notif_to_attendees(order, current_user.id) if order.payment_mode in ['free', 'bank', 'cheque', 'onsite']: order.completed_at = datetime.utcnow() order_url = make_frontend_url(path='/orders/{identifier}'.format( identifier=order.identifier)) for organizer in order.event.organizers: send_notif_ticket_purchase_organizer(organizer, order.invoice_number, order_url, order.event.name, order.identifier) if order.event.owner: send_notif_ticket_purchase_organizer(order.event.owner, order.invoice_number, order_url, order.event.name, order.identifier)
def test_should_delete_related_attendees(self): """Method to test to delete related attendees of an event""" with app.test_request_context(): attendee = AttendeeFactory() save_to_db(attendee) obj = OrderFactory() obj.ticket_holders = [attendee, ] save_to_db(obj) delete_related_attendees_for_order(obj) order = db.session.query(Order).filter(Order.id == obj.id).first() self.assertEqual(len(order.ticket_holders), 0)
def charge_stripe_order_payment(order, token_id): """ Charge the user through Stripe :param order: Order for which to charge for :param token_id: Stripe token :return: """ # save the stripe token with the order order.stripe_token = token_id save_to_db(order) # charge the user try: charge = StripePaymentsManager.capture_payment(order) except ConflictError as e: # payment failed hence expire the order order.status = 'expired' save_to_db(order) # delete related attendees to unlock the tickets delete_related_attendees_for_order(order) raise e # charge.paid is true if the charge succeeded, or was successfully authorized for later capture. if charge.paid: # update the order in the db. order.paid_via = charge.source.object order.brand = charge.source.brand order.exp_month = charge.source.exp_month order.exp_year = charge.source.exp_year order.last4 = charge.source.last4 order.transaction_id = charge.id order.status = 'completed' order.completed_at = datetime.utcnow() save_to_db(order) on_order_completed(order) return True, 'Charge successful' # payment failed hence expire the order order.status = 'expired' save_to_db(order) # delete related attendees to unlock the tickets delete_related_attendees_for_order(order) # return the failure message from stripe. return False, charge.failure_message
def after_update_object(self, order, data, view_kwargs): """ :param order: :param data: :param view_kwargs: :return: """ # create pdf tickets. create_pdf_tickets_for_holder(order) if order.status == 'cancelled': send_order_cancel_email(order) send_notif_ticket_cancel(order) # delete the attendees so that the tickets are unlocked. delete_related_attendees_for_order(order)
def after_update_object(self, order, data, view_kwargs): """ :param order: :param data: :param view_kwargs: :return: """ # create pdf tickets. create_pdf_tickets_for_holder(order) if order.status == 'cancelled': send_order_cancel_email(order) send_notif_ticket_cancel(order) # delete the attendees so that the tickets are unlocked. delete_related_attendees_for_order(order)
def test_should_delete_related_attendees(self): """Method to test to delete related attendees of an event""" with app.test_request_context(): attendee = AttendeeFactory() db.session.add(attendee) db.session.commit() obj = OrderFactory() obj.ticket_holders = [attendee, ] db.session.add(obj) db.session.commit() delete_related_attendees_for_order(obj) order = db.session.query(Order).filter(Order.id == obj.id).first() self.assertEqual(len(order.ticket_holders), 0)
def after_update_object(self, order, data, view_kwargs): """ :param order: :param data: :param view_kwargs: :return: """ if order.status == 'cancelled': send_order_cancel_email(order) send_notif_ticket_cancel(order) # delete the attendees so that the tickets are unlocked. delete_related_attendees_for_order(order) elif order.status == 'completed' or order.status == 'placed': on_order_completed(order)
def charge_stripe_order_payment(order): """ Create session for order :param order: Order for which to charge for :return: """ # create session for the user try: session = StripePaymentsManager.capture_payment(order) order.stripe_session_id = session['id'] db.session.commit() return True, session except ConflictError as e: # session creation failed hence expire the order order.status = 'expired' save_to_db(order) # delete related attendees to unlock the tickets delete_related_attendees_for_order(order) # return the failure message from stripe. return False, e
def charge_paypal_order_payment(order, paypal_payer_id, paypal_payment_id): """ Charge the user through paypal. :param order: Order for which to charge for. :param paypal_payment_id: payment_id :param paypal_payer_id: payer_id :return: """ # save the paypal payment_id with the order order.paypal_token = paypal_payment_id save_to_db(order) # create the transaction. status, error = PayPalPaymentsManager.execute_payment( paypal_payer_id, paypal_payment_id ) if status: # successful transaction hence update the order details. order.paid_via = 'paypal' order.status = 'completed' order.transaction_id = paypal_payment_id order.completed_at = datetime.utcnow() save_to_db(order) on_order_completed(order) return True, 'Charge successful' # payment failed hence expire the order order.status = 'expired' save_to_db(order) # delete related attendees to unlock the tickets delete_related_attendees_for_order(order) # return the error message from Paypal return False, error
def charge_stripe_order_payment(order, token_id): """ Charge the user through Stripe :param order: Order for which to charge for :param token_id: Stripe token :return: """ # save the stripe token with the order order.stripe_token = token_id save_to_db(order) # charge the user try: charge = StripePaymentsManager.capture_payment(order) except ConflictError as e: # payment failed hence expire the order order.status = 'expired' save_to_db(order) # delete related attendees to unlock the tickets delete_related_attendees_for_order(order) raise e # charge.paid is true if the charge succeeded, or was successfully authorized for later capture. if charge.paid: # update the order in the db. order.paid_via = charge.source.object order.brand = charge.source.brand order.exp_month = charge.source.exp_month order.exp_year = charge.source.exp_year order.last4 = charge.source.last4 order.transaction_id = charge.id order.status = 'completed' order.completed_at = datetime.utcnow() save_to_db(order) # create tickets. create_pdf_tickets_for_holder(order) # send email and notifications. send_email_to_attendees(order, current_user.id) send_notif_to_attendees(order, current_user.id) order_url = make_frontend_url(path=f'/orders/{order.identifier}') for organizer in order.event.organizers: send_notif_ticket_purchase_organizer(organizer, order.invoice_number, order_url, order.event.name, order.id) if order.event.owner: send_notif_ticket_purchase_organizer( order.event.owner, order.invoice_number, order_url, order.event.name, order.id, ) return True, 'Charge successful' # payment failed hence expire the order order.status = 'expired' save_to_db(order) # delete related attendees to unlock the tickets delete_related_attendees_for_order(order) # return the failure message from stripe. return False, charge.failure_message