diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts index e60c95076e98ca10efd497ca91ec35114653f539..91d42f600402a7a65dff32dfb3eefdc6e2eda4aa 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.spec.ts @@ -977,7 +977,7 @@ describe('BescheidService', () => { it('should set create beschied document in progress', () => { service.createBescheidDocument(); - expect(service.createBescheidDocumentInProgress$.value.loading).toBeTruthy(); + expect(service.createBescheidDocumentInProgress$.value).toEqual(commandStateResource); }); it('should set upload beschied document in progress loading false', () => { diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts index 90dbfa4346be7cf37beb1daf7bdbcd5c7db348be..e674d629694c1f2c09a2b68ba72b45f1a1a4218a 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts @@ -9,7 +9,7 @@ import { CommandResourceService, CommandService, getEffectedResourceUrl, - hasCommandError, + notHasCommandError, tapOnCommandSuccessfullyDone, } from '@alfa-client/command-shared'; import { @@ -429,9 +429,8 @@ export class BescheidService { private handleCreateBescheidDocumentResponse( commandStateResource: StateResource<CommandResource>, ): void { - if (hasCommandError(commandStateResource.resource)) { - this.createBescheidDocumentInProgress$.next(commandStateResource); - } else { + this.createBescheidDocumentInProgress$.next(commandStateResource); + if (notHasCommandError(commandStateResource.resource)) { const documentUri: ResourceUri = getEffectedResourceUrl(commandStateResource.resource); this.bescheidDocumentUri$.next(documentUri); this.loadBescheidDocumentByUri(documentUri); diff --git a/alfa-client/libs/command-shared/src/lib/command.util.spec.ts b/alfa-client/libs/command-shared/src/lib/command.util.spec.ts index 7567dbc61f0de2a129af59416b91e373ace7e40d..4928d0b23d0d58d7c3514ee081a29deea8365872 100644 --- a/alfa-client/libs/command-shared/src/lib/command.util.spec.ts +++ b/alfa-client/libs/command-shared/src/lib/command.util.spec.ts @@ -21,23 +21,11 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { - createCommandErrorResource, - createCommandListResource, - createCommandResource, -} from 'libs/command-shared/test/command'; +import { createCommandErrorResource, createCommandListResource, createCommandResource, } from 'libs/command-shared/test/command'; import { CommandLinkRel } from './command.linkrel'; import { CommandErrorMessage } from './command.message'; import { CommandListResource, CommandResource } from './command.model'; -import { - getPendingCommandByOrder, - hasCommandError, - isConcurrentModification, - isDone, - isPending, - isRevokeable, - isSuccessfulDone, -} from './command.util'; +import { getPendingCommandByOrder, hasCommandError, isConcurrentModification, isDone, isPending, isRevokeable, isSuccessfulDone, notHasCommandError, } from './command.util'; describe('CommandUtil', () => { describe('isRevokeable', () => { @@ -172,4 +160,18 @@ describe('CommandUtil', () => { expect(isDoneSuccessfuly).toBeFalsy(); }); }); + + describe('notHasCommandError', () => { + it('should return true', () => { + const hasError: boolean = notHasCommandError(createCommandResource()); + + expect(hasError).toBeTruthy(); + }); + + it('should return false', () => { + const hasError: boolean = notHasCommandError(createCommandErrorResource()); + + expect(hasError).toBeFalsy(); + }); + }); }); diff --git a/alfa-client/libs/command-shared/src/lib/command.util.ts b/alfa-client/libs/command-shared/src/lib/command.util.ts index 2dc64f425d39048734607a64cc12b984a47f3c03..fca9f95c03d57b6b6812d5e760f4c4a4ff0d9c63 100644 --- a/alfa-client/libs/command-shared/src/lib/command.util.ts +++ b/alfa-client/libs/command-shared/src/lib/command.util.ts @@ -21,7 +21,7 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { ResourceUri, getEmbeddedResource, getUrl, hasLink } from '@ngxp/rest'; +import { getEmbeddedResource, getUrl, hasLink, ResourceUri } from '@ngxp/rest'; import { isEmpty, isNil, isObject } from 'lodash-es'; import { CommandLinkRel, CommandListLinkRel } from './command.linkrel'; import { CommandErrorMessage } from './command.message'; @@ -47,6 +47,10 @@ export function hasCommandError(commandResource: CommandResource): boolean { return hasErrorMessage(commandResource) && !isPending(commandResource); } +export function notHasCommandError(commandResource: CommandResource): boolean { + return !hasCommandError(commandResource); +} + export function getPendingCommandByOrder( pendingCommands: CommandListResource, commandOrder: any[], diff --git a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts index 143fd2b021b86b2ab00e654a735b6f2d79de4465..086494defe0ede679d49d6cd509ba4256399f72a 100644 --- a/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts +++ b/alfa-client/libs/design-system/src/lib/form/text-input/text-input.component.ts @@ -28,10 +28,7 @@ type TextInputVariants = VariantProps<typeof textInputVariants>; template: ` <div> <label [for]="id" class="text-md mb-2 block font-medium text-text" - >{{ label - }}<ng-container *ngIf="required" - ><i aria-hidden="true">*</i><i class="sr-only">(erforderlich)</i></ng-container - ></label + >{{ label }}<ng-container *ngIf="required"><i aria-hidden="true">*</i></ng-container></label > <div class="mt-2"> <input @@ -41,6 +38,7 @@ type TextInputVariants = VariantProps<typeof textInputVariants>; [ngClass]="textInputVariants({ variant })" [placeholder]="placeholder" [autocomplete]="autocomplete" + [required]="required" /> </div> <ng-content select="[error]"></ng-content> diff --git a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts index e449fe77bf900edd3c377d66a5781398cffa4dfc..9574b15496bbcf1cff81387b35383f480aaa0596 100644 --- a/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts +++ b/alfa-client/libs/design-system/src/lib/form/textarea/textarea.component.ts @@ -27,10 +27,7 @@ type TextareaVariants = VariantProps<typeof textareaVariants>; template: ` <div class="mt-2"> <label [for]="id" class="text-md mb-2 block font-medium text-text" - >{{ label - }}<ng-container *ngIf="required" - ><i aria-hidden="true">*</i><i class="sr-only">(erforderlich)</i></ng-container - ></label + >{{ label }}<ng-container *ngIf="required"><i aria-hidden="true">*</i></ng-container></label > <textarea [id]="id" @@ -39,6 +36,7 @@ type TextareaVariants = VariantProps<typeof textareaVariants>; [ngClass]="textareaVariants({ variant })" [placeholder]="placeholder" [autocomplete]="autocomplete" + [required]="required" ></textarea> <ng-content select="[error]"></ng-content> </div> diff --git a/alfa-client/libs/forwarding/src/lib/vorgang-forwarding-container/vorgang-forward-formular/vorgang-forward-form/vorgang-forward-form.component.html b/alfa-client/libs/forwarding/src/lib/vorgang-forwarding-container/vorgang-forward-formular/vorgang-forward-form/vorgang-forward-form.component.html index 4425e0e321397ec41da55df4e01bedb2dc04f172..e7bf47e035ffda11896c113aba0a0450381f0796 100644 --- a/alfa-client/libs/forwarding/src/lib/vorgang-forwarding-container/vorgang-forward-formular/vorgang-forward-form/vorgang-forward-form.component.html +++ b/alfa-client/libs/forwarding/src/lib/vorgang-forwarding-container/vorgang-forward-formular/vorgang-forward-form/vorgang-forward-form.component.html @@ -29,6 +29,7 @@ [formControlName]="formServiceClass.FIELD_EMAIL" autocomplete="email" placeholder="E-Mail Adresse" + [required]="true" > </ozgcloud-text-editor> @@ -36,6 +37,7 @@ label="Passwort" [formControlName]="formServiceClass.FIELD_PASSWORD" placeholder="Passwort für die Verschlüsselung" + [required]="true" > </ozgcloud-text-editor> diff --git a/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.html b/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.html index da3b6072530f0402bea3dadf7dac41f97712d9ed..02cf64660bd972c3b2a2b19a7cf30b04c58194c7 100644 --- a/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.html +++ b/alfa-client/libs/kommentar/src/lib/kommentar-list-in-vorgang-container/kommentar-form/kommentar-form.component.html @@ -24,7 +24,11 @@ --> <form class="form" [formGroup]="formService.form"> - <ozgcloud-textarea-editor [formControlName]="formServiceClass.TEXT" label="Kommentar"> + <ozgcloud-textarea-editor + [formControlName]="formServiceClass.TEXT" + label="Kommentar" + [required]="true" + > </ozgcloud-textarea-editor> <alfa-binary-file-attachment-container diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.html b/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.html index c56d5eeb8514ed4295ffba4817c573e304009ffb..cea292daf1e3bfe942599923ec2cba8083a7c3ce 100644 --- a/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.html +++ b/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.html @@ -33,12 +33,15 @@ [formControlName]="formServiceClass.FIELD_SUBJECT" label="Betreff" [autoFocus]="true" + [required]="true" > </ozgcloud-text-editor> <ozgcloud-textarea-editor [formControlName]="formServiceClass.FIELD_MAIL_BODY" label="Text" - class="message-editor" + class="message-editor mt-3" + [autoFocus]="true" + [required]="true" > </ozgcloud-textarea-editor> diff --git a/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.scss b/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.scss index d72717d84ac61991ea6146183c7800a5ed773fae..5b22d572e2a37eb567ba59013f2fc06473826ff6 100644 --- a/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.scss +++ b/alfa-client/libs/postfach/src/lib/postfach-mail-form/postfach-mail-form.component.scss @@ -38,15 +38,8 @@ } .message-editor { - margin-top: -30px; + margin-top: -20px; display: block; - - ::ng-deep { - label, - .mat-lable { - visibility: hidden; - } - } } .receiver { diff --git a/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.html b/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.html index 3ca3c2d4caaf053deff6cf5101213c93be36e68d..6f484f807eca85ab9ccc7bc42c43c12c9bdc850f 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.html +++ b/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.html @@ -29,6 +29,7 @@ <input #autocompleteInput [attr.data-test-id]="(label | convertForDataTest) + '-autocomplete-input'" + [required]="required" type="text" matInput [matAutocomplete]="auto" diff --git a/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.ts b/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.ts index 1d1a10a12d85f394d6702db756abb6bb81aad810..814dc618b5a9b4cd8d9d0e9fd1f7690110e7d495 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/autocomplete-editor/autocomplete-editor.component.ts @@ -45,6 +45,7 @@ export class AutocompleteEditorComponent { @Input() label: string; @Input() values: Selectable[] = []; + @Input() required: boolean = false; @Output() onKeyUp: EventEmitter<void> = new EventEmitter(); @Output() onOptionSelected: EventEmitter<Selectable> = new EventEmitter(); diff --git a/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.html b/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.html index dd35f14177f9f6b6de7b665da4c71f0ec6bb5581..589e1679db0ad9e505aa9b98a1c981b366e5abfb 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.html +++ b/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.html @@ -30,6 +30,7 @@ [matDatepicker]="picker" [formControl]="fieldControl" (blur)="touch()" + [required]="required" [attr.data-test-id]="(label | convertForDataTest) + '-date-input'" (dateInput)="inputEvent($event)" (blur)="onBlur()" diff --git a/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.ts b/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.ts index b93828d71bece9019d6ce554f0e93709114b4bc6..27619ab5f03eb534053f871ae817dcacd07f5fe3 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/date-editor/date-editor.component.ts @@ -34,6 +34,7 @@ import { FormControlEditorAbstractComponent } from '../formcontrol-editor.abstra }) export class DateEditorComponent extends FormControlEditorAbstractComponent { @Input() label: string; + @Input() required: boolean = false; inputEvent(event: MatDatepickerInputEvent<Date>): void { this.onChange(event.value); diff --git a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.html b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.html index 9087fe250f23f35de30bf35cd57e9dcdc014bc57..bcf6e536c27a4a13aab0a99e43c2c155920bc241 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.html +++ b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.html @@ -39,6 +39,7 @@ [autocomplete]="autocomplete" [readonly]="readOnly" (blur)="touch()" + [required]="required" [attr.data-test-id]="(label | convertForDataTest) + '-text-input'" [class.with-clear-button]="showClearButton$ | async" /> diff --git a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.ts b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.ts index a64326dcbad46ccca353328cf70477fe653e4b29..017dab82a8ba476c585b0af20b9f7c3080e0ff7b 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/text-editor/text-editor.component.ts @@ -21,11 +21,11 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -import { AfterViewInit, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core'; -import { FormControlEditorAbstractComponent } from '../formcontrol-editor.abstract.component'; -import { map, Observable, startWith } from 'rxjs'; import { hasContent } from '@alfa-client/tech-shared'; +import { AfterViewInit, Component, ElementRef, Input, OnInit, ViewChild } from '@angular/core'; import { SubscriptSizing } from '@angular/material/form-field'; +import { Observable, map, startWith } from 'rxjs'; +import { FormControlEditorAbstractComponent } from '../formcontrol-editor.abstract.component'; @Component({ selector: 'ozgcloud-text-editor', @@ -45,7 +45,8 @@ export class TextEditorComponent @Input() appearance: 'outline' | 'fill' = 'fill'; @Input() readOnly: boolean; @Input() autoFocus: boolean; - @Input() clearable = false; + @Input() clearable: boolean = false; + @Input() required: boolean = false; @Input() subscriptSizing: SubscriptSizing = 'fixed'; showClearButton$: Observable<boolean>; diff --git a/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.html b/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.html index c40765078be75b0b8a038ffa7896f82dafed9a54..cf3135707e7a986230e2dc9957326bb1766a6a88 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.html +++ b/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.html @@ -23,7 +23,7 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<mat-form-field [appearance]="appearance"> +<mat-form-field [appearance]="appearance" [floatLabel]="autoFocus ? 'always' : 'auto'"> <mat-label>{{ label }}</mat-label> <textarea @@ -32,6 +32,7 @@ matInput cdkTextareaAutosize [formControl]="fieldControl" + [required]="required" [attr.data-test-id]="(label | convertForDataTest) + '-textarea-input'" (blur)="touch()" ></textarea> diff --git a/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.ts b/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.ts index b5c876ac008f4fa926459a7cefeba05a185b657c..ff008c8ba924f7ff54291ecf8f0130bda01aeea5 100644 --- a/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.ts +++ b/alfa-client/libs/ui/src/lib/ui/editor/textarea-editor/textarea-editor.component.ts @@ -39,6 +39,8 @@ export class TextAreaEditorComponent @Input() placeholder: string; @Input() label: string = ''; @Input() appearance: 'outline' | 'fill' = 'fill'; + @Input() required: boolean = false; + @Input() autoFocus: boolean = false; ngAfterViewInit() { this.autosize.resizeToFitContent(true); diff --git a/alfa-client/libs/user-profile/src/lib/user-profile-search-container/user-profile-search/user-profile-search.component.html b/alfa-client/libs/user-profile/src/lib/user-profile-search-container/user-profile-search/user-profile-search.component.html index e88bfb77885c00c29ac5eb6955ca5a63d8f18211..156bc444e33399d0b30b983eb4a36e9144d180d2 100644 --- a/alfa-client/libs/user-profile/src/lib/user-profile-search-container/user-profile-search/user-profile-search.component.html +++ b/alfa-client/libs/user-profile/src/lib/user-profile-search-container/user-profile-search/user-profile-search.component.html @@ -27,6 +27,7 @@ <ozgcloud-autocomplete-editor data-test-id="user-search" label="Bearbeiter" + [required]="true" [formControlName]="formServiceClass.SEARCH_FIELD" [values]="searchedUserProfiles.resource" (onKeyUp)="onKeyUp()" diff --git a/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.html b/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.html index be0c599a5b7e04df8b03cbe0c51568aed474e709..e86356acece82f9d84a903d8a71d0181ffc5c6bf 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.html @@ -23,7 +23,7 @@ unter der Lizenz sind dem Lizenztext zu entnehmen. --> -<ng-container *ngIf="vorgang | hasLink: linkRel.ABSCHLIESSEN"> +<ng-container *ngIf="isVisible"> <ozgcloud-stroked-button-with-spinner *ngIf="!showAsIconButton" data-test-id="abschliessen-button" diff --git a/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.spec.ts b/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.spec.ts index 4d98aa579e9927feab12c1474ebc7dfaddb8e926..53f7eb0cbc0b54c8a83a4bba21443ce3377cd2b8 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.spec.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.spec.ts @@ -22,22 +22,10 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { CommandResource } from '@alfa-client/command-shared'; -import { - HasLinkPipe, - StateResource, - createEmptyStateResource, - createStateResource, -} from '@alfa-client/tech-shared'; +import { createEmptyStateResource, createStateResource, HasLinkPipe, StateResource, } from '@alfa-client/tech-shared'; import { mock } from '@alfa-client/test-utils'; -import { - IconButtonWithSpinnerComponent, - OzgcloudStrokedButtonWithSpinnerComponent, -} from '@alfa-client/ui'; -import { - VorgangCommandService, - VorgangStatus, - VorgangWithEingangLinkRel, -} from '@alfa-client/vorgang-shared'; +import { IconButtonWithSpinnerComponent, OzgcloudStrokedButtonWithSpinnerComponent, } from '@alfa-client/ui'; +import { VorgangCommandService, VorgangWithEingangLinkRel, VorgangWithEingangResource, } from '@alfa-client/vorgang-shared'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { createCommandResource } from 'libs/command-shared/test/command'; import { getDataTestIdOf } from 'libs/tech-shared/test/data-test'; @@ -126,7 +114,7 @@ describe('AbschliessenButtonComponent', () => { }); it('should be hidden', () => { - component.vorgang = createVorgangWithEingangResource(); + component.isVisible = false; fixture.detectChanges(); const buttonElement = fixture.nativeElement.querySelector(abschliessenButton); @@ -135,9 +123,7 @@ describe('AbschliessenButtonComponent', () => { }); it('should be visible', () => { - component.vorgang = createVorgangWithEingangResource([ - VorgangWithEingangLinkRel.ABSCHLIESSEN, - ]); + component.isVisible = true; fixture.detectChanges(); const buttonElement = fixture.nativeElement.querySelector(abschliessenButton); @@ -153,7 +139,7 @@ describe('AbschliessenButtonComponent', () => { }); it('should be hidden', () => { - component.vorgang = createVorgangWithEingangResource(); + component.isVisible = false; fixture.detectChanges(); const buttonElement = fixture.nativeElement.querySelector(abschliessenIconButton); @@ -161,11 +147,8 @@ describe('AbschliessenButtonComponent', () => { expect(buttonElement).not.toBeInstanceOf(HTMLElement); }); - it('should be visible', () => { - component.vorgang = createVorgangWithEingangResource([ - VorgangWithEingangLinkRel.ABSCHLIESSEN, - ]); + component.isVisible = true; fixture.detectChanges(); const buttonElement = fixture.nativeElement.querySelector(abschliessenIconButton); @@ -173,4 +156,58 @@ describe('AbschliessenButtonComponent', () => { expect(buttonElement).toBeInstanceOf(HTMLElement); }); }); + + describe('set vorgang', () => { + it('should set vorgang with eingang resource', () => { + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource(); + + component.vorgang = vorgang; + + expect(component.vorgangWithEingangResource).toBe(vorgang); + }); + + it('should set visible to true', () => { + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource([ + VorgangWithEingangLinkRel.ABSCHLIESSEN, + ]); + component.vorgang = vorgang; + + const isVisible: boolean = component.isVisible; + + expect(isVisible).toBeTruthy(); + }); + + it('should set visible to false', () => { + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource(); + component.vorgang = vorgang; + + const isVisible: boolean = component.isVisible; + + expect(isVisible).toBeFalsy(); + }); + + it('should set visible to false if have createBescheidDraft link', () => { + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource([ + VorgangWithEingangLinkRel.ABSCHLIESSEN, + VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT, + ]); + component.vorgang = vorgang; + + const isVisible: boolean = component.isVisible; + + expect(isVisible).toBeFalsy(); + }); + + it('should set visible to false if have bescheidDraft link', () => { + const vorgang: VorgangWithEingangResource = createVorgangWithEingangResource([ + VorgangWithEingangLinkRel.ABSCHLIESSEN, + VorgangWithEingangLinkRel.BESCHEID_DRAFT, + ]); + component.vorgang = vorgang; + + const isVisible: boolean = component.isVisible; + + expect(isVisible).toBeFalsy(); + }); + }); }); diff --git a/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.ts b/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.ts index 15df48ad2b497eed92ec4dfd36278e18fd3e506f..891dc472cdf377bc9ee28125b925d6a1bcd2dacf 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/buttons/abschliessen-button/abschliessen-button.component.ts @@ -22,13 +22,10 @@ * unter der Lizenz sind dem Lizenztext zu entnehmen. */ import { CommandResource } from '@alfa-client/command-shared'; -import { StateResource, createEmptyStateResource } from '@alfa-client/tech-shared'; -import { - VorgangCommandService, - VorgangWithEingangLinkRel, - VorgangWithEingangResource, -} from '@alfa-client/vorgang-shared'; +import { createEmptyStateResource, notHasLink, StateResource } from '@alfa-client/tech-shared'; +import { VorgangCommandService, VorgangWithEingangLinkRel, VorgangWithEingangResource, } from '@alfa-client/vorgang-shared'; import { Component, Input, OnInit } from '@angular/core'; +import { hasLink } from '@ngxp/rest'; import { Observable, of } from 'rxjs'; @Component({ @@ -37,9 +34,19 @@ import { Observable, of } from 'rxjs'; styleUrls: ['./abschliessen-button.component.scss'], }) export class AbschliessenButtonComponent implements OnInit { - @Input() vorgang: VorgangWithEingangResource; + @Input() set vorgang(vorgang: VorgangWithEingangResource) { + this.vorgangWithEingangResource = vorgang; + this.isVisible = + hasLink(vorgang, VorgangWithEingangLinkRel.ABSCHLIESSEN) && + notHasLink(vorgang, VorgangWithEingangLinkRel.CREATE_BESCHEID_DRAFT) && + notHasLink(vorgang, VorgangWithEingangLinkRel.BESCHEID_DRAFT); + } + @Input() showAsIconButton: boolean = false; + public isVisible: boolean = false; + vorgangWithEingangResource: VorgangWithEingangResource; + commandStateResource$: Observable<StateResource<CommandResource>> = of( createEmptyStateResource<CommandResource>(), ); @@ -53,6 +60,8 @@ export class AbschliessenButtonComponent implements OnInit { } public abschliessen(): void { - this.commandStateResource$ = this.vorgangCommandService.abschliessen(this.vorgang); + this.commandStateResource$ = this.vorgangCommandService.abschliessen( + this.vorgangWithEingangResource, + ); } } diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.html index 8b253050b328a8bf63b1c175113678ef8cfd15e7..ad1704f9c19a82c2a3fe30cb866eb98730f4ff69 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-antrag-bescheiden/vorgang-detail-bescheiden-antrag-bescheiden.component.html @@ -22,6 +22,7 @@ [formControlName]="formServiceClass.FIELD_BESCHIEDEN_AM" label="am" aria-label="Bescheiddatum" + [required]="true" > </ozgcloud-date-editor> </div> diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.html index 3eec0104f947b808750585d60d7a027d8fc2f111..5e02a4c17739dce5e4be8ce0ae9547b23d9565a2 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.html @@ -7,6 +7,7 @@ <alfa-vorgang-detail-bescheiden-antrag-bescheiden></alfa-vorgang-detail-bescheiden-antrag-bescheiden> <alfa-vorgang-detail-bescheiden-weiter-button (clickEmitter)="changeActiveStep(2)" + [submitResource]="submitResource" ></alfa-vorgang-detail-bescheiden-weiter-button> </alfa-vorgang-detail-bescheiden-step-content> @@ -22,6 +23,7 @@ ></alfa-vorgang-detail-bescheiden-dokumente-hinzufuegen> <alfa-vorgang-detail-bescheiden-weiter-button (clickEmitter)="changeActiveStep(3)" + [submitResource]="submitResource" ></alfa-vorgang-detail-bescheiden-weiter-button> </alfa-vorgang-detail-bescheiden-step-content> diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.ts index a05c072bc6c488d8b4948180c7f7ebefb58de08a..ce42b5dcd7153c3e1e12b0eef65028a1586778ff 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-steps-content/vorgang-detail-bescheiden-steps-content.component.ts @@ -1,4 +1,10 @@ -import { HttpError, StateResource, hasStateResourceError, isLoaded } from '@alfa-client/tech-shared'; +import { + HttpError, + StateResource, + createEmptyStateResource, + hasStateResourceError, + isLoaded, +} from '@alfa-client/tech-shared'; import { VorgangService, VorgangWithEingangLinkRel, @@ -6,7 +12,7 @@ import { } from '@alfa-client/vorgang-shared'; import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; import { Resource, hasLink } from '@ngxp/rest'; -import { BehaviorSubject, Observable, combineLatest, filter, first, map } from 'rxjs'; +import { BehaviorSubject, Observable, combineLatest, filter, first, map, tap } from 'rxjs'; import { BescheidenFormService } from '../../bescheiden.formservice'; @Component({ @@ -24,6 +30,8 @@ export class VorgangDetailBescheidenStepsContentComponent implements OnInit { showBescheidErstellungUeberspringen$: Observable<boolean>; + submitResource: StateResource<Resource | HttpError> = createEmptyStateResource(); + constructor( private readonly vorgangService: VorgangService, private formService: BescheidenFormService, @@ -45,7 +53,11 @@ export class VorgangDetailBescheidenStepsContentComponent implements OnInit { if (this.canChangeTo(step)) { this.formService .submit() - .pipe(filter(this.noError), first()) + .pipe( + tap((resource: StateResource<Resource | HttpError>) => (this.submitResource = resource)), + filter(this.noError), + first(), + ) .subscribe(() => { this.formService.setActiveStep(step); this.activeStepChange.emit(step); diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.html b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.html index 55a9f67956faa09ff08e2e0849134c690a73059c..775963a1509562d11eda1d3f82d7d742a7850494 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.html +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.html @@ -1,10 +1,11 @@ -<ods-button +<ods-button-with-spinner *ngIf="showButton$ | async" (clickEmitter)="clickEmitter.emit()" + [stateResource]="submitResource" variant="primary" size="medium" class="mt-8 flex" dataTestId="bescheid-weiter-button" text="Weiter" > -</ods-button> +</ods-button-with-spinner> diff --git a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.ts b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.ts index f08201eec71c4d281c3ed90f759dba339080d548..5e89e7dd34f564986e2d2b48f78919d18c091041 100644 --- a/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.ts +++ b/alfa-client/libs/vorgang-detail/src/lib/vorgang-detail-page/vorgang-detail-bescheiden/vorgang-detail-bescheiden-steps/vorgang-detail-bescheiden-weiter-button/vorgang-detail-bescheiden-weiter-button.component.ts @@ -1,8 +1,13 @@ import { BescheidLinkRel, BescheidService } from '@alfa-client/bescheid-shared'; -import { isLoaded } from '@alfa-client/tech-shared'; +import { + HttpError, + StateResource, + createEmptyStateResource, + isLoaded, +} from '@alfa-client/tech-shared'; import { VorgangService, VorgangWithEingangLinkRel } from '@alfa-client/vorgang-shared'; -import { Component, EventEmitter, OnInit, Output } from '@angular/core'; -import { hasLink } from '@ngxp/rest'; +import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core'; +import { Resource, hasLink } from '@ngxp/rest'; import { Observable, filter, map, merge } from 'rxjs'; import { BescheidenFormService } from '../../bescheiden.formservice'; @@ -11,6 +16,7 @@ import { BescheidenFormService } from '../../bescheiden.formservice'; templateUrl: './vorgang-detail-bescheiden-weiter-button.component.html', }) export class VorgangDetailBescheidenWeiterButtonComponent implements OnInit { + @Input() submitResource: StateResource<Resource | HttpError> = createEmptyStateResource(); @Output() clickEmitter: EventEmitter<MouseEvent> = new EventEmitter<MouseEvent>(); showButton$: Observable<boolean>; diff --git a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html index c90498fb6fd7f0555c399ffc1403cbca28f01d6c..aa62e66b883fe1b7f226db4b2a03cce01481a198 100644 --- a/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html +++ b/alfa-client/libs/wiedervorlage/src/lib/wiedervorlage-page-container/wiedervorlage-page/wiedervorlage-form/wiedervorlage-form.component.html @@ -24,7 +24,11 @@ --> <form class="form" [formGroup]="formService.form"> - <ozgcloud-text-editor label="Betreff" [formControlName]="formServiceClass.FIELD_BETREFF"> + <ozgcloud-text-editor + label="Betreff" + [formControlName]="formServiceClass.FIELD_BETREFF" + [required]="true" + > </ozgcloud-text-editor> <ozgcloud-textarea-editor @@ -33,7 +37,12 @@ > </ozgcloud-textarea-editor> - <ozgcloud-date-editor class="date" label="Frist" [formControlName]="formServiceClass.FIELD_FRIST"> + <ozgcloud-date-editor + class="date" + label="Frist" + [formControlName]="formServiceClass.FIELD_FRIST" + [required]="true" + > </ozgcloud-date-editor> <alfa-binary-file-attachment-container diff --git a/alfa-client/pom.xml b/alfa-client/pom.xml index 854ec00d432ea1ebea24ad59668c162de22bcf44..111a094ca72b201db206c3d2f22c414e4846fd07 100644 --- a/alfa-client/pom.xml +++ b/alfa-client/pom.xml @@ -29,7 +29,7 @@ <parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.8.0-SNAPSHOT</version> + <version>2.9.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> diff --git a/alfa-server/pom.xml b/alfa-server/pom.xml index ee48af6d0f7aa1b0f804250334a43ffde0780668..4849872597179b20c4537e9e56e66a8d5782e6b3 100644 --- a/alfa-server/pom.xml +++ b/alfa-server/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.8.0-SNAPSHOT</version> + <version>2.9.0-SNAPSHOT</version> </parent> <artifactId>alfa-server</artifactId> diff --git a/alfa-service/pom.xml b/alfa-service/pom.xml index 9353c1a1c507cd69c337a40f1293ebffe8412017..9bbb0e40bbffdc99b6b808f83702bb315758a224 100644 --- a/alfa-service/pom.xml +++ b/alfa-service/pom.xml @@ -31,7 +31,7 @@ <parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.8.0-SNAPSHOT</version> + <version>2.9.0-SNAPSHOT</version> </parent> <artifactId>alfa-service</artifactId> diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessor.java b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessor.java index b6524e0b584102bd93baebf1e6d489e994056a98..1977b5ffb63dbf495578eeac0ebce27d6d7a4af5 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessor.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessor.java @@ -15,6 +15,8 @@ import de.ozgcloud.alfa.bescheid.BescheidController.BescheidByVorgangController; import de.ozgcloud.alfa.common.FeatureToggleProperties; import de.ozgcloud.alfa.common.ModelBuilder; import de.ozgcloud.alfa.common.command.CommandController.CommandByRelationController; +import de.ozgcloud.alfa.common.user.CurrentUserService; +import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.vorgang.Vorgang; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; import lombok.RequiredArgsConstructor; @@ -29,11 +31,12 @@ class BescheidVorgangProcessor implements RepresentationModelProcessor<EntityMod private final BescheidService bescheidService; private final FeatureToggleProperties featureToggleProperties; + private final CurrentUserService currentUserService; @Override public EntityModel<VorgangWithEingang> process(EntityModel<VorgangWithEingang> model) { var vorgang = model.getContent(); - if (Objects.isNull(vorgang)) { + if (Objects.isNull(vorgang) || currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)) { return model; } return ModelBuilder.fromModel(model) diff --git a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/CurrentUserService.java b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/CurrentUserService.java index 81ddfb139f273627653798ac0a8368ce32f6ab39..f4a517c4052a3658f8ecfc3d81e5ac5a6593c849 100644 --- a/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/CurrentUserService.java +++ b/alfa-service/src/main/java/de/ozgcloud/alfa/common/user/CurrentUserService.java @@ -95,8 +95,8 @@ public class CurrentUserService { public Optional<UserId> findUserId() { return Optional.ofNullable(getSingleClaimValue(ATTRIBUTE_NAME_USER_ID) - .map(UserId::from) - .orElseGet(this::getInternalId)) + .map(UserId::from) + .orElseGet(this::getInternalId)) .filter(Objects::nonNull); } diff --git a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessorTest.java b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessorTest.java index 510a3f2a395f726aabb88c0c29998bd89508f462..ec24740d58cd87f75c86a04801232b5076fe03f3 100644 --- a/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessorTest.java +++ b/alfa-service/src/test/java/de/ozgcloud/alfa/bescheid/BescheidVorgangProcessorTest.java @@ -22,6 +22,8 @@ import org.springframework.hateoas.Link; import de.ozgcloud.alfa.common.FeatureToggleProperties; import de.ozgcloud.alfa.common.UserProfileUrlProvider; +import de.ozgcloud.alfa.common.user.CurrentUserService; +import de.ozgcloud.alfa.common.user.UserRole; import de.ozgcloud.alfa.vorgang.Vorgang; import de.ozgcloud.alfa.vorgang.VorgangHeaderTestFactory; import de.ozgcloud.alfa.vorgang.VorgangWithEingang; @@ -35,8 +37,11 @@ class BescheidVorgangProcessorTest { @Spy @InjectMocks private BescheidVorgangProcessor processor; + @Mock private BescheidService service; + @Mock + private CurrentUserService currentUserService; @Mock private FeatureToggleProperties featureToggleProperties; @@ -53,6 +58,16 @@ class BescheidVorgangProcessorTest { assertThat(processedModel).isEqualTo(inputModel); } + @Test + void shouldReturnTheSameModelWhenUserIsEinheitlicherAnsprechpartner() { + var inputModel = EntityModel.of(VorgangWithEingangTestFactory.create()); + when(currentUserService.hasRole(UserRole.EINHEITLICHER_ANSPRECHPARTNER)).thenReturn(true); + + var processedModel = processor.process(inputModel); + + assertThat(processedModel).isEqualTo(inputModel); + } + @Test void shouldCallExistsBescheid() { initUserProfileUrlProvider(new UserProfileUrlProvider()); diff --git a/alfa-xdomea/pom.xml b/alfa-xdomea/pom.xml index b572f4474ff138e8f337e93e38dff8514a487b72..d81aae8ff596383dbbab518d7544a26e67bdc032 100644 --- a/alfa-xdomea/pom.xml +++ b/alfa-xdomea/pom.xml @@ -31,7 +31,7 @@ <parent> <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.8.0-SNAPSHOT</version> + <version>2.9.0-SNAPSHOT</version> </parent> <artifactId>alfa-xdomea</artifactId> diff --git a/pom.xml b/pom.xml index 4be17f3b766715348c9d8a217b700df8b37e4b59..eccaf74d7de377ecf61443d8dfd145a1c0e9852b 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ <groupId>de.ozgcloud.alfa</groupId> <artifactId>alfa</artifactId> - <version>2.8.0-SNAPSHOT</version> + <version>2.9.0-SNAPSHOT</version> <name>Alfa Parent</name> <packaging>pom</packaging> @@ -50,7 +50,7 @@ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> - <vorgang-manager.version>2.8.0-SNAPSHOT</vorgang-manager.version> + <vorgang-manager.version>2.8.0</vorgang-manager.version> <nachrichten-manager.version>2.7.0</nachrichten-manager.version> <ozgcloud-common-pdf.version>3.0.1</ozgcloud-common-pdf.version> <user-manager.version>2.2.0</user-manager.version>