408 lines
24 KiB
HTML
408 lines
24 KiB
HTML
<div loading-spinner if="state.dataIsLoading" centered="true" overlay="true"></div>
|
|
|
|
<!-- TODO: extract this block to directive -->
|
|
<div class="ticket__not-found" ng-if="!state.dataIsLoading && !basicData.id">
|
|
<h3>{{'change.details.notFound' | i18n:(basicData.id)}}</h3>
|
|
</div>
|
|
|
|
<div class="ticket-details" ng-class="{'ticket__header-edit': editHeader}" ng-if="!state.dataIsLoading && basicData.id"
|
|
aria-label="{{'common.button.change' | i18n}} {{'ticket.region.details' | i18n}}" role="region">
|
|
<div class="ticket__header_change clearfix">
|
|
|
|
<!--Ticket header section-->
|
|
<editable-content-section id="ticket-header" class="custom-edit-button" hide-edit-button="editDisabledFor('ticket-header')"
|
|
edit-mode-allowed="isFullVersion && basicData.accessMappings.summaryEditAllowed" aria-label="{{'ticket.region.header' | i18n}}"
|
|
edit-button-label = "'header'" role="region" tabindex="0">
|
|
|
|
<div ng-if="!editMode" class="ticket__management-change clearfix" ng-class="{'highlight-section':!basicData.summary}">
|
|
<!-- TODO: extract common blocks to directive -->
|
|
<div class="ticket__basic-info">
|
|
<div>
|
|
<!--TODO: extract control bar items to separate directives-->
|
|
<div class="change-controls" ng-if="isFullVersion">
|
|
<div class="profile-action-bar__item edit-ticket-header-button" ng-if="basicData.accessMappings.summaryEditAllowed"
|
|
title="{{'controls.action.edit' | i18n}}" aria-label="{{'common.aria.label.edit.header' | i18n}}" role="link" tabindex="0"
|
|
ng-click="handleExternalEditClick()" ng-enter="handleExternalEditClick()">
|
|
<i class="icon-pencil"></i>
|
|
</div>
|
|
<div class="profile-action-bar__item dropdown" title="{{'controls.action.share' | i18n}}">
|
|
<button type="button" class="btn_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 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 ng-class="{'profile-action-bar__item': true, 'profile-action-bar__item_text' : !userModel.isAccessibleUser}"
|
|
ng-if="(basicData.accessMappings.restartActionAllowed && basicData.status.value=='Rejected') ||
|
|
(basicData.accessMappings.restartActionAllowed && basicData.status.value=='Cancelled') ||
|
|
basicData.accessMappings.resumeActionAllowed">
|
|
<button type="button" ng-if="basicData.accessMappings.restartActionAllowed && basicData.status.value=='Rejected'"
|
|
title="{{'action.change.restart.tooltip.rejected' | i18n : (basicData.previousStatus.value | localizeLabel: 'status':'change')}}" ng-click="ticketActions.applyAction('restart')" class="font-size-l btn_link">
|
|
{{'controls.action.restart' | i18n}}
|
|
</button>
|
|
<button type="button" ng-if="basicData.accessMappings.restartActionAllowed && basicData.status.value=='Cancelled'"
|
|
title="{{'action.change.restart.tooltip.cancelled' | i18n}}" ng-click="ticketActions.applyAction('restart')" class="font-size-l btn_link">
|
|
{{'controls.action.restart' | i18n}}
|
|
</button>
|
|
<button type="button" ng-if="basicData.accessMappings.resumeActionAllowed"
|
|
title="{{'action.change.resume.tooltip' | i18n : (basicData.previousStatus.value | localizeLabel: 'status':'change')}}" ng-click="ticketActions.applyAction('resume')" class="font-size-l btn_link">
|
|
{{'controls.action.resume' | i18n}}
|
|
</button>
|
|
</div>
|
|
<launch-actions-dropdown ng-if="!isDraft" class="profile-action-bar__item profile-action-bar__item_text profile-action-bar__item-more-actions" context="basicData" drop-down-options="moreDropDownOptions"></launch-actions-dropdown>
|
|
</div>
|
|
|
|
<div class="change-header__summary" ng-if="isFullVersion" title="{{basicData.summary}}">{{basicData.summary}}</div>
|
|
<div class="change-header__summary" ng-if="!isFullVersion" title="{{basicData.summary}}"><a class="ticket__summary" href="#/change/{{basicData.id}}">{{basicData.summary}}</a></div>
|
|
|
|
</div>
|
|
|
|
<div class="pull-left ticket__basic-info_left">
|
|
<div class="ticket__icon">
|
|
<span ng-class="basicData.brokerVendorName ? 'icon-files_arrows' : (basicData.isAutomatic ? 'icon-files_change_auto' : 'icon-files_change_o')"></span>
|
|
</div>
|
|
|
|
<div class="ticket__information">
|
|
<div class="ticket__name" ng-if="isFullVersion">{{'change.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.viewFullChange' | i18n}}" ng-if="!isFullVersion" href="#/change/{{basicData.id}}">{{'search.preview.viewFullChange' | i18n}}</a>
|
|
<risk-level-badge risk-level="basicData.riskLevelCopy || basicData.riskLevel"></risk-level-badge>
|
|
<div ticket-priority-display priority-value="{{basicData.priority | lowercase}}">
|
|
{{ basicData.priority | localizeLabel: 'priority':'change' }}
|
|
</div>
|
|
<div class="ticket__change-class">
|
|
{{'create.change.template.timing' | i18n : (ticket.timing | localizeLabel: 'timing': 'change')}}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
<form name="editChangeHeaderSection">
|
|
<edit-header ticket="basicData" metadata="metadata" ng-if="editMode" update="ticketActions.editHeader(data)"></edit-header>
|
|
</form>
|
|
|
|
</editable-content-section>
|
|
|
|
<div class="clearfix" aria-label="{{'ticket.region.status' | i18n}}" role="region" tabindex="0">
|
|
<!-- TODO: extract common blocks to directive -->
|
|
<div class="change-header__status-selector" ng-click="!basicData.accessMappings.statusEditAllowed || ticketActions.editStatus($event)"
|
|
ng-enter="!basicData.accessMappings.statusEditAllowed || ticketActions.editStatus($event)" role="link" tabindex="0"
|
|
aria-label="{{'ticket.region.status' | i18n}} {{ basicData.status.value | localizeLabel: 'status':'change' }}">
|
|
<div class="dropdown-toggle ticket__status-value">
|
|
{{ basicData.status.value | localizeLabel: 'status':'change' }}
|
|
<i class="icon-angle_down ticket__status-icon"></i>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="change-header__lastupdated">{{'ticket.list.lastUpdated' | i18n : (basicData.modifiedDate | humanizedAbsoluteDateFormat)}}</div>
|
|
</div>
|
|
|
|
<div class="change-header__sla-section clearfix" aria-label="{{'ticket.region.status' | i18n}}" role="region" tabindex="0">
|
|
<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 class="ticket__body_change">
|
|
|
|
<!--Alert Carousel will be displayed based on presence of alerts-->
|
|
<alert-carousel basic-data="basicData" alert-details="alertDetails" collisions="collisions" impact-analysis-status="basicData.impactAnalysisStatus" ng-if="alertDetails.alertItems.length > 0" ></alert-carousel>
|
|
<!--Alert Carousel end-->
|
|
|
|
<!--Record details section-->
|
|
<editable-content-section id="ticket-record-summary" hide-edit-button="editDisabledFor('ticket-record-summary')" ticket="basicData"
|
|
edit-mode-allowed="isFullVersion && (basicData.accessMappings.detailsEditAllowed || basicData.accessMappings.requestedforEditAllowed || basicData.accessMappings.priorityEditAllowed || basicData.accessMappings.summaryEditAllowed)" aria-label="{{'ticket.region.details' | i18n}}" role="region" tabindex="0"
|
|
edit-button-label = "'details'">
|
|
<div class="change-details__desc">
|
|
<edit-summary ticket="basicData" context="'detail'"
|
|
class="editable-content-section-block" update-is-handled-by-parent="true" edit-disabled="!basicData.accessMappings.summaryEditAllowed">
|
|
</edit-summary>
|
|
</div>
|
|
|
|
<div class="change-details__section">
|
|
<form name="editChangeDetailsSection">
|
|
<change-details-editor ticket="basicData" metadata="metadata" class="editable-content-section-block" form="editChangeDetailsSection"></change-details-editor>
|
|
<div class="ticket__change-impacted-areas clearfix" ng-show="!editMode && ticket.impactedAreas && ticket.impactedAreas.length > 0">
|
|
<div class="ticket__change-impacted-areas-label">{{'create.change.wizard.basicDetails.impactedAreas.title' | i18n}}</div>
|
|
<impacted-areas ticket="basicData" removable="editMode"></impacted-areas>
|
|
</div>
|
|
<div class="ticket__change-impacted-areas clearfix" ng-show="(editMode && basicData.isInApproval)">
|
|
<div class="ticket__change-impacted-areas-label">{{'create.change.wizard.basicDetails.impactedAreas.title' | i18n}}</div>
|
|
<impacted-areas ticket="basicData" removable="false"></impacted-areas>
|
|
</div>
|
|
<div ng-show="editMode && !basicData.isInApproval">
|
|
<div class="label__text">{{'create.change.wizard.basicDetails.impactedAreas.title' | i18n}}</div>
|
|
</div>
|
|
<div ng-show="editMode && !basicData.isInApproval && basicData.impactedAreas && basicData.impactedAreas.length > 0">
|
|
<impacted-areas ticket="basicData" removable="editMode"></impacted-areas>
|
|
</div>
|
|
<div>
|
|
<impacted-areas-editor ticket="basicData" ng-show="editMode && !basicData.isInApproval" class="editable-content-section-block"></impacted-areas-editor>
|
|
</div>
|
|
<custom-field-area ticket="basicData" panel-id="changeRequestScreen.Basics"
|
|
update-is-handled-by-parent="true" class="editable-content-section-block">
|
|
</custom-field-area>
|
|
</form>
|
|
</div>
|
|
</editable-content-section>
|
|
|
|
<div class="ticket__assignment" aria-label="{{'ticket.region.assignment' | i18n}}" role="region" tabindex="0" ng-class="{'disable-edit': editDisabledFor('ticket-assignment')}">
|
|
<div class="editable-content-section__controls">
|
|
<div class="editable-content-section__edit-button" ng-if="isFullVersion && basicData.accessMappings.detailsEditAllowed" ng-click="ticketActions.assign($event)" ng-enter="ticketActions.assign($event)" aria-label="{{'common.aria.label.edit.assignment' | i18n}}" role="link" tabindex="0">
|
|
<i class="icon icon-pencil icon-edit_sml"></i> {{'controls.action.edit' | i18n}}
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="ticket__assignee col-sm-6">
|
|
<div class="col-sm-1">
|
|
<img ng-if="basicData.assignee.loginId" alt="{{basicData.assignee.fullName}}" class="ticket-assignee__thumbnail " user-availability="basicData.assignee" imgplaceholder="user"
|
|
thumbnail-img="{{'data:' + basicData.assignee.thumbnailMime + ';base64,' + basicData.assignee.thumbnail}}" />
|
|
<span ng-if="!basicData.assignee.loginId" class="ticket-assignee__none icon-question_circle"></span>
|
|
</div>
|
|
<div class="ticket-assignee__details">
|
|
<div class="ticket__label-small">{{'change.detail.changeCoordinator' | i18n }}</div>
|
|
<span ng-if="!basicData.assignee.loginId" class="ticket__field-value">{{'common.label.noneYet' | i18n }}</span>
|
|
<span ng-if="basicData.assignee.loginId" class="ticket__field-value">
|
|
<a aria-label="{{'change.detail.changeCoordinator' | i18n}} {{basicData.assignee.fullName}}"
|
|
href="#/person/{{basicData.assignee.id | escape}}">{{basicData.assignee.fullName}}</a>
|
|
</span>
|
|
<div class="ticket__label-small">{{'common.labels.coordinatorGroup' | i18n}}</div>
|
|
<span class="ticket__field-value">{{ basicData.supportGroup.name || ('common.label.noneYet' | i18n ) }}</span>
|
|
<div class="ticket-assignee__action" ng-if="basicData.accessMappings.coordinatorSelfAssignmentAllowed && basicData.assignee.id !== loggedInUserId"
|
|
ng-click="ticketActions.assignToMe($event, 'changecoordinator')" ng-enter="ticketActions.assign($event, 'changecoordinator')">
|
|
<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="ticket__assignee col-sm-6">
|
|
<div class="col-sm-1">
|
|
<img ng-if="basicData.manager.loginId" alt="{{basicData.manager.fullName}}" class="ticket-assignee__thumbnail " user-availability="basicData.manager" imgplaceholder="user"
|
|
thumbnail-img="{{'data:' + basicData.manager.thumbnailMime + ';base64,' + basicData.manager.thumbnail}}" />
|
|
<span ng-if="!basicData.manager.loginId" class="ticket-assignee__none icon-question_circle"></span>
|
|
</div>
|
|
<div class="ticket-assignee__details">
|
|
<div class="ticket__label-small">{{'change.detail.changeManager' | i18n }}</div>
|
|
<span ng-if="!basicData.manager.loginId" class="ticket__field-value">{{'common.label.noneYet' | i18n }}</span>
|
|
<span ng-if="basicData.manager.loginId" class="ticket__field-value">
|
|
<a aria-label="{{'change.detail.changeManager' | i18n}} {{basicData.manager.fullName}}"
|
|
href="#/person/{{basicData.manager.id | escape}}">{{basicData.manager.fullName}}</a>
|
|
</span>
|
|
<div class="ticket__label-small">{{'common.labels.supportGroup' | i18n}}</div>
|
|
<span class="ticket__field-value">{{ basicData.managerGroup.name || ('common.label.noneYet' | i18n ) }}</span>
|
|
<div class="ticket-assignee__action" ng-if="basicData.accessMappings.managerSelfAssignmentAllowed && basicData.manager.id !== loggedInUserId"
|
|
ng-click="ticketActions.assignToMe($event, 'changemanager')" ng-enter="ticketActions.assign($event, 'changemanager')">
|
|
<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>
|
|
</div>
|
|
|
|
<div class="ticket__dates" aria-label="{{'ticket.region.scheduledDates' | i18n}}" role="region" tabindex="0" ng-class="{'disable-edit': editDisabledFor('ticket-record-dates')}">
|
|
<div class="editable-content-section__controls">
|
|
<div class="editable-content-section__edit-button" ng-if="isFullVersion && basicData.accessMappings.detailsEditAllowed" ng-click="editDatesView()" ng-enter="editDatesView()"
|
|
role="link" tabindex="0" aria-label="{{'common.aria.label.edit.dates' | i18n}}">
|
|
<i class="icon icon-pencil icon-edit_sml"></i> {{'controls.action.edit' | i18n}}
|
|
</div>
|
|
</div>
|
|
<div class="ticket__change-dates clearfix" aria-label="{{'create.change.wizard.tabs.dates' | i18n}}" role="region" tabindex="0">
|
|
<display-ticket-dates ticket="basicData" ng-if="!editMode"></display-ticket-dates>
|
|
<custom-field-area panel-id="changeRequestScreen.Dates" ticket="basicData"></custom-field-area>
|
|
</div>
|
|
</div>
|
|
|
|
<editable-content-section
|
|
id="ticket-record-risks"
|
|
ticket="basicData"
|
|
hide-edit-button="editDisabledFor('ticket-record-risks')"
|
|
edit-mode-allowed="isFullVersion && basicData.accessMappings.riskEditAllowed"
|
|
class="ticket__risks-content-section"
|
|
role="region" tabindex="0" aria-label="{{'ticket.region.risk' | i18n}}" edit-button-label = "'risk'">
|
|
|
|
<div class="ticket__risks">
|
|
<div class="ticket__risks-details row" ng-hide="editMode">
|
|
<div class="{{showRiskQuestions ? 'col-xs-2' : 'col-xs-12'}}">
|
|
<risk-level-badge risk-level="basicData.riskLevel" class="{{showRiskQuestions ? 'ticket__risk-level-expanded' : 'ticket__risk-level-collapsed'}}"></risk-level-badge>
|
|
<button ng-click="showRiskQuestions = !showRiskQuestions"
|
|
class="btn_link"
|
|
ng-show="!showRiskQuestions && basicData.questionResponses && basicData.questionResponses.length > 0">
|
|
{{'change.detail.risks.showQuestions' | i18n}}
|
|
<i class="icon-angle_down ticket__risks-angle-icon" aria-label="{{'change.detail.risks.showQuestions' | i18n}}"></i>
|
|
</button>
|
|
<button ng-click="showRiskQuestions = !showRiskQuestions"
|
|
ng-show="showRiskQuestions" class="btn_link">
|
|
{{'change.detail.risks.hideQuestions' | i18n}}
|
|
<i class="icon-angle_up ticket__risks-angle-icon" aria-label="{{'change.detail.risks.hideQuestions' | i18n}}"></i>
|
|
</button>
|
|
</div>
|
|
<div class="col-xs-10" ng-show="showRiskQuestions">
|
|
<div ng-repeat="answer in basicData.questionResponses" class="ticket__risk_question-answer">
|
|
<div class="ticket__risk_question">{{answer.questionText}}</div>
|
|
<div class="ticket__risk_answer">{{answer.displayValue}}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<form name="editRisksSection">
|
|
<div class="row">
|
|
<div class="col-xs-12 create-change-wizard__checkbox-container" ng-show="editMode">
|
|
<label class="label_control-wrap">
|
|
<div class="col-xs-1">
|
|
<input class="create-change-wizard__checkbox"
|
|
type="radio"
|
|
name="risk-method"
|
|
tabindex="0"
|
|
ng-model="draftTicket.riskLevelSelectionMode"
|
|
value="manual"/>
|
|
</div>
|
|
<div class="col-xs-10">
|
|
<h4>{{'create.change.wizard.risks.level.override' | i18n}}</h4>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-xs-12 create-change-wizard__checkbox-container" ng-show="editMode">
|
|
<label class="label_control-wrap">
|
|
<div class="col-xs-1">
|
|
<input class="create-change-wizard__checkbox"
|
|
type="radio"
|
|
name="risk-method"
|
|
tabindex="0"
|
|
ng-model="draftTicket.riskLevelSelectionMode"
|
|
value="auto"
|
|
ng-disabled="basicData.questionDefinitions.length == 0"/>
|
|
</div>
|
|
<div class="col-xs-10">
|
|
<h4>{{'create.change.wizard.risks.answerQuestion' | i18n}}</h4>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-xs-12 edit-change-wizard__risk-container" ng-show="draftTicket.riskLevelSelectionMode=='manual' && editMode">
|
|
<risk-level ticket="basicData" mode="draftTicket.riskLevelSelectionMode"
|
|
metadata="metadata" class="editable-content-section-block">
|
|
</risk-level>
|
|
</div>
|
|
<div class="col-xs-12 edit-change-wizard__risk-container" ng-show="(draftTicket.riskLevelSelectionMode=='auto' || (draftTicket.riskLevelSelectionMode=='' && basicData.questionDefinitions.length == 0)) && editMode">
|
|
<risk-questions ticket="basicData" mode="draftTicket.riskLevelSelectionMode" form="editRisksSection"
|
|
reload-if="reloadQuestions" class="editable-content-section-block" edit-mode="editMode">
|
|
</risk-questions>
|
|
</div>
|
|
<custom-field-area panel-id="changeRequestScreen.Risks" ticket="basicData"
|
|
update-is-handled-by-parent="true" class="editable-content-section-block custom-area_padded">
|
|
</custom-field-area>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</editable-content-section>
|
|
|
|
<change-profile-plans context="basicData" types="metadata.documentTypes" class="change" edit-mode-allowed="isFullVersion && basicData.accessMappings.timelineEditAllowed"></change-profile-plans>
|
|
|
|
<!-- Vendor Ticket information section -->
|
|
<div class="ticket__vendor-info-section" ng-if="basicData.brokerVendorName"
|
|
aria-label="{{'ticket.region.vendor.ticket.info' | i18n}}" role="region" tabindex="0">
|
|
<accordion close-others="true">
|
|
<div accordion-group
|
|
class="panel-default"
|
|
is-open="isOpen"
|
|
ng-repeat="vendorInfo in basicData.vendorInfo">
|
|
<accordion-heading>
|
|
<i ng-class="{'icon-angle_right': !isOpen, 'icon-angle_down': isOpen}"></i>
|
|
{{'ticket.vendor.label.header' | i18n : [basicData.brokerVendorName, vendorInfo.id] }}
|
|
</accordion-heading>
|
|
<div class="ticket__vendor-info-section-details col-sm-12">
|
|
<div class="col-sm-4 ticket__vendor-info-section-col">
|
|
<div class="ticket__label-small">{{'ticket.vendor.label.lastUpdate' | i18n}}</div>
|
|
<div class="ticket__field-value">
|
|
{{ vendorInfo.updated ? ((vendorInfo.updated | date:'mediumDate') + ' ' + (vendorInfo.updated | date:'shortTime')) : ('common.label.none' | i18n) }}
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-4 ticket__vendor-info-section-col">
|
|
<div class="ticket__label-small">{{'ticket.vendor.label.status' | i18n}}</div>
|
|
<div class="ticket__field-value">
|
|
{{ vendorInfo.status }}
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-4 ticket__vendor-info-section-col">
|
|
<div class="ticket__label-small">{{'ticket.vendor.label.assignee' | i18n}}</div>
|
|
<div class="ticket__field-value">
|
|
{{ vendorInfo.assignee }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="ticket__vendor-info-section-details col-sm-12">
|
|
<div class="ticket__label-small">{{'ticket.vendor.label.title' | i18n}}</div>
|
|
<div class="ticket__field-value">
|
|
{{ vendorInfo.title }}
|
|
</div>
|
|
</div>
|
|
<div class="ticket__vendor-info-section-details col-sm-12">
|
|
<div class="ticket__label-small">{{'ticket.vendor.label.description' | i18n}}</div>
|
|
<div class="ticket__field-value">
|
|
{{ vendorInfo.description }}
|
|
</div>
|
|
</div>
|
|
<div class="ticket__vendor-info-section-details col-sm-12">
|
|
<div class="ticket__vendor-info-section-custom-col col-sm-4"
|
|
ng-repeat="property in vendorInfo.properties">
|
|
<div class="ticket__label-small">{{property.name}}</div>
|
|
<div class="ticket__field-value" ng-if="property.type === 'text'">
|
|
{{ property.value }}
|
|
</div>
|
|
<div class="ticket__field-value" ng-if="property.type === 'date'">
|
|
{{ property.value ? ((property.value | date:'mediumDate') + ' ' + (property.value | date:'shortTime')) : ('common.label.none' | i18n) }}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</accordion>
|
|
</div>
|
|
|
|
<!-- Linked Items -->
|
|
<div ng-if="isFullVersion" class="profile__relation" aria-label="{{'ticket.region.relationship' | i18n}}" role="region" tabindex="0">
|
|
<tabset justified="true" class="tabset_short-relative-tabs">
|
|
<tab heading="{{'common.label.tasks' | i18n}} ({{relationCounters.tasks}})">
|
|
<change-tasks ticket="basicData" relation-counters="relationCounters"></change-tasks>
|
|
</tab>
|
|
<tab heading="{{'common.tabs.configurationItem' | i18n}} ({{relationCounters.CIs}})">
|
|
<related-item-list dependency="change-to-cis" context="basicData" is-draft="isDraft"></related-item-list>
|
|
</tab>
|
|
<tab heading="{{'common.tabs.linkedItems' | i18n}} ({{relationCounters.linkedItems}})">
|
|
<related-item-list dependency="ticket-to-all" context="basicData" is-draft="isDraft"></related-item-list>
|
|
</tab>
|
|
</tabset>
|
|
</div>
|
|
|
|
</div>
|
|
</div> |