aboutsummaryrefslogtreecommitdiffstats
path: root/servo
diff options
context:
space:
mode:
Diffstat (limited to 'servo')
-rw-r--r--servo/models/device.py24
-rw-r--r--servo/urls/device.py3
-rw-r--r--servo/views/device.py27
3 files changed, 47 insertions, 7 deletions
diff --git a/servo/models/device.py b/servo/models/device.py
index 85abeb9..d422f92 100644
--- a/servo/models/device.py
+++ b/servo/models/device.py
@@ -480,8 +480,11 @@ class Device(models.Model):
self.pk])
def get_purchase_country(self):
- # Return device's purchase country, can be 2-letter code (from checkin) or
- # full country name (from GSX)
+ """
+ Returns device's purchase country
+ can be 2-letter code (from checkin) or
+ full country name (from GSX)
+ """
from django_countries import countries
if len(self.purchase_country) > 2:
@@ -502,6 +505,23 @@ class Device(models.Model):
diags.shipTo = request.user.location.gsx_shipto
return diags.fetch_suites()
+ def get_gsx_repairs(self):
+ """
+ Returns this device's GSX repairs, if any
+ """
+ device = gsxws.Product(self.get_sn())
+ results = []
+
+ for i, p in enumerate(device.repairs()):
+ d = {'purchaseOrderNumber': p.purchaseOrderNumber}
+ d['repairConfirmationNumber'] = p.repairConfirmationNumber
+ d['createdOn'] = p.createdOn
+ d['customerName'] = p.customerName.encode('utf-8')
+ d['repairStatus'] = p.repairStatus
+ results.append(d)
+
+ return results
+
def __unicode__(self):
return '%s (%s)' % (self.description, self.sn)
diff --git a/servo/urls/device.py b/servo/urls/device.py
index 04839dc..2193369 100644
--- a/servo/urls/device.py
+++ b/servo/urls/device.py
@@ -20,6 +20,9 @@ urlpatterns = patterns(
url(r'^(?P<device>\d+)/diags/(?P<test_id>\d+)/run/$', run_test,
name="devices-run_test"),
+ url(r'^(?P<pk>\d+)/repairs/$', 'search_gsx_repairs',
+ name="devices-search_gsx_repairs"),
+
url(r'^(?P<pk>\d+)/update_gsx_details/$', "update_gsx_details",
name="devices-update_gsx_details"),
url(r'^(?P<pk>\d+)/orders/(?P<order_id>\d+)/queue/(?P<queue_id>\d+)/parts/$',
diff --git a/servo/views/device.py b/servo/views/device.py
index f52af8f..1aebabd 100644
--- a/servo/views/device.py
+++ b/servo/views/device.py
@@ -45,6 +45,9 @@ def model_from_slug(product_line, model=None):
def prep_list_view(request, product_line=None, model=None):
+ """
+ Prepares the basic device list view
+ """
title = _('Devices')
search_hint = "devices"
all_devices = Device.objects.all()
@@ -75,12 +78,12 @@ def prep_detail_view(request, pk, product_line=None, model=None):
if pk is None:
device = Device()
else:
- device = Device.objects.get(pk=pk)
+ device = get_object_or_404(Device, pk=pk)
data = prep_list_view(request, product_line, model)
data['device'] = device
- data['title'] = device.description
+ data['title'] = device.description
return data
@@ -98,7 +101,7 @@ def index(request, product_line=None, model=None):
def delete_device(request, product_line, model, pk):
- dev = Device.objects.get(pk=pk)
+ dev = get_object_or_404(Device, pk=pk)
if request.method == 'POST':
from django.db.models import ProtectedError
@@ -132,7 +135,7 @@ def edit_device(request, pk=None, product_line=None, model=None):
device.description = model_from_slug(product_line, model)
if pk is not None:
- device = Device.objects.get(pk=pk)
+ device = get_object_or_404(Device, pk=pk)
form = DeviceForm(instance=device)
@@ -202,7 +205,7 @@ def parts(request, pk, order_id, queue_id):
"""
from decimal import InvalidOperation
- device = Device.objects.get(pk=pk)
+ device = get_object_or_404(Device, pk=pk)
order = device.order_set.get(pk=order_id)
try:
@@ -343,3 +346,17 @@ def update_gsx_details(request, pk):
def get_info(request, pk):
device = get_object_or_404(Device, pk=pk)
return render(request, "devices/get_info.html", locals())
+
+
+def search_gsx_repairs(request, pk):
+ """
+ Performs async GSX search for this device's GSX repairs
+ """
+ device = get_object_or_404(Device, pk=pk)
+
+ try:
+ GsxAccount.default(request.user)
+ results = device.get_gsx_repairs()
+ return render(request, "devices/search_gsx_repairs.html", results)
+ except gsxws.GsxError as message:
+ return render(request, "search/results/gsx_error.html", locals())