diff options
author | shivam kohli <kohlishivam5522@gmail.com> | 2018-05-19 16:25:16 +0530 |
---|---|---|
committer | shivam kohli <kohlishivam5522@gmail.com> | 2018-05-19 16:25:16 +0530 |
commit | 03c15c038ea802395734b55a965371d06e0117e3 (patch) | |
tree | f15ba2fac78846ac70282ac86f42f2f57a7d1315 /inventory | |
download | codeless-03c15c038ea802395734b55a965371d06e0117e3.tar.gz codeless-03c15c038ea802395734b55a965371d06e0117e3.tar.bz2 codeless-03c15c038ea802395734b55a965371d06e0117e3.zip |
basic login
Diffstat (limited to 'inventory')
-rw-r--r-- | inventory/__init__.py | 0 | ||||
-rw-r--r-- | inventory/admin.py | 13 | ||||
-rw-r--r-- | inventory/forms.py | 39 | ||||
-rw-r--r-- | inventory/migrations/0001_initial.py | 77 | ||||
-rw-r--r-- | inventory/migrations/__init__.py | 0 | ||||
-rw-r--r-- | inventory/models.py | 99 | ||||
-rw-r--r-- | inventory/tests.py | 3 | ||||
-rw-r--r-- | inventory/views.py | 72 |
8 files changed, 303 insertions, 0 deletions
diff --git a/inventory/__init__.py b/inventory/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/inventory/__init__.py diff --git a/inventory/admin.py b/inventory/admin.py new file mode 100644 index 0000000..76bf7e8 --- /dev/null +++ b/inventory/admin.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from django.contrib import admin +from inventory.models import Product, Merchant, Order, Purchase, PaymentButton + +# Register your models here. + +admin.site.register(Product) +admin.site.register(Merchant) +admin.site.register(Order) +admin.site.register(Purchase) +admin.site.register(PaymentButton) diff --git a/inventory/forms.py b/inventory/forms.py new file mode 100644 index 0000000..2d32f5a --- /dev/null +++ b/inventory/forms.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from django import forms +from django.contrib.auth.forms import UserCreationForm +from django.contrib.auth.models import User +from inventory.models import Merchant + + +class SignUpForm(UserCreationForm): + first_name = forms.CharField(max_length=30, required=False) + last_name = forms.CharField(max_length=30, required=False) + email = forms.EmailField(max_length=254) + + class Meta: + model = User + fields = ( + 'username', + 'first_name', + 'last_name', + 'email', + 'password1', + 'password2', + ) + + +class MerchantDetailForm(forms.ModelForm): + class Meta: + model = Merchant + fields = ("address",) + + +class LoginForm(forms.ModelForm): + class Meta: + model = User + fields = ( + "username", + "password" + ) diff --git a/inventory/migrations/0001_initial.py b/inventory/migrations/0001_initial.py new file mode 100644 index 0000000..cca4181 --- /dev/null +++ b/inventory/migrations/0001_initial.py @@ -0,0 +1,77 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import models, migrations +from django.conf import settings + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Merchant', + fields=[ + ('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)), + ('address', models.TextField()), + ('pay_url', models.URLField(max_length=250, default='NULL')), + ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Order', + fields=[ + ('order_id', models.AutoField(primary_key=True, serialize=False)), + ('description', models.CharField(max_length=300, blank=True, null=True)), + ('order_date', models.DateTimeField(auto_now=True)), + ('address', models.CharField(max_length=250, blank=True, null=True)), + ('fulfillment_url', models.URLField(default='NULL')), + ('merchant_id', models.ForeignKey(to='inventory.Merchant')), + ], + ), + migrations.CreateModel( + name='PaymentButton', + fields=[ + ('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)), + ('text', models.CharField(max_length=100, blank=True, null=True)), + ('font_size', models.CharField(max_length=50, blank=True, null=True)), + ('color', models.CharField(max_length=50, blank=True, null=True)), + ('background_color', models.CharField(max_length=50, blank=True, null=True)), + ('border_radius', models.CharField(max_length=50, blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='Product', + fields=[ + ('product_id', models.AutoField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=50, blank=True, null=True)), + ('description', models.CharField(max_length=300, blank=True, null=True)), + ('price', models.IntegerField(blank=True, null=True)), + ('delivery_date', models.DateTimeField(auto_now=True)), + ('starting_inventory', models.IntegerField(blank=True, null=True)), + ('minimuma_required', models.IntegerField(blank=True, null=True)), + ('inventory_on_hand', models.IntegerField(blank=True, null=True)), + ('inventory_recieved', models.IntegerField(blank=True, null=True)), + ('inventory_shipped', models.IntegerField(blank=True, null=True)), + ], + ), + migrations.CreateModel( + name='Purchase', + fields=[ + ('purchase_id', models.AutoField(primary_key=True, serialize=False)), + ('description', models.CharField(max_length=300, blank=True, null=True)), + ('purchase_date', models.DateTimeField(auto_now=True)), + ('product_recieved', models.IntegerField(blank=True, null=True)), + ('supplier', models.CharField(max_length=50, blank=True, null=True)), + ('product_id', models.ManyToManyField(null=True, to='inventory.Product')), + ], + ), + migrations.AddField( + model_name='order', + name='product_id', + field=models.ManyToManyField(null=True, to='inventory.Product'), + ), + ] diff --git a/inventory/migrations/__init__.py b/inventory/migrations/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/inventory/migrations/__init__.py diff --git a/inventory/models.py b/inventory/models.py new file mode 100644 index 0000000..4de9f1c --- /dev/null +++ b/inventory/models.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from django.db import models +from django.contrib.auth.models import User +from django.db.models.signals import post_save +from django.dispatch import receiver + + +class Product(models.Model): + """ The details of the product is described in this table. + This table tracks the inventory of the product. + """ + product_id = models.AutoField(primary_key=True) + name = models.CharField(max_length=50, blank=True, null=True) + description = models.CharField(max_length=300, blank=True, null=True) + price = models.IntegerField(blank=True, null=True) + delivery_date = models.DateTimeField(auto_now=True) + starting_inventory = models.IntegerField(blank=True, null=True) + minimuma_required = models.IntegerField(blank=True, null=True) + # inventory_on_hand is updated by purchase and outgoing orders. + inventory_on_hand = models.IntegerField(blank=True, null=True) + inventory_recieved = models.IntegerField(blank=True, null=True) + inventory_shipped = models.IntegerField(blank=True, null=True) + + def __str__(self): + return self.name + + +class Merchant(models.Model): + """ Extending the default Django User Model. + This will hold a One-To-One relationship with the existing User Model. + """ + user = models.OneToOneField(User, on_delete=models.CASCADE) + address = models.TextField() + pay_url = models.URLField(max_length=250, default='NULL') + + def __str__(self): + return self.user.username + + +@receiver(post_save, sender=User) +def create_user_profile(sender, instance, created, **kwargs): + """ Hooking the create_user_profile method to + the User model, whenever a save event occurs + """ + if created: + Merchant.objects.create(user=instance) + + +@receiver(post_save, sender=User) +def save_user_profile(sender, instance, **kwargs): + """ Hooking the save_user_profile method to + the User model, whenever a save event occurs + """ + instance.Merchant.save() + + +class Order(models.Model): + """ Details of the order customer buys is updated in this table. + These details will be used to make request to the Merchant Backend API + """ + order_id = models.AutoField(primary_key=True) + product_id = models.ManyToManyField(Product, null=True) + description = models.CharField(max_length=300, blank=True, null=True) + order_date = models.DateTimeField(auto_now=True) + address = models.CharField(max_length=250, blank=True, null=True) + merchant_id = models.ForeignKey(Merchant, on_delete=models.CASCADE) + fulfillment_url = models.URLField(max_length=200, default='NULL') + + def __str__(self): + return self.description + + +class Purchase(models.Model): + """ To keep a track of the purchases the merchant makes. + This table is essential to update the inverntory in hand. + """ + purchase_id = models.AutoField(primary_key=True) + product_id = models.ManyToManyField(Product, null=True) + description = models.CharField(max_length=300, blank=True, null=True) + purchase_date = models.DateTimeField(auto_now=True) + product_recieved = models.IntegerField(blank=True, null=True) + supplier = models.CharField(max_length=50, blank=True, null=True) + + def __str__(self): + return self.description + + +class PaymentButton(models.Model): + """ Design pattern for the payment button are stored in this table. """ + text = models.CharField(max_length=100, blank=True, null=True) + font_size = models.CharField(max_length=50, blank=True, null=True) + color = models.CharField(max_length=50, blank=True, null=True) + background_color = models.CharField(max_length=50, blank=True, null=True) + border_radius = models.CharField(max_length=50, blank=True, null=True) + + def __str__(self): + return self.text diff --git a/inventory/tests.py b/inventory/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/inventory/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/inventory/views.py b/inventory/views.py new file mode 100644 index 0000000..80be28e --- /dev/null +++ b/inventory/views.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- + +from inventory.forms import SignUpForm, MerchantDetailForm, LoginForm +from inventory.models import Merchant +from django.contrib.auth import authenticate +from django.contrib.auth import login as auth_login +from django.contrib.auth import logout as auth_logout +from django.shortcuts import get_object_or_404 +from django.contrib.auth.decorators import login_required +from django.shortcuts import render, redirect +from django.core.urlresolvers import resolve + +# Create your views here. + + +@login_required +def home(request): + return render(request, 'inventory/home.html') + + +def signup(request): + if request.method == 'POST': + form = SignUpForm(request.POST) + details_form = MerchantDetailForm(request.POST) + if form.is_valid(): + form.save() + username = form.cleaned_data.get('username') + raw_password = form.cleaned_data.get('password1') + user = authenticate(username=username, password=raw_password) + auth_login(request, user) + instance = get_object_or_404(Merchant, user=user) + if details_form.is_valid(): + instance.address = details_form.cleaned_data.get('address') + instance.save() + else: + print("somethings wrong with the form") + # Redirect to a success page. + return redirect('home') + else: + form = SignUpForm() + details_form = MerchantDetailForm() + dictionary = {'form': form, 'details_form': details_form} + return render(request, 'inventory/signup.html', dictionary) + + +def login(request): + form = LoginForm() + context_dict = {} + context_dict['form'] = form + error_message = "" + if request.method == 'POST': + username = request.POST['username'] + password = request.POST['password'] + user = authenticate(username=username, password=password) + if user is not None: + auth_login(request, user) + current_url = resolve(request.path_info).url_name + print(current_url) + # Redirect to a success page. + return redirect('home') + else: + error_message = "You are not a registered user please sign up" + form = LoginForm() + context_dict['form'] = form + context_dict['error_message'] = error_message + return render(request, 'inventory/login.html', context_dict) + + +def logout(request): + auth_logout(request) + return render(request, 'inventory/index.html') |