draft costcenter/costobject usage

This commit is contained in:
Dennis Eichhorn 2020-07-05 22:02:29 +02:00
parent 03a44adeee
commit 6565c119ec
29 changed files with 2099 additions and 8 deletions

35
.github/dev_bug_report.md vendored Executable file
View File

@ -0,0 +1,35 @@
---
name: Dev Bug Report
about: Create a report to help us improve
title: ''
labels: stat_backlog, type_bug
assignees: ''
---
# Bug Description
A clear and concise description of what the bug is.
# How to Reproduce
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
## Minimal Code Example
```
// your code ...
```
# Expected Behavior
A clear and concise description of what you expected to happen.
# Screenshots
If applicable, add screenshots to help explain your problem.
# Additional Information
Add any other context about the problem here.

18
.github/dev_feature_request.md vendored Executable file
View File

@ -0,0 +1,18 @@
---
name: Dev Feature Request
about: Suggest an idea for this project
title: ''
labels: stat_backlog, type_feature
assignees: ''
---
# What is the feature you request
* A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
* A clear and concise description of what you want to happen.
# Alternatives
A clear and concise description of any alternative solutions or features you've considered.
# Additional Information
Add any other context or screenshots about the feature request here.

34
.github/user_bug_report.md vendored Executable file
View File

@ -0,0 +1,34 @@
---
name: User Bug Report
about: Create a report to help us improve
title: ''
labels: stat_backlog, type_bug
assignees: ''
---
# Bug Description
A clear and concise description of what the bug is.
# How to Reproduce
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
# Expected Behavior
A clear and concise description of what you expected to happen.
# Screenshots
If applicable, add screenshots to help explain your problem.
# System Information
- System: [e.g. PC or iPhone11, ...]
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Orange Management Version [e.g. 22]
# Additional Information
Add any other context about the problem here.

18
.github/user_feature_request.md vendored Executable file
View File

@ -0,0 +1,18 @@
---
name: User Feature Request
about: Suggest an idea for this project
title: ''
labels: stat_backlog, type_feature
assignees: ''
---
# What is the feature you request
* A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
* A clear and concise description of what you want to happen.
# Alternatives
A clear and concise description of any alternative solutions or features you've considered.
# Additional Information
Add any other context or screenshots about the feature request here.

13
.github/workflows/greetings.yml vendored Executable file
View File

@ -0,0 +1,13 @@
name: Greetings
on: [pull_request, issues]
jobs:
greeting:
runs-on: ubuntu-latest
steps:
- uses: actions/first-interaction@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-message: 'Thank you for createing this issue. We will check it as soon as possible.'
pr-message: 'Thank you for your pull request. We will check it as soon as possible.'

24
.github/workflows/image.yml vendored Executable file
View File

@ -0,0 +1,24 @@
name: Compress images
on:
push:
paths:
- '**.jpg'
- '**.png'
- '**.webp'
pull_request:
paths:
- '**.jpg'
- '**.png'
- '**.webp'
jobs:
build:
name: calibreapp/image-actions
runs-on: ubuntu-latest
steps:
- name: Checkout Repo
uses: actions/checkout@master
- name: Compress Images
uses: calibreapp/image-actions@master
with:
githubToken: ${{ secrets.GITHUB_TOKEN }}

118
.github/workflows/main.yml vendored Executable file
View File

@ -0,0 +1,118 @@
name: CI/CD
on: [push]
jobs:
autoformat:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, 'NO_CI')"
strategy:
fail-fast: false
max-parallel: 3
steps:
- name: Checkout Repository
uses: actions/checkout@master
with:
fetch-depth: 1
- name: Get Composer Cache Directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache dependencies
uses: actions/cache@v1
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
- name: Setup Composer
run: composer install
- name: Autoformat
run: 'vendor/bin/php-cs-fixer fix ./ --rules=''{"array_syntax": {"syntax": "short"}, "blank_line_after_namespace": true, "cast_spaces": {"space": "single"}, "combine_consecutive_issets": true, "compact_nullable_typehint": true, "declare_strict_types": true, "elseif": true, "encoding": true, "explicit_indirect_variable": true, "explicit_string_variable": true, "function_to_constant": true, "implode_call": true, "increment_style": {"style": "pre"}, "is_null": {"use_yoda_style": false}, "line_ending": true, "logical_operators": true, "lowercase_cast": true, "lowercase_constants": true, "lowercase_keywords": true, "modernize_types_casting": true, "native_constant_invocation": true, "native_function_casing": true, "native_function_invocation": true, "new_with_braces": true, "no_alias_functions": true, "no_closing_tag": true, "no_empty_comment": true, "no_empty_phpdoc": true, "no_empty_statement": true, "no_homoglyph_names": true, "no_mixed_echo_print": {"use": "echo"}, "no_php4_constructor": true, "no_singleline_whitespace_before_semicolons": true, "no_spaces_inside_parenthesis": true, "no_trailing_whitespace": true, "no_unneeded_final_method": true, "no_unused_imports": true, "no_useless_return": true, "no_whitespace_before_comma_in_array": true, "no_whitespace_in_blank_line": true, "non_printable_character": true, "ordered_imports": {"sort_algorithm": "alpha"}, "php_unit_construct": true, "php_unit_internal_class": true, "php_unit_ordered_covers": true, "php_unit_set_up_tear_down_visibility": true, "phpdoc_align": {"align": "vertical"}, "phpdoc_annotation_without_dot": true, "phpdoc_scalar": true, "phpdoc_trim_consecutive_blank_line_separation": true, "random_api_migration": true, "self_accessor": true, "set_type_to_cast": true, "short_scalar_cast": true, "single_blank_line_at_eof": true, "single_line_after_imports": true, "standardize_increment": true, "trailing_comma_in_multiline_array": true, "trim_array_spaces": true, "visibility_required": true, "void_return": true}'' --allow-risky=yes'
- name: Check for modified files
id: git-check
run: echo ::set-output name=modified::$(if git diff-index --quiet HEAD --; then echo "false"; else echo "true"; fi)
- name: Push changes
if: steps.git-check.outputs.modified == 'true'
run: |
git config --global user.name 'Formatter Bot'
git config --global user.email 'formatter.bot@orange-management.email'
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
git commit -am "Automated formatting changes"
git push
codestyle-tests:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, 'NO_CI')"
strategy:
fail-fast: false
max-parallel: 3
matrix:
php-versions: ['7.4']
steps:
- name: Checkout Repository
uses: actions/checkout@master
with:
fetch-depth: 1
- name: Checkout Build Repository
uses: actions/checkout@master
with:
fetch-depth: 1
ref: develop
repository: Orange-Management/Build
path: Build
- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@master
with:
php-version: ${{ matrix.php-versions }}
extensions: mbstring, gd, zip, dom, mysql, pgsql, sqlite, imap, bcmath, redis, memcached
ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1
- name: Get Composer Cache Directory
id: composer-cache
run: echo "::set-output name=dir::$(composer config cache-files-dir)"
- name: Cache dependencies
uses: actions/cache@v1
with:
path: ${{ steps.composer-cache.outputs.dir }}
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: ${{ runner.os }}-composer-
- name: Setup Composer
run: composer install
- name: phpcs
run: vendor/bin/phpcs ./ --standard="Build/Config/phpcs.xml" -s --report=full
custom:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, 'NO_CI')"
strategy:
fail-fast: false
max-parallel: 3
matrix:
php-versions: ['7.4', '8.0']
steps:
- name: Checkout Repository
uses: actions/checkout@master
with:
fetch-depth: 1
- name: Checkout Build Repository
uses: actions/checkout@master
with:
fetch-depth: 1
ref: develop
repository: Orange-Management/Build
path: Build
- name: Setup PHP, with composer and extensions
uses: shivammathur/setup-php@master
with:
php-version: ${{ matrix.php-versions }}
extensions: mbstring, gd, zip, dom, mysql, pgsql, sqlite, imap, bcmath, redis, memcached
ini-values: opcache.jit_buffer_size=256M, opcache.jit=1235, pcre.jit=1
- name: PHP linting
run: find ./ -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | (! grep -v "No syntax errors detected" )
- name: Php strict
run: if [[ $(grep -r -L "declare(strict_types=1);" --include=*.php --exclude={*.tpl.php,*Hooks.php,*Routes.php,*SearchCommands.php} ./) -ne "" ]]; then exit 1; fi
- name: Html inspection
run: |
if [[ $(find ./ -name "*tpl.php" | xargs grep -E '=\"[\#\$\%\^\&\*\(\)\\/\ ]*\"') -ne "" ]]; then exit 1; fi
if [[ $(find ./ -name "*tpl.php" | xargs grep -P '(\<img)((?!.*?alt=).)*(>)') -ne "" ]]; then exit 1; fi
- name: Js strict
run: if [[ $(grep -r -L "\"use strict\";" --include=*.js ./) -ne "" ]]; then exit 1; fi
- name: Js inspection
run: |
if [[ $(grep -rlni "onafterprint=\|onbeforeprint=\|onbeforeunload=\|onerror=\|onhaschange=\|onload=\|onmessage=\|onoffline=\|ononline=\|onpagehide=\|onpageshow=\|onpopstate=\|onredo=\|onresize=\|onstorage=\|onund=o\|onunload=\|onblur=\|onchage=\|oncontextmenu=\|onfocus=\|onformchange=\|onforminput=\|oninput=\|oninvalid=\|onreset=\|onselect=\|onsubmit=\|onkeydown=\|onkeypress=\|onkeyup=\|onclick=\|ondblclic=k\|ondrag=\|ondragend=\|ondragenter=\|ondragleave=\|ondragover=\|ondragstart=\|ondrop=\|onmousedown=\|onmousemove=\|onmouseout=\|onmouseover=\|onmouseup=\|onmousewheel=\|onscroll=\|onabor=t\|oncanplay=\|oncanplaythrough=\|ondurationchange=\|onemptied=\|onended=\|onerror=\|onloadeddata=\|onloadedmetadata=\|onloadstart=\|onpause=\|onplay=\|onplaying=\|onprogress=\|onratechange=\|onreadystatechange=\|onseeked=\|onseeking=\|onstalled=\|onsuspend=\|ontimeupdate=\|onvolumechange=" --include=*.js ./) -ne "" ]]; then exit 1; fi

View File

