Display table of outstanding line items

This commit is contained in:
Oliver Walters 2019-06-15 17:29:33 +10:00
parent e28a435c07
commit c7ca9a3d8f
3 changed files with 49 additions and 0 deletions

View File

@ -195,6 +195,13 @@ class PurchaseOrder(Order):
line.save()
def pending_line_items(self):
""" Return a list of pending line items for this order.
Any line item where 'received' < 'quantity' will be returned.
"""
return [line for line in self.lines.all() if line.quantity > line.received]
class OrderLineItem(models.Model):
""" Abstract model for an order line item
@ -251,3 +258,8 @@ class PurchaseOrderLineItem(OrderLineItem):
)
received = models.PositiveIntegerField(default=0, help_text=_('Number of items received'))
def remaining(self):
""" Calculate the number of items remaining to be received """
r = self.quantity - self.received
return max(r, 0)

View File

@ -2,9 +2,43 @@
{% block form %}
<h4>Receive parts for {{ order }}</h4>
<form method='post' action='' class='js-modal-form' enctype='multipart/form-data'>
{% csrf_token %}
{% load crispy_forms_tags %}
<table class='table table-striped'>
<tr>
<th>Part</th>
<th>Order Code</th>
<th>On Order</th>
<th>Received</th>
<th>Receive</th>
</tr>
{% for line in lines %}
<tr>
{% if line.part %}
<td>
{% include "hover_image.html" with image=line.part.part.image hover=False %}
{{ line.part.part.full_name }}
</td>
<td>{{ line.part.SKU }}</td>
{% else %}
<td colspan='2'>Referenced part has been removed</td>
{% endif %}
<td>{{ line.quantity }}</td>
<td>{{ line.received }}</td>
<td>
<div class='control-group'>
<div class='controls'>
<input class='numberinput' type='number' min='0' value='{{ line.remaining }}' name='receive-quantity-{{ line.id }}'/>
</div>
</div>
</td>
</tr>
{% endfor %}
</table>
</form>
{% endblock %}

View File

@ -180,6 +180,7 @@ class PurchaseOrderReceive(AjaxView):
ctx = {
'order': self.order,
'lines': self.lines,
}
return ctx
@ -189,6 +190,8 @@ class PurchaseOrderReceive(AjaxView):
self.request = request
self.order = get_object_or_404(PurchaseOrder, pk=self.kwargs['pk'])
self.lines = self.order.pending_line_items()
return self.renderJsonResponse(request)