def process_art_show_payment(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [attendee] = charge.attendees attendee = session.merge(attendee) apps = attendee.art_show_applications for app in apps: message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('edit?id={}&message={}', app.id, message) else: attendee.amount_paid += charge.dollar_amount app.status = c.PAID if attendee.paid == c.NOT_PAID: attendee.paid = c.HAS_PAID session.add(attendee) send_email.delay(c.ADMIN_EMAIL, c.ART_SHOW_EMAIL, 'Art Show Payment Received', render('emails/art_show/payment_notification.txt', {'app': app}, encoding=None), model=app.to_dict('id')) send_email.delay(c.ART_SHOW_EMAIL, app.email, 'Art Show Payment Received', render('emails/art_show/payment_confirmation.txt', {'app': app}, encoding=None), model=app.to_dict('id')) raise HTTPRedirect('edit?id={}&message={}', app.id, 'Your payment has been accepted!')
def pay_for_extra_members(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [group] = charge.groups group_badge_price = c.DEALER_BADGE_PRICE if group.tables else c.GROUP_PRICE badges_to_add = charge.dollar_amount // group_badge_price if charge.dollar_amount % group_badge_price: message = 'Our preregistration price has gone up since you tried to add the badges; please try again' else: message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('group_members?id={}&message={}', group.id, message) else: session.assign_badges(group, group.badges + badges_to_add) group.amount_paid += charge.dollar_amount session.merge(group) if group.is_dealer: send_email.delay( c.MARKETPLACE_EMAIL, c.MARKETPLACE_EMAIL, 'Dealer Paid for Extra Members', render('emails/dealers/payment_notification.txt', {'group': group}, encoding=None), model=group.to_dict('id')) raise HTTPRedirect( 'group_members?id={}&message={}', group.id, 'You payment has been accepted and the badges have been added to your group')
def process_group_payment(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [group] = charge.groups message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('group_members?id={}&message={}', group.id, message) else: group.amount_paid += charge.dollar_amount session.merge(group) if group.is_dealer: try: send_email.delay( c.MARKETPLACE_EMAIL, c.MARKETPLACE_EMAIL, 'Dealer Payment Completed', render('emails/dealers/payment_notification.txt', {'group': group}, encoding=None), model=group.to_dict('id')) except Exception: log.error( 'unable to send dealer payment confirmation email', exc_info=True) raise HTTPRedirect('group_members?id={}&message={}', group.id, 'Your payment has been accepted!')
def pay_for_extra_codes(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [attendee] = charge.attendees attendee = session.attendee(attendee.id) group = attendee.promo_code_groups[0] badges_to_add = charge.dollar_amount // c.GROUP_PRICE if charge.dollar_amount % c.GROUP_PRICE: message = 'Our preregistration price has gone up since you tried to add more codes; please try again' else: message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('group_promo_codes?id={}&message={}', group.id, message) else: session.add(session.create_receipt_item( attendee, charge.amount, "Adding {} badge{} to promo code group {} (${} each)".format( badges_to_add, "s" if badges_to_add > 1 else "", group.name, c.GROUP_PRICE), charge.stripe_transaction, c.PROMO_CODE), ) session.add_codes_to_pc_group(group, badges_to_add) attendee.amount_paid_override += charge.dollar_amount raise HTTPRedirect( 'group_promo_codes?id={}&message={}', group.id, 'You payment has been accepted and the codes have been added to your group')
def pay_for_extra_members(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [group] = charge.groups group_badge_price = c.DEALER_BADGE_PRICE if group.tables else c.GROUP_PRICE badges_to_add = charge.dollar_amount // group_badge_price if charge.dollar_amount % group_badge_price: message = 'Our preregistration price has gone up since you tried to add the badges; please try again' else: message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('group_members?id={}&message={}', group.id, message) else: session.assign_badges(group, group.badges + badges_to_add) group.amount_paid_override += charge.dollar_amount session.add(session.create_receipt_item( group, charge.amount, "{} badge{} (${} each)".format( badges_to_add, "s" if badges_to_add > 1 else "", group.new_badge_cost), charge.stripe_transaction, c.BADGE), ) session.merge(group) if group.is_dealer: send_email.delay( c.MARKETPLACE_EMAIL, c.MARKETPLACE_EMAIL, '{} Paid for Extra Members'.format(c.DEALER_TERM.title()), render('emails/dealers/payment_notification.txt', {'group': group}, encoding=None), model=group.to_dict('id')) raise HTTPRedirect( 'group_members?id={}&message={}', group.id, 'You payment has been accepted and the badges have been added to your group')
def process_marketplace_payment(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [attendee] = charge.attendees attendee = session.merge(attendee) apps = attendee.marketplace_applications message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('edit?id={}&message={}', apps[0].id, message) else: attendee_payment = charge.dollar_amount if attendee.marketplace_cost: for app in attendee.marketplace_applications: attendee_payment -= app.amount_unpaid app.amount_paid += app.amount_unpaid attendee.amount_paid += attendee_payment if attendee.paid == c.NOT_PAID: attendee.paid = c.HAS_PAID session.add(attendee) send_email.delay(c.ADMIN_EMAIL, c.MARKETPLACE_APP_EMAIL, 'Marketplace Payment Received', render('emails/marketplace/payment_notification.txt', {'app': app}, encoding=None), model=app.to_dict('id')) send_email.delay(c.MARKETPLACE_APP_EMAIL, app.email, 'Marketplace Payment Received', render('emails/marketplace/payment_confirmation.txt', {'app': app}, encoding=None), model=app.to_dict('id')) raise HTTPRedirect('edit?id={}&message={}', app.id, 'Your payment has been accepted!')
def manual_reg_charge(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [attendee] = charge.attendees message = charge.charge_cc(session, stripeToken) if message: return { 'success': False, 'message': 'Error processing card: {}'.format(message) } else: attendee.paid = c.HAS_PAID attendee.payment_method = c.MANUAL session.add( session.create_receipt_item(attendee, attendee.total_cost * 100, "At-door desk payment", charge.stripe_transaction)) attendee.amount_paid_override = attendee.total_cost session.merge(attendee) session.commit() return { 'success': True, 'message': 'Payment accepted.', 'id': attendee.id }
def pay_for_extra_members(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [group] = charge.groups badges_to_add = charge.dollar_amount // c.GROUP_PRICE if charge.dollar_amount % c.GROUP_PRICE: message = 'Our preregistration price has gone up since you tried to add the badges; please try again' else: message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('group_members?id={}&message={}', group.id, message) else: session.assign_badges(group, group.badges + badges_to_add) group.amount_paid += charge.dollar_amount session.merge(group) if group.is_dealer: send_email.delay( c.MARKETPLACE_EMAIL, c.MARKETPLACE_EMAIL, 'Dealer Paid for Extra Members', render('emails/dealers/payment_notification.txt', {'group': group}, encoding=None), model=group.to_dict('id')) raise HTTPRedirect( 'group_members?id={}&message={}', group.id, 'You payment has been accepted and the badges have been added to your group' )
def sales_charge(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('sales_charge_form?message={}', message) else: session.add( ArbitraryCharge(amount=charge.dollar_amount, what=charge.description)) raise HTTPRedirect('sales_charge_form?message={}', 'Charge successfully processed')
def arbitrary_charge(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('arbitrary_charge_form?message={}', message) else: session.add(ArbitraryCharge( amount=charge.dollar_amount, what=charge.description, reg_station=cherrypy.session.get('reg_station') )) raise HTTPRedirect('{}?message={}', return_to, 'Charge successfully processed')
def prereg_payment(self, session, payment_id=None, stripeToken=None): if not payment_id or not stripeToken or c.HTTP_METHOD != 'POST': message = 'The payment was interrupted. Please check below to ensure you received your badge.' raise HTTPRedirect('paid_preregistrations?message={}', message) charge = Charge.get(payment_id) if not charge.total_cost: message = 'Your total cost was $0. Your credit card has not been charged.' elif charge.amount != charge.total_cost: message = 'Our preregistration price has gone up; ' \ 'please fill out the payment form again at the higher price' else: message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('index?message={}', message) # from this point on, the credit card has actually been charged but we haven't marked anything as charged yet. # be ultra-careful until the attendees/groups are marked paid and written to the DB or we could end up in a # situation where we took the payment, but didn't mark the cards charged for attendee in charge.attendees: attendee.paid = c.HAS_PAID attendee.amount_paid = attendee.total_cost attendee_name = 'PLACEHOLDER' if attendee.is_unassigned else attendee.full_name log.info("PAYMENT: marked attendee id={} ({}) as paid", attendee.id, attendee_name) session.add(attendee) for group in charge.groups: group.amount_paid = group.default_cost log.info("PAYMENT: marked group id={} ({}) as paid", group.id, group.name) for attendee in group.attendees: attendee.amount_paid = attendee.total_cost - attendee.badge_cost attendee_name = 'UNASSIGNED PLACEHOLDER' if attendee.is_unassigned else attendee.full_name log.info("PAYMENT: marked group member id={} ({}) as paid", attendee.id, attendee_name) session.add(group) session.commit( ) # paranoia: really make sure we lock in marking taking payments in the database Charge.unpaid_preregs.clear() Charge.paid_preregs.extend(charge.targets) log.debug( 'PAYMENT: prereg payment actual charging process FINISHED for stripeToken={}', stripeToken) raise HTTPRedirect('paid_preregistrations?payment_received={}', charge.dollar_amount)
def manual_reg_charge(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [attendee] = charge.attendees message = charge.charge_cc(session, stripeToken) if message: return {'success': False, 'message': 'Error processing card: {}'.format(message)} else: attendee.paid = c.HAS_PAID attendee.payment_method = c.MANUAL attendee.amount_paid = attendee.total_cost session.merge(attendee) session.commit() return {'success': True, 'message': 'Payment accepted.', 'id': attendee.id}
def take_payment(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [attendee] = charge.attendees message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('pay?id={}&message={}', attendee.id, message) else: db_attendee = session.query(Attendee).filter_by(id=attendee.id).first() if db_attendee: attendee = db_attendee attendee.paid = c.HAS_PAID attendee.amount_paid = attendee.total_cost session.add(attendee) raise HTTPRedirect( 'register?message={}', c.AT_DOOR_PREPAID_MSG)
def take_payment(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [attendee] = charge.attendees message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('pay?id={}&message={}', attendee.id, message) else: db_attendee = session.query(Attendee).filter_by( id=attendee.id).first() if db_attendee: attendee = db_attendee attendee.paid = c.HAS_PAID session.add_receipt_items_by_model(charge, attendee) attendee.amount_paid_override = attendee.total_cost session.add(attendee) raise HTTPRedirect('register?message={}', c.AT_DOOR_PREPAID_MSG)
def take_payment(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [attendee] = charge.attendees message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('pay?id={}&message={}', attendee.id, message) else: db_attendee = session.query(Attendee).filter_by(id=attendee.id).first() if db_attendee: attendee = db_attendee attendee.paid = c.HAS_PAID attendee.amount_paid = attendee.total_cost session.add(attendee) raise HTTPRedirect( 'register?message={}', 'Your payment has been accepted, please proceed to the Preregistration desk to pick up your badge')
def process_attendee_donation(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [attendee] = charge.attendees message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('attendee_donation_form?id=' + attendee.id + '&message={}', message) else: # It's safe to assume the attendee exists in the database already. # The only path to reach this method requires the attendee to have # already paid for their registration, thus the attendee has been # saved to the database. attendee = session.query(Attendee).get(attendee.id) attendee.amount_paid += charge.dollar_amount if attendee.paid == c.NOT_PAID and attendee.amount_paid == attendee.total_cost: attendee.paid = c.HAS_PAID raise HTTPRedirect('badge_updated?id={}&message={}', attendee.id, 'Your payment has been accepted')
def process_attendee_donation(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [attendee] = charge.attendees message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('attendee_donation_form?id=' + attendee.id + '&message={}', message) else: # It's safe to assume the attendee exists in the database already. # The only path to reach this method requires the attendee to have # already paid for their registration, thus the attendee has been # saved to the database. attendee = session.query(Attendee).get(attendee.id) attendee.amount_paid_override += charge.dollar_amount if attendee.paid == c.NOT_PAID and attendee.amount_paid == attendee.total_cost: attendee.paid = c.HAS_PAID session.add_receipt_items_by_model(charge, attendee) raise HTTPRedirect('badge_updated?id={}&message={}', attendee.id, 'Your payment has been accepted')
def arbitrary_charge(self, session, payment_id, stripeToken, return_to='arbitrary_charge_form'): charge = Charge.get(payment_id) message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('arbitrary_charge_form?message={}', message) else: session.add( ArbitraryCharge( amount=charge.dollar_amount, what=charge.description, reg_station=cherrypy.session.get('reg_station'))) raise HTTPRedirect('{}?message={}', return_to, 'Charge successfully processed')
def prereg_payment(self, session, payment_id=None, stripeToken=None, message=''): if not payment_id or not stripeToken or c.HTTP_METHOD != 'POST': message = 'The payment was interrupted. Please check below to ensure you received your badge.' raise HTTPRedirect('paid_preregistrations?message={}', message) charge = Charge.get(payment_id) if not charge.total_cost: message = 'Your total cost was $0. Your credit card has not been charged.' elif charge.amount != charge.total_cost: message = 'Our preregistration price has gone up; ' \ 'please fill out the payment form again at the higher price' else: for attendee in charge.attendees: if not message and attendee.promo_code_id: message = check_prereg_promo_code(session, attendee) if not message: message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('index?message={}', message) # from this point on, the credit card has actually been charged but we haven't marked anything as charged yet. # be ultra-careful until the attendees/groups are marked paid and written to the DB or we could end up in a # situation where we took the payment, but didn't mark the cards charged for attendee in charge.attendees: attendee.paid = c.HAS_PAID attendee.amount_paid_override = attendee.total_cost attendee_name = 'PLACEHOLDER' if attendee.is_unassigned else attendee.full_name log.info("PAYMENT: marked attendee id={} ({}) as paid", attendee.id, attendee_name) session.add(attendee) if attendee.badges: pc_group = session.create_promo_code_group(attendee, attendee.name, int(attendee.badges) - 1) session.add(pc_group) session.commit() # save PromoCodeGroup to the database to generate receipt items correctly for attendee in charge.attendees: session.add_receipt_items_by_model(charge, attendee) Charge.unpaid_preregs.clear() Charge.paid_preregs.extend(charge.targets) log.debug('PAYMENT: prereg payment actual charging process FINISHED for stripeToken={}', stripeToken) raise HTTPRedirect('paid_preregistrations?payment_received={}', charge.dollar_amount)
def purchases_charge(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) message = charge.charge_cc(session, stripeToken) attendee_id = charge.attendees[0].id attendee = session.attendee(attendee_id) receipt = attendee.art_show_receipt if message: raise HTTPRedirect('pieces_bought?id={}&message={}', attendee.id, message) else: session.add( ArtShowPayment( receipt=receipt, amount=charge.amount, type=c.STRIPE, )) raise HTTPRedirect('pieces_bought?id={}&message={}', attendee.id, 'Charge successfully processed')
def process_group_payment(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [group] = charge.groups message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('group_members?id={}&message={}', group.id, message) else: group.amount_paid += charge.dollar_amount session.merge(group) if group.is_dealer: try: send_email.delay( c.MARKETPLACE_EMAIL, c.MARKETPLACE_EMAIL, 'Dealer Payment Completed', render('emails/dealers/payment_notification.txt', {'group': group}, encoding=None), model=group.to_dict('id')) except Exception: log.error('unable to send dealer payment confirmation email', exc_info=True) raise HTTPRedirect('group_members?id={}&message={}', group.id, 'Your payment has been accepted!')
def pay_for_extra_codes(self, session, payment_id, stripeToken): charge = Charge.get(payment_id) [attendee] = charge.attendees group = session.attendee(attendee.id).promo_code_groups[0] badges_to_add = charge.dollar_amount // c.GROUP_PRICE if charge.dollar_amount % c.GROUP_PRICE: message = 'Our preregistration price has gone up since you tried to add more codes; please try again' else: message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('group_promo_codes?id={}&message={}', group.id, message) else: session.add_codes_to_pc_group(group, badges_to_add) attendee.amount_paid += charge.dollar_amount session.merge(attendee) raise HTTPRedirect( 'group_promo_codes?id={}&message={}', group.id, 'You payment has been accepted and the codes have been added to your group')
def prereg_payment(self, session, payment_id=None, stripeToken=None): if not payment_id or not stripeToken or c.HTTP_METHOD != 'POST': message = 'The payment was interrupted. Please check below to ensure you received your badge.' raise HTTPRedirect('paid_preregistrations?message={}', message) charge = Charge.get(payment_id) if not charge.total_cost: message = 'Your total cost was $0. Your credit card has not been charged.' elif charge.amount != charge.total_cost: message = 'Our preregistration price has gone up; ' \ 'please fill out the payment form again at the higher price' else: message = charge.charge_cc(session, stripeToken) if message: raise HTTPRedirect('index?message={}', message) # from this point on, the credit card has actually been charged but we haven't marked anything as charged yet. # be ultra-careful until the attendees/groups are marked paid and written to the DB or we could end up in a # situation where we took the payment, but didn't mark the cards charged for attendee in charge.attendees: attendee.paid = c.HAS_PAID attendee_name = 'PLACEHOLDER' if attendee.is_unassigned else attendee.full_name log.info("PAYMENT: marked attendee id={} ({}) as paid", attendee.id, attendee_name) session.add(attendee) if attendee.badges: pc_group = session.create_promo_code_group(attendee, attendee.name, int(attendee.badges) - 1) session.add(pc_group) session.commit() attendee.amount_paid = attendee.total_cost session.commit() # paranoia: really make sure we lock in marking taking payments in the database Charge.unpaid_preregs.clear() Charge.paid_preregs.extend(charge.targets) log.debug('PAYMENT: prereg payment actual charging process FINISHED for stripeToken={}', stripeToken) raise HTTPRedirect('paid_preregistrations?payment_received={}', charge.dollar_amount)