Merge pull request #1 from Karaka-Management/develop

Merge
This commit is contained in:
Dennis Eichhorn 2023-09-30 02:01:17 +02:00 committed by GitHub
commit 1490da3a2a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3795 changed files with 8933 additions and 0 deletions

35
.github/dev_bug_report.md vendored Normal file
View File

@ -0,0 +1,35 @@
---
name: Dev Bug Report
about: Create a report to help us improve
title: ''
labels: stat_backlog, type_bug
assignees: ''
---
# Bug Description
A clear and concise description of what the bug is.
# How to Reproduce
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
## Minimal Code Example
```
// your code ...
```
# Expected Behavior
A clear and concise description of what you expected to happen.
# Screenshots
If applicable, add screenshots to help explain your problem.
# Additional Information
Add any other context about the problem here.

18
.github/dev_feature_request.md vendored Normal file
View File

@ -0,0 +1,18 @@
---
name: Dev Feature Request
about: Suggest an idea for this project
title: ''
labels: stat_backlog, type_feature
assignees: ''
---
# What is the feature you request
* A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
* A clear and concise description of what you want to happen.
# Alternatives
A clear and concise description of any alternative solutions or features you've considered.
# Additional Information
Add any other context or screenshots about the feature request here.

40
.github/user_bug_report.md vendored Normal file
View File

@ -0,0 +1,40 @@
---
name: User Bug Report
about: Create a report to help us improve
title: ''
labels: stat_backlog, type_bug
assignees: ''
---
# Bug Description
A clear and concise description of what the bug is.
# How to Reproduce
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
# Expected Behavior
A clear and concise description of what you expected to happen.
# Screenshots
If applicable, add screenshots to help explain your problem.
# System Information
- System: [e.g. PC or iPhone11, ...]
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- KarakaVersion [e.g. 22]
# Additional Information
Add any other context about the problem here.

21
.github/user_feature_request.md vendored Normal file
View File

@ -0,0 +1,21 @@
---
name: User Feature Request
about: Suggest an idea for this project
title: ''
labels: stat_backlog, type_feature
assignees: ''
---
# What is the feature you request
* A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
* A clear and concise description of what you want to happen.
# Alternatives
A clear and concise description of any alternative solutions or features you've considered.
# Additional Information
Add any other context or screenshots about the feature request here.

13
.github/workflows/greetings.yml vendored Normal file
View File

@ -0,0 +1,13 @@
name: Greetings
on: [pull_request, issues]
jobs:
greeting:
runs-on: ubuntu-latest
steps:
- uses: actions/first-interaction@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-message: 'Thank you for createing this issue. We will check it as soon as possible.'
pr-message: 'Thank you for your pull request. We will check it as soon as possible.'

10
.github/workflows/image.yml vendored Normal file
View File

@ -0,0 +1,10 @@
name: Image optimization
on: [push, pull_request]
jobs:
general_image_workflow:
uses: Karaka-Management/Karaka/.github/workflows/image.yml@develop
secrets:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_PAT: ${{ secrets.GH_PAT }}

20
.github/workflows/main.yml vendored Normal file
View File

@ -0,0 +1,20 @@
name: CI
on:
push:
branches:
- master
- develop
pull_request:
branches:
- master
- develop
schedule:
- cron: '0 0 1,15 * *'
jobs:
general_module_workflow:
uses: Karaka-Management/Karaka/.github/workflows/php_template.yml@develop
secrets:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GH_PAT: ${{ secrets.GH_PAT }}

15
.gitignore vendored Normal file
View File

@ -0,0 +1,15 @@
Build
*.cache
.directory
Vagrantfile
vendor
bower_components
node_modules
*.log
.vagrant
.vscode
.sass-cache
cache
Cache
Libraries
.idea

View File

@ -0,0 +1,9 @@
[
{
"type": "setting",
"name": "1005700001",
"content": "1",
"pattern": "",
"module": "Labeling"
}
]

43
Admin/Install/Admin.php Normal file
View File

@ -0,0 +1,43 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Admin\Install
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\Labeling\Admin\Install;
use phpOMS\Application\ApplicationAbstract;
/**
* Admin class.
*
* @package Modules\Labeling\Admin\Install
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
class Admin
{
/**
* Install Admin providing
*
* @param ApplicationAbstract $app Application
* @param string $path Module path
*
* @return void
*
* @since 1.0.0
*/
public static function install(ApplicationAbstract $app, string $path) : void
{
\Modules\Admin\Admin\Installer::installExternal($app, ['path' => __DIR__ . '/Admin.install.json']);
}
}

View File

@ -0,0 +1,23 @@
[
{
"type": "collection",
"create_directory": true,
"name": "Labeling",
"virtualPath": "/Modules",
"user": 1
},
{
"type": "collection",
"create_directory": true,
"name": "Templates",
"virtualPath": "/Modules/Labeling",
"user": 1
},
{
"type": "collection",
"create_directory": true,
"name": "Default",
"virtualPath": "/Modules/Billing",
"user": 1
}
]

43
Admin/Install/Media.php Normal file
View File

@ -0,0 +1,43 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Admin\Install
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\Labeling\Admin\Install;
use phpOMS\Application\ApplicationAbstract;
/**
* Media class.
*
* @package Modules\Labeling\Admin\Install
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
class Media
{
/**
* Install media providing
*
* @param ApplicationAbstract $app Application
* @param string $path Module path
*
* @return void
*
* @since 1.0.0
*/
public static function install(ApplicationAbstract $app, string $path) : void
{
$media = \Modules\Media\Admin\Installer::installExternal($app, ['path' => __DIR__ . '/Media.install.json']);
}
}

View File

@ -0,0 +1,258 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
use Modules\Labeling\Models\Image;
use Modules\Labeling\Models\Label;
use Modules\Labeling\Models\Shape;
use Modules\Labeling\Models\Text;
use phpOMS\Utils\Barcode\Datamatrix;
use phpOMS\Utils\Barcode\QR;
$margin = 50;
$l = new Label();
/** @var \Modules\ItemManagement\Models\Item $item */
// top
$text = new Text();
$text->text = $item->getL11n('name1')->content;
$text->size = 80;
$text->x = $margin;
$text->y = 80 + $margin;
$l->elements[] = $text;
// sub
$text = new Text();
$text->text = $item->getL11n('name2')->content;
$text->size = 50;
$text->x = $margin;
$text->y = 170 + $margin;
$l->elements[] = $text;
$line = new Shape();
$line->type = 1;
$line->borderThickness = 5;
$line->x = $margin;
$line->y = 200 + $margin;
$line->x2 = (int) ((37.8 * $l->width) - $margin);
$line->y2 = $line->y;
$l->elements[] = $line;
// facts
// REF
$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;
$l->elements[] = $image;
$text = new Text();
$text->text = '0123-4567-8910';
$text->size = 40;
$text->x = 150 + $margin;
$text->y = 290 + $margin;
$l->elements[] = $text;
// LOT
$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;
$l->elements[] = $image;
$text = new Text();
$text->text = '0123-4567-8910';
$text->size = 40;
$text->x = 150 + $margin;
$text->y = 390 + $margin;
$l->elements[] = $text;
// SN
$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;
$l->elements[] = $image;
$text = new Text();
$text->text = '0123-4567-8910';
$text->size = 40;
$text->x = 150 + $margin;
$text->y = 490 + $margin;
$l->elements[] = $text;
// manufactured
$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;
$l->elements[] = $image;
$text = new Text();
$text->text = 'YYYY-MM-DD';
$text->size = 40;
$text->x = 150 + $margin;
$text->y = 610 + $margin;
$l->elements[] = $text;
$text = new Text();
$text->text = 'DE';
$text->size = 20;
$text->x = $margin + 40;
$text->y = 625 + $margin;
$l->elements[] = $text;
// use by date
$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;
$l->elements[] = $image;
$text = new Text();
$text->text = 'YYYY-MM-DD';
$text->size = 40;
$text->x = 600 + $margin;
$text->y = 610 + $margin;
$l->elements[] = $text;
// QR
$qr = new Datamatrix('https://jingga.app', 200, 200);
$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;
$l->elements[] = $image;
$text = new Text();
$text->text = "(01)00000000000000\n(11)000000\n(17)000000\n(10)A000B0\n(21)0000";
$text->size = 40;
$text->x = 1230 + $margin;
$text->y = 280 + $margin;
$l->elements[] = $text;
// Footer
// line
$line = new Shape();
$line->type = 1;
$line->borderThickness = 5;
$line->x = $margin;
$line->y = 660 + $margin;
$line->x2 = (int) ((37.8 * $l->width) - $margin);
$line->y2 = $line->y;
$l->elements[] = $line;
// manufacturer
$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;
$l->elements[] = $image;
// address
$text = new Text();
$text->text = 'Jingga e. K.';
$text->size = 30;
$text->x = 150 + $margin;
$text->y = 710 + $margin;
$l->elements[] = $text;
$text = new Text();
$text->text = 'Kirchstr. 33';
$text->size = 30;
$text->x = 150 + $margin;
$text->y = 760 + $margin;
$l->elements[] = $text;
$text = new Text();
$text->text = '61191 Rosbach';
$text->size = 30;
$text->x = 150 + $margin;
$text->y = 810 + $margin;
$l->elements[] = $text;
$text = new Text();
$text->text = 'Germany';
$text->size = 30;
$text->x = 150 + $margin;
$text->y = 860 + $margin;
$l->elements[] = $text;
// contact
$text = new Text();
$text->text = 'www.jingga.app';
$text->size = 30;
$text->x = 600 + $margin;
$text->y = 710 + $margin;
$l->elements[] = $text;
$text = new Text();
$text->text = 'info@jingga.app';
$text->size = 30;
$text->x = 600 + $margin;
$text->y = 760 + $margin;
$l->elements[] = $text;
$text = new Text();
$text->text = '+49 0123 456789';
$text->size = 30;
$text->x = 600 + $margin;
$text->y = 810 + $margin;
$l->elements[] = $text;
// ce
$image = new Image();
$image->src = '/Modules/Labeling/Theme/icons/iso/ce_mark.png';
$image->x = 1400 + $margin;
$image->y = 680 + $margin;
$image->x2 = $image->x + 200;
$image->y2 = 200 + $image->y;
$l->elements[] = $image;
$text = new Text();
$text->text = '0123';
$text->size = 45;
$text->x = 1430 + $margin;
$text->y = 850 + $margin;
$l->elements[] = $text;
// qr
$qr = new QR('https://jingga.app', 200, 200);
$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;
$l->elements[] = $image;
return $l;

View File

@ -0,0 +1,48 @@
[
{
"id": 1005701001,
"pid": "/",
"type": 2,
"subtype": 1,
"name": "Labeling",
"uri": "{/base}/warehouse/labeling/item/list?{?}",
"target": "self",
"icon": null,
"order": 1,
"from": "Labeling",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1001301001,
"children": [
{
"id": 1005702001,
"pid": "/warehouse/labeling",
"type": 3,
"subtype": 1,
"name": "Items",
"uri": "{/base}/warehouse/labeling/item/list?{?}",
"target": "self",
"icon": null,
"order": 1,
"from": "Labeling",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1005701001,
"children": []
},
{
"id": 1005703001,
"pid": "/warehouse/labeling",
"type": 3,
"subtype": 5,
"name": "Layouts",
"uri": "{/base}/warehouse/labeling/layout/list?{?}",
"target": "self",
"icon": null,
"order": 1,
"from": "Labeling",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1005701001,
"children": []
}
]
}
]

View File

@ -0,0 +1,43 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Admin\Install
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Admin\Install;
use phpOMS\Application\ApplicationAbstract;
/**
* Navigation class.
*
* @package Modules\Labeling\Admin\Install
* @license OMS License 2.0
* @link https://orange-management.org
* @since 1.0.0
*/
class Navigation
{
/**
* Install navigation providing
*
* @param ApplicationAbstract $app Application
* @param string $path Module path
*
* @return void
*
* @since 1.0.0
*/
public static function install(ApplicationAbstract $app, string $path) : void
{
\Modules\Navigation\Admin\Installer::installExternal($app, ['path' => __DIR__ . '/Navigation.install.json']);
}
}

80
Admin/Install/db.json Normal file
View File

