diff --git a/alfa-client/libs/bescheid-shared/src/lib/bescheid.model.ts b/alfa-client/libs/bescheid-shared/src/lib/bescheid.model.ts index d99c13821cc590198e9f9469b99ff28d42442d67..dfc0a01122ce5069ca2a48c8d4c3f229eae302cd 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.model.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.model.ts @@ -1,5 +1,7 @@ -import { HttpError, ListResource } from '@alfa-client/tech-shared'; -import { Resource } from '@ngxp/rest'; +import { BinaryFileResource } from '@alfa-client/binary-file-shared'; +import { HttpError, isNotNil, ListResource, StateResource } from '@alfa-client/tech-shared'; +import { Resource, ResourceUri } from '@ngxp/rest'; +import { isNil } from 'lodash-es'; export enum BescheidStatus { DRAFT = 'DRAFT', @@ -26,8 +28,94 @@ export enum BescheidSendBy { export interface BescheidListResource extends ListResource {} +// TODO: check later if this interface is needed and rename to UploadedFile if so. export interface UploadFileInProgress { loading: boolean; fileName?: string; error?: HttpError; + binaryFileResource?: BinaryFileResource; +} + +export interface BescheidDocument { + loading: boolean; + fileName?: string; + error?: HttpError; + binaryFileResource?: BinaryFileResource; + creationMode?: BescheidDocumentCreationMode; + uri?: ResourceUri; +} + +export enum BescheidDocumentCreationMode { + Automatically, + FromFile, +} + +export function createEmptyBescheidDocument(): BescheidDocument { + return { loading: false }; +} + +export function createLoadingBescheidDocumentCreationFromFile(file: File): BescheidDocument { + return { + loading: true, + creationMode: BescheidDocumentCreationMode.FromFile, + fileName: file.name, + }; +} + +export function createFinishedBescheidDocumentCreationFromFile( + file: File, + binaryFileResource: BinaryFileResource, + resourceUri: ResourceUri, +): BescheidDocument { + return { + loading: false, + creationMode: BescheidDocumentCreationMode.FromFile, + fileName: file.name, + uri: resourceUri, + binaryFileResource, + }; +} + +export function createErrorBescheidDocumentCreationFromFile( + file: File, + error: HttpError, +): BescheidDocument { + return { + loading: false, + creationMode: BescheidDocumentCreationMode.FromFile, + fileName: file.name, + error, + }; +} + +export function createLoadedBescheidDocument( + binaryFileResource: BinaryFileResource, +): BescheidDocument { + return { loading: false, binaryFileResource }; +} + +export function isBescheidDocumentCreated(bescheidDocument: BescheidDocument): boolean { + return ( + !bescheidDocument.loading && + isNotNil(bescheidDocument.creationMode) && + isNotNil(bescheidDocument.binaryFileResource) && + isNotNil(bescheidDocument.uri) && + isNil(bescheidDocument.error) + ); +} + +export function createEmptyUploadingInProgress(): UploadFileInProgress { + return { loading: false }; +} + +export function createUploadingInProgress(file: File): UploadFileInProgress { + return { loading: true, fileName: file.name }; +} + +export function createFinishedUpload<T>( + file: File, + stateResource: StateResource<T>, + binaryFileResource?: BinaryFileResource, +): UploadFileInProgress { + return { loading: false, fileName: file.name, error: stateResource.error, binaryFileResource }; } 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 16384a5b124c654c8b8f37fc861652fdf02ed73b..db20ac843c7d3ceca3af6d4e46b2418856ea7bce 100644 --- a/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts +++ b/alfa-client/libs/bescheid-shared/src/lib/bescheid.service.ts @@ -26,6 +26,7 @@ import { isLoaded, isNotEmpty, isNotNil, + mapToResource, sortByGermanDateStr, } from '@alfa-client/tech-shared'; import { @@ -37,6 +38,7 @@ import { import { getEmpfaenger } from '@alfa-client/vorgang-shared-ui'; import { Injectable } from '@angular/core'; import { ResourceUri, getUrl, hasLink } from '@ngxp/rest'; +import { isNil } from 'lodash-es'; import { BehaviorSubject, Observable, @@ -44,6 +46,7 @@ import { filter, first, map, + of, startWith, switchMap, take, @@ -59,10 +62,16 @@ import { BescheidFacade } from './+state/bescheid.facade'; import { BescheidLinkRel, BescheidListLinkRel } from './bescheid.linkrel'; import { Bescheid, + BescheidDocument, BescheidListResource, BescheidResource, BescheidStatus, UploadFileInProgress, + createEmptyBescheidDocument, + createErrorBescheidDocumentCreationFromFile, + createFinishedBescheidDocumentCreationFromFile, + createLoadedBescheidDocument, + createLoadingBescheidDocumentCreationFromFile, } from './bescheid.model'; import { buildCreateBescheidCommand, @@ -363,6 +372,61 @@ export class BescheidService { ); } + public createBescheidFromFile( + bescheid: BescheidResource, + file: File, + ): Observable<BescheidDocument> { + return this.binaryFileService + .uploadFile(bescheid, BescheidLinkRel.UPLOAD_BESCHEID_FILE, file, false) + .pipe( + filterIsLoadedOrHasError(), + switchMap((binaryFileStateResource: StateResource<BinaryFileResource>) => { + if (hasStateResourceError(binaryFileStateResource)) { + return of( + createErrorBescheidDocumentCreationFromFile(file, binaryFileStateResource.error), + ); + } + return this.commandService + .createCommandByProps( + buildCreateBescheidDocumentFromFileProps(bescheid, binaryFileStateResource.resource), + ) + .pipe( + filterIsLoadedOrHasError(), + map((commandStateResource: StateResource<CommandResource>) => { + if (hasStateResourceError(commandStateResource)) { + return createErrorBescheidDocumentCreationFromFile( + file, + binaryFileStateResource.error, + ); + } + return createFinishedBescheidDocumentCreationFromFile( + file, + binaryFileStateResource.resource, + getEffectedResourceUrl(commandStateResource.resource), + ); + }), + ); + }), + startWith(createLoadingBescheidDocumentCreationFromFile(file)), + ); + } + + // TODO: rename + public getBescheidDocument2(bescheidResource: BescheidResource): Observable<BescheidDocument> { + if (isNil(bescheidResource.bescheidDocument)) { + return of(createEmptyBescheidDocument()); + } + return this.repository + .getResource(bescheidResource.bescheidDocument) + .pipe( + switchMap((documentResource: DocumentResource) => + this.binaryFileService + .getFile(getUrl(documentResource, DocumentLinkRel.FILE)) + .pipe(filter(isLoaded), mapToResource(), map(createLoadedBescheidDocument)), + ), + ); + } + handleUploadBescheidDocumentResponse( bescheid: BescheidResource, binaryFileStateResource: StateResource<BinaryFileResource>, diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.html b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.html index c3dbf9f860e01001bac5d48159cdea64130d4b3f..d3880b400d91379c6f454bcbe429bcb47ab0571b 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.html +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.html @@ -19,9 +19,11 @@ [vorgangWithEingangResource]="vorgangWithEingangResource" [activeStep]="activeStep" [bescheidDraftStateResource]="bescheidStateResource" + [bescheidDocument]="bescheidDocument$ | async" (weiterClickEmitter)="onWeiter()" (stepChange)="onStepChange($event)" (vorgangAbgeschlossen)="onVorgangAbgeschlossen()" + (bescheidDocumentFile)="onBescheidDocumentUpload($event)" ></alfa-bescheid-wizard> </form> </ng-container> diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.ts index acdcd13501fda10ff1f4ed22dc6750ba5293ce26..f0f03048e070e30fb615295dc2c99e068b9791e2 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard-container.component.ts @@ -1,4 +1,10 @@ -import { BescheidResource, BescheidService } from '@alfa-client/bescheid-shared'; +import { + BescheidDocument, + BescheidResource, + BescheidService, + createEmptyBescheidDocument, + isBescheidDocumentCreated, +} from '@alfa-client/bescheid-shared'; import { StateResource, createEmptyStateResource, @@ -36,6 +42,7 @@ export class BescheidWizardContainerComponent implements OnInit, OnDestroy { public bescheidDraftStateResource$: Observable<StateResource<BescheidResource>> = of( createEmptyStateResource<BescheidResource>(), ); + public bescheidDocument$: Observable<BescheidDocument> = of(createEmptyBescheidDocument()); public activeStep: number = 1; bescheidStateResource: StateResource<BescheidResource> = createEmptyStateResource(); @@ -69,9 +76,13 @@ export class BescheidWizardContainerComponent implements OnInit, OnDestroy { if (hasLink(this.vorgangWithEingangResource, VorgangWithEingangLinkRel.BESCHEID_DRAFT)) { this.bescheidDraftStateResource$ = this.bescheidService.getBescheidDraft().pipe( tap((bescheidDraftStateResource: StateResource<BescheidResource>) => { + console.info(bescheidDraftStateResource); this.bescheidStateResource = bescheidDraftStateResource; if (isLoaded(bescheidDraftStateResource)) { this.formService.patchValues(bescheidDraftStateResource.resource); + this.bescheidDocument$ = this.bescheidService.getBescheidDocument2( + bescheidDraftStateResource.resource, + ); } }), ); @@ -132,4 +143,17 @@ export class BescheidWizardContainerComponent implements OnInit, OnDestroy { public onVorgangAbgeschlossen(): void { this.dialogRef.close(); } + + public onBescheidDocumentUpload(bescheidDocumentFile: File): void { + this.bescheidDocument$ = this.bescheidService + .createBescheidFromFile(this.bescheidStateResource.resource, bescheidDocumentFile) + .pipe( + tap((bescheidDocument: BescheidDocument) => { + // TODO: extract to method + if (isBescheidDocumentCreated(bescheidDocument)) { + this.formService.setBescheidDocumentFile(bescheidDocument.uri); + } + }), + ); + } } diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/attachment-hochladen-button/bescheid-wizard-attachment-hochladen-button.component.html b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/attachment-hochladen-button/bescheid-wizard-attachment-hochladen-button.component.html new file mode 100644 index 0000000000000000000000000000000000000000..723b7316760098955cb3b2176d0164201f29d2f4 --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/attachment-hochladen-button/bescheid-wizard-attachment-hochladen-button.component.html @@ -0,0 +1,11 @@ +<div [formGroup]="formService.form" class="mt-4"> + <ods-file-upload-editor + [attr.data-test-id]="'attachment-hochladen-upload-editor' + formServiceClass.FIELD_ATTACHMENTS" + [parentFormArrayName]="formServiceClass.FIELD_ATTACHMENTS" + [uploadInProgress]="upload$ | async" + (newFile)="uploadFile($event)" + [fileLinkList]="getFileLinkList()" + label="Anhang hochladen" + > + </ods-file-upload-editor> +</div> diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/attachment-hochladen-button/bescheid-wizard-attachment-hochladen-button.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/attachment-hochladen-button/bescheid-wizard-attachment-hochladen-button.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..fa6148ad35786ba9d7782a8b1219ab36961613a6 --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/attachment-hochladen-button/bescheid-wizard-attachment-hochladen-button.component.spec.ts @@ -0,0 +1,55 @@ +import { BescheidService } from '@alfa-client/bescheid-shared'; +import { BinaryFileResource } from '@alfa-client/binary-file-shared'; +import { createEmptyStateResource } from '@alfa-client/tech-shared'; +import { mock, useFromMock } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms'; +import { FileUploadEditorComponent } from '@ods/component'; +import { MockComponent } from 'ng-mocks'; +import { singleColdCompleted } from '../../../../../../tech-shared/test/marbles'; +import { BescheidFormService } from '../../bescheid.formservice'; +import { BescheidWizardAttachmentHochladenButtonComponent } from './bescheid-wizard-attachment-hochladen-button.component'; + +describe('BescheidWizardAttachmentHochladenButtonComponent', () => { + let component: BescheidWizardAttachmentHochladenButtonComponent; + let fixture: ComponentFixture<BescheidWizardAttachmentHochladenButtonComponent>; + + let formService: BescheidFormService; + + beforeEach(() => { + formService = new BescheidFormService( + new UntypedFormBuilder(), + useFromMock(mock(BescheidService)), + ); + }); + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ + BescheidWizardAttachmentHochladenButtonComponent, + MockComponent(FileUploadEditorComponent), + ], + providers: [ + { + provide: BescheidFormService, + useValue: formService, + }, + ], + imports: [ReactiveFormsModule], + }).compileComponents(); + + fixture = TestBed.createComponent(BescheidWizardAttachmentHochladenButtonComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); + + it('should set upload$ to empty state resource', () => { + expect(component.upload$).toBeObservable( + singleColdCompleted(createEmptyStateResource<BinaryFileResource>()), + ); + }); +}); diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/attachment-hochladen-button/bescheid-wizard-attachment-hochladen-button.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/attachment-hochladen-button/bescheid-wizard-attachment-hochladen-button.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..b97152c17cfd432ef6853c2f0e6fe3b94c7506aa --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/attachment-hochladen-button/bescheid-wizard-attachment-hochladen-button.component.ts @@ -0,0 +1,25 @@ +import { BinaryFileResource } from '@alfa-client/binary-file-shared'; +import { createEmptyStateResource, StateResource } from '@alfa-client/tech-shared'; +import { Component } from '@angular/core'; +import { Observable, of } from 'rxjs'; +import { BescheidFormService } from '../../bescheid.formservice'; + +@Component({ + selector: 'alfa-bescheid-wizard-attachment-hochladen-button', + templateUrl: './bescheid-wizard-attachment-hochladen-button.component.html', +}) +export class BescheidWizardAttachmentHochladenButtonComponent { + public upload$: Observable<StateResource<BinaryFileResource>> = of( + createEmptyStateResource<BinaryFileResource>(), + ); + + readonly formServiceClass = BescheidFormService; + + constructor(public readonly formService: BescheidFormService) {} + + public uploadFile(file: File): void {} + + public getFileLinkList(): string[] { + return []; + } +} diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/automatisch-erstellen-button/bescheid-wizard-automatisch-erstellen-button.component.html b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/automatisch-erstellen-button/bescheid-wizard-automatisch-erstellen-button.component.html new file mode 100644 index 0000000000000000000000000000000000000000..a1134f6e0a25efaf29874841d16e04e3d1458ca3 --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/automatisch-erstellen-button/bescheid-wizard-automatisch-erstellen-button.component.html @@ -0,0 +1,13 @@ +<div class="mt-4"> + <ods-button-card + *ngIf="bescheidResource | hasLink: bescheidLinkRel.CREATE_DOCUMENT" + class="w-72" + [isLoading]="(createBescheidDocumentCommandStateResource$ | async).loading" + (click)="createBescheidDocument()" + data-test-id="create-bescheid-document-button" + text="Bescheiddokument" + subText="automatisch erstellen" + > + <ods-bescheid-generate-icon icon /> + </ods-button-card> +</div> diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/automatisch-erstellen-button/bescheid-wizard-automatisch-erstellen-button.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/automatisch-erstellen-button/bescheid-wizard-automatisch-erstellen-button.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..c7b4fdb157a145808589f069a2d66444559fe2ff --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/automatisch-erstellen-button/bescheid-wizard-automatisch-erstellen-button.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BescheidWizardAutomatischErstellenButtonComponent } from './bescheid-wizard-automatisch-erstellen-button.component'; + +describe('BescheidWizardAutomatischErstellenButtonComponent', () => { + let component: BescheidWizardAutomatischErstellenButtonComponent; + let fixture: ComponentFixture<BescheidWizardAutomatischErstellenButtonComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BescheidWizardAutomatischErstellenButtonComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(BescheidWizardAutomatischErstellenButtonComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/automatisch-erstellen-button/bescheid-wizard-automatisch-erstellen-button.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/automatisch-erstellen-button/bescheid-wizard-automatisch-erstellen-button.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..390e4f7ca3d011f8b63fb50a7d84bca9eda4ca7f --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/automatisch-erstellen-button/bescheid-wizard-automatisch-erstellen-button.component.ts @@ -0,0 +1,20 @@ +import { BescheidLinkRel, BescheidResource } from '@alfa-client/bescheid-shared'; +import { CommandResource } from '@alfa-client/command-shared'; +import { StateResource, createEmptyStateResource } from '@alfa-client/tech-shared'; +import { Component, Input } from '@angular/core'; +import { Observable, of } from 'rxjs'; + +@Component({ + selector: 'alfa-bescheid-wizard-automatisch-erstellen-button', + templateUrl: './bescheid-wizard-automatisch-erstellen-button.component.html', +}) +export class BescheidWizardAutomatischErstellenButtonComponent { + @Input() bescheidResource: BescheidResource; + + public createBescheidDocumentCommandStateResource$: Observable<StateResource<CommandResource>> = + of(createEmptyStateResource<CommandResource>()); + + readonly bescheidLinkRel = BescheidLinkRel; + + public createBescheidDocument(): void {} +} diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.html b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.html index fdf593827c9b7044496b6255bf4df35453fbfc72..d70aa63851431f0d24359c12685ebf9428319bb7 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.html +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.html @@ -13,6 +13,9 @@ (vorgangAbgeschlossen)="vorgangAbgeschlossen.emit()" ></alfa-bescheid-wizard-antrag-bescheiden> <alfa-bescheid-wizard-dokumente-hochladen + [bescheidResource]="bescheidDraftStateResource.resource" + [bescheidDocument]="bescheidDocument" *ngIf="activeStep === 2" + (bescheidDocumentFile)="bescheidDocumentFile.emit($event)" ></alfa-bescheid-wizard-dokumente-hochladen> </div> diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.spec.ts index 5fd217cfc681d17e30d0469f785bc38614d4166c..8454f7635f46db9873e3075ba980a63dd398cb00 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.spec.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.spec.ts @@ -163,6 +163,10 @@ describe('BescheidWizardComponent', () => { return getElementFromFixture(fixture, 'alfa-bescheid-wizard-dokumente-hochladen'); } + function getElementComponent(): BescheidWizardDokumenteHochladenComponent { + return getElementFromFixtureByType(fixture, BescheidWizardDokumenteHochladenComponent); + } + it('should show', () => { givenActiveStep(2); givenLoadedBescheidStateResrouce(); @@ -183,6 +187,19 @@ describe('BescheidWizardComponent', () => { expect(getElement()).not.toBeInstanceOf(HTMLElement); }); + + describe('input', () => { + it('should set bescheidResource', () => { + givenActiveStep(2); + const bescheidStateResource: StateResource<BescheidResource> = + givenLoadedBescheidStateResrouce(); + component.bescheidDraftStateResource = bescheidStateResource; + + fixture.detectChanges(); + + expect(getElementComponent().bescheidResource).toBe(bescheidStateResource.resource); + }); + }); }); }); diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.ts index 5354a0fe4b19a634bc7e1b50552074356e2b67a0..b786da76c457a0c82a0fd2726a0ac67d6b847f1c 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component.ts @@ -1,4 +1,4 @@ -import { BescheidResource } from '@alfa-client/bescheid-shared'; +import { BescheidDocument, BescheidResource } from '@alfa-client/bescheid-shared'; import { StateResource } from '@alfa-client/tech-shared'; import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { Component, EventEmitter, Input, Output } from '@angular/core'; @@ -11,8 +11,10 @@ export class BescheidWizardComponent { @Input() vorgangWithEingangResource: VorgangWithEingangResource; @Input() bescheidDraftStateResource: StateResource<BescheidResource>; @Input() activeStep: number; + @Input() bescheidDocument: BescheidDocument; @Output() stepChange = new EventEmitter<number>(); @Output() weiterClickEmitter = new EventEmitter<void>(); @Output() vorgangAbgeschlossen: EventEmitter<void> = new EventEmitter<void>(); + @Output() bescheidDocumentFile: EventEmitter<File> = new EventEmitter<File>(); } diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument-hochladen-button/bescheid-wizard-dokument-hochladen-button.component.html b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument-hochladen-button/bescheid-wizard-dokument-hochladen-button.component.html new file mode 100644 index 0000000000000000000000000000000000000000..2ce63d86799045ef602242baae9802e009dc279a --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument-hochladen-button/bescheid-wizard-dokument-hochladen-button.component.html @@ -0,0 +1,13 @@ +<div [formGroup]="formService.form"> + <ods-single-file-upload-editor + [uploadInProgress]="loading" + class="w-72" + attr.data-test-id="vorgang-bescheiden-upload-editor" + [formControlName]="formServiceClass.FIELD_BESCHEID_DOCUMENT" + (newFile)="uploadFile($event)" + > + <ods-bescheid-upload-icon icon></ods-bescheid-upload-icon> + <ods-spinner-icon spinner size="extra-large"></ods-spinner-icon> + <div text class="text-center">Bescheiddokument hochladen</div> + </ods-single-file-upload-editor> +</div> diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument-hochladen-button/bescheid-wizard-dokument-hochladen-button.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument-hochladen-button/bescheid-wizard-dokument-hochladen-button.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..07b81eb48ad3c33c48545f3cc44c7d6e3d8d4cb7 --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument-hochladen-button/bescheid-wizard-dokument-hochladen-button.component.spec.ts @@ -0,0 +1,42 @@ +import { BescheidService } from '@alfa-client/bescheid-shared'; +import { HasLinkPipe } from '@alfa-client/tech-shared'; +import { mock, useFromMock } from '@alfa-client/test-utils'; +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { ReactiveFormsModule, UntypedFormBuilder } from '@angular/forms'; +import { BescheidFormService } from '../../bescheid.formservice'; +import { BescheidWizardDokumentHochladenButtonComponent } from './bescheid-wizard-dokument-hochladen-button.component'; + +describe('BescheidWizardDokumentHochladenButtonComponent', () => { + let component: BescheidWizardDokumentHochladenButtonComponent; + let fixture: ComponentFixture<BescheidWizardDokumentHochladenButtonComponent>; + + let formService: BescheidFormService; + + beforeEach(() => { + formService = new BescheidFormService( + new UntypedFormBuilder(), + useFromMock(mock(BescheidService)), + ); + }); + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [BescheidWizardDokumentHochladenButtonComponent, HasLinkPipe], + providers: [ + { + provide: BescheidFormService, + useValue: formService, + }, + ], + imports: [ReactiveFormsModule], + }).compileComponents(); + + fixture = TestBed.createComponent(BescheidWizardDokumentHochladenButtonComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument-hochladen-button/bescheid-wizard-dokument-hochladen-button.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument-hochladen-button/bescheid-wizard-dokument-hochladen-button.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..042291ba3a68001d89203f9c36753fb4a727f2f9 --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument-hochladen-button/bescheid-wizard-dokument-hochladen-button.component.ts @@ -0,0 +1,22 @@ +import { BescheidLinkRel } from '@alfa-client/bescheid-shared'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; +import { BescheidFormService } from '../../bescheid.formservice'; + +@Component({ + selector: 'alfa-bescheid-wizard-dokument-hochladen-button', + templateUrl: './bescheid-wizard-dokument-hochladen-button.component.html', +}) +export class BescheidWizardDokumentHochladenButtonComponent { + @Input() loading: boolean = false; + + @Output() file: EventEmitter<File> = new EventEmitter<File>(); + + readonly bescheidLinkRel = BescheidLinkRel; + readonly formServiceClass = BescheidFormService; + + constructor(public readonly formService: BescheidFormService) {} + + public uploadFile(file: File): void { + this.file.emit(file); + } +} diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument/bescheid-wizard-dokument.component.html b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument/bescheid-wizard-dokument.component.html new file mode 100644 index 0000000000000000000000000000000000000000..b9c3580b91a72921de454bf85ec460d643b49a73 --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument/bescheid-wizard-dokument.component.html @@ -0,0 +1,36 @@ +<p + *ngIf="showMissingBescheidDocumentError" + data-test-id="missing-bescheid-document-error-message" + class="text-base text-error" +> + Bitte fügen Sie ein Bescheiddokument hinzu. +</p> +<ods-attachment-wrapper> + <ng-container *ngIf="bescheidDocument.binaryFileResource"> + <alfa-binary-file2-container + *ngIf="!bescheidDocument.loading" + [file]="bescheidDocument.binaryFileResource" + [deletable]="deletable" + (startDelete)="delete.emit()" + > + </alfa-binary-file2-container> + </ng-container> + <ods-attachment + *ngIf="bescheidDocument.loading || bescheidDocument.error" + errorCaption="Fehler beim Hochladen" + [loadingCaption]="bescheidDocument.fileName" + [attr.data-test-id]="'upload-bescheid-document-error-' + !!bescheidDocument.error" + [isLoading]="bescheidDocument.loading" + [errorMessages]="bescheidDocument.error | convertProblemDetailToErrorMessages" + description="Bescheiddokument wird hochgeladen" + ></ods-attachment> + <!-- <ods-attachment--> + <!-- *ngIf="bescheidDocumentCreation.loading || bescheidDocumentCreation.error"--> + <!-- errorCaption="Fehler beim automatischen Erstellen"--> + <!-- loadingCaption="Bescheiddokument"--> + <!-- description="Bescheiddokument wird erstellt"--> + <!-- [isLoading]="bescheidDocumentCreation.loading"--> + <!-- [errorMessages]="createDocumentErrorMessages"--> + <!-- data-test-id="create-bescheid-document-attachment"--> + <!-- ></ods-attachment>--> +</ods-attachment-wrapper> diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument/bescheid-wizard-dokument.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument/bescheid-wizard-dokument.component.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..a74767e4e4605ad27c470e0b5bd01c4c28809262 --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument/bescheid-wizard-dokument.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { BescheidWizardDokumentComponent } from './bescheid-wizard-dokument.component'; + +describe('BescheidWizardDokumentComponent', () => { + let component: BescheidWizardDokumentComponent; + let fixture: ComponentFixture<BescheidWizardDokumentComponent>; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [BescheidWizardDokumentComponent], + }).compileComponents(); + + fixture = TestBed.createComponent(BescheidWizardDokumentComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument/bescheid-wizard-dokument.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument/bescheid-wizard-dokument.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..0ef91df325f1b672eccbbbdf7720e6a945168a47 --- /dev/null +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokument/bescheid-wizard-dokument.component.ts @@ -0,0 +1,15 @@ +import { BescheidDocument } from '@alfa-client/bescheid-shared'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; + +@Component({ + selector: 'alfa-bescheid-wizard-dokument', + templateUrl: './bescheid-wizard-dokument.component.html', +}) +export class BescheidWizardDokumentComponent { + @Input() bescheidDocument: BescheidDocument; + @Input() public deletable: boolean; + + @Output() delete: EventEmitter<void> = new EventEmitter<void>(); + + public showMissingBescheidDocumentError: boolean; +} diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.html b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.html index 4154d6e3a9083f35fc3a4307dc5674c5d1586473..b641678786aa7d807ff898c1d0298c00ee906b1a 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.html +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.html @@ -2,10 +2,16 @@ <div> <alfa-bescheid-wizard-step-title label="Antrag bescheiden"></alfa-bescheid-wizard-step-title> <alfa-bescheid-wizard-step-title label="Dokumente hochladen"></alfa-bescheid-wizard-step-title> - <alfa-bescheid-wizard-dokumente-hochladen-form></alfa-bescheid-wizard-dokumente-hochladen-form> + <alfa-bescheid-wizard-dokumente-hochladen-form + [bescheidResource]="bescheidResource" + [bescheidDocument]="bescheidDocument" + (bescheidDocumentFile)="bescheidDocumentFile.emit($event)" + ></alfa-bescheid-wizard-dokumente-hochladen-form> </div> <alfa-bescheid-wizard-summary> <alfa-bescheid-wizard-antrag-bescheiden-summary></alfa-bescheid-wizard-antrag-bescheiden-summary> - <alfa-bescheid-wizard-dokumente-hochladen-summary></alfa-bescheid-wizard-dokumente-hochladen-summary> + <alfa-bescheid-wizard-dokumente-hochladen-summary + [bescheidDocument]="bescheidDocument" + ></alfa-bescheid-wizard-dokumente-hochladen-summary> </alfa-bescheid-wizard-summary> </div> diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.spec.ts index c2b26ac9f7e03a44fc7c1646678849ff6084ca4e..ec4756c668ef275e26b3a469c899980ca49b2ead 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.spec.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.spec.ts @@ -1,5 +1,8 @@ +import { BescheidResource } from '@alfa-client/bescheid-shared'; +import { getElementFromFixtureByType } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; import { MockComponent } from 'ng-mocks'; +import { createBescheidResource } from '../../../../../../bescheid-shared/src/test/bescheid'; import { BescheidWizardAntragBescheidenSummaryComponent } from '../antrag-bescheiden/summary/bescheid-wizard-antrag-bescheiden-summary.component'; import { BescheidWizardStepTitleComponent } from '../step-title/bescheid-wizard-step-title.component'; import { BescheidWizardSummaryComponent } from '../summary/bescheid-wizard-summary.component'; @@ -31,4 +34,23 @@ describe('BescheidWizardDokumenteHochladenComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + describe('template', () => { + describe('alfa-bescheid-wizard-dokumente-hochladen-form', () => { + function getElementComponent(): BescheidWizardDokumenteHochladenFormComponent { + return getElementFromFixtureByType(fixture, BescheidWizardDokumenteHochladenFormComponent); + } + + describe('input', () => { + it('should set bescheidResource', () => { + const bescheidResource: BescheidResource = createBescheidResource(); + component.bescheidResource = bescheidResource; + + fixture.detectChanges(); + + expect(getElementComponent().bescheidResource).toBe(bescheidResource); + }); + }); + }); + }); }); diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.ts index 03327ed43a038acb1e8cd3c37ef1f595d2f26ca4..b68be71ca535da08eae644335d68503c6113652a 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component.ts @@ -1,7 +1,13 @@ -import { Component } from '@angular/core'; +import { BescheidDocument, BescheidResource } from '@alfa-client/bescheid-shared'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; @Component({ selector: 'alfa-bescheid-wizard-dokumente-hochladen', templateUrl: './bescheid-wizard-dokumente-hochladen.component.html', }) -export class BescheidWizardDokumenteHochladenComponent {} +export class BescheidWizardDokumenteHochladenComponent { + @Input() bescheidResource: BescheidResource; + @Input() bescheidDocument: BescheidDocument; + + @Output() bescheidDocumentFile: EventEmitter<File> = new EventEmitter<File>(); +} diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.html b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.html index 4bd1961e89455800dbdddd34d3de0e7904f9479a..a0a5e6be97ac2c1759e2868b71d10d497d5ea811 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.html +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.html @@ -1 +1,7 @@ -<p>bescheid-wizard-dokumente-hochladen-form works!</p> +<alfa-bescheid-wizard-automatisch-erstellen-button></alfa-bescheid-wizard-automatisch-erstellen-button> +<alfa-bescheid-wizard-dokument-hochladen-button + *ngIf="bescheidResource | hasLink: bescheidLinkRel.UPLOAD_BESCHEID_FILE" + [loading]="bescheidDocument.loading" + (file)="bescheidDocumentFile.emit($event)" +></alfa-bescheid-wizard-dokument-hochladen-button> +<alfa-bescheid-wizard-attachment-hochladen-button></alfa-bescheid-wizard-attachment-hochladen-button> diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.spec.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.spec.ts index 417a480c13b49e280112f8a4a85e69663902b722..e9b42d75bd59860747f72cb14f2e01340f32a674 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.spec.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.spec.ts @@ -1,4 +1,9 @@ +import { existsAsHtmlElement } from '@alfa-client/test-utils'; import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { MockComponent } from 'ng-mocks'; +import { BescheidWizardAttachmentHochladenButtonComponent } from '../../attachment-hochladen-button/bescheid-wizard-attachment-hochladen-button.component'; +import { BescheidWizardAutomatischErstellenButtonComponent } from '../../automatisch-erstellen-button/bescheid-wizard-automatisch-erstellen-button.component'; +import { BescheidWizardDokumentHochladenButtonComponent } from '../../dokument-hochladen-button/bescheid-wizard-dokument-hochladen-button.component'; import { BescheidWizardDokumenteHochladenFormComponent } from './bescheid-wizard-dokumente-hochladen-form.component'; describe('BescheidWizardDokumenteHochladenFormComponent', () => { @@ -7,7 +12,12 @@ describe('BescheidWizardDokumenteHochladenFormComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - declarations: [BescheidWizardDokumenteHochladenFormComponent], + declarations: [ + BescheidWizardDokumenteHochladenFormComponent, + MockComponent(BescheidWizardAutomatischErstellenButtonComponent), + MockComponent(BescheidWizardDokumentHochladenButtonComponent), + MockComponent(BescheidWizardAttachmentHochladenButtonComponent), + ], }).compileComponents(); fixture = TestBed.createComponent(BescheidWizardDokumenteHochladenFormComponent); @@ -18,4 +28,24 @@ describe('BescheidWizardDokumenteHochladenFormComponent', () => { it('should create', () => { expect(component).toBeTruthy(); }); + + describe('template', () => { + describe('bescheid automatisch erstellen button', () => { + it('should show', () => { + existsAsHtmlElement(fixture, 'alfa-bescheid-wizard-automatisch-erstellen-button'); + }); + }); + + describe('bescheid dokument hochladen button', () => { + it('should show', () => { + existsAsHtmlElement(fixture, 'alfa-bescheid-wizard-dokument-hochladen-button'); + }); + }); + + describe('attachment hochladen button', () => { + it('should show', () => { + existsAsHtmlElement(fixture, 'alfa-bescheid-wizard-attachment-hochladen-button'); + }); + }); + }); }); diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.ts index 63df23e526cb61c40dbf89b8c459da46d6f6d836..1ec5a3c325034e9e6f62bae522064da43b969861 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component.ts @@ -1,7 +1,15 @@ -import { Component } from '@angular/core'; +import { BescheidDocument, BescheidLinkRel, BescheidResource } from '@alfa-client/bescheid-shared'; +import { Component, EventEmitter, Input, Output } from '@angular/core'; @Component({ selector: 'alfa-bescheid-wizard-dokumente-hochladen-form', templateUrl: './bescheid-wizard-dokumente-hochladen-form.component.html', }) -export class BescheidWizardDokumenteHochladenFormComponent {} +export class BescheidWizardDokumenteHochladenFormComponent { + @Input() bescheidResource: BescheidResource; + @Input() bescheidDocument: BescheidDocument; + + @Output() bescheidDocumentFile: EventEmitter<File> = new EventEmitter<File>(); + + readonly bescheidLinkRel = BescheidLinkRel; +} diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/summary/bescheid-wizard-dokumente-hochladen-summary.component.html b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/summary/bescheid-wizard-dokumente-hochladen-summary.component.html index a1b71d424a4b35b04bf8b0aee379001bc748bd21..c9889a3e6c20871e81c79e83156694a3e14f7d08 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/summary/bescheid-wizard-dokumente-hochladen-summary.component.html +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/summary/bescheid-wizard-dokumente-hochladen-summary.component.html @@ -1 +1,4 @@ -<p>bescheid-wizard-dokumente-hochladen-summary works!</p> +<alfa-bescheid-wizard-dokument + [bescheidDocument]="bescheidDocument" + [deletable]="true" +></alfa-bescheid-wizard-dokument> diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/summary/bescheid-wizard-dokumente-hochladen-summary.component.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/summary/bescheid-wizard-dokumente-hochladen-summary.component.ts index b2d4ba96fc074645474734a6d9a68e2f030e6eeb..df69ec571d4b30beeab8b4c8d94164ae6575c725 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/summary/bescheid-wizard-dokumente-hochladen-summary.component.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/summary/bescheid-wizard-dokumente-hochladen-summary.component.ts @@ -1,7 +1,10 @@ -import { Component } from '@angular/core'; +import { BescheidDocument } from '@alfa-client/bescheid-shared'; +import { Component, Input } from '@angular/core'; @Component({ selector: 'alfa-bescheid-wizard-dokumente-hochladen-summary', templateUrl: './bescheid-wizard-dokumente-hochladen-summary.component.html', }) -export class BescheidWizardDokumenteHochladenSummaryComponent {} +export class BescheidWizardDokumenteHochladenSummaryComponent { + @Input() bescheidDocument: BescheidDocument; +} diff --git a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.ts b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.ts index 31696be2b3e2dc22b17bd7820b937a5f6ce4e52c..74c724827e90a1ffbc09b66c30d86e68540b6cdd 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid-wizard-container/bescheid.formservice.ts @@ -16,6 +16,7 @@ import { import { VorgangWithEingangResource } from '@alfa-client/vorgang-shared'; import { Injectable } from '@angular/core'; import { + FormControl, UntypedFormArray, UntypedFormBuilder, UntypedFormControl, @@ -125,4 +126,11 @@ export class BescheidFormService extends AbstractFormService { ): void { this.vorgangWithEingangResource = vorgangWithEingangResource; } + + public setBescheidDocumentFile(uri: ResourceUri): void { + const control: FormControl = <FormControl>( + this.form.controls[BescheidFormService.FIELD_BESCHEID_DOCUMENT] + ); + control.patchValue(uri); + } } diff --git a/alfa-client/libs/bescheid/src/lib/bescheid.module.ts b/alfa-client/libs/bescheid/src/lib/bescheid.module.ts index eef63479c2c4ee15d57d38c7d1eeb2cc55d2092c..57b3e1bee22fe4d975d4524dbdfa4d8a999dbee3 100644 --- a/alfa-client/libs/bescheid/src/lib/bescheid.module.ts +++ b/alfa-client/libs/bescheid/src/lib/bescheid.module.ts @@ -13,12 +13,22 @@ import { DocumentInBescheidContainerComponent } from './bescheid-list-in-vorgang import { BeschiedenDateContainerComponent } from './beschieden-date-in-vorgang-container/beschieden-date-container/beschieden-date-container.component'; import { BeschiedenDateInVorgangContainerComponent } from './beschieden-date-in-vorgang-container/beschieden-date-in-vorgang-container.component'; -import { ButtonWithSpinnerComponent } from '@ods/component'; import { + ButtonWithSpinnerComponent, + FileUploadEditorComponent, + SingleFileUploadEditorComponent, +} from '@ods/component'; +import { + AttachmentComponent, + AttachmentWrapperComponent, + BescheidGenerateIconComponent, BescheidStatusTextComponent, + BescheidUploadIconComponent, BescheidWrapperComponent, + ButtonCardComponent, CloseIconComponent, RadioButtonCardComponent, + SpinnerIconComponent, StampIconComponent, } from '@ods/system'; import { BescheidWizardContainerComponent } from './bescheid-wizard-container/bescheid-wizard-container.component'; @@ -27,9 +37,13 @@ import { BescheidWizardAbschliessenDialogContainerComponent } from './bescheid-w import { BescheidWizardAntragBescheidenComponent } from './bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/bescheid-wizard-antrag-bescheiden.component'; import { BescheidWizardAntragBescheidenFormComponent } from './bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/form/bescheid-wizard-antrag-bescheiden-form.component'; import { BescheidWizardAntragBescheidenSummaryComponent } from './bescheid-wizard-container/bescheid-wizard/antrag-bescheiden/summary/bescheid-wizard-antrag-bescheiden-summary.component'; +import { BescheidWizardAttachmentHochladenButtonComponent } from './bescheid-wizard-container/bescheid-wizard/attachment-hochladen-button/bescheid-wizard-attachment-hochladen-button.component'; +import { BescheidWizardAutomatischErstellenButtonComponent } from './bescheid-wizard-container/bescheid-wizard/automatisch-erstellen-button/bescheid-wizard-automatisch-erstellen-button.component'; import { BescheidWizardComponent } from './bescheid-wizard-container/bescheid-wizard/bescheid-wizard.component'; import { BescheidWizardCancelButtonComponent } from './bescheid-wizard-container/bescheid-wizard/cancel-button/bescheid-wizard-cancel-button.component'; import { BescheidWizardCancelDialogContainerComponent } from './bescheid-wizard-container/bescheid-wizard/cancel-dialog-container/bescheid-wizard-cancel-dialog-container.component'; +import { BescheidWizardDokumentHochladenButtonComponent } from './bescheid-wizard-container/bescheid-wizard/dokument-hochladen-button/bescheid-wizard-dokument-hochladen-button.component'; +import { BescheidWizardDokumentComponent } from './bescheid-wizard-container/bescheid-wizard/dokument/bescheid-wizard-dokument.component'; import { BescheidWizardDokumenteHochladenComponent } from './bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/bescheid-wizard-dokumente-hochladen.component'; import { BescheidWizardDokumenteHochladenFormComponent } from './bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/form/bescheid-wizard-dokumente-hochladen-form.component'; import { BescheidWizardDokumenteHochladenSummaryComponent } from './bescheid-wizard-container/bescheid-wizard/dokumente-hochladen/summary/bescheid-wizard-dokumente-hochladen-summary.component'; @@ -53,6 +67,14 @@ import { BescheidWizardWeiterButtonComponent } from './bescheid-wizard-container CloseIconComponent, ButtonWithSpinnerComponent, RadioButtonCardComponent, + ButtonCardComponent, + BescheidGenerateIconComponent, + BescheidUploadIconComponent, + SpinnerIconComponent, + SingleFileUploadEditorComponent, + FileUploadEditorComponent, + AttachmentWrapperComponent, + AttachmentComponent, ], declarations: [ BescheidInVorgangContainerComponent, @@ -79,6 +101,10 @@ import { BescheidWizardWeiterButtonComponent } from './bescheid-wizard-container BescheidWizardDokumenteHochladenSummaryComponent, BescheidWizardAbschliessenButtonComponent, BescheidWizardAbschliessenDialogContainerComponent, + BescheidWizardAutomatischErstellenButtonComponent, + BescheidWizardDokumentHochladenButtonComponent, + BescheidWizardAttachmentHochladenButtonComponent, + BescheidWizardDokumentComponent, ], exports: [ BescheidInVorgangContainerComponent, diff --git a/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts b/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts index 313d82a48004cafc30d33be072bdec47f653efd9..6b4ef3b16e19262bc008bbfe2b0eb2ce89e30382 100644 --- a/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts +++ b/alfa-client/libs/tech-shared/src/lib/resource/resource.util.ts @@ -38,6 +38,8 @@ export interface StateResource<T> { error?: HttpError; } +export interface FileStateResource<T> {} + export function createEmptyStateResource<T>(loading: boolean = false): StateResource<T> { return createStateResource(null, loading); }