Merge branch 'master' into feature/flake8
This commit is contained in:
		
				commit
				
					
						fcc109b8f5
					
				
			
		
					 15 changed files with 701 additions and 372 deletions
				
			
		|  | @ -8,7 +8,7 @@ msgid "" | |||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2017-06-15 23:57+0530\n" | ||||
| "POT-Creation-Date: 2017-06-19 12:22+0530\n" | ||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | ||||
|  | @ -83,6 +83,53 @@ msgstr "" | |||
| msgid "Thank you!" | ||||
| msgstr "Vielen Dank!" | ||||
| 
 | ||||
| #: templates/datacenterlight/emails/user_activation.html:99 | ||||
| #: templates/datacenterlight/emails/user_activation.txt:3 | ||||
| msgid "account activation" | ||||
| msgstr "Accountaktivierung" | ||||
| 
 | ||||
| #: templates/datacenterlight/emails/user_activation.html:105 | ||||
| #, python-format | ||||
| msgid "" | ||||
| "\n" | ||||
| "                You can activate your %(dcl_text)s account by <a href=" | ||||
| "\"%(base_url)s%(activation_link)s\">clicking here</a>.<br/><br/>\n" | ||||
| "                You can also copy and paste the following link into the " | ||||
| "address bar of your browser and follow the link in order to activate your " | ||||
| "datacenterlight account.<br/>\n" | ||||
| "                %(base_url)s%(activation_link)s\n" | ||||
| "                " | ||||
| msgstr "\n" | ||||
| "                <a href=\"%(base_url)s%(activation_link)s\">Klicke hier</a> um deinen %(dcl_text)s zu aktivieren.<br/><br/>\n" | ||||
| "                Oder kopiere den folgenden Link in die Adressleiste deines Browsers und folge dann dem Link um deinen %(dcl_text)s Account zu aktivieren.<br/>\n" | ||||
| "                %(base_url)s%(activation_link)s\n" | ||||
| "                " | ||||
| 
 | ||||
| #: templates/datacenterlight/emails/user_activation.html:123 | ||||
| #: templates/datacenterlight/emails/user_activation.txt:11 | ||||
| #| msgid "Your Name" | ||||
| msgid "Your" | ||||
| msgstr "Dein" | ||||
| 
 | ||||
| #: templates/datacenterlight/emails/user_activation.html:123 | ||||
| #: templates/datacenterlight/emails/user_activation.txt:11 | ||||
| msgid "team" | ||||
| msgstr "Team" | ||||
| 
 | ||||
| #: templates/datacenterlight/emails/user_activation.txt:5 | ||||
| #, python-format | ||||
| msgid "" | ||||
| "\n" | ||||
| "Hi,\n" | ||||
| "\n" | ||||
| "You can activate your %(dcl_text)s account by clicking here %(base_url)s" | ||||
| "%(activation_link)s\n" | ||||
| msgstr "" | ||||
| "\n" | ||||
| "Hallo,\n" | ||||
| "\n" | ||||
| "Du kannst deinen %(dcl_text)s Account aktivieren, indem du hier klickst %(base_url)s" | ||||
| "%(activation_link)s\n" | ||||
| #: templates/datacenterlight/includes/_footer.html:11 | ||||
| #: templates/datacenterlight/includes/_footer.html:31 | ||||
| #: templates/datacenterlight/includes/_navbar.html:27 | ||||
|  | @ -184,7 +231,6 @@ msgstr "" | |||
| "Angebot ist aufgrund unserer leichten Infrastruktur überaus kostengünstig." | ||||
| 
 | ||||
| #: templates/datacenterlight/index.html:133 | ||||
| #: templates/datacenterlight/order.html:87 | ||||
| #: templates/datacenterlight/pricing.html:86 | ||||
| msgid "Simple and affordable: Try our virtual machine with featherlight price." | ||||
| msgstr "" | ||||
|  | @ -196,7 +242,6 @@ msgid "Affordable VM hosting based in Switzerland" | |||
| msgstr "Bezahlbares VM Hosting in der Schweiz" | ||||
| 
 | ||||
| #: templates/datacenterlight/index.html:145 | ||||
| #: templates/datacenterlight/order.html:22 | ||||
| #: templates/datacenterlight/pricing.html:22 | ||||
| msgid "VM hosting" | ||||
| msgstr "" | ||||
|  | @ -206,19 +251,16 @@ msgid "month" | |||
| msgstr "Monat" | ||||
| 
 | ||||
| #: templates/datacenterlight/index.html:151 | ||||
| #: templates/datacenterlight/order.html:28 | ||||
| #: templates/datacenterlight/pricing.html:28 | ||||
| msgid "VAT included" | ||||
| msgstr "MwSt. inklusive" | ||||
| 
 | ||||
| #: templates/datacenterlight/index.html:156 | ||||
| #: templates/datacenterlight/order.html:33 | ||||
| #: templates/datacenterlight/pricing.html:33 | ||||
| msgid "Hosted in Switzerland" | ||||
| msgstr "Standort: Schweiz" | ||||
| 
 | ||||
| #: templates/datacenterlight/index.html:173 | ||||
| #: templates/datacenterlight/order.html:50 | ||||
| #: templates/datacenterlight/pricing.html:50 | ||||
| msgid "GB Storage (SSD)" | ||||
| msgstr "GB Storage (SSD)" | ||||
|  | @ -240,7 +282,6 @@ msgid "Your Email" | |||
| msgstr "Deine E-Mail" | ||||
| 
 | ||||
| #: templates/datacenterlight/index.html:197 | ||||
| #: templates/datacenterlight/order.html:77 | ||||
| #: templates/datacenterlight/pricing.html:79 | ||||
| msgid "Order Now!" | ||||
| msgstr "Bestelle jetzt!" | ||||
|  | @ -257,12 +298,10 @@ msgstr "Fragen?" | |||
| msgid "Contact us!" | ||||
| msgstr "Kontaktiere uns!" | ||||
| 
 | ||||
| #: templates/datacenterlight/order.html:9 | ||||
| #: templates/datacenterlight/pricing.html:9 | ||||
| msgid "We are cutting down the costs significantly!" | ||||
| msgstr "Wir sorgen dafür, dass die Kosten für Dich signifikant abnehmen" | ||||
| 
 | ||||
