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 get_ticket_request(ticket_id): """ Get Ticket from the url :param ticket_id: Ticket ID :return: Ticket Object """ tkt = Ticket.get_by_id(ticket_id) if tkt is None: raise api_errors.MissingResource(api_errors.INVALID_TICKET_MSG) return tkt