From 4f4cd7aba4534e1c15d1d4d6bb1fce3f25ba953e Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Wed, 19 Feb 2020 12:36:01 +0100 Subject: [PATCH] FEAT #13120 TIME 1:30 Display mailing action informations --- .../PreProcessActionController.php | 62 ++++++++++++++----- ...ernal-signatory-book-action.component.html | 10 ++- ...xternal-signatory-book-action.component.ts | 9 ++- ...ontinue-visa-circuit-action.component.html | 10 ++- .../continue-visa-circuit-action.component.ts | 14 +++-- .../send-signature-book-action.component.html | 10 ++- .../send-signature-book-action.component.ts | 15 +++-- src/frontend/lang/lang-en.ts | 4 +- src/frontend/lang/lang-fr.ts | 4 +- src/frontend/lang/lang-nl.ts | 2 + 10 files changed, 108 insertions(+), 32 deletions(-) diff --git a/src/app/action/controllers/PreProcessActionController.php b/src/app/action/controllers/PreProcessActionController.php index 39d17eea345..4380b0c2b81 100755 --- a/src/app/action/controllers/PreProcessActionController.php +++ b/src/app/action/controllers/PreProcessActionController.php @@ -14,6 +14,7 @@ namespace Action\controllers; use AcknowledgementReceipt\models\AcknowledgementReceiptModel; use Action\models\ActionModel; +use Attachment\controllers\AttachmentController; use Attachment\models\AttachmentModel; use Basket\models\BasketModel; use Basket\models\GroupBasketRedirectModel; @@ -485,7 +486,10 @@ class PreProcessActionController if (!$hasSignableAttachment && empty($integratedResource)) { $additionalsInfos['noAttachment'][] = ['alt_identifier' => $noAttachmentsResource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noSignableAttachmentInSignatoryBook']; } else { - $additionalsInfos['attachments'][] = ['res_id' => $resId]; + $statuses = array_column($attachments, 'status'); + $mailing = in_array('SEND_MASS', $statuses); + + $additionalsInfos['attachments'][] = ['res_id' => $resId, 'alt_identifier' => $noAttachmentsResource['alt_identifier'], 'mailing' => $mailing]; } } } @@ -537,7 +541,10 @@ class PreProcessActionController break; } } - $additionalsInfos['attachments'][] = ['res_id' => $resId]; + $statuses = array_column($attachments, 'status'); + $mailing = in_array('SEND_MASS', $statuses); + + $additionalsInfos['attachments'][] = ['res_id' => $resId, 'alt_identifier' => $noAttachmentsResource['alt_identifier'], 'mailing' => $mailing]; } } } @@ -942,21 +949,35 @@ class PreProcessActionController $resource['alt_identifier'] = _UNDEFINED; } - $integrations = json_decode($resource['integrations'], true); - if (!empty($integrations['inSignatureBook'])) { - $resourcesInformations['success'][] = ['res_id' => $resId]; - } else { - $attachments = AttachmentModel::get([ - 'select' => [1], - 'where' => ['res_id_master = ?', 'attachment_type in (?)', 'in_signature_book = ?', 'status not in (?)'], - 'data' => [$resId, $signableAttachmentsTypes, true, ['OBS', 'DEL', 'FRZ']] - ]); + $circuit = ListInstanceModel::get([ + 'select' => ['requested_signature'], + 'where' => ['res_id = ?', 'difflist_type = ?', 'process_date is null'], + 'data' => [$resId, 'VISA_CIRCUIT'], + 'orderBy' => ['listinstance_id'], + 'limit' => 1 + ]); + if (empty($circuit)) { + $resourcesInformations['error'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noCircuitAvailable']; + continue; + } - if (empty($attachments)) { - $resourcesInformations['error'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noAttachmentInSignatoryBook']; + $attachments = AttachmentModel::get([ + 'select' => ['status'], + 'where' => ['res_id_master = ?', 'attachment_type in (?)', 'in_signature_book = ?', 'status not in (?)'], + 'data' => [$resId, $signableAttachmentsTypes, true, ['OBS', 'DEL', 'FRZ']] + ]); + + if (empty($attachments)) { + $integrations = json_decode($resource['integrations'], true); + if (!empty($integrations['inSignatureBook'])) { + $resourcesInformations['success'][] = ['res_id' => $resId, 'alt_identifier' => $resource['alt_identifier'], 'mailing' => false]; } else { - $resourcesInformations['success'][] = ['res_id' => $resId]; + $resourcesInformations['error'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noAttachmentInSignatoryBook']; } + } else { + $statuses = array_column($attachments, 'status'); + $mailing = in_array('SEND_MASS', $statuses); + $resourcesInformations['success'][] = ['res_id' => $resId, 'alt_identifier' => $resource['alt_identifier'], 'mailing' => $mailing]; } } @@ -1008,7 +1029,18 @@ class PreProcessActionController } elseif ($isSignatory[0]['requested_signature'] && !$isSignatory[0]['signatory']) { $resourcesInformations['warning'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId, 'reason' => 'userHasntSigned']; } else { - $resourcesInformations['success'][] = ['alt_identifier' => $resource['alt_identifier'], 'res_id' => $resId]; + $attachments = AttachmentModel::get([ + 'select' => ['status'], + 'where' => ['res_id_master = ?', 'attachment_type in (?)', 'in_signature_book = ?', 'status not in (?)'], + 'data' => [$resId, $signableAttachmentsTypes, true, ['OBS', 'DEL', 'FRZ']] + ]); + + $mailing = false; + if (!empty($attachments)) { + $statuses = array_column($attachments, 'status'); + $mailing = in_array('SEND_MASS', $statuses); + } + $resourcesInformations['success'][] = ['res_id' => $resId, 'alt_identifier' => $resource['alt_identifier'], 'mailing' => $mailing]; } } diff --git a/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html b/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html index f013d81e2e4..cf14b1d7616 100644 --- a/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html +++ b/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.html @@ -18,6 +18,14 @@ <div *ngIf="data.resIds.length > 0" style="padding:10px;display: flex;flex-direction: column;"> <mat-checkbox color="primary" *ngFor="let inteKey of integrationsInfo | keyvalue" (click)="toggleIntegration(inteKey.key)" [checked]="data.resource.integrations[inteKey.key]">{{lang[inteKey.key+'_doc']}}</mat-checkbox> </div> + <div *ngIf="resourcesMailing.length > 0" class="alert-message alert-message-info" role="alert"> + <p>{{lang.mailingActionInformations2}}</p> + <ul> + <li *ngFor="let ressource of resourcesMailing"> + <b>{{ressource.alt_identifier}}</b> + </li> + </ul> + </div> <div> <app-maarch-paraph #maarchParapheur *ngIf="signatoryBookEnabled=='maarchParapheur'" [additionalsInfos]="additionalsInfos" [externalSignatoryBookDatas]="externalSignatoryBookDatas"> @@ -51,4 +59,4 @@ <button mat-raised-button mat-button color="primary" [disabled]="loading || !isValidAction()" (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 +</div> diff --git a/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.ts b/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.ts index 23ef8142622..aaab2e7716f 100644 --- a/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.ts +++ b/src/frontend/app/actions/send-external-signatory-book-action/send-external-signatory-book-action.component.ts @@ -18,12 +18,14 @@ export class SendExternalSignatoryBookActionComponent implements OnInit { lang: any = LANG; loading: boolean = false; + additionalsInfos: any = { destinationId: '', users: [], attachments: [], noAttachment: [] }; + resourcesMailing: any[] = []; signatoryBookEnabled: string = ''; externalSignatoryBookDatas: any = { @@ -93,7 +95,12 @@ export class SendExternalSignatoryBookActionComponent implements OnInit { this.additionalsInfos = data.additionalsInfos; if (this.additionalsInfos.attachments.length > 0) { this.signatoryBookEnabled = data.signatureBookEnabled; - } + data.additionalsInfos.attachments.forEach((value: any) => { + if (value.mailing) { + this.resourcesMailing.push(value); + } + }); + } this.errors = data.errors; resolve(true); }), diff --git a/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.html b/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.html index a43e16bc1e3..dabda258023 100644 --- a/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.html +++ b/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.html @@ -39,6 +39,14 @@ </li> </ul> </div> + <div *ngIf="resourcesMailing.length > 0" class="alert-message alert-message-info" role="alert"> + <p>{{lang.mailingActionInformations}}</p> + <ul> + <li *ngFor="let ressource of resourcesMailing"> + <b>{{ressource.alt_identifier}}</b> + </li> + </ul> + </div> <app-visa-workflow *ngIf="data.resIds.length == 1" [adminMode]="false" [resId]="data.resIds[0]" #appVisaWorkflow> </app-visa-workflow> @@ -52,4 +60,4 @@ <button mat-raised-button mat-button color="primary" [disabled]="loading || !isValidAction()" (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 +</div> diff --git a/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.ts b/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.ts index d0860b8ccf8..c3a449f50cd 100644 --- a/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.ts +++ b/src/frontend/app/actions/visa-continue-circuit-action/continue-visa-circuit-action.component.ts @@ -18,6 +18,7 @@ export class ContinueVisaCircuitActionComponent implements OnInit { lang: any = LANG; loading: boolean = false; + resourcesMailing: any[] = []; resourcesWarnings: any[] = []; resourcesErrors: any[] = []; @@ -54,6 +55,13 @@ export class ContinueVisaCircuitActionComponent implements OnInit { this.resourcesErrors = data.resourcesInformations.error; this.noResourceToProcess = this.resourcesErrors.length === this.data.resIds.length; } + if (data.resourcesInformations.success) { + data.resourcesInformations.success.forEach((value: any) => { + if (value.mailing) { + this.resourcesMailing.push(value); + } + }); + } resolve(true); }, (err: any) => { this.notify.handleSoftErrors(err); @@ -86,10 +94,6 @@ export class ContinueVisaCircuitActionComponent implements OnInit { } isValidAction() { - if (!this.noResourceToProcess) { - return true; - } else { - return false; - } + return !this.noResourceToProcess; } } diff --git a/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.html b/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.html index 227e9c6f745..4e4db2f4db5 100644 --- a/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.html +++ b/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.html @@ -25,6 +25,14 @@ </li> </ul> </div> + <div *ngIf="resourcesMailing.length > 0" class="alert-message alert-message-info" role="alert"> + <p>{{lang.mailingActionInformations}}</p> + <ul> + <li *ngFor="let ressource of resourcesMailing"> + <b>{{ressource.alt_identifier}}</b> + </li> + </ul> + </div> <app-visa-workflow *ngIf="data.resIds.length <= 1 || (!noResourceToProcess && data.resIds.length > 1)" [adminMode]="true" #appVisaWorkflow> </app-visa-workflow> <div style="padding-top: 10px;"> @@ -41,4 +49,4 @@ <button mat-raised-button mat-button color="primary" [disabled]="loading || !isValidAction()" (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 +</div> diff --git a/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.ts b/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.ts index 21685de42d3..5219a83fe1b 100644 --- a/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.ts +++ b/src/frontend/app/actions/visa-send-signature-book-action/send-signature-book-action.component.ts @@ -18,6 +18,7 @@ export class SendSignatureBookActionComponent implements AfterViewInit { lang: any = LANG; loading: boolean = true; + resourcesMailing: any[] = []; resourcesError: any[] = []; noResourceToProcess: boolean = null; @@ -89,6 +90,13 @@ export class SendSignatureBookActionComponent implements AfterViewInit { this.resourcesError = data.resourcesInformations.error; } this.noResourceToProcess = this.data.resIds.length === this.resourcesError.length; + if (data.resourcesInformations.success) { + data.resourcesInformations.success.forEach((value: any) => { + if (value.mailing) { + this.resourcesMailing.push(value); + } + }); + } resolve(true); }, (err: any) => { this.notify.handleSoftErrors(err); @@ -130,7 +138,6 @@ export class SendSignatureBookActionComponent implements AfterViewInit { } executeAction(realResSelected: number[]) { - this.http.put(this.data.processActionRoute, { resources: realResSelected, note: this.noteEditor.getNoteContent() }).pipe( tap((data: any) => { if (!data) { @@ -168,10 +175,6 @@ export class SendSignatureBookActionComponent implements AfterViewInit { } isValidAction() { - if (!this.noResourceToProcess && this.appVisaWorkflow !== undefined && !this.appVisaWorkflow.emptyWorkflow() && !this.appVisaWorkflow.workflowEnd()) { - return true; - } else { - return false; - } + return !this.noResourceToProcess && this.appVisaWorkflow !== undefined && !this.appVisaWorkflow.emptyWorkflow() && !this.appVisaWorkflow.workflowEnd(); } } diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index fc6f5646c47..7a02fd1af0f 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -1530,5 +1530,7 @@ export const LANG_EN = { "badEmailsFormat" : "Some email address are not correct", "warnEmptySubject" : "You will send an email without subject, continue ?", "emailDeleted" : "Email deleted", - "properties" : "Properties", + "mailingActionInformations" : "Following mails contain mailing attachments, if next person in visa circuit is signatory then mailing will be activate :", + "mailingActionInformations2" : "Following mails contain mailing attachments, mailing will be activate :", + "properties" : "Properties", }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index 6575d254fb1..01a15992218 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -1568,6 +1568,8 @@ export const LANG_FR = { "contactDeleted" : "Contact supprimé", "badEmailsFormat" : "Certaines adresses de courriel ne sont pas correctes", "warnEmptySubject" : "Vous allez envoyer un courriel sans objet, continuer ?", - "emailDeleted" : "Courriel supprimé", + "emailDeleted" : "Courriel supprimé", + "mailingActionInformations" : "Les courriers suivants contiennent des pièces-jointes pour publipostage, si la prochaine personne du circuit de visa est signataire alors le publipostage s'effectuera dès la validation de cette action :", + "mailingActionInformations2" : "Les courriers suivants contiennent des pièces-jointes pour publipostage, celui-ci s'effectuera dès la validation de cette action :", "properties" : "Propriétés", }; diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index d1231f40784..9570a665b2e 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -1555,5 +1555,7 @@ export const LANG_NL = { "badEmailsFormat" : "Some email address are not correct", //_TO_TRANSLATE "warnEmptySubject" : "You will send an email without subject, continue ?", //_TO_TRANSLATE "emailDeleted" : "Email deleted", //_TO_TRANSLATE + "mailingActionInformations" : "Following mails contain mailing attachments, if next person in visa circuit is signatory then mailing will be activate :", //_TO_TRANSLATE + "mailingActionInformations2" : "Following mails contain mailing attachments, mailing will be activate :", //TRANSLATE "properties" : "Properties", //_TO_TRANSLATE }; -- GitLab