mirror of
https://github.com/inventree/InvenTree.git
synced 2025-06-19 13:35:40 +00:00
Overdue order notification (#3114)
* Adds a background task to notify users when a PurchaseOrder becomes overdue * Schedule the overdue purchaseorder check to occur daily * Allow notifications to be sent to "Owner" instances - Extract user information from the Owner instance * add unit test to ensure notifications are sent for overdue purchase orders * Adds notification for overdue sales orders * Clean up notification display panel - Simplify rendering - Order "newest at top" - Element alignment tweaks * style fixes * More style fixes * Tweak notification padding * Fix import order * Adds task to notify user of overdue build orders * Adds unit tests for build order notifications * Refactor subject line for emails: - Use the configured instance title as a prefix for the subject line * Add email template for overdue build orders * Fix unit tests to accommodate new default value * Logic error fix
This commit is contained in:
@ -3,12 +3,17 @@
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
import django.core.exceptions as django_exceptions
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.models import Group
|
||||
from django.test import TestCase
|
||||
|
||||
import common.models
|
||||
import order.tasks
|
||||
from company.models import SupplierPart
|
||||
from InvenTree.status_codes import PurchaseOrderStatus
|
||||
from part.models import Part
|
||||
from stock.models import StockLocation
|
||||
from users.models import Owner
|
||||
|
||||
from .models import PurchaseOrder, PurchaseOrderLineItem
|
||||
|
||||
@ -24,7 +29,8 @@ class OrderTest(TestCase):
|
||||
'part',
|
||||
'location',
|
||||
'stock',
|
||||
'order'
|
||||
'order',
|
||||
'users',
|
||||
]
|
||||
|
||||
def test_basics(self):
|
||||
@ -197,3 +203,37 @@ class OrderTest(TestCase):
|
||||
order.receive_line_item(line, loc, line.quantity, user=None)
|
||||
|
||||
self.assertEqual(order.status, PurchaseOrderStatus.COMPLETE)
|
||||
|
||||
def test_overdue_notification(self):
|
||||
"""Test overdue purchase order notification
|
||||
|
||||
Ensure that a notification is sent when a PurchaseOrder becomes overdue
|
||||
"""
|
||||
po = PurchaseOrder.objects.get(pk=1)
|
||||
|
||||
# Created by 'sam'
|
||||
po.created_by = get_user_model().objects.get(pk=4)
|
||||
|
||||
# Responsible : 'Engineers' group
|
||||
responsible = Owner.create(obj=Group.objects.get(pk=2))
|
||||
po.responsible = responsible
|
||||
|
||||
# Target date = yesterday
|
||||
po.target_date = datetime.now().date() - timedelta(days=1)
|
||||
po.save()
|
||||
|
||||
# Check for overdue purchase orders
|
||||
order.tasks.check_overdue_purchase_orders()
|
||||
|
||||
for user_id in [2, 3, 4]:
|
||||
messages = common.models.NotificationMessage.objects.filter(
|
||||
category='order.overdue_purchase_order',
|
||||
user__id=user_id,
|
||||
)
|
||||
|
||||
self.assertTrue(messages.exists())
|
||||
|
||||
msg = messages.first()
|
||||
|
||||
self.assertEqual(msg.target_object_id, 1)
|
||||
self.assertEqual(msg.name, 'Overdue Purchase Order')
|
||||
|
Reference in New Issue
Block a user