Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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))
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
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))
Ejemplo n.º 5
0
 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})
Ejemplo n.º 6
0
 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()
Ejemplo n.º 7
0
 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)