379 lines
16 KiB
HTML
379 lines
16 KiB
HTML
<div class="create-activity clearfix">
|
|
<div class="create-form-wrapper">
|
|
<div loading-spinner class="create-ticket__loading-spinner" if="state.dataIsLoading" centered="true" overlay="true"></div>
|
|
|
|
<div class="clearfix">
|
|
<form name="createActivityForm" novalidate>
|
|
<div class="create-ticket__header">
|
|
<h3 class="create-ticket__header-title">{{ 'create.activity.header' | i18n }}</h3>
|
|
<span ng-bind-html="'create.activity.sub.header' | i18n"></span>
|
|
</div>
|
|
|
|
<div class="create-activity__highlight-section">
|
|
{{'create.activity.activityFor' | i18n:draftTicket.parentId}}
|
|
</div>
|
|
|
|
<div class="create-ticket__full-width-section">
|
|
<div class="row">
|
|
<div class="col-sm-8 create-ticket__section">
|
|
<div class="clearfix">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text"
|
|
prevent-click-event
|
|
potentially-required-field
|
|
field-name="summary"
|
|
entity="draftTicket">
|
|
{{ 'create.activity.summary' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-ticket__item">
|
|
<input type="text"
|
|
prevent-click-event
|
|
potentially-required-field
|
|
field-name="summary"
|
|
entity="draftTicket"
|
|
title="{{ 'create.activity.summary' | i18n }}"
|
|
class="custom-input"
|
|
name="summary"
|
|
ng-model="draftTicket.summary"
|
|
maxlength="100"
|
|
placeholder="{{ 'create.activity.summary.placeholder' | i18n }}">
|
|
</div>
|
|
</label>
|
|
<character-limit-message field="incident.summary" limit="100"></character-limit-message>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-sm-8 create-ticket__section">
|
|
<div class="create-ticket__item">
|
|
<edit-summary
|
|
label="{{'common.label.desc' | i18n}}"
|
|
is-desc-required="false"
|
|
ticket="draftTicket"
|
|
context="'create'"
|
|
textplaceholder="'create.activity.desc.placeholder' | i18n"
|
|
attachment="false">
|
|
</edit-summary>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="col-sm-8">
|
|
<div class="row">
|
|
<div class="col-sm-4 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text required__label"
|
|
data-required="{{'common.label.required.bracketed' | i18n}}">
|
|
{{'create.release.wizard.basicDetails.priority' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-ticket__item">
|
|
<selection selection-items="activityMetadata.priorities"
|
|
selected-item="draftTicket.priority"
|
|
title-text="{{'create.release.wizard.basicDetails.priority' | i18n | uppercase}}"
|
|
required="true"
|
|
label="label"
|
|
value="label"
|
|
aria-required="true"
|
|
field-name="priority"
|
|
entity="draftTicket"
|
|
update-selected-item="true">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="create-ticket__full-width-section">
|
|
<div class="row">
|
|
<div class="col-sm-8 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">
|
|
{{'create.activity.location' | i18n }}
|
|
</span>
|
|
</label>
|
|
<foundation-selector ng-if="draftCreated" type="site" inline="true" multiple="false" options="siteOptions"
|
|
use-chunking="true" typeahead-mode="true" selected-foundations="draftTicket.location"></foundation-selector>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="create-ticket__full-width-section">
|
|
<div class="row">
|
|
<div class="col-sm-4 create-ticket__section">
|
|
<div class="row">
|
|
<div class="release-point col-md-8 col-sm-12">
|
|
<label class="label_control-wrap">
|
|
<span id="scheduledStart" class="label__text">
|
|
{{ 'create.ticket.scheduled.start.time' | i18n }}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
title="{{'common.label.date' | i18n}}"
|
|
class="form-control"
|
|
name="scheduledStartDate"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="draftTicket.scheduledStartDate"
|
|
is-open="draftTicket.scheduledStartDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(draftTicket.scheduledStartDatePicker, $event)"
|
|
ng-enter="openDatePicker(draftTicket.scheduledStartDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
aria-labelledby="scheduledStart"
|
|
ng-change="updateDateTime('scheduled')" />
|
|
<i class="icon-calendar create-release-wizard__date-icon"></i>
|
|
</div>
|
|
|
|
<div class="custom-field__time">
|
|
<div class="dropdown timepicker">
|
|
<div class="dropdown-toggle">
|
|
<input class="form-control custom-field__time-input create-release-wizard__time_disabled"
|
|
type="text" value="{{ draftTicket.scheduledStartDate | date: 'shortTime' }}"
|
|
ng-disabled="validator.scheduledStartTimeDisabled(draftTicket, editMode)"
|
|
title="{{'common.label.time' | i18n}}" aria-labelledby="scheduledStart"
|
|
readonly="readonly"/>
|
|
<i class="icon-clock_o create-release-wizard__time-icon"></i>
|
|
</div>
|
|
<div class="dropdown-menu" prevent-click-event ng-if="draftTicket.scheduledStartDate"
|
|
ng-hide="validator.scheduledStartTimeDisabled(draftTicket, editMode)">
|
|
<timepicker ng-model="draftTicket.scheduledStartDate"
|
|
ng-change="updateDateTime('scheduled')"
|
|
show-meridian="showMeridian"
|
|
default-hours="12"
|
|
default-minutes="0">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="release-point col-md-8 col-sm-12">
|
|
<label class="label_control-wrap">
|
|
<span id="scheduledEnd" class="label__text">
|
|
{{ 'create.ticket.scheduled.end.time' | i18n }}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
title="{{'common.label.date' | i18n}}"
|
|
class="form-control"
|
|
name="scheduledEndDate"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="draftTicket.scheduledEndDate"
|
|
is-open="draftTicket.scheduledEndDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(draftTicket.scheduledEndDatePicker, $event)"
|
|
ng-enter="openDatePicker(draftTicket.scheduledEndDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
aria-labelledby="scheduledEnd"
|
|
ng-change="updateDateTime('scheduled')" />
|
|
<i class="icon-calendar create-release-wizard__date-icon"></i>
|
|
</div>
|
|
|
|
<div class="custom-field__time">
|
|
<div class="dropdown timepicker">
|
|
<div class="dropdown-toggle">
|
|
<input class="form-control custom-field__time-input create-release-wizard__time_disabled"
|
|
type="text" value="{{ draftTicket.scheduledEndDate | date: 'shortTime' }}"
|
|
ng-disabled="validator.scheduledEndTimeDisabled(draftTicket, editMode)"
|
|
title="{{'common.label.time' | i18n}}" aria-labelledby="scheduledEnd"
|
|
readonly="readonly"/>
|
|
<i class="icon-clock_o create-release-wizard__time-icon"></i>
|
|
</div>
|
|
<div class="dropdown-menu" prevent-click-event ng-if="draftTicket.scheduledEndDate"
|
|
ng-hide="validator.scheduledEndTimeDisabled(draftTicket, editMode)">
|
|
<timepicker ng-model="draftTicket.scheduledEndDate"
|
|
ng-change="updateDateTime('scheduled')"
|
|
show-meridian="showMeridian"
|
|
default-hours="12"
|
|
default-minutes="0">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-sm-4 create-ticket__section">
|
|
<div class="row">
|
|
<div class="release-point col-md-8 col-sm-12">
|
|
<label class="label_control-wrap">
|
|
<span id="actualStart" class="label__text">
|
|
{{ 'create.ticket.actual.start.time' | i18n }}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
title="{{'common.label.date' | i18n}}"
|
|
class="form-control"
|
|
name="actualStartDate"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="draftTicket.actualStartDate"
|
|
is-open="draftTicket.actualStartDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(draftTicket.actualStartDatePicker, $event)"
|
|
ng-enter="openDatePicker(draftTicket.actualStartDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
aria-labelledby="actualStart"
|
|
ng-change="updateDateTime('actual')" />
|
|
<i class="icon-calendar create-release-wizard__date-icon"></i>
|
|
</div>
|
|
|
|
<div class="custom-field__time">
|
|
<div class="dropdown timepicker">
|
|
<div class="dropdown-toggle">
|
|
<input class="form-control custom-field__time-input create-release-wizard__time_disabled"
|
|
type="text" value="{{ draftTicket.actualStartDate | date: 'shortTime' }}"
|
|
ng-disabled="validator.actualStartTimeDisabled(draftTicket, editMode)"
|
|
title="{{'common.label.time' | i18n}}" aria-labelledby="actualStart"
|
|
readonly="readonly"/>
|
|
<i class="icon-clock_o create-release-wizard__time-icon"></i>
|
|
</div>
|
|
<div class="dropdown-menu" prevent-click-event ng-if="draftTicket.actualStartDate"
|
|
ng-hide="validator.actualStartTimeDisabled(draftTicket, editMode)">
|
|
<timepicker ng-model="draftTicket.actualStartDate"
|
|
ng-change="updateDateTime('actual')"
|
|
show-meridian="showMeridian"
|
|
default-hours="12"
|
|
default-minutes="0">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<div class="release-point col-md-8 col-sm-12">
|
|
<label class="label_control-wrap">
|
|
<span id="actualEnd" class="label__text">
|
|
{{ 'create.ticket.actual.end.time' | i18n }}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
title="{{'common.label.date' | i18n}}"
|
|
class="form-control"
|
|
name="actualEndDate"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="draftTicket.actualEndDate"
|
|
is-open="draftTicket.actualEndDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(draftTicket.actualEndDatePicker, $event)"
|
|
ng-enter="openDatePicker(draftTicket.actualEndDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
aria-labelledby="actualEnd"
|
|
ng-change="updateDateTime('actual')" />
|
|
<i class="icon-calendar create-release-wizard__date-icon"></i>
|
|
</div>
|
|
|
|
<div class="custom-field__time">
|
|
<div class="dropdown timepicker">
|
|
<div class="dropdown-toggle">
|
|
<input class="form-control custom-field__time-input create-release-wizard__time_disabled"
|
|
type="text" value="{{ draftTicket.actualEndDate | date: 'shortTime' }}"
|
|
ng-disabled="validator.actualEndTimeDisabled(draftTicket, editMode)"
|
|
title="{{'common.label.time' | i18n}}" aria-labelledby="actualEnd"
|
|
readonly="readonly"/>
|
|
<i class="icon-clock_o create-release-wizard__time-icon"></i>
|
|
</div>
|
|
<div class="dropdown-menu" prevent-click-event ng-if="draftTicket.actualEndDate"
|
|
ng-hide="validator.actualEndTimeDisabled(draftTicket, editMode)">
|
|
<timepicker ng-model="draftTicket.actualEndDate"
|
|
ng-change="updateDateTime('actual')"
|
|
show-meridian="showMeridian"
|
|
default-hours="12"
|
|
default-minutes="0">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="create-ticket__full-width-section">
|
|
<div class="row">
|
|
<div class="col-sm-12 create-ticket__section">
|
|
<span class="label__text">{{ 'create.ticket.assignee' | i18n }}</span>
|
|
|
|
<div class="create-ticket__section">
|
|
<div class="auto-assign__text" ng-if="draftTicket.autoAssignAssignee">
|
|
{{ 'create.ticket.auto.assign' | i18n }}
|
|
</div>
|
|
<div class="create-ticket__assignment" ng-if="!draftTicket.autoAssignAssignee">
|
|
<img ng-if="draftTicket.assignee.loginId" alt="{{draftTicket.assignee.fullName}}" class="ticket-assignee__thumbnail" imgplaceholder="user"
|
|
thumbnail-img="{{'data:' + draftTicket.assignee.thumbnailMime + ';base64,' + incident.assignee.thumbnail}}" />
|
|
<span ng-if="!draftTicket.assignee.loginId" class="ticket-assignee__none icon-question_circle"></span>
|
|
|
|
<div class="ticket-assignee__info">
|
|
<div class="ticket__label-small">{{'common.labels.assignedTo' | i18n }}:</div>
|
|
<span ng-if="!draftTicket.assignee.loginId" class="ticket__field-value">{{'common.label.noneYet' | i18n }}</span>
|
|
<span ng-if="draftTicket.assignee.loginId" class="ticket__field-value">{{draftTicket.assignee.fullName}}</span>
|
|
</div>
|
|
|
|
<div class="ticket-assignee__support-group">
|
|
<div class="ticket__label-small">{{'common.labels.supportGroup' | i18n}}:</div>
|
|
<span class="ticket__field-value">{{ draftTicket.supportGroup.name || ('common.label.noneYet' | i18n ) }}</span>
|
|
</div>
|
|
</div>
|
|
<div class="ticket-new-incident-assignee__action" ng-click="assignToMe($event, 'ticketassignee')" ng-enter="assignToMe($event, 'ticketassignee')" ng-if="draftTicket.assignee.id !== loggedInUserId">
|
|
<i class="icon-user_plus"></i>
|
|
<a aria-label="{{'common.labels.assignToMe' | i18n}} {{'common.aria.labels.assignToMeAsAssignee' | i18n}}"href="">
|
|
{{'common.labels.assignToMe' | i18n }}
|
|
</a>
|
|
</div>
|
|
<button type="button" class="btn_primary ticket-template__assignment-btn " aria-label="{{ 'create.ticket.assignment' | i18n }}" ng-click="assign($event)">{{ 'create.ticket.assignment' | i18n }}</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="create-ticket__action-panel">
|
|
<span class="create-ticket__form_invalid" ng-if="createActivityForm.$invalid">
|
|
<i class="icon-exclamation_triangle"></i>
|
|
<span ng-if="createActivityForm.$error.required.length">{{createActivityForm.$error.required.length}} {{ 'create.ticket.more.required.fields' | i18n }}</span>
|
|
<span ng-if="createActivityForm.scheduledStartDate.$invalid && createActivityForm.scheduledStartDate.$dirty">{{'create.ticket.invalid.scheduled-start-date'|i18n}}</span>
|
|
<span ng-if="createActivityForm.scheduledEndDate.$invalid && createActivityForm.scheduledEndDate.$dirty">{{'create.ticket.invalid.scheduled-end-date'|i18n}}</span>
|
|
<span ng-if="createActivityForm.actualStartDate.$invalid && createActivityForm.actualStartDate.$dirty">{{'create.ticket.invalid.actual-start-date'|i18n}}</span>
|
|
<span ng-if="createActivityForm.actualEndDate.$invalid && createActivityForm.actualEndDate.$dirty">{{'create.ticket.invalid.actual-end-date'|i18n}}</span>
|
|
<span ng-if="formContainsInvalidFields(createActivityForm)">{{ 'create.ticket.invalid.fields' | i18n }}</span>
|
|
</span>
|
|
<span class="font-size-m" ng-if="createActivityForm.$valid">
|
|
<i class="icon-check"></i>
|
|
{{ 'create.ticket.all.required.fields.complete' | i18n }}
|
|
</span>
|
|
|
|
<div class="pull-right">
|
|
<button type="submit" class="btn_primary create-ticket__action-btn" ng-disabled="createActivityForm.$invalid || state.dataIsLoading" ng-click="createActivity()">
|
|
{{ 'common.button.saveTicket' | i18n }}
|
|
</button>
|
|
<button type="button" class="btn_secondary action-panel__cancel-btn" ng-disabled="state.dataIsLoading" ng-click="cancel()">
|
|
{{ 'common.button.cancel' | i18n }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div> |