Add django1.7 migrations.
parent
3eb63bdfe6
commit
1dc23c13f0
|
@ -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,),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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,),
|
||||||
|
),
|
||||||
|
]
|
|
@ -29,6 +29,10 @@ from .choices import HISTORY_TYPE_CHOICES
|
||||||
from taiga.base.utils.diff import make_diff as make_diff_from_dicts
|
from taiga.base.utils.diff import make_diff as make_diff_from_dicts
|
||||||
|
|
||||||
|
|
||||||
|
def _generate_uuid():
|
||||||
|
return str(uuid.uuid1())
|
||||||
|
|
||||||
|
|
||||||
class HistoryEntry(models.Model):
|
class HistoryEntry(models.Model):
|
||||||
"""
|
"""
|
||||||
Domain model that represents a history
|
Domain model that represents a history
|
||||||
|
@ -38,7 +42,7 @@ class HistoryEntry(models.Model):
|
||||||
comments.
|
comments.
|
||||||
"""
|
"""
|
||||||
id = models.CharField(primary_key=True, max_length=255, unique=True,
|
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)
|
user = JsonField(blank=True, default=None, null=True)
|
||||||
created_at = models.DateTimeField(default=timezone.now)
|
created_at = models.DateTimeField(default=timezone.now)
|
||||||
|
|
|
@ -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,),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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,
|
||||||
|
),
|
||||||
|
]
|
|
@ -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,
|
||||||
|
),
|
||||||
|
]
|
|
@ -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')]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -243,7 +243,8 @@ class Project(ProjectDefaults, TaggedMixin, models.Model):
|
||||||
def _get_user_stories_points(self, user_stories):
|
def _get_user_stories_points(self, user_stories):
|
||||||
role_points = [us.role_points.all() for us in user_stories]
|
role_points = [us.role_points.all() for us in user_stories]
|
||||||
flat_role_points = itertools.chain(*role_points)
|
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)
|
return dict_sum(*flat_role_dicts)
|
||||||
|
|
||||||
def _get_points_increment(self, client_requirement, team_requirement):
|
def _get_points_increment(self, client_requirement, team_requirement):
|
||||||
|
|
|
@ -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')]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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')]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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,),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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')]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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')]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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')]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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')]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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,),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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,),
|
||||||
|
),
|
||||||
|
]
|
|
@ -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')]),
|
||||||
|
),
|
||||||
|
]
|
|
@ -139,7 +139,10 @@ class Role(models.Model):
|
||||||
choices=MEMBERS_PERMISSIONS)
|
choices=MEMBERS_PERMISSIONS)
|
||||||
order = models.IntegerField(default=10, null=False, blank=False,
|
order = models.IntegerField(default=10, null=False, blank=False,
|
||||||
verbose_name=_("order"))
|
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"))
|
related_name="roles", verbose_name=_("project"))
|
||||||
computable = models.BooleanField(default=True)
|
computable = models.BooleanField(default=True)
|
||||||
|
|
||||||
|
|
|
@ -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')]),
|
||||||
|
),
|
||||||
|
]
|
Loading…
Reference in New Issue