def project_pre_delete(sender, document, *args, **kwargs): """ Delete related documents when a User is deleted :param sender: Class :param document: Project Object :return: Nothing """ # delete sprints Sprint.objects(project=document).delete() # delete members ProjectMember.objects(project=document).delete() # delete tickets Ticket.objects(project=document).delete() # delete columns Column.objects(project=document).delete()
def get(self, project_pk): """ Get List of Sprints by Project :param project_pk: Project ID :return: """ prj = get_project_request(project_pk) return Sprint.get_by_project_not_finalized(prj), 200
def get(self, project_pk): """ Get List of sprints :param project_pk: Project ID :return: List of sprints """ prj = get_project_request(project_pk) return Sprint.objects(project=prj).order_by('order').to_json()
def get(self, project_pk): """ Get List of archived sprints :param project_pk: Project ID :return: List of sprints """ prj = get_project_request(project_pk) return Sprint.get_archived_sprints(prj).to_json(), 200
def post(self, project_pk): """ Order sprints in a project :param project_pk: Project ID :return: Order """ data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage(api_errors.INVALID_JSON_BODY_MSG) Sprint.order_items(data) # save activity save_notification(project_pk=project_pk, verb='order_sprints', data=data) return data, 200
def get(self, project_pk): """ Get Active Sprint by Project :param project_pk: ProjectID :return: Sprint Object """ prj = get_project_request(project_pk) sprint = Sprint.get_active_sprint(prj) return sprint, 200
def put(self, project_pk, tkt_id): """ Update Ticket :param project_pk: Project ID :param tkt_id: Ticket ID :return: updated Ticket Resource """ get_project_request(project_pk) tkt = get_ticket_request(tkt_id) data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage(api_errors.INVALID_JSON_BODY_MSG) tkt.description = data.get('description', tkt.description) tkt.points = data.get('points', tkt.points) tkt.title = data.get('title', tkt.title) tkt.labels = data.get('labels', tkt.labels) tkt.type = data.get('type', tkt.type) tkt.closed = data.get('closed', tkt.closed) if 'related_tickets_data' in data: for tkt_rel_data in data.get('related_tickets_data'): tkt_rel = Ticket.get_by_id(tkt_rel_data.get('value')) if tkt_rel: rt = TicketDependency() rt.ticket = tkt_rel rt.type = tkt_rel_data.get('type', 'R') rt.save() tkt.related_tickets.append(rt) tkt.save() if data.get('sprint'): sprint = Sprint.get_by_id(data.get('sprint')['pk']) if sprint: spo = SprintTicketOrder.get_active_sprint_ticket(sprint, tkt) if not spo: # remove old data if this already exists spo = SprintTicketOrder(sprint=sprint, ticket=tkt) spo.ticket_repr = tkt.to_dict() spo.order = SprintTicketOrder.get_next_order_index( sprint.id) spo.save() else: spo = SprintTicketOrder.get_active_ticket(tkt) if spo: spo.ticket_repr = tkt.to_dict() spo.save() # save activity save_notification(project_pk=project_pk, verb='update_ticket', data=tkt.to_dict()) return tkt, 200
def post(self, project_pk): """ Create a Sprint for a Project """ project = get_project_request(project_pk) total = Sprint.objects(project=project).count() sp = Sprint(project=project) sp.name = 'Sprint %d' % (total + 1) sp.save() # save activity save_notification(project_pk=project_pk, verb='new_sprint', data=sp.to_dict()) return sp, 201
def get(self, project_pk): """ Get Tickets for a Project :param project_pk: Project ID :return: List of tickets """ prj = get_project_request(project_pk) tickets = [] sprints = Sprint.get_by_project(prj) if prj.project_type == u'S': for s in sprints: spos = SprintTicketOrder.get_active_sprint(s) for spo in spos: tickets.append(spo.ticket.id) return Ticket.get_tickets_backlog(project_pk, tickets), 200
def post(self, project_pk): """ Create Ticket """ data = request.get_json(silent=True) if not data: raise api_errors.InvalidAPIUsage(api_errors.INVALID_JSON_BODY_MSG) project = get_project_request(project_pk) tkt = Ticket() last_tkt = Ticket.get_last_ticket(project_pk) tkt.number = last_tkt.number + 1 if last_tkt else 1 tkt.order = Ticket.get_next_order_index(project_pk) tkt.project = project tkt.description = data.get('description') tkt.points = data.get('points', 0) tkt.title = data.get('title') tkt.labels = data.get('labels') tkt.type = data.get('type', 'U') tkt.save() if data.get('sprint'): # Assign to a sprint sprint = Sprint.get_by_id(pk=data.get('sprint')['pk']) if sprint: spo = SprintTicketOrder(sprint=sprint, ticket=tkt) spo.ticket_repr = tkt.to_dict() spo.order = SprintTicketOrder.get_next_order_index(sprint.id) spo.save() # save activity save_notification(project_pk=project_pk, verb='new_ticket', data=tkt.to_dict()) return tkt, 201
def get_sprint_request(sprint_id): sprint = Sprint.get_by_id(sprint_id) if not sprint: raise api_errors.MissingResource(api_errors.INVALID_SPRINT_MSG) return sprint