mirror of
https://github.com/nanoy42/coope
synced 2024-12-23 23:43:47 +00:00
Direct reloads
This commit is contained in:
parent
ed60e58002
commit
4273692005
6 changed files with 160 additions and 4 deletions
|
@ -61,7 +61,6 @@
|
||||||
</header>
|
</header>
|
||||||
<div class="row uniform">
|
<div class="row uniform">
|
||||||
<div class="12u$">
|
<div class="12u$">
|
||||||
<a class="button small" href=""><i class="fa fa-times"></i> Annuler</a><br><br>
|
|
||||||
{{gestion_form}}
|
{{gestion_form}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -84,7 +83,7 @@
|
||||||
<td id="balance">0€</td>
|
<td id="balance">0€</td>
|
||||||
<td id="totalAmount">0€</td>
|
<td id="totalAmount">0€</td>
|
||||||
<td id="totalAfter">0€</td>
|
<td id="totalAfter">0€</td>
|
||||||
<td>{% for pm in pay_buttons %}<button class="btn small pay_button" data-payment="{{pm.pk}}"><i class="fa fa-{{pm.icon}}"></i> {{pm.name}}</button> {% endfor %}</td>
|
<td>{% for pm in pay_buttons %}<button class="btn small pay_button" data-payment="{{pm.pk}}"><i class="fa fa-{{pm.icon}}"></i> {{pm.name}}</button> {% endfor %} <a class="button small" href="" tooltip="lol"><i class="fa fa-times"></i> Annuler</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
@ -127,6 +126,25 @@
|
||||||
{% if not cotisations|divisibleby:3 %}
|
{% if not cotisations|divisibleby:3 %}
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<tr style="text-align:center; font-weight:bold;">
|
||||||
|
<td colspan="1">Rechargements</td>
|
||||||
|
<td>
|
||||||
|
<div class="dropdown">
|
||||||
|
<button onclick="dropdown('myDropdown1')" class="dropbtn small">Rechargement 1€</button>
|
||||||
|
<div id="myDropdown1" class="dropdown-content">
|
||||||
|
{% for pm in pay_buttons %}{% if not pm.affect_balance%}<a class="reload" data-payment="{{pm.pk}}" data-payment-name="{{pm.name}}" target="1"><i class="fa fa-{{pm.icon}}"></i> {{pm.name}}</a> {% endif %}{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<div class="dropdown">
|
||||||
|
<button onclick="dropdown('myDropdown2')" class="dropbtn small" target="myDropdown2">Rechargement 10€</button>
|
||||||
|
<div id="myDropdown2" class="dropdown-content">
|
||||||
|
{% for pm in pay_buttons %}{% if not pm.affect_balance%}<a class="reload" data-payment="{{pm.pk}}" data-payment-name="{{pm.name}}" target="10"><i class="fa fa-{{pm.icon}}"></i> {{pm.name}}</a> {% endif %}{% endfor %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr style="text-align:center; font-weight:bold;"><td colspan="4">Bières pression</td></tr>
|
<tr style="text-align:center; font-weight:bold;"><td colspan="4">Bières pression</td></tr>
|
||||||
{% for product in bieresPression %}
|
{% for product in bieresPression %}
|
||||||
{% if forloop.counter0|divisibleby:3 %}
|
{% if forloop.counter0|divisibleby:3 %}
|
||||||
|
|
|
@ -87,9 +87,18 @@ def order(request):
|
||||||
menus = json.loads(request.POST["menus"])
|
menus = json.loads(request.POST["menus"])
|
||||||
listPintes = json.loads(request.POST["listPintes"])
|
listPintes = json.loads(request.POST["listPintes"])
|
||||||
cotisations = json.loads(request.POST['cotisations'])
|
cotisations = json.loads(request.POST['cotisations'])
|
||||||
|
reloads = json.loads(request.POST['reloads'])
|
||||||
gp,_ = GeneralPreferences.objects.get_or_create(pk=1)
|
gp,_ = GeneralPreferences.objects.get_or_create(pk=1)
|
||||||
if (not order) and (not menus) and (not cotisations):
|
if (not order) and (not menus) and (not cotisations):
|
||||||
raise Exception("Pas de commande.")
|
raise Exception("Pas de commande.")
|
||||||
|
if(reloads):
|
||||||
|
for reload in reloads:
|
||||||
|
reload_payment_method = get_object_or_404(PaymentMethod, pk=reload["payment_method"])
|
||||||
|
reload_amount = Decimal(reload["value"])*Decimal(reload["quantity"])
|
||||||
|
reload_entry = Reload(customer=user, amount=reload_amount, PaymentMethod=reload_payment_method, coopeman=request.user)
|
||||||
|
reload_entry.save()
|
||||||
|
user.profile.credit += reload_amount
|
||||||
|
user.save()
|
||||||
if(cotisations):
|
if(cotisations):
|
||||||
for co in cotisations:
|
for co in cotisations:
|
||||||
cotisation = Cotisation.objects.get(pk=co['pk'])
|
cotisation = Cotisation.objects.get(pk=co['pk'])
|
||||||
|
@ -639,6 +648,15 @@ def openKeg(request):
|
||||||
keg.stockHold -= 1
|
keg.stockHold -= 1
|
||||||
keg.is_active = True
|
keg.is_active = True
|
||||||
keg.save()
|
keg.save()
|
||||||
|
if keg.pinte:
|
||||||
|
keg.pinte.is_active = True
|
||||||
|
keg.pinte.save()
|
||||||
|
if keg.demi:
|
||||||
|
keg.demi.is_active = True
|
||||||
|
keg.demi.save()
|
||||||
|
if keg.galopin:
|
||||||
|
keg.galopin.is_active = True
|
||||||
|
keg.galopin.save()
|
||||||
messages.success(request, "Le fut a bien été percuté")
|
messages.success(request, "Le fut a bien été percuté")
|
||||||
return redirect(reverse('gestion:kegsList'))
|
return redirect(reverse('gestion:kegsList'))
|
||||||
return render(request, "form.html", {"form": form, "form_title":"Percutage d'un fût", "form_button":"Percuter", "form_button_icon": "fill-drip"})
|
return render(request, "form.html", {"form": form, "form_title":"Percutage d'un fût", "form_button":"Percuter", "form_button_icon": "fill-drip"})
|
||||||
|
@ -665,6 +683,15 @@ def openDirectKeg(request, pk):
|
||||||
keg.stockHold -= 1
|
keg.stockHold -= 1
|
||||||
keg.is_active = True
|
keg.is_active = True
|
||||||
keg.save()
|
keg.save()
|
||||||
|
if keg.pinte:
|
||||||
|
keg.pinte.is_active = True
|
||||||
|
keg.pinte.save()
|
||||||
|
if keg.demi:
|
||||||
|
keg.demi.is_active = True
|
||||||
|
keg.demi.save()
|
||||||
|
if keg.galopin:
|
||||||
|
keg.galopin.is_active = True
|
||||||
|
keg.galopin.save()
|
||||||
messages.success(request, "Le fût a bien été percuté")
|
messages.success(request, "Le fût a bien été percuté")
|
||||||
else:
|
else:
|
||||||
messages.error(request, "Il n'y a pas de fût en stock")
|
messages.error(request, "Il n'y a pas de fût en stock")
|
||||||
|
@ -686,6 +713,15 @@ def closeKeg(request):
|
||||||
kegHistory.save()
|
kegHistory.save()
|
||||||
keg.is_active = False
|
keg.is_active = False
|
||||||
keg.save()
|
keg.save()
|
||||||
|
if keg.pinte:
|
||||||
|
keg.pinte.is_active = False
|
||||||
|
keg.pinte.save()
|
||||||
|
if keg.demi:
|
||||||
|
keg.demi.is_active = False
|
||||||
|
keg.demi.save()
|
||||||
|
if keg.galopin:
|
||||||
|
keg.galopin.is_active = False
|
||||||
|
keg.galopin.save()
|
||||||
messages.success(request, "Le fût a bien été fermé")
|
messages.success(request, "Le fût a bien été fermé")
|
||||||
return redirect(reverse('gestion:kegsList'))
|
return redirect(reverse('gestion:kegsList'))
|
||||||
return render(request, "form.html", {"form": form, "form_title":"Fermeture d'un fût", "form_button":"Fermer le fût", "form_button_icon": "fill"})
|
return render(request, "form.html", {"form": form, "form_title":"Fermeture d'un fût", "form_button":"Fermer le fût", "form_button_icon": "fill"})
|
||||||
|
@ -708,6 +744,15 @@ def closeDirectKeg(request, pk):
|
||||||
kegHistory.save()
|
kegHistory.save()
|
||||||
keg.is_active = False
|
keg.is_active = False
|
||||||
keg.save()
|
keg.save()
|
||||||
|
if keg.pinte:
|
||||||
|
keg.pinte.is_active = False
|
||||||
|
keg.pinte.save()
|
||||||
|
if keg.demi:
|
||||||
|
keg.demi.is_active = False
|
||||||
|
keg.demi.save()
|
||||||
|
if keg.galopin:
|
||||||
|
keg.galopin.is_active = False
|
||||||
|
keg.galopin.save()
|
||||||
messages.success(request, "Le fût a bien été fermé")
|
messages.success(request, "Le fût a bien été fermé")
|
||||||
else:
|
else:
|
||||||
messages.error(request, "Le fût n'est pas ouvert")
|
messages.error(request, "Le fût n'est pas ouvert")
|
||||||
|
|
28
staticfiles/dropdown.css
Normal file
28
staticfiles/dropdown.css
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
/* The container <div> - needed to position the dropdown content */
|
||||||
|
.dropdown {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Dropdown Content (Hidden by Default) */
|
||||||
|
.dropdown-content {
|
||||||
|
display: none;
|
||||||
|
position: absolute;
|
||||||
|
background-color: #f1f1f1;
|
||||||
|
min-width: 160px;
|
||||||
|
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Links inside the dropdown */
|
||||||
|
.dropdown-content a {
|
||||||
|
color: black;
|
||||||
|
padding: 12px 16px;
|
||||||
|
text-decoration: none;
|
||||||
|
display: block;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
/* Show the dropdown menu (use JS to add this class to the .dropdown-content container when the user clicks on the dropdown button) */
|
||||||
|
.show {
|
||||||
|
display:block;
|
||||||
|
}
|
27
staticfiles/dropdown.js
Normal file
27
staticfiles/dropdown.js
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
/* When the user clicks on the button,
|
||||||
|
toggle between hiding and showing the dropdown content */
|
||||||
|
function dropdown(target) {
|
||||||
|
var dropdowns = document.getElementsByClassName("dropdown-content");
|
||||||
|
var i;
|
||||||
|
for (i = 0; i < dropdowns.length; i++) {
|
||||||
|
var openDropdown = dropdowns[i];
|
||||||
|
if (openDropdown.classList.contains('show')) {
|
||||||
|
openDropdown.classList.remove('show');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.getElementById(target).classList.toggle("show");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close the dropdown menu if the user clicks outside of it
|
||||||
|
window.onclick = function(event) {
|
||||||
|
if (!event.target.matches('.dropbtn')) {
|
||||||
|
var dropdowns = document.getElementsByClassName("dropdown-content");
|
||||||
|
var i;
|
||||||
|
for (i = 0; i < dropdowns.length; i++) {
|
||||||
|
var openDropdown = dropdowns[i];
|
||||||
|
if (openDropdown.classList.contains('show')) {
|
||||||
|
openDropdown.classList.remove('show');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,6 +2,7 @@ total = 0
|
||||||
products = []
|
products = []
|
||||||
menus = []
|
menus = []
|
||||||
cotisations = []
|
cotisations = []
|
||||||
|
reloads = []
|
||||||
paymentMethod = null
|
paymentMethod = null
|
||||||
balance = 0
|
balance = 0
|
||||||
username = ""
|
username = ""
|
||||||
|
@ -95,12 +96,33 @@ function add_cotisation(pk, duration, amount){
|
||||||
generate_html();
|
generate_html();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function add_reload(value, payment_method, payment_method_name){
|
||||||
|
exist = false;
|
||||||
|
index = -1;
|
||||||
|
for(k=0; k < reloads.length; k++){
|
||||||
|
if(reloads[k].value == value && reloads[k].payment_method == payment_method){
|
||||||
|
exist = true;
|
||||||
|
index = k;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(exist){
|
||||||
|
reloads[index].quantity += 1;
|
||||||
|
}else{
|
||||||
|
reloads.push({"value": value, "quantity": 1, "payment_method": payment_method, "payment_method_name": payment_method_name});
|
||||||
|
}
|
||||||
|
generate_html();
|
||||||
|
}
|
||||||
|
|
||||||
function generate_html(){
|
function generate_html(){
|
||||||
html = "";
|
html = "";
|
||||||
for(k=0;k<cotisations.length;k++){
|
for(k=0;k<cotisations.length;k++){
|
||||||
cotisation = cotisations[k];
|
cotisation = cotisations[k];
|
||||||
html += '<tr><td></td><td>Cotisation ' + String(cotisation.duration) + ' jours</td><td>' + String(cotisation.amount) + ' €</td><td><input type="number" data-target="' + String(k) + '" onChange="updateCotisationInput(this)" value="' + String(cotisation.quantity) + '"/></td><td>' + String(Number((cotisation.quantity * cotisation.amount).toFixed(2))) + ' €</td></tr>';
|
html += '<tr><td></td><td>Cotisation ' + String(cotisation.duration) + ' jours</td><td>' + String(cotisation.amount) + ' €</td><td><input type="number" data-target="' + String(k) + '" onChange="updateCotisationInput(this)" value="' + String(cotisation.quantity) + '"/></td><td>' + String(Number((cotisation.quantity * cotisation.amount).toFixed(2))) + ' €</td></tr>';
|
||||||
}
|
}
|
||||||
|
for(k=0;k<reloads.length;k++){
|
||||||
|
reload = reloads[k];
|
||||||
|
html += '<tr><td>Rechargement ' + String(reload.payment_method_name) + " " + String(reload.value) + ' €</td><td>-' + String(reload.value) + ' €</td><td><input type="number" data-target="' + String(k) + '" onChange="updateReloadInput(this)" value="' + String(reload.quantity) + '"/></td><td>-' + String(Number((reload.quantity * reload.value).toFixed(2))) + ' €</td></tr>';
|
||||||
|
}
|
||||||
for(k=0;k<products.length;k++){
|
for(k=0;k<products.length;k++){
|
||||||
product = products[k]
|
product = products[k]
|
||||||
html += '<tr><td>' + product.name + '</td><td>' + String(product.amount) + ' €</td><td><input type="number" data-target="' + String(k) + '" onChange="updateInput(this)" value="' + String(product.quantity) + '"/></td><td>' + String(Number((product.quantity * product.amount).toFixed(2))) + ' €</td></tr>';
|
html += '<tr><td>' + product.name + '</td><td>' + String(product.amount) + ' €</td><td><input type="number" data-target="' + String(k) + '" onChange="updateInput(this)" value="' + String(product.quantity) + '"/></td><td>' + String(Number((product.quantity * product.amount).toFixed(2))) + ' €</td></tr>';
|
||||||
|
@ -109,7 +131,7 @@ function generate_html(){
|
||||||
menu = menus[k]
|
menu = menus[k]
|
||||||
html += '<tr><td>' + menu.name + '</td><td>' + String(menu.amount) + ' €</td><td><input type="number" data-target="' + String(k) + '" onChange="updateMenuInput(this)" value="' + String(menu.quantity) + '"/></td><td>' + String(Number((menu.quantity * menu.amount).toFixed(2))) + ' €</td></tr>';
|
html += '<tr><td>' + menu.name + '</td><td>' + String(menu.amount) + ' €</td><td><input type="number" data-target="' + String(k) + '" onChange="updateMenuInput(this)" value="' + String(menu.quantity) + '"/></td><td>' + String(Number((menu.quantity * menu.amount).toFixed(2))) + ' €</td></tr>';
|
||||||
}
|
}
|
||||||
$("#items").html(html)
|
$("#items").html(html);
|
||||||
updateTotal();
|
updateTotal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,6 +146,9 @@ function updateTotal(){
|
||||||
for(k=0; k<cotisations.length;k++){
|
for(k=0; k<cotisations.length;k++){
|
||||||
total += cotisations[k].quantity * cotisations[k].amount;
|
total += cotisations[k].quantity * cotisations[k].amount;
|
||||||
}
|
}
|
||||||
|
for(k=0; k<reloads.length;k++){
|
||||||
|
total -= reloads[k].quantity * reloads[k].value;
|
||||||
|
}
|
||||||
$("#totalAmount").text(String(Number(total.toFixed(2))) + "€")
|
$("#totalAmount").text(String(Number(total.toFixed(2))) + "€")
|
||||||
totalAfter = balance - total
|
totalAfter = balance - total
|
||||||
$("#totalAfter").text(String(Number(totalAfter.toFixed(2))) + "€")
|
$("#totalAfter").text(String(Number(totalAfter.toFixed(2))) + "€")
|
||||||
|
@ -150,6 +175,13 @@ function updateCotisationInput(a){
|
||||||
generate_html();
|
generate_html();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateReloadInput(a){
|
||||||
|
quantity = parseInt(a.value);
|
||||||
|
k = parseInt(a.getAttribute("data-target"));
|
||||||
|
reloads[k].quantity = quantity;
|
||||||
|
generate_html();
|
||||||
|
}
|
||||||
|
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
$(".cotisation-hidden").hide();
|
$(".cotisation-hidden").hide();
|
||||||
get_config();
|
get_config();
|
||||||
|
@ -166,6 +198,10 @@ $(document).ready(function(){
|
||||||
cotisation = get_cotisation($(this).attr('target'));
|
cotisation = get_cotisation($(this).attr('target'));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$(".reload").click(function(){
|
||||||
|
add_reload(parseInt($(this).attr('target')), parseInt($(this).attr('data-payment')), $(this).attr('data-payment-name'));
|
||||||
|
})
|
||||||
|
|
||||||
$("#id_client").on('change', function(){
|
$("#id_client").on('change', function(){
|
||||||
id_user = $("#id_client").val();
|
id_user = $("#id_client").val();
|
||||||
$.get("/users/getUser/" + id_user, function(data){
|
$.get("/users/getUser/" + id_user, function(data){
|
||||||
|
@ -206,7 +242,7 @@ $(document).ready(function(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$.post("order", {"user":id_user, "paymentMethod": $(this).attr('data-payment'), "order_length": products.length + menus.length + cotisations.length, "order": JSON.stringify(products), "amount": total, "menus": JSON.stringify(menus), "listPintes": JSON.stringify(listPintes), "cotisations": JSON.stringify(cotisations)}, function(data){
|
$.post("order", {"user":id_user, "paymentMethod": $(this).attr('data-payment'), "order_length": products.length + menus.length + cotisations.length + reloads.length, "order": JSON.stringify(products), "amount": total, "menus": JSON.stringify(menus), "listPintes": JSON.stringify(listPintes), "cotisations": JSON.stringify(cotisations), "reloads": JSON.stringify(reloads)}, function(data){
|
||||||
alert(data);
|
alert(data);
|
||||||
location.reload();
|
location.reload();
|
||||||
}).fail(function(data){
|
}).fail(function(data){
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
<link rel="icon" sizes="32x32" href="{% static 'favicon32.ico' %}" type="image/x-icon">
|
<link rel="icon" sizes="32x32" href="{% static 'favicon32.ico' %}" type="image/x-icon">
|
||||||
<link rel="icon" sizes="96x96" href="{% static 'favicon96.ico' %}" type="image/x-icon">
|
<link rel="icon" sizes="96x96" href="{% static 'favicon96.ico' %}" type="image/x-icon">
|
||||||
<link rel="stylesheet" href="{% static 'css/main.css' %}" />
|
<link rel="stylesheet" href="{% static 'css/main.css' %}" />
|
||||||
|
<link rel="stylesheet" href="{% static 'dropdown.css' %}" />
|
||||||
{% block extra_css %}{% endblock %}
|
{% block extra_css %}{% endblock %}
|
||||||
{% block extra_script %}{% endblock %}
|
{% block extra_script %}{% endblock %}
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
|
||||||
|
@ -55,5 +56,6 @@
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<script src="{% static 'dropdown.js' %}"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in a new issue