From 20a23ae678f4b38e06c47232850eb33d729f0108 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 10 Mar 2024 02:24:55 +0000 Subject: [PATCH] bump --- Admin/Routes/Web/Api.php | 143 ++++++++++++++++++++++++++ Admin/Routes/Web/Backend.php | 22 ++++ Controller/ApiController.php | 138 ++++++++++++++++++++++++- Controller/BackendController.php | 131 ++++++++++++++++++++++- Models/AccountAbstract.php | 43 ++++++++ Models/AccountStatus.php | 32 ++++++ Models/NullPosting.php | 47 +++++++++ Models/RequirementType.php | 34 ++++++ Theme/Backend/coa-view.tpl.php | 54 ++++++++++ Theme/Backend/costcenter-list.tpl.php | 6 +- Theme/Backend/costcenter-view.tpl.php | 59 +++++++++++ Theme/Backend/costobject-list.tpl.php | 6 +- Theme/Backend/costobject-view.tpl.php | 58 +++++++++++ 13 files changed, 763 insertions(+), 10 deletions(-) create mode 100644 Admin/Routes/Web/Api.php create mode 100644 Models/AccountStatus.php create mode 100644 Models/NullPosting.php create mode 100644 Models/RequirementType.php create mode 100644 Theme/Backend/coa-view.tpl.php create mode 100644 Theme/Backend/costcenter-view.tpl.php create mode 100644 Theme/Backend/costobject-view.tpl.php diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php new file mode 100644 index 0000000..e23f51f --- /dev/null +++ b/Admin/Routes/Web/Api.php @@ -0,0 +1,143 @@ + [ + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiAccountCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::ACCOUNT, + ], + ], + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiAccountUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::ACCOUNT, + ], + ], + ], + '^.*/accounting/coa/l11n(\?.*|$)' => [ + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiAccountL11nCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::ACCOUNT, + ], + ], + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiAccountL11nUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::ACCOUNT, + ], + ], + ], + + '^.*/accounting/costcenter(\?.*|$)' => [ + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiCostCenterCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::COST_CENTER, + ], + ], + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiCostCenterUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::COST_CENTER, + ], + ], + ], + '^.*/accounting/costcenter/l11n(\?.*|$)' => [ + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiCostCenterL11nCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::COST_CENTER, + ], + ], + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiCostCenterL11nUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::COST_CENTER, + ], + ], + ], + + '^.*/accounting/costobject(\?.*|$)' => [ + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiCostObjectCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::COST_OBJECT, + ], + ], + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiCostObjectUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::COST_OBJECT, + ], + ], + ], + '^.*/accounting/costobject/l11n(\?.*|$)' => [ + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiCostObjectL11nCreate', + 'verb' => RouteVerb::PUT, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::COST_OBJECT, + ], + ], + [ + 'dest' => '\Modules\Accounting\Controller\ApiController:apiCostObjectL11nUpdate', + 'verb' => RouteVerb::SET, + 'permission' => [ + 'module' => ApiController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::COST_OBJECT, + ], + ], + ], +]; diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 95ba8eb..fc7b21e 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -195,6 +195,17 @@ return [ ], ], ], + '^.*/accounting/costcenter/create(\?.*$|$)' => [ + [ + 'dest' => '\Modules\Accounting\Controller\BackendController:viewCostCenterCreate', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::COST_CENTER, + ], + ], + ], '^.*/accounting/costobject/view(\?.*$|$)' => [ [ 'dest' => '\Modules\Accounting\Controller\BackendController:viewCostObjectView', @@ -206,6 +217,17 @@ return [ ], ], ], + '^.*/accounting/costobject/create(\?.*$|$)' => [ + [ + 'dest' => '\Modules\Accounting\Controller\BackendController:viewCostObjectCreate', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::CREATE, + 'state' => PermissionCategory::COST_OBJECT, + ], + ], + ], '^.*/accounting/supplier/list(\?.*$|$)' => [ [ diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 0e4fb1c..76e4130 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -19,8 +19,10 @@ use Modules\Accounting\Models\AccountAbstractMapper; use Modules\Accounting\Models\AccountL11nMapper; use Modules\Accounting\Models\AccountType; use Modules\Accounting\Models\CostCenter; +use Modules\Accounting\Models\CostCenterL11nMapper; use Modules\Accounting\Models\CostCenterMapper; use Modules\Accounting\Models\CostObject; +use Modules\Accounting\Models\CostObjectL11nMapper; use Modules\Accounting\Models\CostObjectMapper; use Modules\Accounting\Models\Posting; use Modules\Accounting\Models\PostingElement; @@ -111,7 +113,7 @@ final class ApiController extends Controller $person = null; /** @var \Modules\Billing\Models\Bill $new */ - if ($new->client !== null) { + if (($new->client?->id ?? 0) !== 0) { $new->client = \Modules\ClientManagement\Models\ClientMapper::get() ->where('id', $new->client->id) ->execute(); @@ -1020,4 +1022,138 @@ final class ApiController extends Controller return []; } + + /** + * Api method to create item attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiCostCenterL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateCostCenterL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $l11n = $this->createCostCenterL11nFromRequest($request); + $this->createModel($request->header->account, $l11n, CostCenterL11nMapper::class, 'account_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $l11n); + } + + /** + * Method to create item attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createCostCenterL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $l11n = new BaseStringL11n(); + $l11n->ref = $request->getDataInt('ref') ?? 0; + $l11n->language = ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? $request->header->l11n->language; + $l11n->content = $request->getDataString('content') ?? ''; + + return $l11n; + } + + /** + * Validate item attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateCostCenterL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['content'] = !$request->hasData('content')) + || ($val['ref'] = !$request->hasData('ref')) + ) { + return $val; + } + + return []; + } + + /** + * Api method to create item attribute l11n + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return void + * + * @api + * + * @since 1.0.0 + */ + public function apiCostObjectL11nCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : void + { + if (!empty($val = $this->validateCostObjectL11nCreate($request))) { + $response->header->status = RequestStatusCode::R_400; + $this->createInvalidCreateResponse($request, $response, $val); + + return; + } + + $l11n = $this->createCostObjectL11nFromRequest($request); + $this->createModel($request->header->account, $l11n, CostObjectL11nMapper::class, 'account_l11n', $request->getOrigin()); + $this->createStandardCreateResponse($request, $response, $l11n); + } + + /** + * Method to create item attribute l11n from request. + * + * @param RequestAbstract $request Request + * + * @return BaseStringL11n + * + * @since 1.0.0 + */ + private function createCostObjectL11nFromRequest(RequestAbstract $request) : BaseStringL11n + { + $l11n = new BaseStringL11n(); + $l11n->ref = $request->getDataInt('ref') ?? 0; + $l11n->language = ISO639x1Enum::tryFromValue($request->getDataString('language')) ?? $request->header->l11n->language; + $l11n->content = $request->getDataString('content') ?? ''; + + return $l11n; + } + + /** + * Validate item attribute l11n create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ + private function validateCostObjectL11nCreate(RequestAbstract $request) : array + { + $val = []; + if (($val['content'] = !$request->hasData('content')) + || ($val['ref'] = !$request->hasData('ref')) + ) { + return $val; + } + + return []; + } } diff --git a/Controller/BackendController.php b/Controller/BackendController.php index bc3296e..8b0f49e 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -15,8 +15,14 @@ declare(strict_types=1); namespace Modules\Accounting\Controller; use Modules\Accounting\Models\AccountAbstractMapper; +use Modules\Accounting\Models\AccountL11nMapper; +use Modules\Accounting\Models\CostCenterL11nMapper; use Modules\Accounting\Models\CostCenterMapper; +use Modules\Accounting\Models\CostObjectL11nMapper; use Modules\Accounting\Models\CostObjectMapper; +use Modules\Accounting\Models\NullAccountAbstract; +use Modules\Accounting\Models\NullCostCenter; +use Modules\Accounting\Models\NullCostObject; use Modules\Auditor\Models\AuditMapper; use Modules\ClientManagement\Models\Attribute\ClientAttributeTypeMapper; use Modules\ClientManagement\Models\ClientMapper; @@ -217,6 +223,43 @@ final class BackendController extends Controller return $view; } + /** + * Routing end-point for application behavior. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewAccountView(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/Accounting/Theme/Backend/coa-view'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1002604001, $request, $response); + + $view->data['account'] = AccountAbstractMapper::get() + ->with('parent') + ->with('l11n') + ->where('id', (int) $request->getData('id')) + ->where('l11n/language', $response->header->l11n->language) + ->execute(); + + $view->data['l11nView'] = new \Web\Backend\Views\L11nView($this->app->l11nManager, $request, $response); + + /** @var \phpOMS\Localization\BaseStringL11n[] $l11nValues */ + $l11nValues = AccountL11nMapper::getAll() + ->where('ref', $view->data['account']->id) + ->execute(); + + $view->data['l11nValues'] = $l11nValues; + + return $view; + } + /** * Routing end-point for application behavior. * @@ -232,9 +275,57 @@ final class BackendController extends Controller public function viewCOACreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface { $view = new View($this->app->l11nManager, $request, $response); - $view->setTemplate('/Modules/Accounting/Theme/Backend/coa-create'); + $view->setTemplate('/Modules/Accounting/Theme/Backend/coa-view'); $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1002604001, $request, $response); + $view->data['account'] = new NullAccountAbstract(); + + return $view; + } + + /** + * Routing end-point for application behavior. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewCostObjectCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/Accounting/Theme/Backend/costobject-view'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1002603001, $request, $response); + + $view->data['costobject'] = new NullCostObject(); + + return $view; + } + + /** + * Routing end-point for application behavior. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param array $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewCostCenterCreate(RequestAbstract $request, ResponseAbstract $response, array $data = []) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/Accounting/Theme/Backend/costcenter-view'); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1002602001, $request, $response); + + $view->data['costcenter'] = new NullCostCenter(); + return $view; } @@ -254,7 +345,23 @@ final class BackendController extends Controller { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Accounting/Theme/Backend/costcenter-view'); - $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1002604001, $request, $response); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1002602001, $request, $response); + + $view->data['costcenter'] = CostCenterMapper::get() + ->with('parent') + ->with('l11n') + ->where('id', (int) $request->getData('id')) + ->where('l11n/language', $response->header->l11n->language) + ->execute(); + + $view->data['l11nView'] = new \Web\Backend\Views\L11nView($this->app->l11nManager, $request, $response); + + /** @var \phpOMS\Localization\BaseStringL11n[] $l11nValues */ + $l11nValues = CostCenterL11nMapper::getAll() + ->where('ref', $view->data['costcenter']->id) + ->execute(); + + $view->data['l11nValues'] = $l11nValues; return $view; } @@ -275,7 +382,25 @@ final class BackendController extends Controller { $view = new View($this->app->l11nManager, $request, $response); $view->setTemplate('/Modules/Accounting/Theme/Backend/costobject-view'); - $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1002604001, $request, $response); + $view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1002603001, $request, $response); + + $view->data['costobject'] = CostObjectMapper::get() + ->with('parent') + ->with('l11n') + ->where('id', (int) $request->getData('id')) + ->where('l11n/language', $response->header->l11n->language) + ->execute(); + + $view->data['l11nView'] = new \Web\Backend\Views\L11nView($this->app->l11nManager, $request, $response); + + /** @var \phpOMS\Localization\BaseStringL11n[] $l11nValues */ + $l11nValues = CostObjectL11nMapper::getAll() + ->where('ref', $view->data['costobject']->id) + ->execute(); + + $view->data['l11nValues'] = $l11nValues; + + return $view; return $view; } diff --git a/Models/AccountAbstract.php b/Models/AccountAbstract.php index b8e8eaf..b3490d4 100755 --- a/Models/AccountAbstract.php +++ b/Models/AccountAbstract.php @@ -55,6 +55,49 @@ class AccountAbstract */ public ?int $summaryAccount = null; + // Tax accounts can be defined in: + // 1. Account (gross postings are automatically split) + // 2. Tax code + // 3. Tax combination + public ?int $taxAccount1 = null; + + public ?int $taxAccount2 = null; + + public int $taxCodeRequirement = RequirementType::ALLOWED; + public ?int $defaultTaxCode = null; + public ?int $mandatoryTaxCode = null; + + public int $costCenterRequirement = RequirementType::ALLOWED; + public ?int $defaultCostCenter = null; + public ?int $mandatoryCostCenter = null; + + public int $costObjectRequirement = RequirementType::ALLOWED; + public ?int $defaultCostObject = null; + public ?int $mandatoryCostObject = null; + + // Indicators and report position for different reports (e.g. EÜR, ZM, UVA, OSS) + public array $reportIndicators = []; + + public bool $manualPosting = true; + + public string $currency = ''; + + public bool $isConfidential = false; + + public bool $isMoneyAccount = false; + + public bool $isCashflowAccount = false; + + public bool $hasOpenPositions = false; + + public bool $createOpeningBalancePosting = false; + + public int $status = AccountStatus::ACTIVE; + + public ?\DateTime $start = null; + + public ?\DateTime $end = null; + /** * Type. * diff --git a/Models/AccountStatus.php b/Models/AccountStatus.php new file mode 100644 index 0000000..b87e108 --- /dev/null +++ b/Models/AccountStatus.php @@ -0,0 +1,32 @@ +id = $id; + parent::__construct(); + } + + /** + * {@inheritdoc} + */ + public function jsonSerialize() : mixed + { + return ['id' => $this->id]; + } +} diff --git a/Models/RequirementType.php b/Models/RequirementType.php new file mode 100644 index 0000000..90abe28 --- /dev/null +++ b/Models/RequirementType.php @@ -0,0 +1,34 @@ +data['account']; + +$isNew = $account->id === 0; + +/** @var \phpOMS\Views\View $this */ +echo $this->data['nav']->render(); ?> +
+
+
+
+
getHtml('Account'); ?>
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ +
+
+
+
+
+ + +
+ data['l11nView']->render( + $this->data['l11nValues'], + [], + '{/api}accounting/coa/l11n' + ); + ?> +
+ \ No newline at end of file diff --git a/Theme/Backend/costcenter-list.tpl.php b/Theme/Backend/costcenter-list.tpl.php index 73e3884..9ae5af1 100755 --- a/Theme/Backend/costcenter-list.tpl.php +++ b/Theme/Backend/costcenter-list.tpl.php @@ -20,8 +20,8 @@ use phpOMS\Uri\UriFactory; */ $costcenter = $this->data['costcenter']; -$previous = empty($costcenter) ? '{/base}/tag/list' : '{/base}/tag/list?{?}&id=' . \reset($costcenter)->id . '&ptype=p'; -$next = empty($costcenter) ? '{/base}/tag/list' : '{/base}/tag/list?{?}&id=' . \end($costcenter)->id . '&ptype=n'; +$previous = empty($costcenter) ? '{/base}/accounting/costcenter/list' : '{/base}/accounting/costcenter/list?{?}&id=' . \reset($costcenter)->id . '&ptype=p'; +$next = empty($costcenter) ? '{/base}/accounting/costcenter/list' : '{/base}/accounting/costcenter/list?{?}&id=' . \end($costcenter)->id . '&ptype=n'; echo $this->data['nav']->render(); ?>
@@ -35,7 +35,7 @@ echo $this->data['nav']->render(); ?> getHtml('Name'); ?> $value) : ++$count; - $url = UriFactory::build('{/base}/tag/view?{?}&id=' . $value->id); ?> + $url = UriFactory::build('{/base}/accounting/costcenter/view?{?}&id=' . $value->id); ?> printHtml($value->code); ?> diff --git a/Theme/Backend/costcenter-view.tpl.php b/Theme/Backend/costcenter-view.tpl.php new file mode 100644 index 0000000..c66448a --- /dev/null +++ b/Theme/Backend/costcenter-view.tpl.php @@ -0,0 +1,59 @@ +data['costcenter']; + +$isNew = $costcenter->id === 0; + + +/** @var \phpOMS\Views\View $this */ +echo $this->data['nav']->render(); ?> +
+
+
+
+
getHtml('CostCenter'); ?>
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ + + + + +
+
+
+
+
+ + +
+ data['l11nView']->render( + $this->data['l11nValues'], + [], + '{/api}accounting/costcenter/l11n' + ); + ?> +
+ \ No newline at end of file diff --git a/Theme/Backend/costobject-list.tpl.php b/Theme/Backend/costobject-list.tpl.php index 2be90e5..4177a6a 100755 --- a/Theme/Backend/costobject-list.tpl.php +++ b/Theme/Backend/costobject-list.tpl.php @@ -20,8 +20,8 @@ use phpOMS\Uri\UriFactory; */ $costobject = $this->data['costobject']; -$previous = empty($costobject) ? '{/base}/tag/list' : '{/base}/tag/list?{?}&id=' . \reset($costobject)->id . '&ptype=p'; -$next = empty($costobject) ? '{/base}/tag/list' : '{/base}/tag/list?{?}&id=' . \end($costobject)->id . '&ptype=n'; +$previous = empty($costobject) ? '{/base}/accounting/costobject/list' : '{/base}/accounting/costobject/list?{?}&id=' . \reset($costobject)->id . '&ptype=p'; +$next = empty($costobject) ? '{/base}/accounting/costobject/list' : '{/base}/accounting/costobject/list?{?}&id=' . \end($costobject)->id . '&ptype=n'; echo $this->data['nav']->render(); ?>
@@ -35,7 +35,7 @@ echo $this->data['nav']->render(); ?> getHtml('Name'); ?> $value) : ++$count; - $url = UriFactory::build('{/base}/tag/view?{?}&id=' . $value->id); ?> + $url = UriFactory::build('{/base}/accounting/costobject/view?{?}&id=' . $value->id); ?> printHtml($value->code); ?> diff --git a/Theme/Backend/costobject-view.tpl.php b/Theme/Backend/costobject-view.tpl.php new file mode 100644 index 0000000..4c4f78f --- /dev/null +++ b/Theme/Backend/costobject-view.tpl.php @@ -0,0 +1,58 @@ +data['costobject']; + +$isNew = $costobject->id === 0; + +/** @var \phpOMS\Views\View $this */ +echo $this->data['nav']->render(); ?> +
+
+
+
+
getHtml('CostCenter'); ?>
+
+
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+
+
+ + + + + +
+
+
+
+
+ + +
+ data['l11nView']->render( + $this->data['l11nValues'], + [], + '{/api}accounting/costobject/l11n' + ); + ?> +
+ \ No newline at end of file