@ -18,8 +18,8 @@
"pid": "/", "pid": "/",
"type": 2, "type": 2,
"subtype": 1, "subtype": 1,
"name": "Accounts", "name": "CostCenters",
"uri": "{/prefix}accounting/gl/list", "uri": "{/prefix}accounting/costcenter/list",
"target": "self", "target": "self",
"icon": null, "icon": null,
"order": 5, "order": 5,
@ -33,7 +33,7 @@
"type": 3, "type": 3,
"subtype": 1, "subtype": 1,
"name": "List", "name": "List",
"uri": "{/prefix}accounting/gl/list", "uri": "{/prefix}accounting/costcenter/list",
"target": "self", "target": "self",
"icon": null, "icon": null,
"order": 1, "order": 1,
@ -48,7 +48,7 @@
"type": 3, "type": 3,
"subtype": 1, "subtype": 1,
"name": "Create", "name": "Create",
"uri": "{/prefix}accounting/gl/create?{?}", "uri": "{/prefix}accounting/costcenter/create?{?}",
"target": "self", "target": "self",
"icon": null, "icon": null,
"order": 5, "order": 5,
@ -59,6 +59,98 @@
} }
] ]
}, },
{
"id": 1002603001,
"pid": "/",
"type": 2,
"subtype": 1,
"name": "CostObjects",
"uri": "{/prefix}accounting/costobject/list",
"target": "self",
"icon": null,
"order": 5,
"from": "Accounting",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1002601001,
"children": [
{
"id": 1002603101,
"pid": "/accounting",
"type": 3,
"subtype": 1,
"name": "List",
"uri": "{/prefix}accounting/costobject/list",
"target": "self",
"icon": null,
"order": 1,
"from": "Accounting",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1002603001,
"children": []
},
{
"id": 1002603201,
"pid": "/accounting",
"type": 3,
"subtype": 1,
"name": "Create",
"uri": "{/prefix}accounting/costobject/create?{?}",
"target": "self",
"icon": null,
"order": 5,
"from": "Accounting",
"permission": { "permission": 4, "type": null, "element": null },
"parent": 1002603001,
"children": []
}
]
},
{
"id": 1002604001,
"pid": "/",
"type": 2,
"subtype": 1,
"name": "Accounts",
"uri": "{/prefix}accounting/gl/list",
"target": "self",
"icon": null,
"order": 5,
"from": "Accounting",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1002601001,
"children": [
{
"id": 1002604101,
"pid": "/accounting",
"type": 3,
"subtype": 1,
"name": "List",
"uri": "{/prefix}accounting/gl/list",
"target": "self",
"icon": null,
"order": 1,
"from": "Accounting",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1002604001,
"children": []
},
{
"id": 1002604201,
"pid": "/accounting",
"type": 3,
"subtype": 1,
"name": "Create",
"uri": "{/prefix}accounting/gl/create?{?}",
"target": "self",
"icon": null,
"order": 5,
"from": "Accounting",
"permission": { "permission": 4, "type": null, "element": null },
"parent": 1002604001,
"children": []
}
]
},
{ {
"id": 1002605001, "id": 1002605001,
"pid": "/", "pid": "/",

View File

@ -32,6 +32,129 @@
} }
} }
}, },
"accounting_costcenter": {
"name": "accounting_costcenter",
"fields": {
"accounting_costcenter_id": {
"name": "accounting_costcenter_id",
"type": "INT",
"null": false,
"primary": true,
"autoincrement": true
},
"accounting_costcenter_code": {
"name": "accounting_costcenter_code",
"type": "VARCHAR(255)",
"null": false
},
"accounting_costcenter_parent": {
"name": "accounting_costcenter_parent",
"type": "INT",
"default": null,
"null": true
}
}
},
"accounting_costcenter_l11n": {
"name": "accounting_costcenter_l11n",
"fields": {
"accounting_costcenter_l11n_id": {
"name": "accounting_costcenter_l11n_id",
"type": "INT",
"null": false,
"primary": true,
"autoincrement": true
},
"accounting_costcenter_l11n_name": {
"name": "accounting_costcenter_l11n_name",
"type": "VARCHAR(255)",
"null": false
},
"accounting_costcenter_l11n_description": {
"name": "accounting_costcenter_l11n_description",
"type": "VARCHAR(255)",
"null": false
},
"accounting_costcenter_l11n_costcenter": {
"name": "accounting_costcenter_l11n_costcenter",
"type": "INT",
"null": false,
"foreignTable": "accounting_costcenter",
"foreignKey": "accounting_costcenter_id"
},
"accounting_costcenter_l11n_language": {
"name": "accounting_costcenter_l11n_language",
"type": "VARCHAR(2)",
"default": null,
"null": true,
"foreignTable": "language",
"foreignKey": "language_639_1"
}
}
},
"accounting_costobject": {
"name": "accounting_costobject",
"fields": {
"accounting_costobject_id": {
"name": "accounting_costobject_id",
"type": "INT",
"null": false,
"primary": true,
"autoincrement": true
},
"accounting_costobject_code": {
"name": "accounting_costobject_code",
"type": "VARCHAR(255)",
"null": false
},
"accounting_costobject_parent": {
"name": "accounting_costobject_parent",
"type": "INT",
"default": null,
"null": true
}
}
},
"accounting_costobject_l11n": {
"name": "accounting_costobject_l11n",
"fields": {
"accounting_costobject_l11n_id": {
"name": "accounting_costobject_l11n_id",
"type": "INT",
"null": false,
"primary": true,
"autoincrement": true
},
"accounting_costobject_l11n_name": {
"name": "accounting_costobject_l11n_name",
"type": "VARCHAR(255)",
"null": false
},
"accounting_costobject_l11n_description": {
"name": "accounting_costobject_l11n_description",
"type": "VARCHAR(255)",
"null": false
},
"accounting_costobject_l11n_costobject": {
"name": "accounting_costobject_l11n_costobject",
"type": "INT",
"null": false,
"foreignTable": "accounting_costobject",
"foreignKey": "accounting_costobject_id"
},
"accounting_costobject_l11n_language": {
"name": "accounting_costobject_l11n_language",
"type": "VARCHAR(2)",
"default": null,
"null": true,
"foreignTable": "language",
"foreignKey": "language_639_1"
}
}
},
"accounting_batch": { "accounting_batch": {
"name": "accounting_batch", "name": "accounting_batch",
"fields": { "fields": {

View File

@ -182,4 +182,27 @@ return [
], ],
], ],
], ],
'^.*/accounting/costcenter/list.*$' => [
[
'dest' => '\Modules\Accounting\Controller\BackendController:viewCostCenterList',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::COST_CENTER,
],
],
],
'^.*/accounting/costobject/list.*$' => [
[
'dest' => '\Modules\Accounting\Controller\BackendController:viewCostObjectList',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::COST_OBJECT,
],
],
],
]; ];

View File

