Example #1
0
    def _import_project_data(self, data, options):
        board = data
        labels = board['labels']
        statuses = board['lists']
        project_template = ProjectTemplate.objects.get(slug=options.get('template', "kanban"))
        project_template.us_statuses = []
        counter = 0
        for us_status in statuses:
            if counter == 0:
                project_template.default_options["us_status"] = us_status['name']

            counter += 1
            if us_status['name'] not in [s['name'] for s in project_template.us_statuses]:
                project_template.us_statuses.append({
                    "name": us_status['name'],
                    "slug": slugify(us_status['name']),
                    "is_closed": False,
                    "is_archived": True if us_status['closed'] else False,
                    "color": "#999999",
                    "wip_limit": None,
                    "order": us_status['pos'],
                })

        project_template.task_statuses = []
        project_template.task_statuses.append({
            "name": "Incomplete",
            "slug": "incomplete",
            "is_closed": False,
            "color": "#ff8a84",
            "order": 1,
        })
        project_template.task_statuses.append({
            "name": "Complete",
            "slug": "complete",
            "is_closed": True,
            "color": "#669900",
            "order": 2,
        })
        project_template.default_options["task_status"] = "Incomplete"
        project_template.roles.append({
            "name": "Trello",
            "slug": "trello",
            "computable": False,
            "permissions": project_template.roles[0]['permissions'],
            "order": 70,
        })

        tags_colors = []
        for label in labels:
            name = label['name']
            if not name:
                name = label['color']
            name = name.lower()
            color = self._ensure_hex_color(label['color'])
            tags_colors.append([name, color])

        project = Project(
            name=options.get('name', None) or board['name'],
            description=options.get('description', None) or board['desc'],
            owner=self._user,
            tags_colors=tags_colors,
            creation_template=project_template,
            is_private=options.get('is_private', False),
        )
        (can_create, error_message) = projects_service.check_if_project_can_be_created_or_updated(project)
        if not can_create:
            raise exceptions.NotEnoughSlotsForProject(project.is_private, 1, error_message)
        project.save()

        if board.get('organization', None):
            trello_avatar_template = "https://trello-logos.s3.amazonaws.com/{}/170.png"
            project_logo_url = trello_avatar_template.format(board['organization']['logoHash'])
            data = requests.get(project_logo_url)
            project.logo.save("logo.png", ContentFile(data.content), save=True)

        UserStoryCustomAttribute.objects.create(
            name="Due",
            description="Due date",
            type="date",
            order=1,
            project=project
        )
        import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "trello")
        return project
Example #2
0
    def _import_project_data(self, data, options):
        board = data
        labels = board['labels']
        statuses = board['lists']
        project_template = ProjectTemplate.objects.get(
            slug=options.get('template', "kanban"))
        project_template.us_statuses = []
        counter = 0
        for us_status in statuses:
            if counter == 0:
                project_template.default_options["us_status"] = us_status[
                    'name']

            counter += 1
            if us_status['name'] not in [
                    s['name'] for s in project_template.us_statuses
            ]:
                project_template.us_statuses.append({
                    "name":
                    us_status['name'],
                    "slug":
                    slugify(us_status['name']),
                    "is_closed":
                    False,
                    "is_archived":
                    True if us_status['closed'] else False,
                    "color":
                    "#999999",
                    "wip_limit":
                    None,
                    "order":
                    us_status['pos'],
                })

        project_template.task_statuses = []
        project_template.task_statuses.append({
            "name": "Incomplete",
            "slug": "incomplete",
            "is_closed": False,
            "color": "#ff8a84",
            "order": 1,
        })
        project_template.task_statuses.append({
            "name": "Complete",
            "slug": "complete",
            "is_closed": True,
            "color": "#669900",
            "order": 2,
        })
        project_template.default_options["task_status"] = "Incomplete"
        project_template.roles.append({
            "name":
            "Trello",
            "slug":
            "trello",
            "computable":
            False,
            "permissions":
            project_template.roles[0]['permissions'],
            "order":
            70,
        })

        tags_colors = []
        for label in labels:
            name = label['name']
            if not name:
                name = label['color']
            name = name.lower()
            color = self._ensure_hex_color(label['color'])
            tags_colors.append([name, color])

        project = Project(
            name=options.get('name', None) or board['name'],
            description=options.get('description', None) or board['desc'],
            owner=self._user,
            tags_colors=tags_colors,
            creation_template=project_template,
            is_private=options.get('is_private', False),
        )
        (can_create, error_message
         ) = projects_service.check_if_project_can_be_created_or_updated(
             project)
        if not can_create:
            raise exceptions.NotEnoughSlotsForProject(project.is_private, 1,
                                                      error_message)
        project.save()

        if board.get('organization', None):
            trello_avatar_template = "https://trello-logos.s3.amazonaws.com/{}/170.png"
            project_logo_url = trello_avatar_template.format(
                board['organization']['logoHash'])
            data = requests.get(project_logo_url)
            project.logo.save("logo.png", ContentFile(data.content), save=True)

        UserStoryCustomAttribute.objects.create(name="Due",
                                                description="Due date",
                                                type="date",
                                                order=1,
                                                project=project)
        import_service.create_memberships(options.get('users_bindings', {}),
                                          project, self._user, "trello")
        return project
Example #3
0
    def _import_project_data(self, project_id, options):
        project = self._client.get_agile("/board/{}".format(project_id))
        project_config = self._client.get_agile(
            "/board/{}/configuration".format(project_id))
        if project['type'] == "scrum":
            project_template = ProjectTemplate.objects.get(slug="scrum")
            options['type'] = "scrum"
        elif project['type'] == "kanban":
            project_template = ProjectTemplate.objects.get(slug="kanban")
            options['type'] = "kanban"

        project_template.is_epics_activated = True
        project_template.epic_statuses = OrderedDict()
        project_template.us_statuses = OrderedDict()
        project_template.task_statuses = OrderedDict()
        project_template.issue_statuses = OrderedDict()

        counter = 0
        for column in project_config['columnConfig']['columns']:
            column_slug = slugify(column['name'])
            project_template.epic_statuses[column_slug] = {
                "name": column['name'],
                "slug": column_slug,
                "is_closed": False,
                "is_archived": False,
                "color": "#999999",
                "wip_limit": None,
                "order": counter,
            }
            project_template.us_statuses[column_slug] = {
                "name": column['name'],
                "slug": column_slug,
                "is_closed": False,
                "is_archived": False,
                "color": "#999999",
                "wip_limit": None,
                "order": counter,
            }
            project_template.task_statuses[column_slug] = {
                "name": column['name'],
                "slug": column_slug,
                "is_closed": False,
                "is_archived": False,
                "color": "#999999",
                "wip_limit": None,
                "order": counter,
            }
            project_template.issue_statuses[column_slug] = {
                "name": column['name'],
                "slug": column_slug,
                "is_closed": False,
                "is_archived": False,
                "color": "#999999",
                "wip_limit": None,
                "order": counter,
            }
            counter += 1

        project_template.epic_statuses = list(
            project_template.epic_statuses.values())
        project_template.us_statuses = list(
            project_template.us_statuses.values())
        project_template.task_statuses = list(
            project_template.task_statuses.values())
        project_template.issue_statuses = list(
            project_template.issue_statuses.values())
        project_template.default_options[
            "epic_status"] = project_template.epic_statuses[0]['name']
        project_template.default_options[
            "us_status"] = project_template.us_statuses.values()[0]['name']
        project_template.default_options[
            "task_status"] = project_template.task_statuses.values()[0]['name']
        project_template.default_options[
            "issue_status"] = project_template.issue_statuses.values(
            )[0]['name']

        project_template.points = [{
            "value": None,
            "name": "?",
            "order": 0,
        }]

        main_permissions = project_template.roles[0]['permissions']
        project_template.roles = [{
            "name": "Main",
            "slug": "main",
            "computable": True,
            "permissions": main_permissions,
            "order": 70,
        }]

        project = Project.objects.create(
            name=options.get('name', None) or project['name'],
            description=options.get('description', None)
            or project.get('description', ''),
            owner=self._user,
            creation_template=project_template,
            is_private=options.get('is_private', False),
        )

        self._create_custom_fields(project)
        import_service.create_memberships(options.get('users_bindings', {}),
                                          project, self._user, "main")

        if project_template.slug == "scrum":
            for sprint in self._client.get_agile(
                    "/board/{}/sprint".format(project_id))['values']:
                start_datetime = sprint.get('startDate', None)
                end_datetime = sprint.get('startDate', None)
                start_date = datetime.date.today()
                if start_datetime:
                    start_date = start_datetime[:10]
                end_date = datetime.date.today()
                if end_datetime:
                    end_date = end_datetime[:10]

                milestone = Milestone.objects.create(
                    name=sprint['name'],
                    slug=slugify(sprint['name']),
                    owner=self._user,
                    project=project,
                    estimated_start=start_date,
                    estimated_finish=end_date,
                )
                Milestone.objects.filter(id=milestone.id).update(
                    created_date=start_datetime or datetime.datetime.now(),
                    modified_date=start_datetime or datetime.datetime.now(),
                )
        return project
