Merge branch 'task/3756/landing_billing_page' of https://github.com/tiwariav/dynamicweb into tiwariav-task/3756/landing_billing_page
This commit is contained in:
		
				commit
				
					
						143f40bd2d
					
				
			
		
					 9 changed files with 401 additions and 290 deletions
				
			
		|  | @ -65,24 +65,6 @@ msgstr "Bitte gib einen Wert von 10 bis 200 ein." | ||||||
| msgid "GB Storage (SSD)" | msgid "GB Storage (SSD)" | ||||||
| msgstr "GB Storage (SSD)" | msgstr "GB Storage (SSD)" | ||||||
| 
 | 
 | ||||||
| msgid "Name" |  | ||||||
| msgstr "" |  | ||||||
| 
 |  | ||||||
| msgid "Your Name" |  | ||||||
| msgstr "Dein Name" |  | ||||||
| 
 |  | ||||||
| msgid "Please enter your name." |  | ||||||
| msgstr "Bitte gib Deinen Namen ein." |  | ||||||
| 
 |  | ||||||
| msgid "Email" |  | ||||||
| msgstr "E-Mail-Adresse" |  | ||||||
| 
 |  | ||||||
| msgid "Your Email" |  | ||||||
| msgstr "Deine E-Mail" |  | ||||||
| 
 |  | ||||||
| msgid "Please enter a valid email address." |  | ||||||
| msgstr "Bitte gib eine gültige E-Mailadresse ein." |  | ||||||
| 
 |  | ||||||
| msgid "Continue" | msgid "Continue" | ||||||
| msgstr "Weiter" | msgstr "Weiter" | ||||||
| 
 | 
 | ||||||
|  | @ -95,6 +77,18 @@ msgstr "Vielen Dank für Deine Nachricht." | ||||||
| msgid "Get in touch with us!" | msgid "Get in touch with us!" | ||||||
| msgstr "Sende uns eine Nachricht." | msgstr "Sende uns eine Nachricht." | ||||||
| 
 | 
 | ||||||
|  | msgid "Name" | ||||||
|  | msgstr "" | ||||||
|  | 
 | ||||||
|  | msgid "Please enter your name." | ||||||
|  | msgstr "Bitte gib Deinen Namen ein." | ||||||
|  | 
 | ||||||
|  | msgid "Email" | ||||||
|  | msgstr "E-Mail-Adresse" | ||||||
|  | 
 | ||||||
|  | msgid "Please enter a valid email address." | ||||||
|  | msgstr "Bitte gib eine gültige E-Mailadresse ein." | ||||||
|  | 
 | ||||||
| msgid "Message" | msgid "Message" | ||||||
| msgstr "Nachricht" | msgstr "Nachricht" | ||||||
| 
 | 
 | ||||||
|  | @ -188,13 +182,13 @@ msgid "All Rights Reserved" | ||||||
| msgstr "Alle Rechte vorbehalten" | msgstr "Alle Rechte vorbehalten" | ||||||
| 
 | 
 | ||||||
| msgid "Toggle navigation" | msgid "Toggle navigation" | ||||||
| msgstr "Konfiguration" | msgstr "Umschalten" | ||||||
| 
 | 
 | ||||||
| msgid "Why Data Center Light?" | msgid "Why Data Center Light?" | ||||||
| msgstr "Warum Data Center Light?" | msgstr "Warum Data Center Light?" | ||||||
| 
 | 
 | ||||||
| msgid "Login" | msgid "Login" | ||||||
| msgstr "" | msgstr "Anmelden" | ||||||
| 
 | 
 | ||||||
| msgid "Dashboard" | msgid "Dashboard" | ||||||
| msgstr "" | msgstr "" | ||||||
|  | @ -264,6 +258,39 @@ msgstr "Kontaktiere uns" | ||||||
| msgid "Switzerland " | msgid "Switzerland " | ||||||
| msgstr "Schweiz " | msgstr "Schweiz " | ||||||
| 
 | 
 | ||||||
|  | msgid "Welcome back" | ||||||
|  | msgstr "Willkommen zurück" | ||||||
|  | 
 | ||||||
|  | msgid "" | ||||||
|  | "Review your billing address and card details and proceed to make payment." | ||||||
|  | msgstr "" | ||||||
|  | "Überprüfe die Rechnungsadresse und Kreditkartendaten und fahre mit der " | ||||||
|  | "Zahlung fort." | ||||||
|  | 
 | ||||||
|  | msgid "Log in" | ||||||
|  | msgstr "Anmelden" | ||||||
|  | 
 | ||||||
|  | msgid "" | ||||||
|  | "Already signed up?<br>By logging in you can retrieve saved billing " | ||||||
|  | "information." | ||||||
|  | msgstr "" | ||||||
|  | "Bereits eingeloggt? Nach der Anmeldung kannst Du gespeicherte " | ||||||
|  | "Rechnungsinformationen abrufen." | ||||||
|  | 
 | ||||||
|  | msgid "LOGIN" | ||||||
|  | msgstr "ANMELDEN" | ||||||
|  | 
 | ||||||
|  | msgid "Don't have an account yet?" | ||||||
|  | msgstr "Besitzt du kein Benutzerkonto?" | ||||||
|  | 
 | ||||||
|  | msgid "You can sign up by filling in the information below." | ||||||
|  | msgstr "" | ||||||
|  | "Du kannst Dich anmelden, indem Du die die untenstehenden Informationen " | ||||||
|  | "ausfüllst." | ||||||
|  | 
 | ||||||
|  | msgid "Forgot password?" | ||||||
|  | msgstr "Passwort vergessen?" | ||||||
|  | 
 | ||||||
| msgid "Your Order" | msgid "Your Order" | ||||||
| msgstr "Deine Bestellung" | msgstr "Deine Bestellung" | ||||||
| 
 | 
 | ||||||
|  | @ -288,6 +315,9 @@ msgstr "inkl. Mehrwertsteuer" | ||||||
| msgid "Month" | msgid "Month" | ||||||
| msgstr "Monat" | msgstr "Monat" | ||||||
| 
 | 
 | ||||||
|  | msgid "Sign up" | ||||||
|  | msgstr "Registrieren" | ||||||
|  | 
 | ||||||
| msgid "Billing Address" | msgid "Billing Address" | ||||||
| msgstr "Rechnungsadresse" | msgstr "Rechnungsadresse" | ||||||
| 
 | 
 | ||||||
|  | @ -295,15 +325,10 @@ msgid "Credit Card" | ||||||
| msgstr "Kreditkarte" | msgstr "Kreditkarte" | ||||||
| 
 | 
 | ||||||
