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 | import calendar | ||||||
| from datetime import datetime, date, timedelta | from datetime import datetime, date, timedelta | ||||||
| from dateutil.relativedelta import relativedelta | from dateutil.relativedelta import relativedelta | ||||||
|  |  | ||||||
|  | @ -19,6 +19,7 @@ $( document ).ready(function() { | ||||||
|              } |              } | ||||||
|              if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { |              if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) { | ||||||
|                  // Only send the token to relative URLs i.e. locally.
 |                  // Only send the token to relative URLs i.e. locally.
 | ||||||
|  | 				 alert("POR AQUI"); | ||||||
|                  xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); |                  xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); | ||||||
|              } |              } | ||||||
|          }  |          }  | ||||||
|  | @ -33,6 +34,7 @@ $( document ).ready(function() { | ||||||
| 
 | 
 | ||||||
|     function submit_payment(e){  |     function submit_payment(e){  | ||||||
|       $('#billing-form').submit(); |       $('#billing-form').submit(); | ||||||
|  | 	   alert("POR AQUI2"); | ||||||
|       // $form.submit();
 |       // $form.submit();
 | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -42,7 +44,7 @@ $( document ).ready(function() { | ||||||
| 
 | 
 | ||||||
|     /* If you're using Stripe for payments */ |     /* If you're using Stripe for payments */ | ||||||
|     function payWithStripe(e) { |     function payWithStripe(e) { | ||||||
|         console.log("submiting"); |         console.log("submiting33"); | ||||||
|         e.preventDefault(); |         e.preventDefault(); | ||||||
| 
 | 
 | ||||||
|         if (!$('.agree-terms').is(':checked')){ |         if (!$('.agree-terms').is(':checked')){ | ||||||
|  | @ -53,12 +55,15 @@ $( document ).ready(function() { | ||||||
| 
 | 
 | ||||||
|         /* Visual feedback */ |         /* Visual feedback */ | ||||||
|         $form.find('[type=submit]').html('Validating <i class="fa fa-spinner fa-pulse"></i>'); |         $form.find('[type=submit]').html('Validating <i class="fa fa-spinner fa-pulse"></i>'); | ||||||
| 
 | 			alert("POR AQUI3"); | ||||||
|  | 			console.log("submiting2"); | ||||||
|         var PublishableKey = window.stripeKey; |         var PublishableKey = window.stripeKey; | ||||||
|  | 		alert(PublishableKey); | ||||||
|         Stripe.setPublishableKey(PublishableKey); |         Stripe.setPublishableKey(PublishableKey); | ||||||
|         Stripe.card.createToken($form, function stripeResponseHandler(status, response) { |         Stripe.card.createToken($form, function stripeResponseHandler(status, response) { | ||||||
|             if (response.error) { |             if (response.error) { | ||||||
|                 /* Visual feedback */ |                 /* Visual feedback */ | ||||||
|  | 				 alert("POR AQUI32345"); | ||||||
|                 $form.find('[type=submit]').html('Try again'); |                 $form.find('[type=submit]').html('Try again'); | ||||||
|                 /* Show Stripe errors on the form */ |                 /* Show Stripe errors on the form */ | ||||||
|                 $form.find('.payment-errors').text(response.error.message); |                 $form.find('.payment-errors').text(response.error.message); | ||||||
|  |  | ||||||
|  | @ -72,7 +72,7 @@ | ||||||
|                     </div> |                     </div> | ||||||
|                     {% if credit_card_data %} |                     {% if credit_card_data %} | ||||||
|                       <form role="form" id="billing-form" method="post" action="{% url 'digitalglarus:booking_payment' %}" novalidate> |                       <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">Last 4: *****{{credit_card_data.last4}}</h2> | ||||||
|                         <h2 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h2> |                         <h2 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h2> | ||||||
|                         <input type="hidden" name="credit_card_needed" value="false"/> |                         <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> |                 </form> | ||||||
|                 <br> |                 <br> | ||||||
|                 <div class="notice-box"> |                 <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> | ||||||
|             </div> |             </div> | ||||||
|  |  | ||||||
|  | @ -7,17 +7,18 @@ from .views import ContactView, IndexView, AboutView, HistoryView, LoginView, Si | ||||||
|     MembershipPricingView, BookingSelectDatesView, BookingPaymentView, OrdersBookingDetailView,\ |     MembershipPricingView, BookingSelectDatesView, BookingPaymentView, OrdersBookingDetailView,\ | ||||||
|     BookingOrdersListView, MembershipOrdersListView, OrdersMembershipDetailView, \ |     BookingOrdersListView, MembershipOrdersListView, OrdersMembershipDetailView, \ | ||||||
|     MembershipDeactivateView, MembershipDeactivateSuccessView, UserBillingAddressView, \ |     MembershipDeactivateView, MembershipDeactivateSuccessView, UserBillingAddressView, \ | ||||||
|     MembershipReactivateView,TermsAndConditions,ValidateUser,SupportusView,Probar |     MembershipReactivateView,TermsAndConditions,ValidateUser,SupportusView,Probar,TermsAndConditions2,TermsAndConditions3 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # from membership.views import LoginRegistrationView | # from membership.views import LoginRegistrationView | ||||||
| 
 | 
 | ||||||
| urlpatterns = [ | 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'probar/?$'), Probar, name='probar'), | ||||||
|     url(_(r'login/validate/(?P<pk>\!\w+)/?$'), ValidateUser.as_view(), name='validate-login'), |     url(_(r'login/validate/(?P<pk>\!\w+)/?$'), ValidateUser.as_view(), name='validate-login'), | ||||||
|     url(_(r'^$'), IndexView.as_view(), name='landing'), |     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'support-us/?$'), SupportusView.as_view(), name='supportus'), | ||||||
|     url(_(r'contact/?$'), ContactView.as_view(), name='contact'), |     url(_(r'contact/?$'), ContactView.as_view(), name='contact'), | ||||||
|     url(_(r'login/?$'), LoginView.as_view(), name='login'), |     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.contrib import messages | ||||||
| from django.http import JsonResponse | from django.http import JsonResponse | ||||||
| from django.views.generic import View, DetailView, ListView, DeleteView | 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 .models import Supporter | ||||||
| from .mixins import ChangeMembershipStatusMixin | from .mixins import ChangeMembershipStatusMixin | ||||||
| from utils.forms import ContactUsForm | from utils.forms import ContactUsForm | ||||||
|  | @ -43,152 +43,13 @@ from .mixins import MembershipRequiredMixin, IsNotMemberMixin | ||||||
| 
 | 
 | ||||||
| ''' | ''' | ||||||
| class Probar(TemplateView): | class Probar(TemplateView): | ||||||
| 	template_name='digitalglarus/pinchecha.html' | 	template_name='digitalglarus/new_credit_card.html' | ||||||
| 	model = Membership | 	model = Membership | ||||||
| 	success_url = reverse_lazy('digitalglarus:probar') | 	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): | class ValidateUser(TemplateView): | ||||||
|     #print ("ENTRE AQUI AL MENOS Y",pk) |     #print ("ENTRE AQUI AL MENOS Y",pk) | ||||||
|  | @ -222,8 +83,37 @@ class ValidateView(SignupViewMixin): | ||||||
|     #resp['msg'] = 0  #0 para exito |     #resp['msg'] = 0  #0 para exito | ||||||
|     #return HttpResponse(json.dumps(resp), content_type ='application/json') |     #return HttpResponse(json.dumps(resp), content_type ='application/json') | ||||||
| 
 | 
 | ||||||
| class TermsAndConditions(TemplateView): | def TermsAndConditions(request): | ||||||
|     template_name ="digitalglarus/pinchecha.html" | #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): | class IndexView(TemplateView): | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue