diff --git a/atst/domain/task_orders.py b/atst/domain/task_orders.py index 9ecf41e9..38527d17 100644 --- a/atst/domain/task_orders.py +++ b/atst/domain/task_orders.py @@ -1,4 +1,5 @@ import datetime +from sqlalchemy import or_ from atst.database import db from atst.models.clin import CLIN @@ -76,3 +77,17 @@ class TaskOrders(BaseDomainClass): task_order = TaskOrders.get(task_order_id) db.session.delete(task_order) db.session.commit() + + @classmethod + def get_for_send_task_order_files(cls): + return ( + db.session.query(TaskOrder) + .join(CLIN) + .filter( + or_( + TaskOrder.pdf_last_sent_at < CLIN.last_sent_at, + TaskOrder.pdf_last_sent_at.is_(None), + ) + ) + .all() + ) diff --git a/tests/domain/test_task_orders.py b/tests/domain/test_task_orders.py index 42da74e6..2db84c5c 100644 --- a/tests/domain/test_task_orders.py +++ b/tests/domain/test_task_orders.py @@ -1,5 +1,5 @@ import pytest -from datetime import date, timedelta +from datetime import date, datetime, timedelta from decimal import Decimal from atst.domain.exceptions import AlreadyExistsError @@ -178,3 +178,21 @@ def test_allows_alphanumeric_number(): for number in valid_to_numbers: assert TaskOrders.create(portfolio.id, number, [], None) + + +def test_get_for_send_task_order_files(): + new_to = TaskOrderFactory.create(create_clins=[{}]) + updated_to = TaskOrderFactory.create( + create_clins=[{"last_sent_at": datetime(2020, 2, 1)}], + pdf_last_sent_at=datetime(2020, 1, 1), + ) + sent_to = TaskOrderFactory.create( + create_clins=[{"last_sent_at": datetime(2020, 1, 1)}], + pdf_last_sent_at=datetime(2020, 1, 1), + ) + + updated_and_new_task_orders = TaskOrders.get_for_send_task_order_files() + assert len(updated_and_new_task_orders) == 2 + assert sent_to not in updated_and_new_task_orders + assert updated_to in updated_and_new_task_orders + assert new_to in updated_and_new_task_orders diff --git a/tests/factories.py b/tests/factories.py index b7a63243..aa0a986a 100644 --- a/tests/factories.py +++ b/tests/factories.py @@ -322,6 +322,7 @@ class TaskOrderFactory(Base): number = factory.LazyFunction(random_task_order_number) signed_at = None _pdf = factory.SubFactory(AttachmentFactory) + pdf_last_sent_at = None @classmethod def _create(cls, model_class, *args, **kwargs): @@ -347,6 +348,7 @@ class CLINFactory(Base): jedi_clin_type = factory.LazyFunction( lambda *args: random.choice(list(clin.JEDICLINType)) ) + last_sent_at = None class NotificationRecipientFactory(Base):