예제 #1
0
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()
예제 #2
0
 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
예제 #3
0
 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()
예제 #4
0
 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
예제 #5
0
    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
예제 #6
0
 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
예제 #7
0
    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
예제 #8
0
    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
예제 #9
0
    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
예제 #10
0
    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
예제 #11
0
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