diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.html index ce45b14b94f61fe78d7ee7ab0dccb824a198deaf..577c7a93620511cf7607a0cf1e95a16b82c2a4c7 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.html @@ -23,72 +23,81 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<h3>Antragstellerdaten</h3> -<mat-list *ngIf="antragstellerExists; else noAntragsteller" data-test-id="antragsteller-mat-list"> - <mat-list-item *ngIf="name"> - <mat-icon matListItemIcon class="material-icons-outlined" aria-label="Name" aria-hidden="false" - >assignment_ind</mat-icon - > - <div matListItemLine data-test-id="antragsteller-name"> +<h3 class="font-medium leading-6 mb-2">Antragsteller</h3> +<ul + *ngIf="antragstellerExists; else noAntragsteller" + data-test-id="antragsteller-list" + class="text-sm leading-6 my-1" +> + <div class="font-medium mb-2"> + <h4 *ngIf="!isFirma && name" data-test-id="antragsteller-name" class="my-1"> {{ name }} + </h4> + <h4 *ngIf="isFirma" data-test-id="antragsteller-firma-name" class="my-1"> + {{ antragsteller.firmaName }} + </h4> + </div> + <li + *ngIf="antragstellerStrasseHausnummer || antragstellerPlzOrt" + data-test-id="antragsteller-adresse" + class="flex gap-2 my-2" + > + <mat-icon + class="material-icons-outlined" + aria-label="Adresse" + aria-hidden="false" + >location_on</mat-icon + > + <div class="flex flex-col"> + <p data-test-id="antragsteller-strasse-hausnummer"> + {{ antragstellerStrasseHausnummer }} + </p> + <p data-test-id="antragsteller-plz-ort"> + {{ antragstellerPlzOrt }} + </p> </div> - </mat-list-item> - <mat-list-item *ngIf="antragsteller.email"> + </li> + <div *ngIf="isFirma && name" class="mb-1"> + <h4 class="my-1 font-medium"> + Ansprechpartner + </h4> + <p class="my-1" data-test-id="antragsteller-ansprechpartner-name">{{ name }}</p> + </div> + <li *ngIf="antragsteller.email" [title]="antragsteller.email" class="flex gap-2 my-2"> <mat-icon - matListItemIcon class="material-icons-outlined" aria-label="E-Mail-Adresse" aria-hidden="false" >email</mat-icon > - <div matListItemLine data-test-id="antragsteller-email"> + <p data-test-id="antragsteller-email"> {{ antragsteller.email }} - </div> - </mat-list-item> - <mat-list-item *ngIf="antragsteller.telefon"> + </p> + </li> + <li *ngIf="antragsteller.telefon" class="flex gap-2 my-2"> <mat-icon - matListItemIcon class="material-icons-outlined" aria-label="Telefonnummer" aria-hidden="false" >call_black</mat-icon > - <div matListItemLine data-test-id="antragsteller-telefon"> + <p data-test-id="antragsteller-telefon"> {{ antragsteller.telefon }} - </div> - </mat-list-item> - <mat-list-item - *ngIf="antragstellerStrasseHausnummer || antragstellerPlzOrt" - data-test-id="antragsteller-adresse" - > - <mat-icon - matListItemIcon - class="material-icons-outlined" - aria-label="Adresse" - aria-hidden="false" - >location_on</mat-icon - > - <div matListItemLine data-test-id="antragsteller-strasse-hausnummer"> - {{ antragstellerStrasseHausnummer }} - </div> - <div matListItemLine data-test-id="antragsteller-plz-ort"> - {{ antragstellerPlzOrt }} - </div> - </mat-list-item> - <mat-list-item *ngIf="geburt"> + </p> + </li> + <li *ngIf="geburt" class="flex gap-2 my-2"> <mat-icon - matListItemIcon class="material-icons-outlined" aria-label="Geburtsdatum und Geburtsort" aria-hidden="false" >cake</mat-icon > - <div matListItemLine data-test-id="antragsteller-geburt"> + <p data-test-id="antragsteller-geburt"> {{ geburt }} - </div> - </mat-list-item> -</mat-list> + </p> + </li> +</ul> <ng-template #noAntragsteller> - <div data-test-id="no-antragsteller">Nicht vorhanden.</div> + <p data-test-id="no-antragsteller" class="text-sm leading-6">Nicht vorhanden.</p> </ng-template> diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.scss b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.scss deleted file mode 100644 index e96819a11e00391965c3d55eabb4e28810473d03..0000000000000000000000000000000000000000 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.scss +++ /dev/null @@ -1,26 +0,0 @@ -/** - * Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den - * Ministerpräsidenten des Landes Schleswig-Holstein - * Staatskanzlei - * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung - * - * Lizenziert unter der EUPL, Version 1.2 oder - sobald - * diese von der Europäischen Kommission genehmigt wurden - - * Folgeversionen der EUPL ("Lizenz"); - * Sie dürfen dieses Werk ausschließlich gemäß - * dieser Lizenz nutzen. - * Eine Kopie der Lizenz finden Sie hier: - * - * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 - * - * Sofern nicht durch anwendbare Rechtsvorschriften - * gefordert oder in schriftlicher Form vereinbart, wird - * die unter der Lizenz verbreitete Software "so wie sie - * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - - * ausdrücklich oder stillschweigend - verbreitet. - * Die sprachspezifischen Genehmigungen und Beschränkungen - * unter der Lizenz sind dem Lizenztext zu entnehmen. - */ -h3 { - font-weight: 500; -} diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.spec.ts index 9c8b7d908e8124ab85492f4f8c5c129b3b21e510..69dafda3580b03e99666181f0d662d8c223ab27c 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.spec.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.spec.ts @@ -40,6 +40,9 @@ describe('VorgangDetailAntragstellerComponent', () => { let fixture: ComponentFixture<VorgangDetailAntragstellerComponent>; const antragstellerName: string = '[data-test-id="antragsteller-name"]'; + const antragstellerAnsprechspartnerName: string = + '[data-test-id="antragsteller-ansprechpartner-name"]'; + const antragstellerFirmaName: string = '[data-test-id="antragsteller-firma-name"]'; const antragstellerEmail: string = '[data-test-id="antragsteller-email"]'; const antragstellerTelefon: string = '[data-test-id="antragsteller-telefon"]'; const antragstellerStrasseHausnummer: string = @@ -47,10 +50,11 @@ describe('VorgangDetailAntragstellerComponent', () => { const antragstellerPlzOrt: string = '[data-test-id="antragsteller-plz-ort"]'; const antragstellerGeburt: string = '[data-test-id="antragsteller-geburt"]'; const antragstellerAdresse: string = '[data-test-id="antragsteller-adresse"]'; - const antragstellerMatList: string = '[data-test-id="antragsteller-mat-list"]'; + const antragstellerList: string = '[data-test-id="antragsteller-list"]'; const noAntragsteller: string = '[data-test-id="no-antragsteller"]'; const antragsteller: Antragsteller = createAntragsteller(); + const antragstellerWithoutCompany = { ...antragsteller, firmaName: '' }; beforeEach(async () => { await TestBed.configureTestingModule({ @@ -71,8 +75,8 @@ describe('VorgangDetailAntragstellerComponent', () => { }); describe('full name', () => { - it('should be visible', () => { - component.antragsteller = antragsteller; + it('should be visible, if applicant is not company', () => { + component.antragsteller = antragstellerWithoutCompany; fixture.detectChanges(); const element = getElementFromFixture(fixture, antragstellerName); @@ -80,8 +84,22 @@ describe('VorgangDetailAntragstellerComponent', () => { expect(element).toHaveTextContent(component.name); }); - it('should not be visible', () => { - component.antragsteller = { ...antragsteller, anrede: '', vorname: '', nachname: '' }; + it('should not be visible, if applicant is company', () => { + component.antragsteller = antragsteller; + fixture.detectChanges(); + + const element = getElementFromFixture(fixture, antragstellerName); + + expect(element).not.toBeInstanceOf(HTMLElement); + }); + + it('should not be visible, if contact person name is empty', () => { + component.antragsteller = { + ...antragstellerWithoutCompany, + anrede: '', + vorname: '', + nachname: '', + }; fixture.detectChanges(); const element = getElementFromFixture(fixture, antragstellerName); @@ -101,6 +119,72 @@ describe('VorgangDetailAntragstellerComponent', () => { }); }); + describe('full name contact person', () => { + it('should be visible, if applicant is company', () => { + component.antragsteller = antragsteller; + fixture.detectChanges(); + + const element = getElementFromFixture(fixture, antragstellerAnsprechspartnerName); + + expect(element).toHaveTextContent(component.name); + }); + + it('should not be visible, if applicant is not company', () => { + component.antragsteller = antragstellerWithoutCompany; + fixture.detectChanges(); + + const element = getElementFromFixture(fixture, antragstellerAnsprechspartnerName); + + expect(element).not.toBeInstanceOf(HTMLElement); + }); + + it('should not be visible, if name is empty', () => { + component.antragsteller = { ...antragsteller, anrede: '', vorname: '', nachname: '' }; + fixture.detectChanges(); + + const element = getElementFromFixture(fixture, antragstellerName); + + expect(element).not.toBeInstanceOf(HTMLElement); + }); + }); + + describe('firma name', () => { + it('should be visible', () => { + component.antragsteller = antragsteller; + fixture.detectChanges(); + + const element = getElementFromFixture(fixture, antragstellerFirmaName); + + expect(element).toHaveTextContent(component.antragsteller.firmaName); + }); + + it('should not be visible', () => { + component.antragsteller = antragstellerWithoutCompany; + fixture.detectChanges(); + + const element = getElementFromFixture(fixture, antragstellerFirmaName); + + expect(element).not.toBeInstanceOf(HTMLElement); + }); + }); + describe('isFirma', () => { + it('should return true', () => { + component.antragsteller = antragsteller; + + const isFirma = component.isFirma; + + expect(isFirma).toBeTruthy; + }); + + it('should return false', () => { + component.antragsteller = antragstellerWithoutCompany; + + const isFirma = component.isFirma; + + expect(isFirma).toBeFalsy; + }); + }); + describe('email', () => { it('should be visible', () => { component.antragsteller = antragsteller; @@ -184,7 +268,7 @@ describe('VorgangDetailAntragstellerComponent', () => { it('should be visible', () => { const element = getElementFromFixture(fixture, antragstellerAdresse); - expect(element).toHaveClass('mdc-list-item'); + expect(element).toBeInstanceOf(HTMLElement); }); it('should not be visible', () => { @@ -204,7 +288,7 @@ describe('VorgangDetailAntragstellerComponent', () => { }); it('mat-list should be visible', () => { - const element = getElementFromFixture(fixture, antragstellerMatList); + const element = getElementFromFixture(fixture, antragstellerList); expect(element).toBeInstanceOf(HTMLElement); }); @@ -230,6 +314,7 @@ describe('VorgangDetailAntragstellerComponent', () => { geburtsort: EMPTY_STRING, nachname: EMPTY_STRING, vorname: EMPTY_STRING, + firmaName: EMPTY_STRING, email: EMPTY_STRING, telefon: EMPTY_STRING, strasse: EMPTY_STRING, @@ -241,7 +326,7 @@ describe('VorgangDetailAntragstellerComponent', () => { } it('mat-list should not be visible', () => { - const element = getElementFromFixture(fixture, antragstellerMatList); + const element = getElementFromFixture(fixture, antragstellerList); expect(element).not.toBeInstanceOf(HTMLElement); }); @@ -260,7 +345,7 @@ describe('VorgangDetailAntragstellerComponent', () => { }); it('mat-list should not be visible', () => { - const element = getElementFromFixture(fixture, antragstellerMatList); + const element = getElementFromFixture(fixture, antragstellerList); expect(element).not.toBeInstanceOf(HTMLElement); }); diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.ts index 0376553e4b040129e51a4b0209538d4b734841d5..f73e8b0cc9a98fff391c5e8981aebf5b2115395e 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-area/vorgang-detail-antragsteller/vorgang-detail-antragsteller.component.ts @@ -21,15 +21,14 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { Component, Input } from '@angular/core'; import { allEmpty, formatFullDate, isParsableToDate } from '@alfa-client/tech-shared'; import { Antragsteller } from '@alfa-client/vorgang-shared'; +import { Component, Input } from '@angular/core'; import { isNull } from 'lodash-es'; @Component({ selector: 'alfa-vorgang-detail-antragsteller', templateUrl: './vorgang-detail-antragsteller.component.html', - styleUrls: ['./vorgang-detail-antragsteller.component.scss'], }) export class VorgangDetailAntragstellerComponent { private readonly TRIM_TO_ONE_SPACE = /\s{2,}/g; @@ -43,6 +42,7 @@ export class VorgangDetailAntragstellerComponent { if ( allEmpty( this.name, + this.antragsteller.firmaName, this.antragstellerStrasseHausnummer, this.antragstellerPlzOrt, this.geburt, @@ -82,4 +82,8 @@ export class VorgangDetailAntragstellerComponent { } return this.antragsteller.geburtsdatum; } + + get isFirma(): boolean { + return !!this.antragsteller.firmaName; + } } diff --git a/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts b/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts index 81dd3e7076f9a65fa045994828cd963790b4fe9a..c77d29847aa5a2ab67291639b3d98ae496998b49 100644 --- a/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts +++ b/alfa-client/libs/vorgang-shared/src/lib/vorgang.model.ts @@ -64,6 +64,7 @@ export interface Antragsteller { geburtsort: string; nachname: string; vorname: string; + firmaName: string; email: string; telefon: string; strasse: string; diff --git a/alfa-client/libs/vorgang-shared/test/vorgang.ts b/alfa-client/libs/vorgang-shared/test/vorgang.ts index c20fb4206634069113d7edf145446bd1d10c3b8e..0433fe5ba3ba16cb6e2c51a07c144e3241278c18 100644 --- a/alfa-client/libs/vorgang-shared/test/vorgang.ts +++ b/alfa-client/libs/vorgang-shared/test/vorgang.ts @@ -88,6 +88,7 @@ export function createAntragsteller(): Antragsteller { geburtsort: faker.address.city(), nachname: faker.name.lastName(), vorname: faker.name.firstName(), + firmaName: faker.company.companyName(), email: faker.internet.email(), telefon: `+ ${faker.datatype.number(10)}`, strasse: faker.address.streetName(),