Example #4
0
    def _import_project_data(self, repo, options):
        users_bindings = options.get('users_bindings', {})
        project_template = ProjectTemplate.objects.get(slug=options['template'])

        if options['type'] == "user_stories":
            project_template.us_statuses = []
            project_template.us_statuses.append({
                "name": "Open",
                "slug": "open",
                "is_closed": False,
                "is_archived": False,
                "color": "#ff8a84",
                "wip_limit": None,
                "order": 1,
            })
            project_template.us_statuses.append({
                "name": "Closed",
                "slug": "closed",
                "is_closed": True,
                "is_archived": False,
                "color": "#669900",
                "wip_limit": None,
                "order": 2,
            })
            project_template.default_options["us_status"] = "Open"
        elif options['type'] == "issues":
            project_template.issue_statuses = []
            project_template.issue_statuses.append({
                "name": "Open",
                "slug": "open",
                "is_closed": False,
                "color": "#ff8a84",
                "order": 1,
            })
            project_template.issue_statuses.append({
                "name": "Closed",
                "slug": "closed",
                "is_closed": True,
                "color": "#669900",
                "order": 2,
            })
            project_template.default_options["issue_status"] = "Open"

        project_template.roles.append({
            "name": "Github",
            "slug": "github",
            "computable": False,
            "permissions": project_template.roles[0]['permissions'],
            "order": 70,
        })

        tags_colors = []
        for label in self._client.get("/repos/{}/labels".format(repo['full_name'])):
            name = label['name'].lower()
            color = "#{}".format(label['color'])
            tags_colors.append([name, color])

        project = Project.objects.create(
            name=options.get('name', None) or repo['full_name'],
            description=options.get('description', None) or repo['description'],
            owner=self._user,
            tags_colors=tags_colors,
            creation_template=project_template,
            is_private=options.get('is_private', False),
        )

        if 'organization' in repo and repo['organization'].get('avatar_url', None):
            data = requests.get(repo['organization']['avatar_url'])
            project.logo.save("logo.png", ContentFile(data.content), save=True)

        import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "github")

        for milestone in self._client.get("/repos/{}/milestones".format(repo['full_name'])):
            taiga_milestone = Milestone.objects.create(
                name=milestone['title'],
                owner=users_bindings.get(milestone.get('creator', {}).get('id', None), self._user),
                project=project,
                estimated_start=milestone['created_at'][:10],
                estimated_finish=milestone['due_on'][:10],
            )
            Milestone.objects.filter(id=taiga_milestone.id).update(
                created_date=milestone['created_at'],
                modified_date=milestone['updated_at'],
            )
        return project
