Added View to render payment page, Added Payment and summary forms, Added Payment.js library to request stripe token , Added jQuery validator for handling payment form errors
This commit is contained in:
		
					parent
					
						
							
								4e23adcea6
							
						
					
				
			
			
				commit
				
					
						38801abed7
					
				
			
		
					 13 changed files with 480 additions and 71 deletions
				
			
		
							
								
								
									
										135
									
								
								hosting/templates/hosting/base_short.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								hosting/templates/hosting/base_short.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,135 @@ | |||
| {% load staticfiles bootstrap3%} | ||||
| <!DOCTYPE html> | ||||
| <html lang="en"> | ||||
| 
 | ||||
| <head> | ||||
| 
 | ||||
|     <meta charset="utf-8"> | ||||
|     <meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||||
|     <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
|     <meta name="description" content=""> | ||||
|     <meta name="author" content=""> | ||||
| 
 | ||||
|     <title>Payment</title> | ||||
| 
 | ||||
|     <!-- Bootstrap Core CSS --> | ||||
|     <link href="{% static 'hosting/css/bootstrap.min.css' %}" rel="stylesheet"> | ||||
| 
 | ||||
|     <!-- Custom CSS --> | ||||
|     <link href="{% static 'hosting/css/landing-page.css' %}" rel="stylesheet"> | ||||
|     <link href="{% static 'hosting/css/payment.css' %}" rel="stylesheet"> | ||||
| 
 | ||||
|     <!-- Custom Fonts --> | ||||
|     <link href='http://fonts.googleapis.com/css?family=Raleway' rel='stylesheet' type='text/css'> | ||||
|     <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> | ||||
|     <link href="http://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css"> | ||||
|     <link rel="shortcut icon" href="img/favicon.ico" type="image/x-icon" /> | ||||
| 
 | ||||
| 
 | ||||
|     <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries --> | ||||
|     <!-- WARNING: Respond.js doesn't work if you view the page via file:// --> | ||||
|     <!--[if lt IE 9]> | ||||
|         <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script> | ||||
|         <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script> | ||||
|     <![endif]--> | ||||
| 
 | ||||
| </head> | ||||
| 
 | ||||
| <body> | ||||
| 
 | ||||
| 
 | ||||
|     <!-- Navigation --> | ||||
|     <nav class="navbar navbar-default  navbar-fixed-top topnav" role="navigation"> | ||||
|         <div class="container topnav"> | ||||
|             <!-- Brand and toggle get grouped for better mobile display --> | ||||
|             <div class="navbar-header"> | ||||
|                 <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> | ||||
|                     <span class="sr-only">Toggle navigation</span> | ||||
|                     <span class="icon-bar"></span> | ||||
|                     <span class="icon-bar"></span> | ||||
|                     <span class="icon-bar"></span> | ||||
|                 </button> | ||||
|                 <a class="navbar-brand topnav" href="#"><img src="img/logo_black.svg"></a> | ||||
|             </div> | ||||
|             <!-- Collect the nav links, forms, and other content for toggling --> | ||||
|             <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> | ||||
|                 <ul class="nav navbar-nav navbar-right"> | ||||
|                     <li> | ||||
|                         <a href="#how">How it works</a> | ||||
|                     </li> | ||||
|                     <li> | ||||
|                         <a href="#your">Your infrastructure</a> | ||||
|                     </li> | ||||
|                    <li> | ||||
|                         <a href="#our">Our inftrastructure</a> | ||||
|                     </li> | ||||
|                     <li> | ||||
|                         <a href="#price">Pricing</a> | ||||
|                     </li> | ||||
|                     <li> | ||||
|                         <a href="#contact">Contact</a> | ||||
|                     </li> | ||||
|                 </ul> | ||||
|             </div> | ||||
|             <!-- /.navbar-collapse --> | ||||
|         </div> | ||||
|         <!-- /.container --> | ||||
|     </nav> | ||||
| 
 | ||||
| 
 | ||||
|     <!-- Header --> | ||||
|     <a name="about"></a> | ||||
|     {% block content %} | ||||
|     {% endblock %} | ||||
| 
 | ||||
