Skip to content
Snippets Groups Projects
Commit 3891200d authored by Albert Bruns's avatar Albert Bruns
Browse files

OZG-7773 mail timing issue

parent b3a7a20c
No related branches found
No related tags found
2 merge requests!122OZG-7773-Nachrichten-auf-ungelesen-setzen-e2e,!120OZG-7773-Nachrichten-auf-ungelesen-setzen
Showing
with 164 additions and 167 deletions
...@@ -78,10 +78,7 @@ describe('NavigationService', () => { ...@@ -78,10 +78,7 @@ describe('NavigationService', () => {
service.navigateToVorgangList(); service.navigateToVorgangList();
expect(router.navigate).toHaveBeenCalledWith([ expect(router.navigate).toHaveBeenCalledWith([NavigationService.ROOT_PATH, NavigationService.URL_PARAM_ALLE]);
NavigationService.ROOT_PATH,
NavigationService.URL_PARAM_ALLE,
]);
}); });
it('should navigate to meine with url containing "meine"', () => { it('should navigate to meine with url containing "meine"', () => {
...@@ -89,10 +86,7 @@ describe('NavigationService', () => { ...@@ -89,10 +86,7 @@ describe('NavigationService', () => {
service.navigateToVorgangList(); service.navigateToVorgangList();
expect(router.navigate).toHaveBeenCalledWith([ expect(router.navigate).toHaveBeenCalledWith([NavigationService.ROOT_PATH, NavigationService.URL_PARAM_MY_VORGAENGE]);
NavigationService.ROOT_PATH,
NavigationService.URL_PARAM_MY_VORGAENGE,
]);
}); });
it('should navigate to all with url containing "alle"', () => { it('should navigate to all with url containing "alle"', () => {
...@@ -100,10 +94,7 @@ describe('NavigationService', () => { ...@@ -100,10 +94,7 @@ describe('NavigationService', () => {
service.navigateToVorgangList(); service.navigateToVorgangList();
expect(router.navigate).toHaveBeenCalledWith([ expect(router.navigate).toHaveBeenCalledWith([NavigationService.ROOT_PATH, NavigationService.URL_PARAM_ALLE]);
NavigationService.ROOT_PATH,
NavigationService.URL_PARAM_ALLE,
]);
}); });
it('should navigate to unassigned with url containing "unassigned"', () => { it('should navigate to unassigned with url containing "unassigned"', () => {
...@@ -111,10 +102,7 @@ describe('NavigationService', () => { ...@@ -111,10 +102,7 @@ describe('NavigationService', () => {
service.navigateToVorgangList(); service.navigateToVorgangList();
expect(router.navigate).toHaveBeenCalledWith([ expect(router.navigate).toHaveBeenCalledWith([NavigationService.ROOT_PATH, NavigationService.URL_PARAM_UNASSIGNED]);
NavigationService.ROOT_PATH,
NavigationService.URL_PARAM_UNASSIGNED,
]);
}); });
}); });
...@@ -243,6 +231,21 @@ describe('NavigationService', () => { ...@@ -243,6 +231,21 @@ describe('NavigationService', () => {
}); });
}); });
describe('navigate to postfach', () => {
it('should navigate to postfach', () => {
const linkUri: string = 'dummyUri';
service.navigateToPostfach(linkUri);
expect(router.navigate).toHaveBeenCalledWith([
NavigationService.ROOT_PATH,
NavigationService.URL_PARAM_POSTFACH,
linkUri,
NavigationService.URL_PARAM_POSTFACH,
]);
});
});
describe('is postfach page', () => { describe('is postfach page', () => {
it('should return true if "postfach" exists in url', () => { it('should return true if "postfach" exists in url', () => {
service.routeUrlSegment$.next(<any>[{ path: 'postfach' }]); service.routeUrlSegment$.next(<any>[{ path: 'postfach' }]);
......
...@@ -21,22 +21,9 @@ ...@@ -21,22 +21,9 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen * Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen. * unter der Lizenz sind dem Lizenztext zu entnehmen.
*/ */
import { import { decodeUrlFromEmbedding, isEmptyObject, isNotNil, isNotNull, isNotUndefined } from '@alfa-client/tech-shared';
decodeUrlFromEmbedding,
isEmptyObject,
isNotNil,
isNotNull,
isNotUndefined,
} from '@alfa-client/tech-shared';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { import { ActivatedRoute, NavigationEnd, PRIMARY_OUTLET, Params, Router, UrlSegment } from '@angular/router';
ActivatedRoute,
NavigationEnd,
PRIMARY_OUTLET,
Params,
Router,
UrlSegment,
} from '@angular/router';
import { ResourceUri } from '@ngxp/rest'; import { ResourceUri } from '@ngxp/rest';
import { OAuthService } from 'angular-oauth2-oidc'; import { OAuthService } from 'angular-oauth2-oidc';
import { has, isNil, isUndefined } from 'lodash-es'; import { has, isNil, isUndefined } from 'lodash-es';
...@@ -55,6 +42,7 @@ export class NavigationService { ...@@ -55,6 +42,7 @@ export class NavigationService {
public static readonly URL_PARAM_MY_VORGAENGE: string = 'meine'; public static readonly URL_PARAM_MY_VORGAENGE: string = 'meine';
public static readonly URL_PARAM_MY_VORGANG: string = 'vorgang'; public static readonly URL_PARAM_MY_VORGANG: string = 'vorgang';
public static readonly URL_PARAM_POSTFACH: string = 'postfach';
public static readonly URL_PARAM_ALLE: string = 'alle'; public static readonly URL_PARAM_ALLE: string = 'alle';
public static readonly URL_PARAM_SEARCH: string = 'search'; public static readonly URL_PARAM_SEARCH: string = 'search';
public static readonly URL_PARAM_UNASSIGNED: string = 'unassigned'; public static readonly URL_PARAM_UNASSIGNED: string = 'unassigned';
...@@ -62,12 +50,10 @@ export class NavigationService { ...@@ -62,12 +50,10 @@ export class NavigationService {
public readonly VORGANG_WITH_EINGANG_URL: string = 'vorgangWithEingangUrl'; public readonly VORGANG_WITH_EINGANG_URL: string = 'vorgangWithEingangUrl';
static readonly ROOT_PATH: string = '/'; static readonly ROOT_PATH: string = '/';
static readonly VORGANG_BASE_PATH: string = static readonly VORGANG_BASE_PATH: string = NavigationService.ROOT_PATH + NavigationService.URL_PARAM_MY_VORGANG + '/';
NavigationService.ROOT_PATH + NavigationService.URL_PARAM_MY_VORGANG + '/';
public static readonly MEINE_VORGAENGE_PATH: string = public static readonly MEINE_VORGAENGE_PATH: string =
NavigationService.ROOT_PATH + NavigationService.URL_PARAM_MY_VORGAENGE + '/'; NavigationService.ROOT_PATH + NavigationService.URL_PARAM_MY_VORGAENGE + '/';
public static readonly ALLE_VORGAENGE_PATH: string = public static readonly ALLE_VORGAENGE_PATH: string = NavigationService.ROOT_PATH + NavigationService.URL_PARAM_ALLE + '/';
NavigationService.ROOT_PATH + NavigationService.URL_PARAM_ALLE + '/';
public static readonly UNASSIGNED_VORGAENGE_PATH: string = public static readonly UNASSIGNED_VORGAENGE_PATH: string =
NavigationService.ROOT_PATH + NavigationService.URL_PARAM_UNASSIGNED + '/'; NavigationService.ROOT_PATH + NavigationService.URL_PARAM_UNASSIGNED + '/';
...@@ -90,9 +76,7 @@ export class NavigationService { ...@@ -90,9 +76,7 @@ export class NavigationService {
} }
private prefillRouterData(): void { private prefillRouterData(): void {
this.getLastFirstChild(this.activatedRoute.root).params.subscribe((params: Params) => this.getLastFirstChild(this.activatedRoute.root).params.subscribe((params: Params) => this.routeParameter$.next(params));
this.routeParameter$.next(params),
);
} }
private subscribeToRouterEvents(): void { private subscribeToRouterEvents(): void {
...@@ -170,10 +154,7 @@ export class NavigationService { ...@@ -170,10 +154,7 @@ export class NavigationService {
} }
private isParamPresent(paramName: string): boolean { private isParamPresent(paramName: string): boolean {
return ( return isEmptyObject(this.routeParameter$.value) || isUndefined(this.routeParameter$.value[paramName]);
isEmptyObject(this.routeParameter$.value) ||
isUndefined(this.routeParameter$.value[paramName])
);
} }
static isVorgangListPage(params: Params): boolean { static isVorgangListPage(params: Params): boolean {
...@@ -207,9 +188,7 @@ export class NavigationService { ...@@ -207,9 +188,7 @@ export class NavigationService {
getFilterPathSegment(): string { getFilterPathSegment(): string {
const firstPathSegment: string = this.router.url.split('/')[1]; const firstPathSegment: string = this.router.url.split('/')[1];
return this.isFilterPathSegment(firstPathSegment) ? firstPathSegment : ( return this.isFilterPathSegment(firstPathSegment) ? firstPathSegment : NavigationService.URL_PARAM_ALLE;
NavigationService.URL_PARAM_ALLE
);
} }
isFilterPathSegment(pathSegment: string): boolean { isFilterPathSegment(pathSegment: string): boolean {
...@@ -225,10 +204,15 @@ export class NavigationService { ...@@ -225,10 +204,15 @@ export class NavigationService {
} }
public navigateToVorgang(linkUri: ResourceUri): void { public navigateToVorgang(linkUri: ResourceUri): void {
this.router.navigate([NavigationService.ROOT_PATH, NavigationService.URL_PARAM_MY_VORGANG, linkUri]);
}
public navigateToPostfach(linkUri: string): void {
this.router.navigate([ this.router.navigate([
NavigationService.ROOT_PATH, NavigationService.ROOT_PATH,
NavigationService.URL_PARAM_MY_VORGANG, NavigationService.URL_PARAM_MY_VORGANG,
linkUri, linkUri,
NavigationService.URL_PARAM_POSTFACH,
]); ]);
} }
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
--> -->
<a <a
[ngClass]="{ error: postfachMail | hasLink: postfachNachrichtLinkRel.RESEND_POSTFACH_MAIL }" [ngClass]="{ error: postfachMail | hasLink: postfachNachrichtLinkRel.RESEND_POSTFACH_MAIL }"
[routerLink]="onPage ? null : 'postfach'" (click)="navigateToPostfach()"
data-test-class="outgoing-mail-routing" data-test-class="outgoing-mail-routing"
> >
<div class="mail-head"> <div class="mail-head">
......
...@@ -21,20 +21,21 @@ ...@@ -21,20 +21,21 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen * Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen. * unter der Lizenz sind dem Lizenztext zu entnehmen.
*/ */
import { ON_PAGE, PostfachMailLinkRel, PostfachMailResource } from '@alfa-client/postfach-shared'; import { ON_PAGE, PostfachMailLinkRel, PostfachMailResource, PostfachService } from '@alfa-client/postfach-shared';
import { createStateResource, HasLinkPipe, StateResource } from '@alfa-client/tech-shared'; import { createStateResource, HasLinkPipe, StateResource } from '@alfa-client/tech-shared';
import { import {
dispatchEventFromFixture,
existsAsHtmlElement, existsAsHtmlElement,
getDebugElementFromFixtureByCss,
getElementFromFixture, getElementFromFixture,
getMockComponent, getMockComponent,
Mock,
mock,
notExistsAsHtmlElement, notExistsAsHtmlElement,
} from '@alfa-client/test-utils'; } from '@alfa-client/test-utils';
import { UserProfileInPostfachMailContainerComponent } from '@alfa-client/user-profile'; import { UserProfileInPostfachMailContainerComponent } from '@alfa-client/user-profile';
import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MatIcon } from '@angular/material/icon'; import { MatIcon } from '@angular/material/icon';
import { provideRouter, RouterLinkWithHref, RouterModule } from '@angular/router';
import { getDataTestClassOf, getDataTestIdOf } from 'libs/tech-shared/test/data-test'; import { getDataTestClassOf, getDataTestIdOf } from 'libs/tech-shared/test/data-test';
import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang'; import { createVorgangWithEingangResource } from 'libs/vorgang-shared/test/vorgang';
import { MockComponent } from 'ng-mocks'; import { MockComponent } from 'ng-mocks';
...@@ -48,6 +49,8 @@ describe('OutgoingMailComponent', () => { ...@@ -48,6 +49,8 @@ describe('OutgoingMailComponent', () => {
let component: OutgoingMailComponent; let component: OutgoingMailComponent;
let fixture: ComponentFixture<OutgoingMailComponent>; let fixture: ComponentFixture<OutgoingMailComponent>;
let postfachService: Mock<PostfachService>;
const attachmentIcon: string = getDataTestIdOf('postfach-nachricht-attachment-icon'); const attachmentIcon: string = getDataTestIdOf('postfach-nachricht-attachment-icon');
const postfachEditButton: string = getDataTestIdOf('postfach-nachricht-edit-button-container'); const postfachEditButton: string = getDataTestIdOf('postfach-nachricht-edit-button-container');
const postfachOutgoingNachrichtDate: string = getDataTestIdOf('postfach-outgoing-nachricht-date'); const postfachOutgoingNachrichtDate: string = getDataTestIdOf('postfach-outgoing-nachricht-date');
...@@ -55,6 +58,7 @@ describe('OutgoingMailComponent', () => { ...@@ -55,6 +58,7 @@ describe('OutgoingMailComponent', () => {
const routing: string = getDataTestClassOf('outgoing-mail-routing'); const routing: string = getDataTestClassOf('outgoing-mail-routing');
beforeEach(async () => { beforeEach(async () => {
postfachService = mock(PostfachService);
await TestBed.configureTestingModule({ await TestBed.configureTestingModule({
declarations: [ declarations: [
OutgoingMailComponent, OutgoingMailComponent,
...@@ -66,13 +70,15 @@ describe('OutgoingMailComponent', () => { ...@@ -66,13 +70,15 @@ describe('OutgoingMailComponent', () => {
MockComponent(PostfachMailDateComponent), MockComponent(PostfachMailDateComponent),
MockComponent(PostfachNachrichtEditButtonContainerComponent), MockComponent(PostfachNachrichtEditButtonContainerComponent),
], ],
imports: [RouterModule],
providers: [ providers: [
provideRouter([]),
{ {
provide: ON_PAGE, provide: ON_PAGE,
useValue: undefined, useValue: undefined,
}, },
{
provide: PostfachService,
useValue: postfachService,
},
], ],
}).compileComponents(); }).compileComponents();
}); });
...@@ -88,6 +94,7 @@ describe('OutgoingMailComponent', () => { ...@@ -88,6 +94,7 @@ describe('OutgoingMailComponent', () => {
expect(component).toBeTruthy(); expect(component).toBeTruthy();
}); });
describe('template', () => {
describe('attachments', () => { describe('attachments', () => {
it('should only show attachment icon on detail', () => { it('should only show attachment icon on detail', () => {
component.onPage = false; component.onPage = false;
...@@ -188,25 +195,24 @@ describe('OutgoingMailComponent', () => { ...@@ -188,25 +195,24 @@ describe('OutgoingMailComponent', () => {
}); });
}); });
describe('routing should be', () => { describe('link', () => {
it('null on page site', () => { it('should navigate to postfach click', () => {
component.onPage = false; component.navigateToPostfach = jest.fn();
fixture.detectChanges(); dispatchEventFromFixture(fixture, routing, 'click');
const routerElement = getDebugElementFromFixtureByCss(fixture, routing); expect(component.navigateToPostfach).toHaveBeenCalled();
const routerLinkInstance: RouterLinkWithHref = routerElement.injector.get(RouterLinkWithHref); });
expect((<any>routerLinkInstance).routerLinkInput[0]).toEqual('postfach'); });
}); });
it('"postfach" on detail site', () => { describe('component', () => {
component.onPage = true; describe('navigate to postfach', () => {
it('should call postfachService', () => {
fixture.detectChanges(); component.navigateToPostfach();
const routerElement = getDebugElementFromFixtureByCss(fixture, routing); expect(postfachService.navigateToPostfach).toHaveBeenCalled();
const routerLinkInstance: RouterLinkWithHref = routerElement.injector.get(RouterLinkWithHref); });
expect((<any>routerLinkInstance).routerLinkInput).toBeNull();
}); });
}); });
}); });
...@@ -21,10 +21,10 @@ ...@@ -21,10 +21,10 @@
* Die sprachspezifischen Genehmigungen und Beschränkungen * Die sprachspezifischen Genehmigungen und Beschränkungen
* unter der Lizenz sind dem Lizenztext zu entnehmen. * unter der Lizenz sind dem Lizenztext zu entnehmen.
*/ */
import { ON_PAGE, PostfachMailLinkRel, PostfachMailResource } from '@alfa-client/postfach-shared'; import { ON_PAGE, PostfachMailLinkRel, PostfachMailResource, PostfachService } from '@alfa-client/postfach-shared';
import { StateResource } from '@alfa-client/tech-shared'; import { StateResource } from '@alfa-client/tech-shared';
import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared';
import { Component, Inject, Input } from '@angular/core'; import { Component, inject, Inject, Input } from '@angular/core';
@Component({ @Component({
selector: 'alfa-outgoing-mail', selector: 'alfa-outgoing-mail',
...@@ -32,10 +32,16 @@ import { Component, Inject, Input } from '@angular/core'; ...@@ -32,10 +32,16 @@ import { Component, Inject, Input } from '@angular/core';
styleUrls: ['./outgoing-mail.component.scss'], styleUrls: ['./outgoing-mail.component.scss'],
}) })
export class OutgoingMailComponent { export class OutgoingMailComponent {
public readonly postfachService = inject(PostfachService);
@Input() postfachMail: PostfachMailResource; @Input() postfachMail: PostfachMailResource;
@Input() vorgangStateResource: StateResource<VorgangWithEingangResource>; @Input() vorgangStateResource: StateResource<VorgangWithEingangResource>;
readonly postfachNachrichtLinkRel = PostfachMailLinkRel; readonly postfachNachrichtLinkRel = PostfachMailLinkRel;
constructor(@Inject(ON_PAGE) public onPage: boolean) {} constructor(@Inject(ON_PAGE) public onPage: boolean) {}
public navigateToPostfach(): void {
this.postfachService.navigateToPostfach();
}
} }
@if (postfachMailListStateResource.resource | hasLink: PostfachMailListLinkRel.SET_HAS_NEW_POSTFACH_NACHRICHT) { @if (postfachMailListStateResource.resource | hasLink: PostfachMailListLinkRel.SET_HAS_NEW_POSTFACH_NACHRICHT) {
@if (showAsIconButton) { @if (showAsIconButton) {
<a [routerLink]="'../'" tabindex="-1">
<ods-button <ods-button
(clickEmitter)="markMailAsUnread()" (clickEmitter)="markMailAsUnread()"
[tooltip]="'Nachrichten als ungelesen markieren'" [tooltip]="'Nachrichten als ungelesen markieren'"
...@@ -12,9 +11,7 @@ ...@@ -12,9 +11,7 @@
> >
<ods-mail-unread-icon icon /> <ods-mail-unread-icon icon />
</ods-button> </ods-button>
</a>
} @else { } @else {
<a [routerLink]="'../'" tabindex="-1">
<ods-button <ods-button
(clickEmitter)="markMailAsUnread()" (clickEmitter)="markMailAsUnread()"
[tooltip]="'Nachrichten als ungelesen markieren'" [tooltip]="'Nachrichten als ungelesen markieren'"
...@@ -25,6 +22,5 @@ ...@@ -25,6 +22,5 @@
> >
<ods-mail-unread-icon icon class="fill-primary" /> <ods-mail-unread-icon icon class="fill-primary" />
</ods-button> </ods-button>
</a>
} }
} }
...@@ -9,7 +9,6 @@ import { ...@@ -9,7 +9,6 @@ import {
notExistsAsHtmlElement, notExistsAsHtmlElement,
} from '@alfa-client/test-utils'; } from '@alfa-client/test-utils';
import { ComponentFixture, TestBed } from '@angular/core/testing'; import { ComponentFixture, TestBed } from '@angular/core/testing';
import { RouterModule } from '@angular/router';
import { ButtonComponent, MailUnreadIconComponent } from '@ods/system'; import { ButtonComponent, MailUnreadIconComponent } from '@ods/system';
import { MockComponent } from 'ng-mocks'; import { MockComponent } from 'ng-mocks';
import { createPostfachMailListResource } from '../../../../../../postfach-shared/test/postfach'; import { createPostfachMailListResource } from '../../../../../../postfach-shared/test/postfach';
...@@ -33,7 +32,7 @@ describe('MailUnreadButtonLinkContainerComponent', () => { ...@@ -33,7 +32,7 @@ describe('MailUnreadButtonLinkContainerComponent', () => {
postfachService = mock(PostfachService); postfachService = mock(PostfachService);
await TestBed.configureTestingModule({ await TestBed.configureTestingModule({
imports: [MailUnreadButtonLinkContainerComponent, HasLinkPipe, RouterModule.forRoot([])], imports: [MailUnreadButtonLinkContainerComponent, HasLinkPipe],
declarations: [MockComponent(ButtonComponent), MockComponent(MailUnreadIconComponent)], declarations: [MockComponent(ButtonComponent), MockComponent(MailUnreadIconComponent)],
providers: [ providers: [
{ {
......
...@@ -2,14 +2,13 @@ import { CommandResource } from '@alfa-client/command-shared'; ...@@ -2,14 +2,13 @@ import { CommandResource } from '@alfa-client/command-shared';
import { PostfachMailListLinkRel, PostfachMailListResource, PostfachService } from '@alfa-client/postfach-shared'; import { PostfachMailListLinkRel, PostfachMailListResource, PostfachService } from '@alfa-client/postfach-shared';
import { createEmptyStateResource, HasLinkPipe, StateResource } from '@alfa-client/tech-shared'; import { createEmptyStateResource, HasLinkPipe, StateResource } from '@alfa-client/tech-shared';
import { Component, inject, Input } from '@angular/core'; import { Component, inject, Input } from '@angular/core';
import { RouterLink } from '@angular/router';
import { ButtonComponent, MailUnreadIconComponent, TooltipDirective } from '@ods/system'; import { ButtonComponent, MailUnreadIconComponent, TooltipDirective } from '@ods/system';
import { Observable, of } from 'rxjs'; import { Observable, of } from 'rxjs';
@Component({ @Component({
selector: 'alfa-mail-unread-button-link-container', selector: 'alfa-mail-unread-button-link-container',
standalone: true, standalone: true,
imports: [HasLinkPipe, MailUnreadIconComponent, TooltipDirective, ButtonComponent, RouterLink], imports: [HasLinkPipe, MailUnreadIconComponent, TooltipDirective, ButtonComponent],
templateUrl: './mail-unread-button-link-container.component.html', templateUrl: './mail-unread-button-link-container.component.html',
}) })
export class MailUnreadButtonLinkContainerComponent { export class MailUnreadButtonLinkContainerComponent {
......
...@@ -231,6 +231,10 @@ function hasVorgangParam(routeData: RouteData): boolean { ...@@ -231,6 +231,10 @@ function hasVorgangParam(routeData: RouteData): boolean {
return isNotNull(routeData.queryParameter[VORGANG_WITH_EINGANG_ROUTE_PARAM]); return isNotNull(routeData.queryParameter[VORGANG_WITH_EINGANG_ROUTE_PARAM]);
} }
export function getVorgangParam(routeData: RouteData): string {
return routeData.queryParameter[VORGANG_WITH_EINGANG_ROUTE_PARAM];
}
function hasSegements(routeData: RouteData, numberOfSegements: number): boolean { function hasSegements(routeData: RouteData, numberOfSegements: number): boolean {
return routeData.urlSegments.length === numberOfSegements; return routeData.urlSegments.length === numberOfSegements;
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment