From 07600c09b7811b7f963d679467111e3cda4ac726 Mon Sep 17 00:00:00 2001 From: Filipp Lepalaan Date: Fri, 18 Mar 2016 11:46:47 +0200 Subject: Handle editing a product that's been removed from order --- servo/views/order.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'servo/views') diff --git a/servo/views/order.py b/servo/views/order.py index e9d5a51..3b3930a 100644 --- a/servo/views/order.py +++ b/servo/views/order.py @@ -664,7 +664,12 @@ 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) + + try: + item = ServiceOrderItem.objects.get(pk=item_id) + except ServiceOrderItem.DoesNotExist: + messages.error(request, _('Product not found in order')) + return redirect(order) if not item.kbb_sn and item.product.part_type == "REPLACEMENT": try: -- cgit v1.2.3 From f5ae8615a6a53bed91aabbb84276ea891fae9ca7 Mon Sep 17 00:00:00 2001 From: Filipp Lepalaan Date: Fri, 18 Mar 2016 11:52:13 +0200 Subject: Throw 404 rather than custom error --- servo/views/order.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'servo/views') diff --git a/servo/views/order.py b/servo/views/order.py index 3b3930a..b4838f7 100644 --- a/servo/views/order.py +++ b/servo/views/order.py @@ -664,12 +664,7 @@ def edit_product(request, pk, item_id): Edits a product added to an order """ order = Order.objects.get(pk=pk) - - try: - item = ServiceOrderItem.objects.get(pk=item_id) - except ServiceOrderItem.DoesNotExist: - messages.error(request, _('Product not found in order')) - return redirect(order) + item = get_object_or_404(ServiceOrderItem, pk=item_id) if not item.kbb_sn and item.product.part_type == "REPLACEMENT": try: -- cgit v1.2.3 From f30d6d73513a5535cae4d97ee2cc85f01660750c Mon Sep 17 00:00:00 2001 From: Filipp Lepalaan Date: Mon, 21 Mar 2016 19:14:11 +0200 Subject: Adding device stats --- servo/views/stats.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'servo/views') 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) -- cgit v1.2.3 From 1b6e5ee722f76f594e3d95dfa8d77ac2b9f2173a Mon Sep 17 00:00:00 2001 From: Filipp Lepalaan Date: Mon, 21 Mar 2016 19:14:37 +0200 Subject: Adding GSX articles --- servo/views/note.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'servo/views') diff --git a/servo/views/note.py b/servo/views/note.py index 803f1a2..416e845 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,9 @@ 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() + #all_notes = all_notes.filter(order=None).order_by("is_read", "-created_at") if kind == "inbox": all_notes = all_notes.filter(order=None).order_by("is_read", "-created_at") if kind == "sent": @@ -119,7 +122,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) @@ -315,15 +318,22 @@ def list_notes(request, kind="inbox"): def view_note(request, kind, pk): - note = get_object_or_404(Note, pk=pk) + if kind == 'articles': + note = get_object_or_404(Article, pk=pk) + else: + note = get_object_or_404(Note, pk=pk) + data = prep_list_view(request, kind) - data['title'] = note.subject + 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): -- cgit v1.2.3 From ec867584ef2078492d70b555ca419ea9e01dca8e Mon Sep 17 00:00:00 2001 From: Filipp Lepalaan Date: Mon, 21 Mar 2016 20:37:11 +0200 Subject: Fixed article flag marking --- servo/views/note.py | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'servo/views') diff --git a/servo/views/note.py b/servo/views/note.py index 416e845..162b297 100644 --- a/servo/views/note.py +++ b/servo/views/note.py @@ -59,8 +59,7 @@ def prep_list_view(request, kind): all_notes = Note.objects.all().order_by("-created_at") if kind == "articles": - all_notes = Article.objects.all() - #all_notes = all_notes.filter(order=None).order_by("is_read", "-created_at") + 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": @@ -287,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) @@ -318,12 +328,15 @@ def list_notes(request, kind="inbox"): def view_note(request, kind, pk): + data = prep_list_view(request, kind) + 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 = prep_list_view(request, kind) data['title'] = note.get_title() data['note'] = note -- cgit v1.2.3 From 82e1fe63447f5c4d33d8a3ed7c365e7eab1006c0 Mon Sep 17 00:00:00 2001 From: Filipp Lepalaan Date: Sun, 1 May 2016 19:03:53 +0300 Subject: May '16 GSX update changes --- servo/views/api.py | 2 +- servo/views/order.py | 2 +- servo/views/search.py | 7 ++++--- 3 files changed, 6 insertions(+), 5 deletions(-) (limited to 'servo/views') 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/order.py b/servo/views/order.py index b4838f7..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) 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) -- cgit v1.2.3