|     <!-- Footer --> | ||||
|     <footer> | ||||
|         <div class="container"> | ||||
|             <div class="row"> | ||||
|                 <div class="col-lg-12"> | ||||
|                     <ul class="list-inline"> | ||||
|                         <li> | ||||
|                             <a href="#">Home</a> | ||||
|                         </li> | ||||
|                         <li class="footer-menu-divider">⋅</li> | ||||
|                         <li> | ||||
|                             <a href="#about">How it works</a></li> | ||||
|                         <li class="footer-menu-divider">⋅</li> | ||||
|                         <li> | ||||
|                             <a href="#about">Your infrastructure</a></li> | ||||
|                         <li>⋅</li> | ||||
|                         <li> | ||||
|                             <a href="#about">Our infrastructure</a></li> | ||||
|                         <li class="footer-menu-divider">⋅</li> | ||||
|                         <li> | ||||
|                             <a href="#services">Pricing</a> | ||||
|                         </li> | ||||
|                         <li class="footer-menu-divider">⋅</li> | ||||
|                         <li> | ||||
|                             <a href="#contact">Contact</a> | ||||
|                         </li> | ||||
|                     </ul> | ||||
|                     <p class="copyright text-muted small">Copyright © ungleich GmbH {% now "Y" %}. All Rights Reserved</p> | ||||
|                 </div> | ||||
|             </div> | ||||
|         </div> | ||||
|     </footer> | ||||
| 
 | ||||
|     <!-- jQuery --> | ||||
|     <script src="{% static 'hosting/js/jquery.js' %}"></script> | ||||
|     <script type="text/javascript" src="http://cdn.jsdelivr.net/jquery.validation/1.13.1/jquery.validate.min.js"></script> | ||||
| 
 | ||||
| 
 | ||||
|     <!-- Bootstrap Core JavaScript --> | ||||
|     <script src="{% static 'hosting/js/bootstrap.min.js' %}"></script> | ||||
| 
 | ||||
|     <!-- Stripe Lib --> | ||||
|     <script type="text/javascript" src="https://js.stripe.com/v2/"></script> | ||||
| 
 | ||||
|     <!-- Proccess payment lib --> | ||||
|     <script type="text/javascript" src="{% static 'hosting/js/payment.js' %}"></script> | ||||
| 
 | ||||
| 
 | ||||
| </body> | ||||
| 
 | ||||
| </html> | ||||
|  | @ -1,5 +1,4 @@ | |||
| {% load staticfiles %} | ||||
| 
 | ||||
| <a name="about"></a> | ||||
| <div class="intro-header"> | ||||
|     <div class="container"> | ||||
|  |  | |||
|  | @ -80,7 +80,10 @@ | |||
|           {% endfor %} | ||||
|           {% for vm in vm_types %} | ||||
|             <div class="col-xs-12 col-sm-6 col-md-3"> | ||||
|               <form class="form-inline"> | ||||
|               <form class="form-inline" method="POST" action="{{request.path}}"> | ||||
|                 {% csrf_token %} | ||||
|                 <input type="hidden" name="hosting_company" value="{{vm.hosting_company}}"> | ||||
|                 <input type="hidden" name="hosting_company_name" value="{{vm.hosting_company_name}}"> | ||||
|                 <ul class="pricing {% cycle 'p-green' 'p-yel' 'p-red' 'p-blue' %}"> | ||||
|                   <li style="height:200px;"> | ||||
|                     <!-- <img src="http://bread.pp.ua/n/settings_g.svg" alt=""> --> | ||||
|  | @ -91,7 +94,7 @@ | |||
|                     <div class="btn-group"> | ||||
|                       <div class="form-group"> | ||||
|                         <label for="cores">Cores: </label> | ||||
|                         <select class="form-control cores-selector" id="{{vm.hosting_company}}-cores" data-vm-type="{{vm.hosting_company}}"> | ||||
|                         <select class="form-control cores-selector" name="cores" id="{{vm.hosting_company}}-cores" data-vm-type="{{vm.hosting_company}}"> | ||||
|                         {% with ''|center:10 as range %} | ||||
|                         {% for _ in range %} | ||||
|                             <option>{{ forloop.counter }}</option> | ||||
|  | @ -106,7 +109,7 @@ | |||
|                     <div class="btn-group"> | ||||
|                       <div class="form-group"> | ||||
|                         <label for="memory">Memory: </label> | ||||
|                         <select class="form-control memory-selector" id="{{vm.hosting_company}}-memory" data-vm-type="{{vm.hosting_company}}"> | ||||
|                         <select class="form-control memory-selector" name="memory" id="{{vm.hosting_company}}-memory" data-vm-type="{{vm.hosting_company}}"> | ||||
|                         {% with ''|center:50 as range %} | ||||
|                         {% for _ in range %} | ||||
|                             <option>{{ forloop.counter }}</option> | ||||
|  | @ -120,12 +123,13 @@ | |||
|                   <li class="row"> | ||||
|                     <div class="form-group"> | ||||
|                       <label for="Disk Size">Disk Size: </label> | ||||
|                       <input class="form-control short-input disk-space-selector" type="number" id="{{vm.hosting_company}}-disk_space" min="10" value="10" data-vm-type="{{vm.hosting_company}}"/> | ||||
|                       <input class="form-control short-input disk-space-selector" name="disk_space" type="number" id="{{vm.hosting_company}}-disk_space" min="10" value="10" data-vm-type="{{vm.hosting_company}}"/> | ||||
|                       <span>GiB</span> | ||||
|                     </div> | ||||
|                   </li> | ||||
|                   <li> | ||||
|                     <h3 id="{{vm.hosting_company}}-final-price">{{vm.default_price|floatformat}}$</h3> | ||||
|                     <input id="{{vm.hosting_company}}-final-price" type="hidden" name="final_price" value="{{vm.default_price|floatformat}}"> | ||||
|                     <h3 id="{{vm.hosting_company}}-final-price">{{vm.default_price|floatformat}}CHF</h3> | ||||
|                     <span>per month</span> | ||||
|                   </li> | ||||
|                   <li> | ||||
|  |  | |||
|  | @ -36,7 +36,7 @@ | |||
| <body> | ||||
| 
 | ||||
