Add django1.7 migrations.

remotes/origin/enhancement/email-actions
Andrey Antukh 2014-09-03 11:38:37 +02:00
parent 3eb63bdfe6
commit 1dc23c13f0
34 changed files with 1043 additions and 3 deletions

View File

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import taiga.projects.attachments.models
from django.conf import settings
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0001_initial'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('projects', '0002_auto_20140903_0920'),
]
operations = [
migrations.CreateModel(
name='Attachment',
fields=[
('id', models.AutoField(verbose_name='ID', auto_created=True, serialize=False, primary_key=True)),
('object_id', models.PositiveIntegerField(verbose_name='object id')),
('created_date', models.DateTimeField(verbose_name='created date', default=django.utils.timezone.now)),
('modified_date', models.DateTimeField(verbose_name='modified date')),
('attached_file', models.FileField(verbose_name='attached file', upload_to=taiga.projects.attachments.models.get_attachment_file_path, blank=True, null=True, max_length=500)),
('is_deprecated', models.BooleanField(verbose_name='is deprecated', default=False)),
('description', models.TextField(verbose_name='description', blank=True)),
('order', models.IntegerField(verbose_name='order', default=0)),
('content_type', models.ForeignKey(verbose_name='content type', to='contenttypes.ContentType')),
('owner', models.ForeignKey(verbose_name='owner', null=True, related_name='change_attachments', to=settings.AUTH_USER_MODEL)),
('project', models.ForeignKey(verbose_name='project', related_name='attachments', to='projects.Project')),
],
options={
'ordering': ['project', 'created_date'],
'verbose_name': 'attachment',
'permissions': (('view_attachment', 'Can view attachment'),),
'verbose_name_plural': 'attachments',
},
bases=(models.Model,),
),
]

View File

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import taiga.projects.history.models
import django.utils.timezone
import django_pgjson.fields
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name='HistoryEntry',
fields=[
('id', models.CharField(primary_key=True, unique=True, max_length=255, serialize=False, default=taiga.projects.history.models._generate_uuid, editable=False)),
('user', django_pgjson.fields.JsonField(default=None, blank=True, null=True)),
('created_at', models.DateTimeField(default=django.utils.timezone.now)),
('type', models.SmallIntegerField(choices=[(1, 'Change'), (2, 'Create'), (3, 'Delete')])),
('is_snapshot', models.BooleanField(default=False)),
('key', models.CharField(max_length=255, default=None, blank=True, null=True)),
('diff', django_pgjson.fields.JsonField(default=None, null=True)),
('snapshot', django_pgjson.fields.JsonField(default=None, null=True)),
('values', django_pgjson.fields.JsonField(default=None, null=True)),
('comment', models.TextField(blank=True)),
('comment_html', models.TextField(blank=True)),
],
options={
'ordering': ['created_at'],
},
bases=(models.Model,),
),
]

View File

@ -29,6 +29,10 @@ from .choices import HISTORY_TYPE_CHOICES
from taiga.base.utils.diff import make_diff as make_diff_from_dicts
def _generate_uuid():
return str(uuid.uuid1())
class HistoryEntry(models.Model):
"""
Domain model that represents a history
@ -38,7 +42,7 @@ class HistoryEntry(models.Model):
comments.
"""
id = models.CharField(primary_key=True, max_length=255, unique=True,
editable=False, default=lambda: str(uuid.uuid1()))
editable=False, default=_generate_uuid)
user = JsonField(blank=True, default=None, null=True)
created_at = models.DateTimeField(default=timezone.now)

