From 3fc6341bc7aa24a254664143af327237a573ecdb Mon Sep 17 00:00:00 2001 From: "florian.azizian" <florian.azizian@maarch.org> Date: Thu, 23 May 2019 17:08:39 +0100 Subject: [PATCH] FEAT #10619 TIME 3 send visa workflow to Maarch Parapheur --- .../class/class_modules_tools_Abstract.php | 39 +++---------------- .../visa/xml/remoteSignatoryBooks.xml.default | 4 -- .../PreProcessActionController.php | 19 +++++++++ .../controllers/MaarchParapheurController.php | 33 +++++++++++----- .../maarch-paraph.component.html | 19 ++++++++- .../maarch-paraph/maarch-paraph.component.ts | 9 +++-- src/frontend/lang/lang-en.ts | 2 + src/frontend/lang/lang-fr.ts | 2 + src/frontend/lang/lang-nl.ts | 2 + 9 files changed, 76 insertions(+), 53 deletions(-) diff --git a/modules/visa/class/class_modules_tools_Abstract.php b/modules/visa/class/class_modules_tools_Abstract.php index 7dfa9f5e840..6753af135bd 100755 --- a/modules/visa/class/class_modules_tools_Abstract.php +++ b/modules/visa/class/class_modules_tools_Abstract.php @@ -286,33 +286,6 @@ abstract class visa_Abstract extends Database return false; } - /*$resFirstFiles = []; - - while ($res = $stmt->fetchObject()) { - if (($res->format == 'doc' || $res->format == 'docx' || $res->format == 'odt') && !in_array($res->attachment_type, ['simple_attachment', 'simple_attachment_rp'])) { - array_push($resFirstFiles, $res); - } - } - - $stmt = $db->query("SELECT * FROM res_attachments WHERE res_id_master = ? AND coll_id = ? AND attachment_type IN ('converted_pdf') AND status NOT IN ('DEL','OBS','TMP')", array($res_id, $coll_id)); - - $resSecondFiles = []; - - while ($res = $stmt->fetchObject()) { - array_push($resSecondFiles, $res->filename); - } - foreach ($resFirstFiles as $tmpObj) { - if ($this->hasSameFileInArray($tmpObj->filename, $resSecondFiles)) { - continue; - } - if (!$this->errorMessageVisa) { - $this->errorMessageVisa .= _PLEASE_CONVERT_PDF_VISA; - } - $this->errorMessageVisa .= '<br/> '; - $this->errorMessageVisa .= $_SESSION['attachment_types'][$tmpObj->attachment_type].' : '; - $this->errorMessageVisa .= $tmpObj->title; - }*/ - return true; } @@ -659,14 +632,12 @@ abstract class visa_Abstract extends Database foreach ($tab_userentities as $key => $value) { $str .= '<optgroup label="'.$tab_userentities[$key]['entity_id'].'">'; foreach ($tab_users as $user) { - if ($user['enabled'] == 'Y') { - if ($tab_userentities[$key]['entity_id'] == $user['entity_id']) { - $selected = ' '; - if ($user['id'] == $step['user_id']) { - $selected = ' selected'; - } - $str .= '<option value="'.$user['id'].'" '.$selected.'>'.$user['lastname'].' '.$user['firstname'].'</option>'; + if ($tab_userentities[$key]['entity_id'] == $user['entity_id']) { + $selected = ' '; + if ($user['id'] == $step['user_id']) { + $selected = ' selected'; } + $str .= '<option value="'.$user['id'].'" '.$selected.'>'.$user['lastname'].' '.$user['firstname'].'</option>'; } } $str .= '</optgroup>'; diff --git a/modules/visa/xml/remoteSignatoryBooks.xml.default b/modules/visa/xml/remoteSignatoryBooks.xml.default index d0d5f14b13d..00a97aa0371 100644 --- a/modules/visa/xml/remoteSignatoryBooks.xml.default +++ b/modules/visa/xml/remoteSignatoryBooks.xml.default @@ -6,10 +6,6 @@ <userId>ccornillac@maarch.com</userId> <password>maarch</password> <url>http://preview.maarchparapheur.com</url> - <signature>SIGN</signature> - <annotation>NOTE</annotation> - <externalValidated>VAL</externalValidated> - <externalRefused>REF</externalRefused> </signatoryBook> <signatoryBook> <id>ixbus</id> diff --git a/src/app/action/controllers/PreProcessActionController.php b/src/app/action/controllers/PreProcessActionController.php index f00e49ffb06..9a5173caa32 100755 --- a/src/app/action/controllers/PreProcessActionController.php +++ b/src/app/action/controllers/PreProcessActionController.php @@ -22,6 +22,7 @@ use Convert\controllers\ConvertPdfController; use Docserver\models\DocserverModel; use Doctype\models\DoctypeExtModel; use Entity\models\EntityModel; +use Entity\models\ListInstanceModel; use ExternalSignatoryBook\controllers\MaarchParapheurController; use Group\models\GroupModel; use Parameter\models\ParameterModel; @@ -431,6 +432,10 @@ class PreProcessActionController $userList = MaarchParapheurController::getInitializeDatas(['config' => $config]); if (!empty($userList['users'])) { $additionalsInfos['users'] = $userList['users']; + $aUsersInMP = []; + foreach ($userList['users'] as $value) { + $aUsersInMP[] = $value['id']; + } } else { $additionalsInfos['users'] = []; } @@ -445,6 +450,20 @@ class PreProcessActionController $noAttachmentsResource['alt_identifier'] = _UNDEFINED; } + $listinstances = ListInstanceModel::getVisaCircuitByResId(['select' => ['external_id', 'firstname', 'lastname'], 'id' => $resId]); + if (empty($listinstances)) { + $additionalsInfos['visaWorkflowError'][] = ['alt_identifier' => $noAttachmentsResource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noVisaWorkflow']; + continue; + } + + foreach ($listinstances as $user) { + $externalId = json_decode($user['external_id'], true); + if (!in_array($externalId['maarchParapheur'], $aUsersInMP)) { + $additionalsInfos['visaWorkflowError'][] = ['alt_identifier' => $noAttachmentsResource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noUserDefinedInMaarchParapheur']; + continue 2; + } + } + $adrMainInfo = ConvertPdfController::getConvertedPdfById(['resId' => $resId, 'collId' => 'letterbox_coll']); if (empty($adrMainInfo['docserver_id'])) { $additionalsInfos['noMail'][] = ['alt_identifier' => $noAttachmentsResource['alt_identifier'], 'res_id' => $resId, 'reason' => 'noMailConversion']; diff --git a/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php b/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php index 8ac5bf1ab21..5725b95b9b4 100755 --- a/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php +++ b/src/app/external/externalSignatoryBook/controllers/MaarchParapheurController.php @@ -179,6 +179,20 @@ class MaarchParapheurController $senderPrimaryEntity = UserModel::getPrimaryEntityByUserId(['userId' => $aArgs['userId']]); if ($aArgs['objectSent'] == 'attachment') { + $listinstances = ListInstanceModel::getVisaCircuitByResId(['select' => ['external_id', 'users.user_id', 'requested_signature'], 'id' => $mainResource[0]['res_id']]); + if (empty($listinstances)) { + return ['error' => 'No visa workflow']; + } + + $workflow = []; + foreach ($listinstances as $user) { + $externalId = json_decode($user['external_id'], true); + if (empty($externalId['maarchParapheur'])) { + return ['error' => 'Some users does not exist in Maarch Parapheur']; + } + $workflow[] = ['processingUser' => $user['user_id'], 'mode' => ($user['requested_signature'] ? 'sign' : 'visa')]; + } + $excludeAttachmentTypes = ['converted_pdf', 'print_folder', 'signed_response']; $attachments = AttachmentModel::getOnView([ @@ -249,12 +263,11 @@ class MaarchParapheurController $bodyData = [ 'title' => $value['title'], 'reference' => $value['identifier'], - 'mode' => $aArgs['config']['data']['signature'], 'encodedDocument' => $encodedZipDocument, - 'processingUser' => $processingUser, 'sender' => trim($sender['firstname'] . ' ' .$sender['lastname']), 'deadline' => $processLimitDate, 'attachments' => $attachmentsData, + 'workflow' => $workflow, 'metadata' => $metadata ]; @@ -282,15 +295,15 @@ class MaarchParapheurController $metadata[_RECIPIENTS] = $contact; } + $workflow = [['processingUser' => $processingUser, 'mode' => 'note']]; $bodyData = [ - 'title' => $mainResource[0]['subject'], - 'reference' => $mainResource[0]['alt_identifier'], - 'mode' => $aArgs['config']['data']['annotation'], - 'encodedDocument' => $encodedMainZipFile, - 'processingUser' => $processingUser, - 'sender' => trim($sender['firstname'] . ' ' .$sender['lastname']), - 'deadline' => $processLimitDate, - 'metadata' => $metadata + 'title' => $mainResource[0]['subject'], + 'reference' => $mainResource[0]['alt_identifier'], + 'encodedDocument' => $encodedMainZipFile, + 'sender' => trim($sender['firstname'] . ' ' .$sender['lastname']), + 'deadline' => $processLimitDate, + 'workflow' => $workflow, + 'metadata' => $metadata ]; $response = CurlModel::exec([ diff --git a/src/frontend/app/actions/send-external-signatory-book-action/maarch-paraph/maarch-paraph.component.html b/src/frontend/app/actions/send-external-signatory-book-action/maarch-paraph/maarch-paraph.component.html index bae15bc170e..1f3d8c70f44 100644 --- a/src/frontend/app/actions/send-external-signatory-book-action/maarch-paraph/maarch-paraph.component.html +++ b/src/frontend/app/actions/send-external-signatory-book-action/maarch-paraph/maarch-paraph.component.html @@ -1,4 +1,4 @@ -<div class="col-md-12" style="padding-top: 10px;" *ngIf="additionalsInfos.users.length != 0"> +<div class="col-md-12" style="padding-top: 10px;" *ngIf="additionalsInfos.users.length != 0 && externalSignatoryBookDatas.objectSent == 'mail'"> <mat-form-field> <mat-label>{{lang.userMaarchParapheur}}</mat-label> <mat-select name="processingUser" [(ngModel)]="externalSignatoryBookDatas.processingUser" required> @@ -11,6 +11,23 @@ <div class="col-md-12" *ngIf="additionalsInfos.users.length == 0"> {{lang.noUserDefinedInMaarchParapheur}} </div> +<div class="col-md-12" *ngIf="externalSignatoryBookDatas.objectSent == 'attachment'"> + <div class="alert-message alert-message-info" role="alert">{{lang.visaWorkflowWillBeSend}}</div> +</div> +<div class="col-md-12" *ngIf="additionalsInfos.visaWorkflowError && externalSignatoryBookDatas.objectSent == 'attachment'"> + <div> + <div class="alert-message alert-message-danger mailList" role="alert"> + <p> + {{lang.canNotMakeAction}} : + </p> + <ul> + <li *ngFor="let visaError of additionalsInfos.visaWorkflowError"> + <b>{{visaError.alt_identifier}}</b> : {{lang[visaError.reason]}} + </li> + </ul> + </div> + </div> +</div> <div class="col-sm-12" *ngIf="additionalsInfos.users.length != 0"> <mat-radio-group required name="objectSent" [(ngModel)]="externalSignatoryBookDatas.objectSent"> <mat-radio-button color="primary" name="objectSent" checked value="mail">{{lang.mailNote}}</mat-radio-button> diff --git a/src/frontend/app/actions/send-external-signatory-book-action/maarch-paraph/maarch-paraph.component.ts b/src/frontend/app/actions/send-external-signatory-book-action/maarch-paraph/maarch-paraph.component.ts index e00af0355c5..7f9d4270d16 100644 --- a/src/frontend/app/actions/send-external-signatory-book-action/maarch-paraph/maarch-paraph.component.ts +++ b/src/frontend/app/actions/send-external-signatory-book-action/maarch-paraph/maarch-paraph.component.ts @@ -27,10 +27,11 @@ export class MaarchParaphComponent implements OnInit { ngOnInit(): void { } checkValidParaph() { - if (!this.externalSignatoryBookDatas.processingUser || - this.additionalsInfos.users.length == 0 || - (this.externalSignatoryBookDatas.objectSent == 'attachment' && this.additionalsInfos.attachments.length == 0) || - (this.externalSignatoryBookDatas.objectSent == 'mail' && this.additionalsInfos.mails.length == 0)) { + if ((this.externalSignatoryBookDatas.objectSent == 'attachment' && this.additionalsInfos.attachments.length == 0) || + (this.externalSignatoryBookDatas.objectSent == 'mail' && + (this.additionalsInfos.mails.length == 0 || !this.externalSignatoryBookDatas.processingUser || this.additionalsInfos.users.length == 0) + ) + ) { return true; } else { return false; diff --git a/src/frontend/lang/lang-en.ts b/src/frontend/lang/lang-en.ts index 3289a3240d6..923d41c53c7 100755 --- a/src/frontend/lang/lang-en.ts +++ b/src/frontend/lang/lang-en.ts @@ -1003,4 +1003,6 @@ export const LANG_EN = { "userOK" : "Active", "userSPD" : "Inactive", "userABS" : "Absent", + "noVisaWorkflow" : "No visa workflow set up.", + "visaWorkflowWillBeSend" : "Visa workflow will be send to Maarch Parapheur" }; diff --git a/src/frontend/lang/lang-fr.ts b/src/frontend/lang/lang-fr.ts index 0c79c8b0629..36fe29f8b1b 100755 --- a/src/frontend/lang/lang-fr.ts +++ b/src/frontend/lang/lang-fr.ts @@ -1036,4 +1036,6 @@ export const LANG_FR = { "userOK" : "Actif", "userSPD" : "Inactif", "userABS" : "Absent", + "noVisaWorkflow" : "Aucun circuit de visa paramétré.", + "visaWorkflowWillBeSend" : "Le circuit visa des courriers sera envoyé à Maarch Parapheur" }; \ No newline at end of file diff --git a/src/frontend/lang/lang-nl.ts b/src/frontend/lang/lang-nl.ts index bca53be0b81..c365c8e9d85 100755 --- a/src/frontend/lang/lang-nl.ts +++ b/src/frontend/lang/lang-nl.ts @@ -1030,4 +1030,6 @@ export const LANG_NL = { "userOK" : "Active", //_TO_TRANSLATE "userSPD" : "Inactive", //_TO_TRANSLATE "userABS" : "Absent", //_TO_TRANSLATE + "noVisaWorkflow" : "No visa workflow set up.", //_TO_TRANSLATE + "visaWorkflowWillBeSend" : "Visa workflow will be send to Maarch Parapheur", //_TO_TRANSLATE }; -- GitLab