From c4e58697911b2928a2f2628bd633e24dbf8bbb90 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 23 May 2022 19:16:05 +0300 Subject: [PATCH 1/9] RED-3800 clone --- .../clone-dossier-template-dialog.component.ts | 7 ++++++- .../dossier-templates/dossier-templates.service.ts | 6 ++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/dialogs/clone-dossier-template-dialog/clone-dossier-template-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/clone-dossier-template-dialog/clone-dossier-template-dialog.component.ts index c26e9b629..e5340baad 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/clone-dossier-template-dialog/clone-dossier-template-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/clone-dossier-template-dialog/clone-dossier-template-dialog.component.ts @@ -28,7 +28,12 @@ export class CloneDossierTemplateDialogComponent { async save() { this._loadingService.start(); try { - await firstValueFrom(this._dossierTemplatesService.clone(this.dossierTemplateId, this.nameOfClonedDossierTemplate)); + await firstValueFrom( + this._dossierTemplatesService.clone(this.dossierTemplateId, { + ...this._dossierTemplate, + name: this.nameOfClonedDossierTemplate, + }), + ); this._dialogRef.close(true); } catch (error: any) { this._toaster.error(_('clone-dossier-template.error.generic'), { error }); diff --git a/apps/red-ui/src/app/services/dossier-templates/dossier-templates.service.ts b/apps/red-ui/src/app/services/dossier-templates/dossier-templates.service.ts index 979e3d9e5..098b375b0 100644 --- a/apps/red-ui/src/app/services/dossier-templates/dossier-templates.service.ts +++ b/apps/red-ui/src/app/services/dossier-templates/dossier-templates.service.ts @@ -70,10 +70,8 @@ export class DossierTemplatesService extends EntitiesService this.loadAll())); } - clone(dossierTemplateId: string, name: string) { - return this._post(null, `${this._defaultModelPath}/${dossierTemplateId}/clone?nameOfClonedDossierTemplate=${name}`).pipe( - switchMap(() => this.loadAll()), - ); + clone(dossierTemplateId: string, body: IDossierTemplate) { + return this._post(body, `${this._defaultModelPath}/${dossierTemplateId}/clone`).pipe(switchMap(() => this.loadAll())); } refreshDossierTemplate(dossierTemplateId: string): Observable { From a48a3d1831c9dc8a7b3b22c6626ddd4811a4159f Mon Sep 17 00:00:00 2001 From: Atlassian Bamboo Date: Mon, 23 May 2022 18:18:52 +0200 Subject: [PATCH 2/9] chore(release) --- package.json | 2 +- paligo-theme.tar.gz | Bin 3296 -> 3295 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 84d0e0e7b..9a63d439e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.492.0", + "version": "3.493.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index ad8d96cfab89c76555e3f87db4b74c7e2c87cbf2..7cb042e3afbadc4ffd99a95aaa63cacae07a6056 100644 GIT binary patch delta 3208 zcmV;340rS38Q&R@cYm%uCkR&0Y{w29_ZbR)6l?~isTr;i`YERRZ!Ak){_>+{_Zg`_ zmNqxKWq*z;FUimf6sMoznA~op^=YL6&vwFEJid{xCii@ROQUfB!JwqMu_U;GB*cO`z;;&%hTj_Biv zK91<)h(3nF`2O?y4wskLFD{lGKb%=9!7-`O-!Bk)XVE++Z@0*K0bePh zF#i_$fnC0RaewhJ7_r@kBq=H)Mus@L-Bm@C$5vEiMYTnrxEs&)o$)x7I${WChE>yd zWQ$flpFmdK$!R%7P?yo1SRE>xb=z@|s~ycPR+KP!qt%54W5ph@HX@C>&zj&WN(CZ& z{MNdoF-rlKZL7ex2sf1HMXZ-Oa!Z7~s7`xP_^6**`gOsegP}G@3+B#B7Q*kf= zQTZV&Yklo;tfXl++CSnFpWG+{>};im)sz)9%kVH!UgTufs_e8U7`Ou)IRPO1i`Kbg z-hX*MBU1m+lTntD#q6PA%_335il`ks6x9>ZK=?_BV51#>5Dds-DKmn+Ap$4sY6CJNPh2CW{=+{w5pjE zrBr%a%?#O(BMiW0*aU49*UhI-*U-)w>wl5P$`EO|{^O@IsNG@0kE3>}kHA#r^Opzk zRE^bTBG8$`4`8LjIGU%VqHM&wz8;*_^Uu(iG|vcSO};~)J-=82WD7_jndPXM^IBA$mz%a1(@B`kej`O$swN6L3mRj9Q&pR@de2n_J594 zdy>EZfy)e8WmP0J8vyes@v+w`FdU^7jZ#K;CX|9nD2dlY`KF1|q{(kZ9HNh3O=IEq zmtiw9?r8b zNJS=z-b^CB@q1vuE$W&Ax_}EKJ%3zSZg)6iBakEHkOXN|7X_un@O-4XOv1?rJs4}YOeuZBQU zq-QEtMd~JFQ!#WBz`u1nP7dHeG40}3>Hd00;n>ns9GRzgnLJH^=+16^-$j$jIoiIp zk{?WjtB(yyRUhfOEuy1YJ3>>isTsGciuL7ti`;})dz=ZJGpdaSP2TGgI;Ukxn8q+36SR@l^k}I} zR#-s}997Letc|{3(ZZxCm~alSV$|s+*88vZ* zh=SN7+NhG|w|^~H95;wH8KopE_eD$&W=U{gdMR%0Y8sOePwxL7RK1QWh}WTO*Y*Zi zS4Wo6wbr3sAlEt|X-rv4bKU>}-UB)Z(yi4{+3T3GFljUzp!& zsZKl0X;B{KKaLV3pQKI+S*6rZAaeXnsdFVpAUNU&s1U*p>H1(m`VOB=ytL$ipN1QO zyyV+j9e;$5hZ#xK&~$20lN}r0rFAog9|z?3i7YE3wA^L)W!fJ%2^|RJOuStJQhEDw zI7n4H{{Xz`4P{uowdxed#ogi5W8U1vxQ`6lK_<2>7_#$EM*cM?duQWx4M-;$qk&S1LfvNCL3I5*1quh=w6iV6^G z%72nn5w6J)yV;v9$}y;6^F^buKZhI8sVMz16@SF_2X&t$N=bB^(VFqi6#{IkFeiHE zJq#gL35jQ+z#kw0@?L)2+DD8FzE#<9NbtsJIo1o;tQYP;FNBhbbs*kWCqkp1>C&<* z!B(#>6Za4#F>+T`(scOhNjp?Y3J(=PsDHjGJJi(f+*@jYzei(FUq%4ERh*^de}uE> zDzHCAmN+oKRtZ3+K=#Mi8fOZ>i6QoWe0u?L z#{#VazVYMu*Q3cma;3(6gGn|kx4PNR?_|eo@8Wi zeaotdNDSI7vcF}`NO|IV_C#ptm;#b9?{xO}TO6+&Qun!qG5P9yyhJP>xqm`&)@Tc_ zf(-pf9PH9$8UOW0Gof$!I+yvZ%#T`!jJ6CWBdmvPJf-eLcp=l&b0 ub2*oDIhS)emvcFnb2*oDIhS)emvcFnb2*oDIhX&%@*f|gM~whb0098?@iGGd delta 3209 zcmV;440iM18Q>X^cYmyHJ6L+{_Zg`_ zmNqU!#7ryun#P3S{uEp;LejU-r z5q%ud#}R!T(Z}I^ei_rc%<%o^^&KuRuU}j&Ies{^Qi5Yrp}$`s^vN*ytTGsCLs zJF-P9pHCpG?&P$bBB;w~POJ`<&ARQl$JLJJ7Ar~^ywU2yg0W%`SR0W>-Dgd36{P}^ zJ$`H5(U_$G%eGZuTZ9`{@b9vyDWe6{R3yWUz9FY!FMr#ol~9t!VkS9@W80r{pkYyQ zJ|d@li|QhyG5RF-;vmL{MytXxZEB#r#mm6wBuO5L%XSNj5RtUVI>8qujwrj|B73=h zB(TNPW*%ybrWcOX3rz={%^bmwnP1{Kruhy4xWI2`Jqt?6@^)}9e;k6S8b&x?Rg00( z(*t-ePJd@oUaW%UUE+%5?1hp3sHtjRRTea7q%!D&&9y=Nx95?tO^Y{@-v$MWV?PcA zq>ER35>t$dJiAAAR1uORoX6-&St4t`-mV2K^Sag~=({Z+%xilf*+8!D2Zg8_c$yKb zY{HC2n2TV7i~(OIw(e$N1`P0CBHY5%x$K`DxPMeWEE-LsrgC_h5X>3~37`?g3p~ki zNHS@N4pz;Ts?W$@>OW`l&b= zfT;YCm9@V1I9Ad$8|@!)iBE160d}@h!)nS3nq_#HC@*p{YgKmI6Aavejhq0G{YC5C zF@NtopAo5l=*cL{$YSDznFL6I#{G zic%^)t!9So#}NkLGHil2itFanr)y|ujDPh=V`YdmT>tS?8Px7D;m1+C)JI^d^7+dH zc&f(gG7;#^;Rmo%VI0jiK8rOPXhdvL@f5&z@f_0kQ=okj!#a%z7_# z`M1PfuP?jNe=VxpBrEO)W8JB-cI5P9{{qZzYRJvr!Q>Fn=pei)5RQG*gZP5v4S#z_ zsy)fy|G;I2tg~PijjLjj)77Axbk!-v3J?3Jap)!BYm&@(@{Pavj*tK@q=_60hI?0FtV? z4h`WHF`SgzgCXssi=MuYZTordLBC zDbh0)t0Hxiv8fn33EMRmJ-9y+v-qt3A#H&KcE4gC_6w7(vd{W7IRs zL{HBdJ_v0(P7Y^)iVT7vaDN@fxlab#!_0O(%g2bTOyQ|MOP$lQBurx%j|tkyYI?L( zCM&EU2ac*{AJ#_SuV`UX6ifuSHLyv3srjc+iQ_WS(*730G3a{RC`9WQ%AjAH6Aloa zN)!((Ni3w5-|=pCkY$=2a`Vs32tb3rf(<|-Ib$^#G;E5;5ZCgQS z(O_Bhbqx|KD+;tj043IBm^C7)9JE^1E(Gdadx2a}{P?C`?iN9S0v=Iq#8D)SW1BQa>-jd!!bw%V8%tnXkk{;>FB<<{yZ!AYq04H-n;J4*z# zTU8JB4t%VgIEhBy9e=KJ-Vleets!ui!hBmK9vZ9+Oa-SH9%_BoYRRa7O~8m?#upi| z17ErB3fSRpI8T5v_VVUh?f$x<(X9m`8xw}FHRQ@}Yu9gAk$Z?q)m%|)aye0c>xl+U z9yDQ$qtF{Q`9}7MreGS4m65ZeX>Am)XxbQMDVlB+H##KQhJQBC@nWBh+c-Z+MB-#P z8_5N)Y&%J8LmOvS5Ru?UBcN4xF)&Fswxbb#4{=>_CmX|!7aAH}qhiU%cGU%-0?y`U zfwV3>!*R5POl=Whot3llb-ip_T>Z^@z&O$5il*qs(8LuY2yfPLIBMbw;jR5>+Jj5DZ{Fcu#)&l66Z<}tPx$(kPod0pt7<2Tl5IcjlOw+A@txrBBafiKK& zwN$4a=Cmk}@*hWukxx>mgsf8PClEP)rqsC-BM=<%15^m%hID-}Abp2VCSF={z)!=C zKwk1~t$z+e$HR;yYG^t&sL75E@6x&%!;b^<`$U!%5nArD`!em1n}iMoawgs`0ja!w zIUJ;_oqqsc^oBAl-dc5vqzidyF*w#%uQl{t zxEAsByTm&pU$x9n`r|H9hLNA>G`&PdP^oJGW-Bi2VhN!P1c`4bxf9oD)Q;_)jE7Ml zy5EiS_pURfhI|uqq;Z~YRO7CCz&i<~U8xK0lW)n-IA<{3bXgfTE}R?X{8wz6Bt->? zHGgGEstDI)h~4bX7UdY!u=%1<*q_4<=v0*cn2JB*`h&Vp5~U=%&1lW|<_ZBeRhSb! z^B#tfs)WR|P~Z;`0C_JzZtWw+1>dS{I3##uv>fY&Yt{>Qpcg{P#5xdfs}rG7&va?o zm0+t^mx+4_k{G$GDrq`=^`srDB!!0xAb(WflpShnckV5{Oi$VAh}XwzQH7$m0R6x=XWw`G(b-{tDNh=kOg2O!7<~k1KQ+Z%?@t6 z$QJF(@GM{RgUS_ypZ_M!gN~2sLVt_eKI_)XQGmk9o&Y%+wVi<6JGWEtpK_CA20NZ~ zT||XH<4%a$ee&Xm-f75$iItt7z=L*vAd6b5@Mi1 zRAfJd=*@-bdn!alb)M`6N18VZ@gA2VNQmP|@tE@wL(CqmYn+`nPXb7asF}K8@N@qS v)VZ9?xtz Date: Mon, 23 May 2022 20:54:08 +0300 Subject: [PATCH 3/9] RED-3800 error handling fixes --- .../clone-dossier-template-dialog.component.ts | 2 +- .../reports/reports-screen/reports-screen.component.ts | 4 ++-- apps/red-ui/src/assets/config/config.json | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/red-ui/src/app/modules/admin/dialogs/clone-dossier-template-dialog/clone-dossier-template-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/clone-dossier-template-dialog/clone-dossier-template-dialog.component.ts index e5340baad..cdd4760e2 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/clone-dossier-template-dialog/clone-dossier-template-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/clone-dossier-template-dialog/clone-dossier-template-dialog.component.ts @@ -36,7 +36,7 @@ export class CloneDossierTemplateDialogComponent { ); this._dialogRef.close(true); } catch (error: any) { - this._toaster.error(_('clone-dossier-template.error.generic'), { error }); + this._toaster.error(_('clone-dossier-template.error.generic'), { params: error }); } this._loadingService.stop(); } diff --git a/apps/red-ui/src/app/modules/admin/screens/reports/reports-screen/reports-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/reports/reports-screen/reports-screen.component.ts index 5d54fbe82..5e82b462b 100644 --- a/apps/red-ui/src/app/modules/admin/screens/reports/reports-screen/reports-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/reports/reports-screen/reports-screen.component.ts @@ -68,8 +68,8 @@ export class ReportsScreenComponent implements OnInit { ); this._loadingService.stop(); download(data, template.fileName); - } catch (e) { - this._toaster.error(_('error.http.generic')); + } catch (error) { + this._toaster.error(_('error.http.generic'), { params: error }); this._loadingService.stop(); } } diff --git a/apps/red-ui/src/assets/config/config.json b/apps/red-ui/src/assets/config/config.json index 322276d2f..f9a12cdad 100644 --- a/apps/red-ui/src/assets/config/config.json +++ b/apps/red-ui/src/assets/config/config.json @@ -1,7 +1,7 @@ { "ADMIN_CONTACT_NAME": null, "ADMIN_CONTACT_URL": null, - "API_URL": "https://dev-08.iqser.cloud/redaction-gateway-v1", + "API_URL": "https://dev-05.iqser.cloud/redaction-gateway-v1", "APP_NAME": "RedactManager", "AUTO_READ_TIME": 3, "BACKEND_APP_VERSION": "4.4.40", @@ -16,7 +16,7 @@ "MAX_RETRIES_ON_SERVER_ERROR": 3, "OAUTH_CLIENT_ID": "redaction", "OAUTH_IDP_HINT": null, - "OAUTH_URL": "https://dev-08.iqser.cloud/auth/realms/redaction", + "OAUTH_URL": "https://dev-05.iqser.cloud/auth/realms/redaction", "RECENT_PERIOD_IN_HOURS": 24, "SELECTION_MODE": "structural", "MANUAL_BASE_URL": "https://docs.redactmanager.com/preview" From ab1399c45a1490553b5b50dfe306af7f302327a4 Mon Sep 17 00:00:00 2001 From: Atlassian Bamboo Date: Mon, 23 May 2022 19:56:40 +0200 Subject: [PATCH 4/9] chore(release) --- package.json | 2 +- paligo-theme.tar.gz | Bin 3295 -> 3295 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9a63d439e..c25bfd656 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.493.0", + "version": "3.494.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index 7cb042e3afbadc4ffd99a95aaa63cacae07a6056..9d2a4757ce5443a486e33940a7d6d8eb0136055b 100644 GIT binary patch delta 3176 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 Date: Fri, 20 May 2022 18:03:04 +0300 Subject: [PATCH 5/9] RED-4032: Assignment permissions --- ...sign-reviewer-approver-dialog.component.ts | 3 +++ .../src/app/services/breadcrumbs.service.ts | 10 +++++----- .../dashboard-stats.service.ts | 2 +- .../dossiers/archived-dossiers.service.ts | 2 +- .../app/services/dossiers/dossiers.service.ts | 2 +- .../entity-services/dossier-states.service.ts | 4 ++-- .../services/entity-services/trash.service.ts | 8 ++++---- .../src/app/services/notifications.service.ts | 4 ++-- .../src/app/services/permissions.service.ts | 19 +++++++++++-------- 9 files changed, 30 insertions(+), 24 deletions(-) diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts index 5751f277c..fecae4d7a 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts @@ -47,6 +47,9 @@ export class AssignReviewerApproverDialogComponent { get userOptions() { const unassignUser = this._canUnassignFiles && this.data.withUnassignedOption ? [undefined] : []; + if (!this.permissionsService.canAssignUser(this.data.files, this.dossier)) { + return [...unassignUser]; + } return this.data.mode === 'approver' ? [...this.dossier.approverIds, ...unassignUser] : [...this.dossier.memberIds, ...unassignUser]; diff --git a/apps/red-ui/src/app/services/breadcrumbs.service.ts b/apps/red-ui/src/app/services/breadcrumbs.service.ts index f4d640ff6..44f157203 100644 --- a/apps/red-ui/src/app/services/breadcrumbs.service.ts +++ b/apps/red-ui/src/app/services/breadcrumbs.service.ts @@ -3,13 +3,13 @@ import { List } from '@iqser/common-ui'; import { ActivatedRouteSnapshot, IsActiveMatchOptions, NavigationEnd, Router } from '@angular/router'; import { BehaviorSubject, Observable, of } from 'rxjs'; import { filter, pluck } from 'rxjs/operators'; -import { FilesMapService } from '@services/files/files-map.service'; +import { FilesMapService } from './files/files-map.service'; import { TranslateService } from '@ngx-translate/core'; import { BreadcrumbTypes, DOSSIER_ID, DOSSIER_TEMPLATE_ID, DOSSIERS_ARCHIVE, FILE_ID } from '@red/domain'; -import { DossiersService } from '@services/dossiers/dossiers.service'; -import { dossiersServiceResolver } from '@services/entity-services/dossiers.service.provider'; -import { FeaturesService } from '@services/features.service'; -import { DashboardStatsService } from '@services/dossier-templates/dashboard-stats.service'; +import { DossiersService } from './dossiers/dossiers.service'; +import { dossiersServiceResolver } from './entity-services/dossiers.service.provider'; +import { FeaturesService } from './features.service'; +import { DashboardStatsService } from './dossier-templates/dashboard-stats.service'; export type RouterLinkActiveOptions = { exact: boolean } | IsActiveMatchOptions; export type BreadcrumbDisplayType = 'text' | 'dropdown'; diff --git a/apps/red-ui/src/app/services/dossier-templates/dashboard-stats.service.ts b/apps/red-ui/src/app/services/dossier-templates/dashboard-stats.service.ts index 2003fe426..24a1687ef 100644 --- a/apps/red-ui/src/app/services/dossier-templates/dashboard-stats.service.ts +++ b/apps/red-ui/src/app/services/dossier-templates/dashboard-stats.service.ts @@ -4,7 +4,7 @@ import { Injectable, Injector } from '@angular/core'; import { NGXLogger } from 'ngx-logger'; import { Observable } from 'rxjs'; import { map, switchMap, tap } from 'rxjs/operators'; -import { DossierStatesService } from '@services/entity-services/dossier-states.service'; +import { DossierStatesService } from '../entity-services/dossier-states.service'; const templatesSorter = (a: DashboardStats, b: DashboardStats) => { if (a.numberOfActiveDossiers > 0 && b.numberOfActiveDossiers === 0) { diff --git a/apps/red-ui/src/app/services/dossiers/archived-dossiers.service.ts b/apps/red-ui/src/app/services/dossiers/archived-dossiers.service.ts index a140a587e..9a572140b 100644 --- a/apps/red-ui/src/app/services/dossiers/archived-dossiers.service.ts +++ b/apps/red-ui/src/app/services/dossiers/archived-dossiers.service.ts @@ -6,7 +6,7 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { ActiveDossiersService } from './active-dossiers.service'; import { DossiersService } from './dossiers.service'; import { FilesMapService } from '../files/files-map.service'; -import { FeaturesService } from '@services/features.service'; +import { FeaturesService } from '../features.service'; @Injectable({ providedIn: 'root' }) export class ArchivedDossiersService extends DossiersService { diff --git a/apps/red-ui/src/app/services/dossiers/dossiers.service.ts b/apps/red-ui/src/app/services/dossiers/dossiers.service.ts index 2a576a40f..e7d2809ab 100644 --- a/apps/red-ui/src/app/services/dossiers/dossiers.service.ts +++ b/apps/red-ui/src/app/services/dossiers/dossiers.service.ts @@ -7,7 +7,7 @@ import { DossierStatsService } from './dossier-stats.service'; import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { NGXLogger } from 'ngx-logger'; -import { DashboardStatsService } from '@services/dossier-templates/dashboard-stats.service'; +import { DashboardStatsService } from '../dossier-templates/dashboard-stats.service'; const CONFLICT_MSG = _('add-dossier-dialog.errors.dossier-already-exists'); const GENERIC_MSG = _('add-dossier-dialog.errors.generic'); diff --git a/apps/red-ui/src/app/services/entity-services/dossier-states.service.ts b/apps/red-ui/src/app/services/entity-services/dossier-states.service.ts index 1fa21f731..7b8cfd323 100644 --- a/apps/red-ui/src/app/services/entity-services/dossier-states.service.ts +++ b/apps/red-ui/src/app/services/entity-services/dossier-states.service.ts @@ -2,9 +2,9 @@ import { Injectable, Injector } from '@angular/core'; import { EntitiesService, mapEach, RequiredParam, Toaster, Validate } from '@iqser/common-ui'; import { DossierState, IDossierState } from '@red/domain'; import { EMPTY, forkJoin, Observable, switchMap } from 'rxjs'; -import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service'; +import { DossierTemplatesService } from '../dossier-templates/dossier-templates.service'; import { catchError, defaultIfEmpty, tap } from 'rxjs/operators'; -import { DossierStatesMapService } from '@services/entity-services/dossier-states-map.service'; +import { DossierStatesMapService } from '../entity-services/dossier-states-map.service'; import { HttpErrorResponse, HttpStatusCode } from '@angular/common/http'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; diff --git a/apps/red-ui/src/app/services/entity-services/trash.service.ts b/apps/red-ui/src/app/services/entity-services/trash.service.ts index 4552f8ce8..d888d42bf 100644 --- a/apps/red-ui/src/app/services/entity-services/trash.service.ts +++ b/apps/red-ui/src/app/services/entity-services/trash.service.ts @@ -6,11 +6,11 @@ import { forkJoin, map, Observable, of } from 'rxjs'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { ConfigService } from '../config.service'; import { PermissionsService } from '../permissions.service'; -import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; -import { UserService } from '@services/user.service'; +import { ActiveDossiersService } from '../dossiers/active-dossiers.service'; +import { UserService } from '../user.service'; import { flatMap } from 'lodash-es'; -import { DossierStatsService } from '@services/dossiers/dossier-stats.service'; -import { FilesService } from '@services/files/files.service'; +import { DossierStatsService } from '../dossiers/dossier-stats.service'; +import { FilesService } from '../files/files.service'; @Injectable({ providedIn: 'root', diff --git a/apps/red-ui/src/app/services/notifications.service.ts b/apps/red-ui/src/app/services/notifications.service.ts index f2eed9725..0066d9c0c 100644 --- a/apps/red-ui/src/app/services/notifications.service.ts +++ b/apps/red-ui/src/app/services/notifications.service.ts @@ -6,11 +6,11 @@ import { Dossier, INotification, Notification, NotificationTypes } from '@red/do import { map, switchMap, tap } from 'rxjs/operators'; import { notificationsTranslations } from '@translations/notifications-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; -import { UserService } from '@services/user.service'; +import { UserService } from './user.service'; import dayjs from 'dayjs'; import { CHANGED_CHECK_INTERVAL } from '@utils/constants'; import { BASE_HREF } from '../tokens'; -import { DossiersCacheService } from '@services/dossiers/dossiers-cache.service'; +import { DossiersCacheService } from './dossiers/dossiers-cache.service'; const INCLUDE_SEEN = false; diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index f87d59f30..98dc43d9f 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -285,10 +285,8 @@ export class PermissionsService { return dossier.isActive && !file.excludedFromAutomaticAnalysis && this.isFileAssignee(file) && !file.isApproved; } - private _canAssignToSelf(file: File, dossier: Dossier): boolean { - const precondition = - dossier.isActive && this.isDossierMember(dossier) && !this.isFileAssignee(file) && !file.isError && !file.isProcessing; - return precondition && (file.isNew || file.isUnderReview || (file.isUnderApproval && this.isApprover(dossier))); + private _assignmentPrecondition(file: File, dossier: Dossier): boolean { + return dossier.isActive && !file.isError && !file.isProcessing; } private _canSetUnderApproval(file: File, dossier: Dossier): boolean { @@ -303,14 +301,19 @@ export class PermissionsService { return dossier.isActive && file.canBeApproved && this.isFileAssignee(file); } + private _canAssignToSelf(file: File, dossier: Dossier): boolean { + const precondition = this._assignmentPrecondition(file, dossier) && !this.isFileAssignee(file); + return precondition && (this.isApprover(dossier) || (this.isDossierMember(dossier) && (file.isNew || file.isUnderReview))); + } + private _canAssignUser(file: File, dossier: Dossier) { - const precondition = dossier.isActive && !file.isProcessing && !file.isError && !file.isApproved && this.isApprover(dossier); + const precondition = this._assignmentPrecondition(file, dossier); if (precondition) { - if ((file.isNew || file.isUnderReview) && dossier.hasReviewers) { + if ((file.isNew || file.isUnderReview) && dossier.hasReviewers && this.isDossierMember(dossier)) { return true; } - if (file.isUnderApproval && dossier.approverIds.length > 1) { + if (file.isUnderApproval && dossier.approverIds.length > 1 && this.isApprover(dossier)) { return true; } } @@ -318,7 +321,7 @@ export class PermissionsService { } private _canUnassignUser(file: File, dossier: Dossier) { - return dossier.isActive && (file.isUnderReview || file.isUnderApproval) && (this.isFileAssignee(file) || this.isApprover(dossier)); + return this._assignmentPrecondition(file, dossier) && !!file.assignee && (this.isApprover(dossier) || this.isFileAssignee(file)); } private _canSetToNew(file: File, dossier: Dossier): boolean { From 20d27ab75e0665c26debd870ca758043371a9bd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adina=20=C8=9Aeudan?= Date: Mon, 23 May 2022 23:04:07 +0300 Subject: [PATCH 6/9] RED-4032: Updated assignment & workflow change permissions --- ...dossier-overview-bulk-actions.component.ts | 3 +- .../services/bulk-actions.service.ts | 12 +-- .../user-management.component.ts | 6 +- .../file-actions/file-actions.component.ts | 4 +- ...gn-reviewer-approver-dialog.component.html | 10 +- ...sign-reviewer-approver-dialog.component.ts | 19 ++-- .../services/file-assign.service.ts | 100 ++++++------------ .../src/app/services/files/files.service.ts | 4 +- .../src/app/services/permissions.service.ts | 74 +++++++------ apps/red-ui/src/assets/i18n/de.json | 4 - apps/red-ui/src/assets/i18n/en.json | 6 +- 11 files changed, 104 insertions(+), 138 deletions(-) diff --git a/apps/red-ui/src/app/modules/dossier-overview/components/bulk-actions/dossier-overview-bulk-actions.component.ts b/apps/red-ui/src/app/modules/dossier-overview/components/bulk-actions/dossier-overview-bulk-actions.component.ts index 016914ee6..54a03d3d6 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/components/bulk-actions/dossier-overview-bulk-actions.component.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/components/bulk-actions/dossier-overview-bulk-actions.component.ts @@ -170,8 +170,9 @@ export class DossierOverviewBulkActionsComponent implements OnChanges { true, ); const allFilesAreUnderApproval = this.selectedFiles.reduce((acc, file) => acc && file.isUnderApproval, true); + const allFilesAreApproved = this.selectedFiles.reduce((acc, file) => acc && file.isApproved, true); this.#allFilesAreExcluded = this.selectedFiles.reduce((acc, file) => acc && file.excluded, true); - this.#canMoveToSameState = allFilesAreUnderReviewOrUnassigned || allFilesAreUnderApproval; + this.#canMoveToSameState = allFilesAreUnderReviewOrUnassigned || allFilesAreUnderApproval || allFilesAreApproved; this.#canAssign = this.#canMoveToSameState && diff --git a/apps/red-ui/src/app/modules/dossier-overview/services/bulk-actions.service.ts b/apps/red-ui/src/app/modules/dossier-overview/services/bulk-actions.service.ts index 6528bc387..343e61cd6 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/services/bulk-actions.service.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/services/bulk-actions.service.ts @@ -1,5 +1,5 @@ import { Injectable } from '@angular/core'; -import { Dossier, File } from '@red/domain'; +import { Dossier, File, WorkflowFileStatus, WorkflowFileStatuses } from '@red/domain'; import { DossiersDialogService } from '../../shared-dossiers/services/dossiers-dialog.service'; import { ConfirmationDialogInput, LoadingService } from '@iqser/common-ui'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; @@ -26,7 +26,7 @@ export class BulkActionsService { const dossier = this._getDossier(files); // If more than 1 approver - show dialog and ask who to assign if (dossier.approverIds.length > 1) { - this._assignFiles(files, 'approver', true); + this._assignFiles(files, WorkflowFileStatuses.UNDER_APPROVAL, true); } else { this._loadingService.start(); await firstValueFrom(this._filesService.setUnderApprovalFor(files, dossier.id, dossier.approverIds[0])); @@ -124,15 +124,15 @@ export class BulkActionsService { } } - assign(files: File[], mode: 'reviewer' | 'approver' = files[0].isUnderApproval ? 'approver' : 'reviewer') { - this._assignFiles(files, mode, false, true); + assign(files: File[]): void { + this._assignFiles(files, files[0].workflowStatus, false, true); } private _getDossier(files: File[]): Dossier { return this._activeDossiersService.find(files[0].dossierId); } - private _assignFiles(files: File[], mode: 'reviewer' | 'approver', ignoreChanged = false, withUnassignedOption = false) { - this._dialogService.openDialog('assignFile', null, { mode, files, ignoreChanged, withUnassignedOption }); + private _assignFiles(files: File[], targetStatus: WorkflowFileStatus, ignoreChanged = false, withUnassignedOption = false): void { + this._dialogService.openDialog('assignFile', null, { targetStatus, files, ignoreChanged, withUnassignedOption }); } } diff --git a/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.ts b/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.ts index e78e99557..ee4db7c40 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/components/user-management/user-management.component.ts @@ -102,11 +102,11 @@ export class UserManagementComponent { const { dossierId, filename } = file; this.loadingService.start(); - if (!assigneeId) { - await firstValueFrom(this.filesService.setUnassigned([file], dossierId)); + if (!assigneeId || file.isApproved) { + await firstValueFrom(this.filesService.setAssignee([file], dossierId, assigneeId)); } else if (file.isNew || file.isUnderReview) { await firstValueFrom(this.filesService.setReviewerFor([file], dossierId, assigneeId)); - } else if (file.isUnderApproval) { + } else { await firstValueFrom(this.filesService.setUnderApprovalFor([file], dossierId, assigneeId)); } diff --git a/apps/red-ui/src/app/modules/shared-dossiers/components/file-actions/file-actions.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/components/file-actions/file-actions.component.ts index 3c12d7f43..4f181ef51 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/components/file-actions/file-actions.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/components/file-actions/file-actions.component.ts @@ -319,11 +319,11 @@ export class FileActionsComponent implements OnChanges { } private _assign($event: MouseEvent) { - const mode = this.file.isUnderApproval ? 'approver' : 'reviewer'; const files = [this.file]; + const targetStatus = this.file.workflowStatus; const withCurrentUserAsDefault = true; const withUnassignedOption = true; - this._dialogService.openDialog('assignFile', $event, { mode, files, withCurrentUserAsDefault, withUnassignedOption }); + this._dialogService.openDialog('assignFile', $event, { targetStatus, files, withCurrentUserAsDefault, withUnassignedOption }); } private async _assignToMe($event: MouseEvent) { diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.html b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.html index 1e851ab46..0508326d7 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.html +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.html @@ -1,17 +1,11 @@

-
+
- {{ 'assign-owner.dialog.label' | translate: { type: data.mode } }} + {{ 'assign-owner.dialog.label' | translate: { type: mode } }} {{ userId | name: { defaultValue: 'initials-avatar.unassigned' | translate } }} diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts index fecae4d7a..e48a81f16 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component.ts @@ -3,7 +3,7 @@ import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { UserService } from '@services/user.service'; import { LoadingService, Toaster } from '@iqser/common-ui'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; -import { Dossier, File } from '@red/domain'; +import { Dossier, File, WorkflowFileStatus, WorkflowFileStatuses } from '@red/domain'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { FilesService } from '@services/files/files.service'; import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; @@ -11,7 +11,7 @@ import { PermissionsService } from '@services/permissions.service'; import { firstValueFrom } from 'rxjs'; class DialogData { - mode: 'approver' | 'reviewer'; + targetStatus: WorkflowFileStatus; files: File[]; ignoreChanged?: boolean; withUnassignedOption?: boolean; @@ -24,6 +24,7 @@ class DialogData { }) export class AssignReviewerApproverDialogComponent { readonly form: FormGroup; + readonly mode: 'reviewer' | 'approver'; dossier: Dossier; constructor( @@ -39,6 +40,10 @@ export class AssignReviewerApproverDialogComponent { ) { this.dossier = this._activeDossiersService.find(this.data.files[0].dossierId); this.form = this._getForm(); + this.mode = + data.targetStatus === WorkflowFileStatuses.UNDER_APPROVAL || data.targetStatus === WorkflowFileStatuses.APPROVED + ? 'approver' + : 'reviewer'; } get selectedUser(): string { @@ -50,9 +55,7 @@ export class AssignReviewerApproverDialogComponent { if (!this.permissionsService.canAssignUser(this.data.files, this.dossier)) { return [...unassignUser]; } - return this.data.mode === 'approver' - ? [...this.dossier.approverIds, ...unassignUser] - : [...this.dossier.memberIds, ...unassignUser]; + return this.mode === 'reviewer' ? [...this.dossier.memberIds, ...unassignUser] : [...this.dossier.approverIds, ...unassignUser]; } get changed(): boolean { @@ -100,9 +103,9 @@ export class AssignReviewerApproverDialogComponent { async save() { this._loadingService.start(); try { - if (!this.selectedUser) { - await firstValueFrom(this._filesService.setUnassigned(this.data.files, this.dossier.id)); - } else if (this.data.mode === 'reviewer') { + if (!this.selectedUser || this.data.targetStatus === WorkflowFileStatuses.APPROVED) { + await firstValueFrom(this._filesService.setAssignee(this.data.files, this.dossier.id, this.selectedUser)); + } else if (this.mode === 'reviewer') { await firstValueFrom(this._filesService.setReviewerFor(this.data.files, this.dossier.id, this.selectedUser)); } else { await firstValueFrom(this._filesService.setUnderApprovalFor(this.data.files, this.dossier.id, this.selectedUser)); diff --git a/apps/red-ui/src/app/modules/shared-dossiers/services/file-assign.service.ts b/apps/red-ui/src/app/modules/shared-dossiers/services/file-assign.service.ts index 82269a1f3..c16888d05 100644 --- a/apps/red-ui/src/app/modules/shared-dossiers/services/file-assign.service.ts +++ b/apps/red-ui/src/app/modules/shared-dossiers/services/file-assign.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { UserService } from '@services/user.service'; -import { Dossier, File, User } from '@red/domain'; +import { Dossier, File, User, WorkflowFileStatus, WorkflowFileStatuses } from '@red/domain'; import { DossiersDialogService } from './dossiers-dialog.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { FilesService } from '@services/files/files.service'; @@ -8,16 +8,6 @@ import { ConfirmationDialogInput, LoadingService, Toaster } from '@iqser/common- import { ActiveDossiersService } from '@services/dossiers/active-dossiers.service'; import { firstValueFrom } from 'rxjs'; -const changeReviewerDialogInput = new ConfirmationDialogInput({ - title: _('confirmation-dialog.assign-file-to-me.title'), - question: _('confirmation-dialog.assign-file-to-me.question'), -}); - -const changeApproverDialogInput = new ConfirmationDialogInput({ - title: _('confirmation-dialog.assign-me-as-approver.title'), - question: _('confirmation-dialog.assign-me-as-approver.question'), -}); - const atLeastOneAssignee = (files: File[]) => files.reduce((acc, fs) => acc || !!fs.assignee, false); @Injectable() @@ -35,76 +25,66 @@ export class FileAssignService { this.currentUser = userService.currentUser; } - async assignToMe(files: File[]) { - const filesAreUnderApproval = files.reduce((acc, fs) => acc && fs.isUnderApproval, true); + async assignToMe(files: File[]): Promise { + const assignReq = async () => { + this._loadingService.start(); + await firstValueFrom(this._filesService.setAssignee(files, files[0].dossierId, this.currentUser.id)); + this._loadingService.stop(); + }; + if (atLeastOneAssignee(files)) { + const dialogInput = new ConfirmationDialogInput({ + title: _('confirmation-dialog.assign-file-to-me.title'), + question: _('confirmation-dialog.assign-file-to-me.question'), + }); + const ref = this._dialogService.openDialog('confirm', null, dialogInput, assignReq); + return firstValueFrom(ref.afterClosed()); + } - return filesAreUnderApproval ? this.#assignMeAsApprover(files) : this.#assignMeAsReviewer(files); + return assignReq(); } async assignReviewer($event: MouseEvent, file: File, ignoreChanged = false): Promise { - await this._assignFile('reviewer', $event, file, ignoreChanged); + await this._assignFile(WorkflowFileStatuses.UNDER_REVIEW, $event, file, ignoreChanged); } async assignApprover($event: MouseEvent, file: File, ignoreChanged = false): Promise { - await this._assignFile('approver', $event, file, ignoreChanged); + await this._assignFile(WorkflowFileStatuses.UNDER_APPROVAL, $event, file, ignoreChanged); } - #assignMeAsReviewer(files: File[]) { - if (atLeastOneAssignee(files)) { - const cb = () => this.#assignReviewerToCurrentUser(files); - const ref = this._dialogService.openDialog('confirm', null, changeReviewerDialogInput, cb); - - return firstValueFrom(ref.afterClosed()); - } - - return this.#assignReviewerToCurrentUser(files); - } - - #assignMeAsApprover(files: File[]) { - if (atLeastOneAssignee(files)) { - const cb = () => this.#assignApproverToCurrentUser(files); - const ref = this._dialogService.openDialog('confirm', null, changeApproverDialogInput, cb); - - return firstValueFrom(ref.afterClosed()); - } - - return this.#assignApproverToCurrentUser(files); - } - - private async _assignFile(mode: 'reviewer' | 'approver', $event: MouseEvent, file: File, ignoreChanged = false): Promise { + private async _assignFile(targetStatus: WorkflowFileStatus, $event: MouseEvent, file: File, ignoreChanged = false): Promise { $event?.stopPropagation(); const currentUserId = this.currentUser.id; const currentDossier = this._activeDossiersService.find(file.dossierId); - const eligibleUsersIds = this._getUserIds(mode, currentDossier); + const eligibleUsersIds = this._getUserIds(targetStatus, currentDossier); if (file.isNew) { - await this._makeAssignFileRequest(currentUserId, mode, [file]); + await this._makeAssignFileRequest(currentUserId, targetStatus, [file]); } else if (file.assignee === currentUserId) { if (eligibleUsersIds.includes(currentUserId)) { - await this._makeAssignFileRequest(currentUserId, mode, [file]); + await this._makeAssignFileRequest(currentUserId, targetStatus, [file]); } else if (eligibleUsersIds.length === 1) { - await this._makeAssignFileRequest(eligibleUsersIds[0], mode, [file]); + await this._makeAssignFileRequest(eligibleUsersIds[0], targetStatus, [file]); } else { - const data = { mode, files: [file], ignoreChanged }; + const data = { targetStatus, files: [file], ignoreChanged }; this._dialogService.openDialog('assignFile', null, data); } } else { if (eligibleUsersIds.length === 1) { - await this._makeAssignFileRequest(eligibleUsersIds[0], mode, [file]); + await this._makeAssignFileRequest(eligibleUsersIds[0], targetStatus, [file]); } else { - const data = { mode, files: [file], ignoreChanged, withCurrentUserAsDefault: true }; + const data = { targetStatus, files: [file], ignoreChanged, withCurrentUserAsDefault: true }; this._dialogService.openDialog('assignFile', null, data); } } } - private async _makeAssignFileRequest(userId: string, mode: 'reviewer' | 'approver', files: File[]) { + private async _makeAssignFileRequest(userId: string, targetStatus: WorkflowFileStatus, files: File[]) { this._loadingService.start(); try { - if (!userId) { - await firstValueFrom(this._filesService.setUnassigned(files, files[0].dossierId)); - } else if (mode === 'reviewer') { + if (!userId || targetStatus === WorkflowFileStatuses.APPROVED) { + await firstValueFrom(this._filesService.setAssignee(files, files[0].dossierId, userId)); + } else if (targetStatus === WorkflowFileStatuses.UNDER_REVIEW) { await firstValueFrom(this._filesService.setReviewerFor(files, files[0].dossierId, userId)); } else { await firstValueFrom(this._filesService.setUnderApprovalFor(files, files[0].dossierId, userId)); @@ -115,21 +95,9 @@ export class FileAssignService { this._loadingService.stop(); } - private _getUserIds(mode: 'reviewer' | 'approver', dossier: Dossier) { - return mode === 'approver' ? dossier.approverIds : dossier.memberIds; - } - - async #assignReviewerToCurrentUser(files: File[]) { - this._loadingService.start(); - const reviewer$ = this._filesService.setReviewerFor(files, files[0].dossierId, this.currentUser.id); - await firstValueFrom(reviewer$); - this._loadingService.stop(); - } - - async #assignApproverToCurrentUser(files: File[]) { - this._loadingService.start(); - const approver$ = this._filesService.setUnderApprovalFor(files, files[0].dossierId, this.currentUser.id); - await firstValueFrom(approver$); - this._loadingService.stop(); + private _getUserIds(targetStatus: WorkflowFileStatus, dossier: Dossier) { + return targetStatus === WorkflowFileStatuses.UNDER_APPROVAL || targetStatus === WorkflowFileStatuses.APPROVED + ? dossier.approverIds + : dossier.memberIds; } } diff --git a/apps/red-ui/src/app/services/files/files.service.ts b/apps/red-ui/src/app/services/files/files.service.ts index b48dbe7b5..ca141e999 100644 --- a/apps/red-ui/src/app/services/files/files.service.ts +++ b/apps/red-ui/src/app/services/files/files.service.ts @@ -42,10 +42,10 @@ export class FilesService extends EntitiesService { } @Validate() - setUnassigned(@RequiredParam() files: List, @RequiredParam() dossierId: string) { + setAssignee(@RequiredParam() files: List, @RequiredParam() dossierId: string, assigneeId: string) { const url = `${this._defaultModelPath}/set-assignee/${dossierId}/bulk`; const fileIds = files.map(f => f.id); - return this._post(fileIds, url).pipe(switchMap(() => this.loadAll(dossierId))); + return this._post(fileIds, url, [{ key: 'assigneeId', value: assigneeId }]).pipe(switchMap(() => this.loadAll(dossierId))); } @Validate() diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts index 98dc43d9f..ca4b1f51d 100644 --- a/apps/red-ui/src/app/services/permissions.service.ts +++ b/apps/red-ui/src/app/services/permissions.service.ts @@ -29,7 +29,7 @@ export class PermissionsService { return this.isAdmin(); } - isReviewerOrApprover(file: File, dossier: Dossier): boolean { + isAssigneeOrApprover(file: File, dossier: Dossier): boolean { return this.isFileAssignee(file) || this.isApprover(dossier); } @@ -121,7 +121,7 @@ export class PermissionsService { canSetUnderReview(file: File | File[], dossier: Dossier): boolean { const files = file instanceof File ? [file] : file; - return this.isApprover(dossier) && files.reduce((acc, _file) => this._canSetUnderReview(_file, dossier) && acc, true); + return files.reduce((acc, _file) => this._canSetUnderReview(_file, dossier) && acc, true); } canBeApproved(file: File | File[], dossier: Dossier): boolean { @@ -129,8 +129,9 @@ export class PermissionsService { return files.reduce((acc, _file) => this._canBeApproved(_file, dossier) && acc, true); } - isReadyForApproval(files: File | File[], dossier: Dossier): boolean { - return this.canSetUnderReview(files, dossier); + isReadyForApproval(file: File | File[], dossier: Dossier): boolean { + const files = file instanceof File ? [file] : file; + return files.reduce((acc, _file) => this._isReadyForApproval(_file, dossier) && acc, true); } canSetUnderApproval(file: File | File[], dossier: Dossier): boolean { @@ -232,7 +233,7 @@ export class PermissionsService { } canAddComment(file: File, dossier: Dossier): boolean { - return (this.isFileAssignee(file) || this.isApprover(dossier)) && !file.isApproved; + return this.isAssigneeOrApprover(file, dossier) && !file.isApproved; } canExcludePages(file: File, dossier: Dossier): boolean { @@ -260,21 +261,19 @@ export class PermissionsService { } private _canSoftDeleteFile(file: File, dossier: Dossier): boolean { - return ( - dossier.isActive && (this.isApprover(dossier) || this.isFileAssignee(file) || (!file.assignee && this.isDossierMember(dossier))) - ); + return dossier.isActive && (this.isAssigneeOrApprover(file, dossier) || (!file.assignee && this.isDossierMember(dossier))); } private _canRestoreFile(file: File, dossier: Dossier): boolean { - return this.isApprover(dossier) || this.isFileAssignee(file); + return this.isAssigneeOrApprover(file, dossier); } private _canHardDeleteFile(file: File, dossier: Dossier): boolean { - return this.isApprover(dossier) || this.isFileAssignee(file) || (!file.assignee && this.isDossierMember(dossier)); + return this.isAssigneeOrApprover(file, dossier) || (!file.assignee && this.isDossierMember(dossier)); } private _canReanalyseFile(file: File, dossier: Dossier): boolean { - return dossier.isActive && this.isReviewerOrApprover(file, dossier) && file.analysisRequired; + return dossier.isActive && this.isAssigneeOrApprover(file, dossier) && file.analysisRequired; } private _canEnableAutoAnalysis(file: File, dossier: Dossier): boolean { @@ -285,22 +284,39 @@ export class PermissionsService { return dossier.isActive && !file.excludedFromAutomaticAnalysis && this.isFileAssignee(file) && !file.isApproved; } + /** UNDER_REVIEW => NEW */ + private _canSetToNew(file: File, dossier: Dossier): boolean { + return dossier.isActive && file.isUnderReview && this.isDossierMember(dossier); + } + + /** UNDER_REVIEW => UNDER_APPROVAL */ + private _canSetUnderApproval(file: File, dossier: Dossier): boolean { + return dossier.isActive && file.isUnderReview && this.isDossierMember(dossier); + } + + /** UNDER_APPROVAL => UNDER_REVIEW */ + private _canSetUnderReview(file: File, dossier: Dossier): boolean { + return dossier.isActive && file.isUnderApproval && this.isAssigneeOrApprover(file, dossier); + } + + /** UNDER_APPROVAL => APPROVED */ + private _canBeApproved(file: File, dossier: Dossier): boolean { + return this._isReadyForApproval(file, dossier) && file.canBeApproved; + } + + private _isReadyForApproval(file: File, dossier: Dossier): boolean { + return dossier.isActive && file.isUnderApproval && this.isAssigneeOrApprover(file, dossier); + } + + /** APPROVED => UNDER_APPROVAL */ + private _canUndoApproval(file: File, dossier: Dossier): boolean { + return dossier.isActive && file.isApproved && this.isApprover(dossier); + } + private _assignmentPrecondition(file: File, dossier: Dossier): boolean { return dossier.isActive && !file.isError && !file.isProcessing; } - private _canSetUnderApproval(file: File, dossier: Dossier): boolean { - return dossier.isActive && file.isUnderReview && this.isFileAssignee(file); - } - - private _canUndoApproval(file: File, dossier: Dossier): boolean { - return dossier.isActive && file.isApproved && this.isFileAssignee(file); - } - - private _canBeApproved(file: File, dossier: Dossier): boolean { - return dossier.isActive && file.canBeApproved && this.isFileAssignee(file); - } - private _canAssignToSelf(file: File, dossier: Dossier): boolean { const precondition = this._assignmentPrecondition(file, dossier) && !this.isFileAssignee(file); return precondition && (this.isApprover(dossier) || (this.isDossierMember(dossier) && (file.isNew || file.isUnderReview))); @@ -313,7 +329,7 @@ export class PermissionsService { if ((file.isNew || file.isUnderReview) && dossier.hasReviewers && this.isDossierMember(dossier)) { return true; } - if (file.isUnderApproval && dossier.approverIds.length > 1 && this.isApprover(dossier)) { + if ((file.isUnderApproval || file.isApproved) && dossier.approverIds.length > 1 && this.isApprover(dossier)) { return true; } } @@ -321,14 +337,6 @@ export class PermissionsService { } private _canUnassignUser(file: File, dossier: Dossier) { - return this._assignmentPrecondition(file, dossier) && !!file.assignee && (this.isApprover(dossier) || this.isFileAssignee(file)); - } - - private _canSetToNew(file: File, dossier: Dossier): boolean { - return dossier.isActive && file.isUnderReview && this.isFileAssignee(file); - } - - private _canSetUnderReview(file: File, dossier: Dossier): boolean { - return dossier.isActive && file.isUnderApproval && this.isFileAssignee(file); + return this._assignmentPrecondition(file, dossier) && !!file.assignee && this.isAssigneeOrApprover(file, dossier); } } diff --git a/apps/red-ui/src/assets/i18n/de.json b/apps/red-ui/src/assets/i18n/de.json index 2ac69a86c..a067e33ca 100644 --- a/apps/red-ui/src/assets/i18n/de.json +++ b/apps/red-ui/src/assets/i18n/de.json @@ -554,10 +554,6 @@ "question": "Dieses Dokument wird gerade von einer anderen Person geprüft. Möchten Sie Reviewer werden und sich selbst dem Dokument zuweisen?", "title": "Neuen Reviewer zuweisen" }, - "assign-me-as-approver": { - "question": "", - "title": "" - }, "compare-file": { "question": "Achtung!

Seitenzahl stimmt nicht überein, aktuelles Dokument hat {currentDocumentPageCount} Seite(n). Das hochgeladene Dokument hat {compareDocumentPageCount} Seite(n).

Möchten Sie fortfahren?", "title": "Vergleichen mit: {fileName}" diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json index 0948840e8..1895f5b49 100644 --- a/apps/red-ui/src/assets/i18n/en.json +++ b/apps/red-ui/src/assets/i18n/en.json @@ -551,13 +551,9 @@ "title": "Warning!" }, "assign-file-to-me": { - "question": "This document is currently reviewed by someone else. Do you want to become the reviewer and assign yourself to this document?", + "question": "At least one document is currently assigned to someone else. Are you sure you want to replace them and assign yourself to these documents?", "title": "Re-assign user" }, - "assign-me-as-approver": { - "question": "This document is currently under approval by someone else. Do you want to become the approver and assign yourself to this document?", - "title": "Re-assign approver" - }, "compare-file": { "question": "Warning!

Number of pages does not match, current document has {currentDocumentPageCount} page(s). Uploaded document has {compareDocumentPageCount} page(s).

Do you wish to proceed?", "title": "Compare with file: {fileName}" From 99af90b11d3173ac795c2578fa51305ba361034b Mon Sep 17 00:00:00 2001 From: Atlassian Bamboo Date: Mon, 23 May 2022 22:06:52 +0200 Subject: [PATCH 7/9] chore(release) --- package.json | 2 +- paligo-theme.tar.gz | Bin 3295 -> 3296 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c25bfd656..8d7dde8c6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.494.0", + "version": "3.495.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index 9d2a4757ce5443a486e33940a7d6d8eb0136055b..6cfb93913d32ac9bfeb2a7b869148c04bcc0a2a0 100644 GIT binary patch delta 3140 zcmV-K47>B+8Q>X^cm!9z=XsHQM}I$X0+9bI@cn1V{@tE&S}&tw{~Q#;{dI!(G`s)&k0r@} z^$pJJEoC@c-0f2K%3gT3{lZ@O;x`b#EAhJ)zZ>{oi;IWBi0w8c zNl_6oGQ`pCt}2>5wxS{{sxA7&-FU9=jK`tW5kojLteUQLFN+m3r&?PzYXqJ+U4t$!{o7%TRGwGnC5ebxk5Q7RDG}=;E;1UUPhu|)Vti<{ zDjd_M2FhE!417+KVc(o@n#i+=$dsIgiAvwZ% zjINX=vgYgUTEH@|Yky6GzT5J_ytW6D4dm*6P>8C5rx~%zCd_Drxduv^S zzyR+h!Yxdl%l^rMOXb6&(IjdrhnES#tbvdK8bQ3klMII>lZNPE)m*9ijJ#zQ4<|tN zBGM{^3Ctvbfmv)dW;A+9^IU33XZnPMz5~Zjll!ipih}`&%6|`8S?g<$VS%!y+@**d*R%NF>!N48Z$O!=1U$o90^Um`bk@|<8jIxX@W)B5x z7Ks{GMD5t2sGfiZ!cRg38}0a$@M-PU)38!(-q^;9RTYz{sBml5K@~{FjnQK;pOA`T z{@l&Xz{XoiYkxCy>Lwen)qasZN*yw)LGpXAGJE_sp;gVSD5cWVYG%lO9AN-1!zO5> zxNbgux`uYfSdTPThDgKpA3v2r?G6)u9JNb*1g0vVzdV4aYOF33fzBL$04o*7(L5y; zWh378_28_Ye}=xKc}6H}@*Vo@`Na|-TR;NIEJwwx_kS{%e@oo;`m!7S*P^;jvf^$q z)}0z_M@~QXFTm`khTQBOOb+pk4#JxP;n+7lh%ZRquy>@|ll=V;TxQ5Bt0JM<0GL0C zkG)ob;V7+Wlrp+Ap%hF)NxUA)H%*i#O@1rl5Pke=8Vk1{|7A#Wn3?8?M{XT~MM$b7 zd;fiu5`U<#(br<<;tx2-J5tqydDfGX^EdrGUl&;h^KhPhK`Jsy^kx$2jo$EXh1yTch9fxMXnxsDW&x6Pi1G$@2{IRq8uT-l>9W6FwZsH^s*wgk}#OGp%= zG^6DGza*ltAQ~P#We_b7k##25f$ba=@hd6u`hWcoAgP+`&=Ah_n(%NB=XV+4h)3j2 zE(Y6;4>%oKbBwX!2f<5#&5QMm?iU^z@wJgV3hqFjJV1ap6avIIW0@VG=}k*ppC4iM@wb0!U}TWsA~3MZS?($7A8f( zL~vUJo8*_8e+rd2E)y;7Zy_9muD6Xsw10k~4EnV>;Q-O8MDeha#6nv69q(obS*FP$ zH~-9x05s?;*uayn?=mXNd$CtzhIMFHcj*G2c!J!v6?7I2mPKFJAfd9NKsy9bVoiow zBa+HNt5xknpw6`y$o0gJZ|dc45dvWJY;G1v>%ub}M@z`m7JmWOSvf0T z*UP5G)!(cKj1x_+Xo_wOOUC5>ybfKvwl}!CI%E z;lybkV|$UT`9YA^h0ZyCV~v)h7Ke3vfTNyEXr~eQ!u(cCb=qN0i+}Pc|8bNU`6P8p z$SS3N0+HiqN}Ve)0>KeKK!p%)NY@7g(s%e|;-w`A{50GML7GH%t)e!rc;BO z?AY)wt(!6YI3T}IWLXiRQ4|Ds9w&Y0#4=8ApaZWxsbC ztjet%eEU>Rxd%2PTrnDHCqn9J-!MhGkcSq7V{P?XL*IpK5l_EMyd&~e%lxE2?h<7f z`H4=`OJoFa+j$Tu-Z8t2(Y zHSVehypurMmAcSA`Ih{Qa|Y8*mz81T!nsk-f5oOrQdEFgQJ_#>`AsQV;QN}}70){Jki5MWbN&rediG2Ik zBi?>Wq}vZJnbaF?^yo`!(%2h!nnohs==?=xhh3>5SAQzFl@hg9ZS+Yd{GVzGOWjPl zz4cs*t#iX|rAfUQF6xI4M*9FFddD zOtM+I)ql-)ekYSg1N4Nm%DD~3piK_e?BKSGY|*|9&+;`ts9Z7l`ESxZ z==hi}w5aW~Zmk>zD4gsGkdsl{3CO*3I|ctKH%Vr&<4M;=RQNOQgs9yoFMjBq=H2cX zjG1|bV}Q<+?`aI-Jta8TwWqsrF`)DKwTeeD(tj}t^duvD>swYuL}Jixk^L=eM#>Y{ zvnN7B#}tr^d8f0#-{N@Pkh;$;jLBEu<0WG8$Q6pSMq79lWavNQV3#J#_^&sb34P1g zxy)x}e$+Z-v}G_EVLfEyDRn2p3*imTEC0wDwIsg1)W1cS{8~Ta*ZMCPsD_7ClZpx} z`+qaW;WS^aqdpyNHLe@P-h(``9NT1{y>~_Ctu?T!_A>LR3`e$zE`z zd7}{TaVdg?IF1yLIUg~^?7_Om*=h46fHkCunyCv0Klk52oy)nL%ekD(xtzilL^;t}au?%6j|!c~a!8Uhaxwml0gjdKne_=b#YouM@nd+5P8#EJ^;W zZ*X33DZ|;~ZkMuG_QJF67xuyzzk&E&iQl#O-N3IS`Z%JGBlyQ@%xYk!Z(2LjT?t38P+Mn#_8qdKYx$q~+D zbfqkjHD7Pn0+xAQYkv~--IfpLwLOq*AXoQ;LR1Yr&4^VtVMZg&MKD3efUgo;cQY^p z26!(KZei+N_D>F6Djyb&CQ(y4yi5pY4TJ>H2;v2vWH=<5G(-oh=1SFPq{D`}dI_K zCpU@!J6ow?HDv|OGCWL_7de@=Dm(272JXN{P5{XMqIK?=cb?CP)IaoOlx1Wwdnj15 zNYt<*YR3*m^#n8!ei90s+dGYgOHr`5Fn}3;8H`#ct_KWOM>X1{2m^2#HbEQ3 zb@S=dHMBFvdZe*3L>jLD_^AwPcbM?ws9owKFje{dU7S(N%6?cQN z?$lU2a{94<0cJNf>yy=;K$@Sh)T8FGG^U%rr+la_a~zLQ*B! z`|qQaK!1IWz7{(df5183k*Xfdv!0Zkzv<`sy2vt^hx6SH(PVOtwr{QE2NU7yV?$EaM|y6H=xElC z(0>$cYR2uVVtx7EA~)gH9%lmQjB2AnllOXzAm`~Z>KSFCr{@eGgf<-~hciG$20;+G z4&&S>1MOjEJD%lZ#8sy7RG+2JX;~7cF^tCqZDch)S}KzjR*(ZnRkIIkqwiO=FewTq zg4-I{B)`=BQ>esonP_Q$3*i`ay=@et^?wUx(67x22Z&B3iiedX7ShV^csD!9GEEM- z`DbPXpg~{32A*_%mr+sPi@h2%tV6rHOBe9O6Xdq7ptESOEc&_z36&KE+97}vYck9l zkyH*^t!ftnb*{ZYt|xwcQ!jUmAV2|+s5as#62@`}x~*>^JFX{yE|B9mY9|QqaDSMQ z7_{%kyV+n{ZOjYScd!_LSbVW^Yju<0Bvku`45IFxB?8*5s)u?9KGsg0L?iDGS2=Hp z!`RjkxJzNaEfNn6RtBbmQw$HaK5MmP)W0TRL@?uv4A_CMTz3WRa5tPMz!-aZbFFrN z-O%XPf{={~!`B*eWw*8Kx2woK#DAn}uBbJ+oG8EbM1v*|nlQ#u=#83uBl|>CFpb8_ z$XU^}HVRiXZH%%MO*e`g9g=KAo9B43PsVMWA0#4iGMtU%f>*YkB(|ZAGb@NlaHA2> zs=FANBpch&2)~E8uDFwp;l>LMjjmC#WMjMP0#E^GbF)BN7oOobT0*9_2!F87%31lk zUN$YR{$@R3oM>`IQ*>i!;tCOjH|sbYHF1UT)_$~cMonBHq9FE&HmaogZOawM4Ps43 zDap!x5tD;i65N+wid(yy#w5g(`@aWOucHd$b?Dl)y}{MhktKAkb!ZpJwGK!cQ4b}#`aO&Xg7NUaimV)Q$FwqWR z9O-jTjIo%&Rp;B*O!ORRDZ~dyp_zC*7NmN3b?|=&PipG>6CXyML}A7m)JYhN51Qu* zCr=C@j^(++c5lz&J0kE6uMC#h3H zRw?xph#Wst>RgEt2#)vxDui%Dx;_|?zQZRIFD*IXr{P8*FZs4s2chF(MiMnNof_0+ z$A))l-HhSK0r`C*%ZdmsciDZJ_Qy>^2Ld@0Zm8u zcQ`dUm|<=sCeD`v1%FpQf4`%6$dCqkyM~M16EZP)mAgPuIeI5OlZ`@Pd( zRc__r+oy8MJ+KksiqS|r5mHb4hAGm8JhT`bYpd59`Yv3Hc=}!99g(kE<|qAemng%? zPjs4IA|t5OH2|{}7k06PPzHj;HGnj6=tPC3$&W&>ZD>hA%q5{O4vLsc6Ycj-c_GXK63~JbX z(J1WC;RbXnN`FknA94Lb-6x4s65VFBW_)vn0GleziJo~6Lr7IZ;#ny02MBxDbe3!!9U9f-HpiO{HLy0q*{u+^)}#61K_jNDa~G#$Qr z(hgOU!b1fRs&C2;HMKkUmfGL%(b&_M5kPMhXDRs~;Vile>`##;4$QAr0#NEn`D!}Qh&j%l&H08qfav7|5Qs@>SoIA zt>;o~of~c|P3pyPQ9pDr+6NFB-w$Ry1c+UHVjQsr9$d+z-6FBreMzpzA#1-eEG`Ze z;demf^ck?)sk7F{w#PferUWC9{qeQNnZj>kh`k@*UO?QjK&yan{5bygXflvosWIPR zlFiDkZhyA(JDD^ZpeLMF&UIkO0x*%_m~qwtZE~#v z%*-ns19YBzPh$x0DZ#m}J>89q0iDOMRXl=`j(~C2!Ql7Y; zJrNo@rhsJ3JDvUg7RT#`)O~JYOuqUaFAmeIYsXGx~2ybX!`A5#ECGqX0{w=!X*ZL8^)_=J`H9V}ER8&~m zpMQDBRgjlD3nX5a@FuI=zRK;YyuQlos{Fpn@2Y~nD(I?Kebq`$+ZA42rzLi9ZqqM|xa_JSkL z8-;j}OA#c*ain<6`G_HA57sr#PMaqIBs4|TOkFVex&H?0T+ZcO&gERr Date: Mon, 23 May 2022 23:14:14 +0300 Subject: [PATCH 8/9] RED-4076: Fixed modules import --- apps/red-ui/src/app/modules/dashboard/dashboard.module.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/red-ui/src/app/modules/dashboard/dashboard.module.ts b/apps/red-ui/src/app/modules/dashboard/dashboard.module.ts index 3acd8ffa0..6e5752ec9 100644 --- a/apps/red-ui/src/app/modules/dashboard/dashboard.module.ts +++ b/apps/red-ui/src/app/modules/dashboard/dashboard.module.ts @@ -5,6 +5,7 @@ import { RouterModule } from '@angular/router'; import { SharedModule } from '../shared/shared.module'; import { TemplateStatsComponent } from './components/template-stats/template-stats.component'; import { BreadcrumbTypes } from '@red/domain'; +import { SharedDossiersModule } from '../shared-dossiers/shared-dossiers.module'; const routes = [ { @@ -18,6 +19,6 @@ const routes = [ @NgModule({ declarations: [DashboardScreenComponent, TemplateStatsComponent], - imports: [RouterModule.forChild(routes), CommonModule, SharedModule], + imports: [RouterModule.forChild(routes), CommonModule, SharedModule, SharedDossiersModule], }) export class DashboardModule {} From fd10e270b296a4d6d5d9665694322b13990a7d7a Mon Sep 17 00:00:00 2001 From: Atlassian Bamboo Date: Mon, 23 May 2022 22:16:30 +0200 Subject: [PATCH 9/9] chore(release) --- package.json | 2 +- paligo-theme.tar.gz | Bin 3296 -> 3296 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8d7dde8c6..cb06a9e84 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "redaction", - "version": "3.495.0", + "version": "3.496.0", "private": true, "license": "MIT", "scripts": { diff --git a/paligo-theme.tar.gz b/paligo-theme.tar.gz index 6cfb93913d32ac9bfeb2a7b869148c04bcc0a2a0..2a4ff7fcfc07811ab7fc929b2b640e03ef317234 100644 GIT binary patch delta 3176 zcmV-u443oZ8Q>X^c?p5xKWq*z;FUim zf6sMoznA~YS%LgP57y6+{c%Y(m;ZD5zlu^^)r6tTKY#m`wYhw8@rv%tqGG72va8FK zv9jJif1VUMtCzc?*kuHlv|dKV{y8Xw`|AYnX?FklA4`(|>KmNbTgq^@xZ9=dmA!xP zZ2N`1@WpQ+epljmEq*uf>xe#%=;Me!j_BivJ`V5m%b3<>hVMVG?{Il}{o-QD@xz&w z5*(8X{rv)=cNWcK@^*`y7x0x53iEG~AK2yF7Z(qM5!-D@lAYABqEsNV$8W7W8nYB&*|rL7i*UmV{#_O|Wwd~rie#A4H{>+z zW&5-eO0rnYBxiAK`%?}yEGo`N|c6{{*HQBmR6s)H(!iW{THU_K!g#r(OOnSqVBlGbMC)J-;C ztNkK-lsaTogXH&KW%l@OLaUltQA(w!)y$CnIKlv2hE32$aov3SbPer{u^wrx43UQG zKYl8M+8rkRIBJ*r2uxKze|Z2;)mU970-ZVh09GoDqj^dy%0_>@>+8W;J^u`SN%M?Q z*5o_%+4GAfK(>Gcl39+5S?^^o|CYGx^<_8uuSIp6WX0WJtUEQl969fUUp!m)395MPkIVed$_C;9syxXh4MRz*Uy0Wg0OAA79=!%dOZ=*=Y38@~tk+oG;1pbNM#(!+)2c84=I0(mnD zavdokZ<{?2X;28^atJEQxw1!J#*`J+P*?3qZ3&_gmXLoaL}^CJ`+rG9VL>!Jc*-DJ z9wO^Zt^?aSDB@RA;`RFcZvRiGaE^$^J$>9u8kwFjyuERL@$v}IU*^X!V7;%*; zJk@8Zb6S>!X$<2rK^s|3kCw`0g%#w$QPu3j+US4#6)jAPf{Ea^1~$nrHUAVUaa<-^ z+TTJr23>C(g=qak8T4y&!U3XFiQ-`;iG{TCJKoI>vP_dhZvL4W0cg-yuz@FC-(^&k z_hPTc4C~OY?$QN3@dUYTE9fj5EQ`LbK|*Ckfp!R>#F`AVMkJMkR;${DK%HwZkn4#b z-_(E0-69B3z$2=SIEsX^9D;7^TgZ;<37`w)IF8y0!aE#hBnIuf@oqNQRvYtz^&Kq6 z9~NJ%+*;ivI0@ChA%m!UXNiDztLmZNfseHlC(+2e!&S~3;xM)~1nyFpZ;Ql3gO!1) z;1t6{tk|6ndj3-^f1E6ilPBGICZlt&PGJO&g;uMbnMq zMu#NZ(B?T_?2~aD=Ld;MoD63px!{#;Cy8xn^R3Ora8U%$tB z4E`NH9|qVivtm~mb`K$rX@j-FE}S}eyM?GAyrtlII!v?!7)Sb?6JsnUaMk&?H4{At zS_<*OQD`O}j|Hh7ULE}3!IPT${=|n-CsCMj26Ym~;)CXS!im#7#`Ypv^MijNuM3@X z{KgtBM=cKP_5epcm(Wfl@P+xUmg=;_oEGI#{^KYy@=5BHkX1_k1R}@JlsZ>p1cD=e zfC?epkgg8~r0?*_#7j#K_-VKi$VnxmA8K{hl5nL^AEs_-cW|cTdPiST-+T_O%7(5+lYztr9i=z z&)@GT9x|js-mc+d_k>Ig9%h0^RobWl)1W6$GL8&+%6{)OSe08j`1Yxsat~}oxMDQY zPK4CczF~@VArCDE$J*+(hQ15eBA$Mict_-`mibA4+$G8|@)Mn=m&ktzDs>IOY{i9L zEFqMEAn^?)cj6k2+OfTp@i6K`_q%ca-gSo5kZ)p+G|sb)YTQ*1cqf6hD|MlL@-6up z=M1KsE-S;vg>$2v|B6kMq^JO~rYuPn;hGGwo4whh9D^D*Uo;B)bGQMWiqaob@kd;L zQ1?lqlti}~tr_23A;5p83Ui`o-op@5m5_KA3j6^AAn)bJt$oC};9HdqhXikomSeqe z&3fSu^g<|^SO?;5bs{wCnJz865^VMAGI0+<5+iq2B~6E~p0q=ir0`GygzB5JLrv|@ zy`}c|do=d+WdzV$#aT-JM>vbF0{c^Bi39U%l>n4_68ZM6N4$Uilt{N9Tr#OQ+UU`j z)TFUD?lg@=y3zTI$_~3yL#|YCDMIeiAKcIvG4vF-8B zuqnX^WPg0Eai)Lpn;2s6$F~;{cP!8<;2S@Ve?6KEBv)$8H<)Cza;ux|{7xo~2IvWA zm2({!vH(mZIA)x6K${$_*}-iW*`j?Jp5<$PP`P68^WUU-(D5-{Xi?i|-C8*cP&nBW zASa`?6Oeo7b_)JeZj#Jk$CIv$sPJdp2~oRGUi{EI&AWfyF&H!R3daDQC*RW;!h1?^ zu4_+s<6=PP@oN>2V5DOb=t)NQ*0-#Rh{T}XBKup`jFcy?XHSHNjwv7+^G;`fzs2#o zA$6Zy7?ZEQ$4kWGkt-BujkfSA$k2bp!7fdf@n3H=6Z)2~bD7V|{HS%vXv<(S!g|QY zQ|eBH7s7uVnpggjGiphEd#QhmF8Q^7#IN;VE>H~*t0ol{R`zG!aTVmH&H{;-CA`Th zx36-$DzC5dx+=e~^1G^_uL`=VRbRD|Rb}_AMjl}<>ss7r?(X^c?rJfdCzRe4jku^f+BwhXZimW<*58C661);wq;b;A2tUU@XDW( zzvsHP-^)L60+9bI@cn1V{@tE&S}&tw{~Q#;{dI!(G`s)&k0r@}^$pJJEoC@c-0f2K%3gnX zw*A6h_~JJZzbo;(7QY+#bwnRW^l?NVNAz(-ABXq(WlZZb!}p)pceuQ~esQtn_~Fb- z364pH{(gbbJB#KqdAmi<3;0S2h55J05A5>oi;IWBi0w8cNl_6oGQ`pCt}2>5wxS{{ zsxA7&-FU9=jK`tW5kojLteU}=;E;1UUPhu|)Vti<{Djd_M2FhE!419l1lH`%N zY`35Y5lM@z6MRwPh_d@FvX|>e0$V(7=ApJ|df`aD&~(7r%n|IE`6Z5Hn(qLB3;cH0 zv!H}5ZwL4C$03NSVT9vVwHOIKJ%H!pbSCA+Dp=knu1L;a80n9is^(Q?L32hbgD%)y z8^nKm9tqpDcq933P@p*W<3N8vx_GrGF~z9JvwKuW6(Kpod5o@x0?OMPxuWL<$ zzT5J_ytW6D4dm*6P>8C5rx~%zCd_Drxduv^SzyR+h!Yxdl%l^rMOXb6& z(IjdrhnES#tbvdK8bQ3klMII>lZNPE)m*9ijJ#zQ4<|tNBGM{^3Cw>afPqS%!y+ z@**d*R%NF>!N48Z$O!=1U$o90^Um`bk@|<8jIxX@W)B5x7Ks{GMD5t2sGfiZ!cRg3 z8}0a$@M-PU)38!(-q?S}id7YpsHkvj)j<_V#f{NpFrSc$V*cFC%)rK5NozB6>Lwen z)qasZN*yw)LGpXAGJE_sp;gVSD5cWVYG%lO9AN-1!zO5>xNbgux`uYfSdTPThDgKp zA3v2r?G6)u9JNb*1g0vVzdV4aYOF33fzBL$04o*7(L5y;Wg~yy_4VMao_~hEq@|ll=V;TxQ5Bt0JM<0GL0CkG)ob;V7+Wlrp+Ap%hF) zNxUA)H%*i#O@4nX;t+lOY8nf-AOB@Ya+sOsh(~T6fkjBFBzymTloF_~(br<<;tx2- zJ5tqydDfGX^EdrGUl&;h^KhPhK`Jsy^kx$2jo$EXh1yTch9fxMXn zxsDW&x6Pi1G$@2{IRq8uT-l>9W6FwZsH^s*wgk}#OGtkdqBNuA{l6rlupk;9JY^6q z50P~y*MaRE6!9x5@%sG_AgP+`&=Ah_n(%NB=XV+4h)3j2E(Y6;4>%oKbBwX!2f<5#&5QMm?iU^z@wJgV3hqFjJV1a zp6avIIW0@VG=}k*ppC4iM@wb0!U}TWsA~3MZS;TriWVkC!9;Ld1DoWRntuwFI4%<{ z?QbC*gRZxYLbQIN4EnV>;Q-O8MDeha#6nv69q(obS*FP$H~-9x05s?;*uayn?=mXN zd$CtzhIMFHcj*G2c!J!v6?7I2mPKFJAfd9NKsy9bVoiowBa+HNt5xknpw6`y$o0gJ zZ|Z;LZV?11;1ShE97V!d4neo|Eo8^_1keR?97pX0;T;Y$5`*^LcsCnttBrZV`VJQ3 z4~s8WZmn(-oP=uMkU`YFvqV6UC5>ybfKvwl}!CI%E;lybkV|$UT`9Xh>*M-hG zeq)W6qZWsCdw`>!OK7JN_`>{FOLf{|PK)v=|8bNU`6P8p$SS3N0+HiqN}Ve)0>KeK zK!p%)NY@7g(s%e|;-w`A{50GML7GH%t)e!rc;BO?AY)wt(!6YI3T}IWLXiR zUjZN$X+QlQ|< z=kIqE4;j)RZ`W|KdqO4#4>Q4|Ds9w&Y0#4=8ApaZWxsbCtjet%eEU>Rxd%2PTrnDH zCqn9J-!MhGkcSq7V{P?XL*IpK5l_EMyd&~e%lxE2?h<7f`H4=`OJsipmAVFCw&KDr zmJrH7kobm@J8_Lh?bzPQco_Ae``tKy?>a+j$Tu-Z8t2(YHSVehypurMmAcSA`Ih{Q za|Y8*mz81T!nsk-f5oOrQdEFgQJ_#>`A zsQV;QN}}70){Jki5MX~(g*nkP?_mh3N=Q5l1^xg5koWTA);?lf@U6;*LxML(%duX# zX1#C+dLfidtON13IuRQ6OqZ5j3ATE5nYf1_iIKailBUB~PuihMQh2BULiJ7Ap{91{ z-ctMfJsNxZG6LwW;w&ZqBb-H7f&D46#DV#>N&rediG2IkBi?_0N~GHlE}7IDZS?3% zYSP#ncbY~b-RS&9Wrtm3piK_e?BKSGY|*|9&+;`ts9Z7l`ESxZ==hi}w5aW~Zmk>zD4gsG zkdsl{3CO*3I|ctKH%Vr&<4M;=RQNOQgs9yoFMjBq=G}kp7>t>Dg=2uulkaH^;XNfd z*R`j+aWSCt__c~hFw!vz^duvD>swYuL}Jixk^L=eM#>Y{vnN7B#}tr^d8f0#-{N@P zkh;$;jLBEu<0WG8$Q6pSMq79lWavNQV3#J#_^&sb34P1gxy)x}e$+Z-v}G_EVLfEy zDRn2p3*mna%`5-N8MP$7z0|)&m;72k;@A2w7pR7ZRg;PeEBiC=xC-)8XMx1a65eE$ z+gG_=mDg8!U6tQg`CV1eR|Q?ws;^qfsW;WS z^aqdpyNHLe@P-h(``9NT1{y>~_Ctu?T!_A>LR3^#=gD4hq