work on order form

This commit is contained in:
Joerg Lehmann 2021-04-03 11:43:35 +02:00
parent 706df620e5
commit f186d1cf5f
6 changed files with 142 additions and 31 deletions

34
mail.go
View File

@ -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)
}
}

View File

@ -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)

33
order.go Normal file
View File

@ -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))
}

View File

@ -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&uuml;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&auml;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&auml;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.

View File

@ -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&uuml;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&uuml;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&uuml;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();
});