diff --git a/EDMS/db.sqlite3 b/EDMS/db.sqlite3 index 66abaf1..8997b35 100644 Binary files a/EDMS/db.sqlite3 and b/EDMS/db.sqlite3 differ diff --git a/EDMS/shoppingCart/__pycache__/admin.cpython-38.pyc b/EDMS/shoppingCart/__pycache__/admin.cpython-38.pyc index d15f9f1..ca82d1f 100644 Binary files a/EDMS/shoppingCart/__pycache__/admin.cpython-38.pyc and b/EDMS/shoppingCart/__pycache__/admin.cpython-38.pyc differ diff --git a/EDMS/shoppingCart/__pycache__/models.cpython-38.pyc b/EDMS/shoppingCart/__pycache__/models.cpython-38.pyc index 58fcce4..f821668 100644 Binary files a/EDMS/shoppingCart/__pycache__/models.cpython-38.pyc and b/EDMS/shoppingCart/__pycache__/models.cpython-38.pyc differ diff --git a/EDMS/shoppingCart/__pycache__/urls.cpython-38.pyc b/EDMS/shoppingCart/__pycache__/urls.cpython-38.pyc index f0e9e24..57cf7c1 100644 Binary files a/EDMS/shoppingCart/__pycache__/urls.cpython-38.pyc and b/EDMS/shoppingCart/__pycache__/urls.cpython-38.pyc differ diff --git a/EDMS/shoppingCart/__pycache__/views.cpython-38.pyc b/EDMS/shoppingCart/__pycache__/views.cpython-38.pyc index aa934b3..ff02869 100644 Binary files a/EDMS/shoppingCart/__pycache__/views.cpython-38.pyc and b/EDMS/shoppingCart/__pycache__/views.cpython-38.pyc differ diff --git a/EDMS/shoppingCart/admin.py b/EDMS/shoppingCart/admin.py index 27ee9d8..58c315c 100644 --- a/EDMS/shoppingCart/admin.py +++ b/EDMS/shoppingCart/admin.py @@ -6,4 +6,5 @@ admin.site.register(Customer) admin.site.register(Product) admin.site.register(Order) admin.site.register(OrderItem) -admin.site.register(Store) \ No newline at end of file +admin.site.register(Store) +admin.site.register(StoreOrder) \ No newline at end of file diff --git a/EDMS/shoppingCart/filters.py b/EDMS/shoppingCart/filters.py new file mode 100644 index 0000000..e0710bd --- /dev/null +++ b/EDMS/shoppingCart/filters.py @@ -0,0 +1,10 @@ +import django_filters +from .models import * + + + +class OrderFilter(django_filters.FilterSet): + class Meta: + model = Order + fields = '__all__' + exclude = ['store', 'date_created'] \ No newline at end of file diff --git a/EDMS/shoppingCart/forms.py b/EDMS/shoppingCart/forms.py new file mode 100644 index 0000000..16b1de9 --- /dev/null +++ b/EDMS/shoppingCart/forms.py @@ -0,0 +1,7 @@ +from django.forms import ModelForm +from .models import Store, Order + +class OrderForm(ModelForm): + class Meta: + model = Order + fields = '__all__' \ No newline at end of file diff --git a/EDMS/shoppingCart/migrations/0007_store_order.py b/EDMS/shoppingCart/migrations/0007_store_order.py new file mode 100644 index 0000000..bf2c0fa --- /dev/null +++ b/EDMS/shoppingCart/migrations/0007_store_order.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2.14 on 2020-10-17 13:25 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0006_store_available'), + ] + + operations = [ + migrations.CreateModel( + name='Store_Order', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date_created', models.DateTimeField(auto_now_add=True, null=True)), + ('status', models.CharField(choices=[('Pending', 'Pending'), ('Out for delivery', 'Out for delivery'), ('Delivered', 'Delivered')], max_length=200, null=True)), + ('product', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='shoppingCart.Product')), + ('store', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='shoppingCart.Store')), + ], + ), + ] diff --git a/EDMS/shoppingCart/migrations/0008_auto_20201017_1504.py b/EDMS/shoppingCart/migrations/0008_auto_20201017_1504.py new file mode 100644 index 0000000..199e726 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0008_auto_20201017_1504.py @@ -0,0 +1,37 @@ +# Generated by Django 2.2.14 on 2020-10-17 14:04 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0007_store_order'), + ] + + operations = [ + migrations.RemoveField( + model_name='store_order', + name='date_created', + ), + migrations.RemoveField( + model_name='store_order', + name='status', + ), + migrations.AddField( + model_name='store_order', + name='order', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shoppingCart.Order'), + ), + migrations.AddField( + model_name='store_order', + name='quantity', + field=models.IntegerField(blank=True, default=0, null=True), + ), + migrations.AlterField( + model_name='store_order', + name='product', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shoppingCart.Product'), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0009_auto_20201017_1526.py b/EDMS/shoppingCart/migrations/0009_auto_20201017_1526.py new file mode 100644 index 0000000..ab758f5 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0009_auto_20201017_1526.py @@ -0,0 +1,22 @@ +# Generated by Django 2.2.14 on 2020-10-17 14:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0008_auto_20201017_1504'), + ] + + operations = [ + migrations.RemoveField( + model_name='store_order', + name='order', + ), + migrations.AddField( + model_name='store_order', + name='status', + field=models.CharField(choices=[('Pending', 'Pending'), ('Out for delivery', 'Out for delivery'), ('Delivered', 'Delivered')], max_length=200, null=True), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0010_store_order_date_created.py b/EDMS/shoppingCart/migrations/0010_store_order_date_created.py new file mode 100644 index 0000000..c3cb756 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0010_store_order_date_created.py @@ -0,0 +1,18 @@ +# Generated by Django 2.2.14 on 2020-10-17 14:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0009_auto_20201017_1526'), + ] + + operations = [ + migrations.AddField( + model_name='store_order', + name='date_created', + field=models.DateTimeField(auto_now_add=True, null=True), + ), + ] diff --git a/EDMS/shoppingCart/migrations/0011_auto_20201019_1709.py b/EDMS/shoppingCart/migrations/0011_auto_20201019_1709.py new file mode 100644 index 0000000..bebe713 --- /dev/null +++ b/EDMS/shoppingCart/migrations/0011_auto_20201019_1709.py @@ -0,0 +1,17 @@ +# Generated by Django 3.1.2 on 2020-10-19 16:09 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('shoppingCart', '0010_store_order_date_created'), + ] + + operations = [ + migrations.RenameModel( + old_name='Store_Order', + new_name='StoreOrder', + ), + ] diff --git a/EDMS/shoppingCart/migrations/__pycache__/0007_store_order.cpython-38.pyc b/EDMS/shoppingCart/migrations/__pycache__/0007_store_order.cpython-38.pyc new file mode 100644 index 0000000..692a16c Binary files /dev/null and b/EDMS/shoppingCart/migrations/__pycache__/0007_store_order.cpython-38.pyc differ diff --git a/EDMS/shoppingCart/migrations/__pycache__/0008_auto_20201017_1504.cpython-38.pyc b/EDMS/shoppingCart/migrations/__pycache__/0008_auto_20201017_1504.cpython-38.pyc new file mode 100644 index 0000000..4790b77 Binary files /dev/null and b/EDMS/shoppingCart/migrations/__pycache__/0008_auto_20201017_1504.cpython-38.pyc differ diff --git a/EDMS/shoppingCart/migrations/__pycache__/0009_auto_20201017_1526.cpython-38.pyc b/EDMS/shoppingCart/migrations/__pycache__/0009_auto_20201017_1526.cpython-38.pyc new file mode 100644 index 0000000..ac3e413 Binary files /dev/null and b/EDMS/shoppingCart/migrations/__pycache__/0009_auto_20201017_1526.cpython-38.pyc differ diff --git a/EDMS/shoppingCart/migrations/__pycache__/0010_store_order_date_created.cpython-38.pyc b/EDMS/shoppingCart/migrations/__pycache__/0010_store_order_date_created.cpython-38.pyc new file mode 100644 index 0000000..ac80eba Binary files /dev/null and b/EDMS/shoppingCart/migrations/__pycache__/0010_store_order_date_created.cpython-38.pyc differ diff --git a/EDMS/shoppingCart/models.py b/EDMS/shoppingCart/models.py index 129fef7..cf661c8 100644 --- a/EDMS/shoppingCart/models.py +++ b/EDMS/shoppingCart/models.py @@ -23,8 +23,7 @@ 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) - def __str__ (self): - return str(self.id) + class OrderItem(models.Model): product = models.ForeignKey(Product, on_delete=models.SET_NULL, blank=True, null=True) @@ -41,3 +40,19 @@ class Store(models.Model): def __str__(self): return self.name + +class StoreOrder(models.Model): + STATUS = ( + ('Pending', 'Pending'), + ('Out for delivery', 'Out for delivery'), + ('Delivered', 'Delivered'), + ) + + store = models.ForeignKey(Store, on_delete= models.SET_NULL, null=True) + product = models.ForeignKey(Product, on_delete=models.SET_NULL, blank=True, null=True) + status = models.CharField(max_length=200, null=True, choices=STATUS) + quantity = models.IntegerField(default=0, null=True, blank=True) + date_created = models.DateTimeField(auto_now_add=True, null=True, blank=True) + + def __str__(self): + return self.product.name \ No newline at end of file diff --git a/EDMS/shoppingCart/templates/shoppingCart/allocate.html b/EDMS/shoppingCart/templates/shoppingCart/allocate.html new file mode 100644 index 0000000..fc927e1 --- /dev/null +++ b/EDMS/shoppingCart/templates/shoppingCart/allocate.html @@ -0,0 +1,14 @@ +{% extends 'shoppingCart/store_dashBoard.html' %} +{% block content %} + + + + + + + + + + + +{% endblock content %} diff --git a/EDMS/shoppingCart/templates/shoppingCart/delete_item.html b/EDMS/shoppingCart/templates/shoppingCart/delete_item.html new file mode 100644 index 0000000..8ff1d72 --- /dev/null +++ b/EDMS/shoppingCart/templates/shoppingCart/delete_item.html @@ -0,0 +1,22 @@ +{% extends 'shoppingCart/store_dashBoard.html' %} +{% block content %} + + +
+
+
+
+ +

