SmartIT_Extensions/BMC/smart-it-full/views/ticket/service-request-details.html

248 lines
14 KiB
HTML

<div loading-spinner if="state.dataIsLoading" centered="true" overlay="true" xmlns="http://www.w3.org/1999/html"></div>
<div class="ticket__not-found" ng-if="!state.dataIsLoading && !basicData.id" tabindex="0">
<h3>{{'serviceRequest.details.notFound' | i18n}}</h3>
</div>
<div class="ticket-details" ng-if="!state.dataIsLoading && basicData.id" aria-label="{{'common.labels.request' | i18n}} {{'ticket.region.details' | i18n}}"
role="region">
<div class="ticket__header clearfix">
<div class="ticket__management clearfix" aria-label="{{'ticket.region.header' | i18n}}" role="region" tabindex="0">
<div class="ticket__basic-info">
<div class="service-request__summary-section row">
<div class="service-request__summary col-sm-11" ng-if="isFullVersion" title="{{basicData.summary}}">{{basicData.summary}}</div>
<div class="service-request__summary col-sm-11" ng-if="!isFullVersion" title="{{basicData.summary}}"><a class="ticket__summary" href="#/request/{{basicData.id}}">{{basicData.summary}}</a></div>
</div>
<div class="ticket__icon">
<span class="icon-files_o"></span>
</div>
<div class="ticket__information">
<div class="ticket__name" ng-if="isFullVersion">{{'serviceRequest.detail.summary.orderId.label' | i18n:(basicData.displayId || '')}}</div>
<div class="ticket__name" ng-if="!isFullVersion">{{basicData.displayId || ''}}</div>
<a class="ticket__name-link" aria-label="{{'search.preview.viewFullRequest' | i18n}}" ng-if="!isFullVersion" href="#/request/{{basicData.id}}">{{'search.preview.viewFullRequest' | i18n}}</a>
<div class="ticket__lastupdated">{{'ticket.list.lastUpdated' | i18n : (basicData.modifiedDate | humanizedAbsoluteDateFormat)}}</div>
</div>
<div class="ticket-controls" ng-if="isFullVersion">
<div class="profile-action-bar__item dropdown" title="{{'controls.action.share' | i18n}}">
<button type="button" class="btn_link profile-action-bar__item-link dropdown-toggle" aria-label="{{'controls.action.share' | i18n}}">
<i class="icon-share"></i>
</button>
<ul class="profile-action-bar__item-menu dropdown-menu">
<li>
<div class="dropdown-item" ng-click="ticketActions.share()" tabindex="0" role="menuitem">
{{'action.ticket.email' | i18n: ('common.labels.' + basicData.type | i18n) }}
</div>
</li>
<li ng-if='chatModel.connected'>
<a class="dropdown-item profile-action-bar__item-menu_start-chat" tabindex="0" role="menuitem">
{{'chat.startFromTicket.headerMenu' | i18n: ('common.labels.' + basicData.type | i18n) }}
</a>
</li>
</ul>
</div>
<div class="profile-action-bar__item" role="link" tabindex="0" ng-click="toggleFollowingFlag()" ng-enter="toggleFollowingFlag()"
title="{{(basicData.following? 'controls.action.unfollow' : 'controls.action.follow') | i18n}}"
aria-label="{{(basicData.following? 'controls.action.unfollow' : 'controls.action.follow') | i18n}}">
<i class="{{basicData.following? 'icon-star' : 'icon-star_o'}}"></i>
</div>
<div ng-if="!isDraft" title="{{'controls.action.print' | i18n}}" class="profile-action-bar__item"
aria-label="{{'controls.action.print' | i18n}}" role="link" tabindex="0"
ng-click="ticketActions.showPrintDialog($event)" ng-enter="ticketActions.showPrintDialog($event)">
<i class="{{'icon-printer'}}"></i>
</div>
<div class="profile-action-bar__item" role="link" tabindex="0" ng-click="refreshTicket()" ng-enter="refreshTicket()"
title="{{'common.labels.refresh' | i18n}}"
aria-label="{{'common.labels.refresh' | i18n}}">
<i class="icon-refresh"></i>
</div>
<div class="profile-action-bar__item profile-action-bar__item_text" ng-if="!isDraft && basicData.accessMappings.requestagainActionAllowed">
<button type="button" title="{{'action.request.requestagain.tooltip' | i18n}}"
ng-click="ticketActions.applyAction('requestagain')" class="btn_link service-request__requestagain-action">
{{'controls.action.requestagain' | i18n}}
</button>
</div>
<div class="profile-action-bar__item profile-action-bar__item_text" ng-if="!isDraft && basicData.status.value != 'Cancelled' && basicData.status.value != 'Closed'">
<button type="button" title="{{'action.request.reopen.tooltip' | i18n}}" class="btn_link service-request__reopen-action font-size-l"
ng-if="basicData.status.value == 'Completed' || basicData.status.value == 'Rejected' && basicData.accessMappings.reopenActionAllowed" ng-click="ticketActions.applyAction('reopen')">
{{'controls.action.reopen' | i18n}}
</button>
<button type="button" title="{{'action.request.cancel.tooltip' | i18n}}" class="btn_link service-request__cancel-action font-size-l"
ng-if="basicData.status.value != 'Completed' && basicData.status.value != 'Rejected' && basicData.accessMappings.cancelActionAllowed" ng-click="ticketActions.confirmAction('cancel')">
{{'controls.action.cancel' | i18n}}
</button>
</div>
</div>
</div>
</div>
<div class="ticket__status-section dropdown" aria-label="{{'ticket.region.status' | i18n}}" role="region" tabindex="0">
<div class="ticket__status-selector">
<div class="dropdown-toggle ticket__status-value">
{{ basicData.status.value | localizeLabel: 'status':'request' }}
<i class="icon-angle_down ticket__status-icon"></i>
</div>
</div>
<div class="ticket-status-section__sla-box clearfix" ng-if="!isDraft">
<div class="sla-progress-bar__wrapper">
<sla-progress-bar ticket="basicData" class="sla-progress-bar" ng-if="basicData.SLA.slaProgressBarValid"></sla-progress-bar>
</div>
<sla-reach-time sla="basicData.SLA"></sla-reach-time>
</div>
</div>
</div>
<div class="ticket__body" ng-class="{'service-request__show-approvals': basicData.approvalSummaries}">
<div ng-if="(basicData.approvalSummaries) &&((basicData.approvalList.open.length) || (basicData.approvalList.rejected.length)) " class="service-request__approvals"
role="region" tabindex="0" aria-label="{{'common.labels.approvalList' | i18n}}">
<span ng-if="basicData.approvalList.open.length">{{'serviceRequest.details.approvals' | i18n }}</span>
<span ng-if="(!basicData.approvalList.open.length) && (basicData.approvalList.rejected.length)">{{'serviceRequest.details.rejectedApprovals' | i18n }}</span>
<div class="pull-right service-request-approvers">
<span ng-if="basicData.approvalList.open.length">{{'serviceRequest.details.approved' | i18n:(basicData.approvalList.closed.length)}}, {{'serviceRequest.details.awaitingApproval' | i18n:(basicData.approvalList.open.length)}}<br /></span>
<b ng-if="isFullVersion" ng-click="ticketActions.showApprovalList()" ng-enter="ticketActions.showApprovalList()" tabindex="0" role="link">{{'approval.approversList.labels.showList' | i18n}}</b>
</div>
</div>
<div class="ticket__customer-card">
<person-info-card context="basicData" person-type="customer" person="basicData.customer" class="ticket__owner no-border" profile-type="incident"
label="basicData.contact.firstName? 'personInfoCard.person.caption.contactInfo' : ''"></person-info-card>
<div ng-show="basicData.contact.firstName" class="ticket__contact">
<div class="ticket__contact-header">
<a class="person-summary__full-name_link" href="#/person/{{basicData.contact.loginId | escape}}">{{basicData.contact.firstName}} {{basicData.contact.lastName}} </a>
<span> {{'ticket.contact.madeRequest'| i18n}}</span>
<span ng-click="isContactCollapsed = !isContactCollapsed" ng-enter="isContactCollapsed = !isContactCollapsed"
ng-class="{'icon-triangle_down':isContactCollapsed, 'icon-triangle_up':!isContactCollapsed}" aria-label="{{'person.details.contactInfo' | i18n}}" role="link" tabindex="0"></span>
</div>
<person-info-card context="basicData" person-type="contact" collapse="isContactCollapsed" profile-type="incident" person="basicData.contact"
label="'personInfoCard.person.caption.contact'"></person-info-card>
</div>
</div>
<div class="service-request__center-info clearfix" aria-label="{{'serviceRequest.details.requestCoordinator' | i18n}}" role="region" tabindex="0">
<div class="row service-request__col1">
<div class="service-request__coordinator">
<div class="ticket__assignee-thumbnail">
<img alt="{{basicData.assignee.fullName}}" class="ticket-assignee__thumbnail"
user-availability="basicData.assignee" thumbnail-img="{{'data:' + basicData.assignee.thumbnailMime + ';base64,' + basicData.assignee.thumbnail}}" imgplaceholder="user">
</div>
<span class="label__text">{{'serviceRequest.details.requestCoordinator'|i18n}}</span><br />
<b><a class="person-summary__full-name_link" href="#/person/{{basicData.assignee.loginId | escape}}"
aria-label="{{'serviceRequest.details.requestCoordinator'|i18n}} {{basicData.assignee.fullName}}" role="link">
{{basicData.assignee.fullName}} </a></b>
</div>
<div class="service-request__quantity" ng-if="!basicData.isAttributeHidden['quantity']">
<form name="forms.requestQuantity">
<label>
<span class="label__text" ng-class="{'required__label': isDraft}" data-required="{{'common.label.required.bracketed' | i18n}}">
{{'serviceRequest.details.quantity' | i18n}}
</span>
<div ng-if="!isDraft"><b>{{basicData.quantity}}</b></div>
<input type="number"
ng-if="isDraft"
aria-required="true"
title="{{ 'serviceRequest.details.quantity' | i18n }}"
class="custom-input service-request__quantity-input"
ng-model="basicData.quantity"
min="1"
required>
</label>
</form>
</div>
<div class="service-request__price " ng-if="!basicData.isAttributeHidden['price']">
<span class="label__text">{{'serviceRequest.details.price' | i18n}}</span>
<div><b>{{(basicData.quantity || 1) * basicData.price | number:2}} {{basicData.currency}}</b></div>
</div>
</div>
<div class="row service-request__col2">
<div class="service-request__expected-date" ng-if="basicData.expectedDate && !basicData.isAttributeHidden['expectedDate']">
<span class="label__text">{{'serviceRequest.details.expected.completion.date' | i18n}}</span>
<div><b>{{ basicData.expectedDate ? ((basicData.expectedDate | date:'mediumDate') + ' ' + (basicData.expectedDate| date:'shortTime')) : ('common.label.none' | i18n) }}</b></div>
</div>
<div ng-if="!isDraft && !basicData.isAttributeHidden['requiredDate']" class="service-request__expected-date">
<span class="label__text">{{'serviceRequest.details.required.date' | i18n}}</span>
<div><b>{{ basicData.requiredDate ? ((basicData.requiredDate | date:'mediumDate') + ' ' + (basicData.requiredDate| date:'shortTime')) : ('common.label.none' | i18n) }}</b></div>
</div>
<div ng-if="isDraft && !basicData.isAttributeHidden['requiredDate']" class="service-request__required-date create-ticket__date">
<label class="label_control-wrap">
<span id="requiredDate" class="label__text" field-name="requiredDate">
{{ 'serviceRequest.details.required.date' | i18n }}
</span>
<div class="create-ticket__date-time-item">
<div class="custom-field__date">
<input type="text"
title="{{'common.label.date' | i18n}}"
aria-labelledby="requiredDate"
class="form-control"
name="requiredDate"
datepicker-popup="mediumDate"
ng-model="basicData.requiredDate"
show-button-bar="false"
is-open="servReqRequiredDatePicker.open"
ng-click="openDatePicker(servReqRequiredDatePicker, $event)"
ng-enter="openDatePicker(servReqRequiredDate.servReqRequiredDatePicker)"
datepicker-options="servReqDatePickerOptions"
ng-change="updateDateTime('required')"/>
<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="{{ basicData.requiredDate | date: 'shortTime' }}"
ng-disabled="!basicData.requiredDate" title="{{'common.label.time' | i18n}}" aria-labelledby="requiredTime" readonly="readonly" />
<i class="icon-clock_o custom-field__time-icon"></i>
</div>
<div class="dropdown-menu" prevent-click-event ng-if="basicData.requiredDate">
<timepicker ng-model="basicData.requiredDate"
ng-change="updateDateTime()"
show-meridian="showMeridian"
default-hours="12"
default-minutes="0">
</timepicker>
</div>
</div>
</div>
</div>
</label>
</div>
</div>
</div>
<div class="service-request__definition-section clearfix" aria-label="{{'serviceRequest.details.requestDefinition' | i18n}}" role="region" tabindex="0">
<div class="service-request__definition">
<div class="service-request-definition-label label__text">{{'serviceRequest.details.requestDefinition'|i18n}}</div>
<div class="service-request-definition-name">{{basicData.requestTemplateTitle}}</div>
<div class="service-request-definition-label label__text">{{'serviceRequest.details.detailedDesc' | i18n}}</div>
<div class="service-request-definition-name service-request-definition-desc">{{basicData.desc}}</div>
</div>
<div class="service-request__questions">
<div ng-if="basicData.questionDefinitions || basicData.questionResponses" ng-include src="'views/template/srd-details.html'"></div>
<div ng-if="!isDraft && basicData.isCrossLaunchRequest && isFullVersion" class="service-request-definition-crosslaunchLabel">{{'serviceRequest.details.viewCustomFormDescText' | i18n}}</div>
<button type="button" ng-if="!isDraft && basicData.isCrossLaunchRequest && isFullVersion" ng-click="ticketActions.viewCustomForm()" class="service-request-definition-crosslaunchBtn small-btn_secondary">{{'serviceRequest.details.viewCustomForm' | i18n}}</button>
</div>
</div>
<div ng-if="isFullVersion" class="profile__relation clearfix" aria-label="{{'ticket.region.relationship' | i18n}}" role="region" tabindex="0">
<tabset justified="true" class="tabset_short-relative-tabs">
<tab heading="{{'serviceRequest.details.fulfillment' | i18n}}">
<fulfillment-map context="basicData" is-draft="isDraft"></fulfillment-map>
</tab>
</tabset>
</div>
</div>
</div>