Count down to cart expiry

This commit is contained in:
Raphael Michel
2016-09-09 15:35:35 +02:00
parent 037aa7fc59
commit 1ed43ead3f
8 changed files with 98 additions and 20 deletions

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-08 21:20+0000\n"
"PO-Revision-Date: 2016-09-08 23:26+0200\n"
"POT-Creation-Date: 2016-09-09 13:32+0000\n"
"PO-Revision-Date: 2016-09-09 15:33+0200\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: \n"
"Language: de\n"
@@ -54,3 +54,14 @@ msgstr "Unbekannter Fehler."
#: static/pretixpresale/js/ui/asynctask.js:61
msgid "We are processing your request…"
msgstr "Wir verarbeiten deine Anfrage…"
#: static/pretixpresale/js/ui/cart.js:10
msgid "The items in your cart are no longer reserved for you."
msgstr "Die Produkte in Ihrem Warenkorb sind nicht mehr für Sie reserviert."
#: static/pretixpresale/js/ui/cart.js:14
#, javascript-format
msgid "The items in your cart are reserved for you for one minute."
msgid_plural "The items in your cart are reserved for you for {num} minutes."
msgstr[0] "Die Produkte in Ihrem Warenkorb sind noch eine Minute für Sie reserviert."
msgstr[1] "Die Produkte in Ihrem Warenkorb sind noch {num} Minuten für Sie reserviert."

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-09-08 21:20+0000\n"
"PO-Revision-Date: 2016-09-08 23:27+0200\n"
"POT-Creation-Date: 2016-09-09 13:32+0000\n"
"PO-Revision-Date: 2016-09-09 15:33+0200\n"
"Last-Translator: Raphael Michel <michel@rami.io>\n"
"Language-Team: \n"
"Language: de\n"
@@ -54,3 +54,14 @@ msgstr "Unbekannter Fehler."
#: static/pretixpresale/js/ui/asynctask.js:61
msgid "We are processing your request…"
msgstr "Wir verarbeiten deine Anfrage…"
#: static/pretixpresale/js/ui/cart.js:10
msgid "The items in your cart are no longer reserved for you."
msgstr "Die Produkte in deinem Warenkorb sind nicht mehr für dich reserviert."
#: static/pretixpresale/js/ui/cart.js:14
#, javascript-format
msgid "The items in your cart are reserved for you for one minute."
msgid_plural "The items in your cart are reserved for you for {num} minutes."
msgstr[0] "Die Produkte in deinem Warenkorb sind noch eine Minute für dich reserviert."
msgstr[1] "Die Produkte in deinem Warenkorb sind noch {num} Minuten für dich reserviert."

View File

@@ -20,14 +20,16 @@
<script type="text/javascript" src="{% static "jquery/js/jquery-2.1.1.min.js" %}"></script>
<script type="text/javascript" src="{% static "js/jquery.formset.js" %}"></script>
<script type="text/javascript" src="{% static "bootstrap/js/bootstrap.js" %}"></script>
<script type="text/javascript" src="{% static "moment/moment-with-locales.min.js" %}"></script>
<script type="text/javascript" src="{% static "pretixpresale/js/ui/main.js" %}"></script>
<script type="text/javascript" src="{% static "pretixpresale/js/ui/asynctask.js" %}"></script>
<script type="text/javascript" src="{% static "pretixpresale/js/ui/cart.js" %}"></script>
{% endcompress %}
{{ html_head|safe }}
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" href="{% static "pretixbase/img/favicon.ico" %}">
</head>
<body>
<body data-locale="{{ request.LANGUAGE_CODE }}">
{% block above %}
{% endblock %}
<div class="container">

View File

@@ -25,13 +25,15 @@
{% include "pretixpresale/event/fragment_cart.html" with cart=cart event=request.event editable=False %}
<div class="row-fluid">
<div class="col-md-6 col-xs-12">
{% if cart.minutes_left > 0 %}
<em>{% blocktrans trimmed with minutes=cart.minutes_left %}
The items in your cart are reserved for you for {{ minutes }} minutes.
{% endblocktrans %}</em>
{% else %}
<em>{% trans "The items in your cart are no longer reserved for you." %}</em>
{% endif %}
<em id="cart-deadline" data-expires="{{ cart.first_expiry|date:"Y-m-d H:i:sO" }}">
{% if cart.minutes_left > 0 %}
{% blocktrans trimmed with minutes=cart.minutes_left %}
The items in your cart are reserved for you for {{ minutes }} minutes.
{% endblocktrans %}
{% else %}
{% trans "The items in your cart are no longer reserved for you." %}
{% endif %}
</em>
</div>
<div class="clearfix"></div>
</div>

View File

@@ -17,13 +17,15 @@
{% include "pretixpresale/event/fragment_cart.html" with cart=cart event=request.event editable=True %}
<div class="row-fluid">
<div class="col-md-6 col-xs-12">
{% if cart.minutes_left > 0 %}
<em>{% blocktrans trimmed with minutes=cart.minutes_left %}
The items in your cart are reserved for you for {{ minutes }} minutes.
{% endblocktrans %}</em>
{% else %}
<em>{% trans "The items in your cart are no longer reserved for you." %}</em>
{% endif %}
<em id="cart-deadline" data-expires="{{ cart.first_expiry|date:"Y-m-d H:i:sO" }}">
{% if cart.minutes_left > 0 %}
{% blocktrans trimmed with minutes=cart.minutes_left %}
The items in your cart are reserved for you for {{ minutes }} minutes.
{% endblocktrans %}
{% else %}
{% trans "The items in your cart are no longer reserved for you." %}
{% endif %}
</em>
</div>
<div class="col-md-4 col-md-offset-2 col-xs-12">
<a class="btn btn-block btn-primary btn-lg"

View File

@@ -69,8 +69,10 @@ class CartMixin:
payment_fee_tax_rate = payment_fee_tax_rate if payment_fee_tax_rate is not None else self.request.event.settings.tax_rate_default
try:
minutes_left = max(min(p.expires for p in positions) - now(), timedelta()).seconds // 60 if positions else 0
first_expiry = min(p.expires for p in positions) if positions else now()
minutes_left = max(first_expiry - now(), timedelta()).seconds // 60
except AttributeError:
first_expiry = None
minutes_left = None
return {
@@ -81,6 +83,7 @@ class CartMixin:
'payment_fee_tax_rate': payment_fee_tax_rate,
'answers': answers,
'minutes_left': minutes_left,
'first_expiry': first_expiry
}
def get_payment_fee(self, total):

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,37 @@
/*global $,django */
var cart = {
_deadline: null,
_deadline_interval: null,
draw_deadline: function () {
var diff = Math.floor(cart._deadline.diff(moment()) / 1000 / 60);
if (diff < 0) {
$("#cart-deadline").text(django.gettext("The items in your cart are no longer reserved for you."));
window.clearInterval(cart._deadline_interval);
} else {
$("#cart-deadline").text(django.ngettext(
"The items in your cart are reserved for you for one minute.",
"The items in your cart are reserved for you for {num} minutes.",
diff
).replace(/\{num\}/g, diff));
}
},
init: function () {
"use strict";
cart._deadline = moment($("#cart-deadline").attr("data-expires"));
cart._deadline_interval = window.setInterval(cart.draw_deadline, 2000);
cart.draw_deadline();
}
};
$(function () {
"use strict";
moment.locale($("body").attr("data-locale").substr(0, 2));
if ($("#cart-deadline").length) {
cart.init();
}
});