| msgid "" | msgid "" | ||||||
| "\n" | "Please fill in your credit card information below. We are using <a href=" | ||||||
| "                                Please fill in your credit card information " | "\"https://stripe.com\" target=\"_blank\">Stripe</a> for payment and do not " | ||||||
| "below. We are using <a\n" | "store your information in our database." | ||||||
| "                                    href=\"https://stripe.com\" target=" |  | ||||||
| "\"_blank\">Stripe</a> for payment and do not store\n" |  | ||||||
| "                                your information in our database.\n" |  | ||||||
| "                                " |  | ||||||
| msgstr "" | msgstr "" | ||||||
| "\n" |  | ||||||
| "Bitte füll Deine Kreditkarteninformationen unten aus. Wir nutzen <a href=" | "Bitte füll Deine Kreditkarteninformationen unten aus. Wir nutzen <a href=" | ||||||
| "\"https://stripe.com\" target=\"_blank\">Stripe</a> für die Bezahlung und " | "\"https://stripe.com\" target=\"_blank\">Stripe</a> für die Bezahlung und " | ||||||
| "speichern keine Informationen in unserer Datenbank." | "speichern keine Informationen in unserer Datenbank." | ||||||
|  | @ -330,6 +355,13 @@ msgstr "" | ||||||
| msgid "Card Type" | msgid "Card Type" | ||||||
| msgstr "Kartentyp" | msgstr "Kartentyp" | ||||||
| 
 | 
 | ||||||
|  | msgid "" | ||||||
|  | "You are not making any payment yet. After placing your order, you will be " | ||||||
|  | "taken to the Submit Payment Page." | ||||||
|  | msgstr "" | ||||||
|  | "Es wird noch keine Bezahlung vorgenommen. Die Bezahlung wird erst ausgelöst, " | ||||||
|  | "nachdem Du die Bestellung auf der nächsten Seite bestätigt hast." | ||||||
|  | 
 | ||||||
| msgid "Processing" | msgid "Processing" | ||||||
| msgstr "Weiter" | msgstr "Weiter" | ||||||
| 
 | 
 | ||||||
|  | @ -479,11 +511,23 @@ msgstr "Ungültige RAM-Grösse" | ||||||
| msgid "Invalid storage size" | msgid "Invalid storage size" | ||||||
| msgstr "Ungültige Speicher-Grösse" | msgstr "Ungültige Speicher-Grösse" | ||||||
| 
 | 
 | ||||||
| msgid "is not a proper name" | msgid "Another user exists with that email!" | ||||||
| msgstr "ist kein gültiger Name" | msgstr "" | ||||||
| 
 | 
 | ||||||
| msgid "is not a proper email" | #~ msgid "Email Address" | ||||||
| msgstr "ist keine gültige E-Mailadresse" | #~ msgstr "E-Mail-Adresse" | ||||||
|  | 
 | ||||||
|  | #~ msgid "is not a proper name" | ||||||
|  | #~ msgstr "ist kein gültiger Name" | ||||||
|  | 
 | ||||||
|  | #~ msgid "is not a proper email" | ||||||
|  | #~ msgstr "ist keine gültige E-Mailadresse" | ||||||
|  | 
 | ||||||
|  | #~ msgid "Your Name" | ||||||
|  | #~ msgstr "Dein Name" | ||||||
|  | 
 | ||||||
|  | #~ msgid "Your Email" | ||||||
|  | #~ msgstr "Deine E-Mail" | ||||||
| 
 | 
 | ||||||
| #~ msgid "" | #~ msgid "" | ||||||
| #~ "\n" | #~ "\n" | ||||||
|  |  | ||||||
|  | @ -81,43 +81,6 @@ | ||||||
|         <!--<div class="description check-ip"> |         <!--<div class="description check-ip"> | ||||||
|             <input type="checkbox" name="ipv6"> Ipv6 Only<br> |             <input type="checkbox" name="ipv6"> Ipv6 Only<br> | ||||||
|         </div>--> |         </div>--> | ||||||
|         <div class="form-group"> |  | ||||||
|             <div class="description input justify-center"> |  | ||||||
|                 <label for="name" class="control-label">{% trans "Name"%}</label> |  | ||||||
|                 <input type="text" name="name" class="form-control" placeholder="{% trans 'Your Name'%}" |  | ||||||
|                        data-minlength="3" data-error="{% trans 'Please enter your name.' %}" required> |  | ||||||
|             </div> |  | ||||||
|             <div class="help-block with-errors"> |  | ||||||
|                 {% for message in messages %} |  | ||||||
|                 {% if 'name' in message.tags %} |  | ||||||
|                 <ul class="list-unstyled"> |  | ||||||
|                     <li> |  | ||||||
|                         {{ message|safe }} |  | ||||||
|                     </li> |  | ||||||
|                 </ul> |  | ||||||
|                 {% endif %} |  | ||||||
|                 {% endfor %} |  | ||||||
|             </div> |  | ||||||
|         </div> |  | ||||||
|         <div class="form-group"> |  | ||||||
|             <div class="description input justify-center"> |  | ||||||
|                 <label for="email" class="control-label">{% trans "Email"%}</label> |  | ||||||
|                 <input name="email" type="email" pattern="^[^@\s]+@([^@\s]+\.)+[^@\s]+$" class="form-control" |  | ||||||
|                        placeholder="{% trans 'Your Email' %}" |  | ||||||
|                        data-error="{% trans 'Please enter a valid email address.' %}" required> |  | ||||||
|             </div> |  | ||||||
|             <div class="help-block with-errors"> |  | ||||||
|                 {% for message in messages %} |  | ||||||
|                 {% if 'email' in message.tags %} |  | ||||||
|                 <ul class="list-unstyled"> |  | ||||||
|                     <li> |  | ||||||
|                         {{ message|safe }} |  | ||||||
|                     </li> |  | ||||||
|                 </ul> |  | ||||||
|                 {% endif %} |  | ||||||
|                 {% endfor %} |  | ||||||
|             </div> |  | ||||||
|         </div> |  | ||||||
|     </div> |     </div> | ||||||
|     <input type="submit" class="btn btn-primary disabled" value="{% trans 'Continue' %}"></input> |     <input type="submit" class="btn btn-primary disabled" value="{% trans 'Continue' %}"></input> | ||||||
| </form> | </form> | ||||||
|  |  | ||||||
|  | @ -1,85 +1,93 @@ | ||||||
| {% extends "hosting/base_short.html" %} | {% extends "hosting/base_short.html" %} | ||||||
| {% load staticfiles bootstrap3 i18n %} | {% load staticfiles bootstrap3 i18n %} | ||||||
| 
 | 
 | ||||||
|  | {% block css_extra %} | ||||||
|  |     <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paymentfont/1.1.2/css/paymentfont.min.css"/> | ||||||
|  | {% endblock css_extra %} | ||||||
|  | 
 | ||||||
| {% block navbar %} | {% block navbar %} | ||||||
|     {% include "datacenterlight/includes/_navbar.html" %} |     {% include "datacenterlight/includes/_navbar.html" %} | ||||||
| {% endblock navbar %} | {% endblock navbar %} | ||||||
| 
 | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| <!-- Credit card form --> | <!-- Credit card form --> | ||||||
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paymentfont/1.1.2/css/paymentfont.min.css"/> |  | ||||||
| <div class="dcl-order-container"> | <div class="dcl-order-container"> | ||||||
|     <div class="payment-container"> |     <div class="payment-container"> | ||||||
|         <div class="row"> |         <div class="dcl-payment-grid"> | ||||||
|             <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 dcl-order-sec"> |             <div class="dcl-payment-box"> | ||||||
|                 <h3><strong>{%trans "Your Order" %}</strong></h3> |                 <div class="dcl-payment-section"> | ||||||
|                 <div class="col-xs-6 col-sm-12 col-md-12 col-lg-12 dcl-order-table-header"> |                     {% if request.user.is_authenticated %} | ||||||
|                     <div class="col-xs-12 col-sm-2 col-md-1 col-lg-1 tbl-header"> |                         <div class="dcl-payment-user"> | ||||||
|                         {%trans "Cores" %} |                             <h4>{% trans "Welcome back" %} {{request.user.name}}!</h4> | ||||||
|  |                             <p>{% trans "Review your billing address and card details and proceed to make payment." %}</p> | ||||||
|                         </div> |                         </div> | ||||||
|                     <div class="col-xs-12 col-sm-3 col-md-4 col-lg-4 tbl-header"> |                     {% else %} | ||||||
|                         {%trans "Memory" %} |                         <h3>{%trans "Log in" %}</h3> | ||||||
|                     </div> |                         <hr class="top-hr"> | ||||||
|                     <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3 tbl-header"> |                         <p style="margin-bottom: 20px;">{% blocktrans %}Already signed up?<br>By logging in you can retrieve saved billing information.{% endblocktrans %}</p> | ||||||
|                         {%trans "Disk space" %} |                         <form role="form" id="login-form" method="post" action="{% url 'hosting:login' %}" novalidate> | ||||||
|                     </div> |                             {% for field in login_form %} | ||||||
|                     <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 tbl-header"> |  | ||||||
|                         {%trans "Configuration" %} |  | ||||||
|                     </div> |  | ||||||
|                 </div> |  | ||||||
|                 <div class="col-xs-6 col-sm-12 col-md-12 col-lg-12 dcl-order-table-content"> |  | ||||||
|                     <div class="col-xs-12 col-sm-2 col-md-1 col-lg-1 tbl-content"> |  | ||||||
|                         {{request.session.specs.cpu|floatformat}} |  | ||||||
|                     </div> |  | ||||||
|                     <div class="col-xs-12 col-sm-3 col-md-4 col-lg-4 tbl-content"> |  | ||||||
|                         {{request.session.specs.memory|floatformat}} GB |  | ||||||
|                     </div> |  | ||||||
|                     <div class="col-xs-12 col-sm-3 col-md-3 col-lg-3 tbl-content"> |  | ||||||
|                         {{request.session.specs.disk_size|floatformat}} GB |  | ||||||
|                     </div> |  | ||||||
|                     <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 tbl-content"> |  | ||||||
|                         {{request.session.template.name}} |  | ||||||
|                     </div> |  | ||||||
|                 </div> |  | ||||||
|                 <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 dcl-order-table-total"> |  | ||||||
|                     <div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 tbl-tot tbl-no-padding"> |  | ||||||
|                         {%trans "Total" %} <span>{%trans "including VAT" %}</span> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 tbl-no-padding"> |  | ||||||
|                         <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4"></div> |  | ||||||
|                         <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6 tbl-total">{{request.session.specs.price}} |  | ||||||
|                             CHF<span class="dcl-price-month">/{% trans "Month" %}</span> |  | ||||||
|                         </div> |  | ||||||
|                     </div> |  | ||||||
|                 </div> |  | ||||||
|             </div> |  | ||||||
|         </div> |  | ||||||
|         <div class="row"> |  | ||||||
|             <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 dcl-billing-sec"> |  | ||||||
|                 <div class="col-xs-12 col-sm-5 col-md-6  billing dcl-billing"> |  | ||||||
|                     <h3><b>{%trans "Billing Address"%}</b></h3> |  | ||||||
|                     <hr> |  | ||||||
|                     <form role="form" id="billing-form" method="post" action="" novalidate> |  | ||||||
|                         {% for field in form %} |  | ||||||
|                             {% csrf_token %} |                             {% csrf_token %} | ||||||
|                             {% bootstrap_field field show_label=False type='fields'%} |                             {% bootstrap_field field show_label=False type='fields'%} | ||||||
|                             {% endfor %} |                             {% endfor %} | ||||||
|  |                             <input type='hidden' name='next' value='{{request.path}}'/> | ||||||
|  |                             <div class="form-group text-right"> | ||||||
|  |                                 <button type="submit" class="btn btn-wide btn-vm-contact">{% trans "LOGIN" %}</button> | ||||||
|  |                             </div> | ||||||
|  |                         </form> | ||||||
|  |                         <p> | ||||||
|  |                             {% trans "Don't have an account yet?" %}<br> | ||||||
|  |                             {% trans "You can sign up by filling in the information below." %}<br> | ||||||
|  |                             <a href="{% url 'hosting:reset_password' %}">{% trans "Forgot password?" %}</a> | ||||||
|  |                         </p> | ||||||
|  |                     {% endif %} | ||||||
|  |                 </div> | ||||||
|  |             </div> | ||||||
|  |             <div class="dcl-payment-box"> | ||||||
|  |                 <div class="dcl-payment-section"> | ||||||
|  |                     {% if not request.user.is_authenticated %} | ||||||
|  |                         <h3><b>{%trans "Sign up"%}</b></h3> | ||||||
|  |                     {% else %} | ||||||
|  |                         <h3><b>{%trans "Billing Address"%}</b></h3> | ||||||
|  |                     {% endif %} | ||||||
|  |                     <hr class="top-hr"> | ||||||
|  |                     {% for message in messages %} | ||||||
|  |                         {% if 'duplicate_email' in message.tags %} | ||||||
|  |                         <p class="text-danger">{{message}}</p> | ||||||
|  |                         {% endif %} | ||||||
|  |                     {% endfor %} | ||||||
|  |                     <form role="form" id="billing-form" method="post" action="" novalidate> | ||||||
|  |                         {% csrf_token %} | ||||||
|  |                         {% for field in form %} | ||||||
|  |                         {% bootstrap_field field show_label=False type='fields'%} | ||||||
|  |                         {% endfor %} | ||||||
|                     </form> |                     </form> | ||||||
|                 </div> |                 </div> | ||||||
|                 <div class="col-xs-12 col-sm-7 col-md-6 creditcard-box dcl-creditcard"> |  | ||||||
|                     <h3><b>{%trans "Credit Card"%}</b></h3> |  | ||||||
|                     <hr> |  | ||||||
|                     <div> |  | ||||||
|                         <div> |  | ||||||
|                             <p> |  | ||||||
|                                 {% blocktrans %} |  | ||||||
|                                 Please fill in your credit card information below. We are using <a |  | ||||||
|                                     href="https://stripe.com" target="_blank">Stripe</a> for payment and do not store |  | ||||||
|                                 your information in our database. |  | ||||||
|                                 {% endblocktrans %} |  | ||||||
|                             </p> |  | ||||||
|             </div> |             </div> | ||||||
|                         <br> |             <div class="dcl-payment-box"> | ||||||
|  |                 <div class="dcl-payment-section"> | ||||||
|  |                     <h3>{%trans "Your Order" %}</h3> | ||||||
|  |                     <hr class="top-hr"> | ||||||
|  |                     <div class="dcl-payment-order"> | ||||||
|  |                         <p>{% trans "Cores"%} <strong class="pull-right">{{request.session.specs.cpu|floatformat}}</strong></p> | ||||||
|  |                         <hr> | ||||||
|  |                         <p>{% trans "Memory"%} <strong class="pull-right">{{request.session.specs.memory|floatformat}} GB</strong></p> | ||||||
|  |                         <hr> | ||||||
|  |                         <p>{% trans "Disk space"%} <strong class="pull-right">{{request.session.specs.disk_size|floatformat}} GB</strong></p> | ||||||
|  |                         <hr> | ||||||
|  |                         <p>{% trans "Configuration"%} <strong class="pull-right">{{request.session.template.name}}</strong></p> | ||||||
|  |                         <hr> | ||||||
|  |                         <p class="last-p"><strong>{%trans "Total" %}</strong>  <small>({%trans "including VAT" %})</small> <strong class="pull-right">{{request.session.specs.price}} CHF/{% trans "Month" %}</strong></p> | ||||||
|  |                     </div> | ||||||
|  |                 </div> | ||||||
|  |             </div> | ||||||
|  |             <div class="dcl-payment-box"> | ||||||
|  |                 <div class="dcl-payment-section"> | ||||||
|  |                     <h3><b>{%trans "Credit Card"%}</b></h3> | ||||||
|  |                     <hr class="top-hr"> | ||||||
|  |                     <p> | ||||||
|  |                         {% blocktrans %}Please fill in your credit card information below. We are using <a href="https://stripe.com" target="_blank">Stripe</a> for payment and do not store your information in our database.{% endblocktrans %} | ||||||
|  |                     </p> | ||||||
|                     <div> |                     <div> | ||||||
|                         {% if credit_card_data.last4 %} |                         {% if credit_card_data.last4 %} | ||||||
|                             <form role="form" id="payment-form-with-creditcard" novalidate> |                             <form role="form" id="payment-form-with-creditcard" novalidate> | ||||||
|  | @ -88,8 +96,6 @@ | ||||||
|                                 <h5 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h5> |                                 <h5 class="membership-lead">Type: {{credit_card_data.cc_brand}}</h5> | ||||||
|                                 <input type="hidden" name="credit_card_needed" value="false"/> |                                 <input type="hidden" name="credit_card_needed" value="false"/> | ||||||
|                             </form> |                             </form> | ||||||
|                             <div class="row"> |  | ||||||
|                                 <div class="col-xs-12"> |  | ||||||
|                             {% if not messages and not form.non_field_errors %} |                             {% if not messages and not form.non_field_errors %} | ||||||
|                                 <p class="card-warning-content card-warning-addtional-margin"> |                                 <p class="card-warning-content card-warning-addtional-margin"> | ||||||
|                                     {% trans "You are not making any payment yet. After submitting your card information, you will be taken to the Confirm Order Page." %} |                                     {% trans "You are not making any payment yet. After submitting your card information, you will be taken to the Confirm Order Page." %} | ||||||
|  | @ -109,55 +115,50 @@ | ||||||
|                                     </p> |                                     </p> | ||||||
|                                 {% endfor %} |                                 {% endfor %} | ||||||
|                             </div> |                             </div> | ||||||
|  |                             <div class="text-right"> | ||||||
|  |                                 <button id="payment_button_with_creditcard" class="btn btn-success btn-vm-contact" type="submit">{%trans "Submit" %}</button> | ||||||
|                             </div> |                             </div> | ||||||
|                                 <div class="col-xs-12"> |  | ||||||
|                                     <div class="col-xs-6 pull-right"> |  | ||||||
|                                         <button id="payment_button_with_creditcard" class="btn btn-success stripe-payment-btn" |  | ||||||
|                                                 type="submit"> |  | ||||||
|                                             {%trans "Submit" %} |  | ||||||
|                                         </button> |  | ||||||
|                                     </div> |  | ||||||
|                                 </div> |  | ||||||
|                             </div> |  | ||||||
| 
 |  | ||||||
