Added a BallotCommentDocEvent, which extends DocEvent with a send_mail field, in order to better be able to show whether ballot discusses and comments were posted with with the 'send email' button or not.
- Legacy-Id: 15515
This commit is contained in:
parent
194495da03
commit
cfb214c48a
|
@ -7,6 +7,7 @@ from models import (StateType, State, RelatedDocument, DocumentAuthor, Document,
|
|||
DocHistoryAuthor, DocHistory, DocAlias, DocReminder, DocEvent, NewRevisionDocEvent,
|
||||
StateDocEvent, ConsensusDocEvent, BallotType, BallotDocEvent, WriteupDocEvent, LastCallDocEvent,
|
||||
TelechatDocEvent, BallotPositionDocEvent, ReviewRequestDocEvent, InitialReviewDocEvent,
|
||||
BallotCommentDocEvent,
|
||||
AddedMessageEvent, SubmissionDocEvent, DeletedEvent, EditedAuthorsDocEvent, DocumentURL)
|
||||
|
||||
|
||||
|
@ -195,6 +196,7 @@ admin.site.register(NewRevisionDocEvent, DocEventAdmin)
|
|||
admin.site.register(StateDocEvent, DocEventAdmin)
|
||||
admin.site.register(ConsensusDocEvent, DocEventAdmin)
|
||||
admin.site.register(BallotDocEvent, DocEventAdmin)
|
||||
admin.site.register(BallotCommentDocEvent, DocEventAdmin)
|
||||
admin.site.register(WriteupDocEvent, DocEventAdmin)
|
||||
admin.site.register(LastCallDocEvent, DocEventAdmin)
|
||||
admin.site.register(TelechatDocEvent, DocEventAdmin)
|
||||
|
|
24
ietf/doc/migrations/0006_ballotcommentdocevent.py
Normal file
24
ietf/doc/migrations/0006_ballotcommentdocevent.py
Normal file
|
@ -0,0 +1,24 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.15 on 2018-09-30 09:04
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('doc', '0005_fix_replaced_iab_irtf_stream_docs'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='BallotCommentDocEvent',
|
||||
fields=[
|
||||
('docevent_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='doc.DocEvent')),
|
||||
('send_email', models.BooleanField(default=False)),
|
||||
],
|
||||
bases=('doc.docevent',),
|
||||
),
|
||||
]
|
|
@ -1112,6 +1112,9 @@ class BallotPositionDocEvent(DocEvent):
|
|||
comment = models.TextField(help_text="Optional comment", blank=True)
|
||||
comment_time = models.DateTimeField(help_text="Time optional comment was written", blank=True, null=True)
|
||||
|
||||
class BallotCommentDocEvent(DocEvent):
|
||||
send_email = models.BooleanField(default=False)
|
||||
|
||||
class WriteupDocEvent(DocEvent):
|
||||
text = models.TextField(blank=True)
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@ from ietf.doc.models import (BallotType, DeletedEvent, StateType, State, Documen
|
|||
TelechatDocEvent, DocReminder, LastCallDocEvent, NewRevisionDocEvent, WriteupDocEvent,
|
||||
InitialReviewDocEvent, DocHistoryAuthor, BallotDocEvent, RelatedDocument,
|
||||
RelatedDocHistory, BallotPositionDocEvent, AddedMessageEvent, SubmissionDocEvent,
|
||||
ReviewRequestDocEvent, EditedAuthorsDocEvent, DocumentURL)
|
||||
ReviewRequestDocEvent, EditedAuthorsDocEvent, BallotCommentDocEvent, DocumentURL)
|
||||
|
||||
from ietf.name.resources import BallotPositionNameResource, DocTypeNameResource
|
||||
class BallotTypeResource(ModelResource):
|
||||
|
@ -648,3 +648,27 @@ class DocumentURLResource(ModelResource):
|
|||
"tag": ALL_WITH_RELATIONS,
|
||||
}
|
||||
api.doc.register(DocumentURLResource())
|
||||
|
||||
|
||||
from ietf.person.resources import PersonResource
|
||||
class BallotCommentDocEventResource(ModelResource):
|
||||
by = ToOneField(PersonResource, 'by')
|
||||
doc = ToOneField(DocumentResource, 'doc')
|
||||
docevent_ptr = ToOneField(DocEventResource, 'docevent_ptr')
|
||||
class Meta:
|
||||
queryset = BallotCommentDocEvent.objects.all()
|
||||
serializer = api.Serializer()
|
||||
cache = SimpleCache()
|
||||
#resource_name = 'ballotcommentdocevent'
|
||||
filtering = {
|
||||
"id": ALL,
|
||||
"time": ALL,
|
||||
"type": ALL,
|
||||
"rev": ALL,
|
||||
"desc": ALL,
|
||||
"send_email": ALL,
|
||||
"by": ALL_WITH_RELATIONS,
|
||||
"doc": ALL_WITH_RELATIONS,
|
||||
"docevent_ptr": ALL_WITH_RELATIONS,
|
||||
}
|
||||
api.doc.register(BallotCommentDocEventResource())
|
||||
|
|
|
@ -16,7 +16,7 @@ from django.views.decorators.csrf import csrf_exempt
|
|||
import debug # pyflakes:ignore
|
||||
|
||||
from ietf.doc.models import ( Document, State, DocEvent, BallotDocEvent, BallotPositionDocEvent,
|
||||
LastCallDocEvent, WriteupDocEvent, IESG_SUBSTATE_TAGS )
|
||||
BallotCommentDocEvent, LastCallDocEvent, WriteupDocEvent, IESG_SUBSTATE_TAGS )
|
||||
from ietf.doc.utils import ( add_state_change_event, close_ballot, close_open_ballots,
|
||||
create_ballot_if_not_open, update_telechat )
|
||||
from ietf.doc.mails import ( email_ballot_deferred, email_ballot_undeferred,
|
||||
|
@ -112,7 +112,7 @@ class EditPositionForm(forms.Form):
|
|||
raise forms.ValidationError("You must enter a non-empty discuss")
|
||||
return entered_discuss
|
||||
|
||||
def save_position(form, doc, ballot, ad, login=None):
|
||||
def save_position(form, doc, ballot, ad, login=None, send_email=False):
|
||||
# save the vote
|
||||
if login is None:
|
||||
login = ad
|
||||
|
@ -141,10 +141,10 @@ def save_position(form, doc, ballot, ad, login=None):
|
|||
changes.append("comment")
|
||||
|
||||
if pos.comment:
|
||||
e = DocEvent(doc=doc, rev=doc.rev)
|
||||
e.by = ad # otherwise we can't see who's saying it
|
||||
e = BallotCommentDocEvent(doc=doc, rev=doc.rev, by=ad, send_email=send_email)
|
||||
e.type = "added_comment"
|
||||
e.desc = "[Ballot comment]\n" + pos.comment
|
||||
|
||||
added_events.append(e)
|
||||
|
||||
old_discuss = old_pos.discuss if old_pos else ""
|
||||
|
@ -153,8 +153,7 @@ def save_position(form, doc, ballot, ad, login=None):
|
|||
changes.append("discuss")
|
||||
|
||||
if pos.pos.blocking:
|
||||
e = DocEvent(doc=doc, rev=doc.rev, by=login)
|
||||
e.by = ad # otherwise we can't see who's saying it
|
||||
e = BallotCommentDocEvent(doc=doc, rev=doc.rev, by=ad, send_email=send_email)
|
||||
e.type = "added_comment"
|
||||
e.desc = "[Ballot %s]\n" % pos.pos.name.lower()
|
||||
e.desc += pos.discuss
|
||||
|
@ -209,9 +208,10 @@ def edit_position(request, name, ballot_id):
|
|||
|
||||
form = EditPositionForm(request.POST, ballot_type=ballot.ballot_type)
|
||||
if form.is_valid():
|
||||
save_position(form, doc, ballot, ad, login)
|
||||
send_mail = request.POST.get("send_mail") or False
|
||||
save_position(form, doc, ballot, ad, login, send_mail)
|
||||
|
||||
if request.POST.get("send_mail"):
|
||||
if send_mail:
|
||||
qstr=""
|
||||
if request.GET.get('ad'):
|
||||
qstr += "?ad=%s" % request.GET.get('ad')
|
||||
|
@ -274,7 +274,7 @@ def api_set_position(request):
|
|||
return err(400, "No open ballot found")
|
||||
form = EditPositionForm(request.POST, ballot_type=ballot.ballot_type)
|
||||
if form.is_valid():
|
||||
pos = save_position(form, doc, ballot, ad)
|
||||
pos = save_position(form, doc, ballot, ad, send_email=True)
|
||||
else:
|
||||
errors = form.errors
|
||||
summary = ','.join([ "%s: %s" % (f, striptags(errors[f])) for f in errors ])
|
||||
|
|
Loading…
Reference in a new issue