def createUser(request): fields = Field.objects.filter(required=True) if request.method == "POST": userForm = RegistrationForm(request.POST, prefix="user") profileForm = ProfileForm(request.POST, fields=fields, prefix="profile") else: userForm = RegistrationForm(prefix="user") profileForm = ProfileForm(fields=fields, prefix="profile") if userForm.is_valid() and profileForm.is_valid(): randomPassword = "".join( [random.choice(string.letters + string.punctuation + string.digits) for i in range(15)] ) if userForm.cleaned_data["username"] == "": userForm.cleaned_data["username"] = userForm.cleaned_data["email"].split("@")[0] oldUser = None try: oldUser = User.objects.get(username__exact=userForm.cleaned_data["username"]) except User.DoesNotExist, e: pass if oldUser: messages.info(request, "The username '%s' already exists." % (userForm.cleaned_data["username"])) else: user = User.objects.create_user( userForm.cleaned_data["username"], userForm.cleaned_data["email"], randomPassword ) user.first_name = userForm.cleaned_data["firstName"] user.last_name = userForm.cleaned_data["lastName"] user.save() member = user.member member.tagline = userForm.cleaned_data["tagline"] member.save() messages.info(request, "User '%s' created!" % userForm.cleaned_data["username"]) notification.send([user], "account_created", {"user": user, "creator": request.user}) for field in fields: value = FieldValue.objects.create(field=field, value=profileForm.fieldValue(field), member=member)
def addPayment(request, invoiceID): invoice = models.Invoice.objects.get(pk=invoiceID) if request.method == 'POST': form = forms.AddPaymentForm(request.POST) else: form = forms.AddPaymentForm() if form.is_valid(): payment = models.Payment.objects.create( user = form.cleaned_data['user'], value = form.cleaned_data['value'], created = form.cleaned_data['created'], method = form.cleaned_data['method'], invoice = invoice ) if notification: notification.send( [payment.user], 'payment_received', {'user': invoice.user, 'payment': payment} ) messages.info(request, "Payment added.") return HttpResponseRedirect(reverse('payment:viewInvoice', kwargs={'invoiceID': invoice.id})) return render_to_response('payment/addPayment.html', {'invoice': invoice, 'form': form}, context_instance=RequestContext(request))
def save(self, *args, **kwargs): if self.pk and notification: current = Invoice.objects.get(pk=self.pk) if current.draft == True or current.open == False: if self.draft == False and self.open == True and self.unpaidBalance > 0: notification.send( [self.user], "invoice_ready", {'user': self.user, 'invoice': self}, ) super(Invoice, self).save(*args, **kwargs)
def pay(request, invoiceID): invoice = models.Invoice.objects.get(pk=invoiceID) if request.method == 'POST': form = forms.PaymentForm(request.POST) else: form = forms.PaymentForm() balance = invoice.unpaidBalance if stripe.api_key == "": messages.error(request, "Stripe is not configured for this Spiff install.") return render_to_response('membership/pay.html', {'form': form, 'invoice': invoice}, context_instance=RequestContext(request)) if balance < 0.5: messages.error(request, "Your outstanding balance of $%d costs less than " "$0.50, which is too small for Stripe to process."%(balance)) return render_to_response('payment/pay.html', {'form': form, 'invoice': invoice}, context_instance=RequestContext(request)) if form.is_valid(): stripe.api_key = settings.STRIPE_KEY cardData = {} cardData['number'] = form.cleaned_data['card'] cardData['exp_month'] = form.cleaned_data['month'] cardData['exp_year'] = form.cleaned_data['year'] cardData['cvc'] = form.cleaned_data['cvc'] try: charge = stripe.Charge.create( amount = int(balance*100), currency = 'usd', card = cardData, description = 'Payment from %s for invoice %s'%(request.user.member.fullName, invoice.id) ) payment = models.Payment.objects.create( user = request.user, value = balance, status = models.Payment.STATUS_PAID, transactionID = charge.id, method = models.Payment.METHOD_STRIPE, invoice = invoice ) if notification: notification.send( [request.user], 'payment_received', {'user': request.user, 'payment': payment} ) messages.info(request, "Your payment has been processed. Thanks!") return HttpResponseRedirect(reverse('home')) except stripe.CardError, e: messages.error(request, "There was an error while processing your card: %s"%(e.message))
def save(self, *args, **kwargs): if self.pk and notification: current = Invoice.objects.get(pk=self.pk) if current.draft == True or current.open == False: if self.draft == False and self.open == True and self.unpaidBalance > 0: try: self.chargeStripe() except stripe.error.CardError, e: funcLog().error("Failed to charge stripe") funcLog().exception(e) notification.send( [self.user], "card_failed", {'user': self.user, 'invoice': self})
def save(self, *args, **kwargs): if not self.id and not self.created: self.created = datetime.datetime.utcnow().replace(tzinfo=utc) if notification: notification.send( [self.user], "payment_received", {'user': self.user, 'payment': self}) super(Payment, self).save(*args, **kwargs) if self.invoice.unpaidBalance == 0: self.invoice.open = False self.invoice.save() for lineItemType in find_api_classes('models', LineItem): for item in lineItemType.objects.filter(invoice=self.invoice): item.process()
def obj_create(self, bundle, **kwargs): bundle = self.full_hydrate(bundle) m2m = self.hydrate_m2m(bundle) invoice = m2m.obj.invoice if bundle.data['method'] == models.Payment.METHOD_STRIPE: stripe.api_key = settings.STRIPE_KEY cardData = {} stripeData = bundle.data['stripe'] cardData['number'] = stripeData['card'] cardData['exp_month'] = stripeData['exp_month'] cardData['exp_year'] = stripeData['exp_year'] cardData['cvc'] = stripeData['cvc'] balance = float(bundle.data['value']) if balance > invoice.unpaidBalance: raise ImmediateHttpResponse(response=self.error_response("You can't pay more than $%s!"%(invoice.unpaidBalance))) charge = stripe.Charge.create( amount = int(balance*100), currency = 'usd', card = cardData, description = 'Payment from %s for invoice %s'%(bundle.request.user.member.fullName, invoice.id) ) payment = models.Payment.objects.create( user = bundle.request.user, value = balance, status = models.Payment.STATUS_PAID, transactionID = charge.id, method = models.Payment.METHOD_STRIPE, invoice = invoice ) if notification: notification.send( [bundle.request.user], 'payment_received', {'user': bundle.request.user, 'payment': payment} ) bundle.obj = payment return bundle else: return super(PaymentResource, self).obj_create(bundle, **kwargs)