Skip to content

Commit 0e82b94

Browse files
authored
Merge pull request #100 from ianshulx/Earth-828
Inventory mangement
2 parents b1d38e8 + c505fbb commit 0e82b94

File tree

25 files changed

+630
-0
lines changed

25 files changed

+630
-0
lines changed

inventory_management_system/inventory/__init__.py

Whitespace-only changes.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.contrib import admin
2+
from .models import InventoryItem, Category
3+
4+
admin.site.register(InventoryItem)
5+
admin.site.register(Category)
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class InventoryConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'inventory'
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from django import forms
2+
from django.contrib.auth.models import User
3+
from django.contrib.auth.forms import UserCreationForm
4+
from .models import Category, InventoryItem
5+
6+
class UserRegisterForm(UserCreationForm):
7+
email = forms.EmailField()
8+
9+
class Meta:
10+
model = User
11+
fields = ['username', 'email', 'password1', 'password2']
12+
13+
class InventoryItemForm(forms.ModelForm):
14+
category = forms.ModelChoiceField(queryset=Category.objects.all(), initial=0)
15+
class Meta:
16+
model = InventoryItem
17+
fields = ['name', 'quantity', 'category']
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Generated by Django 4.1.7 on 2023-04-26 12:02
2+
3+
from django.conf import settings
4+
from django.db import migrations, models
5+
import django.db.models.deletion
6+
7+
8+
class Migration(migrations.Migration):
9+
10+
initial = True
11+
12+
dependencies = [
13+
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
14+
]
15+
16+
operations = [
17+
migrations.CreateModel(
18+
name='Category',
19+
fields=[
20+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
21+
('name', models.CharField(max_length=200)),
22+
],
23+
),
24+
migrations.CreateModel(
25+
name='InventoryItem',
26+
fields=[
27+
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
28+
('name', models.CharField(max_length=200)),
29+
('quantity', models.IntegerField()),
30+
('date_created', models.DateTimeField(auto_now_add=True)),
31+
('category', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='inventory.category')),
32+
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
33+
],
34+
),
35+
]

inventory_management_system/inventory/migrations/__init__.py

Whitespace-only changes.
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
from django.db import models
2+
from django.contrib.auth.models import User
3+
4+
5+
class InventoryItem(models.Model):
6+
name = models.CharField(max_length=200)
7+
quantity = models.IntegerField()
8+
category = models.ForeignKey('Category', on_delete=models.SET_NULL, blank=True, null=True)
9+
date_created = models.DateTimeField(auto_now_add=True)
10+
user = models.ForeignKey(User, on_delete=models.CASCADE)
11+
12+
def __str__(self):
13+
return self.name
14+
15+
class Category(models.Model):
16+
name = models.CharField(max_length=200)
17+
18+
class Meta:
19+
verbose_name_plural = 'categories'
20+
21+
def __str__(self):
22+
return self.name
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6+
<link href="https://bootswatch.com/5/minty/bootstrap.min.css" rel="stylesheet">
7+
8+
<title>Document</title>
9+
</head>
10+
<body>
11+
{% include 'inventory/navigation.html' %}
12+
13+
{% block content %}
14+
{% endblock content %}
15+
16+
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-A3rJD856KowSb7dwlZdYEkO39Gagi7vIsF0jrRAoQmDKKtQBHUuLZ9AsSv4jD4Xa" crossorigin="anonymous"></script>
17+
</body>
18+
</html>
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
{% extends 'inventory/base.html' %}
2+
3+
{% block content %}
4+
{% if messages %}
5+
<div class="row mt-3">
6+
{% for message in messages %}
7+
{% if message.tags == 'error' %}
8+
<div class="col-md-10 col-12 mx-auto alert alert-danger">
9+
{{ message }}
10+
</div>
11+
{% else %}
12+
<div class="col-md-10 col-12 mx-auto alert alert-success">
13+
{{ message }}
14+
</div>
15+
{% endif %}
16+
{% endfor %}
17+
</div>
18+
{% endif %}
19+
<div class="row">
20+
<div class="col-md-10 col-12 mx-auto mt-5">
21+
<div class="d-flex justify-content-end">
22+
<a href="{% url 'add-item' %}" class="btn btn-primary">+</a>
23+
</div>
24+
25+
<table class="table table-hover table-striped">
26+
<thead>
27+
<tr>
28+
<th scope="col">ID</th>
29+
<th scope="col">Name</th>
30+
<th scope="col">Qty</th>
31+
<th scope="col">Category</th>
32+
<th scope="col"></th>
33+
<th scope="col"></th>
34+
</tr>
35+
</thead>
36+
<tbody>
37+
{% if items|length == 0 %}
38+
<tr>
39+
<th scope="row">-</th>
40+
<td>-</td>
41+
<td>-</td>
42+
<td>-</td>
43+
<td>-</td>
44+
<td></td>
45+
</tr>
46+
{% endif %}
47+
48+
{% for item in items %}
49+
<tr>
50+
<th scope="row">{{ item.id }}</th>
51+
<td>{{ item.name }}</td>
52+
{% if item.id in low_inventory_ids %}
53+
<td class="text-danger">{{ item.quantity }}</td>
54+
{% else %}
55+
<td class="text-success">{{ item.quantity }}</td>
56+
{% endif %}
57+
<td>{{ item.category.name }}</td>
58+
<td><a href="{% url 'edit-item' item.id %}" class="btn btn-outline-secondary">Edit</a></td>
59+
<td><a href="{% url 'delete-item' item.id %}" class="btn btn-secondary">Delete</a></td>
60+
</tr>
61+
{% endfor %}
62+
</tbody>
63+
</table>
64+
</div>
65+
</div>
66+
{% endblock content %}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{% extends 'inventory/base.html' %}
2+
3+
{% block content %}
4+
<div>
5+
<a href="{% url 'dashboard' %}" class="btn btn-outline-primary my-3 mx-4">Go back</a>
6+
<div class="row">
7+
<form method="POST" class="col-sm-11 col-md-4 mx-auto mt-5">
8+
{% csrf_token %}
9+
<h1 class="fw-light">Are you sure you want to delete {{ item.name }}?</h1>
10+
<p class="fw-light">This cannot be undone</p>
11+
12+
<div>
13+
<button class="btn btn-danger">Delete</button>
14+
</div>
15+
</form>
16+
</div>
17+
</div>
18+
{% endblock content %}

0 commit comments

Comments
 (0)