266 lines
12 KiB
HTML
266 lines
12 KiB
HTML
<div class="header">
|
|
<div class="title">
|
|
<div class="submenu">
|
|
<a ui-sref="motions.motion.list" class="btn btn-sm btn-default">
|
|
<i class="fa fa-angle-double-left fa-lg"></i>
|
|
<translate>All motions</translate>
|
|
</a>
|
|
<a ui-sref="motions_single_pdf({pk: motion.id})" target="_blank" class="btn btn-default btn-sm">
|
|
<i class="fa fa-file-pdf-o fa-lg"></i>
|
|
<translate>PDF</translate>
|
|
</a>
|
|
<!-- List of speakers -->
|
|
<a ui-sref="agenda.item.detail({id: motion.agenda_item_id})" class="btn btn-sm btn-default">
|
|
<i class="fa fa-microphone fa-lg"></i>
|
|
<translate>List of speakers</translate>
|
|
</a>
|
|
<!-- project -->
|
|
<a os-perms="core.can_manage_projector" class="btn btn-default btn-sm"
|
|
ng-class="{ 'btn-primary': motion.isProjected() }"
|
|
ng-click="motion.project()"
|
|
title="{{ 'Project motion' | translate }}">
|
|
<i class="fa fa-video-camera"></i>
|
|
</a>
|
|
<!-- edit -->
|
|
<a ng-if="motion.isAllowed('update')" ng-click="openDialog(motion)"
|
|
class="btn btn-default btn-sm"
|
|
title="{{ 'Edit' | translate}}">
|
|
<i class="fa fa-pencil"></i>
|
|
</a>
|
|
</div>
|
|
<h1>{{ motion.agenda_item.getTitle() }}</h1>
|
|
<h2>
|
|
<translate>Motion</translate> {{ motion.identifier }}
|
|
<span ng-if="motion.versions.length > 1" >| Version {{ motion.getVersion(version).version_number }}</span>
|
|
<span ng-if="motion.active_version != version" class="label label-warning">
|
|
<i class="fa fa-exclamation-triangle"></i>
|
|
<translate>This version is not permitted.</translate>
|
|
</span>
|
|
</h2>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="meta">
|
|
<div class="title" ng-click="isMeta = !isMeta">
|
|
<div class="name">
|
|
<i class="fa fa-info-circle"></i>
|
|
<translate>Meta information</translate>
|
|
</div>
|
|
<div class="icon">
|
|
<i class="fa fa-lg" ng-class="isMeta ? 'fa-angle-down' : 'fa-angle-up'"></i>
|
|
</div>
|
|
</div>
|
|
<div class="detail" uib-collapse="isMeta">
|
|
<div class="row">
|
|
<div class="col-md-4">
|
|
<!-- submitters -->
|
|
<h3 translate>Submitters</h3>
|
|
<div ng-repeat="submitter in motion.submitters">
|
|
{{ submitter.get_full_name() }}<br>
|
|
</div>
|
|
|
|
<!-- supporters -->
|
|
<div ng-if="config('motions_min_supporters') > 0">
|
|
<h3 translate>Supporters</h3>
|
|
<ol>
|
|
<li ng-repeat="supporters in motion.supporters">
|
|
{{ supporters.get_full_name() }}
|
|
</ol>
|
|
<!-- support button -->
|
|
<button ng-if="motion.isAllowed('support')" ng-click="support()" class="btn btn-default btn-sm">
|
|
<i class="fa fa-heart"></i>
|
|
<translate>Support motion</translate>
|
|
</button>
|
|
<!-- unsupport button -->
|
|
<button ng-if="motion.isAllowed('unsupport')" ng-click="unsupport()" class="btn btn-default btn-sm">
|
|
<i class="fa fa-heart-o"></i>
|
|
<translate>Unsupport motion</translate>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<!-- Category -->
|
|
<h3 ng-if="motion.category" translate>Category</h3>
|
|
{{ motion.category.name }}
|
|
|
|
<!-- Tags -->
|
|
<h3 ng-if="motion.tags.length > 0" translate>Tags</h3>
|
|
<span ng-repeat="tag in motion.tags">
|
|
{{ tag.name }}{{$last ? '' : ', '}}
|
|
</span>
|
|
|
|
<!-- State -->
|
|
<h3 ng-if="!motion.isAllowed('change_state')" class="heading" translate>State</h3>
|
|
<div ng-if="motion.isAllowed('change_state')" class="heading">
|
|
<span uib-dropdown>
|
|
<a href id="state-dropdown" class="drop-down-name" uib-dropdown-toggle>
|
|
<translate>State</translate>
|
|
<i class="fa fa-cog"></i>
|
|
</a>
|
|
<ul uib-dropdown-menu aria-labelledby="state-dropdown">
|
|
<li ng-repeat="state in motion.state.getNextStates()">
|
|
<a href ng-click="updateState(state.id)">{{ state.action_word | translate }}</a>
|
|
<li class="divider" ng-if="motion.state.getNextStates().length">
|
|
<li>
|
|
<a href ng-if="motion.isAllowed('reset_state')" ng-click="reset_state()">
|
|
<i class="fa fa-exclamation-triangle"></i>
|
|
<translate>Reset state</translate>
|
|
</a>
|
|
</ul>
|
|
</span>
|
|
</div>
|
|
<div class="label" ng-class="'label-'+motion.state.css_class">
|
|
{{ motion.state.name | translate }}
|
|
</div>
|
|
</div>
|
|
<div class="col-md-4">
|
|
<h3 ng-if="motion.polls.length > 0" translate>Voting result</h3>
|
|
<ol class="slimlist">
|
|
<li ng-repeat="poll in motion.polls" class="spacer"
|
|
ng-if="poll.has_votes || operator.hasPerms('motions.can_manage')">
|
|
<strong translate-comment='ballot of a motion' translate>Vote</strong>
|
|
<!-- Edit poll -->
|
|
<button os-perms="motions.can_manage" ng-click="openPollDialog(poll, $index+1)"
|
|
class="btn btn-default btn-xs" title="{{ 'Edit' | translate }}">
|
|
<i class="fa fa-pencil"></i>
|
|
</button>
|
|
<!-- Delete poll -->
|
|
<button os-perms="motions.can_manage" class="btn btn-default btn-xs"
|
|
ng-bootbox-confirm="{{ 'Are you sure you want to delete this poll?' | translate }}"
|
|
ng-bootbox-confirm-action="delete_poll(poll)"
|
|
title="{{ 'Delete' | translate }}">
|
|
<i class="fa fa-times"></i>
|
|
</button>
|
|
<!-- Poll results -->
|
|
<div ng-show="poll.has_votes" class="pollresults">
|
|
<table class="table">
|
|
<!-- yes -->
|
|
<tr>
|
|
<td class="icon">
|
|
<i class="fa fa-thumbs-up fa-2x"></i>
|
|
<td>
|
|
<span class="result_label"><translate>Yes</translate>:</span>
|
|
<span class="result_value">{{ poll.yes }} {{ poll.getYesPercent() }}</span>
|
|
<div ng-if="poll.getYesPercent(true)">
|
|
<uib-progressbar value="poll.getYesPercent(true)" type="success"></uib-progressbar>
|
|
</div>
|
|
<!-- no -->
|
|
<tr>
|
|
<td class="icon">
|
|
<i class="fa fa-thumbs-down fa-2x"></i>
|
|
<td>
|
|
<span class="result_label"><translate>No</translate>:</span>
|
|
<span class="result_value">{{ poll.no }} {{ poll.getNoPercent() }}</span>
|
|
<div ng-if="poll.getNoPercent(true)">
|
|
<uib-progressbar value="poll.getNoPercent(true)" type="danger"></uib-progressbar>
|
|
</div>
|
|
<!-- abstain -->
|
|
<tr>
|
|
<td class="icon">
|
|
<strong style="font-size: 26px">∅</strong>
|
|
<td>
|
|
<span class="result_label"><translate>Abstain</translate>:</span>
|
|
<span class="result_value">{{ poll.abstain }} {{ poll.getAbstainPercent() }}</span>
|
|
<div ng-if="poll.getAbstainPercent(true)">
|
|
<uib-progressbar value="poll.getAbstainPercent(true)" type="warning"></uib-progressbar>
|
|
</div>
|
|
<!-- valid votes -->
|
|
<tr>
|
|
<td class="icon">
|
|
<i class="fa fa-check fa-lg"></i>
|
|
<td>
|
|
<span class="result_label"><translate>Valid votes</translate>:</span>
|
|
<span class="result_value">{{ poll.votesvalid }} {{ poll.getVotesValidPercent() }}</span>
|
|
<!-- invalid votes -->
|
|
<tr>
|
|
<td class="icon">
|
|
<i class="fa fa-ban fa-lg"></i>
|
|
<td>
|
|
<span class="result_label"><translate>Invalid votes</translate>:</span>
|
|
<span class="result_value">{{ poll.votesinvalid }} {{ poll.getVotesInvalidPercent() }}</span>
|
|
<!-- votes cast -->
|
|
<tr class="total">
|
|
<td class="icon">
|
|
<strong style="font-size: 16px">∑</strong>
|
|
<td>
|
|
<span class="result_label"><translate>Votes cast</translate>:</span>
|
|
<span class="result_value">{{ poll.votescast }} {{ poll.getVotesCastPercent() }}</span>
|
|
</table>
|
|
</ol>
|
|
<button ng-if="motion.isAllowed('create_poll')" ng-click="create_poll()" class="btn btn-default btn-sm">
|
|
<i class="fa fa-bar-chart fa-lg"></i>
|
|
<translate>New vote</translate>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="details">
|
|
<div class="row">
|
|
<div class="col-sm-8">
|
|
<h3 translate>Text</h3>
|
|
<div ng-bind-html="motion.getText(version)"></div>
|
|
|
|
<!-- reason -->
|
|
<div ng-if="motion.getReason(version) != ''">
|
|
<h3 translate>Reason</h3>
|
|
<div ng-bind-html="motion.getReason()"></div>
|
|
</div>
|
|
|
|
<!-- attachments -->
|
|
<h3 ng-if="motion.attachments.length > 0" translate>Attachments</h3>
|
|
<ul>
|
|
<li ng-repeat="attachment in motion.attachments">
|
|
<a href="{{ attachment.mediafileUrl }}" target="_blank">{{ attachment.title_or_filename }}</a>
|
|
</ul>
|
|
|
|
<!-- version history -->
|
|
<div ng-if="motion.versions.length > 1">
|
|
<h3 translate>Version history</h3>
|
|
<ul>
|
|
<li ng-repeat="version in motion.versions">
|
|
<span ng-if="$parent.version == version.id">
|
|
<strong><translate>Version</translate> {{ version.version_number }}</strong>
|
|
</span>
|
|
<a ng-if="$parent.version != version.id" ng-click="showVersion(version)">
|
|
<translate>Version</translate> {{ version.version_number }}
|
|
</a>
|
|
<!-- active version -->
|
|
<i ng-if="motion.active_version == version.id" class="fa fa-star"
|
|
title="{{ 'This is the last active version.' | translate }}"></i>
|
|
<!-- permit version -->
|
|
<button os-perms="motions.can_manage" ng-show="motion.active_version != version.id"
|
|
ng-click="permitVersion(version)"
|
|
class="btn btn-default btn-xs" title="{{ 'Permit and activate' | translate }}">
|
|
<i class="fa fa-check"></i>
|
|
</button>
|
|
<!-- delete version -->
|
|
<button os-perms="motions.can_manage" ng-show="motion.active_version != version.id"
|
|
class="btn btn-default btn-xs"
|
|
ng-bootbox-confirm="{{ 'Are you sure you want to delete this version?' | translate }}<br>
|
|
<strong><translate>Version</translate> {{ version.version_number }}</strong>"
|
|
ng-bootbox-confirm-action="deleteVersion(version)"
|
|
title="{{ 'Delete' | translate }}">
|
|
<i class="fa fa-times"></i>
|
|
</button>
|
|
<br><translate>Last modified</translate>: {{ version.creation_time | date:'yyyy-MM-dd HH:mm:ss' }}
|
|
</ul>
|
|
</div>
|
|
|
|
<!-- log -->
|
|
<button type="button" class="btn btn-default spacer" ng-click="isCollapsed = !isCollapsed" translate>
|
|
Show history
|
|
</button>
|
|
<div uib-collapse="isCollapsed">
|
|
<div class="well well-sm">
|
|
<ul class="list-unstyled">
|
|
<li ng-repeat="message in motion.log_messages">
|
|
<small>{{ message.message }}</small>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|