diff --git a/src/app/action/controllers/PreProcessActionController.php b/src/app/action/controllers/PreProcessActionController.php index 39d17eea3459ba6aff0f9712739eaa6109c42d90..4380b0c2b813548dde47c8afdce5e3e440d0da14 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 f013d81e2e4d0dbf4b35fc9bc6ac3c071c3c8a22..cf14b1d76167edcb0c8dd3525f3c469fa561729f 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 23ef81426220db34125ec4e782c7c996cabff30e..aaab2e7716fef5b6976a658a15e74e7d44def90e 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 a43e16bc1e36fb99f73f114e0a9c8dec210c6e4d..dabda258023ada7c92db32a5fb740e819dc11833 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 d0860b8ccf8de64346da5a411ba102fc43ce8b91..c3a449f50cd3f20d0e25d50c8ad24cfbd6405468 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 227e9c6f7455b541f039d32f2321ae02ca4f9e02..4e4db2f4db5f5ca46ff2cc8fecb7f2a2a6b21e54 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 21685de42d31b1cb9212277371c125a46b1c9dea..5219a83fe1bf3cb924ae00cb2d750f6d0e56c1ec 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 fc6f5646c47ac41858cb318caaa7552a32934dac..7a02fd1af0fdfac87161169a061a8df6a2155873 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 6575d254fb1a5ba1bc48bac3554285d54e439a5d..01a159922187b1f7dc6998d526f9850faa3a4df8 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 d1231f407848cdec21f7e6965189734b260b4bf5..9570a665b2e3bf16ebd0dd834f2a6cba634bc329 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 };