From 2fd7eb11fd69dd339763191bd1500412f0423d2e Mon Sep 17 00:00:00 2001 From: Damien <damien.burel@maarch.org> Date: Tue, 28 Jan 2020 11:03:36 +0100 Subject: [PATCH] FEAT #12346 TIME 1:50 New document version + sql --- migration/20.03/2003.sql | 11 +++++ sql/structure.sql | 5 ++- .../controllers/ConvertPdfController.php | 3 +- .../ConvertThumbnailController.php | 1 + src/app/convert/models/AdrModel.php | 40 ++++++++++++++----- .../resource/controllers/ResController.php | 24 +++++++++-- .../linked-resource-list.component.html | 6 +-- 7 files changed, 71 insertions(+), 19 deletions(-) diff --git a/migration/20.03/2003.sql b/migration/20.03/2003.sql index ba06cd82741..6626bc4a73a 100644 --- a/migration/20.03/2003.sql +++ b/migration/20.03/2003.sql @@ -469,6 +469,17 @@ ALTER TABLE res_attachments ADD COLUMN recipient_type character varying(256); ALTER TABLE res_attachments DROP COLUMN IF EXISTS recipient_id; ALTER TABLE res_attachments ADD COLUMN recipient_id integer; +ALTER TABLE adr_letterbox DROP COLUMN IF EXISTS relation; +ALTER TABLE adr_letterbox ADD COLUMN relation integer; +UPDATE adr_letterbox SET relation = 1; +ALTER TABLE adr_letterbox ALTER COLUMN relation SET NOT NULL; + +ALTER TABLE res_letterbox DROP COLUMN IF EXISTS in_signature_book; +ALTER TABLE res_letterbox ADD COLUMN in_signature_book boolean DEFAULT FALSE; +ALTER TABLE res_letterbox DROP COLUMN IF EXISTS in_shipping; +ALTER TABLE res_letterbox ADD COLUMN in_shipping boolean DEFAULT FALSE; + + /* REFACTORING DATA */ DO $$ BEGIN IF (SELECT count(attname) FROM pg_attribute WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'usergroups') AND attname = 'enabled') THEN diff --git a/sql/structure.sql b/sql/structure.sql index 44fd89269a7..6fd85807d5e 100755 --- a/sql/structure.sql +++ b/sql/structure.sql @@ -967,6 +967,8 @@ CREATE TABLE res_letterbox flag_alarm1 char(1) default 'N'::character varying, flag_alarm2 char(1) default 'N'::character varying, model_id integer NOT NULL, + in_signature_book boolean DEFAULT FALSE, + in_shipping boolean DEFAULT FALSE, custom_fields jsonb, linked_resources jsonb NOT NULL DEFAULT '[]', CONSTRAINT res_letterbox_pkey PRIMARY KEY (res_id) @@ -978,10 +980,11 @@ CREATE TABLE adr_letterbox id serial NOT NULL, res_id bigint NOT NULL, type character varying(32) NOT NULL, + relation INTEGER NOT NULL, docserver_id character varying(32) NOT NULL, path character varying(255) NOT NULL, filename character varying(255) NOT NULL, - fingerprint character varying(255) DEFAULT NULL::character varying, + fingerprint character varying(255) DEFAULT NULL, CONSTRAINT adr_letterbox_pkey PRIMARY KEY (id), CONSTRAINT adr_letterbox_unique_key UNIQUE (res_id, type) ) diff --git a/src/app/convert/controllers/ConvertPdfController.php b/src/app/convert/controllers/ConvertPdfController.php index 7bdbd9a08c1..2f2b73442b9 100755 --- a/src/app/convert/controllers/ConvertPdfController.php +++ b/src/app/convert/controllers/ConvertPdfController.php @@ -56,7 +56,7 @@ class ConvertPdfController { ValidatorModel::notEmpty($aArgs, ['collId', 'resId']); ValidatorModel::stringType($aArgs, ['collId']); - ValidatorModel::intVal($aArgs, ['resId']); + ValidatorModel::intVal($aArgs, ['resId', 'relation']); if ($aArgs['collId'] == 'letterbox_coll') { $resource = ResModel::getById(['resId' => $aArgs['resId'], 'select' => ['docserver_id', 'path', 'filename', 'format']]); @@ -123,6 +123,7 @@ class ConvertPdfController 'docserverId' => $storeResult['docserver_id'], 'path' => $storeResult['destination_dir'], 'filename' => $storeResult['file_destination_name'], + 'relation' => $aArgs['relation'] ?? 1, 'fingerprint' => $storeResult['fingerPrint'] ]); } else { diff --git a/src/app/convert/controllers/ConvertThumbnailController.php b/src/app/convert/controllers/ConvertThumbnailController.php index bdefdc66173..e304a3b0ca5 100755 --- a/src/app/convert/controllers/ConvertThumbnailController.php +++ b/src/app/convert/controllers/ConvertThumbnailController.php @@ -128,6 +128,7 @@ class ConvertThumbnailController 'docserverId' => $storeResult['docserver_id'], 'path' => $storeResult['destination_dir'], 'filename' => $storeResult['file_destination_name'], + 'relation' => 1 ]); } else { AdrModel::createAttachAdr([ diff --git a/src/app/convert/models/AdrModel.php b/src/app/convert/models/AdrModel.php index 4ee862b15ee..436dc743aa2 100755 --- a/src/app/convert/models/AdrModel.php +++ b/src/app/convert/models/AdrModel.php @@ -19,6 +19,25 @@ use SrcCore\models\ValidatorModel; class AdrModel { + public static function getDocuments(array $args) + { + ValidatorModel::notEmpty($args, ['select']); + ValidatorModel::arrayType($args, ['select', 'where', 'data', 'orderBy']); + ValidatorModel::intType($args, ['offset', 'limit']); + + $documents = DatabaseModel::select([ + 'select' => empty($args['select']) ? ['*'] : $args['select'], + 'table' => ['adr_letterbox'], + 'where' => empty($args['where']) ? [] : $args['where'], + 'data' => empty($args['data']) ? [] : $args['data'], + 'order_by' => empty($args['orderBy']) ? [] : $args['orderBy'], + 'offset' => empty($args['offset']) ? 0 : $args['offset'], + 'limit' => empty($args['limit']) ? 0 : $args['limit'] + ]); + + return $documents; + } + public static function getConvertedDocumentById(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['resId', 'type', 'collId']); @@ -87,21 +106,22 @@ class AdrModel return $adr[0]; } - public static function createDocumentAdr(array $aArgs) + public static function createDocumentAdr(array $args) { - ValidatorModel::notEmpty($aArgs, ['resId', 'docserverId', 'path', 'filename', 'type']); - ValidatorModel::stringType($aArgs, ['docserverId', 'path', 'filename', 'type', 'fingerprint']); - ValidatorModel::intVal($aArgs, ['resId']); + ValidatorModel::notEmpty($args, ['resId', 'docserverId', 'path', 'filename', 'type', 'relation']); + ValidatorModel::stringType($args, ['docserverId', 'path', 'filename', 'type', 'fingerprint']); + ValidatorModel::intVal($args, ['resId', 'relation']); DatabaseModel::insert([ 'table' => 'adr_letterbox', 'columnsValues' => [ - 'res_id' => $aArgs['resId'], - 'type' => $aArgs['type'], - 'docserver_id' => $aArgs['docserverId'], - 'path' => $aArgs['path'], - 'filename' => $aArgs['filename'], - 'fingerprint' => empty($aArgs['fingerprint']) ? null : $aArgs['fingerprint'], + 'res_id' => $args['resId'], + 'type' => $args['type'], + 'docserver_id' => $args['docserverId'], + 'path' => $args['path'], + 'filename' => $args['filename'], + 'relation' => $args['relation'], + 'fingerprint' => empty($args['fingerprint']) ? null : $args['fingerprint'] ] ]); diff --git a/src/app/resource/controllers/ResController.php b/src/app/resource/controllers/ResController.php index 4a3134b76fd..d3c7cdc3a96 100755 --- a/src/app/resource/controllers/ResController.php +++ b/src/app/resource/controllers/ResController.php @@ -89,7 +89,8 @@ class ResController if (!empty($body['encodedFile'])) { ConvertPdfController::convert([ 'resId' => $resId, - 'collId' => 'letterbox_coll' + 'collId' => 'letterbox_coll', + 'relation' => 1 ]); $customId = CoreConfigModel::getCustomId(); @@ -261,6 +262,22 @@ class ResController return $response->withStatus(400)->withJson(['errors' => $control['errors']]); } + $resource = ResModel::getById(['resId' => $args['resId'], 'select' => ['alt_identifier', 'filename', 'docserver_id', 'path', 'fingerprint']]); + $oldRelation = AdrModel::getDocuments(['select' => ['MAX(relation)'], 'where' => ['res_id = ?'], 'data' => [$args['resId']]]); + $relation = empty($oldRelation[0]['max']) ? 1 : ($oldRelation[0]['max'] + 1); + + if (!empty($resource['filename']) && !empty($body['encodedFile'])) { + AdrModel::createDocumentAdr([ + 'resId' => $args['resId'], + 'type' => 'DOC', + 'docserverId' => $resource['docserver_id'], + 'path' => $resource['path'], + 'filename' => $resource['filename'], + 'relation' => $relation - 1, + 'fingerprint' => $resource['fingerprint'] + ]); + } + $body['resId'] = $args['resId']; $resId = StoreController::storeResource($body); if (empty($resId) || !empty($resId['errors'])) { @@ -269,12 +286,11 @@ class ResController ResController::updateAdjacentData(['body' => $body, 'resId' => $args['resId']]); - $resource = ResModel::getById(['resId' => $args['resId'], 'select' => ['alt_identifier']]); if (!empty($body['encodedFile'])) { - AdrModel::deleteDocumentAdr(['where' => ['res_id = ?'], 'data' => [$args['resId']]]); ConvertPdfController::convert([ 'resId' => $args['resId'], - 'collId' => 'letterbox_coll' + 'collId' => 'letterbox_coll', + 'relation' => $relation ]); $customId = CoreConfigModel::getCustomId(); diff --git a/src/frontend/app/linkedResource/linked-resource-list.component.html b/src/frontend/app/linkedResource/linked-resource-list.component.html index 75581c53018..6d6c190a90f 100644 --- a/src/frontend/app/linkedResource/linked-resource-list.component.html +++ b/src/frontend/app/linkedResource/linked-resource-list.component.html @@ -24,6 +24,6 @@ </ng-container> <mat-row *matRowDef="let row; columns: displayedColumns;"></mat-row> </mat-table> -<button mat-fab class="linkRes" color="primary" [title]="lang.link" (click)="createAttachment()"> - <mat-icon class="fa fa-link" style="height:auto;"></mat-icon> -</button> +<!--<button mat-fab class="linkRes" color="primary" [title]="lang.link" (click)="createAttachment()">--> +<!-- <mat-icon class="fa fa-link" style="height:auto;"></mat-icon>--> +<!--</button>--> -- GitLab