add a sorted_clins property for clin sorting logic
CLINS have a special ordering: - First, they are sorted by the last three digits - Then, they are sorted by the first digit Trying to add CLIN sorting logic to the relationship field in the task order proved to be more challenging than expected. So, a separate property was defined in order to access the clins in sorted order.
This commit is contained in:
parent
e2bd6bd823
commit
41bbbe8a39
@ -38,7 +38,7 @@ class CLIN(Base, mixins.TimestampsMixin):
|
||||
@property
|
||||
def type(self):
|
||||
return "Base" if self.number[0] == "0" else "Option"
|
||||
|
||||
|
||||
@property
|
||||
def is_completed(self):
|
||||
return all(
|
||||
|
@ -47,6 +47,10 @@ class TaskOrder(Base, mixins.TimestampsMixin):
|
||||
"CLIN", back_populates="task_order", cascade="all, delete-orphan"
|
||||
)
|
||||
|
||||
@property
|
||||
def sorted_clins(self):
|
||||
return sorted(self.clins, key=lambda clin: (clin.number[1:], clin.number[0]))
|
||||
|
||||
@hybrid_property
|
||||
def pdf(self):
|
||||
return self._pdf
|
||||
|
@ -49,7 +49,7 @@
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
{% for clin in task_order.clins %}
|
||||
{% for clin in task_order.sorted_clins %}
|
||||
<tr>
|
||||
<td>{{ clin.number }}</td>
|
||||
<td>{{ clin.type }}</td>
|
||||
|
@ -52,6 +52,25 @@ def test_task_order_clins_are_completed():
|
||||
assert not TaskOrderFactory.create(clins=[]).clins_are_completed
|
||||
|
||||
|
||||
def test_clin_sorting():
|
||||
task_order = TaskOrderFactory.create(
|
||||
clins=[
|
||||
CLINFactory.create(number="0002"),
|
||||
CLINFactory.create(number="0001"),
|
||||
CLINFactory.create(number="1001"),
|
||||
CLINFactory.create(number="1002"),
|
||||
CLINFactory.create(number="2001"),
|
||||
]
|
||||
)
|
||||
assert [clin.number for clin in task_order.sorted_clins] == [
|
||||
"0001",
|
||||
"1001",
|
||||
"2001",
|
||||
"0002",
|
||||
"1002",
|
||||
]
|
||||
|
||||
|
||||
class TestTaskOrderStatus:
|
||||
@patch("atst.models.TaskOrder.is_completed", new_callable=PropertyMock)
|
||||
@patch("atst.models.TaskOrder.is_signed", new_callable=PropertyMock)
|
||||
|
Loading…
x
Reference in New Issue
Block a user