From dccf1df831095d99f60897a39f0225797c8670ed Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Tue, 2 Jan 2024 23:34:18 +0000 Subject: [PATCH] update --- Admin/Install/Media/layout01.php | 46 +++++++------- Admin/Routes/Web/Backend.php | 11 ++++ Controller/BackendController.php | 46 ++++++++++++-- Docs/Dev/en/SUMMARY.md | 3 + Docs/Dev/en/structure.md | 5 ++ Docs/Dev/img/er.png | Bin 0 -> 8451 bytes Docs/introduction.md | 1 + Models/Label.php | 23 +++++-- Models/NullLabelLayout.php | 46 ++++++++++++++ Models/PermissionState.php | 2 +- Theme/Backend/Lang/Navigation.de.lang.php | 2 + Theme/Backend/Lang/Navigation.en.lang.php | 2 + Theme/Backend/layout-list.tpl.php | 72 ++++++++++++++++++++++ Theme/Backend/layout-view.tpl.php | 42 +++++++++++++ 14 files changed, 268 insertions(+), 33 deletions(-) create mode 100644 Docs/Dev/en/SUMMARY.md create mode 100644 Docs/Dev/en/structure.md create mode 100644 Docs/Dev/img/er.png create mode 100644 Docs/introduction.md create mode 100644 Models/NullLabelLayout.php create mode 100644 Theme/Backend/layout-view.tpl.php diff --git a/Admin/Install/Media/layout01.php b/Admin/Install/Media/layout01.php index e37ce6f..57b0ca4 100644 --- a/Admin/Install/Media/layout01.php +++ b/Admin/Install/Media/layout01.php @@ -56,12 +56,12 @@ $image = new Image(); $image->src = '/Modules/Labeling/Theme/icons/iso/2493.png'; $image->x = $margin - 15; $image->y = 250 + $margin - 50; -$image->x2 = $image->x + 150; -$image->y2 = 75 + $image->y; +$image->width = 150; +$image->height = 150; $l->elements[] = $image; $text = new Text(); -$text->text = '0123-4567-8910'; +$text->text = $item->number; $text->size = 40; $text->x = 150 + $margin; $text->y = 290 + $margin; @@ -72,12 +72,12 @@ $image = new Image(); $image->src = '/Modules/Labeling/Theme/icons/iso/2492.png'; $image->x = $margin - 15; $image->y = 350 + $margin - 50; -$image->x2 = $image->x + 150; -$image->y2 = 75 + $image->y; +$image->width = 150; +$image->height = 150; $l->elements[] = $image; $text = new Text(); -$text->text = '0123-4567-8910'; +$text->text = 'LOT-4567-8910'; $text->size = 40; $text->x = 150 + $margin; $text->y = 390 + $margin; @@ -88,12 +88,12 @@ $image = new Image(); $image->src = '/Modules/Labeling/Theme/icons/iso/2498.png'; $image->x = $margin - 15; $image->y = 450 + $margin - 50; -$image->x2 = $image->x + 150; -$image->y2 = 75 + $image->y; +$image->width = 150; +$image->height = 150; $l->elements[] = $image; $text = new Text(); -$text->text = '0123-4567-8910'; +$text->text = 'SN-4567-8910'; $text->size = 40; $text->x = 150 + $margin; $text->y = 490 + $margin; @@ -104,8 +104,8 @@ $image = new Image(); $image->src = '/Modules/Labeling/Theme/icons/iso/2497.png'; $image->x = $margin - 15; $image->y = 560 + $margin - 50; -$image->x2 = $image->x + 150; -$image->y2 = 75 + $image->y; +$image->width = 150; +$image->height = 150; $l->elements[] = $image; $text = new Text(); @@ -127,8 +127,8 @@ $image = new Image(); $image->src = '/Modules/Labeling/Theme/icons/iso/2607.png'; $image->x = $margin + 500; $image->y = 540 + $margin; -$image->x2 = $image->x + 100; -$image->y2 = 75 + $image->y; +$image->width = 100; +$image->height = 110; $l->elements[] = $image; $text = new Text(); @@ -145,12 +145,12 @@ $image = new Image(); $image->resource = $qr->get(); $image->x = 1000 + $margin; $image->y = 280 + $margin - 50; -$image->x2 = $image->x + 200; -$image->y2 = 75 + $image->y; +$image->width = 200; +$image->height = 200; $l->elements[] = $image; $text = new Text(); -$text->text = "(01)00000000000000\n(11)000000\n(17)000000\n(10)A000B0\n(21)0000"; +$text->text = "(01)GTIN\n(11)YYYY-MM-DD\n(17)YYYY-MM-DD\n(10)LOT-4567-8910\n(21)SN-4567-8910"; $text->size = 40; $text->x = 1230 + $margin; $text->y = 280 + $margin; @@ -173,8 +173,8 @@ $image = new Image(); $image->src = '/Modules/Labeling/Theme/icons/iso/3082.png'; $image->x = $margin - 15; $image->y = 660 + $margin; -$image->x2 = $image->x + 150; -$image->y2 = 75 + $image->y; +$image->width = 150; +$image->height = 150; $l->elements[] = $image; // address @@ -231,10 +231,10 @@ $l->elements[] = $text; // ce $image = new Image(); $image->src = '/Modules/Labeling/Theme/icons/iso/ce_mark.png'; -$image->x = 1400 + $margin; +$image->x = 1430 + $margin; $image->y = 680 + $margin; -$image->x2 = $image->x + 200; -$image->y2 = 200 + $image->y; +$image->width = 150; +$image->height = 150; $l->elements[] = $image; $text = new Text(); @@ -251,8 +251,8 @@ $image = new Image(); $image->resource = $qr->get(); $image->x = 1620 + $margin; $image->y = 680 + $margin; -$image->x2 = $image->x + 180; -$image->y2 = 180 + $image->y; +$image->width = 180; +$image->height = 180; $l->elements[] = $image; return $l; diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 474fd4a..68aa339 100644 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -28,6 +28,17 @@ return [ ], ], ], + '^.*/warehouse/labeling/layout\?.*$' => [ + [ + 'dest' => '\Modules\Labeling\Controller\BackendController:viewLayout', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::MODULE_NAME, + 'type' => PermissionType::READ, + 'state' => PermissionState::LABEL, + ], + ], + ], '^.*/warehouse/labeling/layout/list.*$' => [ [ 'dest' => '\Modules\Labeling\Controller\BackendController:viewItemLabelList', diff --git a/Controller/BackendController.php b/Controller/BackendController.php index a25e29d..c69e369 100644 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -17,6 +17,7 @@ namespace Modules\Labeling\Controller; use Modules\ItemManagement\Models\ItemMapper; use Modules\Labeling\Models\LabelLayoutMapper; use phpOMS\Contract\RenderableInterface; +use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; use phpOMS\Views\View; @@ -32,7 +33,7 @@ use phpOMS\Views\View; final class BackendController extends Controller { /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -63,7 +64,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -98,7 +99,7 @@ final class BackendController extends Controller } /** - * Routing end-point for application behaviour. + * Routing end-point for application behavior. * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response @@ -125,7 +126,44 @@ final class BackendController extends Controller $view->data['item'] = $item; - /** @var \Modules\Labeling\Models\LabelLayout[] $layout */ + $query = new Builder($this->app->dbPool->get()); + $results = $query->raw('SELECT labeling_layout_item_src FROM labeling_layout_item WHERE labeling_layout_item_dst = ' . ((int) $request->getData('id'))) + ->execute() + ?->fetchAll(\PDO::FETCH_COLUMN); + + /** @var \Modules\Labeling\Models\LabelLayout[] $layouts */ + $layouts = LabelLayoutMapper::getAll() + ->with('l11n') + ->with('template') + ->with('template/sources') + ->where('l11n/language', $response->header->l11n->language) + ->where('id', $results, 'IN') + ->execute(); + + $view->data['layouts'] = $layouts; + + return $view; + } + + /** + * Routing end-point for application behavior. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewLayout(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/Labeling/Theme/Backend/layout-view'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1005701001, $request, $response); + + /** @var \Modules\Labeling\Models\LabelLayout[] $layouts */ $layout = LabelLayoutMapper::get() ->with('l11n') ->with('template') diff --git a/Docs/Dev/en/SUMMARY.md b/Docs/Dev/en/SUMMARY.md new file mode 100644 index 0000000..8a97952 --- /dev/null +++ b/Docs/Dev/en/SUMMARY.md @@ -0,0 +1,3 @@ +# Developer Content + +* [Structure]({%}&page=Dev/structure) diff --git a/Docs/Dev/en/structure.md b/Docs/Dev/en/structure.md new file mode 100644 index 0000000..09fa746 --- /dev/null +++ b/Docs/Dev/en/structure.md @@ -0,0 +1,5 @@ +# Structure + +## ER + +![ER](Modules/Labeling/Docs/Dev/img/er.png) \ No newline at end of file diff --git a/Docs/Dev/img/er.png b/Docs/Dev/img/er.png new file mode 100644 index 0000000000000000000000000000000000000000..8466f327a12bf8d8e91232f58bdb527b6145ee2f GIT binary patch literal 8451 zcmb7qc|4SR`#%X~FCkl!5VCJ&Y$YV32+5u`YqAWPNl3_+vP8xbl074&VT6!vY*_|l z?Au_hW5!s1_ndQ{bH3+!&hz`ezW*?<`P}#CzV7RKU+?REU7v}*W2no_z{5aAMa8Ul z^M)}M6?H!F`RK$k;O|7g%{Ud+`3}7s*X{*otiq1U&uQ1UiD{EAFr-SHA88djk$6Y# z!B^S=8`ReJ9puPkz0Ok)cwDdC`ypMBsgR!j-nF=vFYjis*pFi9Y2S#6TZ=8h&)lY2 z)7fIMZ#q|559v3<^=KvN6_#1YgEG-DQdbQI4GkcqEp(BSnb*)T7!18umx0DC$h+J= zMy1JO99Jh)PpD ziMUo`td_`tRf3*)mk?t&}g^B(hw*zJCBJDmD3WIsMmOakyeJKI&3zRp{kgkOFV}BmE?$ z`^ns+F)m{F8@WsA`&BaK${8fD3r~VxpE#w_@V1^WMntajwUp@u*=HNC0RBvq+|>bb z5i?l3U1*ozldAvN70WT$=l{x$;)7#*D3{y;u(3ds!57&DglXrcs|t%CeS5g#9R4}d zcd){){utoV7uC?3y>AH|B0@AeoxM9rf?V*sojHyk_nlPT#hAEk%E4jt25psc-Xvnh zVc?KyTi6Z*W&1GF+GKG`+~EO;q;%~{enZSbjs~uvS?y?JyiIy^4?n5tp`3a14p@e)NEb-brisB^hy^IHNb&i;;fX?dIop`BiY zid{0I!e!Mqafed_3pa3l6P$0 z;l~@v)$zwvv24;<|L<@*Ah3TdLFj>d0QmjKJ-;s`L)&JqZ0zvjCj>8mD*P+JEsf^p z>LiK8*ghB@rW*9b#~y(mVF;)--V-oRH(lj>2r5+ET4jv!aPUT2LM{WZm6MKt*QEY= zA&QOL68(7zWhkYd=uw35X)XolErBvCO=Y+9Xxm?2m4?u3QV&AFTLm=%bm;>;OqH3_ zh`50V>CRB|ba;1(0v&g%M5{ddHSlV8mQ@?%p~DIH_7`hf_7ItYb3&~6+>?&OvC7vB zkMLgA#lw~tdC8Gqjo%#d+g`2x`iWnkwMr=v97M#9lHjI^MY%jCt`T|5N2@A@XKRM)lt5XWH_W%&QwTHF^2Ncg|Dh>3;IfrySHfu;^M?21_ErnT$Dq-6lEX1Em znJX7%tHPPW6@yZ)*_XKFU_OP#zc02Ubi8p-Bo&94)ea_Kl`M6UJ`K2ACJ9e;Kq!ta zpn_KlhL*%iZo>#pUm|_1gN?-S`ClQr1{a?i)g>b6{IuuV6J-5{74=7A@g>RK^7*En zte1g=+?fKs7SSRZ21|CPfa%T<4Fi69NDJH>UhEmZPDB}J*0I%}TXmz`hSkFXHo0xm z4fcq-rJ>pP)VIm+VT)_r*0NonnuxI0*TyNv>#F(4N|xjN0iTl!v@%0DREvC>c^S{l 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 IuG@wEKeR4U2LJ#7 literal 0 HcmV?d00001 diff --git a/Docs/introduction.md b/Docs/introduction.md new file mode 100644 index 0000000..e10b99d --- /dev/null +++ b/Docs/introduction.md @@ -0,0 +1 @@ +# Introduction diff --git a/Models/Label.php b/Models/Label.php index 047facf..23e3371 100644 --- a/Models/Label.php +++ b/Models/Label.php @@ -133,9 +133,9 @@ class Label // should crop if ($element->x1 !== 0 || $element->x2 !== 0 || $element->y1 !== 0 || $element->y2 !== 0) { $cropped = \imagecrop($in, [ - 'x' => $element->x1, - 'y' => $element->y1, - 'width' => $element->x2 === 0 ? $srcW - $element->x1 : $element->x2 - $element->x1, + 'x' => $element->x1, + 'y' => $element->y1, + 'width' => $element->x2 === 0 ? $srcW - $element->x1 : $element->x2 - $element->x1, 'height' => $element->y2 === 0 ? $srcH - $element->y1 : $element->y2 - $element->y1, ]); @@ -175,8 +175,21 @@ class Label // should resize if ($element->ratio !== 0.0 || $element->width !== 0 || $element->height !== 0) { - $ratioX = $element->ratio === 0.0 ? ($element->width - $element->x) / $srcW : $element->ratio; - $ratioY = $element->ratio === 0.0 ? ($element->height - $element->y) / $srcH : $element->ratio; + $ratioX = $element->ratio === 0.0 ? $element->width / $srcW : $element->ratio; + $ratioY = $element->ratio === 0.0 ? $element->height / $srcH : $element->ratio; + + $ratioX = \abs($ratioX); + $ratioY = \abs($ratioY); + + if ($ratioX === 0.0) { + $ratioX = $ratioY; + } + + if ($ratioY === 0.0) { + $ratioY = $ratioX; + } + + // @todo handle use original width or height but resize height or width. $newW = (int) ($srcW * $ratioX); $newH = (int) ($srcH * $ratioY); diff --git a/Models/NullLabelLayout.php b/Models/NullLabelLayout.php new file mode 100644 index 0000000..ca75cf4 --- /dev/null +++ b/Models/NullLabelLayout.php @@ -0,0 +1,46 @@ +id = $id; + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/PermissionState.php b/Models/PermissionState.php index 56ff55c..8fc638c 100644 --- a/Models/PermissionState.php +++ b/Models/PermissionState.php @@ -17,7 +17,7 @@ namespace Modules\Labeling\Models; use phpOMS\Stdlib\Base\Enum; /** - * Permision state enum. + * Permission category enum. * * @package Modules\Labeling\Models * @license OMS License 2.0 diff --git a/Theme/Backend/Lang/Navigation.de.lang.php b/Theme/Backend/Lang/Navigation.de.lang.php index a68c5be..9e3382a 100644 --- a/Theme/Backend/Lang/Navigation.de.lang.php +++ b/Theme/Backend/Lang/Navigation.de.lang.php @@ -15,4 +15,6 @@ declare(strict_types=1); return ['Navigation' => [ 'Labeling' => 'Etikettierung', 'List' => 'Liste', + 'Layouts' => 'Designs', + 'Name' => 'Name', ]]; diff --git a/Theme/Backend/Lang/Navigation.en.lang.php b/Theme/Backend/Lang/Navigation.en.lang.php index b30cb23..4424c3e 100644 --- a/Theme/Backend/Lang/Navigation.en.lang.php +++ b/Theme/Backend/Lang/Navigation.en.lang.php @@ -15,4 +15,6 @@ declare(strict_types=1); return ['Navigation' => [ 'Labeling' => 'Labeling', 'List' => 'List', + 'Layouts' => 'Layouts', + 'Name' => 'Name', ]]; diff --git a/Theme/Backend/layout-list.tpl.php b/Theme/Backend/layout-list.tpl.php index e69de29..12abc53 100644 --- a/Theme/Backend/layout-list.tpl.php +++ b/Theme/Backend/layout-list.tpl.php @@ -0,0 +1,72 @@ +data['layouts'] ?? []; + +echo $this->data['nav']->render(); ?> + +
+
+
+
getHtml('Layouts'); ?>download
+
+ + + + + $value) : ++$count; + $url = UriFactory::build('{/base}/warehouse/labeling/layout?id=' . $value->id); + ?> + +
+ getHtml('ID', '0', '0'); ?> + + + + getHtml('Name'); ?> + + + +
+ id; ?> + printHtml($value->l11n); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+
+
+
+
diff --git a/Theme/Backend/layout-view.tpl.php b/Theme/Backend/layout-view.tpl.php new file mode 100644 index 0000000..b5a3a7b --- /dev/null +++ b/Theme/Backend/layout-view.tpl.php @@ -0,0 +1,42 @@ +data['nav']->render(); + +$layout = $this->data['layout']; + +$media = $layout->template; +$template = \reset($media->sources); + +$layout = include_once $template->getAbsolutePath(); + +\ob_start(); +\imagepng($layout->render()); +$imageData = \ob_get_clean(); + +$imageBase64 = \base64_encode($imageData); +// Get the image MIME type +$imageType = 'image/png'; // Assuming JPEG format in this example + +// Generate the data URI for the inline image +$inlineImage = 'data:' . $imageType . ';base64,' . $imageBase64; +?> + +
+
+
+ Inline Image +
+
+
\ No newline at end of file