Example #5
0
    def _import_project_data(self, project_id, options):
        project = self._client.get("/project/{}".format(project_id))
        project_template = ProjectTemplate.objects.get(slug=options['template'])

        epic_statuses = OrderedDict()
        for issue_type in options.get('types_bindings', {}).get("epic", []):
            for status in issue_type['statuses']:
                epic_statuses[status['name']] = status

        us_statuses = OrderedDict()
        for issue_type in options.get('types_bindings', {}).get("us", []):
            for status in issue_type['statuses']:
                us_statuses[status['name']] = status

        task_statuses = OrderedDict()
        for issue_type in options.get('types_bindings', {}).get("task", []):
            for status in issue_type['statuses']:
                task_statuses[status['name']] = status

        issue_statuses = OrderedDict()
        for issue_type in options.get('types_bindings', {}).get("issue", []):
            for status in issue_type['statuses']:
                issue_statuses[status['name']] = status

        counter = 0
        if epic_statuses:
            project_template.epic_statuses = []
            project_template.is_epics_activated = True
        for epic_status in epic_statuses.values():
            project_template.epic_statuses.append({
                "name": epic_status['name'],
                "slug": slugify(epic_status['name']),
                "is_closed": False,
                "color": "#999999",
                "order": counter,
            })
            counter += 1
        if epic_statuses:
            project_template.default_options["epic_status"] = list(epic_statuses.values())[0]['name']

        project_template.points = [{
            "value": None,
            "name": "?",
            "order": 0,
        }]

        main_permissions = project_template.roles[0]['permissions']
        project_template.roles = [{
            "name": "Main",
            "slug": "main",
            "computable": True,
            "permissions": main_permissions,
            "order": 70,
        }]

        counter = 0
        if us_statuses:
            project_template.us_statuses = []
        for us_status in us_statuses.values():
            project_template.us_statuses.append({
                "name": us_status['name'],
                "slug": slugify(us_status['name']),
                "is_closed": False,
                "is_archived": False,
                "color": "#999999",
                "wip_limit": None,
                "order": counter,
            })
            counter += 1
        if us_statuses:
            project_template.default_options["us_status"] = list(us_statuses.values())[0]['name']

        counter = 0
        if task_statuses:
            project_template.task_statuses = []
        for task_status in task_statuses.values():
            project_template.task_statuses.append({
                "name": task_status['name'],
                "slug": slugify(task_status['name']),
                "is_closed": False,
                "color": "#999999",
                "order": counter,
            })
            counter += 1
        if task_statuses:
            project_template.default_options["task_status"] = list(task_statuses.values())[0]['name']

        counter = 0
        if issue_statuses:
            project_template.issue_statuses = []
        for issue_status in issue_statuses.values():
            project_template.issue_statuses.append({
                "name": issue_status['name'],
                "slug": slugify(issue_status['name']),
                "is_closed": False,
                "color": "#999999",
                "order": counter,
            })
            counter += 1
        if issue_statuses:
            project_template.default_options["issue_status"] = list(issue_statuses.values())[0]['name']


        main_permissions = project_template.roles[0]['permissions']
        project_template.roles = [{
            "name": "Main",
            "slug": "main",
            "computable": True,
            "permissions": main_permissions,
            "order": 70,
        }]

        project = Project.objects.create(
            name=options.get('name', None) or project['name'],
            description=options.get('description', None) or project.get('description', ''),
            owner=self._user,
            creation_template=project_template,
            is_private=options.get('is_private', False),
        )

        self._create_custom_fields(project)
        import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "main")

        return project
Example #6
0
    def _import_project_data(self, project_id, options):
        project = self._client.get("/project/{}".format(project_id))
        project_template = ProjectTemplate.objects.get(
            slug=options['template'])

        epic_statuses = OrderedDict()
        for issue_type in options.get('types_bindings', {}).get("epic", []):
            for status in issue_type['statuses']:
                epic_statuses[status['name']] = status

        us_statuses = OrderedDict()
        for issue_type in options.get('types_bindings', {}).get("us", []):
            for status in issue_type['statuses']:
                us_statuses[status['name']] = status

        task_statuses = OrderedDict()
        for issue_type in options.get('types_bindings', {}).get("task", []):
            for status in issue_type['statuses']:
                task_statuses[status['name']] = status

        issue_statuses = OrderedDict()
        for issue_type in options.get('types_bindings', {}).get("issue", []):
            for status in issue_type['statuses']:
                issue_statuses[status['name']] = status

        counter = 0
        if epic_statuses:
            project_template.epic_statuses = []
            project_template.is_epics_activated = True
        for epic_status in epic_statuses.values():
            project_template.epic_statuses.append({
                "name":
                epic_status['name'],
                "slug":
                slugify(epic_status['name']),
                "is_closed":
                False,
                "color":
                "#999999",
                "order":
                counter,
            })
            counter += 1
        if epic_statuses:
            project_template.default_options["epic_status"] = list(
                epic_statuses.values())[0]['name']

        project_template.points = [{
            "value": None,
            "name": "?",
            "order": 0,
        }]

        main_permissions = project_template.roles[0]['permissions']
        project_template.roles = [{
            "name": "Main",
            "slug": "main",
            "computable": True,
            "permissions": main_permissions,
            "order": 70,
        }]

        counter = 0
        if us_statuses:
            project_template.us_statuses = []
        for us_status in us_statuses.values():
            project_template.us_statuses.append({
                "name":
                us_status['name'],
                "slug":
                slugify(us_status['name']),
                "is_closed":
                False,
                "is_archived":
                False,
                "color":
                "#999999",
                "wip_limit":
                None,
                "order":
                counter,
            })
            counter += 1
        if us_statuses:
            project_template.default_options["us_status"] = list(
                us_statuses.values())[0]['name']

        counter = 0
        if task_statuses:
            project_template.task_statuses = []
        for task_status in task_statuses.values():
            project_template.task_statuses.append({
                "name":
                task_status['name'],
                "slug":
                slugify(task_status['name']),
                "is_closed":
                False,
                "color":
                "#999999",
                "order":
                counter,
            })
            counter += 1
        if task_statuses:
            project_template.default_options["task_status"] = list(
                task_statuses.values())[0]['name']

        counter = 0
        if issue_statuses:
            project_template.issue_statuses = []
        for issue_status in issue_statuses.values():
            project_template.issue_statuses.append({
                "name":
                issue_status['name'],
                "slug":
                slugify(issue_status['name']),
                "is_closed":
                False,
                "color":
                "#999999",
                "order":
                counter,
            })
            counter += 1
        if issue_statuses:
            project_template.default_options["issue_status"] = list(
                issue_statuses.values())[0]['name']

        main_permissions = project_template.roles[0]['permissions']
        project_template.roles = [{
            "name": "Main",
            "slug": "main",
            "computable": True,
            "permissions": main_permissions,
            "order": 70,
        }]

        project = Project.objects.create(
            name=options.get('name', None) or project['name'],
            description=options.get('description', None)
            or project.get('description', ''),
            owner=self._user,
            creation_template=project_template,
            is_private=options.get('is_private', False),
        )

        self._create_custom_fields(project)
        import_service.create_memberships(options.get('users_bindings', {}),
                                          project, self._user, "main")

        return project
Example #7
0
    def _import_project_data(self, project, options):
        users_bindings = options.get('users_bindings', {})
        project_template = ProjectTemplate.objects.get(
            slug=options.get('template', 'scrum'))

        project_template.us_statuses = []
        project_template.us_statuses.append({
            "name": "Open",
            "slug": "open",
            "is_closed": False,
            "is_archived": False,
            "color": "#ff8a84",
            "wip_limit": None,
            "order": 1,
        })
        project_template.us_statuses.append({
            "name": "Closed",
            "slug": "closed",
            "is_closed": True,
            "is_archived": False,
            "color": "#669900",
            "wip_limit": None,
            "order": 2,
        })
        project_template.default_options["us_status"] = "Open"

        project_template.task_statuses = []
        project_template.task_statuses.append({
            "name": "Open",
            "slug": "open",
            "is_closed": False,
            "color": "#ff8a84",
            "order": 1,
        })
        project_template.task_statuses.append({
            "name": "Closed",
            "slug": "closed",
            "is_closed": True,
            "color": "#669900",
            "order": 2,
        })
        project_template.default_options["task_status"] = "Open"

        project_template.roles.append({
            "name":
            "Asana",
            "slug":
            "asana",
            "computable":
            False,
            "permissions":
            project_template.roles[0]['permissions'],
            "order":
            70,
        })

        tags_colors = []
        for tag in self._client.tags.find_by_workspace(
                project['workspace']['id'], fields=["name", "color"]):
            name = tag['name'].lower()
            color = tag['color']
            tags_colors.append([name, color])

        taiga_project = Project.objects.create(
            name=options.get('name', None) or project['name'],
            description=options.get('description', None) or project['notes'],
            owner=self._user,
            tags_colors=tags_colors,
            creation_template=project_template,
            is_private=options.get('is_private', False))

        import_service.create_memberships(options.get('users_bindings', {}),
                                          project, self._user, "asana")

        UserStoryCustomAttribute.objects.create(name="Due date",
                                                description="Due date",
                                                type="date",
                                                order=1,
                                                project=taiga_project)

        TaskCustomAttribute.objects.create(name="Due date",
                                           description="Due date",
                                           type="date",
                                           order=1,
                                           project=taiga_project)

        return taiga_project
Example #8
0
    def _import_project_data(self, repo, options):
        users_bindings = options.get("users_bindings", {})
        project_template = ProjectTemplate.objects.get(
            slug=options["template"])

        if options["type"] == "user_stories":
            project_template.us_statuses = []
            project_template.us_statuses.append({
                "name": "Open",
                "slug": "open",
                "is_closed": False,
                "is_archived": False,
                "color": "#ff8a84",
                "wip_limit": None,
                "order": 1,
            })
            project_template.us_statuses.append({
                "name": "Closed",
                "slug": "closed",
                "is_closed": True,
                "is_archived": False,
                "color": "#669900",
                "wip_limit": None,
                "order": 2,
            })
            project_template.default_options["us_status"] = "Open"
        elif options["type"] == "issues":
            project_template.issue_statuses = []
            project_template.issue_statuses.append({
                "name": "Open",
                "slug": "open",
                "is_closed": False,
                "color": "#ff8a84",
                "order": 1,
            })
            project_template.issue_statuses.append({
                "name": "Closed",
                "slug": "closed",
                "is_closed": True,
                "color": "#669900",
                "order": 2,
            })
            project_template.default_options["issue_status"] = "Open"

        project_template.roles.append({
            "name":
            "Github",
            "slug":
            "github",
            "computable":
            False,
            "permissions":
            project_template.roles[0]["permissions"],
            "order":
            70,
        })

        tags_colors = []
        for label in self._client.get("/repos/{}/labels".format(
                repo["full_name"])):
            name = label["name"].lower()
            color = "#{}".format(label["color"])
            tags_colors.append([name, color])

        project = Project.objects.create(
            name=options.get("name", None) or repo["full_name"],
            description=options.get("description", None)
            or repo["description"],
            owner=self._user,
            tags_colors=tags_colors,
            creation_template=project_template,
            is_private=options.get("is_private", False),
        )

        if "organization" in repo and repo["organization"].get(
                "avatar_url", None):
            data = requests.get(repo["organization"]["avatar_url"])
            project.logo.save("logo.png", ContentFile(data.content), save=True)

        import_service.create_memberships(options.get("users_bindings", {}),
                                          project, self._user, "github")

        for milestone in self._client.get("/repos/{}/milestones".format(
                repo["full_name"])):
            taiga_milestone = Milestone.objects.create(
                name=milestone["title"],
                owner=users_bindings.get(
                    milestone.get("creator", {}).get("id", None), self._user),
                project=project,
                estimated_start=milestone["created_at"][:10],
                estimated_finish=milestone["due_on"][:10]
                if milestone["due_on"] else datetime.date(
                    datetime.MAXYEAR, 12, 31),
            )
            Milestone.objects.filter(id=taiga_milestone.id).update(
                created_date=milestone["created_at"],
                modified_date=milestone["updated_at"],
            )
        return project
