Improve Epic sort feature

remotes/origin/issue/4795/notification_even_they_are_disabled
David Barragán Merino 2016-07-29 12:39:51 +02:00
parent 3dbde420d8
commit 133cf149fd
3 changed files with 12 additions and 21 deletions

View File

@ -200,12 +200,11 @@ class EpicViewSet(OCCResourceMixin, VotedResourceMixin, HistoryResourceMixin,
if project.blocked_code is not None: if project.blocked_code is not None:
raise exc.Blocked(_("Blocked element")) raise exc.Blocked(_("Blocked element"))
services.update_epics_order_in_bulk(data["bulk_epics"], ret = services.update_epics_order_in_bulk(data["bulk_epics"],
project=project, project=project,
field=order_field) field=order_field)
services.snapshot_epics_in_bulk(data["bulk_epics"], request.user)
return response.NoContent() return response.Ok(ret)
@list_route(methods=["POST"]) @list_route(methods=["POST"])
def bulk_update_epics_order(self, request, **kwargs): def bulk_update_epics_order(self, request, **kwargs):

View File

@ -27,6 +27,7 @@ from django.utils.translation import ugettext as _
from taiga.base.utils import db, text from taiga.base.utils import db, text
from taiga.projects.history.services import take_snapshot from taiga.projects.history.services import take_snapshot
from taiga.projects.services import apply_order_updates
from taiga.projects.epics.apps import connect_epics_signals from taiga.projects.epics.apps import connect_epics_signals
from taiga.projects.epics.apps import disconnect_epics_signals from taiga.projects.epics.apps import disconnect_epics_signals
from taiga.events import events from taiga.events import events
@ -78,28 +79,21 @@ def update_epics_order_in_bulk(bulk_data: list, field: str, project: object):
Update the order of some epics. Update the order of some epics.
`bulk_data` should be a list of tuples with the following format: `bulk_data` should be a list of tuples with the following format:
[(<epic id>, {<field>: <value>, ...}), ...] [{'epic_id': <value>, 'order': <value>}, ...]
""" """
epic_ids = [] epics = project.epics.all()
new_order_values = []
for epic_data in bulk_data:
epic_ids.append(epic_data["epic_id"])
new_order_values.append({field: epic_data["order"]})
epic_orders = {e.id: getattr(e, field) for e in epics}
new_epic_orders = {d["epic_id"]: d["order"] for d in bulk_data}
apply_order_updates(epic_orders, new_epic_orders)
epic_ids = epic_orders.keys()
events.emit_event_for_ids(ids=epic_ids, events.emit_event_for_ids(ids=epic_ids,
content_type="epics.epic", content_type="epics.epic",
projectid=project.pk) projectid=project.pk)
db.update_in_bulk_with_ids(epic_ids, new_order_values, model=models.Epic) db.update_attr_in_bulk_for_ids(epic_orders, field, models.Epic)
return epic_orders
def snapshot_epics_in_bulk(bulk_data, user):
for epic_data in bulk_data:
try:
epic = models.Epic.objects.get(pk=epic_data['epic_id'])
take_snapshot(epic, user=user)
except models.Epic.DoesNotExist:
pass
##################################################### #####################################################

View File

@ -131,7 +131,6 @@ def test_apply_order_updates_duplicated_orders():
"a": 3 "a": 3
} }
apply_order_updates(orders, new_orders) apply_order_updates(orders, new_orders)
print(orders)
assert orders == { assert orders == {
"a": 3, "a": 3,
"c": 4, "c": 4,
@ -155,7 +154,6 @@ def test_apply_order_updates_multiple_elements_duplicated_orders():
"a": 4 "a": 4
} }
apply_order_updates(orders, new_orders) apply_order_updates(orders, new_orders)
print(orders)
assert orders == { assert orders == {
"c": 3, "c": 3,
"d": 3, "d": 3,