Are you sure you want to delete "{{item}}"?

+
+ {% csrf_token %} + Go back + + +
+
+
+
+ + +{% endblock content %} \ No newline at end of file diff --git a/EDMS/shoppingCart/templates/shoppingCart/main.html b/EDMS/shoppingCart/templates/shoppingCart/main.html index 33bfb28..8a10a09 100755 --- a/EDMS/shoppingCart/templates/shoppingCart/main.html +++ b/EDMS/shoppingCart/templates/shoppingCart/main.html @@ -1,4 +1,4 @@ -{%load static%} +{% load static %} @@ -60,7 +60,7 @@ diff --git a/EDMS/shoppingCart/templates/shoppingCart/navbar.html b/EDMS/shoppingCart/templates/shoppingCart/navbar.html new file mode 100644 index 0000000..78db5d9 --- /dev/null +++ b/EDMS/shoppingCart/templates/shoppingCart/navbar.html @@ -0,0 +1,81 @@ +{% load static %} + + + + + + + + + + Limit Items bought per Week + + + + + + + + + + + + + + + + + + + +
+
+ +
+
+ + +
+ +
+
+
+ + + + + \ No newline at end of file diff --git a/EDMS/shoppingCart/templates/shoppingCart/order_form.html b/EDMS/shoppingCart/templates/shoppingCart/order_form.html new file mode 100644 index 0000000..5105c24 --- /dev/null +++ b/EDMS/shoppingCart/templates/shoppingCart/order_form.html @@ -0,0 +1,37 @@ +{% extends 'shoppingCart/store_dashBoard.html' %} +{% load static %} +{% block content %} +{% load widget_tweaks %} + + +
+
+
+ {% if action == 'create' %} +

