plan invite external user fixes
This commit is contained in:
parent
e6b6194030
commit
0c8973177d
|
@ -544,4 +544,34 @@ public class ErrorThesaurusProperties {
|
||||||
public ErrorDescription getUserProfileInactive() { return userProfileInactive; }
|
public ErrorDescription getUserProfileInactive() { return userProfileInactive; }
|
||||||
|
|
||||||
public void setUserProfileInactive(ErrorDescription userProfileInactive) {this.userProfileInactive = userProfileInactive; }
|
public void setUserProfileInactive(ErrorDescription userProfileInactive) {this.userProfileInactive = userProfileInactive; }
|
||||||
|
|
||||||
|
private ErrorDescription planInvitationAlreadyConfirmed;
|
||||||
|
|
||||||
|
public ErrorDescription getPlanInvitationAlreadyConfirmed() {
|
||||||
|
return planInvitationAlreadyConfirmed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPlanInvitationAlreadyConfirmed(ErrorDescription planInvitationAlreadyConfirmed) {
|
||||||
|
this.planInvitationAlreadyConfirmed = planInvitationAlreadyConfirmed;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ErrorDescription anotherUserToken;
|
||||||
|
|
||||||
|
public ErrorDescription getAnotherUserToken() {
|
||||||
|
return anotherUserToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnotherUserToken(ErrorDescription anotherUserToken) {
|
||||||
|
this.anotherUserToken = anotherUserToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
private ErrorDescription tokenNotExist;
|
||||||
|
|
||||||
|
public ErrorDescription getTokenNotExist() {
|
||||||
|
return tokenNotExist;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTokenNotExist(ErrorDescription tokenNotExist) {
|
||||||
|
this.tokenNotExist = tokenNotExist;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ public interface PlanService {
|
||||||
|
|
||||||
void inviteUserOrAssignUsers(UUID id, List<PlanUserPersist> users) throws InvalidApplicationException, JAXBException, IOException;
|
void inviteUserOrAssignUsers(UUID id, List<PlanUserPersist> users) throws InvalidApplicationException, JAXBException, IOException;
|
||||||
|
|
||||||
void planInvitationAccept(String token) throws InvalidApplicationException, IOException;
|
UUID planInvitationAccept(String token) throws InvalidApplicationException, IOException;
|
||||||
|
|
||||||
PlanImportExport exportXmlEntity(UUID id, boolean ignoreAuthorize, boolean isPublic) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, InvalidApplicationException;
|
PlanImportExport exportXmlEntity(UUID id, boolean ignoreAuthorize, boolean isPublic) throws MyForbiddenException, MyNotFoundException, JAXBException, ParserConfigurationException, IOException, InstantiationException, IllegalAccessException, SAXException, InvalidApplicationException;
|
||||||
|
|
||||||
|
|
|
@ -1979,21 +1979,28 @@ public class PlanServiceImpl implements PlanService {
|
||||||
return persist.getToken();
|
return persist.getToken();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void planInvitationAccept(String token) throws InvalidApplicationException {
|
public UUID planInvitationAccept(String token) throws InvalidApplicationException {
|
||||||
ActionConfirmationEntity action = this.queryFactory.query(ActionConfirmationQuery.class).tokens(token).types(ActionConfirmationType.PlanInvitation).isActive(IsActive.Active).first();
|
ActionConfirmationEntity action = this.queryFactory.query(ActionConfirmationQuery.class).tokens(token).types(ActionConfirmationType.PlanInvitation).isActive(IsActive.Active).first();
|
||||||
|
|
||||||
if (action == null){
|
if (action == null){
|
||||||
throw new MyApplicationException("Token does not exist!");
|
throw new MyValidationException(this.errors.getTokenNotExist().getCode(), this.errors.getTokenNotExist().getMessage());
|
||||||
}
|
}
|
||||||
if (action.getStatus().equals(ActionConfirmationStatus.Accepted)){
|
if (action.getStatus().equals(ActionConfirmationStatus.Accepted)){
|
||||||
throw new MyApplicationException("Invitation is already confirmed!");
|
throw new MyValidationException(this.errors.getPlanInvitationAlreadyConfirmed().getCode(), this.errors.getPlanInvitationAlreadyConfirmed().getMessage());
|
||||||
}
|
}
|
||||||
if (action.getExpiresAt().compareTo(Instant.now()) < 0){
|
if (action.getExpiresAt().compareTo(Instant.now()) < 0){
|
||||||
throw new MyApplicationException("Token has expired!");
|
throw new MyValidationException(this.errors.getRequestHasExpired().getCode(), this.errors.getRequestHasExpired().getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
PlanInvitationEntity planInvitation = this.xmlHandlingService.fromXmlSafe(PlanInvitationEntity.class, action.getData());
|
PlanInvitationEntity planInvitation = this.xmlHandlingService.fromXmlSafe(PlanInvitationEntity.class, action.getData());
|
||||||
|
if (planInvitation == null) {
|
||||||
|
throw new MyApplicationException("plan invitation don't exist");
|
||||||
|
}
|
||||||
|
|
||||||
|
UserContactInfoEntity contactInfoEntity = this.queryFactory.query(UserContactInfoQuery.class).disableTracking().userIds(this.userScope.getUserId()).values(planInvitation.getEmail()).types(ContactInfoType.Email).first();
|
||||||
|
if (contactInfoEntity == null){
|
||||||
|
throw new MyValidationException(this.errors.getAnotherUserToken().getCode(), this.errors.getAnotherUserToken().getMessage());
|
||||||
|
}
|
||||||
PlanUserEntity data = new PlanUserEntity();
|
PlanUserEntity data = new PlanUserEntity();
|
||||||
data.setId(UUID.randomUUID());
|
data.setId(UUID.randomUUID());
|
||||||
data.setIsActive(IsActive.Active);
|
data.setIsActive(IsActive.Active);
|
||||||
|
@ -2008,6 +2015,7 @@ public class PlanServiceImpl implements PlanService {
|
||||||
this.entityManager.merge(action);
|
this.entityManager.merge(action);
|
||||||
|
|
||||||
this.annotationEntityTouchedIntegrationEventHandler.handlePlan(planInvitation.getPlanId());
|
this.annotationEntityTouchedIntegrationEventHandler.handlePlan(planInvitation.getPlanId());
|
||||||
|
return planInvitation.getPlanId();
|
||||||
}
|
}
|
||||||
|
|
||||||
//region Export
|
//region Export
|
||||||
|
|
|
@ -1051,7 +1051,7 @@ public class UserServiceImpl implements UserService {
|
||||||
this.entityManager.reloadTenantFilters();
|
this.entityManager.reloadTenantFilters();
|
||||||
}
|
}
|
||||||
if (action == null)
|
if (action == null)
|
||||||
throw new MyNotFoundException(this.messageSource.getMessage("General_ItemNotFound", new Object[]{token, ActionConfirmationEntity.class.getSimpleName()}, LocaleContextHolder.getLocale()));
|
throw new MyValidationException(this.errors.getTokenNotExist().getCode(), this.errors.getTokenNotExist().getMessage());
|
||||||
this.checkActionState(action, true);
|
this.checkActionState(action, true);
|
||||||
|
|
||||||
UserInviteToTenantRequestEntity userInviteToTenantRequest = this.xmlHandlingService.fromXmlSafe(UserInviteToTenantRequestEntity.class, action.getData());
|
UserInviteToTenantRequestEntity userInviteToTenantRequest = this.xmlHandlingService.fromXmlSafe(UserInviteToTenantRequestEntity.class, action.getData());
|
||||||
|
|
|
@ -483,20 +483,20 @@ public class PlanController {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("{id}/token/{token}/invite-accept")
|
@GetMapping("token/{token}/invite-accept")
|
||||||
@OperationWithTenantHeader(summary = "Accept an invitation token for a plan by id")
|
@OperationWithTenantHeader(summary = "Accept an invitation token for a plan by token")
|
||||||
@Transactional
|
@Transactional
|
||||||
@Hidden
|
@Hidden
|
||||||
public boolean acceptInvitation(@PathVariable("id") UUID id, @PathVariable("token") String token) throws InvalidApplicationException, JAXBException, IOException {
|
public UUID acceptInvitation(@PathVariable("token") String token) throws InvalidApplicationException, JAXBException, IOException {
|
||||||
logger.debug(new MapLogEntry("inviting users to plan").And("id", id));
|
logger.debug(new MapLogEntry("inviting users to plan").And("token", token));
|
||||||
|
|
||||||
this.planService.planInvitationAccept(token);
|
UUID planId = this.planService.planInvitationAccept(token);
|
||||||
|
|
||||||
this.auditService.track(AuditableAction.Plan_Invite_Accept, Map.ofEntries(
|
this.auditService.track(AuditableAction.Plan_Invite_Accept, Map.ofEntries(
|
||||||
new AbstractMap.SimpleEntry<String, Object>("token", token)
|
new AbstractMap.SimpleEntry<String, Object>("token", token)
|
||||||
));
|
));
|
||||||
|
|
||||||
return true;
|
return planId;
|
||||||
}
|
}
|
||||||
|
|
||||||
@RequestMapping(method = RequestMethod.GET, value = "/xml/export/{id}", produces = "application/xml")
|
@RequestMapping(method = RequestMethod.GET, value = "/xml/export/{id}", produces = "application/xml")
|
||||||
|
|
|
@ -169,4 +169,13 @@ error-thesaurus:
|
||||||
message: Global role is missing
|
message: Global role is missing
|
||||||
userProfileInactive:
|
userProfileInactive:
|
||||||
code: 160
|
code: 160
|
||||||
message: User account has not been activated
|
message: User account has not been activated
|
||||||
|
planInvitationAlreadyConfirmed:
|
||||||
|
code: 161
|
||||||
|
message: Plan invitation already confirmed
|
||||||
|
anotherUserToken:
|
||||||
|
code: 162
|
||||||
|
message: This token is for another user
|
||||||
|
tokenNotExist:
|
||||||
|
code: 163
|
||||||
|
message: This token does not exist
|
|
@ -56,6 +56,9 @@ export enum ResponseErrorCode {
|
||||||
missingTenantRole = 158,
|
missingTenantRole = 158,
|
||||||
missingGlobalRole = 159,
|
missingGlobalRole = 159,
|
||||||
userProfileInactive = 160,
|
userProfileInactive = 160,
|
||||||
|
planInvitationAlreadyConfirmed = 161,
|
||||||
|
anotherUserToken = 162,
|
||||||
|
tokenNotExist = 163,
|
||||||
|
|
||||||
// Notification & Annotation Errors
|
// Notification & Annotation Errors
|
||||||
InvalidApiKey = 200,
|
InvalidApiKey = 200,
|
||||||
|
@ -199,7 +202,13 @@ export class ResponseErrorCodeHelper {
|
||||||
case ResponseErrorCode.missingGlobalRole:
|
case ResponseErrorCode.missingGlobalRole:
|
||||||
return language.instant("GENERAL.BACKEND-ERRORS.MISSING-GLOBAL-ROLE");
|
return language.instant("GENERAL.BACKEND-ERRORS.MISSING-GLOBAL-ROLE");
|
||||||
case ResponseErrorCode.userProfileInactive:
|
case ResponseErrorCode.userProfileInactive:
|
||||||
return language.instant("GENERAL.BACKEND-ERRORS.CANNOT-PERFORM-ACTION-ON-USER")
|
return language.instant("GENERAL.BACKEND-ERRORS.CANNOT-PERFORM-ACTION-ON-USER");
|
||||||
|
case ResponseErrorCode.planInvitationAlreadyConfirmed:
|
||||||
|
return language.instant("GENERAL.BACKEND-ERRORS.PLAN-INVITATION-ALREADY-CONFIRMED");
|
||||||
|
case ResponseErrorCode.anotherUserToken:
|
||||||
|
return language.instant("GENERAL.BACKEND-ERRORS.ANOTHER-USER-TOKEN");
|
||||||
|
case ResponseErrorCode.tokenNotExist:
|
||||||
|
return language.instant("GENERAL.BACKEND-ERRORS.TOKEN-NOT-EXIST");
|
||||||
default:
|
default:
|
||||||
return language.instant("GENERAL.SNACK-BAR.NOT-FOUND");
|
return language.instant("GENERAL.SNACK-BAR.NOT-FOUND");
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,10 +172,10 @@ export class PlanService {
|
||||||
catchError((error: any) => throwError(error)));
|
catchError((error: any) => throwError(error)));
|
||||||
}
|
}
|
||||||
|
|
||||||
acceptInvitation(PlanId: Guid, token: string): Observable<any> {
|
acceptInvitation(token: string): Observable<Guid> {
|
||||||
const url = `${this.apiBase}/${PlanId}/token/${token}/invite-accept`;
|
const url = `${this.apiBase}/token/${token}/invite-accept`;
|
||||||
|
|
||||||
return this.http.get<any>(url).pipe(catchError((error: any) => throwError(error)));
|
return this.http.get<Guid>(url).pipe(catchError((error: any) => throwError(error)));
|
||||||
}
|
}
|
||||||
|
|
||||||
downloadXML(id: Guid): Observable<HttpResponse<Blob>> {
|
downloadXML(id: Guid): Observable<HttpResponse<Blob>> {
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
import { HttpErrorResponse } from '@angular/common/http';
|
||||||
|
import { Component, OnInit } from '@angular/core';
|
||||||
|
import { ActivatedRoute, Router } from '@angular/router';
|
||||||
|
import { AuthService } from '@app/core/services/auth/auth.service';
|
||||||
|
import { SnackBarNotificationLevel } from '@app/core/services/notification/ui-notification-service';
|
||||||
|
import { PlanService } from '@app/core/services/plan/plan.service';
|
||||||
|
import { RouterUtilsService } from '@app/core/services/router/router-utils.service';
|
||||||
|
import { BaseComponent } from '@common/base/base.component';
|
||||||
|
import { HttpError, HttpErrorHandlingService } from '@common/modules/errors/error-handling/http-error-handling.service';
|
||||||
|
import { takeUntil } from 'rxjs/operators';
|
||||||
|
|
||||||
|
@Component({
|
||||||
|
selector: 'app-plan-invitation-accepted-component',
|
||||||
|
templateUrl: 'plan-invitation-accepted.component.html',
|
||||||
|
|
||||||
|
})
|
||||||
|
export class InvitationAcceptedComponent extends BaseComponent implements OnInit {
|
||||||
|
constructor(
|
||||||
|
private planService: PlanService,
|
||||||
|
private route: ActivatedRoute,
|
||||||
|
private router: Router,
|
||||||
|
private authentication: AuthService,
|
||||||
|
protected routerUtils: RouterUtilsService,
|
||||||
|
private httpErrorHandlingService: HttpErrorHandlingService
|
||||||
|
) { super(); }
|
||||||
|
|
||||||
|
ngOnInit(): void {
|
||||||
|
|
||||||
|
this.route.params
|
||||||
|
.pipe(takeUntil(this._destroyed))
|
||||||
|
.subscribe(params => {
|
||||||
|
const token = params['token'];
|
||||||
|
|
||||||
|
if(this.isAuthenticated()){
|
||||||
|
this.planService.acceptInvitation(token)
|
||||||
|
.pipe(takeUntil(this._destroyed))
|
||||||
|
.subscribe(result => {
|
||||||
|
this.router.navigate([this.routerUtils.generateUrl('plans/edit/' + result)]);
|
||||||
|
},
|
||||||
|
error => this.onCallbackError(error));
|
||||||
|
}else{
|
||||||
|
let returnUrl = `plans/invitation/${token}`;
|
||||||
|
this.router.navigate([this.routerUtils.generateUrl('login')], {queryParams:{returnUrl: this.routerUtils.generateUrl(returnUrl)}});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public isAuthenticated(): boolean {
|
||||||
|
return this.authentication.currentAccountIsAuthenticated();
|
||||||
|
}
|
||||||
|
|
||||||
|
onCallbackError(errorResponse: HttpErrorResponse) {
|
||||||
|
|
||||||
|
this.httpErrorHandlingService.handleBackedRequestError(errorResponse, null, SnackBarNotificationLevel.Error)
|
||||||
|
|
||||||
|
const error: HttpError = this.httpErrorHandlingService.getError(errorResponse);
|
||||||
|
if (error.statusCode === 302) {
|
||||||
|
this.router.navigate([this.routerUtils.generateUrl('home')]);
|
||||||
|
}
|
||||||
|
this.router.navigate([this.routerUtils.generateUrl('home')]);
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,7 @@ import { FormattingModule } from '@app/core/formatting.module';
|
||||||
import { PlanRoutingModule, PublicPlanRoutingModule } from '@app/ui/plan/plan.routing';
|
import { PlanRoutingModule, PublicPlanRoutingModule } from '@app/ui/plan/plan.routing';
|
||||||
import { CommonFormsModule } from '@common/forms/common-forms.module';
|
import { CommonFormsModule } from '@common/forms/common-forms.module';
|
||||||
import { CommonUiModule } from '@common/ui/common-ui.module';
|
import { CommonUiModule } from '@common/ui/common-ui.module';
|
||||||
|
import { InvitationAcceptedComponent } from './invitation/accepted/plan-invitation-accepted.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
|
@ -12,6 +13,7 @@ import { CommonUiModule } from '@common/ui/common-ui.module';
|
||||||
PlanRoutingModule,
|
PlanRoutingModule,
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
|
InvitationAcceptedComponent
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
]
|
]
|
||||||
|
|
|
@ -2,6 +2,7 @@ import { NgModule } from '@angular/core';
|
||||||
import { RouterModule, Routes } from '@angular/router';
|
import { RouterModule, Routes } from '@angular/router';
|
||||||
import { BreadcrumbService } from '../misc/breadcrumb/breadcrumb.service';
|
import { BreadcrumbService } from '../misc/breadcrumb/breadcrumb.service';
|
||||||
import { AuthGuard } from '@app/core/auth-guard.service';
|
import { AuthGuard } from '@app/core/auth-guard.service';
|
||||||
|
import { InvitationAcceptedComponent } from './invitation/accepted/plan-invitation-accepted.component';
|
||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{
|
{
|
||||||
|
@ -47,6 +48,7 @@ const routes: Routes = [
|
||||||
breadcrumb: true
|
breadcrumb: true
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{ path: 'invitation/:token', component: InvitationAcceptedComponent },
|
||||||
];
|
];
|
||||||
|
|
||||||
const publicRoutes: Routes = [
|
const publicRoutes: Routes = [
|
||||||
|
|
|
@ -95,7 +95,10 @@
|
||||||
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
||||||
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
||||||
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
||||||
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated"
|
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated",
|
||||||
|
"PLAN-INVITATION-ALREADY-CONFIRMED": "Plan invitation has alreay confirmed",
|
||||||
|
"ANOTHER-USER-TOKEN": "This token is for another user",
|
||||||
|
"TOKEN-NOT-EXIST": "This token does not exist"
|
||||||
},
|
},
|
||||||
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
||||||
"WARNING": "Warnung!",
|
"WARNING": "Warnung!",
|
||||||
|
|
|
@ -95,7 +95,10 @@
|
||||||
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
||||||
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
||||||
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
||||||
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated"
|
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated",
|
||||||
|
"PLAN-INVITATION-ALREADY-CONFIRMED": "Plan invitation has alreay confirmed",
|
||||||
|
"ANOTHER-USER-TOKEN": "This token is for another user",
|
||||||
|
"TOKEN-NOT-EXIST": "This token does not exist"
|
||||||
},
|
},
|
||||||
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
||||||
"WARNING": "Warning!",
|
"WARNING": "Warning!",
|
||||||
|
|
|
@ -95,7 +95,10 @@
|
||||||
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
||||||
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
||||||
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
||||||
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated"
|
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated",
|
||||||
|
"PLAN-INVITATION-ALREADY-CONFIRMED": "Plan invitation has alreay confirmed",
|
||||||
|
"ANOTHER-USER-TOKEN": "This token is for another user",
|
||||||
|
"TOKEN-NOT-EXIST": "This token does not exist"
|
||||||
},
|
},
|
||||||
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
||||||
"WARNING": "Atención!",
|
"WARNING": "Atención!",
|
||||||
|
|
|
@ -95,7 +95,10 @@
|
||||||
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
||||||
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
||||||
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
||||||
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated"
|
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated",
|
||||||
|
"PLAN-INVITATION-ALREADY-CONFIRMED": "Plan invitation has alreay confirmed",
|
||||||
|
"ANOTHER-USER-TOKEN": "This token is for another user",
|
||||||
|
"TOKEN-NOT-EXIST": "This token does not exist"
|
||||||
},
|
},
|
||||||
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
||||||
"WARNING": "Προσοχή!",
|
"WARNING": "Προσοχή!",
|
||||||
|
|
|
@ -95,7 +95,10 @@
|
||||||
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
||||||
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
||||||
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
||||||
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated"
|
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated",
|
||||||
|
"PLAN-INVITATION-ALREADY-CONFIRMED": "Plan invitation has alreay confirmed",
|
||||||
|
"ANOTHER-USER-TOKEN": "This token is for another user",
|
||||||
|
"TOKEN-NOT-EXIST": "This token does not exist"
|
||||||
},
|
},
|
||||||
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
||||||
"WARNING": "Oprez!",
|
"WARNING": "Oprez!",
|
||||||
|
|
|
@ -95,7 +95,10 @@
|
||||||
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
||||||
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
||||||
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
||||||
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated"
|
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated",
|
||||||
|
"PLAN-INVITATION-ALREADY-CONFIRMED": "Plan invitation has alreay confirmed",
|
||||||
|
"ANOTHER-USER-TOKEN": "This token is for another user",
|
||||||
|
"TOKEN-NOT-EXIST": "This token does not exist"
|
||||||
},
|
},
|
||||||
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
||||||
"WARNING": "Ostrzeżenie!",
|
"WARNING": "Ostrzeżenie!",
|
||||||
|
|
|
@ -95,7 +95,10 @@
|
||||||
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
||||||
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
||||||
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
||||||
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated"
|
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated",
|
||||||
|
"PLAN-INVITATION-ALREADY-CONFIRMED": "Plan invitation has alreay confirmed",
|
||||||
|
"ANOTHER-USER-TOKEN": "This token is for another user",
|
||||||
|
"TOKEN-NOT-EXIST": "This token does not exist"
|
||||||
},
|
},
|
||||||
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
||||||
"WARNING": "Atenção!",
|
"WARNING": "Atenção!",
|
||||||
|
|
|
@ -95,7 +95,10 @@
|
||||||
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
||||||
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
||||||
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
||||||
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated"
|
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated",
|
||||||
|
"PLAN-INVITATION-ALREADY-CONFIRMED": "Plan invitation has alreay confirmed",
|
||||||
|
"ANOTHER-USER-TOKEN": "This token is for another user",
|
||||||
|
"TOKEN-NOT-EXIST": "This token does not exist"
|
||||||
},
|
},
|
||||||
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
||||||
"WARNING": "Upozornenie!",
|
"WARNING": "Upozornenie!",
|
||||||
|
|
|
@ -95,7 +95,10 @@
|
||||||
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
||||||
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
||||||
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
||||||
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated"
|
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated",
|
||||||
|
"PLAN-INVITATION-ALREADY-CONFIRMED": "Plan invitation has alreay confirmed",
|
||||||
|
"ANOTHER-USER-TOKEN": "This token is for another user",
|
||||||
|
"TOKEN-NOT-EXIST": "This token does not exist"
|
||||||
},
|
},
|
||||||
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
||||||
"WARNING": "Oprez!",
|
"WARNING": "Oprez!",
|
||||||
|
|
|
@ -95,7 +95,10 @@
|
||||||
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
"PLAN-BLUEPRINT-IMPORT-DRAFT": "Plan Blueprint with code '{{planBlueprintCode}}' is not finalized yet.",
|
||||||
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
"MISSING-TENANT-ROLE": "Υou must also select a tenant role",
|
||||||
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
"MISSING-GLOBAL-ROLE": "Υou must also select a global role",
|
||||||
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated"
|
"CANNOT-PERFORM-ACTION-ON-USER": "Cannot perform action, user account has not been activated",
|
||||||
|
"PLAN-INVITATION-ALREADY-CONFIRMED": "Plan invitation has alreay confirmed",
|
||||||
|
"ANOTHER-USER-TOKEN": "This token is for another user",
|
||||||
|
"TOKEN-NOT-EXIST": "This token does not exist"
|
||||||
},
|
},
|
||||||
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
"FORM-VALIDATION-DISPLAY-DIALOG": {
|
||||||
"WARNING": "Uyarı!",
|
"WARNING": "Uyarı!",
|
||||||
|
|
Loading…
Reference in New Issue