499 lines
22 KiB
HTML
499 lines
22 KiB
HTML
<div ng-show="state.selectedWizardTab==tabIds.wizard.basics">
|
|
<form name="{{tabIds.wizard.basics}}">
|
|
<div class="col-sm-8 create-release-wizard__summary-section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text"
|
|
potentially-required-field
|
|
field-name="summary"
|
|
entity="draftTicket">
|
|
{{ 'create.release.wizard.basicDetails.summary' | i18n }}
|
|
</span>
|
|
<div class="create-release-wizard__item">
|
|
<input type="text"
|
|
potentially-required-field
|
|
field-name="summary"
|
|
entity="draftTicket"
|
|
title="{{ 'create.release.wizard.basicDetails.summary' | i18n }}"
|
|
class="custom-input"
|
|
name="summary"
|
|
ng-model="draftTicket.summary"
|
|
placeholder="{{ 'create.release.wizard.basicDetails.summary.placeholder' | i18n }}"
|
|
maxlength="100"
|
|
tabindex = "0"
|
|
auto-focus/>
|
|
<character-limit-message field="draftTicket.summary" limit="100"></character-limit-message>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-8 create-release-wizard__description-section">
|
|
<div class="create-release-wizard__item">
|
|
<edit-summary
|
|
label="{{'create.release.wizard.basicDetails.description' | i18n}}"
|
|
is-desc-required="false"
|
|
ticket="draftTicket"
|
|
context="'create'"
|
|
textplaceholder="'create.release.wizard.basicDetails.description.placeholder' | i18n"
|
|
attachment="false">
|
|
</edit-summary>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-12 create-ticket__section-separator"></div>
|
|
|
|
<div class="row full-width create-release-wizard__section">
|
|
<div class="col-sm-8">
|
|
<div class="row create-ticket__section">
|
|
<div class="col-sm-4">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text"
|
|
potentially-required-field
|
|
field-name="impact"
|
|
entity="draftTicket">
|
|
{{'create.release.wizard.basicDetails.impact' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-release-wizard__item">
|
|
<selection selection-items="releaseMetadata.impacts"
|
|
selected-item="draftTicket.impact"
|
|
selection-callback="updatePriority()"
|
|
title-text="{{'create.release.wizard.basicDetails.impact' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
aria-required="true"
|
|
field-name="impact"
|
|
entity="draftTicket"
|
|
update-selected-item="true">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text"
|
|
potentially-required-field
|
|
field-name="urgency"
|
|
entity="draftTicket">
|
|
{{'create.release.wizard.basicDetails.urgency' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-release-wizard__item">
|
|
<selection selection-items="releaseMetadata.urgencies"
|
|
selected-item="draftTicket.urgency"
|
|
selection-callback="updatePriority()"
|
|
title-text="{{'create.release.wizard.basicDetails.urgency' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
aria-required="true"
|
|
field-name="urgency"
|
|
entity="draftTicket"
|
|
update-selected-item="true">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text"
|
|
potentially-required-field
|
|
field-name="priority"
|
|
entity="draftTicket">
|
|
{{'create.release.wizard.basicDetails.priority' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-release-wizard__item">
|
|
<selection selection-items="releaseMetadata.priorities"
|
|
selected-item="draftTicket.priority"
|
|
title-text="{{'create.release.wizard.basicDetails.priority' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
aria-required="true"
|
|
field-name="priority"
|
|
entity="draftTicket"
|
|
update-selected-item="true">
|
|
</selection>
|
|
</div>
|
|
<input type="hidden" ng-model="draftTicket.priority" ng-required="true">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="row create-ticket__section">
|
|
<div class="col-sm-4">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text"
|
|
potentially-required-field
|
|
field-name="releaseType"
|
|
entity="draftTicket">
|
|
{{'create.release.wizard.basicDetails.releaseType' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-release-wizard__item">
|
|
<selection selection-items="releaseMetadata.types"
|
|
selected-item="draftTicket.releaseType"
|
|
title-text="{{'create.release.wizard.basicDetails.releaseType' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
aria-required="true"
|
|
field-name="releaseType"
|
|
entity="draftTicket"
|
|
update-selected-item="true"
|
|
show-clear=true>
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text"
|
|
potentially-required-field
|
|
field-name="businessJustification"
|
|
entity="draftTicket">
|
|
{{'create.release.wizard.basicDetails.businessJustification' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-release-wizard__item">
|
|
<selection selection-items="releaseMetadata.businessJustifications"
|
|
selected-item="draftTicket.businessJustification"
|
|
title-text="{{'create.release.wizard.basicDetails.businessJustification' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
aria-required="true"
|
|
field-name="businessJustification"
|
|
entity="draftTicket"
|
|
update-selected-item="true">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text"
|
|
potentially-required-field
|
|
field-name="impactedService.name"
|
|
entity="draftTicket">
|
|
{{ 'create.release.wizard.basicDetails.affected.business.services' | i18n }}
|
|
</span>
|
|
<div class="create-release-wizard__service-item">
|
|
<input type="text"
|
|
title="{{ 'create.release.wizard.basicDetails.affected.business.services' | i18n }}"
|
|
name="service"
|
|
ng-model="draftTicket.impactedService"
|
|
role="combobox"
|
|
typeahead-wait-ms="500"
|
|
typeahead-min-length="3"
|
|
typeahead-template-url="views/create/custom-add-asset-dropdown.html"
|
|
typeahead="service as service.name for service in getList('service', $viewValue)"
|
|
placeholder="{{ 'create.release.wizard.basicDetails.affected.business.services.placeholder' | i18n }}"
|
|
class="custom-input"
|
|
tabindex="0"
|
|
potentially-required-field
|
|
field-name="impactedService.name"
|
|
entity="draftTicket"
|
|
ng-blur="onInputFocusBlur()"
|
|
uib-tooltip="{{'search.category.exceedsChunkSize' | i18n}}"
|
|
tooltip-is-open="state.isTooltipOpenService"
|
|
tooltip-enable="state.exceedsChunkSizeService"
|
|
tooltip-trigger="'none'"
|
|
tooltip-placement="top">
|
|
<i class="icon-cross item-input__delete-btn" tabindex=0 role="link"
|
|
title="{{'common.button.clear' | i18n}} {{ 'create.release.wizard.basicDetails.affected.business.services' | i18n }}"
|
|
ng-if="draftTicket.impactedService"
|
|
focus-input-on-clear
|
|
ng-click="clearImpactedService()"
|
|
ng-enter="clearImpactedService()">
|
|
</i>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row create-ticket__section">
|
|
<div class="col-xs-12 create-release__location">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">
|
|
{{'create.release.location' | i18n }}
|
|
</span>
|
|
</label>
|
|
<foundation-selector ng-if="draftCreated" type="site" inline="true" multiple="false" options="siteOptions" use-chunking="false"
|
|
typeahead-mode="true" selected-foundations="draftTicket.location"></foundation-selector>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row create-ticket__section">
|
|
<div class="release-dates-validaton ticket-date__form_invalid"
|
|
ng-if="(basics.scheduledStartDate.$invalid && basics.scheduledStartDate.$dirty)||
|
|
(basics.scheduledEndDate.$invalid && basics.scheduledEndDate.$dirty) ||
|
|
(basics.deploymentStartDate.$invalid && basics.deploymentStartDate.$dirty) ||
|
|
(basics.deploymentEndDate.$invalid && basics.deploymentEndDate.$dirty)">
|
|
<i class="icon-exclamation_triangle"></i>
|
|
<span ng-if="basics.scheduledStartDate.$invalid && basics.scheduledStartDate.$dirty">{{'create.ticket.invalid.scheduled-start-date'|i18n}}</span>
|
|
<span ng-if="basics.scheduledEndDate.$invalid && basics.scheduledEndDate.$dirty">{{'create.ticket.invalid.scheduled-end-date'|i18n}}</span>
|
|
<span ng-if="basics.deploymentStartDate.$invalid && basics.deploymentStartDate.$dirty">{{'create.ticket.invalid.deployment-start-date'|i18n}}</span>
|
|
<span ng-if="basics.deploymentEndDate.$invalid && basics.deploymentEndDate.$dirty">{{'create.ticket.invalid.deployment-end-date'|i18n}}</span>
|
|
</div>
|
|
<div class="col-md-4 col-sm-6">
|
|
<div class="release-point">
|
|
<label class="label_control-wrap">
|
|
<span id="scheduledStart" class="label__text"
|
|
potentially-required-field
|
|
field-name="scheduledStartDate"
|
|
entity="draftTicket">
|
|
{{ 'create.ticket.scheduled.start.time' | i18n }}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
potentially-required-field
|
|
field-name="scheduledStartDate"
|
|
entity="draftTicket"
|
|
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-labelled="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 class="release-point">
|
|
<label class="label_control-wrap">
|
|
<span id="scheduledEnd" class="label__text"
|
|
potentially-required-field
|
|
field-name="scheduledEndDate"
|
|
entity="draftTicket">
|
|
{{ 'create.ticket.scheduled.end.time' | i18n }}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
potentially-required-field
|
|
field-name="scheduledEndDate"
|
|
entity="draftTicket"
|
|
title="{{'common.label.date' | i18n}}"
|
|
class="form-control"
|
|
name="scheduledEndDate"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="draftTicket.scheduledEndDate"
|
|
is-open="draftTicket.scheduledEndDatePicker.open"
|
|
min-date="draftTicket.scheduledStartDate"
|
|
init-date="draftTicket.tempScheduledInit"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(draftTicket.scheduledEndDatePicker, $event)"
|
|
ng-enter="openDatePicker(draftTicket.scheduledEndDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
aria-labelled="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 class="col-md-4 col-sm-6">
|
|
<div class="release-point">
|
|
<label class="label_control-wrap">
|
|
<span id="deploymentStart" class="label__text"
|
|
potentially-required-field
|
|
field-name="deploymentStartDate"
|
|
entity="draftTicket">
|
|
{{ 'create.ticket.deployment.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="deploymentStartDate"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="draftTicket.deploymentStartDate"
|
|
is-open="draftTicket.deploymentStartDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(draftTicket.deploymentStartDatePicker, $event)"
|
|
ng-enter="openDatePicker(draftTicket.deploymentStartDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
aria-labelled="deploymentStart"
|
|
ng-change="updateDateTime('deployment')"
|
|
potentially-required-field
|
|
field-name="deploymentStartDate"/>
|
|
<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.deploymentStartDate | date: 'shortTime' }}"
|
|
ng-disabled="validator.deploymentStartTimeDisabled(draftTicket, editMode)"
|
|
title="{{'common.label.time' | i18n}}" aria-labelledby="deploymentStart"
|
|
readonly="readonly"/>
|
|
<i class="icon-clock_o create-release-wizard__time-icon"></i>
|
|
</div>
|
|
<div class="dropdown-menu" prevent-click-event ng-if="draftTicket.deploymentStartDate"
|
|
ng-hide="validator.deploymentStartTimeDisabled(draftTicket, editMode)">
|
|
<timepicker ng-model="draftTicket.deploymentStartDate"
|
|
ng-change="updateDateTime('deployment')"
|
|
show-meridian="showMeridian"
|
|
default-hours="12"
|
|
default-minutes="0">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
|
|
<div class="release-point">
|
|
<label class="label_control-wrap">
|
|
<span id="deploymentEnd" class="label__text"
|
|
potentially-required-field
|
|
field-name="deploymentEndDate"
|
|
entity="draftTicket">
|
|
{{ 'create.ticket.deployment.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="deploymentEndDate"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="draftTicket.deploymentEndDate"
|
|
min-date="draftTicket.deploymentStartDate"
|
|
init-date="draftTicket.tempDeploymentInit"
|
|
is-open="draftTicket.deploymentEndDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(draftTicket.deploymentEndDatePicker, $event)"
|
|
ng-enter="openDatePicker(draftTicket.deploymentEndDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
aria-labelled="deploymentEnd"
|
|
ng-change="updateDateTime('deployment')"
|
|
potentially-required-field
|
|
field-name="deploymentEndDate"/>
|
|
<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.deploymentEndDate | date: 'shortTime' }}"
|
|
ng-disabled="validator.deploymentEndTimeDisabled(draftTicket, editMode)"
|
|
title="{{'common.label.time' | i18n}}" aria-labelledby="deploymentEnd"
|
|
readonly="readonly"/>
|
|
<i class="icon-clock_o create-release-wizard__time-icon"></i>
|
|
</div>
|
|
<div class="dropdown-menu" prevent-click-event ng-if="draftTicket.deploymentEndDate"
|
|
ng-hide="validator.deploymentEndTimeDisabled(draftTicket, editMode)">
|
|
<timepicker ng-model="draftTicket.deploymentEndDate"
|
|
ng-change="updateDateTime('deployment')"
|
|
show-meridian="showMeridian"
|
|
default-hours="12"
|
|
default-minutes="0">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="col-sm-4 create-ticket__section">
|
|
<categories-editor ng-if="draftTicket.allCategories" entity="draftTicket" company="draftTicket.company" categories="draftTicket.allCategories"></categories-editor>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-12 create-ticket__section-separator"></div>
|
|
|
|
<div class="col-sm-12 create-ticket__section">
|
|
<div class="create-ticket__assignment" ng-class="{'create-release-wizard__auto-assign':draftTicket.autoAssignAssignee}">
|
|
<div>
|
|
<img ng-if="draftTicket.coordinator.id && !draftTicket.autoAssignAssignee" alt="{{draftTicket.coordinator.fullName}}" class="ticket-assignee__thumbnail" imgplaceholder="user"
|
|
thumbnail-img="{{'data:' + draftTicket.coordinator.thumbnailMime + ';base64,' + draftTicket.coordinator.thumbnail}}" />
|
|
<span ng-if="!draftTicket.coordinator.id && !draftTicket.autoAssignAssignee" class="ticket-assignee__none icon-question_circle"></span>
|
|
|
|
<div class="ticket-assignee__info">
|
|
<div class="ticket__label-small">{{ 'create.release.coordinator' | i18n }}</div>
|
|
<span class="auto-assign__text" ng-if="draftTicket.autoAssignAssignee">
|
|
{{ 'create.ticket.auto.assign' | i18n }}
|
|
</span>
|
|
<span ng-if="!draftTicket.coordinator.id && !draftTicket.autoAssignAssignee" class="ticket__field-value">{{'common.label.noneYet' | i18n }}</span>
|
|
<span ng-if="draftTicket.coordinator.id && !draftTicket.autoAssignAssignee" class="ticket__field-value">{{draftTicket.coordinator.fullName}}</span>
|
|
</div>
|
|
|
|
<div class="ticket-assignee__support-group" ng-if="!draftTicket.autoAssignAssignee">
|
|
<div class="ticket__label-small">{{'create.release.filter.group' | i18n}}</div>
|
|
<span class="ticket__field-value">{{ draftTicket.coordinatorGroup.name || ('common.label.noneYet' | i18n ) }}</span>
|
|
</div>
|
|
|
|
<div class="ticket-incident-assignee__action" ng-click="assignToMe($event, 'releasecoordinator')" ng-enter="assignToMe($event, 'releasecoordinator')"
|
|
ng-if="availableForAssignment && draftTicket.coordinator.id !== loggedInUserId">
|
|
<i class="icon-user_plus"></i>
|
|
<a aria-label="{{'common.labels.assignToMe' | i18n}}" href="">
|
|
{{'common.labels.assignToMe' | i18n }}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="create-ticket__assignment">
|
|
<button type="button" class="btn_primary ticket-template__assignment-btn" ng-click="assign($event)">{{ 'create.ticket.assignment' | i18n }}</button>
|
|
</div>
|
|
</div>
|
|
|
|
</form>
|
|
</div> |