|     <!-- Navigation --> | ||||
|     <nav class="navbar navbar-default navbar-fixed-top topnav" role="navigation"> | ||||
|     <nav class="navbar navbar-default  topnav" role="navigation"> | ||||
|         <div class="container topnav"> | ||||
|             <!-- Brand and toggle get grouped for better mobile display --> | ||||
|             <div class="navbar-header"> | ||||
|  | @ -78,25 +78,25 @@ | |||
|     <a name="about"></a> | ||||
|     <div class="intro-header"> | ||||
|         <div class="container"> | ||||
|             <div class="col-md-4"> </div><div class="col-md-4"> | ||||
|               <div class="intro-message"> | ||||
|                 <h2>Login</h2> | ||||
|                 <form action="{% url 'hosting:login' %}" method="post" class="form" novalidate> | ||||
|                     {% csrf_token %} | ||||
|                     {% for field in form %} | ||||
|                         {% bootstrap_field field show_label=False type='fields'%} | ||||
|                     {% endfor %} | ||||
|                     {% bootstrap_form_errors form type='non_fields'%} | ||||
|                     {% buttons %} | ||||
|                         <button type="submit" class="btn btn-default"> | ||||
|                             Login | ||||
|                         </button> | ||||
|                     {% endbuttons %} | ||||
|                 </form> | ||||
|                 <ul class="list-inline intro-social-buttons"> | ||||
|                      | ||||
|                 </ul> | ||||
|               </div> | ||||
|                 <div class="col-md-4 col-md-offset-4"> | ||||
|                     <div class="intro-message"> | ||||
|                         <h2>Login</h2> | ||||
|                         <form action="{% url 'hosting:login' %}" method="post" class="form" novalidate> | ||||
|                             {% csrf_token %} | ||||
|                             {% for field in form %} | ||||
|                                 {% bootstrap_field field show_label=False type='fields'%} | ||||
|                             {% endfor %} | ||||
|                             {% bootstrap_form_errors form type='non_fields'%} | ||||
|                             {% buttons %} | ||||
|                                 <button type="submit" class="btn btn-default"> | ||||
|                                     Login | ||||
|                                 </button> | ||||
|                             {% endbuttons %} | ||||
|                         </form> | ||||
|                         <ul class="list-inline intro-social-buttons"> | ||||
|                              | ||||
|                         </ul> | ||||
|                     </div> | ||||
|             </div> | ||||
|         </div> | ||||
|         <!-- /.container --> | ||||
|  |  | |||
							
								
								
									
										90
									
								
								hosting/templates/hosting/payment.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								hosting/templates/hosting/payment.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,90 @@ | |||