@ -0,0 +1,80 @@
{
"labeling_layout": {
"name": "labeling_layout",
"fields": {
"labeling_layout_id": {
"name": "labeling_layout_id",
"type": "INT",
"null": false,
"primary": true,
"autoincrement": true
},
"labeling_layout_template": {
"name": "labeling_layout_template",
"type": "INT",
"null": true,
"default": null,
"foreignTable": "media",
"foreignKey": "media_id"
}
}
},
"labeling_layout_l11n": {
"name": "labeling_layout_l11n",
"fields": {
"labeling_layout_l11n_id": {
"name": "labeling_layout_l11n_id",
"type": "INT",
"null": false,
"primary": true,
"autoincrement": true
},
"labeling_layout_l11n_name": {
"name": "labeling_layout_l11n_name",
"type": "VARCHAR(255)",
"null": false
},
"labeling_layout_l11n_type": {
"name": "labeling_layout_l11n_type",
"type": "INT",
"null": false,
"foreignTable": "labeling_layout",
"foreignKey": "labeling_layout_id"
},
"labeling_layout_l11n_language": {
"name": "labeling_layout_l11n_language",
"type": "VARCHAR(2)",
"default": null,
"null": true,
"foreignTable": "language",
"foreignKey": "language_639_1"
}
}
},
"labeling_layout_item": {
"name": "labeling_layout_item",
"fields": {
"labeling_layout_item_id": {
"name": "labeling_layout_item_id",
"type": "INT",
"null": false,
"primary": true,
"autoincrement": true
},
"labeling_layout_item_src": {
"name": "labeling_layout_item_src",
"type": "INT",
"null": false,
"foreignTable": "labeling_layout",
"foreignKey": "labeling_layout_id"
},
"labeling_layout_item_dst": {
"name": "labeling_layout_item_dst",
"type": "INT",
"null": false,
"foreignTable": "itemmgmt_item",
"foreignKey": "itemmgmt_item_id"
}
}
}
}

View File

@ -0,0 +1,12 @@
[
{
"type": "layout",
"files": [
"/Modules/Labeling/Admin/Install/Media/layout01.php"
],
"l11n": {
"en": "Default 01",
"de": "Standard 01"
}
}
]

139
Admin/Installer.php Normal file
View File

@ -0,0 +1,139 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Admin
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Admin;
use phpOMS\Application\ApplicationAbstract;
use phpOMS\Config\SettingsInterface;
use phpOMS\Message\Http\HttpRequest;
use phpOMS\Message\Http\HttpResponse;
use phpOMS\Module\InstallerAbstract;
use phpOMS\Module\ModuleInfo;
use phpOMS\Uri\HttpUri;
/**
* Installer class.
*
* @package Modules\Labeling\Admin
* @license OMS License 2.0
* @link https://orange-management.org
* @since 1.0.0
*/
final class Installer extends InstallerAbstract
{
/**
* Path of the file
*
* @var string
* @since 1.0.0
*/
public const PATH = __DIR__;
/**
* {@inheritdoc}
*/
public static function install(ApplicationAbstract $app, ModuleInfo $info, SettingsInterface $cfgHandler) : void
{
parent::install($app, $info, $cfgHandler);
/* Label layouts */
$fileContent = \file_get_contents(__DIR__ . '/Install/layouts.json');
if ($fileContent === false) {
return;
}
/** @var array $layouts */
$layouts = \json_decode($fileContent, true);
if ($layouts === false) {
return;
}
self::createLabelLayouts($app, $layouts);
}
/**
* Install default bill types
*
* @param ApplicationAbstract $app Application
* @param array $layouts Default layouts
*
* @return array
*
* @since 1.0.0
*/
private static function createLabelLayouts(ApplicationAbstract $app, array $layouts) : array
{
$layoutModels = [];
/** @var \Modules\Labeling\Controller\ApiController $module */
$module = $app->moduleManager->getModuleInstance('Labeling');
$tempPath = __DIR__ . '/../../../temp/';
foreach ($layouts as $layout) {
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('title', \reset($layout['l11n']));
$request->setData('template', $layout);
foreach ($layout['files'] as $file) {
$filePath = __DIR__ . '/../../..' . $file;
\copy($filePath, $tempPath . \basename($file));
$request->addFile([
'size' => \filesize($tempPath . \basename($file)),
'name' => \basename($file),
'tmp_name' => $tempPath . \basename($file),
'error' => \UPLOAD_ERR_OK,
]);
}
$module->apiLabelLayoutCreate($request, $response);
$responseData = $response->get('');
if (!\is_array($responseData)) {
continue;
}
$layoutModel = \is_array($responseData['response'])
? $responseData['response']
: $responseData['response']->toArray();
$layoutModels[] = $layoutModel;
$isFirst = true;
foreach ($layout['l11n'] as $language => $l11n) {
if ($isFirst) {
$isFirst = false;
continue;
}
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request->header->account = 1;
$request->setData('title', $l11n);
$request->setData('language', $language);
$request->setData('type', $layoutModel['id']);
$module->apiLabelLayoutL11nCreate($request, $response);
}
}
return $layoutModels;
}
}

View File

@ -0,0 +1,42 @@
<?php declare(strict_types=1);
use Modules\Labeling\Controller\BackendController;
use Modules\Labeling\Models\PermissionState;
use phpOMS\Account\PermissionType;
use phpOMS\Router\RouteVerb;
return [
'^.*/warehouse/labeling/item/list.*$' => [
[
'dest' => '\Modules\Labeling\Controller\BackendController:viewItemList',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::LABEL,
],
],
],
'^.*/warehouse/labeling/item\?.*$' => [
[
'dest' => '\Modules\Labeling\Controller\BackendController:viewItem',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::LABEL,
],
],
],
'^.*/warehouse/labeling/layout/list.*$' => [
[
'dest' => '\Modules\Labeling\Controller\BackendController:viewItemLabelList',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::LABEL,
],
],
],
];

36
Admin/Status.php Normal file
View File

@ -0,0 +1,36 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Admin
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Admin;
use phpOMS\Module\StatusAbstract;
/**
* Status class.
*
* @package Modules\Labeling\Admin
* @license OMS License 2.0
* @link https://orange-management.org
* @since 1.0.0
*/
final class Status extends StatusAbstract
{
/**
* Path of the file
*
* @var string
* @since 1.0.0
*/
public const PATH = __DIR__;
}

36
Admin/Uninstaller.php Normal file
View File

@ -0,0 +1,36 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Admin
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Admin;
use phpOMS\Module\UninstallerAbstract;
/**
* Uninstaller class.
*
* @package Modules\Labeling\Admin
* @license OMS License 2.0
* @link https://orange-management.org
* @since 1.0.0
*/
final class Uninstaller extends UninstallerAbstract
{
/**
* Path of the file
*
* @var string
* @since 1.0.0
*/
public const PATH = __DIR__;
}

36
Admin/Updater.php Normal file
View File

@ -0,0 +1,36 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Admin
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Admin;
use phpOMS\Module\UpdaterAbstract;
/**
* Updater class.
*
* @package Modules\Labeling\Admin
* @license OMS License 2.0
* @link https://orange-management.org
* @since 1.0.0
*/
final class Updater extends UpdaterAbstract
{
/**
* Path of the file
*
* @var string
* @since 1.0.0
*/
public const PATH = __DIR__;
}

View File

@ -0,0 +1,209 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\Labeling\Controller;
use Modules\Labeling\Models\LabelLayout;
use Modules\Labeling\Models\LabelLayoutL11nMapper;
use Modules\Labeling\Models\LabelLayoutMapper;
use Modules\Media\Models\CollectionMapper;
use phpOMS\Localization\BaseStringL11n;
use phpOMS\Localization\ISO639x1Enum;
use phpOMS\Message\Http\RequestStatusCode;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
/**
* Labeling class.
*
* @package Modules\Labeling
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
final class ApiController extends Controller
{
/**
* Api method to create layout article
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param array $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiLabelLayoutCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
{
if (!empty($val = $this->validateLabelLayoutCreate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
$layout = $this->createLabelLayoutFromRequest($request);
$this->createModel($request->header->account, $layout, LabelLayoutMapper::class, 'layout', $request->getOrigin());
$this->createStandardCreateResponse($request, $response, $layout);
}
/**
* Validate layout create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateLabelLayoutCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['title'] = !$request->hasData('title'))
) {
return $val;
}
return [];
}
/**
* Method to create item attribute from request.
*
* @param RequestAbstract $request Request
*
* @return LabelLayout
*
* @since 1.0.0
*/
private function createLabelLayoutFromRequest(RequestAbstract $request) : LabelLayout
{
$labelLayout = new LabelLayout();
$labelLayout->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN);
$path = '/Modules/Labeling/Templates/' . $request->getDataString('title');
$uploadedFiles = $request->files;
$uploaded = $this->app->moduleManager->get('Media')->uploadFiles(
names: [],
fileNames: [],
files: $uploadedFiles,
account: $request->header->account,
basePath: __DIR__ . '/../../../Modules/Media/Files' . $path,
virtualPath: $path,
);
$collection = $this->app->moduleManager->get('Media')->createRecursiveMediaCollection(
$path,
$request->header->account,
__DIR__ . '/../../../Modules/Media/Files' . $path
);
// @todo: I think we need to add the uploaded files to the collection.
// The frontend should work without it because of some "smart" corrections (virtualPath), but it is not correct.
// In the db there should be a relationship defined, no?
// If that is the case, maybe we also need to adjust the api. Either the uploadFiles should create the collection (if specified)
// or the createRecursiveMediaCollection should have another parameter with all the files it should include.
// If that is the case we also need to fix many modules who are not creating a specifc collection/upload relation (News, Kanban, ....).
foreach ($uploaded as $file) {
$this->createModelRelation(
$request->header->account,
$collection->id,
$file->id,
CollectionMapper::class,
'sources',
'',
$request->getOrigin()
);
}
$labelLayout->template = $collection;
return $labelLayout;
}
/**
* Api method to create item attribute l11n
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param array $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiLabelLayoutL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
{
if (!empty($val = $this->validateLabelLayoutL11nCreate($request))) {
$response->header->status = RequestStatusCode::R_400;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
$labelLayoutL11n = $this->createLabelLayoutL11nFromRequest($request);
$this->createModel($request->header->account, $labelLayoutL11n, LabelLayoutL11nMapper::class, 'label_layout_l11n', $request->getOrigin());
$this->createStandardCreateResponse($request, $response, $labelLayoutL11n);
}
/**
* Method to create item attribute l11n from request.
*
* @param RequestAbstract $request Request
*
* @return BaseStringL11n
*
* @since 1.0.0
*/
private function createLabelLayoutL11nFromRequest(RequestAbstract $request) : BaseStringL11n
{
$labelLayoutL11n = new BaseStringL11n();
$labelLayoutL11n->ref = $request->getDataInt('layout') ?? 0;
$labelLayoutL11n->setLanguage(
$request->getDataString('language') ?? $request->header->l11n->language
);
$labelLayoutL11n->content = $request->getDataString('title') ?? '';
return $labelLayoutL11n;
}
/**
* Validate item attribute l11n create request
*
* @param RequestAbstract $request Request
*
* @return array<string, bool>
*
* @since 1.0.0
*/
private function validateLabelLayoutL11nCreate(RequestAbstract $request) : array
{
$val = [];
if (($val['title'] = !$request->hasData('title'))
|| ($val['layout'] = !$request->hasData('layout'))
) {
return $val;
}
return [];
}
}

View File

@ -0,0 +1,141 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Controller;
use Modules\ItemManagement\Models\ItemMapper;
use Modules\Labeling\Models\LabelLayoutMapper;
use phpOMS\Contract\RenderableInterface;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
use phpOMS\Views\View;
/**
* Budgeting controller class.
*
* @package Modules\Labeling
* @license OMS License 2.0
* @link https://orange-management.org
* @since 1.0.0
*/
final class BackendController extends Controller
{
/**
* Routing end-point for application behaviour.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param array $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewItemLabelList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/Labeling/Theme/Backend/layout-list');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1005701001, $request, $response);
/** @var \Modules\Labeling\Models\LabelLayout[] $layouts */
$layouts = LabelLayoutMapper::getAll()
->with('l11n')
->with('template')
->with('template/sources')
->where('l11n/language', $response->header->l11n->language)
->execute();
$view->data['layouts'] = $layouts;
return $view;
}
/**
* Routing end-point for application behaviour.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param array $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewItemList(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/Labeling/Theme/Backend/item-list');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1005701001, $request, $response);
/** @var \Modules\ItemManagement\Models\Item[] $items */
$items = ItemMapper::getAll()
->with('l11n')
->with('l11n/type')
->with('files')
->with('files/types')
->where('l11n/language', $response->header->l11n->language)
->where('l11n/type/title', ['name1', 'name2', 'name3'], 'IN')
->where('files/types/name', 'item_profile_image')
->limit(50)
->execute();
$view->data['items'] = $items;
return $view;
}
/**
* Routing end-point for application behaviour.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param array $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewItem(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/Labeling/Theme/Backend/layout-item');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1005701001, $request, $response);
$item = ItemMapper::get()
->with('l11n')
->with('l11n/type')
->where('id', (int) $request->getData('id'))
->where('l11n/language', $response->header->l11n->language)
->where('l11n/type/title', ['name1', 'name2', 'name3'], 'IN')
->execute();
$view->data['item'] = $item;
/** @var \Modules\Labeling\Models\LabelLayout[] $layout */
$layout = LabelLayoutMapper::get()
->with('l11n')
->with('template')
->with('template/sources')
->where('l11n/language', $response->header->l11n->language)
->where('id', (int) $request->getData('id'))
->execute();
$view->data['layout'] = $layout;
return $view;
}
}

77
Controller/Controller.php Normal file
View File

