Merged /branch/yaco/wgchairs.r3120:r3154-3558 from esanchez@yaco.es. This adds support for alternate streams document tracking, similar to the WG chairs tracking functionality.
- Legacy-Id: 3559
This commit is contained in:
commit
941d22e3d5
|
@ -22,17 +22,42 @@ def is_wgdelegate(person):
|
|||
return bool(person.wgdelegate_set.all())
|
||||
|
||||
|
||||
def is_chair_of_draft(user, draft):
|
||||
def is_delegate_of_stream(user, stream):
|
||||
if is_secretariat(user):
|
||||
return True
|
||||
person = get_person_for_user(user)
|
||||
return stream.check_delegate(person)
|
||||
|
||||
|
||||
def is_chair_of_stream(user, stream):
|
||||
if is_secretariat(user):
|
||||
return True
|
||||
person = get_person_for_user(user)
|
||||
return stream.check_chair(person)
|
||||
|
||||
|
||||
def is_authorized_in_draft_stream(user, draft):
|
||||
if is_secretariat(user):
|
||||
return True
|
||||
person = get_person_for_user(user)
|
||||
if not person:
|
||||
return False
|
||||
streamed = get_streamed_draft(draft)
|
||||
if not streamed or not streamed.stream:
|
||||
return False
|
||||
group = streamed.group
|
||||
if not group or not hasattr(group, 'chairs'):
|
||||
return False
|
||||
return bool(group.chairs().filter(person=person).count())
|
||||
# Check if the person is chair of the stream
|
||||
if is_chair_of_stream(user, streamed.stream):
|
||||
return True
|
||||
# Check if the person is delegate of the stream
|
||||
if is_delegate_of_stream(user, streamed.stream):
|
||||
return True
|
||||
# Check if the person is chair of the related group
|
||||
chairs = streamed.stream.get_chairs_for_document(draft)
|
||||
if chairs and person in chairs:
|
||||
return True
|
||||
# Check if the person is authorized by a delegate system
|
||||
delegates = streamed.stream.get_delegates_for_document(draft)
|
||||
return bool(person in delegates)
|
||||
|
||||
|
||||
def can_edit_state(user, draft):
|
||||
|
@ -45,7 +70,7 @@ def can_edit_state(user, draft):
|
|||
is_wgchair(person) or
|
||||
is_wgdelegate(person))
|
||||
return (is_secretariat(user) or
|
||||
is_chair_of_draft(user, draft))
|
||||
is_authorized_in_draft_stream(user, draft))
|
||||
|
||||
|
||||
def can_edit_stream(user, draft):
|
||||
|
|
|
@ -1,461 +1,27 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<django-objects version="1.0">
|
||||
<object pk="1" model="workflows.workflow">
|
||||
<field type="CharField" name="name">Default WG Workflow</field>
|
||||
<field to="workflows.state" name="initial_state" rel="ManyToOneRel">14</field>
|
||||
</object>
|
||||
<object pk="2" model="workflows.workflow">
|
||||
<field type="CharField" name="name">IAB Workflow</field>
|
||||
<field to="workflows.state" name="initial_state" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="3" model="workflows.workflow">
|
||||
<field type="CharField" name="name">IRTF Workflow</field>
|
||||
<field to="workflows.state" name="initial_state" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="4" model="workflows.workflow">
|
||||
<field type="CharField" name="name">ISE Workflow</field>
|
||||
<field to="workflows.state" name="initial_state" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="32" model="workflows.state">
|
||||
<field type="CharField" name="name">Active IAB Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="42" model="workflows.state">
|
||||
<field type="CharField" name="name">Active RG Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="12" model="workflows.state">
|
||||
<field type="CharField" name="name">Adopted by a WG</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"><object pk="12"></object></field>
|
||||
</object>
|
||||
<object pk="13" model="workflows.state">
|
||||
<field type="CharField" name="name">Adopted for WG Info Only</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="36" model="workflows.state">
|
||||
<field type="CharField" name="name">Approved by IAB, To Be Sent to RFC Editor</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="47" model="workflows.state">
|
||||
<field type="CharField" name="name">Awaiting IRSG Reviews</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="11" model="workflows.state">
|
||||
<field type="CharField" name="name">Call For Adoption By WG Issued</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"><object pk="10"></object><object pk="11"></object></field>
|
||||
</object>
|
||||
<object pk="31" model="workflows.state">
|
||||
<field type="CharField" name="name">Candidate IAB Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="41" model="workflows.state">
|
||||
<field type="CharField" name="name">Candidate RG Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="35" model="workflows.state">
|
||||
<field type="CharField" name="name">Community Review</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="40" model="workflows.state">
|
||||
<field type="CharField" name="name">Dead IAB Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="53" model="workflows.state">
|
||||
<field type="CharField" name="name">Dead IRTF Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="16" model="workflows.state">
|
||||
<field type="CharField" name="name">Dead WG Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"><object pk="12"></object></field>
|
||||
</object>
|
||||
<object pk="51" model="workflows.state">
|
||||
<field type="CharField" name="name">Document on Hold Based On IESG Request</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="62" model="workflows.state">
|
||||
<field type="CharField" name="name">Document on Hold Based On IESG Request</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="55" model="workflows.state">
|
||||
<field type="CharField" name="name">Finding Reviewers</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="34" model="workflows.state">
|
||||
<field type="CharField" name="name">IAB Review</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="49" model="workflows.state">
|
||||
<field type="CharField" name="name">In IESG Review</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="58" model="workflows.state">
|
||||
<field type="CharField" name="name">In IESG Review</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="48" model="workflows.state">
|
||||
<field type="CharField" name="name">In IRSG Poll</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="56" model="workflows.state">
|
||||
<field type="CharField" name="name">In ISE Review</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="44" model="workflows.state">
|
||||
<field type="CharField" name="name">In RG Last Call</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="17" model="workflows.state">
|
||||
<field type="CharField" name="name">In WG Last Call</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"><object pk="12"></object><object pk="17"></object><object pk="18"></object></field>
|
||||
</object>
|
||||
<object pk="61" model="workflows.state">
|
||||
<field type="CharField" name="name">No Longer In Independent Submission Stream</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="33" model="workflows.state">
|
||||
<field type="CharField" name="name">Parked IAB Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="43" model="workflows.state">
|
||||
<field type="CharField" name="name">Parked RG Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="15" model="workflows.state">
|
||||
<field type="CharField" name="name">Parked WG Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"><object pk="12"></object></field>
|
||||
</object>
|
||||
<object pk="52" model="workflows.state">
|
||||
<field type="CharField" name="name">Published RFC</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="60" model="workflows.state">
|
||||
<field type="CharField" name="name">Published RFC</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="39" model="workflows.state">
|
||||
<field type="CharField" name="name">Published RFC</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="57" model="workflows.state">
|
||||
<field type="CharField" name="name">Response to Review Needed</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="37" model="workflows.state">
|
||||
<field type="CharField" name="name">Sent to a Different Organization for Publication</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="38" model="workflows.state">
|
||||
<field type="CharField" name="name">Sent to the RFC Editor</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="59" model="workflows.state">
|
||||
<field type="CharField" name="name">Sent to the RFC Editor</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="50" model="workflows.state">
|
||||
<field type="CharField" name="name">Sent to the RFC Editor</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="54" model="workflows.state">
|
||||
<field type="CharField" name="name">Submission Received</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="20" model="workflows.state">
|
||||
<field type="CharField" name="name">Submitted to IESG for Publication</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"><object pk="12"></object></field>
|
||||
</object>
|
||||
<object pk="45" model="workflows.state">
|
||||
<field type="CharField" name="name">Waiting for Document Shepherd</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="46" model="workflows.state">
|
||||
<field type="CharField" name="name">Waiting for IRTF Chair</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="18" model="workflows.state">
|
||||
<field type="CharField" name="name">Waiting for WG Chair Go-Ahead</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"><object pk="16"></object><object pk="17"></object></field>
|
||||
</object>
|
||||
<object pk="19" model="workflows.state">
|
||||
<field type="CharField" name="name">WG Consensus: Waiting for Write-Up</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"><object pk="15"></object></field>
|
||||
</object>
|
||||
<object pk="14" model="workflows.state">
|
||||
<field type="CharField" name="name">WG Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.transition" name="transitions" rel="ManyToManyRel"><object pk="13"></object><object pk="14"></object><object pk="16"></object><object pk="17"></object></field>
|
||||
</object>
|
||||
<object pk="18" model="workflows.transition">
|
||||
<field type="CharField" name="name">Wait for go-ahead</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.state" name="destination" rel="ManyToOneRel">18</field>
|
||||
<field type="CharField" name="condition"></field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="17" model="workflows.transition">
|
||||
<field type="CharField" name="name">Reach consensus</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.state" name="destination" rel="ManyToOneRel">19</field>
|
||||
<field type="CharField" name="condition"></field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="10" model="workflows.transition">
|
||||
<field type="CharField" name="name">Adopt</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.state" name="destination" rel="ManyToOneRel">12</field>
|
||||
<field type="CharField" name="condition"></field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="11" model="workflows.transition">
|
||||
<field type="CharField" name="name">Adopt for WG info only</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.state" name="destination" rel="ManyToOneRel">13</field>
|
||||
<field type="CharField" name="condition"></field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="12" model="workflows.transition">
|
||||
<field type="CharField" name="name">Develop</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.state" name="destination" rel="ManyToOneRel">14</field>
|
||||
<field type="CharField" name="condition"></field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="13" model="workflows.transition">
|
||||
<field type="CharField" name="name">Park</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.state" name="destination" rel="ManyToOneRel">15</field>
|
||||
<field type="CharField" name="condition"></field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="14" model="workflows.transition">
|
||||
<field type="CharField" name="name">Die</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.state" name="destination" rel="ManyToOneRel">16</field>
|
||||
<field type="CharField" name="condition"></field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="15" model="workflows.transition">
|
||||
<field type="CharField" name="name">Submit to IESG</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.state" name="destination" rel="ManyToOneRel">20</field>
|
||||
<field type="CharField" name="condition"></field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="16" model="workflows.transition">
|
||||
<field type="CharField" name="name">Raise last call</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="workflows.state" name="destination" rel="ManyToOneRel">17</field>
|
||||
<field type="CharField" name="condition"></field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="31" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Revised I-D Needed</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="29" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Shepherd Needed</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="30" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Waiting for Dependency on Other Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="26" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Revised I-D Needed</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="27" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Document Shepherd Followup</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="28" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Editor Needed</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="25" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Awaiting Reviews</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="24" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Waiting for Partner Feedback</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="11" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Other - see Comment Log</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="23" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Editor Needed</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="10" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Doc Shepherd Follow-Up Underway</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="9" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Revised I-D Needed - Issue raised by IESG</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="1" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Awaiting Expert Review/Resolution of Issues Raised</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="2" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Awaiting External Review/Resolution of Issues Raised</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="3" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Awaiting Merge with Other Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="4" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Author or Editor Needed</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="5" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Waiting for Referenced Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="8" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Revised I-D Needed - Issue raised by AD</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="7" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Revised I-D Needed - Issue raised by WGLC</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="6" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Waiting for Referencing Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="32" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">IESG Review Completed</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="33" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Waiting for Dependency on Other Document</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="34" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Awaiting Reviews</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="35" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">Revised I-D Needed</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="36" model="ietfworkflows.annotationtag">
|
||||
<field type="CharField" name="name">IESG Review Completed</field>
|
||||
<field to="workflows.workflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
<field to="permissions.permission" name="permission" rel="ManyToOneRel"><None></None></field>
|
||||
</object>
|
||||
<object pk="1" model="ietfworkflows.wgworkflow">
|
||||
<field to="workflows.state" name="selected_states" rel="ManyToManyRel"></field>
|
||||
<field to="ietfworkflows.annotationtag" name="selected_tags" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="2" model="ietfworkflows.wgworkflow">
|
||||
<field to="workflows.state" name="selected_states" rel="ManyToManyRel"></field>
|
||||
<field to="ietfworkflows.annotationtag" name="selected_tags" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="3" model="ietfworkflows.wgworkflow">
|
||||
<field to="workflows.state" name="selected_states" rel="ManyToManyRel"></field>
|
||||
<field to="ietfworkflows.annotationtag" name="selected_tags" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="4" model="ietfworkflows.wgworkflow">
|
||||
<field to="workflows.state" name="selected_states" rel="ManyToManyRel"></field>
|
||||
<field to="ietfworkflows.annotationtag" name="selected_tags" rel="ManyToManyRel"></field>
|
||||
</object>
|
||||
<object pk="1" model="ietfworkflows.stream">
|
||||
<field type="CharField" name="name">IETF</field>
|
||||
<field type="BooleanField" name="with_groups">True</field>
|
||||
<field type="CharField" name="group_model">idtracker.IETFWG</field>
|
||||
<field type="CharField" name="group_chair_model">idtracker.WGChair</field>
|
||||
<field type="CharField" name="document_group_attribute">group.ietfwg</field>
|
||||
<field type="CharField" name="group_chair_attribute">chairs</field>
|
||||
<field to="ietfworkflows.wgworkflow" name="workflow" rel="ManyToOneRel">1</field>
|
||||
</object>
|
||||
<object pk="2" model="ietfworkflows.stream">
|
||||
<field type="CharField" name="name">IAB</field>
|
||||
<field type="BooleanField" name="with_groups">False</field>
|
||||
<field type="CharField" name="group_model"></field>
|
||||
<field type="CharField" name="group_chair_model"></field>
|
||||
<field type="CharField" name="document_group_attribute"></field>
|
||||
<field type="CharField" name="group_chair_attribute"></field>
|
||||
<field to="ietfworkflows.wgworkflow" name="workflow" rel="ManyToOneRel">2</field>
|
||||
</object>
|
||||
<object pk="3" model="ietfworkflows.stream">
|
||||
<field type="CharField" name="name">IRTF</field>
|
||||
<field type="BooleanField" name="with_groups">True</field>
|
||||
<field type="CharField" name="group_model">idtracker.IRTF</field>
|
||||
<field type="CharField" name="group_chair_model">idtracker.IRTFChair</field>
|
||||
<field type="CharField" name="document_group_attribute"></field>
|
||||
<field type="CharField" name="group_chair_attribute"></field>
|
||||
<field to="ietfworkflows.wgworkflow" name="workflow" rel="ManyToOneRel">3</field>
|
||||
</object>
|
||||
<object pk="4" model="ietfworkflows.stream">
|
||||
<field type="CharField" name="name">ISE</field>
|
||||
<field type="BooleanField" name="with_groups">False</field>
|
||||
<field type="CharField" name="group_model"></field>
|
||||
<field type="CharField" name="group_chair_model"></field>
|
||||
<field type="CharField" name="document_group_attribute"></field>
|
||||
<field type="CharField" name="group_chair_attribute"></field>
|
||||
<field to="ietfworkflows.wgworkflow" name="workflow" rel="ManyToOneRel">4</field>
|
||||
</object>
|
||||
<object pk="1" model="ietfworkflows.statedescription">
|
||||
|
|
|
@ -8,7 +8,7 @@ from workflows.utils import set_workflow_for_object
|
|||
|
||||
from ietf.idtracker.models import PersonOrOrgInfo, IETFWG
|
||||
from ietf.wgchairs.accounts import get_person_for_user
|
||||
from ietf.ietfworkflows.models import Stream
|
||||
from ietf.ietfworkflows.models import Stream, StreamDelegate
|
||||
from ietf.ietfworkflows.utils import (get_workflow_for_draft, get_workflow_for_wg,
|
||||
get_state_for_draft, get_state_by_name,
|
||||
update_state, FOLLOWUP_TAG,
|
||||
|
@ -62,7 +62,7 @@ class NoWorkflowStateForm(StreamDraftForm):
|
|||
wgs = set([i.group_acronym for i in self.person.wgchair_set.all()]).union(set([i.wg for i in self.person.wgdelegate_set.all()]))
|
||||
if len(wgs) > 1:
|
||||
self.wgs = list(wgs)
|
||||
self.wgs.sort(lambda x,y: cmp(x.group_acronym.acronym, y.group_acronym.acronym))
|
||||
self.wgs.sort(lambda x, y: cmp(x.group_acronym.acronym, y.group_acronym.acronym))
|
||||
self.fields['wg'].choices = [(i.pk, '%s - %s' % (i.group_acronym.acronym, i.group_acronym.name)) for i in self.wgs]
|
||||
else:
|
||||
self.onlywg = list(wgs)[0].group_acronym
|
||||
|
@ -200,3 +200,28 @@ class DraftStreamForm(StreamDraftForm):
|
|||
comment=comment,
|
||||
person=self.person,
|
||||
to_stream=to_stream)
|
||||
|
||||
|
||||
class StreamDelegatesForm(forms.Form):
|
||||
email = forms.EmailField()
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self.stream = kwargs.pop('stream')
|
||||
super(StreamDelegatesForm, self).__init__(*args, **kwargs)
|
||||
|
||||
def get_person(self, email):
|
||||
persons = PersonOrOrgInfo.objects.filter(emailaddress__address=email).distinct()
|
||||
if not persons:
|
||||
return None
|
||||
return persons[0]
|
||||
|
||||
def clean_email(self):
|
||||
email = self.cleaned_data.get('email')
|
||||
self.person = self.get_person(email)
|
||||
if not self.person:
|
||||
raise forms.ValidationError('There is no user with this email in the system')
|
||||
|
||||
def save(self):
|
||||
StreamDelegate.objects.get_or_create(
|
||||
person=self.person,
|
||||
stream=self.stream)
|
||||
|
|
205
ietf/ietfworkflows/migrations/0011_remove_group_from_stream.py
Normal file
205
ietf/ietfworkflows/migrations/0011_remove_group_from_stream.py
Normal file
|
@ -0,0 +1,205 @@
|
|||
|
||||
from south.db import db
|
||||
from django.db import models
|
||||
from ietf.ietfworkflows.models import *
|
||||
|
||||
class Migration:
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Deleting field 'StreamedID.content_type'
|
||||
db.delete_column('ietfworkflows_streamedid', 'content_type_id')
|
||||
|
||||
# Deleting field 'StreamedID.content_id'
|
||||
db.delete_column('ietfworkflows_streamedid', 'content_id')
|
||||
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Adding field 'StreamedID.content_type'
|
||||
db.add_column('ietfworkflows_streamedid', 'content_type', orm['ietfworkflows.streamedid:content_type'])
|
||||
|
||||
# Adding field 'StreamedID.content_id'
|
||||
db.add_column('ietfworkflows_streamedid', 'content_id', orm['ietfworkflows.streamedid:content_id'])
|
||||
|
||||
|
||||
|
||||
models = {
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'idtracker.acronym': {
|
||||
'Meta': {'db_table': "'acronym'"},
|
||||
'acronym': ('django.db.models.fields.CharField', [], {'max_length': '12'}),
|
||||
'acronym_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name_key': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'idtracker.idintendedstatus': {
|
||||
'Meta': {'db_table': "'id_intended_status'"},
|
||||
'intended_status': ('django.db.models.fields.CharField', [], {'max_length': '25', 'db_column': "'status_value'"}),
|
||||
'intended_status_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'idtracker.idstatus': {
|
||||
'Meta': {'db_table': "'id_status'"},
|
||||
'status': ('django.db.models.fields.CharField', [], {'max_length': '25', 'db_column': "'status_value'"}),
|
||||
'status_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'idtracker.internetdraft': {
|
||||
'Meta': {'db_table': "'internet_drafts'"},
|
||||
'abstract': ('django.db.models.fields.TextField', [], {}),
|
||||
'b_approve_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'b_discussion_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'b_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'comments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'dunn_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'expiration_date': ('django.db.models.fields.DateField', [], {'null': 'True'}),
|
||||
'expired_tombstone': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'extension_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'file_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
|
||||
'filename': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.Acronym']", 'db_column': "'group_acronym_id'"}),
|
||||
'id_document_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'id_document_tag': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'intended_status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.IDIntendedStatus']"}),
|
||||
'last_modified_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'lc_changes': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True'}),
|
||||
'lc_expiration_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'lc_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'local_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'replaced_by': ('django.db.models.fields.related.ForeignKey', ["orm['idtracker.InternetDraft']"], {'related_name': "'replaces_set'", 'null': 'True', 'db_column': "'replaced_by'", 'blank': 'True'}),
|
||||
'review_by_rfc_editor': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'revision': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
|
||||
'revision_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'rfc_number': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'shepherd': ('django.db.models.fields.related.ForeignKey', ["orm['idtracker.PersonOrOrgInfo']"], {'null': 'True', 'blank': 'True'}),
|
||||
'start_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.IDStatus']"}),
|
||||
'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_column': "'id_document_name'"}),
|
||||
'txt_page_count': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'wgreturn_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'idtracker.personororginfo': {
|
||||
'Meta': {'db_table': "'person_or_org_info'"},
|
||||
'address_type': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'created_by': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'}),
|
||||
'date_created': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'date_modified': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
|
||||
'first_name_key': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
|
||||
'last_name_key': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
|
||||
'middle_initial': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'middle_initial_key': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'modified_by': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'}),
|
||||
'name_prefix': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
|
||||
'name_suffix': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
|
||||
'person_or_org_tag': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'record_type': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.annotationtag': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['permissions.Permission']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'annotation_tags'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'ietfworkflows.annotationtagobjectrelation': {
|
||||
'annotation_tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.AnnotationTag']"}),
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'annotation_tags'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'ietfworkflows.objectannotationtaghistoryentry': {
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'setted': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'unsetted': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.objecthistoryentry': {
|
||||
'comment': ('django.db.models.fields.TextField', [], {}),
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'workflow_history'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.PersonOrOrgInfo']"})
|
||||
},
|
||||
'ietfworkflows.objectstreamhistoryentry': {
|
||||
'from_stream': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'to_stream': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.objectworkflowhistoryentry': {
|
||||
'from_state': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'to_state': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'ietfworkflows.statedescription': {
|
||||
'definition': ('django.db.models.fields.TextField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'order': ('django.db.models.fields.PositiveIntegerField', [], {}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.State']"})
|
||||
},
|
||||
'ietfworkflows.stateobjectrelationmetadata': {
|
||||
'estimated_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'from_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'relation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.StateObjectRelation']"})
|
||||
},
|
||||
'ietfworkflows.stream': {
|
||||
'group_chair_model': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
|
||||
'group_model': ('django.db.models.fields.CharField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'with_groups': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.WGWorkflow']"})
|
||||
},
|
||||
'ietfworkflows.streamedid': {
|
||||
'draft': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['idtracker.InternetDraft']", 'unique': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.Stream']", 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.wgworkflow': {
|
||||
'selected_states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['workflows.State']", 'null': 'True', 'blank': 'True'}),
|
||||
'selected_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ietfworkflows.AnnotationTag']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['workflows.Workflow']", 'unique': 'True', 'primary_key': 'True'})
|
||||
},
|
||||
'permissions.permission': {
|
||||
'codename': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
|
||||
'content_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
|
||||
},
|
||||
'workflows.state': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'transitions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['workflows.Transition']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'states'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'workflows.stateobjectrelation': {
|
||||
'Meta': {'unique_together': "(('content_type', 'content_id', 'state'),)"},
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'state_object'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.State']"})
|
||||
},
|
||||
'workflows.transition': {
|
||||
'condition': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||
'destination': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'destination_state'", 'null': 'True', 'to': "orm['workflows.State']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['permissions.Permission']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'transitions'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'workflows.workflow': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'initial_state': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'workflow_state'", 'null': 'True', 'to': "orm['workflows.State']"}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['permissions.Permission']", 'symmetrical': 'False'})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['ietfworkflows']
|
|
@ -0,0 +1,222 @@
|
|||
|
||||
from south.db import db
|
||||
from django.db import models
|
||||
from ietf.ietfworkflows.models import *
|
||||
|
||||
class Migration:
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Adding field 'Stream.group_chair_attribute'
|
||||
db.add_column('ietfworkflows_stream', 'group_chair_attribute', orm['ietfworkflows.stream:group_chair_attribute'])
|
||||
|
||||
# Adding field 'Stream.document_group_attribute'
|
||||
db.add_column('ietfworkflows_stream', 'document_group_attribute', orm['ietfworkflows.stream:document_group_attribute'])
|
||||
|
||||
# Deleting field 'Stream.group_chair_model'
|
||||
db.delete_column('ietfworkflows_stream', 'group_chair_model')
|
||||
|
||||
# Deleting field 'Stream.with_groups'
|
||||
db.delete_column('ietfworkflows_stream', 'with_groups')
|
||||
|
||||
# Deleting field 'Stream.group_model'
|
||||
db.delete_column('ietfworkflows_stream', 'group_model')
|
||||
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Deleting field 'Stream.group_chair_attribute'
|
||||
db.delete_column('ietfworkflows_stream', 'group_chair_attribute')
|
||||
|
||||
# Deleting field 'Stream.document_group_attribute'
|
||||
db.delete_column('ietfworkflows_stream', 'document_group_attribute')
|
||||
|
||||
# Adding field 'Stream.group_chair_model'
|
||||
db.add_column('ietfworkflows_stream', 'group_chair_model', orm['ietfworkflows.stream:group_chair_model'])
|
||||
|
||||
# Adding field 'Stream.with_groups'
|
||||
db.add_column('ietfworkflows_stream', 'with_groups', orm['ietfworkflows.stream:with_groups'])
|
||||
|
||||
# Adding field 'Stream.group_model'
|
||||
db.add_column('ietfworkflows_stream', 'group_model', orm['ietfworkflows.stream:group_model'])
|
||||
|
||||
|
||||
|
||||
models = {
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'idtracker.acronym': {
|
||||
'Meta': {'db_table': "'acronym'"},
|
||||
'acronym': ('django.db.models.fields.CharField', [], {'max_length': '12'}),
|
||||
'acronym_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name_key': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'idtracker.idintendedstatus': {
|
||||
'Meta': {'db_table': "'id_intended_status'"},
|
||||
'intended_status': ('django.db.models.fields.CharField', [], {'max_length': '25', 'db_column': "'status_value'"}),
|
||||
'intended_status_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'idtracker.idstatus': {
|
||||
'Meta': {'db_table': "'id_status'"},
|
||||
'status': ('django.db.models.fields.CharField', [], {'max_length': '25', 'db_column': "'status_value'"}),
|
||||
'status_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'idtracker.internetdraft': {
|
||||
'Meta': {'db_table': "'internet_drafts'"},
|
||||
'abstract': ('django.db.models.fields.TextField', [], {}),
|
||||
'b_approve_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'b_discussion_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'b_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'comments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'dunn_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'expiration_date': ('django.db.models.fields.DateField', [], {'null': 'True'}),
|
||||
'expired_tombstone': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'extension_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'file_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
|
||||
'filename': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.Acronym']", 'db_column': "'group_acronym_id'"}),
|
||||
'id_document_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'id_document_tag': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'intended_status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.IDIntendedStatus']"}),
|
||||
'last_modified_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'lc_changes': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True'}),
|
||||
'lc_expiration_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'lc_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'local_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'replaced_by': ('django.db.models.fields.related.ForeignKey', ["orm['idtracker.InternetDraft']"], {'related_name': "'replaces_set'", 'null': 'True', 'db_column': "'replaced_by'", 'blank': 'True'}),
|
||||
'review_by_rfc_editor': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'revision': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
|
||||
'revision_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'rfc_number': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'shepherd': ('django.db.models.fields.related.ForeignKey', ["orm['idtracker.PersonOrOrgInfo']"], {'null': 'True', 'blank': 'True'}),
|
||||
'start_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.IDStatus']"}),
|
||||
'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_column': "'id_document_name'"}),
|
||||
'txt_page_count': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'wgreturn_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'idtracker.personororginfo': {
|
||||
'Meta': {'db_table': "'person_or_org_info'"},
|
||||
'address_type': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'created_by': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'}),
|
||||
'date_created': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'date_modified': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
|
||||
'first_name_key': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
|
||||
'last_name_key': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
|
||||
'middle_initial': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'middle_initial_key': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'modified_by': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'}),
|
||||
'name_prefix': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
|
||||
'name_suffix': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
|
||||
'person_or_org_tag': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'record_type': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.annotationtag': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['permissions.Permission']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'annotation_tags'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'ietfworkflows.annotationtagobjectrelation': {
|
||||
'annotation_tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.AnnotationTag']"}),
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'annotation_tags'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'ietfworkflows.objectannotationtaghistoryentry': {
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'setted': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'unsetted': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.objecthistoryentry': {
|
||||
'comment': ('django.db.models.fields.TextField', [], {}),
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'workflow_history'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.PersonOrOrgInfo']"})
|
||||
},
|
||||
'ietfworkflows.objectstreamhistoryentry': {
|
||||
'from_stream': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'to_stream': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.objectworkflowhistoryentry': {
|
||||
'from_state': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'to_state': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'ietfworkflows.statedescription': {
|
||||
'definition': ('django.db.models.fields.TextField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'order': ('django.db.models.fields.PositiveIntegerField', [], {}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.State']"})
|
||||
},
|
||||
'ietfworkflows.stateobjectrelationmetadata': {
|
||||
'estimated_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'from_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'relation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.StateObjectRelation']"})
|
||||
},
|
||||
'ietfworkflows.stream': {
|
||||
'document_group_attribute': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'group_chair_attribute': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.WGWorkflow']"})
|
||||
},
|
||||
'ietfworkflows.streamedid': {
|
||||
'draft': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['idtracker.InternetDraft']", 'unique': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.Stream']", 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.wgworkflow': {
|
||||
'selected_states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['workflows.State']", 'null': 'True', 'blank': 'True'}),
|
||||
'selected_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ietfworkflows.AnnotationTag']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['workflows.Workflow']", 'unique': 'True', 'primary_key': 'True'})
|
||||
},
|
||||
'permissions.permission': {
|
||||
'codename': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
|
||||
'content_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
|
||||
},
|
||||
'workflows.state': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'transitions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['workflows.Transition']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'states'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'workflows.stateobjectrelation': {
|
||||
'Meta': {'unique_together': "(('content_type', 'content_id', 'state'),)"},
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'state_object'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.State']"})
|
||||
},
|
||||
'workflows.transition': {
|
||||
'condition': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||
'destination': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'destination_state'", 'null': 'True', 'to': "orm['workflows.State']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['permissions.Permission']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'transitions'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'workflows.workflow': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'initial_state': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'workflow_state'", 'null': 'True', 'to': "orm['workflows.State']"}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['permissions.Permission']", 'symmetrical': 'False'})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['ietfworkflows']
|
208
ietf/ietfworkflows/migrations/0013_add_stream_delegates.py
Normal file
208
ietf/ietfworkflows/migrations/0013_add_stream_delegates.py
Normal file
|
@ -0,0 +1,208 @@
|
|||
|
||||
from south.db import db
|
||||
from django.db import models
|
||||
from ietf.ietfworkflows.models import *
|
||||
|
||||
class Migration:
|
||||
|
||||
def forwards(self, orm):
|
||||
|
||||
# Adding model 'StreamDelegate'
|
||||
db.create_table('ietfworkflows_streamdelegate', (
|
||||
('id', orm['ietfworkflows.streamdelegate:id']),
|
||||
('stream', orm['ietfworkflows.streamdelegate:stream']),
|
||||
('person', orm['ietfworkflows.streamdelegate:person']),
|
||||
))
|
||||
db.send_create_signal('ietfworkflows', ['StreamDelegate'])
|
||||
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
|
||||
# Deleting model 'StreamDelegate'
|
||||
db.delete_table('ietfworkflows_streamdelegate')
|
||||
|
||||
|
||||
|
||||
models = {
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'idtracker.acronym': {
|
||||
'Meta': {'db_table': "'acronym'"},
|
||||
'acronym': ('django.db.models.fields.CharField', [], {'max_length': '12'}),
|
||||
'acronym_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name_key': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'idtracker.idintendedstatus': {
|
||||
'Meta': {'db_table': "'id_intended_status'"},
|
||||
'intended_status': ('django.db.models.fields.CharField', [], {'max_length': '25', 'db_column': "'status_value'"}),
|
||||
'intended_status_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'idtracker.idstatus': {
|
||||
'Meta': {'db_table': "'id_status'"},
|
||||
'status': ('django.db.models.fields.CharField', [], {'max_length': '25', 'db_column': "'status_value'"}),
|
||||
'status_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'idtracker.internetdraft': {
|
||||
'Meta': {'db_table': "'internet_drafts'"},
|
||||
'abstract': ('django.db.models.fields.TextField', [], {}),
|
||||
'b_approve_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'b_discussion_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'b_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'comments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'dunn_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'expiration_date': ('django.db.models.fields.DateField', [], {'null': 'True'}),
|
||||
'expired_tombstone': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'extension_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'file_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
|
||||
'filename': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.Acronym']", 'db_column': "'group_acronym_id'"}),
|
||||
'id_document_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'id_document_tag': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'intended_status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.IDIntendedStatus']"}),
|
||||
'last_modified_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'lc_changes': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True'}),
|
||||
'lc_expiration_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'lc_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'local_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'replaced_by': ('django.db.models.fields.related.ForeignKey', ["orm['idtracker.InternetDraft']"], {'related_name': "'replaces_set'", 'null': 'True', 'db_column': "'replaced_by'", 'blank': 'True'}),
|
||||
'review_by_rfc_editor': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'revision': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
|
||||
'revision_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'rfc_number': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'shepherd': ('django.db.models.fields.related.ForeignKey', ["orm['idtracker.PersonOrOrgInfo']"], {'null': 'True', 'blank': 'True'}),
|
||||
'start_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.IDStatus']"}),
|
||||
'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_column': "'id_document_name'"}),
|
||||
'txt_page_count': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'wgreturn_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'idtracker.personororginfo': {
|
||||
'Meta': {'db_table': "'person_or_org_info'"},
|
||||
'address_type': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'created_by': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'}),
|
||||
'date_created': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'date_modified': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
|
||||
'first_name_key': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
|
||||
'last_name_key': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
|
||||
'middle_initial': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'middle_initial_key': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'modified_by': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'}),
|
||||
'name_prefix': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
|
||||
'name_suffix': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
|
||||
'person_or_org_tag': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'record_type': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.annotationtag': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['permissions.Permission']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'annotation_tags'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'ietfworkflows.annotationtagobjectrelation': {
|
||||
'annotation_tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.AnnotationTag']"}),
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'annotation_tags'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'ietfworkflows.objectannotationtaghistoryentry': {
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'setted': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'unsetted': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.objecthistoryentry': {
|
||||
'comment': ('django.db.models.fields.TextField', [], {}),
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'workflow_history'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.PersonOrOrgInfo']"})
|
||||
},
|
||||
'ietfworkflows.objectstreamhistoryentry': {
|
||||
'from_stream': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'to_stream': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.objectworkflowhistoryentry': {
|
||||
'from_state': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'to_state': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'ietfworkflows.statedescription': {
|
||||
'definition': ('django.db.models.fields.TextField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'order': ('django.db.models.fields.PositiveIntegerField', [], {}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.State']"})
|
||||
},
|
||||
'ietfworkflows.stateobjectrelationmetadata': {
|
||||
'estimated_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'from_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'relation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.StateObjectRelation']"})
|
||||
},
|
||||
'ietfworkflows.stream': {
|
||||
'document_group_attribute': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'group_chair_attribute': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.WGWorkflow']"})
|
||||
},
|
||||
'ietfworkflows.streamdelegate': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.PersonOrOrgInfo']"}),
|
||||
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.Stream']"})
|
||||
},
|
||||
'ietfworkflows.streamedid': {
|
||||
'draft': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['idtracker.InternetDraft']", 'unique': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.Stream']", 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.wgworkflow': {
|
||||
'selected_states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['workflows.State']", 'null': 'True', 'blank': 'True'}),
|
||||
'selected_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ietfworkflows.AnnotationTag']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['workflows.Workflow']", 'unique': 'True', 'primary_key': 'True'})
|
||||
},
|
||||
'permissions.permission': {
|
||||
'codename': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
|
||||
'content_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
|
||||
},
|
||||
'workflows.state': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'transitions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['workflows.Transition']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'states'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'workflows.stateobjectrelation': {
|
||||
'Meta': {'unique_together': "(('content_type', 'content_id', 'state'),)"},
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'state_object'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.State']"})
|
||||
},
|
||||
'workflows.transition': {
|
||||
'condition': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||
'destination': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'destination_state'", 'null': 'True', 'to': "orm['workflows.State']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['permissions.Permission']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'transitions'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'workflows.workflow': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'initial_state': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'workflow_state'", 'null': 'True', 'to': "orm['workflows.State']"}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['permissions.Permission']", 'symmetrical': 'False'})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['ietfworkflows']
|
234
ietf/ietfworkflows/migrations/0014_change_alt_streams_states.py
Normal file
234
ietf/ietfworkflows/migrations/0014_change_alt_streams_states.py
Normal file
|
@ -0,0 +1,234 @@
|
|||
|
||||
from south.db import db
|
||||
from django.db import models
|
||||
from ietf.ietfworkflows.models import *
|
||||
|
||||
class Migration:
|
||||
|
||||
no_dry_run = True
|
||||
|
||||
def forwards(self, orm):
|
||||
# Remove all 'Published RFC' status
|
||||
for state in orm['workflows.state'].objects.filter(name='Published RFC'):
|
||||
state.delete()
|
||||
|
||||
|
||||
def backwards(self, orm):
|
||||
"Write your backwards migration here"
|
||||
|
||||
|
||||
models = {
|
||||
'contenttypes.contenttype': {
|
||||
'Meta': {'unique_together': "(('app_label', 'model'),)", 'db_table': "'django_content_type'"},
|
||||
'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'idtracker.acronym': {
|
||||
'Meta': {'db_table': "'acronym'"},
|
||||
'acronym': ('django.db.models.fields.CharField', [], {'max_length': '12'}),
|
||||
'acronym_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'name_key': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||
},
|
||||
'idtracker.idintendedstatus': {
|
||||
'Meta': {'db_table': "'id_intended_status'"},
|
||||
'intended_status': ('django.db.models.fields.CharField', [], {'max_length': '25', 'db_column': "'status_value'"}),
|
||||
'intended_status_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'idtracker.idstatus': {
|
||||
'Meta': {'db_table': "'id_status'"},
|
||||
'status': ('django.db.models.fields.CharField', [], {'max_length': '25', 'db_column': "'status_value'"}),
|
||||
'status_id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'idtracker.internetdraft': {
|
||||
'Meta': {'db_table': "'internet_drafts'"},
|
||||
'abstract': ('django.db.models.fields.TextField', [], {}),
|
||||
'b_approve_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'b_discussion_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'b_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'comments': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'dunn_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'expiration_date': ('django.db.models.fields.DateField', [], {'null': 'True'}),
|
||||
'expired_tombstone': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'extension_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'file_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}),
|
||||
'filename': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
|
||||
'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.Acronym']", 'db_column': "'group_acronym_id'"}),
|
||||
'id_document_key': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||
'id_document_tag': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'intended_status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.IDIntendedStatus']"}),
|
||||
'last_modified_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'lc_changes': ('django.db.models.fields.CharField', [], {'max_length': '3', 'null': 'True'}),
|
||||
'lc_expiration_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'lc_sent_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'local_path': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'replaced_by': ('django.db.models.fields.related.ForeignKey', ["orm['idtracker.InternetDraft']"], {'related_name': "'replaces_set'", 'null': 'True', 'db_column': "'replaced_by'", 'blank': 'True'}),
|
||||
'review_by_rfc_editor': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}),
|
||||
'revision': ('django.db.models.fields.CharField', [], {'max_length': '2'}),
|
||||
'revision_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'rfc_number': ('django.db.models.fields.IntegerField', [], {'db_index': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'shepherd': ('django.db.models.fields.related.ForeignKey', ["orm['idtracker.PersonOrOrgInfo']"], {'null': 'True', 'blank': 'True'}),
|
||||
'start_date': ('django.db.models.fields.DateField', [], {}),
|
||||
'status': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.IDStatus']"}),
|
||||
'title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_column': "'id_document_name'"}),
|
||||
'txt_page_count': ('django.db.models.fields.IntegerField', [], {}),
|
||||
'wgreturn_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'idtracker.personororginfo': {
|
||||
'Meta': {'db_table': "'person_or_org_info'"},
|
||||
'address_type': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'created_by': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'}),
|
||||
'date_created': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'date_modified': ('django.db.models.fields.DateField', [], {'auto_now': 'True', 'null': 'True', 'blank': 'True'}),
|
||||
'first_name': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
|
||||
'first_name_key': ('django.db.models.fields.CharField', [], {'max_length': '20', 'blank': 'True'}),
|
||||
'last_name': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
|
||||
'last_name_key': ('django.db.models.fields.CharField', [], {'max_length': '50', 'blank': 'True'}),
|
||||
'middle_initial': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'middle_initial_key': ('django.db.models.fields.CharField', [], {'max_length': '4', 'null': 'True', 'blank': 'True'}),
|
||||
'modified_by': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'}),
|
||||
'name_prefix': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
|
||||
'name_suffix': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True', 'blank': 'True'}),
|
||||
'person_or_org_tag': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'record_type': ('django.db.models.fields.CharField', [], {'max_length': '8', 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.annotationtag': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['permissions.Permission']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'annotation_tags'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'ietfworkflows.annotationtagobjectrelation': {
|
||||
'annotation_tag': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.AnnotationTag']"}),
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'annotation_tags'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
|
||||
},
|
||||
'ietfworkflows.objectannotationtaghistoryentry': {
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'setted': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'unsetted': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.objecthistoryentry': {
|
||||
'comment': ('django.db.models.fields.TextField', [], {}),
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'workflow_history'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.PersonOrOrgInfo']"})
|
||||
},
|
||||
'ietfworkflows.objectstreamhistoryentry': {
|
||||
'from_stream': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'to_stream': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.objectworkflowhistoryentry': {
|
||||
'from_state': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'objecthistoryentry_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['ietfworkflows.ObjectHistoryEntry']", 'unique': 'True', 'primary_key': 'True'}),
|
||||
'to_state': ('django.db.models.fields.CharField', [], {'max_length': '100'})
|
||||
},
|
||||
'ietfworkflows.statedescription': {
|
||||
'definition': ('django.db.models.fields.TextField', [], {}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'order': ('django.db.models.fields.PositiveIntegerField', [], {}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.State']"})
|
||||
},
|
||||
'ietfworkflows.stateobjectrelationmetadata': {
|
||||
'estimated_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'from_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'relation': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.StateObjectRelation']"})
|
||||
},
|
||||
'ietfworkflows.stream': {
|
||||
'document_group_attribute': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'group_chair_attribute': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.WGWorkflow']"})
|
||||
},
|
||||
'ietfworkflows.streamdelegate': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'person': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['idtracker.PersonOrOrgInfo']"}),
|
||||
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.Stream']"})
|
||||
},
|
||||
'ietfworkflows.streamedid': {
|
||||
'draft': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['idtracker.InternetDraft']", 'unique': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'stream': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ietfworkflows.Stream']", 'null': 'True', 'blank': 'True'})
|
||||
},
|
||||
'ietfworkflows.wgworkflow': {
|
||||
'selected_states': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['workflows.State']", 'null': 'True', 'blank': 'True'}),
|
||||
'selected_tags': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ietfworkflows.AnnotationTag']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['workflows.Workflow']", 'unique': 'True', 'primary_key': 'True'})
|
||||
},
|
||||
'permissions.permission': {
|
||||
'codename': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
|
||||
'content_types': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['contenttypes.ContentType']", 'null': 'True', 'blank': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
|
||||
},
|
||||
'permissions.role': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
|
||||
},
|
||||
'workflows.state': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'transitions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['workflows.Transition']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'states'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'workflows.stateinheritanceblock': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['permissions.Permission']"}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.State']"})
|
||||
},
|
||||
'workflows.stateobjectrelation': {
|
||||
'Meta': {'unique_together': "(('content_type', 'content_id', 'state'),)"},
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'state_object'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.State']"})
|
||||
},
|
||||
'workflows.statepermissionrelation': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['permissions.Permission']"}),
|
||||
'role': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['permissions.Role']"}),
|
||||
'state': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.State']"})
|
||||
},
|
||||
'workflows.transition': {
|
||||
'condition': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||
'destination': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'destination_state'", 'null': 'True', 'to': "orm['workflows.State']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||
'permission': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['permissions.Permission']", 'null': 'True', 'blank': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'transitions'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'workflows.workflow': {
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'initial_state': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'workflow_state'", 'null': 'True', 'to': "orm['workflows.State']"}),
|
||||
'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
|
||||
'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['permissions.Permission']", 'symmetrical': 'False'})
|
||||
},
|
||||
'workflows.workflowmodelrelation': {
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']", 'unique': 'True'}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wmrs'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'workflows.workflowobjectrelation': {
|
||||
'Meta': {'unique_together': "(('content_type', 'content_id'),)"},
|
||||
'content_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}),
|
||||
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'workflow_object'", 'null': 'True', 'to': "orm['contenttypes.ContentType']"}),
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'wors'", 'to': "orm['workflows.Workflow']"})
|
||||
},
|
||||
'workflows.workflowpermissionrelation': {
|
||||
'Meta': {'unique_together': "(('workflow', 'permission'),)"},
|
||||
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||
'permission': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'permissions'", 'to': "orm['permissions.Permission']"}),
|
||||
'workflow': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['workflows.Workflow']"})
|
||||
}
|
||||
}
|
||||
|
||||
complete_apps = ['ietfworkflows', 'workflows']
|
|
@ -3,7 +3,7 @@ from django.contrib.contenttypes.models import ContentType
|
|||
from django.db import models
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from ietf.idtracker.models import PersonOrOrgInfo, InternetDraft
|
||||
from ietf.idtracker.models import PersonOrOrgInfo, InternetDraft, Role, IRTF
|
||||
from ietf.utils.admin import admin_link
|
||||
from workflows.models import Workflow, State, StateObjectRelation
|
||||
from permissions.models import Permission
|
||||
|
@ -140,20 +140,122 @@ class WGWorkflow(Workflow):
|
|||
|
||||
class Stream(models.Model):
|
||||
name = models.CharField(_(u"Name"), max_length=100)
|
||||
with_groups = models.BooleanField(_(u'With groups'), default=False)
|
||||
group_model = models.CharField(_(u'Group model'), max_length=100, blank=True, null=True)
|
||||
group_chair_model = models.CharField(_(u'Group chair model'), max_length=100, blank=True, null=True)
|
||||
document_group_attribute = models.CharField(_(u'Document group attribute'), max_length=255, blank=True, null=True)
|
||||
group_chair_attribute = models.CharField(_(u'Group chair attribute'), max_length=255, blank=True, null=True)
|
||||
workflow = models.ForeignKey(WGWorkflow)
|
||||
|
||||
def __unicode__(self):
|
||||
return u'%s stream' % self.name
|
||||
workflow_link = admin_link('workflow')
|
||||
|
||||
def _irtf_group(self, document):
|
||||
filename = document.filename.split('-')
|
||||
if len(filename) > 2 and filename[0] == 'draft' and filename[1] == 'irtf':
|
||||
try:
|
||||
return IRTF.objects.get(acronym=filename[2])
|
||||
except IRTF.DoesNotExist:
|
||||
return None
|
||||
return None
|
||||
|
||||
def _irtf_chairs_for_document(self, document):
|
||||
group = self._irtf_group(document)
|
||||
if not group:
|
||||
return []
|
||||
chairs = [i.person for i in group.chairs()]
|
||||
chairs.append(Role.objects.get(pk=Role.IRTF_CHAIR).person)
|
||||
return chairs
|
||||
|
||||
def _ietf_delegates_for_document(self, document):
|
||||
group = self.get_group_for_document(document)
|
||||
if not group:
|
||||
return False
|
||||
return [i.person for i in group.wgdelegate_set.all()]
|
||||
|
||||
def get_group_for_document(self, document):
|
||||
if hasattr(self, '_%s_group' % self.name.lower()):
|
||||
return getattr(self, '_%s_group' % self.name.lower())(document)
|
||||
|
||||
if not self.document_group_attribute:
|
||||
return None
|
||||
attr = None
|
||||
obj = document
|
||||
for attr_name in self.document_group_attribute.split('.'):
|
||||
attr = getattr(obj, attr_name, None)
|
||||
if not attr:
|
||||
return None
|
||||
if callable(attr):
|
||||
attr = attr()
|
||||
obj = attr
|
||||
return attr
|
||||
|
||||
def get_chairs_for_document(self, document):
|
||||
if hasattr(self, '_%s_chairs_for_document' % self.name.lower()):
|
||||
return getattr(self, '_%s_chairs_for_document' % self.name.lower())(document)
|
||||
|
||||
group = self.get_group_for_document(document)
|
||||
if not group or not self.group_chair_attribute:
|
||||
return []
|
||||
attr = None
|
||||
obj = group
|
||||
for attr_name in self.group_chair_attribute.split('.'):
|
||||
attr = getattr(obj, attr_name, None)
|
||||
if not attr:
|
||||
return None
|
||||
if callable(attr):
|
||||
attr = attr()
|
||||
obj = attr
|
||||
return attr
|
||||
|
||||
def get_delegates_for_document(self, document):
|
||||
delegates = []
|
||||
if hasattr(self, '_%s_delegates_for_document' % self.name.lower()):
|
||||
delegates = getattr(self, '_%s_delegates_for_document' % self.name.lower())(document)
|
||||
delegates += [i.person for i in self.streamdelegate_set.all()]
|
||||
return delegates
|
||||
|
||||
def _ise_stream_chairs(self):
|
||||
chairs = []
|
||||
try:
|
||||
chairs.append(Role.objects.get(role_name='ISE').person)
|
||||
except Role.DoesNotExist:
|
||||
pass
|
||||
return chairs
|
||||
|
||||
def get_chairs(self):
|
||||
chairs = []
|
||||
if hasattr(self, '_%s_stream_chairs' % self.name.lower()):
|
||||
chairs += list(getattr(self, '_%s_stream_chairs' % self.name.lower())())
|
||||
|
||||
role_key = getattr(Role, '%s_CHAIR' % self.name.upper(), None)
|
||||
if role_key:
|
||||
try:
|
||||
chairs.append(Role.objects.get(pk=role_key).person)
|
||||
except Role.DoesNotExist:
|
||||
pass
|
||||
return list(set(chairs))
|
||||
|
||||
def get_delegates(self):
|
||||
delegates = []
|
||||
if hasattr(self, '_%s_stream_delegates' % self.name.lower()):
|
||||
delegates += list(getattr(self, '_%s_stream_delegates' % self.name.lower())())
|
||||
delegates += [i.person for i in StreamDelegate.objects.filter(stream=self)]
|
||||
return list(set(delegates))
|
||||
|
||||
def check_chair(self, person):
|
||||
return person in self.get_chairs()
|
||||
|
||||
def check_delegate(self, person):
|
||||
return person in self.get_delegates()
|
||||
|
||||
|
||||
class StreamedID(models.Model):
|
||||
draft = models.OneToOneField(InternetDraft)
|
||||
stream = models.ForeignKey(Stream, blank=True, null=True)
|
||||
|
||||
content_type = models.ForeignKey(ContentType, verbose_name=_(u"Content type"), related_name="streamed_id", blank=True, null=True)
|
||||
content_id = models.PositiveIntegerField(_(u"Content id"), blank=True, null=True)
|
||||
group = generic.GenericForeignKey(ct_field="content_type", fk_field="content_id")
|
||||
def get_group(self):
|
||||
return self.stream.get_group_for_document(self.draft)
|
||||
|
||||
|
||||
class StreamDelegate(models.Model):
|
||||
stream = models.ForeignKey(Stream)
|
||||
person = models.ForeignKey(PersonOrOrgInfo)
|
||||
|
|
|
@ -34,60 +34,12 @@ def get_stream_from_id(stream_id):
|
|||
return None
|
||||
|
||||
|
||||
def get_chair_model(stream):
|
||||
model_str = stream.group_chair_model
|
||||
if not model_str:
|
||||
return None
|
||||
try:
|
||||
app, model = model_str.split('.', 1)
|
||||
except ValueError:
|
||||
return None
|
||||
chair_model = models.get_model(app, model)
|
||||
if not chair_model:
|
||||
return
|
||||
return chair_model
|
||||
|
||||
|
||||
def _get_group_from_acronym(group_model_str, acronym):
|
||||
try:
|
||||
app, model = group_model_str.split('.', 1)
|
||||
except ValueError:
|
||||
return None
|
||||
group_model = models.get_model(app, model)
|
||||
if not group_model:
|
||||
return
|
||||
if 'acronym' in group_model._meta.get_all_field_names():
|
||||
try:
|
||||
return group_model._default_manager.get(acronym=acronym)
|
||||
except group_model.DoesNotExist:
|
||||
return None
|
||||
elif 'group_acronym' in group_model._meta.get_all_field_names():
|
||||
try:
|
||||
return group_model._default_manager.get(group_acronym__acronym=acronym)
|
||||
except group_model.DoesNotExist:
|
||||
return None
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
def _set_stream_automatically(draft, stream):
|
||||
(streamed, created) = StreamedID.objects.get_or_create(draft=draft)
|
||||
if created:
|
||||
streamed.stream = stream
|
||||
streamed.save()
|
||||
else:
|
||||
return
|
||||
if not stream or not stream.with_groups:
|
||||
return
|
||||
try:
|
||||
draft_literal, stream_name, group_name, extra = draft.filename.split('-', 3)
|
||||
if stream_name.lower() == stream.name.lower():
|
||||
group = _get_group_from_acronym(stream.group_model, group_name)
|
||||
if group:
|
||||
streamed.group = group
|
||||
streamed.save()
|
||||
except ValueError:
|
||||
return
|
||||
return
|
||||
|
||||
|
||||
def get_stream_from_wrapper(idrfc_wrapper):
|
||||
|
|
|
@ -6,7 +6,9 @@ from ietf.ietfworkflows.utils import (get_workflow_for_draft,
|
|||
from ietf.wgchairs.accounts import (can_manage_shepherd_of_a_document,
|
||||
can_manage_writeup_of_a_document)
|
||||
from ietf.ietfworkflows.streams import get_stream_from_wrapper
|
||||
from ietf.ietfworkflows.accounts import (can_edit_state, can_edit_stream)
|
||||
from ietf.ietfworkflows.models import Stream
|
||||
from ietf.ietfworkflows.accounts import (can_edit_state, can_edit_stream,
|
||||
is_chair_of_stream)
|
||||
|
||||
|
||||
register = template.Library()
|
||||
|
@ -14,7 +16,6 @@ register = template.Library()
|
|||
|
||||
@register.inclusion_tag('ietfworkflows/stream_state.html', takes_context=True)
|
||||
def stream_state(context, doc):
|
||||
request = context.get('request', None)
|
||||
data = {}
|
||||
stream = get_stream_from_wrapper(doc)
|
||||
data.update({'stream': stream})
|
||||
|
@ -72,3 +73,33 @@ def edit_actions(context, wrapper):
|
|||
'draft': draft,
|
||||
'doc': wrapper,
|
||||
}
|
||||
|
||||
|
||||
class StreamListNode(template.Node):
|
||||
|
||||
def __init__(self, user, var_name):
|
||||
self.user = user
|
||||
self.var_name = var_name
|
||||
|
||||
def render(self, context):
|
||||
user = self.user.resolve(context)
|
||||
streams = []
|
||||
for i in Stream.objects.all():
|
||||
if is_chair_of_stream(user, i):
|
||||
streams.append(i)
|
||||
context.update({self.var_name: streams})
|
||||
return ''
|
||||
|
||||
|
||||
@register.tag
|
||||
def get_user_managed_streams(parser, token):
|
||||
firstbits = token.contents.split(None, 2)
|
||||
if len(firstbits) != 3:
|
||||
raise template.TemplateSyntaxError("'get_user_managed_streams' tag takes three arguments")
|
||||
user = parser.compile_filter(firstbits[1])
|
||||
lastbits_reversed = firstbits[2][::-1].split(None, 2)
|
||||
if lastbits_reversed[1][::-1] != 'as':
|
||||
raise template.TemplateSyntaxError("next-to-last argument to 'get_user_managed_stream' tag must"
|
||||
" be 'as'")
|
||||
var_name = lastbits_reversed[0][::-1]
|
||||
return StreamListNode(user, var_name)
|
||||
|
|
|
@ -6,4 +6,5 @@ urlpatterns = patterns('ietf.ietfworkflows.views',
|
|||
url(r'^(?P<name>[^/]+)/history/$', 'stream_history', name='stream_history'),
|
||||
url(r'^(?P<name>[^/]+)/edit/state/$', 'edit_state', name='edit_state'),
|
||||
url(r'^(?P<name>[^/]+)/edit/stream/$', 'edit_stream', name='edit_stream'),
|
||||
url(r'^delegates/(?P<stream_name>[^/]+)/$', 'stream_delegates', name='stream_delegates'),
|
||||
)
|
||||
|
|
|
@ -87,11 +87,12 @@ def get_workflow_for_draft(draft):
|
|||
if not streamed_draft or not streamed_draft.stream:
|
||||
return None
|
||||
stream = streamed_draft.stream
|
||||
if stream.with_groups:
|
||||
if not streamed_draft.group:
|
||||
if stream.document_group_attribute:
|
||||
group = streamed_draft.get_group()
|
||||
if not group:
|
||||
return None
|
||||
else:
|
||||
workflow = get_workflow_for_wg(streamed_draft.group, streamed_draft.stream.workflow)
|
||||
workflow = get_workflow_for_wg(group, streamed_draft.stream.workflow)
|
||||
else:
|
||||
workflow = stream.workflow
|
||||
set_workflow_for_object(draft, workflow)
|
||||
|
|
|
@ -3,16 +3,19 @@ from django.shortcuts import get_object_or_404, render_to_response
|
|||
from django.template import RequestContext
|
||||
|
||||
from ietf.idtracker.models import InternetDraft
|
||||
from ietf.ietfworkflows.models import Stream, StreamDelegate
|
||||
from ietf.ietfworkflows.forms import (DraftTagsStateForm,
|
||||
DraftStreamForm,
|
||||
NoWorkflowStateForm)
|
||||
NoWorkflowStateForm,
|
||||
StreamDelegatesForm)
|
||||
from ietf.ietfworkflows.streams import (get_stream_from_draft,
|
||||
get_streamed_draft)
|
||||
from ietf.ietfworkflows.utils import (get_workflow_history_for_draft,
|
||||
get_workflow_for_draft,
|
||||
get_annotation_tags_for_draft,
|
||||
get_state_for_draft)
|
||||
from ietf.ietfworkflows.accounts import (can_edit_state, can_edit_stream)
|
||||
from ietf.ietfworkflows.accounts import (can_edit_state, can_edit_stream,
|
||||
is_chair_of_stream)
|
||||
|
||||
|
||||
REDUCED_HISTORY_LEN = 20
|
||||
|
@ -81,8 +84,34 @@ def edit_state(request, name):
|
|||
return HttpResponseForbidden('You have no permission to access this view')
|
||||
return _edit_draft_stream(request, draft, DraftTagsStateForm)
|
||||
|
||||
|
||||
def edit_stream(request, name):
|
||||
draft = get_object_or_404(InternetDraft, filename=name)
|
||||
if not can_edit_stream(request.user, draft):
|
||||
return HttpResponseForbidden('You have no permission to access this view')
|
||||
return _edit_draft_stream(request, draft, DraftStreamForm)
|
||||
|
||||
|
||||
def stream_delegates(request, stream_name):
|
||||
stream = get_object_or_404(Stream, name=stream_name)
|
||||
if not is_chair_of_stream(request.user, stream):
|
||||
return HttpResponseForbidden('You have no permission to access this view')
|
||||
chairs = stream.get_chairs()
|
||||
form = StreamDelegatesForm(stream=stream)
|
||||
if request.method == 'POST':
|
||||
if request.POST.get('delete', False):
|
||||
pk_list = request.POST.getlist('remove_delegate')
|
||||
StreamDelegate.objects.filter(stream=stream, person__pk__in=pk_list).delete()
|
||||
else:
|
||||
form = StreamDelegatesForm(request.POST, stream=stream)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
form = StreamDelegatesForm(stream=stream)
|
||||
delegates = stream.get_delegates()
|
||||
return render_to_response('ietfworkflows/stream_delegates.html',
|
||||
{'stream': stream,
|
||||
'chairs': chairs,
|
||||
'delegates': delegates,
|
||||
'form': form,
|
||||
},
|
||||
context_instance=RequestContext(request))
|
||||
|
|
|
@ -33,7 +33,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
|
||||
{% endcomment %}
|
||||
{% load wg_menu %}
|
||||
{% load ietf_filters %}
|
||||
{% load ietf_filters ietf_streams %}
|
||||
<ul>
|
||||
<li class="sect first">Accounts</li>
|
||||
<li><a href="{% url account_index %}">New Account</a></li>
|
||||
|
@ -49,6 +49,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<li><a href="{% url ietf.iesg.views.telechat_dates %}">Telechat Dates</a></li>
|
||||
<li><a href="{% url iesg_working_group_actions %}">Working Groups</a></li>
|
||||
{% endif %}
|
||||
{% get_user_managed_streams user as stream_list %}
|
||||
{% if stream_list %}
|
||||
<li class="sect{% if not user|in_group:"Area_Director,Secretariat" %} first{% endif %}">Streams</li>
|
||||
{% for stream in stream_list %}
|
||||
<li{% if forloop.last %} style="margin-bottom: 2px;"{% endif %}><a href="{% url stream_delegates stream.name %}">{{ stream.name }} stream</a></li>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
<li class="sect{% if not user|in_group:"Area_Director,Secretariat" %} first{% endif %}">Working Groups</li>
|
||||
|
||||
<li style="padding-bottom:0;"><div id="wgs" class="yuimenu"><div class="bd" style="border:0;">
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
{% autoescape off %}From: The IESG <iesg-secretary@ietf.org>
|
||||
To: RFC Editor <rfc-editor@rfc-editor.org>
|
||||
Cc: The IESG <iesg@ietf.org>, <iana@iana.org>, <ietf-announce@ietf.org>
|
||||
Subject: Re: {{ status }} to be: {{ doc.file_tag }}
|
||||
{% filter wordwrap:73 %}{% if disapproved %}
|
||||
Subject: Results of IETF-conflict review for {{ doc.file_tag }}
|
||||
{% filter wordwrap:73 %}
|
||||
The IESG has completed a review of <draft-foo> consistent with RFC5742. This review is applied to all non-IETF streams.
|
||||
{% if disapproved %}
|
||||
The IESG recommends that '{{ doc.title }}' {{ doc.file_tag|safe }} NOT be published as {{ full_status }}.
|
||||
{% else %}
|
||||
The IESG has no problem with the publication of '{{ doc.title }}' {{ doc.file_tag|safe }} as {{ full_status }}.
|
||||
|
|
|
@ -47,7 +47,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
{% with doc.replaces as r %}{% if r %}<br />Replaces {% filter urlize_ietf_docs %}{{ r|join:", "}}{% endfilter %}{% endif %}{% endwith %}
|
||||
</td></tr>
|
||||
<tr><td>Last updated:</td><td> {{ doc.publication_date|default:"(data missing)" }}</td></tr>
|
||||
<tr><td>IETF WG State:</td><td>{{ stream_info.state.name }} ({{ stream_info.streamed.group }})
|
||||
<tr><td>IETF WG state:</td><td>{{ stream_info.state.name }} ({{ stream_info.streamed.get_group }})
|
||||
{% if stream_info.tags %}<br /><i>{% for tag in stream_info.tags %}{{ tag.name }}{% if not forloop.last %}, {% endif %}{% endfor %}{% endif %}
|
||||
</td></tr>
|
||||
<tr><td>Intended RFC status:</td><td>{% if doc.in_ietf_process %}{{ doc.ietf_process.intended_maturity_level|default:"-" }}{% else %}-{%endif%}</td></tr>
|
||||
|
|
|
@ -70,7 +70,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
{% ifequal stream_info.stream.name "IETF" %}
|
||||
<tr>
|
||||
<td>IETF WG State:</td>
|
||||
<td>{{ stream_info.state.name }} ({{ stream_info.streamed.group }})
|
||||
<td>{{ stream_info.state.name }} ({{ stream_info.streamed.get_group }})
|
||||
{% if stream_info.tags %}<br /><i>{% for tag in stream_info.tags %}{{ tag.name }}{% if not forloop.last %}, {% endif %}{% endfor %}{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
@ -79,7 +79,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||
<tr>
|
||||
<td>{{ stream_info.stream.name }} status:</td>
|
||||
<td>
|
||||
{{ stream_info.state.name }} {% if stream_info.streamed.group %}({{ stream_info.streamed.group }}) {% endif %}
|
||||
{{ stream_info.state.name }} {% if stream_info.streamed.get_group %}({{ stream_info.streamed.get_group }}) {% endif %}
|
||||
{% if stream_info.tags %}<br /><i>{% for tag in stream_info.tags %}{{ tag.name }}{% if not forloop.last %}, {% endif %}{% endfor %}{% endif %}
|
||||
</td>
|
||||
</tr>
|
||||
|
|
41
ietf/templates/ietfworkflows/stream_delegates.html
Normal file
41
ietf/templates/ietfworkflows/stream_delegates.html
Normal file
|
@ -0,0 +1,41 @@
|
|||
{% extends "base.html" %}
|
||||
{% load ietf_streams ietf_filters %}
|
||||
|
||||
{% block content %}
|
||||
<h1>Stream: {{ stream.name }}</h1>
|
||||
|
||||
{% if chairs %}
|
||||
<h2>{{ stream.name }} stream chairs</h2>
|
||||
<table class="ietf-table">
|
||||
<tr><th>Name</th><th>Email</th></tr>
|
||||
{% for chair in chairs %}
|
||||
<tr class="{% cycle "oddrow" "evenrow" %}"><td>{{ chair }}</td><td>{{ chair.email.0 }} <{{ chair.email.1 }}></td></tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endif %}
|
||||
|
||||
<h2>{{ stream.name }} stream delegates</h2>
|
||||
<form action="" method="POST">
|
||||
{% if delegates %}
|
||||
<table class="ietf-table">
|
||||
<tr><th></th><th>Name</th><th>Email</th></tr>
|
||||
{% for delegate in delegates %}
|
||||
<tr class="{% cycle "oddrow" "evenrow" %}"><td><input type="checkbox" name="remove_delegate" value="{{ delegate.pk }}" /></td><td>{{ delegate }}</td><td>{{ delegate.email.0 }} <{{ delegate.email.1 }}></td></tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
<p>
|
||||
<input type="submit" value="Remove selected delegates" name="delete" />
|
||||
</p>
|
||||
{% else %}
|
||||
<p>
|
||||
No delegates for {{ stream.name }} stream asigned.
|
||||
</p>
|
||||
{% endif %}
|
||||
<p>
|
||||
Enter a valid e-mail address to add a new delegate.
|
||||
</p>
|
||||
{% if form.errors.email %}{{ form.errors.email }}{% endif %}
|
||||
{{ form.email }}
|
||||
<input type="submit" value="Add new delegate" />
|
||||
</form>
|
||||
{% endblock %}
|
|
@ -1,6 +1,7 @@
|
|||
from django import forms
|
||||
from django.conf import settings
|
||||
from django.core.mail import EmailMessage
|
||||
from django.db.models import Q
|
||||
from django.forms.models import BaseModelFormSet
|
||||
from django.template.loader import render_to_string
|
||||
from django.utils.safestring import mark_safe
|
||||
|
@ -191,7 +192,10 @@ class AddDelegateForm(RelatedWGForm):
|
|||
return self.next_form
|
||||
|
||||
def get_person(self, email):
|
||||
persons = PersonOrOrgInfo.objects.filter(emailaddress__address=email).distinct()
|
||||
persons = PersonOrOrgInfo.objects.filter(emailaddress__address=email).filter(
|
||||
Q(iesglogin__isnull=False)|
|
||||
Q(legacywgpassword__isnull=False)|
|
||||
Q(legacyliaisonuser__isnull=False)).distinct()
|
||||
if not persons:
|
||||
raise PersonOrOrgInfo.DoesNotExist
|
||||
if len(persons) > 1:
|
||||
|
@ -244,7 +248,10 @@ class MultipleDelegateForm(AddDelegateForm):
|
|||
if not self.email:
|
||||
self.email = self.data.get('email', None)
|
||||
self.fields['email'].initial = self.email
|
||||
self.fields['persons'].choices = [(i.pk, unicode(i)) for i in PersonOrOrgInfo.objects.filter(emailaddress__address=self.email, iesglogin__isnull=False).distinct().order_by('first_name')]
|
||||
self.fields['persons'].choices = [(i.pk, unicode(i)) for i in PersonOrOrgInfo.objects.filter(emailaddress__address=self.email).filter(
|
||||
Q(iesglogin__isnull=False)|
|
||||
Q(legacywgpassword__isnull=False)|
|
||||
Q(legacyliaisonuser__isnull=False)).distinct().order_by('first_name')]
|
||||
|
||||
def save(self):
|
||||
person_id = self.cleaned_data.get('persons')
|
||||
|
|
Loading…
Reference in a new issue