<script type="text/javascript">
$(document).ready(function() {
var type = $("input[name='type']");
+ var vat_number= $("input[name='vat_number']");
var amount = $("input[name='amount']");
var currency = $("input[name='currency']");
var frequency = $("input[name='frequency']");
var submit = $("#donate");
var form = $("#donation-form");
+ // A cache for VAT numbers
+ var vat_numbers = {};
+ var check_vat_number;
+
// Adjust form to default currency
if (currency.val() == "EUR") {
$(".USD").hide();
}
});
+ // Check VAT numbers
+ vat_number.on("change keyup mouseup", function() {
+ if (check_vat_number)
+ clearTimeout(check_vat_number);
+
+ var input = $(this);
+ var value = input.val();
+
+ console.log(vat_numbers);
+
+ // Fetch the parent control element
+ var control = input.closest(".control");
+
+ // Remove all classes
+ input.removeClass("is-success is-danger");
+
+ // Do nothing if there is no data
+ if (!value)
+ return;
+
+ // Show that this is now processing
+ control.addClass("is-loading");
+
+ // Called when we have an API response
+ var finished = function(result) {
+ // We are no longer processing
+ control.removeClass("is-loading");
+
+ if (result.valid) {
+ input.addClass("is-success");
+ } else {
+ input.addClass("is-danger");
+ }
+
+ // Cache the result if not already done do
+ if (!vat_numbers[value])
+ vat_numbers[value] = result;
+
+ form.trigger("change");
+ };
+
+ console.log(vat_numbers[value]);
+
+ // Deliver there cached result if available
+ if (vat_numbers[value])
+ return finished(vat_numbers[value]);
+
+ // Send API request after 250ms to avoid hammering it and running into the ratelimiting
+ setTimeout(function() {
+ $.get("/donate/check-vat-number", { vat_number : value }, finished);
+ }, 250);
+ });
+
// Disable all submit buttons after the form has been submitted
form.one("submit", function() {
submit.prop("disabled", true);
(r"/donate", donate.DonateHandler),
(r"/donate/thank-you", donate.ThankYouHandler),
(r"/donate/error", donate.ErrorHandler),
+ (r"/donate/check-vat-number", donate.CheckVATNumberHandler),
# Lists
(r"/lists", lists.IndexHandler),
class ErrorHandler(base.BaseHandler):
def get(self):
self.render("donate/error.html")
+
+
+class CheckVATNumberHandler(base.APIHandler):
+ @base.ratelimit(minutes=5, requests=25)
+ async def get(self):
+ vat_number = self.get_argument("vat_number")
+
+ # Send request
+ response = await self.backend.zeiterfassung.send_request(
+ "/api/v1/organizations/check-vat-number", vat_number=vat_number)
+
+ # Forward the response
+ self.finish(response)