def initiative_payment(request):
    system_message = None
    if request.POST:

        profile_id = request.session['profile_id']
        uuid = request.POST['uuid']
        # Set your secret key: remember to change this to your live secret key in production
        # See your keys here https://manage.stripe.com/account
        stripe.api_key = settings.STRIPE_API_KEY

        # Get the credit card details submitted by the form
        token = request.POST['stripeToken']
        amount = settings.INITIATIVE_LAUNCH_FEE
        currency = 'usd'
        processor = 'stripe'
        # Create the charge on Stripe's servers - this will charge the user's
        # card
        try:
            # TODO find out what stripe.Charge.create() returns
            charge = stripe.Charge.create(
                amount=amount,  # amount in cents, again
                currency=currency,
                card=token,
                description=INITIATIVE_LAUNCH
            )
            initiative_id = initiative_dao.get_intitiative_id(uuid)

            payment = Payment_Receipt.objects.create(
                profile_id=profile_id,
                processor=processor,
                table_desc='initiative',
                table_key=initiative_id,
                ref_id=charge.id,
                short_desc=INITIATIVE_LAUNCH,
                amount=amount,
                currency_code=currency,
                transaction_date=datetime.now())

            initiative = Initiative.objects.get(pk=initiative_id)
            initiative.is_public = True,
            initiative.publish_date = datetime.now()
            initiative.save()
            system_message = 'Payment completed successfully! Your Initiative has been published!.'

        except stripe.CardError as e:
            # The card has been declined
            system_message = 'An error has occurred processing request.'

        return render_to_response('payment.html', {
                                  'system_message': system_message,
                                  }, context_instance=RequestContext(request))
    else:
        system_message = 'Invalid request.'
        return render_to_response('system.html', {
                                  'system_message': system_message,
                                  }, context_instance=RequestContext(request))
def initiative_milestones_add(request):
    system_message = None
    if request.POST:
        ml = request.POST.getlist('milestone_list')
        uuid = request.POST['uuid']
        initiative_id = initiative_dao.get_intitiative_id(uuid)
        Milestones.objects.filter(initiative_id=initiative_id).delete()
        for milestone in ml:
            Milestones.objects.create(initiative_id=initiative_id,
                                      milestone_id=milestone)
        system_message = 'Milestones updated'
        return initiative_milestones(request, uuid, system_message)
def initiative_service_add(request):
    system_message = None
    if request.POST:
        sl = request.POST.getlist('service_list')
        uuid = request.POST['uuid']
        initiative_id = initiative_dao.get_intitiative_id(uuid)
        Initiative_Service.objects.filter(initiative_id=initiative_id).delete()
        for service in sl:
            Initiative_Service.objects.create(initiative_id=initiative_id,
                                              service_id=service)
        system_message = 'Services updated'

    return initiative_service(request, uuid, system_message)
def initiative_edit_save(request):
    system_message = None
    if request.method == 'POST':
        uuid = request.POST['uuid']
        initiative_id = initiative_dao.get_intitiative_id(uuid)
        form = InitiativeForm(request.POST)
        if form.is_valid():
            is_public = form.cleaned_data['is_public']
            initiative = Initiative.objects.get(pk=initiative_id)
            initiative.short_desc = form.cleaned_data['short_desc']
            initiative.long_desc = form.cleaned_data['long_desc']
            if is_public:
                if settings.INITIATIVE_LAUNCH_FEE == 0:
                    initiative.is_public = is_public
                    if initiative.publish_date is None:
                        initiative.publish_date = datetime.now()
            else:
                initiative.is_public = is_public

            initiative.save()
            if settings.INITIATIVE_LAUNCH_FEE > 0 and is_public and initiative.publish_date is None:
                raw_fee = settings.INITIATIVE_LAUNCH_FEE
                display_fee = str(raw_fee)[:-2] + '.' + str(raw_fee)[-2:]
                return render_to_response('initiative_payment.html', {
                                          'system_message': system_message,
                                          'uuid': uuid,
                                          'display_fee': display_fee,
                                          'raw_fee': raw_fee,
                                          }, context_instance=RequestContext(request))
            else:
                system_message = 'Initiative updated!'
            return render_to_response('initiative_edit.html', {
                                      'system_message': system_message,
                                      'form': None,
                                      'uuid': uuid,
                                      }, context_instance=RequestContext(request))
        else:
            system_message = 'Error'

        return render_to_response('initiative_edit.html', {
                                  'system_message': system_message,
                                  'uuid': uuid,
                                  'form': form,
                                  }, context_instance=RequestContext(request))

    else:
        system_message = 'Invalid request'
        return render_to_response('system.html', {
                                  'system_message': system_message,
                                  }, context_instance=RequestContext(request))
def initiative_milestone_date(request, uuid=None):
    system_message = None
    if request.POST:
        system_message = 'post'
        uuid = request.POST['uuid']
        milestone_id = request.POST['milestone_id']
        target_date = request.POST['target_date']
        complete_date = request.POST['complete_date']
        if target_date != '' or complete_date != '':
            milestone = Milestones.objects.get(pk=milestone_id)
            if target_date != '':
                milestone.target_date = datetime.strptime(
                    target_date,
                    "%m/%d/%Y").strftime("%Y-%m-%d")
            if complete_date != '':
                milestone.complete_date = datetime.strptime(
                    complete_date,
                    "%m/%d/%Y").strftime("%Y-%m-%d")
            milestone.save()
            system_message = 'Milestone date updated'
        else:
            system_message = 'Nothing to update:' + \
                target_date + ':' + complete_date

    milestones = Milestones.objects.filter(
        initiative_id=initiative_dao.get_intitiative_id(uuid)).values(
        'id',
        'initiative_id',
        'target_date',
        'complete_date',
        'milestone__short_desc')
    return render_to_response('initiative_milestone_dates.html', {
                              'system_message': system_message,
                              'milestones': milestones,
                              'uuid': uuid
                              }, RequestContext(request))