From 8308eac31fcb30af3c5f1352b19d1061e6c29fd7 Mon Sep 17 00:00:00 2001 From: nanoy Date: Tue, 11 Jun 2019 01:28:22 +0200 Subject: [PATCH 1/2] Add alcohol field --- coopeV3/settings.py | 3 ++ coopeV3/urls.py | 7 ++++ gestion/templates/gestion/ranking.html | 6 ++-- gestion/views.py | 13 +++---- users/migrations/0006_auto_20190611_0105.py | 38 +++++++++++++++++++++ users/models.py | 16 +++------ 6 files changed, 62 insertions(+), 21 deletions(-) create mode 100644 users/migrations/0006_auto_20190611_0105.py diff --git a/coopeV3/settings.py b/coopeV3/settings.py index 4a4abca..7b3448b 100644 --- a/coopeV3/settings.py +++ b/coopeV3/settings.py @@ -38,6 +38,7 @@ INSTALLED_APPS = [ 'dal_select2', 'simple_history', 'django_tex', + 'debug_toolbar' ] MIDDLEWARE = [ @@ -50,6 +51,7 @@ MIDDLEWARE = [ 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'simple_history.middleware.HistoryRequestMiddleware', 'django.contrib.admindocs.middleware.XViewMiddleware', + 'debug_toolbar.middleware.DebugToolbarMiddleware', ] ROOT_URLCONF = 'coopeV3.urls' @@ -127,3 +129,4 @@ LOGIN_URL = '/users/login' MEDIA_ROOT = os.path.join(BASE_DIR, 'mediafiles') MEDIA_URL = '/media/' +INTERNAL_IPS = ["127.0.0.1"] \ No newline at end of file diff --git a/coopeV3/urls.py b/coopeV3/urls.py index a4768a3..b65889a 100644 --- a/coopeV3/urls.py +++ b/coopeV3/urls.py @@ -30,3 +30,10 @@ urlpatterns = [ path('gestion/', include('gestion.urls')), path('preferences/', include('preferences.urls')), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + + +if settings.DEBUG: + import debug_toolbar + urlpatterns = [ + path('__debug__/', include(debug_toolbar.urls)), + ] + urlpatterns diff --git a/gestion/templates/gestion/ranking.html b/gestion/templates/gestion/ranking.html index fb9d4eb..0f1d00c 100644 --- a/gestion/templates/gestion/ranking.html +++ b/gestion/templates/gestion/ranking.html @@ -60,10 +60,10 @@ {% for customer in bestDrinkers %} {{ forloop.counter }} - {{ customer.0.username }} - {{ customer.1 }} + {{ customer.username }} + {{ customer.profile.alcohol }} - {%endfor%} + {% endfor %} diff --git a/gestion/views.py b/gestion/views.py index fe9d35f..06843f7 100644 --- a/gestion/views.py +++ b/gestion/views.py @@ -715,12 +715,13 @@ def ranking(request): Displays the ranking page. """ bestBuyers = User.objects.order_by('-profile__debit')[:25] - customers = User.objects.all() - list = [] - for customer in customers: - alcohol = customer.profile.alcohol - list.append([customer, alcohol]) - bestDrinkers = sorted(list, key=lambda x: x[1], reverse=True)[:25] + #customers = User.objects.all() + #list = [] + #for customer in customers: + # alcohol = customer.profile.alcohol + # list.append([customer, alcohol]) + #bestDrinkers = sorted(list, key=lambda x: x[1], reverse=True)[:25] + bestDrinkers = User.objects.order_by('-profile__alcohol')[:25] form = SearchProductForm(request.POST or None) if(form.is_valid()): product_ranking = form.cleaned_data['product'].ranking diff --git a/users/migrations/0006_auto_20190611_0105.py b/users/migrations/0006_auto_20190611_0105.py new file mode 100644 index 0000000..caab186 --- /dev/null +++ b/users/migrations/0006_auto_20190611_0105.py @@ -0,0 +1,38 @@ +# Generated by Django 2.1 on 2019-06-10 23:05 + +from django.db import migrations, models + +def update(apps, schema_editor): + db_alias = schema_editor.connection.alias + users = apps.get_model('auth', 'User').objects.using(db_alias).all() + for user in users: + consumptions = apps.get_model('gestion', 'ConsumptionHistory').objects.using(db_alias).filter(customer=user).select_related('product') + alcohol = 0 + for consumption in consumptions: + product = consumption.product + alcohol += consumption.quantity * float(product.deg) * product.volume * 0.79 /10 /1000 + user.profile.alcohol = alcohol + user.profile.save() + +def reverse_update(apps, schema_editor): + pass + +class Migration(migrations.Migration): + + dependencies = [ + ('users', '0005_auto_20190227_0859'), + ] + + operations = [ + migrations.AddField( + model_name='historicalprofile', + name='alcohol', + field=models.DecimalField(decimal_places=2, default=0, max_digits=5, null=True), + ), + migrations.AddField( + model_name='profile', + name='alcohol', + field=models.DecimalField(decimal_places=2, default=0, max_digits=5, null=True), + ), + migrations.RunPython(update, reverse_update) + ] diff --git a/users/models.py b/users/models.py index beae6fc..64e5700 100644 --- a/users/models.py +++ b/users/models.py @@ -120,6 +120,10 @@ class Profile(models.Model): """ Date of end of cotisation for the client """ + alcohol = models.DecimalField(max_digits=5, decimal_places=2, default=0, null=True) + """ + Ingerated alcohol + """ history = HistoricalRecords() @property @@ -152,18 +156,6 @@ class Profile(models.Model): """ return Profile.objects.filter(debit__gte=self.debit).count() - @property - def alcohol(self): - """ - Computes ingerated alcohol. - """ - consumptions = ConsumptionHistory.objects.filter(customer=self.user).select_related('product') - alcohol = 0 - for consumption in consumptions: - product = consumption.product - alcohol += consumption.quantity * float(product.deg) * product.volume * 0.79 /10 /1000 - return alcohol - @property def nb_pintes(self): """ From de38610fd8bdcca192e5ea07775503233f73f794 Mon Sep 17 00:00:00 2001 From: nanoy Date: Wed, 12 Jun 2019 23:53:01 +0200 Subject: [PATCH 2/2] Implementing alcohol --- gestion/views.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/gestion/views.py b/gestion/views.py index 06843f7..54f10c5 100644 --- a/gestion/views.py +++ b/gestion/views.py @@ -163,6 +163,7 @@ def order(request): consumption.save() ch = ConsumptionHistory(customer=user, quantity=quantity, paymentMethod=paymentMethod, product=product, amount=Decimal(quantity*product.amount), coopeman=request.user) ch.save() + user.profile.alcohol += Decimal(quantity * float(product.deg) * product.volume * 0.79 /10 /1000) if(paymentMethod.affect_balance): if(user.profile.balance >= Decimal(product.amount*quantity)): user.profile.debit += Decimal(product.amount*quantity) @@ -187,11 +188,10 @@ def order(request): if(article.stockHold > 0): article.stockHold -= 1 article.save() + user.profile.alcohol += Decimal(quantity * float(product.deg) * product.volume * 0.79 /10 /1000) user.save() return HttpResponse("La commande a bien été effectuée") except Exception as e: - print(e) - print("test") return HttpResponse(error_message) @active_required @@ -274,7 +274,8 @@ def cancel_consumption(request, pk): user = consumption.customer if consumption.paymentMethod.affect_balance: user.profile.debit -= consumption.amount - user.save() + user.profile.alcohol -= Decimal(consumption.quantity * float(consumption.product.deg) * consumption.product.volume * 0.79 /10 /1000) + user.save() consumptionT = Consumption.objects.get(customer=user, product=consumption.product) consumptionT.quantity -= consumption.quantity consumptionT.save() @@ -301,6 +302,8 @@ def cancel_menu(request, pk): consumptionT = Consumption.objects.get(customer=user, product=product) consumptionT -= menu_history.quantity consumptionT.save() + user.profile.alcohol -= Decimal(menu_history.quantity * float(menu_history.product.deg) * menu_history.product.volume * 0.79 /10 /1000) + user.save() menu_history.delete() messages.success(request, "La consommation du menu a bien été annulée") return redirect(reverse('users:profile', kwargs={'pk': user.pk})) @@ -715,12 +718,6 @@ def ranking(request): Displays the ranking page. """ bestBuyers = User.objects.order_by('-profile__debit')[:25] - #customers = User.objects.all() - #list = [] - #for customer in customers: - # alcohol = customer.profile.alcohol - # list.append([customer, alcohol]) - #bestDrinkers = sorted(list, key=lambda x: x[1], reverse=True)[:25] bestDrinkers = User.objects.order_by('-profile__alcohol')[:25] form = SearchProductForm(request.POST or None) if(form.is_valid()):