@ -14,6 +14,8 @@ declare(strict_types=1);
namespace Modules\Accounting\Controller; namespace Modules\Accounting\Controller;
use Modules\Accounting\Models\CostCenterMapper;
use Modules\Accounting\Models\CostObjectMapper;
use phpOMS\Contract\RenderableInterface; use phpOMS\Contract\RenderableInterface;
use phpOMS\Message\RequestAbstract; use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract; use phpOMS\Message\ResponseAbstract;
@ -192,7 +194,7 @@ final class BackendController extends Controller
{ {
$view = new View($this->app->l11nManager, $request, $response); $view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/Accounting/Theme/Backend/gl-list'); $view->setTemplate('/Modules/Accounting/Theme/Backend/gl-list');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002602001, $request, $response)); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002604001, $request, $response));
return $view; return $view;
} }
@ -213,7 +215,7 @@ final class BackendController extends Controller
{ {
$view = new View($this->app->l11nManager, $request, $response); $view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/Accounting/Theme/Backend/gl-create'); $view->setTemplate('/Modules/Accounting/Theme/Backend/gl-create');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002602001, $request, $response)); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002604001, $request, $response));
return $view; return $view;
} }
@ -234,8 +236,84 @@ final class BackendController extends Controller
{ {
$view = new View($this->app->l11nManager, $request, $response); $view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/Accounting/Theme/Backend/gl-profile'); $view->setTemplate('/Modules/Accounting/Theme/Backend/gl-profile');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002604001, $request, $response));
return $view;
}
/**
* Routing end-point for application behaviour.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewCostCenterList(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/Accounting/Theme/Backend/costcenter-list');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002602001, $request, $response)); $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002602001, $request, $response));
if ($request->getData('ptype') === '-') {
$view->setData('costcenter',
CostCenterMapper::withConditional('language', $response->getHeader()->getL11n()->getLanguage())
::getBeforePivot((int) ($request->getData('id') ?? 0), null, 25)
);
} elseif ($request->getData('ptype') === '+') {
$view->setData('costcenter',
CostCenterMapper::withConditional('language', $response->getHeader()->getL11n()->getLanguage())
::getAfterPivot((int) ($request->getData('id') ?? 0), null, 25)
);
} else {
$view->setData('costcenter',
CostCenterMapper::withConditional('language', $response->getHeader()->getL11n()->getLanguage())
::getAfterPivot(0, null, 25)
);
}
return $view;
}
/**
* Routing end-point for application behaviour.
*
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return RenderableInterface
*
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewCostObjectList(RequestAbstract $request, ResponseAbstract $response, $data = null) : RenderableInterface
{
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/Accounting/Theme/Backend/costobject-list');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002603001, $request, $response));
if ($request->getData('ptype') === '-') {
$view->setData('costobject',
CostObjectMapper::withConditional('language', $response->getHeader()->getL11n()->getLanguage())
::getBeforePivot((int) ($request->getData('id') ?? 0), null, 25)
);
} elseif ($request->getData('ptype') === '+') {
$view->setData('costobject',
CostObjectMapper::withConditional('language', $response->getHeader()->getL11n()->getLanguage())
::getAfterPivot((int) ($request->getData('id') ?? 0), null, 25)
);
} else {
$view->setData('costobject',
CostObjectMapper::withConditional('language', $response->getHeader()->getL11n()->getLanguage())
::getAfterPivot(0, null, 25)
);
}
return $view; return $view;
} }
} }

184
Models/CostCenter.php Normal file
View File

@ -0,0 +1,184 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\Models;
/**
* Cost center class.
*
* @package Modules\Accounting\Models
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
class CostCenter
{
/**
* ID.
*
* @var int
* @since 1.0.0
*/
protected int $id = 0;
/**
* Code.
*
* @var string
* @since 1.0.0
*/
private string $code = '';
/**
* Localization.
*
* @var L11nCostCenter
* @since 1.0.0
*/
private L11nCostCenter $l11n;
/**
* Parent.
*
* @var null|int|CostCenter
* @since 1.0.0
*/
private $parent = null;
/**
* Constructor.
*
* @since 1.0.0
*/
public function __construct()
{
$this->l11n = new L11nCostCenter();
}
/**
* Get balance id
*
* @return int
*
* @since 1.0.0
*/
public function getId() : int
{
return $this->id;
}
/**
* Set code
*
* @param string $code Balance code
*
* @return void
*
* @since 1.0.0
*/
public function setCode(string $code) : void
{
$this->code = $code;
}
/**
* Get code
*
* @return string
*
* @since 1.0.0
*/
public function getCode() : string
{
return $this->code;
}
/**
* Set name
*
* @param string $name Balance name
*
* @return void
*
* @since 1.0.0
*/
public function setName(string $name) : void
{
$this->l11n->setName($name);
}
/**
* Get name
*
* @return string
*
* @since 1.0.0
*/
public function getName() : string
{
return $this->l11n->getName();
}
/**
* Set description
*
* @param string $description Balance description
*
* @return void
*
* @since 1.0.0
*/
public function setDescription(string $description) : void
{
$this->l11n->setDescription($description);
}
/**
* Get description
*
* @return string
*
* @since 1.0.0
*/
public function getDescription() : string
{
return $this->l11n->getDescription();
}
/**
* Set parent
*
* @param string $parent Parent
*
* @return void
*
* @since 1.0.0
*/
public function setParent($parent) : void
{
$this->parent = $parent;
}
/**
* Get parent
*
* @return mixed
*
* @since 1.0.0
*/
public function getParent()
{
return $this->parent;
}
}

View File

