small bugfixes (#2655)

* improve report visibility
* fix timesheet duration, which breaks validation
* added contributing section in README
* do not allow to change project for existing activities - fixes #2576
* bump theme version to fix FOSUserBundle dependency
* use entity color instead of inherited one - fixes #2200
This commit is contained in:
Kevin Papst
2021-07-10 00:37:03 +02:00
committed by GitHub
parent 9ddb87a6fd
commit 2583fdf20e
17 changed files with 101 additions and 121 deletions

View File

@@ -411,6 +411,11 @@ class Timesheet implements EntityWithMetaFields, ExportItemInterface
*/
public function getDuration(): ?int
{
// only auto calculate if manually set duration is null - the result is important for eg. validations
if ($this->duration === null && $this->begin !== null && $this->end !== null) {
return $this->end->getTimestamp() - $this->begin->getTimestamp();
}
return $this->duration;
}

View File

@@ -72,7 +72,7 @@ class ProjectSubscriber extends AbstractActionsSubscriber
$event->addDelete($this->path('admin_project_delete', ['id' => $project->getId()]));
}
if ($this->isGranted('view_reporting') && $this->isGranted('details_project')) {
if ($project->isVisible() && $this->isGranted('view_reporting') && $this->isGranted('details_project')) {
$event->addAction('report_project_details', ['url' => $this->path('report_project_details', ['project' => $project->getId()]), 'icon' => 'reporting', 'translation_domain' => 'reporting']);
}
}

View File

@@ -36,7 +36,7 @@ class ActivityEditForm extends AbstractType
{
$project = null;
$customer = null;
$id = null;
$new = true;
if (isset($options['data'])) {
/** @var Activity $entry */
@@ -48,7 +48,7 @@ class ActivityEditForm extends AbstractType
$options['currency'] = $customer->getCurrency();
}
$id = $entry->getId();
$new = $entry->getId() === null;
}
$builder
@@ -64,55 +64,57 @@ class ActivityEditForm extends AbstractType
])
;
if ($options['customer']) {
if ($new) {
if ($options['customer']) {
$builder
->add('customer', CustomerType::class, [
'query_builder' => function (CustomerRepository $repo) use ($builder, $customer) {
$query = new CustomerFormTypeQuery($customer);
$query->setUser($builder->getOption('user'));
return $repo->getQueryBuilderForFormType($query);
},
'data' => $customer ? $customer : null,
'required' => false,
'mapped' => false,
'project_enabled' => true,
]);
}
$builder
->add('customer', CustomerType::class, [
'query_builder' => function (CustomerRepository $repo) use ($builder, $customer) {
$query = new CustomerFormTypeQuery($customer);
$query->setUser($builder->getOption('user'));
return $repo->getQueryBuilderForFormType($query);
},
'data' => $customer ? $customer : null,
->add('project', ProjectType::class, [
'required' => false,
'mapped' => false,
'project_enabled' => true,
]);
}
$builder
->add('project', ProjectType::class, [
'required' => false,
'query_builder' => function (ProjectRepository $repo) use ($builder, $project, $customer) {
$query = new ProjectFormTypeQuery($project, $customer);
$query->setUser($builder->getOption('user'));
$query->setIgnoreDate(true);
return $repo->getQueryBuilderForFormType($query);
},
]);
// replaces the project select after submission, to make sure only projects for the selected customer are displayed
$builder->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) use ($builder, $project) {
$data = $event->getData();
if (!isset($data['customer']) || empty($data['customer'])) {
return;
}
$event->getForm()->add('project', ProjectType::class, [
'group_by' => null,
'query_builder' => function (ProjectRepository $repo) use ($builder, $data, $project) {
$query = new ProjectFormTypeQuery($project, $data['customer']);
'query_builder' => function (ProjectRepository $repo) use ($builder, $project, $customer) {
$query = new ProjectFormTypeQuery($project, $customer);
$query->setUser($builder->getOption('user'));
$query->setIgnoreDate(true);
return $repo->getQueryBuilderForFormType($query);
},
]);
}
);
// replaces the project select after submission, to make sure only projects for the selected customer are displayed
$builder->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) use ($builder, $project) {
$data = $event->getData();
if (!isset($data['customer']) || empty($data['customer'])) {
return;
}
$event->getForm()->add('project', ProjectType::class, [
'group_by' => null,
'query_builder' => function (ProjectRepository $repo) use ($builder, $data, $project) {
$query = new ProjectFormTypeQuery($project, $data['customer']);
$query->setUser($builder->getOption('user'));
$query->setIgnoreDate(true);
return $repo->getQueryBuilderForFormType($query);
},
]);
}
);
}
$this->addCommonFields($builder, $options);
}

View File

@@ -32,6 +32,7 @@ class ProjectDetailsForm extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('project', ProjectType::class, [
'ignore_date' => true,
'required' => false,
'label' => false,
'width' => false,