View File

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
from django.conf import settings
import django.utils.timezone
import djorm_pgarray.fields
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('milestones', '__first__'),
('projects', '0002_auto_20140903_0920'),
]
operations = [
migrations.CreateModel(
name='Issue',
fields=[
('id', models.AutoField(auto_created=True, serialize=False, verbose_name='ID', primary_key=True)),
('tags', djorm_pgarray.fields.TextArrayField(dbtype='text', verbose_name='tags')),
('version', models.IntegerField(default=1, verbose_name='version')),
('is_blocked', models.BooleanField(default=False, verbose_name='is blocked')),
('blocked_note', models.TextField(blank=True, default='', verbose_name='blocked note')),
('ref', models.BigIntegerField(null=True, blank=True, db_index=True, default=None, verbose_name='ref')),
('created_date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='created date')),
('modified_date', models.DateTimeField(verbose_name='modified date')),
('finished_date', models.DateTimeField(blank=True, null=True, verbose_name='finished date')),
('subject', models.TextField(verbose_name='subject')),
('description', models.TextField(blank=True, verbose_name='description')),
('assigned_to', models.ForeignKey(blank=True, null=True, verbose_name='assigned to', to=settings.AUTH_USER_MODEL, default=None, related_name='issues_assigned_to_me')),
('milestone', models.ForeignKey(blank=True, null=True, verbose_name='milestone', to='milestones.Milestone', default=None, related_name='issues')),
('owner', models.ForeignKey(blank=True, null=True, verbose_name='owner', to=settings.AUTH_USER_MODEL, default=None, related_name='owned_issues')),
('priority', models.ForeignKey(verbose_name='priority', to='projects.Priority', related_name='issues')),
('project', models.ForeignKey(verbose_name='project', to='projects.Project', related_name='issues')),
('severity', models.ForeignKey(verbose_name='severity', to='projects.Severity', related_name='issues')),
('status', models.ForeignKey(verbose_name='status', to='projects.IssueStatus', related_name='issues')),
('type', models.ForeignKey(verbose_name='type', to='projects.IssueType', related_name='issues')),
('watchers', models.ManyToManyField(to=settings.AUTH_USER_MODEL, blank=True, null=True, related_name='issues_issue+', verbose_name='watchers')),
],
options={
'verbose_name_plural': 'issues',
'permissions': (('view_issue', 'Can view issue'),),
'ordering': ['project', '-created_date'],
'verbose_name': 'issue',
},
bases=(models.Model,),
),
]

View File

@ -0,0 +1,108 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
from django.conf import settings
import django_pgjson.fields
import django.utils.timezone
import django.db.models.deletion
import djorm_pgarray.fields
import taiga.projects.history.models
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('users', '0002_auto_20140903_0916'),
]
operations = [
migrations.CreateModel(
name='Membership',
fields=[
('id', models.AutoField(serialize=False, primary_key=True, auto_created=True, verbose_name='ID')),
('is_owner', models.BooleanField(default=False)),
('email', models.EmailField(max_length=255, null=True, default=None, verbose_name='email', blank=True)),
('created_at', models.DateTimeField(default=django.utils.timezone.now, verbose_name='creado el')),
('token', models.CharField(max_length=60, null=True, default=None, verbose_name='token', blank=True)),
('invited_by_id', models.IntegerField(null=True, blank=True)),
],
options={
'ordering': ['project', 'user__full_name', 'user__username', 'user__email', 'email'],
'verbose_name_plural': 'membershipss',
'permissions': (('view_membership', 'Can view membership'),),
'verbose_name': 'membership',
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Project',
fields=[
('id', models.AutoField(serialize=False, primary_key=True, auto_created=True, verbose_name='ID')),
('tags', djorm_pgarray.fields.TextArrayField(dbtype='text', verbose_name='tags')),
('name', models.CharField(max_length=250, unique=True, verbose_name='name')),
('slug', models.SlugField(max_length=250, unique=True, verbose_name='slug', blank=True)),
('description', models.TextField(verbose_name='description')),
('created_date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='created date')),
('modified_date', models.DateTimeField(verbose_name='modified date')),
('total_milestones', models.IntegerField(null=True, default=0, verbose_name='total of milestones', blank=True)),
('total_story_points', models.FloatField(default=0, verbose_name='total story points')),
('is_backlog_activated', models.BooleanField(default=True, verbose_name='active backlog panel')),
('is_kanban_activated', models.BooleanField(default=False, verbose_name='active kanban panel')),
('is_wiki_activated', models.BooleanField(default=True, verbose_name='active wiki panel')),
('is_issues_activated', models.BooleanField(default=True, verbose_name='active issues panel')),
('videoconferences', models.CharField(max_length=250, null=True, choices=[('appear-in', 'AppearIn'), ('talky', 'Talky')], verbose_name='videoconference system', blank=True)),
('videoconferences_salt', models.CharField(max_length=250, null=True, verbose_name='videoconference room salt', blank=True)),
('anon_permissions', djorm_pgarray.fields.TextArrayField(choices=[('view_project', 'View project'), ('view_milestones', 'View milestones'), ('view_us', 'View user stories'), ('view_tasks', 'View tasks'), ('view_issues', 'View issues'), ('view_wiki_pages', 'View wiki pages'), ('view_wiki_links', 'View wiki links')], dbtype='text', default=[], verbose_name='anonymous permissions')),
('public_permissions', djorm_pgarray.fields.TextArrayField(choices=[('view_project', 'View project'), ('view_milestones', 'View milestones'), ('view_us', 'View user stories'), ('view_issues', 'View issues'), ('vote_issues', 'Vote issues'), ('view_tasks', 'View tasks'), ('view_wiki_pages', 'View wiki pages'), ('view_wiki_links', 'View wiki links'), ('request_membership', 'Request membership'), ('add_us_to_project', 'Add user story to project'), ('add_comments_to_us', 'Add comments to user stories'), ('add_comments_to_task', 'Add comments to tasks'), ('add_issue', 'Add issues'), ('add_comments_issue', 'Add comments to issues'), ('add_wiki_page', 'Add wiki page'), ('modify_wiki_page', 'Modify wiki page'), ('add_wiki_link', 'Add wiki link'), ('modify_wiki_link', 'Modify wiki link')], dbtype='text', default=[], verbose_name='user permissions')),
('is_private', models.BooleanField(default=False, verbose_name='is private')),
('tags_colors', djorm_pgarray.fields.TextArrayField(dbtype='text', dimension=2, default=[], null=False, verbose_name='tags colors')),
],
options={
'ordering': ['name'],
'verbose_name_plural': 'projects',
'permissions': (('view_project', 'Can view project'),),
'verbose_name': 'project',
},
bases=(models.Model,),
),
migrations.AddField(
model_name='project',
name='members',
field=models.ManyToManyField(to=settings.AUTH_USER_MODEL, related_name='projects', verbose_name='members', through='projects.Membership'),
preserve_default=True,
),
migrations.AddField(
model_name='project',
name='owner',
field=models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='owned_projects', verbose_name='owner'),
preserve_default=True,
),
migrations.AddField(
model_name='membership',
name='user',
field=models.ForeignKey(blank=True, default=None, to=settings.AUTH_USER_MODEL, null=True, related_name='memberships'),
preserve_default=True,
),
migrations.AddField(
model_name='membership',
name='project',
field=models.ForeignKey(default=1, to='projects.Project', related_name='memberships'),
preserve_default=False,
),
migrations.AlterUniqueTogether(
name='membership',
unique_together=set([('user', 'project')]),
),
migrations.AddField(
model_name='membership',
name='role',
field=models.ForeignKey(related_name='memberships', to='users.Role', default=1),
preserve_default=False,
),
]

View File

@ -0,0 +1,250 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import django.utils.timezone
import django_pgjson.fields
import django.db.models.deletion
import taiga.projects.history.models
class Migration(migrations.Migration):
dependencies = [
('projects', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='IssueStatus',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
('name', models.CharField(max_length=255, verbose_name='name')),
('order', models.IntegerField(verbose_name='order', default=10)),
('is_closed', models.BooleanField(verbose_name='is closed', default=False)),
('color', models.CharField(max_length=20, verbose_name='color', default='#999999')),
('project', models.ForeignKey(related_name='issue_statuses', to='projects.Project', verbose_name='project')),
],
options={
'verbose_name_plural': 'issue statuses',
'ordering': ['project', 'order', 'name'],
'verbose_name': 'issue status',
'permissions': (('view_issuestatus', 'Can view issue status'),),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='IssueType',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
('name', models.CharField(max_length=255, verbose_name='name')),
('order', models.IntegerField(verbose_name='order', default=10)),
('color', models.CharField(max_length=20, verbose_name='color', default='#999999')),
('project', models.ForeignKey(related_name='issue_types', to='projects.Project', verbose_name='project')),
],
options={
'verbose_name_plural': 'issue types',
'ordering': ['project', 'order', 'name'],
'verbose_name': 'issue type',
'permissions': (('view_issuetype', 'Can view issue type'),),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Points',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
('name', models.CharField(max_length=255, verbose_name='name')),
('order', models.IntegerField(verbose_name='order', default=10)),
('value', models.FloatField(blank=True, null=True, verbose_name='value', default=None)),
('project', models.ForeignKey(related_name='points', to='projects.Project', verbose_name='project')),
],
options={
'verbose_name_plural': 'points',
'ordering': ['project', 'order', 'name'],
'verbose_name': 'points',
'permissions': (('view_points', 'Can view points'),),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Priority',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
('name', models.CharField(max_length=255, verbose_name='name')),
('order', models.IntegerField(verbose_name='order', default=10)),
('color', models.CharField(max_length=20, verbose_name='color', default='#999999')),
('project', models.ForeignKey(related_name='priorities', to='projects.Project', verbose_name='project')),
],
options={
'verbose_name_plural': 'priorities',
'ordering': ['project', 'order', 'name'],
'verbose_name': 'priority',
'permissions': (('view_priority', 'Can view priority'),),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='ProjectTemplate',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
('name', models.CharField(max_length=250, verbose_name='name')),
('slug', models.SlugField(max_length=250, blank=True, verbose_name='slug', unique=True)),
('description', models.TextField(verbose_name='description')),
('created_date', models.DateTimeField(verbose_name='created date', default=django.utils.timezone.now)),
('modified_date', models.DateTimeField(verbose_name='modified date')),
('default_owner_role', models.CharField(max_length=50, verbose_name="default owner's role")),
('is_backlog_activated', models.BooleanField(verbose_name='active backlog panel', default=True)),
('is_kanban_activated', models.BooleanField(verbose_name='active kanban panel', default=False)),
('is_wiki_activated', models.BooleanField(verbose_name='active wiki panel', default=True)),
('is_issues_activated', models.BooleanField(verbose_name='active issues panel', default=True)),
('videoconferences', models.CharField(max_length=250, null=True, choices=[('appear-in', 'AppearIn'), ('talky', 'Talky')], verbose_name='videoconference system', blank=True)),
('videoconferences_salt', models.CharField(max_length=250, null=True, verbose_name='videoconference room salt', blank=True)),
('default_options', django_pgjson.fields.JsonField(null=True, verbose_name='default options', blank=True)),
('us_statuses', django_pgjson.fields.JsonField(null=True, verbose_name='us statuses', blank=True)),
('points', django_pgjson.fields.JsonField(null=True, verbose_name='points', blank=True)),
('task_statuses', django_pgjson.fields.JsonField(null=True, verbose_name='task statuses', blank=True)),
('issue_statuses', django_pgjson.fields.JsonField(null=True, verbose_name='issue statuses', blank=True)),
('issue_types', django_pgjson.fields.JsonField(null=True, verbose_name='issue types', blank=True)),
('priorities', django_pgjson.fields.JsonField(null=True, verbose_name='priorities', blank=True)),
('severities', django_pgjson.fields.JsonField(null=True, verbose_name='severities', blank=True)),
('roles', django_pgjson.fields.JsonField(null=True, verbose_name='roles', blank=True)),
],
options={
'verbose_name_plural': 'project templates',
'verbose_name': 'project template',
'ordering': ['name'],
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Severity',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
('name', models.CharField(max_length=255, verbose_name='name')),
('order', models.IntegerField(verbose_name='order', default=10)),
('color', models.CharField(max_length=20, verbose_name='color', default='#999999')),
('project', models.ForeignKey(related_name='severities', to='projects.Project', verbose_name='project')),
],
options={
'verbose_name_plural': 'severities',
'ordering': ['project', 'order', 'name'],
'verbose_name': 'severity',
'permissions': (('view_severity', 'Can view severity'),),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='TaskStatus',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
('name', models.CharField(max_length=255, verbose_name='name')),
('order', models.IntegerField(verbose_name='order', default=10)),
('is_closed', models.BooleanField(verbose_name='is closed', default=False)),
('color', models.CharField(max_length=20, verbose_name='color', default='#999999')),
('project', models.ForeignKey(related_name='task_statuses', to='projects.Project', verbose_name='project')),
],
options={
'verbose_name_plural': 'task statuses',
'ordering': ['project', 'order', 'name'],
'verbose_name': 'task status',
'permissions': (('view_taskstatus', 'Can view task status'),),
},
bases=(models.Model,),
),
migrations.CreateModel(
name='UserStoryStatus',
fields=[
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID', auto_created=True)),
('name', models.CharField(max_length=255, verbose_name='name')),
('order', models.IntegerField(verbose_name='order', default=10)),
('is_closed', models.BooleanField(verbose_name='is closed', default=False)),
('color', models.CharField(max_length=20, verbose_name='color', default='#999999')),
('wip_limit', models.IntegerField(blank=True, null=True, verbose_name='work in progress limit', default=None)),
('project', models.ForeignKey(related_name='us_statuses', to='projects.Project', verbose_name='project')),
],
options={
'verbose_name_plural': 'user story statuses',
'ordering': ['project', 'order', 'name'],
'verbose_name': 'user story status',
'permissions': (('view_userstorystatus', 'Can view user story status'),),
},
bases=(models.Model,),
),
migrations.AlterUniqueTogether(
name='userstorystatus',
unique_together=set([('project', 'name')]),
),
migrations.AlterUniqueTogether(
name='taskstatus',
unique_together=set([('project', 'name')]),
),
migrations.AlterUniqueTogether(
name='severity',
unique_together=set([('project', 'name')]),
),
migrations.AlterUniqueTogether(
name='priority',
unique_together=set([('project', 'name')]),
),
migrations.AlterUniqueTogether(
name='points',
unique_together=set([('project', 'name')]),
),
migrations.AlterUniqueTogether(
name='issuetype',
unique_together=set([('project', 'name')]),
),
migrations.AlterUniqueTogether(
name='issuestatus',
unique_together=set([('project', 'name')]),
),
migrations.AddField(
model_name='project',
name='creation_template',
field=models.ForeignKey(null=True, related_name='projects', default=None, blank=True, to='projects.ProjectTemplate', verbose_name='creation template'),
preserve_default=True,
),
migrations.AddField(
model_name='project',
name='default_issue_status',
field=models.OneToOneField(to='projects.IssueStatus', null=True, related_name='+', blank=True, on_delete=django.db.models.deletion.SET_NULL, verbose_name='default issue status'),
preserve_default=True,
),
migrations.AddField(
model_name='project',
name='default_issue_type',
field=models.OneToOneField(to='projects.IssueType', null=True, related_name='+', blank=True, on_delete=django.db.models.deletion.SET_NULL, verbose_name='default issue type'),
preserve_default=True,
),
migrations.AddField(
model_name='project',
name='default_points',
field=models.OneToOneField(to='projects.Points', null=True, related_name='+', blank=True, on_delete=django.db.models.deletion.SET_NULL, verbose_name='default points'),
preserve_default=True,
),
migrations.AddField(
model_name='project',
name='default_priority',
field=models.OneToOneField(to='projects.Priority', null=True, related_name='+', blank=True, on_delete=django.db.models.deletion.SET_NULL, verbose_name='default priority'),
preserve_default=True,
),
migrations.AddField(
model_name='project',
name='default_severity',
field=models.OneToOneField(to='projects.Severity', null=True, related_name='+', blank=True, on_delete=django.db.models.deletion.SET_NULL, verbose_name='default severity'),
preserve_default=True,
),
migrations.AddField(
model_name='project',
name='default_task_status',
field=models.OneToOneField(to='projects.TaskStatus', null=True, related_name='+', blank=True, on_delete=django.db.models.deletion.SET_NULL, verbose_name='default task status'),
preserve_default=True,
),
migrations.AddField(
model_name='project',
name='default_us_status',
field=models.OneToOneField(to='projects.UserStoryStatus', null=True, related_name='+', blank=True, on_delete=django.db.models.deletion.SET_NULL, verbose_name='default US status'),
preserve_default=True,
),
]

View File

View File

@ -0,0 +1,46 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import django.utils.timezone
from django.conf import settings
class Migration(migrations.Migration):
dependencies = [
('projects', '0002_auto_20140903_0920'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Milestone',
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, primary_key=True, auto_created=True)),
('name', models.CharField(verbose_name='name', max_length=200, db_index=True)),
('slug', models.SlugField(verbose_name='slug', blank=True, max_length=250)),
('estimated_start', models.DateField(verbose_name='estimated start date')),
('estimated_finish', models.DateField(verbose_name='estimated finish date')),
('created_date', models.DateTimeField(verbose_name='created date', default=django.utils.timezone.now)),
('modified_date', models.DateTimeField(verbose_name='modified date')),
('closed', models.BooleanField(verbose_name='is closed', default=False)),
('disponibility', models.FloatField(null=True, blank=True, verbose_name='disponibility', default=0.0)),
('order', models.PositiveSmallIntegerField(verbose_name='order', default=1)),
('owner', models.ForeignKey(null=True, blank=True, to=settings.AUTH_USER_MODEL, verbose_name='owner', related_name='owned_milestones')),
('project', models.ForeignKey(to='projects.Project', verbose_name='project', related_name='milestones')),
('watchers', models.ManyToManyField(null=True, blank=True, related_name='milestones_milestone+', verbose_name='watchers', to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name': 'milestone',
'verbose_name_plural': 'milestones',
'ordering': ['project', 'created_date'],
'permissions': (('view_milestone', 'Can view milestone'),),
},
bases=(models.Model,),
),
migrations.AlterUniqueTogether(
name='milestone',
unique_together=set([('slug', 'project'), ('name', 'project')]),
),
]