@ -0,0 +1,79 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\Models;
use phpOMS\DataStorage\Database\DataMapperAbstract;
/**
* Accounting mapper class.
*
* @package Modules\Accounting\Models
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
final class CostCenterMapper extends DataMapperAbstract
{
/**
* Columns.
*
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0
*/
protected static array $columns = [
'accounting_costcenter_id' => ['name' => 'accounting_costcenter_id', 'type' => 'int', 'internal' => 'id'],
'accounting_costcenter_code' => ['name' => 'accounting_costcenter_code', 'type' => 'string', 'internal' => 'code'],
];
/**
* Has many relation.
*
* @var array<string, array{mapper:string, table:string, self?:?string, external?:?string, column?:string}>
* @since 1.0.0
*/
protected static array $hasMany = [
'l11n' => [
'mapper' => L11nCostCenterMapper::class,
'table' => 'accounting_costcenter_l11n',
'external' => 'accounting_costcenter_l11n_costcenter',
'conditional' => true,
'self' => null,
],
];
/**
* Model to use by the mapper.
*
* @var string
* @since 1.0.0
*/
protected static string $model = CostCenter::class;
/**
* Primary table.
*
* @var string
* @since 1.0.0
*/
protected static string $table = 'accounting_costcenter';
/**
* Primary field name.
*
* @var string
* @since 1.0.0
*/
protected static string $primaryField = 'accounting_costcenter_id';
}

184
Models/CostObject.php Normal file
View File

@ -0,0 +1,184 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\Models;
/**
* Cost object class.
*
* @package Modules\Accounting\Models
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
class CostObject
{
/**
* ID.
*
* @var int
* @since 1.0.0
*/
protected int $id = 0;
/**
* Code.
*
* @var string
* @since 1.0.0
*/
private string $code = '';
/**
* Localization.
*
* @var L11nCostObject
* @since 1.0.0
*/
private L11nCostObject $l11n;
/**
* Parent.
*
* @var null|int|CostObject
* @since 1.0.0
*/
private $parent = null;
/**
* Constructor.
*
* @since 1.0.0
*/
public function __construct()
{
$this->l11n = new L11nCostObject();
}
/**
* Get balance id
*
* @return int
*
* @since 1.0.0
*/
public function getId() : int
{
return $this->id;
}
/**
* Set code
*
* @param string $code Balance code
*
* @return void
*
* @since 1.0.0
*/
public function setCode(string $code) : void
{
$this->code = $code;
}
/**
* Get code
*
* @return string
*
* @since 1.0.0
*/
public function getCode() : string
{
return $this->code;
}
/**
* Set name
*
* @param string $name Balance name
*
* @return void
*
* @since 1.0.0
*/
public function setName(string $name) : void
{
$this->l11n->setName($name);
}
/**
* Get name
*
* @return string
*
* @since 1.0.0
*/
public function getName() : string
{
return $this->l11n->getName();
}
/**
* Set description
*
* @param string $description Balance description
*
* @return void
*
* @since 1.0.0
*/
public function setDescription(string $description) : void
{
$this->l11n->setDescription($description);
}
/**
* Get description
*
* @return string
*
* @since 1.0.0
*/
public function getDescription() : string
{
return $this->l11n->getDescription();
}
/**
* Set parent
*
* @param string $parent Parent
*
* @return void
*
* @since 1.0.0
*/
public function setParent($parent) : void
{
$this->parent = $parent;
}
/**
* Get parent
*
* @return mixed
*
* @since 1.0.0
*/
public function getParent()
{
return $this->parent;
}
}

View File

@ -0,0 +1,79 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\Models;
use phpOMS\DataStorage\Database\DataMapperAbstract;
/**
* Accounting mapper class.
*
* @package Modules\Accounting\Models
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
final class CostObjectMapper extends DataMapperAbstract
{
/**
* Columns.
*
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0
*/
protected static array $columns = [
'accounting_costobject_id' => ['name' => 'accounting_costobject_id', 'type' => 'int', 'internal' => 'id'],
'accounting_costobject_code' => ['name' => 'accounting_costobject_code', 'type' => 'string', 'internal' => 'code'],
];
/**
* Has many relation.
*
* @var array<string, array{mapper:string, table:string, self?:?string, external?:?string, column?:string}>
* @since 1.0.0
*/
protected static array $hasMany = [
'l11n' => [
'mapper' => L11nCostObjectMapper::class,
'table' => 'accounting_costobject_l11n',
'external' => 'accounting_costobject_l11n_costobject',
'conditional' => true,
'self' => null,
],
];
/**
* Model to use by the mapper.
*
* @var string
* @since 1.0.0
*/
protected static string $model = CostObject::class;
/**
* Primary table.
*
* @var string
* @since 1.0.0
*/
protected static string $table = 'accounting_costobject';
/**
* Primary field name.
*
* @var string
* @since 1.0.0
*/
protected static string $primaryField = 'accounting_costobject_id';
}

206
Models/L11nCostCenter.php Normal file
View File

@ -0,0 +1,206 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\Models;
use phpOMS\Contract\ArrayableInterface;
use phpOMS\Localization\ISO639x1Enum;
/**
* CostCenter class.
*
* @package Modules\Accounting\Models
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
class L11nCostCenter implements ArrayableInterface, \JsonSerializable
{
/**
* Article ID.
*
* @var int
* @since 1.0.0
*/
protected int $id = 0;
/**
* CostCenter ID.
*
* @var int
* @since 1.0.0
*/
protected int $costcenter = 0;
/**
* Language.
*
* @var string
* @since 1.0.0
*/
protected string $language = ISO639x1Enum::_EN;
/**
* Name.
*
* @var string
* @since 1.0.0
*/
private string $name = '';
/**
* Description.
*
* @var string
* @since 1.0.0
*/
private string $description = '';
/**
* Get id
*
* @return int
*
* @since 1.0.0
*/
public function getId() : int
{
return $this->id;
}
/**
* Set costcenter.
*
* @param int $costcenter CostCenter id
*
* @return void
*
* @since 1.0.0
*/
public function setCostCenter(int $costcenter) : void
{
$this->costcenter = $costcenter;
}
/**
* Get costcenter
*
* @return int
*
* @since 1.0.0
*/
public function getCostCenter() : int
{
return $this->costcenter;
}
/**
* Get language
*
* @return string
*
* @since 1.0.0
*/
public function getLanguage() : string
{
return $this->language;
}
/**
* Set language
*
* @param string $language Language
*
* @return void
*
* @since 1.0.0
*/
public function setLanguage(string $language) : void
{
$this->language = $language;
}
/**
* Get costcenter name.
*
* @return string
*
* @since 1.0.0
*/
public function getName() : string
{
return $this->name;
}
/**
* Set name
*
* @param string $name Name
*
* @return void
*
* @since 1.0.0
*/
public function setName(string $name) : void
{
$this->name = $name;
}
/**
* Get costcenter description.
*
* @return string
*
* @since 1.0.0
*/
public function getDescription() : string
{
return $this->description;
}
/**
* Set description
*
* @param string $description Description
*
* @return void
*
* @since 1.0.0
*/
public function setDescription(string $description) : void
{
$this->description = $description;
}
/**
* {@inheritdoc}
*/
public function toArray() : array
{
return [
'id' => $this->id,
'name' => $this->name,
'costcenter' => $this->costcenter,
'language' => $this->language,
];
}
/**
* {@inheritdoc}
*/
public function jsonSerialize()
{
return $this->toArray();
}
}

