mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-27 07:00:29 +01:00
5285 lines
198 KiB
PHP
5285 lines
198 KiB
PHP
|
<?php
|
||
|
/*
|
||
|
**** COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
||
|
*
|
||
|
* Xentral (c) Xentral ERP Sorftware GmbH, Fuggerstrasse 11, D-86150 Augsburg, * Germany 2019
|
||
|
*
|
||
|
* This file is licensed under the Embedded Projects General Public License *Version 3.1.
|
||
|
*
|
||
|
* You should have received a copy of this license from your vendor and/or *along with this file; If not, please visit www.wawision.de/Lizenzhinweis
|
||
|
* to obtain the text of the corresponding license version.
|
||
|
*
|
||
|
**** END OF COPYRIGHT & LICENSE NOTICE *** DO NOT REMOVE ****
|
||
|
*/
|
||
|
?>
|
||
|
<?php
|
||
|
use Xentral\Components\Http\JsonResponse;
|
||
|
use Xentral\Modules\SystemConfig\SystemConfigModule;
|
||
|
|
||
|
class Appstore {
|
||
|
/** @var Application $app */
|
||
|
var $app;
|
||
|
|
||
|
/** @var array $deactivatesModules */
|
||
|
protected $deactivatesModules = [];
|
||
|
|
||
|
/** @var array $cachedAppsList */
|
||
|
protected static $cachedAppsList = [];
|
||
|
|
||
|
/** @var array $nodeactivateable */
|
||
|
private $nodeactivateable = [];
|
||
|
|
||
|
/** @var mixed $buyList */
|
||
|
protected $buyList = null;
|
||
|
|
||
|
/** @var mixed $buyInfo */
|
||
|
protected $buyInfo = null;
|
||
|
|
||
|
const MODULE_NAME = 'Appstore';
|
||
|
|
||
|
public $javascript = [
|
||
|
'./classes/Modules/Appstore/www/js/appstore.js',
|
||
|
'./classes/Modules/Appstore/www/js/appstore_buy.js',
|
||
|
'./www/js/counter-component.js',
|
||
|
];
|
||
|
|
||
|
/**
|
||
|
* Appstore constructor.
|
||
|
*
|
||
|
* @param Application $app
|
||
|
* @param bool $intern
|
||
|
*/
|
||
|
public function __construct($app, $intern = false)
|
||
|
{
|
||
|
$this->app = $app;
|
||
|
if($intern) {
|
||
|
return;
|
||
|
}
|
||
|
$this->deactivatesModules[$this->app->Conf->WFdbname] = null;
|
||
|
$this->nodeactivateable = [
|
||
|
'appstore',
|
||
|
'firmendaten',
|
||
|
'artikel',
|
||
|
'auftrag',
|
||
|
'lieferschein',
|
||
|
'systemlog',
|
||
|
'dsgvo',
|
||
|
'dataprotection',
|
||
|
'pdfarchiv',
|
||
|
'orderstatus',
|
||
|
'welcome',
|
||
|
'ajax',
|
||
|
];
|
||
|
$this->app->ActionHandlerInit($this);
|
||
|
$this->app->ActionHandler('list', 'AppstoreList');
|
||
|
$this->app->ActionHandler('testmodule', 'AppStoreTestModule');
|
||
|
$this->app->ActionHandler('activate', 'AppstoreActivate');
|
||
|
$this->app->ActionHandler('deactivate', 'AppstoreDeactivate');
|
||
|
|
||
|
$this->app->ActionHandler('testen', 'AppstoreTesten');
|
||
|
$this->app->DefaultActionHandler('list');
|
||
|
$this->app->ActionHandlerListen($app);
|
||
|
}
|
||
|
|
||
|
public function AppStoreTestModule(): void
|
||
|
{
|
||
|
//for user-rights do not remove
|
||
|
}
|
||
|
|
||
|
public function addFav(): void
|
||
|
{
|
||
|
$apps = $this->getAppsList();
|
||
|
$module = $this->app->Secure->GetGET('module');
|
||
|
$id = $this->app->Secure->GetGET('id');
|
||
|
$module2 = $this->getSubModule($id, $module);
|
||
|
$favModuleName = $module;
|
||
|
if(!empty($apps['installiert'])) {
|
||
|
foreach($apps['installiert'] as $app) {
|
||
|
if(!empty($module2) && $app['key'] === $module2) {
|
||
|
$favModuleName = $app['Bezeichnung'];
|
||
|
break;
|
||
|
}
|
||
|
if($app['key'] === $module) {
|
||
|
$favModuleName = $app['Bezeichnung'];
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
$this->app->Tpl->Set('FAVMODULENAME', $favModuleName);
|
||
|
$this->app->Tpl->Parse('BODYENDE','addfav.tpl');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param int $id
|
||
|
* @param string $module
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getSubModule($id, $module): string
|
||
|
{
|
||
|
$module2 = '';
|
||
|
if($id > 0) {
|
||
|
switch($module) {
|
||
|
case 'onlineshops':
|
||
|
$module2 = (String)$this->app->DB->Select(
|
||
|
sprintf(
|
||
|
'SELECT `modulename` FROM `shopexport` WHERE `id` = %d LIMIT 1',
|
||
|
$id
|
||
|
)
|
||
|
);
|
||
|
break;
|
||
|
case 'uebertragungen':
|
||
|
$module2 = (String)$this->app->DB->Select(
|
||
|
sprintf(
|
||
|
'SELECT `xml_pdf` FROM `uebertragungen_account` WHERE `id` = %d LIMIT 1',
|
||
|
$id
|
||
|
)
|
||
|
);
|
||
|
if(strpos($module2,'Transfer') !== 0) {
|
||
|
$module2 = '';
|
||
|
}
|
||
|
break;
|
||
|
case 'versandarten':
|
||
|
$module2 = (String)$this->app->DB->Select(
|
||
|
sprintf(
|
||
|
'SELECT `modul` FROM `versandarten` WHERE `id` = %d LIMIT 1',
|
||
|
$id
|
||
|
)
|
||
|
);
|
||
|
if(!empty($module2)) {
|
||
|
$module2 = 'versandarten_'.$module2;
|
||
|
}
|
||
|
break;
|
||
|
case 'zahlungsweisen':
|
||
|
$module2 = (String)$this->app->DB->Select(
|
||
|
sprintf(
|
||
|
'SELECT `modul` FROM `zahlungsweisen` WHERE `id` = %d LIMIT 1',
|
||
|
$id
|
||
|
)
|
||
|
);
|
||
|
if(!empty($module2)) {
|
||
|
$module2 = 'zahlungsweise_'.$module2;
|
||
|
}
|
||
|
break;
|
||
|
case 'drucker':
|
||
|
$module2 = (String)$this->app->DB->Select(
|
||
|
sprintf(
|
||
|
'SELECT `anbindung` FROM `drucker` WHERE `id` = %d LIMIT 1',
|
||
|
$id
|
||
|
)
|
||
|
);
|
||
|
if(strpos($module2,'Printer') !== 0) {
|
||
|
$module2 = '';
|
||
|
}
|
||
|
break;
|
||
|
case 'konten':
|
||
|
$module2 = (String)$this->app->DB->Select(
|
||
|
sprintf(
|
||
|
'SELECT `type` FROM `konten` WHERE `id` = %d LIMIT 1',
|
||
|
$id
|
||
|
)
|
||
|
);
|
||
|
if(!empty($module2)) {
|
||
|
$module2 = 'konto_'.$module2;
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $module2;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @param bool $parameter
|
||
|
*
|
||
|
* @return null|string
|
||
|
*/
|
||
|
protected function sendBeta($parameter): ?string
|
||
|
{
|
||
|
$setBeta = $parameter;
|
||
|
$ok = null;
|
||
|
include_once dirname(__DIR__, 2).'/upgradesystemclient2_includekey.php';
|
||
|
|
||
|
return $ok;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $parameter
|
||
|
*
|
||
|
* @return null|string
|
||
|
*/
|
||
|
protected function sendBuyFromDemo($parameter): ?string
|
||
|
{
|
||
|
$buyFromDemo = $parameter;
|
||
|
$ok = null;
|
||
|
include_once dirname(__DIR__, 2).'/upgradesystemclient2_includekey.php';
|
||
|
|
||
|
return $ok;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $parameter
|
||
|
*
|
||
|
* @return null|string
|
||
|
*/
|
||
|
protected function sendBuy($parameter): ?string
|
||
|
{
|
||
|
$buy = $parameter;
|
||
|
$ok = null;
|
||
|
include_once dirname(__DIR__, 2).'/upgradesystemclient2_includekey.php';
|
||
|
$this->resetBuyListCache();
|
||
|
|
||
|
return $ok;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return null|string
|
||
|
*/
|
||
|
protected function sendGetBuyList(): ?string
|
||
|
{
|
||
|
$getBuyList = true;
|
||
|
$ok = null;
|
||
|
include_once dirname(__DIR__, 2).'/upgradesystemclient2_includekey.php';
|
||
|
$this->SetKonfigurationValue('appstore_buy_lasttime', (new DateTime())->format('Y-m-d H:i:s'));
|
||
|
$this->SetKonfigurationValue('appstore_buy_list', $ok);
|
||
|
|
||
|
return $ok;
|
||
|
}
|
||
|
/**
|
||
|
* @return null|string
|
||
|
*/
|
||
|
protected function sendGetBuyInfo(): ?string
|
||
|
{
|
||
|
$getBuyInfo = true;
|
||
|
$ok = null;
|
||
|
include_once dirname(__DIR__, 2).'/upgradesystemclient2_includekey.php';
|
||
|
|
||
|
return $ok;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return JsonResponse
|
||
|
*/
|
||
|
protected function HandleGetBuyInfoAjaxAction(): JsonResponse
|
||
|
{
|
||
|
$data = $this->getActualBuyInfo();
|
||
|
if(is_string($data)) {
|
||
|
$json = @json_decode($data, true);
|
||
|
if(!empty($json)) {
|
||
|
$data = $json;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$html = '';
|
||
|
if(!empty($data['summedAbos']['modul'])) {
|
||
|
$html = '<table><tr><td><b>Modul</b></td><td><b>Preis</b></td></tr>';
|
||
|
foreach($data['summedAbos']['modul'] as $articleId => $module) {
|
||
|
$module['preis'] = $this->formatBuyPrice($module['preis']);
|
||
|
$html .= '<tr>
|
||
|
<td>'.htmlspecialchars($module['bezeichnung']).'</td>
|
||
|
<td>'.number_format($module['preis'],2,',','.').'</td>
|
||
|
</tr>';
|
||
|
}
|
||
|
$html .= '</table>';
|
||
|
}
|
||
|
|
||
|
$ret = [
|
||
|
'message' => $data,
|
||
|
'data' => $html,
|
||
|
];
|
||
|
|
||
|
if(!empty($data['summedAbos']['user'])) {
|
||
|
$art = reset($data['summedAbos']['user']);
|
||
|
$ret['user'] = (int)$art['menge'];
|
||
|
}
|
||
|
if(!empty($data['summedAbos']['lightuser'])) {
|
||
|
$art = reset($data['summedAbos']['lightuser']);
|
||
|
$ret['lightuser'] = (int)$art['menge'];
|
||
|
}
|
||
|
|
||
|
$maxUser = erpAPI::Ioncube_Property('maxuser');
|
||
|
$maxLightUser = erpAPI::Ioncube_Property('maxlightuser');
|
||
|
$ret['maxuser'] = (int)$maxUser;
|
||
|
$ret['maxlightuser'] = (int)$maxLightUser;
|
||
|
if(!empty($data['customerinfo'])) {
|
||
|
$ret = array_merge($ret, $data['customerinfo']);
|
||
|
$ret['customerinfo'] = $this->getCustomInfoHtml($data['customerinfo']);
|
||
|
}
|
||
|
|
||
|
//$this->resetBuyListCache();
|
||
|
return new JsonResponse($ret);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $customerinfos
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
protected function getCustomInfoHtml($customerinfos): string
|
||
|
{
|
||
|
$html = '<table><tr>';
|
||
|
$rows = [];
|
||
|
foreach($customerinfos as $key => $customerinfo) {
|
||
|
$rows[] = '<td>'.htmlspecialchars(ucfirst($key)).'</td><td>'.htmlspecialchars($customerinfo).'</td>';
|
||
|
}
|
||
|
|
||
|
return $html.implode('</tr><tr>', $rows).'</tr></table>';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return JsonResponse
|
||
|
*/
|
||
|
protected function HandleGetBuyListAjaxAction(): JsonResponse
|
||
|
{
|
||
|
$data = $this->sendGetBuyList();
|
||
|
$data = ['message' => $data];
|
||
|
|
||
|
return new JsonResponse($data);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return JsonResponse
|
||
|
*/
|
||
|
protected function HandleSendBuyFromDemoAjaxAction(): JsonResponse
|
||
|
{
|
||
|
$data = [
|
||
|
'company' => $this->app->Secure->GetPOST('company', '', '', true),
|
||
|
'name' => $this->app->Secure->GetPOST('name', '', '', true),
|
||
|
'email' => $this->app->Secure->GetPOST('email', '', '', true),
|
||
|
'street' => $this->app->Secure->GetPOST('street', '', '', true),
|
||
|
'street2' => $this->app->Secure->GetPOST('street2', '', '', true),
|
||
|
'zip' => $this->app->Secure->GetPOST('zip', '', '', true),
|
||
|
'city' => $this->app->Secure->GetPOST('city', '', '', true),
|
||
|
'country' => $this->app->Secure->GetPOST('country'),
|
||
|
'bank' => $this->app->Secure->GetPOST('bank', '', '', true),
|
||
|
'bankname' => $this->app->Secure->GetPOST('bankname', '', '', true),
|
||
|
'iban' => $this->app->Secure->GetPOST('iban', '', '', true),
|
||
|
'bic' => $this->app->Secure->GetPOST('bic', '', '', true),
|
||
|
'user' => (int)$this->app->Secure->GetPOST('user'),
|
||
|
'agreement' => (int)$this->app->Secure->GetPOST('agreement'),
|
||
|
];
|
||
|
|
||
|
if($data['user'] <= 0) {
|
||
|
$data['user'] = null;
|
||
|
}
|
||
|
|
||
|
$mapping = [
|
||
|
'company' => 'Firma',
|
||
|
'name' => 'Ansprechpartner',
|
||
|
'email' => 'Email',
|
||
|
'street' => 'Straße',
|
||
|
'zip' => 'PLZ',
|
||
|
'city' => 'Ort',
|
||
|
'country' => 'Land',
|
||
|
'bank' => 'Bank',
|
||
|
'bankname' => 'Kontoinhaber',
|
||
|
'iban' => 'IBAN',
|
||
|
'bic' => 'BIC',
|
||
|
'user' => 'Benutzeranzahl',
|
||
|
'agreement' => 'Einverständnis',
|
||
|
];
|
||
|
$isTestlizenz = !empty(erpAPI::Ioncube_Property('testlizenz'));
|
||
|
if(!$isTestlizenz) {
|
||
|
unset($mapping['agreement']);
|
||
|
$field = 'add_user';
|
||
|
$new = $data['user'];
|
||
|
$old = erpAPI::Ioncube_Property('maxuser');
|
||
|
return $this->SendBuyInfo($field, $new, $old);
|
||
|
}
|
||
|
$error = [];
|
||
|
|
||
|
foreach($mapping as $field => $name) {
|
||
|
if(empty($data[$field])) {
|
||
|
$error[] = $field;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$isInvalidIban = !empty($data['iban']) && !$this->isValidIban($data['iban']);
|
||
|
|
||
|
if(!empty($error)) {
|
||
|
$errorMessage = 'Pflichtfelder sind nicht ausgefüllt.';
|
||
|
if($isInvalidIban) {
|
||
|
$error[] = 'iban';
|
||
|
return new JsonResponse(
|
||
|
[
|
||
|
'status' => 0,
|
||
|
'errorMessage' => $errorMessage.' IBAN ist nicht gültig.',
|
||
|
'invalidFields' => $error
|
||
|
]
|
||
|
);
|
||
|
}
|
||
|
return new JsonResponse(
|
||
|
['status' => 0, 'errorMessage' => $errorMessage, 'invalidFields' => $error]
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if($isInvalidIban) {
|
||
|
return new JsonResponse(
|
||
|
['status' => 0, 'errorMessage' => 'IBAN ist nicht gültig.', 'invalidFields' => ['iban']]
|
||
|
);
|
||
|
}
|
||
|
$data['change'] = (int)$this->app->Secure->GetPOST('change');
|
||
|
if(empty($this->app->erp->Firmendaten('lizenz')) || empty($this->app->erp->Firmendaten('schluessel'))) {
|
||
|
return new JsonResponse(
|
||
|
['status' => 0, 'errorMessage' => 'Es sind keine Lizenzdaten in den Firmendaten eingestellt']
|
||
|
);
|
||
|
}
|
||
|
$data = $this->sendBuyFromDemo($data);
|
||
|
if(is_string($data)){
|
||
|
if($data === 'ERROR' || $data === '') {
|
||
|
return new JsonResponse(
|
||
|
['status' => 0, 'errorMessage' => 'Lizenz in Firmendaten scheinen nicht zu stimmen.']
|
||
|
);
|
||
|
}
|
||
|
if(strpos($data,'ERROR') === 0) {
|
||
|
return new JsonResponse(
|
||
|
['status' => 0, 'errorMessage' => trim(substr($data,5))]
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
$this->app->User->SetParameter('updatekey', 1);
|
||
|
$this->resetBuyListCache();
|
||
|
$this->resetBuyInfoCache();
|
||
|
$this->app->Tpl->Set('appstore_customeruser', '');
|
||
|
|
||
|
return new JsonResponse(['status' => $data]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return JsonResponse
|
||
|
*/
|
||
|
protected function HandleSendBuyInfoAjaxAction(): JsonResponse
|
||
|
{
|
||
|
$field = $this->app->Secure->GetPOST('field');
|
||
|
$new = $this->app->Secure->GetPOST('new');
|
||
|
$old = $this->app->Secure->GetPOST('old');
|
||
|
|
||
|
return $this->SendBuyInfo($field, $new, $old);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param $field
|
||
|
* @param $new
|
||
|
* @param $old
|
||
|
*
|
||
|
* @return JsonResponse
|
||
|
*/
|
||
|
public function SendBuyInfo($field, $new, $old): JsonResponse
|
||
|
{
|
||
|
if($field === 'reduce_user') {
|
||
|
$possibleToChangeUser =$this->isPossibleToChangeUser('user', $new);
|
||
|
if(!empty($possibleToChangeUser['error'])) {
|
||
|
return new JsonResponse($possibleToChangeUser);
|
||
|
}
|
||
|
}
|
||
|
if($field === 'reduce_lightuser') {
|
||
|
$possibleToChangeUser =$this->isPossibleToChangeUser('lightuser', $new);
|
||
|
if(!empty($possibleToChangeUser['error'])) {
|
||
|
return new JsonResponse($possibleToChangeUser);
|
||
|
}
|
||
|
}
|
||
|
$input = ['field'=>$field, 'value_new'=>$new, 'value_old'=>$old,];
|
||
|
$data = $this->sendBuy($input);
|
||
|
if($data === 'OK') {
|
||
|
$this->app->User->SetParameter('updatekey', 1);
|
||
|
if($field === 'add_module') {
|
||
|
$this->addModuleForUpdateInfo($new);
|
||
|
}
|
||
|
if($field === 'delete_module') {
|
||
|
$this->removeModuleForUpdateInfo($new);
|
||
|
}
|
||
|
$this->resetBuyListCache();
|
||
|
$this->resetBuyInfoCache();
|
||
|
$msg = $this->app->erp->base64_url_encode(
|
||
|
'<div class="info">Anfrage erfolgreich ausgeführt. Sie können in etwa 15 Minuten ein Update herunterladen</div>'
|
||
|
);
|
||
|
return new JsonResponse(['status' => true, 'url' => 'index.php?module=appstore&action=buy&msg='.$msg]);
|
||
|
}
|
||
|
|
||
|
return new JsonResponse(['status' => false, 'error' => $data]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $module
|
||
|
*/
|
||
|
protected function addModuleForUpdateInfo($module): void
|
||
|
{
|
||
|
$modules = $this->getModulesForUpdateInfo();
|
||
|
if(in_array($module, $modules)) {
|
||
|
return;
|
||
|
}
|
||
|
$modules[] = $module;
|
||
|
$this->SetKonfigurationValue(
|
||
|
'appstore_modules_for_update_info',
|
||
|
json_encode($modules)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $module
|
||
|
*/
|
||
|
protected function removeModuleForUpdateInfo($module): void
|
||
|
{
|
||
|
$modules = $this->getModulesForUpdateInfo(false);
|
||
|
if(!in_array($module, $modules)) {
|
||
|
return;
|
||
|
}
|
||
|
$modules = array_diff($modules, [$module]);
|
||
|
$this->SetKonfigurationValue(
|
||
|
'appstore_modules_for_update_info',
|
||
|
json_encode($modules)
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @var bool $removeIfModuleExists
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
protected function getModulesForUpdateInfo($removeIfModuleExists = true): array
|
||
|
{
|
||
|
$modules = $this->GetBuyKonfigurationWithResetOnError('appstore_modules_for_update_info');
|
||
|
if(empty($modules)) {
|
||
|
return [];
|
||
|
}
|
||
|
$modules = json_decode($modules, true);
|
||
|
if(empty($modules) || !is_array($modules)) {
|
||
|
return [];
|
||
|
}
|
||
|
|
||
|
if(!$removeIfModuleExists) {
|
||
|
return $modules;
|
||
|
}
|
||
|
|
||
|
foreach($modules as $key => $module) {
|
||
|
if($this->app->erp->ModulVorhanden($module, true)) {
|
||
|
$this->removeModuleForUpdateInfo($module);
|
||
|
unset($modules[$key]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $modules;
|
||
|
}
|
||
|
|
||
|
public function resetBuyListCache(): void
|
||
|
{
|
||
|
$this->buyList = null;
|
||
|
$this->SetKonfigurationValue('appstore_buy_lasttime', '');
|
||
|
}
|
||
|
|
||
|
public function resetBuyInfoCache(): void
|
||
|
{
|
||
|
$this->buyInfo = null;
|
||
|
$this->SetKonfigurationValue('appstore_buyinfo_lasttime', '');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $key
|
||
|
* @param mixed $value
|
||
|
*/
|
||
|
public function SetKonfigurationValue(string $key, $value): void
|
||
|
{
|
||
|
if(strpos($key, 'appstore_') === 0) {
|
||
|
$key = substr($key, 9);
|
||
|
}
|
||
|
try {
|
||
|
/** @var SystemConfigModule $systemConfigModule */
|
||
|
$systemConfigModule = $this->app->Container->get('SystemConfigModule');
|
||
|
$systemConfigModule->setValue('appstore', $key, (string)$value);
|
||
|
}
|
||
|
catch(Exception $e) {
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $key
|
||
|
*
|
||
|
* @return string|null
|
||
|
*/
|
||
|
public function GetKonfiguration(string $key): ?string
|
||
|
{
|
||
|
if(strpos($key, 'appstore_') === 0) {
|
||
|
$key = substr($key, 9);
|
||
|
}
|
||
|
/** @var SystemConfigModule $systemConfigModule */
|
||
|
$systemConfigModule = $this->app->Container->get('SystemConfigModule');
|
||
|
|
||
|
return $systemConfigModule->tryGetValue('appstore', $key);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return mixed|string|null
|
||
|
*/
|
||
|
public function getActualBuyInfo()
|
||
|
{
|
||
|
if($this->buyInfo !== null) {
|
||
|
return $this->buyInfo;
|
||
|
}
|
||
|
|
||
|
$lastBuyInfo = $this->GetBuyKonfigurationWithResetOnError('appstore_buyinfo_lasttime');
|
||
|
try{
|
||
|
if(!empty($lastBuyInfo)) {
|
||
|
$lastBuyInfo = new DateTime($lastBuyInfo);
|
||
|
if($lastBuyInfo > new DateTime('-1 hour')) {
|
||
|
$lastBuyInfo = null;
|
||
|
}
|
||
|
else {
|
||
|
$lastBuyInfo = (new DateTime())->format('Y-m-d H:i:s');
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
$lastBuyInfo = (new DateTime())->format('Y-m-d H:i:s');
|
||
|
}
|
||
|
}
|
||
|
catch (Exception $e) {
|
||
|
$lastBuyInfo = (new DateTime())->format('Y-m-d H:i:s');
|
||
|
}
|
||
|
|
||
|
$buyInfo = $this->GetBuyKonfigurationWithResetOnError('appstore_buyinfo_list');
|
||
|
$buyInfoDecoded = !empty($buyInfo) ? json_decode($buyInfo, true) : [];
|
||
|
$buyInfoCustomerBuy = $this->GetBuyKonfigurationWithResetOnError('appstore_buyinfo_customer_buy');
|
||
|
$buyInfoCustomerBuy = empty($buyInfoCustomerBuy) ? []: json_decode($buyInfoCustomerBuy, true);
|
||
|
$moduleMapping = $this->GetBuyKonfigurationWithResetOnError('appstore_buyinfo_module_mapping');
|
||
|
$moduleMapping = empty($moduleMapping) ? []: json_decode($moduleMapping, true);
|
||
|
$buyInfoDecoded['customer_buy'] = $buyInfoCustomerBuy;
|
||
|
$buyInfoDecoded['module_mapping'] = $moduleMapping;
|
||
|
$buyInfo = json_encode($buyInfoDecoded);
|
||
|
if(!empty($lastBuyInfo)) {
|
||
|
$buyInfo = $this->sendGetBuyInfo();
|
||
|
$buyInfoDecoded = json_decode($buyInfo, true);
|
||
|
$buyInfoCustomerBuy = null;
|
||
|
$moduleMapping = null;
|
||
|
if(isset($buyInfoDecoded['customer_buy'])){
|
||
|
$buyInfoCustomerBuy = $buyInfoDecoded['customer_buy'];
|
||
|
unset($buyInfoDecoded['customer_buy']);
|
||
|
}
|
||
|
if(isset($buyInfoDecoded['module_mapping'])){
|
||
|
$moduleMapping = $buyInfoDecoded['module_mapping'];
|
||
|
unset($buyInfoDecoded['module_mapping']);
|
||
|
}
|
||
|
$buyInfoCustomerBuy = json_encode($buyInfoCustomerBuy);
|
||
|
$moduleMapping = json_encode($moduleMapping);
|
||
|
$buyInfoPart = json_encode($buyInfoDecoded);
|
||
|
|
||
|
$this->SetKonfigurationValue(
|
||
|
'appstore_buyinfo_lasttime', $lastBuyInfo
|
||
|
);
|
||
|
$this->SetKonfigurationValue(
|
||
|
'appstore_buyinfo_list', $buyInfoPart
|
||
|
);
|
||
|
$this->SetKonfigurationValue(
|
||
|
'appstore_buyinfo_customer_buy', $buyInfoCustomerBuy
|
||
|
);
|
||
|
$this->SetKonfigurationValue(
|
||
|
'appstore_buyinfo_module_mapping', $moduleMapping
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if(is_string($buyInfo)){
|
||
|
$json = json_decode($buyInfo, true);
|
||
|
if(!empty($json)) {
|
||
|
$buyInfo = $json;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(!is_array($buyInfo)) {
|
||
|
$this->buyList = $buyInfo;
|
||
|
return $buyInfo;
|
||
|
}
|
||
|
|
||
|
$this->buyList = $buyInfo;
|
||
|
|
||
|
return $buyInfo;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $key
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function GetBuyKonfigurationWithResetOnError(string $key): string
|
||
|
{
|
||
|
$value = (string)$this->GetKonfiguration($key);
|
||
|
if(strpos($value, 'ERROR') === 0) {
|
||
|
$this->SetKonfigurationValue($key, '');
|
||
|
return '';
|
||
|
}
|
||
|
|
||
|
return $value;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return mixed|string|null
|
||
|
*/
|
||
|
public function getActualBuyList()
|
||
|
{
|
||
|
if($this->buyList !== null) {
|
||
|
return $this->buyList;
|
||
|
}
|
||
|
$lastBuyList = $this->GetBuyKonfigurationWithResetOnError('appstore_buy_lasttime');
|
||
|
|
||
|
try{
|
||
|
if(!empty($lastBuyList)) {
|
||
|
$lastBuyList = new DateTime($lastBuyList);
|
||
|
if($lastBuyList > new DateTime('-1 hour')) {
|
||
|
$lastBuyList = null;
|
||
|
}
|
||
|
else {
|
||
|
$lastBuyList = (new DateTime())->format('Y-m-d H:i:s');
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
$lastBuyList = (new DateTime())->format('Y-m-d H:i:s');
|
||
|
}
|
||
|
}
|
||
|
catch (Exception $e) {
|
||
|
$lastBuyList = (new DateTime())->format('Y-m-d H:i:s');
|
||
|
}
|
||
|
$buyList = $this->GetBuyKonfigurationWithResetOnError('appstore_buy_list');
|
||
|
if(!empty($lastBuyList)) {
|
||
|
$buyList = $this->sendGetBuyList();
|
||
|
$this->SetKonfigurationValue('appstore_buy_lasttime', $lastBuyList);
|
||
|
$this->SetKonfigurationValue('appstore_buy_list', $buyList);
|
||
|
}
|
||
|
|
||
|
if(is_string($buyList)){
|
||
|
$json = json_decode($buyList, true);
|
||
|
if(!empty($json)) {
|
||
|
$buyList = $json;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(!is_array($buyList)) {
|
||
|
$this->buyList = $buyList;
|
||
|
return $buyList;
|
||
|
}
|
||
|
|
||
|
$ret = [
|
||
|
'user' => [],
|
||
|
'lightuser' => [],
|
||
|
'modules' => [],
|
||
|
'modulearticle' => [],
|
||
|
'cloud' => [],
|
||
|
];
|
||
|
|
||
|
foreach($buyList as $buyItem) {
|
||
|
if($buyItem['typ'] === 'version') {
|
||
|
$ret['user'] = $buyItem;
|
||
|
continue;
|
||
|
}
|
||
|
if($buyItem['typ'] === 'lightuser') {
|
||
|
$ret['lightuser'] = $buyItem;
|
||
|
continue;
|
||
|
}
|
||
|
if($buyItem['typ'] === 'cloud') {
|
||
|
$ret['cloud'] = $buyItem;
|
||
|
continue;
|
||
|
}
|
||
|
$ret['modulearticle'][] = $buyItem;
|
||
|
$modules = explode(',', $buyItem['parameter']);
|
||
|
foreach($modules as $module) {
|
||
|
$module = trim($module);
|
||
|
if(empty($module) || in_array($module, $ret['modules'])) {
|
||
|
continue;
|
||
|
}
|
||
|
$ret['modules'][] = $module;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->buyList = $ret;
|
||
|
|
||
|
return $ret;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $type
|
||
|
* @param int $count
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
private function isPossibleToChangeUser($type, $count)
|
||
|
{
|
||
|
$oldUser = (int)erpAPI::Ioncube_Property('maxuser');
|
||
|
$oldLightUser = (int)erpAPI::Ioncube_Property('maxlightuser');
|
||
|
$maxUser = $oldUser;
|
||
|
$maxLightUser = $oldLightUser;
|
||
|
if($type === 'user') {
|
||
|
$maxUser = $count;
|
||
|
}
|
||
|
elseif($type === 'lightuser') {
|
||
|
$maxLightUser = $count;
|
||
|
}
|
||
|
|
||
|
$maxTimeUser = $this->app->erp->ModulVorhanden('mitarbeiterzeiterfassung') ? $maxUser : 0;
|
||
|
$countActiveLightUser = 0;
|
||
|
if($maxLightUser > 0) {
|
||
|
$countActiveLightUser = (int)$this->app->DB->Select(
|
||
|
"SELECT COUNT(DISTINCT u.id) FROM `user` AS `u` WHERE u.activ = 1 AND u.type = 'lightuser'"
|
||
|
);
|
||
|
$countActiveStandardUser = (int)$this->app->DB->Select(
|
||
|
"SELECT COUNT(u.id) FROM `user` AS `u` WHERE u.activ = 1 AND u.hwtoken IS NOT NULL AND u.hwtoken <> 4"
|
||
|
) - $countActiveLightUser;
|
||
|
$countActiveTimeAccountUser = (int)$this->app->DB->Select(
|
||
|
"SELECT COUNT(*) FROM `user` AS `u` WHERE u.activ = 1 AND u.hwtoken = 4 AND u.type != 'lightuser'"
|
||
|
);
|
||
|
}
|
||
|
else{
|
||
|
$countActiveStandardUser = (int)$this->app->DB->Select(
|
||
|
"SELECT COUNT(*) FROM `user` AS `u` WHERE u.activ = 1 AND u.hwtoken <> 4"
|
||
|
);
|
||
|
$countActiveTimeAccountUser = (int)$this->app->DB->Select(
|
||
|
"SELECT COUNT(*) FROM `user` AS `u` WHERE u.activ = 1 AND u.hwtoken = 4"
|
||
|
);
|
||
|
}
|
||
|
|
||
|
$isStandardUserOK = $countActiveStandardUser <= $maxUser;
|
||
|
$isLightUserOK = $countActiveStandardUser + $countActiveTimeAccountUser + $countActiveLightUser
|
||
|
<= $maxTimeUser + $maxUser + $maxLightUser;
|
||
|
$isTimeUserOk = ($countActiveStandardUser + $countActiveTimeAccountUser)
|
||
|
<= $maxTimeUser + $maxUser;
|
||
|
|
||
|
if($isLightUserOK && $isStandardUserOK && $isTimeUserOk) {
|
||
|
return ['status' => true];
|
||
|
}
|
||
|
|
||
|
if($type === 'user') {
|
||
|
$minStandard = $countActiveStandardUser;
|
||
|
if($maxTimeUser > 0) {
|
||
|
$minStandard2 = (int)ceil(($countActiveStandardUser
|
||
|
+ $countActiveTimeAccountUser
|
||
|
+ $countActiveLightUser
|
||
|
- $maxLightUser)/ 2);
|
||
|
$minStandard3 = (int)ceil(($countActiveStandardUser + $countActiveTimeAccountUser) / 2);
|
||
|
}
|
||
|
else {
|
||
|
$minStandard2 = $countActiveStandardUser
|
||
|
+ $countActiveTimeAccountUser
|
||
|
+ $countActiveLightUser
|
||
|
- $maxLightUser;
|
||
|
$minStandard3 = $countActiveStandardUser + $countActiveTimeAccountUser;
|
||
|
}
|
||
|
if($minStandard2 > $minStandard) {
|
||
|
$minStandard = $minStandard2;
|
||
|
}
|
||
|
if($minStandard3 > $minStandard) {
|
||
|
$minStandard = $minStandard3;
|
||
|
}
|
||
|
if($minStandard > $maxUser) {
|
||
|
if($minStandard >= $oldUser) {
|
||
|
return [
|
||
|
'status' => false,
|
||
|
'error' => sprintf(
|
||
|
'Es sind %d Benutzer aktiv, Sie können keine Benutzer kündigen.
|
||
|
Deaktivieren Sie nicht benötigte Accounts.',
|
||
|
$countActiveLightUser + $countActiveTimeAccountUser + $countActiveStandardUser
|
||
|
)
|
||
|
];
|
||
|
}
|
||
|
return [
|
||
|
'status' => false,
|
||
|
'error' => sprintf(
|
||
|
'Es sind %d Benutzer aktiv, sie können die Benutzerzahl auf %d reduzieren oder
|
||
|
nicht benötigte Accounts deaktivieren.',
|
||
|
$countActiveLightUser + $countActiveTimeAccountUser + $countActiveStandardUser,
|
||
|
$minStandard
|
||
|
)
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
elseif($type === 'lightuser') {
|
||
|
$minLight = $countActiveLightUser + $countActiveTimeAccountUser + $countActiveStandardUser
|
||
|
- $maxUser - $maxTimeUser;
|
||
|
if($minLight > $maxLightUser) {
|
||
|
if($minLight >= $oldLightUser) {
|
||
|
return [
|
||
|
'status' => false,
|
||
|
'error' => sprintf(
|
||
|
'Es sind %d Light-User aktiv. Deaktivieren Sie nicht benötigte Accounts um fortzusetzen.',
|
||
|
$countActiveLightUser
|
||
|
)
|
||
|
];
|
||
|
}
|
||
|
return [
|
||
|
'status' => false,
|
||
|
'error' => sprintf(
|
||
|
'Es sind %d Light-User aktiv, sie können die Benutzerzahl auf %d reduzieren oder
|
||
|
nicht benötigte Accounts deaktivieren.',
|
||
|
$countActiveLightUser,
|
||
|
$minLight
|
||
|
)
|
||
|
];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return [
|
||
|
'status' => false,
|
||
|
'error' => sprintf(
|
||
|
'Es sind %d Benutzer aktiv',
|
||
|
$countActiveLightUser + $countActiveTimeAccountUser + $countActiveStandardUser
|
||
|
)
|
||
|
];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $key
|
||
|
*
|
||
|
* @return array|null
|
||
|
*/
|
||
|
public function getBuyModuleFromModuleKey($key)
|
||
|
{
|
||
|
$buyList = $this->getActualBuyList();
|
||
|
if(empty($buyList['modulearticle'])) {
|
||
|
return null;
|
||
|
}
|
||
|
foreach($buyList['modulearticle'] as $mod) {
|
||
|
if($mod['parameter'] === $key) {
|
||
|
return $mod;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $price
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function formatBuyPrice($price)
|
||
|
{
|
||
|
if(empty($price)) {
|
||
|
return $price;
|
||
|
}
|
||
|
if(substr($price, -3) === '.00') {
|
||
|
return substr($price, 0, -3);
|
||
|
}
|
||
|
|
||
|
return $price;
|
||
|
}
|
||
|
|
||
|
public function AppstoreBuy()
|
||
|
{
|
||
|
$this->app->Location->execute('index.php?module&appstore&action=list');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string[]
|
||
|
*/
|
||
|
protected static function getHubspotEvents()
|
||
|
{
|
||
|
return [
|
||
|
'RENTBUTTONHUBSPOTEVENT' => 'buyClick1',
|
||
|
'RENTPOPUPHUBSPOTEVENT' => 'buyClick2',
|
||
|
'RENTPOPUPOKHUBSPOTEVENT' => 'buyOk',
|
||
|
'RENTPOPUPABORTHUBSPOTEVENT' => 'buyAbort',
|
||
|
'RENTPOPUPERRORHUBSPOTEVENT' => 'buyError',
|
||
|
'RENTPOPUPINITHUBSPOTEVENT' => 'buyInit',
|
||
|
];
|
||
|
}
|
||
|
|
||
|
protected function showUpdateMessage(): void
|
||
|
{
|
||
|
if(!$this->canBuy()) {
|
||
|
return;
|
||
|
}
|
||
|
if($this->app->User->GetType() !== 'admin') {
|
||
|
return;
|
||
|
}
|
||
|
$moduleForInfos = $this->getModulesForUpdateInfo();
|
||
|
if(empty($moduleForInfos)) {
|
||
|
return;
|
||
|
}
|
||
|
$this->app->Tpl->Set(
|
||
|
'MESSAGE',
|
||
|
'<div class="info">Es sind Module zum Herunterladen verfügbar. Sie können nun ein Update installieren.
|
||
|
<a target="_blank" href="update.php?rand='.sha1(uniqid('', true)).'"><input type="button" value="Update starten" /></a></div>'
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function canBuy(): bool
|
||
|
{
|
||
|
return method_exists('erpAPI', 'Ioncube_Property') && !empty(erpAPI::Ioncube_Property('canbuy'));
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $iban
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function isValidIban($iban): bool
|
||
|
{
|
||
|
$iban = str_replace(' ','', strtolower($iban));
|
||
|
$countries = [
|
||
|
'al' => 28, 'ad' => 24, 'at' => 20, 'az' => 28, 'bh' => 22, 'be' => 16, 'ba' => 20, 'br' => 29, 'bg' => 22,
|
||
|
'cr' => 21, 'hr' => 21, 'cy' => 28, 'cz' => 24, 'dk' => 18, 'do' => 28, 'ee' => 20, 'fo' => 18, 'fi' => 18,
|
||
|
'fr' => 27, 'ge' => 22, 'de' => 22, 'gi' => 23, 'gr' => 27, 'gl' => 18, 'gt' => 28, 'hu' => 28, 'is' => 26,
|
||
|
'ie' => 22, 'il' => 23, 'it' => 27, 'jo' => 30, 'kz' => 20, 'kw' => 30, 'lv' => 21, 'lb' => 28, 'li' => 21,
|
||
|
'lt' => 20, 'lu' => 20, 'mk' => 19, 'mt' => 31, 'mr' => 27, 'mu' => 30, 'mc' => 27, 'md' => 24, 'me' => 22,
|
||
|
'nl' => 18, 'no' => 15, 'pk' => 24, 'ps' => 29, 'pl' => 28, 'pt' => 25, 'qa' => 29, 'ro' => 24, 'sm' => 27,
|
||
|
'sa' => 24, 'rs' => 22, 'sk' => 24, 'si' => 19, 'es' => 24, 'se' => 24, 'ch' => 21, 'tn' => 24, 'tr' => 26,
|
||
|
'ae' => 23, 'gb' => 22, 'vg' => 24
|
||
|
];
|
||
|
|
||
|
$chars = [
|
||
|
'a' => 10, 'b' => 11, 'c' => 12, 'd' => 13, 'e' => 14, 'f' => 15, 'g' => 16, 'h' => 17, 'i' => 18,
|
||
|
'j' => 19, 'k' => 20, 'l' => 21, 'm' => 22, 'n' => 23, 'o' => 24, 'p' => 25, 'q' => 26, 'r' => 27,
|
||
|
's' => 28, 't' => 29, 'u' => 30, 'v' => 31, 'w' => 32, 'x' => 33, 'y' => 34, 'z' => 35
|
||
|
];
|
||
|
|
||
|
if (strlen($iban) !== $countries[ substr($iban,0,2) ]) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$movedChar = substr($iban, 4) . substr($iban,0,4);
|
||
|
$movedCharArray = str_split($movedChar);
|
||
|
$newString = '';
|
||
|
|
||
|
foreach ($movedCharArray as $k => $v) {
|
||
|
|
||
|
if ( !is_numeric($movedCharArray[$k]) ) {
|
||
|
$movedCharArray[$k] = $chars[$movedCharArray[$k]];
|
||
|
}
|
||
|
$newString .= $movedCharArray[$k];
|
||
|
}
|
||
|
if (function_exists('bcmod')) {
|
||
|
return bcmod($newString, '97') == 1;
|
||
|
}
|
||
|
|
||
|
$take = 5;
|
||
|
$mod = 0;
|
||
|
|
||
|
do {
|
||
|
$a = $mod . substr($newString, 0, $take);
|
||
|
$newString = substr($newString, $take);
|
||
|
$mod = (int)$a % 97;
|
||
|
}
|
||
|
while (strlen($newString));
|
||
|
|
||
|
return $mod === 1;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $module
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function isModulePossibleToBuy($module): bool
|
||
|
{
|
||
|
if(!$this->canBuy()) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if($this->app->erp->ModulVorhanden($module)) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$buyList = $this->getActualBuyList();
|
||
|
if(empty($buyList['modules']) || !is_array($buyList['modules'])) {
|
||
|
return false;
|
||
|
}
|
||
|
return in_array($module, $buyList['modules']);
|
||
|
//return !empty(erpAPI::Ioncube_Property('canbuymodule'.str_replace('_','X', $module)));
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @param bool $intern
|
||
|
*
|
||
|
* @return bool|void
|
||
|
*/
|
||
|
public function AppstoreActivate($intern = false)
|
||
|
{
|
||
|
$smodule = $this->app->Secure->GetGET('smodule');
|
||
|
$activated = $this->activateModule($smodule);
|
||
|
if($intern) {
|
||
|
return $activated;
|
||
|
}
|
||
|
$this->app->Location->execute('index.php?module=appstore&action=list');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param bool $intern
|
||
|
*
|
||
|
* @return bool|void
|
||
|
*/
|
||
|
public function AppstoreDeactivate($intern = false)
|
||
|
{
|
||
|
$smodule = $this->app->Secure->GetGET('smodule');
|
||
|
$deactivated = $this->deactivateModule($smodule);
|
||
|
if($intern) {
|
||
|
return $deactivated;
|
||
|
}
|
||
|
$this->app->Location->execute('index.php?module=appstore&action=list');
|
||
|
}
|
||
|
|
||
|
public function addBetaToHeadline(): void
|
||
|
{
|
||
|
if(empty($this->app->erp->kurzueberschrift1)) {
|
||
|
return;
|
||
|
}
|
||
|
if(stripos($this->app->erp->kurzueberschrift1, 'BETA') !== false) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$this->app->erp->Headlines('', $this->app->erp->kurzueberschrift1.' <span class="beta">BETA</span>');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $module
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function isBeta($module): bool
|
||
|
{
|
||
|
if(empty($module)) {
|
||
|
return false;
|
||
|
}
|
||
|
$apps = $this->getAppList();
|
||
|
if(empty($apps[$module])) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if(!isset($apps[$module]['beta']) || !empty($apps[$module]['beta'])) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $module
|
||
|
* @param int $parameter
|
||
|
*
|
||
|
* @return null|string
|
||
|
*/
|
||
|
public function GetCategoryByModule($module, $parameter = 0): ?string
|
||
|
{
|
||
|
if(empty($module)) {
|
||
|
return null;
|
||
|
}
|
||
|
if($parameter > 0) {
|
||
|
$module2 = $this->app->erp->getSubModule($parameter, $module);
|
||
|
if(!empty($module2)) {
|
||
|
$module = (string)$module2;
|
||
|
}
|
||
|
}
|
||
|
$apps = $this->GetApps();
|
||
|
if(empty($apps['installiert'])) {
|
||
|
return null;
|
||
|
}
|
||
|
$apps = $apps['installiert'];
|
||
|
$modul = null;
|
||
|
foreach($apps as $app) {
|
||
|
if($app['key'] === $module) {
|
||
|
$modul = $app;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if($modul === null) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
if(empty($modul['kategorie'])) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
$category = (string)$modul['kategorie'];
|
||
|
if(strpos($category,'{|') === 0) {
|
||
|
$category = substr($category, 2);
|
||
|
}
|
||
|
if(substr($category, -2) === '|}') {
|
||
|
$category = substr($category, 0, -2);
|
||
|
}
|
||
|
|
||
|
return (string)$category;
|
||
|
}
|
||
|
|
||
|
public function addLegacyToHeadline(): void
|
||
|
{
|
||
|
if(empty($this->app->erp->kurzueberschrift1)){
|
||
|
return;
|
||
|
}
|
||
|
if(stripos($this->app->erp->kurzueberschrift1, 'LEGACY') !== false){
|
||
|
return;
|
||
|
}
|
||
|
$this->app->erp->Headlines('', $this->app->erp->kurzueberschrift1.'<span class="legacy">LEGACY</span>');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $module
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function isPopular($module): bool
|
||
|
{
|
||
|
if(empty($module)){
|
||
|
return false;
|
||
|
}
|
||
|
$apps = $this->getAppList();
|
||
|
if(empty($apps[$module])){
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return !empty($apps[$module]['popular']);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $module
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function isLegacy($module): bool
|
||
|
{
|
||
|
if(empty($module)){
|
||
|
return false;
|
||
|
}
|
||
|
$apps = $this->getAppList();
|
||
|
if(empty($apps[$module])){
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return !empty($apps[$module]['legacy']);
|
||
|
}
|
||
|
|
||
|
public function addSpecialToHeadline(): void
|
||
|
{
|
||
|
if(empty($this->app->erp->kurzueberschrift1)){
|
||
|
return;
|
||
|
}
|
||
|
if(stripos($this->app->erp->kurzueberschrift1, 'SPECIAL') !== false){
|
||
|
return;
|
||
|
}
|
||
|
$this->app->erp->Headlines('', $this->app->erp->kurzueberschrift1.'<span class="special">SPECIAL</span>');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $module
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function isSpecial($module): bool
|
||
|
{
|
||
|
if(empty($module)){
|
||
|
return false;
|
||
|
}
|
||
|
$apps = $this->getAppList();
|
||
|
if(empty($apps[$module])){
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
return isset($apps[$module]['special']) && !empty($apps[$module]['special']);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $module
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function isProjectSensitive($module): bool
|
||
|
{
|
||
|
if(empty($module)){
|
||
|
return false;
|
||
|
}
|
||
|
$apps = $this->getAppList();
|
||
|
if(empty($apps[$module])){
|
||
|
return false;
|
||
|
}
|
||
|
if(isset($apps[$module]['project_sensitive']) && !empty($apps[$module]['project_sensitive'])){
|
||
|
return $apps[$module]['project_sensitive'];
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
protected function getCacheKey(): string
|
||
|
{
|
||
|
return (string)$this->app->Conf->WFdbname;
|
||
|
}
|
||
|
|
||
|
protected function clearCache(): void
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(isset(self::$cachedAppsList[$cacheKey])) {
|
||
|
unset(self::$cachedAppsList[$cacheKey]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $prefix
|
||
|
* @param bool $withDeactivated
|
||
|
*
|
||
|
* @return array|null
|
||
|
*/
|
||
|
public function getAppsListWithPrefix($prefix, $withDeactivated = false): ?array
|
||
|
{
|
||
|
$apps = $this->getAppsList($withDeactivated);
|
||
|
if(empty($apps)) {
|
||
|
return $apps;
|
||
|
}
|
||
|
|
||
|
$filteredApps = [];
|
||
|
|
||
|
if(!empty($apps['installiert'])) {
|
||
|
$filteredApps['installiert'] = [];
|
||
|
foreach($apps['installiert'] as $app) {
|
||
|
if(strpos($app['key'], $prefix) === 0) {
|
||
|
$filteredApps['installiert'][] = $app;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if(!empty($apps['kauf'])) {
|
||
|
$filteredApps['kauf'] = [];
|
||
|
foreach($apps['kauf'] as $app) {
|
||
|
if(strpos($app['key'], $prefix) === 0) {
|
||
|
$filteredApps['kauf'][] = $app;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $filteredApps;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $link
|
||
|
*
|
||
|
* @return array|null[]
|
||
|
*/
|
||
|
public function getModuleActionByLink($link): array
|
||
|
{
|
||
|
$module = null;
|
||
|
$action = null;
|
||
|
$linkArray = explode('?', $link);
|
||
|
foreach($linkArray as $linkParts) {
|
||
|
$linka2 = explode('&',$linkParts);
|
||
|
foreach($linka2 as $k2 => $v2) {
|
||
|
$linka3 = explode('=',$v2);
|
||
|
if($linka3[0] === 'module'){
|
||
|
$module = $linka3[1];
|
||
|
}
|
||
|
if($linka3[0] === 'action'){
|
||
|
$action = $linka3[1];
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return ['module' => $module, 'action' => $action,];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $app
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function hasAppUserRights($app): bool
|
||
|
{
|
||
|
$link = !empty($app['Link'])?$app['Link']:'';
|
||
|
$moduleAction = $this->getModuleActionByLink($link);
|
||
|
$module = $moduleAction['module'];
|
||
|
$action = $moduleAction['action'];
|
||
|
|
||
|
return !empty($module) && !empty($action) && $this->app->erp->RechteVorhanden($module, $action);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $key
|
||
|
*
|
||
|
* @return null|string
|
||
|
*/
|
||
|
public function getAppNameByKey($key): ?string
|
||
|
{
|
||
|
$apps = $this->getAppList();
|
||
|
if(empty($apps[$key]) || !isset($apps[$key]['Bezeichnung'])) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
return $apps[$key]['Bezeichnung'];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param bool $withDeactivated
|
||
|
*
|
||
|
* @return null|array
|
||
|
*/
|
||
|
public function getAppsList($withDeactivated = false): ?array
|
||
|
{
|
||
|
$cacheKey = $this->getCacheKey();
|
||
|
if(
|
||
|
!empty(self::$cachedAppsList[$cacheKey])
|
||
|
&& !empty(self::$cachedAppsList[$cacheKey][(int)$withDeactivated])
|
||
|
) {
|
||
|
return self::$cachedAppsList[$cacheKey][(int)$withDeactivated];
|
||
|
}
|
||
|
$apps = $this->getAppList();
|
||
|
$res = null;
|
||
|
$version = $this->app->erp->Version();
|
||
|
|
||
|
if(empty($apps)){
|
||
|
return null;
|
||
|
}
|
||
|
foreach($apps as $key => $app) {
|
||
|
$app['key'] = $key;
|
||
|
if(!isset($app['beta'])) {
|
||
|
$app['beta'] = true;
|
||
|
}
|
||
|
if(!isset($app['legacy'])){
|
||
|
$app['legacy'] = false;
|
||
|
}
|
||
|
if(!isset($app['special'])){
|
||
|
$app['special'] = false;
|
||
|
}
|
||
|
if(!isset($app['project_sensitive'])){
|
||
|
$app['project_sensitive'] = false;
|
||
|
}
|
||
|
$ablaufdatum = $this->app->erp->IoncubeProperty('moduleablaufdatumX'.str_replace('_','X',$key));
|
||
|
$test = $this->app->erp->IoncubeProperty('testmoduleX'.str_replace('_','X',$key));
|
||
|
if(!empty($ablaufdatum)) {
|
||
|
$app['ablaufdatum'] = $ablaufdatum;
|
||
|
}
|
||
|
if($test) {
|
||
|
$app['test'] = $test;
|
||
|
}
|
||
|
if($this->app->erp->ModulVorhanden($key, $withDeactivated)) {
|
||
|
if($app['Versionen'] == '' || $app['Versionen'] === 'ALL') {
|
||
|
$res['installiert'][] = $app;
|
||
|
if(!empty($app['Link2'])) {
|
||
|
$res['installiert'][] = $app;
|
||
|
$appIndex = count($res['installiert']) - 1;
|
||
|
$res['installiert'][$appIndex]['key'] .= 'booster';
|
||
|
$res['installiert'][$appIndex]['Link'] = $app['Link2'];
|
||
|
$res['installiert'][$appIndex]['Bezeichnung'] = $app['Bezeichnung2'];
|
||
|
unset($res['installiert'][$appIndex]['Link2'], $res['installiert'][$appIndex]['Bezeichnung2']);
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
$versionen = explode(',',$app['Versionen']);
|
||
|
if(in_array($version, $versionen)) {
|
||
|
$res['installiert'][] = $app;
|
||
|
if(!empty($app['Link2'])) {
|
||
|
$res['installiert'][] = $app;
|
||
|
$appIndex = count($res['installiert']) - 1;
|
||
|
$res['installiert'][$appIndex]['key'] .= 'booster';
|
||
|
$res['installiert'][$appIndex]['Link'] = $app['Link2'];
|
||
|
$res['installiert'][$appIndex]['Bezeichnung'] = $app['Bezeichnung2'];
|
||
|
unset($res['installiert'][$appIndex]['Link2'], $res['installiert'][$appIndex]['Bezeichnung2']);
|
||
|
}
|
||
|
}
|
||
|
elseif(empty($app['showonlywheninstalled'])) {
|
||
|
$res['kauf'][] = $app;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
if(empty($app['showonlywheninstalled'])) {
|
||
|
$app['Link'] = '';
|
||
|
$res['kauf'][] = $app;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
self::$cachedAppsList[$cacheKey][(int)$withDeactivated] = $res;
|
||
|
|
||
|
return $res;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $prefix
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
public function getAppListWithPrefix($prefix): array
|
||
|
{
|
||
|
$apps = $this->getAppList();
|
||
|
|
||
|
foreach($apps as $appKey => $app) {
|
||
|
if(strpos($appKey, $prefix) !== 0) {
|
||
|
unset($apps[$appKey]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $apps;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $prefix
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
public function getBetaModulesByPrefix($prefix): array
|
||
|
{
|
||
|
$ret = [];
|
||
|
$apps = $this->getAppListWithPrefix($prefix);
|
||
|
foreach($apps as $moduleName => $app) {
|
||
|
if(!isset($app['beta']) || !empty($app['beta'])) {
|
||
|
$ret[] = $moduleName;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $ret;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function getAppList(): array
|
||
|
{
|
||
|
$apps = array(
|
||
|
'taxdoo'=>array('Bezeichnung'=>'Taxdoo Schnittstelle',
|
||
|
'Link'=>'index.php?module=taxdoo&action=log',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','install'=>true,'beta' => false,'kategorie'=>'{|Buchhaltung|}','settings'=>true),
|
||
|
'cronjob_paqato'=>array('Bezeichnung'=>'Paqato Schnittstelle',
|
||
|
'Link'=>'index.php?module=paqato&action=log',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Schnittstellen|}','settings'=>true),
|
||
|
'aufgaben'=>array('Bezeichnung'=>'Aufgaben',
|
||
|
'Link'=>'index.php?module=aufgaben&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|Team Funktionen|}'),
|
||
|
'chat'=>array('Bezeichnung'=>'Chat',
|
||
|
'Link'=>'index.php?module=chat&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'','install'=>true, 'beta' => false,'kategorie'=>'{|Team Funktionen|}'),
|
||
|
'docscan'=>array('Bezeichnung'=>'Dokumenten Scanner',
|
||
|
'Link'=>'index.php?module=docscan&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'','install'=>true, 'beta' => false,'kategorie'=>'{|Belege|}'),
|
||
|
'vertriebscockpit'=>array('Bezeichnung'=>'Vertriebscockpit',
|
||
|
'Link'=>'index.php?module=vertriebscockpit&action=wiedervorlagen',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,
|
||
|
'legacy' => true,'kategorie'=>'{|Verkauf|}',
|
||
|
'popular' => true,
|
||
|
),
|
||
|
'datanorm'=>array('Bezeichnung'=>'Datanorm Importer',
|
||
|
'Link'=>'index.php?module=datanorm&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Schnittstellen|}'),
|
||
|
|
||
|
'adresse_typ'=>array('Bezeichnung'=>'Adresse Typ',
|
||
|
'Link'=>'index.php?module=adresse_typ&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|Stammdaten|}','settings'=>true,
|
||
|
'project_sensitive' => true),
|
||
|
|
||
|
|
||
|
'wiedervorlage'=>array('Bezeichnung'=>'Wiedervorlage',
|
||
|
'Link'=>'index.php?module=wiedervorlage&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Verkauf|}','settings'=>true,
|
||
|
'project_sensitive' => true),
|
||
|
/*'stammdatenbereinigen'=>array('Bezeichnung'=>'Stammdaten Bereinigung',
|
||
|
'Link'=>'index.php?module=stammdatenbereinigen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL'),*/
|
||
|
/*
|
||
|
'lagerpruefung'=>array('Bezeichnung'=>'Lagerprüfung',
|
||
|
'Link'=>'index.php?module=lagerpruefung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL'),
|
||
|
*/
|
||
|
'layoutvorlagen'=>array('Bezeichnung'=>'Layoutvorlagen',
|
||
|
'Link'=>'index.php?module=layoutvorlagen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|Workflows|}','settings'=>true),
|
||
|
'zertifikatgenerator'=>array('Bezeichnung'=>'Zertifikatgenerator',
|
||
|
'Link'=>'index.php?module=zertifikatgenerator&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Workflows|}'),
|
||
|
'systemlog'=>array('Bezeichnung'=>'Systemlog',
|
||
|
'Link'=>'index.php?module=systemlog&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|System|}'),
|
||
|
'filiallieferung'=>array('Bezeichnung'=>'Filiallieferung',
|
||
|
'Link'=>'index.php?module=filiallieferung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'project_sensitive' => true),
|
||
|
'lagermindestmengen'=>array('Bezeichnung'=>'Lagermindestmengen',
|
||
|
'Link'=>'index.php?module=lagermindestmengen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}','settings'=>true,
|
||
|
'project_sensitive' => true),
|
||
|
'rechnung_stratedi'=>array('Bezeichnung'=>'EDI Stratedi',
|
||
|
'Link'=>'index.php?module=rechnung_stratedi&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Schnittstellen|}','settings'=>true),
|
||
|
'lieferschwelle'=>array('Bezeichnung'=>'Lieferschwelle',
|
||
|
'Link'=>'index.php?module=lieferschwelle&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Buchhaltung|}','settings'=>true),
|
||
|
'gefahrgut'=>array('Bezeichnung'=>'Gefahrgut',
|
||
|
'Link'=>'index.php?module=gefahrgut&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif','install'=>true,
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}','settings'=>true),
|
||
|
'freearticle'=>array('Bezeichnung'=>'Kostenloser Artikel (Probe, Neukunde, Flyer, Geschenk)',
|
||
|
'Link'=>'index.php?module=freearticle&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Verkauf|}'),
|
||
|
'extendedapproval'=>array('Bezeichnung'=>'Erweiterte Freigabe',
|
||
|
'Link'=>'index.php?module=extendedapproval&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Buchhaltung|}','settings'=>true),
|
||
|
'eangenerator'=>array('Bezeichnung'=>'EAN Generator',
|
||
|
'Link'=>'index.php?module=eangenerator&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif', 'Versionen'=>'ENT','beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}','settings'=>true),
|
||
|
'internalsupport'=>array('Bezeichnung'=>'Interner Support',
|
||
|
'Link'=>'index.php?module=internalsupport&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|System|}'),
|
||
|
'productionscanner'=>array('Bezeichnung'=>'Produktionsscanner',
|
||
|
'Link'=>'index.php?module=productionscanner&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Produktion|}'),
|
||
|
'xcs'=>array('Bezeichnung'=>'Xentral Customizing Suite (XCS)',
|
||
|
'Link'=>'index.php?module=xcs&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Workflows|}'),
|
||
|
'receiptprotocolitems'=>array('Bezeichnung'=>'Belegprotokolleinträge',
|
||
|
'Link'=>'index.php?module=receiptprotocolitems&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Workflows|}','settings'=>true),
|
||
|
'itemtemplate'=>array('Bezeichnung'=>'Vorlagen',
|
||
|
'Link'=>'index.php?module=itemtemplate&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false),
|
||
|
'mandatoryfields'=>array('Bezeichnung'=>'Pflichtfelder',
|
||
|
'Link'=>'index.php?module=mandatoryfields&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Workflows|}','settings'=>true),
|
||
|
'layouttemplateattachment'=>array('Bezeichnung'=>'Layoutvorlagen Anhang',
|
||
|
'Link'=>'index.php?module=layouttemplateattachment&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false, 'kategorie'=>'{|Workflows|}','settings'=>true),
|
||
|
'ups'=>array('Bezeichnung'=>'UPS Accounts',
|
||
|
'Link'=>'index.php?module=ups&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Versandarten|}'),
|
||
|
'gls'=>array('Bezeichnung'=>'GLS',
|
||
|
'Link'=>'index.php?module=gls&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Versandarten|}','settings'=>true),
|
||
|
'packagedeliverylist'=>array('Bezeichnung'=>'Paketbeförderungsliste',
|
||
|
'Link'=>'index.php?module=packagedeliverylist&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}'),
|
||
|
'bmd'=>array('Bezeichnung'=>'BMD Buchhaltungsexport',
|
||
|
'Link'=>'index.php?module=bmd&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Buchhaltung|}','settings'=>true),
|
||
|
'standardpackages'=>array('Bezeichnung'=>'Boxen',
|
||
|
'Link'=>'index.php?module=standardpackages&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Lager und Logistik|}'),
|
||
|
'supplierdeliveryreport'=>array('Bezeichnung'=>'Lieferant Paket Auswertung ',
|
||
|
'Link'=>'index.php?module=supplierdeliveryreport&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Controlling und Statistik|}'),
|
||
|
'maximumdiscount'=>array('Bezeichnung'=>'Maximalrabatt',
|
||
|
'Link'=>'index.php?module=maximumdiscount&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Verkauf|}','settings'=>true),
|
||
|
'filelink'=>array('Bezeichnung'=>'Verknüpfungen',
|
||
|
'Link'=>'index.php?module=filelink&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Workflows|}'),
|
||
|
'inventur'=>array('Bezeichnung'=>'Inventur',
|
||
|
'Link'=>'index.php?module=inventur&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'project_sensitive' => true),
|
||
|
'waage'=>array('Bezeichnung'=>'Waage',
|
||
|
'Link'=>'index.php?module=waage&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}'),
|
||
|
'paymentslip_swiss'=>array('Bezeichnung'=>'Einzahlungsschein Schweiz (ESR)',
|
||
|
'Link'=>'index.php?module=paymentslip_swiss&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Buchhaltung|}','settings'=>true),
|
||
|
'rechnungslauf'=>array('Bezeichnung'=>'Abolauf / Abosystem',
|
||
|
'Link'=>'index.php?module=rechnungslauf&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Verkauf|}','settings'=>true,'install' => true
|
||
|
),
|
||
|
'meiapps'=>array('Bezeichnung'=>'MEiAPPS',
|
||
|
'Link'=>'index.php?module=meiapps&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}'),
|
||
|
'stechuhrdevice'=>array('Bezeichnung'=>'Mitarbeiterzeiterfassung Geräteeinstellungen',
|
||
|
'Link'=>'index.php?module=stechuhrdevice&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}',
|
||
|
'settings'=>true),
|
||
|
'berichte'=>array('Bezeichnung'=>'Berichte',
|
||
|
'Link'=>'index.php?module=berichte&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'','install'=>true, 'beta' => false,
|
||
|
'legacy' => true,'kategorie'=>'{|Controlling und Statistik|}'),
|
||
|
'preisanfrage'=>array('Bezeichnung'=>'Preisanfrage',
|
||
|
'Link'=>'index.php?module=preisanfrage&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Einkauf|}',
|
||
|
'project_sensitive' => true),
|
||
|
'tagespreise'=>array('Bezeichnung'=>'Tagespreise',
|
||
|
'Link'=>'index.php?module=tagespreise&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Stammdaten|}'),
|
||
|
'waage_artikel'=>array('Bezeichnung'=>'Waage Einstellungen',
|
||
|
'Link'=>'index.php?module=waage_artikel&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}'),
|
||
|
'ueberzahlterechnungen'=>array('Bezeichnung'=>'Überzahlte Rechnungen',
|
||
|
'Link'=>'index.php?module=ueberzahlterechnungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Buchhaltung|}'),
|
||
|
'serienbrief'=>array('Bezeichnung'=>'Serienbriefe',
|
||
|
'Link'=>'index.php?module=serienbrief&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,
|
||
|
'legacy' => true,'kategorie'=>'{|Marketing|}'),
|
||
|
'pos_kassierer'=>array('Bezeichnung'=>'POS (Konfiguration)',
|
||
|
'Link'=>'index.php?module=pos_kassierer&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Verkauf|}','settings'=>true),
|
||
|
'pos'=>array('Bezeichnung'=>'POS',
|
||
|
'Link'=>'index.php?module=pos&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Verkauf|}',
|
||
|
'popular' => true,
|
||
|
),
|
||
|
'reisekostenart'=>array('Bezeichnung'=>'Reisekostenart',
|
||
|
'Link'=>'index.php?module=reisekostenart&action=list',
|
||
|
'Icon'=>'Icons_dunkel_19.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Buchhaltung|}','settings'=>true),
|
||
|
'reisekosten'=>array('Bezeichnung'=>'Reisekosten',
|
||
|
'Link'=>'index.php?module=reisekosten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_19.gif',
|
||
|
'Versionen'=>'ENT', 'install'=>true, 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}',
|
||
|
'project_sensitive' => true),
|
||
|
'aktionscode_liste'=>array('Bezeichnung'=>'Aktionscodes',
|
||
|
'Link'=>'index.php?module=aktionscode_liste&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Controlling und Statistik|}','settings'=>true,
|
||
|
'project_sensitive' => true),
|
||
|
'aktionscodes'=>array('Bezeichnung'=>'Aktionscodes Auswertung',
|
||
|
'Link'=>'index.php?module=aktionscodes&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Controlling und Statistik|}',),
|
||
|
'artikeleigenschaften'=>array('Bezeichnung'=>'Artikel Eigenschaften',
|
||
|
'Link'=>'index.php?module=artikeleigenschaften&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT','showonlywheninstalled'=>true, 'beta' => false,'kategorie'=>'{|Stammdaten|}'),
|
||
|
'sammelrechnung'=>array('Bezeichnung'=>'Sammelrechnung',
|
||
|
'Link'=>'index.php?module=sammelrechnung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ENT', 'install'=>true, 'beta' => false,'kategorie'=>'{|Buchhaltung|}',
|
||
|
'project_sensitive' => true),
|
||
|
'schnellproduktion'=>array('Bezeichnung'=>'Schnellproduktion',
|
||
|
'Link'=>'index.php?module=schnellproduktion&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Produktion|}',
|
||
|
'project_sensitive' => true),
|
||
|
'einkaufabgleich'=>array('Bezeichnung'=>'EK-API (Farnell / Conrad)',
|
||
|
'Link'=>'index.php?module=einkaufabgleich&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,
|
||
|
'legacy' => true,'kategorie'=>'{|Schnittstellen|}'),
|
||
|
'waehrungumrechnung'=>array('Bezeichnung'=>'Währung Umrechnung',
|
||
|
'Link'=>'index.php?module=waehrungumrechnung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Buchhaltung|}','settings'=>true),
|
||
|
'propertytranslation'=>array('Bezeichnung'=>'Artikel Eigenschaften Übersetzung',
|
||
|
'Link'=>'index.php?module=propertytranslation&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Stammdaten|}'),
|
||
|
'rahmenvertrag'=>array('Bezeichnung'=>'Rahmenvertrag (Lieferanten)',
|
||
|
'Link'=>'index.php?module=rahmenvertrag&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Einkauf|}'),
|
||
|
'frameagreement'=>array('Bezeichnung'=>'Rahmenvertrag (Kunden)',
|
||
|
'Link'=>'index.php?module=frameagreement&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Verkauf|}'),
|
||
|
'pdfarchiv'=>array('Bezeichnung'=>'PDF Archivierung',
|
||
|
'Link'=>'index.php?module=pdfarchiv&action=list',
|
||
|
'Icon'=>'Icons_dunkel_22.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Belege|}'),
|
||
|
|
||
|
/*
|
||
|
'kommissionierlauf'=>array('Bezeichnung'=>'Kommissionierung',
|
||
|
'Link'=>'index.php?module=kommissionierlauf&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT'),
|
||
|
*/
|
||
|
'artikelbaum'=>array('Bezeichnung'=>'Artikelbaum',
|
||
|
'Link'=>'index.php?module=artikelbaum&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'','install'=>true, 'beta' => false,'kategorie'=>'{|Stammdaten|}','settings'=>true,
|
||
|
'project_sensitive' => true),
|
||
|
|
||
|
'verkaufkarte'=>array('Bezeichnung'=>'Karte: Verkaufte Artikel',
|
||
|
'Link'=>'index.php?module=verkaufkarte&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Verkauf|}'),
|
||
|
|
||
|
'verkaufszahlen'=>array('Bezeichnung'=>'Verkaufszahlen',
|
||
|
'Link'=>'index.php?module=verkaufszahlen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'Versionen'=>'', 'install'=>true, 'beta' => false,'kategorie'=>'{|Controlling und Statistik|}'),
|
||
|
|
||
|
'firmendaten'=>[
|
||
|
'Bezeichnung'=>'Grundeinstellungen',
|
||
|
'Link'=>'index.php?module=firmendaten&action=edit',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'benutzer'=>[
|
||
|
'Bezeichnung'=>'Benutzer',
|
||
|
'Link'=>'index.php?module=benutzer&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'geschaeftsbrief_vorlagen'=>[
|
||
|
'Bezeichnung'=>'Geschäftsbrief Vorlagen',
|
||
|
'Link'=>'index.php?module=geschaeftsbrief_vorlagen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_3.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true,
|
||
|
'project_sensitive' => true
|
||
|
],
|
||
|
|
||
|
'emailbackup'=>[
|
||
|
'Bezeichnung'=>'E-Mail Accounts',
|
||
|
'Link'=>'index.php?module=emailbackup&action=list',
|
||
|
'Icon'=>'Icons_dunkel_4.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true,
|
||
|
'project_sensitive' => true
|
||
|
],
|
||
|
|
||
|
'ticket_vorlage'=>[
|
||
|
'Bezeichnung'=>'Ticket Vorlagen',
|
||
|
'Link'=>'index.php?module=ticket_vorlage&action=list',
|
||
|
'Icon'=>'Icons_dunkel_5.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true,
|
||
|
'project_sensitive' => true
|
||
|
],
|
||
|
|
||
|
'warteschlangen'=>[
|
||
|
'Bezeichnung'=>'Warteschlangen',
|
||
|
'Link'=>'index.php?module=warteschlangen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_5.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'artikelkategorien'=>[
|
||
|
'Bezeichnung'=>'Artikel Kategorien',
|
||
|
'Link'=>'index.php?module=artikelkategorien&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Stammdaten|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'artikeleinheit'=>[
|
||
|
'Bezeichnung'=>'Artikel Einheiten',
|
||
|
'Link'=>'index.php?module=artikeleinheit&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Stammdaten|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'gruppen'=>[
|
||
|
'Bezeichnung'=>'Gruppen',
|
||
|
'Link'=>'index.php?module=gruppen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'uservorlage'=>[
|
||
|
'Bezeichnung'=>'Benutzer Vorlage',
|
||
|
'Link'=>'index.php?module=uservorlage&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'laender'=>[
|
||
|
'Bezeichnung'=>'Länderliste',
|
||
|
'Link'=>'index.php?module=laender&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
/*'kalendergruppen'=>[
|
||
|
'Bezeichnung'=>'Kalender Gruppen',
|
||
|
'Link'=>'index.php?module=kalender&action=gruppenlist',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'',
|
||
|
//'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],*/
|
||
|
|
||
|
'prozessstarter'=>[
|
||
|
'Bezeichnung'=>'Prozessstarter',
|
||
|
'Link'=>'index.php?module=prozessstarter&action=list',
|
||
|
'Icon'=>'Icons_dunkel_22.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
/*'welcomeinfo'=>[
|
||
|
'Bezeichnung'=>'Lizenz',
|
||
|
'Link'=>'index.php?module=welcome&action=info',
|
||
|
'Icon'=>'Icons_dunkel_23.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],*/
|
||
|
|
||
|
'drucker'=>[
|
||
|
'Bezeichnung'=>'Drucker',
|
||
|
'Link'=>'index.php?module=drucker&action=list',
|
||
|
'Icon'=>'Icons_dunkel_24.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'adapterbox'=>[
|
||
|
'Bezeichnung'=>'Adapterbox',
|
||
|
'Link'=>'index.php?module=adapterbox&action=list',
|
||
|
'Icon'=>'Icons_dunkel_25.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'protokoll'=>[
|
||
|
'Bezeichnung'=>'Protokoll',
|
||
|
'Link'=>'index.php?module=protokoll&action=list',
|
||
|
'Icon'=>'Icons_dunkel_22.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'etiketten'=>[
|
||
|
'Bezeichnung'=>'Etiketten',
|
||
|
'Link'=>'index.php?module=etiketten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'uebersetzung'=>[
|
||
|
'Bezeichnung'=>'Übersetzungen',
|
||
|
'Link'=>'index.php?module=uebersetzung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}'
|
||
|
],
|
||
|
|
||
|
'api_account'=>[
|
||
|
'Bezeichnung'=>'API-Account',
|
||
|
'Link'=>'index.php?module=api_account&action=list',
|
||
|
'Icon'=>'Icons_dunkel_25.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'umkreissuche'=>array('Bezeichnung'=>'Karte: Umkreissuche Kunden',
|
||
|
'Link'=>'index.php?module=umkreissuche&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|Verkauf|}'),
|
||
|
|
||
|
'wissensdatenbank'=>array('Bezeichnung'=>'Wissensdatenbank',
|
||
|
'Link'=>'index.php?module=wissensdatenbank&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Team Funktionen|}'),
|
||
|
|
||
|
'lagermobil'=>array('Bezeichnung'=>'Mobile Lagerverwaltung',
|
||
|
'Link'=>'index.php?module=lagermobil&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}'),
|
||
|
|
||
|
'lagermobilold'=>array('Bezeichnung'=>'Lagermobil',
|
||
|
'Link'=>'index.php?module=lagermobilold&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,
|
||
|
'legacy' => true,'kategorie'=>'{|Lager und Logistik|}'),
|
||
|
|
||
|
'matrixprodukt'=>array('Bezeichnung'=>'Matrixprodukt',
|
||
|
'Link'=>'index.php?module=matrixprodukt&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Stammdaten|}'),
|
||
|
'massenbearbeitung'=>array('Bezeichnung'=>'Massenbearbeiten',
|
||
|
'Link'=>'index.php?module=massenbearbeitung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Stammdaten|}'),
|
||
|
|
||
|
'massenartikel'=>array('Bezeichnung'=>'Massenartikel',
|
||
|
'Link'=>'index.php?module=massenartikel&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Stammdaten|}'),
|
||
|
|
||
|
|
||
|
'tagesbedarf'=>array('Bezeichnung'=>'Tagesbedarf',
|
||
|
'Link'=>'index.php?module=tagesbedarf&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Einkauf|}'),
|
||
|
|
||
|
|
||
|
'artikel_texte'=>array('Bezeichnung'=>'Artikel Texte (Sprachen/Multishop)',
|
||
|
'Link'=>'index.php?module=artikel_texte&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'install'=>true, 'beta' => false,'kategorie'=>'{|Stammdaten|}'),
|
||
|
|
||
|
'verpackungen'=>array('Bezeichnung'=>'Verpackungen Lizenzen/Übersicht',
|
||
|
'Link'=>'index.php?module=verpackungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}'),
|
||
|
'adressabhaengigesetikett'=>array('Bezeichnung'=>'Adressabhängiges Etikett',
|
||
|
'Link'=>'index.php?module=adressabhaengigesetikett&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Workflows|}','settings'=>true),
|
||
|
|
||
|
'zmmeldung'=>array('Bezeichnung'=>'ZM Meldung',
|
||
|
'Link'=>'index.php?module=zmmeldung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Buchhaltung|}'),
|
||
|
|
||
|
'serviceauftragscan'=>array('Bezeichnung'=>'Serviceauftrag Scan',
|
||
|
'Link'=>'index.php?module=serviceauftragscan&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Verkauf|}'),
|
||
|
|
||
|
'adresssucheerweitert' =>array('Bezeichnung'=>'Adresssuche Erweitert',
|
||
|
'Link'=>'index.php?module=adresssucheerweitert&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Stammdaten|}'),
|
||
|
|
||
|
'anfrage'=>array('Bezeichnung'=>'Anfrage',
|
||
|
'Link'=>'index.php?module=anfrage&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Verkauf|}',
|
||
|
'project_sensitive' => true),
|
||
|
|
||
|
'arbeitsnachweis'=>array('Bezeichnung'=>'Arbeitsnachweis',
|
||
|
'Link'=>'index.php?module=arbeitsnachweis&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}',
|
||
|
'project_sensitive' => true),
|
||
|
|
||
|
'tagesabschluss'=>array('Bezeichnung'=>'Tagesabschluss',
|
||
|
'Link'=>'index.php?module=tagesabschluss&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Belege|}'),
|
||
|
/*
|
||
|
'lagerchargen'=>array('Bezeichnung'=>'Lager Chargen',
|
||
|
'Link'=>'index.php?module=lagerchargen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ALL'),
|
||
|
*/
|
||
|
'mailausgang'=>array('Bezeichnung'=>'Mailausgang Log',
|
||
|
'Link'=>'index.php?module=mailausgang&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|System|}'),
|
||
|
|
||
|
'ftpbackup'=>array('Bezeichnung'=>'FTP-Backup',
|
||
|
'Link'=>'index.php?module=ftpbackup&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'','install'=>true, 'beta' => false,'kategorie'=>'{|System|}','settings'=>true),
|
||
|
|
||
|
'netstock'=>array('Bezeichnung'=>'Netstock CSV Export',
|
||
|
'Link'=>'index.php?module=netstock&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Schnittstellen|}','settings'=>true),
|
||
|
|
||
|
'exporttabelle'=>array('Bezeichnung'=>'Export der Tabellen ohne Bewegungsdaten',
|
||
|
'Link'=>'index.php?module=exporttabelle&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'special'=>true),
|
||
|
|
||
|
'placetel'=>array('Bezeichnung'=>'Placetel Anbindung',
|
||
|
'Link'=>'index.php?module=placetel&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|Schnittstellen|}','settings'=>true),
|
||
|
|
||
|
/*
|
||
|
'vorlage'=>array('Bezeichnung'=>'Vorlage',
|
||
|
'Link'=>'index.php?module=vorlage&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ALL'),
|
||
|
*/
|
||
|
'uebertragungen'=>array('Bezeichnung'=>'Übertragungen (CSV/XML/EDI/PDF)',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_25.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Schnittstellen|}'),
|
||
|
|
||
|
'intrastat_meldung'=>array('Bezeichnung'=>'Intrastat Meldung',
|
||
|
'Link'=>'index.php?module=intrastat_meldung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Versandarten|}','settings'=>true),
|
||
|
|
||
|
'auftragforecast'=>array('Bezeichnung'=>'Auftragforecast',
|
||
|
'Link'=>'index.php?module=auftragforecast&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Controlling und Statistik|}'),
|
||
|
'zeiterfassungvorlage'=>array('Bezeichnung'=>'Zeiterfassung Vorlage',
|
||
|
'Link'=>'index.php?module=zeiterfassungvorlage&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}','settings'=>true),
|
||
|
'datei_stichwortvorlagen'=>array('Bezeichnung'=>'Datei Stichwort Vorlagen',
|
||
|
'Link'=>'index.php?module=datei_stichwortvorlagen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|System|}','settings'=>true),
|
||
|
'ratenzahlung'=>array('Bezeichnung'=>'Ratenzahlung',
|
||
|
'Link'=>'index.php?module=ratenzahlung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Buchhaltung|}'),
|
||
|
'doppelte_nummern'=>array('Bezeichnung'=>'Doppelte Nummern',
|
||
|
'Link'=>'index.php?module=doppelte_nummern&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|System|}'),
|
||
|
'auftragautoversand'=>array('Bezeichnung'=>'Tages-Auto-Versand',
|
||
|
'Link'=>'index.php?module=auftragautoversand&action=list',
|
||
|
'Icon'=>'Icons_dunkel_10.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Workflows|}',
|
||
|
'project_sensitive'=>true),
|
||
|
'kassescannen'=>array('Bezeichnung'=>'Kasse Scannen',
|
||
|
'Link'=>'index.php?module=kassescannen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Verkauf|}'),
|
||
|
'belegeimport'=>array('Bezeichnung'=>'Belege Importer',
|
||
|
'Link'=>'index.php?module=belegeimport&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Belege|}'),
|
||
|
'gruppenrechnung'=>array('Bezeichnung'=>'Gruppenrechnung',
|
||
|
'Link'=>'index.php?module=gruppenrechnung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Buchhaltung|}',
|
||
|
'project_sensitive' => true),
|
||
|
'einfachelohnauszahlung'=>array('Bezeichnung'=>'Einfache Lohnauszahlung',
|
||
|
'Link'=>'index.php?module=einfachelohnauszahlung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}'),
|
||
|
'zeiterfassung_stundenuebersicht'=>array('Bezeichnung'=>'Zeiterfassung Stundenübersicht',
|
||
|
'Link'=>'index.php?module=zeiterfassung_stundenuebersicht&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}'),
|
||
|
'zeiterfassung_kosten'=>array('Bezeichnung'=>'Zeiterfassung Kosten',
|
||
|
'Link'=>'index.php?module=zeiterfassung_kosten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}'),
|
||
|
'auftragsampel'=>array('Bezeichnung'=>'Auftragsampel',
|
||
|
'Link'=>'index.php?module=auftragsampel&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Workflows|}','settings'=>true),
|
||
|
'prozess_monitor'=>array('Bezeichnung'=>'Prozess Monitor',
|
||
|
'Link'=>'index.php?module=prozess_monitor&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Workflows|}','settings'=>true),
|
||
|
'preisanpassung'=>array('Bezeichnung'=>'Preisanpassungen',
|
||
|
'Link'=>'index.php?module=preisanpassung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Stammdaten|}'),
|
||
|
'steuersaetze'=>array('Bezeichnung'=>'Steuersätze',
|
||
|
'Link'=>'index.php?module=steuersaetze&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'','install'=>true,
|
||
|
'beta' => false,'kategorie'=>'{|Buchhaltung|}','settings'=>true),
|
||
|
'eigenschaften_vorlagen'=>array('Bezeichnung'=>'Eigenschaften Vorlagen',
|
||
|
'Link'=>'index.php?module=eigenschaften_vorlagen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Stammdaten|}'),
|
||
|
'rma_vorlagen'=>array('Bezeichnung'=>'Retouren Gründe',
|
||
|
'Link'=>'index.php?module=rma_vorlagen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Lager und Logistik|}',
|
||
|
'project_sensitive' => true),
|
||
|
'dateibrowser'=>array('Bezeichnung'=>'Dateibrowser',
|
||
|
'Link'=>'index.php?module=dateibrowser&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|System|}'),
|
||
|
'formeln'=>array('Bezeichnung'=>'Formeln',
|
||
|
'Link'=>'index.php?module=formeln&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Belege|}'),
|
||
|
'multilabelprint'=>array('Bezeichnung'=>'Multilabelprint',
|
||
|
'Link'=>'index.php?module=multilabelprint&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Workflows|}','settings'=>true,
|
||
|
'project_sensitive' => true),
|
||
|
'artikelarbeitsanweisung_vorlagen'=>array('Bezeichnung'=>'Artikel Arbeitsanweisung Vorlagen',
|
||
|
'Link'=>'index.php?module=artikelarbeitsanweisung_vorlagen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Produktion|}', 'settings'=>true),
|
||
|
'transus'=>array('Bezeichnung'=>'EDI Transus',
|
||
|
'Link'=>'index.php?module=transus&action=list',
|
||
|
'Icon'=>'Icons_dunkel_25.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Schnittstellen|}','settings'=>true,
|
||
|
'project_sensitive' => true),
|
||
|
'artikelfunktionsprotokoll_vorlagen'=>array('Bezeichnung'=>'Artikel Funktionsprotokoll Vorlagen',
|
||
|
'Link'=>'index.php?module=artikelfunktionsprotokoll_vorlagen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Produktion|}','settings'=>true),
|
||
|
'sprachen'=>array('Bezeichnung'=>'Sprachenliste',
|
||
|
'Link'=>'index.php?module=sprachen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|System|}','settings'=>true),
|
||
|
'artikel_fremdnummern'=>array('Bezeichnung'=>'Artikel Fremdnummern',
|
||
|
'Link'=>'index.php?module=artikel_fremdnummern&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Stammdaten|}'),
|
||
|
'telefonrueckruf'=>array('Bezeichnung'=>'Telefonrückruf',
|
||
|
'Link'=>'index.php?module=telefonrueckruf&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'','install'=>true, 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}')
|
||
|
, 'ticket'=>array('Bezeichnung'=>'Tickets',
|
||
|
'Link'=>'index.php?module=ticket&action=offene',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Team Funktionen|}')
|
||
|
, 'zahlungseingang'=>array('Bezeichnung'=>'Zahlungseingang',
|
||
|
'Link'=>'index.php?module=zahlungseingang&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Buchhaltung|}')
|
||
|
, 'verbindlichkeit'=>array('Bezeichnung'=>'Verbindlichkeiten',
|
||
|
'Link'=>'index.php?module=verbindlichkeit&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Buchhaltung|}')
|
||
|
, 'service'=>array('Bezeichnung'=>'Service & Support',
|
||
|
'Link'=>'index.php?module=service&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Team Funktionen|}')
|
||
|
, 'bestellvorschlagapp'=>array('Bezeichnung'=>'Bestellvorschlag',
|
||
|
'Link'=>'index.php?module=bestellvorschlagapp&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Einkauf|}')
|
||
|
, 'bestellvorschlagtag'=>array('Bezeichnung'=>'Bestellvorschlag Tag',
|
||
|
'Link'=>'index.php?module=bestellvorschlagtag&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,
|
||
|
'legacy' => true,'kategorie'=>'{|Einkauf|}')
|
||
|
, 'bestellvorschlagemail'=>array('Bezeichnung'=>'Bestellvorschlag E-Mail',
|
||
|
'Link'=>'index.php?module=bestellvorschlagemail&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Einkauf|}')
|
||
|
, 'bestellvorschlagfiliale'=>array('Bezeichnung'=>'Bestellvorschlag Filiale',
|
||
|
'Link'=>'index.php?module=bestellvorschlagfiliale&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false, 'kategorie'=>'{|Einkauf|}')
|
||
|
, 'belegeinauslagern'=>array('Bezeichnung'=>'Belege ein- auslagern',
|
||
|
'Link'=>'index.php?module=belegeinauslagern&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Lager und Logistik|}')
|
||
|
, 'serviceauftrag'=>array('Bezeichnung'=>'Serviceauftrag',
|
||
|
'Link'=>'index.php?module=serviceauftrag&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Verkauf|}',
|
||
|
'project_sensitive' => true)
|
||
|
, 'gesamtrabatte'=>array('Bezeichnung'=>'Gesamtrabatte',
|
||
|
'Link'=>'index.php?module=gesamtrabatte&action=list',
|
||
|
'Icon'=>'Icons_dunkel_11.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Verkauf|}')
|
||
|
, 'lieferkette'=>array('Bezeichnung'=>'Lieferkette',
|
||
|
'Link'=>'index.php?module=lieferkette&action=list',
|
||
|
'Icon'=>'Icons_dunkel_11.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,
|
||
|
'legacy' => true,'kategorie'=>'{|Einkauf|}'),
|
||
|
'spedition'=>array('Bezeichnung'=>'Spedition',
|
||
|
'Link'=>'index.php?module=spedition&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Lager und Logistik|}'),
|
||
|
'sevensenders' => [
|
||
|
'Bezeichnung' => 'SevenSenders',
|
||
|
'Link' => 'index.php?module=sevensenders&action=log',
|
||
|
'install' => true,
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen' => 'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Versandarten|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
'produktion'=>array('Bezeichnung'=>'Produktion',
|
||
|
'Link'=>'index.php?module=produktion&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Produktion|}',
|
||
|
'project_sensitive' => true),
|
||
|
'produktionszentrum'=>array('Bezeichnung'=>'Produktionszentrum',
|
||
|
'Link'=>'index.php?module=produktionszentrum&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Produktion|}',
|
||
|
'project_sensitive' => true),
|
||
|
'mitarbeiterzeiterfassung'=>array('Bezeichnung'=>'Mitarbeiterzeiterfassung',
|
||
|
'Link'=>'index.php?module=mitarbeiterzeiterfassung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}'),
|
||
|
'auftragzubestellung'=>array('Bezeichnung'=>'Auftrag/Preisanfrage zu Bestellung',
|
||
|
'Link'=>'index.php?module=auftragzubestellung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Einkauf|}',
|
||
|
'project_sensitive' => true),
|
||
|
|
||
|
'schneller_wareneingang'=>array('Bezeichnung'=>'Schneller Wareneingang',
|
||
|
'Link'=>'index.php?module=schneller_wareneingang&action=einstellungen',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}'),
|
||
|
|
||
|
'proformarechnung'=>array('Bezeichnung'=>'Proformarechnung',
|
||
|
'Link'=>'index.php?module=proformarechnung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Buchhaltung|}',
|
||
|
'project_sensitive' => true),
|
||
|
|
||
|
'fahrtenbuch'=>array('Bezeichnung'=>'Fahrtenbuch',
|
||
|
'Link'=>'index.php?module=fahrtenbuch&action=list',
|
||
|
'Icon'=>'Icons_dunkel_11.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}'),
|
||
|
'scheck'=>array('Bezeichnung'=>'Scheck',
|
||
|
'Link'=>'index.php?module=scheck&action=list',
|
||
|
'Icon'=>'Icons_dunkel_11.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Buchhaltung|}'),
|
||
|
'mhdumlagern'=>array('Bezeichnung'=>'MHD Umlagern mit neuem Datum',
|
||
|
'Link'=>'index.php?module=mhdumlagern&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Lager und Logistik|}'),
|
||
|
'kommissionskonsignationslager'=>array('Bezeichnung'=>'Kommissions-/Konsignationslager',
|
||
|
'Link'=>'index.php?module=kommissionskonsignationslager&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Lager und Logistik|}'),
|
||
|
'liefertermine'=>array('Bezeichnung'=>'Liefertermine',
|
||
|
'Link'=>'index.php?module=liefertermine&action=list',
|
||
|
'Icon'=>'Icons_dunkel_22.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Verkauf|}')
|
||
|
, 'bestellung_einlagern'=>array('Bezeichnung'=>'Bestellung Einlagern',
|
||
|
'Link'=>'index.php?module=bestellung_einlagern&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Einkauf|}')
|
||
|
, 'amazon'=>array('Bezeichnung'=>'Amazon Seller App',
|
||
|
'Link'=>'index.php?module=amazon&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
, 'arbeitsplatzgruppen'=>array('Bezeichnung'=>'Arbeitsplatzgruppen',
|
||
|
'Link'=>'index.php?module=arbeitsplatzgruppen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Produktion|}','settings'=>true)
|
||
|
, 'artikelkalkulation'=>array('Bezeichnung'=>'Artikel Kalkulation',
|
||
|
'Link'=>'index.php?module=artikelkalkulation&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Stammdaten|}','settings'=>true)
|
||
|
|
||
|
|
||
|
,'belegevorlagen'=>array('Bezeichnung'=>'Belege Vorlagen',
|
||
|
'Link'=>'index.php?module=belegevorlagen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Verkauf|}',
|
||
|
'project_sensitive' => true)
|
||
|
|
||
|
,'preisliste'=>array('Bezeichnung'=>'Preisliste',
|
||
|
'Link'=>'index.php?module=preisliste&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Verkauf|}')
|
||
|
|
||
|
|
||
|
,'positionenaktualisieren'=>array('Bezeichnung'=>'Positionen Aktualisieren',
|
||
|
'Link'=>'index.php?module=positionenaktualisieren&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Verkauf|}')
|
||
|
,'wawision_uebersetzung'=>array('Bezeichnung'=>'Oberflächen Übersetzung',
|
||
|
'Link'=>'index.php?module=wawision_uebersetzung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|System|}')
|
||
|
,'bestellungzuproduktion'=>array('Bezeichnung'=>'Bestellung zu Produktion',
|
||
|
'Link'=>'index.php?module=bestellungzuproduktion&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Produktion|}')
|
||
|
|
||
|
,'TransferAmazonMfn'=>array('Bezeichnung'=>'Transfer Plug-In Amazon MFN',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'TransferAmazonVendor'=>array('Bezeichnung'=>'Transfer Plug-In Amazon Vendor',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true,'beta' => false,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'TransferApp4sales'=>array('Bezeichnung'=>'Transfer Plug-In App4Sales',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>false,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'TransferDS'=>array('Bezeichnung'=>'Transfer Plug-In DS',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>false,
|
||
|
'special' => true,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'TransferNetstock'=>array('Bezeichnung'=>'Transfer Plug-In Netstock',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'TransferOpentrans'=>array('Bezeichnung'=>'Transfer Plug-In Opentrans',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>false,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'TransferPixi'=>array('Bezeichnung'=>'Transfer Plug-In Pixi',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'TransferSmarty'=>array('Bezeichnung'=>'Transfer Smarty',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'TransferBrickfox'=>array('Bezeichnung'=>'Transfer Plug-In Brickfox',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'onlineshops'=>array(
|
||
|
'Bezeichnung'=>'Online-Shops',
|
||
|
'Link'=>'index.php?module=onlineshops&action=list',
|
||
|
'Icon'=>'Icons_dunkel_20.gif',
|
||
|
'Versionen' => '',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Shop Schnittstelle|}',
|
||
|
'settings'=>true)
|
||
|
,'shopimporter_hhg'=>array('Bezeichnung'=>'H.H.G. Multistore',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_hhg',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true,
|
||
|
'special' => true,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_modified'=>array('Bezeichnung'=>'Modified',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,
|
||
|
'legacy' => true, 'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_amazon'=>array('Bezeichnung'=>'Amazon',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_amazon',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}',
|
||
|
'popular' => true,
|
||
|
)
|
||
|
,'shopimporter_magento'=>array('Bezeichnung'=>'Magento 1.9',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_magento',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_magento2'=>array('Bezeichnung'=>'Magento 2',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_magento2',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_shopware'=>array('Bezeichnung'=>'Shopware 5',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_shopware',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_shopware6'=>array('Bezeichnung'=>'Shopware 6 API Advanced',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_shopware6',
|
||
|
'Bezeichnung2' => 'Shopware 6 Business Booster App',
|
||
|
'Link2'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_shopware6&sid=booster',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'','install'=>true,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_getcore'=>array('Bezeichnung'=>'Getcore',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_getcore',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_woocommerce'=>array('Bezeichnung'=>'Woocommerce',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_woocommerce',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_spryker'=>array('Bezeichnung'=>'Spryker',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_spryker',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,
|
||
|
'special' => true, 'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_oxid'=>array('Bezeichnung'=>'Oxid',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_oxid',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_gambio'=>array('Bezeichnung'=>'Gambio',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_gambio',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_xtcommerce'=>array('Bezeichnung'=>'XTCommerce',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_xtcommerce',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,
|
||
|
'legacy'=>true,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_channeladvisor'=>array('Bezeichnung'=>'Channeladvisor',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_channeladvisor',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_epages'=>array('Bezeichnung'=>'ePages',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_epages',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'retailpricetemplate'=>array('Bezeichnung'=>'Artikelpreisvorlage',
|
||
|
'Link'=>'index.php?module=retailpricetemplate&action=template',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Verkauf|}')
|
||
|
,'shopimporter_billbee'=>array('Bezeichnung'=>'Billbee',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_billbee',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_hood'=>array('Bezeichnung'=>'Hood',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_hood',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_manomano'=>array('Bezeichnung'=>'Manomano',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_manomano',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_ebay'=>array('Bezeichnung'=>'Ebay',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_ebay',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_etsy'=>array('Bezeichnung'=>'Etsy',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_etsy',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'ebay'=>array('Bezeichnung'=>'Ebay App',
|
||
|
'Link'=>'index.php?module=ebay&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_presta'=>array('Bezeichnung'=>'Presta',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_presta',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_shopify'=>array(
|
||
|
'Bezeichnung'=>'Shopify API Advanced',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_shopify',
|
||
|
'Bezeichnung2'=>'Shopify Business Booster App',
|
||
|
'Link2'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_shopify&sid=booster',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}',
|
||
|
'popular' => true,
|
||
|
)
|
||
|
,'shopimporter_real'=>array('Bezeichnung'=>'Real',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_real',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_tillhub'=>array('Bezeichnung'=>'Tillhub',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_tillhub',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true,'showonlyoninstall'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'shopimporter_rakuten'=>array('Bezeichnung'=>'Rakuten',
|
||
|
'Link'=>'index.php?module=onlineshops&action=create&cmd=shopimporter_rakuten',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Shop Schnittstelle|}','legacy'=>true)
|
||
|
,'alkoholsteuerrechner'=>array('Bezeichnung'=>'Alkoholsteuerrechner',
|
||
|
'Link'=>'index.php?module=alkoholsteuerrechner&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Controlling und Statistik|}')
|
||
|
,'documenttoproject'=>array('Bezeichnung'=>'Belege zu Projekt',
|
||
|
'Link'=>'index.php?module=documenttoproject&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'showonlywheninstalled' => true, 'kategorie'=>'{|Workflows|}')
|
||
|
,'crossselling'=>array('Bezeichnung'=>'Crossselling',
|
||
|
'Link'=>'index.php?module=crossselling&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Stammdaten|}')
|
||
|
, 'dekodinexus' => [
|
||
|
'Bezeichnung' => 'Nexus',
|
||
|
'Link' => 'index.php?module=dekodinexus&action=list',
|
||
|
'Icon' => 'Icons_dunkel_1.gif',
|
||
|
'Versionen' => 'ALL',
|
||
|
'install' => true,
|
||
|
'beta' => false,
|
||
|
'legacy' => true,
|
||
|
'kategorie' => '{|Schnittstellen|}'
|
||
|
]
|
||
|
,'cronjob_autoversand_plus'=>array('Bezeichnung'=>'Autoversand Plus',
|
||
|
'Link'=>'index.php?module=cronjob_autoversand_plus&action=list',
|
||
|
'Icon'=>'Icons_dunkel_10.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Lager und Logistik|}')
|
||
|
,'unterproduktionen'=>array('Bezeichnung'=>'Unterproduktionen',
|
||
|
'Link'=>'index.php?module=unterproduktionen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Produktion|}')
|
||
|
,'dokumentation'=>array('Bezeichnung'=>'Dokumentation',
|
||
|
'Link'=>'index.php?module=dokumentation&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Stammdaten|}')
|
||
|
,'bundesstaaten'=>array('Bezeichnung'=>'Bundesstaaten',
|
||
|
'Link'=>'index.php?module=bundesstaaten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'','install'=>true, 'beta' => false,'kategorie'=>'{|System|}','settings'=>true)
|
||
|
,'datenbankbereinigen'=>array('Bezeichnung'=>'Gelöschte Datensätze wiederherstellen',
|
||
|
'Link'=>'index.php?module=datenbankbereinigen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'','install'=>true, 'beta' => false,'kategorie'=>'{|Stammdaten|}')
|
||
|
,'artikelforecast'=>array('Bezeichnung'=>'Artikelforecast',
|
||
|
'Link'=>'index.php?module=artikelforecast&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Controlling und Statistik|}')
|
||
|
,'artikel_verfuegbarkeit'=>array('Bezeichnung'=>'Artikel Verfügbarkeit',
|
||
|
'Link'=>'index.php?module=artikel_verfuegbarkeit&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Einkauf|}')
|
||
|
,'multiorderpicking'=>array('Bezeichnung'=>'Multi-Order Picking',
|
||
|
'Link'=>'index.php?module=multiorderpicking&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Lager und Logistik|}')
|
||
|
,'managementboard_liquiditaet'=>array('Bezeichnung'=>'Managementboard Liquidität',
|
||
|
'Link'=>'index.php?module=managementboard_liquiditaet&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Controlling und Statistik|}')
|
||
|
,'elo'=>array('Bezeichnung'=>'ELO DMS Archiv',
|
||
|
'Link'=>'index.php?module=elo&action=einstellungen',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,
|
||
|
'legacy'=>true,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'dropshipping'=>array('Bezeichnung'=>'Dropshipping Lieferant',
|
||
|
'Link'=>'index.php?module=dropshipping&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Lager und Logistik|}','settings'=>true)
|
||
|
,'dropshippinglager'=>array('Bezeichnung'=>'Dropshipping Lager',
|
||
|
'Link'=>'index.php?module=dropshippinglager&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Lager und Logistik|}','settings'=>true)
|
||
|
,'rabatte'=>array('Bezeichnung'=>'Erweiterte Rabatte',
|
||
|
'Link'=>'index.php?module=rabatte&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Verkauf|}','settings'=>true)
|
||
|
,'angebot_stueckliste'=>array('Bezeichnung'=>'Angebot Stückliste einfügen',
|
||
|
'Link'=>'index.php?module=angebot_stueckliste&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false ,'kategorie'=>'{|Verkauf|}')
|
||
|
,'cryptoweb'=>array('Bezeichnung'=>'CryptoWeb',
|
||
|
'Link'=>'index.php?module=cryptoweb&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'lagerstueckliste'=>array('Bezeichnung'=>'Lagerstückliste',
|
||
|
'Link'=>'index.php?module=lagerstueckliste&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Lager und Logistik|}')
|
||
|
,'zahlungsweise_tagxmonat'=>array('Bezeichnung'=>'Tag X Monat',
|
||
|
'Link'=>'index.php?module=zahlungsweisen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Zahlungsweisen|}','settings'=>true)
|
||
|
,'zahlungsweise_payone'=>array('Bezeichnung'=>'BS Payone',
|
||
|
'Link'=>'index.php?module=zahlungsweisen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Zahlungsweisen|}', 'beta' => false,'settings'=>true)
|
||
|
,'zahlungsweise_billpay'=>array('Bezeichnung'=>'Billpay',
|
||
|
'Link'=>'index.php?module=zahlungsweisen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,
|
||
|
'legacy' => true,'kategorie'=>'{|Zahlungsweisen|}','settings'=>true)
|
||
|
,'zahlungsweise_klarna'=>array('Bezeichnung'=>'Klarna',
|
||
|
'Link'=>'index.php?module=zahlungsweisen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,'kategorie'=>'{|Zahlungsweisen|}','settings'=>true)
|
||
|
,'zahlungsweise_secupay'=>array('Bezeichnung'=>'Secupay',
|
||
|
'Link'=>'index.php?module=zahlungsweisen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Zahlungsweisen|}', 'beta' => false,'settings'=>true)
|
||
|
,'zahlungsweise_paypalplus'=>array('Bezeichnung'=>'Paypalplus',
|
||
|
'Link'=>'index.php?module=zahlungsweisen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Zahlungsweisen|}','settings'=>true,
|
||
|
'popular' => true,
|
||
|
)
|
||
|
,'zahlungsweise_rechnung'=>array('Bezeichnung'=>'Rechnung',
|
||
|
'Link'=>'index.php?module=zahlungsweisen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|Zahlungsweisen|}','settings'=>true)
|
||
|
,'versandarten_logoix'=>array('Bezeichnung'=>'LogoiX',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Versandarten|}','settings'=>true)
|
||
|
,'versandarten_addresslabel'=>array('Bezeichnung'=>'Adress Aufkleber',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
|
||
|
,'versandarten_dhlexpress'=>array('Bezeichnung'=>'DHL Express',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
,'versandarten_dpd_at'=>array('Bezeichnung'=>'DPD AT',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}','settings'=>true)
|
||
|
,'versandarten_dhlversenden'=>array('Bezeichnung'=>'DHL Versenden',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
|
||
|
|
||
|
,'versandarten_dpdapi'=>array('Bezeichnung'=>'DPD (API)',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
|
||
|
,'versandarten_ups'=>array('Bezeichnung'=>'UPS',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
|
||
|
,'versandarten_glsapi'=>array('Bezeichnung'=>'GLS (API)',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
|
||
|
,'versandarten_fedexapi'=>array('Bezeichnung'=>'Fedex',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
|
||
|
,'versandarten_postat'=>array('Bezeichnung'=>'Post.AT',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
|
||
|
,'versandarten_dpd'=>array('Bezeichnung'=>'DPD (CSV)',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
,'versandarten_dpdesolutions'=>array('Bezeichnung'=>'DPD eSolutions',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,
|
||
|
'special'=>true,'settings'=>true)
|
||
|
|
||
|
,'versandarten_postch'=>array('Bezeichnung'=>'Post.CH',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
|
||
|
,'versandarten_gls'=>array('Bezeichnung'=>'GLS (CSV)',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
|
||
|
,'versandarten_amazonprime'=>array('Bezeichnung'=>'Amazon Prime',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Versandarten|}',
|
||
|
'settings'=>true)
|
||
|
|
||
|
,'versandarten_sendcloud'=>array('Bezeichnung'=>'Sendcloud',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
|
||
|
,'versandarten_shipcloud'=>array('Bezeichnung'=>'Shipcloud',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','kategorie'=>'{|Versandarten|}', 'beta' => false,'settings'=>true)
|
||
|
|
||
|
|
||
|
,'verpackungsmaterial'=>array('Bezeichnung'=>'Verpackungsmaterial Lagermanagement',
|
||
|
'Link'=>'index.php?module=verpackungsmaterial&action=list',
|
||
|
'Icon'=>'Icons_dunkel_10.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Lager und Logistik|}')
|
||
|
,'abschlagsrechnung'=>array('Bezeichnung'=>'Abschlagsrechnung',
|
||
|
'Link'=>'index.php?module=abschlagsrechnung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif','install'=>true,
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Buchhaltung|}')
|
||
|
,'arbeitsfreietage'=>array('Bezeichnung'=>'Arbeitsfreie Tage / Feiertage',
|
||
|
'Link'=>'index.php?module=arbeitsfreietage&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Mitarbeiter Verwaltung|}',
|
||
|
'settings'=>true)
|
||
|
,'produktionkorrektur'=>array('Bezeichnung'=>'Produktionkorrektur',
|
||
|
'Link'=>'index.php?module=produktionkorrektur&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Produktion|}')
|
||
|
,'provisionenartikelvertreter'=>array('Bezeichnung'=>'Provisionen',
|
||
|
'Link'=>'index.php?module=provisionenartikelvertreter&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Buchhaltung|}','settings'=>true)
|
||
|
,'auftragoffenepositionen'=>array('Bezeichnung'=>'Auftrag offene Positionen',
|
||
|
'Link'=>'index.php?module=auftragoffenepositionen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Workflows|}',
|
||
|
'project_sensitive' => true)
|
||
|
,'auftragoffenepositionendienstleistung'=>array('Bezeichnung'=>'Auftrag offene Dienstleistungen',
|
||
|
'Link'=>'index.php?module=auftragoffenepositionendienstleistung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Verkauf|}',
|
||
|
'project_sensitive' => true)
|
||
|
,'rechnungzuverbindlichkeit'=>array('Bezeichnung'=>'Rechnung zu Verbindlichkeit',
|
||
|
'Link'=>'index.php?module=rechnungzuverbindlichkeit&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Workflows|}')
|
||
|
,'dsgvo'=>array('Bezeichnung'=>'DSGVO',
|
||
|
'Link'=>'index.php?module=dsgvo&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|Sicherheit und Datenschutz|}')
|
||
|
,'dataprotection'=> [
|
||
|
'Bezeichnung' => 'Datenschutz',
|
||
|
'Link' => 'index.php?module=dataprotection&action=list',
|
||
|
'Icon' => 'Icons_dunkel_2.gif',
|
||
|
'Versionen' => '',
|
||
|
'beta' => false,
|
||
|
'kategorie' => '{|Sicherheit und Datenschutz|}',
|
||
|
]
|
||
|
,'stuecklistendetails'=>array('Bezeichnung'=>'Stücklistendetails',
|
||
|
'Link'=>'index.php?module=stuecklistendetails&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Stammdaten|}')
|
||
|
,'kopiebelegempfaenger'=>array('Bezeichnung'=>'Kopie Belege Empfänger',
|
||
|
'Link'=>'index.php?module=kopiebelegempfaenger&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ENT','install'=>true, 'beta' => false,'kategorie'=>'{|Verkauf|}','settings'=>true)
|
||
|
,'verleih'=>array('Bezeichnung'=>'Verleih',
|
||
|
'Link'=>'index.php?module=verleih&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Verkauf|}')
|
||
|
,'belegpositionberechnung'=>array('Bezeichnung'=>'Belege Positionen Berechnung',
|
||
|
'Link'=>'index.php?module=belegpositionberechnung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'Versionen'=>'ALL','install'=>true, 'beta' => false,'kategorie'=>'{|Belege|}')
|
||
|
,'iaaplus'=>array('Bezeichnung'=>'IaaPlus',
|
||
|
'Link'=>'index.php?module=iaaplus&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}')
|
||
|
,'singleshipment'=>array('Bezeichnung'=>'Einzelversandübergabe',
|
||
|
'Link'=>'index.php?module=singleshipment&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Workflows|}')
|
||
|
,'trackingscan'=>array('Bezeichnung'=>'Trackingnummer Scan',
|
||
|
'Link'=>'index.php?module=trackingscan&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}')
|
||
|
,'retoure'=>array('Bezeichnung'=>'Retouren Belege',
|
||
|
'Link'=>'index.php?module=retoure&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT','install'=>true,'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'project_sensitive' => true)
|
||
|
,'fulfillment'=>array('Bezeichnung'=>'Fulfillment',
|
||
|
'Link'=>'index.php?module=fulfillment&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif','install'=>true,
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Schnittstellen|}')
|
||
|
,'realsms' => array('Bezeichnung'=>'RealSMS',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Link'=>'index.php?module=realsms&action=list',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ALL', 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Shop Schnittstelle|}')
|
||
|
,'receiptdocument'=>array('Bezeichnung'=>'Wareneingangsbelege',
|
||
|
'Link'=>'index.php?module=receiptdocument&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif','install'=>true,'showonlyoninstall'=>true,
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'project_sensitive' => true)
|
||
|
,'orderstatus'=>array('Bezeichnung'=>'Auftrag Status',
|
||
|
'Link'=>'index.php?module=orderstatus&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif','install'=>true,
|
||
|
'Versionen'=>'ENT', 'beta' => false,
|
||
|
'special' => true,'kategorie'=>'{|Verkauf|}')
|
||
|
,'lastprices'=>array('Bezeichnung'=>'Letzte Preise',
|
||
|
'Link'=>'index.php?module=lastprices&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif','install'=>true,
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Verkauf|}')
|
||
|
,'bestbeforebatchtoposition'=>array('Bezeichnung'=>'Wunsch MHD/Charge',
|
||
|
'Link'=>'index.php?module=bestbeforebatchtoposition&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif','install'=>true,
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Lager und Logistik|}')
|
||
|
,'voucher' =>array('Bezeichnung' =>'Gutscheine',
|
||
|
'Link' =>'index.php?module=voucher&action=list',
|
||
|
'Icon' =>'Icons_dunkel_16.gif', 'install' =>true,
|
||
|
'Versionen' =>'ALL','kategorie'=>'{|Verkauf|}')
|
||
|
,'slacknotification'=>array('Bezeichnung'=>'Slack-Benachrichtigung',
|
||
|
'Link'=>'index.php?module=slacknotification&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif','install'=>true,
|
||
|
'Versionen'=>'ALL', 'beta' => false,'kategorie'=>'{|Schnittstellen|}','settings'=>true)
|
||
|
,'konto_fidor'=>array('Bezeichnung'=>'Konto: Fidor (API)',
|
||
|
'Link'=>'index.php?module=konten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'special' => false,
|
||
|
'legacy' => true,
|
||
|
'kategorie'=>'{|Zahlungsweisen|}',
|
||
|
'settings'=>true)
|
||
|
,'konto_hbci4phpapi' => [
|
||
|
'Bezeichnung'=>'Konto: HBCI/FinTS (HBCI4PHP)',
|
||
|
'Link'=>'index.php?module=konten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'kategorie'=>'{|Zahlungsweisen|}',
|
||
|
'settings'=>true,
|
||
|
'beta' => false
|
||
|
]
|
||
|
,'konto_paypal' => [
|
||
|
'Bezeichnung'=>'Konto: Paypal',
|
||
|
'Link'=>'index.php?module=konten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'kategorie'=>'{|Zahlungsweisen|}',
|
||
|
'settings'=>true,
|
||
|
'beta' => false
|
||
|
]
|
||
|
,'konto_amazonpay'=>array('Bezeichnung'=>'Konto: AmazonPay (API)',
|
||
|
'Link'=>'index.php?module=konten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'special' => false,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Zahlungsweisen|}',
|
||
|
'settings'=>true)
|
||
|
,'konto_amazonfbm'=>array('Bezeichnung'=>'Konto: AmazonFBM',
|
||
|
'Link'=>'index.php?module=konten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'special' => false,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Zahlungsweisen|}',
|
||
|
'settings'=>true)
|
||
|
,'konto_stripe'=>array('Bezeichnung'=>'Konto: Stripe (API)',
|
||
|
'Link'=>'index.php?module=konten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'special' => false,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Zahlungsweisen|}',
|
||
|
'settings'=>true)
|
||
|
,'konto_ebaypayment'=>[
|
||
|
'Bezeichnung'=>'Konto: EbayPayment (API)',
|
||
|
'Link'=>'index.php?module=konten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'special' => false,
|
||
|
'beta' => true,
|
||
|
'showonlyoninstall' => true,
|
||
|
'kategorie'=>'{|Zahlungsweisen|}',
|
||
|
'settings'=>true
|
||
|
]
|
||
|
,'sage'=>array('Bezeichnung'=>'Sage Buchhaltungsexport',
|
||
|
'Link'=>'index.php?module=sage&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif','showonlyoninstall'=>true,
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Buchhaltung|}','settings'=>true)
|
||
|
,'shippingtaxsplit'=>array('Bezeichnung'=>'Versand Aufsplitten',
|
||
|
'Link'=>'index.php?module=shippingtaxsplit&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif','install'=>true,
|
||
|
'Versionen'=>'ENT', 'beta' => false,'kategorie'=>'{|Workflows|}'
|
||
|
)
|
||
|
,'snapaddy'=>array('Bezeichnung'=>'snapADDY',
|
||
|
'Link'=>'index.php?module=snapaddy&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif', 'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'kategorie'=>'{|Schnittstellen|}'
|
||
|
)
|
||
|
,'sipgate'=>array('Bezeichnung'=>'Sipgate',
|
||
|
'Link'=>'index.php?module=sipgate&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif', 'install'=>false,
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|Schnittstellen|}'
|
||
|
)
|
||
|
,'wizard'=>array('Bezeichnung'=>'Wizard',
|
||
|
'Link'=>'index.php?module=wizard&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'special' => true
|
||
|
)
|
||
|
,'merge_order'=>array('Bezeichnung'=>'Aufträge zusammenführen',
|
||
|
'Link'=>'index.php?module=merge_order&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ALL','kategorie'=>'{|Verkauf|}'
|
||
|
)
|
||
|
,'replenishmentmobile'=>array('Bezeichnung'=>'Mobile Nachschublagerbuchung',
|
||
|
'Link'=>'index.php?module=replenishmentmobile&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}'
|
||
|
)
|
||
|
,'zolltarifnummer'=>array('Bezeichnung'=>'Zolltarifnummer',
|
||
|
'Link'=>'index.php?module=zolltarifnummer&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'settings'=>true
|
||
|
)
|
||
|
,'versandarten'=>array('Bezeichnung'=>'Versandarten',
|
||
|
'Link'=>'index.php?module=versandarten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen' => '',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'settings'=>true
|
||
|
)
|
||
|
,'lieferbedingungen'=>array('Bezeichnung'=>'Lieferbedingungen',
|
||
|
'Link'=>'index.php?module=lieferbedingungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'settings'=>true
|
||
|
)
|
||
|
,'pseudostorage'=>array('Bezeichnung'=>'Pseudolagerzahlen Formeln',
|
||
|
'Link'=>'index.php?module=pseudostorage&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}'
|
||
|
)
|
||
|
,'goodspostingdocument'=>array('Bezeichnung'=>'Warenbuchungsbeleg',
|
||
|
'Link'=>'index.php?module=goodspostingdocument&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}'
|
||
|
)
|
||
|
,'goodspostingdocumentscan'=>array('Bezeichnung'=>'Warenbuchungsbeleg Scannen',
|
||
|
'Link'=>'index.php?module=goodspostingdocumentscan&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}'
|
||
|
),
|
||
|
|
||
|
|
||
|
'docuvitasolutions' => [
|
||
|
'Bezeichnung' => 'docuvita DMS',
|
||
|
'Link' => 'index.php?module=docuvitasolutions',
|
||
|
'Icon' => 'Icons_dunkel_16.gif',
|
||
|
'install' => true,
|
||
|
'Versionen' => 'ALL',
|
||
|
'beta' => true,
|
||
|
'special' => true,
|
||
|
'kategorie'=>'{|Sicherheit und Datenschutz|}'
|
||
|
]
|
||
|
|
||
|
,'datatablelabels'=>array('Bezeichnung'=>'Labels',
|
||
|
'Link'=>'index.php?module=datatablelabels&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Workflows|}',
|
||
|
'settings'=>true
|
||
|
)
|
||
|
,'loqate' => array('Bezeichnung'=>'Adressprüfung (Loqate)',
|
||
|
'Link'=>'index.php?module=loqate&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ALL',
|
||
|
'kategorie'=>'{|Workflows|}'
|
||
|
),
|
||
|
'caldav' => [
|
||
|
'Bezeichnung' => 'CalDAV Schnittstelle',
|
||
|
'Link'=>'index.php?module=caldav&action=config',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install' => true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'legacy' => true,
|
||
|
'special' => true,
|
||
|
'kategorie'=>'{|Schnittstellen|}'
|
||
|
]
|
||
|
,'differentialtaxation' => [
|
||
|
'Bezeichnung' => 'Differenzenbesteuerung',
|
||
|
'Link'=>'index.php?module=differentialtaxation&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ALL',
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true
|
||
|
]
|
||
|
,'batches' => [
|
||
|
'Bezeichnung' => 'Batches',
|
||
|
'Link'=>'index.php?module=batches&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ALL',
|
||
|
'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
'datev' => [
|
||
|
'Bezeichnung' => 'DATEVconnect online',
|
||
|
'Link' => 'index.php?module=datev&action=export',
|
||
|
'Icon' => 'Icons_dunkel_16.gif',
|
||
|
'install' => true,
|
||
|
'Versionen' => 'ENT',
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true
|
||
|
]
|
||
|
,'collectivedebitors' => [
|
||
|
'Bezeichnung' => 'Sammeldebitoren',
|
||
|
'Link'=>'index.php?module=collectivedebitors&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true
|
||
|
]
|
||
|
,'googleapi' => [
|
||
|
'Bezeichnung' => 'Google API',
|
||
|
'Link'=>'index.php?module=googleapi&action=list',
|
||
|
'Icon'=>'Icons_dunkel_25.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen' => '',
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
]
|
||
|
,'log' => [
|
||
|
'Bezeichnung' => 'Log File',
|
||
|
'Link'=>'index.php?module=log&action=list',
|
||
|
'Icon'=>'Icons_dunkel_25.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen' => '',
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|System|}'
|
||
|
]
|
||
|
, 'einstellungen' => [
|
||
|
'Bezeichnung' => 'Beta Programm',
|
||
|
'Link' => 'index.php?module=einstellungen&action=betaprogram',
|
||
|
'Icon' => 'Icons_dunkel_25.gif',
|
||
|
'Versionen' => '',
|
||
|
'kategorie' => '{|System|}',
|
||
|
'beta' => false,
|
||
|
]
|
||
|
,'systemhealth' => [
|
||
|
'Bezeichnung' => 'System Health',
|
||
|
'Link'=>'index.php?module=systemhealth&action=list',
|
||
|
'Icon'=>'Icons_dunkel_25.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'',
|
||
|
'kategorie'=>'{|System|}'
|
||
|
],
|
||
|
'epost' => [
|
||
|
'Bezeichnung' => 'EPost App',
|
||
|
'Link' => 'index.php?module=epost',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'install' => true,
|
||
|
'Versionen' => 'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Buchhaltung|}'
|
||
|
]
|
||
|
,'documentbatches' => [
|
||
|
'Bezeichnung' => 'Dokumentenstapelverarbeitung',
|
||
|
'Link'=>'index.php?module=documentbatches&action=list',
|
||
|
'Icon'=>'Icons_dunkel_25.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'kategorie'=>'{|Workflows|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'systemtemplates'=>array('Bezeichnung'=>'System Templates',
|
||
|
'Link'=>'index.php?module=systemtemplates&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
)
|
||
|
,'projektlogbuch' => [
|
||
|
'Bezeichnung' => 'Projektlogbuch',
|
||
|
'Link'=>'index.php?module=projektlogbuch&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'legacy' => true,
|
||
|
'kategorie'=>'{|Workflows|}'
|
||
|
]
|
||
|
,'adresse' => [
|
||
|
'Bezeichnung' => 'Adressen',
|
||
|
'Link'=>'index.php?module=adresse&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|Stammdaten|}'
|
||
|
]
|
||
|
,'angebot' => [
|
||
|
'Bezeichnung' => 'Angebot',
|
||
|
'Link'=>'index.php?module=angebot&action=list',
|
||
|
'Icon'=>'Icons_dunkel_11.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|Verkauf|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'artikel' => [
|
||
|
'Bezeichnung' => 'Artikel',
|
||
|
'Link'=>'index.php?module=artikel&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'', 'beta' => false,'kategorie'=>'{|Stammdaten|}',
|
||
|
'project_sensitive'=>true
|
||
|
]
|
||
|
,'auftrag' => [
|
||
|
'Bezeichnung' => 'Auftrag',
|
||
|
'Link'=>'index.php?module=auftrag&action=list',
|
||
|
'Icon'=>'Icons_dunkel_11.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'', 'beta' => false, 'kategorie'=>'{|Verkauf|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'backup' => [
|
||
|
'Bezeichnung' => 'Backup',
|
||
|
'Link'=>'index.php?module=backup&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install' => true, 'kategorie'=>'{|System|}'
|
||
|
]
|
||
|
,'bestellung' => [
|
||
|
'Bezeichnung' => 'Bestellung',
|
||
|
'Link'=>'index.php?module=bestellung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'', 'beta' => false, 'kategorie'=>'{|Einkauf|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'gutschrift' => [
|
||
|
'Bezeichnung' => 'Gutschrift / Stornorechnung',
|
||
|
'Link'=>'index.php?module=gutschrift&action=list',
|
||
|
'Icon'=>'Icons_dunkel_11.gif',
|
||
|
'Versionen'=>'', 'beta' => false,
|
||
|
'install' => true,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'lieferschein' => [
|
||
|
'Bezeichnung' => 'Lieferschein',
|
||
|
'Link'=>'index.php?module=lieferschein&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'',
|
||
|
'install' => true,
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'rechnung' => [
|
||
|
'Bezeichnung' => 'Rechnung',
|
||
|
'Link'=>'index.php?module=rechnung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_11.gif',
|
||
|
'Versionen'=>'', 'beta' => false,
|
||
|
'install' => true,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'artikelkontingente' => [
|
||
|
'Bezeichnung' => 'Artikelkontingente',
|
||
|
'Link'=>'index.php?module=artikelkontingente&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ALL',
|
||
|
'beta' => false,
|
||
|
'legacy' => true,
|
||
|
'kategorie'=>'{|Verkauf|}'
|
||
|
]
|
||
|
,'buchhaltungexport' => [
|
||
|
'Bezeichnung' => 'Finanzbuchhaltung Export',
|
||
|
'Link'=>'index.php?module=buchhaltungexport&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true
|
||
|
]
|
||
|
,'chargen' => [
|
||
|
'Bezeichnung' => 'Chargen',
|
||
|
'Link'=>'index.php?module=chargen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'project_sensitive' => true,
|
||
|
'install'=>true
|
||
|
]
|
||
|
,'etikettendrucker' => [
|
||
|
'Bezeichnung' => 'Etikettendrucker',
|
||
|
'Link'=>'index.php?module=etikettendrucker&action=list',
|
||
|
'Icon'=>'Icons_dunkel_24.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}',
|
||
|
'settings'=>true
|
||
|
]
|
||
|
,'importvorlage' => [
|
||
|
'Bezeichnung' => 'Import/Export Zentrale',
|
||
|
'Link'=>'index.php?module=importvorlage&action=uebersicht',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'install' => true,
|
||
|
'kategorie'=>'{|Stammdaten|}'
|
||
|
]
|
||
|
,'kalender' => [
|
||
|
'Bezeichnung' => 'Kalender',
|
||
|
'Link'=>'index.php?module=kalender&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Team Funktionen|}'
|
||
|
]
|
||
|
,'kasse' => [
|
||
|
'Bezeichnung' => 'Kassenbuch',
|
||
|
'Link'=>'index.php?module=kasse&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true,
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'kommissionieraufkleber' => [
|
||
|
'Bezeichnung' => 'Kommissionieraufkleber',
|
||
|
'Link'=>'index.php?module=kommissionieraufkleber&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}'
|
||
|
]
|
||
|
,'kommissionierlauf' => [
|
||
|
'Bezeichnung' => 'Kommissionierlauf',
|
||
|
'Link'=>'index.php?module=kommissionierlauf&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'lager' => [
|
||
|
'Bezeichnung' => 'Lagerverwaltung',
|
||
|
'Link'=>'index.php?module=lager&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}'
|
||
|
]
|
||
|
,'lohnabrechnung' => [
|
||
|
'Bezeichnung' => 'Lohnabrechnung',
|
||
|
'Link'=>'index.php?module=lohnabrechnung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Buchhaltung|}'
|
||
|
]
|
||
|
,'managementboard' => [
|
||
|
'Bezeichnung' => 'Management Board',
|
||
|
'Link'=>'index.php?module=managementboard&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Controlling und Statistik|}'
|
||
|
]
|
||
|
,'mahnwesen' => [
|
||
|
'Bezeichnung' => 'Mahnwesen',
|
||
|
'Link'=>'index.php?module=mahnwesen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true,
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'mhdwarning' => [
|
||
|
'Bezeichnung' => 'Mindesthaltbarkeit',
|
||
|
'Link'=>'index.php?module=mhdwarning&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'projekt' => [
|
||
|
'Bezeichnung' => 'Projekte',
|
||
|
'Link'=>'index.php?module=projekt&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Stammdaten|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'provisionenartikel' => [
|
||
|
'Bezeichnung' => 'Provisionen Artikel Brutto',
|
||
|
'Link'=>'index.php?module=provisionenartikel&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'Versionen'=>'ALL',
|
||
|
'beta' => false,
|
||
|
'legacy' => true,
|
||
|
'kategorie'=>'{|Buchhaltung|}'
|
||
|
]
|
||
|
,'rma' => [
|
||
|
'Bezeichnung' => 'RMA Lieferungen',
|
||
|
'Link'=>'index.php?module=rma&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}'
|
||
|
]
|
||
|
,'seriennummern' => [
|
||
|
'Bezeichnung' => 'Seriennummern',
|
||
|
'Link'=>'index.php?module=seriennummern&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'statistiken' => [
|
||
|
'Bezeichnung' => 'Statistiken',
|
||
|
'Link'=>'index.php?module=statistiken&action=dashboard',
|
||
|
'Icon'=>'Icons_dunkel_22.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Controlling und Statistik|}',
|
||
|
'project_sensitive' => true
|
||
|
]
|
||
|
,'steuerregeln' => [
|
||
|
'Bezeichnung' => 'Steuerregeln',
|
||
|
'Link'=>'index.php?module=steuerregeln&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ALL',
|
||
|
'legacy' => true,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true
|
||
|
]
|
||
|
,'umsatzstatistik' => [
|
||
|
'Bezeichnung' => 'Umsatzstatistik',
|
||
|
'Link'=>'index.php?module=umsatzstatistik&action=allgemein',
|
||
|
'Icon'=>'Icons_dunkel_22.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,'kategorie'=>'{|Controlling und Statistik|}'
|
||
|
]
|
||
|
/*
|
||
|
,'vereinsverwaltung' => [
|
||
|
'Bezeichnung' => 'Vereinsverwaltung',
|
||
|
'Link'=>'index.php?module=vereinsverwaltung&action=list',
|
||
|
'Icon'=>'Icons_dunkel_14.gif',
|
||
|
'Versionen'=>'ALL',
|
||
|
'beta' => false,
|
||
|
'legacy' => true,
|
||
|
'kategorie'=>'{|Sonstiges|}'
|
||
|
]
|
||
|
*/
|
||
|
,'versanderzeugen' => [
|
||
|
'Bezeichnung' => 'Versandzentrum',
|
||
|
'Link'=>'index.php?module=versanderzeugen&action=offene',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}'
|
||
|
]
|
||
|
,'vertreter' => [
|
||
|
'Bezeichnung' => 'Vertreterabrechnungen',
|
||
|
'Link'=>'index.php?module=vertreter&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'Versionen'=>'ALL',
|
||
|
'beta' => false,
|
||
|
'legacy' => true,
|
||
|
'kategorie'=>'{|Buchhaltung|}'
|
||
|
]
|
||
|
,'wareneingang' => [
|
||
|
'Bezeichnung' => 'Wareneingang Paket Annahme',
|
||
|
'Link'=>'index.php?module=wareneingang&action=paketannahme',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Lager und Logistik|}'
|
||
|
]
|
||
|
,'webmail' => [
|
||
|
'Bezeichnung' => 'E-Mail-Archiv',
|
||
|
'Link'=>'index.php?module=webmail&action=list',
|
||
|
'Icon'=>'Icons_dunkel_4.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}'
|
||
|
]
|
||
|
|
||
|
,'pinwand' => [
|
||
|
'Bezeichnung' => 'Pinnwand',
|
||
|
'Link'=>'index.php?module=welcome&action=pinwand',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Team Funktionen|}'
|
||
|
]
|
||
|
,'welcome' => [
|
||
|
'Bezeichnung' => 'Persönliche Einstellungen',
|
||
|
'Link'=>'index.php?module=welcome&action=settings',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}'
|
||
|
]
|
||
|
|
||
|
,'zahlungsverkehr' => [
|
||
|
'Bezeichnung' => 'Zahlungsverkehr',
|
||
|
'Link'=>'index.php?module=zahlungsverkehr&action=ueberweisung',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'install'=>true,
|
||
|
'beta' => false,
|
||
|
'Versionen'=>'ENT',
|
||
|
'kategorie'=>'{|Buchhaltung|}'
|
||
|
]
|
||
|
,'zeiterfassung' => [
|
||
|
'Bezeichnung' => 'Zeiterfassung',
|
||
|
'Link'=>'index.php?module=zeiterfassung&action=create',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Mitarbeiter Verwaltung|}'
|
||
|
],
|
||
|
'TransferEdi' => [
|
||
|
'Bezeichnung' => 'Übertragungsmodul EDI',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=accounts',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen' => 'ALL',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Schnittstellen|}'
|
||
|
],
|
||
|
'trigger' => [
|
||
|
'Bezeichnung' => 'Trigger',
|
||
|
'Link'=>'index.php?module=trigger&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen' => 'ALL',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Workflows|}'
|
||
|
],
|
||
|
'report' => [
|
||
|
'Bezeichnung' => 'Berichte',
|
||
|
'Link'=>'index.php?module=report&action=list',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'',
|
||
|
'kategorie'=>'{|Controlling und Statistik|}'
|
||
|
],
|
||
|
'supersearch' => [
|
||
|
'Bezeichnung' => 'SuperSearch',
|
||
|
'Link'=>'index.php?module=supersearch&action=settings',
|
||
|
'Icon'=>'Icons_dunkel_1.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|System|}'
|
||
|
],
|
||
|
'hubspot' => ['Bezeichnung' => 'Hubspot',
|
||
|
'Link' => 'index.php?module=hubspot&action=settings',
|
||
|
'Icon' => 'Icons_dunkel_2.gif',
|
||
|
'install' => true,
|
||
|
'Versionen' => 'ALL',
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|Schnittstellen|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
'amainvoice' => ['Bezeichnung' => 'amainvoice',
|
||
|
'Link' => 'index.php?module=amainvoice&action=list',
|
||
|
'Icon' => 'Icons_dunkel_2.gif',
|
||
|
'install' => true,
|
||
|
'Versionen' => '',
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
'vatreduction2020' => [
|
||
|
'Bezeichnung' => 'Auftragsblocker',
|
||
|
'Link' => 'index.php?module=vatreduction2020&action=list',
|
||
|
'Icon' => 'Icons_dunkel_18.gif',
|
||
|
'install' => true,
|
||
|
'Versionen' => '',
|
||
|
'beta' => false,
|
||
|
],
|
||
|
'databaseviewer' => [
|
||
|
'Bezeichnung' => 'Datenbank Ansicht',
|
||
|
'Link' => 'index.php?module=databaseviewer&action=list',
|
||
|
'Icon' => 'Icons_dunkel_14.gif',
|
||
|
'Versionen' => '',
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|Workflows|}'
|
||
|
],
|
||
|
'avocadostore' => [
|
||
|
'Bezeichnung' => 'Avocadostore',
|
||
|
'Link' => 'index.php?module=avocadostore&action=list',
|
||
|
'Icon' => 'Icons_dunkel_15.gif',
|
||
|
'Versionen' => '',
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|Shop Schnittstelle|}'
|
||
|
],
|
||
|
'tableau' => [
|
||
|
'Bezeichnung' => 'Tableau',
|
||
|
'Link' => 'index.php?module=tableau&action=list',
|
||
|
'Icon' => 'Icons_dunkel_15.gif',
|
||
|
'Versionen' => '',
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|Schnittstellen|}'
|
||
|
],
|
||
|
'zapier' => [
|
||
|
'Bezeichnung' => 'Zapier',
|
||
|
'Link' => 'index.php?module=zapier&action=list',
|
||
|
'Icon' => 'Icons_dunkel_15.gif',
|
||
|
'Versionen' => '',
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|Schnittstellen|}'
|
||
|
],
|
||
|
'sellerlogic' => [
|
||
|
'Bezeichnung' => 'Sellerlogic',
|
||
|
'Link' => 'index.php?module=sellerlogic&action=list',
|
||
|
'Icon' => 'Icons_dunkel_15.gif',
|
||
|
'Versionen' => '',
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|Schnittstellen|}'
|
||
|
],
|
||
|
'quickscan' => [
|
||
|
'Bezeichnung' => 'Artikel QuickScan',
|
||
|
'Link' => 'index.php?module=quickscan&action=list',
|
||
|
'Icon' => 'Icons_dunkel_15.gif',
|
||
|
'Versionen' => 'ENT',
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|Stammdaten|}'
|
||
|
],
|
||
|
'otto' => [
|
||
|
'Bezeichnung'=>'Otto Schnittstelle',
|
||
|
'Link'=>'index.php?module=uebertragungen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ENT',
|
||
|
'install'=>true,
|
||
|
'kategorie'=>'{|Schnittstellen|}'
|
||
|
],
|
||
|
'batchpicking' => [
|
||
|
'Bezeichnung'=>'Batch Kommissionierung',
|
||
|
'Link'=>'index.php?module=batchpicking&action=list',
|
||
|
'Icon'=>'Icons_dunkel_9.gif',
|
||
|
'Versionen'=>'ALL',
|
||
|
'install'=>true,
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|Lager und Logistik|}'
|
||
|
],
|
||
|
'totp' => [
|
||
|
'Bezeichnung' => '2 Faktor Authentifizierung',
|
||
|
'Link' => 'index.php?module=welcome&action=settings',
|
||
|
'install' => true,
|
||
|
'Versionen' => '',
|
||
|
'beta' => true,
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'kategorie'=>'{|Sicherheit und Datenschutz|}'
|
||
|
],
|
||
|
'dataprotect' => [
|
||
|
'Bezeichnung'=>'Data Protect',
|
||
|
'Link'=>'index.php?module=dataprotect&action=list',
|
||
|
'Icon'=>'Icons_dunkel_15.gif',
|
||
|
'Versionen'=>'ALL',
|
||
|
'install'=>true,
|
||
|
'kategorie'=>'{|Sicherheit und Datenschutz|}'
|
||
|
],
|
||
|
|
||
|
'kontorahmen' => [
|
||
|
'Bezeichnung' => 'Kontorahmen',
|
||
|
'Link'=>'index.php?module=kontorahmen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_18.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen'=>'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'kostenstellen' => [
|
||
|
'Bezeichnung' => ' Kostenstellen ',
|
||
|
'Link'=>'index.php?module=kostenstellen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_17.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen' => 'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
|
||
|
'zahlungsweisen' => [
|
||
|
'Bezeichnung' => ' Zahlungsweisen',
|
||
|
'Link'=>'index.php?module=zahlungsweisen&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen' => '',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true,
|
||
|
'project_sensitive' => true
|
||
|
],
|
||
|
'konten' => [
|
||
|
'Bezeichnung' => ' Geschäftskonten',
|
||
|
'Link'=>'index.php?module=konten&action=list',
|
||
|
'Icon'=>'Icons_dunkel_16.gif',
|
||
|
'install'=>true,
|
||
|
'Versionen' => 'ENT',
|
||
|
'beta' => false,
|
||
|
'kategorie'=>'{|Buchhaltung|}',
|
||
|
'settings'=>true,
|
||
|
'project_sensitive' => true
|
||
|
],
|
||
|
'voucherpos' => [
|
||
|
'Bezeichnung' => 'Gutschein-App ohne POS',
|
||
|
'Link'=>'index.php?module=voucherpos&action=create',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'ALL',
|
||
|
'kategorie'=>'{|Verkauf|}',
|
||
|
'settings'=>true
|
||
|
],
|
||
|
'getmyinvoices' => [
|
||
|
'Bezeichnung' => 'GetMyInvoices',
|
||
|
'Link'=>'index.php?module=getmyinvoices&action=list',
|
||
|
'Icon'=>'Icons_dunkel_2.gif',
|
||
|
'Versionen'=>'',
|
||
|
'kategorie'=>'{|Buchhaltung|}'
|
||
|
],
|
||
|
'pipedrive' => ['Bezeichnung' => 'Pipedrive',
|
||
|
'Link' => 'index.php?module=pipedrive&action=settings',
|
||
|
'Icon' => 'Icons_dunkel_2.gif',
|
||
|
'install' => true,
|
||
|
'Versionen' => 'ALL',
|
||
|
'beta' => true
|
||
|
],
|
||
|
'shopimporter_amazonvendordf' => [
|
||
|
'Bezeichnung' => 'Amazon Vendor DF',
|
||
|
'Link' => 'index.php?module=onlineshops&action=create&cmd=shopimporter_amazonvendordf',
|
||
|
'Icon' => 'Icons_dunkel_1.gif',
|
||
|
'Versionen' => 'ALL',
|
||
|
'showonlyoninstall' => true,
|
||
|
'install' => true,
|
||
|
'kategorie' => '{|Shop Schnittstelle|}',
|
||
|
'beta' => true,
|
||
|
],
|
||
|
'versandarten_amazonvendordf' => [
|
||
|
'Bezeichnung' => 'Amazon Vendor DF',
|
||
|
'Link' => 'index.php?module=versandarten&action=list',
|
||
|
'Icon' => 'Icons_dunkel_9.gif',
|
||
|
'Versionen' => 'ALL',
|
||
|
'showonlyoninstall' => true,
|
||
|
'kategorie' => '{|Versandarten|}',
|
||
|
'settings' => true
|
||
|
],
|
||
|
'fiskaly' => [
|
||
|
'Bezeichnung' => 'Fiskaly Anbindung',
|
||
|
'Link' => 'index.php?module=fiskaly',
|
||
|
'Icon' => 'Icons_dunkel_2.gif',
|
||
|
'install' => true,
|
||
|
'Versionen' => 'ALL',
|
||
|
'showonlyoninstall' => true,
|
||
|
'beta' => true
|
||
|
],
|
||
|
'coppersurcharge'=>[
|
||
|
'Bezeichnung'=>'Kupferzuschlag',
|
||
|
'Link'=>'index.php?module=coppersurcharge&action=list',
|
||
|
'Icon'=>'Icons_dunkel_13.gif',
|
||
|
'Versionen'=>'ALL',
|
||
|
'install'=>true,
|
||
|
'beta' => true,
|
||
|
'kategorie'=>'{|Stammdaten|}'
|
||
|
],
|
||
|
);
|
||
|
|
||
|
if(empty(erpAPI::Ioncube_Property('disabledevelopmentprogram'))) {
|
||
|
$apps['developmentprogram'] = [
|
||
|
'Bezeichnung' => 'Development Programm',
|
||
|
'Link' => 'index.php?module=developmentprogram&action=list',
|
||
|
'Icon' => 'Icons_dunkel_25.gif',
|
||
|
'Versionen' => 'ENT',
|
||
|
'kategorie' => '{|System|}',
|
||
|
'beta' => false,
|
||
|
];
|
||
|
}
|
||
|
|
||
|
if(!empty($this->app->Tpl) && method_exists($this->app->Tpl,'pruefeuebersetzung')) {
|
||
|
foreach($apps as $k => $v) {
|
||
|
if(strpos($v['Bezeichnung'],'<') === false) {
|
||
|
$apps[$k]['Bezeichnung'] = $this->app->Tpl->pruefeuebersetzung($v['Bezeichnung'],'appstore');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
return $apps;
|
||
|
}
|
||
|
|
||
|
public function AppstoreTesten(): void
|
||
|
{
|
||
|
$this->app->erp->MenuEintrag("index.php?module=appstore&action=list","Übersicht");
|
||
|
|
||
|
// nur wenn OSS und keine Testversion
|
||
|
$this->app->erp->MenuEintrag("index.php?module=appstore&action=testen","Jetzt Business kostenlos testen");
|
||
|
|
||
|
$this->app->Tpl->Add('TAB1','<iframe src="https://'.$this->app->Conf->updateHost.'/xentralanfrage/" width="100%" border="0" style="border:0px;" height="700"></iframe>');
|
||
|
$this->app->Tpl->Parse('PAGE','tabview.tpl');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $haystack
|
||
|
* @param string $needle
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function match($haystack, $needle): bool
|
||
|
{
|
||
|
$needle = strtolower($this->app->erp->UmlauteEntfernen($needle));
|
||
|
$haystack = strtolower($this->app->erp->UmlauteEntfernen($haystack));
|
||
|
$needleWords = explode(' ',$needle);
|
||
|
foreach($needleWords as $word) {
|
||
|
if($word !== '') {
|
||
|
if(strpos($haystack, $word) === false) {
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array|null $apps
|
||
|
*
|
||
|
* @return array|null
|
||
|
*/
|
||
|
public function markGetAppsWithUserRights($apps): ?array
|
||
|
{
|
||
|
if(empty($apps) || empty($apps['installiert'])) {
|
||
|
return $apps;
|
||
|
}
|
||
|
|
||
|
foreach($apps['installiert'] as $key => $app) {
|
||
|
$apps['installiert'][$key]['my_app'] = $this->hasAppUserRights($app);
|
||
|
}
|
||
|
|
||
|
return $apps;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $val
|
||
|
* @param string|null $filterCategory
|
||
|
*
|
||
|
* @return null|array
|
||
|
*/
|
||
|
public function GetApps($val = '', $filterCategory = null): ?array
|
||
|
{
|
||
|
$val = (string)$val;
|
||
|
$module = $this->getAppsList(true);
|
||
|
if(empty($module)) {
|
||
|
return $module;
|
||
|
}
|
||
|
|
||
|
$sprachen = ['german', 'english',];
|
||
|
if(method_exists($this->app->User,'GetSprachen')) {
|
||
|
$sprachen = $this->app->User->GetSprachen();
|
||
|
if (in_array('deutsch', $sprachen, true) && !in_array('german', $sprachen, true)) {
|
||
|
$sprachen[] = 'german';
|
||
|
}
|
||
|
}
|
||
|
if(!is_array($sprachen)) {
|
||
|
return [];
|
||
|
}
|
||
|
$sprachen = array_reverse($sprachen);
|
||
|
$inline = [];
|
||
|
foreach($sprachen as $sprache) {
|
||
|
if(preg_match_all('/[a-zA-Z0-9\-]/', $sprache, $erg)) {
|
||
|
if(is_file(dirname(dirname(__DIR__)).'/languages/'.$sprache.'/inline.php')) {
|
||
|
include_once dirname(dirname(__DIR__)).'/languages/'.$sprache.'/inline.php';
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
if(isset($module['installiert'])) {
|
||
|
foreach($module['installiert'] as $k => $v) {
|
||
|
$moduleInstallKey = $module['installiert'][$k]['key'];
|
||
|
$module['installiert'][$k]['md5'] = md5($v['Bezeichnung']);
|
||
|
$module['installiert'][$k]['helpdesk'] = (isset($inline[$moduleInstallKey]['default']['link']))
|
||
|
? $inline[$moduleInstallKey]['default']['link'] : '';
|
||
|
$module['installiert'][$k]['beschreibung'] = (isset($inline[$moduleInstallKey]['default']['description']))
|
||
|
? $inline[$moduleInstallKey]['default']['description'] : '';
|
||
|
$module['installiert'][$k]['screenshots'] = (isset($inline[$moduleInstallKey]['default']['screenshots']))
|
||
|
? $inline[$moduleInstallKey]['default']['screenshots'] : array();
|
||
|
$module['installiert'][$k]['youtube'] = (isset($inline[$moduleInstallKey]['default']['youtube']))
|
||
|
? $inline[$moduleInstallKey]['default']['youtube'] : '';
|
||
|
|
||
|
if(isset($inline[$moduleInstallKey]['default']['shop'])) {
|
||
|
$module['installiert'][$k]['shop'] = $inline[$moduleInstallKey]['default']['shop'];
|
||
|
}
|
||
|
if(isset($inline[$moduleInstallKey]['default']['kategorie'])) {
|
||
|
$module['installiert'][$k]['kategorie'] = $inline[$moduleInstallKey]['default']['kategorie'];
|
||
|
$v['kategorie'] = $module['installiert'][$k]['kategorie'];
|
||
|
}
|
||
|
|
||
|
$kategorien['installiert'][$k] = isset($v['kategorie'])?$v['kategorie']:'';
|
||
|
$bezeichnung['installiert'][$k] = str_replace(array('Ü','Ä','Ö','ä','ü','ö'),array('Ue','Ae','Oe','ae','ue','oe'), $v['Bezeichnung']);
|
||
|
$matchBezeichnung = $this->match($v['Bezeichnung'], $val);
|
||
|
$matchKategorie = (!empty($v['kategorie'])) ? $this->match($v['kategorie'], $val) : false;
|
||
|
if(!empty($filterCategory)
|
||
|
&& $v['kategorie'] !== $filterCategory
|
||
|
&& $v['kategorie'] !== '{|'.$filterCategory.'|}'
|
||
|
) {
|
||
|
$matchBezeichnung = false;
|
||
|
$matchKategorie = false;
|
||
|
}
|
||
|
$module['installiert'][$k]['match'] = $matchBezeichnung || $matchKategorie;
|
||
|
}
|
||
|
array_multisort($kategorien['installiert'], SORT_ASC,$bezeichnung['installiert'], SORT_ASC, $module['installiert']);
|
||
|
}
|
||
|
|
||
|
if(empty($module['kauf'])) {
|
||
|
return $module;
|
||
|
}
|
||
|
|
||
|
|
||
|
foreach($module['kauf'] as $k => $v) {
|
||
|
$moduleKaufKey = $module['kauf'][$k]['key'];
|
||
|
$module['kauf'][$k]['md5'] = md5($v['Bezeichnung']);
|
||
|
$module['kauf'][$k]['helpdesk'] = (isset($inline[$moduleKaufKey]['default']['link']))
|
||
|
? $inline[$moduleKaufKey]['default']['link'] : '';
|
||
|
$module['kauf'][$k]['beschreibung'] = (isset($inline[$moduleKaufKey]['default']['description']))
|
||
|
? $inline[$moduleKaufKey]['default']['description'] : '';
|
||
|
$module['kauf'][$k]['screenshots'] = (isset($inline[$moduleKaufKey]['default']['screenshots']))
|
||
|
? $inline[$moduleKaufKey]['default']['screenshots'] : array();
|
||
|
$module['kauf'][$k]['youtube'] = (isset($inline[$moduleKaufKey]['default']['youtube']))
|
||
|
? $inline[$moduleKaufKey]['default']['youtube'] : '';
|
||
|
|
||
|
if(isset($inline[$moduleKaufKey]['default']['shop'])){
|
||
|
$module['kauf'][$k]['shop'] = $inline[$moduleKaufKey]['default']['shop'];
|
||
|
}
|
||
|
if(isset($inline[$moduleKaufKey]['default']['kategorie'])){
|
||
|
$module['kauf'][$k]['kategorie'] = $inline[$moduleKaufKey]['default']['kategorie'];
|
||
|
$v['kategorie'] = $module['kauf'][$k]['kategorie'];
|
||
|
}
|
||
|
|
||
|
$kategorien['kauf'][$k] = isset($v['kategorie']) ? $v['kategorie'] : '';
|
||
|
$bezeichnung['kauf'][$k] = str_replace(array('Ü','Ä','Ö','ä','ü','ö'),array('Ue','Ae','Oe','ae','ue','oe'), $v['Bezeichnung']);
|
||
|
$matchBezeichnung = $this->match($v['Bezeichnung'], $val);
|
||
|
$matchKategorie = (!empty($v['kategorie'])) ? $this->match($v['kategorie'], $val) : false;
|
||
|
if(!empty($filterCategory)
|
||
|
&& $v['kategorie'] !== $filterCategory
|
||
|
&& $v['kategorie'] !== '{|'.$filterCategory.'|}'
|
||
|
) {
|
||
|
$matchBezeichnung = false;
|
||
|
$matchKategorie = false;
|
||
|
}
|
||
|
$module['kauf'][$k]['match'] = $matchBezeichnung || $matchKategorie;
|
||
|
}
|
||
|
array_multisort($kategorien['kauf'], SORT_ASC,$bezeichnung['kauf'], SORT_ASC, $module['kauf']);
|
||
|
|
||
|
return $module;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return JsonResponse
|
||
|
*/
|
||
|
public function GetSearchResults(): JsonResponse
|
||
|
{
|
||
|
$filterCategory = $this->app->Secure->GetPOST('category');
|
||
|
if(empty($filterCategory)) {
|
||
|
$filterCategory = null;
|
||
|
}
|
||
|
$module = $this->GetApps($this->app->Secure->GetPOST('val'), $filterCategory);
|
||
|
|
||
|
$anzeigen = array();
|
||
|
$ausblenden = array();
|
||
|
$kateinblenden = array();
|
||
|
$katausblenden = array();
|
||
|
$kaufbarGefunden = 0;
|
||
|
$installiertGefunden = 0;
|
||
|
|
||
|
if ($module) {
|
||
|
if (!empty($module['installiert'])) {
|
||
|
foreach ($module['installiert'] as $modul) {
|
||
|
if (empty($modul['kategorie'])) {
|
||
|
$modul['kategorie'] = '{|Allgemein|}';
|
||
|
}
|
||
|
$katausblendenIndex = 'i'.md5($modul['kategorie']);
|
||
|
if ($modul['match']) {
|
||
|
$installiertGefunden++;
|
||
|
$anzeigen['m'.md5($modul['Bezeichnung'])] = true;
|
||
|
if (isset($modul['kategorie'])) {
|
||
|
$kateinblenden[$katausblendenIndex] = true;
|
||
|
if (isset($katausblenden) && isset($katausblenden[$katausblendenIndex])) {
|
||
|
unset($katausblenden[$katausblendenIndex]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
$ausblenden['m'.md5($modul['Bezeichnung'])] = true;
|
||
|
if (isset($modul['kategorie']) && (!isset($kateinblenden) || !isset($kateinblenden[$katausblendenIndex]))) {
|
||
|
$katausblenden[$katausblendenIndex] = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if (!empty($module['kauf'])) {
|
||
|
foreach($module['kauf'] as $modul) {
|
||
|
if (empty($modul['kategorie'])) {
|
||
|
$modul['kategorie'] = '{|Allgemein|}';
|
||
|
}
|
||
|
$katausblendenIndex = 'k'.md5($modul['kategorie']);
|
||
|
if ($modul['match']) {
|
||
|
$kaufbarGefunden++;
|
||
|
$anzeigen['m'.md5($modul['Bezeichnung'])] = true;
|
||
|
if (isset($modul['kategorie'])) {
|
||
|
$kateinblenden[$katausblendenIndex] = true;
|
||
|
if(isset($katausblenden) && isset($katausblenden[$katausblendenIndex])){
|
||
|
unset($katausblenden[$katausblendenIndex]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
$ausblenden['m'.md5($modul['Bezeichnung'])] = true;
|
||
|
if (isset($modul['kategorie']) && (!isset($kateinblenden) || !isset($kateinblenden[$katausblendenIndex]))) {
|
||
|
$katausblenden[$katausblendenIndex] = true;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return new JsonResponse(
|
||
|
[
|
||
|
'anzeigen'=>$anzeigen,
|
||
|
'ausblenden'=>$ausblenden,
|
||
|
'kateinblenden'=>$kateinblenden,
|
||
|
'katausblenden'=>$katausblenden,
|
||
|
'kaufbargefunden'=>$kaufbarGefunden,
|
||
|
'installiertgefunden'=>$installiertGefunden,
|
||
|
]
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return JsonResponse
|
||
|
*/
|
||
|
public function HandleActivateAjaxAction(): JsonResponse
|
||
|
{
|
||
|
$module = $this->app->Secure->GetPOST('module');
|
||
|
$ret = ['status' => 0, 'module' => $module];
|
||
|
if($this->app->erp->RechteVorhanden('appstore', 'activate')) {
|
||
|
if($this->activateModule($module)) {
|
||
|
$ret['status'] = 1;
|
||
|
}
|
||
|
else {
|
||
|
$ret['error'] = 'Das Modul konnte nicht aktiviert werden';
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
$ret['error'] = 'Sie haben keine Rechte um das Modul zu aktivieren';
|
||
|
}
|
||
|
|
||
|
return new JsonResponse($ret);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return JsonResponse
|
||
|
*/
|
||
|
public function HandleDeactivateAjaxAction(): JsonResponse
|
||
|
{
|
||
|
$module = $this->app->Secure->GetPOST('module');
|
||
|
$ret = ['status' => 0, 'module' => $module];
|
||
|
if($this->app->erp->RechteVorhanden('appstore', 'deactivate')) {
|
||
|
if(!empty($module) && !in_array($module, $this->nodeactivateable)) {
|
||
|
if($this->deactivateModule($module)) {
|
||
|
$ret['status'] = 1;
|
||
|
}
|
||
|
else {
|
||
|
$ret['error'] = 'Das Modul konnte nicht deaktiviert werden';
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
$ret['error'] = 'Das Modul kann nicht deaktiviert werden';
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
$ret['error'] = 'Sie haben keine Rechte um das Modul zu deaktivieren';
|
||
|
}
|
||
|
|
||
|
return new JsonResponse($ret);
|
||
|
}
|
||
|
|
||
|
public function setTabItemActive($filter){
|
||
|
if($filter === "userapps"){
|
||
|
$this->app->Tpl->Add('ACTIVEINSTALLED', 'appstore-tab-active');
|
||
|
} else {
|
||
|
$this->app->Tpl->Add('ACTIVEALL', 'appstore-tab-active');
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function appTypeVisibility($filter){
|
||
|
$hide = 'display: none';
|
||
|
|
||
|
if($filter === "userapps"){
|
||
|
$this->app->Tpl->Set('POPULARVISIBILITY', $hide);
|
||
|
$this->app->Tpl->Set('AVAILABLEVISIBILITY', $hide);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function AppstoreList()
|
||
|
{
|
||
|
$filter = $this->app->User->GetParameter('appstore_filter');
|
||
|
|
||
|
$this->setTabItemActive($filter);
|
||
|
$this->appTypeVisibility($filter);
|
||
|
|
||
|
$cmd = $this->app->Secure->GetGET('cmd');
|
||
|
if($cmd === 'allapps') {
|
||
|
$this->app->User->SetParameter('appstore_filter', '');
|
||
|
$this->app->Location->execute('index.php?module=appstore&action=list');
|
||
|
}
|
||
|
if($cmd === 'activate') {
|
||
|
return $this->HandleActivateAjaxAction();
|
||
|
}
|
||
|
|
||
|
|
||
|
if($cmd === 'deactivate') {
|
||
|
return $this->HandleDeactivateAjaxAction();
|
||
|
}
|
||
|
|
||
|
$isDetail = $cmd === 'detail';
|
||
|
if($isDetail) {
|
||
|
$app = $this->app->Secure->GetGET('app');
|
||
|
$this->app->erp->MenuEintrag('index.php?module=appstore&action=list&cmd=detail&app='.$app, '{|Übersicht|}', true);
|
||
|
}
|
||
|
else{
|
||
|
$this->app->erp->MenuEintrag('index.php?module=appstore&action=list', '{|Übersicht|}');
|
||
|
}
|
||
|
$this->app->erp->MenuEintrag('index.php?module=appstore&action=testen','{|14 Tage Business testen|}');
|
||
|
|
||
|
// Detail-Seite anzeigen
|
||
|
if ($isDetail) {
|
||
|
$this->app->erp->MenuEintrag('index.php?module=appstore&action=list','{|zurück zur Übersicht|}');
|
||
|
$this->DisplayAppDetailPage();
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Suche wurde ausgefüllt
|
||
|
if ($cmd === 'suche') {
|
||
|
return $this->GetSearchResults();
|
||
|
}
|
||
|
|
||
|
$module = $this->GetApps();
|
||
|
|
||
|
$canUserTestModule = $this->app->erp->RechteVorhanden('appstore', 'testmodule');
|
||
|
|
||
|
if($canUserTestModule && $this->app->erp->isIoncube() && $this->app->Secure->GetPOST('testen')) {
|
||
|
$modul = $this->app->Secure->GetPOST('modul');
|
||
|
$get = $this->app->Secure->GetPOST('modulbestaetigen');
|
||
|
$json = false;
|
||
|
if($modul == '' && $get != '') {
|
||
|
$json = true;
|
||
|
$message = '';
|
||
|
if($module && !empty($module['kauf'])) {
|
||
|
foreach($module['kauf'] as $k => $v) {
|
||
|
if($v['md5'] === $get) {
|
||
|
$mods = $this->app->erp->getAppList();
|
||
|
foreach($mods as $k2 => $v2) {
|
||
|
if(md5($v2['Bezeichnung']) === $get) {
|
||
|
$modul = $k2;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if($modul) {
|
||
|
$testapp = $modul;
|
||
|
if(is_file(dirname(__DIR__).'/update.php')) {
|
||
|
$result = '';
|
||
|
include_once dirname(__DIR__).'/update.php';
|
||
|
if($result === 'OK') {
|
||
|
$message = '<div class="info">Das Modul wurde zum Testen angefragt. Bitte ziehen Sie sich über den Update-Prozess in ca 10 Minuten ein Update. Sie erhalten mit diesem das Modul zum Testen.</div>';
|
||
|
if(!$json) {
|
||
|
$this->app->Tpl->Add('MESSAGE', $message);
|
||
|
}
|
||
|
}
|
||
|
else{
|
||
|
$message = '<div class="error">Es ist ein Fehler beim Senden der Anfrage aufgetreten: '.$result.'</div>';
|
||
|
if(!$json) {
|
||
|
$this->app->Tpl->Add('MESSAGE', $message);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if($json) {
|
||
|
return new JsonResponse(['html'=>$message]);
|
||
|
}
|
||
|
$this->clearCache();
|
||
|
}
|
||
|
elseif($canUserTestModule && !empty($get = $this->app->Secure->GetGET('get')) && !empty($module['kauf'])) {
|
||
|
foreach($module['kauf'] as $v) {
|
||
|
if($v['md5'] === $get) {
|
||
|
$mods = $this->app->erp->getAppList();
|
||
|
foreach($mods as $k2 => $v2) {
|
||
|
if(md5($v2['Bezeichnung']) === $get) {
|
||
|
$this->app->Tpl->Add(
|
||
|
'MESSAGE',
|
||
|
'<div class="info">Bitte bestätigen:
|
||
|
<form method="POST" action="index.php?module=appstore&action=list">
|
||
|
<input type="hidden" name="modul" value="'
|
||
|
.$k2.'" /><input type="submit" style="float:right;" value="Testmodul '
|
||
|
.$v2['Bezeichnung'].' anfragen" name="testen" />
|
||
|
</form>
|
||
|
</div>'
|
||
|
);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$this->app->erp->RunHook('appstoreModulelistToShow', 1, $module);
|
||
|
$module = $this->markGetAppsWithUserRights($module);
|
||
|
$categoryFilter = $this->app->Secure->GetGET('category');
|
||
|
if(!empty($categoryFilter)) {
|
||
|
$this->app->Tpl->Set('PAGETYPE', "category-page");
|
||
|
|
||
|
foreach($module as $type => $apps) {
|
||
|
foreach($apps as $appKey => $app) {
|
||
|
if(empty($app['kategorie']) || str_replace(['{|','|}'], '', $app['kategorie']) !== $categoryFilter) {
|
||
|
unset($module[$type][$appKey]);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
//foreach($module)
|
||
|
}
|
||
|
$this->app->Tpl->Set('CATEGORYFILTER', $categoryFilter);
|
||
|
if($categoryFilter === ''){
|
||
|
$categoryFilter = null;
|
||
|
}
|
||
|
$filterCategory = null;
|
||
|
|
||
|
// HTML für installierte/gekaufte Module generieren
|
||
|
if (count($module['installiert']) === 1){
|
||
|
$this->app->Tpl->Add('INSTALLIERTEAUSBLENDEN', 'display: none;');
|
||
|
}
|
||
|
else{
|
||
|
$moduleInstalliert = $this->GenerateInstallierteModuleHtml($module['installiert'], $categoryFilter);
|
||
|
$this->app->Tpl->Add('MODULEINSTALLIERT', $moduleInstalliert);
|
||
|
}
|
||
|
|
||
|
// HTML für verfügbare/kaufbare Module generieren
|
||
|
$moduleVerfuegbar = $this->GenerateVerfuegbareModuleHtml($module['kauf'], $categoryFilter);
|
||
|
$numberAvailableModules = strlen($moduleVerfuegbar);
|
||
|
|
||
|
$this->app->Tpl->Add('MODULEVERFUEGBAR', $moduleVerfuegbar);
|
||
|
|
||
|
// Suchfilter generieren
|
||
|
$suchFilterHtml = $this->GenerateSuchfilterHtml();
|
||
|
$this->app->Tpl->Add('SUCHFILTER', $suchFilterHtml);
|
||
|
|
||
|
// Highlight-Boxen generieren
|
||
|
$highlightsHtml = $this->GenerateHighlightsHtml($categoryFilter);
|
||
|
|
||
|
$this->app->Tpl->Add('HIGHLIGHTS', $highlightsHtml);
|
||
|
|
||
|
// Detail-Seite ausblenden
|
||
|
$this->app->Tpl->Set('APPSTOREDETAILSEITEAUSBLENDEN', 'display: none;');
|
||
|
$this->showUpdateMessage();
|
||
|
|
||
|
/** @var Welcome $welcome */
|
||
|
$welcome = $this->app->loadModule('welcome');
|
||
|
$welcome->loadChangeLogByTime();
|
||
|
$this->app->Tpl->Set('COUNTUPDATES', $this->app->erp->GetKonfiguration('welcome_changelog_count'));
|
||
|
$this->app->Tpl->Parse('TAB1','appstore.tpl');
|
||
|
$this->app->Tpl->Add('TAB1', '<script id="modulesJson" type="application/json">'.json_encode($module).'</script>');
|
||
|
$this->app->Tpl->Parse('PAGE','tabview.tpl');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $module
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function GenerateVerfuegbareModuleHtml($module, $filterCategory = null): string
|
||
|
{
|
||
|
$html = '';
|
||
|
$kategorieVorher = '';
|
||
|
foreach ($module as $modul) {
|
||
|
// Externen AppStore nicht unter verfügbare anzeigen
|
||
|
if ($modul['key'] === 'appstore_extern') {
|
||
|
continue;
|
||
|
}
|
||
|
if(!empty($modul['showonlyoninstall'])) {
|
||
|
continue;
|
||
|
}
|
||
|
// Kategorie-Überschriften einfügen
|
||
|
$kategorie = (!empty($modul['kategorie'])) ? $modul['kategorie'] : '{|Allgemein|}';
|
||
|
if(
|
||
|
$filterCategory !== null
|
||
|
&& $kategorie !== $filterCategory
|
||
|
&& $kategorie !== '{|'.$filterCategory.'|}'
|
||
|
) {
|
||
|
continue;
|
||
|
}
|
||
|
if ($kategorie !== $kategorieVorher) {
|
||
|
$html .= '<h3 id="k' . md5($kategorie) . '">' . $kategorie . '</h3>';
|
||
|
}
|
||
|
|
||
|
$showTestVersion = (empty($modul['test']) || empty($modul['ablaufdatum'])) && stripos($modul['Bezeichnung'],'AppStore') === false;
|
||
|
|
||
|
$contentlink = 'index.php?module=appstore&action=list&cmd=detail&app='.$modul['key'];
|
||
|
$iconTag = $this->GetAppIconTagByCategory($kategorie);
|
||
|
$html .=
|
||
|
'<a href="index.php?module=appstore&action=list&cmd=detail&app='
|
||
|
.$modul['key'].'&overviewpage=appstore&overviewpageaction=list" class="module" id="m'.$modul['md5'].'">'.
|
||
|
'<div class="icon app-category-icon-'. $iconTag .'"></div>'.
|
||
|
'<div class="content">' .
|
||
|
'<div class="title">' .
|
||
|
strip_tags($modul['Bezeichnung'])
|
||
|
.'</div>' .
|
||
|
(!empty($modul['ablaufdatum'])
|
||
|
? '<small>{|Ablauf am|} '
|
||
|
. $this->app->String->Convert($modul['ablaufdatum'], '%1-%2-%3', '%3.%2.%1') . '</small>'
|
||
|
: '')
|
||
|
. '<div>'
|
||
|
. (!empty($modul['beta'])?' <span class="beta">BETA</span>':'')
|
||
|
. (!empty($modul['legacy']) && $modul['legacy']?' <span class="legacy">LEGACY</span>':'')
|
||
|
. (!empty($modul['special']) && $modul['special']?' <span class="special">SPECIAL</span>':'')
|
||
|
. (!empty($modul['project_sensitive']) && $modul['project_sensitive']?' <span class="project_sensitive">PROJEKT</span>':'')
|
||
|
. '</div>'
|
||
|
. '<button class="install">{|Installieren|}</button>'
|
||
|
. '</div>'
|
||
|
. '</a>';
|
||
|
|
||
|
$kategorieVorher = $kategorie;
|
||
|
}
|
||
|
|
||
|
return $html;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $module
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function GenerateInstallierteModuleHtml($module, $filterCategory = null): string
|
||
|
{
|
||
|
$html = '';
|
||
|
$kategorieVorher = '';
|
||
|
|
||
|
foreach ($module as $modul) {
|
||
|
// AppStore-Modul nicht in "Käufe" anzeigen
|
||
|
if (stripos($modul['Bezeichnung'],'AppStore') !== false) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
$kategorie = (!empty($modul['kategorie'])) ? $modul['kategorie'] : '{|Allgemein|}';
|
||
|
if(
|
||
|
$filterCategory !== null
|
||
|
&& $kategorie !== $filterCategory
|
||
|
&& $kategorie !== '{|'.$filterCategory.'|}'
|
||
|
) {
|
||
|
continue;
|
||
|
}
|
||
|
// Kategorie-Überschriften einfügen
|
||
|
if ($kategorie !== $kategorieVorher) {
|
||
|
$html .= '<h3 id="i' . md5($kategorie) . '">' . $kategorie . '</h3>';
|
||
|
}
|
||
|
|
||
|
$contentlink = 'index.php?module=appstore&action=list&cmd=detail&app='.$modul['key'];
|
||
|
if(!empty($modul['Link'])) {
|
||
|
$contentlink = $modul['Link'];
|
||
|
}
|
||
|
$moduleDeactivated = $this->isModuleDeactivated($modul['key']);
|
||
|
$iconTag = $this->GetAppIconTagByCategory($kategorie);
|
||
|
$html .=
|
||
|
|
||
|
'<a href="index.php?module=appstore&action=list&cmd=detail&app='
|
||
|
.$modul['key'].'&overviewpage=appstore&overviewpageaction=list" class="module installed-app" id="m'.$modul['md5'].'">'.
|
||
|
'<div class="icon app-category-icon-'. $iconTag .'"></div>'.
|
||
|
'<div class="content">' .
|
||
|
'<div class="title">' .
|
||
|
strip_tags($modul['Bezeichnung'])
|
||
|
.'</div>' .
|
||
|
(!empty($modul['ablaufdatum'])
|
||
|
? '<small>{|Ablauf am|} '
|
||
|
. $this->app->String->Convert($modul['ablaufdatum'], '%1-%2-%3', '%3.%2.%1') . '</small>'
|
||
|
: '')
|
||
|
. '<div>'
|
||
|
. (!empty($modul['beta'])?' <span class="beta">BETA</span>':'')
|
||
|
. (!empty($modul['legacy']) && $modul['legacy']?' <span class="legacy">LEGACY</span>':'')
|
||
|
. (!empty($modul['special']) && $modul['special']?' <span class="special">SPECIAL</span>':'')
|
||
|
. (!empty($modul['project_sensitive']) && $modul['project_sensitive']?' <span class="project_sensitive">PROJEKT</span>':'')
|
||
|
. '</div>'
|
||
|
. '<button>{|Öffnen|}</button></div>'
|
||
|
. '</a>';
|
||
|
|
||
|
$kategorieVorher = $kategorie;
|
||
|
}
|
||
|
|
||
|
return $html;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $category
|
||
|
*
|
||
|
* @return array|null
|
||
|
*/
|
||
|
public function getOverViewFromCategory($category): ?array
|
||
|
{
|
||
|
switch($category) {
|
||
|
case 'Shop Schnittstelle':
|
||
|
return [
|
||
|
'key' => 'onlineshops',
|
||
|
'Bezeichnung' => '{|Übersicht|}',
|
||
|
'Link' => 'index.php?module=onlineshops&action=list',
|
||
|
];
|
||
|
case 'Versandarten':
|
||
|
return [
|
||
|
'key' => 'versandarten',
|
||
|
'Bezeichnung' => '{|Übersicht|}',
|
||
|
'Link' => 'index.php?module=versandarten&action=list',
|
||
|
];
|
||
|
case 'Zahlungsweisen':
|
||
|
return [
|
||
|
'key' => 'zahlungsweisen',
|
||
|
'Bezeichnung' => '{|Übersicht|}',
|
||
|
'Link' => 'index.php?module=zahlungsweisen&action=list',
|
||
|
];
|
||
|
}
|
||
|
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $category
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function GetAppIconTagByCategory($category): string
|
||
|
{
|
||
|
static $categoryIconMap = [
|
||
|
'{|Allgemein|}' => 'general',
|
||
|
'{|Belege|}' => 'documents',
|
||
|
'{|Buchhaltung|}' => 'accounting-calculator',
|
||
|
'{|Controlling und Statistik|}' => 'controlling',
|
||
|
'{|Einkauf|}' => 'buying',
|
||
|
'{|Lager und Logistik|}' => 'warehouse',
|
||
|
'{|Marketing|}' => 'marketing',
|
||
|
'{|Mitarbeiter Verwaltung|}' => 'employees',
|
||
|
'{|Produktion|}' => 'production',
|
||
|
'{|Schnittstelle|}' => 'interface',
|
||
|
'{|Shop Schnittstelle|}' => 'shop-interface',
|
||
|
'{|Sicherheit und Datenschutz|}' => 'security',
|
||
|
'{|Sonstiges|}' => 'misc',
|
||
|
'{|Stammdaten|}' => 'master-data',
|
||
|
'{|System|}' => 'system',
|
||
|
'{|Team Funktionen|}' => 'team-functions',
|
||
|
'{|Verkauf|}' => 'sales',
|
||
|
'{|Versandarten|}' => 'shipping',
|
||
|
'{|Workflows|}' => 'workflows',
|
||
|
'{|Zahlungsweisen|}' => 'payment',
|
||
|
];
|
||
|
|
||
|
if (isset($categoryIconMap[$category])) {
|
||
|
return $categoryIconMap[$category];
|
||
|
}
|
||
|
|
||
|
return 'general'; // Fallback, falls Mapping fehlt
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
public function GenerateSuchfilterHtml(): string
|
||
|
{
|
||
|
$html = '';
|
||
|
$filterArray = array(
|
||
|
'{|Belege|}',
|
||
|
'{|Buchhaltung|}',
|
||
|
'{|Controlling und Statistik|}',
|
||
|
'{|Einkauf|}',
|
||
|
'{|Lager und Logistik|}',
|
||
|
'{|Marketing|}',
|
||
|
'{|Mitarbeiter Verwaltung|}',
|
||
|
'{|Produktion|}',
|
||
|
'{|Schnittstelle|}',
|
||
|
'{|Shop Schnittstelle|}',
|
||
|
'{|Sicherheit und Datenschutz|}',
|
||
|
'{|Sonstiges|}',
|
||
|
'{|Stammdaten|}',
|
||
|
'{|System|}',
|
||
|
'{|Team Funktionen|}',
|
||
|
'{|Verkauf|}',
|
||
|
'{|Versandarten|}',
|
||
|
'{|Workflows|}',
|
||
|
'{|Zahlungsweisen|}'
|
||
|
);
|
||
|
foreach ($filterArray as $filter) {
|
||
|
$icon = $this->GetAppIconTagByCategory($filter);
|
||
|
|
||
|
$html .= sprintf(
|
||
|
'<a href="index.php?module=appstore&action=list&category=%s" data-category="%s" class="category-link app-category-icon-'. $icon .'"><span>%s</span></a>',
|
||
|
urlencode(substr($filter,2,-2)) , substr($filter,2,-2) , $filter
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return $html;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @var string|null $categoryFilter
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function GenerateHighlightsHtml(?string $categoryFilter = null): string
|
||
|
{
|
||
|
$highlightApps = [
|
||
|
'aufgaben',
|
||
|
'chat',
|
||
|
'vertriebscockpit',
|
||
|
'wiedervorlage',
|
||
|
'layoutvorlagen',
|
||
|
'zertifikatgenerator',
|
||
|
'filiallieferung',
|
||
|
'sammelrechnung',
|
||
|
'serienbrief'
|
||
|
];
|
||
|
|
||
|
$highlights = [];
|
||
|
$appList = $this->getAppsList();
|
||
|
foreach($appList['installiert'] as $appKey => $appVal) {
|
||
|
$appList['installiert'][$appKey]['installiert'] = true;
|
||
|
}
|
||
|
$appListKomplett = array_merge($appList['kauf'], $appList['installiert']);
|
||
|
foreach ($appListKomplett as $appItem) {
|
||
|
if (in_array($appItem['key'], $highlightApps)) {
|
||
|
$highlights[] = $appItem;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$html = '';
|
||
|
foreach ($highlights as $key => $highlight) {
|
||
|
$kategorie = (!empty($highlight['kategorie'])) ? $highlight['kategorie'] : '{|Allgemein|}';
|
||
|
if(!empty($categoryFilter) && !empty($kategorie)
|
||
|
&& str_replace(['{|','|}'], '', $kategorie) !== $categoryFilter) {
|
||
|
continue;
|
||
|
}
|
||
|
$iconTag = $this->GetAppIconTagByCategory($kategorie);
|
||
|
$html .=
|
||
|
'<a href="index.php?module=appstore&action=list&cmd=detail&app='
|
||
|
.$highlight['key'].'&overviewpage=appstore&overviewpageaction=list" class="module" id="m'.md5($highlight['key']).'">'.
|
||
|
'<div class="icon app-category-icon-'. $iconTag .'"></div>'.
|
||
|
'<div class="content">' .
|
||
|
'<div class="title">' .
|
||
|
strip_tags($highlight['Bezeichnung'])
|
||
|
.'</div>' .
|
||
|
(!empty($highlight['ablaufdatum'])
|
||
|
? '<small>{|Ablauf am|} '
|
||
|
. $this->app->String->Convert($highlight['ablaufdatum'], '%1-%2-%3', '%3.%2.%1') . '</small>'
|
||
|
: '')
|
||
|
. '<div>'
|
||
|
. (!empty($highlight['beta'])?' <span class="beta">BETA</span>':'')
|
||
|
. (!empty($highlight['legacy']) && $highlight['legacy']?' <span class="legacy">LEGACY</span>':'')
|
||
|
. (!empty($highlight['special']) && $highlight['special']?' <span class="special">SPECIAL</span>':'')
|
||
|
. (!empty($highlight['project_sensitive']) && $highlight['project_sensitive']?' <span class="project_sensitive">PROJEKT</span>':'')
|
||
|
. '</div>'
|
||
|
. ($highlight['installiert'] ? '<button class="">{|Öffnen|}</button>' : '<button class="install">{|Installieren|}</button>'). '</div>'
|
||
|
. '</a>';
|
||
|
}
|
||
|
|
||
|
return $html;
|
||
|
}
|
||
|
|
||
|
function DisplayAppDetailPage()
|
||
|
{
|
||
|
$module = $this->app->Secure->GetGET('app');
|
||
|
$appList = $this->GetApps();
|
||
|
foreach ($appList['kauf'] as $appItem) {
|
||
|
if ($module === $appItem['key']) {
|
||
|
$appInfo = $appItem;
|
||
|
$appInfo['kaufbar'] = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
foreach ($appList['installiert'] as $appItem) {
|
||
|
if ($module === $appItem['key']) {
|
||
|
$appInfo = $appItem;
|
||
|
$appInfo['installiert'] = true;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
$sprache = 'german';
|
||
|
$inline = [];
|
||
|
include_once dirname(dirname(__DIR__)).'/languages/'.$sprache.'/inline.php';
|
||
|
if(empty($appInfo['beschreibung']) && !empty($appInfo['key']) && !empty($inline[$appInfo['key']])) {
|
||
|
$appInfo['beschreibung'] = !empty($inline[$appInfo['key']]['default']['description'])?
|
||
|
$inline[$appInfo['key']]['default']['description']:'';
|
||
|
}
|
||
|
|
||
|
if($appInfo['Versionen']=='') {
|
||
|
$appInfo['version'] = 'OSS,FREE,PRO,ENT,PRE';
|
||
|
}
|
||
|
else {
|
||
|
$appInfo['version'] = $appInfo['Versionen'];
|
||
|
}
|
||
|
|
||
|
$tmpversion = $appInfo['version'];
|
||
|
$tmpversion = str_replace('ALL', 'Extra im App-Store',$tmpversion);
|
||
|
$tmpversion = str_replace('OSS', 'Open-Source',$tmpversion);
|
||
|
$tmpversion = str_replace('PRO', 'Starter',$tmpversion);
|
||
|
$tmpversion = str_replace('ENT', 'Business',$tmpversion);
|
||
|
$tmpversion = str_replace('PRE', 'Enterprise (Neues Preismodell)',$tmpversion);
|
||
|
$tmpversion = str_replace(',',', ',$tmpversion);
|
||
|
$tmpversion = rtrim($tmpversion,',');
|
||
|
$appInfo['version'] = $tmpversion;
|
||
|
|
||
|
if($this->app->erp->ModulVorhanden($appInfo['key'], true))
|
||
|
{
|
||
|
$appInfo['kaufbar'] = false;
|
||
|
$appInfo['installiert']= true;
|
||
|
}
|
||
|
|
||
|
$this->app->erp->RunHook('appstoreModuleDetailToShow', 1, $appInfo);
|
||
|
$appInfo['beschreibung'] = $appInfo['beschreibung']."<br><br><i>Inkl. ab Version: ".$appInfo['version']."</i>";
|
||
|
|
||
|
$zusatzInfos = '';
|
||
|
if(!empty($appInfo['beta'])){
|
||
|
$zusatzInfos .= '<span class="beta">BETA</span>';
|
||
|
}
|
||
|
if(!empty($appInfo['legacy']) && $appInfo['legacy']){
|
||
|
$zusatzInfos .= '<span class="legacy">LEGACY</span>';
|
||
|
}
|
||
|
if(!empty($appInfo['special']) && $appInfo['special']){
|
||
|
$zusatzInfos .= '<span class="special">SPECIAL</span>';
|
||
|
}
|
||
|
if(!empty($appInfo['project_sensitive']) && $appInfo['project_sensitive']){
|
||
|
$zusatzInfos .= '<span class="project_sensitive">PROJEKT</span>';
|
||
|
}
|
||
|
|
||
|
$price = null;
|
||
|
|
||
|
if (isset($appInfo)) {
|
||
|
$iconTag = $this->GetAppIconTagByCategory($appInfo['kategorie']);
|
||
|
$html =
|
||
|
'<div class="information-left">' .
|
||
|
'<div class="app-icon app-category-icon-'. $iconTag .'"></div>' .
|
||
|
'</div>' .
|
||
|
'<div class="information-right">' .
|
||
|
'<h1 class="title">' . $appInfo['Bezeichnung']
|
||
|
.(empty($price)?'':' (pro Monat '.$price.' EUR zzgl. ges. USt.)')
|
||
|
. '</h1>' .
|
||
|
'<div class="description">' . $appInfo['beschreibung'] .'<br>'. $zusatzInfos .'</div>'.
|
||
|
'<div class="dropdown primary">';
|
||
|
if ($appInfo['kaufbar']){
|
||
|
}
|
||
|
if ($appInfo['installiert']){
|
||
|
$moduleDeactivated = $this->isModuleDeactivated($appInfo['key']);
|
||
|
$html .=
|
||
|
'<a class="dropdown-link button button-primary'.($moduleDeactivated?' deactivated':' activated').'" href="' . ($moduleDeactivated?'#':$appInfo['Link']) . '" target="_blank">'.
|
||
|
'{|Zum Modul|}'.
|
||
|
'</a>';
|
||
|
}
|
||
|
$html .= '<ul class="dropdown-menu">';
|
||
|
if(!empty($price)) {
|
||
|
$html .=
|
||
|
'<li><a class="dropdown-link buybutton" data-type="add_module" data-newvalue="'.$appInfo['key']
|
||
|
.'" data-oldvalue="" data-info="pro Monat '.$price.' EUR zzgl. ges. USt." data-price="' . $price . '" href="#">' .
|
||
|
'{|Modul mieten|}' .
|
||
|
'</a></li>';
|
||
|
$this->app->Tpl->Set('UPDATEKEY', '');
|
||
|
$this->app->Tpl->Parse('MODALBUYPOPUP', 'appstore_modulbuypopup.tpl');
|
||
|
}
|
||
|
if(!in_array($appInfo['key'], $this->nodeactivateable)) {
|
||
|
if($moduleDeactivated && $this->app->erp->RechteVorhanden('appstore', 'activate')){
|
||
|
$html .= '<li><a class="dropdown-sublink activate" target="_blank" data-module="'.$appInfo['key'].'" href="index.php?module=appstore&action=activate&smodule=' . $appInfo['key'] . '">aktivieren</a></li>';
|
||
|
}elseif(!$moduleDeactivated && $this->app->erp->RechteVorhanden('appstore', 'deactivate')){
|
||
|
$html .= '<li><a class="dropdown-sublink deactivate" target="_blank" data-module="'.$appInfo['key'].'" href="index.php?module=appstore&action=deactivate&smodule=' . $appInfo['key'] . '">deaktivieren</a></li>';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if(!empty($appInfo['shop'])){
|
||
|
$html .= '<li><a class="dropdown-sublink" target="_blank" href="' . $appInfo['shop'] . '">{|Zum AppStore|}</a></li>';
|
||
|
}
|
||
|
if(!empty($appInfo['helpdesk'])){
|
||
|
$html .= '<li><a class="dropdown-sublink" target="_blank" href="' . $appInfo['helpdesk'] . '">{|Handbuch|}</a></li>';
|
||
|
}
|
||
|
if(!empty($appInfo['youtube'])){
|
||
|
$html .= '<li><a class="dropdown-sublink" target="_blank" href="https://youtu.be/' . $appInfo['youtube'] . '">{|Video|}</a></li>';
|
||
|
}
|
||
|
$html .= '</ul></div></div>';
|
||
|
$screenshots = '';
|
||
|
if (is_array($appInfo['screenshots']) && !empty($appInfo['screenshots'])) {
|
||
|
foreach ($appInfo['screenshots'] as $screenshot) {
|
||
|
$screenshots .= '<div class="screenshot"><img src="'.$screenshot.'" alt=""></div>';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|
||
|
else {
|
||
|
$html = '<h1>{|App wurde nicht gefunden|}</h1>';
|
||
|
$screenshots = '';
|
||
|
}
|
||
|
|
||
|
// Übersichtsseite ausblenden
|
||
|
$this->app->Tpl->Set('APPSTOREUEBERSICHTAUSBLENDEN', 'display: none;');
|
||
|
|
||
|
$this->app->Tpl->Set('MODULINFORMATION', $html);
|
||
|
$this->app->Tpl->Set('MODULSCREENSHOTS', $screenshots);
|
||
|
|
||
|
/** @var Welcome $welcome */
|
||
|
$welcome = $this->app->loadModule('welcome');
|
||
|
$welcome->loadChangeLogByTime();
|
||
|
$this->app->Tpl->Set('COUNTUPDATES', $this->app->erp->GetKonfiguration('welcome_changelog_count'));
|
||
|
|
||
|
$this->app->Tpl->Parse('TAB1', 'appstore.tpl');
|
||
|
$module = $this->GetApps();
|
||
|
$this->app->Tpl->Add('TAB1', '<script id="modulesJson" type="application/json">'.json_encode($module).'</script>');
|
||
|
$this->app->Tpl->Parse('PAGE', 'tabview.tpl');
|
||
|
}
|
||
|
|
||
|
public function getOverViewLink($overviewPageAction): ?string
|
||
|
{
|
||
|
if(!in_array($overviewPageAction, ['', 'list'])) {
|
||
|
return null;
|
||
|
}
|
||
|
|
||
|
return 'index.php?module=appstore&action=list';
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $modullist
|
||
|
* @param string $prefix
|
||
|
* @param string|null $link
|
||
|
* @param array|null $customIcon
|
||
|
*/
|
||
|
public function AddModuleHtml($modullist, $prefix = '', $link = null, $customIcon = null)
|
||
|
{
|
||
|
$this->AddModuleInstalledHtml($modullist, $prefix);
|
||
|
if($customIcon !== null){
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEINSTALLIERT',
|
||
|
'<a href="'.$customIcon['link'].'" class="modulecol tilegrid-tile" id="m' . md5('Extern') . '">'
|
||
|
);
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEINSTALLIERT',
|
||
|
'<div class="icon app-category-icon-general"></div>'
|
||
|
);
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEINSTALLIERT',
|
||
|
'<div><div> '.$customIcon['title'].'</div></div>'
|
||
|
);
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEINSTALLIERT',
|
||
|
'</a>' . "\n");
|
||
|
}
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEINSTALLIERT',
|
||
|
'<div class="clear"></div></div>' . "\n");
|
||
|
$this->AddModuleBuyHtml($modullist, $prefix, $link);
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @param array $modullist
|
||
|
* @param string $prefix
|
||
|
* @param string|null $link
|
||
|
*/
|
||
|
public function AddModuleBuyHtml($modullist, $prefix = '', $link = null)
|
||
|
{
|
||
|
if($link === null) {
|
||
|
$link = 'index.php?module=appstore&action=list&cmd=detail&app=';
|
||
|
}
|
||
|
if($modullist && isset($modullist['kauf'])) {
|
||
|
$this->app->Tpl->Add('MODULEVERFUEGBAR','<div class="modulediv tilegrid-container">'."\n");
|
||
|
$countBuyModules = 0;
|
||
|
foreach($modullist['kauf'] as $modul) {
|
||
|
if(isset($modul['key']) && ($prefix === '' || strpos($modul['key'], $prefix) === 0)) {
|
||
|
$countBuyModules++;
|
||
|
$kategorie = (!empty($modul['kategorie'])) ? $modul['kategorie'] : '{|Allgemein|}';
|
||
|
$iconTag = $this->GetAppIconTagByCategory($kategorie);
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEVERFUEGBAR',
|
||
|
'<a href="'.$link.md5($modul['Bezeichnung']).'" class="modulecol tilegrid-tile" id="m'.md5($modul['Bezeichnung']).'">'
|
||
|
);
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEVERFUEGBAR',
|
||
|
'<div class="icon app-category-icon-'. $iconTag .'"></div>'
|
||
|
);
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEVERFUEGBAR',
|
||
|
'<div class="tilegrid-tile-title">'
|
||
|
.$modul['Bezeichnung']
|
||
|
.(!empty($modul['beta'])?'<br><span class="beta">Beta</span>':'')
|
||
|
.'</div>'
|
||
|
|
||
|
.'</a>');
|
||
|
}
|
||
|
}
|
||
|
$this->app->Tpl->Add('MODULEVERFUEGBAR','<div class="clear"></div> </div>'."\r\n");
|
||
|
if($countBuyModules === 0) {
|
||
|
$this->app->Tpl->Set('BEFOREMODULESTOBUY', '<!--');
|
||
|
$this->app->Tpl->Set('AFTERMODULESTOBUY', '-->');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $modullist
|
||
|
* @param string $prefix
|
||
|
*/
|
||
|
public function AddModuleInstalledHtml($modullist, $prefix = '')
|
||
|
{
|
||
|
$this->app->Tpl->Add('MODULEINSTALLIERT','<div class="modulediv tilegrid-container">'."\n");
|
||
|
if($modullist && !empty($modullist['installiert'])) {
|
||
|
foreach($modullist['installiert'] as $modul) {
|
||
|
if(isset($modul['key']) && strpos($modul['key'], $prefix) === 0) {
|
||
|
|
||
|
$kategorie = (!empty($modul['kategorie'])) ? $modul['kategorie'] : '{|Allgemein|}';
|
||
|
$iconTag = $this->GetAppIconTagByCategory($kategorie);
|
||
|
$link = '#';
|
||
|
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEINSTALLIERT',
|
||
|
'<a data-module="'.$modul['key'].'" href="' .$link. '" class="createbutton modulecol tilegrid-tile" id="m'.md5($modul['Bezeichnung']).'">'
|
||
|
);
|
||
|
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEINSTALLIERT',
|
||
|
'<div class="icon app-category-icon-'. $iconTag. '"></div>'
|
||
|
);
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEINSTALLIERT',
|
||
|
'<div><div> <span class="tilegrid-tile-title">'.$modul['Bezeichnung'] .'</span><br>'
|
||
|
.(!empty($modul['beta'])?' <span class="beta">Beta</span>':'')
|
||
|
.(!empty($modul['legacy'])?' <span class="legacy">Legacy</span>':'')
|
||
|
.(!empty($modul['special'])?' <span class="special">Special</span>':'')
|
||
|
.(!empty($modul['test'])?' (Testversion Ablauf am '.$this->app->String->Convert($modul['ablaufdatum'], "%1-%2-%3", "%3.%2.%1").')':'').'</div></div>'
|
||
|
);
|
||
|
$this->app->Tpl->Add(
|
||
|
'MODULEINSTALLIERT',
|
||
|
'</a>'."\n"
|
||
|
);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public function Install(): void
|
||
|
{
|
||
|
$this->app->erp->CheckTable('module_status');
|
||
|
$this->app->erp->CheckColumn('module', 'VARCHAR(64)','module_status',"DEFAULT '' NOT NULL");
|
||
|
$this->app->erp->CheckColumn('active', 'TINYINT(1)','module_status','DEFAULT 0 NOT NULL');
|
||
|
|
||
|
$this->app->erp->RegisterHook('supersearch_detail', 'appstore', 'AppstoreSupersearchDetail');
|
||
|
$this->app->erp->RegisterHook('HeadLines', 'appstore', 'AppstoreHeadLines');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $headline
|
||
|
* @param string $headline1
|
||
|
* @param string|array $headline2
|
||
|
*/
|
||
|
public function AppstoreHeadLines($headline, $headline1, $headline2): void
|
||
|
{
|
||
|
if((empty($headline)) && empty($headline1)) {
|
||
|
return;
|
||
|
}
|
||
|
if(stripos($headline, 'BETA') !== false || stripos($headline1, 'BETA') !== false ||
|
||
|
stripos($headline, 'LEGACY') !== false || stripos($headline1, 'LEGACY') !== false ||
|
||
|
stripos($headline, 'SPECIAL') !== false || stripos($headline1, 'SPECIAL') !== false ||
|
||
|
stripos($headline, 'PROJEKT') !== false || stripos($headline1, 'PROJEKT') !== false) {
|
||
|
return;
|
||
|
}
|
||
|
if(!empty($headline2) && is_string($headline2) && (stripos($headline2, 'BETA') !== false &&
|
||
|
stripos($headline2, 'LEGACY') !== false && stripos($headline2, 'SPECIAL') !== false) &&
|
||
|
stripos($headline2, 'PROJEKT') !== false) {
|
||
|
return;
|
||
|
}
|
||
|
if(!empty($headline2) && is_array($headline2) && (stripos(implode(' ',$headline2), 'BETA') !== false &&
|
||
|
stripos(implode(' ',$headline2), 'LEGACY') !== false && stripos(implode(' ', $headline2), 'SPECIAL') !== false &&
|
||
|
stripos(implode(' ',$headline2), 'PROJEKT') !== false)) {
|
||
|
return;
|
||
|
}
|
||
|
if(empty($this->app->Secure)) {
|
||
|
return;
|
||
|
}
|
||
|
$module = $this->app->Secure->GetGET('module');
|
||
|
if(empty($module)) {
|
||
|
return;
|
||
|
}
|
||
|
if(in_array($module,['onlineshops','shopexport','uebertragungen','versandarten','zahlungsweisen'])) {
|
||
|
return;
|
||
|
}
|
||
|
if(!$this->isBeta($module) && !$this->isLegacy($module) && !$this->isSpecial($module) && !$this->isProjectSensitive($module)) {
|
||
|
return;
|
||
|
}
|
||
|
if(!empty($headline)) {
|
||
|
if($this->isBeta($module)){
|
||
|
$this->app->erp->Headlines($headline.' <span class="beta">Beta</span>');
|
||
|
return;
|
||
|
}
|
||
|
if($this->isLegacy($module)){
|
||
|
$this->app->erp->Headlines($headline.' <span class="legacy">Legacy</span>');
|
||
|
return;
|
||
|
}
|
||
|
if($this->isSpecial($module)){
|
||
|
$this->app->erp->Headlines($headline.' <span class="special">Special</span>');
|
||
|
return;
|
||
|
}
|
||
|
if($this->isProjectSensitive($module)){
|
||
|
//$this->app->erp->Headlines($headline.' <span class="project_sensitive">Projekt</span>');
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
if(!empty($headline1)) {
|
||
|
if($this->isBeta($module)){
|
||
|
$this->app->erp->Headlines('', $headline1.' <span class="beta">Beta</span>');
|
||
|
return;
|
||
|
}
|
||
|
if($this->isLegacy($module)){
|
||
|
$this->app->erp->Headlines('', $headline1.' <span class="legacy">Legacy</span>');
|
||
|
return;
|
||
|
}
|
||
|
if($this->isSpecial($module)){
|
||
|
$this->app->erp->Headlines('', $headline1.' <span class="special">Special</span>');
|
||
|
return;
|
||
|
}
|
||
|
if($this->isProjectSensitive($module)){
|
||
|
//$this->app->erp->Headlines('', $headline1.'<span class="project_sensitive">Projekt</span>');
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param \Xentral\Widgets\SuperSearch\Query\DetailQuery $detailQuery
|
||
|
* @param \Xentral\Widgets\SuperSearch\Result\ResultDetail $detailResult
|
||
|
*
|
||
|
* @return void
|
||
|
*/
|
||
|
public function AppstoreSupersearchDetail($detailQuery, $detailResult): void
|
||
|
{
|
||
|
if ($detailQuery->getGroupKey() !== 'apps') {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$modules = $this->BuildModuleList();
|
||
|
$moduleKey = $detailQuery->getItemIdentifier();
|
||
|
|
||
|
// Wiki-Inhalte aufbereiten
|
||
|
/** @var Wiki $wiki */
|
||
|
$wiki = $this->app->erp->LoadModul('wiki');
|
||
|
$workspace = $wiki->getWorkspaceByName('XentralHandbuch');
|
||
|
$workspaceId = !empty($workspace)? (int)$workspace['id'] : 0;
|
||
|
$wikiArticle = $wiki->getArticleByName($moduleKey, $workspaceId);
|
||
|
list($wikiMenuArray, $wikiArticleContent) = $wiki->parseMenuFromHtml($wikiArticle['content'], 3, 'supersearch');
|
||
|
$wikiMenuHtml = '<h2>Inhaltsverzeichnis</h2>' . $wiki->drawMenuFromArray($wikiMenuArray, 'supersearch');
|
||
|
$wikiContent = $wikiMenuHtml . $wikiArticleContent;
|
||
|
$wikiLink = !empty($wikiArticle) ? sprintf('index.php?module=wiki&action=list&workspace=%s&cmd=%s', $workspaceId, $moduleKey) : null;
|
||
|
// ENDE Wiki-Inhalte aufbereiten
|
||
|
|
||
|
$moduleData = isset($modules[$moduleKey]) ? $modules[$moduleKey] : false;
|
||
|
if (is_array($moduleData) && $moduleData['key'] === $moduleKey) {
|
||
|
if($this->app->erp->ModulVorhanden($moduleData['key'])){
|
||
|
if (!empty($moduleData['module_link'])) {
|
||
|
$detailResult->addButton('Zum Modul', $moduleData['module_link']);
|
||
|
}
|
||
|
}else{
|
||
|
$detailResult->addButton('Zum Modul', 'index.php?module=appstore&action=list&cmd=detail&app='.$moduleData['key']);
|
||
|
}
|
||
|
|
||
|
|
||
|
// Einstellungs-Button deaktivieren, falls Action-Liste leer
|
||
|
// Grund: Modul wurde dann noch nie aufgerufen und erpApi::RechteVorhanden() würde ein falsches Ergebnis liefern
|
||
|
$disableSettingsButton = empty($this->app->erp->getActionsByModule($moduleKey)) ? true : false;
|
||
|
|
||
|
// Einstellungs-Button hinzufügen
|
||
|
if (!$disableSettingsButton){
|
||
|
$hasSettingsPermission1 = $this->app->erp->RechteVorhanden($moduleKey, 'einstellungen');
|
||
|
$hasSettingsPermission2 = $this->app->erp->RechteVorhanden($moduleKey, 'settings');
|
||
|
if($hasSettingsPermission1 || $hasSettingsPermission2){
|
||
|
$settingsAction = $hasSettingsPermission1 ? 'einstellungen' : 'settings';
|
||
|
$settingsLink = sprintf('index.php?module=%s&action=%s', $moduleKey, $settingsAction);
|
||
|
$detailResult->addButton('Einstellungen', $settingsLink, ['target' => '_blank', 'data-icon' => 'settings']);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (!empty($wikiLink)) {
|
||
|
$detailResult->addButton('Handbuch', $wikiLink, ['target' => '_blank', 'data-icon' => 'help', 'class' => 'button button-secondary']);
|
||
|
}
|
||
|
if (empty($wikiLink) && !empty($moduleData['helpdesk_link'])){
|
||
|
$detailResult->addButton('Handbuch', $moduleData['helpdesk_link'], ['target' => '_blank', 'data-icon' => 'help', 'class' => 'button button-secondary']);
|
||
|
}
|
||
|
if (!empty($moduleData['youtube_link'])){
|
||
|
$detailResult->addButton('Video', $moduleData['youtube_link'], ['target' => '_blank']);
|
||
|
}
|
||
|
if (!empty($moduleData['description'])){
|
||
|
$detailResult->setDescription($moduleData['description']);
|
||
|
}
|
||
|
if (!empty($wikiArticle['content'])) {
|
||
|
$detailResult->setDescription($wikiContent);
|
||
|
}
|
||
|
|
||
|
$detailResult->setTitle($moduleData['title']);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function BuildModuleList(): array
|
||
|
{
|
||
|
$apps = $this->getAppList();
|
||
|
|
||
|
// ANFANG inline.php einlesen
|
||
|
$sprachen = ['german','english'];
|
||
|
if(method_exists($this->app->User,'GetSprachen')) {
|
||
|
$sprachen = $this->app->User->GetSprachen();
|
||
|
if (in_array('deutsch', $sprachen, true) && !in_array('german', $sprachen, true)) {
|
||
|
$sprachen[] = 'german';
|
||
|
}
|
||
|
}
|
||
|
if(!is_array($sprachen)) {
|
||
|
return [];
|
||
|
}
|
||
|
$sprachen = array_reverse($sprachen);
|
||
|
$inline = [];
|
||
|
foreach($sprachen as $sprache) {
|
||
|
if(preg_match_all('/[a-zA-Z0-9\-]/', $sprache, $erg)) {
|
||
|
$inlineFilePath = dirname(dirname(__DIR__)) . sprintf('/languages/%s/inline.php', $sprache);
|
||
|
if(is_file($inlineFilePath)) {
|
||
|
include_once $inlineFilePath;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// ENDE inline.php einlesen
|
||
|
|
||
|
$modules = [];
|
||
|
foreach($apps as $appKey => $app) {
|
||
|
$modules[$appKey] = [
|
||
|
'key' => $appKey,
|
||
|
'title' => $app['Bezeichnung'],
|
||
|
'title2' => empty($app['Bezeichnung2'])?'': $app['Bezeichnung2'],
|
||
|
'module_link' => $app['Link'],
|
||
|
'module_link2' => empty($app['Link2'])?'':$app['Link2'],
|
||
|
'description' => isset($inline[$appKey]['default']['description']) ? $inline[$appKey]['default']['description'] : null,
|
||
|
'category' => isset($inline[$appKey]['default']['kategorie']) ? $inline[$appKey]['default']['kategorie'] : null,
|
||
|
'helpdesk_link' => isset($inline[$appKey]['default']['link']) ? $inline[$appKey]['default']['link'] : null,
|
||
|
'youtube_link' => isset($inline[$appKey]['default']['youtube']) ? 'https://youtu.be/' . $inline[$appKey]['default']['youtube'] : null,
|
||
|
'beta' => isset($app['beta']) ? $app['beta'] : null,
|
||
|
'legacy' => isset($app['legacy']) ? $app['legacy'] : false,
|
||
|
'special' => isset($app['special']) ? $app['special'] : false,
|
||
|
'popular' => !empty($app['popular']),
|
||
|
'project_sensitive' => isset($app['project_sensitive']) ? $app['project_sensitive'] : false
|
||
|
];
|
||
|
}
|
||
|
|
||
|
return $modules;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $moduleName
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function deactivateModule($moduleName): bool
|
||
|
{
|
||
|
if(empty($moduleName) || in_array($moduleName, $this->nodeactivateable)) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if(!$this->app->erp->ModulVorhanden($moduleName, true)) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$check = $this->app->DB->Select(
|
||
|
sprintf(
|
||
|
"SELECT `id` FROM `module_status` WHERE `module` = '%s' LIMIT 1",
|
||
|
$this->app->DB->real_escape_string($moduleName)
|
||
|
)
|
||
|
);
|
||
|
if($check){
|
||
|
$this->app->DB->Update(
|
||
|
sprintf(
|
||
|
'UPDATE `module_status` SET `active` = 0 WHERE `id` = %d', $check
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
else {
|
||
|
$this->app->DB->Insert(
|
||
|
sprintf(
|
||
|
'INSERT INTO `module_status` (`module`, `active`) VALUES (\'%s\', 0)',
|
||
|
$this->app->DB->real_escape_string($moduleName)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
if(!isset($this->deactivatesModules[$this->app->Conf->WFdbname])
|
||
|
|| $this->deactivatesModules[$this->app->Conf->WFdbname] === null) {
|
||
|
$this->loadDeactivatedModules();
|
||
|
}
|
||
|
elseif(!in_array($moduleName, $this->deactivatesModules[$this->app->Conf->WFdbname])) {
|
||
|
$this->deactivatesModules[$this->app->Conf->WFdbname][] = $moduleName;
|
||
|
}
|
||
|
|
||
|
$obj = $this->app->loadModule($moduleName);
|
||
|
if(!empty($obj) && method_exists($obj, 'Uninstall')) {
|
||
|
$obj->Uninstall();
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $moduleName
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function activateModule($moduleName): bool
|
||
|
{
|
||
|
if(empty($moduleName)) {
|
||
|
return false;
|
||
|
}
|
||
|
if(!$this->app->erp->ModulVorhanden($moduleName, true)) {
|
||
|
return false;
|
||
|
}
|
||
|
$check = $this->app->DB->Select(
|
||
|
sprintf(
|
||
|
"SELECT `id` FROM `module_status` WHERE `module` = '%s' LIMIT 1",
|
||
|
$this->app->DB->real_escape_string($moduleName)
|
||
|
)
|
||
|
);
|
||
|
if($check) {
|
||
|
$this->app->DB->Update(
|
||
|
sprintf(
|
||
|
'UPDATE `module_status` SET `active` = 1 WHERE `id` = %d', $check
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
else {
|
||
|
$this->app->DB->Insert(
|
||
|
sprintf(
|
||
|
'INSERT INTO `module_status` (`module`, `active`) VALUES (\'%s\', 1)',
|
||
|
$this->app->DB->real_escape_string($moduleName)
|
||
|
)
|
||
|
);
|
||
|
}
|
||
|
if(!isset($this->deactivatesModules[$this->app->Conf->WFdbname])
|
||
|
|| $this->deactivatesModules[$this->app->Conf->WFdbname] === null) {
|
||
|
$this->loadDeactivatedModules();
|
||
|
}
|
||
|
elseif(in_array($moduleName, $this->deactivatesModules[$this->app->Conf->WFdbname])) {
|
||
|
$this->deactivatesModules[$this->app->Conf->WFdbname] =
|
||
|
array_diff($this->deactivatesModules[$this->app->Conf->WFdbname], [$moduleName]);
|
||
|
}
|
||
|
|
||
|
$this->app->erp->InstallModul($moduleName);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param string $moduleName
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
public function isModuleDeactivated($moduleName): bool
|
||
|
{
|
||
|
if(empty($moduleName) || in_array($moduleName, $this->nodeactivateable)) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if(!isset($this->deactivatesModules[$this->app->Conf->WFdbname])
|
||
|
|| $this->deactivatesModules[$this->app->Conf->WFdbname] === null) {
|
||
|
$this->loadDeactivatedModules();
|
||
|
}
|
||
|
|
||
|
return in_array($moduleName, $this->deactivatesModules[$this->app->Conf->WFdbname]);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return void
|
||
|
*/
|
||
|
protected function loadDeactivatedModules(): void
|
||
|
{
|
||
|
$deactivatedModules = $this->app->DB->SelectFirstCols(
|
||
|
'SELECT DISTINCT `module` FROM `module_status` WHERE `active` = 0 AND `module` <> \'\''
|
||
|
);
|
||
|
$this->deactivatesModules[$this->app->Conf->WFdbname] = [];
|
||
|
|
||
|
if(empty($deactivatedModules)) {
|
||
|
return;
|
||
|
}
|
||
|
$this->deactivatesModules[$this->app->Conf->WFdbname] = array_diff($deactivatedModules, $this->nodeactivateable);
|
||
|
}
|
||
|
|
||
|
}
|