| #: templates/datacenterlight/order.html:90 | ||||
| #: templates/datacenterlight/pricing.html:89 | ||||
| msgid "" | ||||
| "Our VMs are hosted in Glarus, Switzerland, and our website is currently " | ||||
|  |  | |||
|  | @ -1,11 +1,12 @@ | |||
| {% load static from staticfiles %} | ||||
| {% load i18n %} | ||||
| <!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b --> | ||||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> | ||||
| <html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <head> | ||||
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | ||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| <title>Oxygen Invoice</title> | ||||
| <title>{{dcl_text}}</title> | ||||
| </head> | ||||
| <body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;"> | ||||
| <style type="text/css"> | ||||
|  | @ -95,15 +96,17 @@ | |||
|         <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5 0;" align="center"> | ||||
|               Datacenterlight user activation | ||||
|               {{dcl_text}} {% trans 'account activation' %} | ||||
|             </td> | ||||
|           </tr> | ||||
| <tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 7px 20px;" align="center"> | ||||
|              <p> | ||||
|                 You can activate your datacenterlight account by <a href="{{base_url}}{{activation_link}}">clicking here</a>.</br></br> | ||||
|                 You can also copy and paste the following link into the address bar of your browser and follow the link in order to activate your datacenterlight account.</br> | ||||
|                 {% blocktrans %} | ||||
|                 You can activate your {{dcl_text}} account by <a href="{{base_url}}{{activation_link}}">clicking here</a>.<br/><br/> | ||||
|                 You can also copy and paste the following link into the address bar of your browser and follow the link in order to activate your datacenterlight account.<br/> | ||||
|                 {{base_url}}{{activation_link}} | ||||
|                 {% endblocktrans %} | ||||
|              </p></td> | ||||
|           </tr> | ||||
| <tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
|  | @ -117,7 +120,7 @@ | |||
| <td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff"> | ||||
|       <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
|         <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 9px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 9px 0px;text-align: left; line-height: 21px;;" align="left">{% trans 'Your' %} {{dcl_text}} {% trans 'team' %}<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| </td> | ||||
|           </tr></table> | ||||
| </center> | ||||
|  |  | |||
|  | @ -1,129 +1,11 @@ | |||
| {% load static from staticfiles %} | ||||
| <!-- Inliner Build Version 4380b7741bb759d6cb997545f3add21ad48f010b --> | ||||
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> | ||||
| <html xmlns="http://www.w3.org/1999/xhtml" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <head> | ||||
| <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> | ||||
| <meta name="viewport" content="width=device-width, initial-scale=1"> | ||||
| <title>Oxygen Invoice</title> | ||||
| </head> | ||||
| <body bgcolor="#ffffff" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; color: white; margin: 0;"> | ||||
| <style type="text/css"> | ||||
| @media only screen and (max-width: 480px) { | ||||
|   table[class*="container-for-gmail-android"] { | ||||
|     min-width: 290px !important; width: 100% !important; | ||||
|   } | ||||
|   img[class="force-width-gmail"] { | ||||
|     display: none !important; width: 0 !important; height: 0 !important; | ||||
|   } | ||||
|   table[class="w320"] { | ||||
|     width: 320px !important; | ||||
|   } | ||||
|   td[class*="mobile-header-padding-left"] { | ||||
|     width: 160px !important; padding-left: 0 !important; | ||||
|   } | ||||
|   td[class*="mobile-header-padding-right"] { | ||||
|     width: 160px !important; padding-right: 0 !important; | ||||
|   } | ||||
|   td[class="header-lg"] { | ||||
|     font-size: 24px !important; padding-bottom: 5px !important; | ||||
|   } | ||||
|   td[class="content-padding"] { | ||||
|     padding: 5px 0 5px !important; | ||||
|   } | ||||
|   td[class="button"] { | ||||
|     padding: 5px 5px 30px !important; | ||||
|   } | ||||
|   td[class*="free-text"] { | ||||
|     padding: 10px 18px 30px !important; | ||||
|   } | ||||
|   td[class~="mobile-hide-img"] { | ||||
|     display: none !important; height: 0 !important; width: 0 !important; line-height: 0 !important; | ||||
|   } | ||||
|   td[class~="item"] { | ||||
|     width: 140px !important; vertical-align: top !important; | ||||
|   } | ||||
|   td[class~="quantity"] { | ||||
|     width: 50px !important; | ||||
|   } | ||||
|   td[class~="price"] { | ||||
|     width: 90px !important; | ||||
|   } | ||||
|   td[class="item-table"] { | ||||
|     padding: 30px 20px !important; | ||||
|   } | ||||
|   td[class="mini-container-left"] { | ||||
|     padding: 0 15px 15px !important; display: block !important; width: 290px !important; | ||||
|   } | ||||
|   td[class="mini-container-right"] { | ||||
|     padding: 0 15px 15px !important; display: block !important; width: 290px !important; | ||||
|   } | ||||
| } | ||||
| </style> | ||||
| <table align="center" cellpadding="0" cellspacing="0" class="container-for-gmail-android" width="100%" style="border-collapse: collapse !important; min-width: 600px; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td align="left" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff url(http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg) repeat-x;" bgcolor="#ffffff"> | ||||
|       <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
|       <table cellspacing="0" cellpadding="0" width="100%" bgcolor="#ffffff" background="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; background: transparent;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td width="100%" height="80" valign="top" style="text-align: center; vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; line-height: 21px; background-color: #ffffff" align="center"> | ||||
|             <!--[if gte mso 9]> | ||||
|             <v:rect xmlns:v="urn:schemas-microsoft-com:vml" fill="true" stroke="false" style="mso-width-percent:1000;height:80px; v-text-anchor:middle;"> | ||||
|               <v:fill type="tile" src="http://s3.amazonaws.com/swu-filepicker/4E687TRe69Ld95IDWyEg_bg_top_02.jpg" color="#ffffff" /> | ||||
|               <v:textbox inset="0,0,0,0"> | ||||
|             <![endif]--> | ||||
|               <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
|                 <table cellpadding="0" cellspacing="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td class="pull-left mobile-header-padding-left" style="vertical-align: middle; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 290px; padding-left: 10px;" align="left" valign="middle"> | ||||
|                       <a href="{{base_url}}" style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; color: #676767; text-decoration: none !important;"><img width="137" src="{{base_url}}{% static 'datacenterlight/img/datacenterlight.png' %}" alt="logo" style="max-width: 600px; outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; border: none;"></a> | ||||
|                     </td> | ||||
|                     <td class="pull-right mobile-header-padding-right" style="color: #4d4d4d; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; text-align: right; line-height: 21px; width: 290px; padding-left: 10px;" align="right"> | ||||
|                     </td> | ||||
|                   </tr></table> | ||||
| </center> | ||||
|               <!--[if gte mso 9]> | ||||
|               </v:textbox> | ||||
|             </v:rect> | ||||
|             <![endif]--> | ||||
|             </td> | ||||
|           </tr></table> | ||||
| </center> | ||||
|     </td> | ||||
|   </tr> | ||||
| <tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td align="center" valign="top" width="100%" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff; padding: 20px 0 5px;" class="content-padding" bgcolor="#f7f7f7"> | ||||
|       <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
|         <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td class="header-lg" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 32px; color: #4d4d4d; text-align: left; line-height: normal; font-weight: 400; padding: 35px 5 0;" align="center"> | ||||
|               Datacenterlight user activation | ||||
|             </td> | ||||
|           </tr> | ||||
| <tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td class="free-text" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: left; line-height: 21px; width: 100% !important; padding: 40px 7px 20px;" align="center"> | ||||
|              <p> | ||||
|                 You can activate your datacenterlight account by <a href="{{base_url}}{{activation_link}}">clicking here</a>.</br></br> | ||||
|                 You can also copy and paste the following link into the address bar of your browser and follow the link in order to activate your datacenterlight account.</br> | ||||
|                 {{base_url}}{{activation_link}}              | ||||
|              </p></td> | ||||
|           </tr> | ||||
| <tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td class="button" style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; padding: 0;" align="center"> </td> | ||||
|           </tr> | ||||
| </table> | ||||
| </center> | ||||
|     </td> | ||||
|   </tr> | ||||
| <tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td align="center" valign="top" width="100%" style="height: 100px; border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; color: #777777; text-align: center; line-height: 21px; background: #ffffff;" bgcolor="#ffffff"> | ||||
|       <center style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
|         <table cellspacing="0" cellpadding="0" width="600" class="w320" style="border-collapse: collapse !important; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"><tr style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| <td style="border-collapse: collapse; font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important; font-size: 14px; font-weight: 600; color: #7293de; padding: 25px 9px 0px;text-align: left; line-height: 21px;;" align="left">Your data center light team<br style="font-family: 'Raleway', 'Helvetica Neue', 'Arial', 'sans-serif' !important;"> | ||||
| </td> | ||||
|           </tr></table> | ||||
| </center> | ||||
|     </td> | ||||
|   </tr> | ||||
| </table> | ||||
| </body> | ||||
| </html> | ||||
| {% load i18n %} | ||||
| {{dcl_text}} {% trans 'account activation' %} | ||||
| 
 | ||||
| {% blocktrans %} | ||||
| Hi, | ||||
| 
 | ||||
| You can activate your {{dcl_text}} account by clicking here {{base_url}}{{activation_link}} | ||||
| {% endblocktrans %} | ||||
| 
 | ||||
| {% trans 'Your' %} {{dcl_text}} {% trans 'team' %} | ||||
|  |  | |||
							
								
								
									
										79
									
								
								datacenterlight/templates/datacenterlight/order_detail.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								datacenterlight/templates/datacenterlight/order_detail.html
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,79 @@ | |||
| {% extends "hosting/base_short.html" %} | ||||
| {% load staticfiles bootstrap3 %} | ||||
| {% load i18n %} | ||||
| {% block content %}  | ||||
| 
 | ||||
| <div class="order-detail-container"> | ||||
|    {% if messages %} | ||||
|     <div class="row"> | ||||
|         <div class="col-xs-12 col-md-8 col-md-offset-2"> | ||||
|             <br/> | ||||
|                 <div class="alert alert-warning"> | ||||
|                     {% for message in messages %} | ||||
|                     <span>{{ message }}</span> | ||||
|                     {% endfor %} | ||||
|                 </div> | ||||
|         </div> | ||||
|     </div> | ||||
|     {% endif %} | ||||
|     {% if not error %} | ||||
|     <div class="row">   | ||||
|         <div class="col-xs-12 col-md-8 col-md-offset-2"> | ||||
|     		<div class="invoice-title"> | ||||
|     			<h2>{% trans "Confirm Order"%}</h2><h3 class="pull-right">{% trans "Order #"%} {{order.id}}</h3> | ||||
|     		</div> | ||||
|     		<hr> | ||||
|     		<div class="row"> | ||||
|     			<div class="col-xs-6"> | ||||
|     				<address> | ||||
|                     <h3><b>{% trans "Billed To:"%}</b></h3> | ||||
|     					{{user.name}}<br> | ||||
|                         {{order.billing_address.street_address}},{{order.billing_address.postal_code}}<br> | ||||
|                         {{order.billing_address.city}}, {{order.billing_address.country}}. | ||||
|     				</address> | ||||
|     			</div> | ||||
|                 <div class="col-xs-6 text-right"> | ||||
|                     <address> | ||||
|                         <strong>{% trans "Date"%}:</strong><br> | ||||
|                         {{order.created_at}}<br><br> | ||||
|                     </address> | ||||
| 
 | ||||
|                 </div> | ||||
|     		</div> | ||||
|     		<div class="row"> | ||||
|     			<div class="col-xs-6"> | ||||
|     				<address> | ||||
|     					<strong>{% trans "Payment Method:"%}</strong><br> | ||||
|     					{{order.cc_brand}} ending **** {{order.last4}}<br> | ||||
|     					{{user.email}} | ||||
|     				</address> | ||||
|     			</div> | ||||
|     		</div> | ||||
|     	</div> | ||||
|     </div> | ||||
|      | ||||
|     <div class="row"> | ||||
|         <div class="col-md-8 col-md-offset-2"> | ||||
|             <h3><b>{% trans "Order summary"%}</b></h3> | ||||
|             <hr> | ||||
|             <div class="content"> | ||||
|                 <p><b>{% trans "Cores"%}</b> <span class="pull-right">{{vm.cores}}</span></p> | ||||
|                 <hr> | ||||
|                 <p><b>{% trans "Memory"%}</b> <span class="pull-right">{{vm.memory}} GB</span></p> | ||||
|                 <hr> | ||||
|                 <p><b>{% trans "Disk space"%}</b> <span class="pull-right">{{vm.disk_size}} GB</span></p> | ||||
|                 <hr> | ||||
|                 <h4>{% trans "Total"%}<p class="pull-right"><b>{{vm.price}} CHF</b></p></h4> | ||||
|             </div> | ||||
|             <br/> | ||||
|             {% url 'datacenterlight:payment' as payment_url %} | ||||
|             {% if payment_url in request.META.HTTP_REFERER  %} | ||||
|             <div class=" content pull-right"> | ||||
|                 <a href="{{next_url}}" ><button class="btn btn-info">{% trans "Finish Configuration"%}</button></a> | ||||
|             </div> | ||||
|             {% endif %} | ||||
|         </div> | ||||
|     </div> | ||||
|     {% endif %} | ||||
| </div> | ||||
| {%endblock%} | ||||
|  | @ -1,6 +1,6 @@ | |||
| from django.conf.urls import url | ||||
| 
 | ||||
| from .views import IndexView, BetaProgramView, LandingProgramView, BetaAccessView, PricingView, SuccessView | ||||
| from .views import IndexView, BetaProgramView, LandingProgramView, BetaAccessView, PricingView, SuccessView, PaymentOrderView, OrderConfirmationView | ||||
| 
 | ||||
| 
 | ||||
| urlpatterns = [ | ||||
|  | @ -8,6 +8,8 @@ urlpatterns = [ | |||
|     url(r'^/beta-program/?$', BetaProgramView.as_view(), name='beta'), | ||||
|     url(r'^/landing/?$', LandingProgramView.as_view(), name='landing'), | ||||
|     url(r'^/pricing/?$', PricingView.as_view(), name='pricing'), | ||||
|     url(r'^/payment/?$', PaymentOrderView.as_view(), name='payment'), | ||||
|     url(r'^/order-confirmation/(?P<pk>\d+)/?$', OrderConfirmationView.as_view(), name='order_confirmation'), | ||||
|     url(r'^/order-success/?$', SuccessView.as_view(), name='order_success'), | ||||
|     url(r'^/beta_access?$', BetaAccessView.as_view(), name='beta_access'), | ||||
| ] | ||||
|  |  | |||
|  | @ -1,4 +1,4 @@ | |||
| from django.views.generic import FormView, CreateView, TemplateView | ||||
| from django.views.generic import FormView, CreateView, TemplateView, DetailView | ||||
| from django.http import HttpResponseRedirect | ||||
| from .forms import BetaAccessForm | ||||
| from .models import BetaAccess, BetaAccessVMType, BetaAccessVM | ||||
|  | @ -10,9 +10,17 @@ from django.shortcuts import render | |||
| from django.shortcuts import redirect | ||||
| from django import forms | ||||
| from django.core.exceptions import ValidationError | ||||
| from django.views.decorators.cache import cache_control | ||||
| from django.conf import settings | ||||
| from utils.forms import BillingAddressForm, UserBillingAddressForm | ||||
| from membership.models import StripeCustomer | ||||
| from hosting.models import HostingOrder, HostingBill | ||||
| from utils.stripe_utils import StripeUtils | ||||
| from datetime import datetime | ||||
| from membership.models import CustomUser, StripeCustomer | ||||
| 
 | ||||
| from opennebula_api.models import OpenNebulaManager | ||||
| from opennebula_api.serializers import VirtualMachineTemplateSerializer | ||||
| from opennebula_api.serializers import VirtualMachineTemplateSerializer, VirtualMachineSerializer | ||||
| 
 | ||||
| 
 | ||||
| class LandingProgramView(TemplateView): | ||||
|  | @ -22,6 +30,13 @@ class LandingProgramView(TemplateView): | |||
| class SuccessView(TemplateView): | ||||
|     template_name = "datacenterlight/success.html" | ||||
| 
 | ||||
|     def get(self, request, *args, **kwargs): | ||||
|         if 'specs' not in request.session or 'user' not in request.session: | ||||
|             return HttpResponseRedirect(reverse('datacenterlight:index')) | ||||
|         else : | ||||
|             del request.session['specs'] | ||||
|             del request.session['user'] | ||||
|         return render(request, self.template_name) | ||||
| 
 | ||||
| class PricingView(TemplateView): | ||||
|     template_name = "datacenterlight/pricing.html" | ||||
|  | @ -173,7 +188,12 @@ class IndexView(CreateView): | |||
|     success_url = "/datacenterlight#requestform" | ||||
|     success_message = "Thank you, we will contact you as soon as possible" | ||||
| 
 | ||||
|     @cache_control(no_cache=True, must_revalidate=True, no_store=True) | ||||
|     def get(self, request, *args, **kwargs): | ||||
|         if 'specs' in request.session : | ||||
|             del request.session['specs'] | ||||
|         if 'user' in request.session : | ||||
|             del request.session['user'] | ||||
|         try: | ||||
|             manager = OpenNebulaManager() | ||||
|             templates = manager.get_templates() | ||||
|  | @ -216,26 +236,22 @@ class IndexView(CreateView): | |||
|             messages.add_message(self.request, messages.ERROR, '%(value) is not a proper email.'.format(email)) | ||||
|             return HttpResponseRedirect(reverse('datacenterlight:index')) | ||||
| 
 | ||||
|         context = { | ||||
|             'name': name, | ||||
|             'email': email, | ||||
|             'cores': cores, | ||||
|         specs = { | ||||
|             'cpu': cores, | ||||
|             'memory': memory, | ||||
|             'storage': storage, | ||||
|             'price': price, | ||||
|             'template': template_data['name'], | ||||
|             'disk_size': storage, | ||||
|             'price': price | ||||
|         } | ||||
|         email_data = { | ||||
|             'subject': "Data Center Light Order from %s" % context['email'], | ||||
|             'from_email': '(datacenterlight) datacenterlight Support <support@datacenterlight.ch>', | ||||
|             'to': ['info@ungleich.ch'], | ||||
|             'body': "\n".join(["%s=%s" % (k, v) for (k, v) in context.items()]), | ||||
|             'reply_to': [context['email']], | ||||
|         } | ||||
|         email = EmailMessage(**email_data) | ||||
|         email.send() | ||||
|          | ||||
|         return HttpResponseRedirect(reverse('datacenterlight:order_success')) | ||||
|         this_user = { | ||||
|             'name': name, | ||||
|             'email': email | ||||
|         } | ||||
| 
 | ||||
|         request.session['specs'] = specs | ||||
|         request.session['template'] = template_data | ||||
|         request.session['user'] = this_user | ||||
|         return HttpResponseRedirect(reverse('datacenterlight:payment')) | ||||
| 
 | ||||
|     def get_success_url(self): | ||||
|         success_url = reverse('datacenterlight:index') | ||||
|  | @ -284,3 +300,167 @@ class IndexView(CreateView): | |||
| 
 | ||||
|         messages.add_message(self.request, messages.SUCCESS, self.success_message) | ||||
|         return super(IndexView, self).form_valid(form) | ||||
| 
 | ||||
| 
 | ||||
| class PaymentOrderView(FormView): | ||||
|     template_name = 'hosting/payment.html' | ||||
|     form_class = BillingAddressForm | ||||
| 
 | ||||
|     def get_context_data(self, **kwargs): | ||||
|         context = super(PaymentOrderView, self).get_context_data(**kwargs) | ||||
|         context.update({ | ||||
|             'stripe_key': settings.STRIPE_API_PUBLIC_KEY | ||||
|         }) | ||||
|         return context | ||||
| 
 | ||||
|     @cache_control(no_cache=True, must_revalidate=True, no_store=True) | ||||
|     def get(self, request, *args, **kwargs): | ||||
|         if 'specs' not in request.session or 'user' not in request.session: | ||||
|             return HttpResponseRedirect(reverse('datacenterlight:index')) | ||||
|         return self.render_to_response(self.get_context_data()) | ||||
| 
 | ||||
|     def post(self, request, *args, **kwargs): | ||||
|         form = self.get_form() | ||||
|         if form.is_valid(): | ||||
|             # Get billing address data | ||||
|             billing_address_data = form.cleaned_data | ||||
|             context = self.get_context_data() | ||||
|             template = request.session.get('template') | ||||
|             specs = request.session.get('specs') | ||||
|             user = request.session.get('user') | ||||
|             vm_template_id = template.get('id', 1) | ||||
|             final_price = specs.get('price') | ||||
|             token = form.cleaned_data.get('token') | ||||
|             try: | ||||
|                 custom_user = CustomUser.objects.get(email=user.get('email')) | ||||
|             except CustomUser.DoesNotExist: | ||||
|                 password = CustomUser.get_random_password() | ||||
|                 # Register the user, and do not send emails | ||||
|                 CustomUser.register(user.get('name'),  | ||||
|                                     password,  | ||||
|                                     user.get('email'),  | ||||
|                                     app='dcl',  | ||||
|                                     base_url=None, send_email=False) | ||||
| 
 | ||||
| 
 | ||||
|             # Get or create stripe customer | ||||
|             customer = StripeCustomer.get_or_create(email=user.get('email'), | ||||
|                                                     token=token) | ||||
|             if not customer: | ||||
|                 form.add_error("__all__", "Invalid credit card") | ||||
|                 return self.render_to_response(self.get_context_data(form=form)) | ||||
| 
 | ||||
|             # Create Billing Address | ||||
|             billing_address = form.save() | ||||
| 
 | ||||
|             # 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(request, self.template_name, context) | ||||
| 
 | ||||
|             charge = charge_response.get('response_object') | ||||
|          | ||||
|             # Create OpenNebulaManager | ||||
|             manager = OpenNebulaManager(email=settings.OPENNEBULA_USERNAME, | ||||
|                                         password=settings.OPENNEBULA_PASSWORD) | ||||
|              | ||||
|             # Create a vm using logged user | ||||
|             vm_id = manager.create_vm( | ||||
|                 template_id=vm_template_id, | ||||
|                 specs=specs, | ||||
|                 vm_name="{email}-{template_name}-{date}".format( | ||||
|                        email=user.get('email'),  | ||||
|                        template_name=template.get('name'), | ||||
|                        date=int(datetime.now().strftime("%s"))) | ||||
|             ) | ||||
|              | ||||
|             # Create a Hosting Order | ||||
|             order = HostingOrder.create( | ||||
|                 price=final_price, | ||||
|                 vm_id=vm_id, | ||||
|                 customer=customer, | ||||
|                 billing_address=billing_address | ||||
|             ) | ||||
|              | ||||
|             # Create a Hosting Bill | ||||
|             bill = HostingBill.create( | ||||
|                 customer=customer, billing_address=billing_address) | ||||
| 
 | ||||
|             # Create Billing Address for User if he does not have one | ||||
|             if not customer.user.billing_addresses.count(): | ||||
|                 billing_address_data.update({ | ||||
|                     'user': customer.user.id | ||||
|                 }) | ||||
|                 billing_address_user_form = UserBillingAddressForm( | ||||
|                     billing_address_data) | ||||
|                 billing_address_user_form.is_valid() | ||||
|                 billing_address_user_form.save() | ||||
| 
 | ||||
|             # Associate an order with a stripe payment | ||||
|             order.set_stripe_charge(charge) | ||||
| 
 | ||||
|             # If the Stripe payment was successed, set order status approved | ||||
|             order.set_approved() | ||||
|              | ||||
|             vm = VirtualMachineSerializer(manager.get_vm(vm_id)).data | ||||
|              | ||||
|             context = { | ||||
|                 'name': user.get('name'), | ||||
|                 'email': user.get('email'), | ||||
|                 'cores': specs.get('cpu'), | ||||
|                 'memory': specs.get('memory'), | ||||
|                 'storage': specs.get('disk_size'), | ||||
|                 'price': specs.get('price'), | ||||
|                 'template': template.get('name'), | ||||
|                 'vm.name': vm['name'], | ||||
|                 'vm.id': vm['vm_id'], | ||||
|                 'order.id': order.id | ||||
|             } | ||||
|             email_data = { | ||||
|                 'subject': "Data Center Light Order from %s" % context['email'], | ||||
|                 'from_email': '(Data Center Light) Data Center Light Support <support@datacenterlight.ch>', | ||||
|                 'to': ['info@ungleich.ch'], | ||||
|                 'body': "\n".join(["%s=%s" % (k, v) for (k, v) in context.items()]), | ||||
|                 'reply_to': [context['email']], | ||||
|             } | ||||
|             email = EmailMessage(**email_data) | ||||
|             email.send() | ||||
|             return HttpResponseRedirect(reverse('datacenterlight:order_confirmation', kwargs={'pk': order.id})) | ||||
|         else: | ||||
|             return self.form_invalid(form) | ||||
| 
 | ||||
| class OrderConfirmationView(DetailView): | ||||
|     template_name = "datacenterlight/order_detail.html" | ||||
|     context_object_name = "order" | ||||
|     model = HostingOrder | ||||
|     def get_context_data(self, **kwargs): | ||||
|         # Get context | ||||
|         context = super(DetailView, self).get_context_data(**kwargs) | ||||
|         obj = self.get_object() | ||||
|         manager = OpenNebulaManager(email=settings.OPENNEBULA_USERNAME, | ||||
|                                     password=settings.OPENNEBULA_PASSWORD) | ||||
|         try: | ||||
|             vm = manager.get_vm(obj.vm_id) | ||||
|             context['vm'] = VirtualMachineSerializer(vm).data | ||||
|             context['next_url'] = reverse('datacenterlight:order_success') | ||||
|         except WrongIdError: | ||||
|             messages.error(self.request, | ||||
|                            'The VM you are looking for is unavailable at the moment. \ | ||||
|                             Please contact Data Center Light support.' | ||||
|                            ) | ||||
|             self.kwargs['error'] = 'WrongIdError' | ||||
|             context['error'] = 'WrongIdError' | ||||
|         except ConnectionRefusedError: | ||||
|             messages.error(self.request, | ||||
|                            'In order to create a VM, you need to create/upload your SSH KEY first.' | ||||
|                            ) | ||||
|         return context | ||||
|  |  | |||
|  | @ -513,3 +513,8 @@ OPENNEBULA_PORT = env('OPENNEBULA_PORT') | |||
| # The endpoint to which the XML RPC request needs to be sent to. The | ||||
| # default value is /RPC2 | ||||
| OPENNEBULA_ENDPOINT = env('OPENNEBULA_ENDPOINT') | ||||
| 
 | ||||
| 
 | ||||
| # dcl email configurations | ||||
| DCL_TEXT = env('DCL_TEXT') | ||||
| DCL_SUPPORT_FROM_ADDRESS = env('DCL_SUPPORT_FROM_ADDRESS') | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ msgid "" | |||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2017-05-30 13:47+0000\n" | ||||
| "POT-Creation-Date: 2017-06-23 02:28+0530\n" | ||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | ||||
|  | @ -18,74 +18,68 @@ msgstr "" | |||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| 
 | ||||
| #: hosting/forms.py:63 | ||||
| #: forms.py:28 | ||||
| msgid "Your account is not activated yet." | ||||
| msgstr "Dein Account wurde noch nicht aktiviert." | ||||
| 
 | ||||
| #: forms.py:65 | ||||
| msgid "Paste here your public key" | ||||
| msgstr "Fügen Sie Ihren public key ein" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:68 | ||||
| #: hosting/templates/hosting/base_short.html:139 | ||||
| #: templates/hosting/base_short.html:67 | ||||
| msgid "My Virtual Machines" | ||||
| msgstr "Meine virtuellen Maschinen" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:73 | ||||
| #: hosting/templates/hosting/base_short.html:145 | ||||
| #: hosting/templates/hosting/orders.html:12 | ||||
| #: templates/hosting/base_short.html:72 templates/hosting/orders.html.py:12 | ||||
| msgid "My Orders" | ||||
| msgstr "Meine Bestellungen" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:78 | ||||
| #: hosting/templates/hosting/base_short.html:152 | ||||
| #: templates/hosting/base_short.html:81 | ||||
| msgid "Keys" | ||||
| msgstr "Schlüssel" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:83 | ||||
| #: hosting/templates/hosting/base_short.html:158 | ||||
| #: templates/hosting/base_short.html:86 | ||||
| msgid "Notifications " | ||||
| msgstr "Benachrichtigungen" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:90 | ||||
| #: templates/hosting/base_short.html:89 | ||||
| msgid "Logout" | ||||
| msgstr "Abmeleden" | ||||
| msgstr "Abmelden" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:95 | ||||
| #: templates/hosting/base_short.html:94 | ||||
| msgid "How it works" | ||||
| msgstr "Wie es funktioniert" | ||||
| msgstr "So funktioniert es" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:98 | ||||
| #: templates/hosting/base_short.html:97 | ||||
| msgid "Your infrastructure" | ||||
| msgstr "Ihre Infrastruktur" | ||||
| msgstr "deine Infrastruktur" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:101 | ||||
| #: templates/hosting/base_short.html:100 | ||||
| msgid "Our inftrastructure" | ||||
| msgstr "Unsere Infrastruktur" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:104 | ||||
| #: templates/hosting/base_short.html:103 | ||||
| msgid "Pricing" | ||||
| msgstr "Preise" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:107 | ||||
| #: templates/hosting/base_short.html:106 | ||||
| msgid "Contact" | ||||
| msgstr "Kontakt" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:110 | ||||
| #: hosting/templates/hosting/login.html:32 | ||||
| #: hosting/templates/hosting/login.html:41 | ||||
| #: hosting/templates/hosting/reset_password.html:31 | ||||
| #: hosting/templates/hosting/signup.html:30 | ||||
| #: templates/hosting/base_short.html:109 | ||||
| #: templates/hosting/confirm_reset_password.html:38 | ||||
| #: templates/hosting/login.html:17 templates/hosting/login.html.py:26 | ||||
| #: templates/hosting/reset_password.html:32 templates/hosting/signup.html:30 | ||||
| msgid "Login" | ||||
| msgstr "Anmelden" | ||||
| 
 | ||||
| #: hosting/templates/hosting/base_short.html:134 | ||||
| msgid "Home" | ||||
| msgstr "Home" | ||||
| 
 | ||||
| #: templates/hosting/bill_detail.html:11 templates/hosting/order_detail.html:10 | ||||
| #: templates/hosting/bill_detail.html:11 | ||||
| msgid "Invoice" | ||||
| msgstr "Rechnung" | ||||
| 
 | ||||
| #: templates/hosting/bill_detail.html:11 templates/hosting/order_detail.html:10 | ||||
| #: templates/hosting/bill_detail.html:11 templates/hosting/order_detail.html:23 | ||||
| msgid "Order #" | ||||
| msgstr "Rechnung #" | ||||
| msgstr "Bestellung #" | ||||
| 
 | ||||
| #: templates/hosting/bill_detail.html:25 | ||||
| msgid "ungleich GmbH" | ||||
|  | @ -144,8 +138,7 @@ msgstr "" | |||
| msgid "Customers" | ||||
| msgstr "Kunden" | ||||
| 
 | ||||
| #: hosting/templates/hosting/bills.html:16 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:42 | ||||
| #: templates/hosting/bills.html:16 templates/hosting/user_keys.html.py:25 | ||||
| msgid "Name" | ||||
| msgstr "" | ||||
| 
 | ||||
|  | @ -157,60 +150,65 @@ msgstr "" | |||
| msgid "View Bill" | ||||
| msgstr "Rechnung anzeigen" | ||||
| 
 | ||||
| #: templates/hosting/bills.html:41 templates/hosting/orders.html.py:83 | ||||
| #: templates/hosting/bills.html:41 templates/hosting/orders.html.py:82 | ||||
| #: templates/hosting/virtual_machines.html:70 | ||||
| msgid "previous" | ||||
| msgstr "vorherige" | ||||
| 
 | ||||
| #: templates/hosting/bills.html:47 templates/hosting/orders.html.py:89 | ||||
| #: templates/hosting/bills.html:47 templates/hosting/orders.html.py:88 | ||||
| #: templates/hosting/virtual_machines.html:76 | ||||
| msgid "next" | ||||
| msgstr "nächste" | ||||
| 
 | ||||
| #: templates/hosting/confirm_reset_password.html:10 | ||||
| #: templates/hosting/login.html:9 templates/hosting/reset_password.html.py:9 | ||||
| #: templates/hosting/signup.html:8 | ||||
| #: templates/hosting/login.html:12 templates/hosting/reset_password.html:10 | ||||
| #: templates/hosting/signup.html:9 templates/hosting/signup_validate.html:9 | ||||
| msgid "Your VM hosted in Switzerland" | ||||
| msgstr "Ihre VM in der Schweiz" | ||||
| msgstr "deine VM in der Schweiz" | ||||
| 
 | ||||
| #: templates/hosting/confirm_reset_password.html:14 | ||||
| msgid "Set your new password" | ||||
| msgstr "Setzen Ihr neues Passwort" | ||||
| msgstr "Setze dein neues Passwort" | ||||
| 
 | ||||
| #: hosting/templates/hosting/confirm_reset_password.html:28 | ||||
| #: hosting/templates/hosting/reset_password.html:22 | ||||
| #: templates/hosting/confirm_reset_password.html:29 | ||||
| #: templates/hosting/reset_password.html:23 | ||||
| msgid "Reset" | ||||
| msgstr "Zurücksetzen" | ||||
| 
 | ||||
| #: hosting/templates/hosting/confirm_reset_password.html:32 | ||||
| #: hosting/templates/hosting/reset_password.html:28 | ||||
| #: hosting/templates/hosting/signup.html:27 | ||||
| #: templates/hosting/confirm_reset_password.html:35 | ||||
| #: templates/hosting/reset_password.html:29 templates/hosting/signup.html:27 | ||||
| msgid "Already have an account ?" | ||||
| msgstr "Besitzen sie bereits ein Bentzerkonto" | ||||
| msgstr "Hast Du bereits ein Benutzerkonto?" | ||||
| 
 | ||||
| #: hosting/templates/hosting/confirm_reset_password.html:32 | ||||
| msgid "Log in" | ||||
| msgstr "Anmelden" | ||||
| 
 | ||||
| #: hosting/templates/hosting/create_virtual_machine.html:19 | ||||
| #: templates/hosting/create_virtual_machine.html:20 | ||||
| msgid "New Virtual Machine" | ||||
| msgstr "Neue virtuelle Maschine" | ||||
| 
 | ||||
| #: hosting/templates/hosting/create_virtual_machine.html:24 | ||||
| msgid "Select VM Template:" | ||||
| msgstr "Wählen Sie eine Vorlage" | ||||
| #: templates/hosting/create_virtual_machine.html:28 | ||||
| #, fuzzy | ||||
| #| msgid "Select VM Template:" | ||||
| msgid "Step 1. Select VM Template:" | ||||
| msgstr "Wähle eine Vorlage" | ||||
| 
 | ||||
| #: hosting/templates/hosting/create_virtual_machine.html:32 | ||||
| msgid "Select VM Configuration:" | ||||
| msgstr "Wählen Sie eine Konfiguration" | ||||
| #: templates/hosting/create_virtual_machine.html:42 | ||||
| #, fuzzy | ||||
| #| msgid "Select VM Configuration:" | ||||
| msgid "Step2. Select VM Configuration" | ||||
| msgstr "Wähle eine Konfiguration" | ||||
| 
 | ||||
| #: hosting/templates/hosting/create_virtual_machine.html:39 | ||||
| #: templates/hosting/create_virtual_machine.html:59 | ||||
| #, fuzzy | ||||
| #| msgid "Pricing" | ||||
| msgid "Price " | ||||
| msgstr "Preis" | ||||
| 
 | ||||
| #: templates/hosting/create_virtual_machine.html:59 | ||||
| msgid "CHF/Month" | ||||
| msgstr "CHF/Monat" | ||||
| 
 | ||||
| #: templates/hosting/create_virtual_machine.html:45 | ||||
| #: templates/hosting/create_virtual_machine.html:61 | ||||
| msgid "Start VM" | ||||
| msgstr "Start VM" | ||||
| msgstr "VM jetzt starten" | ||||
| 
 | ||||
| #: templates/hosting/emails/password_reset_email.html:2 | ||||
| #: templates/hosting/emails/password_reset_email.txt:2 | ||||
|  | @ -236,21 +234,16 @@ msgstr "" | |||
| msgid "The %(site_name)s team" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: hosting/templates/hosting/login.html:26 | ||||
| msgid "You haven been logged out" | ||||
| msgstr "Sie wurden abgmeldet" | ||||
| 
 | ||||
| #: hosting/templates/hosting/login.html:49 | ||||
| #: templates/hosting/login.html:34 | ||||
| msgid "Don't have an account yet ? " | ||||
| msgstr "Besitzen Sie kein Benutzerkonto?" | ||||
| msgstr "Besitzt du kein Benutzerkonto?" | ||||
| 
 | ||||
| #: hosting/templates/hosting/login.html:52 | ||||
| #: hosting/templates/hosting/signup.html:13 | ||||
| #: hosting/templates/hosting/signup.html:21 | ||||
| #: templates/hosting/login.html:37 templates/hosting/signup.html.py:13 | ||||
| #: templates/hosting/signup.html:21 views.py:223 | ||||
| msgid "Sign up" | ||||
| msgstr "Registrieren" | ||||
| 
 | ||||
| #: hosting/templates/hosting/login.html:54 | ||||
| #: templates/hosting/login.html:39 | ||||
| msgid "Forgot your password ? " | ||||
| msgstr "Passwort vergessen?" | ||||
| 
 | ||||
|  | @ -278,62 +271,59 @@ msgstr "Als gelesen markieren" | |||
| msgid "All notifications" | ||||
| msgstr "Alle Benachrichtigungen" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:16 | ||||
| #: templates/hosting/order_detail.html:24 | ||||
| msgid "Billed To:" | ||||
| msgstr "" | ||||
| #: templates/hosting/order_detail.html:23 | ||||
| msgid "Confirm Order" | ||||
| msgstr "Bestellung Bestätigen" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:26 | ||||
| #: templates/hosting/order_detail.html:29 | ||||
| msgid "Billed To:" | ||||
| msgstr "Rechnungsadresse" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:37 templates/hosting/orders.html:17 | ||||
| msgid "Date" | ||||
| msgstr "Datum" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:39 | ||||
| msgid "Status:" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:38 | ||||
| #: templates/hosting/order_detail.html:51 | ||||
| msgid "Payment Method:" | ||||
| msgstr "Bezahlmethode" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:49 | ||||
| #: templates/hosting/order_detail.html:62 | ||||
| msgid "Order summary" | ||||
| msgstr "Bestellungsübersicht" | ||||
| 
 | ||||
| #: hosting/templates/hosting/order_detail.html:52 | ||||
| #: hosting/templates/hosting/payment.html:17 | ||||
| #: hosting/templates/hosting/virtual_machine_detail.html:75 | ||||
| #: templates/hosting/order_detail.html:65 templates/hosting/payment.html:17 | ||||
| #: templates/hosting/virtual_machine_detail.html:76 | ||||
| msgid "Cores" | ||||
| msgstr "Prozessorkerne" | ||||
| 
 | ||||
| #: hosting/templates/hosting/order_detail.html:54 | ||||
| #: hosting/templates/hosting/payment.html:20 | ||||
| #: hosting/templates/hosting/virtual_machine_detail.html:81 | ||||
| #: templates/hosting/order_detail.html:54 | ||||
| #: templates/hosting/order_detail.html:67 templates/hosting/payment.html:20 | ||||
| #: templates/hosting/virtual_machine_detail.html:82 | ||||
| msgid "Memory" | ||||
| msgstr "Arbeitsspeicher" | ||||
| 
 | ||||
| #: hosting/templates/hosting/order_detail.html:56 | ||||
| #: hosting/templates/hosting/payment.html:23 | ||||
| #: templates/hosting/order_detail.html:69 templates/hosting/payment.html:23 | ||||
| msgid "Disk space" | ||||
| msgstr "Festplattenkapazität" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:58 | ||||
| #: templates/hosting/order_detail.html:71 | ||||
| msgid "Total" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: templates/hosting/order_detail.html:64 | ||||
| #: templates/hosting/order_detail.html:77 | ||||
| msgid "Finish Configuration" | ||||
| msgstr "Konfiguration beenden" | ||||
| 
 | ||||
| #: templates/hosting/orders.html:17 | ||||
| msgid "Date" | ||||
| msgstr "Datum" | ||||
| 
 | ||||
| #: templates/hosting/orders.html:18 | ||||
| msgid "Amount" | ||||
| msgstr "Betrag" | ||||
| 
 | ||||
| #: hosting/templates/hosting/orders.html:19 | ||||
| #: hosting/templates/hosting/virtual_machine_detail.html:30 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:44 | ||||
| #: hosting/templates/hosting/virtual_machines.html:31 | ||||
| #: templates/hosting/orders.html:19 templates/hosting/user_keys.html.py:27 | ||||
| #: templates/hosting/virtual_machine_detail.html:30 | ||||
| #: templates/hosting/virtual_machines.html:31 | ||||
| msgid "Status" | ||||
| msgstr "" | ||||
| 
 | ||||
|  | @ -349,59 +339,104 @@ msgstr "Abgelehnt" | |||
| msgid "View Detail" | ||||
| msgstr "Details anzeigen" | ||||
| 
 | ||||
| #: templates/hosting/orders.html:41 | ||||
| #: templates/hosting/orders.html:40 | ||||
| msgid "Cancel Order" | ||||
| msgstr "Bestellung stornieren" | ||||
| 
 | ||||
| #: templates/hosting/orders.html:56 | ||||
| msgid "Do You want do delete your order?" | ||||
| msgstr "Wollen Sie ihre Bestellung löschen?" | ||||
| #: templates/hosting/orders.html:55 | ||||
| msgid "Do You want to delete your order?" | ||||
| msgstr "Willst du deine Bestellung löschen?" | ||||
| 
 | ||||
| #: templates/hosting/orders.html:64 | ||||
| #: templates/hosting/orders.html:63 templates/hosting/user_keys.html.py:62 | ||||
| msgid "Close" | ||||
| msgstr "Schliessen" | ||||
| 
 | ||||
| #: templates/hosting/orders.html:66 | ||||
| #: templates/hosting/orders.html:65 templates/hosting/user_keys.html.py:64 | ||||
| msgid "Delete" | ||||
| msgstr "Löschen" | ||||
| 
 | ||||
| #: hosting/templates/hosting/payment.html:12 | ||||
| #: templates/hosting/payment.html:12 | ||||
| msgid "Billing Amount" | ||||
| msgstr "Rechnungsbetrag" | ||||
| 
 | ||||
| #: hosting/templates/hosting/payment.html:35 | ||||
| #: templates/hosting/payment.html:35 | ||||
| msgid "Billing Address" | ||||
| msgstr "Rechnungsadresse" | ||||
| 
 | ||||
| #: hosting/templates/hosting/payment.html:49 | ||||
| #: templates/hosting/payment.html:49 | ||||
| msgid "Payment Details" | ||||
| msgstr "Rechnungsdetails" | ||||
| 
 | ||||
| #: hosting/templates/hosting/payment.html:61 | ||||
| #: hosting/templates/hosting/payment.html:103 | ||||
| #: templates/hosting/payment.html:62 | ||||
| msgid "Submit Payment" | ||||
| msgstr "Betrag überweisen" | ||||
| 
 | ||||
| #: hosting/templates/hosting/payment.html:70 | ||||
| #: templates/hosting/payment.html:81 | ||||
| msgid "CARD NUMBER" | ||||
| msgstr "Kreditkartennummer" | ||||
| 
 | ||||
| #: hosting/templates/hosting/payment.html:75 | ||||
| #: templates/hosting/payment.html:86 | ||||
| msgid "Valid Card Number" | ||||
| msgstr "Gültige Kreditkartennummer" | ||||
| 
 | ||||
| #: hosting/templates/hosting/payment.html:84 | ||||
| #: templates/hosting/payment.html:95 | ||||
| msgid "EXPIRATION DATE" | ||||
| msgstr "Ablaufdatum" | ||||
| 
 | ||||
| #: hosting/templates/hosting/payment.html:95 | ||||
| #: templates/hosting/payment.html:106 | ||||
| msgid "CV CODE" | ||||
| msgstr "CV Code" | ||||
| 
 | ||||
| #: hosting/templates/hosting/reset_password.html:14 | ||||
| #: templates/hosting/reset_password.html:15 | ||||
| msgid "Reset your password" | ||||
| msgstr "Passwort zurücksetzen" | ||||
| 
 | ||||
| #: templates/hosting/user_key.html:11 templates/hosting/user_keys.html.py:9 | ||||
| msgid "Access Key" | ||||
| msgstr "Zugriffsschlüssel" | ||||
| 
 | ||||
| #: templates/hosting/user_key.html:24 | ||||
| msgid "Upload your own key. " | ||||
| msgstr "Lade deinen Key hoch" | ||||
| 
 | ||||
| #: templates/hosting/user_key.html:28 | ||||
| msgid "Or generate a new key pair." | ||||
| msgstr "Oder erstelle dein neues Keypaar" | ||||
| 
 | ||||
| #: templates/hosting/user_key.html:30 | ||||
| msgid "Generate Key Pair" | ||||
| msgstr "Schlüsselpaar generieren" | ||||
| 
 | ||||
| #: templates/hosting/user_key.html:40 | ||||
| msgid "Warning!" | ||||
| msgstr "Achtung!" | ||||
| 
 | ||||
| #: templates/hosting/user_key.html:40 | ||||
| msgid "You can download your SSH  private key once. Don't lost your key" | ||||
| msgstr "" | ||||
| "Du kannst deinen privaten SSH Schlüssel nur einmal herunterladen. Beware ihn " | ||||
| "sicher auf." | ||||
| 
 | ||||
| #: templates/hosting/user_keys.html:18 | ||||
| msgid "Add Key" | ||||
| msgstr "Schlüssel hinzufügen" | ||||
| 
 | ||||
| #: templates/hosting/user_keys.html:26 | ||||
| msgid "Created at" | ||||
| msgstr "Erstellt am" | ||||
| 
 | ||||
| #: templates/hosting/user_keys.html:42 | ||||
| #, fuzzy | ||||
| #| msgid "Delete" | ||||
| msgid "Delete Key" | ||||
| msgstr "Löschen" | ||||
| 
 | ||||
| #: templates/hosting/user_keys.html:55 | ||||
| #, fuzzy | ||||
| #| msgid "Do You want do delete your order?" | ||||
| msgid "Do You want to delete this key?" | ||||
| msgstr "Möchtest Du den Schlüssel löschen?" | ||||
| 
 | ||||
| #: templates/hosting/virtual_machine_detail.html:19 | ||||
| msgid "Settings" | ||||
| msgstr "Einstellungen" | ||||
|  | @ -446,68 +481,6 @@ msgstr "Sind Sie sicher, dass Sie ihre virtuelle Maschine beenden wollen " | |||
| msgid "Cancel" | ||||
| msgstr "Beenden" | ||||
| 
 | ||||
| #: templates/hosting/virtual_machine_key.html:11 | ||||
| msgid "Access Key" | ||||
| msgstr "Zugriffsschlüssel" | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:25 | ||||
| msgid "Upload your own key. " | ||||
| msgstr "Laden Sie ihren Schlüssel hoch" | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:29 | ||||
| msgid "Upload Key" | ||||
| msgstr "Schlüssel hochladen" | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:33 | ||||
| msgid "Or generate a new key pair." | ||||
| msgstr "Oder erstellen Sie ein neues Schlüsselpaar" | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:31 | ||||
| msgid "Generate Key Pair" | ||||
| msgstr "Schlüsselpaar generieren" | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:40 | ||||
| msgid "" | ||||
| "Use your created key to access to the machine. If you lost it, contact us." | ||||
| msgstr "" | ||||
| "Verwenden Sie Ihren privaten SSH Schlüssel um sich mit Ihren Maschinen zu " | ||||
| "verbinden. Falls Sie ihn verloren haben kontaktieren Sie uns." | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:43 | ||||
| msgid "Created at" | ||||
| msgstr "Erstellt am" | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:66 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:79 | ||||
| msgid "Warning!" | ||||
| msgstr "Achtung!" | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:66 | ||||
| msgid "You can download your SSH  private key once. Don't lost your key" | ||||
| msgstr "" | ||||
| "Sie können ihren privaten SSH Schlüssel nur einmal herunterladen. Bewaren " | ||||
| "Sie ihn sicher auf." | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:74 | ||||
| msgid "Copy to Clipboard" | ||||
| msgstr "Kopieren" | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:75 | ||||
| msgid "Download" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:79 | ||||
| msgid "" | ||||
| "Your SSH private key was already generated and downloaded, if you lost it, " | ||||
| "contact us. " | ||||
| msgstr "" | ||||
| "Ihr privater SSH Schlüssel wurde bereits generiert und heruntergeladen, " | ||||
| "falls Sie ihn verloren haben kontaktieren Sie uns." | ||||
| 
 | ||||
| #: hosting/templates/hosting/virtual_machine_key.html:82 | ||||
| msgid "Generate my key" | ||||
| msgstr "Generiere meinen Schlüssel" | ||||
| 
 | ||||
| #: templates/hosting/virtual_machines.html:9 | ||||
| msgid "Virtual Machines" | ||||
| msgstr "Virtuelle Maschinen" | ||||
|  | @ -522,8 +495,80 @@ msgstr "" | |||
| 
 | ||||
| #: templates/hosting/virtual_machines.html:29 | ||||
| msgid "Ipv4" | ||||
| msgstr "" | ||||
| msgstr "IPv4" | ||||
| 
 | ||||
| #: templates/hosting/virtual_machines.html:30 | ||||
| msgid "Ipv6" | ||||
| msgstr "IPv6" | ||||
| 
 | ||||
| #: views.py:213 views.py:232 | ||||
| msgid "login" | ||||
| msgstr "einloggen" | ||||
| 
 | ||||
| #: views.py:217 | ||||
| msgid "" | ||||
| "Thank you for signing up. We have sent an email to you. Please follow the " | ||||
| "instructions in it to activate your account. Once activated, you can login " | ||||
| "using" | ||||
| msgstr "" | ||||
| "Danke für deine Anmeldung. Wir haben dir eine E-Mail geschickt. Bitte folge " | ||||
| "den Anweisungen um deinen Account zu aktivieren. Danach kannst du dich über " | ||||
| "diesen" | ||||
| 
 | ||||
| #: views.py:218 views.py:243 | ||||
| msgid "Go back to" | ||||
| msgstr "Zurück" | ||||
| 
 | ||||
| #: views.py:233 | ||||
| msgid "Account activation" | ||||
| msgstr "Accountaktivierung" | ||||
| 
 | ||||
| #: views.py:236 | ||||
| msgid "Your account has been activated." | ||||
| msgstr "Dein Account wurde aktiviert." | ||||
| 
 | ||||
| #: views.py:237 | ||||
| msgid "You can now" | ||||
| msgstr "Du kannst dich nun" | ||||
| 
 | ||||
| #: views.py:242 | ||||
| msgid "Sorry. Your request is invalid." | ||||
| msgstr "Entschuldigung, deine Anfrage ist ungültig." | ||||
| 
 | ||||
| #: views.py:760 | ||||
| msgid "" | ||||
| "We could not find the requested VM. Please                            " | ||||
| "contact Data Center Light Support." | ||||
| msgstr "" | ||||
| 
 | ||||
| #~ msgid "Home" | ||||
| #~ msgstr "Home" | ||||
| 
 | ||||
| #~ msgid "Log in" | ||||
| #~ msgstr "Anmelden" | ||||
| 
 | ||||
| #~ msgid "You haven been logged out" | ||||
| #~ msgstr "Sie wurden abgmeldet" | ||||
| 
 | ||||
| #~ msgid "Upload Key" | ||||
| #~ msgstr "Schlüssel hochladen" | ||||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "Use your created key to access to the machine. If you lost it, contact us." | ||||
| #~ msgstr "" | ||||
| #~ "Verwende deinen privaten SSH Schlüssel, um dich mit deinen Maschinen zu " | ||||
| #~ "verbinden. Solltest du deinen privaten Schlüssel verloren haben, dann " | ||||
| #~ "kontaktiere uns." | ||||
| 
 | ||||
| #~ msgid "Copy to Clipboard" | ||||
| #~ msgstr "Kopieren" | ||||
| 
 | ||||
| #~ msgid "" | ||||
| #~ "Your SSH private key was already generated and downloaded, if you lost " | ||||
| #~ "it, contact us. " | ||||
| #~ msgstr "" | ||||
| #~ "Dein privater SSH Schlüssel wurde bereits generiert und heruntergeladen. " | ||||
| #~ "Falls du ihn verloren hast, kontaktiere uns." | ||||
| 
 | ||||
| #~ msgid "Generate my key" | ||||
| #~ msgstr "Generiere meinen Schlüssel" | ||||
|  |  | |||
|  | @ -270,7 +270,7 @@ h6 { | |||
| 
 | ||||
| .auth-box .section-heading{ | ||||
|     color: #5a5a5a; | ||||
|     padding-top: 20px; | ||||
|     padding-top: 30px; | ||||
|     padding-bottom: 5px; | ||||
|     text-align: center; | ||||
|     text-transform: uppercase; | ||||
|  | @ -320,9 +320,10 @@ h6 { | |||
| 
 | ||||
| .sign-up-message { | ||||
|     padding: 25px 30px 25px 30px; | ||||
|     text-align: justify; | ||||
|     text-align: center; | ||||
|     font-size: 18px; | ||||
|     line-height: 30px; | ||||
|     font-family: 'Lato' !important; | ||||
| } | ||||
| .sign-up-message a { | ||||
|     font-size: 18px; | ||||
|  |  | |||
|  | @ -46,7 +46,7 @@ | |||
| 
 | ||||
| 
 | ||||
|     <!-- Navigation --> | ||||
|     {% if request.user.is_authenticated %} | ||||
|      | ||||
|     <nav class="navbar navbar-default  navbar-fixed-top topnav" role="navigation"> | ||||
|         <div class="container topnav"> | ||||
|             <!-- Brand and toggle get grouped for better mobile display --> | ||||
|  | @ -59,6 +59,7 @@ | |||
|                 </button> | ||||
|                 <a class="navbar-brand topnav" href="{{ request.session.hosting_url}}"><img src="{% static 'datacenterlight/img/logo_black.svg' %}"></a> | ||||
|             </div> | ||||
|             {% if request.user.is_authenticated %} | ||||
|             <!-- 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"> | ||||
|  | @ -110,12 +111,13 @@ | |||
|                         </li>  --> | ||||
|                 </ul> | ||||
|             </div> | ||||
|             {% endif %} | ||||
|             <!-- /.navbar-collapse --> | ||||
|         </div> | ||||
|         <!-- /.container --> | ||||
|     </nav> | ||||
| 
 | ||||
|     {% endif %} | ||||
| 
 | ||||
| 
 | ||||
|     <div class="content-dashboard"> | ||||
|         {% block content %} | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ | |||
|     <div class="row">   | ||||
|         <div class="col-xs-12 col-md-8 col-md-offset-2"> | ||||
|     		<div class="invoice-title"> | ||||
|     			<h2>{% trans "Invoice"%}</h2><h3 class="pull-right">{% trans "Order #"%} {{order.id}}</h3> | ||||
|     			<h2>{% trans "Confirm Order"%}</h2><h3 class="pull-right">{% trans "Order #"%} {{order.id}}</h3> | ||||
|     		</div> | ||||
|     		<hr> | ||||
|     		<div class="row"> | ||||
|  | @ -34,7 +34,7 @@ | |||
|     			</div> | ||||
|                 <div class="col-xs-6 text-right"> | ||||
|                     <address> | ||||
|                         <strong>{% trans "Billed To:"%}</strong><br> | ||||
|                         <strong>{% trans "Date"%}:</strong><br> | ||||
|                         {{order.created_at}}<br><br> | ||||
|                         <strong>{% trans "Status:"%}</strong><br> | ||||
|                         <strong class="{% if order.status == 'Approved' %}text-success | ||||
|  |  | |||
|  | @ -15,7 +15,9 @@ from guardian.mixins import PermissionRequiredMixin | |||
| from stored_messages.settings import stored_messages_settings | ||||
| from stored_messages.models import Message | ||||
| from stored_messages.api import mark_read | ||||
| from django.utils.safestring import mark_safe | ||||
| from django.utils.safestring import mark_safe>>>>>>> master | ||||
| 246 | ||||
| 
 | ||||
| 
 | ||||
| from membership.models import CustomUser, StripeCustomer | ||||
| from utils.stripe_utils import StripeUtils | ||||
|  | @ -207,13 +209,17 @@ class SignupValidateView(TemplateView): | |||
| 
 | ||||
|     def get_context_data(self, **kwargs): | ||||
|         context = super(SignupValidateView, self).get_context_data(**kwargs) | ||||
|         login_url = reverse('hosting:login') | ||||
|         message = _("Thank you for signing up. We have sent an email to you. " | ||||
|                     "Please follow the instructions in it to activate your account. " | ||||
|                     "Once activated, you can login using ") + '<a href="' + login_url + '">login</a>' | ||||
|         section_title = 'Sign up' | ||||
|         login_url = '<a href="' + reverse('hosting:login') + '">' + str(_('login')) +'</a>' | ||||
|         home_url = '<a href="' + reverse('datacenterlight:index') + '">Data Center Light</a>' | ||||
|         message='{signup_success_message} {lurl}</a> \ | ||||
|                  <br />{go_back} {hurl}.'.format( | ||||
|                   signup_success_message = _('Thank you for signing up. We have sent an email to you. Please follow the instructions in it to activate your account. Once activated, you can login using'), | ||||
|                   go_back = _('Go back to'), | ||||
|                   lurl = login_url, | ||||
|                   hurl = home_url | ||||
|                   ) | ||||
|         context['message'] = mark_safe(message) | ||||
|         context['section_title'] = section_title | ||||
|         context['section_title'] = _('Sign up') | ||||
|         return context | ||||
| 
 | ||||
| 
 | ||||
|  | @ -223,13 +229,20 @@ class SignupValidatedView(SignupValidateView): | |||
|     def get_context_data(self, **kwargs): | ||||
|         context = super(SignupValidateView, self).get_context_data(**kwargs) | ||||
|         validated = CustomUser.validate_url(self.kwargs['validate_slug']) | ||||
|         login_url = reverse('hosting:login') | ||||
|         login_url = '<a href="' + reverse('hosting:login') + '">' + str(_('login')) +'</a>' | ||||
|         section_title=_('Account activation') | ||||
|         if validated: | ||||
|             message = _("Your account has been activated. You can now ") + '<a href="' + login_url + '">login</a>' | ||||
|             section_title = _('Account activation') | ||||
|             message='{account_activation_string} <br /> {login_string} {lurl}.'.format( | ||||
|                              account_activation_string = _("Your account has been activated."), | ||||
|                              login_string = _("You can now"), | ||||
|                              lurl = login_url) | ||||
|         else: | ||||
|             message = _("Sorry. Your request is invalid.") + '<a href="' + login_url + '">login</a>' | ||||
|             section_title = _('Account activation') | ||||
|             home_url = '<a href="' + reverse('datacenterlight:index') + '">Data Center Light</a>' | ||||
|             message = '{sorry_message} <br />{go_back_to} {hurl}'.format( | ||||
|                     sorry_message = _("Sorry. Your request is invalid."), | ||||
|                     go_back_to = _('Go back to'), | ||||
|                     hurl = home_url | ||||
|                 ) | ||||
|         context['message'] = mark_safe(message) | ||||
|         context['section_title'] = section_title | ||||
|         return context | ||||
|  |  | |||
							
								
								
									
										59
									
								
								membership/locale/de/LC_MESSAGES/django.po
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								membership/locale/de/LC_MESSAGES/django.po
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | |||
| # SOME DESCRIPTIVE TITLE. | ||||
| # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | ||||
| # This file is distributed under the same license as the PACKAGE package. | ||||
| # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | ||||
| # | ||||
| #, fuzzy | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: PACKAGE VERSION\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2017-06-23 02:05+0530\n" | ||||
| "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | ||||
| "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | ||||
| "Language-Team: LANGUAGE <LL@li.org>\n" | ||||
| "Language: \n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
| 
 | ||||
| #: forms.py:43 | ||||
| msgid "Name" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: forms.py:43 | ||||
| msgid "Card number" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: forms.py:43 | ||||
| msgid "Expiry date" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: forms.py:44 | ||||
| msgid "CCV" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: models.py:66 | ||||
| msgid "staff status" | ||||
| msgstr "" | ||||
| 
 | ||||
| #: models.py:68 | ||||
| msgid "Designates whether the user can log into this admin site." | ||||
| msgstr "" | ||||
| 
 | ||||
| #: models.py:90 | ||||
| msgid "Activate your " | ||||
| msgstr "Aktiviere deinen " | ||||
| 
 | ||||
| #: models.py:90 | ||||
| msgid " account" | ||||
| msgstr " Account" | ||||
| 
 | ||||
| #: models.py:198 | ||||
| msgid "Use this pattern(MM/YYYY)." | ||||
| msgstr "" | ||||
| 
 | ||||
| #: models.py:199 | ||||
| msgid "Wrong CCV number." | ||||
| msgstr "" | ||||
|  | @ -5,6 +5,8 @@ from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Permis | |||
| from django.contrib.auth.hashers import make_password | ||||
| from django.core.validators import RegexValidator | ||||
| from django.contrib.sites.models import Site | ||||
| from django.conf import settings | ||||
| from django.utils.crypto import get_random_string | ||||
| 
 | ||||
| from utils.stripe_utils import StripeUtils | ||||
| from utils.mailer import DigitalGlarusRegistrationMailer | ||||
|  | @ -73,7 +75,7 @@ class CustomUser(AbstractBaseUser, PermissionsMixin): | |||
|     REQUIRED_FIELDS = ['name', 'password'] | ||||
| 
 | ||||
|     @classmethod | ||||
|     def register(cls, name, password, email, app='digital_glarus', base_url=None): | ||||
|     def register(cls, name, password, email, app='digital_glarus', base_url=None, send_email=True): | ||||
|         user = cls.objects.filter(email=email).first() | ||||
|         if not user: | ||||
|             user = cls.objects.create_user(name=name, email=email, password=password) | ||||
|  | @ -82,19 +84,24 @@ class CustomUser(AbstractBaseUser, PermissionsMixin): | |||
|                     dg = DigitalGlarusRegistrationMailer(user.validation_slug) | ||||
|                     dg.send_mail(to=user.email) | ||||
|                 elif app == 'dcl': | ||||
|                     dcl_text = settings.DCL_TEXT | ||||
|                     dcl_from_address = settings.DCL_SUPPORT_FROM_ADDRESS | ||||
|                     user.is_active = False | ||||
|                     email_data = { | ||||
|                         'subject': _('Activate your Data Center Light account'), | ||||
|                         'from_address': '(Data Center Light) Data Center Light Support <support@datacenterlight.ch>', | ||||
|                         'to': user.email, | ||||
|                         'context': {'base_url': base_url, | ||||
|                                     'activation_link': reverse('hosting:validate', | ||||
|                                                                kwargs={'validate_slug': user.validation_slug})}, | ||||
|                         'template_name': 'user_activation', | ||||
|                         'template_path': 'datacenterlight/emails/' | ||||
|                     } | ||||
|                     email = BaseEmail(**email_data) | ||||
|                     email.send() | ||||
| 
 | ||||
|                     if send_email is True: | ||||
|                         email_data = { | ||||
|                             'subject': str(_('Activate your ')) + dcl_text + str(_(' account')), | ||||
|                             'from_address': settings.DCL_SUPPORT_FROM_ADDRESS, | ||||
|                             'to': user.email, | ||||
|                             'context': {'base_url'  : base_url,  | ||||
|                                         'activation_link' : reverse('hosting:validate', kwargs={'validate_slug': user.validation_slug}), | ||||
|                                         'dcl_text' : dcl_text | ||||
|                                         }, | ||||
|                             'template_name': 'user_activation', | ||||
|                             'template_path': 'datacenterlight/emails/' | ||||
|                         } | ||||
|                         email = BaseEmail(**email_data) | ||||
|                         email.send() | ||||
|                 return user | ||||
|             else: | ||||
|                 return None | ||||
|  | @ -114,6 +121,10 @@ class CustomUser(AbstractBaseUser, PermissionsMixin): | |||
|             return True | ||||
|         return False | ||||
| 
 | ||||
|     @classmethod | ||||
|     def get_random_password(cls): | ||||
|         return get_random_string(24) | ||||
| 
 | ||||
|     def is_superuser(self): | ||||
|         return False | ||||
| 
 | ||||
|  |  | |||
|  | @ -256,13 +256,14 @@ class OpenNebulaManager(): | |||
|                                    image=image, | ||||
|                                    image_uname=image_uname) | ||||
| 
 | ||||
| 
 | ||||
|         vm_specs += "<CONTEXT>" | ||||
|         if ssh_key: | ||||
|             vm_specs += """<CONTEXT> | ||||
|                     <SSH_PUBLIC_KEY>{ssh}</SSH_PUBLIC_KEY> | ||||
|                     <NETWORK>YES</NETWORK> | ||||
|             vm_specs += "<SSH_PUBLIC_KEY>{ssh}</SSH_PUBLIC_KEY>".format(ssh=ssh_key) | ||||
|         vm_specs += """<NETWORK>YES</NETWORK> | ||||
|                    </CONTEXT> | ||||
|                               </TEMPLATE> | ||||
|                 """.format(ssh=ssh_key) | ||||
|                 </TEMPLATE> | ||||
|                 """ | ||||
|         vm_id = self.client.call(oca.VmTemplate.METHODS['instantiate'], | ||||
|                                  template.id, | ||||
|                                  '', | ||||
|  | @ -275,6 +276,13 @@ class OpenNebulaManager(): | |||
|             'release', | ||||
|             vm_id | ||||
|         ) | ||||
|          | ||||
|         if vm_name is not None: | ||||
|             self.oneadmin_client.call( | ||||
|                 'vm.rename', | ||||
|                 vm_id, | ||||
|                 vm_name | ||||
|             ) | ||||
|         return vm_id | ||||
| 
 | ||||
|     def delete_vm(self, vm_id): | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue