From fe0705dad93df288e5d7381ecb87f71376217e61 Mon Sep 17 00:00:00 2001 From: Damien Burel <damien.burel@maarch.org> Date: Tue, 24 Oct 2017 11:15:23 +0200 Subject: [PATCH] FEAT #6134 Save signatory --- core/Models/ListinstanceModel.php | 20 ++++++++++ core/Models/ListinstanceModelAbstract.php | 37 ++++++++++++++++++ .../Models/AttachmentsModelAbstract.php | 39 +++++++++++++++++-- modules/visa/Controllers/VisaController.php | 8 ++++ modules/visa/save_attach_res_from_cm.php | 7 ++-- modules/visa/sign_file.php | 5 ++- sql/17_xx.sql | 12 ++++-- 7 files changed, 117 insertions(+), 11 deletions(-) create mode 100644 core/Models/ListinstanceModel.php create mode 100644 core/Models/ListinstanceModelAbstract.php diff --git a/core/Models/ListinstanceModel.php b/core/Models/ListinstanceModel.php new file mode 100644 index 00000000000..76bc8c07481 --- /dev/null +++ b/core/Models/ListinstanceModel.php @@ -0,0 +1,20 @@ +<?php + +/** + * Copyright Maarch since 2008 under licence GPLv3. + * See LICENCE.txt file at the root folder for more details. + * This file is part of Maarch software. + * + */ + +/** + * @brief Listinstance Model + * @author dev@maarch.org + * @ingroup listinstance + */ + +namespace Core\Models; + +class ListinstanceModel extends ListinstanceModelAbstract +{ +} diff --git a/core/Models/ListinstanceModelAbstract.php b/core/Models/ListinstanceModelAbstract.php new file mode 100644 index 00000000000..7fc685085b4 --- /dev/null +++ b/core/Models/ListinstanceModelAbstract.php @@ -0,0 +1,37 @@ +<?php + +/** + * Copyright Maarch since 2008 under licence GPLv3. + * See LICENCE.txt file at the root folder for more details. + * This file is part of Maarch software. + * + */ + +/** + * @brief Listinstance Model Abstract + * @author dev@maarch.org + * @ingroup listinstance + */ + +namespace Core\Models; + +class ListinstanceModelAbstract +{ + public static function setSignatory(array $aArgs) + { + ValidatorModel::notEmpty($aArgs, ['resId', 'signatory', 'userId']); + ValidatorModel::intVal($aArgs, ['resId']); + ValidatorModel::stringType($aArgs, ['signatory', 'userId']); + + DatabaseModel::update([ + 'table' => 'listinstance', + 'set' => [ + 'signatory' => $aArgs['signatory'] + ], + 'where' => ['res_id = ?', 'item_id = ?', 'difflist_type = ?'], + 'data' => [$aArgs['resId'], $aArgs['userId'], 'VISA_CIRCUIT'], + ]); + + return true; + } +} diff --git a/modules/attachments/Models/AttachmentsModelAbstract.php b/modules/attachments/Models/AttachmentsModelAbstract.php index 567c60fcaf9..dc9cbb7bb3a 100755 --- a/modules/attachments/Models/AttachmentsModelAbstract.php +++ b/modules/attachments/Models/AttachmentsModelAbstract.php @@ -17,7 +17,7 @@ class AttachmentsModelAbstract { public static function getById(array $aArgs) { - ValidatorModel::notEmpty($aArgs, ['id']); + ValidatorModel::notEmpty($aArgs, ['id', 'isVersion']); ValidatorModel::intVal($aArgs, ['id']); ValidatorModel::stringType($aArgs, ['isVersion']); @@ -150,7 +150,7 @@ class AttachmentsModelAbstract DatabaseModel::update([ 'table' => $aArgs['table'], - 'set' => ['status' => 'A_TRA'], + 'set' => ['status' => 'A_TRA', 'signatory_user_serial_id' => NULL], 'where' => ['res_id = ?'], 'data' => [$aArgs['resId']] ]); @@ -167,7 +167,7 @@ class AttachmentsModelAbstract public static function setInSignatureBook(array $aArgs) { - ValidatorModel::notEmpty($aArgs, ['id']); + ValidatorModel::notEmpty($aArgs, ['id', 'isVersion']); ValidatorModel::intVal($aArgs, ['id']); ValidatorModel::stringType($aArgs, ['isVersion']); ValidatorModel::boolType($aArgs, ['inSignatureBook']); @@ -194,4 +194,37 @@ class AttachmentsModelAbstract return true; } + + public static function hasAttachmentsSignedForUserById(array $aArgs) + { + ValidatorModel::notEmpty($aArgs, ['id', 'user_serial_id', 'isVersion']); + ValidatorModel::intVal($aArgs, ['id', 'user_serial_id']); + ValidatorModel::stringType($aArgs, ['isVersion']); + + if ($aArgs['isVersion'] == 'true') { + $table = 'res_version_attachments'; + } else { + $table = 'res_attachments'; + } + + $attachment = DatabaseModel::select([ + 'select' => ['res_id_master'], + 'table' => [$table], + 'where' => ['res_id = ?'], + 'data' => [$aArgs['id']], + ]); + + $attachments = DatabaseModel::select([ + 'select' => ['res_id_master'], + 'table' => ['res_view_attachments'], + 'where' => ['res_id_master = ?', 'signatory_user_serial_id = ?'], + 'data' => [$attachment[0]['res_id_master'], $aArgs['user_serial_id']], + ]); + + if (empty($attachments)) { + return false; + } + + return true; + } } diff --git a/modules/visa/Controllers/VisaController.php b/modules/visa/Controllers/VisaController.php index 3f97f55a7e8..94577ce695a 100755 --- a/modules/visa/Controllers/VisaController.php +++ b/modules/visa/Controllers/VisaController.php @@ -16,6 +16,7 @@ namespace Visa\Controllers; use Apps\Models\ActionModel; use Apps\Models\ContactModel; use Attachments\Models\AttachmentsModel; +use Core\Models\ListinstanceModel; use Core\Models\ResModel; use Core\Models\UserModel; use Core\Models\LangModel; @@ -93,6 +94,13 @@ class VisaController { AttachmentsModel::unsignAttachment(['table' => $aArgs['collId'], 'resId' => $aArgs['resId']]); + $isVersion = ($aArgs['collId'] == 'res_attachments' ? 'false' : 'true'); + $user = UserModel::getById(['userId' => $_SESSION['user']['UserId'], 'select' => ['id']]); + if (!AttachmentsModel::hasAttachmentsSignedForUserById(['id' => $aArgs['resId'], 'isVersion' => $isVersion, 'user_serial_id' => $user['id']])) { + $attachment = AttachmentsModel::getById(['id' => $aArgs['resId'], 'isVersion' => $isVersion, 'select' => ['res_id_master']]); + ListinstanceModel::setSignatory(['resId' => $attachment['res_id_master'], 'signatory' => 'false', 'userId' => $_SESSION['user']['UserId']]); + } + return $response->withJson(['success' => 'success']); } diff --git a/modules/visa/save_attach_res_from_cm.php b/modules/visa/save_attach_res_from_cm.php index eda810a3736..420e1267b38 100755 --- a/modules/visa/save_attach_res_from_cm.php +++ b/modules/visa/save_attach_res_from_cm.php @@ -52,12 +52,13 @@ if (empty($docserver)) { } else { require_once "core/class/class_request.php"; $db = new Database(); - if ($_SESSION['visa']['repSignRel'] > 1) { + $signatoryUser = \Core\Models\UserModel::getById(['userId' => $_SESSION['user']['UserId'], 'select' => ['id']]); + if ($_SESSION['visa']['repSignRel'] > 1) { //$target_table = 'res_version_attachments'; - $db->query("UPDATE res_version_attachments set status = 'SIGN' WHERE res_id = ?",[$_SESSION['visa']['repSignId']]); + $db->query("UPDATE res_version_attachments set status = 'SIGN', signatory_user_serial_id = ? WHERE res_id = ?",[$signatoryUser['id'], $_SESSION['visa']['repSignId']]); } else { //$target_table = 'res_attachments'; - $db->query("UPDATE res_attachments set status = 'SIGN' WHERE res_id = ?",[$_SESSION['visa']['repSignId']]); + $db->query("UPDATE res_attachments set status = 'SIGN', signatory_user_serial_id = ? WHERE res_id = ?",[$signatoryUser['id'], $_SESSION['visa']['repSignId']]); } unset($_SESSION['visa']['repSignRel']); if (isset($_SESSION['visa']['repSignId'])) unset($_SESSION['visa']['repSignId']); diff --git a/modules/visa/sign_file.php b/modules/visa/sign_file.php index aff272d6582..44c6dfab246 100755 --- a/modules/visa/sign_file.php +++ b/modules/visa/sign_file.php @@ -107,8 +107,9 @@ if (!empty($_REQUEST['id']) && !empty($_REQUEST['collId'])) { $fileExtension = "pdf"; include 'modules/visa/save_attach_res_from_cm.php'; - - echo "{\"status\": 0, \"new_id\": $id}"; + $db->query('UPDATE listinstance set signatory = TRUE WHERE listinstance_id = (SELECT listinstance_id WHERE res_id = ? AND item_id = ? AND difflist_type = ? AND process_date is null ORDER BY listinstance_id LIMIT 1)', [$objectResIdMaster, $_SESSION['user']['UserId'], 'VISA_CIRCUIT']); + + echo "{\"status\": 0, \"new_id\": $id}"; exit; } } else { diff --git a/sql/17_xx.sql b/sql/17_xx.sql index 61369d7d6e2..2581abc324f 100755 --- a/sql/17_xx.sql +++ b/sql/17_xx.sql @@ -123,11 +123,17 @@ WITH (OIDS=FALSE); ALTER TABLE entities DROP COLUMN IF EXISTS entity_full_name; ALTER TABLE entities ADD entity_full_name text; -/*IN SIGNATURE BOOK*/ +/*SIGNATURE BOOK*/ ALTER TABLE res_attachments DROP COLUMN IF EXISTS in_signature_book; ALTER TABLE res_attachments ADD in_signature_book boolean default false; ALTER TABLE res_version_attachments DROP COLUMN IF EXISTS in_signature_book; ALTER TABLE res_version_attachments ADD in_signature_book boolean default false; +ALTER TABLE res_attachments DROP COLUMN IF EXISTS signatory_user_serial_id; +ALTER TABLE res_attachments ADD signatory_user_serial_id int; +ALTER TABLE res_version_attachments DROP COLUMN IF EXISTS signatory_user_serial_id; +ALTER TABLE res_version_attachments ADD signatory_user_serial_id int; +ALTER TABLE listinstance DROP COLUMN IF EXISTS signatory; +ALTER TABLE listinstance ADD signatory boolean default false; DROP VIEW IF EXISTS res_view_attachments; CREATE VIEW res_view_attachments AS SELECT '0' as res_id, res_id as res_id_version, title, subject, description, publisher, contributor, type_id, format, typist, @@ -136,7 +142,7 @@ CREATE VIEW res_view_attachments AS filename, offset_doc, logical_adr, fingerprint, filesize, is_paper, page_count, scan_date, scan_user, scan_location, scan_wkstation, scan_batch, burn_batch, scan_postmark, envelop_id, status, destination, approver, validation_date, effective_date, work_batch, origin, is_ingoing, priority, initiator, dest_user, - coll_id, dest_contact_id, dest_address_id, updated_by, is_multicontacts, is_multi_docservers, res_id_master, attachment_type, attachment_id_master, in_signature_book + coll_id, dest_contact_id, dest_address_id, updated_by, is_multicontacts, is_multi_docservers, res_id_master, attachment_type, attachment_id_master, in_signature_book, signatory_user_serial_id FROM res_version_attachments UNION ALL SELECT res_id, '0' as res_id_version, title, subject, description, publisher, contributor, type_id, format, typist, @@ -145,5 +151,5 @@ CREATE VIEW res_view_attachments AS filename, offset_doc, logical_adr, fingerprint, filesize, is_paper, page_count, scan_date, scan_user, scan_location, scan_wkstation, scan_batch, burn_batch, scan_postmark, envelop_id, status, destination, approver, validation_date, effective_date, work_batch, origin, is_ingoing, priority, initiator, dest_user, - coll_id, dest_contact_id, dest_address_id, updated_by, is_multicontacts, is_multi_docservers, res_id_master, attachment_type, '0', in_signature_book + coll_id, dest_contact_id, dest_address_id, updated_by, is_multicontacts, is_multi_docservers, res_id_master, attachment_type, '0', in_signature_book, signatory_user_serial_id FROM res_attachments; -- GitLab