This commit is contained in:
Dennis Eichhorn 2024-01-02 23:34:17 +00:00
parent f0f7595137
commit c968275e34
6 changed files with 528 additions and 3 deletions

View File

@ -27,6 +27,216 @@
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004602002,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "IncomeStatement",
"uri": "{/base}/controlling/budget/pl?{?}",
"target": "self",
"icon": null,
"order": 2,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004602003,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "Balance",
"uri": "{/base}/controlling/budget/balance?{?}",
"target": "self",
"icon": null,
"order": 3,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004603001,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "Sales",
"uri": "{/base}/controlling/budget/sales?{?}",
"target": "self",
"icon": null,
"order": 5,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004604001,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "Material",
"uri": "{/base}/controlling/budget/material?{?}",
"target": "self",
"icon": null,
"order": 10,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004605001,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "OPEX",
"uri": "{/base}/controlling/budget/opex?{?}",
"target": "self",
"icon": null,
"order": 15,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004605002,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "Marketing",
"uri": "{/base}/controlling/budget/marketing?{?}",
"target": "self",
"icon": null,
"order": 16,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004605003,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "Event",
"uri": "{/base}/controlling/budget/event?{?}",
"target": "self",
"icon": null,
"order": 17,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004605004,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "Leasing",
"uri": "{/base}/controlling/budget/leasing?{?}",
"target": "self",
"icon": null,
"order": 18,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004606001,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "HR",
"uri": "{/base}/controlling/budget/hr?{?}",
"target": "self",
"icon": null,
"order": 20,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004607001,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "Investment",
"uri": "{/base}/controlling/budget/investment?{?}",
"target": "self",
"icon": null,
"order": 25,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004608001,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "Loan",
"uri": "{/base}/controlling/budget/loan?{?}",
"target": "self",
"icon": null,
"order": 30,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004609001,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "Cashflow",
"uri": "{/base}/controlling/budget/cashflow?{?}",
"target": "self",
"icon": null,
"order": 35,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004610001,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "ProfitCenter",
"uri": "{/base}/controlling/budget/profitcenter?{?}",
"target": "self",
"icon": null,
"order": 40,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
},
{
"id": 1004611001,
"pid": "/controlling/budget",
"type": 3,
"subtype": 1,
"name": "Projects",
"uri": "{/base}/controlling/budget/projects?{?}",
"target": "self",
"icon": null,
"order": 45,
"from": "BudgetManagement",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1004601001,
"children": []
}
]
}

View File

@ -17,4 +17,158 @@ return [
],
],
],
'^.*/controlling/budget/pl.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingIncomeStatement',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/balance.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingBalance',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/sales.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingSales',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/material.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingMaterial',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/opex.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingOpex',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/hr.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingHR',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/investment.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingInvestment',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/loan.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingLoan',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/cashflow.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingCashFlow',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/profitcenter.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingProfitCenter',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/projects.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingProjects',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/marketing.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingMarketing',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/event.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingEvent',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
'^.*/controlling/budget/leasing.*$' => [
[
'dest' => '\Modules\BudgetManagement\Controller\BackendController:viewBudgetingLeasing',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::BUDGET,
],
],
],
];

View File

