Skip to content

Commit 58b21cb

Browse files
authored
Merge pull request #422 from openITCOCKPIT/ITC-3636
ITC-3636 ServiceCapacityManagementModule - Consider working hours (add time period) in widgets
2 parents 06ac1f1 + e762894 commit 58b21cb

File tree

11 files changed

+412
-256
lines changed

11 files changed

+412
-256
lines changed

src/app/components/wizards/wizards-dynamicfields/wizards-dynamicfields.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ <h4 [ngClass]="{'text-danger': titleErrorField() && errors.hasOwnProperty(titleE
8989
<c-accordion class="mb-3">
9090
<c-accordion-item #accordionItem="cAccordionItem" [visible]="false">
9191
<ng-template cTemplateId="accordionHeaderTemplate">
92-
<div class="form-group bg-info-subtle"
92+
<div class="form-group bg-primary-subtle"
9393
(click)="accordionItem.toggleItem()"
9494
[collapsed]="!accordionItem.visible" cAccordionButton>
9595
<div class="d-flex align-items-center">

src/app/modules/nwc_module/pages/wizards/networkbasic/networkbasic.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ <h4 [ngClass]="{'text-danger': errors.hasOwnProperty('interfaces') }">
331331
<c-accordion class="mb-3">
332332
<c-accordion-item #accordionItem="cAccordionItem" [visible]="false">
333333
<ng-template cTemplateId="accordionHeaderTemplate">
334-
<div class="form-group bg-info-subtle"
334+
<div class="form-group bg-primary-subtle"
335335
(click)="accordionItem.toggleItem()"
336336
[collapsed]="!accordionItem.visible" cAccordionButton>
337337
<div class="d-flex align-items-center">

src/app/modules/scm_module/widgets/my-resources-summary-widget/my-resources-summary-widget.component.html