Example #9
0
    def _import_project_data(self, project_id, options):
        project = self._client.get_agile("/board/{}".format(project_id))
        project_config = self._client.get_agile("/board/{}/configuration".format(project_id))
        if project['type'] == "scrum":
            project_template = ProjectTemplate.objects.get(slug="scrum")
            options['type'] = "scrum"
        elif project['type'] == "kanban":
            project_template = ProjectTemplate.objects.get(slug="kanban")
            options['type'] = "kanban"

        project_template.is_epics_activated = True
        project_template.epic_statuses = OrderedDict()
        project_template.us_statuses = OrderedDict()
        project_template.task_statuses = OrderedDict()
        project_template.issue_statuses = OrderedDict()

        counter = 0
        for column in project_config['columnConfig']['columns']:
            column_slug = slugify(column['name'])
            project_template.epic_statuses[column_slug] = {
                "name": column['name'],
                "slug": column_slug,
                "is_closed": False,
                "is_archived": False,
                "color": "#999999",
                "wip_limit": None,
                "order": counter,
            }
            project_template.us_statuses[column_slug] = {
                "name": column['name'],
                "slug": column_slug,
                "is_closed": False,
                "is_archived": False,
                "color": "#999999",
                "wip_limit": None,
                "order": counter,
            }
            project_template.task_statuses[column_slug] = {
                "name": column['name'],
                "slug": column_slug,
                "is_closed": False,
                "is_archived": False,
                "color": "#999999",
                "wip_limit": None,
                "order": counter,
            }
            project_template.issue_statuses[column_slug] = {
                "name": column['name'],
                "slug": column_slug,
                "is_closed": False,
                "is_archived": False,
                "color": "#999999",
                "wip_limit": None,
                "order": counter,
            }
            counter += 1

        project_template.epic_statuses = list(project_template.epic_statuses.values())
        project_template.us_statuses = list(project_template.us_statuses.values())
        project_template.task_statuses = list(project_template.task_statuses.values())
        project_template.issue_statuses = list(project_template.issue_statuses.values())
        project_template.default_options["epic_status"] = project_template.epic_statuses[0]['name']
        project_template.default_options["us_status"] = project_template.us_statuses[0]['name']
        project_template.default_options["task_status"] = project_template.task_statuses[0]['name']
        project_template.default_options["issue_status"] = project_template.issue_statuses[0]['name']

        project_template.points = [{
            "value": None,
            "name": "?",
            "order": 0,
        }]

        main_permissions = project_template.roles[0]['permissions']
        project_template.roles = [{
            "name": "Main",
            "slug": "main",
            "computable": True,
            "permissions": main_permissions,
            "order": 70,
        }]

        project = Project.objects.create(
            name=options.get('name', None) or project['name'],
            description=options.get('description', None) or project.get('description', ''),
            owner=self._user,
            creation_template=project_template,
            is_private=options.get('is_private', False),
        )

        self._create_custom_fields(project)
        import_service.create_memberships(options.get('users_bindings', {}), project, self._user, "main")

        if project_template.slug == "scrum":
            for sprint in self._client.get_agile("/board/{}/sprint".format(project_id))['values']:
                start_datetime = sprint.get('startDate', None)
                end_datetime = sprint.get('startDate', None)
                start_date = datetime.date.today()
                if start_datetime:
                    start_date = start_datetime[:10]
                end_date = datetime.date.today()
                if end_datetime:
                    end_date = end_datetime[:10]

                milestone = Milestone.objects.create(
                    name=sprint['name'],
                    slug=slugify(sprint['name']),
                    owner=self._user,
                    project=project,
                    estimated_start=start_date,
                    estimated_finish=end_date,
                )
                Milestone.objects.filter(id=milestone.id).update(
                    created_date=start_datetime or datetime.datetime.now(),
                    modified_date=start_datetime or datetime.datetime.now(),
                )
        return project