@ -14,6 +14,8 @@ declare(strict_types=1);
namespace Modules\BudgetManagement\Controller;
use Modules\ItemManagement\Models\Attribute\ItemAttributeMapper;
use Modules\ItemManagement\Models\Attribute\ItemAttributeTypeMapper;
use phpOMS\Contract\RenderableInterface;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
@ -30,7 +32,7 @@ use phpOMS\Views\View;
final class BackendController extends Controller
{
/**
* Routing end-point for application behaviour.
* Routing end-point for application behavior.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
@ -47,6 +49,22 @@ final class BackendController extends Controller
$view->setTemplate('/Modules/BudgetManagement/Theme/Backend/budgeting-dashboard');
$view->data['nav'] = $this->app->moduleManager->get('Navigation')->createNavigationMid(1004601001, $request, $response);
$result = ItemAttributeTypeMapper::getAll()
->with('l11n')
->with('defaults')
->with('defaults/l11n')
->where('name', ['segment', 'section', 'sales_group', 'product_group'], 'IN')
->where('l11n/language', $response->header->l11n->language)
->where('defaults/l11n/language', $response->header->l11n->language)
->execute();
$segmentation = [];
foreach ($result as $seg) {
$segmentation[$seg->name] = $seg;
}
$view->data['segmentation'] = $segmentation;
return $view;
}
}

View File

@ -17,7 +17,7 @@ namespace Modules\BudgetManagement\Models;
use phpOMS\Stdlib\Base\Enum;
/**
* Permision state enum.
* Permission category enum.
*
* @package Modules\BudgetManagement\Models
* @license OMS License 2.0

View File

@ -13,3 +13,147 @@
declare(strict_types=1);
echo $this->data['nav']->render();
?>
<div class="tabview tab-2">
<div class="box">
<ul class="tab-links">
<li><label for="c-tab-1"><?= $this->getHtml('Segments'); ?></label>
<li><label for="c-tab-2"><?= $this->getHtml('Customers'); ?></label>
<li><label for="c-tab-3"><?= $this->getHtml('Monthly'); ?></label>
</ul>
</div>
<div class="tab-content">
<input type="radio" id="c-tab-1" name="tabular-2"<?= $this->request->uri->fragment === 'c-tab-1' ? ' checked' : ''; ?>>
<div class="tab">
<div class="row">
<div class="col-xs-12">
<div style="background: #ff00ff99;">
<div style="display: flex; flex-direction: row;">
<div style="box-sizing: border-box; width: 150px; text-align: center;">Category</div>
<div style="flex: 1; text-align: center;">PY-3</div>
<div style="flex: 1; text-align: center;">PY-2</div>
<div style="flex: 1; text-align: center;">PY-1</div>
<div style="flex: 1; text-align: center;">C</div>
<div style="flex: 1; text-align: center;">B</div>
<div style="flex: 1; text-align: center;">FC</div>
<div style="flex: 1; text-align: center;">B+1</div>
<div style="flex: 1; text-align: center;">B+2</div>
<div style="flex: 1; text-align: center;">B+3</div>
<div style="flex: 1; text-align: center;">B+4</div>
<div style="flex: 1; text-align: center;">B+5</div>
</div>
</div>
</div>
</div>
<?php foreach ($this->data['segmentation']['segment']->defaults as $segment) : ?>
<div class="row">
<div class="col-xs-12">
<div style="display: flex; flex-direction: row; background: #ff000099;">
<div style="box-sizing: border-box; width: 150px; padding-left: 0px;"><label for="iSegment<?= $segment->id; ?>-expand" class="btn"><i class="g-icon">add_circle</i><?= $this->printHtml($segment->l11n); ?></label></div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
</div>
<input id="iSegment<?= $segment->id; ?>-expand" type="checkbox" class="hidden">
<div class="checked-visibility">
<?php foreach ($this->data['segmentation']['section']->defaults as $section) : ?>
<div style="display: flex; flex-direction: row; background: #00ff0099;">
<div style="box-sizing: border-box; width: 150px; padding-left: 10px;"><label for="iSection<?= $section->id; ?>-expand" class="btn"><i class="g-icon">add_circle</i><?= $this->printHtml($section->l11n); ?></label></div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
</div>
<input id="iSection<?= $section->id; ?>-expand" type="checkbox" class="hidden">
<div class="checked-visibility">
<?php foreach ($this->data['segmentation']['sales_group']->defaults as $salesgroup) : ?>
<div style="display: flex; flex-direction: row; background: #0000ff99;">
<div style="box-sizing: border-box; width: 150px; padding-left: 20px;"><label for="iSalesGroup<?= $salesgroup->id; ?>-expand" class="btn"><i class="g-icon">add_circle</i><?= $this->printHtml($salesgroup->l11n); ?></label></div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> +0.00%</div>
</div>
<input id="iSalesGroup<?= $salesgroup->id; ?>-expand" type="checkbox" class="hidden">
<div class="checked-visibility">
<?php foreach ($this->data['segmentation']['product_group']->defaults as $productgroup) : ?>
<div style="display: flex; flex-direction: row; background: #ffff0099;">
<div style="box-sizing: border-box; width: 150px; padding-left: 30px;"><label for="iProductGroup<?= $productgroup->id; ?>-expand" class="btn"><i class="g-icon">add_circle</i><?= $this->printHtml($productgroup->l11n); ?></label></div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> <input type="number" disabled> <input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> <input type="number" disabled> <input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> <input type="number" disabled> <input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> <input type="number" disabled> <input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> <input type="number" disabled> <input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
</div>
<input id="iProductGroup<?= $productgroup->id; ?>-expand" type="checkbox" class="hidden">
<div class="checked-visibility">
<?php foreach ($this->data['items'] ?? [] as $item) : ?>
<div style="display: flex; flex-direction: row; background: #ffffff99;">
<div style="box-sizing: border-box; width: 150px; padding-left: 40px;"><?= $this->printHtml($item->l11n); ?></div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> <input type="number" disabled> <input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> <input type="number" disabled> <input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> <input type="number" disabled> <input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> <input type="number" disabled> <input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number" disabled> <input type="number" disabled> <input type="number" disabled> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
<div style="flex: 1; padding: 1px;"><input type="number"> <input type="number"> <input type="number"> +0.00%</div>
</div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
</div>
<?php endforeach; ?>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
<input type="radio" id="c-tab-2" name="tabular-2"<?= $this->request->uri->fragment === 'c-tab-2' ? ' checked' : ''; ?>>
<div class="tab">
<div class="row">
</div>
</div>
<input type="radio" id="c-tab-3" name="tabular-2"<?= $this->request->uri->fragment === 'c-tab-3' ? ' checked' : ''; ?>>
<div class="tab">
<div class="row">
</div>
</div>
</div>
</div>

View File

@ -14,7 +14,6 @@
"name": "Jingga",
"website": "jingga.app"
},
"description": "Budget Management module.",
"directory": "BudgetManagement",
"dependencies": {
"Controlling": "*"