Create Shop Order

+ {% elif action == 'update' %} +

Update Shop Order

+ {% endif %} + +
+
+
+ +
+
+
+
+ {% csrf_token %} + {% for field in form %} + {{field.label}} + {{field|add_class:'form-control'}} + + {% endfor %} +
+ +
+
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/EDMS/shoppingCart/templates/shoppingCart/products.html b/EDMS/shoppingCart/templates/shoppingCart/products.html new file mode 100644 index 0000000..b33c5be --- /dev/null +++ b/EDMS/shoppingCart/templates/shoppingCart/products.html @@ -0,0 +1,30 @@ +{% extends 'shoppingCart/store_dashBoard.html' %} +{% block content %} + +
+ +
+
+
+
+
+ + + + + + + {% for product in products %} + + + + + + {% endfor %} +
ProductPrice
{{product.name}}${{product.price}}
+
+
+ +
+ +{% endblock content %} diff --git a/EDMS/shoppingCart/templates/shoppingCart/status_row.html b/EDMS/shoppingCart/templates/shoppingCart/status_row.html new file mode 100644 index 0000000..096fdef --- /dev/null +++ b/EDMS/shoppingCart/templates/shoppingCart/status_row.html @@ -0,0 +1,31 @@ +
+ +
+
+
+
+
+
Total Stores Available
+
+
+

