credit card
This commit is contained in:
		
					parent
					
						
							
								089454e8ac
							
						
					
				
			
			
				commit
				
					
						8f44c43850
					
				
			
		
					 8 changed files with 510 additions and 153 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,5 @@
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
import calendar
 | 
			
		||||
from datetime import datetime, date, timedelta
 | 
			
		||||
from dateutil.relativedelta import relativedelta
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@ $( document ).ready(function() {
 | 
			
		|||
             }
 | 
			
		||||
             if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
 | 
			
		||||
                 // Only send the token to relative URLs i.e. locally.
 | 
			
		||||
				 alert("POR AQUI");
 | 
			
		||||
                 xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
 | 
			
		||||
             }
 | 
			
		||||
         } 
 | 
			
		||||
| 
						 | 
				
			
			@ -33,6 +34,7 @@ $( document ).ready(function() {
 | 
			
		|||
 | 
			
		||||
    function submit_payment(e){ 
 | 
			
		||||
      $('#billing-form').submit();
 | 
			
		||||
	   alert("POR AQUI2");
 | 
			
		||||
      // $form.submit();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +44,7 @@ $( document ).ready(function() {
 | 
			
		|||
 | 
			
		||||
    /* If you're using Stripe for payments */
 | 
			
		||||
    function payWithStripe(e) {
 | 
			
		||||
        console.log("submiting");
 | 
			
		||||
        console.log("submiting33");
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
 | 
			
		||||
        if (!$('.agree-terms').is(':checked')){
 | 
			
		||||
| 
						 | 
				
			
			@ -53,12 +55,15 @@ $( document ).ready(function() {
 | 
			
		|||
 | 
			
		||||
        /* Visual feedback */
 | 
			
		||||
        $form.find('[type=submit]').html('Validating <i class="fa fa-spinner fa-pulse"></i>');
 | 
			
		||||
 | 
			
		||||
			alert("POR AQUI3");
 | 
			
		||||
			console.log("submiting2");
 | 
			
		||||
        var PublishableKey = window.stripeKey;
 | 
			
		||||
		alert(PublishableKey);
 | 
			
		||||
        Stripe.setPublishableKey(PublishableKey);
 | 
			
		||||
        Stripe.card.createToken($form, function stripeResponseHandler(status, response) {
 | 
			
		||||
            if (response.error) {
 | 
			
		||||
                /* Visual feedback */
 | 
			
		||||
				 alert("POR AQUI32345");
 | 
			
		||||
                $form.find('[type=submit]').html('Try again');
 | 
			
		||||
                /* Show Stripe errors on the form */
 | 
			
		||||
                $form.find('.payment-errors').text(response.error.message);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -72,7 +72,7 @@
 | 
			
		|||
                    </div>
 | 
			
		||||
                    {% if credit_card_data %}
 | 
			
		||||
                      <form role="form" id="billing-form" method="post" action="{% url 'digitalglarus:booking_payment' %}" novalidate>
 | 
			
		||||
                        <h2 class="billing-head">Credit Card<a class="btn btn-primary btn-grey btn-edit" href="{% url 'digitalglarus:user_billing_address' %}">Edit</a></h2>
 | 
			
		||||
                        <h2 class="billing-head">Credit Card<a class="btn btn-primary btn-grey btn-edit" href="{% url 'digitalglarus:TermsAndConditions' %}">Edit</a></h2>
 | 
			
		||||
                        <h2 class="membership-lead">Last 4: *****{{credit_card_data.last4}}</h2>
 | 
			
		||||
                        <h2 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h2>
 | 
			
		||||
                        <input type="hidden" name="credit_card_needed" value="false"/>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,113 @@
 | 
			
		|||
{% extends "new_base_glarus.html" %}
 | 
			
		||||
{% load staticfiles cms_tags bootstrap3%}
 | 
			
		||||
{% block title %}crowdfunding{% endblock %}
 | 
			
		||||
 | 
			
		||||
{% block content %}
 | 
			
		||||
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
 | 
			
		||||
  #cancel-subscription-modal{
 | 
			
		||||
    margin-top:10%;    
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #cancel-subscription-modal .modal-header{
 | 
			
		||||
    border-bottom: none;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  #cancel-subscription-modal .modal-footer{
 | 
			
		||||
    border-top: none;
 | 
			
		||||
    text-align: center;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .space-above {
 | 
			
		||||
    margin-top: 10px;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
  <section id="price">
 | 
			
		||||
    <div class="signup-container">
 | 
			
		||||
	  <div class="col-xs-12 col-sm-3 col-lg-4 text-center wow fadeInDown"> </div>
 | 
			
		||||
      <div class="col-xs-12 col-sm-6 col-lg-4 text-center wow fadeInDown"> 
 | 
			
		||||
    
 | 
			
		||||
         <!-- <span class="glyphicon glyphicon-user"></span> -->
 | 
			
		||||
          <div class="payment-box">
 | 
			
		||||
             <h2 class="billing-head">Update your credit card information</h2> 
 | 
			
		||||
             <hr class="greyline-long">
 | 
			
		||||
               <h2 class="membership-lead">Do you want to update your credit card information ?</h2>
 | 
			
		||||
               <div class="date-box">
 | 
			
		||||
                 </div>
 | 
			
		||||
                 <!--<hr class="primary">-->
 | 
			
		||||
                      <div class="signup-form form-group row">
 | 
			
		||||
                      
 | 
			
		||||
                        <div class="button-booking-box form-inline row">
 | 
			
		||||
 | 
			
		||||
                          <form method="POST" action="">
 | 
			
		||||
                            {% csrf_token %} 
 | 
			
		||||
							  <a class="btn btn-primary btn-grey space-above" href="{{request.META.HTTP_REFERER}}">Go back</a>
 | 
			
		||||
                            <button type="button" class="btn btn-primary btn-blue space-above" data-toggle="modal" data-target="#cancel-subscription-modal">Update my credit card</button>
 | 
			
		||||
                          
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                            <div class="modal fade bs-example-modal-sm" id="cancel-subscription-modal" tabindex="-1" role="dialog">
 | 
			
		||||
                              <div class="modal-dialog" role="document">
 | 
			
		||||
                                <div class="modal-content">
 | 
			
		||||
                                  <div class="modal-header">
 | 
			
		||||
                                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
 | 
			
		||||
                                    <h4 class="modal-title">Cancel Subscription</h4>
 | 
			
		||||
                                  </div>
 | 
			
		||||
                                  <div class="modal-body">
 | 
			
		||||
                                    <p>Do you want to cancel your subscription?</p>
 | 
			
		||||
                                  </div>
 | 
			
		||||
                                  <div class="modal-footer">
 | 
			
		||||
                                    <button type="button" class="btn btn-primary btn-grey" data-dismiss="modal">No</button>
 | 
			
		||||
                                    <button type="submit" class="btn btn-primary">Yes</button>
 | 
			
		||||
                                  </div>
 | 
			
		||||
                                </div><!-- /.modal-content -->
 | 
			
		||||
                              </div><!-- /.modal-dialog -->
 | 
			
		||||
                            </div><!-- /.modal -->
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                          </form>
 | 
			
		||||
 | 
			
		||||
                        </div>
 | 
			
		||||
                          <div class="notice-box text-left">
 | 
			
		||||
                            <p class="order-bottom-text">
 | 
			
		||||
                              Your membership wouldn't be automatically renewed each month.
 | 
			
		||||
                            </p>
 | 
			
		||||
                         </div>
 | 
			
		||||
                      </div>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        
 | 
			
		||||
      </div>  
 | 
			
		||||
 | 
			
		||||
	  
 | 
			
		||||
     <div class="col-xs-12 col-sm-3 col-lg-4 text-center wow fadeInDown"> </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div> 
 | 
			
		||||
    </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>   
 | 
			
		||||
  </section>
 | 
			
		||||
  <section id="contact">
 | 
			
		||||
    <div class="fill">
 | 
			
		||||
     <div class="row" class="wow fadeInDown">
 | 
			
		||||
      <div class="col-lg-12 text-center wow fadeInDown">
 | 
			
		||||
          <div class="col-md-4 map-title">
 | 
			
		||||
            Digital Glarus<br>
 | 
			
		||||
            <span class="map-caption">In der Au 7 Schwanden 8762 Switzerland
 | 
			
		||||
            <br>info@digitalglarus.ch
 | 
			
		||||
            <br>
 | 
			
		||||
            (044) 534-66-22
 | 
			
		||||
            <p> </p>
 | 
			
		||||
            </span>
 | 
			
		||||
          </div>
 | 
			
		||||
           <p> </p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
{% endblock %} 
 | 
			
		||||
							
								
								
									
										347
									
								
								digitalglarus/templates/digitalglarus/new_credit_card.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										347
									
								
								digitalglarus/templates/digitalglarus/new_credit_card.html
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,347 @@
 | 
			
		|||
{% extends "new_base_glarus.html" %}
 | 
			
		||||
{% load staticfiles bootstrap3 i18n %}
 | 
			
		||||
{% block content %}
 | 
			
		||||
 | 
			
		||||
<style type="text/css">
 | 
			
		||||
  
 | 
			
		||||
  .nopadding {
 | 
			
		||||
     padding: 0 !important;
 | 
			
		||||
     margin: 0 !important;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .form-control#id_country{
 | 
			
		||||
    -webkit-appearance: none;
 | 
			
		||||
    -moz-appearance: none;
 | 
			
		||||
    background-position: right 50%;
 | 
			
		||||
    background-repeat: no-repeat;
 | 
			
		||||
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAMCAYAAABSgIzaAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYwIDYxLjEzNDc3NywgMjAxMC8wMi8xMi0xNzozMjowMCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNSBNYWNpbnRvc2giIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NDZFNDEwNjlGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NDZFNDEwNkFGNzFEMTFFMkJEQ0VDRTM1N0RCMzMyMkIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo0NkU0MTA2N0Y3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0NkU0MTA2OEY3MUQxMUUyQkRDRUNFMzU3REIzMzIyQiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PuGsgwQAAAA5SURBVHjaYvz//z8DOYCJgUxAf42MQIzTk0D/M+KzkRGPoQSdykiKJrBGpOhgJFYTWNEIiEeAAAMAzNENEOH+do8AAAAASUVORK5CYII=);
 | 
			
		||||
    padding: .5em;
 | 
			
		||||
    padding-right: 1.5em
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  .order-bottom-text a{
 | 
			
		||||
    margin-left: 0px;
 | 
			
		||||
  }
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
  <section id="price">
 | 
			
		||||
    <div class="signup-container">
 | 
			
		||||
      <div class="col-xs-12 col-sm-6 col-lg-8 text-center wow fadeInDown"> 
 | 
			
		||||
        <div class="payment-box">
 | 
			
		||||
               <h2 class="section-heading payment-head">New Credit Card</h2>
 | 
			
		||||
             <!--  <h2 class="membership-amount">35CHF</h2> -->
 | 
			
		||||
                 <hr class="greyline-long">
 | 
			
		||||
                  
 | 
			
		||||
                  <h2 class="membership-lead">
 | 
			
		||||
                      Your Digital Glarus Membership enables 
 | 
			
		||||
                      you to use our coworking space and it includes 
 | 
			
		||||
                      2 working days for the month you signed up. 
 | 
			
		||||
                      The membership fee is a monthly subscription. 
 | 
			
		||||
                       Additional day costs 
 | 
			
		||||
                      15CHF per day. More than 17 days a month it 
 | 
			
		||||
                      will charge only 290CHF/month.
 | 
			
		||||
                  </h2>
 | 
			
		||||
                  {% if is_free %}
 | 
			
		||||
                      <h2 class="billing-head">Billing Adress</h2>
 | 
			
		||||
                      <div class="signup-form form-group row">
 | 
			
		||||
                        <form role="form" id="billing-form" method="post" action="{% url 'digitalglarus:booking_payment' %}" novalidate>
 | 
			
		||||
                        {% for field in form %}
 | 
			
		||||
                          {% csrf_token %}
 | 
			
		||||
                          {% bootstrap_field field show_label=False type='fields'%} 
 | 
			
		||||
                        {% endfor %}
 | 
			
		||||
                        {% bootstrap_form_errors form type='non_fields'%} 
 | 
			
		||||
                        <br>
 | 
			
		||||
                        </form>
 | 
			
		||||
                      </div>
 | 
			
		||||
 | 
			
		||||
                     <hr class="greyline-long">
 | 
			
		||||
                     <br/>
 | 
			
		||||
                     <h2 class="billing-head">Your booking is FREE of charge! You can change or cancel the booking freely 7 days before the booking date.</h2>
 | 
			
		||||
                     <br/><br/>
 | 
			
		||||
                  {% else %}
 | 
			
		||||
				  <br>
 | 
			
		||||
                  <h2 class="billing-head">Credit Card Information</h2>
 | 
			
		||||
				  
 | 
			
		||||
          
 | 
			
		||||
                    {% if credit_card_data %}
 | 
			
		||||
                      <form role="form" id="billing-form" method="post" action="{% url 'digitalglarus:booking_payment' %}" novalidate>
 | 
			
		||||
                        <h2 class="membership-lead">Last 4: *****{{last4}}</h2>
 | 
			
		||||
                        <h2 class="membership-lead">Type: {{cc_brand}}</h2>
 | 
			
		||||
						
 | 
			
		||||
                        <input type="hidden" name="credit_card_needed" value="false"/>
 | 
			
		||||
                      </form>            
 | 
			
		||||
					  
 | 
			
		||||
                    {% else %}
 | 
			
		||||
					 <form role="form" id="billing-form" method="post" action="{% url 'digitalglarus:booking_payment' %}" novalidate>
 | 
			
		||||
                        <h2 class="membership-lead">Last 4: *****{{last4}}</h2>
 | 
			
		||||
                        <h2 class="membership-lead">Type: {{cc_brand}}</h2>
 | 
			
		||||
                        <input type="hidden" name="credit_card_needed" value="false"/>
 | 
			
		||||
                      </form>   
 | 
			
		||||
                    <h2 class="billing-head">Credit Card (New One)</h2>
 | 
			
		||||
                    <div class="signup-form form-group row">
 | 
			
		||||
					 {% csrf_token %}
 | 
			
		||||
                            <form role="form" id="payment-form" novalidate>
 | 
			
		||||
							 {% csrf_token %}
 | 
			
		||||
                                <div class="row">
 | 
			
		||||
                                    <div class="col-xs-12 col-md-12">
 | 
			
		||||
                                        <div class="form-group">
 | 
			
		||||
                                                <input for="name" type="text" class="form-control" name="cardName" placeholder="Name on card" required autofocus data-stripe="name" />
 | 
			
		||||
                                        </div>                            
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                </div>
 | 
			
		||||
                                <div class="row">
 | 
			
		||||
                                    <div class="col-xs-12 col-md-12">
 | 
			
		||||
                                        <div class="form-group">
 | 
			
		||||
                                                <input type="text" class="form-control" name="cardNumber" placeholder="Valid Card Number" required data-stripe="number" />
 | 
			
		||||
                                        </div>                            
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                </div>
 | 
			
		||||
                                <div class="row">
 | 
			
		||||
                                    <div class="col-xs-6 col-md-6 nopadding">
 | 
			
		||||
                                      <label for="expMonth">EXPIRATION DATE</label><br/>
 | 
			
		||||
                                      <div class="col-xs-6 col-lg-6 col-md-6">
 | 
			
		||||
                                        <div class="form-group">
 | 
			
		||||
                                          <input type="text" class="form-control" name="expMonth" placeholder="MM" required data-stripe="exp_month" />
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                      </div>
 | 
			
		||||
                                      <div class="col-xs-6 col-lg-6 col-md-6 pl-ziro">
 | 
			
		||||
                                        <div class="form-group">
 | 
			
		||||
                                          <input type="text" class="form-control" name="expYear" placeholder="YY" required data-stripe="exp_year" />
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                      </div>
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                    <div class="col-xs-4 col-md-6 pull-right">
 | 
			
		||||
                                        <div class="form-group">
 | 
			
		||||
                                            <label for="cvCode">CV CODE</label>
 | 
			
		||||
                                            <input type="password" class="form-control" name="cvCode" placeholder="CV" required data-stripe="cvc" />
 | 
			
		||||
                                        </div>
 | 
			
		||||
                                    </div>
 | 
			
		||||
									
 | 
			
		||||
									<div class="text-center">
 | 
			
		||||
										
 | 
			
		||||
									</div>
 | 
			
		||||
                                </div>
 | 
			
		||||
								<input type="checkbox" hidden="True" class="custom-control-input agree-terms" checked>
 | 
			
		||||
								<div class="row">
 | 
			
		||||
                                    <div class="row">
 | 
			
		||||
                                      <div class="col-xs-6 col-md-6 col-xs-offset-1 col-md-offset-3">
 | 
			
		||||
                                          <button type="button" class="btn btn-primary btn-grey" data-dismiss="modal">Cancel</button> 
 | 
			
		||||
										   <button class="btn btn-primary btn-md btn-blck submit-payment" type="submit">Save</button>
 | 
			
		||||
                                      </div>
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                </div>
 | 
			
		||||
								
 | 
			
		||||
								
 | 
			
		||||
								
 | 
			
		||||
                                <div class="row" style="display:none;">
 | 
			
		||||
                                    <div class="col-xs-12">
 | 
			
		||||
                                        <p class="payment-errors"></p>
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                </div>
 | 
			
		||||
                                {% if paymentError %}
 | 
			
		||||
                                <div class="row">
 | 
			
		||||
                                    <div class="col-xs-12">
 | 
			
		||||
                                      <p>
 | 
			
		||||
                                      {% bootstrap_alert paymentError alert_type='danger' %}
 | 
			
		||||
                                      </p>
 | 
			
		||||
                                    </div>
 | 
			
		||||
                                </div>
 | 
			
		||||
								
 | 
			
		||||
					
 | 
			
		||||
 | 
			
		||||
                                {% endif %}
 | 
			
		||||
                            </form>
 | 
			
		||||
                        <br>
 | 
			
		||||
                    </div>
 | 
			
		||||
                    {% endif %}
 | 
			
		||||
                  {% endif %}
 | 
			
		||||
          </div>                
 | 
			
		||||
      </div>      
 | 
			
		||||
 | 
			
		||||
    </div> 
 | 
			
		||||
    </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>   
 | 
			
		||||
  </section> 
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
  
 | 
			
		||||
  <section id="contact">
 | 
			
		||||
    <div class="fill">
 | 
			
		||||
     <div class="row" class="wow fadeInDown">
 | 
			
		||||
      <div class="col-lg-12 text-center wow fadeInDown">
 | 
			
		||||
          <div class="col-md-4 map-title">
 | 
			
		||||
            Digital Glarus<br>
 | 
			
		||||
            <span class="map-caption">In der Au 7 Schwanden 8762 Switzerland
 | 
			
		||||
            <br>info@digitalglarus.ch
 | 
			
		||||
            <br>
 | 
			
		||||
            (044) 534-66-22
 | 
			
		||||
            <p> </p>
 | 
			
		||||
            </span>
 | 
			
		||||
          </div>
 | 
			
		||||
           <p> </p>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </section>
 | 
			
		||||
 | 
			
		||||
<!-- stripe key data -->
 | 
			
		||||
{% if stripe_key %}
 | 
			
		||||
<script type="text/javascript"> 
 | 
			
		||||
     (function () {window.stripeKey = "{{stripe_key}}";})();
 | 
			
		||||
	 
 | 
			
		||||
</script>
 | 
			
		||||
{%endif%}
 | 
			
		||||
<script>
 | 
			
		||||
$( document ).ready(function() {
 | 
			
		||||
 | 
			
		||||
    $.ajaxSetup({ 
 | 
			
		||||
         beforeSend: function(xhr, settings) {
 | 
			
		||||
             function getCookie(name) {
 | 
			
		||||
                 var cookieValue = null;
 | 
			
		||||
                 if (document.cookie && document.cookie != '') {
 | 
			
		||||
                     var cookies = document.cookie.split(';');
 | 
			
		||||
                     for (var i = 0; i < cookies.length; i++) {
 | 
			
		||||
                         var cookie = jQuery.trim(cookies[i]);
 | 
			
		||||
                         // Does this cookie string begin with the name we want?
 | 
			
		||||
                         if (cookie.substring(0, name.length + 1) == (name + '=')) {
 | 
			
		||||
                             cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
 | 
			
		||||
                             break;
 | 
			
		||||
                         }
 | 
			
		||||
                     }
 | 
			
		||||
                 }
 | 
			
		||||
                 return cookieValue;
 | 
			
		||||
             }
 | 
			
		||||
             if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
 | 
			
		||||
                 // Only send the token to relative URLs i.e. locally.
 | 
			
		||||
				 alert("POR AQUI");
 | 
			
		||||
                 xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
 | 
			
		||||
             }
 | 
			
		||||
         } 
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    //Acept term and conditions button
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    var submit_form_btn = $('#payment_button');
 | 
			
		||||
    submit_form_btn.on('click', submit_payment);
 | 
			
		||||
 | 
			
		||||
    function submit_payment(e){ 
 | 
			
		||||
      $('#billing-form').submit();
 | 
			
		||||
	   alert("POR AQUI2");
 | 
			
		||||
      // $form.submit();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    var $form = $('#payment-form');
 | 
			
		||||
    $form.submit(payWithStripe);
 | 
			
		||||
 | 
			
		||||
    /* If you're using Stripe for payments */
 | 
			
		||||
    function payWithStripe(e) {
 | 
			
		||||
        console.log("submiting");
 | 
			
		||||
        e.preventDefault();
 | 
			
		||||
 | 
			
		||||
        if (!$('.agree-terms').is(':checked')){
 | 
			
		||||
          alert("You must accept terms and conditions.");
 | 
			
		||||
          return;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /* Visual feedback */
 | 
			
		||||
        $form.find('[type=submit]').html('Validating <i class="fa fa-spinner fa-pulse"></i>');
 | 
			
		||||
 | 
			
		||||
        var PublishableKey = window.stripeKey;
 | 
			
		||||
        Stripe.setPublishableKey(PublishableKey);
 | 
			
		||||
        Stripe.card.createToken($form, function stripeResponseHandler(status, response) {
 | 
			
		||||
            if (response.error) {
 | 
			
		||||
                /* Visual feedback */
 | 
			
		||||
				 alert("POR AQUI3");
 | 
			
		||||
                $form.find('[type=submit]').html('Try again');
 | 
			
		||||
                /* Show Stripe errors on the form */
 | 
			
		||||
                $form.find('.payment-errors').text(response.error.message);
 | 
			
		||||
                $form.find('.payment-errors').closest('.row').show();
 | 
			
		||||
            } else {
 | 
			
		||||
                /* Visual feedback */
 | 
			
		||||
                $form.find('[type=submit]').html('Processing <i class="fa fa-spinner fa-pulse"></i>');
 | 
			
		||||
                /* Hide Stripe errors on the form */
 | 
			
		||||
                $form.find('.payment-errors').closest('.row').hide();
 | 
			
		||||
                $form.find('.payment-errors').text("");
 | 
			
		||||
                // response contains id and card, which contains additional card details
 | 
			
		||||
                var token = response.id;
 | 
			
		||||
                // AJAX
 | 
			
		||||
 | 
			
		||||
                //set token  on a hidden input
 | 
			
		||||
                $('#id_token').val(token);
 | 
			
		||||
                $('#billing-form').submit();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Form validation */
 | 
			
		||||
    $.validator.addMethod("month", function(value, element) {
 | 
			
		||||
      return this.optional(element) || /^(01|02|03|04|05|06|07|08|09|10|11|12)$/.test(value);
 | 
			
		||||
    }, "Please specify a valid 2-digit month.");
 | 
			
		||||
 | 
			
		||||
    $.validator.addMethod("year", function(value, element) {
 | 
			
		||||
      return this.optional(element) || /^[0-9]{2}$/.test(value);
 | 
			
		||||
    }, "Please specify a valid 2-digit year.");
 | 
			
		||||
 | 
			
		||||
    validator = $form.validate({
 | 
			
		||||
        rules: {
 | 
			
		||||
            cardNumber: {
 | 
			
		||||
                required: true,
 | 
			
		||||
                creditcard: true,
 | 
			
		||||
                digits: true
 | 
			
		||||
            },
 | 
			
		||||
            expMonth: {
 | 
			
		||||
                required: true,
 | 
			
		||||
                month: true
 | 
			
		||||
            },
 | 
			
		||||
            expYear: {
 | 
			
		||||
                required: true,
 | 
			
		||||
                year: true
 | 
			
		||||
            },
 | 
			
		||||
            cvCode: {
 | 
			
		||||
                required: true,
 | 
			
		||||
                digits: true
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        highlight: function(element) {
 | 
			
		||||
            $(element).closest('.form-control').removeClass('success').addClass('error');
 | 
			
		||||
        },
 | 
			
		||||
        unhighlight: function(element) {
 | 
			
		||||
            $(element).closest('.form-control').removeClass('error').addClass('success');
 | 
			
		||||
        },
 | 
			
		||||
        errorPlacement: function(error, element) {
 | 
			
		||||
            $(element).closest('.form-group').append(error);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    paymentFormReady = function() {
 | 
			
		||||
        if ($form.find('[name=cardNumber]').hasClass("success") &&
 | 
			
		||||
            $form.find('[name=expMonth]').hasClass("success") &&
 | 
			
		||||
            $form.find('[name=expYear]').hasClass("success") &&
 | 
			
		||||
            $form.find('[name=cvCode]').val().length > 1) {
 | 
			
		||||
            return true;
 | 
			
		||||
        } else {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    $form.find('[type=submit]').prop('disabled', true);
 | 
			
		||||
    var readyInterval = setInterval(function() {
 | 
			
		||||
        if (paymentFormReady()) {
 | 
			
		||||
            $form.find('[type=submit]').prop('disabled', false);
 | 
			
		||||
            clearInterval(readyInterval);
 | 
			
		||||
        }
 | 
			
		||||
    }, 250);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
{% endblock %}
 | 
			
		||||
| 
						 | 
				
			
			@ -26,7 +26,7 @@
 | 
			
		|||
                </form>
 | 
			
		||||
                <br>
 | 
			
		||||
                <div class="notice-box">
 | 
			
		||||
					<p class="signup-text">Still have trouble?<a href="mailto:info@ungleich.ch" > Contact us </a>.</p>
 | 
			
		||||
					<p class="signup-text">Still have trouble? For technical support <a href="mailto:info@ungleich.ch" > Contact us </a>.</p>
 | 
			
		||||
					
 | 
			
		||||
                </div>
 | 
			
		||||
            </div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,17 +7,18 @@ from .views import ContactView, IndexView, AboutView, HistoryView, LoginView, Si
 | 
			
		|||
    MembershipPricingView, BookingSelectDatesView, BookingPaymentView, OrdersBookingDetailView,\
 | 
			
		||||
    BookingOrdersListView, MembershipOrdersListView, OrdersMembershipDetailView, \
 | 
			
		||||
    MembershipDeactivateView, MembershipDeactivateSuccessView, UserBillingAddressView, \
 | 
			
		||||
    MembershipReactivateView,TermsAndConditions,ValidateUser,SupportusView,Probar
 | 
			
		||||
    MembershipReactivateView,TermsAndConditions,ValidateUser,SupportusView,Probar,TermsAndConditions2,TermsAndConditions3
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# from membership.views import LoginRegistrationView
 | 
			
		||||
 | 
			
		||||
urlpatterns = [
 | 
			
		||||
 | 
			
		||||
	url(_(r'probar3/?$'),TermsAndConditions3, name='probar3'),
 | 
			
		||||
	url(_(r'probar2/?$'),TermsAndConditions2.as_view(), name='credit_card_edit'),
 | 
			
		||||
	url(_(r'probar/?$'), Probar, name='probar'),
 | 
			
		||||
    url(_(r'login/validate/(?P<pk>\!\w+)/?$'), ValidateUser.as_view(), name='validate-login'),
 | 
			
		||||
    url(_(r'^$'), IndexView.as_view(), name='landing'),
 | 
			
		||||
    url(_(r'terms_conditions/?$'), TermsAndConditions.as_view(), name='TermsAndConditions'),
 | 
			
		||||
    url(_(r'terms_conditions/?$'), TermsAndConditions, name='TermsAndConditions'),
 | 
			
		||||
    url(_(r'support-us/?$'), SupportusView.as_view(), name='supportus'),
 | 
			
		||||
    url(_(r'contact/?$'), ContactView.as_view(), name='contact'),
 | 
			
		||||
    url(_(r'login/?$'), LoginView.as_view(), name='login'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,8 +14,8 @@ from djangocms_blog.models import Post
 | 
			
		|||
from django.contrib import messages
 | 
			
		||||
from django.http import JsonResponse
 | 
			
		||||
from django.views.generic import View, DetailView, ListView, DeleteView
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from django.http import HttpResponse, HttpResponseRedirect
 | 
			
		||||
from django.shortcuts import render_to_response, redirect, render
 | 
			
		||||
from .models import Supporter
 | 
			
		||||
from .mixins import ChangeMembershipStatusMixin
 | 
			
		||||
from utils.forms import ContactUsForm
 | 
			
		||||
| 
						 | 
				
			
			@ -43,152 +43,13 @@ from .mixins import MembershipRequiredMixin, IsNotMemberMixin
 | 
			
		|||
 | 
			
		||||
'''
 | 
			
		||||
class Probar(TemplateView):
 | 
			
		||||
	template_name='digitalglarus/pinchecha.html'
 | 
			
		||||
	template_name='digitalglarus/new_credit_card.html'
 | 
			
		||||
	model = Membership
 | 
			
		||||
	success_url = reverse_lazy('digitalglarus:probar')
 | 
			
		||||
'''	
 | 
			
		||||
class Probar(TemplateView):
 | 
			
		||||
    template_name = "digitalglarus/pinchecha.html"
 | 
			
		||||
    success_url = reverse_lazy('digitalglarus:probar')
 | 
			
		||||
    # success_url = reverse_lazy('digitalglarus:booking_payment')
 | 
			
		||||
'''
 | 
			
		||||
    def dispatch(self, request, *args, **kwargs):
 | 
			
		||||
        from_booking = all(field in request.session.keys()
 | 
			
		||||
                           for field in self.booking_needed_fields)
 | 
			
		||||
        if not from_booking:
 | 
			
		||||
            return HttpResponseRedirect(reverse('digitalglarus:booking'))
 | 
			
		||||
 | 
			
		||||
        return super(BookingPaymentView, self).dispatch(request, *args, **kwargs)
 | 
			
		||||
 | 
			
		||||
    def get_success_url(self, order_id):
 | 
			
		||||
        return reverse('digitalglarus:booking_orders_detail', kwargs={'pk': order_id})
 | 
			
		||||
 | 
			
		||||
    def get_form_kwargs(self):
 | 
			
		||||
        current_billing_address = self.request.user.billing_addresses.first()
 | 
			
		||||
        form_kwargs = super(BookingPaymentView, self).get_form_kwargs()
 | 
			
		||||
        form_kwargs.update({
 | 
			
		||||
            'initial': {
 | 
			
		||||
                'start_date': self.request.session.get('start_date'),
 | 
			
		||||
                'end_date': self.request.session.get('end_date'),
 | 
			
		||||
                'price': self.request.session.get('final_price'),
 | 
			
		||||
                'street_address': current_billing_address.street_address,
 | 
			
		||||
                'city': current_billing_address.city,
 | 
			
		||||
                'postal_code': current_billing_address.postal_code,
 | 
			
		||||
                'country': current_billing_address.country,
 | 
			
		||||
            }
 | 
			
		||||
        })
 | 
			
		||||
        return form_kwargs
 | 
			
		||||
 | 
			
		||||
    def get_context_data(self, *args, **kwargs):
 | 
			
		||||
        context = super(BookingPaymentView, self).get_context_data(*args, **kwargs)
 | 
			
		||||
 | 
			
		||||
        booking_data = {key: self.request.session.get(key)
 | 
			
		||||
                        for key in self.booking_needed_fields}
 | 
			
		||||
        user = self.request.user
 | 
			
		||||
        last_booking_order = BookingOrder.objects.filter(customer__user=user).last()
 | 
			
		||||
        last_membership_order = MembershipOrder.objects.filter(customer__user=user).last()
 | 
			
		||||
        credit_card_data = last_booking_order.get_booking_cc_data() if last_booking_order \
 | 
			
		||||
            and last_booking_order.get_booking_cc_data() \
 | 
			
		||||
            else last_membership_order.get_membership_order_cc_data()
 | 
			
		||||
 | 
			
		||||
        booking_data.update({
 | 
			
		||||
            'credit_card_data': credit_card_data if credit_card_data else None,
 | 
			
		||||
            'stripe_key': settings.STRIPE_API_PUBLIC_KEY
 | 
			
		||||
        })
 | 
			
		||||
        context.update(booking_data)
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
    def form_valid(self, form):
 | 
			
		||||
        data = form.cleaned_data
 | 
			
		||||
        context = self.get_context_data()
 | 
			
		||||
        token = data.get('token')
 | 
			
		||||
        start_date = data.get('start_date')
 | 
			
		||||
        end_date = data.get('end_date')
 | 
			
		||||
        is_free = context.get('is_free')
 | 
			
		||||
        normal_price, final_price, free_days = Booking.\
 | 
			
		||||
            booking_price(self.request.user, start_date, end_date)
 | 
			
		||||
        charge = None
 | 
			
		||||
 | 
			
		||||
        # if not credit_card_needed:
 | 
			
		||||
        # Get or create stripe customer
 | 
			
		||||
        customer = StripeCustomer.get_or_create(email=self.request.user.email,
 | 
			
		||||
                                                token=token)
 | 
			
		||||
        if not customer:
 | 
			
		||||
            form.add_error("__all__", "Invalid credit card")
 | 
			
		||||
            return self.render_to_response(self.get_context_data(form=form))
 | 
			
		||||
 | 
			
		||||
        # If booking is not free, make the stripe charge
 | 
			
		||||
        if not is_free:
 | 
			
		||||
            # Make stripe charge to a customer
 | 
			
		||||
            stripe_utils = StripeUtils()
 | 
			
		||||
            charge_response = stripe_utils.make_charge(amount=final_price,
 | 
			
		||||
                                                       customer=customer.stripe_id)
 | 
			
		||||
            charge = charge_response.get('response_object')
 | 
			
		||||
 | 
			
		||||
            # Check if the payment was approved
 | 
			
		||||
            if not charge:
 | 
			
		||||
                context.update({
 | 
			
		||||
                    'paymentError': charge_response.get('error'),
 | 
			
		||||
                    'form': form
 | 
			
		||||
                })
 | 
			
		||||
                return render(self.request, self.template_name, context)
 | 
			
		||||
 | 
			
		||||
            charge = charge_response.get('response_object')
 | 
			
		||||
 | 
			
		||||
        # Create Billing Address for Membership Order
 | 
			
		||||
        billing_address = form.save()
 | 
			
		||||
 | 
			
		||||
        # Create Billing Address for User if he does not have one
 | 
			
		||||
        if not customer.user.billing_addresses.count():
 | 
			
		||||
            data.update({
 | 
			
		||||
                'user': customer.user.id
 | 
			
		||||
            })
 | 
			
		||||
            billing_address_user_form = UserBillingAddressForm(data)
 | 
			
		||||
            billing_address_user_form.is_valid()
 | 
			
		||||
            billing_address_user_form.save()
 | 
			
		||||
 | 
			
		||||
        # Create Booking
 | 
			
		||||
        booking_data = {
 | 
			
		||||
            'start_date': start_date,
 | 
			
		||||
            'end_date': end_date,
 | 
			
		||||
            'start_date': start_date,
 | 
			
		||||
            'free_days': free_days,
 | 
			
		||||
            'price': normal_price,
 | 
			
		||||
            'final_price': final_price,
 | 
			
		||||
        }
 | 
			
		||||
        booking = Booking.create(booking_data)
 | 
			
		||||
 | 
			
		||||
        # Create Booking order
 | 
			
		||||
        order_data = {
 | 
			
		||||
            'booking': booking,
 | 
			
		||||
            'customer': customer,
 | 
			
		||||
            'billing_address': billing_address,
 | 
			
		||||
            'stripe_charge': charge,
 | 
			
		||||
            'amount': final_price,
 | 
			
		||||
            'original_price': normal_price,
 | 
			
		||||
            'special_month_price': BookingPrice.objects.last().special_month_price,
 | 
			
		||||
        }
 | 
			
		||||
        order = BookingOrder.create(order_data)
 | 
			
		||||
 | 
			
		||||
        context = {
 | 
			
		||||
            'booking': booking,
 | 
			
		||||
            'order': order,
 | 
			
		||||
            'base_url': "{0}://{1}".format(self.request.scheme, self.request.get_host())
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        email_data = {
 | 
			
		||||
            'subject': 'Your booking order has been placed',
 | 
			
		||||
            'to': self.request.user.email,
 | 
			
		||||
            'context': context,
 | 
			
		||||
            'template_name': 'booking_order_email',
 | 
			
		||||
            'template_path': 'digitalglarus/emails/'
 | 
			
		||||
        }
 | 
			
		||||
        email = BaseEmail(**email_data)
 | 
			
		||||
        email.send()
 | 
			
		||||
 | 
			
		||||
        return HttpResponseRedirect(self.get_success_url(order.id))
 | 
			
		||||
'''
 | 
			
		||||
 | 
			
		||||
def Probar(TemplateView):
 | 
			
		||||
	print ("hello")
 | 
			
		||||
 | 
			
		||||
class ValidateUser(TemplateView):
 | 
			
		||||
    #print ("ENTRE AQUI AL MENOS Y",pk)
 | 
			
		||||
| 
						 | 
				
			
			@ -222,8 +83,37 @@ class ValidateView(SignupViewMixin):
 | 
			
		|||
    #resp['msg'] = 0  #0 para exito
 | 
			
		||||
    #return HttpResponse(json.dumps(resp), content_type ='application/json')
 | 
			
		||||
 | 
			
		||||
class TermsAndConditions(TemplateView):
 | 
			
		||||
    template_name ="digitalglarus/pinchecha.html"
 | 
			
		||||
def TermsAndConditions(request):
 | 
			
		||||
#template_name ="digitalglarus/new_credit_card.html"
 | 
			
		||||
	print (request.user)
 | 
			
		||||
	#u+Contacto.objects.filter(asesor = U.objects.get(email=request.session['user']))
 | 
			
		||||
	m=MembershipOrder.objects.filter(customer__user=request.user)
 | 
			
		||||
	customer = StripeCustomer.get_or_create(email=request.user.email)
 | 
			
		||||
	last_booking_order = BookingOrder.objects.filter(customer__user=request.user).last()
 | 
			
		||||
	last_membership_order = MembershipOrder.objects.filter(customer__user=request.user).last()
 | 
			
		||||
	credit_card_data = last_booking_order.get_booking_cc_data() if last_booking_order \
 | 
			
		||||
			and last_booking_order.get_booking_cc_data() \
 | 
			
		||||
            else last_membership_order.get_membership_order_cc_data()
 | 
			
		||||
	for t in m:
 | 
			
		||||
		print (t)
 | 
			
		||||
	print ("Credit cad last4",credit_card_data['last4'])
 | 
			
		||||
	print ("Brand type",credit_card_data)
 | 
			
		||||
	resp = dict()
 | 
			
		||||
	resp['msg'] = 0  #0 para exito
 | 
			
		||||
	#return HttpResponse(json.dumps(resp), content_type ='application/json')
 | 
			
		||||
	return render_to_response('digitalglarus/new_credit_card.html',{'last4':credit_card_data['last4'],'brand_type':credit_card_data['cc_brand'],'stripe_key': settings.STRIPE_API_PUBLIC_KEY})
 | 
			
		||||
	'''
 | 
			
		||||
	def get_success_url(self):
 | 
			
		||||
        # redirect to membership orders list if user has at least one.
 | 
			
		||||
		print (self.request.user)
 | 
			
		||||
		print ("JNSKDJNASJDNKSJANDKJNSAKJDNKJND")
 | 
			
		||||
	'''
 | 
			
		||||
def TermsAndConditions3(request):
 | 
			
		||||
	print ("hola hola hola hola hola")
 | 
			
		||||
	return render_to_response('digitalglarus/new_credit_card.html',{'last4':credit_card_data['last4'],'brand_type':credit_card_data['cc_brand']})
 | 
			
		||||
	
 | 
			
		||||
class TermsAndConditions2(TemplateView):
 | 
			
		||||
    template_name ="digitalglarus/credit_card_edit_confirmation.html"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class IndexView(TemplateView):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue