From 705548c16248514ed38a7c81d5ad5f5fe8d17567 Mon Sep 17 00:00:00 2001
From: "florian.azizian" <florian.azizian@maarch.org>
Date: Mon, 28 Dec 2020 16:53:50 +0100
Subject: [PATCH] FEAT #15116 TIME 2:30 set height for date

---
 .../controllers/DocumentController.php        | 21 +++++----
 src/app/workflow/models/WorkflowModel.php     |  3 +-
 .../app/document/document.component.ts        |  1 -
 src/frontend/app/service/actions.service.ts   |  1 +
 .../app/signatures/signatures.component.ts    | 43 +++++++++++--------
 5 files changed, 41 insertions(+), 28 deletions(-)

diff --git a/src/app/document/controllers/DocumentController.php b/src/app/document/controllers/DocumentController.php
index 67c15d1827..1ce9d06621 100755
--- a/src/app/document/controllers/DocumentController.php
+++ b/src/app/document/controllers/DocumentController.php
@@ -343,7 +343,7 @@ class DocumentController
                 foreach ($workflow['datePositions'] as $keyDP => $datePosition) {
                     if (empty($datePosition['positionX']) || empty($datePosition['positionY']) || empty($datePosition['page'])) {
                         return $response->withStatus(400)->withJson(['errors' => "Body workflow[{$key}][datePositions][{$keyDP}] is wrong formatted"]);
-                    } elseif (empty($datePosition['color']) || empty($datePosition['font']) || empty($datePosition['format']) || empty($datePosition['size'])) {
+                    } elseif (empty($datePosition['color']) || empty($datePosition['font']) || empty($datePosition['format']) || empty($datePosition['width'])) {
                         return $response->withStatus(400)->withJson(['errors' => "Body workflow[{$key}][datePositions][{$keyDP}] is wrong formatted"]);
                     }
                 }
@@ -452,7 +452,8 @@ class DocumentController
                     'mode'                  => $workflow['mode'],
                     'order'                 => $key + 1,
                     'signatureMode'         => $workflow['signatureMode'],
-                    'signaturePositions'    => empty($workflow['signaturePositions']) ? '[]' : json_encode($workflow['signaturePositions'])
+                    'signaturePositions'    => empty($workflow['signaturePositions']) ? '[]' : json_encode($workflow['signaturePositions']),
+                    'datePositions'         => empty($workflow['datePositions']) ? '[]' : json_encode($workflow['datePositions'])
                 ]);
             }
 
@@ -1100,13 +1101,15 @@ class DocumentController
                         $affectedPages[] = $i;
                     }
                     if ($signature['positionX'] == 0 && $signature['positionY'] == 0) {
-                        $signWidth = $size['width'];
-                        $signPosX = 0;
-                        $signPosY = 0;
+                        $signWidth  = $size['width'];
+                        $signPosX   = 0;
+                        $signPosY   = 0;
+                        $signHeight = null;
                     } else {
-                        $signWidth = ($signature['width'] * $size['width']) / 100;
-                        $signPosX = ($signature['positionX'] * $size['width']) / 100;
-                        $signPosY = ($signature['positionY'] * $size['height']) / 100;
+                        $signWidth  = ($signature['width'] * $size['width']) / 100;
+                        $signHeight = ($signature['height'] * $size['height']) / 100;
+                        $signPosX   = ($signature['positionX'] * $size['width']) / 100;
+                        $signPosY   = ($signature['positionY'] * $size['height']) / 100;
                     }
                     if ($signature['type'] == 'SVG') {
                         $image = str_replace('data:image/svg+xml;base64,', '', $signature['encodedImage']);
@@ -1117,7 +1120,7 @@ class DocumentController
 
                         $imageTmpPath = $tmpPath . $GLOBALS['id'] . '_' . rand() . '_writing.svg';
                         file_put_contents($imageTmpPath, $image);
-                        $pdf->ImageSVG($imageTmpPath, $signPosX, $signPosY, $signWidth);
+                        $pdf->ImageSVG($imageTmpPath, $signPosX, $signPosY, $signWidth, $signHeight);
                     } else {
                         $image = base64_decode($signature['encodedImage']);
                         if ($image === false) {
diff --git a/src/app/workflow/models/WorkflowModel.php b/src/app/workflow/models/WorkflowModel.php
index 487e54af39..ca6121ad01 100755
--- a/src/app/workflow/models/WorkflowModel.php
+++ b/src/app/workflow/models/WorkflowModel.php
@@ -86,7 +86,7 @@ class WorkflowModel
     {
         ValidatorModel::notEmpty($args, ['userId', 'mainDocumentId', 'mode', 'order', 'signatureMode']);
         ValidatorModel::intVal($args, ['userId', 'mainDocumentId', 'order']);
-        ValidatorModel::stringType($args, ['mode', 'signatureMode', 'signaturePositions']);
+        ValidatorModel::stringType($args, ['mode', 'signatureMode', 'signaturePositions', 'datePositions']);
 
         DatabaseModel::insert([
             'table'         => 'workflows',
@@ -96,6 +96,7 @@ class WorkflowModel
                 'mode'                  => $args['mode'],
                 'signature_mode'        => $args['signatureMode'],
                 'signature_positions'   => $args['signaturePositions'],
+                'date_positions'        => $args['datePositions'],
                 '"order"'               => $args['order']
             ]
         ]);
diff --git a/src/frontend/app/document/document.component.ts b/src/frontend/app/document/document.component.ts
index 134578861f..c72a6dcab2 100755
--- a/src/frontend/app/document/document.component.ts
+++ b/src/frontend/app/document/document.component.ts
@@ -337,7 +337,6 @@ export class DocumentComponent implements OnInit {
                                 item.userSignatureModes.unshift('visa');
                                 return {
                                     ...item,
-                                    'datePositions': [],
                                     'role': item.mode === 'visa' ? 'visa' : item.signatureMode,
                                     'modes': item.userSignatureModes
                                 };
diff --git a/src/frontend/app/service/actions.service.ts b/src/frontend/app/service/actions.service.ts
index ed204e74e1..163414e0ca 100644
--- a/src/frontend/app/service/actions.service.ts
+++ b/src/frontend/app/service/actions.service.ts
@@ -88,6 +88,7 @@ export class ActionsService {
                         {
                             'encodedImage': date.content.replace('data:image/svg+xml;base64,', ''),
                             'width': date.width,
+                            'height': date.height,
                             'positionX': date.positionX,
                             'positionY': date.positionY,
                             'type': 'SVG',
diff --git a/src/frontend/app/signatures/signatures.component.ts b/src/frontend/app/signatures/signatures.component.ts
index 62a18402b6..26fa8f4195 100755
--- a/src/frontend/app/signatures/signatures.component.ts
+++ b/src/frontend/app/signatures/signatures.component.ts
@@ -129,10 +129,10 @@ export class SignaturesComponent implements OnInit {
                 this.storeSignature(signature, this.signaturesService.currentPage);
             }
 
-            signPosOtherPage.forEach((postion: any) => {
-                signature.positionX = postion.positionX;
-                signature.positionY = postion.positionY;
-                this.storeSignature(signature, postion.page);
+            signPosOtherPage.forEach((position: any) => {
+                signature.positionX = position.positionX;
+                signature.positionY = position.positionY;
+                this.storeSignature(signature, position.page);
             });
 
             if (this.currentWorflow.signaturePositions.length === 1) {
@@ -152,16 +152,17 @@ export class SignaturesComponent implements OnInit {
     }
 
     addNewDate() {
-        const dateBlock: any = {
-            width: (130 * 100) / this.signaturesService.workingAreaWidth,
-            height: (30 * 100) / this.signaturesService.workingAreaHeight,
-            positionX: 0,
-            positionY: 0
-        };
         const datePosCurrentPage = this.currentWorflow.datePositions.filter((item: any) => item.page === this.signaturesService.currentPage);
         const datePosOtherPage = this.currentWorflow.datePositions.filter((item: any) => item.page !== this.signaturesService.currentPage);
 
-        if (!this.datePosMode || (datePosCurrentPage.length === 0 && datePosOtherPage.length === 0)) {
+        if (datePosCurrentPage.length === 0 && datePosOtherPage.length === 0) {
+            let dateBlock: any = {
+                width: (130 * 100) / this.signaturesService.workingAreaWidth,
+                height: (30 * 100) / this.signaturesService.workingAreaHeight,
+                positionX: 0,
+                positionY: 0
+            };
+
             dateBlock.positionX = 130;
             dateBlock.positionY = 30;
             this.storeDate(dateBlock, this.signaturesService.currentPage);
@@ -173,15 +174,23 @@ export class SignaturesComponent implements OnInit {
             this.modalController.dismiss('success');
         } else {
             if (datePosCurrentPage.length > 0) {
-                dateBlock.positionX = datePosCurrentPage[0].positionX;
-                dateBlock.positionY = datePosCurrentPage[0].positionY;
+                let dateBlock: any = {
+                    width: datePosCurrentPage[0].width,
+                    height: datePosCurrentPage[0].height,
+                    positionX: datePosCurrentPage[0].positionX,
+                    positionY: datePosCurrentPage[0].positionY
+                };
                 this.storeDate(dateBlock, this.signaturesService.currentPage);
             }
 
-            datePosOtherPage.forEach((postion: any) => {
-                dateBlock.positionX = postion.positionX;
-                dateBlock.positionY = postion.positionY;
-                this.storeDate(dateBlock, postion.page);
+            datePosOtherPage.forEach((position: any) => {
+                let dateBlock: any = {
+                    width: position.width,
+                    height: position.height,
+                    positionX: position.positionX,
+                    positionY: position.positionY
+                };
+                this.storeDate(dateBlock, position.page);
             });
 
             if (this.currentWorflow.signaturePositions.length === 1) {
-- 
GitLab