Fixes for 1.12 (#4655)

* fix missing locales
* bump composer packages
* changed translations
* assert timezone on customer
* include user accountNumber in excel export
* improve next customer number calculation
* fix z-index of contextmenu / action dropdown
This commit is contained in:
Kevin Papst
2024-02-22 13:03:09 +01:00
committed by GitHub
parent 36c578452e
commit f016221e8e
28 changed files with 892 additions and 210 deletions

View File

@@ -70,7 +70,10 @@ export default class KimaiContextMenu {
{
const dropdownElement = this.getContextMenuElement();
dropdownElement.style.zIndex = '1021'; // stay on top of sticky elements (like table header)
if (!dropdownElement.classList.contains('action-dropdown')) {
dropdownElement.classList.add('action-dropdown');
}
dropdownElement.innerHTML = html;
dropdownElement.style.position = 'fixed';
dropdownElement.style.top = (event.clientY) + 'px';

View File

@@ -153,3 +153,10 @@ table.table-hover {
}
}
}
/* For the context menu */
.action-dropdown,
.actions .dropdown .dropdown-menu {
// stay on top of sticky elements (like table header)
z-index: 1021;
}

98
composer.lock generated
View File

@@ -661,16 +661,16 @@
},
{
"name": "doctrine/dbal",
"version": "3.8.1",
"version": "3.8.2",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "c9ea252cdce4da324ede3d6c5913dd89f769afd2"
"reference": "a19a1d05ca211f41089dffcc387733a6875196cb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/c9ea252cdce4da324ede3d6c5913dd89f769afd2",
"reference": "c9ea252cdce4da324ede3d6c5913dd89f769afd2",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/a19a1d05ca211f41089dffcc387733a6875196cb",
"reference": "a19a1d05ca211f41089dffcc387733a6875196cb",
"shasum": ""
},
"require": {
@@ -754,7 +754,7 @@
],
"support": {
"issues": "https://github.com/doctrine/dbal/issues",
"source": "https://github.com/doctrine/dbal/tree/3.8.1"
"source": "https://github.com/doctrine/dbal/tree/3.8.2"
},
"funding": [
{
@@ -770,7 +770,7 @@
"type": "tidelift"
}
],
"time": "2024-02-03T17:33:49+00:00"
"time": "2024-02-12T18:36:36+00:00"
},
{
"name": "doctrine/deprecations",
@@ -1122,16 +1122,16 @@
},
{
"name": "doctrine/inflector",
"version": "2.0.9",
"version": "2.0.10",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
"reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65"
"reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/2930cd5ef353871c821d5c43ed030d39ac8cfe65",
"reference": "2930cd5ef353871c821d5c43ed030d39ac8cfe65",
"url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
"reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
"shasum": ""
},
"require": {
@@ -1193,7 +1193,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
"source": "https://github.com/doctrine/inflector/tree/2.0.9"
"source": "https://github.com/doctrine/inflector/tree/2.0.10"
},
"funding": [
{
@@ -1209,7 +1209,7 @@
"type": "tidelift"
}
],
"time": "2024-01-15T18:05:13+00:00"
"time": "2024-02-18T20:23:39+00:00"
},
{
"name": "doctrine/instantiator",
@@ -2520,16 +2520,16 @@
},
{
"name": "league/csv",
"version": "9.14.0",
"version": "9.15.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/csv.git",
"reference": "34bf0df7340b60824b9449b5c526fcc3325070d5"
"reference": "fa7e2441c0bc9b2360f4314fd6c954f7ff40d435"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/csv/zipball/34bf0df7340b60824b9449b5c526fcc3325070d5",
"reference": "34bf0df7340b60824b9449b5c526fcc3325070d5",
"url": "https://api.github.com/repos/thephpleague/csv/zipball/fa7e2441c0bc9b2360f4314fd6c954f7ff40d435",
"reference": "fa7e2441c0bc9b2360f4314fd6c954f7ff40d435",
"shasum": ""
},
"require": {
@@ -2544,12 +2544,12 @@
"ext-xdebug": "*",
"friendsofphp/php-cs-fixer": "^v3.22.0",
"phpbench/phpbench": "^1.2.15",
"phpstan/phpstan": "^1.10.50",
"phpstan/phpstan": "^1.10.57",
"phpstan/phpstan-deprecation-rules": "^1.1.4",
"phpstan/phpstan-phpunit": "^1.3.15",
"phpstan/phpstan-strict-rules": "^1.5.2",
"phpunit/phpunit": "^10.5.3",
"symfony/var-dumper": "^6.4.0"
"phpunit/phpunit": "^10.5.9",
"symfony/var-dumper": "^6.4.2"
},
"suggest": {
"ext-dom": "Required to use the XMLConverter and the HTMLConverter classes",
@@ -2605,7 +2605,7 @@
"type": "github"
}
],
"time": "2023-12-29T07:34:53+00:00"
"time": "2024-02-20T20:00:00+00:00"
},
{
"name": "lorenzo/pinky",
@@ -3183,16 +3183,16 @@
},
{
"name": "nelmio/api-doc-bundle",
"version": "v4.19.3",
"version": "v4.20.0",
"source": {
"type": "git",
"url": "https://github.com/nelmio/NelmioApiDocBundle.git",
"reference": "daadb0b567c637d737f58fd25da0b4db2321560d"
"reference": "61c08f139e104db21b12832173b08fa37c22e619"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/daadb0b567c637d737f58fd25da0b4db2321560d",
"reference": "daadb0b567c637d737f58fd25da0b4db2321560d",
"url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/61c08f139e104db21b12832173b08fa37c22e619",
"reference": "61c08f139e104db21b12832173b08fa37c22e619",
"shasum": ""
},
"require": {
@@ -3287,9 +3287,9 @@
],
"support": {
"issues": "https://github.com/nelmio/NelmioApiDocBundle/issues",
"source": "https://github.com/nelmio/NelmioApiDocBundle/tree/v4.19.3"
"source": "https://github.com/nelmio/NelmioApiDocBundle/tree/v4.20.0"
},
"time": "2024-02-07T13:21:48+00:00"
"time": "2024-02-13T14:15:29+00:00"
},
{
"name": "nelmio/cors-bundle",
@@ -3741,16 +3741,16 @@
},
{
"name": "phpdocumentor/type-resolver",
"version": "1.8.0",
"version": "1.8.1",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
"reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc"
"reference": "bc3dc91a5e9b14aa06d1d9e90647c5c5a2cc5353"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fad452781b3d774e3337b0c0b245dd8e5a4455fc",
"reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc",
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/bc3dc91a5e9b14aa06d1d9e90647c5c5a2cc5353",
"reference": "bc3dc91a5e9b14aa06d1d9e90647c5c5a2cc5353",
"shasum": ""
},
"require": {
@@ -3793,9 +3793,9 @@
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
"support": {
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.0"
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.1"
},
"time": "2024-01-11T11:49:22+00:00"
"time": "2024-01-18T19:15:27+00:00"
},
{
"name": "phpoffice/math",
@@ -10535,16 +10535,16 @@
},
{
"name": "dama/doctrine-test-bundle",
"version": "v8.0.1",
"version": "v8.0.2",
"source": {
"type": "git",
"url": "https://github.com/dmaicher/doctrine-test-bundle.git",
"reference": "e382d27bc03ee04e0fd0ef95391047042792e7cc"
"reference": "f10de294e41570d027a301554a609c394d40e669"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/e382d27bc03ee04e0fd0ef95391047042792e7cc",
"reference": "e382d27bc03ee04e0fd0ef95391047042792e7cc",
"url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/f10de294e41570d027a301554a609c394d40e669",
"reference": "f10de294e41570d027a301554a609c394d40e669",
"shasum": ""
},
"require": {
@@ -10597,9 +10597,9 @@
],
"support": {
"issues": "https://github.com/dmaicher/doctrine-test-bundle/issues",
"source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.0.1"
"source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.0.2"
},
"time": "2023-12-05T16:11:29+00:00"
"time": "2024-02-15T08:28:14+00:00"
},
{
"name": "doctrine/data-fixtures",
@@ -10995,16 +10995,16 @@
},
{
"name": "nikic/php-parser",
"version": "v5.0.0",
"version": "v5.0.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc"
"reference": "2218c2252c874a4624ab2f613d86ac32d227bc69"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
"reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/2218c2252c874a4624ab2f613d86ac32d227bc69",
"reference": "2218c2252c874a4624ab2f613d86ac32d227bc69",
"shasum": ""
},
"require": {
@@ -11047,9 +11047,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
"source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0"
"source": "https://github.com/nikic/PHP-Parser/tree/v5.0.1"
},
"time": "2024-01-07T17:17:35+00:00"
"time": "2024-02-21T19:24:10+00:00"
},
{
"name": "phar-io/manifest",
@@ -11164,16 +11164,16 @@
},
{
"name": "phpstan/phpstan",
"version": "1.10.57",
"version": "1.10.59",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "1627b1d03446904aaa77593f370c5201d2ecc34e"
"reference": "e607609388d3a6d418a50a49f7940e8086798281"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/1627b1d03446904aaa77593f370c5201d2ecc34e",
"reference": "1627b1d03446904aaa77593f370c5201d2ecc34e",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/e607609388d3a6d418a50a49f7940e8086798281",
"reference": "e607609388d3a6d418a50a49f7940e8086798281",
"shasum": ""
},
"require": {
@@ -11222,7 +11222,7 @@
"type": "tidelift"
}
],
"time": "2024-01-24T11:51:34+00:00"
"time": "2024-02-20T13:59:13+00:00"
},
{
"name": "phpstan/phpstan-doctrine",

View File

@@ -13,6 +13,13 @@
'rtl' => false,
'translation' => true,
],
'cs_CZ' =>
[
'date' => 'dd.MM.yy',
'time' => 'H:mm',
'rtl' => false,
'translation' => false,
],
'da' =>
[
'date' => 'dd.MM.y',
@@ -20,6 +27,20 @@
'rtl' => false,
'translation' => true,
],
'da_DK' =>
[
'date' => 'dd.MM.y',
'time' => 'HH.mm',
'rtl' => false,
'translation' => false,
],
'da_GL' =>
[
'date' => 'dd.MM.y',
'time' => 'HH.mm',
'rtl' => false,
'translation' => false,
],
'de' =>
[
'date' => 'dd.MM.yy',
@@ -27,6 +48,20 @@
'rtl' => false,
'translation' => true,
],
'de_AT' =>
[
'date' => 'dd.MM.yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'de_BE' =>
[
'date' => 'dd.MM.yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'de_CH' =>
[
'date' => 'dd.MM.yy',
@@ -34,6 +69,34 @@
'rtl' => false,
'translation' => true,
],
'de_DE' =>
[
'date' => 'dd.MM.yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'de_IT' =>
[
'date' => 'dd.MM.yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'de_LI' =>
[
'date' => 'dd.MM.yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'de_LU' =>
[
'date' => 'dd.MM.yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'el' =>
[
'date' => 'd/M/yy',
@@ -41,6 +104,20 @@
'rtl' => false,
'translation' => true,
],
'el_CY' =>
[
'date' => 'd/M/yy',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'el_GR' =>
[
'date' => 'd/M/yy',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'en' =>
[
'date' => 'M/d/yy',
@@ -69,6 +146,13 @@
'rtl' => false,
'translation' => false,
],
'en_AS' =>
[
'date' => 'M/d/yy',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'en_AT' =>
[
'date' => 'dd/MM/y',
@@ -279,6 +363,13 @@
'rtl' => false,
'translation' => false,
],
'en_GU' =>
[
'date' => 'M/d/yy',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'en_GY' =>
[
'date' => 'dd/MM/y',
@@ -405,6 +496,13 @@
'rtl' => false,
'translation' => false,
],
'en_MH' =>
[
'date' => 'M/d/yy',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'en_MO' =>
[
'date' => 'dd/MM/y',
@@ -412,6 +510,13 @@
'rtl' => false,
'translation' => false,
],
'en_MP' =>
[
'date' => 'M/d/yy',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'en_MS' =>
[
'date' => 'dd/MM/y',
@@ -510,6 +615,13 @@
'rtl' => false,
'translation' => false,
],
'en_PH' =>
[
'date' => 'M/d/yy',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'en_PK' =>
[
'date' => 'dd/MM/y',
@@ -524,6 +636,13 @@
'rtl' => false,
'translation' => false,
],
'en_PR' =>
[
'date' => 'M/d/yy',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'en_PW' =>
[
'date' => 'dd/MM/y',
@@ -664,6 +783,20 @@
'rtl' => false,
'translation' => false,
],
'en_UM' =>
[
'date' => 'M/d/yy',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'en_US' =>
[
'date' => 'M/d/yy',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'en_VC' =>
[
'date' => 'dd/MM/y',
@@ -678,6 +811,13 @@
'rtl' => false,
'translation' => false,
],
'en_VI' =>
[
'date' => 'M/d/yy',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'en_VU' =>
[
'date' => 'dd/MM/y',
@@ -797,6 +937,20 @@
'rtl' => false,
'translation' => false,
],
'es_ES' =>
[
'date' => 'd/M/yy',
'time' => 'H:mm',
'rtl' => false,
'translation' => false,
],
'es_GQ' =>
[
'date' => 'd/M/yy',
'time' => 'H:mm',
'rtl' => false,
'translation' => false,
],
'es_GT' =>
[
'date' => 'd/MM/yy',
@@ -895,6 +1049,13 @@
'rtl' => false,
'translation' => true,
],
'eu_ES' =>
[
'date' => 'yy/M/d',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fa' =>
[
'date' => 'y/M/d',
@@ -902,6 +1063,20 @@
'rtl' => true,
'translation' => true,
],
'fa_AF' =>
[
'date' => 'y/M/d',
'time' => 'H:mm',
'rtl' => true,
'translation' => false,
],
'fa_IR' =>
[
'date' => 'y/M/d',
'time' => 'H:mm',
'rtl' => true,
'translation' => false,
],
'fi' =>
[
'date' => 'd.M.y',
@@ -909,6 +1084,13 @@
'rtl' => false,
'translation' => true,
],
'fi_FI' =>
[
'date' => 'd.M.y',
'time' => 'H.mm',
'rtl' => false,
'translation' => false,
],
'fo' =>
[
'date' => 'dd.MM.yy',
@@ -916,6 +1098,20 @@
'rtl' => false,
'translation' => true,
],
'fo_DK' =>
[
'date' => 'dd.MM.yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fo_FO' =>
[
'date' => 'dd.MM.yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr' =>
[
'date' => 'dd/MM/y',
@@ -930,6 +1126,34 @@
'rtl' => false,
'translation' => false,
],
'fr_BF' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_BI' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_BJ' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_BL' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_CA' =>
[
'date' => 'y-MM-dd',
@@ -937,6 +1161,27 @@
'rtl' => false,
'translation' => false,
],
'fr_CD' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_CF' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_CG' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_CH' =>
[
'date' => 'dd.MM.yy',
@@ -944,6 +1189,20 @@
'rtl' => false,
'translation' => false,
],
'fr_CI' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_CM' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_DJ' =>
[
'date' => 'dd/MM/y',
@@ -958,6 +1217,111 @@
'rtl' => false,
'translation' => false,
],
'fr_FR' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_GA' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_GF' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_GN' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_GP' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_GQ' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_HT' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_KM' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_LU' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_MA' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_MC' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_MF' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_MG' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_ML' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_MQ' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_MR' =>
[
'date' => 'dd/MM/y',
@@ -965,6 +1329,69 @@
'rtl' => false,
'translation' => false,
],
'fr_MU' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_NC' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_NE' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_PF' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_PM' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_RE' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_RW' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_SC' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_SN' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_SY' =>
[
'date' => 'dd/MM/y',
@@ -979,6 +1406,13 @@
'rtl' => false,
'translation' => false,
],
'fr_TG' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_TN' =>
[
'date' => 'dd/MM/y',
@@ -993,6 +1427,20 @@
'rtl' => false,
'translation' => false,
],
'fr_WF' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'fr_YT' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'he' =>
[
'date' => 'd.M.y',
@@ -1000,6 +1448,13 @@
'rtl' => true,
'translation' => true,
],
'he_IL' =>
[
'date' => 'd.M.y',
'time' => 'H:mm',
'rtl' => true,
'translation' => false,
],
'hr' =>
[
'date' => 'dd. MM. y.',
@@ -1014,6 +1469,13 @@
'rtl' => false,
'translation' => false,
],
'hr_HR' =>
[
'date' => 'dd. MM. y.',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'hu' =>
[
'date' => 'y. MM. dd.',
@@ -1021,6 +1483,13 @@
'rtl' => false,
'translation' => true,
],
'hu_HU' =>
[
'date' => 'y. MM. dd.',
'time' => 'H:mm',
'rtl' => false,
'translation' => false,
],
'id' =>
[
'date' => 'dd/MM/yy',
@@ -1042,6 +1511,27 @@
'rtl' => false,
'translation' => false,
],
'it_IT' =>
[
'date' => 'dd/MM/yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'it_SM' =>
[
'date' => 'dd/MM/yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'it_VA' =>
[
'date' => 'dd/MM/yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'ja' =>
[
'date' => 'y/MM/dd',
@@ -1049,6 +1539,13 @@
'rtl' => false,
'translation' => true,
],
'ja_JP' =>
[
'date' => 'y/MM/dd',
'time' => 'H:mm',
'rtl' => false,
'translation' => false,
],
'ko' =>
[
'date' => 'yy. M. d.',
@@ -1063,6 +1560,20 @@
'rtl' => false,
'translation' => false,
],
'ko_KP' =>
[
'date' => 'yy. M. d.',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'ko_KR' =>
[
'date' => 'yy. M. d.',
'time' => 'h:mm a',
'rtl' => false,
'translation' => false,
],
'nb_NO' =>
[
'date' => 'dd.MM.y',
@@ -1077,6 +1588,13 @@
'rtl' => false,
'translation' => true,
],
'nl_AW' =>
[
'date' => 'dd-MM-y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'nl_BE' =>
[
'date' => 'd/MM/y',
@@ -1084,6 +1602,41 @@
'rtl' => false,
'translation' => false,
],
'nl_BQ' =>
[
'date' => 'dd-MM-y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'nl_CW' =>
[
'date' => 'dd-MM-y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'nl_NL' =>
[
'date' => 'dd-MM-y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'nl_SR' =>
[
'date' => 'dd-MM-y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'nl_SX' =>
[
'date' => 'dd-MM-y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'pa' =>
[
'date' => 'd/M/yy',
@@ -1098,6 +1651,13 @@
'rtl' => false,
'translation' => true,
],
'pl_PL' =>
[
'date' => 'd.MM.y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'pt' =>
[
'date' => 'dd/MM/y',
@@ -1196,6 +1756,20 @@
'rtl' => false,
'translation' => true,
],
'ro_MD' =>
[
'date' => 'dd.MM.y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'ro_RO' =>
[
'date' => 'dd.MM.y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'ru' =>
[
'date' => 'dd.MM.y',
@@ -1203,6 +1777,48 @@
'rtl' => false,
'translation' => true,
],
'ru_BY' =>
[
'date' => 'dd.MM.y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'ru_KG' =>
[
'date' => 'dd.MM.y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'ru_KZ' =>
[
'date' => 'dd.MM.y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'ru_MD' =>
[
'date' => 'dd.MM.y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'ru_RU' =>
[
'date' => 'dd.MM.y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'ru_UA' =>
[
'date' => 'dd.MM.y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'sk' =>
[
'date' => 'd. M. y',
@@ -1210,6 +1826,13 @@
'rtl' => false,
'translation' => true,
],
'sk_SK' =>
[
'date' => 'd. M. y',
'time' => 'H:mm',
'rtl' => false,
'translation' => false,
],
'sl' =>
[
'date' => 'd. MM. yy',
@@ -1224,6 +1847,27 @@
'rtl' => false,
'translation' => true,
],
'sv_AX' =>
[
'date' => 'y-MM-dd',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'sv_FI' =>
[
'date' => 'y-MM-dd',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'sv_SE' =>
[
'date' => 'y-MM-dd',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'tr' =>
[
'date' => 'd.MM.y',
@@ -1238,6 +1882,13 @@
'rtl' => false,
'translation' => false,
],
'tr_TR' =>
[
'date' => 'd.MM.y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'uk' =>
[
'date' => 'dd.MM.yy',
@@ -1245,6 +1896,13 @@
'rtl' => false,
'translation' => true,
],
'uk_UA' =>
[
'date' => 'dd.MM.yy',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'vi' =>
[
'date' => 'dd/MM/y',
@@ -1252,6 +1910,13 @@
'rtl' => false,
'translation' => true,
],
'vi_VN' =>
[
'date' => 'dd/MM/y',
'time' => 'HH:mm',
'rtl' => false,
'translation' => false,
],
'zh_CN' =>
[
'date' => 'y/M/d',

View File

@@ -4247,26 +4247,11 @@ parameters:
count: 2
path: src/Repository/CustomerRepository.php
-
message: "#^Method App\\\\Repository\\\\CustomerRepository\\:\\:addPermissionCriteria\\(\\) has no return type specified\\.$#"
count: 1
path: src/Repository/CustomerRepository.php
-
message: "#^Method App\\\\Repository\\\\CustomerRepository\\:\\:addPermissionCriteria\\(\\) has parameter \\$teams with no value type specified in iterable type array\\.$#"
count: 1
path: src/Repository/CustomerRepository.php
-
message: "#^Method App\\\\Repository\\\\CustomerRepository\\:\\:deleteComment\\(\\) has no return type specified\\.$#"
count: 1
path: src/Repository/CustomerRepository.php
-
message: "#^Method App\\\\Repository\\\\CustomerRepository\\:\\:deleteCustomer\\(\\) has no return type specified\\.$#"
count: 1
path: src/Repository/CustomerRepository.php
-
message: "#^Method App\\\\Repository\\\\CustomerRepository\\:\\:getComments\\(\\) return type has no value type specified in iterable type array\\.$#"
count: 1
@@ -4277,11 +4262,6 @@ parameters:
count: 1
path: src/Repository/CustomerRepository.php
-
message: "#^Method App\\\\Repository\\\\CustomerRepository\\:\\:saveComment\\(\\) has no return type specified\\.$#"
count: 1
path: src/Repository/CustomerRepository.php
-
message: "#^Parameter \\#2 \\.\\.\\.\\$arrays of function array_merge expects array, iterable\\<App\\\\Entity\\\\Team\\> given\\.$#"
count: 1

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -3,10 +3,10 @@
"app": {
"js": [
"/build/runtime.f0079159.js",
"/build/app.8d1b738d.js"
"/build/app.6450be5e.js"
],
"css": [
"/build/app.4ccab775.css"
"/build/app.3501ccee.css"
]
},
"app-rtl": {
@@ -15,7 +15,7 @@
"/build/app-rtl.3d445498.js"
],
"css": [
"/build/app-rtl.2e426047.css"
"/build/app-rtl.670658da.css"
]
},
"export-pdf": {
@@ -54,7 +54,7 @@
"calendar": {
"js": [
"/build/runtime.f0079159.js",
"/build/calendar.a1cbcd7b.js"
"/build/calendar.d45e4af5.js"
],
"css": [
"/build/calendar.bb473428.css"
@@ -72,10 +72,10 @@
},
"integrity": {
"/build/runtime.f0079159.js": "sha384-H22sAW1aTvyIPqvHOvGXWSWTxf0y6mptp+MsVmyXCfjx/WJjBbhX9gbUZ+qIuihV",
"/build/app.8d1b738d.js": "sha384-BsZODNCdR0bBzZbPnrwSRdm0+pvHxG0dpww8yNklZMv4yHBGyrxrxLWIHTeagnfS",
"/build/app.4ccab775.css": "sha384-y/Q2EBsHiTGywkeq4wc2Yo6dR3dcewCDLK0Vr3QDBTGrV6JibqBVBY9D1q6ERsyK",
"/build/app.6450be5e.js": "sha384-P5Qc8Rav736nZcS2vqM2rBRZpr3bwMsk4SJENBsOMDPdfEjDX7M8WMpwhjzxj0PQ",
"/build/app.3501ccee.css": "sha384-3chwmsldxvcA6ldtsAftB9R2/bSNCi17vSW9ycC0FqLNNM+IdnMorRBXh/zTW1NF",
"/build/app-rtl.3d445498.js": "sha384-D5VYIVdHCPGzAPnMAIkRN1Ri9H4DxdwGts1BgG40JXJuOamq6UQXblaDBSpszOZ0",
"/build/app-rtl.2e426047.css": "sha384-t55QArV82vkdzJG0fIxZmNaemeKz0S77h6RtVxfjJdSdD3aK0auKCfpDtLYAOKLU",
"/build/app-rtl.670658da.css": "sha384-Mo5HQ+W9EWDGM1gOyEZ7aScXNltzBMQa4cWC1HtShvs4XPMNUwzOb97jcXf34qSD",
"/build/export-pdf.d367a32e.js": "sha384-Z5baqnzjI636nYFs4g63ViIKBZKRW4Jhv/7PQmTEQlqhfA7eK0vUMUtiyy0R5A9u",
"/build/export-pdf.d8a6c23b.css": "sha384-ztepocHE4rnGE9eKZ4kL6jTKaePUyiwiB9TjJjstjpf/ckcKg1HedrEOOk/8ElJg",
"/build/invoice.2604495e.js": "sha384-D6JvhGSqlx7z72b/qD3nF3QDXPy+XsCSRGtWfs1icjDKOcd2UzuXwuSa/E1Fg2TJ",
@@ -83,7 +83,7 @@
"/build/invoice-pdf.ce9aace0.js": "sha384-mtZkXrpsXFMX2YvmmTlCm91QgsTlZLzLJnDAFcTuBDtDZ7TNkqLYkfCeLzFLVfwb",
"/build/invoice-pdf.2b749265.css": "sha384-DXXgkz2WWnrWnfBnXX5fmfPQSPb98upMnWxYKwTGYS04EhrPIWfDCutB2unIrWh7",
"/build/chart.f5becfac.js": "sha384-GSqETm8wULiVXyizvwRompfwu63r/C0Qd/AvrHDE4cqAKiIGCssb3QyBtGu1WN+W",
"/build/calendar.a1cbcd7b.js": "sha384-rDvqiEk91ZGY5lHb7vYIUWM2M550H6JAOLt1c3KO5H+toq7Ico7d/KoEDeG52cVW",
"/build/calendar.d45e4af5.js": "sha384-wi3/ek3Msn+rk9jebeJnzEXaHUUWlzxkOZwhZyJP5Cg+AKWtolWAXD/hCXQAg0kq",
"/build/calendar.bb473428.css": "sha384-900W9o8666Qpw21rLP7hn5Ql8tWd40k0IcE3QpFm7E7V6bKva7xQgGlyzVuuh4GK",
"/build/dashboard.6774a712.js": "sha384-lBwkNqUPv+IBbznagiFakY2BOIueq/Bg89wHO2XeM9YAZ51rPkrvdMd+XmFupHsM",
"/build/dashboard.18f5a8b7.css": "sha384-PBD8ftb2yBoSjRe2sN5Xb4dEz045kOEUfcIufdSis+tWoWdAx5j4Yic+F/6CYbrP"

View File

@@ -1,7 +1,7 @@
{
"build/app.css": "/build/app.4ccab775.css",
"build/app.js": "/build/app.8d1b738d.js",
"build/app-rtl.css": "/build/app-rtl.2e426047.css",
"build/app.css": "/build/app.3501ccee.css",
"build/app.js": "/build/app.6450be5e.js",
"build/app-rtl.css": "/build/app-rtl.670658da.css",
"build/app-rtl.js": "/build/app-rtl.3d445498.js",
"build/export-pdf.css": "/build/export-pdf.d8a6c23b.css",
"build/export-pdf.js": "/build/export-pdf.d367a32e.js",
@@ -11,7 +11,7 @@
"build/invoice-pdf.js": "/build/invoice-pdf.ce9aace0.js",
"build/chart.js": "/build/chart.f5becfac.js",
"build/calendar.css": "/build/calendar.bb473428.css",
"build/calendar.js": "/build/calendar.a1cbcd7b.js",
"build/calendar.js": "/build/calendar.d45e4af5.js",
"build/dashboard.css": "/build/dashboard.18f5a8b7.css",
"build/dashboard.js": "/build/dashboard.6774a712.js",
"build/runtime.js": "/build/runtime.f0079159.js",

View File

@@ -168,12 +168,14 @@ final class RegenerateLocalesCommand extends Command
$removableDuplicates[] = $locale;
}
$io->title('Redundant locales that will be skipped');
/*
$io->title('Redundant locales that could be skipped');
$io->writeln(implode('|', $removableDuplicates));
foreach ($removableDuplicates as $duplicate) {
unset($appLocales[$duplicate]);
}
*/
// in the future this list should be reduced to the list of available translations, but for a long time users
// could choose from the entire list of all locales, so we likely have to keep that forever ...

View File

@@ -28,9 +28,9 @@ use Symfony\Component\Security\Http\LoginLink\LoginLinkHandlerInterface;
final class UserLoginLinkCommand extends Command
{
public function __construct(
private LoginLinkHandlerInterface $loginLink,
private UserRepository $userRepository,
private RequestStack $requestStack
private readonly LoginLinkHandlerInterface $loginLink,
private readonly UserRepository $userRepository,
private readonly RequestStack $requestStack
)
{
parent::__construct();

View File

@@ -28,10 +28,10 @@ use Symfony\Component\Validator\Validator\ValidatorInterface;
final class CustomerService
{
public function __construct(
private CustomerRepository $repository,
private SystemConfiguration $configuration,
private ValidatorInterface $validator,
private EventDispatcherInterface $dispatcher
private readonly CustomerRepository $repository,
private readonly SystemConfiguration $configuration,
private readonly ValidatorInterface $validator,
private readonly EventDispatcherInterface $dispatcher
) {
}
@@ -74,7 +74,6 @@ final class CustomerService
}
/**
* @param Customer $customer
* @param string[] $groups
* @throws ValidationFailedException
*/
@@ -122,15 +121,28 @@ final class CustomerService
}
public function calculateNextCustomerNumber(): string
{
// we cannot use max(number) because a varchar column returns unexpected results
$start = $this->repository->countCustomer();
do {
$number = $this->getNextNumber($start++);
$customer = $this->findCustomerByNumber($number);
} while ($customer !== null);
return $number;
}
private function getNextNumber(int $counter): string
{
$format = $this->configuration->find('customer.number_format');
if (empty($format) || !\is_string($format)) {
$format = '{cc,4}';
}
$numberGenerator = new NumberGenerator($format, function (string $originalFormat, string $format, int $increaseBy): string|int {
$numberGenerator = new NumberGenerator($format, function (string $originalFormat, string $format, int $increaseBy) use ($counter): string|int {
return match ($format) {
'cc' => $this->repository->count([]) + $increaseBy,
'cc' => $counter + $increaseBy,
default => $originalFormat,
};
});

View File

@@ -146,6 +146,7 @@ class Customer implements EntityWithMetaFields, EntityWithBudget
*/
#[ORM\Column(name: 'timezone', type: 'string', length: 64, nullable: false)]
#[Assert\NotBlank]
#[Assert\Timezone]
#[Assert\Length(max: 64)]
#[Serializer\Expose]
#[Serializer\Groups(['Customer_Entity'])]

View File

@@ -80,6 +80,9 @@ abstract class AbstractSpreadsheetRenderer
'label' => 'name'
],
'username' => [],
'accountNumber' => [
'label' => 'account_number'
],
'customer' => [],
'project' => [],
'activity' => [],
@@ -315,6 +318,18 @@ abstract class AbstractSpreadsheetRenderer
}
}
if (isset($columns['accountNumber'])) {
if (!isset($columns['accountNumber']['render'])) {
$columns['accountNumber']['render'] = function (Worksheet $sheet, int $row, int $column, ExportableItem $entity) {
$accountNumber = '';
if (null !== $entity->getUser()) {
$accountNumber = $entity->getUser()->getAccountNumber();
}
$sheet->setCellValue(CellAddress::fromColumnAndRow($column, $row), $accountNumber);
};
}
}
if (isset($columns['customer']) && !isset($columns['customer']['render'])) {
$columns['customer']['render'] = function (Worksheet $sheet, int $row, int $column, ExportableItem $entity) {
$customer = '';

View File

@@ -45,11 +45,11 @@ use Psr\EventDispatcher\EventDispatcherInterface;
class ProjectStatisticService
{
public function __construct(
private ProjectRepository $projectRepository,
private ActivityRepository $activityRepository,
private TimesheetRepository $timesheetRepository,
private EventDispatcherInterface $dispatcher,
private UserRepository $userRepository
private readonly ProjectRepository $projectRepository,
private readonly ActivityRepository $activityRepository,
private readonly TimesheetRepository $timesheetRepository,
private readonly EventDispatcherInterface $dispatcher,
private readonly UserRepository $userRepository
)
{
}
@@ -729,7 +729,7 @@ class ProjectStatisticService
->addSelect('COALESCE(SUM(t.rate), 0) AS rate')
->andWhere($tplQb->expr()->in('t.project', ':project'))
->groupBy('t.project')
->setParameter('project', array_values($projectIds))
->setParameter('project', $projectIds)
;
// find the most recent timesheet for each project

View File

@@ -29,7 +29,7 @@ use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder;
/**
* @extends \Doctrine\ORM\EntityRepository<Customer>
* @extends EntityRepository<Customer>
*/
class CustomerRepository extends EntityRepository
{
@@ -75,7 +75,7 @@ class CustomerRepository extends EntityRepository
return $this->count([]);
}
private function addPermissionCriteria(QueryBuilder $qb, ?User $user = null, array $teams = [])
private function addPermissionCriteria(QueryBuilder $qb, ?User $user = null, array $teams = []): void
{
$permissions = $this->getPermissionCriteria($qb, $user, $teams);
if ($permissions->count() > 0) {
@@ -249,7 +249,6 @@ class CustomerRepository extends EntityRepository
}
/**
* @param CustomerQuery $query
* @return Customer[]
*/
public function getCustomersForQuery(CustomerQuery $query): iterable
@@ -261,12 +260,7 @@ class CustomerRepository extends EntityRepository
return $paginator->getAll();
}
/**
* @param Customer $delete
* @param Customer|null $replace
* @throws \Doctrine\ORM\Exception\ORMException
*/
public function deleteCustomer(Customer $delete, ?Customer $replace = null)
public function deleteCustomer(Customer $delete, ?Customer $replace = null): void
{
$em = $this->getEntityManager();
$em->beginTransaction();
@@ -308,14 +302,14 @@ class CustomerRepository extends EntityRepository
return $qb->getQuery()->getResult();
}
public function saveComment(CustomerComment $comment)
public function saveComment(CustomerComment $comment): void
{
$entityManager = $this->getEntityManager();
$entityManager->persist($comment);
$entityManager->flush();
}
public function deleteComment(CustomerComment $comment)
public function deleteComment(CustomerComment $comment): void
{
$entityManager = $this->getEntityManager();
$entityManager->remove($comment);

View File

@@ -100,7 +100,7 @@ final class WorkingTimeService
return $year->getMonth($monthDate);
}
public function approveMonth(User $user, Month $month, \DateTimeInterface $approvalDate, User $approver): void
public function approveMonth(User $user, Month $month, \DateTimeInterface $approvalDate, User $approvedBy): void
{
foreach ($month->getDays() as $day) {
$workingTime = $day->getWorkingTime();
@@ -116,7 +116,7 @@ final class WorkingTimeService
continue;
}
$workingTime->setApprovedBy($approver);
$workingTime->setApprovedBy($approvedBy);
// FIXME see calling method
$workingTime->setApprovedAt(\DateTimeImmutable::createFromInterface($approvalDate));
$this->workingTimeRepository->scheduleWorkingTimeUpdate($workingTime);
@@ -124,7 +124,7 @@ final class WorkingTimeService
$this->workingTimeRepository->persistScheduledWorkingTimes();
$this->eventDispatcher->dispatch(new WorkingTimeApproveMonthEvent($user, $month, $approvalDate, $approver));
$this->eventDispatcher->dispatch(new WorkingTimeApproveMonthEvent($user, $month, $approvalDate, $approvedBy));
}
/**

View File

@@ -76,71 +76,73 @@ class CsvRendererTest extends AbstractRendererTest
}
$expected = [
0 => '2019-06-16',
1 => '12:00',
2 => '12:06',
3 => '400',
4 => '0',
5 => '',
6 => 'kevin',
7 => 'kevin',
8 => 'Customer Name',
9 => 'project name',
10 => 'activity description',
11 => '',
12 => '',
13 => '',
14 => 'foo,bar',
15 => '',
16 => ' EUR 84.00 ',
17 => 'meta-bar',
18 => 'meta-bar2',
19 => 'customer-bar',
20 => '',
21 => 'project-foo2',
22 => 'activity-bar',
23 => 'timesheet',
24 => 'work',
25 => 'A-0123456789',
26 => 'DE-9876543210',
27 => 'ORDER-123',
'2019-06-16',
'12:00',
'12:06',
'400',
'0',
'',
'kevin',
'kevin',
'',
'Customer Name',
'project name',
'activity description',
'',
'',
'',
'foo,bar',
'',
' EUR 84.00 ',
'meta-bar',
'meta-bar2',
'customer-bar',
'',
'project-foo2',
'activity-bar',
'timesheet',
'work',
'A-0123456789',
'DE-9876543210',
'ORDER-123',
];
$expected2 = [
0 => '2019-06-16',
1 => '12:00',
2 => '12:06',
3 => '400',
4 => '0',
5 => '',
6 => 'nivek',
7 => 'nivek',
8 => 'Customer Name',
9 => 'project name',
10 => 'activity description',
11 => '',
12 => '',
13 => '',
14 => '',
15 => '',
16 => ' EUR -100.92',
17 => '',
18 => '',
19 => 'customer-bar',
20 => '',
21 => 'project-foo2',
22 => 'activity-bar',
23 => 'timesheet',
24 => 'work',
25 => 'A-0123456789',
26 => 'DE-9876543210',
27 => 'ORDER-123',
'2019-06-16',
'12:00',
'12:06',
'400',
'0',
'',
'nivek',
'nivek',
'',
'Customer Name',
'project name',
'activity description',
'',
'',
'',
'',
'',
' EUR -100.92',
'',
'',
'customer-bar',
'',
'project-foo2',
'activity-bar',
'timesheet',
'work',
'A-0123456789',
'DE-9876543210',
'ORDER-123',
];
self::assertEquals(7, \count($all));
self::assertEquals($expected, $all[5]);
self::assertEquals($expected2, $all[6]);
self::assertEquals(\count($expected), \count($all[0]));
self::assertEquals('foo', $all[4][14]);
self::assertEquals('foo', $all[4][15]);
}
}

View File

@@ -74,39 +74,40 @@ class CsvRendererTest extends AbstractRendererTest
}
$expected = [
0 => '2019-06-16',
1 => '12:00',
2 => '12:06',
3 => '400',
4 => '0',
5 => '',
6 => 'kevin',
7 => 'kevin',
8 => 'Customer Name',
9 => 'project name',
10 => 'activity description',
11 => '',
12 => '',
13 => '',
14 => 'foo,bar',
15 => '',
16 => ' EUR 84.00 ',
17 => 'meta-bar',
18 => 'meta-bar2',
19 => 'customer-bar',
20 => '',
21 => 'project-foo2',
22 => 'activity-bar',
23 => 'timesheet',
24 => 'work',
25 => 'A-0123456789',
26 => 'DE-9876543210',
27 => 'ORDER-123',
'2019-06-16',
'12:00',
'12:06',
'400',
'0',
'',
'kevin',
'kevin',
'',
'Customer Name',
'project name',
'activity description',
'',
'',
'',
'foo,bar',
'',
' EUR 84.00 ',
'meta-bar',
'meta-bar2',
'customer-bar',
'',
'project-foo2',
'activity-bar',
'timesheet',
'work',
'A-0123456789',
'DE-9876543210',
'ORDER-123',
];
self::assertEquals(6, \count($all));
self::assertEquals($expected, $all[5]);
self::assertEquals(\count($expected), \count($all[0]));
self::assertEquals('foo', $all[4][14]);
self::assertEquals('foo', $all[4][15]);
}
}

View File

@@ -624,7 +624,7 @@
</trans-unit>
<trans-unit id="W8XQTkJ" resname="complete_month.help">
<source>complete_month.help</source>
<target>Sobald der Monat abgeschlossen ist, kann der Benutzer für diesen Zeitraum keine Zeiten mehr anlegen oder bearbeiten.</target>
<target>Dies wird alle Tage des Jahres vor dem gewählten Datum abschliessen. Der Benutzer wird für den abgeschlossenen Zeitraum keine Zeiten mehr anlegen oder bearbeiten können.</target>
</trans-unit>
<trans-unit id="eWmotjb" resname="completed_month_pdf">
<source>completed_month_pdf</source>

View File

@@ -620,11 +620,11 @@
</trans-unit>
<trans-unit id="4lrfIsZ" resname="complete_month">
<source>Complete month</source>
<target state="translated">Complete month</target>
<target state="translated">Lock month</target>
</trans-unit>
<trans-unit id="W8XQTkJ" resname="complete_month.help">
<source>complete_month.help</source>
<target>After completing the month, the user will no longer be able to create or edit times for that period.</target>
<target>This will lock all days of the year before the chosen date. The user will no longer be able to create or edit times for the locked period.</target>
</trans-unit>
<trans-unit id="eWmotjb" resname="completed_month_pdf">
<source>completed_month_pdf</source>

View File

@@ -111,7 +111,7 @@
</trans-unit>
<trans-unit id="1ltxm9V" resname="task_todo">
<source>task_todo</source>
<target>Aufgabenbeschreibung</target>
<target>Aufgabe</target>
</trans-unit>
</body>
</file>

View File

@@ -111,7 +111,7 @@
</trans-unit>
<trans-unit id="1ltxm9V" resname="task_todo">
<source>task_todo</source>
<target>Task description</target>
<target>Task</target>
</trans-unit>
</body>
</file>