1035 lines
43 KiB
HTML
1035 lines
43 KiB
HTML
<div class="create-asset clearfix">
|
|
<div class="create-form-wrapper">
|
|
<div loading-spinner class="create-ticket__loading-spinner" if="state.dataIsLoading" centered="true" overlay="true"></div>
|
|
|
|
<div class="clearfix">
|
|
|
|
<form name="createAssetForm" novalidate>
|
|
|
|
<div class="create-ticket__header create-asset__header" >
|
|
<h3 class="create-ticket__header-title">{{ 'create.asset.header' | i18n }}</h3>
|
|
<span ng-if="!state.selectType">{{ 'create.asset.sub.header' | i18n }}</span>
|
|
<span ng-if="state.selectType">{{ 'create.asset.type.sub.header' | i18n }}</span>
|
|
</div>
|
|
|
|
<div class="create-asset-wizard__content">
|
|
<div class="create-change-wizard__tab-bar">
|
|
<div class="create-change-wizard__tab-holder">
|
|
<div tabindex="0" ng-class="{'create-change-wizard__tab': !state.selectType, 'create-change-wizard__tab-active': state.selectType}"
|
|
ng-click="state.selectType=true" ng-enter="state.selectType=true">
|
|
<i class="icon-cube_o create-change-wizard__tab-icon"></i>
|
|
<span class="create-change-wizard__tab-title">
|
|
{{'common.labels.type' | i18n}}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="create-change-wizard__tab-holder">
|
|
<div tabindex="0" ng-class="{'create-change-wizard__tab': state.selectType, 'create-change-wizard__tab-active': !state.selectType}"
|
|
ng-click="state.selectType=false" ng-enter="state.selectType=false">
|
|
<i class="icon-file_info_o create-change-wizard__tab-icon"></i>
|
|
<h1 class="create-change-wizard__tab-invalid" ng-if="createAssetForm.$invalid">*</h1>
|
|
<span class="create-change-wizard__tab-title">
|
|
{{'create.asset.tab.otherInfo' | i18n}}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
<div class="create-asset-wizard__tab-spacer"><span></span></div>
|
|
</div>
|
|
<div class="create-change-wizard__tab-content">
|
|
<div ng-show="state.selectType" class="create-asset__full-width-section col-sm-4">
|
|
<div class="create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text required__label" data-required="{{'common.label.required.bracketed' | i18n}}">
|
|
{{'common.labels.type' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-ticket__item">
|
|
<selection selection-items="assetMetadata.assetTypes"
|
|
selected-item="asset.selectedType"
|
|
selection-callback="updateType()"
|
|
title-text="{{'common.labels.type' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
field-name="type"
|
|
entity="asset"
|
|
update-selected-item="true"
|
|
required="true"
|
|
aria-required="true">
|
|
</selection>
|
|
</div>
|
|
</label><br>
|
|
|
|
<label class="label_control-wrap">
|
|
<span class="label__text required__label" data-required="{{'common.label.required.bracketed' | i18n}}">
|
|
{{ 'common.labels.subtype' | i18n }}
|
|
</span>
|
|
|
|
<div class="create-ticket__item">
|
|
<selection selection-items="asset.selectedType.subType"
|
|
selected-item="asset.selectedSubtype"
|
|
selection-callback="updateSubtype()"
|
|
title-text="{{'common.labels.subtype' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
field-name="subtype"
|
|
entity="asset"
|
|
update-selected-item="true"
|
|
disabled-selection="!asset.selectedType || asset.selectedType.subType.length === 1"
|
|
required="true"
|
|
aria-required="true">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-4 create-ticket__section"></div>
|
|
</div>
|
|
<div ng-show="!state.selectType" class="create-asset__form">
|
|
<div class="create-ticket__full-width-section">
|
|
<div class="row">
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="name" entity="asset">
|
|
{{ 'create.asset.name' | i18n }}
|
|
</span>
|
|
<input type="text"
|
|
title="{{ 'create.asset.name' | i18n }}"
|
|
class="custom-input"
|
|
ng-model="asset.name"
|
|
placeholder="{{ 'create.asset.name.placeholder' | i18n }}"
|
|
potentially-required-field
|
|
field-name="name"
|
|
entity="asset">
|
|
</label>
|
|
</div>
|
|
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<div class="col-sm-4 create-ticket__section asset__secondary-attributes">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">
|
|
{{ 'common.labels.type' | i18n }}
|
|
</span>
|
|
<div>
|
|
{{asset.selectedType.label}}
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-4 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">
|
|
{{ 'common.labels.subtype' | i18n }}
|
|
</span>
|
|
<div>
|
|
{{asset.selectedSubtype.label}}
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-6">
|
|
<div class="row">
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="status.value" entity="asset">
|
|
{{ 'ticket.status' | i18n }}
|
|
</span>
|
|
<div class="create-ticket__item">
|
|
<selection selection-items="statuses"
|
|
selected-item="asset.selectedStatus"
|
|
selection-callback="updateStatusReason()"
|
|
title-text="{{'ticket.status' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
entity="asset"
|
|
update-selected-item="true"
|
|
field-name="status.value"
|
|
entity="asset">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="company.name" entity="asset">
|
|
{{ 'common.label.company' | i18n }}
|
|
</span>
|
|
<selection
|
|
selection-items="selections.companies"
|
|
selected-item="asset.company"
|
|
selection-callback="setCompany(item)"
|
|
title-text="{{ 'common.label.company' | i18n }}"
|
|
label="name"
|
|
value="name"
|
|
update-selected-item="true" auto-focus
|
|
selection-filter="true"
|
|
selection-filter-placeholder-text="{{ 'assignBlade.searchCompany' | i18n }}"
|
|
show-chunking-tooltip="true"
|
|
typeahead-mode="state.tooManyCompanies"
|
|
typeahead-details="company as company.name for company in getList($viewValue)"
|
|
typeahead-get-list="getCompaniesByName(name)"
|
|
field-name="company.name"
|
|
entity="asset"
|
|
show-clear=true
|
|
clear-callback="setCompany(item)">
|
|
</selection>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="row" ng-if="asset.selectedStatus.statusReasons">
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="status.reason" entity="asset">
|
|
{{ 'asset.attributes.statusReason' | i18n }}
|
|
</span>
|
|
<div class="create-ticket__item">
|
|
<selection selection-items="asset.selectedStatus.statusReasons"
|
|
selected-item="asset.selectedStatusReason"
|
|
title-text="{{'asset.attributes.statusReason' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
entity="asset"
|
|
update-selected-item="true"
|
|
field-name="status.reason"
|
|
entity="asset"
|
|
show-clear="true">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-6">
|
|
<div class="create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="tagNumber" entity="asset">
|
|
{{ 'asset.attributes.tag' | i18n }}
|
|
</span>
|
|
<input type="text"
|
|
title="{{ 'asset.attributes.tag' | i18n }}"
|
|
class="custom-input"
|
|
ng-model="asset.tagNumber"
|
|
placeholder="{{ 'create.asset.tagNumber.placeholder' | i18n }}"
|
|
potentially-required-field
|
|
field-name="tagNumber"
|
|
entity="asset">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- type specific area -->
|
|
<div class="create-ticket__full-width-section" ng-if="asset.selectedType.name === asset.advancedType">
|
|
<div class="row">
|
|
<div class="col-sm-3 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">{{'asset.attributes.hostName' | i18n}}</span>
|
|
<input type="text" class="text-input form-control" ng-model="asset.hostName">
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-3 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">
|
|
{{'asset.attributes.primaryCapability' | i18n}}
|
|
</span>
|
|
<selection selection-items="primaryCapabilities"
|
|
selected-item="asset.primaryCapability"
|
|
selection-callback="selectPrimaryCapability(item)"
|
|
title-text="{{'common.labels.startTyping' | i18n}}"
|
|
label="label"
|
|
value="value"
|
|
selection-filter="true"
|
|
show-chunking-tooltip="true"
|
|
typeahead-mode="state.tooManyPrimaryCapabilities"
|
|
typeahead-details="item as item.label for item in getList($viewValue)"
|
|
typeahead-get-list="getPrimaryCapabilitiesByName(name)">
|
|
</selection>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-3 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">{{'asset.attributes.capabilityList' | i18n}}</span>
|
|
<div class="dropdown-input full-width" dropdown>
|
|
<button type="button" class="dropdown-toggle dropdown-input__button">{{getCapabilities()}}</button>
|
|
<ul class="dropdown-menu full-width" vertical-fit="true">
|
|
<li class="dropdown-item_search-bar">
|
|
<i class="icon-search dropdown-item_search-icon"></i>
|
|
<input prevent-click-event="" class="dropdown-item_search" type="text" ng-model="capabilityFilterText" placeholder="{{'common.placeholder.search' | i18n}}">
|
|
</li>
|
|
<li ng-repeat="item in capabilityList | filter: {label: capabilityFilterText}">
|
|
<div ng-class="isCapabilityChecked(item) ? 'dropdown-item_selected' : 'dropdown-item'" role="menuitemcheckbox" aria-checked="{{subType.checked}}" title="{{item.label}}" ng-click="addCapability(item)" ng-enter="addCapability(item)" tabindex="0">
|
|
{{item.label}}
|
|
</div>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-3 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">{{'asset.attributes.systemType' | i18n}}</span>
|
|
<div class="create-ticket__item">
|
|
<selection selection-items="assetMetadata.systemType"
|
|
selected-item="asset.selectedSystemType"
|
|
title-text="{{'asset.attributes.systemType' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
entity="asset"
|
|
show-clear="true"
|
|
update-selected-item="true">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-3 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">
|
|
{{ 'asset.attributes.virtualSystemType' | i18n }}
|
|
</span>
|
|
<div class="create-ticket__item">
|
|
<selection selection-items="assetMetadata.virtualSystemType"
|
|
selected-item="asset.selectedVirtualSystemType"
|
|
title-text="{{'asset.attributes.virtualSystemType' | i18n | uppercase}}"
|
|
label="label"
|
|
value="label"
|
|
entity="asset"
|
|
show-clear="true"
|
|
update-selected-item="true">
|
|
</selection>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- end -->
|
|
<!-- type specific custom fields -->
|
|
<div class="create-ticket__full-width-section" ng-if="validTypeCustomFields.length">
|
|
<div class="row">
|
|
<custom-field-container ticket="asset" fields="validTypeCustomFields"></custom-field-container>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="create-ticket__full-width-section">
|
|
<div class="row">
|
|
<div class="col-sm-6">
|
|
<div class="row">
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="impact" entity="asset">
|
|
{{'asset.attributes.impact' | i18n}}
|
|
</span>
|
|
<selection selection-items="assetMetadata.impacts"
|
|
label="label"
|
|
value="label"
|
|
show-clear="true"
|
|
selection-callback="updateAssetField('impact',item)"
|
|
selected-item="asset.selectedImpact"
|
|
update-selected-item="true"
|
|
field-name="impact"
|
|
entity="asset">
|
|
</selection>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="urgency" entity="asset">
|
|
{{'asset.attributes.urgency' | i18n}}
|
|
</span>
|
|
<selection selection-items="assetMetadata.urgencies"
|
|
label="label"
|
|
value="label"
|
|
show-clear="true"
|
|
selection-callback="updateAssetField('urgency',item)"
|
|
selected-item="asset.selectedUrgency"
|
|
update-selected-item="true"
|
|
field-name="urgency"
|
|
entity="asset">
|
|
</selection>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="serialNumber" entity="asset">
|
|
{{ 'asset.attributes.serialNumber' | i18n }}
|
|
</span>
|
|
<input type="text"
|
|
title="{{ 'asset.attributes.serialNumber' | i18n }}"
|
|
class="custom-input"
|
|
ng-model="asset.serialNumber"
|
|
placeholder="{{ 'create.asset.serialNumber.placeholder' | i18n }}"
|
|
potentially-required-field
|
|
field-name="serialNumber"
|
|
entity="asset">
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="systemRole" entity="asset">
|
|
{{ 'asset.attributes.systemRole' | i18n }}
|
|
</span>
|
|
<input type="text"
|
|
title="{{ 'asset.attributes.systemRole' | i18n }}"
|
|
class="custom-input"
|
|
ng-model="asset.systemRole"
|
|
placeholder="{{ 'create.asset.systemRole.placeholder' | i18n }}"
|
|
potentially-required-field
|
|
field-name="systemRole"
|
|
entity="asset">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="assetId" entity="asset">
|
|
{{ 'asset.attributes.classId' | i18n }}
|
|
</span>
|
|
<input type="text"
|
|
title="{{ 'asset.attributes.classId' | i18n }}"
|
|
class="custom-input"
|
|
ng-model="asset.assetId"
|
|
placeholder="{{ 'create.asset.classId.placeholder' | i18n }}"
|
|
potentially-required-field
|
|
field-name="assetId"
|
|
entity="asset">
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="partNumber" entity="asset">
|
|
{{ 'asset.attributes.partNumber' | i18n }}
|
|
</span>
|
|
<input type="text"
|
|
title="{{ 'asset.attributes.partNumber' | i18n }}"
|
|
class="custom-input"
|
|
ng-model="asset.partNumber"
|
|
placeholder="{{ 'create.asset.partNumber.placeholder' | i18n }}"
|
|
potentially-required-field
|
|
field-name="partNumber"
|
|
entity="asset">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="manufacturer" entity="asset">
|
|
{{ 'asset.attributes.manufacturer' | i18n }}
|
|
</span>
|
|
<div class="relative-position">
|
|
<input type="text" class="text-input form-control"
|
|
ng-model="asset.manufacturer"
|
|
placeholder="{{'common.labels.startTyping' | i18n}}"
|
|
typeahead="item as item.name for item in getCompaniesByType($viewValue,'Manufacturer')"
|
|
typeahead-wait-ms="500"
|
|
typeahead-on-select="setCompanyByType($item, 'manufacturer')"
|
|
potentially-required-field
|
|
field-name="manufacturer"
|
|
entity="asset"
|
|
ng-blur="hideTooManyResultsMessage()"
|
|
uib-tooltip="{{'search.category.exceedsChunkSize' | i18n}}"
|
|
tooltip-is-open="isTooltipOpenManufacturer"
|
|
tooltip-enable="exceedsChunkSizeManufacturer"
|
|
tooltip-trigger="'none'"
|
|
tooltip-placement="auto"
|
|
typeahead-focus-first="false"
|
|
/>
|
|
<i class="icon-cross item-input__delete-btn" tabindex=0 role="link"
|
|
title="{{'common.button.clear' | i18n}} {{ 'asset.attributes.manufacturer' | i18n }}" ng-if="asset.manufacturer"
|
|
focus-input-on-clear ng-click="clearValuesByType('manufacturer')" ng-enter="clearValuesByType('manufacturer')">
|
|
</i>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="supplier" entity="asset">
|
|
{{ 'asset.attributes.supplier' | i18n }}
|
|
</span>
|
|
<div class="relative-position">
|
|
<input type="text" class="text-input form-control"
|
|
ng-model="asset.supplier"
|
|
placeholder="{{'common.labels.startTyping' | i18n}}"
|
|
typeahead="item as item.name for item in getCompaniesByType($viewValue,'Supplier')"
|
|
typeahead-wait-ms="500"
|
|
typeahead-on-select="setCompanyByType($item, 'supplier')"
|
|
potentially-required-field
|
|
field-name="supplier"
|
|
entity="asset"
|
|
ng-blur="hideTooManyResultsMessage()"
|
|
uib-tooltip="{{'search.category.exceedsChunkSize' | i18n}}"
|
|
tooltip-is-open="isTooltipOpenSupplier"
|
|
tooltip-enable="exceedsChunkSizeSupplier"
|
|
tooltip-trigger="'none'"
|
|
tooltip-placement="top"
|
|
typeahead-focus-first="false"
|
|
/>
|
|
<i class="icon-cross item-input__delete-btn" tabindex=0 role="link"
|
|
title="{{'common.button.clear' | i18n}} {{ 'asset.attributes.supplier' | i18n }}" ng-if="asset.supplier"
|
|
focus-input-on-clear ng-click="clearValuesByType('supplier')" ng-enter="clearValuesByType('supplier')">
|
|
</i>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="room" entity="asset">
|
|
{{ 'console.column.room' | i18n }}
|
|
</span>
|
|
<input type="text"
|
|
title="{{ 'console.column.room' | i18n }}"
|
|
class="custom-input"
|
|
ng-model="asset.room"
|
|
placeholder="{{ 'create.asset.room.placeholder' | i18n }}"
|
|
potentially-required-field
|
|
field-name="room"
|
|
entity="asset">
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-6 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="floor" entity="asset">
|
|
{{ 'console.column.floor' | i18n }}
|
|
</span>
|
|
<input type="text"
|
|
title="{{ 'console.column.floor' | i18n }}"
|
|
class="custom-input"
|
|
ng-model="asset.floor"
|
|
placeholder="{{ 'create.asset.floor.placeholder' | i18n }}"
|
|
potentially-required-field
|
|
field-name="floor"
|
|
entity="asset">
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="col-sm-6">
|
|
<div class="row">
|
|
<div class="col-sm-12 create-ticket__section">
|
|
<edit-summary label="{{'create.asset.description' | i18n}}" ticket="asset" context="'create'" is-desc-required="true">
|
|
</edit-summary>
|
|
</div>
|
|
</div>
|
|
<div class="row">
|
|
<div class="col-sm-12 create-ticket__section">
|
|
<categories-editor ng-if="asset.allCategories" entity="asset" company="company" categories="asset.allCategories"></categories-editor>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- generic custom fields -->
|
|
<div class="create-ticket__full-width-section" ng-if="genericCustomFields.length">
|
|
<div class="row">
|
|
<custom-field-container ticket="asset" fields="genericCustomFields"></custom-field-container>
|
|
</div>
|
|
</div>
|
|
<!-- lifecycle dates -->
|
|
<div class="create-ticket__full-width-section create-asset__collapsible-section">
|
|
<a ng-click="asset.lifecycleDates=!asset.lifecycleDates" ng-enter="asset.lifecycleDates=!asset.lifecycleDates" tabindex="0">{{'asset.attributes.lifecycleDates' | i18n}} <i ng-class="(!!asset.lifecycleDates)?'icon-angle_up':'icon-angle_down'"></i></a>
|
|
<div class="row" ng-show="asset.lifecycleDates">
|
|
<div class="col-sm-2 create-ticket__section-dates">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="lifecycleDates.availableDate" entity="asset">
|
|
{{'asset.attributes.availableDate' | i18n}}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
class="form-control"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="asset.availableDate.date"
|
|
is-open="assetDate.availableDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(assetDate.availableDatePicker, $event)"
|
|
ng-enter="openDatePicker(assetDate.availableDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
ng-change="updateDateTime('availableDate')"
|
|
potentially-required-field
|
|
field-name="lifecycleDates.availableDate"
|
|
entity="asset"
|
|
aria-label="{{'asset.attributes.availableDate' | i18n}} {{'common.aria.labels.dateField' | i18n}}"
|
|
/>
|
|
<i class="icon-calendar custom-field__date-icon"></i>
|
|
</div>
|
|
|
|
<div class="custom-field__time">
|
|
<div class="dropdown timepicker" ng-disabled="!asset.availableDate.date">
|
|
<div class="dropdown-toggle">
|
|
<input class="form-control custom-field__time-input"
|
|
type="text"
|
|
value="{{asset.availableDate.time | date : 'shortTime'}}"
|
|
ng-disabled="!asset.availableDate.date"
|
|
aria-label="{{'asset.attributes.availableDate' | i18n}} {{'common.aria.labels.timeField' | i18n}}"
|
|
/>
|
|
<i class="icon-clock_o custom-field__time-icon"></i>
|
|
</div>
|
|
|
|
<div class="dropdown-menu" prevent-click-event ng-if="asset.availableDate.date">
|
|
<timepicker ng-model="asset.availableDate.time"
|
|
ng-change="updateDateTime('availableDate')"
|
|
show-meridian="showMeridian">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-2 create-ticket__section-dates">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="lifecycleDates.installationDate" entity="asset">
|
|
{{'asset.attributes.installationDate' | i18n}}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
class="form-control"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="asset.installationDate.date"
|
|
is-open="assetDate.installationDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(assetDate.installationDatePicker, $event)"
|
|
ng-enter="openDatePicker(assetDate.installationDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
ng-change="updateDateTime('installationDate')"
|
|
potentially-required-field
|
|
field-name="lifecycleDates.installationDate"
|
|
entity="asset"
|
|
aria-label="{{'asset.attributes.installationDate' | i18n}} {{'common.aria.labels.dateField' | i18n}}"
|
|
/>
|
|
<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="{{asset.installationDate.time | date : 'shortTime'}}"
|
|
ng-disabled="!asset.installationDate.date"
|
|
aria-label="{{'asset.attributes.installationDate' | i18n}} {{'common.aria.labels.timeField' | i18n}}"
|
|
/>
|
|
<i class="icon-clock_o custom-field__time-icon"></i>
|
|
</div>
|
|
|
|
<div class="dropdown-menu" prevent-click-event ng-if="asset.installationDate.date">
|
|
<timepicker ng-model="asset.installationDate.time"
|
|
ng-change="updateDateTime('installationDate')"
|
|
show-meridian="showMeridian">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-2 create-ticket__section-dates">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="lifecycleDates.receivedDate" entity="asset">
|
|
{{'asset.attributes.receivedDate' | i18n}}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
class="form-control"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="asset.receivedDate.date"
|
|
is-open="assetDate.receivedDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(assetDate.receivedDatePicker, $event)"
|
|
ng-enter="openDatePicker(assetDate.receivedDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
ng-change="updateDateTime('receivedDate')"
|
|
potentially-required-field
|
|
field-name="lifecycleDates.receivedDate"
|
|
entity="asset"
|
|
aria-label="{{'asset.attributes.receivedDate' | i18n}} {{'common.aria.labels.dateField' | i18n}}"
|
|
/>
|
|
<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="{{asset.receivedDate.time | date : 'shortTime'}}"
|
|
ng-disabled="!asset.receivedDate.date"
|
|
aria-label="{{'asset.attributes.receivedDate' | i18n}} {{'common.aria.labels.timeField' | i18n}}"
|
|
/>
|
|
<i class="icon-clock_o custom-field__time-icon"></i>
|
|
</div>
|
|
|
|
<div class="dropdown-menu" prevent-click-event ng-if="asset.receivedDate.date">
|
|
<timepicker ng-model="asset.receivedDate.time"
|
|
ng-change="updateDateTime('receivedDate')"
|
|
show-meridian="showMeridian">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-2 create-ticket__section-dates">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="lifecycleDates.returnDate" entity="asset">
|
|
{{'asset.attributes.returnDate' | i18n}}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
class="form-control"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="asset.returnDate.date"
|
|
is-open="assetDate.returnDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(assetDate.returnDatePicker, $event)"
|
|
ng-enter="openDatePicker(assetDate.returnDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
ng-change="updateDateTime('returnDate')"
|
|
potentially-required-field
|
|
field-name="lifecycleDates.returnDate"
|
|
entity="asset"
|
|
aria-label="{{'asset.attributes.returnDate' | i18n}} {{'common.aria.labels.dateField' | i18n}}"
|
|
/>
|
|
<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="{{asset.returnDate.time | date : 'shortTime'}}"
|
|
ng-disabled="!asset.returnDate.date"
|
|
aria-label="{{'asset.attributes.returnDate' | i18n}} {{'common.aria.labels.timeField' | i18n}}"
|
|
|
|
/>
|
|
<i class="icon-clock_o custom-field__time-icon"></i>
|
|
</div>
|
|
|
|
<div class="dropdown-menu" prevent-click-event ng-if="asset.returnDate.date">
|
|
<timepicker ng-model="asset.returnDate.time"
|
|
ng-change="updateDateTime('returnDate')"
|
|
show-meridian="showMeridian">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-2 create-ticket__section-dates">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="lifecycleDates.disposalDate" entity="asset">
|
|
{{'asset.attributes.disposalDate' | i18n}}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
class="form-control"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="asset.disposalDate.date"
|
|
is-open="assetDate.disposalDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(assetDate.disposalDatePicker, $event)"
|
|
ng-enter="openDatePicker(assetDate.disposalDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
ng-change="updateDateTime('disposalDate')"
|
|
potentially-required-field
|
|
field-name="lifecycleDates.disposalDate"
|
|
entity="asset"
|
|
aria-label="{{'asset.attributes.disposalDate' | i18n}} {{'common.aria.labels.dateField' | i18n}}"
|
|
/>
|
|
<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="{{asset.disposalDate.time | date : 'shortTime'}}"
|
|
ng-disabled="!asset.disposalDate.date"
|
|
aria-label="{{'asset.attributes.disposalDate' | i18n}} {{'common.aria.labels.timeField' | i18n}}"
|
|
/>
|
|
<i class="icon-clock_o custom-field__time-icon"></i>
|
|
</div>
|
|
|
|
<div class="dropdown-menu" prevent-click-event ng-if="asset.disposalDate.date">
|
|
<timepicker ng-model="asset.disposalDate.time"
|
|
ng-change="updateDateTime('disposalDate')"
|
|
show-meridian="showMeridian">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-2 create-ticket__section-dates">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="lifecycleDates.purchaseDate" entity="asset">
|
|
{{'asset.attributes.purchaseDate' | i18n}}
|
|
</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
class="form-control"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="asset.purchaseDate.date"
|
|
is-open="assetDate.purchaseDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(assetDate.purchaseDatePicker, $event)"
|
|
ng-enter="openDatePicker(assetDate.purchaseDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
ng-change="updateDateTime('purchaseDate')"
|
|
potentially-required-field
|
|
field-name="lifecycleDates.purchaseDate"
|
|
entity="asset"
|
|
aria-label="{{'asset.attributes.purchaseDate' | i18n}} {{'common.aria.labels.dateField' | i18n}}"
|
|
/>
|
|
<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="{{asset.purchaseDate.time | date : 'shortTime'}}"
|
|
ng-disabled="!asset.purchaseDate.date"
|
|
aria-label="{{'asset.attributes.purchaseDate' | i18n}} {{'common.aria.labels.timeField' | i18n}}"
|
|
/>
|
|
<i class="icon-clock_o custom-field__time-icon"></i>
|
|
</div>
|
|
|
|
<div class="dropdown-menu" prevent-click-event ng-if="asset.purchaseDate.date">
|
|
<timepicker ng-model="asset.purchaseDate.time"
|
|
ng-change="updateDateTime('purchaseDate')"
|
|
show-meridian="showMeridian">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-2 create-ticket__section-dates" potentially-required-field field-name="lifecycleDates.lastScanDate" entity="asset">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">{{'asset.attributes.lastScanDate' | i18n}}</span>
|
|
<div class="create-ticket__date-time-item">
|
|
<div class="custom-field__date">
|
|
<input type="text"
|
|
class="form-control"
|
|
datepicker-popup="mediumDate"
|
|
ng-model="asset.lastScanDate.date"
|
|
is-open="assetDate.lastScanDatePicker.open"
|
|
show-button-bar="false"
|
|
ng-click="openDatePicker(assetDate.lastScanDatePicker, $event)"
|
|
ng-enter="openDatePicker(assetDate.lastScanDatePicker)"
|
|
datepicker-options="datePickerOptions"
|
|
ng-change="updateDateTime('lastScanDate')"
|
|
potentially-required-field
|
|
field-name="lifecycleDates.lastScanDate"
|
|
entity="asset"
|
|
aria-label="{{'asset.attributes.lastScanDate' | i18n}} {{'common.aria.labels.dateField' | i18n}}"
|
|
/>
|
|
<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="{{asset.lastScanDate.time | date : 'shortTime'}}"
|
|
ng-disabled="!asset.lastScanDate.date"
|
|
aria-label="{{'asset.attributes.lastScanDate' | i18n}} {{'common.aria.labels.timeField' | i18n}}"
|
|
/>
|
|
<i class="icon-clock_o custom-field__time-icon"></i>
|
|
</div>
|
|
|
|
<div class="dropdown-menu" prevent-click-event ng-if="asset.lastScanDate.date">
|
|
<timepicker ng-model="asset.lastScanDate.time"
|
|
ng-change="updateDateTime('lastScanDate')"
|
|
show-meridian="showMeridian">
|
|
</timepicker>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<!-- end lifecycle dates -->
|
|
|
|
<!-- financial -->
|
|
<div class="create-ticket__full-width-section create-asset__collapsible-section">
|
|
<a ng-click="asset.financialExpand=!asset.financialExpand" ng-enter="asset.financialExpand=!asset.financialExpand" tabindex="0">{{'asset.attributes.financial' | i18n}} <i ng-class="(!!asset.financialExpand)?'icon-angle_up':'icon-angle_down'"></i></a>
|
|
<div class="row" ng-show="asset.financialExpand">
|
|
<div class="col-sm-3 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="invoiceNumber" entity="asset">
|
|
{{'asset.attributes.invoiceNumber' | i18n}}
|
|
</span>
|
|
<input type="text" class="text-input form-control" ng-model="asset.invoiceNumber"
|
|
potentially-required-field field-name="invoiceNumber" entity="asset">
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-3 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="financial.costCenter" entity="asset">
|
|
{{'asset.attributes.costCenter' | i18n}}
|
|
</span>
|
|
<div class="relative-position">
|
|
<input type="text"
|
|
class="text-input form-control"
|
|
autocomplete="off"
|
|
placeholder="{{'common.labels.startTyping' | i18n}}"
|
|
ng-model="asset.costCenter"
|
|
typeahead="item as item.label for item in getCostCentersByCompany($viewValue)"
|
|
typeahead-on-select="updateCostCenter($item)"
|
|
ng-disabled="!asset.company || !asset.company.name"
|
|
potentially-required-field
|
|
field-name="financial.costCenter"
|
|
entity="asset"
|
|
typeahead-wait-ms="500"
|
|
typeahead-loading="loadingCostCenters"
|
|
ng-blur="hideTooManyResultsMessage()"
|
|
uib-tooltip="{{'search.category.exceedsChunkSize' | i18n}}"
|
|
tooltip-is-open="isTooltipOpenCostCenter"
|
|
tooltip-enable="showTooManyResultsMessage"
|
|
tooltip-trigger="'none'"
|
|
tooltip-placement="top"
|
|
typeahead-focus-first="false"
|
|
/>
|
|
<i class="icon-cross item-input__delete-btn" tabindex=0 role="link"
|
|
title="{{'common.button.clear' | i18n}} {{ 'asset.attributes.costCenter' | i18n }}" ng-if="asset.costCenter && !loadingCostCenters"
|
|
focus-input-on-clear ng-click="clearValuesByType('costCenter')" ng-enter="clearValuesByType('costCenter')">
|
|
</i>
|
|
<loading-spinner class="typeahead-loader" if="loadingCostCenters" inline="true"></loading-spinner>
|
|
</div>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-3 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="financial.budgetCode" entity="asset">
|
|
{{'asset.attributes.budgetCode' | i18n}}
|
|
</span>
|
|
<input type="text" class="text-input form-control" ng-model="asset.budgetCode"
|
|
potentially-required-field field-name="financial.budgetCode" entity="asset">
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-3 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text" potentially-required-field field-name="financial.projectNumber" entity="asset">
|
|
{{'asset.attributes.projectNumber' | i18n}}
|
|
</span>
|
|
<input type="text" class="text-input form-control" ng-model="asset.projectNumber"
|
|
potentially-required-field field-name="financial.projectNumber" entity="asset">
|
|
</label>
|
|
</div>
|
|
<!-- SW00503167 - hiding currency fields for the time being till this issue is resolved -->
|
|
<!--<div class="col-sm-2 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">{{'asset.attributes.unitPrice' | i18n}}</span>
|
|
<currency-input
|
|
field-name="unitPrice"
|
|
model="asset.unitPrice"
|
|
title="{{'asset.attributes.unitPrice' | i18n}}">
|
|
</currency-input>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-2 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">{{'asset.attributes.salesTax' | i18n}}</span>
|
|
<currency-input
|
|
field-name="salesTax"
|
|
model="asset.salesTax"
|
|
title="{{'asset.attributes.salesTax' | i18n}}">
|
|
</currency-input>
|
|
</label>
|
|
</div>
|
|
<div class="col-sm-2 create-ticket__section">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">{{'asset.attributes.marketValue' | i18n}}</span>
|
|
<currency-input
|
|
field-name="marketValue"
|
|
model="asset.marketValue"
|
|
title="{{'asset.attributes.marketValue' | i18n}}">
|
|
</currency-input>
|
|
</label>
|
|
</div>-->
|
|
<!--<div class="col-sm-2 create-ticket__section">-->
|
|
<!--<label class="label_control-wrap">-->
|
|
<!--<span class="label__text">{{'asset.attributes.depreciated' | i18n}}</span>-->
|
|
<!--<selection selection-items="assetMetadata.depreciated"-->
|
|
<!--selected-item="selectedDepreciation"-->
|
|
<!--label="label"-->
|
|
<!--value="label"-->
|
|
<!--selection-callback="updateAssetField('depreciated',item)"-->
|
|
<!--update-selected-item="true">-->
|
|
<!--</selection>-->
|
|
<!--</label>-->
|
|
<!--</div>-->
|
|
</div>
|
|
</div>
|
|
<!-- end financial -->
|
|
<div class="create-ticket__full-width-section create-asset__collapsible-section">
|
|
<div class="row">
|
|
<div class="col-lg-12">
|
|
<label class="label_control-wrap">
|
|
<span class="label__text">
|
|
{{'personInfoCard.asset.caption.primaryOffice' | i18n}}
|
|
</span>
|
|
</label>
|
|
<foundation-selector use-chunking="false" multiple="false" typeahead-mode="true" type="site"
|
|
options="siteOptions" selected-foundations="siteSelected">
|
|
</foundation-selector>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div><!-- end if !state.selectType -->
|
|
</div>
|
|
</div>
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<div class="create-ticket__action-panel">
|
|
<span class="create-ticket__form_invalid" ng-if="createAssetForm.$invalid && !state.selectType">
|
|
<i class="icon-exclamation_triangle"></i>
|
|
<span ng-if="createAssetForm.$error.required.length">{{createAssetForm.$error.required.length}} {{ 'create.ticket.more.required.fields' | i18n }}</span>
|
|
<span ng-if="formContainsInvalidFields(createAssetForm)">{{ 'create.ticket.invalid.fields' | i18n }}</span>
|
|
</span>
|
|
<span class="font-size-m" ng-if="createAssetForm.$valid">
|
|
<i class="icon-check"></i>
|
|
{{ 'create.ticket.all.required.fields.complete' | i18n }}
|
|
</span>
|
|
|
|
<div class="pull-right">
|
|
<button type="submit" class="btn_primary create-ticket__action-btn" ng-if="state.selectType" ng-disabled="state.dataIsLoading" ng-click="showAssetForm(true)">
|
|
{{ 'common.button.continue' | i18n }}
|
|
</button>
|
|
<button type="submit" class="btn_primary create-ticket__action-btn" ng-if="!state.selectType" ng-disabled="createAssetForm.$invalid || state.dataIsLoading" ng-click="createAsset()">
|
|
{{ 'common.button.saveAsset' | i18n }}
|
|
</button>
|
|
<button type="button" class="btn_secondary action-panel__cancel-btn" ng-if="state.selectType" ng-disabled="state.dataIsLoading" ng-click="cancel()">
|
|
{{ 'common.button.discard' | i18n }}
|
|
</button>
|
|
<button type="button" class="btn_secondary action-panel__cancel-btn" ng-if="!state.selectType" ng-disabled="state.dataIsLoading" ng-click="showAssetForm(false)">
|
|
{{ 'smartrecorder.button.clearRecord' | i18n }}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div> |