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