moduleManager->get('Balance', 'Api'); $structures = \scandir(__DIR__ . '/Install/Coa'); if ($structures === false) { return; } foreach ($structures as $file) { if ($file === '..' || $file === '.') { continue; } $response = new HttpResponse(); $request = new HttpRequest(); $request->header->account = 1; $request->setData('code', \strtolower(\basename($file, '.json'))); $request->setData('name', \strtr(\basename($file, '.json'), '_', ' ')); $module->apiBalanceCreate($request, $response); $responseData = $response->getDataArray(''); $balance = \is_array($responseData['response']) ? $responseData['response'] : $responseData['response']->toArray(); $fileContent = \file_get_contents(__DIR__ . '/Install/Coa/' . $file); if ($fileContent === false) { return; } /** @var array $json */ $json = \json_decode($fileContent, true); self::createElement($module, $json, (int) $balance['id'], null); } } /** * Create balance element * * @param ApiController $module Module * @param array $elements Elements to create * @param int $structure Structure the elements belong to * @param null|int $parent Parent element (null = none) * * @return void * * @since 1.0.0 */ private static function createElement(ApiController $module, array $elements, int $structure, ?int $parent = null) : void { $order = 0; foreach ($elements as $element) { ++$order; $response = new HttpResponse(); $request = new HttpRequest(); $request->header->account = 1; $request->setData('code', $element['name']); $request->setData('content', \reset($element['l11n'])); $request->setData('language', \array_keys($element['l11n'])[0] ?? 'en'); $request->setData('formula', $element['formula']); $request->setData('type', $element['type']); $request->setData('style', $element['style']); $request->setData('balance', $structure); $request->setData('order', $order); $request->setData('expanded', $element['expanded'] ?? false); if ($parent !== null) { $request->setData('parent', $parent); } if (!empty($element['account'])) { /** @var AccountAbstract[] $accountObjects */ $accountObjects = AccountAbstractMapper::getAll() ->where('code', \array_map(function($account) { return (string) $account; }, $element['account']), 'IN') ->executeGetArray(); $request->setData('accounts', \implode(',', \array_map(function (AccountAbstract $account) : int { return $account->id; }, $accountObjects) )); } $module->apiBalanceElementCreate($request, $response); $responseData = $response->getDataArray(''); $balanceElement = \is_array($responseData['response']) ? $responseData['response'] : $responseData['response']->toArray(); $isFirst = true; foreach ($element['l11n'] as $language => $l11n) { if ($isFirst) { $isFirst = false; continue; } $response = new HttpResponse(); $request = new HttpRequest(); $request->header->account = 1; $request->setData('content', $l11n); $request->setData('language', $language); $request->setData('ref', $balanceElement['id']); $module->apiBalanceElementL11nCreate($request, $response); } if (!empty($element['children'])) { self::createElement($module, $element['children'], $structure, $balanceElement['id']); } } } }