diff --git a/core/xml/actions_pages.xml b/core/xml/actions_pages.xml index 032b0398f839f683acce705bfbc1950bfe05e90a..2faa9e6e159f98bf63f2ab6816c908443e0977d2 100755 --- a/core/xml/actions_pages.xml +++ b/core/xml/actions_pages.xml @@ -507,4 +507,16 @@ An action page is described in a ACTIONPAGE tag : <COLL_ID>letterbox_coll</COLL_ID> </COLLECTIONS> </ACTIONPAGE> + <ACTIONPAGE> + <ID>send_shipping</ID> + <LABEL>_SEND_SHIPPING</LABEL> + <NAME>send_shipping</NAME> + <component>sendShippingAction</component> + <ORIGIN>apps</ORIGIN> + <MODULE></MODULE> + <FLAG_CREATE>false</FLAG_CREATE> + <COLLECTIONS> + <COLL_ID>letterbox_coll</COLL_ID> + </COLLECTIONS> + </ACTIONPAGE> </ROOT> diff --git a/src/core/lang/lang-en.php b/src/core/lang/lang-en.php index ef8fb5a4ddafd54c5d3ec3574cedb43fd5305e75..17f34cf1410502b3a4c6334c25233cc3cd065cf4 100755 --- a/src/core/lang/lang-en.php +++ b/src/core/lang/lang-en.php @@ -474,3 +474,5 @@ define("_SHIPPING_DELETED", "Shipping deleted"); define("_SHIPPINGS_ADMIN", "Shippings admin"); define("_SHIPPINGS_ADMIN_DESC", "Configure mailing templates, for example for Maileva"); + +define("_SEND_SHIPPING", "Send a mailpiece"); diff --git a/src/core/lang/lang-fr.php b/src/core/lang/lang-fr.php index 961c93953a55e861b42b6ad64139ba0b6804e65b..50d250e916542e2cf6d475fac0918cffabddf0ea 100755 --- a/src/core/lang/lang-fr.php +++ b/src/core/lang/lang-fr.php @@ -474,3 +474,5 @@ define("_SHIPPING_DELETED", "Envoi postal supprimé"); define("_SHIPPINGS_ADMIN", "Modèles d'envois postaux"); define("_SHIPPINGS_ADMIN_DESC", "Configurer les modèles d'envois postaux, par exemple pour Maileva"); + +define("_SEND_SHIPPING", "Envoyer un pli postal"); diff --git a/src/core/lang/lang-nl.php b/src/core/lang/lang-nl.php index c307162f2d66f835ed1de14bc5313e027a851114..c5b10b8f3767d7616407f23b2d384426375e589a 100644 --- a/src/core/lang/lang-nl.php +++ b/src/core/lang/lang-nl.php @@ -476,3 +476,5 @@ define("_SHIPPING_DELETED", "Shipping deleted_TO_TRANSLATE"); define("_SHIPPINGS_ADMIN", "Shippings admin_TO_TRANSLATE"); define("_SHIPPINGS_ADMIN_DESC", "Configure mailing templates, for example for Maileva_TO_TRANSLATE"); + +define("_SEND_SHIPPING", "Send a mailpiece_TO_TRANSLATE"); diff --git a/src/frontend/app/actions/actions-list.component.ts b/src/frontend/app/actions/actions-list.component.ts index 617ca7eabc74f44455919e46478252ffa2630fad..b9caef783ec2871dd92e5fe2f1ea30fc08dfb0a1 100644 --- a/src/frontend/app/actions/actions-list.component.ts +++ b/src/frontend/app/actions/actions-list.component.ts @@ -17,6 +17,7 @@ import { UpdateDepartureDateActionComponent } from './update-departure-date-acti import { Router } from '@angular/router'; import { ViewDocActionComponent } from './view-doc-action/view-doc-action.component'; import { RedirectActionComponent } from './redirect-action/redirect-action.component'; +import { SendShippingActionComponent } from './send-shipping-action/send-shipping-action.component'; @Component({ selector: 'app-actions-list', @@ -339,6 +340,28 @@ export class ActionsListComponent implements OnInit { }); } + sendShippingAction() { + const dialogRef = this.dialog.open(SendShippingActionComponent, { + width: '900px', + data: { + contextMode: this.contextMode, + contextChrono: this.contextMenuTitle, + selectedRes: this.selectedRes, + action: this.currentAction, + currentBasketInfo: this.currentBasketInfo + } + }); + dialogRef.afterClosed().subscribe(result => { + this.unlock(); + + if (result == 'success') { + this.endAction(); + } else { + this.unlockRest(); + } + }); + } + // CALL GENERIC ACTION V1 v1Action() { location.hash = ""; diff --git a/src/frontend/app/actions/redirect-action/redirect-action.component.html b/src/frontend/app/actions/redirect-action/redirect-action.component.html index 8913f416559ec93402dd56438722798f444fc72b..ffdf0fabee7555f589d0bf334c28a9906f19af94 100644 --- a/src/frontend/app/actions/redirect-action/redirect-action.component.html +++ b/src/frontend/app/actions/redirect-action/redirect-action.component.html @@ -67,7 +67,8 @@ </div> </div> </div> - <div *ngIf="isDestinationChanging" class="alert-message alert-message-info" role="alert" style="margin-top: 30px;">{{lang.destinationChangingInfo}} <b>{{destUser.descriptionToDisplay}}</b></div> + <div *ngIf="isDestinationChanging && data.selectedRes.length == 1" class="alert-message alert-message-info" role="alert" style="margin-top: 30px;">{{lang.destinationChangingInfo}} <b>{{destUser.descriptionToDisplay}}</b></div> + <div *ngIf="isDestinationChanging && data.selectedRes.length > 1" class="alert-message alert-message-info" role="alert" style="margin-top: 30px;">{{lang.destinationChangingInfoMass}} <b>{{destUser.labelToDisplay}}</b> {{lang.destinationChangingInfoMass2}} <b>{{destUser.descriptionToDisplay}}</b></div> <div *ngIf="keepDestForRedirection && oldUser != null" class="alert-message alert-message-info" role="alert" style="margin-top: 30px;"><b>{{oldUser.labelToDisplay}}</b> <span [innerHTML]="lang.willBeAutomaticallyInCopy"></span></div> </div> diff --git a/src/frontend/app/actions/redirect-action/redirect-action.component.ts b/src/frontend/app/actions/redirect-action/redirect-action.component.ts index d8299105a9a9145490cfde97b7760bdb2d8da03c..e87481cc4a41e4c7921e06d608ce2faf7b71bc49 100644 --- a/src/frontend/app/actions/redirect-action/redirect-action.component.ts +++ b/src/frontend/app/actions/redirect-action/redirect-action.component.ts @@ -164,7 +164,7 @@ export class RedirectActionComponent implements OnInit { changeDest(event: any) { this.currentDiffusionListDestRedirect = this.diffusionListDestRedirect let user = event.option.value; - + this.destUser = { difflist_type: "entity_id", @@ -184,25 +184,25 @@ export class RedirectActionComponent implements OnInit { this.notify.handleErrors(err); }); - if (this.keepDestForRedirection) { - let isInCopy = false; - let newCopy = null; - this.currentDiffusionListDestRedirect.forEach((element: any) => { - if (element.item_mode == 'cc' && element.item_id == this.oldUser.item_id) { - isInCopy = true; - } - }); - - if (!isInCopy) { - newCopy = this.oldUser; - newCopy.item_mode = 'cc'; - this.currentDiffusionListDestRedirect.push(newCopy); + if (this.keepDestForRedirection) { + let isInCopy = false; + let newCopy = null; + this.currentDiffusionListDestRedirect.forEach((element: any) => { + if (element.item_mode == 'cc' && element.item_id == this.oldUser.item_id) { + isInCopy = true; } + }); + + if (!isInCopy) { + newCopy = this.oldUser; + newCopy.item_mode = 'cc'; + this.currentDiffusionListDestRedirect.push(newCopy); } - this.currentDiffusionListDestRedirect.splice(this.currentDiffusionListDestRedirect.map((e: any) => { return e.item_mode; }).indexOf('dest'), 1); + } + this.currentDiffusionListDestRedirect.splice(this.currentDiffusionListDestRedirect.map((e: any) => { return e.item_mode; }).indexOf('dest'), 1); } else { this.isDestinationChanging = true; - } + } this.currentDiffusionListDestRedirect.push(this.destUser); this.userRedirectCtrl.reset(); @@ -224,7 +224,7 @@ export class RedirectActionComponent implements OnInit { onSubmit(): void { this.loading = true; if (this.redirectMode == 'user') { - this.http.put('../../rest/resourcesList/users/' + this.data.currentBasketInfo.ownerId + '/groups/' + this.data.currentBasketInfo.groupId + '/baskets/' + this.data.currentBasketInfo.basketId + '/actions/' + this.data.action.id, { resources: this.data.selectedRes, data: this.currentDiffusionListDestRedirect, note: this.noteEditor.getNoteContent() }) + this.http.put('../../rest/resourcesList/users/' + this.data.currentBasketInfo.ownerId + '/groups/' + this.data.currentBasketInfo.groupId + '/baskets/' + this.data.currentBasketInfo.basketId + '/actions/' + this.data.action.id, { resources: this.data.selectedRes, data: { onlyRedirectDest: true, listInstances: this.currentDiffusionListDestRedirect }, note: this.noteEditor.getNoteContent() }) .subscribe((data: any) => { if (data && data.errors != null) { this.notify.error(data.errors); @@ -237,7 +237,7 @@ export class RedirectActionComponent implements OnInit { this.loading = false; }); } else { - this.http.put('../../rest/resourcesList/users/' + this.data.currentBasketInfo.ownerId + '/groups/' + this.data.currentBasketInfo.groupId + '/baskets/' + this.data.currentBasketInfo.basketId + '/actions/' + this.data.action.id, { resources: this.data.selectedRes, data: this.appDiffusionsList.getListinstance(), note: this.noteEditor.getNoteContent() }) + this.http.put('../../rest/resourcesList/users/' + this.data.currentBasketInfo.ownerId + '/groups/' + this.data.currentBasketInfo.groupId + '/baskets/' + this.data.currentBasketInfo.basketId + '/actions/' + this.data.action.id, { resources: this.data.selectedRes, data: { listInstances: this.appDiffusionsList.getListinstance() }, note: this.noteEditor.getNoteContent() }) .subscribe((data: any) => { if (data && data.errors != null) { this.notify.error(data.errors); diff --git a/src/frontend/app/actions/send-shipping-action/send-shipping-action.component.html b/src/frontend/app/actions/send-shipping-action/send-shipping-action.component.html new file mode 100644 index 0000000000000000000000000000000000000000..0d970ba8c5a67c49a5d179410b358127c363a618 --- /dev/null +++ b/src/frontend/app/actions/send-shipping-action/send-shipping-action.component.html @@ -0,0 +1,107 @@ +<h1 mat-dialog-title>{{data.action.label_action}}</h1> +<div mat-dialog-content> + <div *ngIf="loading" class="loading" style="display:flex;height:100%;"> + <mat-spinner style="margin:auto;"></mat-spinner> + </div> + <mat-sidenav-container autosize> + <mat-sidenav-content style="background: white;"> + <div class="row" style="margin: 0;"> + <div class="col-md-12"> + {{lang.makeActionOn}} + <b *ngIf="data.contextMode" color="primary" class="highlight">{{data.contextChrono}}</b> + <b *ngIf="!data.contextMode" color="primary" class="highlight">{{data.selectedRes.length}} + {{lang.elements}}</b> ? + </div> + <div class="col-md-12" style="padding-top: 10px;"> + <mat-form-field> + <mat-label>Canal d'envoi</mat-label> + <mat-select> + <mat-option *ngFor="let shipping of shippings" [value]="shipping"> + {{shipping.label}} + </mat-option> + </mat-select> + </mat-form-field> + </div> + <div class="col-md-12"> + <div *ngIf="mailsNotSend.length > 0"> + <div class="alert-message alert-message-danger mailList" role="alert"> + <p> + <b>3</b> Courriers non eligibles : + </p> + <ul> + <li *ngFor="let mail of mailsNotSend"> + {{mail.alt_identifier}} + </li> + </ul> + </div> + </div> + </div> + <div class="col-md-12"> + <div class="formType" style="flex-direction: column;"> + <div class="formType-title"> + {{lang.pricesInformations}} * + </div> + <div class="priceContent"> + <mat-form-field appearance="outline"> + <input matInput [(ngModel)]="totalPrice" required name="totalPrice" id="totalPrice" + title="Prix total" type="number" disabled> + <span matSuffix> €</span> + </mat-form-field> + </div> + </div> + <div class="priceInfo"> + * Selon les paramètres définis dans le modèle + </div> + </div> + + <div class="col-md-12"> + <app-note-editor #noteEditor [resIds]="data.selectedRes"></app-note-editor> + </div> + </div> + </mat-sidenav-content> + <mat-sidenav mode="side" fixedTopGap="56" position='end' opened style="width: 50%;"> + <div class="formType" style="flex-direction: column;"> + <div class="formType-title"> + Pièce(s) jointe(s) + </div> + <div class="pjList"> + <span> + 80x80 + </span> + <span> + 80x80 + </span> + <span> + 80x80 + </span> + <span> + 80x80 + </span> + <span> + 80x80 + </span> + <span> + 80x80 + </span> + <span> + 80x80 + </span> + <span> + 80x80 + </span> + <span> + 80x80 + </span> + <span> + 80x80 + </span> + </div> + </div> + </mat-sidenav> + </mat-sidenav-container> +</div> +<div mat-dialog-actions class="actions"> + <button mat-raised-button mat-button color="primary" [disabled]="loading" + (click)="onSubmit()">{{lang.validate}}</button> + <button mat-raised-button mat-button [disabled]="loading" [mat-dialog-close]="">{{lang.cancel}}</button> +</div> \ No newline at end of file diff --git a/src/frontend/app/actions/send-shipping-action/send-shipping-action.component.scss b/src/frontend/app/actions/send-shipping-action/send-shipping-action.component.scss new file mode 100644 index 0000000000000000000000000000000000000000..6665dfc22184200494428198c38b0d603bcbd9f5 --- /dev/null +++ b/src/frontend/app/actions/send-shipping-action/send-shipping-action.component.scss @@ -0,0 +1,122 @@ +@import '../../../css/vars.scss'; + +.highlight { + font-size: 110%; +} + +.loading { + display:flex; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #ffffffb3; + z-index: 1; + overflow: hidden; +} + +.mailList { + ul { + font-size: 12px; + max-height: 100px; + overflow: auto; + padding-left: 25px; + padding-right: 5px; + padding-bottom: 10px; + margin-top: 10px; + } + + p { + //font-size: 18px; + margin: 0; + text-decoration: underline; + } + + b { + font-size: 120%; + } +} + +.formType { + align-items: center; + display: flex; + margin: 10px; + border-radius: 4px; + border: solid 1px #ccc; + position: relative; + padding: 10px; + + &-title { + white-space: pre; + overflow: hidden; + max-width: 85%; + text-overflow: ellipsis; + z-index: 1; + font-size: 10px; + font-weight: bold; + background: white; + position: absolute; + top: -7px; + left: 10px; + padding: 0px; + margin: 0px; + color: #135f7f; + } + + ::ng-deep.mat-form-field-suffix { + color: $secondary; + font-size: 15px; + top: 0; + } + + ::ng-deep.mat-form-field-wrapper { + padding: 0; + } +} + +.priceContent { + display: flex; + align-items: center; + justify-content: flex-end; + width: 100%; + + &-label { + text-align: right; + color: $primary; + flex: 1; + justify-content: flex-end; + display: flex; + padding-right: 10px; + } + + .mat-form-field { + width: 90px !important; + + input { + font-weight: bold; + user-select: none; + } + } +} + +.priceInfo { + padding-left: 30px; + font-size: 10px; + opacity: 0.5; + margin-top: -10px; + padding-bottom: 10px; +} + +.pjList { + display: flex; + width: 100%; + overflow: auto; + span { + margin: 5px; + display: block; + height: 80px; + width: 50px; + border: solid 1px black; + } +} \ No newline at end of file diff --git a/src/frontend/app/actions/send-shipping-action/send-shipping-action.component.ts b/src/frontend/app/actions/send-shipping-action/send-shipping-action.component.ts new file mode 100644 index 0000000000000000000000000000000000000000..bfe5ede0bdc26e17ce334a928c276a5befaa8a17 --- /dev/null +++ b/src/frontend/app/actions/send-shipping-action/send-shipping-action.component.ts @@ -0,0 +1,65 @@ +import { Component, OnInit, Inject, ViewChild } from '@angular/core'; +import { LANG } from '../../translate.component'; +import { NotificationService } from '../../notification.service'; +import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material'; +import { HttpClient } from '@angular/common/http'; +import { NoteEditorComponent } from '../../notes/note-editor.component'; + +@Component({ + templateUrl: "send-shipping-action.component.html", + styleUrls: ['send-shipping-action.component.scss'], + providers: [NotificationService], +}) +export class SendShippingActionComponent implements OnInit { + + lang: any = LANG; + loading: boolean = false; + + shippings: any[] = [{ + label: 'Envoi Maileva', + description: '', + options: { + shapingOptions: ['color'], + sendMode: 'fast', + }, + fee: { + first_page_price: 0.1, + next_page_price: 0.3, + postage_price: 2, + }, + account: { + id: '', + password: '' + }, + entities: [] + }]; + + mailsNotSend: any[] = [ + { + res_id : 100, + alt_identifier : 'MAARCH/2019A/0001', + reason : 'noAdress' + } + ] + + totalPrice : number = 10; + + @ViewChild('noteEditor') noteEditor: NoteEditorComponent; + + constructor(public http: HttpClient, private notify: NotificationService, public dialogRef: MatDialogRef<SendShippingActionComponent>, @Inject(MAT_DIALOG_DATA) public data: any) { } + + ngOnInit(): void { } + + onSubmit(): void { + this.loading = true; + /*this.http.put('../../rest/resourcesList/users/' + this.data.currentBasketInfo.ownerId + '/groups/' + this.data.currentBasketInfo.groupId + '/baskets/' + this.data.currentBasketInfo.basketId + '/actions/' + this.data.action.id, {resources : this.data.selectedRes, note : this.noteEditor.getNoteContent()}) + .subscribe((data: any) => { + this.loading = false; + this.dialogRef.close('success'); + }, (err: any) => { + this.notify.handleErrors(err); + this.loading = false; + });*/ + } + +} diff --git a/src/frontend/app/app.module.ts b/src/frontend/app/app.module.ts index 5445d902db33c1c285049e376d3288f0fd9db82e..ab29a56e1d746bcc1ba5a0fd86f1e1b27fce9aeb 100755 --- a/src/frontend/app/app.module.ts +++ b/src/frontend/app/app.module.ts @@ -36,6 +36,7 @@ import { UpdateDepartureDateActionComponent } from './actions/update-departure import { ProcessActionComponent } from './actions/process-action/process-action.component'; import { ViewDocActionComponent } from './actions/view-doc-action/view-doc-action.component'; import { RedirectActionComponent } from './actions/redirect-action/redirect-action.component'; +import { SendShippingActionComponent } from './actions/send-shipping-action/send-shipping-action.component'; import { FiltersListComponent } from './list/filters/filters-list.component'; import { FiltersToolComponent } from './list/filters/filters-tool.component'; @@ -93,6 +94,7 @@ import { AvisWorkflowComponent } from './avis/avis-workflow.componen ProcessActionComponent, ViewDocActionComponent, RedirectActionComponent, + SendShippingActionComponent, ActionsListComponent, ], entryComponents: [ @@ -114,6 +116,7 @@ import { AvisWorkflowComponent } from './avis/avis-workflow.componen UpdateDepartureDateActionComponent, ProcessActionComponent, RedirectActionComponent, + SendShippingActionComponent, ViewDocActionComponent ], providers: [ ShortcutMenuService, HeaderService, FiltersListService ], diff --git a/src/frontend/app/diffusions/diffusions-list.component.ts b/src/frontend/app/diffusions/diffusions-list.component.ts index f3b98cdb16a4493a5908293e43db6de04a87b9e9..79e7ced0fce0338d2ab8af7bb613a9dc8b72d35a 100644 --- a/src/frontend/app/diffusions/diffusions-list.component.ts +++ b/src/frontend/app/diffusions/diffusions-list.component.ts @@ -4,6 +4,7 @@ import { LANG } from '../translate.component'; import { NotificationService } from '../notification.service'; import { CdkDragDrop, moveItemInArray, transferArrayItem, CdkDrag } from '@angular/cdk/drag-drop'; import { AutoCompletePlugin } from '../../plugins/autocomplete.plugin'; +import { ConstantPool } from '@angular/compiler'; declare function $j(selector: any): any; @@ -169,45 +170,13 @@ export class DiffusionsListComponent extends AutoCompletePlugin implements OnIni loadDestUserList() { if (this.currentEntityId > 0 && this.userDestList.length == 0) { - this.userDestList = [ - { - id: 0, - user_id: 'ppetit', - labelToDisplay: 'Patricia PETIT', - descriptionToDisplay: 'Pôle jeunesse et sport', - }, - { - id: 0, - user_id: 'ppetit', - labelToDisplay: 'Patricia PETIT', - descriptionToDisplay: 'Pôle jeunesse et sport', - }, - { - id: 0, - user_id: 'ppetit', - labelToDisplay: 'Patricia PETIT', - descriptionToDisplay: 'Pôle jeunesse et sport', - }, - { - id: 0, - user_id: 'ppetit', - labelToDisplay: 'Patricia PETIT', - descriptionToDisplay: 'Pôle jeunesse et sport', - }, - { - id: 0, - user_id: 'ppetit', - labelToDisplay: 'Patricia PETIT', - descriptionToDisplay: 'Pôle jeunesse et sport', - } - ]; - /*this.http.get("../../rest/entities/" + this.currentEntityId + "/destUser") + this.http.get("../../rest/entities/" + this.currentEntityId + "/users") .subscribe((data: any) => { - + this.userDestList = data.users; this.loading = false; }, (err: any) => { this.notify.handleErrors(err); - });*/ + }); } } @@ -232,7 +201,6 @@ export class DiffusionsListComponent extends AutoCompletePlugin implements OnIni } addElem(element: any) { - if (this.diffList["copy"].items.map((e: any) => { return e.item_id; }).indexOf(element.id) == -1) { let itemType = ''; if (element.type == 'user') { diff --git a/src/frontend/css/maarch-material-alert.scss b/src/frontend/css/maarch-material-alert.scss index de0006196b51ac28c0cf78980e109339043ba076..1f77b9842aac71188bea70e7c591cce7866e2a68 100644 --- a/src/frontend/css/maarch-material-alert.scss +++ b/src/frontend/css/maarch-material-alert.scss @@ -3,6 +3,7 @@ .alert-message { margin: 20px 0; padding: 10px; + max-width: 450px; border-left: 3px solid #eee; p { diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index c7e68bebdae083077d99809b8eb328572e53bfd6..5729f23b081c7b00a525b937dc458b738f171b49 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -908,4 +908,6 @@ export const LANG_EN = { "shippings" : "Shippings templates", "mailevaAccount" : "Maileva account", "destinationChangingInfo" : "This mail will be reassigned to this entity", + "destinationChangingInfoMass" : "These mails following external entity of", + "destinationChangingInfoMass2" : "will be redirected to entity", }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index c9d0f5cb97d30789f00d9b01182f8aefed8b4964..02c182d7ab634ebb01bebd110672d148a80610b2 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -934,4 +934,7 @@ export const LANG_FR = { "shippings" : "Modèles d'envois postaux", "mailevaAccount" : "Compte Maileva", "destinationChangingInfo" : "Le courrier sera réattribué à l'entité", + "destinationChangingInfoMass" : "Les courriers issus d'une entité externe à ", + "destinationChangingInfoMass2" : "seront redirigés à l'entité", + }; diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index 3e4ce282dc9d4141b22334f3b2150ecff2fa08bd..ae16c3de76d8c7b973a08d35af1d6406bd98423a 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -936,4 +936,6 @@ export const LANG_NL = { "shippings" : "Shippings templates", //_TO_TRANSLATE "mailevaAccount" : "Maileva account", //_TO_TRANSLATE "destinationChangingInfo" : "This mail will be reassigned to this entity", //_TO_TRANSLATE + "destinationChangingInfoMass" : "These mails following external entity of", //_TO_TRANSLATE + "destinationChangingInfoMass2" : "will be redirected to entity", //_TO_TRANSLATE };