{{total_stores}}

+
+
+
+
+ +
+
+
+
+
Orders Delivered To Stores
+
+
+
{{delivered}}
+
+
+
+
+ + +
\ No newline at end of file diff --git a/EDMS/shoppingCart/templates/shoppingCart/store.html b/EDMS/shoppingCart/templates/shoppingCart/store.html new file mode 100644 index 0000000..620423a --- /dev/null +++ b/EDMS/shoppingCart/templates/shoppingCart/store.html @@ -0,0 +1,67 @@ +{% extends 'shoppingCart/store_dashBoard.html' %} +{% block content %} +{% load widget_tweaks %} + + +
+ +
+
+
+
+
Store: {{store.name}}
+
+ Update Store + Delete Store + +
+
+ +
+
+
Store Information
+
+

Name: {{store.name}}

+

Location: {{store.location}}

+

Capacity: {{store.name}}

+

Available: {{store.location}}

+
+
+ +
+
+
Total Stores Orders
+
+

{{total_store_orders}}

+
+
+
+
+ +
+
+
+
+
+ {% for field in filter.form %} + {{field.label}} + {{field|add_class:'form-control-sm'}} + {% endfor %} + +
+
+
+ +
+
+ + + {% endfor %} + + + + + + + +{% endblock content %} \ No newline at end of file diff --git a/EDMS/shoppingCart/templates/shoppingCart/store_dashBoard.html b/EDMS/shoppingCart/templates/shoppingCart/store_dashBoard.html new file mode 100644 index 0000000..e1c7fb3 --- /dev/null +++ b/EDMS/shoppingCart/templates/shoppingCart/store_dashBoard.html @@ -0,0 +1,89 @@ +{% load static %} + + + + Limit Items bought per Week + + + + + + + + {% include 'shoppingCart/navbar.html' %} + +
+ {% block content %} + +{% include 'shoppingCart/status_row.html' %} + +
+
+
+
+ +
+
+ Create Store + + + + + + + + + + {% for store in store %} + + + + + + + + + {% endfor %} +
NameLocationAvailableSent

{{store}}

{{store.location}}

