mirror of
https://github.com/makeplane/plane.git
synced 2026-02-24 20:20:49 +01:00
chore: issue imports with state
This commit is contained in:
@@ -221,7 +221,6 @@ def service_importer(service, importer_id):
|
||||
|
||||
@shared_task(queue="segway_tasks")
|
||||
def members_sync(data):
|
||||
|
||||
try:
|
||||
user = User.objects.get(email=data.get("email"))
|
||||
_ = WorkspaceMember.objects.get_or_create(
|
||||
@@ -272,7 +271,7 @@ def members_sync(data):
|
||||
str(new_user.id),
|
||||
True,
|
||||
f"{new_user.email} was imported to Plane from {service}",
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@shared_task(queue="segway_tasks")
|
||||
@@ -294,20 +293,38 @@ def label_sync(data):
|
||||
|
||||
@shared_task(queue="segway_tasks")
|
||||
def state_sync(data):
|
||||
existing_state = State.objects.filter(
|
||||
project_id=data.get("project_id"),
|
||||
workspace_id=data.get("workspace_id"),
|
||||
name__iexact=data.get("data"),
|
||||
)
|
||||
|
||||
if not existing_state.exists():
|
||||
State.objects.create(
|
||||
try:
|
||||
state = State.objects.get(
|
||||
external_id=data.get("external_id"),
|
||||
project_id=data.get("project_id"),
|
||||
workspace_id=data.get("workspace_id"),
|
||||
name=data.get("data"),
|
||||
created_by_id=data.get("created_by"),
|
||||
)
|
||||
|
||||
except State.DoesNotExist:
|
||||
existing_states = State.objects.filter(
|
||||
project_id=data.get("project_id"),
|
||||
workspace_id=data.get("workspace_id"),
|
||||
group=data.get("state_group"),
|
||||
name__iexact=data.get("state_name"),
|
||||
)
|
||||
|
||||
if existing_states.exists():
|
||||
existing_state = existing_states.first()
|
||||
print(existing_state,"existing_state")
|
||||
existing_state.external_id = data.get("external_id")
|
||||
existing_state.external_source = data.get("external_source")
|
||||
existing_state.save()
|
||||
else:
|
||||
State.objects.create(
|
||||
project_id=data.get("project_id"),
|
||||
workspace_id=data.get("workspace_id"),
|
||||
name=data.get("state_name"),
|
||||
group=data.get("state_group"),
|
||||
created_by_id=data.get("created_by"),
|
||||
external_id=data.get("external_id"),
|
||||
external_source=data.get("external_source"),
|
||||
)
|
||||
|
||||
|
||||
@shared_task(queue="segway_tasks")
|
||||
def modules_sync(data):
|
||||
@@ -349,59 +366,74 @@ def get_label_id(name, data):
|
||||
project_id=data.get("project_id"),
|
||||
workspace_id=data.get("workspace_id"),
|
||||
name__iexact=name,
|
||||
).values("id")
|
||||
).values("id").first()
|
||||
return existing_label
|
||||
except Label.DoesNotExist:
|
||||
return None
|
||||
|
||||
|
||||
@shared_task(queue="segway_tasks")
|
||||
def issue_sync(data):
|
||||
|
||||
def get_state_id(name, data):
|
||||
try:
|
||||
issue = Issue.objects.get(external_id=data.get("external_id"), project_id=data.get("project_id"))
|
||||
if issue:
|
||||
issue.name = data.get("name")
|
||||
issue.description_html = data.get("description")
|
||||
issue.start_date = data.get("start_date")
|
||||
issue.target_date = data.get("target_date")
|
||||
issue.priority = data.get("priority")
|
||||
|
||||
if data.get("assignee"):
|
||||
user = User.objects.filter(email=data.get("assignee")).values("id")
|
||||
# first get that issue assignee then check whether both are same or not if not then update the assignee
|
||||
assignee = IssueAssignee.objects.filter(issue=issue, project_id=data.get("project_id"),workspace_id=data.get("workspace_id")).values("assignee_id__email")
|
||||
if assignee != data.get("assignee"):
|
||||
assignee = IssueAssignee.objects.filter(issue=issue, project_id=data.get("project_id")).update(assignee_id=user)
|
||||
existing_state = State.objects.filter(
|
||||
name__iexact=name,
|
||||
project_id=data.get("project_id"),
|
||||
workspace_id=data.get("workspace_id"),
|
||||
).values("id").first()
|
||||
return existing_state
|
||||
except State.DoesNotExist:
|
||||
return None
|
||||
|
||||
# first get all the issue labels then check whether all are same or not if not then update the label
|
||||
labels = IssueLabel.objects.filter(issue=issue, project_id=data.get("project_id"),workspace_id=data.get("workspace_id")).values("label_id__name")
|
||||
# if labels != data.get("labels_list"):
|
||||
|
||||
|
||||
# if data.get("labels_list"):
|
||||
# labels_list = data.get("labels_list", [])
|
||||
# bulk_issue_labels = []
|
||||
# bulk_issue_labels = bulk_issue_labels + [
|
||||
# IssueLabel(
|
||||
# issue=issue,
|
||||
# label_id=get_label_id(name, data),
|
||||
# project_id=data.get("project_id"),
|
||||
# workspace_id=data.get("workspace_id"),
|
||||
# created_by_id=data.get("created_by"),
|
||||
# )
|
||||
# for name in labels_list
|
||||
# ]
|
||||
@shared_task(queue="segway_tasks")
|
||||
def issue_sync(data):
|
||||
print(data.get("external_id"), "external_id")
|
||||
try:
|
||||
issue = Issue.objects.get(
|
||||
external_id=data.get("external_id"),
|
||||
external_source=data.get("external_source"),
|
||||
project_id=data.get("project_id"),
|
||||
workspace_id=data.get("workspace_id"),
|
||||
)
|
||||
# if issue:
|
||||
# issue.name = data.get("name")
|
||||
# issue.description_html = data.get("description")
|
||||
# issue.start_date = data.get("start_date")
|
||||
# issue.target_date = data.get("target_date")
|
||||
# issue.priority = data.get("priority")
|
||||
|
||||
# _ = IssueLabel.objects.bulk_create(
|
||||
# bulk_issue_labels, batch_size=100, ignore_conflicts=True
|
||||
# )
|
||||
# if data.get("assignee"):
|
||||
# user = User.objects.filter(email=data.get("assignee")).values("id")
|
||||
# # first get that issue assignee then check whether both are same or not if not then update the assignee
|
||||
# assignee = IssueAssignee.objects.filter(issue=issue, project_id=data.get("project_id"),workspace_id=data.get("workspace_id")).values("assignee_id__email")
|
||||
# if assignee != data.get("assignee"):
|
||||
# assignee = IssueAssignee.objects.filter(issue=issue, project_id=data.get("project_id")).update(assignee_id=user)
|
||||
|
||||
# # first get all the issue labels then check whether all are same or not if not then update the label
|
||||
# labels = IssueLabel.objects.filter(issue=issue, project_id=data.get("project_id"),workspace_id=data.get("workspace_id")).values("label_id__name")
|
||||
# if labels != data.get("labels_list"):
|
||||
|
||||
# if data.get("labels_list"):
|
||||
# labels_list = data.get("labels_list", [])
|
||||
# bulk_issue_labels = []
|
||||
# bulk_issue_labels = bulk_issue_labels + [
|
||||
# IssueLabel(
|
||||
# issue=issue,
|
||||
# label_id=get_label_id(name, data),
|
||||
# project_id=data.get("project_id"),
|
||||
# workspace_id=data.get("workspace_id"),
|
||||
# created_by_id=data.get("created_by"),
|
||||
# )
|
||||
# for name in labels_list
|
||||
# ]
|
||||
|
||||
# _ = IssueLabel.objects.bulk_create(
|
||||
# bulk_issue_labels, batch_size=100, ignore_conflicts=True
|
||||
# )
|
||||
|
||||
issue.save()
|
||||
# issue.save()
|
||||
|
||||
except Issue.DoesNotExist:
|
||||
|
||||
print("issue does not exist")
|
||||
# Get the default state
|
||||
default_state = State.objects.filter(
|
||||
~Q(name="Triage"), project_id=data.get("project_id"), default=True
|
||||
@@ -414,9 +446,9 @@ def issue_sync(data):
|
||||
).first()
|
||||
|
||||
# Get the maximum sequence_id
|
||||
last_id = IssueSequence.objects.filter(project_id=data.get("project_id")).aggregate(
|
||||
largest=Max("sequence")
|
||||
)["largest"]
|
||||
last_id = IssueSequence.objects.filter(
|
||||
project_id=data.get("project_id")
|
||||
).aggregate(largest=Max("sequence"))["largest"]
|
||||
|
||||
last_id = 1 if last_id is None else last_id + 1
|
||||
|
||||
@@ -433,9 +465,10 @@ def issue_sync(data):
|
||||
issue = Issue.objects.create(
|
||||
project_id=data.get("project_id"),
|
||||
workspace_id=data.get("workspace_id"),
|
||||
state_id=data.get("state")
|
||||
if data.get("state", False)
|
||||
else default_state.id,
|
||||
state_id=get_state_id(data.get("state"), data).get("id") if get_state_id(data.get("state"), data) else None,
|
||||
# state_id=default_state.id,
|
||||
# if data.get("state", False)
|
||||
# else default_state.id,
|
||||
name=data.get("name", "Issue Created through Importer"),
|
||||
description_html=data.get("description_html", "<p></p>"),
|
||||
sequence_id=last_id,
|
||||
@@ -445,7 +478,7 @@ def issue_sync(data):
|
||||
priority=data.get("priority", "none"),
|
||||
created_by_id=data.get("created_by"),
|
||||
external_id=data.get("external_id"),
|
||||
external_source=data.get("source"),
|
||||
external_source=data.get("external_source"),
|
||||
)
|
||||
|
||||
# Attach Links
|
||||
@@ -472,7 +505,7 @@ def issue_sync(data):
|
||||
bulk_issue_labels = bulk_issue_labels + [
|
||||
IssueLabel(
|
||||
issue=issue,
|
||||
label_id=get_label_id(name, data),
|
||||
label_id=get_label_id(name, data).get("id") if get_label_id(name, data) else None,
|
||||
project_id=data.get("project_id"),
|
||||
workspace_id=data.get("workspace_id"),
|
||||
created_by_id=data.get("created_by"),
|
||||
@@ -484,7 +517,6 @@ def issue_sync(data):
|
||||
bulk_issue_labels, batch_size=100, ignore_conflicts=True
|
||||
)
|
||||
|
||||
|
||||
if data.get("assignee"):
|
||||
user = User.objects.filter(email=data.get("assignee")).values("id")
|
||||
# Attach Assignees
|
||||
|
||||
Reference in New Issue
Block a user