summaryrefslogtreecommitdiffstats
path: root/inventory/views.py
blob: ddc2c78927569fe3e41ee95d4c429ddc5ba40fa6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
from django.shortcuts import get_object_or_404
from django.utils.translation import ugettext_lazy as _
from django.shortcuts import render_to_response
from django.shortcuts import render
from django.http import HttpResponse
from django.db.models import Q
import models
from django.core.mail import mail_admins
from forms import UploadFileForm
from django.core.exceptions import ObjectDoesNotExist
from models import Barcode



def home(request):
	return render_to_response('home.html')


def item(request, selectedid):
	p = get_object_or_404(models.Barcode, pk=selectedid.upper())

	parentpath = []
	temp_parentpath = []

	x = p.item
	parentpath.append(x)
	x = x.parent
	while x:
		parentpath.append(x)
		if x.temp_parent:
			x = x.temp_parent
		else:
			x = x.parent

	x = p.item
	while x:
		temp_parentpath.append(x)
		if x.temp_parent:
			x = x.temp_parent
		else:
			x = x.parent


	temp_parentpath.reverse()
	parentpath.reverse()

	parameters = {
		"user": request.user,
		"id": p.item.id,
		"image": p.item.image,
		"name": p.item.name,
		"codes": p.item.barcodes(),
		"description": p.item.description,
		"supplier": p.item.supplier,
		"note": p.item.note,
		"in_use": p.item.inUse,
		"parent": p.item.parent,
		"temporary_parent": p.item.temp_parent,
		"parentpath": parentpath,
		"temporary_parentpath": temp_parentpath,
		"children": models.Item.objects.filter(Q(parent = p.item.id) | Q(temp_parent = p.item.id)),
		"tags": p.item.tag.all(),
		"owner": p.item.owner,

	}
	return render_to_response('item.html', parameters)


def search(request, term):
	results = models.Item.objects.filter(Q(name__contains = term) | Q(description__contains = term))

	return render_to_response('search.html', {
		"term": term,
		"results": results
	})


def graph(request):
	items = models.Item.objects.all()

	result = render_to_response('graph.txt', {"items": items})
	result['Content-Type'] = "text/plain; charset=utf-8"

	return result


def upload(request):
	#if request.method == 'POST':
	form = UploadFileForm(request.POST, request.FILES)
	if form.is_valid() and request.user.is_authenticated:
		codefile = request.FILES['file']
		data = codefile.read().splitlines()
		index = 0
		error = 0
		if request.POST['type'] == '1':
			parent = ''
			for code in data:
				if code != 'NEWPARENT':
					try:
						b = Barcode.objects.get(code=code.upper())
						if parent == '':
							p = Barcode.objects.get(code=code.upper())
							parent = code
						else:
							i = Barcode.objects.get(code=code.upper())
							i.item.parent = p.item
							i.item.save()
					except ObjectDoesNotExist:
						error += 1
						data[index] = code + ' existiert nicht!'
				else:
					parent = ''
				index += 1
		elif request.POST['type'] == '2':
			business_area = models.BusinessArea.objects.get(name='ideell')
			category = models.Category.objects.get(name='Inventar')
			parent = models.Barcode.objects.get(code='H0000')

			for code in data:
				if code[0] == 'H' and len(code) == 5:
					try:
						b = Barcode.objects.get(code=code.upper())
						error += 1
						data[index] = code + ' existiert bereits'
					except ObjectDoesNotExist:
						name = 'Regalborte' + code
						description = 'Borte im Hochregal \nReihe: ' + code[1] + '\nRegal: ' + code[2]
						i = models.Item(name=name, description=description, business_area=business_area, category=category, parent=parent.item)
						i.save()
						barcode = Barcode(code=code, item=i)
						barcode.save()
				else:
					data[index] = code + ' ist nicht im richtigen Format'
					error += 1
				index += 1
		return render(request, 'upload.html', {'form': form, 'data': data})
	else:
		form = UploadFileForm()
	return render(request, 'upload.html', {'form': form})


def stats(request):
	return render_to_response('stats.html', {
		"number_of_codes": models.Barcode.objects.count(),
		"number_of_items": models.Item.objects.count(),
		"number_of_items_with_parent": models.Item.objects.filter(parent__isnull=False).count(),
		"number_of_items_without_parent": models.Item.objects.filter(parent__isnull=True).count(),
		"max_barcodes_item": models.Item.objects.raw('SELECT inventory_item.*, COUNT(inventory_barcode.item_id) AS number_of_attached_barcodes FROM inventory_item INNER JOIN inventory_barcode ON inventory_barcode.item_id = inventory_item.id GROUP BY inventory_barcode.item_id ORDER BY COUNT(inventory_barcode.item_id) DESC LIMIT 1;')[0],
	})