View File

@ -243,7 +243,8 @@ class Project(ProjectDefaults, TaggedMixin, models.Model):
def _get_user_stories_points(self, user_stories):
role_points = [us.role_points.all() for us in user_stories]
flat_role_points = itertools.chain(*role_points)
flat_role_dicts = map(lambda x: {x.role_id: x.points.value if x.points.value else 0}, flat_role_points)
flat_role_dicts = map(lambda x: {x.role_id: x.points.value if x.points.value else 0},
flat_role_points)
return dict_sum(*flat_role_dicts)
def _get_points_increment(self, client_requirement, team_requirement):

View File

@ -0,0 +1,36 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
from django.conf import settings
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('projects', '0002_auto_20140903_0920'),
]
operations = [
migrations.CreateModel(
name='NotifyPolicy',
fields=[
('id', models.AutoField(verbose_name='ID', auto_created=True, serialize=False, primary_key=True)),
('notify_level', models.SmallIntegerField(choices=[(1, 'Not watching'), (2, 'Watching'), (3, 'Ignoring')])),
('created_at', models.DateTimeField(default=django.utils.timezone.now)),
('modified_at', models.DateTimeField()),
('project', models.ForeignKey(to='projects.Project', related_name='notify_policies')),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='notify_policies')),
],
options={
'ordering': ['created_at'],
},
bases=(models.Model,),
),
migrations.AlterUniqueTogether(
name='notifypolicy',
unique_together=set([('project', 'user')]),
),
]

