__DIR__ . '/Install/Media2.install.json']); /** @var int $defaultTemplate */ $defaultTemplate = (int) \reset($media['upload'][0]); /* Bill types */ $fileContent = \file_get_contents(__DIR__ . '/Install/types.json'); if ($fileContent === false) { return; } $types = \json_decode($fileContent, true); self::createBillTypes($app, $types, $defaultTemplate); } /** * Install default bill types * * @param ApplicationAbstract $app Application * @param array $types Bill types * @param int $template Default template * * @return array * * @since 1.0.0 */ private static function createBillTypes(ApplicationAbstract $app, array $types, int $template) : array { $billTypes = []; /** @var \Modules\Billing\Controller\ApiController $module */ $module = $app->moduleManager->getModuleInstance('Billing'); // @todo: allow multiple alternative bill templates // @todo: implement ordering of templates foreach ($types as $type) { $response = new HttpResponse(); $request = new HttpRequest(new HttpUri('')); $request->header->account = 1; $request->setData('name', $type['name'] ?? ''); $request->setData('title', \reset($type['l11n'])); $request->setData('language', \array_keys($type['l11n'])[0] ?? 'en'); $request->setData('number_format', $type['numberFormat'] ?? '{id}'); $request->setData('transfer_stock', $type['transferStock'] ?? false); $request->setData('transfer_type', $type['transferType'] ?? BillTransferType::SALES); $request->setData('template', $template); $module->apiBillTypeCreate($request, $response); $responseData = $response->get(''); if (!\is_array($responseData)) { continue; } $billType = !\is_array($responseData['response']) ? $responseData['response']->toArray() : $responseData['response']; $billTypes[] = $billType; $isFirst = true; foreach ($type['l11n'] as $language => $l11n) { if ($isFirst) { $isFirst = false; continue; } $response = new HttpResponse(); $request = new HttpRequest(new HttpUri('')); $request->header->account = 1; $request->setData('title', $l11n); $request->setData('language', $language); $request->setData('type', $billType['id']); $module->apiBillTypeL11nCreate($request, $response); } } return $billTypes; } }