Lines changed: 58 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,12 @@
22
<div class="d-flex h-100 flex-column" *ngIf="widget">
33
<oitc-block-loader *ngIf="!resources"></oitc-block-loader>
44
<div *ngIf="resources">
5-
<c-row>
6-
<c-col class="flex-1">
7-
<h5 *ngIf="resources.resources.total === 0" class="fw-normal">
8-
<fa-icon [icon]="['fas', 'circle-info']" class="text-info"></fa-icon>
9-
{{ t('No own resources defined!') }}
10-
</h5>
11-
<h5 *ngIf="resources.resources.total > 0 && resources.resources.status_overview[0] === 0"
12-
class="fw-normal">
13-
{{ t('All resources are confirmed') }}
14-
<fa-icon [icon]="['fas', 'check-check']" class="text-success"></fa-icon>
15-
</h5>
16-
@if (resources.resources.total > 0 && resources.resources.status_overview[0] > 0) {
17-
<h5 class="m-0 fw-normal">
18-
{{ t('Unconfirmed resources exists') }}
19-
<span class="pl-3 float-end">
20-
⏰ {{ t('Deadline') }}
21-
<time>{{ deadline }}</time>
22-
</span>
23-
<div *ngIf="deadlineExceeded" class="text-danger font-xs py-2">
24-
‼️ {{ t('Deadline has been exceeded!!') }}
25-
</div>
26-
<div *ngIf="!deadlineExceeded" class="text-warning font-xs py-2">
27-
⚠️ {{ t('Please confirm the missing resource status before the deadline expires!') }}
28-
</div>
29-
</h5>
30-
}
31-
</c-col>
32-
</c-row>
5+
6+
<!-- status overview -->
337
<c-row>
348
<c-col [xs]="12" [md]="3" [lg]="3">
35-
<div class="p-2 bg-primary rounded overflow-hidden position-relative text-white mb-g">
36-
<div>
9+
<div class="p-2 bg-primary rounded overflow-hidden position-relative text-white mb-g h-100">
10+
<div class="position-relative z-1">
3711
<h6 class="display-4 d-block l-h-n m-0 fw-500">
3812
@if (resources.resources.status_overview[0] > 0 && ( PermissionsService.hasPermissionObservable(['scmmodule', 'resources', 'index'])|async )) {
3913
<a [routerLink]="['/', 'scm_module', 'resources', 'index']" class="text-white"
@@ -53,8 +27,8 @@ <h6 class="display-4 d-block l-h-n m-0 fw-500">
5327
</div>
5428
</c-col>
5529
<c-col [xs]="12" [md]="3" [lg]="3">
56-
<div class="p-2 bg-success rounded overflow-hidden position-relative text-white mb-g">
57-
<div>
30+
<div class="p-2 bg-success rounded overflow-hidden position-relative text-white mb-g h-100">
31+
<div class="position-relative z-1">
5832
<h6 class="display-4 d-block l-h-n m-0 fw-500">
5933
@if (resources.resources.status_overview[1] > 0 && ( PermissionsService.hasPermissionObservable(['scmmodule', 'resources', 'index'])|async )) {
6034
<a [routerLink]="['/', 'scm_module', 'resources', 'index']" class="text-white"
@@ -74,8 +48,8 @@ <h6 class="display-4 d-block l-h-n m-0 fw-500">
7448
</div>
7549
</c-col>
7650
<c-col [xs]="12" [md]="3" [lg]="3">
77-
<div class="p-2 bg-warning rounded overflow-hidden position-relative text-white mb-g">
78-
<div>
51+
<div class="p-2 bg-warning rounded overflow-hidden position-relative text-white mb-g h-100">
52+
<div class="position-relative z-1">
7953
<h6 class="display-4 d-block l-h-n m-0 fw-500">
8054
@if (resources.resources.status_overview[2] > 0 && ( PermissionsService.hasPermissionObservable(['scmmodule', 'resources', 'index'])|async )) {
8155
<a [routerLink]="['/', 'scm_module', 'resources', 'index']" class="text-white"
@@ -95,8 +69,8 @@ <h6 class="display-4 d-block l-h-n m-0 fw-500">
9569
</div>
9670
</c-col>
9771
<c-col [xs]="12" [md]="3" [lg]="3">
98-
<div class="p-2 bg-critical rounded overflow-hidden position-relative text-white mb-g">
99-
<div>
72+
<div class="p-2 bg-critical rounded overflow-hidden position-relative text-white mb-g h-100">
73+
<div class="position-relative z-1">
10074
<h6 class="display-4 d-block l-h-n m-0 fw-500">
10175
@if (resources.resources.status_overview[3] > 0 && ( PermissionsService.hasPermissionObservable(['scmmodule', 'resources', 'index'])|async )) {
10276
<a [routerLink]="['/', 'scm_module', 'resources', 'index']" class="text-white"
@@ -116,6 +90,54 @@ <h6 class="display-4 d-block l-h-n m-0 fw-500">
11690
</div>
11791
</c-col>
11892
</c-row>
93+
94+
<!-- accordion -->
95+
<c-row class="mt-2">
96+
<c-col>
97+
<c-accordion>
98+
@for (deadlineItem of deadlines; track $index) {
99+
100+
<c-accordion-item #item0="cAccordionItem" [visible]="false">
101+
<ng-template cTemplateId="accordionHeaderTemplate">
102+
<button (click)="item0.toggleItem()" [collapsed]="!item0.visible"
103+
cAccordionButton>
104+
⏰ {{ t('Deadline') }}
105+
106+
{{ deadlineItem.key }}
107+
108+
<span class="px-1">
109+
@if (deadlineItem.exceeded) {
110+
<span class="text-danger">
111+
‼️ {{ t('Deadline has been exceeded!!') }}
112+
</span>
113+
} @else {
114+
<span class="text-warning">
115+
⚠️ {{ t('Please confirm the missing resource status before the deadline expires!') }}
116+
</span>
117+
}
118+
</span>
119+
</button>
120+
</ng-template>
121+
<ng-template cTemplateId="accordionBodyTemplate">
122+
<div class="accordion-body">
123+
<ul class="list-inline">
124+
@for (resourcegroup of deadlineItem.resourcegroups; track $index) {
125+
<li class="list-inline-item pe-1">
126+
<a *oitcPermission="['scmmodule','resources', 'index']"
127+
[routerLink]="['/','scm_module', 'resources', 'index']"
128+
[queryParams]="{resourcegroupId: resourcegroup.id}">
129+
{{ resourcegroup.name }}
130+
</a>
131+
</li>
132+
}
133+
</ul>
134+
</div>
135+
</ng-template>
136+
</c-accordion-item>
137+
}
138+
</c-accordion>
139+
</c-col>
140+
</c-row>
119141
</div>
120142
</div>
121143
</ng-container>

src/app/modules/scm_module/widgets/my-resources-summary-widget/my-resources-summary-widget.component.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,21 @@
11
import { AfterViewInit, ChangeDetectionStrategy, Component, inject, OnDestroy } from '@angular/core';
22
import { BaseWidgetComponent } from '../../../../pages/dashboards/widgets/base-widget/base-widget.component';
33
import { AsyncPipe, NgIf } from '@angular/common';
4-
import { ColComponent, RowComponent } from '@coreui/angular';
4+
import {
5+
AccordionButtonDirective,
6+
AccordionComponent,
7+
AccordionItemComponent,
8+
ColComponent,
9+
RowComponent,
10+
TemplateIdDirective
11+
} from '@coreui/angular';
512
import { ScmWidgetService } from '../scm-widget.service';
6-
import { ResourcesWidgetResponse } from '../scm-widget.interface';
13+
import { Deadline, ResourcesWidgetResponse } from '../scm-widget.interface';
714
import { TranslocoDirective } from '@jsverse/transloco';
815
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
916
import { RouterLink } from '@angular/router';
1017
import { BlockLoaderComponent } from '../../../../layouts/primeng/loading/block-loader/block-loader.component';
18+
import { PermissionDirective } from '../../../../permissions/permission.directive';
1119

1220
@Component({
1321
selector: 'oitc-my-resources-summary-widget',
@@ -19,7 +27,12 @@ import { BlockLoaderComponent } from '../../../../layouts/primeng/loading/block-
1927
FaIconComponent,
2028
AsyncPipe,
2129
RouterLink,
22-
BlockLoaderComponent
30+
BlockLoaderComponent,
31+
PermissionDirective,
32+
AccordionButtonDirective,
33+
AccordionComponent,
34+
AccordionItemComponent,
35+
TemplateIdDirective
2336
],
2437
templateUrl: './my-resources-summary-widget.component.html',
2538
styleUrl: './my-resources-summary-widget.component.css',
@@ -29,17 +42,15 @@ export class MyResourcesSummaryWidgetComponent extends BaseWidgetComponent imple
2942
public widgetHeight: number = 0;
3043
public fontSize: number = 0;
3144
public resources!: ResourcesWidgetResponse;
32-
public deadline!: string;
33-
public deadlineExceeded!: boolean;
45+
public deadlines: Deadline[] = [];
3446
private readonly ScmWidgetService = inject(ScmWidgetService);
3547

3648
public override load() {
3749
if (this.widget) {
3850
this.subscriptions.add(this.ScmWidgetService.getMyResourcesSummaryWidget(this.widget)
3951
.subscribe((result) => {
4052
this.resources = result;
41-
this.deadline = result.deadline;
42-
this.deadlineExceeded = result.deadlineExceeded;
53+
this.deadlines = result.resources.deadlines;
4354
this.cdr.markForCheck();
4455
}));
4556
}

0 commit comments

Comments
 (0)