View File

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('projects', '0002_auto_20140903_0920'),
('contenttypes', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Reference',
fields=[
('id', models.AutoField(verbose_name='ID', auto_created=True, serialize=False, primary_key=True)),
('object_id', models.PositiveIntegerField()),
('ref', models.BigIntegerField()),
('created_at', models.DateTimeField(default=django.utils.timezone.now)),
('content_type', models.ForeignKey(related_name='+', to='contenttypes.ContentType')),
('project', models.ForeignKey(related_name='references', to='projects.Project')),
],
options={
'ordering': ['created_at'],
},
bases=(models.Model,),
),
migrations.AlterUniqueTogether(
name='reference',
unique_together=set([('project', 'ref')]),
),
]

View File

@ -0,0 +1,51 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import djorm_pgarray.fields
from django.conf import settings
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('projects', '0002_auto_20140903_0920'),
('milestones', '__first__'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('userstories', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Task',
fields=[
('id', models.AutoField(serialize=False, verbose_name='ID', primary_key=True, auto_created=True)),
('tags', djorm_pgarray.fields.TextArrayField(dbtype='text', verbose_name='tags')),
('version', models.IntegerField(default=1, verbose_name='version')),
('is_blocked', models.BooleanField(verbose_name='is blocked', default=False)),
('blocked_note', models.TextField(blank=True, verbose_name='blocked note', default='')),
('ref', models.BigIntegerField(null=True, blank=True, verbose_name='ref', db_index=True, default=None)),
('created_date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='created date')),
('modified_date', models.DateTimeField(verbose_name='modified date')),
('finished_date', models.DateTimeField(null=True, blank=True, verbose_name='finished date')),
('subject', models.TextField(verbose_name='subject')),
('description', models.TextField(blank=True, verbose_name='description')),
('is_iocaine', models.BooleanField(verbose_name='is iocaine', default=False)),
('assigned_to', models.ForeignKey(null=True, verbose_name='assigned to', default=None, blank=True, to=settings.AUTH_USER_MODEL, related_name='tasks_assigned_to_me')),
('milestone', models.ForeignKey(null=True, verbose_name='milestone', default=None, blank=True, to='milestones.Milestone', related_name='tasks')),
('owner', models.ForeignKey(null=True, verbose_name='owner', default=None, blank=True, to=settings.AUTH_USER_MODEL, related_name='owned_tasks')),
('project', models.ForeignKey(verbose_name='project', to='projects.Project', related_name='tasks')),
('status', models.ForeignKey(verbose_name='status', to='projects.TaskStatus', related_name='tasks')),
('user_story', models.ForeignKey(null=True, verbose_name='user story', blank=True, to='userstories.UserStory', related_name='tasks')),
('watchers', models.ManyToManyField(null=True, blank=True, to=settings.AUTH_USER_MODEL, verbose_name='watchers', related_name='tasks_task+')),
],
options={
'verbose_name_plural': 'tasks',
'ordering': ['project', 'created_date'],
'verbose_name': 'task',
'permissions': (('view_task', 'Can view task'),),
},
bases=(models.Model,),
),
]

View File

@ -0,0 +1,83 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
from django.conf import settings
import django.utils.timezone
import djorm_pgarray.fields
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('issues', '__first__'),
('milestones', '__first__'),
('projects', '0002_auto_20140903_0920'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('users', '0003_auto_20140903_0925'),
]
operations = [
migrations.CreateModel(
name='RolePoints',
fields=[
('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')),
('points', models.ForeignKey(verbose_name='points', to='projects.Points', related_name='role_points')),
('role', models.ForeignKey(verbose_name='role', to='users.Role', related_name='role_points')),
],
options={
'ordering': ['user_story', 'role'],
'verbose_name': 'role points',
'permissions': (('view_rolepoints', 'Can view role points'),),
'verbose_name_plural': 'role points',
},
bases=(models.Model,),
),
migrations.CreateModel(
name='UserStory',
fields=[
('id', models.AutoField(primary_key=True, auto_created=True, serialize=False, verbose_name='ID')),
('tags', djorm_pgarray.fields.TextArrayField(dbtype='text', verbose_name='tags')),
('version', models.IntegerField(default=1, verbose_name='version')),
('is_blocked', models.BooleanField(default=False, verbose_name='is blocked')),
('blocked_note', models.TextField(default='', blank=True, verbose_name='blocked note')),
('ref', models.BigIntegerField(default=None, db_index=True, blank=True, null=True, verbose_name='ref')),
('is_closed', models.BooleanField(default=False)),
('is_archived', models.BooleanField(default=False, verbose_name='archived')),
('order', models.PositiveSmallIntegerField(default=100, verbose_name='order')),
('created_date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='created date')),
('modified_date', models.DateTimeField(verbose_name='modified date')),
('finish_date', models.DateTimeField(blank=True, null=True, verbose_name='finish date')),
('subject', models.TextField(verbose_name='subject')),
('description', models.TextField(blank=True, verbose_name='description')),
('client_requirement', models.BooleanField(default=False, verbose_name='is client requirement')),
('team_requirement', models.BooleanField(default=False, verbose_name='is team requirement')),
('assigned_to', models.ForeignKey(null=True, verbose_name='assigned to', to=settings.AUTH_USER_MODEL, related_name='userstories_assigned_to_me', blank=True, default=None)),
('generated_from_issue', models.ForeignKey(blank=True, null=True, verbose_name='generated from issue', to='issues.Issue', related_name='generated_user_stories')),
('milestone', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, null=True, verbose_name='milestone', to='milestones.Milestone', related_name='user_stories', blank=True, default=None)),
('owner', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, null=True, verbose_name='owner', to=settings.AUTH_USER_MODEL, related_name='owned_user_stories')),
('points', models.ManyToManyField(through='userstories.RolePoints', related_name='userstories', to='projects.Points', verbose_name='points')),
('project', models.ForeignKey(verbose_name='project', to='projects.Project', related_name='user_stories')),
('status', models.ForeignKey(on_delete=django.db.models.deletion.SET_NULL, blank=True, null=True, verbose_name='status', to='projects.UserStoryStatus', related_name='user_stories')),
('watchers', models.ManyToManyField(to=settings.AUTH_USER_MODEL, related_name='userstories_userstory+', blank=True, null=True, verbose_name='watchers')),
],
options={
'ordering': ['project', 'order', 'ref'],
'verbose_name': 'user story',
'permissions': (('view_userstory', 'Can view user story'),),
'verbose_name_plural': 'user stories',
},
bases=(models.Model,),
),
migrations.AddField(
model_name='rolepoints',
name='user_story',
field=models.ForeignKey(verbose_name='user story', to='userstories.UserStory', related_name='role_points'),
preserve_default=True,
),
migrations.AlterUniqueTogether(
name='rolepoints',
unique_together=set([('user_story', 'role')]),
),
]