|                         {% else %} |                         {% else %} | ||||||
|                             <form action="" id="payment-form-new" method="POST"> |                             <form action="" id="payment-form-new" method="POST"> | ||||||
|                                 <input type="hidden" name="token"/> |                                 <input type="hidden" name="token"/> | ||||||
|                                 <div class="group"> |                                 <div class="group"> | ||||||
|                                     <div class="col-xs-12 col-sm-12 col-md-10 col-lg-9 credit-card-goup"> |                                     <div class="credit-card-goup"> | ||||||
|                                        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 card-element card-number-element"> |                                        <div class="card-element card-number-element"> | ||||||
|                                            <label>{%trans "Card Number" %}</label> |                                            <label>{%trans "Card Number" %}</label> | ||||||
|                                            <div id="card-number-element" class="field my-input"></div> |                                            <div id="card-number-element" class="field my-input"></div> | ||||||
|                                        </div> |                                        </div> | ||||||
|                                        <div class="col-xs-5 col-sm-3 col-md-3 col-lg-3 card-element card-expiry-element"> |                                        <div class="row"> | ||||||
|  |                                            <div class="col-xs-5 card-element card-expiry-element"> | ||||||
|                                                <label>{%trans "Expiry Date" %}</label> |                                                <label>{%trans "Expiry Date" %}</label> | ||||||
|                                                <div id="card-expiry-element" class="field my-input"></div> |                                                <div id="card-expiry-element" class="field my-input"></div> | ||||||
|                                            </div> |                                            </div> | ||||||
|                                        <div class="col-xs-12 col-sm-2 col-md-6 col-lg-7 hide-mobile"></div> |                                            <div class="col-xs-3 col-xs-offset-4 card-element card-cvc-element"> | ||||||
|                                        <div class="col-xs-3 col-sm-3 col-md-3 col-lg-2 card-element card-cvc-element"> |  | ||||||
|                                                <label>{%trans "CVC" %}</label> |                                                <label>{%trans "CVC" %}</label> | ||||||
|                                                <div id="card-cvc-element" class="field my-input"></div> |                                                <div id="card-cvc-element" class="field my-input"></div> | ||||||
|                                            </div> |                                            </div> | ||||||
|                                        <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 card-element brand"> |                                        </div> | ||||||
|  |                                        <div class="card-element brand"> | ||||||
|                                            <label>{%trans "Card Type" %}</label> |                                            <label>{%trans "Card Type" %}</label> | ||||||
|                                            <i class="pf pf-credit-card" id="brand-icon"></i> |                                            <i class="pf pf-credit-card" id="brand-icon"></i> | ||||||
|                                        </div> |                                        </div> | ||||||
|                                     </div> |                                     </div> | ||||||
|                                 </div> |                                 </div> | ||||||
|                                 <div id="card-errors" role="alert"></div> |                                 <div id="card-errors"></div> | ||||||
|                                 <div class="row"> |  | ||||||
|                                     <div class="col-xs-12"> |  | ||||||
|                                 {% if not messages and not form.non_field_errors %} |                                 {% if not messages and not form.non_field_errors %} | ||||||
|                                     <p class="card-warning-content"> |                                     <p class="card-warning-content"> | ||||||
|                                                 {% trans "You are not making any payment yet. After submitting your card information, you will be taken to the Confirm Order Page." %} |                                         {% trans "You are not making any payment yet. After placing your order, you will be taken to the Submit Payment Page." %} | ||||||
|                                     </p> |                                     </p> | ||||||
|                                 {% endif %} |                                 {% endif %} | ||||||
|                                 <div id='payment_error'> |                                 <div id='payment_error'> | ||||||
|                                     {% for message in messages %} |                                     {% for message in messages %} | ||||||
|                                                 {% if 'failed_payment' or 'make_charge_error' in message.tags %} |                                         {% if 'failed_payment' in message.tags or 'make_charge_error' in message.tags %} | ||||||
|                                                  <ul class="list-unstyled"><li> |                                             <ul class="list-unstyled"> | ||||||
|                                                      <p class="card-warning-content card-warning-error">{{ message|safe }}</p> |                                                 <li><p class="card-warning-content card-warning-error">{{ message|safe }}</p></li> | ||||||
|                                                 </li></ul> |                                             </ul> | ||||||
|  |                                         {% elif not form.non_field_errors %} | ||||||
|  |                                             <p class="card-warning-content"> | ||||||
|  |                                                 {% trans "You are not making any payment yet. After placing your order, you will be taken to the Submit Payment Page." %} | ||||||
|  |                                             </p> | ||||||
|                                         {% endif %} |                                         {% endif %} | ||||||
|                                     {% endfor %} |                                     {% endfor %} | ||||||
| 
 | 
 | ||||||
