mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-29 20:16:44 +00:00
Display table of outstanding line items
This commit is contained in:
parent
e28a435c07
commit
c7ca9a3d8f
@ -195,6 +195,13 @@ class PurchaseOrder(Order):
|
|||||||
|
|
||||||
line.save()
|
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):
|
class OrderLineItem(models.Model):
|
||||||
""" Abstract model for an order line item
|
""" 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'))
|
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)
|
@ -2,9 +2,43 @@
|
|||||||
|
|
||||||
{% block form %}
|
{% block form %}
|
||||||
|
|
||||||
|
<h4>Receive parts for {{ order }}</h4>
|
||||||
|
|
||||||
<form method='post' action='' class='js-modal-form' enctype='multipart/form-data'>
|
<form method='post' action='' class='js-modal-form' enctype='multipart/form-data'>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% load crispy_forms_tags %}
|
{% 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>
|
</form>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
@ -180,6 +180,7 @@ class PurchaseOrderReceive(AjaxView):
|
|||||||
|
|
||||||
ctx = {
|
ctx = {
|
||||||
'order': self.order,
|
'order': self.order,
|
||||||
|
'lines': self.lines,
|
||||||
}
|
}
|
||||||
|
|
||||||
return ctx
|
return ctx
|
||||||
@ -189,6 +190,8 @@ class PurchaseOrderReceive(AjaxView):
|
|||||||
self.request = request
|
self.request = request
|
||||||
self.order = get_object_or_404(PurchaseOrder, pk=self.kwargs['pk'])
|
self.order = get_object_or_404(PurchaseOrder, pk=self.kwargs['pk'])
|
||||||
|
|
||||||
|
self.lines = self.order.pending_line_items()
|
||||||
|
|
||||||
return self.renderJsonResponse(request)
|
return self.renderJsonResponse(request)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user