View File

@ -0,0 +1,77 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\Models;
use phpOMS\DataStorage\Database\DataMapperAbstract;
use phpOMS\Localization\Defaults\LanguageMapper;
/**
* CostCenter mapper class.
*
* @package Modules\Accounting\Models
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*
* @todo Do I really want to create a relation to the language mapper? It's not really needed right?
*/
final class L11nCostCenterMapper extends DataMapperAbstract
{
/**
* Columns.
*
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0
*/
protected static array $columns = [
'accounting_costcenter_l11n_id' => ['name' => 'accounting_costcenter_l11n_id', 'type' => 'int', 'internal' => 'id'],
'accounting_costcenter_l11n_name' => ['name' => 'accounting_costcenter_l11n_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true],
'accounting_costcenter_l11n_description' => ['name' => 'accounting_costcenter_l11n_description', 'type' => 'string', 'internal' => 'description', 'autocomplete' => true],
'accounting_costcenter_l11n_costcenter' => ['name' => 'accounting_costcenter_l11n_costcenter', 'type' => 'int', 'internal' => 'costcenter'],
'accounting_costcenter_l11n_language' => ['name' => 'accounting_costcenter_l11n_language', 'type' => 'string', 'internal' => 'language'],
];
/**
* Has one relation.
*
* @var array<string, array{mapper:string, self:string, by?:string, column?:string}>
* @since 1.0.0
*/
protected static array $ownsOne = [
'language' => [
'mapper' => LanguageMapper::class,
'self' => 'accounting_costcenter_l11n_language',
'by' => 'code2',
'column' => 'code2',
'conditional' => true,
],
];
/**
* Primary table.
*
* @var string
* @since 1.0.0
*/
protected static string $table = 'accounting_costcenter_l11n';
/**
* Primary field name.
*
* @var string
* @since 1.0.0
*/
protected static string $primaryField = 'accounting_costcenter_l11n_id';
}

206
Models/L11nCostObject.php Normal file
View File

@ -0,0 +1,206 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\Models;
use phpOMS\Contract\ArrayableInterface;
use phpOMS\Localization\ISO639x1Enum;
/**
* CostObject class.
*
* @package Modules\Accounting\Models
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
class L11nCostObject implements ArrayableInterface, \JsonSerializable
{
/**
* Article ID.
*
* @var int
* @since 1.0.0
*/
protected int $id = 0;
/**
* CostObject ID.
*
* @var int
* @since 1.0.0
*/
protected int $costobject = 0;
/**
* Language.
*
* @var string
* @since 1.0.0
*/
protected string $language = ISO639x1Enum::_EN;
/**
* Name.
*
* @var string
* @since 1.0.0
*/
private string $name = '';
/**
* Description.
*
* @var string
* @since 1.0.0
*/
private string $description = '';
/**
* Get id
*
* @return int
*
* @since 1.0.0
*/
public function getId() : int
{
return $this->id;
}
/**
* Set costobject.
*
* @param int $costobject CostObject id
*
* @return void
*
* @since 1.0.0
*/
public function setCostObject(int $costobject) : void
{
$this->costobject = $costobject;
}
/**
* Get costobject
*
* @return int
*
* @since 1.0.0
*/
public function getCostObject() : int
{
return $this->costobject;
}
/**
* Get language
*
* @return string
*
* @since 1.0.0
*/
public function getLanguage() : string
{
return $this->language;
}
/**
* Set language
*
* @param string $language Language
*
* @return void
*
* @since 1.0.0
*/
public function setLanguage(string $language) : void
{
$this->language = $language;
}
/**
* Get costobject name.
*
* @return string
*
* @since 1.0.0
*/
public function getName() : string
{
return $this->name;
}
/**
* Set name
*
* @param string $name Name
*
* @return void
*
* @since 1.0.0
*/
public function setName(string $name) : void
{
$this->name = $name;
}
/**
* Get costobject description.
*
* @return string
*
* @since 1.0.0
*/
public function getDescription() : string
{
return $this->description;
}
/**
* Set description
*
* @param string $description Description
*
* @return void
*
* @since 1.0.0
*/
public function setDescription(string $description) : void
{
$this->description = $description;
}
/**
* {@inheritdoc}
*/
public function toArray() : array
{
return [
'id' => $this->id,
'name' => $this->name,
'costobject' => $this->costobject,
'language' => $this->language,
];
}
/**
* {@inheritdoc}
*/
public function jsonSerialize()
{
return $this->toArray();
}
}

View File

@ -0,0 +1,77 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\Models;
use phpOMS\DataStorage\Database\DataMapperAbstract;
use phpOMS\Localization\Defaults\LanguageMapper;
/**
* CostObject mapper class.
*
* @package Modules\Accounting\Models
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*
* @todo Do I really want to create a relation to the language mapper? It's not really needed right?
*/
final class L11nCostObjectMapper extends DataMapperAbstract
{
/**
* Columns.
*
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
* @since 1.0.0
*/
protected static array $columns = [
'accounting_costobject_l11n_id' => ['name' => 'accounting_costobject_l11n_id', 'type' => 'int', 'internal' => 'id'],
'accounting_costobject_l11n_name' => ['name' => 'accounting_costobject_l11n_name', 'type' => 'string', 'internal' => 'name', 'autocomplete' => true],
'accounting_costobject_l11n_description' => ['name' => 'accounting_costobject_l11n_description', 'type' => 'string', 'internal' => 'description', 'autocomplete' => true],
'accounting_costobject_l11n_costobject' => ['name' => 'accounting_costobject_l11n_costobject', 'type' => 'int', 'internal' => 'costobject'],
'accounting_costobject_l11n_language' => ['name' => 'accounting_costobject_l11n_language', 'type' => 'string', 'internal' => 'language'],
];
/**
* Has one relation.
*
* @var array<string, array{mapper:string, self:string, by?:string, column?:string}>
* @since 1.0.0
*/
protected static array $ownsOne = [
'language' => [
'mapper' => LanguageMapper::class,
'self' => 'accounting_costobject_l11n_language',
'by' => 'code2',
'column' => 'code2',
'conditional' => true,
],
];
/**
* Primary table.
*
* @var string
* @since 1.0.0
*/
protected static string $table = 'accounting_costobject_l11n';
/**
* Primary field name.
*
* @var string
* @since 1.0.0
*/
protected static string $primaryField = 'accounting_costobject_l11n_id';
}

38
Models/NullCostCenter.php Normal file
View File

@ -0,0 +1,38 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\Models;
/**
* Null model
*
* @package Modules\Accounting\Models
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
final class NullCostCenter extends CostCenter
{
/**
* Constructor
*
* @param int $id Model id
*
* @since 1.0.0
*/
public function __construct(int $id = 0)
{
$this->id = $id;
}
}

38
Models/NullCostObject.php Normal file
View File

@ -0,0 +1,38 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\Models;
/**
* Null model
*
* @package Modules\Accounting\Models
* @license OMS License 1.0
* @link https://orange-management.org
* @since 1.0.0
*/
final class NullCostObject extends CostObject
{
/**
* Constructor
*
* @param int $id Model id
*
* @since 1.0.0
*/
public function __construct(int $id = 0)
{
$this->id = $id;
}
}

View File

@ -32,6 +32,7 @@ abstract class PermissionState extends Enum
public const STACK = 4; public const STACK = 4;
public const GL = 5; public const GL = 5;
public const COST_CENTER = 6; public const COST_CENTER = 6;
public const ACCOUNT = 7; public const COST_OBJECT = 7;
public const ENTRY = 8; public const ACCOUNT = 8;
public const ENTRY = 9;
} }

View File

@ -0,0 +1,52 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
use phpOMS\Uri\UriFactory;
/**
* @var \phpOMS\Views\View $this
* @var \Modules\Tag\Models\CostCenter[] $costcenter
*/
$costcenter = $this->getData('costcenter');
$previous = empty($costcenter) ? '{/prefix}tag/list' : '{/prefix}tag/list?{?}&id=' . \reset($costcenter)->getId() . '&ptype=-';
$next = empty($costcenter) ? '{/prefix}tag/list' : '{/prefix}tag/list?{?}&id=' . \end($costcenter)->getId() . '&ptype=+';
echo $this->getData('nav')->render(); ?>
<div class="row">
<div class="col-xs-12">
<div class="portlet">
<div class="portlet-head"><?= $this->getHtml('CostCenters') ?><i class="fa fa-download floatRight download btn"></i></div>
<table class="default">
<thead>
<tr>
<td><?= $this->getHtml('Code') ?>
<td class="wf-100"><?= $this->getHtml('Name') ?>
<tbody>
<?php $count = 0; foreach ($costcenter as $key => $value) : ++$count;
$url = UriFactory::build('{/prefix}tag/single?{?}&id=' . $value->getId()); ?>
<tr tabindex="0" data-href="<?= $url; ?>">
<td data-label="<?= $this->getHtml('Code') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($value->getCode()); ?></a>
<td data-label="<?= $this->getHtml('Name') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($value->getName()); ?></a>
<?php endforeach; ?>
<?php if ($count === 0) : ?>
<tr><td colspan="3" class="empty"><?= $this->getHtml('Empty', '0', '0'); ?>
<?php endif; ?>
</table>
<div class="portlet-foot">
<a tabindex="0" class="button" href="<?= UriFactory::build($previous); ?>"><?= $this->getHtml('Previous', '0', '0'); ?></a>
<a tabindex="0" class="button" href="<?= UriFactory::build($next); ?>"><?= $this->getHtml('Next', '0', '0'); ?></a>
</div>
</div>
</div>

View File

