aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--servo/forms/repairs.py41
-rw-r--r--servo/migrations/0058_auto_20161031_1129.py20
-rw-r--r--servo/migrations/0059_repair_status_code.py20
-rw-r--r--servo/migrations/0060_auto_20161101_1215.py20
-rwxr-xr-xservo/templates/orders/repair.html48
-rw-r--r--servo/views/order.py34
6 files changed, 139 insertions, 44 deletions
diff --git a/servo/forms/repairs.py b/servo/forms/repairs.py
index 527d515..a13e9da 100644
--- a/servo/forms/repairs.py
+++ b/servo/forms/repairs.py
@@ -1,26 +1,31 @@
# -*- coding: utf-8 -*-
import json
+import gsxws
from django import forms
from django_countries import countries
-
from django.utils.translation import ugettext as _
from servo.models import User, Repair, Template
-from servo.forms import (BaseForm, AutocompleteTextarea, DateTimePickerInput,
- ChoiceField,)
+from servo.forms import (BaseForm, AutocompleteTextarea,
+ DateTimePickerInput, ChoiceField,)
class ImportForm(BaseForm):
+ """Import GSX repair."""
+
confirmation = forms.CharField(min_length=8,
max_length=15,
- label=_('Confirmation'))
+ label=_('Confirmation'),
+ help_text=_('Please enter the GSX dispatch ID'))
class GsxCustomerForm(BaseForm):
+ """Form for GSX customer data."""
+
firstName = forms.CharField(max_length=100, label=_('First name'))
- lastName = forms.CharField(max_length=100, label=_('Last name'))
+ lastName = forms.CharField(max_length=100, label=_('Last name'))
emailAddress = forms.CharField(max_length=100, label=_('Email'))
primaryPhone = forms.CharField(max_length=100, label=_('Phone'))
addressLine1 = forms.CharField(max_length=100, label=_('Address'))
@@ -35,7 +40,7 @@ class GsxComponentForm(forms.Form):
components = kwargs.get('components')
del(kwargs['components'])
super(GsxComponentForm, self).__init__(*args, **kwargs)
-
+
if len(components):
components = json.loads(components)
for k, v in components.items():
@@ -46,6 +51,18 @@ class GsxComponentForm(forms.Form):
self.json_data = json.dumps(self.cleaned_data)
+class StatusForm(forms.Form):
+ """Form for updating GSX repair status."""
+ status = ChoiceField(label=_('Status'), choices=gsxws.repairs.REPAIR_STATUSES)
+
+ def __init__(self, *args, **kwargs):
+ super(StatusForm, self).__init__(*args, **kwargs)
+ empty_choice = ('', '----',)
+ choices = list(gsxws.repairs.REPAIR_STATUSES)
+ choices.insert(0, empty_choice)
+ self.fields['status'].choices = choices
+
+
class GsxRepairForm(forms.ModelForm):
class Meta:
model = Repair
@@ -75,11 +92,11 @@ class GsxRepairForm(forms.ModelForm):
choices = Template.templates()
for f in ('notes', 'symptom', 'diagnosis',):
self.fields[f].widget = AutocompleteTextarea(choices=choices)
-
+
symptom_codes = self.instance.get_symptom_code_choices()
self.fields['symptom_code'] = forms.ChoiceField(choices=symptom_codes,
label=_('Symptom group'))
-
+
if empty(self.instance.symptom_code):
# default to the first choice
self.instance.symptom_code = symptom_codes[0][0]
@@ -87,7 +104,7 @@ class GsxRepairForm(forms.ModelForm):
issue_codes = self.instance.get_issue_code_choices()
self.fields['issue_code'] = forms.ChoiceField(choices=issue_codes,
label=_('Issue code'))
-
+
def clean(self, *args, **kwargs):
cd = super(GsxRepairForm, self).clean(*args, **kwargs)
if self.instance.has_serialized_parts():
@@ -98,11 +115,11 @@ class GsxRepairForm(forms.ModelForm):
return cd
def clean_attachment(self):
- MAX_FILESIZE = 10*1024*1024 # 10MB
+ max_filesize = 10 * 1024 * 1024 # 10MB
from django.template.defaultfilters import filesizeformat
f = self.cleaned_data.get('attachment')
- if f and f.size > MAX_FILESIZE:
- size = filesizeformat(MAX_FILESIZE)
+ if f and f.size > max_filesize:
+ size = filesizeformat(max_filesize)
error = _('Attachment should be no larger than %s') % size
raise forms.ValidationError(error)
diff --git a/servo/migrations/0058_auto_20161031_1129.py b/servo/migrations/0058_auto_20161031_1129.py
new file mode 100644
index 0000000..84ef5e1
--- /dev/null
+++ b/servo/migrations/0058_auto_20161031_1129.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.2 on 2016-10-31 09:29
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('servo', '0057_auto_20161014_1206'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='repair',
+ name='confirmation',
+ field=models.CharField(default=b'', editable=False, max_length=15),
+ ),
+ ]
diff --git a/servo/migrations/0059_repair_status_code.py b/servo/migrations/0059_repair_status_code.py
new file mode 100644
index 0000000..827aa31
--- /dev/null
+++ b/servo/migrations/0059_repair_status_code.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.2 on 2016-10-31 12:29
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('servo', '0058_auto_20161031_1129'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='repair',
+ name='status_code',
+ field=models.CharField(default=b'', editable=False, max_length=4),
+ ),
+ ]
diff --git a/servo/migrations/0060_auto_20161101_1215.py b/servo/migrations/0060_auto_20161101_1215.py
new file mode 100644
index 0000000..a206425
--- /dev/null
+++ b/servo/migrations/0060_auto_20161101_1215.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.2 on 2016-11-01 10:15
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('servo', '0059_repair_status_code'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='repair',
+ name='status_code',
+ field=models.CharField(choices=[(b'AWTP', b'Awaiting Parts'), (b'AWTR', b'Parts Allocated'), (b'BEGR', b'In Repair'), (b'RFPU', b'Ready for Pickup')], default=b'', editable=False, max_length=4),
+ ),
+ ]
diff --git a/servo/templates/orders/repair.html b/servo/templates/orders/repair.html
index b3798db..6c42ce0 100755
--- a/servo/templates/orders/repair.html
+++ b/servo/templates/orders/repair.html
@@ -12,26 +12,34 @@
{% block second_column %}
<h3>{{ status }}</h3>
-<dl class="dl-horizontal">
- <dt>{% trans "Symptom" %}</dt>
- <dd>{{ repair.symptom }}</dd>
- <dt>{% trans "Diagnosis" %}</dt>
- <dd>{{ repair.diagnosis }}</dd>
- <dt>{% trans "Request Review" %}</dt>
- <dd>{{ repair.request_review|yesno }}</dd>
-{% if repair.attachment %}
- <dt>{% trans "Attachment" %}</dt>
- {% with repair.attachment as a %}
- <dd><a class="label label-info window" href="{{ a.url }}"><i class="icon-download icon-white"></i> {{ a }}</a></dd>
- {% endwith %}
-{% endif %}
- <dt>{% trans "Confirmation" %}</dt>
- <dd>{{ repair.confirmation }}</dd>
- <dt>{% trans "Reference" %}</dt>
- <dd>{{ repair.reference }}</dd>
- <dt>{% trans "Notes" %}</dt>
- <dd>{{ notes|default:"-"|linebreaks }}</dd>
-</dl>
+<form method="post" action="">
+ {% csrf_token %}
+ <dl class="dl-horizontal">
+ <dt>{% trans "Symptom" %}</dt>
+ <dd>{{ repair.symptom|default:'-' }}</dd>
+ <dt>{% trans "Diagnosis" %}</dt>
+ <dd>{{ repair.diagnosis|default:'-' }}</dd>
+ <dt>{% trans "Request Review" %}</dt>
+ <dd>{{ repair.request_review|yesno }}</dd>
+ {% if repair.attachment %}
+ <dt>{% trans "Attachment" %}</dt>
+ {% with repair.attachment as a %}
+ <dd><a class="label label-info window" href="{{ a.url }}"><i class="icon-download icon-white"></i> {{ a }}</a></dd>
+ {% endwith %}
+ {% endif %}
+ <dt>{% trans "Confirmation" %}</dt>
+ <dd>{{ repair.confirmation|default:'-' }}</dd>
+ <dt>{% trans "Reference" %}</dt>
+ <dd>{{ repair.reference|default:'-' }}</dd>
+ <dt>{% trans "Notes" %}</dt>
+ <dd>{{ notes|default:"-"|linebreaks }}</dd>
+ <dt>{% trans "Status" %}</dt>
+ <dd>{{ status_form.status }}</dd>
+ </dl>
+ <button type="submit" class="btn btn-primary pull-right">{% trans "Update" %}</button>
+</form>
+<br/>
+<h4>{% trans "Parts" %}</h4>
<table class="table">
<tbody>
{% for part in parts %}
diff --git a/servo/views/order.py b/servo/views/order.py
index 2ae34a1..145e1f7 100644
--- a/servo/views/order.py
+++ b/servo/views/order.py
@@ -27,6 +27,7 @@ from servo.lib.utils import paginate
from servo.models.order import *
from servo.forms.orders import *
+from servo.forms.repairs import StatusForm
from servo.models import Note, User, Device, Customer
from servo.models.common import (Tag,
@@ -225,9 +226,7 @@ def reopen_order(request, pk):
@permission_required("servo.add_order")
def create(request, sn=None, device_id=None, product_id=None, note_id=None, customer_id=None):
- """
- Creates a new Service Order
- """
+ """Create a new Service Order."""
order = Order(created_by=request.user)
if customer_id is not None:
@@ -303,11 +302,8 @@ def toggle_tag(request, order_id, tag_id):
@permission_required("servo.change_order")
def toggle_task(request, order_id, item_id):
- """
- Toggles a given Check List item in this order
- """
+ """Toggle a given Check List item in this order."""
checklist_item = get_object_or_404(ChecklistItem, pk=item_id)
-
try:
item = ChecklistItemValue.objects.get(order_id=order_id,
item=checklist_item)
@@ -323,9 +319,7 @@ def toggle_task(request, order_id, item_id):
def repair(request, order_id, repair_id):
- """
- Show the corresponding GSX Repair for this Service Order
- """
+ """Show the corresponding GSX Repair for this Service Order."""
repair = get_object_or_404(Repair, pk=repair_id)
data = prepare_detail_view(request, order_id)
data['repair'] = repair
@@ -342,19 +336,35 @@ def repair(request, order_id, repair_id):
messages.error(request, e)
data['parts'] = repair.servicepart_set.all()
+
+ if request.method == 'POST':
+ data['status_form'] = StatusForm(request.POST)
+ if data['status_form'].is_valid():
+ code = data['status_form'].cleaned_data['status']
+ try:
+ repair.set_status_code(code)
+ new_status = repair.get_status_code_display()
+ msg = _('Repair status updated to %s') % new_status
+ messages.success(request, msg)
+ except Exception as e:
+ messages.error(request, e)
+ else:
+ data['status_form'] = StatusForm(initial={'status': repair.status_code})
+
return render(request, "orders/repair.html", data)
@permission_required("servo.change_order")
def complete_repair(request, order_id, repair_id):
+ """Mark this repair as complete in GSX."""
repair = get_object_or_404(Repair, pk=repair_id)
-
+
if request.method == 'POST':
try:
repair.close(request.user)
msg = _(u"Repair %s marked complete.") % repair.confirmation
messages.success(request, msg)
- except GsxError, e:
+ except GsxError as e:
messages.error(request, e)
return redirect(repair.order)