adds price-calc to purchase order Fixes #1513

This commit is contained in:
Matthias 2021-05-04 21:33:00 +02:00
parent 5d214fc869
commit 55cdeef30e
2 changed files with 26 additions and 6 deletions

View File

@ -223,7 +223,7 @@ class PurchaseOrder(Order):
return reverse('po-detail', kwargs={'pk': self.id}) return reverse('po-detail', kwargs={'pk': self.id})
@transaction.atomic @transaction.atomic
def add_line_item(self, supplier_part, quantity, group=True, reference=''): def add_line_item(self, supplier_part, quantity, group=True, reference='', purchase_price=None):
""" Add a new line item to this purchase order. """ Add a new line item to this purchase order.
This function will check that: This function will check that:
@ -254,7 +254,12 @@ class PurchaseOrder(Order):
if matches.count() > 0: if matches.count() > 0:
line = matches.first() line = matches.first()
line.quantity += quantity # update quantity and price
quantity_new = line.quantity + quantity
line.quantity = quantity_new
supplier_price = supplier_part.get_price(quantity_new)
if line.purchase_price and supplier_price:
line.purchase_price = supplier_price / quantity_new
line.save() line.save()
return return
@ -263,7 +268,9 @@ class PurchaseOrder(Order):
order=self, order=self,
part=supplier_part, part=supplier_part,
quantity=quantity, quantity=quantity,
reference=reference) reference=reference,
purchase_price=purchase_price,
)
line.save() line.save()
@ -329,7 +336,7 @@ class PurchaseOrder(Order):
return self.pending_line_items().count() == 0 return self.pending_line_items().count() == 0
@transaction.atomic @transaction.atomic
def receive_line_item(self, line, location, quantity, user, status=StockStatus.OK): def receive_line_item(self, line, location, quantity, user, status=StockStatus.OK, purchase_price=None):
""" Receive a line item (or partial line item) against this PO """ Receive a line item (or partial line item) against this PO
""" """
@ -353,7 +360,8 @@ class PurchaseOrder(Order):
location=location, location=location,
quantity=quantity, quantity=quantity,
purchase_order=self, purchase_order=self,
status=status status=status,
purchase_price=purchase_price,
) )
stock.save() stock.save()

View File

@ -776,6 +776,7 @@ class PurchaseOrderReceive(AjaxUpdateView):
line.receive_quantity, line.receive_quantity,
self.request.user, self.request.user,
status=line.status_code, status=line.status_code,
purchase_price=line.purchase_price,
) )
@ -996,6 +997,14 @@ class OrderParts(AjaxView):
part.order_supplier = supplier_part.id if supplier_part else None part.order_supplier = supplier_part.id if supplier_part else None
part.order_quantity = quantity part.order_quantity = quantity
# set supplier-price
if supplier_part:
supplier_price = supplier_part.get_price(quantity)
if supplier_price:
part.purchase_price = supplier_price / quantity
if not hasattr(part, 'purchase_price'):
part.purchase_price = None
self.parts.append(part) self.parts.append(part)
if supplier_part is None: if supplier_part is None:
@ -1095,7 +1104,10 @@ class OrderParts(AjaxView):
sp=item.order_supplier)) sp=item.order_supplier))
continue continue
order.add_line_item(supplier_part, quantity) # get purchase price
purchase_price = item.purchase_price
order.add_line_item(supplier_part, quantity, purchase_price=purchase_price)
class POLineItemCreate(AjaxCreateView): class POLineItemCreate(AjaxCreateView):