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
|
@property
|
||||||
def type(self):
|
def type(self):
|
||||||
return "Base" if self.number[0] == "0" else "Option"
|
return "Base" if self.number[0] == "0" else "Option"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_completed(self):
|
def is_completed(self):
|
||||||
return all(
|
return all(
|
||||||
|
@ -47,6 +47,10 @@ class TaskOrder(Base, mixins.TimestampsMixin):
|
|||||||
"CLIN", back_populates="task_order", cascade="all, delete-orphan"
|
"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
|
@hybrid_property
|
||||||
def pdf(self):
|
def pdf(self):
|
||||||
return self._pdf
|
return self._pdf
|
||||||
|
@ -49,7 +49,7 @@
|
|||||||
</thead>
|
</thead>
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for clin in task_order.clins %}
|
{% for clin in task_order.sorted_clins %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{ clin.number }}</td>
|
<td>{{ clin.number }}</td>
|
||||||
<td>{{ clin.type }}</td>
|
<td>{{ clin.type }}</td>
|
||||||
|
@ -52,6 +52,25 @@ def test_task_order_clins_are_completed():
|
|||||||
assert not TaskOrderFactory.create(clins=[]).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:
|
class TestTaskOrderStatus:
|
||||||
@patch("atst.models.TaskOrder.is_completed", new_callable=PropertyMock)
|
@patch("atst.models.TaskOrder.is_completed", new_callable=PropertyMock)
|
||||||
@patch("atst.models.TaskOrder.is_signed", new_callable=PropertyMock)
|
@patch("atst.models.TaskOrder.is_signed", new_callable=PropertyMock)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user