added project start and end date (#1303)

* added sortable js library
* activity in invoice is optional
* added javascript widget for paginated boxes
* fix activity dropdown for globals only
* added timesheet service to reduce code duplication
* use repository to query for teams in dropdowns
* added project validator
* validate project start and end against timesheet
* include begin and end in dynamic form requests for projects
* added timezone and language option to import flag, improve timesheet import speed
* deactivate cross-timezone filter
* add virtual fields to field order list
* composer update
* added param to ignore dates
* position loader icon fixed - fixes #1330
* permission problem when creating a new project - fixes #1340
* remove dev dependencies webserver and thanks bundle
* stop information leak (begin and end date) in duration mode - fixes #1307
* unify timesheet edit dialog for user and admins
* fix security issue, own rates exposed to unauthorized users in multi-update dialog
This commit is contained in:
Kevin Papst
2020-01-05 02:49:01 +01:00
committed by GitHub
parent 50383673ca
commit d6798eed1e
121 changed files with 2465 additions and 1439 deletions

View File

@@ -47,12 +47,12 @@ class TeamFixtures extends Fixture implements DependentFixtureInterface
/**
* @param ObjectManager $manager
* @return User[]
* @return array<int|string, User>
*/
protected function getAllUsers(ObjectManager $manager)
protected function getAllUsers(ObjectManager $manager): array
{
$all = [];
/* @var User[] $entries */
/** @var User[] $entries */
$entries = $manager->getRepository(User::class)->findAll();
foreach ($entries as $temp) {
$all[$temp->getId()] = $temp;
@@ -63,13 +63,13 @@ class TeamFixtures extends Fixture implements DependentFixtureInterface
/**
* @param ObjectManager $manager
* @return Project[]
* @return array<int|string, Project>
*/
protected function getAllProjects(ObjectManager $manager)
protected function getAllProjects(ObjectManager $manager): array
{
$all = [];
/* @var Project[] $entries */
/** @var Project[] $entries */
$entries = $manager->getRepository(Project::class)->findAll();
foreach ($entries as $temp) {
$all[$temp->getId()] = $temp;

View File

@@ -35,8 +35,7 @@ class TimesheetFixtures extends Fixture implements DependentFixtureInterface
public const MIN_TIMESHEETS_PER_USER = 50;
public const MAX_TIMESHEETS_PER_USER = 500;
public const MAX_TIMESHEETS_TOTAL = 5000;
public const MIN_RUNNING_TIMESHEETS_PER_USER = 0;
public const MAX_RUNNING_TIMESHEETS_PER_USER = 3;
public const MAX_RUNNING_TIMESHEETS_PER_USER = 2;
public const TIMERANGE_DAYS = 1095; // 3 years
public const TIMERANGE_RUNNING = 1047; // in minutes = 17:45 hours
public const MIN_MINUTES_PER_ENTRY = 15;
@@ -79,7 +78,7 @@ class TimesheetFixtures extends Fixture implements DependentFixtureInterface
// random amount of timesheet entries for every user
$timesheetForUser = rand(self::MIN_TIMESHEETS_PER_USER, self::MAX_TIMESHEETS_PER_USER);
for ($i = 1; $i <= $timesheetForUser; $i++) {
if ($all > self::MAX_TIMESHEETS_TOTAL) {
if ($all > self::MAX_TIMESHEETS_TOTAL && $i > self::MIN_TIMESHEETS_PER_USER) {
break;
}
@@ -109,7 +108,7 @@ class TimesheetFixtures extends Fixture implements DependentFixtureInterface
}
// create active recordings for test user
$activeEntries = rand(self::MIN_RUNNING_TIMESHEETS_PER_USER, self::MAX_RUNNING_TIMESHEETS_PER_USER);
$activeEntries = rand(0, self::MAX_RUNNING_TIMESHEETS_PER_USER);
for ($i = 0; $i < $activeEntries; $i++) {
$entry = $this->createTimesheetEntry(
$user,
@@ -144,12 +143,12 @@ class TimesheetFixtures extends Fixture implements DependentFixtureInterface
/**
* @param ObjectManager $manager
* @return Tag[]
* @return array<int|string, Tag>
*/
protected function getAllTags(ObjectManager $manager)
protected function getAllTags(ObjectManager $manager): array
{
$all = [];
/* @var Tag[] $entries */
/** @var Tag[] $entries */
$entries = $manager->getRepository(Tag::class)->findAll();
foreach ($entries as $temp) {
$all[$temp->getId()] = $temp;
@@ -160,12 +159,12 @@ class TimesheetFixtures extends Fixture implements DependentFixtureInterface
/**
* @param ObjectManager $manager
* @return User[]
* @return array<int|string, User>
*/
protected function getAllUsers(ObjectManager $manager)
protected function getAllUsers(ObjectManager $manager): array
{
$all = [];
/* @var User[] $entries */
/** @var User[] $entries */
$entries = $manager->getRepository(User::class)->findAll();
foreach ($entries as $temp) {
$all[$temp->getId()] = $temp;
@@ -176,12 +175,12 @@ class TimesheetFixtures extends Fixture implements DependentFixtureInterface
/**
* @param ObjectManager $manager
* @return Project[]
* @return array<int|string, Project>
*/
protected function getAllProjects(ObjectManager $manager)
protected function getAllProjects(ObjectManager $manager): array
{
$all = [];
/* @var Project[] $entries */
/** @var Project[] $entries */
$entries = $manager->getRepository(Project::class)->findAll();
foreach ($entries as $temp) {
$all[$temp->getId()] = $temp;
@@ -192,12 +191,12 @@ class TimesheetFixtures extends Fixture implements DependentFixtureInterface
/**
* @param ObjectManager $manager
* @return Activity[]
* @return array<int|string, Activity>
*/
protected function getAllActivities(ObjectManager $manager)
protected function getAllActivities(ObjectManager $manager): array
{
$all = [];
/* @var Activity[] $entries */
/** @var Activity[] $entries */
$entries = $manager->getRepository(Activity::class)->findAll();
foreach ($entries as $temp) {
$all[$temp->getId()] = $temp;