{{store.available}}{{store.capacity}}
+
+
+ +
+
+
+ Allocate Orders + + + + + + + + + + + + + {% for storeorder in storeorder %} + + + + + + + + + + + {% endfor %} +
StoresProductsOrdersQuantityStatusAllocatedUpdateRemove
{{store}}{{store.product}}{{store.storeorder}}{{store.quantity}}{{store.status}}{{store.date_created}}UpdateCancel
+
+
+
+
+{% endblock content %} +
+ + + + diff --git a/EDMS/shoppingCart/urls.py b/EDMS/shoppingCart/urls.py index f769612..5aa6f73 100644 --- a/EDMS/shoppingCart/urls.py +++ b/EDMS/shoppingCart/urls.py @@ -1,9 +1,11 @@ from . import views from django.urls import path - urlpatterns = [ path('', views.main, name="main"), path('updateItem/', views.updateItem, name="updateItem"), + path('store_dashBoard/', views.store_dashBoard, name="store_dashBoard"), + path('products/', views.products, name="products"), + path('allocate/', views.allocate, name="allocate"), ] diff --git a/EDMS/shoppingCart/views.py b/EDMS/shoppingCart/views.py index db35600..c2b8bc5 100644 --- a/EDMS/shoppingCart/views.py +++ b/EDMS/shoppingCart/views.py @@ -1,5 +1,7 @@ -from django.shortcuts import render +from django.shortcuts import render,redirect +from django.http import HttpResponse from .models import * + # Create your views here. from django.http.response import JsonResponse import json @@ -43,4 +45,29 @@ def updateItem(request): orderItem.delete() print('ProductID: ', productId, 'Action:',action) - return JsonResponse('item added', safe=False) \ No newline at end of file + return JsonResponse('item added', safe=False) + +def store_dashBoard(request): + store = Store.objects.all() + total_stores = store.count() + + context = {'store': store, 'total_stores':total_stores, } + return render(request, 'ShoppingCart/store_dashBoard.html', context) + +def products(request): + products = Product.objects.all() + + context = {'products': products } + return render(request, 'ShoppingCart/products.html', context) + +def allocate(request): + return render(request, 'ShoppingCart/allocate.html') + + + +def storeorder(request): + storeorder = StoreOrder_set.objects.all() + + context = { 'store': store,} + return render(request, 'ShoppingCart/store.html', context) + diff --git a/Pipfile.lock b/Pipfile.lock index 33c79b7..32740b6 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -34,37 +34,38 @@ }, "pillow": { "hashes": [ - "sha256:0295442429645fa16d05bd567ef5cff178482439c9aad0411d3f0ce9b88b3a6f", - "sha256:06aba4169e78c439d528fdeb34762c3b61a70813527a2c57f0540541e9f433a8", - "sha256:09d7f9e64289cb40c2c8d7ad674b2ed6105f55dc3b09aa8e4918e20a0311e7ad", - "sha256:0a80dd307a5d8440b0a08bd7b81617e04d870e40a3e46a32d9c246e54705e86f", - "sha256:1ca594126d3c4def54babee699c055a913efb01e106c309fa6b04405d474d5ae", - "sha256:25930fadde8019f374400f7986e8404c8b781ce519da27792cbe46eabec00c4d", - "sha256:431b15cffbf949e89df2f7b48528be18b78bfa5177cb3036284a5508159492b5", - "sha256:52125833b070791fcb5710fabc640fc1df07d087fc0c0f02d3661f76c23c5b8b", - "sha256:5e51ee2b8114def244384eda1c82b10e307ad9778dac5c83fb0943775a653cd8", - "sha256:612cfda94e9c8346f239bf1a4b082fdd5c8143cf82d685ba2dba76e7adeeb233", - "sha256:6d7741e65835716ceea0fd13a7d0192961212fd59e741a46bbed7a473c634ed6", - "sha256:6edb5446f44d901e8683ffb25ebdfc26988ee813da3bf91e12252b57ac163727", - "sha256:725aa6cfc66ce2857d585f06e9519a1cc0ef6d13f186ff3447ab6dff0a09bc7f", - "sha256:8dad18b69f710bf3a001d2bf3afab7c432785d94fcf819c16b5207b1cfd17d38", - "sha256:94cf49723928eb6070a892cb39d6c156f7b5a2db4e8971cb958f7b6b104fb4c4", - "sha256:97f9e7953a77d5a70f49b9a48da7776dc51e9b738151b22dacf101641594a626", - "sha256:9ad7f865eebde135d526bb3163d0b23ffff365cf87e767c649550964ad72785d", - "sha256:9c87ef410a58dd54b92424ffd7e28fd2ec65d2f7fc02b76f5e9b2067e355ebf6", - "sha256:a060cf8aa332052df2158e5a119303965be92c3da6f2d93b6878f0ebca80b2f6", - "sha256:c79f9c5fb846285f943aafeafda3358992d64f0ef58566e23484132ecd8d7d63", - "sha256:c92302a33138409e8f1ad16731568c55c9053eee71bb05b6b744067e1b62380f", - "sha256:d08b23fdb388c0715990cbc06866db554e1822c4bdcf6d4166cf30ac82df8c41", - "sha256:d350f0f2c2421e65fbc62690f26b59b0bcda1b614beb318c81e38647e0f673a1", - "sha256:e901964262a56d9ea3c2693df68bc9860b8bdda2b04768821e4c44ae797de117", - "sha256:ec29604081f10f16a7aea809ad42e27764188fc258b02259a03a8ff7ded3808d", - "sha256:edf31f1150778abd4322444c393ab9c7bd2af271dd4dafb4208fb613b1f3cdc9", - "sha256:f7e30c27477dffc3e85c2463b3e649f751789e0f6c8456099eea7ddd53be4a8a", - "sha256:ffe538682dc19cc542ae7c3e504fdf54ca7f86fb8a135e59dd6bc8627eae6cce" + "sha256:04d984e45a0b9815f4b407e8aadb50f25fbb82a605d89db927376e94c3adf371", + "sha256:06e730451b70471c08b8a0ee7f18e7e1df310dba9c780bbfb730a13102b143db", + "sha256:1f59596af2b3d64a9e43f9d6509b7a51db744d0eecc23297617c604e6823c6ae", + "sha256:233513465a2f25fce537b965621866da3d1f02e15708f371dd4e19f0fb7b7711", + "sha256:2696f1a6402c1a42ed12c5cd8adfb4b381c32d41e35a34b8ee544309ef854172", + "sha256:2ca55a4443b463eec90528ac27be14d226b1c2b972178bc7d4d282ce89e47b6a", + "sha256:30615e9115f976e00a938a28c7152562e8cf8e221ddacf4446dd8b20c0d97333", + "sha256:3a77e7b9f8991b81d7be8e0b2deab05013cf3ebb24ac2b863d2979acb68c73dd", + "sha256:54667c8ab16658cc0b7d824d8706b440d4db8382a3561042758bdfd48ca99298", + "sha256:59304c67d12394815331eda95ec892bf54ad95e0aa7bc1ccd8e0a4a5a25d4bf3", + "sha256:594f2f25b7bcfd9542c41b9df156fb5104f19f5fcefa51b1447f1d9f64c9cc14", + "sha256:5b5dde5dcedc4e6f5a71d7654a3c6e189ced82e97d7896b1ca5a5c5e4e0e916f", + "sha256:6bcea85f93fb2c94a1bcd35704c348a929a7fb24a0ec0cc2b9fcbb0046b87176", + "sha256:718d7f0eb3351052023b33fe0f83fc9e3beeb7cbacbd0ff2b52524e2153e4598", + "sha256:7c4a7ee37027ca716f42726b6f9fc491c13c843c7af559e0767dfab1ae9682d4", + "sha256:87a855b64a9b692604f6339baa4f9913d06838df1b4ccf0cb899dd18f56ec03c", + "sha256:8c006d52365c0a6bb41a07f9c8f9f458ae8170e0af3b8c49bf7089347066b97b", + "sha256:8e29701229705615d3dcfc439c7c46f40f913e57c7fe322b1efc30d3f37d1287", + "sha256:9b5b41737853bc49943864d5980dfb401a09e78ddb471e71291810ccdeadd712", + "sha256:b04569ff215b85ce3e2954979d2d5e0bf84007e43ddcf84b632fc6bc18e07909", + "sha256:b731d45764349313bd956c07bdc1d43803bb0ad2b11354328a074e416c7d84bc", + "sha256:c12e33cb17e2e12049a49b77696ee479791a4e44e541fdc393ae043e1246389f", + "sha256:c41442c3814afeba1f6f16fd70cdf312a2c73c6dee8dc3ac8926bb115713ad1d", + "sha256:c4d743c5c91424965707c9c8edc58b7cb43c127dcaf191fbcd304e2082eef56a", + "sha256:d6766fd28f4f47cf93280a57e3dc6a9d11bdada1a6e9f019b8c62b12bbc86f6a", + "sha256:d904570afcdbec40eb6bdbe24cba8d95c0215a2c0cbbc9c16301045bc8504c1f", + "sha256:e674be2f349ea810e221b0113bd4491f53584ac848d5bcc3b62443cfa11d9c40", + "sha256:e6ac40f1a62a227eb00226eb64c9c82bc878a3ed700b5414d34c9be57be87e87", + "sha256:f5270369c799b4405ed47d45c88c09fbd7942fc9fb9891c0dabf0b8c751b625d" ], "index": "pypi", - "version": "==7.2.0" + "version": "==8.0.0" }, "pytz": { "hashes": [