Add events for labels, show in events list

This commit is contained in:
Ivan Habunek 2018-10-24 15:49:26 +02:00 committed by Drew DeVault
parent de0137a0b0
commit fc8a1acacd
5 changed files with 55 additions and 2 deletions

View File

@ -0,0 +1,24 @@
"""Link event to label
Revision ID: a8cb241798dc
Revises: cf222857edec
Create Date: 2018-10-18 16:21:54.739215
"""
# revision identifiers, used by Alembic.
revision = 'a8cb241798dc'
down_revision = 'cf222857edec'
from alembic import op
import sqlalchemy as sa
def upgrade():
op.add_column('event', sa.Column('label_id', sa.Integer(), nullable=True))
op.create_foreign_key(None, 'event', 'label', ['label_id'], ['id'])
def downgrade():
op.drop_constraint(None, 'event', type_='foreignkey')
op.drop_column('event', 'label_id')

View File

@ -335,7 +335,14 @@ def ticket_add_label(owner, name, ticket_id):
ticket_label.label_id = label.id
ticket_label.user_id = current_user.id
event = Event()
event.event_type = EventType.label_added
event.user_id = current_user.id
event.ticket_id = ticket.id
event.label_id = label.id
db.session.add(ticket_label)
db.session.add(event)
db.session.commit()
return redirect(url_for("ticket.ticket_GET",
@ -364,6 +371,13 @@ def ticket_remove_label(owner, name, ticket_id, label_id):
.filter(TicketLabel.ticket_id == ticket.id)).first()
if ticket_label:
event = Event()
event.event_type = EventType.label_removed
event.user_id = current_user.id
event.ticket_id = ticket.id
event.label_id = label.id
db.session.add(event)
db.session.delete(ticket_label)
db.session.commit()

View File

@ -398,8 +398,9 @@ def delete_label(owner, name, label_id):
if not label:
abort(404)
# Remove label from any linked tickets
# Remove label from any linked tickets and related events
TicketLabel.query.filter(TicketLabel.label_id == label.id).delete()
Event.query.filter(Event.label_id == label.id).delete()
db.session.delete(label)
db.session.commit()

View File

@ -21,6 +21,16 @@
<a href="/~{{ event.comment.submitter.username }}">
~{{ event.comment.submitter.username }}
</a>
{% elif EventType.label_added in event.event_type %}
Label {{ event.label|label_badge(cls="small") }} added by
<a href="/~{{ event.user.username }}">
~{{ event.user.username }}
</a>
{% elif EventType.label_removed in event.event_type %}
Label {{ event.label|label_badge(cls="small") }} removed by
<a href="/~{{ event.user.username }}">
~{{ event.user.username }}
</a>
{% endif %}
on <a href="{{ url_for("html.user_GET",
username=event.ticket.tracker.owner.username) }}"

View File

@ -1,5 +1,4 @@
import sqlalchemy as sa
import sqlalchemy_utils as sau
from srht.flagtype import FlagType
from srht.database import Base
from todosrht.types.ticketstatus import TicketStatus, TicketResolution
@ -9,6 +8,8 @@ class EventType(IntFlag):
created = 1
comment = 2
status_change = 4
label_added = 8
label_removed = 16
class Event(Base):
"""
@ -35,6 +36,9 @@ class Event(Base):
comment_id = sa.Column(sa.Integer, sa.ForeignKey("ticket_comment.id"))
comment = sa.orm.relationship("TicketComment")
label_id = sa.Column(sa.Integer, sa.ForeignKey('label.id'))
label = sa.orm.relationship("Label", backref=sa.orm.backref("events"))
def __repr__(self):
return '<Event {}>'.format(self.id)