View File

@ -0,0 +1,52 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
from django.conf import settings
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('contenttypes', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Vote',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('object_id', models.PositiveIntegerField()),
('content_type', models.ForeignKey(to='contenttypes.ContentType')),
('user', models.ForeignKey(verbose_name='votes', to=settings.AUTH_USER_MODEL, related_name='votes')),
],
options={
'verbose_name': 'Vote',
'verbose_name_plural': 'Votes',
},
bases=(models.Model,),
),
migrations.CreateModel(
name='Votes',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('object_id', models.PositiveIntegerField()),
('count', models.PositiveIntegerField(default=0)),
('content_type', models.ForeignKey(to='contenttypes.ContentType')),
],
options={
'verbose_name': 'Votes',
'verbose_name_plural': 'Votes',
},
bases=(models.Model,),
),
migrations.AlterUniqueTogether(
name='votes',
unique_together=set([('content_type', 'object_id')]),
),
migrations.AlterUniqueTogether(
name='vote',
unique_together=set([('content_type', 'object_id', 'user')]),
),
]

View File

@ -0,0 +1,63 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
from django.conf import settings
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('projects', '0002_auto_20140903_0920'),
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='WikiLink',
fields=[
('id', models.AutoField(auto_created=True, serialize=False, verbose_name='ID', primary_key=True)),
('title', models.CharField(max_length=500)),
('href', models.SlugField(max_length=500, verbose_name='href')),
('order', models.PositiveSmallIntegerField(default=1, verbose_name='order')),
('project', models.ForeignKey(verbose_name='project', related_name='wiki_links', to='projects.Project')),
],
options={
'ordering': ['project', 'order'],
'verbose_name_plural': 'wiki links',
'verbose_name': 'wiki link',
},
bases=(models.Model,),
),
migrations.CreateModel(
name='WikiPage',
fields=[
('id', models.AutoField(auto_created=True, serialize=False, verbose_name='ID', primary_key=True)),
('version', models.IntegerField(default=1, verbose_name='version')),
('slug', models.SlugField(max_length=500, verbose_name='slug')),
('content', models.TextField(blank=True, verbose_name='content')),
('created_date', models.DateTimeField(default=django.utils.timezone.now, verbose_name='created date')),
('modified_date', models.DateTimeField(verbose_name='modified date')),
('last_modifier', models.ForeignKey(null=True, to=settings.AUTH_USER_MODEL, verbose_name='last modifier', related_name='last_modified_wiki_pages', blank=True)),
('owner', models.ForeignKey(null=True, to=settings.AUTH_USER_MODEL, verbose_name='owner', related_name='owned_wiki_pages', blank=True)),
('project', models.ForeignKey(verbose_name='project', related_name='wiki_pages', to='projects.Project')),
('watchers', models.ManyToManyField(null=True, related_name='wiki_wikipage+', blank=True, verbose_name='watchers', to=settings.AUTH_USER_MODEL)),
],
options={
'ordering': ['project', 'slug'],
'verbose_name_plural': 'wiki pages',
'verbose_name': 'wiki page',
'permissions': (('view_wikipage', 'Can view wiki page'),),
},
bases=(models.Model,),
),
migrations.AlterUniqueTogether(
name='wikipage',
unique_together=set([('project', 'slug')]),
),
migrations.AlterUniqueTogether(
name='wikilink',
unique_together=set([('project', 'href')]),
),
]

