aboutsummaryrefslogtreecommitdiffstats
path: root/servo/views
diff options
context:
space:
mode:
Diffstat (limited to 'servo/views')
-rw-r--r--servo/views/api.py2
-rw-r--r--servo/views/note.py39
-rw-r--r--servo/views/order.py4
-rw-r--r--servo/views/search.py7
-rw-r--r--servo/views/stats.py27
5 files changed, 65 insertions, 14 deletions
diff --git a/servo/views/api.py b/servo/views/api.py
index 9d2ba76..c8253bc 100644
--- a/servo/views/api.py
+++ b/servo/views/api.py
@@ -309,7 +309,7 @@ def warranty(request):
try:
GsxAccount.default(request.user)
except Exception as e:
- return error('Cannot connect to GSX (check user name and password)')
+ return error('Cannot connect to GSX (check username and password)')
try:
result = Device.from_gsx(sn, cached=False)
diff --git a/servo/views/note.py b/servo/views/note.py
index 803f1a2..162b297 100644
--- a/servo/views/note.py
+++ b/servo/views/note.py
@@ -19,8 +19,8 @@ from reportlab.graphics.shapes import Drawing
from reportlab.graphics.barcode import createBarcodeDrawing
from servo.lib.utils import paginate
-from servo.models import (Order, Template, Tag, Customer, Note,
- Attachment, Escalation,)
+from servo.models import (Order, Template, Tag, Customer, Note,
+ Attachment, Escalation, Article,)
from servo.forms import NoteForm, NoteSearchForm, EscalationForm
@@ -58,6 +58,8 @@ def prep_list_view(request, kind):
data = {'title': _("Messages")}
all_notes = Note.objects.all().order_by("-created_at")
+ if kind == "articles":
+ all_notes = Article.objects.all().order_by('-date_created')
if kind == "inbox":
all_notes = all_notes.filter(order=None).order_by("is_read", "-created_at")
if kind == "sent":
@@ -119,7 +121,7 @@ def edit(request, pk=None, order_id=None, parent=None, recipient=None,
if recipient is not None:
to.append(recipient)
command = _('Send')
-
+
if order_id is not None:
order = get_object_or_404(Order, pk=order_id)
@@ -284,7 +286,18 @@ def templates(request, template_id=None):
return render(request, 'notes/templates.html', {'templates': templates})
-def toggle_flag(request, pk, flag):
+def toggle_flag(request, kind, pk, flag):
+ if kind == 'articles':
+ note = get_object_or_404(Article, pk=pk)
+ if flag == 'flagged':
+ note.toggle_flagged(request.user)
+ return HttpResponse(note.get_flagged_title(request.user))
+ if flag == 'read':
+ note.toggle_read(request.user)
+ return HttpResponse(note.get_read_title(request.user))
+
+ return HttpResponse(getattr(note, 'get_%s_title' % flag)())
+
field = 'is_%s' % flag
note = get_object_or_404(Note, pk=pk)
attr = getattr(note, field)
@@ -315,15 +328,25 @@ def list_notes(request, kind="inbox"):
def view_note(request, kind, pk):
- note = get_object_or_404(Note, pk=pk)
data = prep_list_view(request, kind)
- data['title'] = note.subject
+
+ if kind == 'articles':
+ note = get_object_or_404(Article, pk=pk)
+ data['read_title'] = note.get_read_title(request.user)
+ data['flagged_title'] = note.get_flagged_title(request.user)
+ else:
+ note = get_object_or_404(Note, pk=pk)
+
+ data['title'] = note.get_title()
data['note'] = note
if kind == 'escalations':
return render(request, "notes/view_escalation.html", data)
- else:
- return render(request, "notes/view_note.html", data)
+
+ if kind == 'articles':
+ return render(request, "notes/view_article.html", data)
+
+ return render(request, "notes/view_note.html", data)
def find(request):
diff --git a/servo/views/order.py b/servo/views/order.py
index e9d5a51..2ae34a1 100644
--- a/servo/views/order.py
+++ b/servo/views/order.py
@@ -631,7 +631,7 @@ def device_from_product(request, pk, item_id):
try:
GsxAccount.default(request.user, order.queue)
- device = Device.from_gsx(soi.sn)
+ device = Device.from_gsx(soi.sn, user=request.user)
device.save()
event = order.add_device(device, request.user)
messages.success(request, event)
@@ -664,7 +664,7 @@ def edit_product(request, pk, item_id):
Edits a product added to an order
"""
order = Order.objects.get(pk=pk)
- item = ServiceOrderItem.objects.get(pk=item_id)
+ item = get_object_or_404(ServiceOrderItem, pk=item_id)
if not item.kbb_sn and item.product.part_type == "REPLACEMENT":
try:
diff --git a/servo/views/search.py b/servo/views/search.py
index 7640839..43f840f 100644
--- a/servo/views/search.py
+++ b/servo/views/search.py
@@ -21,6 +21,7 @@ from servo.models import (Note, Device, Product,
def search_gsx(request, what, param, query):
"""
The first phase of a GSX search. Sets up the GSX connection.
+ @TODO: Should this be in Device.from_gsx()?
"""
title = _(u'Search results for "%s"') % query
@@ -62,13 +63,13 @@ def get_gsx_search_results(request, what, param, query):
return render(request, "orders/list.html", locals())
if what == "warranty":
- # Update wty info if been here before
+ # Update wty info if device has been serviced before
try:
device = Device.objects.get(sn__exact=query)
device.update_gsx_details()
except Exception:
try:
- device = Device.from_gsx(query)
+ device = Device.from_gsx(query, user=request.user)
except Exception as e:
return render(request, error_template, {'message': e})
@@ -117,11 +118,11 @@ def get_gsx_search_results(request, what, param, query):
try:
device = gsxws.Product(query)
#results = device.repairs()
- # @TODO: move the encoding hack to py-gsxws
for i, p in enumerate(device.repairs()):
d = {'purchaseOrderNumber': p.purchaseOrderNumber}
d['repairConfirmationNumber'] = p.repairConfirmationNumber
d['createdOn'] = p.createdOn
+ # @TODO: move the encoding hack to py-gsxws
d['customerName'] = p.customerName.encode('utf-8')
d['repairStatus'] = p.repairStatus
results.append(d)
diff --git a/servo/views/stats.py b/servo/views/stats.py
index 0acf9f7..6a9f9a8 100644
--- a/servo/views/stats.py
+++ b/servo/views/stats.py
@@ -421,3 +421,30 @@ def repairs(request):
totals['turnaround'] = ServoTimeDelta(totals['turnaround']/totals['dispatched'])
return render(request, "stats/newstats.html", locals())
+
+
+def devices(request):
+ data = prep_view(request)
+ data['form'] = DeviceStatsForm()
+ start_date = data['initial']['start_date']
+ end_date = data['initial']['end_date']
+
+ if request.method == 'POST':
+ form = DeviceStatsForm(request.POST)
+ if form.is_valid():
+ start_date = form.cleaned_data['start_date']
+ end_date = form.cleaned_data['end_date']
+
+ cursor = connection.cursor()
+ query = '''SELECT d.description device, count(o) AS orders, count(r) AS repairs
+ FROM servo_device d, servo_order o, servo_repair r, servo_orderdevice od
+ WHERE d.id = od.device_id
+ AND o.id = od.order_id
+ AND r.order_id = o.id
+ AND (o.created_at, o.created_at) OVERLAPS (%s, %s)
+ GROUP BY d.description''';
+ cursor.execute(query, [start_date, end_date])
+ data['results'] = cursor.fetchall()
+ data['title'] = _('Device statistics')
+
+ return render(request, "stats/devices.html", data)