| {% extends "hosting/base_short.html" %} | ||||
| {% load staticfiles bootstrap3 %} | ||||
| {%block content %}  | ||||
| <!-- Credit card form --> | ||||
| <div> | ||||
| 	<div class="container"> | ||||
| 	    <div class="row"> | ||||
| 	        <div class="col-xs-12 col-md-4 col-md-offset-2 creditcard-box"> | ||||
| 				<h3><b>Payment Details</b></h3> | ||||
| 				<hr> | ||||
| 	            <div> | ||||
| 	                <div class="panel-body"> | ||||
| 	                    <form role="form" id="payment-form" novalidate> | ||||
| 	                        <div class="row"> | ||||
| 	                            <div class="col-xs-12"> | ||||
| 	                                <div class="form-group"> | ||||
| 	                                    <label class="control-label" for="cardNumber">CARD NUMBER</label> | ||||
| 	                                    <div class="input-group"> | ||||
| 	                                        <input type="text" class="form-control" name="cardNumber" placeholder="Valid Card Number" required autofocus data-stripe="number" /> | ||||
| 	                                        <span class="input-group-addon"><i class="fa fa-credit-card"></i></span> | ||||
| 	                                    </div> | ||||
| 	                                </div>                             | ||||
| 	                            </div> | ||||
| 	                        </div> | ||||
| 	                        <div class="row"> | ||||
| 	                            <div class="col-xs-7 col-md-7"> | ||||
| 	                                <div class="form-group"> | ||||
| 	                                    <label for="expMonth">EXPIRATION DATE</label> | ||||
| 	                                    <div class="col-xs-6 col-lg-6 pl-ziro"> | ||||
| 	                                        <input type="text" class="form-control" name="expMonth" placeholder="MM" required data-stripe="exp_month" /> | ||||
| 	                                    </div> | ||||
| 	                                    <div class="col-xs-6 col-lg-6 pl-ziro"> | ||||
| 	                                        <input type="text" class="form-control" name="expYear" placeholder="YY" required data-stripe="exp_year" /> | ||||
| 	                                    </div> | ||||
| 	                                </div> | ||||
| 	                            </div> | ||||
| 	                            <div class="col-xs-5 col-md-5 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> | ||||
| 	                        <div class="row"> | ||||
| 	                            <div class="col-xs-12"> | ||||
| 	                                <button class="btn btn-success btn-lg btn-block" type="submit">Submit Payment</button> | ||||
| 	                            </div> | ||||
| 	                        </div> | ||||
| 	                        <div class="row" style="display:none;"> | ||||
| 	                            <div class="col-xs-12"> | ||||
| 	                                <p class="payment-errors"></p> | ||||
| 	                            </div> | ||||
| 	                        </div> | ||||
| 	                    </form> | ||||
| 	                </div> | ||||
| 	            </div> | ||||
| 	        </div> | ||||
|             <div class="col-xs-12 col-md-3 col-md-offset-1 summary-box"> | ||||
|             	<form role="form" novalidate> | ||||
|             		<div class="row"> | ||||
|             			<div class="col-xs-12"> | ||||
| 							<h3><b>Billing Amount</b></h3> | ||||
| 							<hr> | ||||
| 							<div class="content"> | ||||
| 								<p><b>Type</b> <span class="pull-right">{{request.session.vm_specs.hosting_company_name}}</span></p> | ||||
| 								<hr> | ||||
| 								<p><b>Cores</b> <span class="pull-right">{{request.session.vm_specs.cores}}</span></p> | ||||
| 								<hr> | ||||
| 								<p><b>Memory</b> <span class="pull-right">{{request.session.vm_specs.memory}} GiB</span></p> | ||||
| 								<hr> | ||||
| 								<p><b>Disk space</b> <span class="pull-right">{{request.session.vm_specs.memory}} GiB</span></p> | ||||
| 								<hr> | ||||
| 								<h4>Total<p class="pull-right"><b>{{request.session.vm_specs.final_price}} CHF</b></p></h4> | ||||
| 							</div> | ||||
| 						</div> | ||||
| 					</div> | ||||
| 				</form> | ||||
| 			</div> | ||||
| 	         | ||||
| 	              | ||||
| 	         | ||||
| 	    </div> | ||||
| 	</div> | ||||
| 
 | ||||
| </div> | ||||
| 
 | ||||
| {%endblock%} | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue