work on order form
This commit is contained in:
parent
706df620e5
commit
f186d1cf5f
34
mail.go
34
mail.go
|
|
@ -76,3 +76,37 @@ wo-bisch.ch`
|
|||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func sendOrderEmail(username, body string) {
|
||||
c, err := smtp.Dial("127.0.0.1:25")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer c.Close()
|
||||
// Set the sender and recipient.
|
||||
c.Mail("info@wo-bisch.ch")
|
||||
c.Rcpt(username)
|
||||
// Send the email body.
|
||||
wc, err := c.Data()
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer wc.Close()
|
||||
mail_message := "To: " + username + `
|
||||
Subject: Bestelleingang auf https://wo-bisch.ch
|
||||
|
||||
Lieber Administrator
|
||||
|
||||
Soeben ist eine Bestellung eingegangen, bitte pruefen:
|
||||
|
||||
` + body + `
|
||||
|
||||
Mit freundlichen Grüssen
|
||||
--
|
||||
wo-bisch.ch`
|
||||
|
||||
buf := bytes.NewBufferString(mail_message)
|
||||
if _, err = buf.WriteTo(wc); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
1
main.go
1
main.go
|
|
@ -94,6 +94,7 @@ func main() {
|
|||
http.HandleFunc("/logout", logoutHandler)
|
||||
http.HandleFunc("/confirm", confirmHandler)
|
||||
http.HandleFunc("/metrics", metricsHandler)
|
||||
http.HandleFunc("/order", orderHandler)
|
||||
http.HandleFunc("/save_tracker_settings", save_tracker_settingsHandler)
|
||||
http.HandleFunc("/getstripepaymentintent", getstripepaymentintentHandler)
|
||||
http.HandleFunc("/stripewebhook", stripeWebhookHandler)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type order_struct struct {
|
||||
Quantity string
|
||||
Email string
|
||||
DeliveryAdress string
|
||||
BillingAdress string
|
||||
}
|
||||
|
||||
// order handler
|
||||
func orderHandler(response http.ResponseWriter, request *http.Request) {
|
||||
body, err := ioutil.ReadAll(request.Body)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
log.Println(string(body))
|
||||
sendOrderEmail("joerg.lehmann@nbit.ch", string(body))
|
||||
var t order_struct
|
||||
err = json.Unmarshal(body, &t)
|
||||
if err != nil {
|
||||
log.Println("Error, invalid json: %v", err)
|
||||
}
|
||||
response.Header().Set("Content-Type", "text/json; charset=utf-8")
|
||||
fmt.Fprintln(response, string(body))
|
||||
}
|
||||
|
|
@ -2,6 +2,12 @@
|
|||
<script src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
|
||||
<script src="static/js/order.js"></script>
|
||||
|
||||
<div id="success_message" class="message is-success is-hidden">
|
||||
<div class="message-body">
|
||||
<p class="has-text-weight-bold">Vielen Dank!</p>
|
||||
<p>Ihre Bestellung wird gepüft. Sie erhalten die Rechnung per E-Mail. Nach Zahlungseingang wird der Zugang eingerichtet und sie erhalten den/die GPS Tracker per Post mit einem Zugangspasswort.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="modal" class="modal is-active">
|
||||
<div class="modal-background"></div>
|
||||
<div class="modal-card">
|
||||
|
|
@ -66,6 +72,7 @@
|
|||
<div class="control">
|
||||
<textarea class="textarea has-fixed-size" rows="5" maxlength="250" id="delivery_address" placeholder="Lieferadresse" autocomplete="off"></textarea>
|
||||
</div>
|
||||
<p id="delivery_address_errormsg" class="help is-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="column is-half">
|
||||
|
|
@ -74,17 +81,25 @@
|
|||
<div class="control">
|
||||
<textarea class="textarea has-fixed-size" rows="5" maxlength="250" id="billing_address" placeholder="leer lassen, wenn wie Lieferadresse" autocomplete="off"></textarea>
|
||||
</div>
|
||||
<p id="billing_address_errormsg" class="help is-danger"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="field">
|
||||
<div class="control">
|
||||
<label class="checkbox">
|
||||
<input type="checkbox">
|
||||
Ich stimme den <a href="#">Geschäftsbedingungen</a> zu
|
||||
<label id="accept_terms_label" class="checkbox">
|
||||
<input id="accept_terms" type="checkbox">
|
||||
Ich stimme den <a href="static/files/wo-bisch-AGBs.pdf" target="_blank">Geschäftsbedingungen</a> zu
|
||||
</label>
|
||||
</div>
|
||||
<p id="accept_terms_errormsg" class="help is-danger"></p>
|
||||
</div>
|
||||
<div id="error_message" class="message is-danger is-hidden">
|
||||
<div class="message-body">
|
||||
<p class="has-text-weight-bold">Oops!</p>
|
||||
<p>Da ist etwas schiefgegangen... Bitte melden bei Kontaktadresse!</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<footer class="modal-card-foot">
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -1,13 +1,15 @@
|
|||
function validate(what, text) {
|
||||
console.log('Validate '+what);
|
||||
if (what == 'quantity') {
|
||||
var re = /^[0-9]{1,2}$/;
|
||||
} else if (what == 'email') {
|
||||
var re = /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$/;
|
||||
} else if (what == 'delivery_address') {
|
||||
var re = /^notpermitted$/;
|
||||
var re = /^(?:.*(?:\r\n|\n|\r)){2,}/;
|
||||
} else if (what == 'billing_address') {
|
||||
var re = /^notpermitted$/;
|
||||
if (text == '') {
|
||||
return true;
|
||||
}
|
||||
var re = /^(?:.*(?:\r\n|\n|\r)){2,}/;
|
||||
} else {
|
||||
var re = /^notpermitted$/;
|
||||
}
|
||||
|
|
@ -15,14 +17,14 @@ function validate(what, text) {
|
|||
}
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
console.log("I am ready!!!");
|
||||
$("#quantity_exclamation").hide();
|
||||
$("#email_exclamation").hide();
|
||||
|
||||
$("#modal-save").click(function() {
|
||||
// Validation Code
|
||||
var is_valid = true;
|
||||
$("#success_message").addClass('is-hidden');
|
||||
$("#error_message").addClass('is-hidden');
|
||||
if (!validate('quantity',$('#quantity').val())) {
|
||||
$('#quantity_errormsg').html('Ungültige Anzahl');
|
||||
$("#quantity").addClass("is-danger");
|
||||
|
|
@ -45,46 +47,72 @@ $(document).ready(function () {
|
|||
$("#email_exclamation").hide();
|
||||
}
|
||||
|
||||
if (!validate('delivery_address',$('#delivery_address').val())) {
|
||||
$('#delivery_address_errormsg').html('Ungültige Adresse');
|
||||
$("#delivery_address").addClass("is-danger");
|
||||
is_valid = false;
|
||||
} else {
|
||||
$('#delivery_address_errormsg').html('');
|
||||
$("#delivery_address").removeClass("is-danger");
|
||||
}
|
||||
|
||||
if (!validate('billing_address',$('#billing_address').val())) {
|
||||
$('#billing_address_errormsg').html('Ungültige Adresse');
|
||||
$("#billing_address").addClass("is-danger");
|
||||
is_valid = false;
|
||||
} else {
|
||||
$('#billing_address_errormsg').html('');
|
||||
$("#billing_address").removeClass("is-danger");
|
||||
}
|
||||
|
||||
|
||||
if (!($('#accept_terms').is(':checked'))) {
|
||||
$('#accept_terms_errormsg').html('Bitte zustimmen');
|
||||
$("#accept_terms_label").addClass("has-text-danger");
|
||||
is_valid = false;
|
||||
} else {
|
||||
$('#accept_terms_errormsg').html('');
|
||||
$("#accept_terms_label").removeClass("has-text-danger");
|
||||
}
|
||||
|
||||
if (!(is_valid)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: "order_tracker",
|
||||
type: "post", //send it through post method
|
||||
url: "order",
|
||||
type: "POST", //send it through post method
|
||||
dataType: "json",
|
||||
data: {
|
||||
quantity: $('#quantity').val(),
|
||||
email: $('#email').val(),
|
||||
delivery_address: $("#delivery_address").val(),
|
||||
billing_address: $("#billing_address").val()
|
||||
},
|
||||
data: JSON.stringify({ "quantity": $('#quantity').val(),
|
||||
"email": $('#email').val(),
|
||||
delivery_address: $("#delivery_address").val(),
|
||||
billing_address: $("#billing_address").val()
|
||||
}
|
||||
),
|
||||
success: function(response) {
|
||||
console.log('order success');
|
||||
if (response.rc == 0) {
|
||||
console.log('response.rc == 0');
|
||||
}
|
||||
console.log("SUCCESS");
|
||||
console.log(response);
|
||||
$("#modal").removeClass("is-active");
|
||||
$("#success_message").removeClass("is-hidden");
|
||||
},
|
||||
error: function(xhr) {
|
||||
console.log('order error');
|
||||
//Do Something to handle error
|
||||
console.log("ERROR");
|
||||
console.log(xhr);
|
||||
$("#modal").removeClass("is-active");
|
||||
$("#error_message").removeClass("is-hidden");
|
||||
}
|
||||
});
|
||||
|
||||
console.log("order");
|
||||
$("#modal").removeClass("is-active");
|
||||
|
||||
});
|
||||
|
||||
$("#modal-close").click(function () {
|
||||
$("#modal").removeClass("is-active");
|
||||
window.location.replace("/");
|
||||
});
|
||||
|
||||
function callback() {
|
||||
console.log("Callback Funktion wird aufgerufen");
|
||||
$('#quantity').focus().select();
|
||||
}
|
||||
|
||||
setTimeout(callback, 10);
|
||||
});
|
||||
|
||||
$(window).on('load', function() {
|
||||
console.log("Window loded...");
|
||||
$('#quantity').focus().select();
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue