From 39775f17101d9d00af248e8af4ad62a3c1fcfc36 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 13 Jul 2019 20:25:57 +0200 Subject: [PATCH] Started to create sd demo app --- sdSetup.php | 654 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 654 insertions(+) create mode 100644 sdSetup.php diff --git a/sdSetup.php b/sdSetup.php new file mode 100644 index 0000000..e3761c9 --- /dev/null +++ b/sdSetup.php @@ -0,0 +1,654 @@ + [ + 'core' => [ + 'masters' => [ + 'admin' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => '', /* db login password */ + 'database' => 'oms', /* db name */ + 'prefix' => 'oms_', /* db table prefix */ + 'weight' => 1000, /* db table prefix */ + ], + 'insert' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => '', /* db login password */ + 'database' => 'oms', /* db name */ + 'prefix' => 'oms_', /* db table prefix */ + 'weight' => 1000, /* db table prefix */ + ], + 'select' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => '', /* db login password */ + 'database' => 'oms', /* db name */ + 'prefix' => 'oms_', /* db table prefix */ + 'weight' => 1000, /* db table prefix */ + ], + 'update' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => '', /* db login password */ + 'database' => 'oms', /* db name */ + 'prefix' => 'oms_', /* db table prefix */ + 'weight' => 1000, /* db table prefix */ + ], + 'delete' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => '', /* db login password */ + 'database' => 'oms', /* db name */ + 'prefix' => 'oms_', /* db table prefix */ + 'weight' => 1000, /* db table prefix */ + ], + 'schema' => [ + 'db' => 'mysql', /* db type */ + 'host' => '127.0.0.1', /* db host address */ + 'port' => '3306', /* db host port */ + 'login' => 'root', /* db login name */ + 'password' => '', /* db login password */ + 'database' => 'oms', /* db name */ + 'prefix' => 'oms_', /* db table prefix */ + 'weight' => 1000, /* db table prefix */ + ], + ], + ], + ], + 'cache' => [ + 'redis' => [ + 'db' => 1, + 'host' => '127.0.0.1', + 'port' => 6379, + ], + 'memcached' => [ + 'host' => '127.0.0.1', + 'port' => 11211, + ], + ], + 'log' => [ + 'file' => [ + 'path' => __DIR__ . '/Logs', + ], + ], + 'page' => [ + 'root' => '/', + 'https' => false, + ], + 'app' => [ + 'path' => __DIR__, + ], + 'socket' => [ + 'master' => [ + 'host' => '127.0.0.1', + 'limit' => 300, + 'port' => 4310, + ], + ], + 'language' => [ + 'en', + ], + 'apis' => [ + ] +]; + +// Reset database +$db = new \PDO($config['db']['core']['masters']['admin']['db'] . ':host=' . + $config['db']['core']['masters']['admin']['host'], + $config['db']['core']['masters']['admin']['login'], + $config['db']['core']['masters']['admin']['password'] +); +$db->exec('DROP DATABASE IF EXISTS ' . $config['db']['core']['masters']['admin']['database']); +$db->exec('CREATE DATABASE IF NOT EXISTS ' . $config['db']['core']['masters']['admin']['database']); + +$response = new Response(); +$request = new Request(new Http('')); +$request->setMethod(RequestMethod::POST); + +$request->setData('dbhost', $config['db']['core']['masters']['admin']['host']); +$request->setData('dbtype', $config['db']['core']['masters']['admin']['db']); +$request->setData('dbport', $config['db']['core']['masters']['admin']['port']); +$request->setData('dbprefix', $config['db']['core']['masters']['admin']['prefix']); +$request->setData('dbname', $config['db']['core']['masters']['admin']['database']); +$request->setData('schemauser', $config['db']['core']['masters']['admin']['login']); +$request->setData('schemapassword', $config['db']['core']['masters']['admin']['password']); +$request->setData('createuser', $config['db']['core']['masters']['admin']['login']); +$request->setData('createpassword', $config['db']['core']['masters']['admin']['password']); +$request->setData('selectuser', $config['db']['core']['masters']['admin']['login']); +$request->setData('selectpassword', $config['db']['core']['masters']['admin']['password']); +$request->setData('updateuser', $config['db']['core']['masters']['admin']['login']); +$request->setData('updatepassword', $config['db']['core']['masters']['admin']['password']); +$request->setData('deleteuser', $config['db']['core']['masters']['admin']['login']); +$request->setData('deletepassword', $config['db']['core']['masters']['admin']['password']); + +$request->setData('orgname', 'Micerium'); +$request->setData('adminname', 'admin'); +$request->setData('adminpassword', 'orange'); +$request->setData('adminemail', 'admin@oms.com'); +$request->setData('domain', '127.0.0.1'); +$request->setData('websubdir', $config['page']['root']); +$request->setData('defaultlang', 'en'); + +WebApplication::installRequest($request, $response); + +// Setup for api calls +$app = new class() extends ApplicationAbstract +{ + protected $appName = 'Api'; +}; + +$app->dbPool = new DatabasePool(); +$app->dbPool->create('admin', $config['db']['core']['masters']['admin']); +$app->dbPool->create('select', $config['db']['core']['masters']['select']); +$app->dbPool->create('update', $config['db']['core']['masters']['update']); +$app->dbPool->create('insert', $config['db']['core']['masters']['insert']); +$app->dbPool->create('schema', $config['db']['core']['masters']['schema']); + +$app->orgId = 1; +$app->appName = 'Backend'; +$app->accountManager = new AccountManager(new HttpSession()); +$app->appSettings = new CoreSettings($app->dbPool->get()); +$app->moduleManager = new ModuleManager($app, __DIR__ . '/../Modules'); +$app->dispatcher = new Dispatcher($app); +$app->eventManager = new EventManager($app->dispatcher); +$app->eventManager->importFromFile(__DIR__ . '/../Web/Api/Hooks.php'); + +$account = new Account(); +TestUtils::setMember($account, 'id', 1); + +$permission = new AccountPermission(); +$permission->setUnit(2); +$permission->setApp('backend'); +$permission->setPermission( + PermissionType::READ + | PermissionType::CREATE + | PermissionType::MODIFY + | PermissionType::DELETE + | PermissionType::PERMISSION +); + +$account->addPermission($permission); + +$app->accountManager->add($account); +$app->router = new Router(); + +/** + * Setup additional units + */ +$module = $app->moduleManager->get('Organization'); +TestUtils::setMember($module, 'app', $app); + +$response = new Response(); +$request = new Request(new Http('')); + +$request->getHeader()->setAccount(1); +$request->setData('name', 'Schütz Dental GmbH'); +$request->setData('parent', 1); +$request->setData('status', 1); + +$module->apiUnitCreate($request, $response); + +/** + * Change app settings + */ +$module = $app->moduleManager->get('Admin'); +TestUtils::setMember($module, 'app', $app); + +$response = new Response(); +$request = new Request(new Http('')); + +$request->getHeader()->setAccount(1); +$request->setData('settings', \json_encode([Settings::DEFAULT_ORGANIZATION => '2'])); + +$module->apiSettingsSet($request, $response); + +/** + * Install modules + */ +$module = $app->moduleManager->get('Admin'); +TestUtils::setMember($module, 'app', $app); + +$response = new Response(); +$request = new Request(new Http('')); +$request->getHeader()->setAccount(1); +$request->setData('status', 3); + +// Helper +$request->setData('module', 'Helper'); +$module->apiModuleStatusUpdate($request, $response); + +// Search +$request->setData('module', 'Search'); +$module->apiModuleStatusUpdate($request, $response); + +// Dashboard +$request->setData('module', 'Dashboard'); +$module->apiModuleStatusUpdate($request, $response); + +// Tasks +$request->setData('module', 'Tasks'); +$module->apiModuleStatusUpdate($request, $response); + +// Message +$request->setData('module', 'Message'); +$module->apiModuleStatusUpdate($request, $response); + +// Calendar +$request->setData('module', 'Calendar'); +$module->apiModuleStatusUpdate($request, $response); + +// Editor +$request->setData('module', 'Editor'); +$module->apiModuleStatusUpdate($request, $response); + +// Checklist +$request->setData('module', 'Checklist'); +$module->apiModuleStatusUpdate($request, $response); + +// News +$request->setData('module', 'News'); +$module->apiModuleStatusUpdate($request, $response); + +// Profile +$request->setData('module', 'Profile'); +$module->apiModuleStatusUpdate($request, $response); + +// Kanban +$request->setData('module', 'Kanban'); +$module->apiModuleStatusUpdate($request, $response); + +// Workflow +$request->setData('module', 'Workflow'); +$module->apiModuleStatusUpdate($request, $response); + +// HumanResourceManagement +$request->setData('module', 'HumanResourceManagement'); +$module->apiModuleStatusUpdate($request, $response); + +// HumanResourceManagement +$request->setData('module', 'HumanResourceTimeRecording'); +$module->apiModuleStatusUpdate($request, $response); + +// Support +$request->setData('module', 'Support'); +$module->apiModuleStatusUpdate($request, $response); + +// ClientManagement +$request->setData('module', 'ClientManagement'); +$module->apiModuleStatusUpdate($request, $response); + +// SupplierManagement +$request->setData('module', 'SupplierManagement'); +$module->apiModuleStatusUpdate($request, $response); + +// ItemManagement +$request->setData('module', 'ItemManagement'); +$module->apiModuleStatusUpdate($request, $response); + +// Billling +$request->setData('module', 'Billling'); +$module->apiModuleStatusUpdate($request, $response); + +// InvoiceManagement +$request->setData('module', 'InvoiceManagement'); +$module->apiModuleStatusUpdate($request, $response); + +// WarehouseManagement +$request->setData('module', 'WarehouseManagement'); +$module->apiModuleStatusUpdate($request, $response); + +// StockTaking +$request->setData('module', 'StockTaking'); +$module->apiModuleStatusUpdate($request, $response); + +// QualityManagement +$request->setData('module', 'QualityManagement'); +$module->apiModuleStatusUpdate($request, $response); + +// AssetManagement +$request->setData('module', 'AssetManagement'); +$module->apiModuleStatusUpdate($request, $response); + +// Marketing +$request->setData('module', 'Marketing'); +$module->apiModuleStatusUpdate($request, $response); + +/** + * Setup groups + */ +$module = $app->moduleManager->get('Admin'); +TestUtils::setMember($module, 'app', $app); + +use Modules\Admin\Models\GroupMapper; +use phpOMS\Account\GroupStatus; + +$groups = [ + ['name' => 'Management', 'permissions' => []], + ['name' => 'Executive', 'permissions' => []], + ['name' => 'R&D', 'permissions' => []], + ['name' => 'Sales', 'permissions' => []], + ['name' => 'Service', 'permissions' => []], + ['name' => 'Support', 'permissions' => []], + ['name' => 'Secretariat', 'permissions' => []], + ['name' => 'HR', 'permissions' => []], + ['name' => 'Purchasing', 'permissions' => []], + ['name' => 'QA', 'permissions' => []], + ['name' => 'QM', 'permissions' => []], + ['name' => 'IT', 'permissions' => []], + ['name' => 'Marketing', 'permissions' => []], + ['name' => 'Warehouse', 'permissions' => []], + ['name' => 'Registration', 'permissions' => []], + ['name' => 'Finance', 'permissions' => []], + ['name' => 'Employee', 'permissions' => [ + 'Help' => [ + 'permissionowner' => 1, + 'permissionunit' => 2, + 'permissionapp' => 'backend', + 'permissiontype' => null, + 'permissionelement' => null, + 'permissioncomponent' => null, + 'permissioncreate' => 0, + 'permissionread' => 2, + 'permissionupdate' => 0, + 'permissiondelete' => 0, + 'permissionpermission' => 0 + ], + 'Profile' => [ + 'permissionowner' => 1, + 'permissionunit' => 2, + 'permissionapp' => 'backend', + 'permissiontype' => null, + 'permissionelement' => null, + 'permissioncomponent' => null, + 'permissioncreate' => 0, + 'permissionread' => 2, + 'permissionupdate' => 0, + 'permissiondelete' => 0, + 'permissionpermission' => 0 + ], + 'Helper' => [ + 'permissionowner' => 1, + 'permissionunit' => 2, + 'permissionapp' => 'backend', + 'permissiontype' => null, + 'permissionelement' => null, + 'permissioncomponent' => null, + 'permissioncreate' => 0, + 'permissionread' => 2, + 'permissionupdate' => 0, + 'permissiondelete' => 0, + 'permissionpermission' => 0 + ], + ]], + ['name' => 'Controlling', 'permissions' => [ + 'Helper' => [ + 'permissionowner' => 1, + 'permissionunit' => 2, + 'permissionapp' => 'backend', + 'permissiontype' => null, + 'permissionelement' => null, + 'permissioncomponent' => null, + 'permissioncreate' => 4, + 'permissionread' => 2, + 'permissionupdate' => 8, + 'permissiondelete' => 16, + 'permissionpermission' => 32 + ], + ]], +]; + +foreach ($groups as $group) { + $response = new Response(); + $request = new Request(new Http('')); + + $request->getHeader()->setAccount(1); + $request->setData('name', $group['name']); + $request->setData('status', GroupStatus::ACTIVE); + + $module->apiGroupCreate($request, $response); + + if (!empty($group['permissions'])) { + $g = $response->get('')['response']; + foreach ($group['permissions'] as $key => $p) { + $response = new Response(); + $request = new Request(new Http('')); + + $request->getHeader()->setAccount(1); + $request->setData('permissionowner', $p['permissionowner']); + $request->setData('permissionref', $g->getId()); + $request->setData('permissionunit', $p['permissionunit']); + $request->setData('permissionapp', $p['permissionapp']); + $request->setData('permissionmodule', $key); + $request->setData('permissiontype', $p['permissiontype']); + $request->setData('permissionelement', $p['permissionelement']); + $request->setData('permissioncomponent', $p['permissioncomponent']); + $request->setData('permissioncreate', $p['permissioncreate']); + $request->setData('permissionread', $p['permissionread']); + $request->setData('permissionupdate', $p['permissionupdate']); + $request->setData('permissiondelete', $p['permissiondelete']); + $request->setData('permissionpermission', $p['permissionpermission']); + + $module->apiAddGroupPermission($request, $response); + } + } +} + +/** + * Setup departments + */ +$module = $app->moduleManager->get('Organization'); +TestUtils::setMember($module, 'app', $app); + +use Modules\Organization\Models\Status; + +$departments = [ + ['name' => 'Management', 'parent' => null], + ['name' => 'R&D', 'parent' => 'Management'], + ['name' => 'Sales', 'parent' => 'Management'], + ['name' => 'Service', 'parent' => 'Management'], + ['name' => 'Support', 'parent' => 'Management'], + ['name' => 'Warehouse', 'parent' => 'Purchase'], + ['name' => 'Secretariat', 'parent' => 'Management'], + ['name' => 'Registration', 'parent' => 'Management'], + ['name' => 'HR', 'parent' => 'Management'], + ['name' => 'Purchasing', 'parent' => 'Management'], + ['name' => 'QA', 'parent' => 'Management'], + ['name' => 'QM', 'parent' => 'Management'], + ['name' => 'Finance', 'parent' => 'Management'], + ['name' => 'Marketing', 'parent' => 'Management'], + ['name' => 'IT', 'parent' => 'Management'], +]; +$departmentIds = []; + +foreach ($departments as $department) { + $response = new Response(); + $request = new Request(new Http('')); + + $request->getHeader()->setAccount(1); + $request->setData('name', $department['name']); + $request->setData('status', Status::ACTIVE); + $request->setData('unit', 2); + $request->setData('parent', $departmentIds[$department['parent']] ?? null); + + $module->apiDepartmentCreate($request, $response); + $departmentIds[$department['name']] = $response->get('')['response']->getId(); +} + +/** + * Setup positions + */ +$module = $app->moduleManager->get('Organization'); +TestUtils::setMember($module, 'app', $app); + +use Modules\Organization\Models\DepartmentMapper; + +$positions = [ + ['name' => 'Chairman', 'department' => 'Management', 'parent' => null], + ['name' => 'CEO', 'department' => 'Management', 'parent' => 'Chairman'], + ['name' => 'Executive Member', 'department' => null, 'parent' => 'Chairman'], + ['name' => 'COO', 'department' => 'Management', 'parent' => 'CEO'], + ['name' => 'CTO', 'department' => 'R&D', 'parent' => 'CEO'], + ['name' => 'R&D Employee', 'department' => 'R&D', 'parent' => 'CTO'], + ['name' => 'CFO', 'department' => 'Finance', 'parent' => 'CEO'], + ['name' => 'Accountant', 'department' => 'Finance', 'parent' => 'CFO'], + ['name' => 'CSO', 'department' => 'Sales', 'parent' => 'CEO'], + ['name' => 'Export Controle Officer', 'department' => 'Sales', 'parent' => 'CEO'], + ['name' => 'Back Office Sales', 'department' => 'Sales', 'parent' => 'CSO'], + ['name' => 'Head of Secretariat', 'department' => 'Secretariat', 'parent' => 'CEO'], + ['name' => 'Secretary', 'department' => 'Secretariat', 'parent' => 'Head of Secretariat'], + ['name' => 'Head of Service', 'department' => 'Service', 'parent' => 'CEO'], + ['name' => 'Service Employee', 'department' => 'Service', 'parent' => 'Head of Service'], + ['name' => 'Head of Support', 'department' => 'Support', 'parent' => 'CEO'], + ['name' => 'Support Employee', 'department' => 'Support', 'parent' => 'Head of Support'], + ['name' => 'Head of Warehouse', 'department' => 'Warehouse', 'parent' => 'Head of Production'], + ['name' => 'Warehouse Employee', 'department' => 'Warehouse', 'parent' => 'Head of Warehouse'], + ['name' => 'Head of Purchasing', 'department' => 'Purchasing', 'parent' => 'CEO'], + ['name' => 'Back Office Purchasing', 'department' => 'Purchasing', 'parent' => 'Head of Purchasing'], + ['name' => 'Head of QM', 'department' => 'QM', 'parent' => 'CEO'], + ['name' => 'QM Employee', 'department' => 'QM', 'parent' => 'Head of QM'], + ['name' => 'Head of QA', 'department' => 'QA', 'parent' => 'CEO'], + ['name' => 'QA Employee', 'department' => 'QA', 'parent' => 'Head of QA'], + ['name' => 'Head of HR', 'department' => 'HR', 'parent' => 'CEO'], + ['name' => 'HR Employee', 'department' => 'HR', 'parent' => 'Head of HR'], + ['name' => 'Head of IT', 'department' => 'IT', 'parent' => 'CEO'], + ['name' => 'IT Employee', 'department' => 'IT', 'parent' => 'Head of IT'], +]; + +$departments = DepartmentMapper::getAll(); +$postionIds = []; +foreach ($positions as $position) { + $response = new Response(); + $request = new Request(new Http('')); + + $request->getHeader()->setAccount(1); + $request->setData('name', $position['name']); + $request->setData('status', Status::ACTIVE); + $request->setData('parent', $positionIds[$position['parent']] ?? null); + + foreach ($departments as $d) { + if (!isset($position['department']) || $d->getName() === $position['department']) { + $request->setData('department', $d->getId()); + $module->apiPositionCreate($request, $response); + + $positionIds[$position['name']] = $response->get('')['response']->getId(); + break; + } + } +} + +/** + * Setup accounts + */ +$module = $app->moduleManager->get('Admin'); +TestUtils::setMember($module, 'app', $app); + +use Modules\Admin\Models\AccountMapper; +use phpOMS\Account\AccountStatus; +use phpOMS\Account\AccountType; + +$accounts = [ + [ + 'login' => 'deichhorn', + 'pass' => 'deichhorn', + 'name1' => 'Dennis', + 'name2' => 'Eichhorn', + 'email' => 'dennis.eichhorn@gdfmbh.com', + 'groups' => ['Executive', 'Finance', 'Controlling', 'Employee'] + ] +]; + +$groups = GroupMapper::getAll(); +foreach ($accounts as $account) { + $response = new Response(); + $request = new Request(new Http('')); + + $request->getHeader()->setAccount(1); + $request->setData('login', $account['login']); + $request->setData('password', $account['pass']); + $request->setData('name1', $account['name1']); + $request->setData('name2', $account['name2']); + $request->setData('email', $account['email']); + $request->setData('type', AccountType::USER); + $request->setData('status', AccountStatus::INACTIVE); + + $module->apiAccountCreate($request, $response); + + $a = $response->get('')['response']; + foreach ($groups as $g) { + if (\in_array($g->getName(), $account['groups'])) { + $response = new Response(); + $request = new Request(new Http('')); + + $request->getHeader()->setAccount($a->getId()); + $request->setData('account', $a->getId()); + $request->setData('igroup-idlist', (string) $g->getId()); + + $module->apiAddGroupToAccount($request, $response); + } + } +} + +/** + * Setup dashboard module + */ +$module = $app->moduleManager->get('Dashboard'); +TestUtils::setMember($module, 'app', $app); + +$response = new Response(); +$request = new Request(new Http('')); + +$request->getHeader()->setAccount(2); +$request->setData('title', 'TestBoard'); +$module->apiBoardCreate($request, $response); + +$request->setData('board', 1); +$request->setData('order', 1); +$request->setData('module', 'News'); +$module->apiComponentCreate($request, $response); + +/** + * Setup helper module + */