From 9edcadbd0c8a74e177849e357ef93fc309d63f95 Mon Sep 17 00:00:00 2001 From: Nour Elgeziry Date: Sun, 18 Oct 2020 22:15:08 +0100 Subject: [PATCH] basket refreshes automaticaly every 2 minutes --- .DS_Store | Bin 6148 -> 6148 bytes EDMS/EDMS/__init__.py | 5 ++ EDMS/EDMS/celery.py | 21 +++++ EDMS/EDMS/settings.py | 13 +-- EDMS/db.sqlite3 | Bin 176128 -> 188416 bytes EDMS/shoppingCart/admin.py | 1 + EDMS/shoppingCart/cron.py | 19 ---- EDMS/shoppingCart/migrations/0005_test.py | 20 +++++ .../migrations/0006_auto_20201018_1229.py | 26 ++++++ .../migrations/0007_auto_20201018_1316.py | 28 ++++++ .../migrations/0008_auto_20201018_1342.py | 29 ++++++ .../migrations/0009_auto_20201018_1354.py | 23 +++++ .../migrations/0010_auto_20201018_1401.py | 22 +++++ .../migrations/0011_order_complete.py | 18 ++++ .../migrations/0012_auto_20201018_1430.py | 19 ++++ .../migrations/0013_auto_20201018_1439.py | 19 ++++ .../migrations/0014_auto_20201018_1443.py | 21 +++++ .../migrations/0015_auto_20201018_1448.py | 27 ++++++ .../migrations/0016_auto_20201018_1456.py | 27 ++++++ .../migrations/0017_order_orderitem.py | 38 ++++++++ .../migrations/0018_auto_20201018_1522.py | 24 +++++ .../migrations/0019_auto_20201018_1759.py | 31 +++++++ .../migrations/0020_auto_20201018_2051.py | 20 +++++ .../migrations/0021_auto_20201018_2056.py | 19 ++++ EDMS/shoppingCart/models.py | 21 ++--- EDMS/shoppingCart/urls.py | 1 + EDMS/shoppingCart/views.py | 40 +++++++-- EDMS/static/js/cart.js | 2 +- Pipfile | 1 + Pipfile.lock | 85 +++++++++++++++++- 30 files changed, 575 insertions(+), 45 deletions(-) create mode 100644 EDMS/EDMS/celery.py delete mode 100644 EDMS/shoppingCart/cron.py create mode 100644 EDMS/shoppingCart/migrations/0005_test.py create mode 100644 EDMS/shoppingCart/migrations/0006_auto_20201018_1229.py create mode 100644 EDMS/shoppingCart/migrations/0007_auto_20201018_1316.py create mode 100644 EDMS/shoppingCart/migrations/0008_auto_20201018_1342.py create mode 100644 EDMS/shoppingCart/migrations/0009_auto_20201018_1354.py create mode 100644 EDMS/shoppingCart/migrations/0010_auto_20201018_1401.py create mode 100644 EDMS/shoppingCart/migrations/0011_order_complete.py create mode 100644 EDMS/shoppingCart/migrations/0012_auto_20201018_1430.py create mode 100644 EDMS/shoppingCart/migrations/0013_auto_20201018_1439.py create mode 100644 EDMS/shoppingCart/migrations/0014_auto_20201018_1443.py create mode 100644 EDMS/shoppingCart/migrations/0015_auto_20201018_1448.py create mode 100644 EDMS/shoppingCart/migrations/0016_auto_20201018_1456.py create mode 100644 EDMS/shoppingCart/migrations/0017_order_orderitem.py create mode 100644 EDMS/shoppingCart/migrations/0018_auto_20201018_1522.py create mode 100644 EDMS/shoppingCart/migrations/0019_auto_20201018_1759.py create mode 100644 EDMS/shoppingCart/migrations/0020_auto_20201018_2051.py create mode 100644 EDMS/shoppingCart/migrations/0021_auto_20201018_2056.py diff --git a/.DS_Store b/.DS_Store index c10ec4f00dff4f9523e59f9c56fe64d8efcafc46..dc5052e198cef2cbe9bb1ba3a30caee6d0d21248 100644 GIT binary patch literal 6148 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 xXtibWH(cU)-urO zKhilrA|wPjk~i@mmk26RgV=<|IAmf%*qCHQ6N7+T_yZLJ5-||wBEAPBeh{OVdoFjs z_xZfv@5zl?a?|SWvLbSv5VDY4fE(r3xo1(Wf!4&olne-O@+S!&&hA6OrLNUwM|Ixo zsZjH4%RZ4RW{7IPNbo0o3_rsca3{WHzla^U2%Yxhd2e*TU9!&*kC{!Lpl&vOl8TF6 zPC=sY_^5*x@9&^hJ>}*L*>!hScU{e@`Zn zO!cMv6TO+9u-*}=fuO!K@&u^*H<5)8xm4b>ij@Sf;VJwMkK!=zZ3{kwl^DxAJ5|&x zmw#WPVu0XPJd5Kvf^Xvv%;I`nfdTHJpdM(O5`xw#U0&PHCw{}4pXvx~6@pl-%aa_5 z9#SdxFPMu=mre7fKAIQS3!^j#J7}ETu#8xWNvqnU z0c1J4s_SCbRZVXn`sN>#~Vg z-0K@)usPkI>V8qzBE`-<4he^=D&tj)(IZGr#x~m*EIZh80+ETDw05uQOLev^YiQonN zmUDcJg@>V)vvSbRq(g8=2xElFAH&le`r6JS$KcG~Y0(-M&Jp|^x8o{Qm}8VjBpus@ z!nrsNS%si7%j8Kg*xs)cX3v6JSuhRL-_Z;>LvRLv%{y~fP%)Vm5kz8Ej(Di(uma8! zoaJ5ojF^LsR+2#R8m#V_Di#m&#n%M1L74&&5N z@Lc9w9KD7viQdPFgBTTW;V*cVSDZ$VByxAjNG%z4MNTV^K2PvG-o)#8nR`v3-v=`9 zMTwbBwb9yWwZ`uy9!*aB{V#A9Ex>M1 zP#?>5K`Dd^@@aaTt5RESs4q{Syr($k9H(9*t&7FSXjmNduaN(BSI{y-I{ue3ivn|< zwX89<%q`5wS9G;%|A7qsm;6d?Lp3e(-LW?e`CHh5BsB7E`MXa4IiV#q`0}H&Thm~u zid{NIL*V;MM0A4I+c#wTvc28gx_zFmOs1FZo}g(= expiry_date: - #set expired field to true - item.expired = True - # delete order item - item.delete() \ No newline at end of file diff --git a/EDMS/shoppingCart/migrations/0005_test.py b/EDMS/shoppingCart/migrations/0005_test.py new file mode 100644 index 0000000..645b4d2 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0005_test.py @@ -0,0 +1,20 @@ +# Generated by Django 3.1.2 on 2020-10-16 14:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0004_auto_20201016_1152'), + ] + + operations = [ + migrations.CreateModel( + name='Test', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=4)), + ], + ), + ] diff --git a/EDMS/shoppingCart/migrations/0006_auto_20201018_1229.py b/EDMS/shoppingCart/migrations/0006_auto_20201018_1229.py new file mode 100644 index 0000000..7277723 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0006_auto_20201018_1229.py @@ -0,0 +1,26 @@ +# Generated by Django 3.1.2 on 2020-10-18 12:29 + +import datetime +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0005_test'), + ] + + operations = [ + migrations.AddField( + model_name='order', + name='date_created', + field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now), + preserve_default=False, + ), + migrations.AddField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 12, 30, 18, 872950)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0007_auto_20201018_1316.py b/EDMS/shoppingCart/migrations/0007_auto_20201018_1316.py new file mode 100644 index 0000000..ba38b4a --- /dev/null +++ b/EDMS/shoppingCart/migrations/0007_auto_20201018_1316.py @@ -0,0 +1,28 @@ +# Generated by Django 3.1.2 on 2020-10-18 13:16 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0006_auto_20201018_1229'), + ] + + operations = [ + migrations.RemoveField( + model_name='orderitem', + name='expired', + ), + migrations.AddField( + model_name='order', + name='expired', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 13, 17, 6, 8469)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0008_auto_20201018_1342.py b/EDMS/shoppingCart/migrations/0008_auto_20201018_1342.py new file mode 100644 index 0000000..2862aec --- /dev/null +++ b/EDMS/shoppingCart/migrations/0008_auto_20201018_1342.py @@ -0,0 +1,29 @@ +# Generated by Django 3.1.2 on 2020-10-18 13:42 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0007_auto_20201018_1316'), + ] + + operations = [ + migrations.AddField( + model_name='orderitem', + name='expired', + field=models.BooleanField(default=False), + ), + migrations.AlterField( + model_name='order', + name='date_created', + field=models.DateTimeField(verbose_name=datetime.datetime(2020, 10, 18, 13, 42, 9, 885618)), + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 13, 43, 9, 885636)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0009_auto_20201018_1354.py b/EDMS/shoppingCart/migrations/0009_auto_20201018_1354.py new file mode 100644 index 0000000..0e60faf --- /dev/null +++ b/EDMS/shoppingCart/migrations/0009_auto_20201018_1354.py @@ -0,0 +1,23 @@ +# Generated by Django 3.1.2 on 2020-10-18 13:54 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0008_auto_20201018_1342'), + ] + + operations = [ + migrations.RemoveField( + model_name='order', + name='date_created', + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 13, 55, 33, 184566)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0010_auto_20201018_1401.py b/EDMS/shoppingCart/migrations/0010_auto_20201018_1401.py new file mode 100644 index 0000000..5d6f795 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0010_auto_20201018_1401.py @@ -0,0 +1,22 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0009_auto_20201018_1354'), + ] + + operations = [ + migrations.RemoveField( + model_name='order', + name='complete', + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateField(), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0011_order_complete.py b/EDMS/shoppingCart/migrations/0011_order_complete.py new file mode 100644 index 0000000..c67ab7f --- /dev/null +++ b/EDMS/shoppingCart/migrations/0011_order_complete.py @@ -0,0 +1,18 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:04 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0010_auto_20201018_1401'), + ] + + operations = [ + migrations.AddField( + model_name='order', + name='complete', + field=models.BooleanField(default=False), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0012_auto_20201018_1430.py b/EDMS/shoppingCart/migrations/0012_auto_20201018_1430.py new file mode 100644 index 0000000..ae676dd --- /dev/null +++ b/EDMS/shoppingCart/migrations/0012_auto_20201018_1430.py @@ -0,0 +1,19 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:30 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0011_order_complete'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(verbose_name=datetime.date(2020, 10, 25)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0013_auto_20201018_1439.py b/EDMS/shoppingCart/migrations/0013_auto_20201018_1439.py new file mode 100644 index 0000000..e712115 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0013_auto_20201018_1439.py @@ -0,0 +1,19 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:39 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0012_auto_20201018_1430'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(null=True, verbose_name=datetime.date(2020, 10, 25)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0014_auto_20201018_1443.py b/EDMS/shoppingCart/migrations/0014_auto_20201018_1443.py new file mode 100644 index 0000000..f4aaeb4 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0014_auto_20201018_1443.py @@ -0,0 +1,21 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:43 + +import datetime +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0013_auto_20201018_1439'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name=datetime.date(2020, 10, 25)), + preserve_default=False, + ), + ] diff --git a/EDMS/shoppingCart/migrations/0015_auto_20201018_1448.py b/EDMS/shoppingCart/migrations/0015_auto_20201018_1448.py new file mode 100644 index 0000000..78ebe02 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0015_auto_20201018_1448.py @@ -0,0 +1,27 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:48 + +import datetime +from django.db import migrations, models +import django.utils.timezone +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0014_auto_20201018_1443'), + ] + + operations = [ + migrations.AddField( + model_name='order', + name='date_created', + field=models.DateTimeField(default=django.utils.timezone.now, verbose_name=datetime.datetime(2020, 10, 18, 14, 47, 51, 354484, tzinfo=utc)), + preserve_default=False, + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(verbose_name=datetime.datetime(2020, 10, 25, 14, 47, 51, 354511, tzinfo=utc)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0016_auto_20201018_1456.py b/EDMS/shoppingCart/migrations/0016_auto_20201018_1456.py new file mode 100644 index 0000000..04fe58a --- /dev/null +++ b/EDMS/shoppingCart/migrations/0016_auto_20201018_1456.py @@ -0,0 +1,27 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:56 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0015_auto_20201018_1448'), + ] + + operations = [ + migrations.RemoveField( + model_name='orderitem', + name='order', + ), + migrations.RemoveField( + model_name='orderitem', + name='product', + ), + migrations.DeleteModel( + name='Order', + ), + migrations.DeleteModel( + name='OrderItem', + ), + ] diff --git a/EDMS/shoppingCart/migrations/0017_order_orderitem.py b/EDMS/shoppingCart/migrations/0017_order_orderitem.py new file mode 100644 index 0000000..66c1195 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0017_order_orderitem.py @@ -0,0 +1,38 @@ +# Generated by Django 3.1.2 on 2020-10-18 14:57 + +import datetime +from django.db import migrations, models +import django.db.models.deletion +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0016_auto_20201018_1456'), + ] + + operations = [ + migrations.CreateModel( + name='Order', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date_created', models.DateTimeField(verbose_name=datetime.datetime(2020, 10, 18, 14, 57, 32, 274339, tzinfo=utc))), + ('expiry_date', models.DateTimeField(verbose_name=datetime.datetime(2020, 10, 25, 14, 57, 32, 274372, tzinfo=utc))), + ('expired', models.BooleanField(default=False)), + ('complete', models.BooleanField(default=False)), + ('customer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shoppingCart.customer')), + ], + ), + migrations.CreateModel( + name='OrderItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('quantity', models.IntegerField(blank=True, default=0, null=True)), + ('date_created', models.DateTimeField(auto_now_add=True)), + ('expired', models.BooleanField(default=False)), + ('order', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shoppingCart.order')), + ('product', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shoppingCart.product')), + ], + ), + ] diff --git a/EDMS/shoppingCart/migrations/0018_auto_20201018_1522.py b/EDMS/shoppingCart/migrations/0018_auto_20201018_1522.py new file mode 100644 index 0000000..67f9b83 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0018_auto_20201018_1522.py @@ -0,0 +1,24 @@ +# Generated by Django 3.1.2 on 2020-10-18 15:22 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0017_order_orderitem'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='date_created', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 15, 22, 1, 700384)), + ), + migrations.AlterField( + model_name='order', + name='expiry_date', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 15, 24, 1, 700420)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0019_auto_20201018_1759.py b/EDMS/shoppingCart/migrations/0019_auto_20201018_1759.py new file mode 100644 index 0000000..95192db --- /dev/null +++ b/EDMS/shoppingCart/migrations/0019_auto_20201018_1759.py @@ -0,0 +1,31 @@ +# Generated by Django 3.1.2 on 2020-10-18 17:59 + +import datetime +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0018_auto_20201018_1522'), + ] + + operations = [ + migrations.RemoveField( + model_name='order', + name='expiry_date', + ), + migrations.RemoveField( + model_name='orderitem', + name='date_created', + ), + migrations.RemoveField( + model_name='orderitem', + name='expired', + ), + migrations.AlterField( + model_name='order', + name='date_created', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 17, 59, 41, 21325)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0020_auto_20201018_2051.py b/EDMS/shoppingCart/migrations/0020_auto_20201018_2051.py new file mode 100644 index 0000000..87043e8 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0020_auto_20201018_2051.py @@ -0,0 +1,20 @@ +# Generated by Django 3.1.2 on 2020-10-18 20:51 + +import datetime +from django.db import migrations, models +from django.utils.timezone import utc + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0019_auto_20201018_1759'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='date_created', + field=models.DateTimeField(default=datetime.datetime(2020, 10, 18, 20, 51, 23, 928323, tzinfo=utc)), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0021_auto_20201018_2056.py b/EDMS/shoppingCart/migrations/0021_auto_20201018_2056.py new file mode 100644 index 0000000..84dc0f8 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0021_auto_20201018_2056.py @@ -0,0 +1,19 @@ +# Generated by Django 3.1.2 on 2020-10-18 20:56 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0020_auto_20201018_2051'), + ] + + operations = [ + migrations.AlterField( + model_name='order', + name='date_created', + field=models.DateTimeField(default=django.utils.timezone.now), + ), + ] diff --git a/EDMS/shoppingCart/models.py b/EDMS/shoppingCart/models.py index 42573f7..94f4452 100644 --- a/EDMS/shoppingCart/models.py +++ b/EDMS/shoppingCart/models.py @@ -1,9 +1,15 @@ from django.db import models from django.contrib.auth.models import User +from datetime import datetime, timedelta +from django.utils import timezone + # Create your models here. +class Test(models.Model): + name = models.CharField(max_length=4) + class Customer(models.Model): user = models.OneToOneField(User, on_delete =models.CASCADE, null=True, blank=True) name = models.CharField(max_length=200, null=True) @@ -22,9 +28,10 @@ class Product(models.Model): class Order(models.Model): customer = models.ForeignKey(Customer, on_delete = models.SET_NULL, blank=True, null=True) - complete = models.BooleanField(default=False, null=True, blank=True) + date_created = models.DateTimeField(default = timezone.now) + expired = models.BooleanField(default=False) + complete = models.BooleanField(default=False) - def __str__ (self): return str(self.id) @@ -32,13 +39,7 @@ class OrderItem(models.Model): product = models.ForeignKey(Product, on_delete=models.SET_NULL, blank=True, null=True) order = models.ForeignKey(Order, on_delete=models.SET_NULL, blank=True, null=True) quantity = models.IntegerField(default=0, null=True, blank=True) - date_created = models.DateTimeField(auto_now_add=True) - expired = models.BooleanField(default=False) - + def __str__(self): return self.product.name - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/EDMS/shoppingCart/urls.py b/EDMS/shoppingCart/urls.py index 1eb81d2..337689d 100644 --- a/EDMS/shoppingCart/urls.py +++ b/EDMS/shoppingCart/urls.py @@ -5,6 +5,7 @@ from django.urls import path urlpatterns = [ path('', views.main, name="main"), path('updateItem/', views.updateItem, name="updateItem"), + ] diff --git a/EDMS/shoppingCart/views.py b/EDMS/shoppingCart/views.py index fb641b8..7357d78 100644 --- a/EDMS/shoppingCart/views.py +++ b/EDMS/shoppingCart/views.py @@ -1,19 +1,46 @@ from django.shortcuts import render +from django.views import View from .models import * # Create your views here. -from django.http.response import JsonResponse +from django.http.response import JsonResponse, HttpResponse import json -from django.contrib import messages +import pytz # main page def main(request): + customer = Customer.objects.get(id=1) + products = Product.objects.all() order, created = Order.objects.get_or_create(customer=customer, complete= False) - customerOrderItem = order.orderitem_set.all() - products = Product.objects.all() + customerOrderItem = order.orderitem_set.all() + + #start time for order expiry + utc = pytz.UTC + print('date_Created:' + str(order.date_created)) + + expiry_time = timedelta(minutes=2) + print('expiry time' + str(expiry_time)) + + expiry_date = order.date_created + expiry_time + print('expiry_date:' + str(expiry_date)) + + date_now = utc.localize(datetime.now()) + print('date now:' + str(date_now)) + #check if expiry date is reached + if date_now >= expiry_date: + order.expired= True + order.save() + + #check if order is expired + if order.expired == True: + order.delete() + for item in customerOrderItem: + item.delete() + Order.objects.create(customer=customer, complete= False) + context = {'customer':customer, 'order':order, 'customerOrderItem':customerOrderItem, 'products':products} return render(request,'shoppingCart/main.html', context) @@ -26,11 +53,9 @@ def updateItem(request): customer = request.user.customer product = Product.objects.get(id=productId) - order, created = Order.objects.get_or_create(customer=customer,complete=False) + order, created = Order.objects.get_or_create(customer=customer, complete= False) orderItem, created = OrderItem.objects.get_or_create(order=order, product=product) - #query order that did not expire - #querry orderitems in the order #make sure the quantity does not exceed 9 if orderItem.quantity >= 9 : @@ -49,4 +74,3 @@ def updateItem(request): print('ProductID: ', productId, 'Action:',action) return JsonResponse('item added', safe=False) - diff --git a/EDMS/static/js/cart.js b/EDMS/static/js/cart.js index ffdfa10..7f8d110 100644 --- a/EDMS/static/js/cart.js +++ b/EDMS/static/js/cart.js @@ -18,7 +18,7 @@ for (i = 0; i < updateButton.length; i++) { function updateUserOrder(productId, action) { - var url = '/updateItem/' + var url = '/main_class/' fetch(url, { method: 'POST', diff --git a/Pipfile b/Pipfile index 7a8362b..e3bc28f 100644 --- a/Pipfile +++ b/Pipfile @@ -9,6 +9,7 @@ verify_ssl = true django = "*" pillow = "*" django-crontab = "*" +celery = "*" [requires] python_version = "3.8" diff --git a/Pipfile.lock b/Pipfile.lock index 0301188..a146a7d 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "292744283c56cc32f20b13692b19ffe1958359200bfe6539399352866167da4e" + "sha256": "d9d9a412445aee8a1e4ebb76250dda9d583b4ccd098608581d3a31152a3dfc3c" }, "pipfile-spec": 6, "requires": { @@ -16,6 +16,14 @@ ] }, "default": { + "amqp": { + "hashes": [ + "sha256:9881f8e6fe23e3db9faa6cfd8c05390213e1d1b95c0162bc50552cad75bffa5f", + "sha256:a8fb8151eb9d12204c9f1784c0da920476077609fa0a70f2468001e3a4258484" + ], + "markers": "python_version >= '3.6'", + "version": "==5.0.1" + }, "asgiref": { "hashes": [ "sha256:7e51911ee147dd685c3c8b805c0ad0cb58d360987b56953878f8c06d2d1c6f1a", @@ -24,6 +32,42 @@ "markers": "python_version >= '3.5'", "version": "==3.2.10" }, + "billiard": { + "hashes": [ + "sha256:bff575450859a6e0fbc2f9877d9b715b0bbc07c3565bb7ed2280526a0cdf5ede", + "sha256:d91725ce6425f33a97dfa72fb6bfef0e47d4652acd98a032bd1a7fbf06d5fa6a" + ], + "version": "==3.6.3.0" + }, + "celery": { + "hashes": [ + "sha256:313930fddde703d8e37029a304bf91429cd11aeef63c57de6daca9d958e1f255", + "sha256:72138dc3887f68dc58e1a2397e477256f80f1894c69fa4337f8ed70be460375b" + ], + "index": "pypi", + "version": "==5.0.0" + }, + "click": { + "hashes": [ + "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a", + "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==7.1.2" + }, + "click-didyoumean": { + "hashes": [ + "sha256:112229485c9704ff51362fe34b2d4f0b12fc71cc20f6d2b3afabed4b8bfa6aeb" + ], + "version": "==0.0.3" + }, + "click-repl": { + "hashes": [ + "sha256:9c4c3d022789cae912aad8a3f5e1d7c2cdd016ee1225b5212ad3e8691563cda5", + "sha256:b9f29d52abc4d6059f8e276132a111ab8d94980afe6a5432b9d996544afa95d5" + ], + "version": "==0.1.6" + }, "django": { "hashes": [ "sha256:a2127ad0150ec6966655bedf15dbbff9697cc86d61653db2da1afa506c0b04cc", @@ -39,6 +83,14 @@ "index": "pypi", "version": "==0.7.1" }, + "kombu": { + "hashes": [ + "sha256:6dc509178ac4269b0e66ab4881f70a2035c33d3a622e20585f965986a5182006", + "sha256:f4965fba0a4718d47d470beeb5d6446e3357a62402b16c510b6a2f251e05ac3c" + ], + "markers": "python_version >= '3.6'", + "version": "==5.0.2" + }, "pillow": { "hashes": [ "sha256:04d984e45a0b9815f4b407e8aadb50f25fbb82a605d89db927376e94c3adf371", @@ -74,6 +126,14 @@ "index": "pypi", "version": "==8.0.0" }, + "prompt-toolkit": { + "hashes": [ + "sha256:25c95d2ac813909f813c93fde734b6e44406d1477a9faef7c915ff37d39c0a8c", + "sha256:7debb9a521e0b1ee7d2fe96ee4bd60ef03c6492784de0547337ca4433e46aa63" + ], + "markers": "python_full_version >= '3.6.1'", + "version": "==3.0.8" + }, "pytz": { "hashes": [ "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed", @@ -81,6 +141,14 @@ ], "version": "==2020.1" }, + "six": { + "hashes": [ + "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", + "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.15.0" + }, "sqlparse": { "hashes": [ "sha256:017cde379adbd6a1f15a61873f43e8274179378e95ef3fede90b5aa64d304ed0", @@ -88,6 +156,21 @@ ], "markers": "python_version >= '3.5'", "version": "==0.4.1" + }, + "vine": { + "hashes": [ + "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30", + "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e" + ], + "markers": "python_version >= '3.6'", + "version": "==5.0.0" + }, + "wcwidth": { + "hashes": [ + "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784", + "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83" + ], + "version": "==0.2.5" } }, "develop": {}