@ -0,0 +1,77 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Controller;
use phpOMS\Module\ModuleAbstract;
use phpOMS\Module\WebInterface;
/**
* Budgeting controller class.
*
* @package Modules\Labeling
* @license OMS License 2.0
* @link https://orange-management.org
* @since 1.0.0
*/
class Controller extends ModuleAbstract implements WebInterface
{
/**
* Module path.
*
* @var string
* @since 1.0.0
*/
public const MODULE_PATH = __DIR__ . '/../';
/**
* Module version.
*
* @var string
* @since 1.0.0
*/
public const MODULE_VERSION = '1.0.0';
/**
* Module name.
*
* @var string
* @since 1.0.0
*/
public const MODULE_NAME = 'Labeling';
/**
* Module id.
*
* @var int
* @since 1.0.0
*/
public const MODULE_ID = 1005700000;
/**
* Providing.
*
* @var string[]
* @since 1.0.0
*/
public static array $providing = [];
/**
* Dependencies.
*
* @var string[]
* @since 1.0.0
*/
public static array $dependencies = [];
}

View File

@ -0,0 +1,622 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
* @see https://www.gs1.org/standards/gs1-datamatrix-guideline/25#2-Encoding-data+2-2-GS1-element-strings
* @see https://www.gs1.org/standards/barcodes/application-identifiers
*/
declare(strict_types=1);
namespace Modules\Labeling\Models\Guidelines;
/**
* GS1 Datamatrix.
*
* @package Modules\Labeling\Models
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
class GS1Datamatrix
{
private const DEFINITIONS = [
'00' => ['title' => 'SSCC', 'FNC1' => false, 'pattern' => '^00(\d{18})$',],
'01' => ['title' => 'GTIN', 'FNC1' => false, 'pattern' => '^01(\d{14})$',],
'02' => ['title' => 'CONTENT', 'FNC1' => false, 'pattern' => '^02(\d{14})$',],
'10' => ['title' => 'BATCH/LOT', 'FNC1' => true, 'pattern' => '^10([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'11' => ['title' => 'PROD DATE', 'FNC1' => false, 'pattern' => '^11(\d{6})$',],
'12' => ['title' => 'DUE DATE', 'FNC1' => false, 'pattern' => '^12(\d{6})$',],
'13' => ['title' => 'PACK DATE', 'FNC1' => false, 'pattern' => '^13(\d{6})$',],
'15' => ['title' => 'BEST BEFORE or BEST BY', 'FNC1' => false, 'pattern' => '^15(\d{6})$',],
'16' => ['title' => 'SELL BY', 'FNC1' => false, 'pattern' => '^16(\d{6})$',],
'17' => ['title' => 'USE BY OR EXPIRY', 'FNC1' => false, 'pattern' => '^17(\d{6})$',],
'20' => ['title' => 'VARIANT', 'FNC1' => false, 'pattern' => '^20(\d{2})$',],
'21' => ['title' => 'SERIAL', 'FNC1' => true, 'pattern' => '^21([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'22' => ['title' => 'CPV', 'FNC1' => true, 'pattern' => '^22([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'235' => ['title' => 'TPX', 'FNC1' => true, 'pattern' => '^235([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,28})$',],
'240' => ['title' => 'ADDITIONAL ID', 'FNC1' => true, 'pattern' => '^240([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'241' => ['title' => 'CUST. PART No.', 'FNC1' => true, 'pattern' => '^241([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'242' => ['title' => 'MTO VARIANT', 'FNC1' => true, 'pattern' => '^242(\d{0,6})$',],
'243' => ['title' => 'PCN', 'FNC1' => true, 'pattern' => '^243([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'250' => ['title' => 'SECONDARY SERIAL', 'FNC1' => true, 'pattern' => '^250([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'251' => ['title' => 'REF. TO SOURCE', 'FNC1' => true, 'pattern' => '^251([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'253' => ['title' => 'GDTI', 'FNC1' => true, 'pattern' => '^253(\d{13})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,17})$',],
'254' => ['title' => 'GLN EXTENSION COMPONENT', 'FNC1' => true, 'pattern' => '^254([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'255' => ['title' => 'GCN', 'FNC1' => true, 'pattern' => '^255(\d{13})(\d{0,12})$',],
'30' => ['title' => 'VAR. COUNT', 'FNC1' => true, 'pattern' => '^30(\d{0,8})$',],
'3100' => ['title' => 'NET WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3100(\d{6})$',],
'3101' => ['title' => 'NET WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3101(\d{6})$',],
'3102' => ['title' => 'NET WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3102(\d{6})$',],
'3103' => ['title' => 'NET WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3103(\d{6})$',],
'3104' => ['title' => 'NET WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3104(\d{6})$',],
'3105' => ['title' => 'NET WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3105(\d{6})$',],
'3110' => ['title' => 'LENGTH (m)', 'FNC1' => false, 'pattern' => '^3110(\d{6})$',],
'3111' => ['title' => 'LENGTH (m)', 'FNC1' => false, 'pattern' => '^3111(\d{6})$',],
'3112' => ['title' => 'LENGTH (m)', 'FNC1' => false, 'pattern' => '^3112(\d{6})$',],
'3113' => ['title' => 'LENGTH (m)', 'FNC1' => false, 'pattern' => '^3113(\d{6})$',],
'3114' => ['title' => 'LENGTH (m)', 'FNC1' => false, 'pattern' => '^3114(\d{6})$',],
'3115' => ['title' => 'LENGTH (m)', 'FNC1' => false, 'pattern' => '^3115(\d{6})$',],
'3120' => ['title' => 'WIDTH (m)', 'FNC1' => false, 'pattern' => '^3120(\d{6})$',],
'3121' => ['title' => 'WIDTH (m)', 'FNC1' => false, 'pattern' => '^3121(\d{6})$',],
'3122' => ['title' => 'WIDTH (m)', 'FNC1' => false, 'pattern' => '^3122(\d{6})$',],
'3123' => ['title' => 'WIDTH (m)', 'FNC1' => false, 'pattern' => '^3123(\d{6})$',],
'3124' => ['title' => 'WIDTH (m)', 'FNC1' => false, 'pattern' => '^3124(\d{6})$',],
'3125' => ['title' => 'WIDTH (m)', 'FNC1' => false, 'pattern' => '^3125(\d{6})$',],
'3130' => ['title' => 'HEIGHT (m)', 'FNC1' => false, 'pattern' => '^3130(\d{6})$',],
'3131' => ['title' => 'HEIGHT (m)', 'FNC1' => false, 'pattern' => '^3131(\d{6})$',],
'3132' => ['title' => 'HEIGHT (m)', 'FNC1' => false, 'pattern' => '^3132(\d{6})$',],
'3133' => ['title' => 'HEIGHT (m)', 'FNC1' => false, 'pattern' => '^3133(\d{6})$',],
'3134' => ['title' => 'HEIGHT (m)', 'FNC1' => false, 'pattern' => '^3134(\d{6})$',],
'3135' => ['title' => 'HEIGHT (m)', 'FNC1' => false, 'pattern' => '^3135(\d{6})$',],
'3140' => ['title' => 'AREA (m<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3140(\d{6})$',],
'3141' => ['title' => 'AREA (m<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3141(\d{6})$',],
'3142' => ['title' => 'AREA (m<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3142(\d{6})$',],
'3143' => ['title' => 'AREA (m<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3143(\d{6})$',],
'3144' => ['title' => 'AREA (m<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3144(\d{6})$',],
'3145' => ['title' => 'AREA (m<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3145(\d{6})$',],
'3150' => ['title' => 'NET VOLUME (l)', 'FNC1' => false, 'pattern' => '^3150(\d{6})$',],
'3151' => ['title' => 'NET VOLUME (l)', 'FNC1' => false, 'pattern' => '^3151(\d{6})$',],
'3152' => ['title' => 'NET VOLUME (l)', 'FNC1' => false, 'pattern' => '^3152(\d{6})$',],
'3153' => ['title' => 'NET VOLUME (l)', 'FNC1' => false, 'pattern' => '^3153(\d{6})$',],
'3154' => ['title' => 'NET VOLUME (l)', 'FNC1' => false, 'pattern' => '^3154(\d{6})$',],
'3155' => ['title' => 'NET VOLUME (l)', 'FNC1' => false, 'pattern' => '^3155(\d{6})$',],
'3160' => ['title' => 'NET VOLUME (m<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3160(\d{6})$',],
'3161' => ['title' => 'NET VOLUME (m<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3161(\d{6})$',],
'3162' => ['title' => 'NET VOLUME (m<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3162(\d{6})$',],
'3163' => ['title' => 'NET VOLUME (m<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3163(\d{6})$',],
'3164' => ['title' => 'NET VOLUME (m<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3164(\d{6})$',],
'3165' => ['title' => 'NET VOLUME (m<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3165(\d{6})$',],
'3200' => ['title' => 'NET WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3200(\d{6})$',],
'3201' => ['title' => 'NET WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3201(\d{6})$',],
'3202' => ['title' => 'NET WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3202(\d{6})$',],
'3203' => ['title' => 'NET WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3203(\d{6})$',],
'3204' => ['title' => 'NET WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3204(\d{6})$',],
'3205' => ['title' => 'NET WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3205(\d{6})$',],
'3210' => ['title' => 'LENGTH (in)', 'FNC1' => false, 'pattern' => '^3210(\d{6})$',],
'3211' => ['title' => 'LENGTH (in)', 'FNC1' => false, 'pattern' => '^3211(\d{6})$',],
'3212' => ['title' => 'LENGTH (in)', 'FNC1' => false, 'pattern' => '^3212(\d{6})$',],
'3213' => ['title' => 'LENGTH (in)', 'FNC1' => false, 'pattern' => '^3213(\d{6})$',],
'3214' => ['title' => 'LENGTH (in)', 'FNC1' => false, 'pattern' => '^3214(\d{6})$',],
'3215' => ['title' => 'LENGTH (in)', 'FNC1' => false, 'pattern' => '^3215(\d{6})$',],
'3220' => ['title' => 'LENGTH (ft)', 'FNC1' => false, 'pattern' => '^3220(\d{6})$',],
'3221' => ['title' => 'LENGTH (ft)', 'FNC1' => false, 'pattern' => '^3221(\d{6})$',],
'3222' => ['title' => 'LENGTH (ft)', 'FNC1' => false, 'pattern' => '^3222(\d{6})$',],
'3223' => ['title' => 'LENGTH (ft)', 'FNC1' => false, 'pattern' => '^3223(\d{6})$',],
'3224' => ['title' => 'LENGTH (ft)', 'FNC1' => false, 'pattern' => '^3224(\d{6})$',],
'3225' => ['title' => 'LENGTH (ft)', 'FNC1' => false, 'pattern' => '^3225(\d{6})$',],
'3230' => ['title' => 'LENGTH (yd)', 'FNC1' => false, 'pattern' => '^3230(\d{6})$',],
'3231' => ['title' => 'LENGTH (yd)', 'FNC1' => false, 'pattern' => '^3231(\d{6})$',],
'3232' => ['title' => 'LENGTH (yd)', 'FNC1' => false, 'pattern' => '^3232(\d{6})$',],
'3233' => ['title' => 'LENGTH (yd)', 'FNC1' => false, 'pattern' => '^3233(\d{6})$',],
'3234' => ['title' => 'LENGTH (yd)', 'FNC1' => false, 'pattern' => '^3234(\d{6})$',],
'3235' => ['title' => 'LENGTH (yd)', 'FNC1' => false, 'pattern' => '^3235(\d{6})$',],
'3240' => ['title' => 'WIDTH (in)', 'FNC1' => false, 'pattern' => '^3240(\d{6})$',],
'3241' => ['title' => 'WIDTH (in)', 'FNC1' => false, 'pattern' => '^3241(\d{6})$',],
'3242' => ['title' => 'WIDTH (in)', 'FNC1' => false, 'pattern' => '^3242(\d{6})$',],
'3243' => ['title' => 'WIDTH (in)', 'FNC1' => false, 'pattern' => '^3243(\d{6})$',],
'3244' => ['title' => 'WIDTH (in)', 'FNC1' => false, 'pattern' => '^3244(\d{6})$',],
'3245' => ['title' => 'WIDTH (in)', 'FNC1' => false, 'pattern' => '^3245(\d{6})$',],
'3250' => ['title' => 'WIDTH (ft)', 'FNC1' => false, 'pattern' => '^3250(\d{6})$',],
'3251' => ['title' => 'WIDTH (ft)', 'FNC1' => false, 'pattern' => '^3251(\d{6})$',],
'3252' => ['title' => 'WIDTH (ft)', 'FNC1' => false, 'pattern' => '^3252(\d{6})$',],
'3253' => ['title' => 'WIDTH (ft)', 'FNC1' => false, 'pattern' => '^3253(\d{6})$',],
'3254' => ['title' => 'WIDTH (ft)', 'FNC1' => false, 'pattern' => '^3254(\d{6})$',],
'3255' => ['title' => 'WIDTH (ft)', 'FNC1' => false, 'pattern' => '^3255(\d{6})$',],
'3260' => ['title' => 'WIDTH (yd)', 'FNC1' => false, 'pattern' => '^3260(\d{6})$',],
'3261' => ['title' => 'WIDTH (yd)', 'FNC1' => false, 'pattern' => '^3261(\d{6})$',],
'3262' => ['title' => 'WIDTH (yd)', 'FNC1' => false, 'pattern' => '^3262(\d{6})$',],
'3263' => ['title' => 'WIDTH (yd)', 'FNC1' => false, 'pattern' => '^3263(\d{6})$',],
'3264' => ['title' => 'WIDTH (yd)', 'FNC1' => false, 'pattern' => '^3264(\d{6})$',],
'3265' => ['title' => 'WIDTH (yd)', 'FNC1' => false, 'pattern' => '^3265(\d{6})$',],
'3270' => ['title' => 'HEIGHT (in)', 'FNC1' => false, 'pattern' => '^3270(\d{6})$',],
'3271' => ['title' => 'HEIGHT (in)', 'FNC1' => false, 'pattern' => '^3271(\d{6})$',],
'3272' => ['title' => 'HEIGHT (in)', 'FNC1' => false, 'pattern' => '^3272(\d{6})$',],
'3273' => ['title' => 'HEIGHT (in)', 'FNC1' => false, 'pattern' => '^3273(\d{6})$',],
'3274' => ['title' => 'HEIGHT (in)', 'FNC1' => false, 'pattern' => '^3274(\d{6})$',],
'3275' => ['title' => 'HEIGHT (in)', 'FNC1' => false, 'pattern' => '^3275(\d{6})$',],
'3280' => ['title' => 'HEIGHT (ft)', 'FNC1' => false, 'pattern' => '^3280(\d{6})$',],
'3281' => ['title' => 'HEIGHT (ft)', 'FNC1' => false, 'pattern' => '^3281(\d{6})$',],
'3282' => ['title' => 'HEIGHT (ft)', 'FNC1' => false, 'pattern' => '^3282(\d{6})$',],
'3283' => ['title' => 'HEIGHT (ft)', 'FNC1' => false, 'pattern' => '^3283(\d{6})$',],
'3284' => ['title' => 'HEIGHT (ft)', 'FNC1' => false, 'pattern' => '^3284(\d{6})$',],
'3285' => ['title' => 'HEIGHT (ft)', 'FNC1' => false, 'pattern' => '^3285(\d{6})$',],
'3290' => ['title' => 'HEIGHT (yd)', 'FNC1' => false, 'pattern' => '^3290(\d{6})$',],
'3291' => ['title' => 'HEIGHT (yd)', 'FNC1' => false, 'pattern' => '^3291(\d{6})$',],
'3292' => ['title' => 'HEIGHT (yd)', 'FNC1' => false, 'pattern' => '^3292(\d{6})$',],
'3293' => ['title' => 'HEIGHT (yd)', 'FNC1' => false, 'pattern' => '^3293(\d{6})$',],
'3294' => ['title' => 'HEIGHT (yd)', 'FNC1' => false, 'pattern' => '^3294(\d{6})$',],
'3295' => ['title' => 'HEIGHT (yd)', 'FNC1' => false, 'pattern' => '^3295(\d{6})$',],
'3300' => ['title' => 'GROSS WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3300(\d{6})$',],
'3301' => ['title' => 'GROSS WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3301(\d{6})$',],
'3302' => ['title' => 'GROSS WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3302(\d{6})$',],
'3303' => ['title' => 'GROSS WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3303(\d{6})$',],
'3304' => ['title' => 'GROSS WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3304(\d{6})$',],
'3305' => ['title' => 'GROSS WEIGHT (kg)', 'FNC1' => false, 'pattern' => '^3305(\d{6})$',],
'3310' => ['title' => 'LENGTH (m), log', 'FNC1' => false, 'pattern' => '^3310(\d{6})$',],
'3311' => ['title' => 'LENGTH (m), log', 'FNC1' => false, 'pattern' => '^3311(\d{6})$',],
'3312' => ['title' => 'LENGTH (m), log', 'FNC1' => false, 'pattern' => '^3312(\d{6})$',],
'3313' => ['title' => 'LENGTH (m), log', 'FNC1' => false, 'pattern' => '^3313(\d{6})$',],
'3314' => ['title' => 'LENGTH (m), log', 'FNC1' => false, 'pattern' => '^3314(\d{6})$',],
'3315' => ['title' => 'LENGTH (m), log', 'FNC1' => false, 'pattern' => '^3315(\d{6})$',],
'3320' => ['title' => 'WIDTH (m), log', 'FNC1' => false, 'pattern' => '^3320(\d{6})$',],
'3321' => ['title' => 'WIDTH (m), log', 'FNC1' => false, 'pattern' => '^3321(\d{6})$',],
'3322' => ['title' => 'WIDTH (m), log', 'FNC1' => false, 'pattern' => '^3322(\d{6})$',],
'3323' => ['title' => 'WIDTH (m), log', 'FNC1' => false, 'pattern' => '^3323(\d{6})$',],
'3324' => ['title' => 'WIDTH (m), log', 'FNC1' => false, 'pattern' => '^3324(\d{6})$',],
'3325' => ['title' => 'WIDTH (m), log', 'FNC1' => false, 'pattern' => '^3325(\d{6})$',],
'3330' => ['title' => 'HEIGHT (m), log', 'FNC1' => false, 'pattern' => '^3330(\d{6})$',],
'3331' => ['title' => 'HEIGHT (m), log', 'FNC1' => false, 'pattern' => '^3331(\d{6})$',],
'3332' => ['title' => 'HEIGHT (m), log', 'FNC1' => false, 'pattern' => '^3332(\d{6})$',],
'3333' => ['title' => 'HEIGHT (m), log', 'FNC1' => false, 'pattern' => '^3333(\d{6})$',],
'3334' => ['title' => 'HEIGHT (m), log', 'FNC1' => false, 'pattern' => '^3334(\d{6})$',],
'3335' => ['title' => 'HEIGHT (m), log', 'FNC1' => false, 'pattern' => '^3335(\d{6})$',],
'3340' => ['title' => 'AREA (m<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3340(\d{6})$',],
'3341' => ['title' => 'AREA (m<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3341(\d{6})$',],
'3342' => ['title' => 'AREA (m<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3342(\d{6})$',],
'3343' => ['title' => 'AREA (m<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3343(\d{6})$',],
'3344' => ['title' => 'AREA (m<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3344(\d{6})$',],
'3345' => ['title' => 'AREA (m<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3345(\d{6})$',],
'3350' => ['title' => 'VOLUME (l), log', 'FNC1' => false, 'pattern' => '^3350(\d{6})$',],
'3351' => ['title' => 'VOLUME (l), log', 'FNC1' => false, 'pattern' => '^3351(\d{6})$',],
'3352' => ['title' => 'VOLUME (l), log', 'FNC1' => false, 'pattern' => '^3352(\d{6})$',],
'3353' => ['title' => 'VOLUME (l), log', 'FNC1' => false, 'pattern' => '^3353(\d{6})$',],
'3354' => ['title' => 'VOLUME (l), log', 'FNC1' => false, 'pattern' => '^3354(\d{6})$',],
'3355' => ['title' => 'VOLUME (l), log', 'FNC1' => false, 'pattern' => '^3355(\d{6})$',],
'3360' => ['title' => 'VOLUME (m<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3360(\d{6})$',],
'3361' => ['title' => 'VOLUME (m<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3361(\d{6})$',],
'3362' => ['title' => 'VOLUME (m<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3362(\d{6})$',],
'3363' => ['title' => 'VOLUME (m<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3363(\d{6})$',],
'3364' => ['title' => 'VOLUME (m<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3364(\d{6})$',],
'3365' => ['title' => 'VOLUME (m<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3365(\d{6})$',],
'3370' => ['title' => 'KG PER m<sup>2</sup>', 'FNC1' => false, 'pattern' => '^3370(\d{6})$',],
'3371' => ['title' => 'KG PER m<sup>2</sup>', 'FNC1' => false, 'pattern' => '^3371(\d{6})$',],
'3372' => ['title' => 'KG PER m<sup>2</sup>', 'FNC1' => false, 'pattern' => '^3372(\d{6})$',],
'3373' => ['title' => 'KG PER m<sup>2</sup>', 'FNC1' => false, 'pattern' => '^3373(\d{6})$',],
'3374' => ['title' => 'KG PER m<sup>2</sup>', 'FNC1' => false, 'pattern' => '^3374(\d{6})$',],
'3375' => ['title' => 'KG PER m<sup>2</sup>', 'FNC1' => false, 'pattern' => '^3375(\d{6})$',],
'3400' => ['title' => 'GROSS WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3400(\d{6})$',],
'3401' => ['title' => 'GROSS WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3401(\d{6})$',],
'3402' => ['title' => 'GROSS WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3402(\d{6})$',],
'3403' => ['title' => 'GROSS WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3403(\d{6})$',],
'3404' => ['title' => 'GROSS WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3404(\d{6})$',],
'3405' => ['title' => 'GROSS WEIGHT (lb)', 'FNC1' => false, 'pattern' => '^3405(\d{6})$',],
'3410' => ['title' => 'LENGTH (in), log', 'FNC1' => false, 'pattern' => '^3410(\d{6})$',],
'3411' => ['title' => 'LENGTH (in), log', 'FNC1' => false, 'pattern' => '^3411(\d{6})$',],
'3412' => ['title' => 'LENGTH (in), log', 'FNC1' => false, 'pattern' => '^3412(\d{6})$',],
'3413' => ['title' => 'LENGTH (in), log', 'FNC1' => false, 'pattern' => '^3413(\d{6})$',],
'3414' => ['title' => 'LENGTH (in), log', 'FNC1' => false, 'pattern' => '^3414(\d{6})$',],
'3415' => ['title' => 'LENGTH (in), log', 'FNC1' => false, 'pattern' => '^3415(\d{6})$',],
'3420' => ['title' => 'LENGTH (ft), log', 'FNC1' => false, 'pattern' => '^3420(\d{6})$',],
'3421' => ['title' => 'LENGTH (ft), log', 'FNC1' => false, 'pattern' => '^3421(\d{6})$',],
'3422' => ['title' => 'LENGTH (ft), log', 'FNC1' => false, 'pattern' => '^3422(\d{6})$',],
'3423' => ['title' => 'LENGTH (ft), log', 'FNC1' => false, 'pattern' => '^3423(\d{6})$',],
'3424' => ['title' => 'LENGTH (ft), log', 'FNC1' => false, 'pattern' => '^3424(\d{6})$',],
'3425' => ['title' => 'LENGTH (ft), log', 'FNC1' => false, 'pattern' => '^3425(\d{6})$',],
'3430' => ['title' => 'LENGTH (yd), log', 'FNC1' => false, 'pattern' => '^3430(\d{6})$',],
'3431' => ['title' => 'LENGTH (yd), log', 'FNC1' => false, 'pattern' => '^3431(\d{6})$',],
'3432' => ['title' => 'LENGTH (yd), log', 'FNC1' => false, 'pattern' => '^3432(\d{6})$',],
'3433' => ['title' => 'LENGTH (yd), log', 'FNC1' => false, 'pattern' => '^3433(\d{6})$',],
'3434' => ['title' => 'LENGTH (yd), log', 'FNC1' => false, 'pattern' => '^3434(\d{6})$',],
'3435' => ['title' => 'LENGTH (yd), log', 'FNC1' => false, 'pattern' => '^3435(\d{6})$',],
'3440' => ['title' => 'WIDTH (in), log', 'FNC1' => false, 'pattern' => '^3440(\d{6})$',],
'3441' => ['title' => 'WIDTH (in), log', 'FNC1' => false, 'pattern' => '^3441(\d{6})$',],
'3442' => ['title' => 'WIDTH (in), log', 'FNC1' => false, 'pattern' => '^3442(\d{6})$',],
'3443' => ['title' => 'WIDTH (in), log', 'FNC1' => false, 'pattern' => '^3443(\d{6})$',],
'3444' => ['title' => 'WIDTH (in), log', 'FNC1' => false, 'pattern' => '^3444(\d{6})$',],
'3445' => ['title' => 'WIDTH (in), log', 'FNC1' => false, 'pattern' => '^3445(\d{6})$',],
'3450' => ['title' => 'WIDTH (ft), log', 'FNC1' => false, 'pattern' => '^3450(\d{6})$',],
'3451' => ['title' => 'WIDTH (ft), log', 'FNC1' => false, 'pattern' => '^3451(\d{6})$',],
'3452' => ['title' => 'WIDTH (ft), log', 'FNC1' => false, 'pattern' => '^3452(\d{6})$',],
'3453' => ['title' => 'WIDTH (ft), log', 'FNC1' => false, 'pattern' => '^3453(\d{6})$',],
'3454' => ['title' => 'WIDTH (ft), log', 'FNC1' => false, 'pattern' => '^3454(\d{6})$',],
'3455' => ['title' => 'WIDTH (ft), log', 'FNC1' => false, 'pattern' => '^3455(\d{6})$',],
'3460' => ['title' => 'WIDTH (yd), log', 'FNC1' => false, 'pattern' => '^3460(\d{6})$',],
'3461' => ['title' => 'WIDTH (yd), log', 'FNC1' => false, 'pattern' => '^3461(\d{6})$',],
'3462' => ['title' => 'WIDTH (yd), log', 'FNC1' => false, 'pattern' => '^3462(\d{6})$',],
'3463' => ['title' => 'WIDTH (yd), log', 'FNC1' => false, 'pattern' => '^3463(\d{6})$',],
'3464' => ['title' => 'WIDTH (yd), log', 'FNC1' => false, 'pattern' => '^3464(\d{6})$',],
'3465' => ['title' => 'WIDTH (yd), log', 'FNC1' => false, 'pattern' => '^3465(\d{6})$',],
'3470' => ['title' => 'HEIGHT (in), log', 'FNC1' => false, 'pattern' => '^3470(\d{6})$',],
'3471' => ['title' => 'HEIGHT (in), log', 'FNC1' => false, 'pattern' => '^3471(\d{6})$',],
'3472' => ['title' => 'HEIGHT (in), log', 'FNC1' => false, 'pattern' => '^3472(\d{6})$',],
'3473' => ['title' => 'HEIGHT (in), log', 'FNC1' => false, 'pattern' => '^3473(\d{6})$',],
'3474' => ['title' => 'HEIGHT (in), log', 'FNC1' => false, 'pattern' => '^3474(\d{6})$',],
'3475' => ['title' => 'HEIGHT (in), log', 'FNC1' => false, 'pattern' => '^3475(\d{6})$',],
'3480' => ['title' => 'HEIGHT (ft), log', 'FNC1' => false, 'pattern' => '^3480(\d{6})$',],
'3481' => ['title' => 'HEIGHT (ft), log', 'FNC1' => false, 'pattern' => '^3481(\d{6})$',],
'3482' => ['title' => 'HEIGHT (ft), log', 'FNC1' => false, 'pattern' => '^3482(\d{6})$',],
'3483' => ['title' => 'HEIGHT (ft), log', 'FNC1' => false, 'pattern' => '^3483(\d{6})$',],
'3484' => ['title' => 'HEIGHT (ft), log', 'FNC1' => false, 'pattern' => '^3484(\d{6})$',],
'3485' => ['title' => 'HEIGHT (ft), log', 'FNC1' => false, 'pattern' => '^3485(\d{6})$',],
'3490' => ['title' => 'HEIGHT (yd), log', 'FNC1' => false, 'pattern' => '^3490(\d{6})$',],
'3491' => ['title' => 'HEIGHT (yd), log', 'FNC1' => false, 'pattern' => '^3491(\d{6})$',],
'3492' => ['title' => 'HEIGHT (yd), log', 'FNC1' => false, 'pattern' => '^3492(\d{6})$',],
'3493' => ['title' => 'HEIGHT (yd), log', 'FNC1' => false, 'pattern' => '^3493(\d{6})$',],
'3494' => ['title' => 'HEIGHT (yd), log', 'FNC1' => false, 'pattern' => '^3494(\d{6})$',],
'3495' => ['title' => 'HEIGHT (yd), log', 'FNC1' => false, 'pattern' => '^3495(\d{6})$',],
'3500' => ['title' => 'AREA (in<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3500(\d{6})$',],
'3501' => ['title' => 'AREA (in<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3501(\d{6})$',],
'3502' => ['title' => 'AREA (in<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3502(\d{6})$',],
'3503' => ['title' => 'AREA (in<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3503(\d{6})$',],
'3504' => ['title' => 'AREA (in<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3504(\d{6})$',],
'3505' => ['title' => 'AREA (in<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3505(\d{6})$',],
'3510' => ['title' => 'AREA (ft<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3510(\d{6})$',],
'3511' => ['title' => 'AREA (ft<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3511(\d{6})$',],
'3512' => ['title' => 'AREA (ft<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3512(\d{6})$',],
'3513' => ['title' => 'AREA (ft<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3513(\d{6})$',],
'3514' => ['title' => 'AREA (ft<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3514(\d{6})$',],
'3515' => ['title' => 'AREA (ft<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3515(\d{6})$',],
'3520' => ['title' => 'AREA (yd<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3520(\d{6})$',],
'3521' => ['title' => 'AREA (yd<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3521(\d{6})$',],
'3522' => ['title' => 'AREA (yd<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3522(\d{6})$',],
'3523' => ['title' => 'AREA (yd<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3523(\d{6})$',],
'3524' => ['title' => 'AREA (yd<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3524(\d{6})$',],
'3525' => ['title' => 'AREA (yd<sup>2</sup>)', 'FNC1' => false, 'pattern' => '^3525(\d{6})$',],
'3530' => ['title' => 'AREA (in<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3530(\d{6})$',],
'3531' => ['title' => 'AREA (in<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3531(\d{6})$',],
'3532' => ['title' => 'AREA (in<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3532(\d{6})$',],
'3533' => ['title' => 'AREA (in<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3533(\d{6})$',],
'3534' => ['title' => 'AREA (in<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3534(\d{6})$',],
'3535' => ['title' => 'AREA (in<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3535(\d{6})$',],
'3540' => ['title' => 'AREA (ft<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3540(\d{6})$',],
'3541' => ['title' => 'AREA (ft<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3541(\d{6})$',],
'3542' => ['title' => 'AREA (ft<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3542(\d{6})$',],
'3543' => ['title' => 'AREA (ft<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3543(\d{6})$',],
'3544' => ['title' => 'AREA (ft<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3544(\d{6})$',],
'3545' => ['title' => 'AREA (ft<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3545(\d{6})$',],
'3550' => ['title' => 'AREA (yd<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3550(\d{6})$',],
'3551' => ['title' => 'AREA (yd<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3551(\d{6})$',],
'3552' => ['title' => 'AREA (yd<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3552(\d{6})$',],
'3553' => ['title' => 'AREA (yd<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3553(\d{6})$',],
'3554' => ['title' => 'AREA (yd<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3554(\d{6})$',],
'3555' => ['title' => 'AREA (yd<sup>2</sup>), log', 'FNC1' => false, 'pattern' => '^3555(\d{6})$',],
'3560' => ['title' => 'NET WEIGHT (t oz)', 'FNC1' => false, 'pattern' => '^3560(\d{6})$',],
'3561' => ['title' => 'NET WEIGHT (t oz)', 'FNC1' => false, 'pattern' => '^3561(\d{6})$',],
'3562' => ['title' => 'NET WEIGHT (t oz)', 'FNC1' => false, 'pattern' => '^3562(\d{6})$',],
'3563' => ['title' => 'NET WEIGHT (t oz)', 'FNC1' => false, 'pattern' => '^3563(\d{6})$',],
'3564' => ['title' => 'NET WEIGHT (t oz)', 'FNC1' => false, 'pattern' => '^3564(\d{6})$',],
'3565' => ['title' => 'NET WEIGHT (t oz)', 'FNC1' => false, 'pattern' => '^3565(\d{6})$',],
'3570' => ['title' => 'NET VOLUME (oz)', 'FNC1' => false, 'pattern' => '^3570(\d{6})$',],
'3571' => ['title' => 'NET VOLUME (oz)', 'FNC1' => false, 'pattern' => '^3571(\d{6})$',],
'3572' => ['title' => 'NET VOLUME (oz)', 'FNC1' => false, 'pattern' => '^3572(\d{6})$',],
'3573' => ['title' => 'NET VOLUME (oz)', 'FNC1' => false, 'pattern' => '^3573(\d{6})$',],
'3574' => ['title' => 'NET VOLUME (oz)', 'FNC1' => false, 'pattern' => '^3574(\d{6})$',],
'3575' => ['title' => 'NET VOLUME (oz)', 'FNC1' => false, 'pattern' => '^3575(\d{6})$',],
'3600' => ['title' => 'NET VOLUME (qt)', 'FNC1' => false, 'pattern' => '^3600(\d{6})$',],
'3601' => ['title' => 'NET VOLUME (qt)', 'FNC1' => false, 'pattern' => '^3601(\d{6})$',],
'3602' => ['title' => 'NET VOLUME (qt)', 'FNC1' => false, 'pattern' => '^3602(\d{6})$',],
'3603' => ['title' => 'NET VOLUME (qt)', 'FNC1' => false, 'pattern' => '^3603(\d{6})$',],
'3604' => ['title' => 'NET VOLUME (qt)', 'FNC1' => false, 'pattern' => '^3604(\d{6})$',],
'3605' => ['title' => 'NET VOLUME (qt)', 'FNC1' => false, 'pattern' => '^3605(\d{6})$',],
'3610' => ['title' => 'NET VOLUME (gal.)', 'FNC1' => false, 'pattern' => '^3610(\d{6})$',],
'3611' => ['title' => 'NET VOLUME (gal.)', 'FNC1' => false, 'pattern' => '^3611(\d{6})$',],
'3612' => ['title' => 'NET VOLUME (gal.)', 'FNC1' => false, 'pattern' => '^3612(\d{6})$',],
'3613' => ['title' => 'NET VOLUME (gal.)', 'FNC1' => false, 'pattern' => '^3613(\d{6})$',],
'3614' => ['title' => 'NET VOLUME (gal.)', 'FNC1' => false, 'pattern' => '^3614(\d{6})$',],
'3615' => ['title' => 'NET VOLUME (gal.)', 'FNC1' => false, 'pattern' => '^3615(\d{6})$',],
'3620' => ['title' => 'VOLUME (qt), log', 'FNC1' => false, 'pattern' => '^3620(\d{6})$',],
'3621' => ['title' => 'VOLUME (qt), log', 'FNC1' => false, 'pattern' => '^3621(\d{6})$',],
'3622' => ['title' => 'VOLUME (qt), log', 'FNC1' => false, 'pattern' => '^3622(\d{6})$',],
'3623' => ['title' => 'VOLUME (qt), log', 'FNC1' => false, 'pattern' => '^3623(\d{6})$',],
'3624' => ['title' => 'VOLUME (qt), log', 'FNC1' => false, 'pattern' => '^3624(\d{6})$',],
'3625' => ['title' => 'VOLUME (qt), log', 'FNC1' => false, 'pattern' => '^3625(\d{6})$',],
'3630' => ['title' => 'VOLUME (gal.), log', 'FNC1' => false, 'pattern' => '^3630(\d{6})$',],
'3631' => ['title' => 'VOLUME (gal.), log', 'FNC1' => false, 'pattern' => '^3631(\d{6})$',],
'3632' => ['title' => 'VOLUME (gal.), log', 'FNC1' => false, 'pattern' => '^3632(\d{6})$',],
'3633' => ['title' => 'VOLUME (gal.), log', 'FNC1' => false, 'pattern' => '^3633(\d{6})$',],
'3634' => ['title' => 'VOLUME (gal.), log', 'FNC1' => false, 'pattern' => '^3634(\d{6})$',],
'3635' => ['title' => 'VOLUME (gal.), log', 'FNC1' => false, 'pattern' => '^3635(\d{6})$',],
'3640' => ['title' => 'VOLUME (in<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3640(\d{6})$',],
'3641' => ['title' => 'VOLUME (in<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3641(\d{6})$',],
'3642' => ['title' => 'VOLUME (in<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3642(\d{6})$',],
'3643' => ['title' => 'VOLUME (in<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3643(\d{6})$',],
'3644' => ['title' => 'VOLUME (in<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3644(\d{6})$',],
'3645' => ['title' => 'VOLUME (in<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3645(\d{6})$',],
'3650' => ['title' => 'VOLUME (ft<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3650(\d{6})$',],
'3651' => ['title' => 'VOLUME (ft<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3651(\d{6})$',],
'3652' => ['title' => 'VOLUME (ft<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3652(\d{6})$',],
'3653' => ['title' => 'VOLUME (ft<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3653(\d{6})$',],
'3654' => ['title' => 'VOLUME (ft<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3654(\d{6})$',],
'3655' => ['title' => 'VOLUME (ft<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3655(\d{6})$',],
'3660' => ['title' => 'VOLUME (yd<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3660(\d{6})$',],
'3661' => ['title' => 'VOLUME (yd<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3661(\d{6})$',],
'3662' => ['title' => 'VOLUME (yd<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3662(\d{6})$',],
'3663' => ['title' => 'VOLUME (yd<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3663(\d{6})$',],
'3664' => ['title' => 'VOLUME (yd<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3664(\d{6})$',],
'3665' => ['title' => 'VOLUME (yd<sup>3</sup>)', 'FNC1' => false, 'pattern' => '^3665(\d{6})$',],
'3670' => ['title' => 'VOLUME (in<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3670(\d{6})$',],
'3671' => ['title' => 'VOLUME (in<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3671(\d{6})$',],
'3672' => ['title' => 'VOLUME (in<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3672(\d{6})$',],
'3673' => ['title' => 'VOLUME (in<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3673(\d{6})$',],
'3674' => ['title' => 'VOLUME (in<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3674(\d{6})$',],
'3675' => ['title' => 'VOLUME (in<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3675(\d{6})$',],
'3680' => ['title' => 'VOLUME (ft<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3680(\d{6})$',],
'3681' => ['title' => 'VOLUME (ft<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3681(\d{6})$',],
'3682' => ['title' => 'VOLUME (ft<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3682(\d{6})$',],
'3683' => ['title' => 'VOLUME (ft<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3683(\d{6})$',],
'3684' => ['title' => 'VOLUME (ft<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3684(\d{6})$',],
'3685' => ['title' => 'VOLUME (ft<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3685(\d{6})$',],
'3690' => ['title' => 'VOLUME (yd<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3690(\d{6})$',],
'3691' => ['title' => 'VOLUME (yd<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3691(\d{6})$',],
'3692' => ['title' => 'VOLUME (yd<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3692(\d{6})$',],
'3693' => ['title' => 'VOLUME (yd<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3693(\d{6})$',],
'3694' => ['title' => 'VOLUME (yd<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3694(\d{6})$',],
'3695' => ['title' => 'VOLUME (yd<sup>3</sup>), log', 'FNC1' => false, 'pattern' => '^3695(\d{6})$',],
'37' => ['title' => 'COUNT', 'FNC1' => true, 'pattern' => '^37(\d{0,8})$',],
'3900' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3900(\d{0,15})$',],
'3901' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3901(\d{0,15})$',],
'3902' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3902(\d{0,15})$',],
'3903' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3903(\d{0,15})$',],
'3904' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3904(\d{0,15})$',],
'3905' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3905(\d{0,15})$',],
'3906' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3906(\d{0,15})$',],
'3907' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3907(\d{0,15})$',],
'3908' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3908(\d{0,15})$',],
'3909' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3909(\d{0,15})$',],
'3910' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3910(\d{3})(\d{0,15})$',],
'3911' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3911(\d{3})(\d{0,15})$',],
'3912' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3912(\d{3})(\d{0,15})$',],
'3913' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3913(\d{3})(\d{0,15})$',],
'3914' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3914(\d{3})(\d{0,15})$',],
'3915' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3915(\d{3})(\d{0,15})$',],
'3916' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3916(\d{3})(\d{0,15})$',],
'3917' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3917(\d{3})(\d{0,15})$',],
'3918' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3918(\d{3})(\d{0,15})$',],
'3919' => ['title' => 'AMOUNT', 'FNC1' => true, 'pattern' => '^3919(\d{3})(\d{0,15})$',],
'3920' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3920(\d{0,15})$',],
'3921' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3921(\d{0,15})$',],
'3922' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3922(\d{0,15})$',],
'3923' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3923(\d{0,15})$',],
'3924' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3924(\d{0,15})$',],
'3925' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3925(\d{0,15})$',],
'3926' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3926(\d{0,15})$',],
'3927' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3927(\d{0,15})$',],
'3928' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3928(\d{0,15})$',],
'3929' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3929(\d{0,15})$',],
'3930' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3930(\d{3})(\d{0,15})$',],
'3931' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3931(\d{3})(\d{0,15})$',],
'3932' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3932(\d{3})(\d{0,15})$',],
'3933' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3933(\d{3})(\d{0,15})$',],
'3934' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3934(\d{3})(\d{0,15})$',],
'3935' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3935(\d{3})(\d{0,15})$',],
'3936' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3936(\d{3})(\d{0,15})$',],
'3937' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3937(\d{3})(\d{0,15})$',],
'3938' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3938(\d{3})(\d{0,15})$',],
'3939' => ['title' => 'PRICE', 'FNC1' => true, 'pattern' => '^3939(\d{3})(\d{0,15})$',],
'3940' => ['title' => 'PRCNT OFF', 'FNC1' => true, 'pattern' => '^3940(\d{4})$',],
'3941' => ['title' => 'PRCNT OFF', 'FNC1' => true, 'pattern' => '^3941(\d{4})$',],
'3942' => ['title' => 'PRCNT OFF', 'FNC1' => true, 'pattern' => '^3942(\d{4})$',],
'3943' => ['title' => 'PRCNT OFF', 'FNC1' => true, 'pattern' => '^3943(\d{4})$',],
'3950' => ['title' => 'PRICE/UoM', 'FNC1' => true, 'pattern' => '^3950(\d{0,6})$',],
'3951' => ['title' => 'PRICE/UoM', 'FNC1' => true, 'pattern' => '^3951(\d{0,6})$',],
'3952' => ['title' => 'PRICE/UoM', 'FNC1' => true, 'pattern' => '^3952(\d{0,6})$',],
'3953' => ['title' => 'PRICE/UoM', 'FNC1' => true, 'pattern' => '^3953(\d{0,6})$',],
'3954' => ['title' => 'PRICE/UoM', 'FNC1' => true, 'pattern' => '^3954(\d{0,6})$',],
'3955' => ['title' => 'PRICE/UoM', 'FNC1' => true, 'pattern' => '^3955(\d{0,6})$',],
'3956' => ['title' => 'PRICE/UoM', 'FNC1' => true, 'pattern' => '^3956(\d{0,6})$',],
'3957' => ['title' => 'PRICE/UoM', 'FNC1' => true, 'pattern' => '^3957(\d{0,6})$',],
'3958' => ['title' => 'PRICE/UoM', 'FNC1' => true, 'pattern' => '^3958(\d{0,6})$',],
'3959' => ['title' => 'PRICE/UoM', 'FNC1' => true, 'pattern' => '^3959(\d{0,6})$',],
'400' => ['title' => 'ORDER NUMBER', 'FNC1' => true, 'pattern' => '^400([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'401' => ['title' => 'GINC', 'FNC1' => true, 'pattern' => '^401([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'402' => ['title' => 'GSIN', 'FNC1' => true, 'pattern' => '^402(\d{17})$',],
'403' => ['title' => 'ROUTE', 'FNC1' => true, 'pattern' => '^403([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'410' => ['title' => 'SHIP TO LOC', 'FNC1' => false, 'pattern' => '^410(\d{13})$',],
'411' => ['title' => 'BILL TO', 'FNC1' => false, 'pattern' => '^411(\d{13})$',],
'412' => ['title' => 'PURCHASE FROM', 'FNC1' => false, 'pattern' => '^412(\d{13})$',],
'413' => ['title' => 'SHIP FOR LOC', 'FNC1' => false, 'pattern' => '^413(\d{13})$',],
'414' => ['title' => 'LOC No.', 'FNC1' => false, 'pattern' => '^414(\d{13})$',],
'415' => ['title' => 'PAY TO', 'FNC1' => false, 'pattern' => '^415(\d{13})$',],
'416' => ['title' => 'PROD/SERV LOC', 'FNC1' => false, 'pattern' => '^416(\d{13})$',],
'417' => ['title' => 'PARTY', 'FNC1' => false, 'pattern' => '^417(\d{13})$',],
'420' => ['title' => 'SHIP TO POST', 'FNC1' => true, 'pattern' => '^420([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'421' => ['title' => 'SHIP TO POST', 'FNC1' => true, 'pattern' => '^421(\d{3})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,9})$',],
'422' => ['title' => 'ORIGIN', 'FNC1' => true, 'pattern' => '^422(\d{3})$',],
'423' => ['title' => 'COUNTRY - INITIAL PROCESS', 'FNC1' => true, 'pattern' => '^423(\d{3})(\d{0,12})$',],
'424' => ['title' => 'COUNTRY - PROCESS', 'FNC1' => true, 'pattern' => '^424(\d{3})$',],
'425' => ['title' => 'COUNTRY - DISASSEMBLY', 'FNC1' => true, 'pattern' => '^425(\d{3})(\d{0,12})$',],
'426' => ['title' => 'COUNTRY - FULL PROCESS', 'FNC1' => true, 'pattern' => '^426(\d{3})$',],
'427' => ['title' => 'ORIGIN SUBDIVISION', 'FNC1' => true, 'pattern' => '^427([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,3})$',],
'4300' => ['title' => 'SHIP TO COMP', 'FNC1' => true, 'pattern' => '^4300([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,35})$',],
'4301' => ['title' => 'SHIP TO NAME', 'FNC1' => true, 'pattern' => '^4301([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,35})$',],
'4302' => ['title' => 'SHIP TO ADD1', 'FNC1' => true, 'pattern' => '^4302([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'4303' => ['title' => 'SHIP TO ADD2', 'FNC1' => true, 'pattern' => '^4303([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'4304' => ['title' => 'SHIP TO SUB', 'FNC1' => true, 'pattern' => '^4304([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'4305' => ['title' => 'SHIP TO LOC', 'FNC1' => true, 'pattern' => '^4305([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'4306' => ['title' => 'SHIP TO REG', 'FNC1' => true, 'pattern' => '^4306([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'4307' => ['title' => 'SHIP TO COUNTRY', 'FNC1' => true, 'pattern' => '^4307([A-Z]{2})$',],
'4308' => ['title' => 'SHIP TO PHONE', 'FNC1' => true, 'pattern' => '^4308([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'4309' => ['title' => 'SHIP TO GEO', 'FNC1' => true, 'pattern' => '^4309(\d{20})$',],
'4310' => ['title' => 'RTN TO COMP', 'FNC1' => true, 'pattern' => '^4310([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,35})$',],
'4311' => ['title' => 'RTN TO NAME', 'FNC1' => true, 'pattern' => '^4311([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,35})$',],
'4312' => ['title' => 'RTN TO ADD1', 'FNC1' => true, 'pattern' => '^4312([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'4313' => ['title' => 'RTN TO ADD2', 'FNC1' => true, 'pattern' => '^4313([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'4314' => ['title' => 'RTN TO SUB', 'FNC1' => true, 'pattern' => '^4314([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'4315' => ['title' => 'RTN TO LOC', 'FNC1' => true, 'pattern' => '^4315([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'4316' => ['title' => 'RTN TO REG', 'FNC1' => true, 'pattern' => '^4316([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'4317' => ['title' => 'RTN TO COUNTRY', 'FNC1' => true, 'pattern' => '^4317([A-Z]{2})$',],
'4318' => ['title' => 'RTN TO POST', 'FNC1' => true, 'pattern' => '^4318([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'4319' => ['title' => 'RTN TO PHONE', 'FNC1' => true, 'pattern' => '^4319([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'4320' => ['title' => 'SRV DESCRIPTION', 'FNC1' => true, 'pattern' => '^4320([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,35})$',],
'4321' => ['title' => 'DANGEROUS GOODS', 'FNC1' => true, 'pattern' => '^4321([01])$',],
'4322' => ['title' => 'AUTH TO LEAVE', 'FNC1' => true, 'pattern' => '^4322([01])$',],
'4323' => ['title' => 'SIG REQUIRED', 'FNC1' => true, 'pattern' => '^4323([01])$',],
'4324' => ['title' => 'NBEF DEL DT', 'FNC1' => true, 'pattern' => '^4324(\d{10})$',],
'4325' => ['title' => 'NAFT DEL DT', 'FNC1' => true, 'pattern' => '^4325(\d{10})$',],
'4326' => ['title' => 'REL DATE', 'FNC1' => true, 'pattern' => '^4326(\d{6})$',],
'7001' => ['title' => 'NSN', 'FNC1' => true, 'pattern' => '^7001(\d{13})$',],
'7002' => ['title' => 'MEAT CUT', 'FNC1' => true, 'pattern' => '^7002([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'7003' => ['title' => 'EXPIRY TIME', 'FNC1' => true, 'pattern' => '^7003(\d{10})$',],
'7004' => ['title' => 'ACTIVE POTENCY', 'FNC1' => true, 'pattern' => '^7004(\d{0,4})$',],
'7005' => ['title' => 'CATCH AREA', 'FNC1' => true, 'pattern' => '^7005([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,12})$',],
'7006' => ['title' => 'FIRST FREEZE DATE', 'FNC1' => true, 'pattern' => '^7006(\d{6})$',],
'7007' => ['title' => 'HARVEST DATE', 'FNC1' => true, 'pattern' => '^7007(\d{6,12})$',],
'7008' => ['title' => 'AQUATIC SPECIES', 'FNC1' => true, 'pattern' => '^7008([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,3})$',],
'7009' => ['title' => 'FISHING GEAR TYPE', 'FNC1' => true, 'pattern' => '^7009([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,10})$',],
'7010' => ['title' => 'PROD METHOD', 'FNC1' => true, 'pattern' => '^7010([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,2})$',],
'7011' => ['title' => 'TEST BY DATE', 'FNC1' => true, 'pattern' => '^7011(\d{6})(\d{0,4})$',],
'7020' => ['title' => 'REFURB LOT', 'FNC1' => true, 'pattern' => '^7020([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'7021' => ['title' => 'FUNC STAT', 'FNC1' => true, 'pattern' => '^7021([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'7022' => ['title' => 'REV STAT', 'FNC1' => true, 'pattern' => '^7022([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'7023' => ['title' => 'GIAI - ASSEMBLY', 'FNC1' => true, 'pattern' => '^7023([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'7030' => ['title' => 'PROCESSOR # 0', 'FNC1' => true, 'pattern' => '^7030(\d{3})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,27})$',],
'7031' => ['title' => 'PROCESSOR # 1', 'FNC1' => true, 'pattern' => '^7031(\d{3})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,27})$',],
'7032' => ['title' => 'PROCESSOR # 2', 'FNC1' => true, 'pattern' => '^7032(\d{3})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,27})$',],
'7033' => ['title' => 'PROCESSOR # 3', 'FNC1' => true, 'pattern' => '^7033(\d{3})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,27})$',],
'7034' => ['title' => 'PROCESSOR # 4', 'FNC1' => true, 'pattern' => '^7034(\d{3})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,27})$',],
'7035' => ['title' => 'PROCESSOR # 5', 'FNC1' => true, 'pattern' => '^7035(\d{3})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,27})$',],
'7036' => ['title' => 'PROCESSOR # 6', 'FNC1' => true, 'pattern' => '^7036(\d{3})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,27})$',],
'7037' => ['title' => 'PROCESSOR # 7', 'FNC1' => true, 'pattern' => '^7037(\d{3})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,27})$',],
'7038' => ['title' => 'PROCESSOR # 8', 'FNC1' => true, 'pattern' => '^7038(\d{3})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,27})$',],
'7039' => ['title' => 'PROCESSOR # 9', 'FNC1' => true, 'pattern' => '^7039(\d{3})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,27})$',],
'7040' => ['title' => 'UIC+EXT', 'FNC1' => true, 'pattern' => '^7040(\d[\x21-\x22\x25-\x2F\x30-\x39\x41-\x5A\x5F\x61-\x7A]{3})$',],
'710' => ['title' => 'NHRN PZN', 'FNC1' => true, 'pattern' => '^710([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'711' => ['title' => 'NHRN CIP', 'FNC1' => true, 'pattern' => '^711([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'712' => ['title' => 'NHRN CN', 'FNC1' => true, 'pattern' => '^712([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'713' => ['title' => 'NHRN DRN', 'FNC1' => true, 'pattern' => '^713([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'714' => ['title' => 'NHRN AIM', 'FNC1' => true, 'pattern' => '^714([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'715' => ['title' => 'NHRN NDC', 'FNC1' => true, 'pattern' => '^714([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'7230' => ['title' => 'CERT #1', 'FNC1' => true, 'pattern' => '^7230([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{2,30})$',],
'7231' => ['title' => 'CERT #2', 'FNC1' => true, 'pattern' => '^7231([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{2,30})$',],
'7232' => ['title' => 'CERT #3', 'FNC1' => true, 'pattern' => '^7232([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{2,30})$',],
'7233' => ['title' => 'CERT #4', 'FNC1' => true, 'pattern' => '^7233([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{2,30})$',],
'7234' => ['title' => 'CERT #5', 'FNC1' => true, 'pattern' => '^7234([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{2,30})$',],
'7235' => ['title' => 'CERT #6', 'FNC1' => true, 'pattern' => '^7235([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{2,30})$',],
'7236' => ['title' => 'CERT #7', 'FNC1' => true, 'pattern' => '^7236([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{2,30})$',],
'7237' => ['title' => 'CERT #8', 'FNC1' => true, 'pattern' => '^7237([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{2,30})$',],
'7238' => ['title' => 'CERT #9', 'FNC1' => true, 'pattern' => '^7238([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{2,30})$',],
'7239' => ['title' => 'CERT #10', 'FNC1' => true, 'pattern' => '^7239([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{2,30})$',],
'7240' => ['title' => 'PROTOCOL', 'FNC1' => true, 'pattern' => '^7240 ([\x21-\x22\x25-\x2F\x30-\x39\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'8001' => ['title' => 'DIMENSIONS', 'FNC1' => true, 'pattern' => '^8001(\d{14})$',],
'8002' => ['title' => 'CMT No.', 'FNC1' => true, 'pattern' => '^8002([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'8003' => ['title' => 'GRAI', 'FNC1' => true, 'pattern' => '^8003(\d{14})([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,16})$',],
'8004' => ['title' => 'GIAI', 'FNC1' => true, 'pattern' => '^8004([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'8005' => ['title' => 'PRICE PER UNIT', 'FNC1' => true, 'pattern' => '^8005(\d{6})$',],
'8006' => ['title' => 'ITIP', 'FNC1' => true, 'pattern' => '^8006(\d{14})(\d{2})(\d{2})$',],
'8007' => ['title' => 'IBAN', 'FNC1' => true, 'pattern' => '^8007([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,34})$',],
'8008' => ['title' => 'PROD TIME', 'FNC1' => true, 'pattern' => '^8008(\d{8})(\d{0,4})$',],
'8009' => ['title' => 'OPTSEN', 'FNC1' => true, 'pattern' => '^8009([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,50})$',],
'8010' => ['title' => 'CPID', 'FNC1' => true, 'pattern' => '^8010([\x23\x2D\x2F\x30-\x39\x41-\x5A]{5,30})$',],
'8011' => ['title' => 'CPID SERIAL', 'FNC1' => true, 'pattern' => '^8011(\d{0,12})$',],
'8012' => ['title' => 'VERSION', 'FNC1' => true, 'pattern' => '^8012([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,20})$',],
'8013' => ['title' => 'GMN (for medical devices, the default, global data title is BUDI-DI)', 'FNC1' => true, 'pattern' => '^8013([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,25})$',],
'8017' => ['title' => 'GSRN - PROVIDER', 'FNC1' => true, 'pattern' => '^8017(\d{18})$',],
'8018' => ['title' => 'GSRN - RECIPIENT', 'FNC1' => true, 'pattern' => '^8018(\d{18})$',],
'8019' => ['title' => 'SRIN', 'FNC1' => true, 'pattern' => '^8019(\d{0,10})$',],
'8020' => ['title' => 'REF No.', 'FNC1' => true, 'pattern' => '^8020([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,25})$',],
'8026' => ['title' => 'ITIP CONTENT', 'FNC1' => true, 'pattern' => '^8026(\d{14})(\d{2})(\d{2})$',],
'8110' => ['title' => '', 'FNC1' => true, 'pattern' => '^8110([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'8111' => ['title' => 'POINTS', 'FNC1' => true, 'pattern' => '^8111(\d{4})$',],
'8112' => ['title' => '', 'FNC1' => true, 'pattern' => '^8112([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'8200' => ['title' => 'PRODUCT URL', 'FNC1' => true, 'pattern' => '^8200([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,70})$',],
'90' => ['title' => 'INTERNAL', 'FNC1' => true, 'pattern' => '^90([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,30})$',],
'91' => ['title' => 'INTERNAL', 'FNC1' => true, 'pattern' => '^91([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,90})$',],
'92' => ['title' => 'INTERNAL', 'FNC1' => true, 'pattern' => '^92([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,90})$',],
'93' => ['title' => 'INTERNAL', 'FNC1' => true, 'pattern' => '^93([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,90})$',],
'94' => ['title' => 'INTERNAL', 'FNC1' => true, 'pattern' => '^94([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,90})$',],
'95' => ['title' => 'INTERNAL', 'FNC1' => true, 'pattern' => '^95([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,90})$',],
'96' => ['title' => 'INTERNAL', 'FNC1' => true, 'pattern' => '^96([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,90})$',],
'97' => ['title' => 'INTERNAL', 'FNC1' => true, 'pattern' => '^97([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,90})$',],
'98' => ['title' => 'INTERNAL', 'FNC1' => true, 'pattern' => '^98([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,90})$',],
'99' => ['title' => 'INTERNAL', 'FNC1' => true, 'pattern' => '^99([\x21-\x22\x25-\x2F\x30-\x39\x3A-\x3F\x41-\x5A\x5F\x61-\x7A]{0,90})$',],
];
public array $data = [];
/**
* Validate GS1 data
*
* @return bool
*
* @since 1.0.0
*/
public function validate() : bool
{
if (empty($this->data['01'] ?? '')) {
return false;
}
foreach ($this->data as $ai => $value) {
if (\preg_match(self::DEFINITIONS[$ai]['pattern'], $ai . $value) === false) {
return false;
}
}
return true;
}
/**
* Render GS1 string representation
*
* @return string
*
* @since 1.0.0
*/
public function renderString() : string
{
$text = '';
foreach ($this->data as $ai => $value) {
$text .= '(' . $ai . ')' . $value;
}
return $text;
}
/**
* Render internal GS1 string used for datamatrix etc.
*
* @return string
*
* @since 1.0.0
*/
public function renderCodeString() : string
{
// 232 = FNC1 = ]C1
$FNC1 = \chr(232);
$code = $FNC1;
$count = \count($this->data);
$counter = 0;
foreach ($this->data as $ai => $value) {
++$counter;
$code .= $ai . $value;
if (self::DEFINITIONS[$ai]['FNC1'] && $counter < $count) {
$code .= $FNC1;
}
}
return $code;
}
}