|  | @ -167,22 +168,14 @@ | ||||||
|                                         </p> |                                         </p> | ||||||
|                                     {% endfor %} |                                     {% endfor %} | ||||||
|                                 </div> |                                 </div> | ||||||
|                                     </div> |                                 <div class="text-right"> | ||||||
|                                     <div class="col-xs-12"> |                                     <button class="btn btn-vm-contact btn-wide" type="submit">{%trans "SUBMIT" %}</button> | ||||||
|                                         <div class="col-xs-6 pull-right"> |  | ||||||
|                                             <button class="btn btn-success stripe-payment-btn" type="submit">{%trans "Submit" %} |  | ||||||
|                                             </button> |  | ||||||
|                                         </div> |  | ||||||
|                                     </div> |  | ||||||
|                                 </div> |                                 </div> | ||||||
| 
 | 
 | ||||||
|                                 <div class="row" style="display:none;"> |                                 <div style="display:none;"> | ||||||
|                                     <div class="col-xs-12"> |  | ||||||
|                                     <p class="payment-errors"></p> |                                     <p class="payment-errors"></p> | ||||||
|                                 </div> |                                 </div> | ||||||
|                                 </div> |  | ||||||
|                             </form> |                             </form> | ||||||
| 
 |  | ||||||
|                         {% endif %} |                         {% endif %} | ||||||
|                     </div> |                     </div> | ||||||
|                 </div> |                 </div> | ||||||
|  | @ -190,7 +183,6 @@ | ||||||
|         </div> |         </div> | ||||||
|     </div> |     </div> | ||||||
| </div> | </div> | ||||||
| </div> |  | ||||||
| 
 | 
 | ||||||
| <!-- stripe key data --> | <!-- stripe key data --> | ||||||
| {% if stripe_key %} | {% if stripe_key %} | ||||||
|  |  | ||||||
|  | @ -39,9 +39,9 @@ | ||||||
|                         <div class="col-xs-12 col-sm-6"> |                         <div class="col-xs-12 col-sm-6"> | ||||||
|                             <address> |                             <address> | ||||||
|                             <h3><b>{% trans "Billed To:"%}</b></h3> |                             <h3><b>{% trans "Billed To:"%}</b></h3> | ||||||
|                             {% with request.session.billing_address_data as billing_address %} |                             {% with request.user.billing_addresses.first as billing_address %} | ||||||
|                                 {{billing_address|get_value_from_dict:'cardholder_name'}}<br> {{billing_address|get_value_from_dict:'street_address'}}, {{billing_address|get_value_from_dict:'postal_code'}}<br> |                                 {{billing_address.cardholder_name}}<br> {{billing_address.street_address}}, {{billing_address.postal_code}}<br> | ||||||
|                                 {{billing_address|get_value_from_dict:'city'}}, {{billing_address|get_value_from_dict:'country'}}. |                                 {{billing_address.city}}, {{billing_address.country}}. | ||||||
|                             {% endwith %} |                             {% endwith %} | ||||||
|                             </address> |                             </address> | ||||||
|                         </div> |                         </div> | ||||||
|  |  | ||||||
|  | @ -1,6 +1,7 @@ | ||||||
| from django import forms | from django import forms | ||||||
| from django.conf import settings | from django.conf import settings | ||||||
| from django.contrib import messages | from django.contrib import messages | ||||||
|  | from django.contrib.auth import login, authenticate | ||||||
| from django.core.exceptions import ValidationError | from django.core.exceptions import ValidationError | ||||||
| from django.core.urlresolvers import reverse | from django.core.urlresolvers import reverse | ||||||
| from django.http import HttpResponseRedirect | from django.http import HttpResponseRedirect | ||||||
|  | @ -12,11 +13,15 @@ from django.views.generic import FormView, CreateView, TemplateView, DetailView | ||||||
| 
 | 
 | ||||||
| from datacenterlight.tasks import create_vm_task | from datacenterlight.tasks import create_vm_task | ||||||
| from hosting.models import HostingOrder | from hosting.models import HostingOrder | ||||||
|  | from hosting.forms import HostingUserLoginForm | ||||||
| from membership.models import CustomUser, StripeCustomer | from membership.models import CustomUser, StripeCustomer | ||||||
| from opennebula_api.models import OpenNebulaManager | from opennebula_api.models import OpenNebulaManager | ||||||
| from opennebula_api.serializers import VirtualMachineTemplateSerializer, \ | from opennebula_api.serializers import ( | ||||||
|     VMTemplateSerializer |     VirtualMachineTemplateSerializer, VMTemplateSerializer | ||||||
| from utils.forms import BillingAddressForm | ) | ||||||
|  | from utils.forms import ( | ||||||
|  |     BillingAddressForm, BillingAddressFormSignup, UserBillingAddressForm | ||||||
|  | ) | ||||||
| from utils.mailer import BaseEmail | from utils.mailer import BaseEmail | ||||||
| from utils.stripe_utils import StripeUtils | from utils.stripe_utils import StripeUtils | ||||||
| from utils.tasks import send_plain_email_task | from utils.tasks import send_plain_email_task | ||||||
|  | @ -74,7 +79,7 @@ class SuccessView(TemplateView): | ||||||
|     def get(self, request, *args, **kwargs): |     def get(self, request, *args, **kwargs): | ||||||
|         if 'specs' not in request.session or 'user' not in request.session: |         if 'specs' not in request.session or 'user' not in request.session: | ||||||
|             return HttpResponseRedirect(reverse('datacenterlight:index')) |             return HttpResponseRedirect(reverse('datacenterlight:index')) | ||||||
|         elif 'token' not in request.session: |         if 'token' not in request.session: | ||||||
|             return HttpResponseRedirect(reverse('datacenterlight:payment')) |             return HttpResponseRedirect(reverse('datacenterlight:payment')) | ||||||
|         elif 'order_confirmation' not in request.session: |         elif 'order_confirmation' not in request.session: | ||||||
|             return HttpResponseRedirect( |             return HttpResponseRedirect( | ||||||
|  | @ -100,7 +105,7 @@ class PricingView(TemplateView): | ||||||
|                 'templates': VirtualMachineTemplateSerializer(templates, |                 'templates': VirtualMachineTemplateSerializer(templates, | ||||||
|                                                               many=True).data, |                                                               many=True).data, | ||||||
|             } |             } | ||||||
|         except: |         except Exception: | ||||||
|             messages.error(request, |             messages.error(request, | ||||||
|                            'We have a temporary problem to connect to our backend. \ |                            'We have a temporary problem to connect to our backend. \ | ||||||
|                            Please try again in a few minutes' |                            Please try again in a few minutes' | ||||||
|  | @ -280,11 +285,6 @@ class IndexView(CreateView): | ||||||
|             opennebula_vm_template_id=template_id).first() |             opennebula_vm_template_id=template_id).first() | ||||||
|         template_data = VMTemplateSerializer(template).data |         template_data = VMTemplateSerializer(template).data | ||||||
| 
 | 
 | ||||||