View File

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import django_pgjson.fields
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('contenttypes', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Timeline',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', primary_key=True, serialize=False)),
('object_id', models.PositiveIntegerField()),
('namespace', models.SlugField(default='default')),
('event_type', models.SlugField()),
('data', django_pgjson.fields.JsonField()),
('created', models.DateTimeField(default=django.utils.timezone.now)),
('content_type', models.ForeignKey(to='contenttypes.ContentType')),
],
options={
},
bases=(models.Model,),
),
migrations.AlterIndexTogether(
name='timeline',
index_together=set([('content_type', 'object_id', 'namespace')]),
),
]

View File

View File

@ -0,0 +1,50 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import djorm_pgarray.fields
import django.utils.timezone
import re
import django.core.validators
import taiga.users.models
class Migration(migrations.Migration):
dependencies = [
("contenttypes", "0001_initial"),
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', serialize=False, primary_key=True)),
('password', models.CharField(max_length=128, verbose_name='password')),
('last_login', models.DateTimeField(default=django.utils.timezone.now, verbose_name='last login')),
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
('username', models.CharField(max_length=30, help_text='Required. 30 characters or fewer. Letters, numbers and /./-/_ characters', verbose_name='username', unique=True, validators=[django.core.validators.RegexValidator(re.compile('^[\\w.-]+$', 32), 'Enter a valid username.', 'invalid')])),
('email', models.EmailField(max_length=75, blank=True, verbose_name='email address')),
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
('full_name', models.CharField(max_length=256, blank=True, verbose_name='full name')),
('color', models.CharField(default=taiga.users.models.generate_random_hex_color, max_length=9, blank=True, verbose_name='color')),
('bio', models.TextField(default='', blank=True, verbose_name='biography')),
('photo', models.FileField(null=True, max_length=500, blank=True, verbose_name='photo', upload_to='users/photo')),
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
('default_language', models.CharField(default='', max_length=20, blank=True, verbose_name='default language')),
('default_timezone', models.CharField(default='', max_length=20, blank=True, verbose_name='default timezone')),
('colorize_tags', models.BooleanField(default=False, verbose_name='colorize tags')),
('token', models.CharField(default=None, max_length=200, blank=True, verbose_name='token', null=True)),
('email_token', models.CharField(default=None, max_length=200, blank=True, verbose_name='email token', null=True)),
('new_email', models.EmailField(null=True, max_length=75, blank=True, verbose_name='new email address')),
('github_id', models.IntegerField(null=True, blank=True, verbose_name='github ID')),
],
options={
'verbose_name_plural': 'users',
'permissions': (('view_user', 'Can view user'),),
'verbose_name': 'user',
'ordering': ['username'],
},
bases=(models.Model,),
),
]

