344 lines
20 KiB
HTML
344 lines
20 KiB
HTML
<div ng-show="state.selectedWizardTab==tabIds.wizard.basics">
|
|
<form name="{{tabIds.wizard.basics}}">
|
|
<div class="col-sm-8 create-change-wizard__summary-section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text"
|
|
potentially-required-field
|
|
field-name="summary"
|
|
entity="draftTicket">
|
|
{{ 'create.change.wizard.basicDetails.summary' | i18n }}
|
|
</span>
|
|
<div class="create-change-wizard__item">
|
|
<input type="text"
|
|
potentially-required-field
|
|
field-name="summary"
|
|
entity="draftTicket"
|
|
title="{{ 'create.change.wizard.basicDetails.summary' | i18n }}"
|
|
class="custom-input"
|
|
name="summary"
|
|
ng-model="draftTicket.summary"
|
|
placeholder="{{ 'create.change.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-change-wizard__description-section">
|
|
<div class="create-change-wizard__item">
|
|
<edit-summary
|
|
label="{{'create.change.wizard.basicDetails.description' | i18n}}"
|
|
is-desc-required="false"
|
|
ticket="draftTicket"
|
|
context="'create'"
|
|
textplaceholder="'create.change.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-change-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="timing"
|
|
entity="draftTicket">
|
|
{{'create.change.wizard.basicDetails.timing' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-change-wizard__item">
|
|
<selection selection-items="changeMetadata.timings"
|
|
selected-item="draftTicket.timing"
|
|
selection-callback="updateTiming()"
|
|
title-text="{{'create.change.wizard.basicDetails.timing' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
aria-required="true"
|
|
field-name="timing"
|
|
entity="draftTicket"
|
|
update-selected-item="true">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-4">
|
|
<label class="label_control-wrap" ng-show="isFieldRequired('timingReason')">
|
|
<span class="label__text" ng-class="{'required__label' : isFieldRequired('timingReason')}" data-required="{{'common.label.required.bracketed' | i18n}}">
|
|
{{'create.change.wizard.basicDetails.timingReason' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-change-wizard__item">
|
|
<selection selection-items="changeMetadata.timingReasons"
|
|
selected-item="draftTicket.timingReason"
|
|
title-text="{{'create.change.wizard.basicDetails.timingReason' | i18n | uppercase}}"
|
|
label="label"
|
|
value="name"
|
|
update-selected-item="true"
|
|
required="isFieldRequired('timingReason')">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-4"></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="impact"
|
|
entity="draftTicket">
|
|
{{'create.change.wizard.basicDetails.impact' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-change-wizard__item">
|
|
<selection selection-items="changeMetadata.impacts"
|
|
selected-item="draftTicket.impact"
|
|
selection-callback="updatePriority()"
|
|
title-text="{{'create.change.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.change.wizard.basicDetails.urgency' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-change-wizard__item">
|
|
<selection selection-items="changeMetadata.urgencies"
|
|
selected-item="draftTicket.urgency"
|
|
selection-callback="updatePriority()"
|
|
title-text="{{'create.change.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.change.wizard.basicDetails.priority' | i18n }}
|
|
</span>
|
|
<div class="create-change-wizard__item">
|
|
<selection selection-items="changeMetadata.priorities"
|
|
selected-item="draftTicket.priority"
|
|
selection-callback="validatePriority()"
|
|
title-text="{{'create.change.wizard.basicDetails.priority' | i18n}}"
|
|
label="label"
|
|
value="label"
|
|
field-name="priority"
|
|
entity="draftTicket"
|
|
update-selected-item="true">
|
|
</selection>
|
|
</div>
|
|
</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="impactedService.name"
|
|
entity="draftTicket">
|
|
{{ 'create.change.wizard.basicDetails.affected.business.services' | i18n }}
|
|
</span>
|
|
<div class="create-change-wizard__service-item">
|
|
<input type="text"
|
|
title="{{ 'create.change.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.change.wizard.basicDetails.affected.business.services.placeholder' | i18n }}"
|
|
class="custom-input"
|
|
tabindex="0"
|
|
potentially-required-field
|
|
field-name="impactedService.name"
|
|
entity="draftTicket">
|
|
<i class="icon-cross item-input__delete-btn" tabindex=0 role="link"
|
|
title="{{'common.button.clear' | i18n}} {{ 'create.change.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 class="col-sm-4">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text"
|
|
potentially-required-field
|
|
field-name="changeReason"
|
|
entity="draftTicket">
|
|
{{'create.change.wizard.basicDetails.changeReason' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-change-wizard__item">
|
|
<selection selection-items="changeMetadata.changeReasons"
|
|
selected-item="draftTicket.changeReason"
|
|
title-text="{{'create.change.wizard.basicDetails.changeReason' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
update-selected-item="true"
|
|
field-name="changeReason"
|
|
entity="draftTicket">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-4"></div>
|
|
</div>
|
|
<div class="row create-ticket__section">
|
|
<div class="col-xs-12">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">
|
|
{{'create.change.location' | i18n }}
|
|
</span>
|
|
</label>
|
|
<foundation-selector use-chunking="false" typeahead-mode="true" ng-if="draftCreated" type="site" inline="true" multiple="false" options="siteOptions" selected-foundations="draftTicket.location"></foundation-selector>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-4 create-change-wizard__section">
|
|
<div class="create-change-wizard__requestedFor create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text"
|
|
potentially-required-field
|
|
field-name="customer.firstName"
|
|
entity="draftTicket">
|
|
{{'create.change.requestedFor' | i18n }}
|
|
</span>
|
|
<input type="text"
|
|
potentially-required-field
|
|
field-name="customer.firstName"
|
|
entity="draftTicket"
|
|
title="{{ 'create.change.requestedFor' | i18n }}"
|
|
class="custom-input"
|
|
ng-model="draftTicket.customer"
|
|
ng-blur="validateRequestedFor()"
|
|
role="combobox"
|
|
typeahead-min-length="3"
|
|
typeahead-template-url="views/create/custom-add-user-dropdown.html"
|
|
typeahead="customer as customer.firstName + ' ' + customer.lastName for customer in getListPersonsByCompany($viewValue)"
|
|
placeholder="{{ 'create.change.requestedFor.placeholder' | i18n }}"
|
|
tabindex="0" />
|
|
<div loading-spinner if="state.searchingPersons" inline="true"></div>
|
|
<i class="icon-cross item-input__delete-btn" tabindex=0 role="link"
|
|
title="{{'common.button.clear' | i18n}} {{ 'create.change.requestedFor' | i18n }}" ng-if="draftTicket.customer && !state.searchingPersons"
|
|
focus-input-on-clear ng-click="clearRequestedFor()" ng-enter="clearRequestedFor()">
|
|
</i>
|
|
</label>
|
|
</div>
|
|
<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-change-wizard__auto-assign':draftTicket.autoAssignAssignee}">
|
|
<div>
|
|
<img ng-if="draftTicket.assignee.id && !draftTicket.autoAssignAssignee" alt="{{draftTicket.assignee.fullName}}" class="ticket-assignee__thumbnail" imgplaceholder="user"
|
|
thumbnail-img="{{'data:' + draftTicket.assignee.thumbnailMime + ';base64,' + draftTicket.assignee.thumbnail}}" />
|
|
<span ng-if="!draftTicket.assignee.id && !draftTicket.autoAssignAssignee" class="ticket-assignee__none icon-question_circle"></span>
|
|
|
|
<div class="ticket-assignee__info">
|
|
<div class="ticket__label-small">{{ 'create.change.wizard.basicDetails.changeCoordinator' | i18n }}</div>
|
|
<span class="auto-assign__text" ng-if="draftTicket.autoAssignAssignee">
|
|
{{ 'create.ticket.auto.assign' | i18n }}
|
|
</span>
|
|
<span ng-if="!draftTicket.assignee.id && !draftTicket.autoAssignAssignee" class="ticket__field-value">{{'common.label.noneYet' | i18n }}</span>
|
|
<span ng-if="draftTicket.assignee.id && !draftTicket.autoAssignAssignee" class="ticket__field-value">{{draftTicket.assignee.fullName}}</span>
|
|
</div>
|
|
|
|
<div class="ticket-assignee__support-group" ng-if="!draftTicket.autoAssignAssignee">
|
|
<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 class="ticket-incident-assignee__action" ng-click="assignToMe($event, 'changecoordinator')" ng-enter="assignToMe($event, 'changecoordinator')" ng-if="draftTicket.assignee.id !== loggedInUserId">
|
|
<i class="icon-user_plus"></i>
|
|
<a aria-label="{{ 'create.change.wizard.basicDetails.changeCoordinator' | i18n }} {{'common.labels.assignToMe' | i18n}}" href="">
|
|
{{'common.labels.assignToMe' | i18n }}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="create-ticket__assignment" ng-class="{'create-change-wizard__auto-assign':draftTicket.autoAssignManager}">
|
|
<div>
|
|
<img ng-if="draftTicket.manager.id && !draftTicket.autoAssignManager" alt="{{draftTicket.manager.fullName}}" class="ticket-assignee__thumbnail" imgplaceholder="user"
|
|
thumbnail-img="{{'data:' + draftTicket.manager.thumbnailMime + ';base64,' + draftTicket.manager.thumbnail}}" />
|
|
<span ng-if="!draftTicket.manager.id && !draftTicket.autoAssignManager" class="ticket-assignee__none icon-question_circle"></span>
|
|
|
|
<div class="ticket-assignee__info">
|
|
<div class="ticket__label-small">{{ 'create.change.wizard.basicDetails.changeManager' | i18n }}</div>
|
|
<span class="auto-assign__text" ng-if="draftTicket.autoAssignManager">
|
|
{{ 'create.ticket.auto.assign' | i18n }}
|
|
</span>
|
|
<span ng-if="!draftTicket.manager.id && !draftTicket.autoAssignManager" class="ticket__field-value">{{'common.label.noneYet' | i18n }}</span>
|
|
<span ng-if="draftTicket.manager.id && !draftTicket.autoAssignManager" class="ticket__field-value">{{draftTicket.manager.fullName}}</span>
|
|
</div>
|
|
|
|
<div class="ticket-assignee__support-group" ng-if="!draftTicket.autoAssignManager">
|
|
<div class="ticket__label-small">{{'common.labels.supportGroup' | i18n}}</div>
|
|
<span class="ticket__field-value">{{ draftTicket.managerGroup.name || ('common.label.noneYet' | i18n ) }}</span>
|
|
</div>
|
|
|
|
<div class="ticket-incident-assignee__action" ng-click="assignToMe($event, 'changemanager')" ng-enter="assignToMe($event, 'changemanager')" ng-if="draftTicket.manager.id !== loggedInUserId">
|
|
<i class="icon-user_plus"></i>
|
|
<a aria-label="{{ 'create.change.wizard.basicDetails.changeManager' | i18n }} {{'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>
|
|
<div class="col-sm-12 create-ticket__section-separator"></div>
|
|
<div class="col-sm-12">
|
|
<span class="label__text">
|
|
{{'create.change.wizard.basicDetails.impactedAreas.title' | i18n}}
|
|
</span>
|
|
</div>
|
|
<div class="col-sm-9" ng-show="draftTicket.impactedAreas && draftTicket.impactedAreas.length > 0">
|
|
<impacted-areas ticket="draftTicket" removable="true"></impacted-areas>
|
|
</div>
|
|
<div class="col-sm-10">
|
|
<impacted-areas-editor ticket="draftTicket"></impacted-areas-editor>
|
|
</div>
|
|
<div class="col-sm-12">
|
|
<custom-field-container ticket="draftTicket" fields="basicsCustomFields"></custom-field-container>
|
|
</div>
|
|
</form>
|
|
</div>
|