|         name = request.POST.get('name') |  | ||||||
|         email = request.POST.get('email') |  | ||||||
|         name_field = forms.CharField() |  | ||||||
|         email_field = forms.EmailField() |  | ||||||
| 
 |  | ||||||
|         try: |         try: | ||||||
|             cores = cores_field.clean(cores) |             cores = cores_field.clean(cores) | ||||||
|         except ValidationError as err: |         except ValidationError as err: | ||||||
|  | @ -312,39 +312,14 @@ class IndexView(CreateView): | ||||||
|             return HttpResponseRedirect( |             return HttpResponseRedirect( | ||||||
|                 reverse('datacenterlight:index') + "#order_form") |                 reverse('datacenterlight:index') + "#order_form") | ||||||
| 
 | 
 | ||||||
|         try: |  | ||||||
|             name = name_field.clean(name) |  | ||||||
|         except ValidationError as err: |  | ||||||
|             msg = '{} {}.'.format(name, _('is not a proper name')) |  | ||||||
|             messages.add_message(self.request, messages.ERROR, msg, |  | ||||||
|                                  extra_tags='name') |  | ||||||
|             return HttpResponseRedirect( |  | ||||||
|                 reverse('datacenterlight:index') + "#order_form") |  | ||||||
| 
 |  | ||||||
|         try: |  | ||||||
|             email = email_field.clean(email) |  | ||||||
|         except ValidationError as err: |  | ||||||
|             msg = '{} {}.'.format(email, _('is not a proper email')) |  | ||||||
|             messages.add_message(self.request, messages.ERROR, msg, |  | ||||||
|                                  extra_tags='email') |  | ||||||
|             return HttpResponseRedirect( |  | ||||||
|                 reverse('datacenterlight:index') + "#order_form") |  | ||||||
| 
 |  | ||||||
|         specs = { |         specs = { | ||||||
|             'cpu': cores, |             'cpu': cores, | ||||||
|             'memory': memory, |             'memory': memory, | ||||||
|             'disk_size': storage, |             'disk_size': storage, | ||||||
|             'price': price |             'price': price | ||||||
|         } |         } | ||||||
| 
 |  | ||||||
