code fixes

This commit is contained in:
Dennis Eichhorn 2024-03-15 20:24:38 +00:00
parent 259657c410
commit a6aa448ed0
9 changed files with 69 additions and 36 deletions

View File

@ -18,10 +18,10 @@ use Modules\ItemManagement\Models\SettingsEnum;
return [
[
"description" => "Default item segmentation (segment, section, sales group, product group)",
'type' => 'setting',
'name' => SettingsEnum::DEFAULT_SEGMENTATION,
'content' => '{"segment":1, "section":1, "sales_group":1, "product_group":1}',
'pattern' => '',
'module' => ApiController::NAME,
'type' => 'setting',
'name' => SettingsEnum::DEFAULT_SEGMENTATION,
'content' => '{"segment":1, "section":1, "sales_group":1, "product_group":1}',
'pattern' => '',
'module' => ApiController::NAME,
],
];

View File

@ -522,6 +522,7 @@
"is_required": true,
"default_value": "",
"values": [
{ "value": "GENERAL" },
{ "value": "SOFTWARE" },
{ "value": "SERVICE" }
]
@ -538,6 +539,7 @@
"is_required": true,
"default_value": "",
"values": [
{ "value": "GENERAL" },
{ "value": "SOFTWARE" },
{ "value": "SERVICE" }
]

View File

@ -61,6 +61,8 @@ final class Installer extends InstallerAbstract
$attrValues = self::createAttributeValues($app, $attrTypes, $attributes);
$data = include __DIR__ . '/Install/Admin.install.php';
/** @var array $content */
$content = \json_decode($data[0]['content'], true);
foreach ($content as $type => $_) {

View File

@ -95,6 +95,7 @@ final class ApiController extends Controller
->execute();
if (empty($l11n)) {
/** @var BaseStringL11n[] $l11n */
$l11n = ItemL11nMapper::getAll()
->with('type')
->where('type/title', ['name1', 'name2'], 'IN')
@ -107,6 +108,7 @@ final class ApiController extends Controller
if (empty($l11n)) {
$searches = \explode(' ', $request->getDataString('search') ?? '');
foreach ($searches as $search) {
/** @var BaseStringL11n[] $l11n */
$l11n = ItemL11nMapper::getAll()
->with('type')
->where('type/title', ['internal_matchcodes'], 'IN')
@ -122,6 +124,7 @@ final class ApiController extends Controller
if (empty($l11n)) {
foreach ($searches as $search) {
/** @var BaseStringL11n[] $l11n */
$l11n = ItemL11nMapper::getAll()
->with('type')
->where('type/title', ['name1', 'name2'], 'IN')
@ -139,10 +142,11 @@ final class ApiController extends Controller
$itemList = [];
if (!empty($l11n)) {
$itemIds = \array_map(function (BaseStringL11n $l) {
$itemIds = \array_map(function (BaseStringL11n $l) : int {
return $l->ref;
}, $l11n);
/** @var Item[] $itemList */
$itemList = ItemMapper::getAll()
->with('l11n')
->with('l11n/type')
@ -187,6 +191,19 @@ final class ApiController extends Controller
. (empty($item->number) ? $item->id : $item->number);
}
/**
* Api method to export items items
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param array $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiItemListExport(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void
{
$items = [];
@ -194,13 +211,13 @@ final class ApiController extends Controller
/** @var Item $item */
foreach (ItemMapper::yield()->execute() as $item) {
$items[] = [
'id' => $item->id,
'id' => $item->id,
'name1' => $item->getL11n('name1')->content,
'name2' => $item->getL11n('name2')->content,
];
}
$report = new \Modules\Exchange\Models\Report();
$report = new \Modules\Exchange\Models\Report();
$report->data = $items;
$this->app->moduleManager->get('Exchange', 'Api')
@ -236,20 +253,24 @@ final class ApiController extends Controller
$this->app->dbPool->get()->con->commit();
// Define default item containers
/** @var \Modules\Attribute\Models\AttributeType[] $types */
$types = ItemAttributeTypeMapper::getAll()
->where('name', ['default_sales_container', 'default_purchase_container'], 'IN')
->execute();
foreach ($types as $type) {
$internalResponse = clone $response;
$internalRequest = new HttpRequest();
$primaryContainer = \reset($item->container);
if ($primaryContainer !== false) {
foreach ($types as $type) {
$internalResponse = clone $response;
$internalRequest = new HttpRequest();
$internalRequest->header->account = $request->header->account;
$internalRequest->setData('ref', $item->id);
$internalRequest->setData('type', $type->id);
$internalRequest->setData('value', \reset($item->container)->id);
$internalRequest->header->account = $request->header->account;
$internalRequest->setData('ref', $item->id);
$internalRequest->setData('type', $type->id);
$internalRequest->setData('value', $primaryContainer->id);
$this->app->moduleManager->get('ItemManagement', 'ApiAttribute')->apiItemAttributeCreate($internalRequest, $internalResponse);
$this->app->moduleManager->get('ItemManagement', 'ApiAttribute')->apiItemAttributeCreate($internalRequest, $internalResponse);
}
}
if ($this->app->moduleManager->isActive('Billing')) {
@ -330,16 +351,31 @@ final class ApiController extends Controller
$this->createStandardCreateResponse($request, $response, $item);
}
/**
* Create item segmentation.
*
* Default: segment->section->sales_group->product_group and to the side product_type
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param Item $item Item
*
* @return void
*
* @since 1.0.0
*/
private function createItemSegmentation(RequestAbstract $request, ResponseAbstract $response, Item $item) : void
{
/** @var \Model\Setting $settings */
$settings = $this->app->appSettings->get(null, ItemSettingsEnum::DEFAULT_SEGMENTATION);
/** @var array $segmentation */
$segmentation = \json_decode($settings->content, true);
if ($segmentation === false || $segmentation === null) {
return;
}
/** @var \Modules\Attribute\Models\AttributeType[] $types */
$types = ItemAttributeTypeMapper::getAll()
->where('name', \array_keys($segmentation), 'IN')
->execute();

View File

@ -435,7 +435,6 @@ final class BackendController extends Controller
$view->setTemplate('/Modules/ItemManagement/Theme/Backend/item-view');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004803001, $request, $response);
/** @var \Modules\ItemManagement\Models\Item */
$view->data['item'] = ItemMapper::get()
->with('l11n')
->with('l11n/type')
@ -471,7 +470,6 @@ final class BackendController extends Controller
->where(ItemMapper::HAS_MANY['files']['self'], '=', $view->data['item']->id)
->where(MediaTypeMapper::TABLE . '.' . MediaTypeMapper::getColumnByMember('name'), '=', 'item_profile_image');
/** @var \Modules\Media\Models\Media */
$view->data['itemImage'] = MediaMapper::get()
->with('types')
->where('id', $results)
@ -492,29 +490,24 @@ final class BackendController extends Controller
$view->data['l11nView'] = new \Web\Backend\Views\L11nView($this->app->l11nManager, $request, $response);
/** @var \phpOMS\Localization\BaseStringL11nType[] */
$view->data['l11nTypes'] = ItemL11nTypeMapper::getAll()
->execute();
/** @var \phpOMS\Localization\BaseStringL11n[] */
$view->data['l11nValues'] = ItemL11nMapper::getAll()
->with('type')
->where('ref', $view->data['item']->id)
->execute();
/** @var \Modules\Attribute\Models\AttributeType[] */
$view->data['attributeTypes'] = ItemAttributeTypeMapper::getAll()
->with('l11n')
->where('l11n/language', $response->header->l11n->language)
->execute();
/** @var \Modules\Organization\Models\Unit[] */
$view->data['units'] = UnitMapper::getAll()
->execute();
$view->data['hasBilling'] = $this->app->moduleManager->isActive('Billing');
/** @var \Modules\Billing\Models\Price\Price[] */
$view->data['prices'] = $view->data['hasBilling']
? \Modules\Billing\Models\Price\PriceMapper::getAll()
->with('supplier')
@ -533,8 +526,8 @@ final class BackendController extends Controller
//'has_inventory', 'inventory_identifier', 'stocktaking_type',
], 'IN')
->where('defaults/l11n', (new Where($this->app->dbPool->get()))
->where(ItemAttributeValueL11nMapper::getColumnByMember('ref'), '=', null)
->orWhere(ItemAttributeValueL11nMapper::getColumnByMember('language'), '=', $response->header->l11n->language))
->where(ItemAttributeValueL11nMapper::getColumnByMember('ref') ?? '', '=', null)
->orWhere(ItemAttributeValueL11nMapper::getColumnByMember('language') ?? '', '=', $response->header->l11n->language))
->execute();
$defaultAttributeTypes = [];
@ -549,8 +542,8 @@ final class BackendController extends Controller
->with('defaults/l11n')
->where('name', ['segment', 'section', 'client_group', 'client_type'], 'IN')
->where('defaults/l11n', (new Where($this->app->dbPool->get()))
->where(ClientAttributeValueL11nMapper::getColumnByMember('ref'), '=', null)
->orWhere(ClientAttributeValueL11nMapper::getColumnByMember('language'), '=', $response->header->l11n->language))
->where(ClientAttributeValueL11nMapper::getColumnByMember('ref') ?? '', '=', null)
->orWhere(ClientAttributeValueL11nMapper::getColumnByMember('language') ?? '', '=', $response->header->l11n->language))
->execute();
$clientSegmentationTypes = [];
@ -569,7 +562,7 @@ final class BackendController extends Controller
PermissionCategory::ITEM_LOG,
)
) {
/** @var \Modules\Auditor\Models\Audit[] */
/** @var \Modules\Auditor\Models\Audit[] $logs */
$logs = AuditMapper::getAll()
->where('type', StringUtils::intHash(ItemMapper::class))
->where('module', 'ItemManagement')
@ -581,7 +574,6 @@ final class BackendController extends Controller
// @todo join audit with files, attributes, localization, prices, notes, ...
/** @var \Modules\Media\Models\Media[] */
$view->data['files'] = MediaMapper::getAll()
->with('types')
->join('id', ItemMapper::class, 'files') // id = media id, files = item relations

View File

@ -52,7 +52,7 @@ final class ItemMapper extends DataMapperFactory
'itemmgmt_item_purchaseprice' => ['name' => 'itemmgmt_item_purchaseprice', 'type' => 'Serializable', 'internal' => 'purchasePrice'],
'itemmgmt_item_parent' => ['name' => 'itemmgmt_item_parent', 'type' => 'int', 'internal' => 'parent'],
'itemmgmt_item_unit' => ['name' => 'itemmgmt_item_unit', 'type' => 'int', 'internal' => 'unit'],
'itemmgmt_item_createdat' => ['name' => 'itemmgmt_item_createdat', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt'],
'itemmgmt_item_createdat' => ['name' => 'itemmgmt_item_createdat', 'type' => 'DateTimeImmutable', 'internal' => 'createdAt'],
];
/**

View File

@ -47,6 +47,11 @@ class Material implements \JsonSerializable
public int $item = 0;
/**
* Constructor.
*
* @since 1.0.0
*/
public function __construct()
{
$this->type = new NullBaseStringL11nType();

View File

@ -29,9 +29,7 @@ return ['ItemManagement' => [
'ClientType' => 'Kundentyp',
'Commission' => 'Kommission',
'Container' => 'Container',
'CostCenter' => 'Kostenstelle',
'CostIndicator' => 'Einkaufssteuerkennzeichen',
'CostObject' => 'Kostenträger',
'Countries' => 'Länder',
'Country' => 'Land',
'Created' => 'Erstellt',
@ -142,7 +140,7 @@ return ['ItemManagement' => [
'Promocode' => 'Promocode',
'Region' => 'Region',
'Materials' => 'Materialien',
'Material' => 'Material',
'Material' => 'Material',
'Weight' => 'Gewicht',
'Depth' => 'Tiefe',
'WidthLength' => 'Breite/Länge',

View File

@ -28,11 +28,9 @@ return ['ItemManagement' => [
'ClientSegment' => 'Client Segment',
'ClientType' => 'Client Type',
'Commission' => 'Commission',
'Material' => 'Material',
'Material' => 'Material',
'Container' => 'Container',
'CostCenter' => 'CostCenter',
'CostIndicator' => 'Purchase tax code',
'CostObject' => 'CostObject',
'Countries' => 'Countries',
'Country' => 'Country',
'Created' => 'Created',