mirror of
https://github.com/inventree/InvenTree.git
synced 2025-05-03 13:58:47 +00:00
Skeleton for part tracking
- Added list and detail view - Fixed some links
This commit is contained in:
parent
9f42085731
commit
9e6c7350f9
@ -9,6 +9,7 @@
|
|||||||
<li class="active"><a href="/part/">Parts</a></li>
|
<li class="active"><a href="/part/">Parts</a></li>
|
||||||
<li><a href="/stock/">Stock</a></li>
|
<li><a href="/stock/">Stock</a></li>
|
||||||
<li><a href="/supplier/">Suppliers</a></li>
|
<li><a href="/supplier/">Suppliers</a></li>
|
||||||
|
<li><a href="/track/">Tracking</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
@ -1,12 +1,12 @@
|
|||||||
<div class='navigation'>
|
<div class='navigation'>
|
||||||
<nav aria-label="breadcrumb">
|
<nav aria-label="breadcrumb">
|
||||||
<ol class="breadcrumb">
|
<ol class="breadcrumb">
|
||||||
<li class="breadcrumb-item{% if category is None %} active" aria-current="page{% endif %}"><a href="/part/list/">Parts</a></li>
|
<li class="breadcrumb-item{% if category is None %} active" aria-current="page{% endif %}"><a href="/part/">Parts</a></li>
|
||||||
{% if category %}
|
{% if category %}
|
||||||
{% for path_item in category.parentpath %}
|
{% for path_item in category.parentpath %}
|
||||||
<li class="breadcrumb-item"><a href="/part/list/?category={{ path_item.id }}">{{ path_item.name }}</a></li>
|
<li class="breadcrumb-item"><a href="{% url 'category-detail' path_item.id %}">{{ path_item.name }}</a></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<li class="breadcrumb-item active" aria-current="page"><a href="/part/list/?category={{ category.id }}">{{ category.name }}</a></li>
|
<li class="breadcrumb-item active" aria-current="page"><a href="{% url 'category-detail' category.id %}">{{ category.name }}</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
|
@ -1,10 +1,16 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from .models import UniquePart
|
from .models import UniquePart, PartTrackingInfo
|
||||||
|
|
||||||
|
|
||||||
class UniquePartAdmin(admin.ModelAdmin):
|
class UniquePartAdmin(admin.ModelAdmin):
|
||||||
list_display = ('part', 'serial', 'status', 'creation_date')
|
list_display = ('part', 'serial', 'status', 'creation_date')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class PartTrackingAdmin(admin.ModelAdmin):
|
||||||
|
list_display = ('part', 'date', 'title')
|
||||||
|
|
||||||
|
|
||||||
admin.site.register(UniquePart, UniquePartAdmin)
|
admin.site.register(UniquePart, UniquePartAdmin)
|
||||||
|
admin.site.register(PartTrackingInfo, PartTrackingAdmin)
|
@ -52,7 +52,8 @@ class UniquePart(models.Model):
|
|||||||
status = models.IntegerField(default=PART_IN_PROGRESS, choices=PART_STATUS_CODES.items())
|
status = models.IntegerField(default=PART_IN_PROGRESS, choices=PART_STATUS_CODES.items())
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.part.name
|
return "{pn} - # {sn}".format(pn = self.part.name,
|
||||||
|
sn = self.serial)
|
||||||
|
|
||||||
|
|
||||||
class PartTrackingInfo(models.Model):
|
class PartTrackingInfo(models.Model):
|
||||||
|
26
InvenTree/track/templates/track/detail.html
Normal file
26
InvenTree/track/templates/track/detail.html
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
Part: <a href="{% url 'part-detail' part.part.id %}">{{ part.part.name }}</a><br>
|
||||||
|
Serial number: {{ part.serial }}
|
||||||
|
|
||||||
|
{% if part.tracking_info.all|length > 0 %}
|
||||||
|
<p>Tracking information:</p>
|
||||||
|
<ul class='list-group'>
|
||||||
|
{% for info in part.tracking_info.all %}
|
||||||
|
<li class='list-group-item'>
|
||||||
|
<div class='panel panel-default'>
|
||||||
|
<div class='panel-heading'>
|
||||||
|
{{ info.title }}<span class="badge">{{ info.date }}</span>
|
||||||
|
</div>
|
||||||
|
{% if info.notes %}
|
||||||
|
<div class='panel-body'>{{ info.notes }}</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% endblock %}
|
5
InvenTree/track/templates/track/edit.html
Normal file
5
InvenTree/track/templates/track/edit.html
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{% extends "base.html"% }
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
{% endblock %}
|
@ -1,4 +1,4 @@
|
|||||||
{% include "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
|
|
||||||
@ -7,7 +7,9 @@
|
|||||||
<ul class='list-group'>
|
<ul class='list-group'>
|
||||||
{% for part in parts.all %}
|
{% for part in parts.all %}
|
||||||
<li class='list-group-item'>
|
<li class='list-group-item'>
|
||||||
|
<a href="{% url 'track-detail' part.id %}">
|
||||||
{{ part.part.name }} - SN {{ part.serial }}
|
{{ part.part.name }} - SN {{ part.serial }}
|
||||||
|
</a>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
5
InvenTree/track/templates/track/new.html
Normal file
5
InvenTree/track/templates/track/new.html
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
{% endblock %}
|
@ -23,7 +23,13 @@ unique_api_urls = [
|
|||||||
]
|
]
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
track_detail_urls = [
|
||||||
|
url('^.*$', views.TrackDetail.as_view(), name='track-detail'),
|
||||||
|
]
|
||||||
|
|
||||||
tracking_urls = [
|
tracking_urls = [
|
||||||
|
# Detail view
|
||||||
|
url(r'^(?P<pk>\d+)/', include(track_detail_urls)),
|
||||||
|
|
||||||
# List ALL tracked items
|
# List ALL tracked items
|
||||||
url('', views.TrackIndex.as_view(), name='track-index'),
|
url('', views.TrackIndex.as_view(), name='track-index'),
|
||||||
|
@ -16,3 +16,10 @@ class TrackIndex(ListView):
|
|||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return UniquePart.objects.order_by('part__name', 'serial')
|
return UniquePart.objects.order_by('part__name', 'serial')
|
||||||
|
|
||||||
|
|
||||||
|
class TrackDetail(DetailView):
|
||||||
|
queryset = UniquePart.objects.all()
|
||||||
|
template_name = 'track/detail.html'
|
||||||
|
context_object_name='part'
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user