|         this_user = { |  | ||||||
|             'name': name, |  | ||||||
|             'email': email |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         request.session['specs'] = specs |         request.session['specs'] = specs | ||||||
|         request.session['template'] = template_data |         request.session['template'] = template_data | ||||||
|         request.session['user'] = this_user |  | ||||||
|         return HttpResponseRedirect(reverse('datacenterlight:payment')) |         return HttpResponseRedirect(reverse('datacenterlight:payment')) | ||||||
| 
 | 
 | ||||||
|     def get_success_url(self): |     def get_success_url(self): | ||||||
|  | @ -407,20 +382,19 @@ class WhyDataCenterLightView(IndexView): | ||||||
| 
 | 
 | ||||||
| class PaymentOrderView(FormView): | class PaymentOrderView(FormView): | ||||||
|     template_name = 'datacenterlight/landing_payment.html' |     template_name = 'datacenterlight/landing_payment.html' | ||||||
|     form_class = BillingAddressForm | 
 | ||||||
|  |     def get_form_class(self): | ||||||
|  |         if self.request.user.is_authenticated(): | ||||||
|  |             return BillingAddressForm | ||||||
|  |         else: | ||||||
|  |             return BillingAddressFormSignup | ||||||
| 
 | 
 | ||||||
|     def get_form_kwargs(self): |     def get_form_kwargs(self): | ||||||
|         form_kwargs = super(PaymentOrderView, self).get_form_kwargs() |         form_kwargs = super(PaymentOrderView, self).get_form_kwargs() | ||||||
|         billing_address_data = self.request.session.get('billing_address_data') |         # if user is signed in, get billing address | ||||||
|         if billing_address_data: |         if self.request.user.is_authenticated(): | ||||||
|             form_kwargs.update({ |             form_kwargs.update({ | ||||||
|                 'initial': { |                 'instance': self.request.user.billing_addresses.first() | ||||||
|                     'cardholder_name': billing_address_data['cardholder_name'], |  | ||||||
|                     'street_address': billing_address_data['street_address'], |  | ||||||
|                     'city': billing_address_data['city'], |  | ||||||
|                     'postal_code': billing_address_data['postal_code'], |  | ||||||
|                     'country': billing_address_data['country'], |  | ||||||
|                 } |  | ||||||
|             }) |             }) | ||||||
|         return form_kwargs |         return form_kwargs | ||||||
| 
 | 
 | ||||||
|  | @ -428,46 +402,75 @@ class PaymentOrderView(FormView): | ||||||
|         context = super(PaymentOrderView, self).get_context_data(**kwargs) |         context = super(PaymentOrderView, self).get_context_data(**kwargs) | ||||||
|         context.update({ |         context.update({ | ||||||
|             'stripe_key': settings.STRIPE_API_PUBLIC_KEY, |             'stripe_key': settings.STRIPE_API_PUBLIC_KEY, | ||||||
|             'site_url': reverse('datacenterlight:index') |             'site_url': reverse('datacenterlight:index'), | ||||||
|  |             'login_form': HostingUserLoginForm() | ||||||
|         }) |         }) | ||||||
|         return context |         return context | ||||||
| 
 | 
 | ||||||
|     @cache_control(no_cache=True, must_revalidate=True, no_store=True) |     @cache_control(no_cache=True, must_revalidate=True, no_store=True) | ||||||
|     def get(self, request, *args, **kwargs): |     def get(self, request, *args, **kwargs): | ||||||
|         if 'specs' not in request.session or 'user' not in request.session: |         # user is no longer added to session on the index page | ||||||
|  |         if 'specs' not in request.session: | ||||||
|             return HttpResponseRedirect(reverse('datacenterlight:index')) |             return HttpResponseRedirect(reverse('datacenterlight:index')) | ||||||
|         return self.render_to_response(self.get_context_data()) |         return self.render_to_response(self.get_context_data()) | ||||||
| 
 | 
 | ||||||
|     def post(self, request, *args, **kwargs): |     def post(self, request, *args, **kwargs): | ||||||
|         form = self.get_form() |         form = self.get_form() | ||||||
|         if form.is_valid(): |         if form.is_valid(): | ||||||
|             # Get billing address data |  | ||||||
|             billing_address_data = form.cleaned_data |  | ||||||
|             token = form.cleaned_data.get('token') |             token = form.cleaned_data.get('token') | ||||||
|             user = request.session.get('user') |             if request.user.is_authenticated(): | ||||||
|  |                 this_user = { | ||||||
|  |                     'email': request.user.email, | ||||||
|  |                     'name': request.user.name | ||||||
|  |                 } | ||||||
|  |                 custom_user = request.user | ||||||
|  |             else: | ||||||
|  |                 this_user = { | ||||||
|  |                     'email': form.cleaned_data.get('email'), | ||||||
|  |                     'name': form.cleaned_data.get('name') | ||||||
|  |                 } | ||||||
|                 try: |                 try: | ||||||
|                 CustomUser.objects.get(email=user.get('email')) |                     custom_user = CustomUser.objects.get( | ||||||
|  |                         email=this_user.get('email')) | ||||||
|                 except CustomUser.DoesNotExist: |                 except CustomUser.DoesNotExist: | ||||||
|                     password = CustomUser.get_random_password() |                     password = CustomUser.get_random_password() | ||||||
|                     # Register the user, and do not send emails |                     # Register the user, and do not send emails | ||||||
|                 CustomUser.register(user.get('name'), |                     custom_user = CustomUser.register( | ||||||
|                                     password, |                         this_user.get('name'), password, | ||||||
|                                     user.get('email'), |                         this_user.get('email'), | ||||||
|                                     app='dcl', |                         app='dcl', base_url=None, send_email=False | ||||||
|                                     base_url=None, send_email=False) |                     ) | ||||||
| 
 |                     new_user = authenticate( | ||||||
|  |                         username=custom_user.email, | ||||||
|  |                         password=password) | ||||||
|  |                     login(request, new_user) | ||||||
|  |                 else: | ||||||
|  |                     # new user used the email of existing user, fail | ||||||
|  |                     messages.error( | ||||||
|  |                         self.request, | ||||||
|  |                         _('Another user exists with that email!'), | ||||||
|  |                         extra_tags='duplicate_email' | ||||||
|  |                     ) | ||||||
|  |                     return HttpResponseRedirect( | ||||||
|  |                         reverse('datacenterlight:payment')) | ||||||
|  |             billing_address_data = form.cleaned_data | ||||||
|  |             billing_address_data.update({ | ||||||
|  |                 'user': custom_user.id | ||||||
|  |             }) | ||||||
|  |             billing_address_user_form = UserBillingAddressForm( | ||||||
|  |                 instance=custom_user.billing_addresses.first(), | ||||||
|  |                 data=billing_address_data) | ||||||
|  |             billing_address_user_form.save() | ||||||
|  |             request.session['user'] = this_user | ||||||
|             # Get or create stripe customer |             # Get or create stripe customer | ||||||
|             customer = StripeCustomer.get_or_create(email=user.get('email'), |             customer = StripeCustomer.get_or_create( | ||||||
|  |                 email=this_user.get('email'), | ||||||
|                 token=token) |                 token=token) | ||||||
|             if not customer: |             if not customer: | ||||||
|                 form.add_error("__all__", "Invalid credit card") |                 form.add_error("__all__", "Invalid credit card") | ||||||
|                 return self.render_to_response( |                 return self.render_to_response( | ||||||
|                     self.get_context_data(form=form)) |                     self.get_context_data(form=form)) | ||||||
| 
 | 
 | ||||||
|             # Create Billing Address |  | ||||||
|             billing_address = form.save() |  | ||||||
|             request.session['billing_address_data'] = billing_address_data |  | ||||||
|             request.session['billing_address'] = billing_address.id |  | ||||||
|             request.session['token'] = token |             request.session['token'] = token | ||||||
|             request.session['customer'] = customer.id |             request.session['customer'] = customer.id | ||||||
|             return HttpResponseRedirect( |             return HttpResponseRedirect( | ||||||
|  | @ -513,8 +516,8 @@ class OrderConfirmationView(DetailView): | ||||||
|         user = request.session.get('user') |         user = request.session.get('user') | ||||||
|         stripe_customer_id = request.session.get('customer') |         stripe_customer_id = request.session.get('customer') | ||||||
|         customer = StripeCustomer.objects.filter(id=stripe_customer_id).first() |         customer = StripeCustomer.objects.filter(id=stripe_customer_id).first() | ||||||
|         billing_address_data = request.session.get('billing_address_data') |         billing_address_data = {} | ||||||
|         billing_address_id = request.session.get('billing_address') |         billing_address_id = request.user.billing_addresses.first().id | ||||||
|         vm_template_id = template.get('id', 1) |         vm_template_id = template.get('id', 1) | ||||||
| 
 | 
 | ||||||
|         # Make stripe charge to a customer |         # Make stripe charge to a customer | ||||||
|  |  | ||||||
|  | @ -265,7 +265,7 @@ msgstr "" | ||||||
| "Link klickst</a>.<br/>\n" | "Link klickst</a>.<br/>\n" | ||||||
| 
 | 
 | ||||||
| msgid "My VM page" | msgid "My VM page" | ||||||
| msgstr "" | msgstr "Meine VM page" | ||||||
| 
 | 
 | ||||||
| #, python-format | #, python-format | ||||||
| msgid "" | msgid "" | ||||||
|  | @ -286,10 +286,10 @@ msgstr "" | ||||||
| "%(base_url)s%(my_virtual_machines_url)s\n" | "%(base_url)s%(my_virtual_machines_url)s\n" | ||||||
| 
 | 
 | ||||||
| msgid "Toggle navigation" | msgid "Toggle navigation" | ||||||
| msgstr "Konfiguration" | msgstr "Umschalten" | ||||||
| 
 | 
 | ||||||
| msgid "Dashboard" | msgid "Dashboard" | ||||||
| msgstr "Mein Dashboard" | msgstr "Dashboard" | ||||||
| 
 | 
 | ||||||
| msgid "Logout" | msgid "Logout" | ||||||
| msgstr "Abmelden" | msgstr "Abmelden" | ||||||
|  | @ -598,7 +598,7 @@ msgid "View Detail" | ||||||
| msgstr "Details anzeigen" | msgstr "Details anzeigen" | ||||||
| 
 | 
 | ||||||
| msgid "login" | msgid "login" | ||||||
| msgstr "Einloggen" | msgstr "anmelden" | ||||||
| 
 | 
 | ||||||
| msgid "" | msgid "" | ||||||
| "Thank you for signing up. We have sent an email to you. Please follow the " | "Thank you for signing up. We have sent an email to you. Please follow the " | ||||||
|  |  | ||||||
|  | @ -586,7 +586,7 @@ a.unlink:hover { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .dcl-order-table-total .tbl-total { | .dcl-order-table-total .tbl-total { | ||||||
|     text-align: center; |     text-align: right; | ||||||
|     color: #000; |     color: #000; | ||||||
|     padding-left: 44px; |     padding-left: 44px; | ||||||
| } | } | ||||||
|  | @ -614,8 +614,8 @@ a.unlink:hover { | ||||||
|     font-weight: 300; |     font-weight: 300; | ||||||
|     border: 1px solid #a1a1a1; |     border: 1px solid #a1a1a1; | ||||||
|     border-radius: 3px; |     border-radius: 3px; | ||||||
|     padding: 5px; |     padding: 8px 10px; | ||||||
|     margin-bottom: 15px; |     margin-bottom: 20px; | ||||||
| } | } | ||||||
| .card-warning-error { | .card-warning-error { | ||||||
|     border: 1px solid #EB4D5C; |     border: 1px solid #EB4D5C; | ||||||
|  | @ -656,7 +656,7 @@ a.unlink:hover { | ||||||
| 
 | 
 | ||||||
| .card-element { | .card-element { | ||||||
|     margin-bottom: 10px; |     margin-bottom: 10px; | ||||||
|     padding: 0; |     /* padding: 0; */ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .card-element label{ | .card-element label{ | ||||||
|  | @ -674,12 +674,12 @@ a.unlink:hover { | ||||||
| 
 | 
 | ||||||
| #card-errors { | #card-errors { | ||||||
|     clear: both; |     clear: both; | ||||||
|     padding: 0 0 10px; |     padding: 0 5px 10px; | ||||||
|     color: #eb4d5c; |     color: #eb4d5c; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .credit-card-goup{ | .credit-card-goup{ | ||||||
|     padding: 0; |     padding: 0 5px; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .order-confirm-date{ | .order-confirm-date{ | ||||||
|  | @ -854,6 +854,8 @@ a.list-group-item-danger:focus, | ||||||
|     color: #eb4d5c; |     color: #eb4d5c; | ||||||
| } | } | ||||||
| .has-error .form-control, | .has-error .form-control, | ||||||
|  | .has-error .form-control:focus, | ||||||
|  | .has-error .form-control:active, | ||||||
| .has-error .input-group-addon { | .has-error .input-group-addon { | ||||||
|     color: #eb4d5c; |     color: #eb4d5c; | ||||||
|     border-color: #eb4d5c; |     border-color: #eb4d5c; | ||||||
|  | @ -867,3 +869,11 @@ a.list-group-item-danger.active:focus { | ||||||
| .panel-danger > .panel-heading .badge { | .panel-danger > .panel-heading .badge { | ||||||
|     background-color: #eb4d5c; |     background-color: #eb4d5c; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | /* bootstrap input box-shadom disable */ | ||||||
|  | .has-error .form-control:focus, | ||||||
|  | .has-error .form-control:active, | ||||||
|  | .has-success .form-control:focus, | ||||||
|  | .has-success .form-control:active { | ||||||
|  |     box-shadow: inset 0 0 1px rgba(0,0,0,0.25); | ||||||
|  | } | ||||||
|  | @ -22,7 +22,100 @@ | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| .summary-box .content { | .summary-box .content { | ||||||
| 
 |  | ||||||
| 	padding-top: 15px; | 	padding-top: 15px; | ||||||
| 
 | } | ||||||
|  | 
 | ||||||
|  | /* landing page payment new style */ | ||||||
|  | .last-p { | ||||||
|  | 	margin-bottom: 0; | ||||||
|  | } | ||||||
|  | .dcl-payment-section { | ||||||
|  |     max-width: 391px; | ||||||
|  |     margin: 0 auto 30px; | ||||||
|  |     padding: 0 10px 30px; | ||||||
|  |     border-bottom: 1px solid #edebeb; | ||||||
|  |     height: 100%; | ||||||
|  | } | ||||||
|  | .dcl-payment-section hr{ | ||||||
|  | 	margin-top: 15px; | ||||||
|  | 	margin-bottom: 15px; | ||||||
|  | } | ||||||
|  | .dcl-payment-section .top-hr { | ||||||
|  | 	margin-left: -10px; | ||||||
|  | } | ||||||
|  | .dcl-payment-section h3 { | ||||||
|  | 	font-weight: 600; | ||||||
|  | } | ||||||
|  | .dcl-payment-section p { | ||||||
|  | 	padding: 0 5px; | ||||||
|  | 	font-weight: 400; | ||||||
|  | } | ||||||
|  | .dcl-payment-section .card-warning-content { | ||||||
|  | 	padding: 8px 10px; | ||||||
|  | 	font-weight: 300; | ||||||
|  | } | ||||||
|  | .dcl-payment-order strong{ | ||||||
|  | 	font-size: 17px; | ||||||
|  | } | ||||||
|  | .dcl-payment-order p { | ||||||
|  | 	font-weight: 300; | ||||||
|  | } | ||||||
|  | .dcl-payment-section .form-group { | ||||||
|  | 	margin-bottom: 10px; | ||||||
|  | } | ||||||
|  | .dcl-payment-section .form-control { | ||||||
|  | 	box-shadow: none; | ||||||
|  | 	padding: 6px 12px; | ||||||
|  | 	height: 32px; | ||||||
|  | } | ||||||
|  | .dcl-payment-user { | ||||||
|  | 	height: 100%; | ||||||
|  | 	display: flex; | ||||||
|  | 	flex-direction: column; | ||||||
|  | 	justify-content: center; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | .dcl-payment-user h4 { | ||||||
|  | 	font-weight: 600; | ||||||
|  | 	padding-left: 5px; | ||||||
|  | 	font-size: 17px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | @media (min-width: 768px) { | ||||||
|  | 	.dcl-payment-grid { | ||||||
|  | 		display: flex; | ||||||
|  | 		align-items: stretch; | ||||||
|  | 		flex-wrap: wrap; | ||||||
|  | 	} | ||||||
|  | 	.dcl-payment-box { | ||||||
|  | 		width: 50%; | ||||||
|  | 		position: relative; | ||||||
|  | 		padding: 0 30px; | ||||||
|  | 	} | ||||||
|  | 	.dcl-payment-box:nth-child(2) { | ||||||
|  | 		order: 1; | ||||||
|  | 	} | ||||||
|  | 	.dcl-payment-box:nth-child(4) { | ||||||
|  | 		order: 2; | ||||||
|  | 	} | ||||||
|  | 	.dcl-payment-section { | ||||||
|  | 		padding: 15px 10px; | ||||||
|  | 		margin-bottom: 0; | ||||||
|  | 		border-bottom-width: 5px; | ||||||
|  | 	} | ||||||
|  | 	.dcl-payment-box:nth-child(2n) .dcl-payment-section { | ||||||
|  | 		border-bottom: none; | ||||||
|  | 	} | ||||||
|  | 	.dcl-payment-box:nth-child(1):after, | ||||||
|  | 	.dcl-payment-box:nth-child(2):after { | ||||||
|  | 		content: ' '; | ||||||
|  | 		display: block; | ||||||
|  | 		background: #eee; | ||||||
|  | 		width: 1px; | ||||||
|  | 		position: absolute; | ||||||
|  | 		right: 0; | ||||||
|  | 		z-index: 2; | ||||||
|  | 		top: 20px; | ||||||
|  | 		bottom: 20px; | ||||||
|  | 	} | ||||||
| } | } | ||||||
|  | @ -113,6 +113,12 @@ class BillingAddressForm(forms.ModelForm): | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | class BillingAddressFormSignup(BillingAddressForm): | ||||||
|  |     name = forms.CharField(label=_('Name')) | ||||||
|  |     email = forms.EmailField(label=_('Email Address')) | ||||||
|  |     field_order = ['name', 'email'] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| class UserBillingAddressForm(forms.ModelForm): | class UserBillingAddressForm(forms.ModelForm): | ||||||
|     user = forms.ModelChoiceField(queryset=CustomUser.objects.all(), |     user = forms.ModelChoiceField(queryset=CustomUser.objects.all(), | ||||||
|                                   widget=forms.HiddenInput()) |                                   widget=forms.HiddenInput()) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue