Create UI elements to cancel an order

- View
- Form
- Template
- Button
- Javascript
This commit is contained in:
Oliver Walters 2019-09-20 11:52:38 +10:00
parent 6f54091354
commit fcbf0e6e93
6 changed files with 72 additions and 1 deletions

View File

@ -6,6 +6,7 @@ Django Forms for interacting with Order objects
from __future__ import unicode_literals
from django import forms
from django.utils.translation import ugettext as _
from InvenTree.forms import HelperForm
@ -14,7 +15,7 @@ from .models import PurchaseOrder, PurchaseOrderLineItem
class IssuePurchaseOrderForm(HelperForm):
confirm = forms.BooleanField(required=False, help_text='Place order')
confirm = forms.BooleanField(required=False, help_text=_('Place order'))
class Meta:
model = PurchaseOrder
@ -23,6 +24,17 @@ class IssuePurchaseOrderForm(HelperForm):
]
class CancelPurchaseOrderForm(HelperForm):
confirm = forms.BooleanField(required=False, help_text=_('Cancel order'))
class Meta:
model = PurchaseOrder
fields = [
'confirm',
]
class EditPurchaseOrderForm(HelperForm):
""" Form for editing a PurchaseOrder object """

View File

@ -98,6 +98,13 @@ class Order(models.Model):
self.complete_date = datetime.now().date()
self.save()
def cancel_order(self):
""" Marks the order as CANCELLED. """
if self.status in [OrderStatus.PLACED, OrderStatus.PENDING]:
self.status = OrderStatus.CANCELLED
self.save()
class PurchaseOrder(Order):
""" A PurchaseOrder represents goods shipped inwards from an external supplier.

View File

@ -0,0 +1,7 @@
{% extends "modal_form.html" %}
{% block pre_form_content %}
Cancelling this order means that the order will no longer be editable.
{% endblock %}

View File

@ -43,6 +43,11 @@ InvenTree | {{ order }}
<span class='glyphicon glyphicon-check'></span>
</button>
{% endif %}
{% if order.status == OrderStatus.PENDING or order.status == OrderStatus.PLACED %}
<button type='button' class='btn btn-default btn-glyph' id='cancel-order' title='Cancel order'>
<span class='glyphicon glyphicon-remove'></span>
</button>
{% endif %}
</div>
</div>
</p>
@ -176,6 +181,12 @@ $("#edit-order").click(function() {
);
});
$("#cancel-order").click(function() {
launchModalForm("{% url 'purchase-order-cancel' order.id %}", {
reload: true,
});
});
$("#receive-order").click(function() {
launchModalForm("{% url 'purchase-order-receive' order.id %}", {
reload: true,

View File

@ -11,6 +11,7 @@ from . import views
purchase_order_detail_urls = [
url(r'^cancel/?', views.PurchaseOrderCancel.as_view(), name='purchase-order-cancel'),
url(r'^edit/?', views.PurchaseOrderEdit.as_view(), name='purchase-order-edit'),
url(r'^issue/?', views.PurchaseOrderIssue.as_view(), name='purchase-order-issue'),
url(r'^receive/?', views.PurchaseOrderReceive.as_view(), name='purchase-order-receive'),

View File

@ -112,6 +112,39 @@ class PurchaseOrderEdit(AjaxUpdateView):
return form
class PurchaseOrderCancel(AjaxUpdateView):
""" View for cancelling a purchase order """
model = PurchaseOrder
ajax_form_title = 'Cancel Order'
ajax_template_name = 'order/order_cancel.html'
form_class = order_forms.CancelPurchaseOrderForm
def post(self, request, *args, **kwargs):
""" Mark the PO as 'CANCELLED' """
order = self.get_object()
form = self.get_form()
confirm = str2bool(request.POST.get('confirm', False))
valid = False
if not confirm:
form.errors['confirm'] = [_('Confirm order cancellation')]
else:
valid = True
data = {
'form_valid': valid
}
if valid:
order.cancel_order()
return self.renderJsonResponse(request, form, data)
class PurchaseOrderIssue(AjaxUpdateView):
""" View for changing a purchase order from 'PENDING' to 'ISSUED' """