@ -0,0 +1,52 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package Modules\Accounting
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
use phpOMS\Uri\UriFactory;
/**
* @var \phpOMS\Views\View $this
* @var \Modules\Tag\Models\CostObject[] $costobject
*/
$costobject = $this->getData('costobject');
$previous = empty($costobject) ? '{/prefix}tag/list' : '{/prefix}tag/list?{?}&id=' . \reset($costobject)->getId() . '&ptype=-';
$next = empty($costobject) ? '{/prefix}tag/list' : '{/prefix}tag/list?{?}&id=' . \end($costobject)->getId() . '&ptype=+';
echo $this->getData('nav')->render(); ?>
<div class="row">
<div class="col-xs-12">
<div class="portlet">
<div class="portlet-head"><?= $this->getHtml('CostObjects') ?><i class="fa fa-download floatRight download btn"></i></div>
<table class="default">
<thead>
<tr>
<td><?= $this->getHtml('Code') ?>
<td class="wf-100"><?= $this->getHtml('Name') ?>
<tbody>
<?php $count = 0; foreach ($costobject as $key => $value) : ++$count;
$url = UriFactory::build('{/prefix}tag/single?{?}&id=' . $value->getId()); ?>
<tr tabindex="0" data-href="<?= $url; ?>">
<td data-label="<?= $this->getHtml('Code') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($value->getCode()); ?></a>
<td data-label="<?= $this->getHtml('Name') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($value->getName()); ?></a>
<?php endforeach; ?>
<?php if ($count === 0) : ?>
<tr><td colspan="3" class="empty"><?= $this->getHtml('Empty', '0', '0'); ?>
<?php endif; ?>
</table>
<div class="portlet-foot">
<a tabindex="0" class="button" href="<?= UriFactory::build($previous); ?>"><?= $this->getHtml('Previous', '0', '0'); ?></a>
<a tabindex="0" class="button" href="<?= UriFactory::build($next); ?>"><?= $this->getHtml('Next', '0', '0'); ?></a>
</div>
</div>
</div>

26
tests/Admin/AdminTest.php Normal file
View File

@ -0,0 +1,26 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\tests\Admin;
/**
* @internal
*/
class AccountingTest extends \PHPUnit\Framework\TestCase
{
protected const MODULE_NAME = 'Accounting';
protected const URI_LOAD = 'http://127.0.0.1/en/backend/accounting';
use \Modules\tests\ModuleTestTrait;
}

View File

@ -0,0 +1,42 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\tests\Models;
use Modules\Accounting\Models\CostCenter;
use Modules\Accounting\Models\CostCenterMapper;
use phpOMS\Localization\ISO639x1Enum;
/**
* @internal
*/
class CostCenterMapperTest extends \PHPUnit\Framework\TestCase
{
public function testCR() : void
{
$costcenter = new CostCenter();
$costcenter->setCode('123');
$costcenter->setName('Test CostCenter');
$costcenter->setDescription('Test description');
$id = CostCenterMapper::create($costcenter);
self::assertGreaterThan(0, $costcenter->getId());
self::assertEquals($id, $costcenter->getId());
$costcenterR = CostCenterMapper::withConditional('language', ISO639x1Enum::_EN)::get($costcenter->getId());
self::assertEquals($costcenter->getCode(), $costcenterR->getCode());
self::assertEquals($costcenter->getName(), $costcenterR->getName());
self::assertEquals($costcenter->getDescription(), $costcenterR->getDescription());
}
}

View File

@ -0,0 +1,66 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\tests\Models;
use Modules\Accounting\Models\CostCenter;
/**
* @internal
*/
class CostCenterTest extends \PHPUnit\Framework\TestCase
{
public function testDefault() : void
{
$cc = new CostCenter();
self::assertEquals(0, $cc->getId());
self::assertEquals('', $cc->getName());
self::assertEquals('', $cc->getCode());
self::assertEquals('', $cc->getDescription());
self::assertEquals(null, $cc->getParent());
}
public function testNameInputOutput() : void
{
$cc = new CostCenter();
$cc->setName('TestName');
self::assertEquals('TestName', $cc->getName());
}
public function testCodeInputOutput() : void
{
$cc = new CostCenter();
$cc->setCode('TestCode');
self::assertEquals('TestCode', $cc->getCode());
}
public function testDescriptionInputOutput() : void
{
$cc = new CostCenter();
$cc->setDescription('TestDescription');
self::assertEquals('TestDescription', $cc->getDescription());
}
public function testParentInputOutput() : void
{
$cc = new CostCenter();
$cc->setParent(1);
self::assertEquals(1, $cc->getParent());
}
}

View File

@ -0,0 +1,42 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\tests\Models;
use Modules\Accounting\Models\CostObject;
use Modules\Accounting\Models\CostObjectMapper;
use phpOMS\Localization\ISO639x1Enum;
/**
* @internal
*/
class CostObjectMapperTest extends \PHPUnit\Framework\TestCase
{
public function testCR() : void
{
$costobject = new CostObject();
$costobject->setCode('123');
$costobject->setName('Test CostObject');
$costobject->setDescription('Test description');
$id = CostObjectMapper::create($costobject);
self::assertGreaterThan(0, $costobject->getId());
self::assertEquals($id, $costobject->getId());
$costobjectR = CostObjectMapper::withConditional('language', ISO639x1Enum::_EN)::get($costobject->getId());
self::assertEquals($costobject->getCode(), $costobjectR->getCode());
self::assertEquals($costobject->getName(), $costobjectR->getName());
self::assertEquals($costobject->getDescription(), $costobjectR->getDescription());
}
}

View File

@ -0,0 +1,66 @@
<?php
/**
* Orange Management
*
* PHP Version 7.4
*
* @package tests
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link https://orange-management.org
*/
declare(strict_types=1);
namespace Modules\Accounting\tests\Models;
use Modules\Accounting\Models\CostObject;
/**
* @internal
*/
class CostObjectTest extends \PHPUnit\Framework\TestCase
{
public function testDefault() : void
{
$co = new CostObject();
self::assertEquals(0, $co->getId());
self::assertEquals('', $co->getName());
self::assertEquals('', $co->getCode());
self::assertEquals('', $co->getDescription());
self::assertEquals(null, $co->getParent());
}
public function testNameInputOutput() : void
{
$co = new CostObject();
$co->setName('TestName');
self::assertEquals('TestName', $co->getName());
}
public function testCodeInputOutput() : void
{
$co = new CostObject();
$co->setCode('TestCode');
self::assertEquals('TestCode', $co->getCode());
}
public function testDescriptionInputOutput() : void
{
$co = new CostObject();
$co->setDescription('TestDescription');
self::assertEquals('TestDescription', $co->getDescription());
}
public function testParentInputOutput() : void
{
$co = new CostObject();
$co->setParent(1);
self::assertEquals(1, $co->getParent());
}
}