Release 2.39 (#5604)

* prepare audit via annotation
* default calendar slot label distance of 1h
+ replace freestyle config with dropdown
* added missing return definition in callbacks
* refactor view name handling
* dispatch calendar view changes and push them into the URL to be able to reload the poage
* bump packages
* fix timezone issue in calendar sum calculation
* fixes #5618 resetRates()
* show expected daily hours in working-contract screen
This commit is contained in:
Kevin Papst
2025-08-30 11:41:17 +02:00
committed by GitHub
parent 4920ea5075
commit a4d658b821
85 changed files with 987 additions and 516 deletions

View File

@@ -68,7 +68,7 @@ class ActivityControllerTest extends AbstractControllerBaseTestCase
$fixture = new ActivityFixtures();
$fixture->setAmount(5);
$fixture->setCallback(function (Activity $activity) {
$fixture->setCallback(function (Activity $activity): void {
$activity->setVisible(true);
$activity->setComment('I am a foobar with tralalalala some more content');
$activity->setMetaField((new ActivityMeta())->setName('location')->setValue('homeoffice'));
@@ -111,7 +111,7 @@ class ActivityControllerTest extends AbstractControllerBaseTestCase
$fixture = new ActivityFixtures();
$fixture->setAmount(5);
$fixture->setCallback(function (Activity $activity) {
$fixture->setCallback(function (Activity $activity): void {
$activity->setVisible(true);
$activity->setComment('I am a foobar with tralalalala some more content');
$activity->setMetaField((new ActivityMeta())->setName('location')->setValue('homeoffice'));

View File

@@ -9,7 +9,11 @@
namespace App\Tests\Controller;
use App\DataFixtures\UserFixtures;
use App\Entity\User;
use App\Repository\UserRepository;
use App\WorkingTime\Calculator\WorkingTimeCalculatorDay;
use App\WorkingTime\Mode\WorkingTimeModeDay;
use PHPUnit\Framework\Attributes\Group;
#[Group('integration')]
@@ -31,6 +35,34 @@ class ContractControllerTest extends AbstractControllerBaseTestCase
self::assertEquals(0, $node->count());
}
public function testIndexActionWithWorkContract(): void
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_USER);
/** @var UserRepository $repository */
$repository = $this->getPrivateService(UserRepository::class);
$user = $this->loadUserFromDatabase(UserFixtures::USERNAME_USER);
$user->setWorkContractMode(WorkingTimeModeDay::ID);
$user->setPreferenceValue(WorkingTimeCalculatorDay::WORK_HOURS_MONDAY, '28800');
$user->setPreferenceValue(WorkingTimeCalculatorDay::WORK_HOURS_TUESDAY, '28800');
$user->setPreferenceValue(WorkingTimeCalculatorDay::WORK_HOURS_WEDNESDAY, '28800');
$user->setPreferenceValue(WorkingTimeCalculatorDay::WORK_HOURS_THURSDAY, '25200');
$user->setPreferenceValue(WorkingTimeCalculatorDay::WORK_HOURS_FRIDAY, '19800');
$user->setPreferenceValue(WorkingTimeCalculatorDay::WORK_HOURS_SATURDAY, '0');
$user->setPreferenceValue(WorkingTimeCalculatorDay::WORK_HOURS_SUNDAY, '0');
$repository->saveUser($user);
$this->assertAccessIsGranted($client, '/contract');
$content = $client->getResponse()->getContent();
self::assertNotFalse($content);
$node = $client->getCrawler()->filter('table#working_times_details');
self::assertEquals(1, $node->count());
self::assertStringContainsString('7:00', $content);
self::assertStringContainsString('8:00', $content);
self::assertStringContainsString('5:30', $content);
}
public function testTeamleadCanChangeUser(): void
{
$client = $this->getClientForAuthenticatedUser(User::ROLE_TEAMLEAD);

View File

@@ -68,7 +68,7 @@ class CustomerControllerTest extends AbstractControllerBaseTestCase
$fixture = new CustomerFixtures();
$fixture->setAmount(5);
$fixture->setCallback(function (Customer $customer) {
$fixture->setCallback(function (Customer $customer): void {
$customer->setVisible(true);
$customer->setComment('I am a foobar with tralalalala some more content');
$customer->setMetaField((new CustomerMeta())->setName('location')->setValue('homeoffice'));

View File

@@ -66,7 +66,7 @@ class ExportControllerTest extends AbstractControllerBaseTestCase
->setUser($user)
->setAmount(20)
->setStartDate($begin)
->setCallback(function (Timesheet $timesheet) use ($team, $em) {
->setCallback(function (Timesheet $timesheet) use ($team, $em): void {
$team->addProject($timesheet->getProject());
$em->persist($team);
})

View File

@@ -73,7 +73,7 @@ class ProjectControllerTest extends AbstractControllerBaseTestCase
$fixture = new ProjectFixtures();
$fixture->setAmount(5);
$i = 0;
$fixture->setCallback(function (Project $project) use (&$i) {
$fixture->setCallback(function (Project $project) use (&$i): void {
$project->setVisible(true);
switch ($i++) {
case 0:
@@ -137,7 +137,7 @@ class ProjectControllerTest extends AbstractControllerBaseTestCase
$fixture = new ProjectFixtures();
$fixture->setAmount(5);
$fixture->setCallback(function (Project $project) {
$fixture->setCallback(function (Project $project): void {
$project->setVisible(true);
$project->setComment('I am a foobar with tralalalala some more content');
$project->setMetaField((new ProjectMeta())->setName('location')->setValue('homeoffice'));

View File

@@ -46,7 +46,7 @@ class CustomerMonthlyProjectsControllerTest extends AbstractControllerBaseTestCa
$projects->setCustomers($customers);
$projects->setAmount(2);
$projects->setIsVisible(true);
$projects->setCallback(function (Project $project) {
$projects->setCallback(function (Project $project): void {
$project->setIsMonthlyBudget();
});
$this->importFixture($projects);

View File

@@ -40,7 +40,7 @@ class ProjectDateRangeControllerTest extends AbstractControllerBaseTestCase
$projects->setCustomers($customers);
$projects->setAmount(2);
$projects->setIsVisible(true);
$projects->setCallback(function (Project $project) {
$projects->setCallback(function (Project $project): void {
$project->setIsMonthlyBudget();
});
$this->importFixture($projects);

View File

@@ -49,7 +49,7 @@ class TeamControllerTest extends AbstractControllerBaseTestCase
$client = $this->getClientForAuthenticatedUser(User::ROLE_ADMIN);
$fixture = new TeamFixtures();
$fixture->setAmount(5);
$fixture->setCallback(function (Team $team) {
$fixture->setCallback(function (Team $team): void {
$team->setName($team->getName() . '- fantastic team with foooo bar magic');
});
$this->importFixture($fixture);

View File

@@ -108,7 +108,7 @@ class TimesheetControllerTest extends AbstractControllerBaseTestCase
$fixture->setAmount(5);
$fixture->setUser($this->getUserByRole(User::ROLE_USER));
$fixture->setStartDate($start);
$fixture->setCallback(function (Timesheet $timesheet) use ($tags) {
$fixture->setCallback(function (Timesheet $timesheet) use ($tags): void {
$timesheet->setDescription('I am a foobar with tralalalala some more content');
$timesheet->setMetaField((new TimesheetMeta())->setName('location')->setValue('homeoffice'));
$timesheet->setMetaField((new TimesheetMeta())->setName('feature')->setValue('timetracking'));
@@ -142,7 +142,7 @@ class TimesheetControllerTest extends AbstractControllerBaseTestCase
$fixture = new TimesheetFixtures();
$fixture->setAmount(15);
$fixture->setUser($this->getUserByRole(User::ROLE_USER));
$fixture->setCallback(function (Timesheet $timesheet) {
$fixture->setCallback(function (Timesheet $timesheet): void {
$duration = rand(3600, 36000);
$begin = new \DateTime('-15 days');
$end = clone $begin;
@@ -442,7 +442,7 @@ class TimesheetControllerTest extends AbstractControllerBaseTestCase
$end = new \DateTime('2018-08-02T20:30:00');
$fixture = new TimesheetFixtures();
$fixture->setCallback(function (Timesheet $timesheet) use ($begin, $end) {
$fixture->setCallback(function (Timesheet $timesheet) use ($begin, $end): void {
$timesheet->setBegin($begin);
$timesheet->setEnd($end);
});
@@ -474,7 +474,7 @@ class TimesheetControllerTest extends AbstractControllerBaseTestCase
$fixture->setAmount(1);
$fixture->setIsGlobal(true);
$fixture->setIsVisible(true);
$fixture->setCallback(function (Activity $activity) {
$fixture->setCallback(function (Activity $activity): void {
$activity->setBudget(1000);
$activity->setTimeBudget(3600);
});
@@ -523,7 +523,7 @@ class TimesheetControllerTest extends AbstractControllerBaseTestCase
$fixture->setAmount(1);
$fixture->setIsGlobal(true);
$fixture->setIsVisible(true);
$fixture->setCallback(function (Activity $activity) {
$fixture->setCallback(function (Activity $activity): void {
$activity->setBudget(1000);
$activity->setTimeBudget(3600);
});
@@ -813,7 +813,7 @@ class TimesheetControllerTest extends AbstractControllerBaseTestCase
$fixture->setAmountRunning(0);
$fixture->setUser($this->getUserByRole(User::ROLE_USER));
$fixture->setStartDate($dateTime->createDateTime());
$fixture->setCallback(function (Timesheet $timesheet) {
$fixture->setCallback(function (Timesheet $timesheet): void {
$timesheet->setDescription('Testing is fun!');
$begin = clone $timesheet->getBegin();
$begin->setTime(0, 0, 0);

View File

@@ -97,7 +97,7 @@ class TimesheetTeamControllerTest extends AbstractControllerBaseTestCase
$fixture->setAmount(5);
$fixture->setUser($this->getUserByRole(User::ROLE_USER));
$fixture->setStartDate($start);
$fixture->setCallback(function (Timesheet $timesheet) {
$fixture->setCallback(function (Timesheet $timesheet): void {
$timesheet->setDescription('I am a foobar with tralalalala some more content');
$timesheet->setMetaField((new TimesheetMeta())->setName('location')->setValue('homeoffice'));
$timesheet->setMetaField((new TimesheetMeta())->setName('feature')->setValue('timetracking'));
@@ -428,7 +428,7 @@ class TimesheetTeamControllerTest extends AbstractControllerBaseTestCase
$fixture->setAmountRunning(0);
$fixture->setUser($this->getUserByRole(User::ROLE_USER));
$fixture->setStartDate($dateTime->createDateTime());
$fixture->setCallback(function (Timesheet $timesheet) {
$fixture->setCallback(function (Timesheet $timesheet): void {
$timesheet->setDescription('Testing is fun!');
$begin = clone $timesheet->getBegin();
$begin->setTime(0, 0, 0);