auto fixes + some impl.

This commit is contained in:
Dennis Eichhorn 2024-01-26 22:53:58 +00:00
parent f8afe183e1
commit fdaa7fd557
22 changed files with 184 additions and 163 deletions

View File

@ -152,6 +152,11 @@
"type": "TINYINT(1)",
"null": false
},
"assetmgmt_attr_type_internal": {
"name": "assetmgmt_attr_type_internal",
"type": "TINYINT(1)",
"null": false
},
"assetmgmt_attr_type_required": {
"description": "Every asset must have this attribute type if set to true.",
"name": "assetmgmt_attr_type_required",

View File

@ -20,7 +20,6 @@ use phpOMS\Message\Http\HttpRequest;
use phpOMS\Message\Http\HttpResponse;
use phpOMS\Module\InstallerAbstract;
use phpOMS\Module\ModuleInfo;
use phpOMS\Uri\HttpUri;
/**
* Installer class.
@ -90,7 +89,7 @@ final class Installer extends InstallerAbstract
/** @var array $type */
foreach ($types as $type) {
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('duration', $type['duration']);
@ -119,7 +118,7 @@ final class Installer extends InstallerAbstract
}
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('title', $l11n);
@ -154,7 +153,7 @@ final class Installer extends InstallerAbstract
/** @var array $type */
foreach ($types as $type) {
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('name', $type['name'] ?? '');
@ -180,7 +179,7 @@ final class Installer extends InstallerAbstract
}
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('title', $l11n);
@ -215,13 +214,15 @@ final class Installer extends InstallerAbstract
/** @var array $attribute */
foreach ($attributes as $attribute) {
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('name', $attribute['name'] ?? '');
$request->setData('title', \reset($attribute['l11n']));
$request->setData('language', \array_keys($attribute['l11n'])[0] ?? 'en');
$request->setData('is_required', $attribute['is_required'] ?? false);
$request->setData('repeatable', $attribute['repeatable'] ?? false);
$request->setData('internal', $attribute['internal'] ?? false);
$request->setData('custom', $attribute['is_custom_allowed'] ?? false);
$request->setData('validation_pattern', $attribute['validation_pattern'] ?? '');
$request->setData('datatype', (int) $attribute['value_type']);
@ -245,7 +246,7 @@ final class Installer extends InstallerAbstract
}
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('title', $l11n);
@ -284,7 +285,7 @@ final class Installer extends InstallerAbstract
/** @var array $value */
foreach ($attribute['values'] as $value) {
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('value', $value['value'] ?? '');
@ -318,7 +319,7 @@ final class Installer extends InstallerAbstract
}
$response = new HttpResponse();
$request = new HttpRequest(new HttpUri(''));
$request = new HttpRequest();
$request->header->account = 1;
$request->setData('title', $l11n);

View File

@ -6,7 +6,7 @@ use phpOMS\Account\PermissionType;
use phpOMS\Router\RouteVerb;
return [
'^.*/accounting/attribute/type/list.*$' => [
'^.*/accounting/attribute/type/list(\?.*$|$)' => [
[
'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementAttributeTypeList',
'verb' => RouteVerb::GET,
@ -17,7 +17,7 @@ return [
],
],
],
'^.*/accounting/attribute/type\?.*$' => [
'^.*/accounting/attribute/type(\?.*$|$)' => [
[
'dest' => '\Modules\EquipmentManagement\Controller\BackendController:viewEquipmentManagementAttributeType',
'verb' => RouteVerb::GET,
@ -29,7 +29,7 @@ return [
],
],
'^.*/accounting/asset/list.*$' => [
'^.*/accounting/asset/list(\?.*$|$)' => [
[
'dest' => '\Modules\AssetManagement\Controller\BackendController:viewAssetManagementList',
'verb' => RouteVerb::GET,
@ -40,9 +40,9 @@ return [
],
],
],
'^.*/accounting/asset/profile.*$' => [
'^.*/accounting/asset/view(\?.*$|$)' => [
[
'dest' => '\Modules\AssetManagement\Controller\BackendController:viewAssetManagementProfile',
'dest' => '\Modules\AssetManagement\Controller\BackendController:viewAssetManagementView',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
@ -51,7 +51,7 @@ return [
],
],
],
'^.*/accounting/asset/entry/list.*$' => [
'^.*/accounting/asset/entry/list(\?.*$|$)' => [
[
'dest' => '\Modules\AssetManagement\Controller\BackendController:viewAssetManagementEntryList',
'verb' => RouteVerb::GET,
@ -62,7 +62,7 @@ return [
],
],
],
'^.*/accounting/asset/entry/view.*$' => [
'^.*/accounting/asset/entry/view(\?.*$|$)' => [
[
'dest' => '\Modules\AssetManagement\Controller\BackendController:viewAssetManagementEntryView',
'verb' => RouteVerb::GET,
@ -73,7 +73,7 @@ return [
],
],
],
'^.*/accounting/asset/create.*$' => [
'^.*/accounting/asset/create(\?.*$|$)' => [
[
'dest' => '\Modules\AssetManagement\Controller\BackendController:viewAssetManagementCreate',
'verb' => RouteVerb::GET,
@ -84,7 +84,7 @@ return [
],
],
],
'^.*/accounting/asset/table.*$' => [
'^.*/accounting/asset/table(\?.*$|$)' => [
[
'dest' => '\Modules\AssetManagement\Controller\BackendController:viewAssetManagementAssetTable',
'verb' => RouteVerb::GET,
@ -94,5 +94,5 @@ return [
'state' => PermissionCategory::ASSET,
],
],
]
],
];

View File

@ -14,14 +14,14 @@ declare(strict_types=1);
namespace Modules\AssetManagement\Controller;
use Modules\Attribute\Models\Attribute;
use Modules\Attribute\Models\AttributeType;
use Modules\Attribute\Models\AttributeValue;
use Modules\AssetManagement\Models\Attribute\AssetAttributeMapper;
use Modules\AssetManagement\Models\Attribute\AssetAttributeTypeL11nMapper;
use Modules\AssetManagement\Models\Attribute\AssetAttributeTypeMapper;
use Modules\AssetManagement\Models\Attribute\AssetAttributeValueL11nMapper;
use Modules\AssetManagement\Models\Attribute\AssetAttributeValueMapper;
use Modules\Attribute\Models\Attribute;
use Modules\Attribute\Models\AttributeType;
use Modules\Attribute\Models\AttributeValue;
use phpOMS\Localization\BaseStringL11n;
use phpOMS\Message\Http\RequestStatusCode;
use phpOMS\Message\RequestAbstract;
@ -61,12 +61,15 @@ final class ApiAssetAttributeController extends Controller
return;
}
$type = AssetAttributeTypeMapper::get()->with('defaults')->where('id', (int) $request->getData('type'))->execute();
$type = AssetAttributeTypeMapper::get()
->with('defaults')
->where('id', (int) $request->getData('type'))
->execute();
if (!$type->repeatable) {
$attr = AssetAttributeMapper::count()
->with('type')
->where('type/id', (int) $request->getData('type'))
->where('type/id', $type->id)
->where('ref', (int) $request->getData('ref'))
->execute();
@ -164,13 +167,20 @@ final class ApiAssetAttributeController extends Controller
->where('id', $request->getDataInt('type') ?? 0)
->execute();
if ($type->isInternal) {
$response->header->status = RequestStatusCode::R_403;
$this->createInvalidCreateResponse($request, $response, $val);
return;
}
$attrValue = $this->createAttributeValueFromRequest($request, $type);
$this->createModel($request->header->account, $attrValue, AssetAttributeValueMapper::class, 'attr_value', $request->getOrigin());
if ($attrValue->isDefault) {
$this->createModelRelation(
$request->header->account,
(int) $request->getData('type'),
$type->id,
$attrValue->id,
AssetAttributeTypeMapper::class, 'defaults', '', $request->getOrigin()
);

View File

@ -92,7 +92,7 @@ final class ApiAssetController extends Controller
$asset->name = $request->getDataString('name') ?? '';
$asset->info = $request->getDataString('info') ?? '';
$asset->type = new NullBaseStringL11nType((int) ($request->getDataInt('type') ?? 0));
$asset->status = $request->getDataInt('status') ?? AssetStatus::INACTIVE;
$asset->status = AssetStatus::tryFromValue($request->getDataInt('status')) ?? AssetStatus::INACTIVE;
$asset->unit = $request->getDataInt('unit') ?? $this->app->unitId;
return $asset;
@ -500,7 +500,7 @@ final class ApiAssetController extends Controller
$new->name = $request->getDataString('name') ?? $new->name;
$new->info = $request->getDataString('info') ?? $new->info;
$new->type = $request->hasData('type') ? new NullBaseStringL11nType((int) ($request->getDataInt('type') ?? 0)) : $new->type;
$new->status = $request->getDataInt('status') ?? $new->status;
$new->status = AssetStatus::tryFromValue($request->getDataInt('status')) ?? $new->status;
$new->unit = $request->getDataInt('unit') ?? $this->app->unitId;
return $new;

View File

@ -74,7 +74,10 @@ final class ApiAssetTypeController extends Controller
private function createAssetTypeFromRequest(RequestAbstract $request) : AssetType
{
$assetType = new AssetType();
$assetType->setL11n($request->getDataString('title') ?? '', $request->getDataString('language') ?? ISO639x1Enum::_EN);
$assetType->setL11n(
$request->getDataString('title') ?? '',
ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? ISO639x1Enum::_EN
);
$assetType->depreciationDuration = $request->getDataInt('duration') ?? 0;
$assetType->industry = $request->getDataInt('industry') ?? 0;
@ -141,9 +144,7 @@ final class ApiAssetTypeController extends Controller
{
$assetTypeL11n = new BaseStringL11n();
$assetTypeL11n->ref = $request->getDataInt('type') ?? 0;
$assetTypeL11n->setLanguage(
$request->getDataString('language') ?? $request->header->l11n->language
);
$assetTypeL11n->language = ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? $request->header->l11n->language;
$assetTypeL11n->content = $request->getDataString('title') ?? '';
return $assetTypeL11n;
@ -329,9 +330,7 @@ final class ApiAssetTypeController extends Controller
*/
public function updateAssetTypeL11nFromRequest(RequestAbstract $request, BaseStringL11n $new) : BaseStringL11n
{
$new->setLanguage(
$request->getDataString('language') ?? $new->language
);
$new->language = ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? $new->language;
$new->content = $request->getDataString('title') ?? $new->content;
return $new;

View File

@ -14,8 +14,6 @@ declare(strict_types=1);
namespace Modules\AssetManagement\Controller;
use Modules\Admin\Models\LocalizationMapper;
use Modules\Admin\Models\SettingsEnum;
use Modules\AssetManagement\Models\AssetMapper;
use Modules\AssetManagement\Models\AssetTypeMapper;
use Modules\AssetManagement\Models\Attribute\AssetAttributeTypeL11nMapper;
@ -84,7 +82,7 @@ final class BackendController extends Controller
public function viewAssetManagementAttributeType(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/AssetManagement/Theme/Backend/asset-profile');
$view->setTemplate('/Modules/AssetManagement/Theme/Backend/asset-view');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1006601001, $request, $response);
/** @var \Modules\Attribute\Models\AttributeType $attribute */
@ -116,19 +114,19 @@ final class BackendController extends Controller
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewAssetManagementAssetProfile(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface
public function viewAssetManagementAssetView(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/AssetManagement/Theme/Backend/asset-profile');
$view->setTemplate('/Modules/AssetManagement/Theme/Backend/asset-view');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1008402001, $request, $response);
// @todo This langauge filtering doesn't work. But it was working with the old mappers. Maybe there is a bug in the where() definition. Need to inspect the actual query.
$asset = AssetMapper::get()
->with('attributes')
->with('attributes/type')
->with('attributes/value')
->with('attributes/type/l11n')
//->with('attributes/value/l11n')
->with('files')
->with('files/types')
->with('type')
@ -136,6 +134,7 @@ final class BackendController extends Controller
->where('id', (int) $request->getData('id'))
->where('type/l11n/language', $response->header->l11n->language)
->where('attributes/type/l11n/language', $response->header->l11n->language)
//->where('attributes/value/l11n/language', $response->header->l11n->language)
->execute();
$view->data['asset'] = $asset;
@ -174,11 +173,8 @@ final class BackendController extends Controller
$view->data['units'] = $units;
/** @var \Model\Setting $settings */
$settings = $this->app->appSettings->get(null, SettingsEnum::DEFAULT_LOCALIZATION);
$view->data['attributeView'] = new \Modules\Attribute\Theme\Backend\Components\AttributeView($this->app->l11nManager, $request, $response);
$view->data['attributeView']->data['default_localization'] = LocalizationMapper::get()->where('id', (int) $settings->id)->execute();
$view->data['attributeView']->data['default_localization'] = $this->app->l11nServer;
$view->data['media-upload'] = new \Modules\Media\Theme\Backend\Components\Upload\BaseView($this->app->l11nManager, $request, $response);
$view->data['asset-notes'] = new \Modules\Editor\Theme\Backend\Components\Compound\BaseView($this->app->l11nManager, $request, $response);

View File

@ -14,8 +14,8 @@ declare(strict_types=1);
namespace Modules\AssetManagement\Models;
use Modules\Editor\Models\EditorDocMapper;
use Modules\AssetManagement\Models\Attribute\AssetAttributeMapper;
use Modules\Editor\Models\EditorDocMapper;
use Modules\Media\Models\MediaMapper;
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;

View File

@ -18,7 +18,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
use phpOMS\Localization\BaseStringL11n;
/**
* mapper class.
* Asset type l11n mapper class.
*
* @package Modules\AssetManagement\Models
* @license OMS License 2.0

View File

@ -43,6 +43,7 @@ final class AssetAttributeTypeMapper extends DataMapperFactory
'assetmgmt_attr_type_fields' => ['name' => 'assetmgmt_attr_type_fields', 'type' => 'int', 'internal' => 'fields'],
'assetmgmt_attr_type_custom' => ['name' => 'assetmgmt_attr_type_custom', 'type' => 'bool', 'internal' => 'custom'],
'assetmgmt_attr_type_repeatable' => ['name' => 'assetmgmt_attr_type_repeatable', 'type' => 'bool', 'internal' => 'repeatable'],
'assetmgmt_attr_type_internal' => ['name' => 'assetmgmt_attr_type_internal', 'type' => 'bool', 'internal' => 'isInternal'],
'assetmgmt_attr_type_pattern' => ['name' => 'assetmgmt_attr_type_pattern', 'type' => 'string', 'internal' => 'validationPattern'],
'assetmgmt_attr_type_required' => ['name' => 'assetmgmt_attr_type_required', 'type' => 'bool', 'internal' => 'isRequired'],
];

View File

@ -24,53 +24,53 @@ echo $this->data['nav']->render(); ?>
<section class="portlet">
<div class="portlet-head"><?= $this->getHtml('Assets'); ?><i class="g-icon download btn end-xs">download</i></div>
<div class="slider">
<table id="iSalesClientList" class="default sticky">
<table id="iAssetList" class="default sticky">
<thead>
<tr>
<td>
<td><?= $this->getHtml('ID', '0', '0'); ?>
<label for="iSalesClientList-sort-1">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-1">
<label for="iAssetList-sort-1">
<input type="radio" name="iAssetList-sort" id="iAssetList-sort-1">
<i class="sort-asc g-icon">expand_less</i>
</label>
<label for="iSalesClientList-sort-2">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-2">
<label for="iAssetList-sort-2">
<input type="radio" name="iAssetList-sort" id="iAssetList-sort-2">
<i class="sort-desc g-icon">expand_more</i>
</label>
<label>
<i class="filter g-icon">filter_alt</i>
</label>
<td><?= $this->getHtml('Status'); ?>
<label for="iSalesClientList-sort-3">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-3">
<label for="iAssetList-sort-3">
<input type="radio" name="iAssetList-sort" id="iAssetList-sort-3">
<i class="sort-asc g-icon">expand_less</i>
</label>
<label for="iSalesClientList-sort-4">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-4">
<label for="iAssetList-sort-4">
<input type="radio" name="iAssetList-sort" id="iAssetList-sort-4">
<i class="sort-desc g-icon">expand_more</i>
</label>
<label>
<i class="filter g-icon">filter_alt</i>
</label>
<td class="wf-100"><?= $this->getHtml('Name'); ?>
<label for="iSalesClientList-sort-5">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-5">
<label for="iAssetList-sort-5">
<input type="radio" name="iAssetList-sort" id="iAssetList-sort-5">
<i class="sort-asc g-icon">expand_less</i>
</label>
<label for="iSalesClientList-sort-6">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-6">
<label for="iAssetList-sort-6">
<input type="radio" name="iAssetList-sort" id="iAssetList-sort-6">
<i class="sort-desc g-icon">expand_more</i>
</label>
<label>
<i class="filter g-icon">filter_alt</i>
</label>
<td><?= $this->getHtml('Type'); ?>
<label for="iSalesClientList-sort-7">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-7">
<label for="iAssetList-sort-7">
<input type="radio" name="iAssetList-sort" id="iAssetList-sort-7">
<i class="sort-asc g-icon">expand_less</i>
</label>
<label for="iSalesClientList-sort-8">
<input type="radio" name="iSalesClientList-sort" id="iSalesClientList-sort-8">
<label for="iAssetList-sort-8">
<input type="radio" name="iAssetList-sort" id="iAssetList-sort-8">
<i class="sort-desc g-icon">expand_more</i>
</label>
<label>
@ -81,7 +81,7 @@ echo $this->data['nav']->render(); ?>
$count = 0;
foreach ($assets as $key => $value) :
++$count;
$url = UriFactory::build('{/base}/accounting/asset/profile?{?}&id=' . $value->id);
$url = UriFactory::build('{/base}/accounting/asset/view?{?}&id=' . $value->id);
?>
<tr data-href="<?= $url; ?>">
<td>

View File

@ -25,10 +25,8 @@ $assetStatus = AssetStatus::getConstants();
* @var \Modules\AssetManagement\Models\Asset $asset
*/
$asset = $this->data['asset'] ?? new NullAsset();
$files = $asset->files;
$assetImage = $this->data['assetImage'] ?? new NullMedia();
$assetTypes = $this->data['types'] ?? [];
$attributeView = $this->data['attributeView'];
/**
* @var \phpOMS\Views\View $this
@ -142,7 +140,7 @@ echo $this->data['nav']->render();
<input type="radio" id="c-tab-2" name="tabular-2"<?= $this->request->uri->fragment === 'c-tab-2' ? ' checked' : ''; ?>>
<div class="tab">
<div class="row">
<?= $attributeView->render(
<?= $this->data['attributeView']->render(
$asset->attributes,
$this->data['attributeTypes'] ?? [],
$this->data['units'] ?? [],

View File

@ -1,4 +1,15 @@
<?php
/**
* Jingga
*
* PHP Version 8.1
*
* @package Modules\AssetManagement\tests
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
\ini_set('memory_limit', '2048M');