SmartIT_Extensions/BMC/smart-it-full/views/ticket/edit-status-action-blade.html

465 lines
22 KiB
HTML

<div role="dialog" aria-labelledby="modalLabel">
<form name="editStatusForm">
<span class="modal-content__508-hidden-span">{{'common.labels.508BeginContent' | i18n}}</span>
<div class="action-blade__header">
<h2 ng-if="!isReopen" id="modalLabel" class="action-blade__title">{{'ticket.updateStatusBlade.title' | i18n}}</h2>
<h2 ng-if="isReopen" id="modalLabel" class="action-blade__title">{{'controls.action.reopen' | i18n}} {{'common.labels.' + ticket.type | i18n}}</h2>
</div>
<div class="action-blade__body" role="main">
<div loading-spinner if="state.processing || state.updatingStatus" overlay="true" centered="true"></div>
<div ng-if="!state.processing" class="update-status__action-blade">
<!--relase code start here -->
<div ng-if="ticket.type === 'release'">
<!--milestone start-->
<div class="clearfix">
<div class="update-status__selector">
<!--<div class="update-status__prev-button">
<button type="button" class="btn_secondary" ng-click="switchState('prev', ticket.type)"
ng-disabled="checkStatusSwitcherIsDisabled('prev', ticket.type)">
<i class="icon-angle_left"></i>
{{"common.labels.prev" | i18n}}
</button>
</div>-->
<div ng-if="!isReopen" class="update-status__dropdown">
<label class="label_control-wrap">
<span class="label__text required__label"
data-required="{{'common.label.required.bracketed' | i18n}}">
{{"release.detail.milestone" | i18n }}
</span>
<selection selection-items="availableMilestoneStatuses"
selected-item="selected.milestone"
selection-callback="changeMileStone(item,ticket.type,true)"
autofocus
title-text="{{'common.labels.' + ticket.type | i18n}} {{'ticket.status' | i18n}}"
aria-required="true"
required="true"
label="label"
disabled-selection="selected.isDisabled"
value="label">
</selection>
</label>
</div>
<!--<div class="update-status__next-button">
<button type="button" class="btn_secondary" ng-click="switchState('next', ticket.type)"
ng-disabled="checkStatusSwitcherIsDisabled('next', ticket.type)">
{{"common.labels.next" | i18n}}
<i class="icon-angle_right"></i>
</button>
</div>-->
</div>
</div>
<!--milestone end-->
<div class="release_edit_status_sections">
<div class="col-xs-6">
<div >
<div ng-if="!isReopen" >
<label class="label_control-wrap">
<span class="label__text required__label"
data-required="{{'common.label.required.bracketed' | i18n}}">
{{'common.labels.' + ticket.type | i18n}} {{'ticket.status' | i18n}}
</span>
<selection selection-items="availableStatuses"
selected-item="selected.status"
selection-callback="changeStatus(item)"
autofocus
title-text="{{'common.labels.' + ticket.type | i18n}} {{'ticket.status' | i18n}}"
aria-required="true"
required="true"
label="label"
disabled-selection="selected.isDisabled"
value="label">
</selection>
</label>
</div>
</div>
</div>
<div class="col-xs-6">
<div ng-if="selected.status.statusReasons.length">
<label class="label_control-wrap">
<span class="label__text"
ng-class="{'required__label': isFieldRequired('statusReason')}"
data-required="{{'common.label.required.bracketed' | i18n}}">
{{'ticket.updateStatusBlade.statusReason' | i18n}}
</span>
<selection selection-items="selected.status.statusReasons"
selected-item="selected.statusReason"
selection-callback="changeStatusReason(item)"
title-text="{{'ticket.updateStatusBlade.statusReason' | i18n}}"
aria-required="isFieldRequired('statusReason')"
required="isFieldRequired('statusReason')"
first-item-empty="!isFieldRequired('statusReason')"
label="label"
value="label">
</selection>
</label>
</div>
</div>
</div>
</div>
<!--release cod end here -->
<div ng-if="ticket.type !== 'release'">
<div class="clearfix">
<div class="update-status__selector">
<div class="update-status__prev-button"
ng-if="ticket.type === 'change' || ticket.type === 'problem' || ticket.type === 'knownerror'">
<button type="button" class="btn_secondary" ng-click="switchState('prev', ticket.type)"
ng-disabled="checkStatusSwitcherIsDisabled('prev', ticket.type)">
<i class="icon-angle_left"></i>
{{"common.labels.prev" | i18n}}
</button>
</div>
<div ng-if="!isReopen" class="update-status__dropdown">
<label class="label_control-wrap">
<span class="label__text required__label"
data-required="{{'common.label.required.bracketed' | i18n}}">
{{'common.labels.' + ticket.type | i18n}} {{'ticket.status' | i18n}}
</span>
<selection selection-items="availableStatuses"
selected-item="selected.status"
selection-callback="changeStatus(item)"
autofocus
title-text="{{'common.labels.' + ticket.type | i18n}} {{'ticket.status' | i18n}}"
aria-required="true"
required="true"
label="label"
disabled-selection="selected.isDisabled"
value="label">
</selection>
</label>
</div>
<div class="update-status__next-button"
ng-if="ticket.type === 'change' || ticket.type === 'problem' || ticket.type === 'knownerror'">
<button type="button" class="btn_secondary" ng-click="switchState('next', ticket.type)"
ng-disabled="checkStatusSwitcherIsDisabled('next', ticket.type)">
{{"common.labels.next" | i18n}}
<i class="icon-angle_right"></i>
</button>
</div>
</div>
</div>
<div class="clearfix">
<div ng-if="!isReopen && selected.status.statusReasons.length" class="col-xs-6 update-status__section">
<label class="label_control-wrap">
<span class="label__text"
ng-class="{'required__label': isFieldRequired('statusReason')}"
data-required="{{'common.label.required.bracketed' | i18n}}">
{{'ticket.updateStatusBlade.statusReason' | i18n}}
</span>
<selection selection-items="selected.status.statusReasons"
selected-item="selected.statusReason"
selection-callback="changeStatusReason(item)"
title-text="{{'ticket.updateStatusBlade.statusReason' | i18n}}"
aria-required="isFieldRequired('statusReason')"
required="isFieldRequired('statusReason')"
show-clear="!isFieldRequired('statusReason')"
label="label"
value="label">
</selection>
</label>
</div>
</div>
</div>
<div ng-if="selected.status.name && !isReopen" class="action-blade__message">
<span ng-if="selected.status.name == 'Cancelled' && ticket.type != 'knowledge'">{{'action.ticket.cancel.message' | i18n: ('common.labels.'+ ticket.type | i18n) }}</span>
<span ng-if="selected.status.name == 'Closed'">{{'action.ticket.close.message' | i18n: ('common.labels.'+ ticket.type | i18n) }}</span>
</div>
<div ng-if="ticket.type == 'incident' && selected.status.name && isReopen" class="action-blade__message">
<span>{{'action.incident.reopen.message' | i18n }}</span>
</div>
<div ng-if="selected.status.name && needResolutionNote() && !isReopen" class="clearfix">
<div class="update-status__section">
<label class="label_control-wrap">
<span class="label__text required__label"
data-required="{{'common.label.required.bracketed' | i18n}}">
{{'ticket.resolutionNote' | i18n}}
</span>
<textarea title="{{'ticket.placeholder.statusResolution' | i18n}}" class="textarea full-width" ng-model="selected.resolutionNote" rows="3"
aria-required="true" placeholder="{{'ticket.placeholder.statusResolution' | i18n}}"></textarea>
</label>
</div>
<categories-editor entity="ticket" categories="resCategories" dependent-categories="categories" class="update-status__section col-xs-6 category-editor__left" allow-location-company="allowLocationCompany"></categories-editor>
<categories-editor entity="ticket" categories="categories" dependent-categories="resCategories" class="update-status__section col-xs-6" allow-location-company="allowLocationCompany"></categories-editor>
</div>
<div ng-if="ticket.type == 'change'" class="update-status__change-fields">
<edit-ticket-dates ng-show="showDates"
ticket="ticket"
date-form="editStatusForm" only-show-required="true" ignore-access-mapping="true" make-schedule-dates-optional="!isChangeScheduleDatesRequired" make-actual-dates-optional="!isChangeActualDatesRequired">
</edit-ticket-dates>
<div ng-if="isFieldRequired('managerGroup')">
<div class="col-xs-6">
<label class="label_control-wrap">
<span class="label__text" ng-class="{'required__label' : !isOptional.managerGroup}" data-required="{{'common.label.required.bracketed' | i18n}}">
{{'change.detail.managerGroup' | i18n}}
</span>
<selection selection-items="supportGroups"
selected-item="selected.group"
selection-callback="updateGroup(item)"
title-text="{{'change.detail.managerGroup' | i18n}}"
aria-required="!isOptional.managerGroup"
required="!isOptional.managerGroup"
label="name"
value="name">
</selection>
</label>
</div>
<div class="col-xs-6">
<label class="label_control-wrap">
<span class="label__text" ng-class="{'required__label' : !isOptional.manager}" data-required="{{'common.label.required.bracketed' | i18n}}">
{{'change.detail.manager' | i18n}}
</span>
<selection selection-items="supportGroupPersons"
selected-item="selected.manager"
selection-callback="updateManager(item)"
title-text="{{'change.detail.manager' | i18n}}"
aria-required="!isOptional.manager"
required="!isOptional.manager"
loading-flag="state.loadingSupportPersons"
label="fullName"
value="fullName">
</selection>
</label>
</div>
</div>
</div>
<div ng-if="ticket.type == 'problem' && !isDraft">
<div ng-if="isFieldRequired('targetDate')" class="update-status__section">
<label class="label_control-wrap">
<span id="targetDateLabel" class="label__text" ng-class="{'required__label' : !isOptional.targetDate}"
data-required="{{'common.label.required.bracketed' | i18n}}">
{{'create.ticket.target.date' | i18n}}
</span>
<div>
<div class="custom-field__time">
<input required="!isOptional.targetDate"
type="text"
aria-labelledby="targetDateLabel"
title="{{'common.label.date' | i18n}}"
class="form-control"
datepicker-popup="mediumDate"
ng-model="selected.targetDate"
show-button-bar="false"
datepicker-options="datePickerOptions"
is-open="ticket.targetDatePicker.open"
ng-click="ticket.targetDatePicker.open = true"
ng-enter="ticket.targetDatePicker.open = true"/>
<i class="icon-calendar custom-field__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" type="text" value="{{ selected.targetDate | date: 'shortTime' }}"
title="{{'common.label.time' | i18n}}" aria-labelledby="targetDateLabel" readonly="readonly"/>
<i class="icon-clock_o custom-field__time-icon"></i>
</div>
<div class="dropdown-menu" prevent-click-event>
<timepicker ng-model="selected.targetDate"
show-meridian="showMeridian"
default-hours="12"
default-minutes="0">
</timepicker>
</div>
</div>
</div>
</div>
</label>
</div>
<div ng-if="isFieldRequired('coordinator')" class="update-status__assignment col-xs-6">
<div class="col-xs-12">
<label class="label_control-wrap">
<span class="label__text" ng-class="{'required__label' : !isOptional.coordinatorGroup}">
{{'common.labels.coordinatorCompany' | i18n}}
</span>
<selection selection-items="companies"
selected-item="coordinatorCompany"
selection-callback="selectCoordinatorCompany(item)"
title-text="{{'assignBlade.filter.company' | i18n}}"
label="name"
value="name"
selection-filter="true"
selection-filter-placeholder-text="assignBlade.searchCompany"
typeahead-mode="state.tooManySupportCompanies"
typeahead-details="company as company.name for company in getList($viewValue)"
typeahead-get-list="getCompaniesByName(name)">
</selection>
</label>
</div>
<div class="col-xs-12">
<label class="label_control-wrap">
<span class="label__text" ng-class="{'required__label' : !isOptional.coordinatorGroup}">
{{'common.labels.coordinatorOrganization' | i18n}}
</span>
<selection selection-items="coordinatorOrganizations"
selected-item="coordinatorOrganization"
selection-callback="selectCoordinatorOrganization(item)"
title-text="{{'assignBlade.filter.organization' | i18n}}"
label="name"
value="name"
duplicate-key="companyName"
selection-filter="true"
selection-filter-placeholder-text="assignBlade.searchOrganization"
typeahead-mode="state.tooManySupportOrganizations"
typeahead-details="org as org.name for org in getList($viewValue)"
typeahead-get-list="getSupportOrganizationsByTextAndCompany(name, 'coordinatorCompany')">
</selection>
</label>
</div>
<div class="col-xs-12">
<label class="label_control-wrap">
<span class="label__text" ng-class="{'required__label' : !isOptional.coordinatorGroup}"
data-required="{{'common.label.required.bracketed' | i18n}}">
{{'common.labels.coordinatorGroup' | i18n}}
</span>
<selection selection-items="coordinatorSupportGroups"
selected-item="selected.group"
selection-callback="updateGroup(item)"
title-text="{{'common.labels.coordinatorGroup' | i18n}}"
aria-required="!isOptional.coordinatorGroup"
required="!isOptional.coordinatorGroup"
label="name"
value="name"
selection-filter="true"
selection-filter-placeholder-text="assignBlade.searchGroup"
typeahead-mode="state.tooManySupportGroups"
typeahead-details="group as group.name for group in getList($viewValue)"
typeahead-get-list="getSupportGroupsForAllCompanyByName(name, 'supportGroup')"
loading-flag="state.loadingSupportGroups">
</selection>
</label>
</div>
<div class="col-xs-12">
<label class="label_control-wrap">
<span class="label__text" ng-class="{'required__label' : !isOptional.coordinator}"
data-required="{{'common.label.required.bracketed' | i18n}}">
{{'problem.details.coordinator' | i18n}}
</span>
<selection selection-items="supportGroupPersons"
selected-item="selected.manager"
selection-callback="updateManager(item)"
title-text="{{'problem.details.coordinator' | i18n}}"
loading-flag="state.loadingSupportPersons"
aria-required="!isOptional.coordinator"
required="!isOptional.coordinator"
label="fullName"
value="fullName">
</selection>
</label>
</div>
</div>
<div ng-if="isFieldRequired('assignee') || isFieldRequired('supportGroup')" class="update-status__assignment col-xs-6">
<div class="col-xs-12">
<label class="label_control-wrap">
<span class="label__text" ng-class="{'required__label' : !isOptional.assigneeGroup}">
{{'assignBlade.filter.company' | i18n}}
</span>
<selection selection-items="companies"
selected-item="assigneeCompany"
selection-callback="selectAssigneeCompany(item)"
title-text="{{'assignBlade.filter.company' | i18n}}"
label="name"
value="name"
selection-filter="true"
selection-filter-placeholder-text="assignBlade.searchCompany"
typeahead-mode="state.tooManyAssigneeCompanies"
typeahead-details="company as company.name for company in getList($viewValue)"
typeahead-get-list="getCompaniesByName(name)">
</selection>
</label>
</div>
<div class="col-xs-12">
<label class="label_control-wrap" ng-class="{'required__label' : !isOptional.assigneeGroup}">
<span class="label__text">
{{'assignBlade.filter.organization' | i18n}}
</span>
<selection selection-items="assigneeOrganizations"
selected-item="assigneeOrganization"
selection-callback="selectAssigneeOrganization(item)"
title-text="{{'assignBlade.filter.organization' | i18n}}"
label="name"
value="name"
duplicate-key="companyName"
selection-filter="true"
selection-filter-placeholder-text="assignBlade.searchOrganization"
typeahead-mode="state.tooManyAssigneeOrganizations"
typeahead-details="org as org.name for org in getList($viewValue)"
typeahead-get-list="getSupportOrganizationsByTextAndCompany(name, 'assigneeCompany')">
</selection>
</label>
</div>
<div class="col-xs-12">
<label class="label_control-wrap">
<span class="label__text" ng-class="{'required__label' : !isOptional.assigneeGroup}"
data-required="{{'common.label.required.bracketed' | i18n}}">
{{'common.labels.supportGroup' | i18n}}
</span>
<selection selection-items="assigneeGroups"
selected-item="selected.assigneeGroup"
selection-callback="updateAssigneeGroup(item)"
title-text="{{'common.labels.supportGroup' | i18n}}"
aria-required="!isOptional.assigneeGroup"
required="!isOptional.assigneeGroup"
label="name"
value="name"
selection-filter="true"
selection-filter-placeholder-text="assignBlade.searchGroup"
typeahead-mode="state.tooManyAssigneeGroups"
typeahead-details="assigneeGroup as assigneeGroup.name for assigneeGroup in getList($viewValue)"
typeahead-get-list="getSupportGroupsForAllCompanyByName(name, 'assigneeGroup')"
loading-flag="state.loadingAssigneeGroups">
</selection>
</label>
</div>
<div class="col-xs-12">
<label class="label_control-wrap">
<span class="label__text" ng-class="{'required__label': (isFieldRequired('assignee') && !isOptional.assignee)}"
data-required="{{'common.label.required.bracketed' | i18n}}">
{{'common.labels.assignedTo' | i18n}}
</span>
<selection selection-items="assignees"
selected-item="selected.assignee"
selection-callback="updateAssignee(item)"
title-text="{{'common.labels.assignedTo' | i18n}}"
loading-flag="state.loadingAssignees"
aria-required="isFieldRequired('assignee') && !isOptional.assignee"
required="isFieldRequired('assignee') && !isOptional.assignee"
label="fullName"
value="fullName">
</selection>
</label>
</div>
</div>
</div>
<div class="update-status__section col-xs-12">
<label class="label_control-wrap">
<span class="label__text">
{{'ticket.statusNote' | i18n}}
</span>
<textarea title="{{'ticket.placeholder.statusNote' | i18n}}" class="textarea full-width" ng-model="selected.worknote" rows="3" placeholder="{{'ticket.placeholder.statusNote' | i18n}}"></textarea>
</label>
<div ng-if="(showDates && showChangeUpdateWarning) || showUpdateWarningForRequired" class="ticket-summary__character-limit_warning">{{'console.ticket.changeStatus.warning' | i18n}}</div>
</div>
</div>
<div class="action-blade__disabledSave-error">
<div ng-if="fixScheduledDates">{{'change.detail.status.scheduledForApproval.scheduledDatedError' | i18n}}</div>
<div ng-if="noChangeManagerLoginId">{{'change.detail.status.scheduledForApproval.managerError' | i18n}}</div>
</div>
</div>
</form>
<div class="action-blade__footer clearfix" role="region" aria-label="{{'common.region.action' | i18n}}">
<div class="action-blade__button-container">
<button type="submit" class="btn_primary" ng-if="!isReopen" ng-disabled="!selected.status.label || isSaveButtonDisabled() || state.updatingStatus || editStatusForm.$invalid || noChangeManagerLoginId || fixScheduledDates" ng-click="submit()">{{'common.button.save' | i18n}}</button>
<button type="submit" class="btn_primary" ng-if="isReopen" ng-disabled="!selected.status.label || state.updatingStatus" ng-click="submit()">{{'controls.action.reopen' | i18n}}</button>
<button type="button" class="btn_secondary" ng-click="close()" ng-disabled="state.updatingStatus">{{'common.button.cancel' | i18n}}</button>
</div>
</div>
<span class="modal-content__508-hidden-span">{{'common.labels.508EndContent' | i18n}}</span>
</div>