View File

@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import djorm_pgarray.fields
class Migration(migrations.Migration):
dependencies = [
('users', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Role',
fields=[
('id', models.AutoField(auto_created=True, verbose_name='ID', serialize=False, primary_key=True)),
('name', models.CharField(verbose_name='name', max_length=200)),
('slug', models.SlugField(verbose_name='slug', max_length=250, blank=True)),
('permissions', djorm_pgarray.fields.TextArrayField(dbtype='text', verbose_name='permissions', choices=[('view_project', 'View project'), ('view_milestones', 'View milestones'), ('add_milestone', 'Add milestone'), ('modify_milestone', 'Modify milestone'), ('delete_milestone', 'Delete milestone'), ('view_us', 'View user story'), ('add_us', 'Add user story'), ('modify_us', 'Modify user story'), ('delete_us', 'Delete user story'), ('view_tasks', 'View tasks'), ('add_task', 'Add task'), ('modify_task', 'Modify task'), ('delete_task', 'Delete task'), ('view_issues', 'View issues'), ('vote_issues', 'Vote issues'), ('add_issue', 'Add issue'), ('modify_issue', 'Modify issue'), ('delete_issue', 'Delete issue'), ('view_wiki_pages', 'View wiki pages'), ('add_wiki_page', 'Add wiki page'), ('modify_wiki_page', 'Modify wiki page'), ('delete_wiki_page', 'Delete wiki page'), ('view_wiki_links', 'View wiki links'), ('add_wiki_link', 'Add wiki link'), ('modify_wiki_link', 'Modify wiki link'), ('delete_wiki_link', 'Delete wiki link')], default=[])),
('order', models.IntegerField(verbose_name='order', default=10)),
('computable', models.BooleanField(default=True)),
],
options={
'verbose_name': 'role',
'permissions': (('view_role', 'Can view role'),),
'verbose_name_plural': 'roles',
'ordering': ['order', 'slug'],
},
bases=(models.Model,),
),
]

View File

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
class Migration(migrations.Migration):
dependencies = [
('projects', '0001_initial'),
('users', '0002_auto_20140903_0916'),
]
operations = [
migrations.AddField(
model_name='role',
name='project',
field=models.ForeignKey(related_name='roles', verbose_name='project', null=True, to='projects.Project'),
preserve_default=True,
),
migrations.AlterUniqueTogether(
name='role',
unique_together=set([('slug', 'project')]),
),
]

View File

View File

@ -139,7 +139,10 @@ class Role(models.Model):
choices=MEMBERS_PERMISSIONS)
order = models.IntegerField(default=10, null=False, blank=False,
verbose_name=_("order"))
project = models.ForeignKey("projects.Project", null=False, blank=False,
# null=True is for make work django 1.7 migrations. project
# field causes some circular dependencies, and due to this
# it can not be serialized in one transactional migration.
project = models.ForeignKey("projects.Project", null=True, blank=False,
related_name="roles", verbose_name=_("project"))
computable = models.BooleanField(default=True)

View File

@ -0,0 +1,37 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models, migrations
import django_pgjson.fields
from django.conf import settings
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='StorageEntry',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('created_date', models.DateTimeField(auto_now_add=True, verbose_name='created date')),
('modified_date', models.DateTimeField(verbose_name='modified date', auto_now=True)),
('key', models.CharField(max_length=255, verbose_name='key')),
('value', django_pgjson.fields.JsonField(verbose_name='value', blank=True, default=None, null=True)),
('owner', models.ForeignKey(to=settings.AUTH_USER_MODEL, verbose_name='owner', related_name='storage_entries')),
],
options={
'verbose_name_plural': 'storages entries',
'verbose_name': 'storage entry',
'ordering': ['owner', 'key'],
},
bases=(models.Model,),
),
migrations.AlterUniqueTogether(
name='storageentry',
unique_together=set([('owner', 'key')]),
),
]

View File