42
Models/Image.php Normal file
View File

@ -0,0 +1,42 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Models;
/**
* Image.
*
* @package Modules\Labeling\Models
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
class Image
{
public int $x = 0;
public int $y = 0;
public float $ratio = 0.0;
public int $x2 = 0;
public int $y2 = 0;
public string $src = '';
public ?\GdImage $resource = null;
public int $color = 0;
}

176
Models/Label.php Normal file
View File

@ -0,0 +1,176 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Models;
/**
* Label.
*
* @package Modules\Labeling\Models
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
class Label
{
public int $width = 50;
public int $height = 25;
public int $fillColor = -1;
public string $unit = 'cm';
public array $elements = [];
/**
* Render label
*
* @return null|\GdImage
*
* @since 1.0.0
*/
public function render() : ?\GdImage
{
$im = \imagecreatetruecolor((int) (37.8 * $this->width), (int) (37.8 * $this->height));
if ($im === false) {
return null;
}
$bg = \imagecolorallocatealpha($im, 255, 255, 255, 0);
if ($bg === false) {
return null;
}
\imagefill($im, 0, 0, $bg);
/*
$black = \imagecolorallocate($im, 0, 0, 0);
\imagecolortransparent($im, $black);
\imagealphablending($im, false);
\imagesavealpha($im, true);
*/
foreach ($this->elements as $element) {
$color = 0;
// @todo: replace int type with enum
if ($element instanceof Shape) {
if ($element->type === 1) {
// Line
if ($element->borderThickness === 1) {
\imageline($im, $element->x, $element->y, $element->x2, $element->y2, $color);
} else {
\imagefilledrectangle(
$im,
$element->x, $element->y,
$element->x2 + $element->borderThickness - 1, $element->y2 + $element->borderThickness - 1,
$color
);
}
} elseif ($element->type === 2) {
// Rectangle
\imagefilledrectangle(
$im,
$element->x, $element->y,
$element->x2 + $element->borderThickness, $element->y2 + $element->borderThickness,
$color
);
if ($element->fillColor === -1) {
\imagefilledrectangle(
$im,
$element->x + $element->borderThickness, $element->y + $element->borderThickness,
$element->x2, $element->y2,
$bg
);
}
}
// @todo: implement circle + elipse
} elseif ($element instanceof Text) {
\imagettftext($im, $element->size, 0, $element->x, $element->y, $color, $element->font, $element->text);
} elseif ($element instanceof Image) {
$in = $element->resource === null ? \imagecreatefrompng(__DIR__ . '/../../..' . $element->src) : $element->resource;
if ($in === false) {
return null;
}
$srcW = \imagesx($in);
$srcH = \imagesy($in);
// should resize
// @todo: impl. skewing
if ($element->ratio !== 0.0 || $element->x2 !== 0 || $element->y2 !== 0) {
$ratio = $element->ratio;
if ($ratio === 0.0) {
$ratio = ($element->x2 - $element->x) / $srcW;
}
$newW = (int) ($srcW * $ratio);
$newH = (int) ($srcH * $ratio);
$newIn = \imagecreatetruecolor($newW, $newH);
if ($newIn === false) {
return null;
}
$transparency = \imagecolorallocatealpha($newIn, 0, 0, 0, 127);
if ($transparency === false) {
return null;
}
\imagecolortransparent($newIn, $transparency);
\imagealphablending($newIn, false);
\imagesavealpha($newIn, true);
\imagecopyresampled(
$newIn, $in,
0, 0,
0, 0,
$newW, $newH,
$srcW, $srcH
);
$srcW = $newW;
$srcH = $newH;
\imagedestroy($in);
$in = $newIn;
}
$cut = \imagecreatetruecolor($srcW, $srcH);
if ($cut === false) {
return null;
}
\imagecopy($cut, $im, 0, 0, $element->x, $element->y, $srcW, $srcH);
\imagecopy($cut, $in, 0, 0, 0, 0, $srcW, $srcH);
\imagecopymerge(
$im, $cut,
$element->x, $element->y,
0, 0,
$srcW, $srcH,
100
);
\imagedestroy($in);
\imagedestroy($cut);
}
}
return $im;
}
}

104
Models/LabelLayout.php Normal file
View File

@ -0,0 +1,104 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\Labeling\Models;
use Modules\Media\Models\Collection;
use phpOMS\Localization\BaseStringL11n;
use phpOMS\Localization\ISO639x1Enum;
/**
* Bill type enum.
*
* @package Modules\Labeling\Models
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
class LabelLayout implements \JsonSerializable
{
/**
* Id
*
* @var int
* @since 1.0.0
*/
public int $id = 0;
public ?Collection $template = null;
/**
* Localization
*
* @var string|BaseStringL11n
*/
protected string | BaseStringL11n $l11n;
/**
* Set l11n
*
* @param string|BaseStringL11n $l11n Tag article l11n
* @param string $lang Language
*
* @return void
*
* @since 1.0.0
*/
public function setL11n(string | BaseStringL11n $l11n, string $lang = ISO639x1Enum::_EN) : void
{
if ($l11n instanceof BaseStringL11n) {
$this->l11n = $l11n;
} elseif (isset($this->l11n) && $this->l11n instanceof BaseStringL11n) {
$this->l11n->content = $l11n;
$this->l11n->setLanguage($lang);
} else {
$this->l11n = new BaseStringL11n();
$this->l11n->content = $l11n;
$this->l11n->ref = $this->id;
$this->l11n->setLanguage($lang);
}
}
/**
* @return string
*
* @since 1.0.0
*/
public function getL11n() : string
{
if (!isset($this->l11n)) {
return '';
}
return $this->l11n instanceof BaseStringL11n ? $this->l11n->content : $this->l11n;
}
/**
* {@inheritdoc}
*/
public function toArray() : array
{
return [
'id' => $this->id,
];
}
/**
* {@inheritdoc}
*/
public function jsonSerialize() : mixed
{
return $this->toArray();
}
}

