diff --git a/taiga/base/utils/time.py b/taiga/base/utils/time.py new file mode 100644 index 00000000..cd7b00c4 --- /dev/null +++ b/taiga/base/utils/time.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +# Copyright (C) 2014-2016 Andrey Antukh +# Copyright (C) 2014-2016 Jesús Espino +# Copyright (C) 2014-2016 David Barragán +# Copyright (C) 2014-2016 Alejandro Alonso +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +import time + + +def timestamp_ms(): + return int(time.time() * 1000) diff --git a/taiga/projects/custom_attributes/migrations/0010_auto_20160928_0540.py b/taiga/projects/custom_attributes/migrations/0010_auto_20160928_0540.py new file mode 100644 index 00000000..afe2277a --- /dev/null +++ b/taiga/projects/custom_attributes/migrations/0010_auto_20160928_0540.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-09-28 05:40 +from __future__ import unicode_literals + +from django.db import migrations, models +import taiga.base.utils.time + + +class Migration(migrations.Migration): + + dependencies = [ + ('custom_attributes', '0009_auto_20160728_1002'), + ] + + operations = [ + migrations.AlterField( + model_name='epiccustomattribute', + name='order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='order'), + ), + migrations.AlterField( + model_name='issuecustomattribute', + name='order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='order'), + ), + migrations.AlterField( + model_name='taskcustomattribute', + name='order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='order'), + ), + migrations.AlterField( + model_name='userstorycustomattribute', + name='order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='order'), + ), + ] diff --git a/taiga/projects/custom_attributes/models.py b/taiga/projects/custom_attributes/models.py index 4fa6978b..6467f97e 100644 --- a/taiga/projects/custom_attributes/models.py +++ b/taiga/projects/custom_attributes/models.py @@ -22,6 +22,7 @@ from django.utils import timezone from django_pgjson.fields import JsonField +from taiga.base.utils.time import timestamp_ms from taiga.projects.occ.mixins import OCCModelMixin from . import choices @@ -37,7 +38,7 @@ class AbstractCustomAttribute(models.Model): type = models.CharField(null=False, blank=False, max_length=16, choices=choices.TYPES_CHOICES, default=choices.TEXT_TYPE, verbose_name=_("type")) - order = models.IntegerField(null=False, blank=False, default=10000, verbose_name=_("order")) + order = models.BigIntegerField(null=False, blank=False, default=timestamp_ms, verbose_name=_("order")) project = models.ForeignKey("projects.Project", null=False, blank=False, related_name="%(class)ss", verbose_name=_("project")) diff --git a/taiga/projects/epics/migrations/0004_auto_20160928_0540.py b/taiga/projects/epics/migrations/0004_auto_20160928_0540.py new file mode 100644 index 00000000..0e6a9fcb --- /dev/null +++ b/taiga/projects/epics/migrations/0004_auto_20160928_0540.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-09-28 05:40 +from __future__ import unicode_literals + +from django.db import migrations, models +import taiga.base.utils.time + + +class Migration(migrations.Migration): + + dependencies = [ + ('epics', '0003_auto_20160901_1021'), + ] + + operations = [ + migrations.AlterField( + model_name='epic', + name='epics_order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='epics order'), + ), + migrations.AlterField( + model_name='relateduserstory', + name='order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='order'), + ), + ] diff --git a/taiga/projects/epics/models.py b/taiga/projects/epics/models.py index c2e26d20..da0e4a3e 100644 --- a/taiga/projects/epics/models.py +++ b/taiga/projects/epics/models.py @@ -23,6 +23,7 @@ from django.utils.translation import ugettext_lazy as _ from django.utils import timezone from taiga.base.utils.colors import generate_random_predefined_hex_color +from taiga.base.utils.time import timestamp_ms from taiga.projects.tagging.models import TaggedMixin from taiga.projects.occ import OCCModelMixin from taiga.projects.notifications.mixins import WatchedModelMixin @@ -40,7 +41,7 @@ class Epic(OCCModelMixin, WatchedModelMixin, BlockedMixin, TaggedMixin, models.M status = models.ForeignKey("projects.EpicStatus", null=True, blank=True, related_name="epics", verbose_name=_("status"), on_delete=models.SET_NULL) - epics_order = models.IntegerField(null=False, blank=False, default=10000, + epics_order = models.BigIntegerField(null=False, blank=False, default=timestamp_ms, verbose_name=_("epics order")) created_date = models.DateTimeField(null=False, blank=False, @@ -96,7 +97,7 @@ class RelatedUserStory(WatchedModelMixin, models.Model): user_story = models.ForeignKey("userstories.UserStory", on_delete=models.CASCADE) epic = models.ForeignKey("epics.Epic", on_delete=models.CASCADE) - order = models.IntegerField(null=False, blank=False, default=10000, + order = models.BigIntegerField(null=False, blank=False, default=timestamp_ms, verbose_name=_("order")) class Meta: diff --git a/taiga/projects/migrations/0054_auto_20160928_0540.py b/taiga/projects/migrations/0054_auto_20160928_0540.py new file mode 100644 index 00000000..6fe8def5 --- /dev/null +++ b/taiga/projects/migrations/0054_auto_20160928_0540.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-09-28 05:40 +from __future__ import unicode_literals + +from django.db import migrations, models +import taiga.base.utils.time + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0053_auto_20160927_0741'), + ] + + operations = [ + migrations.AlterField( + model_name='membership', + name='user_order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='user order'), + ), + migrations.AlterField( + model_name='projecttemplate', + name='order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='user order'), + ), + ] diff --git a/taiga/projects/models.py b/taiga/projects/models.py index fe62c015..f6f6cc52 100644 --- a/taiga/projects/models.py +++ b/taiga/projects/models.py @@ -31,6 +31,7 @@ from django_pglocks import advisory_lock from django_pgjson.fields import JsonField +from taiga.base.utils.time import timestamp_ms from taiga.projects.tagging.models import TaggedMixin from taiga.projects.tagging.models import TagsColorsdMixin from taiga.base.utils.files import get_file_path @@ -84,7 +85,7 @@ class Membership(models.Model): invitation_extra_text = models.TextField(null=True, blank=True, verbose_name=_("invitation extra text")) - user_order = models.IntegerField(default=10000, null=False, blank=False, + user_order = models.BigIntegerField(default=timestamp_ms, null=False, blank=False, verbose_name=_("user order")) class Meta: @@ -730,7 +731,7 @@ class ProjectTemplate(models.Model): verbose_name=_("slug"), unique=True) description = models.TextField(null=False, blank=False, verbose_name=_("description")) - order = models.IntegerField(default=10000, null=False, blank=False, + order = models.BigIntegerField(default=timestamp_ms, null=False, blank=False, verbose_name=_("user order")) created_date = models.DateTimeField(null=False, blank=False, verbose_name=_("created date"), diff --git a/taiga/projects/tasks/migrations/0011_auto_20160928_0755.py b/taiga/projects/tasks/migrations/0011_auto_20160928_0755.py new file mode 100644 index 00000000..1802a9c3 --- /dev/null +++ b/taiga/projects/tasks/migrations/0011_auto_20160928_0755.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-09-28 07:55 +from __future__ import unicode_literals + +from django.db import migrations, models +import taiga.base.utils.time + + +class Migration(migrations.Migration): + + dependencies = [ + ('tasks', '0010_auto_20160614_1201'), + ] + + operations = [ + migrations.AlterField( + model_name='task', + name='taskboard_order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='taskboard order'), + ), + migrations.AlterField( + model_name='task', + name='us_order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='us order'), + ), + ] diff --git a/taiga/projects/tasks/models.py b/taiga/projects/tasks/models.py index 15f768d4..a0abe570 100644 --- a/taiga/projects/tasks/models.py +++ b/taiga/projects/tasks/models.py @@ -23,6 +23,7 @@ from django.conf import settings from django.utils import timezone from django.utils.translation import ugettext_lazy as _ +from taiga.base.utils.time import timestamp_ms from taiga.projects.occ import OCCModelMixin from taiga.projects.notifications.mixins import WatchedModelMixin from taiga.projects.mixins.blocked import BlockedMixin @@ -53,9 +54,9 @@ class Task(OCCModelMixin, WatchedModelMixin, BlockedMixin, TaggedMixin, models.M subject = models.TextField(null=False, blank=False, verbose_name=_("subject")) - us_order = models.IntegerField(null=False, blank=False, default=1, + us_order = models.BigIntegerField(null=False, blank=False, default=timestamp_ms, verbose_name=_("us order")) - taskboard_order = models.IntegerField(null=False, blank=False, default=1, + taskboard_order = models.BigIntegerField(null=False, blank=False, default=timestamp_ms, verbose_name=_("taskboard order")) description = models.TextField(null=False, blank=True, verbose_name=_("description")) diff --git a/taiga/projects/userstories/migrations/0014_auto_20160928_0540.py b/taiga/projects/userstories/migrations/0014_auto_20160928_0540.py new file mode 100644 index 00000000..38285839 --- /dev/null +++ b/taiga/projects/userstories/migrations/0014_auto_20160928_0540.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-09-28 05:40 +from __future__ import unicode_literals + +from django.db import migrations, models +import taiga.base.utils.time + + +class Migration(migrations.Migration): + + dependencies = [ + ('userstories', '0013_auto_20160722_1018'), + ] + + operations = [ + migrations.AlterField( + model_name='userstory', + name='backlog_order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='backlog order'), + ), + migrations.AlterField( + model_name='userstory', + name='kanban_order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='kanban order'), + ), + migrations.AlterField( + model_name='userstory', + name='sprint_order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='sprint order'), + ), + ] diff --git a/taiga/projects/userstories/models.py b/taiga/projects/userstories/models.py index d0216d21..178f2cc1 100644 --- a/taiga/projects/userstories/models.py +++ b/taiga/projects/userstories/models.py @@ -25,6 +25,7 @@ from django.utils import timezone from picklefield.fields import PickledObjectField +from taiga.base.utils.time import timestamp_ms from taiga.projects.tagging.models import TaggedMixin from taiga.projects.occ import OCCModelMixin from taiga.projects.notifications.mixins import WatchedModelMixin @@ -75,11 +76,11 @@ class UserStory(OCCModelMixin, WatchedModelMixin, BlockedMixin, TaggedMixin, mod related_name="userstories", through="RolePoints", verbose_name=_("points")) - backlog_order = models.IntegerField(null=False, blank=False, default=10000, + backlog_order = models.BigIntegerField(null=False, blank=False, default=timestamp_ms, verbose_name=_("backlog order")) - sprint_order = models.IntegerField(null=False, blank=False, default=10000, + sprint_order = models.BigIntegerField(null=False, blank=False, default=timestamp_ms, verbose_name=_("sprint order")) - kanban_order = models.IntegerField(null=False, blank=False, default=10000, + kanban_order = models.BigIntegerField(null=False, blank=False, default=timestamp_ms, verbose_name=_("kanban order")) created_date = models.DateTimeField(null=False, blank=False, diff --git a/taiga/projects/wiki/migrations/0004_auto_20160928_0540.py b/taiga/projects/wiki/migrations/0004_auto_20160928_0540.py new file mode 100644 index 00000000..cc3fbacb --- /dev/null +++ b/taiga/projects/wiki/migrations/0004_auto_20160928_0540.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-09-28 05:40 +from __future__ import unicode_literals + +from django.db import migrations, models +import taiga.base.utils.time + + +class Migration(migrations.Migration): + + dependencies = [ + ('wiki', '0003_auto_20160615_0721'), + ] + + operations = [ + migrations.AlterField( + model_name='wikilink', + name='order', + field=models.BigIntegerField(default=taiga.base.utils.time.timestamp_ms, verbose_name='order'), + ), + ] diff --git a/taiga/projects/wiki/models.py b/taiga/projects/wiki/models.py index 5a4b3485..1c51fff0 100644 --- a/taiga/projects/wiki/models.py +++ b/taiga/projects/wiki/models.py @@ -24,6 +24,7 @@ from django.utils import timezone from django_pglocks import advisory_lock from taiga.base.utils.slug import slugify_uniquely_for_queryset +from taiga.base.utils.time import timestamp_ms from taiga.projects.notifications.mixins import WatchedModelMixin from taiga.projects.occ import OCCModelMixin @@ -72,7 +73,7 @@ class WikiLink(models.Model): title = models.CharField(max_length=500, null=False, blank=False) href = models.SlugField(max_length=500, db_index=True, null=False, blank=False, verbose_name=_("href")) - order = models.PositiveSmallIntegerField(null=False, blank=False, default="10000", + order = models.BigIntegerField(null=False, blank=False, default=timestamp_ms, verbose_name=_("order")) class Meta: