start activity exports adaptations and new additions

This commit is contained in:
Julie Lenaerts 2022-08-03 16:48:33 +02:00
parent 32bb868b2b
commit ac0c221267
5 changed files with 148 additions and 10 deletions

View File

@ -0,0 +1,20 @@
<?php
/**
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chill\ActivityBundle\Export;
/**
* This class declare constants used for the export framework.
*/
abstract class Declarations
{
public const ACTIVITY = 'activity';
}

View File

@ -0,0 +1,109 @@
<?php
/**
* Chill is a software for social workers
*
* For the full copyright and license information, please view
* the LICENSE file that was distributed with this source code.
*/
declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Export;
use Chill\ActivityBundle\Export\Declarations;
use Chill\ActivityBundle\Repository\ActivityRepository;
use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\PersonBundle\Export\Declarations as ExportDeclarations;
use Doctrine\ORM\Query;
use LogicException;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role;
class CountActivityLinkedToACP implements ExportInterface, GroupedExportInterface
{
protected ActivityRepository $activityRepository;
public function __construct(
ActivityRepository $activityRepository
) {
$this->activityRepository = $activityRepository;
}
public function buildForm(FormBuilderInterface $builder)
{
}
public function getAllowedFormattersTypes()
{
return [FormatterInterface::TYPE_TABULAR];
}
public function getDescription()
{
return 'Count activities linked to an accompanying period by various parameters.';
}
public function getLabels($key, array $values, $data)
{
if ('export_count_activity_acp' !== $key) {
throw new LogicException("the key {$key} is not used by this export");
}
return static fn ($value) => '_header' === $value ? 'Number of activities linked to an accompanying period' : $value;
}
public function getQueryKeys($data)
{
return ['export_count_activity_acp'];
}
public function getResult($qb, $data)
{
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
}
public function getTitle()
{
return 'Count activities linked to an accompanying period';
}
public function getType()
{
return Declarations::ACTIVITY;
}
public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{
$centers = array_map(static fn ($el) => $el['center'], $acl);
$qb = $this
->activityRepository
->createQueryBuilder('activity')
->select('COUNT(activity.id) as export_count_activity_acp');
$qb->andWhere(
$qb->expr()->isNotNull('activity.accompanyingPeriod')
);
return $qb;
}
public function requiredRole()
{
return new Role(ActivityStatsVoter::STATS);
}
public function supportsModifiers()
{
return [ExportDeclarations::PERSON_TYPE, Declarations::ACTIVITY, ExportDeclarations::ACP_SHARED];
}
public function getGroup(): string
{
return 'Exports of activities';
}
}

View File

@ -12,6 +12,7 @@ declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Filter;
use Chill\ActivityBundle\Entity\ActivityType;
use Chill\ActivityBundle\Export\Declarations;
use Chill\ActivityBundle\Repository\ActivityTypeRepository;
use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportElementValidatedInterface;
@ -49,7 +50,7 @@ class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInter
public function alterQuery(QueryBuilder $qb, $data)
{
$where = $qb->getDQLPart('where');
$clause = $qb->expr()->in('activity.type', ':selected_activity_types');
$clause = $qb->expr()->in('activity.activityType', ':selected_activity_types');
if ($where instanceof Expr\Andx) {
$where->add($clause);
@ -63,7 +64,7 @@ class ActivityTypeFilter implements ExportElementValidatedInterface, FilterInter
public function applyOn()
{
return 'activity';
return Declarations::ACTIVITY;
}
public function buildForm(FormBuilderInterface $builder)

View File

@ -7,16 +7,21 @@ services:
class: Chill\ActivityBundle\Export\Export\CountActivity
tags:
- { name: chill.export, alias: 'count_activity' }
chill.activity.export.sum_activity_duration:
class: Chill\ActivityBundle\Export\Export\StatActivityDuration
chill.activity.export.count_activity_linked_to_acp:
class: Chill\ActivityBundle\Export\Export\CountActivityLinkedToACP
tags:
- { name: chill.export, alias: 'sum_activity_duration' }
- { name: chill.export, alias: 'count_activity_linked_to_acp' }
chill.activity.export.list_activity:
class: Chill\ActivityBundle\Export\Export\ListActivity
tags:
- { name: chill.export, alias: 'list_activity' }
# chill.activity.export.sum_activity_duration:
# class: Chill\ActivityBundle\Export\Export\StatActivityDuration
# tags:
# - { name: chill.export, alias: 'sum_activity_duration' }
# chill.activity.export.list_activity:
# class: Chill\ActivityBundle\Export\Export\ListActivity
# tags:
# - { name: chill.export, alias: 'list_activity' }
chill.activity.export.reason_filter:
class: Chill\ActivityBundle\Export\Filter\ActivityReasonFilter

View File

@ -211,6 +211,9 @@ List activities: Liste les activités
List activities description: Créer la liste des activités
Number of activities: Nombre d'activités
Exports of activities: Exports des activités
Number of activities linked to an accompanying course: Nombre d'activités liés à un parcours.
Count activities linked to an accompanying period: Nombre d'activités liés à un parcours.
Count activities linked to an accompanying period by various parameters.: Compte le nombre d'activités enregistrées et liés à un parcours en fonction de différents paramètres.
#filters
Filter by reason: Filtrer par sujet d'activité