View File

@ -0,0 +1,69 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\Labeling\Models;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
use phpOMS\Localization\BaseStringL11n;
/**
* Bill type mapper class.
*
* @package Modules\Labeling\Models
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*
* @template T of BaseStringL11n
* @extends DataMapperFactory<T>
*/
final class LabelLayoutL11nMapper extends DataMapperFactory
{
/**
* Columns.
*
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0
*/
public const COLUMNS = [
'labeling_layout_l11n_id' => ['name' => 'labeling_layout_l11n_id', 'type' => 'int', 'internal' => 'id'],
'labeling_layout_l11n_name' => ['name' => 'labeling_layout_l11n_name', 'type' => 'string', 'internal' => 'content', 'autocomplete' => true],
'labeling_layout_l11n_type' => ['name' => 'labeling_layout_l11n_type', 'type' => 'int', 'internal' => 'ref'],
'labeling_layout_l11n_language' => ['name' => 'labeling_layout_l11n_language', 'type' => 'string', 'internal' => 'language'],
];
/**
* Primary table.
*
* @var string
* @since 1.0.0
*/
public const TABLE = 'labeling_layout_l11n';
/**
* Primary field name.
*
* @var string
* @since 1.0.0
*/
public const PRIMARYFIELD = 'labeling_layout_l11n_id';
/**
* Model to use by the mapper.
*
* @var class-string<T>
* @since 1.0.0
*/
public const MODEL = BaseStringL11n::class;
}

View File

@ -0,0 +1,96 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\Labeling\Models;
use Modules\Media\Models\CollectionMapper;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
/**
* Labeling mapper class.
*
* @package Modules\Labeling\Models
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*
* @template T of LabelLayout
* @extends DataMapperFactory<T>
*/
final class LabelLayoutMapper extends DataMapperFactory
{
/**
* Columns.
*
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0
*/
public const COLUMNS = [
'labeling_layout_id' => ['name' => 'labeling_layout_id', 'type' => 'int', 'internal' => 'id'],
'labeling_layout_template' => ['name' => 'labeling_layout_template', 'type' => 'int', 'internal' => 'template'],
];
/**
* Has many relation.
*
* @var array<string, array{mapper:class-string, table:string, self?:?string, external?:?string, column?:string}>
* @since 1.0.0
*/
public const HAS_MANY = [
'l11n' => [
'mapper' => LabelLayoutL11nMapper::class,
'table' => 'labeling_layout_l11n',
'self' => 'labeling_layout_l11n_type',
'column' => 'content',
'external' => null,
],
];
/**
* Has one relation.
*
* @var array<string, array{mapper:class-string, external:string, by?:string, column?:string, conditional?:bool}>
* @since 1.0.0
*/
public const OWNS_ONE = [
'template' => [
'mapper' => CollectionMapper::class,
'external' => 'labeling_layout_template',
],
];
/**
* Model to use by the mapper.
*
* @var class-string<T>
* @since 1.0.0
*/
public const MODEL = LabelLayout::class;
/**
* Primary table.
*
* @var string
* @since 1.0.0
*/
public const TABLE = 'labeling_layout';
/**
* Primary field name.
*
* @var string
* @since 1.0.0
*/
public const PRIMARYFIELD = 'labeling_layout_id';
}

View File

@ -0,0 +1,30 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Models;
use phpOMS\Stdlib\Base\Enum;
/**
* Permision state enum.
*
* @package Modules\Labeling\Models
* @license OMS License 2.0
* @link https://orange-management.org
* @since 1.0.0
*/
abstract class PermissionState extends Enum
{
public const LABEL = 1;
}

30
Models/SettingsEnum.php Normal file
View File

@ -0,0 +1,30 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
namespace Modules\Labeling\Models;
use phpOMS\Stdlib\Base\Enum;
/**
* Module settings enum.
*
* @package Modules\Labeling\Models
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
abstract class SettingsEnum extends Enum
{
public const DEFAULT_LABEL = '1005100001';
}

42
Models/Shape.php Normal file
View File

@ -0,0 +1,42 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Models;
/**
* Shape.
*
* @package Modules\Labeling\Models
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
class Shape
{
public int $x = 0;
public int $y = 0;
public int $x2 = 0;
public int $y2 = 0;
public int $type = ShapeType::RECTANGLE;
public int $color = 0;
public int $borderThickness = 1;
public int $fillColor = -1;
}

36
Models/ShapeType.php Normal file
View File

@ -0,0 +1,36 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Models;
use phpOMS\Stdlib\Base\Enum;
/**
* Shape type enum.
*
* @package Modules\Labeling\Models
* @license OMS License 2.0
* @link https://orange-management.org
* @since 1.0.0
*/
abstract class ShapeType extends Enum
{
public const LINE = 1;
public const RECTANGLE = 2;
public const CIRCLE = 3;
public const TRIANGLE = 4;
}

53
Models/Text.php Normal file
View File

@ -0,0 +1,53 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling\Models
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Labeling\Models;
/**
* Shape.
*
* @package Modules\Labeling\Models
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*/
class Text
{
public int $x = 0;
public int $y = 0;
public int $x2 = 0;
public int $y2 = 0;
public int $size = 11;
public string $font = __DIR__ . '/../../../Resources/fonts/lato/Lato-Regular.ttf';
public string $text = '';
public int $color = 0;
// align (-1 = start, 0 = middle, 1 = end)
public int $alignX = -1;
public int $alignY = -1;
public bool $bold = false;
public bool $underline = false;
public bool $italic = false;
}

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => 'Labeling',
'List' => 'List',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,18 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Localization
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
return ['Navigation' => [
'Labeling' => '',
'List' => '',
]];

View File

@ -0,0 +1,16 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\Labeling
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
return ['Labeling' => [
]];

View File

@ -0,0 +1,102 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\ItemManagement
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
use phpOMS\Uri\UriFactory;
/** @var \phpOMS\Views\View $this */
/** @var \Modules\ItemManagement\Models\Item[] $items */
$items = $this->data['items'] ?? [];
echo $this->data['nav']->render(); ?>
<div class="row">
<div class="col-xs-12">
<section class="portlet">
<div class="portlet-head"><?= $this->getHtml('Items', 'ItemManagement', 'Backend'); ?><i class="lni lni-download download btn end-xs"></i></div>
<div class="slider">
<table id="iSalesItemList" class="default sticky">
<thead>
<tr>
<td>
<td><?= $this->getHtml('Number', 'ItemManagement', 'Backend'); ?>
<label for="iSalesItemList-sort-1">
<input type="radio" name="iSalesItemList-sort" id="iSalesItemList-sort-1">
<i class="sort-asc fa fa-chevron-up"></i>
</label>
<label for="iSalesItemList-sort-2">
<input type="radio" name="iSalesItemList-sort" id="iSalesItemList-sort-2">
<i class="sort-desc fa fa-chevron-down"></i>
</label>
<label>
<i class="filter fa fa-filter"></i>
</label>
<td><?= $this->getHtml('Name', 'ItemManagement', 'Backend'); ?>
<label for="iSalesItemList-sort-3">
<input type="radio" name="iSalesItemList-sort" id="iSalesItemList-sort-3">
<i class="sort-asc fa fa-chevron-up"></i>
</label>
<label for="iSalesItemList-sort-4">
<input type="radio" name="iSalesItemList-sort" id="iSalesItemList-sort-4">
<i class="sort-desc fa fa-chevron-down"></i>
</label>
<label>
<i class="filter fa fa-filter"></i>
</label>
<td><?= $this->getHtml('Name', 'ItemManagement', 'Backend'); ?>
<label for="iSalesItemList-sort-5">
<input type="radio" name="iSalesItemList-sort" id="iSalesItemList-sort-5">
<i class="sort-asc fa fa-chevron-up"></i>
</label>
<label for="iSalesItemList-sort-6">
<input type="radio" name="iSalesItemList-sort" id="iSalesItemList-sort-6">
<i class="sort-desc fa fa-chevron-down"></i>
</label>
<label>
<i class="filter fa fa-filter"></i>
</label>
<td class="wf-100"><?= $this->getHtml('Name', 'ItemManagement', 'Backend'); ?>
<label for="iSalesItemList-sort-7">
<input type="radio" name="iSalesItemList-sort" id="iSalesItemList-sort-7">
<i class="sort-asc fa fa-chevron-up"></i>
</label>
<label for="iSalesItemList-sort-8">
<input type="radio" name="iSalesItemList-sort" id="iSalesItemList-sort-8">
<i class="sort-desc fa fa-chevron-down"></i>
</label>
<label>
<i class="filter fa fa-filter"></i>
</label>
<tbody>
<?php $count = 0; foreach ($items as $key => $value) : ++$count;
$url = UriFactory::build('{/base}/warehouse/labeling/item?id=' . $value->id);
$image = $value->getFileByTypeName('item_profile_image');
?>
<tr data-href="<?= $url; ?>">
<td><a href="<?= $url; ?>"><img alt="<?= $this->getHtml('IMG_alt_item'); ?>" width="30" loading="lazy" class="item-image"
src="<?= $image->id === 0
? 'Web/Backend/img/logo_grey.png'
: UriFactory::build($image->getPath()); ?>"></a>
<td><a href="<?= $url; ?>"><?= $this->printHtml($value->number); ?></a>
<td><a href="<?= $url; ?>"><?= $this->printHtml($value->getL11n('name1')->content); ?></a>
<td><a href="<?= $url; ?>"><?= $this->printHtml($value->getL11n('name2')->content); ?></a>
<td><a href="<?= $url; ?>"><?= $this->printHtml($value->getL11n('name3')->content); ?></a>
<?php endforeach; ?>
<?php if ($count === 0) : ?>
<tr><td colspan="9" class="empty"><?= $this->getHtml('Empty', '0', '0'); ?>
<?php endif; ?>
</table>
</div>
</section>
</div>
</div>

View File

@ -0,0 +1,14 @@
<?php declare(strict_types=1);
$layout = $this->data['layout'];
$template = \reset($layout->template->sources);
$item = $this->data['item'];
$label = include_once $template->getAbsolutePath();
if (isset($this->data['path'])) {
\imagepng($label->render(), $this->data['path']);
} else {
\imagepng($label->render());
}

View File

@ -0,0 +1,44 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\StockTaking
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
echo $this->data['nav']->render();
$layout = \reset($this->data['layouts']);
$media = $layout->template;
$template = \reset($media->sources);
$item = $this->data['item'];
$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;
?>
<div class="row">
<div class="col-xs-12 col-md-6">
<div class="portlet">
<img style="width: 100%" src="<?php echo $inlineImage; ?>" alt="Inline Image">
</div>
</div>
</div>

View File

BIN
Theme/icons/iso/0001.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 931 B

BIN
Theme/icons/iso/0002.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
Theme/icons/iso/0003.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
Theme/icons/iso/0004.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
Theme/icons/iso/0005.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
Theme/icons/iso/0006.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
Theme/icons/iso/0007.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
Theme/icons/iso/0008.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

BIN
Theme/icons/iso/0009.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
Theme/icons/iso/0010.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

BIN
Theme/icons/iso/0011.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 936 B

BIN
Theme/icons/iso/0012.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

BIN
Theme/icons/iso/0013.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
Theme/icons/iso/0014.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

BIN
Theme/icons/iso/0015.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

BIN
Theme/icons/iso/0016.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
Theme/icons/iso/0017.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
Theme/icons/iso/0018.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
Theme/icons/iso/0019.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
Theme/icons/iso/0020.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

BIN
Theme/icons/iso/0021.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

BIN
Theme/icons/iso/0022.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

BIN
Theme/icons/iso/0023.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 980 B

BIN
Theme/icons/iso/0024.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
Theme/icons/iso/0025.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
Theme/icons/iso/0026.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
Theme/icons/iso/0027.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
Theme/icons/iso/0028.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
Theme/icons/iso/0029.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
Theme/icons/iso/0030.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
Theme/icons/iso/0031.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
Theme/icons/iso/0032.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
Theme/icons/iso/0033.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
Theme/icons/iso/0034.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 B

BIN
Theme/icons/iso/0034A.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 880 B

BIN
Theme/icons/iso/0034B.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 914 B

BIN
Theme/icons/iso/0035.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Some files were not shown because too many files have changed in this diff Show More