294 lines
18 KiB
HTML
294 lines
18 KiB
HTML
<div ng-controller="activityCalendarByCompanyController" class="ac-container">
|
|
<div class="ac-control" ng-show="ViewModel.DataLoaded" ng-cloak ng-init-widget>
|
|
<!--Left Frozen Block-->
|
|
<div class="ac-left-col">
|
|
<!--Header section-->
|
|
<div class="freezeTable1 ac-left-col-header">
|
|
<table class="table1 table-light">
|
|
<thead>
|
|
<tr>
|
|
<th class="firstcol">
|
|
<div>Project</div>
|
|
</th>
|
|
<th class="firstcol">
|
|
<div>Total</div>
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
</div>
|
|
<!--Section with project names-->
|
|
<div class="freezeTable1 ac-left-col-content height-container">
|
|
<!-- ac-left-table class uses only for ngMovable directive to identify right place to move body from the bottom part -->
|
|
<table class="table table1 vertical-scroll-target watch-resizing ac-left-table ng-popup-menu-container" data-scrollcontainerclass="table-light" data-menuclass="menuGroup">
|
|
<tbody ng-if="ViewModel.DisplayMode.ShowUpper.Value">
|
|
<!-- Companies -->
|
|
<tr ng-repeat-start="company in (ViewModel.Rows) track by $index">
|
|
<td class="headcol1 headcol-week">
|
|
<div class="shortNameGroup" title="{{ company.Name }}">
|
|
<strong>{{ company.Name }}</strong>
|
|
</div>
|
|
</td>
|
|
<td class="ac-row-total">
|
|
<div class="ac-total">
|
|
<strong>{{ (company.TotalValue || 0 | number:2) }}</strong>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<!-- Project Names and total values -->
|
|
<tr ng-repeat="row in company.Children" grid-row templateUrl="{{row.Templates.Main}}"></tr>
|
|
<!-- NPT total row and total value -->
|
|
<tr>
|
|
<td class="headcol1 headcol-week ac-row-name" ng-click="toggleRow(company.NonProjectTime, $event);">
|
|
<a ng-if="company.NonProjectTime.Children">
|
|
<i class="fa" ng-attr-title="{{company.NonProjectTime.Collapsed ? 'Expand' : 'Collapse'}}" ng-class="{'fa-plus-square':company.NonProjectTime.Collapsed, 'fa-minus-square':!company.NonProjectTime.Collapsed}"></i>
|
|
<div class="shortName ac-name" title="Non-Project Time">Non-Project Time</div>
|
|
</a>
|
|
<span ng-if="!company.NonProjectTime.Children" title="Non-Project Time">Non-Project Time</span>
|
|
</td>
|
|
<td class="ac-row-total">
|
|
<div class="ac-total">
|
|
{{ (company.NonProjectTime.TotalValue || 0 | number:2) }}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<!-- Non Project Time Category row-->
|
|
<tr ng-if="nptCat.Initialized" ng-show="nptCat.Show" ng-repeat-start="nptCat in (company.NonProjectTime.Children) track by $index" class="ac-level-2">
|
|
<td class="headcol1 headcol-week expCat ac-row-name" ng-click="toggleRow(nptCat, $event);">
|
|
<a title="{{ nptCat.Name }}">
|
|
<i class="fa" ng-attr-title="{{nptCat.Collapsed ? 'Expand' : 'Collapse'}}" ng-class="{'fa-plus-square':nptCat.Collapsed, 'fa-minus-square':!nptCat.Collapsed}"></i>
|
|
<div class="shortName ac-name">{{ nptCat.Name }}</div>
|
|
</a>
|
|
</td>
|
|
<td class="ac-row-total">
|
|
<div class="ac-total">
|
|
{{ (nptCat.TotalValue || 0 | number:2) }}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<!-- Non Project Time Item row -->
|
|
<tr ng-if="nptItem.Initialized" ng-show="nptItem.Show" ng-repeat-start="nptItem in (nptCat.Children) track by $index" class="ac-level-3">
|
|
<td ng-if="!nptItem.IsTeamWide" class="headcol1 headcol-week expCat ac-row-name" ng-click="toggleRow(nptItem, $event);" style="height: 31px;">
|
|
<a title="{{ nptItem.Name }}">
|
|
<i class="fa" ng-attr-title="{{nptItem.Collapsed ? 'Expand' : 'Collapse'}}" ng-class="{'fa-plus-square':nptItem.Collapsed, 'fa-minus-square':!nptItem.Collapsed}"></i>
|
|
<div class="shortName ac-name">{{ nptItem.Name }}</div>
|
|
</a>
|
|
</td>
|
|
<td ng-if="nptItem.IsTeamWide" class="headcol1 headcol-week expCat ac-row-name" style="height: 31px;">
|
|
<div class="shortName ac-name">{{ nptItem.Name }}</div>
|
|
</td>
|
|
<td class="ac-row-total">
|
|
<div class="ac-total">
|
|
{{ (nptItem.TotalValue || 0 | number:2) }}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<!-- Non Project Time Resource row -->
|
|
<tr ng-if="res.Initialized" ng-show="res.Show" ng-repeat="res in nptItem.Children track by $index" class="ac-level-4">
|
|
<td class="headcol1 headcol-week ac-row-name" style="height: 31px;">
|
|
<div class="shortName ac-resource-name" title="{{ res.Name }}">{{ res.Name }}</div>
|
|
</td>
|
|
<td class="ac-row-total">
|
|
<div class="ac-total">
|
|
{{ (res.TotalValue || 0 | number:2) }}
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<tr ng-repeat-end ng-if="::false"></tr><!-- NPT Items -->
|
|
<tr ng-repeat-end ng-if="::false"></tr><!-- NPT Categories -->
|
|
<tr ng-repeat-end ng-if="::false"></tr><!-- Companies -->
|
|
<!-- No Team Row -->
|
|
<tr ng-if="ViewModel.NoTeamRow && ViewModel.NoTeamRow.Children && ViewModel.NoTeamRow.Children.length">
|
|
<td class="headcol1 headcol-week">
|
|
<div class="shortNameGroup" title="No Team">
|
|
<strong>No Team</strong>
|
|
</div>
|
|
</td>
|
|
<td class="ac-row-total">
|
|
<div class="ac-total">
|
|
<strong>{{ (ViewModel.NoTeamRow.TotalValue || 0 | number:2) }}</strong>
|
|
</div>
|
|
</td>
|
|
</tr>
|
|
<!-- Projects -->
|
|
<tr ng-repeat="row in ViewModel.NoTeamRow.Children track by $index" grid-row grid-row-init="row.Initialized" templateUrl="{{row.Templates.Main}}"></tr>
|
|
<tr>
|
|
<td class="headcol1 headcol-week ac-row-name">
|
|
<strong title="Total">Total</strong>
|
|
</td>
|
|
<td class="ac-row-total">
|
|
<strong class="ac-total">
|
|
{{ (ViewModel.TotalRow.TotalValue || 0 | number:2) }}
|
|
</strong>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr class="remaining-capacity-row">
|
|
<td class="headcol1 headcol-week">
|
|
<strong title="Remaining Capacity">Remaining Capacity</strong>
|
|
</td>
|
|
<td class="ac-row-total">
|
|
<strong class="ac-total">
|
|
{{ (ViewModel.RemainingCapacityRow.TotalValue || 0 | number:2) }}
|
|
</strong>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="header-container width-container">
|
|
<div class="freezeTable1 horizontal-scroll-target" style="margin-left: -400px">
|
|
<table class="table ac-table-header table-light">
|
|
<thead class="watch-resizing">
|
|
<tr>
|
|
<th style="width:400px" class="firstcol"></th>
|
|
<!-- years -->
|
|
<th ng-repeat="header in (ViewModel.Header.Years) track by $index" colspan="{{ header.Colspan }}" class="ac-normal-header-cell">
|
|
{{ header.Title }}
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<th class="headcol" style="visibility: hidden;"></th>
|
|
<!-- months -->
|
|
<th ng-repeat="header in (ViewModel.Header.Months) track by $index" ng-click="toggleMonth($index)"
|
|
colspan="{{ header.Colspan }}" class="ac-normal-header-cell headcol-month">
|
|
<i class="fa" ng-class="header.CollapsedClass" style="margin-right: 5px;"></i>
|
|
{{ header.ShortTitle }}
|
|
</th>
|
|
</tr>
|
|
<tr>
|
|
<th class="headcol" style="visibility: hidden;"></th>
|
|
<!-- days -->
|
|
<th ng-repeat="header in (ViewModel.Header.Weeks) track by $index"
|
|
ng-if="header.Initialized"
|
|
ng-show="header.Show" class="ac-normal-header-cell">
|
|
{{ header.ShortTitle }}
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="table-light table-responsive very-big-table freezeTable freezeTable1 main-table-container height-container width-container watch-scroll">
|
|
<!-- ac-right-table class uses only for ngMovable directive to identify right place to move body from the bottom part -->
|
|
<table class="table table-striped table-bordered main-table ac-right-table"
|
|
ng-attr-data-visible-cells="{{ ViewModel.Header.Colspan }}"
|
|
ng-class="{'bar-mode':ViewModel.DisplayMode.IsBarMode}">
|
|
<tbody ng-if="ViewModel.DisplayMode.ShowUpper.Value">
|
|
<!-- Companies -->
|
|
<tr ng-repeat-start="company in (ViewModel.Rows) track by $index">
|
|
<td ng-repeat="header in (ViewModel.Header.Weeks) track by $index"
|
|
ng-if="header.Initialized"
|
|
ng-show="header.Show">
|
|
<strong>{{ (company.Cells[$index] | number:2) }}</strong>
|
|
</td>
|
|
</tr>
|
|
<!-- Projects -->
|
|
<tr ng-repeat="row in company.Children" grid-row templateUrl="{{row.Templates.Numbers}}"></tr>
|
|
<!-- Non Project Time rows -->
|
|
<!-- Non Project Time total rows -->
|
|
<tr>
|
|
<td ng-repeat="header in (ViewModel.Header.Weeks) track by $index"
|
|
ng-if="header.Initialized"
|
|
ng-show="header.Show"
|
|
ng-attr-style="{{ company.NonProjectTime.CSSStyle[$index] }}"
|
|
ng-class="company.NonProjectTime.CSSClass[$index]">
|
|
{{ (company.NonProjectTime.Cells[$index] | number:2) }}
|
|
</td>
|
|
</tr>
|
|
<!-- Non Project Time Category row -->
|
|
<tr ng-if="nptCat.Initialized" ng-show="nptCat.Show" ng-repeat-start="nptCat in (company.NonProjectTime.Children) track by $index">
|
|
<td ng-repeat="header in (ViewModel.Header.Weeks) track by $index"
|
|
ng-if="header.Initialized"
|
|
ng-show="header.Show"
|
|
ng-class="nptCat.CSSClass[$index]">
|
|
{{ (nptCat.Cells[$index] | number:2) }}
|
|
</td>
|
|
</tr>
|
|
<!-- Non Project Time Item row -->
|
|
<tr ng-if="nptItem.Initialized" ng-show="nptItem.Show" ng-repeat-start="nptItem in (nptCat.Children) track by $index">
|
|
<td ng-repeat="header in (ViewModel.Header.Weeks) track by $index"
|
|
ng-if="header.Initialized"
|
|
ng-show="header.Show"
|
|
ng-class="nptItem.CSSClass[$index]"
|
|
style="height: 31px;">
|
|
<a href="javascript:void(0)" editable-text="nptItem.Cells[$index]" e-name="ColValue" e-ng-blur="onTxtBlur(this);" onshow="watchKeyInput(this)" buttons="no"
|
|
blur="submit" onbeforesave="checkTeamWideNptValue(company, company.NonProjectTime, nptCat, nptItem, $index, $data)" e-required
|
|
ng-if="nptItem.IsTeamWide && nptItem.EditableNptWeeks[$index] && (nptItem.Cells[$index] != 0)">
|
|
{{ nptItem.Cells[$index] | number:2 }}
|
|
</a>
|
|
<span ng-if="(!nptItem.IsTeamWide || !nptItem.EditableNptWeeks[$index]) && (nptItem.Cells[$index] != 0)">
|
|
{{ (nptItem.Cells[$index] | number:2) }}
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
<!-- Non Project Time Resource row -->
|
|
<tr ng-if="nptResource.Initialized" ng-show="nptResource.Show" ng-repeat="nptResource in (nptItem.Children) track by $index">
|
|
<td ng-repeat="header in (ViewModel.Header.Weeks) track by $index"
|
|
ng-if="header.Initialized"
|
|
ng-show="header.Show"
|
|
ng-class="nptResource.CSSClass[$index]"
|
|
style="height: 31px;">
|
|
<a href="javascript:void(0)" editable-text="nptResource.Cells[$index]" e-name="ColValue" e-ng-blur="onTxtBlur(this);" onshow="watchKeyInput(this)" buttons="no"
|
|
blur="submit" onbeforesave="checkNptResourceValue(company, company.NonProjectTime, nptCat, nptItem, nptResource, $index, $data)" e-required
|
|
ng-if="nptResource.EditableNptWeeks[$index] && (nptResource.Cells[$index] != 0)">
|
|
{{ nptResource.Cells[$index] | number:2 }}
|
|
</a>
|
|
<span ng-if="!nptResource.EditableNptWeeks[$index] && (nptResource.Cells[$index] != 0)">
|
|
{{ (nptResource.Cells[$index] | number:2) }}
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
<tr ng-repeat-end ng-if="::false"></tr><!-- NPT Items -->
|
|
<tr ng-repeat-end ng-if="::false"></tr><!-- NPT Categories -->
|
|
<tr ng-repeat-end ng-if="::false"></tr><!-- Companies -->
|
|
<!-- No Team Row -->
|
|
<tr ng-if="ViewModel.NoTeamRow && ViewModel.NoTeamRow.Children && ViewModel.NoTeamRow.Children.length">
|
|
<td ng-repeat="header in (ViewModel.Header.Weeks) track by $index"
|
|
ng-if="header.Initialized"
|
|
ng-show="header.Show">
|
|
<strong>{{ (ViewModel.NoTeamRow.Cells[$index] | number:2) }}</strong>
|
|
</td>
|
|
</tr>
|
|
<!-- Projects -->
|
|
<tr ng-repeat="row in ViewModel.NoTeamRow.Children track by $index" grid-row-init="row.Initialized" grid-row templateUrl="{{row.Templates.Numbers}}"></tr>
|
|
<!-- Total row -->
|
|
<tr>
|
|
<td ng-repeat="header in (ViewModel.Header.Weeks) track by $index"
|
|
ng-if="header.Initialized"
|
|
ng-show="header.Show"
|
|
ng-attr-style="{{ ViewModel.TotalRow.CSSStyle[$index] }}"
|
|
ng-class="ViewModel.TotalRow.CSSClass[$index]">
|
|
<strong>{{ (ViewModel.TotalRow.Cells[$index] | number:2) }}</strong>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
<tbody>
|
|
<tr class="remaining-capacity-row">
|
|
<td ng-repeat="header in (ViewModel.Header.Weeks) track by $index"
|
|
ng-if="header.Initialized"
|
|
ng-show="header.Show"
|
|
ng-attr-style="{{ ViewModel.RemainingCapacityRow.CSSStyle[$index] }}"
|
|
ng-class="ViewModel.RemainingCapacityRow.CSSClass[$index]">
|
|
<strong>{{ (ViewModel.RemainingCapacityRow.Cells[$index] | number:2) }}</strong>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="ac-control" ng-show="!ViewModel.DataLoaded">
|
|
<table class="table" style="width: 100%">
|
|
<tbody>
|
|
<tr>
|
|
<td style="text-align: center;">
|
|
There is no data available.
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div ng-show="::false" ng-include="'/Content/templates/ActivityCalendar/_activityCalendarTeamInfo.html?v=9'"></div>
|
|
</div> |