This commit is contained in:
2022-09-05 14:49:07 +02:00
parent 6dbee02d82
commit c442529799
144 changed files with 3683 additions and 3809 deletions

View File

@@ -1,5 +1,12 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators; namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators;
@@ -8,9 +15,9 @@ use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\PersonBundle\Repository\SocialWork\SocialActionRepository; use Chill\PersonBundle\Repository\SocialWork\SocialActionRepository;
use Chill\PersonBundle\Templating\Entity\SocialActionRender; use Chill\PersonBundle\Templating\Entity\SocialActionRender;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class BySocialActionAggregator implements AggregatorInterface class BySocialActionAggregator implements AggregatorInterface
{ {
@@ -26,34 +33,6 @@ class BySocialActionAggregator implements AggregatorInterface
$this->actionRepository = $actionRepository; $this->actionRepository = $actionRepository;
} }
public function getLabels($key, array $values, $data)
{
return function($value) {
if ('_header' === $value) {
return 'Social action';
}
$sa = $this->actionRepository->find($value);
return $this->actionRender->renderString($sa, []);
};
}
public function getQueryKeys($data): array
{
return ['socialaction_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getTitle(): string
{
return 'Group activity by linked socialaction';
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -61,7 +40,7 @@ class BySocialActionAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if(!in_array('socialaction', $qb->getAllAliases())) { if (!in_array('socialaction', $qb->getAllAliases(), true)) {
$qb->join('activity.socialActions', 'socialaction'); $qb->join('activity.socialActions', 'socialaction');
} }
@@ -80,4 +59,32 @@ class BySocialActionAggregator implements AggregatorInterface
{ {
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value) {
if ('_header' === $value) {
return 'Social action';
}
$sa = $this->actionRepository->find($value);
return $this->actionRender->renderString($sa, []);
};
}
public function getQueryKeys($data): array
{
return ['socialaction_aggregator'];
}
public function getTitle(): string
{
return 'Group activity by linked socialaction';
}
} }

View File

@@ -1,5 +1,12 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators; namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators;
@@ -8,16 +15,16 @@ use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\PersonBundle\Repository\SocialWork\SocialIssueRepository; use Chill\PersonBundle\Repository\SocialWork\SocialIssueRepository;
use Chill\PersonBundle\Templating\Entity\SocialIssueRender; use Chill\PersonBundle\Templating\Entity\SocialIssueRender;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class BySocialIssueAggregator implements AggregatorInterface class BySocialIssueAggregator implements AggregatorInterface
{ {
private SocialIssueRepository $issueRepository;
private SocialIssueRender $issueRender; private SocialIssueRender $issueRender;
private SocialIssueRepository $issueRepository;
public function __construct( public function __construct(
SocialIssueRepository $issueRepository, SocialIssueRepository $issueRepository,
SocialIssueRender $issueRender SocialIssueRender $issueRender
@@ -26,35 +33,6 @@ class BySocialIssueAggregator implements AggregatorInterface
$this->issueRender = $issueRender; $this->issueRender = $issueRender;
} }
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Social issues';
}
$i = $this->issueRepository->find($value);
return $this->issueRender->renderString($i, []);
};
}
public function getQueryKeys($data): array
{
return ['socialissue_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getTitle(): string
{
return 'Group activity by linked socialissue';
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -62,7 +40,7 @@ class BySocialIssueAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('socialissue', $qb->getAllAliases())) { if (!in_array('socialissue', $qb->getAllAliases(), true)) {
$qb->join('activity.socialIssues', 'socialissue'); $qb->join('activity.socialIssues', 'socialissue');
} }
@@ -81,4 +59,32 @@ class BySocialIssueAggregator implements AggregatorInterface
{ {
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Social issues';
}
$i = $this->issueRepository->find($value);
return $this->issueRender->renderString($i, []);
};
}
public function getQueryKeys($data): array
{
return ['socialissue_aggregator'];
}
public function getTitle(): string
{
return 'Group activity by linked socialissue';
}
} }

View File

@@ -1,5 +1,12 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators; namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators;
@@ -8,16 +15,16 @@ use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\ThirdPartyBundle\Repository\ThirdPartyRepository; use Chill\ThirdPartyBundle\Repository\ThirdPartyRepository;
use Chill\ThirdPartyBundle\Templating\Entity\ThirdPartyRender; use Chill\ThirdPartyBundle\Templating\Entity\ThirdPartyRender;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class ByThirdpartyAggregator implements AggregatorInterface class ByThirdpartyAggregator implements AggregatorInterface
{ {
private ThirdPartyRepository $thirdPartyRepository;
private ThirdPartyRender $thirdPartyRender; private ThirdPartyRender $thirdPartyRender;
private ThirdPartyRepository $thirdPartyRepository;
public function __construct( public function __construct(
ThirdPartyRepository $thirdPartyRepository, ThirdPartyRepository $thirdPartyRepository,
ThirdPartyRender $thirdPartyRender ThirdPartyRender $thirdPartyRender
@@ -26,34 +33,6 @@ class ByThirdpartyAggregator implements AggregatorInterface
$this->thirdPartyRender = $thirdPartyRender; $this->thirdPartyRender = $thirdPartyRender;
} }
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Accepted thirdparty';
}
$tp = $this->thirdPartyRepository->find($value);
return $this->thirdPartyRender->renderString($tp, []);
};
}
public function getQueryKeys($data): array
{
return ['thirdparty_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getTitle(): string
{
return 'Group activity by linked thirdparties';
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -61,7 +40,7 @@ class ByThirdpartyAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('thirdparty', $qb->getAllAliases())) { if (!in_array('thirdparty', $qb->getAllAliases(), true)) {
$qb->join('activity.thirdParties', 'thirdparty'); $qb->join('activity.thirdParties', 'thirdparty');
} }
@@ -80,4 +59,32 @@ class ByThirdpartyAggregator implements AggregatorInterface
{ {
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Accepted thirdparty';
}
$tp = $this->thirdPartyRepository->find($value);
return $this->thirdPartyRender->renderString($tp, []);
};
}
public function getQueryKeys($data): array
{
return ['thirdparty_aggregator'];
}
public function getTitle(): string
{
return 'Group activity by linked thirdparties';
}
} }

View File

@@ -1,5 +1,12 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators; namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators;
@@ -8,16 +15,16 @@ use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\UserRepository; use Chill\MainBundle\Repository\UserRepository;
use Chill\MainBundle\Templating\Entity\UserRender; use Chill\MainBundle\Templating\Entity\UserRender;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class ByUserAggregator implements AggregatorInterface class ByUserAggregator implements AggregatorInterface
{ {
private UserRepository $userRepository;
private UserRender $userRender; private UserRender $userRender;
private UserRepository $userRepository;
public function __construct( public function __construct(
UserRepository $userRepository, UserRepository $userRepository,
UserRender $userRender UserRender $userRender
@@ -26,34 +33,6 @@ class ByUserAggregator implements AggregatorInterface
$this->userRender = $userRender; $this->userRender = $userRender;
} }
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Accepted users';
}
$u = $this->userRepository->find($value);
return $this->userRender->renderString($u, []);
};
}
public function getQueryKeys($data): array
{
return ['users_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getTitle(): string
{
return 'Group activity by linked users';
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -61,7 +40,7 @@ class ByUserAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('user', $qb->getAllAliases())) { if (!in_array('user', $qb->getAllAliases(), true)) {
$qb->join('activity.users', 'user'); $qb->join('activity.users', 'user');
} }
@@ -80,4 +59,32 @@ class ByUserAggregator implements AggregatorInterface
{ {
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Accepted users';
}
$u = $this->userRepository->find($value);
return $this->userRender->renderString($u, []);
};
}
public function getQueryKeys($data): array
{
return ['users_aggregator'];
}
public function getTitle(): string
{
return 'Group activity by linked users';
}
} }

View File

@@ -1,12 +1,19 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators; namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators;
use Chill\ActivityBundle\Export\Declarations; use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Closure; use DateTime;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use RuntimeException; use RuntimeException;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
@@ -21,7 +28,7 @@ class DateAggregator implements AggregatorInterface
'by year' => 'year', 'by year' => 'year',
]; ];
private CONST DEFAULT_CHOICE = 'year'; private const DEFAULT_CHOICE = 'year';
private TranslatorInterface $translator; private TranslatorInterface $translator;
@@ -31,54 +38,6 @@ class DateAggregator implements AggregatorInterface
$this->translator = $translator; $this->translator = $translator;
} }
public function getLabels($key, array $values, $data)
{
return function ($value) use ($data): string {
if ($value === '_header') {
return 'by '. $data['frequency'];
}
switch ($data['frequency']) {
case 'month':
$month = \DateTime::createFromFormat('!m', $value);
return sprintf(
"%02d (%s)",
$value,
$month->format('M')
);
case 'week':
//return $this->translator->trans('for week') .' '. $value ;
case 'year':
//return $this->translator->trans('in year') .' '. $value ;
default:
return $value;
}
};
}
public function getQueryKeys($data): array
{
return ['date_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('frequency', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function getTitle(): string
{
return 'Group activity by date';
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -90,13 +49,19 @@ class DateAggregator implements AggregatorInterface
switch ($data['frequency']) { switch ($data['frequency']) {
case 'month': case 'month':
$fmt = 'MM'; break; $fmt = 'MM';
break;
case 'week': case 'week':
$fmt = 'IW'; break; $fmt = 'IW';
break;
case 'year': case 'year':
$fmt = 'YYYY'; $order = 'DESC'; break; $fmt = 'YYYY'; $order = 'DESC';
break;
default: default:
throw new RuntimeException(sprintf("The frequency data '%s' is invalid.", $data['frequency'])); throw new RuntimeException(sprintf("The frequency data '%s' is invalid.", $data['frequency']));
@@ -126,4 +91,53 @@ class DateAggregator implements AggregatorInterface
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('frequency', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function getLabels($key, array $values, $data)
{
return static function ($value) use ($data): string {
if ('_header' === $value) {
return 'by ' . $data['frequency'];
}
switch ($data['frequency']) {
case 'month':
$month = DateTime::createFromFormat('!m', $value);
return sprintf(
'%02d (%s)',
$value,
$month->format('M')
);
case 'week':
//return $this->translator->trans('for week') .' '. $value ;
case 'year':
//return $this->translator->trans('in year') .' '. $value ;
default:
return $value;
}
};
}
public function getQueryKeys($data): array
{
return ['date_aggregator'];
}
public function getTitle(): string
{
return 'Group activity by date';
}
} }

View File

@@ -1,5 +1,12 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators; namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators;
@@ -8,9 +15,9 @@ use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\LocationTypeRepository; use Chill\MainBundle\Repository\LocationTypeRepository;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class LocationTypeAggregator implements AggregatorInterface class LocationTypeAggregator implements AggregatorInterface
{ {
@@ -26,36 +33,6 @@ class LocationTypeAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Accepted locationtype';
}
$lt = $this->locationTypeRepository->find($value);
return $this->translatableStringHelper->localize(
$lt->getTitle()
);
};
}
public function getQueryKeys($data): array
{
return ['locationtype_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getTitle(): string
{
return 'Group activity by locationtype';
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -63,7 +40,7 @@ class LocationTypeAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('location', $qb->getAllAliases())) { if (!in_array('location', $qb->getAllAliases(), true)) {
$qb->join('activity.location', 'location'); $qb->join('activity.location', 'location');
} }
@@ -83,4 +60,33 @@ class LocationTypeAggregator implements AggregatorInterface
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Accepted locationtype';
}
$lt = $this->locationTypeRepository->find($value);
return $this->translatableStringHelper->localize(
$lt->getTitle()
);
};
}
public function getQueryKeys($data): array
{
return ['locationtype_aggregator'];
}
public function getTitle(): string
{
return 'Group activity by locationtype';
}
} }

View File

@@ -1,5 +1,12 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators; namespace Chill\ActivityBundle\Export\Aggregator\ACPAggregators;
@@ -8,9 +15,9 @@ use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\ScopeRepository; use Chill\MainBundle\Repository\ScopeRepository;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class UserScopeAggregator implements AggregatorInterface class UserScopeAggregator implements AggregatorInterface
{ {
@@ -26,36 +33,6 @@ class UserScopeAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Scope';
}
$s = $this->scopeRepository->find($value);
return $this->translatableStringHelper->localize(
$s->getName()
);
};
}
public function getQueryKeys($data): array
{
return ['userscope_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getTitle(): string
{
return 'Group activity by userscope';
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -63,7 +40,7 @@ class UserScopeAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('user', $qb->getAllAliases())) { if (!in_array('user', $qb->getAllAliases(), true)) {
$qb->join('activity.user', 'user'); $qb->join('activity.user', 'user');
} }
@@ -83,4 +60,33 @@ class UserScopeAggregator implements AggregatorInterface
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Scope';
}
$s = $this->scopeRepository->find($value);
return $this->translatableStringHelper->localize(
$s->getName()
);
};
}
public function getQueryKeys($data): array
{
return ['userscope_aggregator'];
}
public function getTitle(): string
{
return 'Group activity by userscope';
}
} }

View File

@@ -21,6 +21,7 @@ use Doctrine\ORM\Query\Expr\Join;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Security\Core\Role\Role;
use function in_array;
class ActivityTypeAggregator implements AggregatorInterface class ActivityTypeAggregator implements AggregatorInterface
{ {
@@ -45,7 +46,7 @@ class ActivityTypeAggregator implements AggregatorInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('type', $qb->getAllAliases())) { if (!in_array('type', $qb->getAllAliases(), true)) {
$qb->join('activity.activityType', 'type'); $qb->join('activity.activityType', 'type');
} }

View File

@@ -25,10 +25,10 @@ class ActivityUserAggregator implements AggregatorInterface
{ {
public const KEY = 'activity_user_id'; public const KEY = 'activity_user_id';
private UserRepository $userRepository;
private UserRender $userRender; private UserRender $userRender;
private UserRepository $userRepository;
public function __construct( public function __construct(
UserRepository $userRepository, UserRepository $userRepository,
UserRender $userRender UserRender $userRender

View File

@@ -18,7 +18,7 @@ abstract class Declarations
{ {
public const ACTIVITY = 'activity'; public const ACTIVITY = 'activity';
public const ACTIVITY_ACP = "activity_linked_to_acp"; public const ACTIVITY_ACP = 'activity_linked_to_acp';
public const ACTIVITY_PERSON = "activity_linked_to_person"; public const ACTIVITY_PERSON = 'activity_linked_to_person';
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\LinkedToACP; namespace Chill\ActivityBundle\Export\Export\LinkedToACP;
use Chill\ActivityBundle\Entity\Activity; use Chill\ActivityBundle\Entity\Activity;
@@ -8,11 +17,9 @@ use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportInterface; use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface; use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface; use Chill\MainBundle\Export\GroupedExportInterface;
use Closure;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Security\Core\Role\Role;
@@ -31,11 +38,6 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
// TODO: Implement buildForm() method. // TODO: Implement buildForm() method.
} }
public function getTitle(): string
{
return 'Average activity linked to an accompanying period duration';
}
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
@@ -46,6 +48,11 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
return 'Average activities linked to an accompanying period duration by various parameters.'; return 'Average activities linked to an accompanying period duration by various parameters.';
} }
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_avg_activity_duration' !== $key) { if ('export_avg_activity_duration' !== $key) {
@@ -65,6 +72,11 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
public function getTitle(): string
{
return 'Average activity linked to an accompanying period duration';
}
public function getType(): string public function getType(): string
{ {
return Declarations::ACTIVITY; return Declarations::ACTIVITY;
@@ -73,8 +85,7 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
public function initiateQuery(array $requiredModifiers, array $acl, array $data = []) public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{ {
$qb = $this->repository->createQueryBuilder('activity') $qb = $this->repository->createQueryBuilder('activity')
->join('activity.accompanyingPeriod', 'acp') ->join('activity.accompanyingPeriod', 'acp');
;
$qb->select('AVG(activity.durationTime) as export_avg_activity_duration'); $qb->select('AVG(activity.durationTime) as export_avg_activity_duration');
@@ -94,10 +105,4 @@ class AvgActivityDuration implements ExportInterface, GroupedExportInterface
//PersonDeclarations::ACP_TYPE, //PersonDeclarations::ACP_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\LinkedToACP; namespace Chill\ActivityBundle\Export\Export\LinkedToACP;
use Chill\ActivityBundle\Entity\Activity; use Chill\ActivityBundle\Entity\Activity;
@@ -8,11 +17,9 @@ use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportInterface; use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface; use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface; use Chill\MainBundle\Export\GroupedExportInterface;
use Closure;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Security\Core\Role\Role;
@@ -31,11 +38,6 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
// TODO: Implement buildForm() method. // TODO: Implement buildForm() method.
} }
public function getTitle(): string
{
return 'Average activity linked to an accompanying period visit duration';
}
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
@@ -46,6 +48,11 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
return 'Average activities linked to an accompanying period visit duration by various parameters.'; return 'Average activities linked to an accompanying period visit duration by various parameters.';
} }
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_avg_activity_visit_duration' !== $key) { if ('export_avg_activity_visit_duration' !== $key) {
@@ -65,6 +72,11 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
public function getTitle(): string
{
return 'Average activity linked to an accompanying period visit duration';
}
public function getType(): string public function getType(): string
{ {
return Declarations::ACTIVITY; return Declarations::ACTIVITY;
@@ -73,8 +85,7 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
public function initiateQuery(array $requiredModifiers, array $acl, array $data = []) public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{ {
$qb = $this->repository->createQueryBuilder('activity') $qb = $this->repository->createQueryBuilder('activity')
->join('activity.accompanyingPeriod', 'acp') ->join('activity.accompanyingPeriod', 'acp');
;
$qb->select('AVG(activity.travelTime) as export_avg_activity_visit_duration'); $qb->select('AVG(activity.travelTime) as export_avg_activity_visit_duration');
@@ -94,10 +105,4 @@ class AvgActivityVisitDuration implements ExportInterface, GroupedExportInterfac
//PersonDeclarations::ACP_TYPE, //PersonDeclarations::ACP_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
} }

View File

@@ -49,6 +49,11 @@ class CountActivity implements ExportInterface, GroupedExportInterface
return 'Count activities linked to an accompanying period by various parameters.'; return 'Count activities linked to an accompanying period by various parameters.';
} }
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_count_activity' !== $key) { if ('export_count_activity' !== $key) {
@@ -81,8 +86,7 @@ class CountActivity implements ExportInterface, GroupedExportInterface
public function initiateQuery(array $requiredModifiers, array $acl, array $data = []) public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{ {
$qb = $this->repository->createQueryBuilder('activity') $qb = $this->repository->createQueryBuilder('activity')
->join('activity.accompanyingPeriod', 'acp') ->join('activity.accompanyingPeriod', 'acp');
;
$qb->select('COUNT(activity.id) as export_count_activity'); $qb->select('COUNT(activity.id) as export_count_activity');
@@ -102,9 +106,4 @@ class CountActivity implements ExportInterface, GroupedExportInterface
//PersonDeclarations::ACP_TYPE, //PersonDeclarations::ACP_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\LinkedToACP; namespace Chill\ActivityBundle\Export\Export\LinkedToACP;
use Chill\ActivityBundle\Entity\Activity; use Chill\ActivityBundle\Entity\Activity;
@@ -8,11 +17,9 @@ use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportInterface; use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface; use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface; use Chill\MainBundle\Export\GroupedExportInterface;
use Closure;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Security\Core\Role\Role;
@@ -31,11 +38,6 @@ class SumActivityDuration implements ExportInterface, GroupedExportInterface
// TODO: Implement buildForm() method. // TODO: Implement buildForm() method.
} }
public function getTitle(): string
{
return 'Sum activity linked to an accompanying period duration';
}
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
@@ -46,6 +48,11 @@ class SumActivityDuration implements ExportInterface, GroupedExportInterface
return 'Sum activities linked to an accompanying period duration by various parameters.'; return 'Sum activities linked to an accompanying period duration by various parameters.';
} }
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_sum_activity_duration' !== $key) { if ('export_sum_activity_duration' !== $key) {
@@ -65,6 +72,11 @@ class SumActivityDuration implements ExportInterface, GroupedExportInterface
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
public function getTitle(): string
{
return 'Sum activity linked to an accompanying period duration';
}
public function getType(): string public function getType(): string
{ {
return Declarations::ACTIVITY; return Declarations::ACTIVITY;
@@ -73,8 +85,7 @@ class SumActivityDuration implements ExportInterface, GroupedExportInterface
public function initiateQuery(array $requiredModifiers, array $acl, array $data = []) public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{ {
$qb = $this->repository->createQueryBuilder('activity') $qb = $this->repository->createQueryBuilder('activity')
->join('activity.accompanyingPeriod', 'acp') ->join('activity.accompanyingPeriod', 'acp');
;
$qb->select('SUM(activity.durationTime) as export_sum_activity_duration'); $qb->select('SUM(activity.durationTime) as export_sum_activity_duration');
@@ -94,10 +105,4 @@ class SumActivityDuration implements ExportInterface, GroupedExportInterface
//PersonDeclarations::ACP_TYPE, //PersonDeclarations::ACP_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\LinkedToACP; namespace Chill\ActivityBundle\Export\Export\LinkedToACP;
use Chill\ActivityBundle\Entity\Activity; use Chill\ActivityBundle\Entity\Activity;
@@ -8,11 +17,9 @@ use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportInterface; use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface; use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface; use Chill\MainBundle\Export\GroupedExportInterface;
use Closure;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Security\Core\Role\Role;
@@ -31,11 +38,6 @@ class SumActivityVisitDuration implements ExportInterface, GroupedExportInterfac
// TODO: Implement buildForm() method. // TODO: Implement buildForm() method.
} }
public function getTitle(): string
{
return 'Sum activity linked to an accompanying period visit duration';
}
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
@@ -46,6 +48,11 @@ class SumActivityVisitDuration implements ExportInterface, GroupedExportInterfac
return 'Sum activities linked to an accompanying period visit duration by various parameters.'; return 'Sum activities linked to an accompanying period visit duration by various parameters.';
} }
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_sum_activity_visit_duration' !== $key) { if ('export_sum_activity_visit_duration' !== $key) {
@@ -65,6 +72,11 @@ class SumActivityVisitDuration implements ExportInterface, GroupedExportInterfac
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
public function getTitle(): string
{
return 'Sum activity linked to an accompanying period visit duration';
}
public function getType(): string public function getType(): string
{ {
return Declarations::ACTIVITY; return Declarations::ACTIVITY;
@@ -73,8 +85,7 @@ class SumActivityVisitDuration implements ExportInterface, GroupedExportInterfac
public function initiateQuery(array $requiredModifiers, array $acl, array $data = []) public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{ {
$qb = $this->repository->createQueryBuilder('activity') $qb = $this->repository->createQueryBuilder('activity')
->join('activity.accompanyingPeriod', 'acp') ->join('activity.accompanyingPeriod', 'acp');
;
$qb->select('SUM(activity.travelTime) as export_sum_activity_visit_duration'); $qb->select('SUM(activity.travelTime) as export_sum_activity_visit_duration');
@@ -94,9 +105,4 @@ class SumActivityVisitDuration implements ExportInterface, GroupedExportInterfac
//PersonDeclarations::ACP_TYPE, //PersonDeclarations::ACP_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of activities linked to an accompanying period';
}
} }

View File

@@ -11,12 +11,12 @@ declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Export\LinkedToPerson; namespace Chill\ActivityBundle\Export\Export\LinkedToPerson;
use Chill\ActivityBundle\Export\Declarations;
use Chill\ActivityBundle\Repository\ActivityRepository; use Chill\ActivityBundle\Repository\ActivityRepository;
use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter; use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\ExportInterface; use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface; use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface; use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\ActivityBundle\Export\Declarations;
use Chill\PersonBundle\Export\Declarations as PersonDeclarations; use Chill\PersonBundle\Export\Declarations as PersonDeclarations;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use LogicException; use LogicException;
@@ -47,6 +47,11 @@ class CountActivity implements ExportInterface, GroupedExportInterface
return 'Count activities linked to a person by various parameters.'; return 'Count activities linked to a person by various parameters.';
} }
public function getGroup(): string
{
return 'Exports of activities linked to a person';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_count_activity' !== $key) { if ('export_count_activity' !== $key) {
@@ -81,15 +86,13 @@ class CountActivity implements ExportInterface, GroupedExportInterface
$centers = array_map(static fn ($el) => $el['center'], $acl); $centers = array_map(static fn ($el) => $el['center'], $acl);
$qb = $this->activityRepository->createQueryBuilder('activity') $qb = $this->activityRepository->createQueryBuilder('activity')
->join('activity.person', 'person') ->join('activity.person', 'person');
;
$qb->select('COUNT(activity.id) as export_count_activity'); $qb->select('COUNT(activity.id) as export_count_activity');
$qb $qb
->where($qb->expr()->in('person.center', ':centers')) ->where($qb->expr()->in('person.center', ':centers'))
->setParameter('centers', $centers) ->setParameter('centers', $centers);
;
return $qb; return $qb;
} }
@@ -107,9 +110,4 @@ class CountActivity implements ExportInterface, GroupedExportInterface
//PersonDeclarations::PERSON_TYPE, //PersonDeclarations::PERSON_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of activities linked to a person';
}
} }

View File

@@ -12,12 +12,14 @@ declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Export\LinkedToPerson; namespace Chill\ActivityBundle\Export\Export\LinkedToPerson;
use Chill\ActivityBundle\Entity\ActivityReason; use Chill\ActivityBundle\Entity\ActivityReason;
use Chill\ActivityBundle\Export\Declarations;
use Chill\ActivityBundle\Repository\ActivityRepository; use Chill\ActivityBundle\Repository\ActivityRepository;
use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter; use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Export\FormatterInterface; use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface; use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\MainBundle\Export\ListInterface; use Chill\MainBundle\Export\ListInterface;
use Chill\MainBundle\Templating\TranslatableStringHelperInterface; use Chill\MainBundle\Templating\TranslatableStringHelperInterface;
use Chill\PersonBundle\Export\Declarations as PersonDeclarations;
use DateTime; use DateTime;
use Doctrine\DBAL\Exception\InvalidArgumentException; use Doctrine\DBAL\Exception\InvalidArgumentException;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
@@ -28,8 +30,6 @@ use Symfony\Component\Security\Core\Role\Role;
use Symfony\Component\Validator\Constraints\Callback; use Symfony\Component\Validator\Constraints\Callback;
use Symfony\Component\Validator\Context\ExecutionContextInterface; use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Symfony\Contracts\Translation\TranslatorInterface; use Symfony\Contracts\Translation\TranslatorInterface;
use Chill\ActivityBundle\Export\Declarations;
use Chill\PersonBundle\Export\Declarations as PersonDeclarations;
use function array_key_exists; use function array_key_exists;
use function count; use function count;
@@ -100,6 +100,11 @@ class ListActivity implements ListInterface, GroupedExportInterface
return 'List activities linked to a person description'; return 'List activities linked to a person description';
} }
public function getGroup(): string
{
return 'Exports of activities linked to a person';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
switch ($key) { switch ($key) {
@@ -283,9 +288,4 @@ class ListActivity implements ListInterface, GroupedExportInterface
//PersonDeclarations::PERSON_TYPE, //PersonDeclarations::PERSON_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of activities linked to a person';
}
} }

View File

@@ -11,6 +11,7 @@ declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Export\LinkedToPerson; namespace Chill\ActivityBundle\Export\Export\LinkedToPerson;
use Chill\ActivityBundle\Export\Declarations;
use Chill\ActivityBundle\Repository\ActivityRepository; use Chill\ActivityBundle\Repository\ActivityRepository;
use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter; use Chill\ActivityBundle\Security\Authorization\ActivityStatsVoter;
use Chill\MainBundle\Entity\Center; use Chill\MainBundle\Entity\Center;
@@ -18,7 +19,6 @@ use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface; use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface; use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\PersonBundle\Export\Declarations as PersonDeclarations; use Chill\PersonBundle\Export\Declarations as PersonDeclarations;
use Chill\ActivityBundle\Export\Declarations;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use LogicException; use LogicException;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@@ -67,6 +67,11 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
} }
} }
public function getGroup(): string
{
return 'Exports of activities linked to a person';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_stat_activity' !== $key) { if ('export_stat_activity' !== $key) {
@@ -135,9 +140,4 @@ class StatActivityDuration implements ExportInterface, GroupedExportInterface
//PersonDeclarations::PERSON_TYPE, //PersonDeclarations::PERSON_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of activities linked to a person';
}
} }

View File

@@ -1,17 +1,25 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Filter\ACPFilters; namespace Chill\ActivityBundle\Export\Filter\ACPFilters;
use Chill\MainBundle\Export\FilterInterface;
use Chill\ActivityBundle\Export\Declarations; use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\FilterInterface;
use Chill\PersonBundle\Entity\SocialWork\SocialAction; use Chill\PersonBundle\Entity\SocialWork\SocialAction;
use Chill\PersonBundle\Templating\Entity\SocialActionRender; use Chill\PersonBundle\Templating\Entity\SocialActionRender;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class BySocialActionFilter implements FilterInterface class BySocialActionFilter implements FilterInterface
{ {
@@ -22,36 +30,6 @@ class BySocialActionFilter implements FilterInterface
$this->actionRender = $actionRender; $this->actionRender = $actionRender;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_socialactions', EntityType::class, [
'class' => SocialAction::class,
'choice_label' => function (SocialAction $sa) {
return $this->actionRender->renderString($sa, []);
},
'multiple' => true,
'expanded' => true,
]);
}
public function getTitle(): string
{
return 'Filter activity by linked socialaction';
}
public function describeAction($data, $format = 'string'): array
{
$actions = [];
foreach ($data['accepted_socialactions'] as $sa) {
$actions[] = $this->actionRender->renderString($sa, []);
}
return ['Filtered activity by linked socialaction: only %actions%', [
'%actions%' => implode(", ou ", $actions)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -61,7 +39,7 @@ class BySocialActionFilter implements FilterInterface
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
if (!in_array('socialaction', $qb->getAllAliases())) { if (!in_array('socialaction', $qb->getAllAliases(), true)) {
$qb->join('activity.socialActions', 'socialaction'); $qb->join('activity.socialActions', 'socialaction');
} }
@@ -82,4 +60,33 @@ class BySocialActionFilter implements FilterInterface
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_socialactions', EntityType::class, [
'class' => SocialAction::class,
'choice_label' => function (SocialAction $sa) {
return $this->actionRender->renderString($sa, []);
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$actions = [];
foreach ($data['accepted_socialactions'] as $sa) {
$actions[] = $this->actionRender->renderString($sa, []);
}
return ['Filtered activity by linked socialaction: only %actions%', [
'%actions%' => implode(', ou ', $actions),
]];
}
public function getTitle(): string
{
return 'Filter activity by linked socialaction';
}
} }

View File

@@ -1,17 +1,25 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Filter\ACPFilters; namespace Chill\ActivityBundle\Export\Filter\ACPFilters;
use Chill\MainBundle\Export\FilterInterface;
use Chill\ActivityBundle\Export\Declarations; use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\FilterInterface;
use Chill\PersonBundle\Entity\SocialWork\SocialIssue; use Chill\PersonBundle\Entity\SocialWork\SocialIssue;
use Chill\PersonBundle\Templating\Entity\SocialIssueRender; use Chill\PersonBundle\Templating\Entity\SocialIssueRender;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class BySocialIssueFilter implements FilterInterface class BySocialIssueFilter implements FilterInterface
{ {
@@ -22,36 +30,6 @@ class BySocialIssueFilter implements FilterInterface
$this->issueRender = $issueRender; $this->issueRender = $issueRender;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_socialissues', EntityType::class, [
'class' => SocialIssue::class,
'choice_label' => function(SocialIssue $si) {
return $this->issueRender->renderString($si, []);
},
'multiple' => true,
'expanded' => true,
]);
}
public function getTitle(): string
{
return 'Filter activity by linked socialissue';
}
public function describeAction($data, $format = 'string'): array
{
$issues = [];
foreach ($data['accepted_socialissues'] as $si) {
$issues[] = $this->issueRender->renderString($si, []);
}
return ['Filtered activity by linked socialissue: only %issues%', [
'%issues%' => implode(", ou ", $issues)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -61,7 +39,7 @@ class BySocialIssueFilter implements FilterInterface
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
if (!in_array('socialissue', $qb->getAllAliases())) { if (!in_array('socialissue', $qb->getAllAliases(), true)) {
$qb->join('activity.socialIssues', 'socialissue'); $qb->join('activity.socialIssues', 'socialissue');
} }
@@ -82,4 +60,33 @@ class BySocialIssueFilter implements FilterInterface
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_socialissues', EntityType::class, [
'class' => SocialIssue::class,
'choice_label' => function (SocialIssue $si) {
return $this->issueRender->renderString($si, []);
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$issues = [];
foreach ($data['accepted_socialissues'] as $si) {
$issues[] = $this->issueRender->renderString($si, []);
}
return ['Filtered activity by linked socialissue: only %issues%', [
'%issues%' => implode(', ou ', $issues),
]];
}
public function getTitle(): string
{
return 'Filter activity by linked socialissue';
}
} }

View File

@@ -1,17 +1,25 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Filter\ACPFilters; namespace Chill\ActivityBundle\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Entity\User; use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Templating\Entity\UserRender; use Chill\MainBundle\Templating\Entity\UserRender;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class ByUserFilter implements FilterInterface class ByUserFilter implements FilterInterface
{ {
@@ -22,36 +30,6 @@ class ByUserFilter implements FilterInterface
$this->userRender = $userRender; $this->userRender = $userRender;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_users', EntityType::class, [
'class' => User::class,
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
'multiple' => true,
'expanded' => true,
]);
}
public function getTitle(): string
{
return 'Filter activity by linked users';
}
public function describeAction($data, $format = 'string'): array
{
$users = [];
foreach ($data['accepted_users'] as $u) {
$users[] = $this->userRender->renderString($u, []);
}
return ['Filtered activity by linked users: only %users%', [
'%users%' => implode(", ou ", $users)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -61,7 +39,7 @@ class ByUserFilter implements FilterInterface
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
if (!in_array('user', $qb->getAllAliases())) { if (!in_array('user', $qb->getAllAliases(), true)) {
$qb->join('activity.users', 'user'); $qb->join('activity.users', 'user');
} }
@@ -81,4 +59,34 @@ class ByUserFilter implements FilterInterface
{ {
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_users', EntityType::class, [
'class' => User::class,
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$users = [];
foreach ($data['accepted_users'] as $u) {
$users[] = $this->userRender->renderString($u, []);
}
return ['Filtered activity by linked users: only %users%', [
'%users%' => implode(', ou ', $users),
]];
}
public function getTitle(): string
{
return 'Filter activity by linked users';
}
} }

View File

@@ -1,11 +1,18 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Filter\ACPFilters; namespace Chill\ActivityBundle\Export\Filter\ACPFilters;
use Chill\MainBundle\Export\FilterInterface;
use Chill\ActivityBundle\Export\Declarations; use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\FilterInterface;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
@@ -19,7 +26,7 @@ class EmergencyFilter implements FilterInterface
'activity is not emergency' => false, 'activity is not emergency' => false,
]; ];
private CONST DEFAULT_CHOICE = false; private const DEFAULT_CHOICE = false;
private TranslatorInterface $translator; private TranslatorInterface $translator;
@@ -28,35 +35,6 @@ class EmergencyFilter implements FilterInterface
$this->translator = $translator; $this->translator = $translator;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_emergency', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function getTitle(): string
{
return 'Filter activity by emergency';
}
public function describeAction($data, $format = 'string'): array
{
foreach (self::CHOICES as $k => $v) {
if ($v === $data['accepted_emergency']) {
$choice = $k;
}
}
return ['Filtered activity by emergency: only %emergency%', [
'%emergency%' => $this->translator->trans($choice)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -83,4 +61,32 @@ class EmergencyFilter implements FilterInterface
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_emergency', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function describeAction($data, $format = 'string'): array
{
foreach (self::CHOICES as $k => $v) {
if ($v === $data['accepted_emergency']) {
$choice = $k;
}
}
return ['Filtered activity by emergency: only %emergency%', [
'%emergency%' => $this->translator->trans($choice),
]];
}
public function getTitle(): string
{
return 'Filter activity by emergency';
}
} }

View File

@@ -1,17 +1,25 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Filter\ACPFilters; namespace Chill\ActivityBundle\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Entity\LocationType; use Chill\MainBundle\Entity\LocationType;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class LocationTypeFilter implements FilterInterface class LocationTypeFilter implements FilterInterface
{ {
@@ -22,38 +30,6 @@ class LocationTypeFilter implements FilterInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_locationtype', EntityType::class, [
'class' => LocationType::class,
'choice_label' => function(LocationType $type) {
return $this->translatableStringHelper->localize($type->getTitle());
},
'multiple' => true,
'expanded' => true,
]);
}
public function getTitle(): string
{
return 'Filter activity by locationtype';
}
public function describeAction($data, $format = 'string'): array
{
$types = [];
foreach ($data['accepted_locationtype'] as $type) {
$types[] = $this->translatableStringHelper->localize(
$type->getTitle()
);
}
return ['Filtered activity by locationtype: only %types%', [
'%types%' => implode(", ou ", $types)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -61,7 +37,7 @@ class LocationTypeFilter implements FilterInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('location', $qb->getAllAliases())) { if (!in_array('location', $qb->getAllAliases(), true)) {
$qb->join('activity.location', 'location'); $qb->join('activity.location', 'location');
} }
@@ -82,4 +58,36 @@ class LocationTypeFilter implements FilterInterface
{ {
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_locationtype', EntityType::class, [
'class' => LocationType::class,
'choice_label' => function (LocationType $type) {
return $this->translatableStringHelper->localize($type->getTitle());
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$types = [];
foreach ($data['accepted_locationtype'] as $type) {
$types[] = $this->translatableStringHelper->localize(
$type->getTitle()
);
}
return ['Filtered activity by locationtype: only %types%', [
'%types%' => implode(', ou ', $types),
]];
}
public function getTitle(): string
{
return 'Filter activity by locationtype';
}
} }

View File

@@ -1,12 +1,19 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Filter\ACPFilters; namespace Chill\ActivityBundle\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Entity\Activity; use Chill\ActivityBundle\Entity\Activity;
use Chill\MainBundle\Export\FilterInterface;
use Chill\ActivityBundle\Export\Declarations; use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Export\FilterInterface;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
@@ -20,7 +27,7 @@ class SentReceivedFilter implements FilterInterface
'is received' => Activity::SENTRECEIVED_RECEIVED, 'is received' => Activity::SENTRECEIVED_RECEIVED,
]; ];
private CONST DEFAULT_CHOICE = Activity::SENTRECEIVED_SENT; private const DEFAULT_CHOICE = Activity::SENTRECEIVED_SENT;
private TranslatorInterface $translator; private TranslatorInterface $translator;
@@ -29,31 +36,6 @@ class SentReceivedFilter implements FilterInterface
$this->translator = $translator; $this->translator = $translator;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_sentreceived', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function getTitle(): string
{
return 'Filter activity by sentreceived';
}
public function describeAction($data, $format = 'string'): array
{
$sentreceived = array_flip(self::CHOICES)[$data['accepted_sentreceived']];
return ['Filtered activity by sentreceived: only %sentreceived%', [
'%sentreceived%' => $this->translator->trans($sentreceived)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -79,4 +61,29 @@ class SentReceivedFilter implements FilterInterface
{ {
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_sentreceived', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function describeAction($data, $format = 'string'): array
{
$sentreceived = array_flip(self::CHOICES)[$data['accepted_sentreceived']];
return ['Filtered activity by sentreceived: only %sentreceived%', [
'%sentreceived%' => $this->translator->trans($sentreceived),
]];
}
public function getTitle(): string
{
return 'Filter activity by sentreceived';
}
} }

View File

@@ -1,12 +1,19 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Filter\ACPFilters; namespace Chill\ActivityBundle\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Entity\User; use Chill\MainBundle\Entity\User;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Templating\Entity\UserRender; use Chill\MainBundle\Templating\Entity\UserRender;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
@@ -22,37 +29,6 @@ class UserFilter implements FilterInterface
$this->userRender = $userRender; $this->userRender = $userRender;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_users', EntityType::class, [
'class' => User::class,
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
'multiple' => true,
'expanded' => true,
'label' => 'Creators'
]);
}
public function getTitle(): string
{
return 'Filter activity by user';
}
public function describeAction($data, $format = 'string'): array
{
$users = [];
foreach ($data['accepted_users'] as $u) {
$users[] = $this->userRender->renderString($u, []);
}
return ['Filtered activity by user: only %users%', [
'%users%' => implode(", ou ", $users)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -79,4 +55,34 @@ class UserFilter implements FilterInterface
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_users', EntityType::class, [
'class' => User::class,
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
'multiple' => true,
'expanded' => true,
'label' => 'Creators',
]);
}
public function describeAction($data, $format = 'string'): array
{
$users = [];
foreach ($data['accepted_users'] as $u) {
$users[] = $this->userRender->renderString($u, []);
}
return ['Filtered activity by user: only %users%', [
'%users%' => implode(', ou ', $users),
]];
}
public function getTitle(): string
{
return 'Filter activity by user';
}
} }

View File

@@ -1,17 +1,25 @@
<?php <?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); declare(strict_types=1);
namespace Chill\ActivityBundle\Export\Filter\ACPFilters; namespace Chill\ActivityBundle\Export\Filter\ACPFilters;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Entity\Scope; use Chill\MainBundle\Entity\Scope;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
use Chill\ActivityBundle\Export\Declarations;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class UserScopeFilter implements FilterInterface class UserScopeFilter implements FilterInterface
{ {
@@ -22,40 +30,6 @@ class UserScopeFilter implements FilterInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_userscope', EntityType::class, [
'class' => Scope::class,
'choice_label' => function (Scope $s) {
return $this->translatableStringHelper->localize(
$s->getName()
);
},
'multiple' => true,
'expanded' => true
]);
}
public function getTitle(): string
{
return 'Filter activity by userscope';
}
public function describeAction($data, $format = 'string'): array
{
$scopes = [];
foreach ($data['accepted_userscope'] as $s) {
$scopes[] = $this->translatableStringHelper->localize(
$s->getName()
);
}
return ['Filtered activity by userscope: only %scopes%', [
'%scopes%' => implode(", ou ", $scopes)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -63,7 +37,7 @@ class UserScopeFilter implements FilterInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('user', $qb->getAllAliases())) { if (!in_array('user', $qb->getAllAliases(), true)) {
$qb->join('activity.user', 'user'); $qb->join('activity.user', 'user');
} }
@@ -86,4 +60,37 @@ class UserScopeFilter implements FilterInterface
return Declarations::ACTIVITY_ACP; return Declarations::ACTIVITY_ACP;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_userscope', EntityType::class, [
'class' => Scope::class,
'choice_label' => function (Scope $s) {
return $this->translatableStringHelper->localize(
$s->getName()
);
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$scopes = [];
foreach ($data['accepted_userscope'] as $s) {
$scopes[] = $this->translatableStringHelper->localize(
$s->getName()
);
}
return ['Filtered activity by userscope: only %scopes%', [
'%scopes%' => implode(', ou ', $scopes),
]];
}
public function getTitle(): string
{
return 'Filter activity by userscope';
}
} }

View File

@@ -73,8 +73,7 @@ class ActivityDateFilter implements FilterInterface
->add('date_to', ChillDateType::class, [ ->add('date_to', ChillDateType::class, [
'label' => 'Activities before this date', 'label' => 'Activities before this date',
'data' => new DateTime(), 'data' => new DateTime(),
]) ]);
;
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) { $builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
/** @var \Symfony\Component\Form\FormInterface $filterForm */ /** @var \Symfony\Component\Form\FormInterface $filterForm */

View File

@@ -1,20 +1,30 @@
<?php <?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\CalendarBundle\Export\Aggregator; namespace Chill\CalendarBundle\Export\Aggregator;
use Chill\CalendarBundle\Export\Declarations; use Chill\CalendarBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\UserRepository; use Chill\MainBundle\Repository\UserRepository;
use Chill\MainBundle\Templating\Entity\UserRender; use Chill\MainBundle\Templating\Entity\UserRender;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
final class AgentAggregator implements AggregatorInterface final class AgentAggregator implements AggregatorInterface
{ {
private UserRepository $userRepository;
private UserRender $userRender; private UserRender $userRender;
private UserRepository $userRepository;
public function __construct( public function __construct(
UserRepository $userRepository, UserRepository $userRepository,
UserRender $userRender UserRender $userRender
@@ -41,7 +51,6 @@ final class AgentAggregator implements AggregatorInterface
} else { } else {
$qb->groupBy('agent_aggregator'); $qb->groupBy('agent_aggregator');
} }
} }
public function applyOn(): string public function applyOn(): string
@@ -54,7 +63,7 @@ final class AgentAggregator implements AggregatorInterface
// no form // no form
} }
public function getLabels($key, array $values, $data): \Closure public function getLabels($key, array $values, $data): Closure
{ {
return function ($value): string { return function ($value): string {
if ('_header' === $value) { if ('_header' === $value) {

View File

@@ -1,11 +1,21 @@
<?php <?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\CalendarBundle\Export\Aggregator; namespace Chill\CalendarBundle\Export\Aggregator;
use Chill\CalendarBundle\Export\Declarations; use Chill\CalendarBundle\Export\Declarations;
use Chill\CalendarBundle\Repository\CancelReasonRepository; use Chill\CalendarBundle\Repository\CancelReasonRepository;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@@ -23,36 +33,6 @@ class CancelReasonAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
public function getLabels($key, array $values, $data): \Closure
{
return function($value): string {
if ($value === '_header') {
return 'Cancel reason';
}
$j = $this->cancelReasonRepository->find($value);
return $this->translatableStringHelper->localize(
$j->getName()
);
};
}
public function getQueryKeys($data): array
{
return ['cancel_reason_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getTitle(): string
{
return 'Group by cancel reason';
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -78,4 +58,34 @@ class CancelReasonAggregator implements AggregatorInterface
{ {
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data): Closure
{
return function ($value): string {
if ('_header' === $value) {
return 'Cancel reason';
}
$j = $this->cancelReasonRepository->find($value);
return $this->translatableStringHelper->localize(
$j->getName()
);
};
}
public function getQueryKeys($data): array
{
return ['cancel_reason_aggregator'];
}
public function getTitle(): string
{
return 'Group by cancel reason';
}
} }

View File

@@ -1,11 +1,21 @@
<?php <?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\CalendarBundle\Export\Aggregator; namespace Chill\CalendarBundle\Export\Aggregator;
use Chill\CalendarBundle\Export\Declarations; use Chill\CalendarBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\UserJobRepository; use Chill\MainBundle\Repository\UserJobRepository;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@@ -23,36 +33,6 @@ final class JobAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
public function getLabels($key, array $values, $data): \Closure
{
return function($value): string {
if ($value === '_header') {
return 'Job';
}
$j = $this->jobRepository->find($value);
return $this->translatableStringHelper->localize(
$j->getLabel()
);
};
}
public function getQueryKeys($data): array
{
return ['job_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getTitle(): string
{
return 'Group by agent job';
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -77,4 +57,34 @@ final class JobAggregator implements AggregatorInterface
{ {
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data): Closure
{
return function ($value): string {
if ('_header' === $value) {
return 'Job';
}
$j = $this->jobRepository->find($value);
return $this->translatableStringHelper->localize(
$j->getLabel()
);
};
}
public function getQueryKeys($data): array
{
return ['job_aggregator'];
}
public function getTitle(): string
{
return 'Group by agent job';
}
} }

View File

@@ -1,10 +1,20 @@
<?php <?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\CalendarBundle\Export\Aggregator; namespace Chill\CalendarBundle\Export\Aggregator;
use Chill\CalendarBundle\Export\Declarations; use Chill\CalendarBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\LocationRepository; use Chill\MainBundle\Repository\LocationRepository;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Security\Core\Role\Role;
@@ -19,35 +29,6 @@ final class LocationAggregator implements AggregatorInterface
$this->locationRepository = $locationRepository; $this->locationRepository = $locationRepository;
} }
public function getLabels($key, array $values, $data): \Closure
{
return function($value): string {
if ($value === '_header') {
return 'Location';
}
$l = $this->locationRepository->find($value);
return $l->getName();
};
}
public function getQueryKeys($data): array
{
return ['location_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getTitle(): string
{
return 'Group by location';
}
public function addRole(): ?Role public function addRole(): ?Role
{ {
return null; return null;
@@ -72,4 +53,31 @@ final class LocationAggregator implements AggregatorInterface
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data): Closure
{
return function ($value): string {
if ('_header' === $value) {
return 'Location';
}
$l = $this->locationRepository->find($value);
return $l->getName();
};
}
public function getQueryKeys($data): array
{
return ['location_aggregator'];
}
public function getTitle(): string
{
return 'Group by location';
}
} }

View File

@@ -1,11 +1,21 @@
<?php <?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\CalendarBundle\Export\Aggregator; namespace Chill\CalendarBundle\Export\Aggregator;
use Chill\CalendarBundle\Export\Declarations; use Chill\CalendarBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\LocationTypeRepository; use Chill\MainBundle\Repository\LocationTypeRepository;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@@ -23,36 +33,6 @@ final class LocationTypeAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
public function getLabels($key, array $values, $data): \Closure
{
return function($value): string {
if ($value === '_header') {
return 'Location type';
}
$j = $this->locationTypeRepository->find($value);
return $this->translatableStringHelper->localize(
$j->getTitle()
);
};
}
public function getQueryKeys($data): array
{
return ['location_type_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getTitle(): string
{
return 'Group by location type';
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -78,4 +58,33 @@ final class LocationTypeAggregator implements AggregatorInterface
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data): Closure
{
return function ($value): string {
if ('_header' === $value) {
return 'Location type';
}
$j = $this->locationTypeRepository->find($value);
return $this->translatableStringHelper->localize(
$j->getTitle()
);
};
}
public function getQueryKeys($data): array
{
return ['location_type_aggregator'];
}
public function getTitle(): string
{
return 'Group by location type';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\CalendarBundle\Export\Aggregator; namespace Chill\CalendarBundle\Export\Aggregator;
use Chill\CalendarBundle\Export\Declarations; use Chill\CalendarBundle\Export\Declarations;
@@ -11,36 +20,6 @@ use Symfony\Component\Security\Core\Role\Role;
class MonthYearAggregator implements AggregatorInterface class MonthYearAggregator implements AggregatorInterface
{ {
public function getQueryKeys($data): array
{
return ['month_year_aggregator'];
}
public function getLabels($key, array $values, $data): Closure
{
return function($value): string {
if ($value === '_header') {
return 'by month and year';
}
$month = substr($value,0, 2);
$year = substr($value, 3, 4);
return strftime('%B %G', mktime(0, 0, 0, $month, '1', $year));
};
}
public function buildForm(FormBuilderInterface $builder)
{
// No form needed
}
public function getTitle(): string
{
return 'Group by month and year';
}
public function addRole(): ?Role public function addRole(): ?Role
{ {
return null; return null;
@@ -63,4 +42,33 @@ class MonthYearAggregator implements AggregatorInterface
{ {
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// No form needed
}
public function getLabels($key, array $values, $data): Closure
{
return static function ($value): string {
if ('_header' === $value) {
return 'by month and year';
}
$month = substr($value, 0, 2);
$year = substr($value, 3, 4);
return strftime('%B %G', mktime(0, 0, 0, $month, '1', $year));
};
}
public function getQueryKeys($data): array
{
return ['month_year_aggregator'];
}
public function getTitle(): string
{
return 'Group by month and year';
}
} }

View File

@@ -1,11 +1,21 @@
<?php <?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\CalendarBundle\Export\Aggregator; namespace Chill\CalendarBundle\Export\Aggregator;
use Chill\CalendarBundle\Export\Declarations; use Chill\CalendarBundle\Export\Declarations;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\ScopeRepository; use Chill\MainBundle\Repository\ScopeRepository;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Closure;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@@ -23,36 +33,6 @@ final class ScopeAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
public function getLabels($key, array $values, $data): \Closure
{
return function ($value): string {
if ($value === '_header') {
return 'Scope';
}
$s = $this->scopeRepository->find($value);
return $this->translatableStringHelper->localize(
$s->getName()
);
};
}
public function getQueryKeys($data): array
{
return ['scope_aggregator'];
}
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getTitle(): string
{
return 'Group by agent scope';
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -77,4 +57,34 @@ final class ScopeAggregator implements AggregatorInterface
{ {
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data): Closure
{
return function ($value): string {
if ('_header' === $value) {
return 'Scope';
}
$s = $this->scopeRepository->find($value);
return $this->translatableStringHelper->localize(
$s->getName()
);
};
}
public function getQueryKeys($data): array
{
return ['scope_aggregator'];
}
public function getTitle(): string
{
return 'Group by agent scope';
}
} }

View File

@@ -1,13 +1,23 @@
<?php <?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\CalendarBundle\Export\Export; namespace Chill\CalendarBundle\Export\Export;
use Chill\CalendarBundle\Export\Declarations;
use Chill\CalendarBundle\Repository\CalendarRepository; use Chill\CalendarBundle\Repository\CalendarRepository;
use Chill\MainBundle\Export\ExportInterface; use Chill\MainBundle\Export\ExportInterface;
use Chill\MainBundle\Export\FormatterInterface; use Chill\MainBundle\Export\FormatterInterface;
use Chill\MainBundle\Export\GroupedExportInterface; use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\CalendarBundle\Export\Declarations;
use Chill\PersonBundle\Security\Authorization\PersonVoter; use Chill\PersonBundle\Security\Authorization\PersonVoter;
use Closure;
use Doctrine\ORM\AbstractQuery; use Doctrine\ORM\AbstractQuery;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@@ -16,7 +26,6 @@ use Symfony\Component\Security\Core\Role\Role;
class CountAppointments implements ExportInterface, GroupedExportInterface class CountAppointments implements ExportInterface, GroupedExportInterface
{ {
private CalendarRepository $calendarRepository; private CalendarRepository $calendarRepository;
public function __construct(CalendarRepository $calendarRepository) public function __construct(CalendarRepository $calendarRepository)
@@ -39,7 +48,12 @@ class CountAppointments implements ExportInterface, GroupedExportInterface
return 'Count appointments by various parameters.'; return 'Count appointments by various parameters.';
} }
public function getLabels($key, array $values, $data): \Closure public function getGroup(): string
{
return 'Exports of calendar';
}
public function getLabels($key, array $values, $data): Closure
{ {
if ('export_result' !== $key) { if ('export_result' !== $key) {
throw new LogicException("the key {$key} is not used by this export"); throw new LogicException("the key {$key} is not used by this export");
@@ -91,7 +105,6 @@ class CountAppointments implements ExportInterface, GroupedExportInterface
public function requiredRole(): Role public function requiredRole(): Role
{ {
// which role should we give here? // which role should we give here?
return new Role(PersonVoter::STATS); return new Role(PersonVoter::STATS);
} }
@@ -102,10 +115,4 @@ class CountAppointments implements ExportInterface, GroupedExportInterface
Declarations::CALENDAR_TYPE, Declarations::CALENDAR_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of calendar';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\CalendarBundle\Export\Export; namespace Chill\CalendarBundle\Export\Export;
use Chill\CalendarBundle\Export\Declarations; use Chill\CalendarBundle\Export\Declarations;
@@ -10,12 +19,12 @@ use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use LogicException;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Security\Core\Role\Role;
class StatAppointmentAvgDuration implements ExportInterface, GroupedExportInterface class StatAppointmentAvgDuration implements ExportInterface, GroupedExportInterface
{ {
private CalendarRepository $calendarRepository; private CalendarRepository $calendarRepository;
public function __construct( public function __construct(
@@ -29,11 +38,6 @@ class StatAppointmentAvgDuration implements ExportInterface, GroupedExportInterf
// no form needed // no form needed
} }
public function getTitle(): string
{
return 'Average appointment duration';
}
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
@@ -44,10 +48,15 @@ class StatAppointmentAvgDuration implements ExportInterface, GroupedExportInterf
return 'Get the average of appointment duration according to various filters'; return 'Get the average of appointment duration according to various filters';
} }
public function getGroup(): string
{
return 'Exports of calendar';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_result' !== $key) { if ('export_result' !== $key) {
throw new \LogicException("the key {$key} is not used by this export"); throw new LogicException("the key {$key} is not used by this export");
} }
$labels = array_combine($values, $values); $labels = array_combine($values, $values);
@@ -68,6 +77,11 @@ class StatAppointmentAvgDuration implements ExportInterface, GroupedExportInterf
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
public function getTitle(): string
{
return 'Average appointment duration';
}
public function getType(): string public function getType(): string
{ {
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
@@ -91,13 +105,7 @@ class StatAppointmentAvgDuration implements ExportInterface, GroupedExportInterf
public function supportsModifiers(): array public function supportsModifiers(): array
{ {
return [ return [
Declarations::CALENDAR_TYPE Declarations::CALENDAR_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of calendar';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\CalendarBundle\Export\Export; namespace Chill\CalendarBundle\Export\Export;
use Chill\CalendarBundle\Export\Declarations; use Chill\CalendarBundle\Export\Declarations;
@@ -10,6 +19,7 @@ use Chill\MainBundle\Export\GroupedExportInterface;
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use LogicException;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Security\Core\Role\Role;
@@ -28,11 +38,6 @@ class StatAppointmentSumDuration implements ExportInterface, GroupedExportInterf
// no form needed // no form needed
} }
public function getTitle(): string
{
return 'Sum of appointment durations';
}
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
@@ -43,10 +48,15 @@ class StatAppointmentSumDuration implements ExportInterface, GroupedExportInterf
return 'Get the sum of appointment durations according to various filters'; return 'Get the sum of appointment durations according to various filters';
} }
public function getGroup(): string
{
return 'Exports of calendar';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_result' !== $key) { if ('export_result' !== $key) {
throw new \LogicException("the key {$key} is not used by this export"); throw new LogicException("the key {$key} is not used by this export");
} }
$labels = array_combine($values, $values); $labels = array_combine($values, $values);
@@ -67,6 +77,11 @@ class StatAppointmentSumDuration implements ExportInterface, GroupedExportInterf
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
public function getTitle(): string
{
return 'Sum of appointment durations';
}
public function getType(): string public function getType(): string
{ {
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
@@ -90,13 +105,7 @@ class StatAppointmentSumDuration implements ExportInterface, GroupedExportInterf
public function supportsModifiers(): array public function supportsModifiers(): array
{ {
return [ return [
Declarations::CALENDAR_TYPE Declarations::CALENDAR_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of calendar';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\CalendarBundle\Export\Filter; namespace Chill\CalendarBundle\Export\Filter;
use Chill\CalendarBundle\Export\Declarations; use Chill\CalendarBundle\Export\Declarations;
@@ -20,38 +29,6 @@ class AgentFilter implements FilterInterface
$this->userRender = $userRender; $this->userRender = $userRender;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_agents', EntityType::class, [
'class' => User::class,
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
'multiple' => true,
'expanded' => true
]);
}
public function getTitle(): string
{
return 'Filter by agent';
}
public function describeAction($data, $format = 'string'): array
{
$users = [];
foreach ($data['accepted_agents'] as $r) {
$users[] = $r;
}
return [
'Filtered by agent: only %agents%', [
'%agents' => implode(", ou ", $users)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -76,4 +53,35 @@ class AgentFilter implements FilterInterface
{ {
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_agents', EntityType::class, [
'class' => User::class,
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$users = [];
foreach ($data['accepted_agents'] as $r) {
$users[] = $r;
}
return [
'Filtered by agent: only %agents%', [
'%agents' => implode(', ou ', $users),
], ];
}
public function getTitle(): string
{
return 'Filter by agent';
}
} }

View File

@@ -1,42 +1,26 @@
<?php <?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\CalendarBundle\Export\Filter; namespace Chill\CalendarBundle\Export\Filter;
use Chill\CalendarBundle\Export\Declarations; use Chill\CalendarBundle\Export\Declarations;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Form\Type\ChillDateType; use Chill\MainBundle\Form\Type\ChillDateType;
use DateTime;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
class BetweenDatesFilter implements FilterInterface class BetweenDatesFilter implements FilterInterface
{ {
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('date_from', ChillDateType::class, [
'data' => new \DateTime(),
])
->add('date_to', ChillDateType::class, [
'data' => new \DateTime(),
])
;
}
public function getTitle(): string
{
return 'Filter by appointments between certain dates';
}
public function describeAction($data, $format = 'string'): array
{
return ['Filtered by appointments between %dateFrom% and %dateTo%', [
'%dateFrom%' => $data['date_from']->format('d-m-Y'),
'%dateTo%' => $data['date_to']->format('d-m-Y'),
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -67,4 +51,28 @@ class BetweenDatesFilter implements FilterInterface
{ {
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('date_from', ChillDateType::class, [
'data' => new DateTime(),
])
->add('date_to', ChillDateType::class, [
'data' => new DateTime(),
]);
}
public function describeAction($data, $format = 'string'): array
{
return ['Filtered by appointments between %dateFrom% and %dateTo%', [
'%dateFrom%' => $data['date_from']->format('d-m-Y'),
'%dateTo%' => $data['date_to']->format('d-m-Y'),
]];
}
public function getTitle(): string
{
return 'Filter by appointments between certain dates';
}
} }

View File

@@ -23,7 +23,6 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class JobFilter implements FilterInterface class JobFilter implements FilterInterface
{ {
protected TranslatorInterface $translator; protected TranslatorInterface $translator;
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
@@ -36,34 +35,6 @@ class JobFilter implements FilterInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('job', EntityType::class, [
'class' => UserJob::class,
'choice_label' => function (UserJob $j) {
return $this->translatableStringHelper->localize(
$j->getLabel()
);
},
'multiple' => true,
'expanded' => true
]);
}
public function describeAction($data, $format = 'string'): array
{
$userJobs = [];
foreach ($data['job'] as $j) {
$userJobs[] = $this->translatableStringHelper->localize(
$j->getLabel());
}
return ['Filtered by agent job: only %jobs%', [
'%jobs%' => implode(', ou ', $userJobs)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -91,6 +62,34 @@ class JobFilter implements FilterInterface
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('job', EntityType::class, [
'class' => UserJob::class,
'choice_label' => function (UserJob $j) {
return $this->translatableStringHelper->localize(
$j->getLabel()
);
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$userJobs = [];
foreach ($data['job'] as $j) {
$userJobs[] = $this->translatableStringHelper->localize(
$j->getLabel()
);
}
return ['Filtered by agent job: only %jobs%', [
'%jobs%' => implode(', ou ', $userJobs),
]];
}
public function getTitle(): string public function getTitle(): string
{ {

View File

@@ -23,7 +23,6 @@ use Symfony\Contracts\Translation\TranslatorInterface;
class ScopeFilter implements FilterInterface class ScopeFilter implements FilterInterface
{ {
protected TranslatorInterface $translator; protected TranslatorInterface $translator;
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
@@ -36,34 +35,6 @@ class ScopeFilter implements FilterInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('scope', EntityType::class, [
'class' => Scope::class,
'choice_label' => function (Scope $s) {
return $this->translatableStringHelper->localize(
$s->getName()
);
},
'multiple' => true,
'expanded' => true
]);
}
public function describeAction($data, $format = 'string')
{
$scopes = [];
foreach ($data['scope'] as $s) {
$scopes[] = $this->translatableStringHelper->localize(
$s->getName());
}
return ['Filtered by agent scope: only %scopes%', [
'%scopes%' => implode(', ou ', $scopes)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -91,6 +62,34 @@ class ScopeFilter implements FilterInterface
return Declarations::CALENDAR_TYPE; return Declarations::CALENDAR_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('scope', EntityType::class, [
'class' => Scope::class,
'choice_label' => function (Scope $s) {
return $this->translatableStringHelper->localize(
$s->getName()
);
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string')
{
$scopes = [];
foreach ($data['scope'] as $s) {
$scopes[] = $this->translatableStringHelper->localize(
$s->getName()
);
}
return ['Filtered by agent scope: only %scopes%', [
'%scopes%' => implode(', ou ', $scopes),
]];
}
public function getTitle() public function getTitle()
{ {

View File

@@ -525,6 +525,21 @@ class ExportController extends AbstractController
); );
} }
private function getExportGroup($target): string
{
$exportManager = $this->exportManager;
$groups = $exportManager->getExportsGrouped(true);
foreach ($groups as $group => $array) {
foreach ($array as $alias => $export) {
if ($export === $target) {
return $group;
}
}
}
}
/** /**
* get the next step. If $reverse === true, the previous step is returned. * get the next step. If $reverse === true, the previous step is returned.
* *
@@ -572,19 +587,4 @@ class ExportController extends AbstractController
throw new LogicException("the step {$step} is not defined."); throw new LogicException("the step {$step} is not defined.");
} }
} }
private function getExportGroup($target): string
{
$exportManager = $this->exportManager;
$groups = $exportManager->getExportsGrouped(true);
foreach ($groups as $group => $array) {
foreach ($array as $alias => $export) {
if ($export === $target) {
return $group;
}
}
}
}
} }

View File

@@ -1,10 +1,18 @@
<?php <?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\MainBundle\Doctrine\DQL; namespace Chill\MainBundle\Doctrine\DQL;
use Doctrine\ORM\Query\AST\Functions\DateDiffFunction; use Doctrine\ORM\Query\AST\Functions\DateDiffFunction;
use Doctrine\ORM\Query\AST\Functions\FunctionNode; use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\AST\Node;
use Doctrine\ORM\Query\AST\PathExpression; use Doctrine\ORM\Query\AST\PathExpression;
use Doctrine\ORM\Query\Lexer; use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\Parser; use Doctrine\ORM\Query\Parser;
@@ -12,7 +20,7 @@ use Doctrine\ORM\Query\SqlWalker;
/** /**
* Extract postgresql function * Extract postgresql function
* https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT * https://www.postgresql.org/docs/current/functions-datetime.html#FUNCTIONS-DATETIME-EXTRACT.
* *
* Usage : EXTRACT(field FROM timestamp) * Usage : EXTRACT(field FROM timestamp)
* TODO allow interval usage -> EXTRACT(field FROM interval) * TODO allow interval usage -> EXTRACT(field FROM interval)
@@ -50,5 +58,4 @@ class Extract extends FunctionNode
$parser->match(Lexer::T_CLOSE_PARENTHESIS); $parser->match(Lexer::T_CLOSE_PARENTHESIS);
} }
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\MainBundle\Doctrine\DQL; namespace Chill\MainBundle\Doctrine\DQL;
use Doctrine\ORM\Query\AST\Functions\FunctionNode; use Doctrine\ORM\Query\AST\Functions\FunctionNode;
@@ -8,7 +17,7 @@ use Doctrine\ORM\Query\Parser;
use Doctrine\ORM\Query\SqlWalker; use Doctrine\ORM\Query\SqlWalker;
/** /**
* Usage : TO_CHAR(datetime, fmt) * Usage : TO_CHAR(datetime, fmt).
*/ */
class ToChar extends FunctionNode class ToChar extends FunctionNode
{ {
@@ -34,5 +43,4 @@ class ToChar extends FunctionNode
$this->fmt = $parser->StringExpression(); $this->fmt = $parser->StringExpression();
$parser->match(Lexer::T_CLOSE_PARENTHESIS); $parser->match(Lexer::T_CLOSE_PARENTHESIS);
} }
} }

View File

@@ -1,5 +1,12 @@
<?php <?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); declare(strict_types=1);
namespace Chill\Migrations\Main; namespace Chill\Migrations\Main;
@@ -8,10 +15,16 @@ use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration; use Doctrine\Migrations\AbstractMigration;
/** /**
* Add new entity GeographicalUnit * Add new entity GeographicalUnit.
*/ */
final class Version20220829132409 extends AbstractMigration final class Version20220829132409 extends AbstractMigration
{ {
public function down(Schema $schema): void
{
$this->addSql('DROP SEQUENCE chill_main_geographical_unit_id_seq CASCADE');
$this->addSql('DROP TABLE chill_main_geographical_unit');
}
public function getDescription(): string public function getDescription(): string
{ {
return 'Add new entity GeographicalUnit'; return 'Add new entity GeographicalUnit';
@@ -22,10 +35,4 @@ final class Version20220829132409 extends AbstractMigration
$this->addSql('CREATE SEQUENCE chill_main_geographical_unit_id_seq INCREMENT BY 1 MINVALUE 1 START 1'); $this->addSql('CREATE SEQUENCE chill_main_geographical_unit_id_seq INCREMENT BY 1 MINVALUE 1 START 1');
$this->addSql('CREATE TABLE chill_main_geographical_unit (id INT NOT NULL, geom TEXT DEFAULT NULL, layerName VARCHAR(255) DEFAULT NULL, unitName VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id))'); $this->addSql('CREATE TABLE chill_main_geographical_unit (id INT NOT NULL, geom TEXT DEFAULT NULL, layerName VARCHAR(255) DEFAULT NULL, unitName VARCHAR(255) DEFAULT NULL, PRIMARY KEY(id))');
} }
public function down(Schema $schema): void
{
$this->addSql('DROP SEQUENCE chill_main_geographical_unit_id_seq CASCADE');
$this->addSql('DROP TABLE chill_main_geographical_unit');
}
} }

View File

@@ -95,6 +95,7 @@ class ChillPersonExtension extends Extension implements PrependExtensionInterfac
$loader->load('services/accompanyingPeriodConsistency.yaml'); $loader->load('services/accompanyingPeriodConsistency.yaml');
$loader->load('services/exports_person.yaml'); $loader->load('services/exports_person.yaml');
if ($container->getParameter('chill_person.accompanying_period') !== 'hidden') { if ($container->getParameter('chill_person.accompanying_period') !== 'hidden') {
$loader->load('services/exports_accompanying_period.yaml'); $loader->load('services/exports_accompanying_period.yaml');
} }

View File

@@ -31,7 +31,6 @@ class MaritalStatus
private ?string $id; private ?string $id;
/** /**
* @var array
* @ORM\Column(type="json") * @ORM\Column(type="json")
*/ */
private array $name; private array $name;

View File

@@ -1,8 +1,16 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Entity\Location;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\LocationRepository; use Chill\MainBundle\Repository\LocationRepository;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
@@ -24,57 +32,11 @@ class AdministrativeLocationAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Administrative location';
}
$l = $this->locationRepository->find($value);
return $l->getName() .' ('. $this->translatableStringHelper->localize($l->getLocationType()->getTitle()) . ')';
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['location_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle()
{
return 'Group by administrative location';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->join('acp.administrativeLocation', 'al'); $qb->join('acp.administrativeLocation', 'al');
@@ -90,11 +52,36 @@ class AdministrativeLocationAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Administrative location';
}
$l = $this->locationRepository->find($value);
return $l->getName() . ' (' . $this->translatableStringHelper->localize($l->getLocationType()->getTitle()) . ')';
};
}
public function getQueryKeys($data): array
{
return ['location_aggregator'];
}
public function getTitle()
{
return 'Group by administrative location';
}
} }

View File

@@ -1,12 +1,20 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Entity\AccompanyingPeriod\ClosingMotive; use Chill\PersonBundle\Entity\AccompanyingPeriod\ClosingMotive;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Chill\PersonBundle\Repository\AccompanyingPeriod\ClosingMotiveRepository;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@@ -25,59 +33,11 @@ class ClosingMotiveAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Closing motive';
}
$cm = $this->motiveRepository->find($value);
return $this->translatableStringHelper->localize(
$cm->getName()
);
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data)
{
return ['closingmotive_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by closing motive';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->join('acp.closingMotive', 'cm'); $qb->join('acp.closingMotive', 'cm');
@@ -93,11 +53,38 @@ class ClosingMotiveAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Closing motive';
}
$cm = $this->motiveRepository->find($value);
return $this->translatableStringHelper->localize(
$cm->getName()
);
};
}
public function getQueryKeys($data)
{
return ['closingmotive_aggregator'];
}
public function getTitle(): string
{
return 'Group by closing motive';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
@@ -18,65 +27,11 @@ class ConfidentialAggregator implements AggregatorInterface
$this->translator = $translator; $this->translator = $translator;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Confidentiality';
}
switch ($value) {
case true:
return $this->translator->trans('is confidential');
case false:
return $this->translator->trans('is not confidential');
default:
throw new LogicException(sprintf('The value %s is not valid', $value));
}
return $value;
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['confidential_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by confidential';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->addSelect('acp.confidential AS confidential_aggregator'); $qb->addSelect('acp.confidential AS confidential_aggregator');
@@ -90,11 +45,45 @@ class ConfidentialAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Confidentiality';
}
switch ($value) {
case true:
return $this->translator->trans('is confidential');
case false:
return $this->translator->trans('is not confidential');
default:
throw new LogicException(sprintf('The value %s is not valid', $value));
}
return $value;
};
}
public function getQueryKeys($data): array
{
return ['confidential_aggregator'];
}
public function getTitle(): string
{
return 'Group by confidential';
}
} }

View File

@@ -1,14 +1,19 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Contracts\Translation\TranslatorInterface; use Symfony\Contracts\Translation\TranslatorInterface;
@@ -19,7 +24,7 @@ use Symfony\Contracts\Translation\TranslatorInterface;
* 15 | 45 | 75 * 15 | 45 | 75
* --+----o----+----o----+---- * --+----o----+----o----+----
* | 30 | 60 | * | 30 | 60 |
* etc.) * etc.).
*/ */
class DurationAggregator implements AggregatorInterface class DurationAggregator implements AggregatorInterface
{ {
@@ -30,69 +35,17 @@ class DurationAggregator implements AggregatorInterface
$this->translator = $translator; $this->translator = $translator;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value) use ($data): string {
if ($value === '_header') {
return $this->translator->trans('Rounded month duration');
}
if ($value === null) {
return $this->translator->trans('current duration'); // when closingDate is null
}
if ($value === 0) {
return $this->translator->trans("duration 0 month");
}
return ''. $value . $this->translator->trans(' months');
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['duration_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by duration';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb $qb
// OUI // OUI
->addSelect(' ->addSelect(
'
(acp.closingDate - acp.openingDate +15) *12/365 (acp.closingDate - acp.openingDate +15) *12/365
AS duration_aggregator' AS duration_aggregator'
) )
@@ -125,7 +78,7 @@ class DurationAggregator implements AggregatorInterface
END ) AS duration_aggregator END ) AS duration_aggregator
') ')
*/ */
; ;
$groupBy = $qb->getDQLPart('groupBy'); $groupBy = $qb->getDQLPart('groupBy');
@@ -138,11 +91,42 @@ class DurationAggregator implements AggregatorInterface
$qb->orderBy('duration_aggregator'); $qb->orderBy('duration_aggregator');
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return $this->translator->trans('Rounded month duration');
}
if (null === $value) {
return $this->translator->trans('current duration'); // when closingDate is null
}
if (0 === $value) {
return $this->translator->trans('duration 0 month');
}
return '' . $value . $this->translator->trans(' months');
};
}
public function getQueryKeys($data): array
{
return ['duration_aggregator'];
}
public function getTitle(): string
{
return 'Group by duration';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
@@ -18,65 +27,11 @@ class EmergencyAggregator implements AggregatorInterface
$this->translator = $translator; $this->translator = $translator;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Emergency';
}
switch ($value) {
case true:
return $this->translator->trans('is emergency');
case false:
return $this->translator->trans('is not emergency');
default:
throw new LogicException(sprintf('The value %s is not valid', $value));
}
return $value;
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['emergency_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by emergency';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->addSelect('acp.emergency AS emergency_aggregator'); $qb->addSelect('acp.emergency AS emergency_aggregator');
@@ -90,11 +45,45 @@ class EmergencyAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Emergency';
}
switch ($value) {
case true:
return $this->translator->trans('is emergency');
case false:
return $this->translator->trans('is not emergency');
default:
throw new LogicException(sprintf('The value %s is not valid', $value));
}
return $value;
};
}
public function getQueryKeys($data): array
{
return ['emergency_aggregator'];
}
public function getTitle(): string
{
return 'Group by emergency';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
@@ -8,6 +17,7 @@ use Chill\PersonBundle\Export\Declarations;
use Chill\PersonBundle\Repository\SocialWork\EvaluationRepository; use Chill\PersonBundle\Repository\SocialWork\EvaluationRepository;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
final class EvaluationAggregator implements AggregatorInterface final class EvaluationAggregator implements AggregatorInterface
{ {
@@ -23,62 +33,14 @@ final class EvaluationAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Evaluation';
}
$e = $this->evaluationRepository->find($value);
return $this->translatableStringHelper->localize(
$e->getTitle()
);
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['evaluation_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by evaluation';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('acpw', $qb->getAllAliases())) { if (!in_array('acpw', $qb->getAllAliases(), true)) {
$qb->join('acp.works', 'acpw'); $qb->join('acp.works', 'acpw');
} }
$qb->join('acpw.accompanyingPeriodWorkEvaluations', 'we'); $qb->join('acpw.accompanyingPeriodWorkEvaluations', 'we');
@@ -94,11 +56,38 @@ final class EvaluationAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Evaluation';
}
$e = $this->evaluationRepository->find($value);
return $this->translatableStringHelper->localize(
$e->getTitle()
);
};
}
public function getQueryKeys($data): array
{
return ['evaluation_aggregator'];
}
public function getTitle(): string
{
return 'Group by evaluation';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
@@ -18,61 +27,11 @@ class IntensityAggregator implements AggregatorInterface
$this->translator = $translator; $this->translator = $translator;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Intensity';
}
switch ($value) {
case 'occasional':
return $this->translator->trans('is occasional');
case 'regular':
return $this->translator->trans('is regular');
default:
throw new LogicException(sprintf('The value %s is not valid', $value));
}
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['intensity_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by intensity';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->addSelect('acp.intensity AS intensity_aggregator'); $qb->addSelect('acp.intensity AS intensity_aggregator');
@@ -86,11 +45,43 @@ class IntensityAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Intensity';
}
switch ($value) {
case 'occasional':
return $this->translator->trans('is occasional');
case 'regular':
return $this->translator->trans('is regular');
default:
throw new LogicException(sprintf('The value %s is not valid', $value));
}
};
}
public function getQueryKeys($data): array
{
return ['intensity_aggregator'];
}
public function getTitle(): string
{
return 'Group by intensity';
}
} }

View File

@@ -1,18 +1,25 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\UserJobRepository; use Chill\MainBundle\Repository\UserJobRepository;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr\From;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
final class JobAggregator implements AggregatorInterface final class JobAggregator implements AggregatorInterface
{ {
private UserJobRepository $jobRepository; private UserJobRepository $jobRepository;
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
@@ -25,59 +32,11 @@ final class JobAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function($value): string {
if ($value === '_header') {
return 'Job';
}
$j = $this->jobRepository->find($value);
return $this->translatableStringHelper->localize(
$j->getLabel()
);
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['job_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by user job';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->join('acp.job', 'j'); $qb->join('acp.job', 'j');
@@ -93,11 +52,38 @@ final class JobAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Job';
}
$j = $this->jobRepository->find($value);
return $this->translatableStringHelper->localize(
$j->getLabel()
);
};
}
public function getQueryKeys($data): array
{
return ['job_aggregator'];
}
public function getTitle(): string
{
return 'Group by user job';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
@@ -25,59 +34,11 @@ final class OriginAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Origin';
}
$o = $this->repository->find($value);
return $this->translatableStringHelper->localize(
$o->getLabel()
);
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['origin_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by origin';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->join('acp.origin', 'o'); $qb->join('acp.origin', 'o');
@@ -93,11 +54,38 @@ final class OriginAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Origin';
}
$o = $this->repository->find($value);
return $this->translatableStringHelper->localize(
$o->getLabel()
);
};
}
public function getQueryKeys($data): array
{
return ['origin_aggregator'];
}
public function getTitle(): string
{
return 'Group by origin';
}
} }

View File

@@ -15,16 +15,15 @@ use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\UserRepository; use Chill\MainBundle\Repository\UserRepository;
use Chill\MainBundle\Templating\Entity\UserRender; use Chill\MainBundle\Templating\Entity\UserRender;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr\From;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
final class ReferrerAggregator implements AggregatorInterface final class ReferrerAggregator implements AggregatorInterface
{ {
private UserRepository $userRepository;
private UserRender $userRender; private UserRender $userRender;
private UserRepository $userRepository;
public function __construct( public function __construct(
UserRepository $userRepository, UserRepository $userRepository,
UserRender $userRender UserRender $userRender
@@ -51,7 +50,6 @@ final class ReferrerAggregator implements AggregatorInterface
} else { } else {
$qb->groupBy('referrer_aggregator'); $qb->groupBy('referrer_aggregator');
} }
} }
public function applyOn(): string public function applyOn(): string

View File

@@ -1,18 +1,25 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\ScopeRepository; use Chill\MainBundle\Repository\ScopeRepository;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr\From;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
final class ScopeAggregator implements AggregatorInterface final class ScopeAggregator implements AggregatorInterface
{ {
private ScopeRepository $scopeRepository; private ScopeRepository $scopeRepository;
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
@@ -25,59 +32,11 @@ final class ScopeAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Scope';
}
$s = $this->scopeRepository->find($value);
return $this->translatableStringHelper->localize(
$s->getName()
);
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['scope_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by user scope';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->join('acp.scopes', 's'); $qb->join('acp.scopes', 's');
@@ -93,11 +52,38 @@ final class ScopeAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Scope';
}
$s = $this->scopeRepository->find($value);
return $this->translatableStringHelper->localize(
$s->getName()
);
};
}
public function getQueryKeys($data): array
{
return ['scope_aggregator'];
}
public function getTitle(): string
{
return 'Group by user scope';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
@@ -8,6 +17,7 @@ use Chill\PersonBundle\Repository\SocialWork\SocialActionRepository;
use Chill\PersonBundle\Templating\Entity\SocialActionRender; use Chill\PersonBundle\Templating\Entity\SocialActionRender;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
final class SocialActionAggregator implements AggregatorInterface final class SocialActionAggregator implements AggregatorInterface
{ {
@@ -23,60 +33,14 @@ final class SocialActionAggregator implements AggregatorInterface
$this->actionRepository = $actionRepository; $this->actionRepository = $actionRepository;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function($value) {
if ('_header' === $value) {
return 'Social action';
}
$sa = $this->actionRepository->find($value);
return $this->actionRender->renderString($sa, []);
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['socialaction_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by social action';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('acpw', $qb->getAllAliases())) { if (!in_array('acpw', $qb->getAllAliases(), true)) {
$qb->join('acp.works', 'acpw'); $qb->join('acp.works', 'acpw');
} }
@@ -91,11 +55,36 @@ final class SocialActionAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value) {
if ('_header' === $value) {
return 'Social action';
}
$sa = $this->actionRepository->find($value);
return $this->actionRender->renderString($sa, []);
};
}
public function getQueryKeys($data): array
{
return ['socialaction_aggregator'];
}
public function getTitle(): string
{
return 'Group by social action';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
@@ -11,11 +20,10 @@ use Symfony\Component\Form\FormBuilderInterface;
final class SocialIssueAggregator implements AggregatorInterface final class SocialIssueAggregator implements AggregatorInterface
{ {
private SocialIssueRender $issueRender;
private SocialIssueRepository $issueRepository; private SocialIssueRepository $issueRepository;
private SocialIssueRender $issueRender;
public function __construct( public function __construct(
SocialIssueRepository $issueRepository, SocialIssueRepository $issueRepository,
SocialIssueRender $issueRender SocialIssueRender $issueRender
@@ -24,58 +32,11 @@ final class SocialIssueAggregator implements AggregatorInterface
$this->issueRender = $issueRender; $this->issueRender = $issueRender;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Social issues';
}
$i = $this->issueRepository->find($value);
return $this->issueRender->renderString($i, []);
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['socialissue_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by social issue';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->join('acp.socialIssues', 'si'); $qb->join('acp.socialIssues', 'si');
@@ -90,11 +51,36 @@ final class SocialIssueAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Social issues';
}
$i = $this->issueRepository->find($value);
return $this->issueRender->renderString($i, []);
};
}
public function getQueryKeys($data): array
{
return ['socialissue_aggregator'];
}
public function getTitle(): string
{
return 'Group by social issue';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators; namespace Chill\PersonBundle\Export\Aggregator\AccompanyingCourseAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
@@ -7,6 +16,7 @@ use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Form\Type\ChillDateType; use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use DateTime;
use Doctrine\DBAL\Types\Types; use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
@@ -23,69 +33,11 @@ final class StepAggregator implements AggregatorInterface //, FilterInterface
$this->translator = $translator; $this->translator = $translator;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
switch ($value) {
case AccompanyingPeriod::STEP_DRAFT:
return $this->translator->trans('Draft');
case AccompanyingPeriod::STEP_CONFIRMED:
return $this->translator->trans('Confirmed');
case AccompanyingPeriod::STEP_CLOSED:
return $this->translator->trans('Closed');
case '_header':
return 'Step';
default:
throw new LogicException(sprintf('The value %s is not valid', $value));
}
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['step_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('on_date', ChillDateType::class, [
'data' => new \DateTime(),
]);
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by step';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->addSelect('acp.step AS step_aggregator'); $qb->addSelect('acp.step AS step_aggregator');
@@ -119,14 +71,50 @@ final class StepAggregator implements AggregatorInterface //, FilterInterface
$qb->setParameter('ondate', $data['on_date'], Types::DATE_MUTABLE); $qb->setParameter('ondate', $data['on_date'], Types::DATE_MUTABLE);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('on_date', ChillDateType::class, [
'data' => new DateTime(),
]);
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
switch ($value) {
case AccompanyingPeriod::STEP_DRAFT:
return $this->translator->trans('Draft');
case AccompanyingPeriod::STEP_CONFIRMED:
return $this->translator->trans('Confirmed');
case AccompanyingPeriod::STEP_CLOSED:
return $this->translator->trans('Closed');
case '_header':
return 'Step';
default:
throw new LogicException(sprintf('The value %s is not valid', $value));
}
};
}
public function getQueryKeys($data): array
{
return ['step_aggregator'];
}
public function getTitle(): string
{
return 'Group by step';
}
/* /*
* TODO check if we need to add FilterInterface and DescribeAction Method to describe date filter ?? * TODO check if we need to add FilterInterface and DescribeAction Method to describe date filter ??
* *

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Aggregator\EvaluationAggregators; namespace Chill\PersonBundle\Export\Aggregator\EvaluationAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
@@ -23,57 +32,11 @@ class EvaluationTypeAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Evaluation type';
}
$ev = $this->evaluationRepository->find($value);
return $this->translatableStringHelper->localize($ev->getTitle());
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['evaluationtype_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by evaluation type';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->addSelect('IDENTITY(eval.evaluation) AS evaluationtype_aggregator'); $qb->addSelect('IDENTITY(eval.evaluation) AS evaluationtype_aggregator');
@@ -87,11 +50,36 @@ class EvaluationTypeAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::EVAL_TYPE; return Declarations::EVAL_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Evaluation type';
}
$ev = $this->evaluationRepository->find($value);
return $this->translatableStringHelper->localize($ev->getTitle());
};
}
public function getQueryKeys($data): array
{
return ['evaluationtype_aggregator'];
}
public function getTitle(): string
{
return 'Group by evaluation type';
}
} }

View File

@@ -1,13 +1,24 @@
<?php <?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\PersonBundle\Export\Aggregator\HouseholdAggregators; namespace Chill\PersonBundle\Export\Aggregator\HouseholdAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Form\Type\ChillDateType; use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use DateTime;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Contracts\Translation\TranslatorInterface; use Symfony\Contracts\Translation\TranslatorInterface;
use function in_array;
class ChildrenNumberAggregator implements AggregatorInterface class ChildrenNumberAggregator implements AggregatorInterface
{ {
@@ -19,64 +30,14 @@ class ChildrenNumberAggregator implements AggregatorInterface
$this->translator = $translator; $this->translator = $translator;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Number of children';
}
return $this->translator->trans(
'household_composition.numberOfChildren children in household', [
'numberOfChildren' => $value
]);
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['childrennumber_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('on_date', ChillDateType::class, [
'data' => new \DateTime('now'),
]);
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by number of children';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('composition', $qb->getAllAliases())) { if (!in_array('composition', $qb->getAllAliases(), true)) {
$qb->join('household.compositions', 'composition'); $qb->join('household.compositions', 'composition');
} }
@@ -102,11 +63,41 @@ class ChildrenNumberAggregator implements AggregatorInterface
); );
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::HOUSEHOLD_TYPE; return Declarations::HOUSEHOLD_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('on_date', ChillDateType::class, [
'data' => new DateTime('now'),
]);
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Number of children';
}
return $this->translator->trans(
'household_composition.numberOfChildren children in household',
[
'numberOfChildren' => $value,
]
);
};
}
public function getQueryKeys($data): array
{
return ['childrennumber_aggregator'];
}
public function getTitle(): string
{
return 'Group by number of children';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Aggregator\HouseholdAggregators; namespace Chill\PersonBundle\Export\Aggregator\HouseholdAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
@@ -7,17 +16,19 @@ use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Chill\PersonBundle\Repository\Household\HouseholdCompositionTypeRepository; use Chill\PersonBundle\Repository\Household\HouseholdCompositionTypeRepository;
use DateTime;
use Doctrine\DBAL\Types\Types; use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class CompositionAggregator implements AggregatorInterface class CompositionAggregator implements AggregatorInterface
{ {
private HouseholdCompositionTypeRepository $typeRepository;
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
private HouseholdCompositionTypeRepository $typeRepository;
public function __construct( public function __construct(
HouseholdCompositionTypeRepository $typeRepository, HouseholdCompositionTypeRepository $typeRepository,
TranslatableStringHelper $translatableStringHelper TranslatableStringHelper $translatableStringHelper
@@ -26,64 +37,14 @@ class CompositionAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Composition';
}
$c = $this->typeRepository->find($value);
return $this->translatableStringHelper->localize(
$c->getLabel()
);
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['composition_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('on_date', ChillDateType::class, [
'data' => new \DateTime('now'),
]);
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by composition';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('composition', $qb->getAllAliases())) { if (!in_array('composition', $qb->getAllAliases(), true)) {
$qb->join('household.compositions', 'composition'); $qb->join('household.compositions', 'composition');
} }
@@ -118,11 +79,40 @@ class CompositionAggregator implements AggregatorInterface
$qb->setParameter('ondate', $data['on_date'], Types::DATE_MUTABLE); $qb->setParameter('ondate', $data['on_date'], Types::DATE_MUTABLE);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::HOUSEHOLD_TYPE; return Declarations::HOUSEHOLD_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('on_date', ChillDateType::class, [
'data' => new DateTime('now'),
]);
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Composition';
}
$c = $this->typeRepository->find($value);
return $this->translatableStringHelper->localize(
$c->getLabel()
);
};
}
public function getQueryKeys($data): array
{
return ['composition_aggregator'];
}
public function getTitle(): string
{
return 'Group by composition';
}
} }

View File

@@ -18,19 +18,18 @@ use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Repository\Household\PositionRepository; use Chill\PersonBundle\Repository\Household\PositionRepository;
use DateTime; use DateTime;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Context\ExecutionContextInterface; use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Symfony\Contracts\Translation\TranslatorInterface; use Symfony\Contracts\Translation\TranslatorInterface;
final class HouseholdPositionAggregator implements AggregatorInterface, ExportElementValidatedInterface final class HouseholdPositionAggregator implements AggregatorInterface, ExportElementValidatedInterface
{ {
private TranslatorInterface $translator;
private PositionRepository $positionRepository; private PositionRepository $positionRepository;
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
private TranslatorInterface $translator;
public function __construct(TranslatorInterface $translator, TranslatableStringHelper $translatableStringHelper, PositionRepository $positionRepository) public function __construct(TranslatorInterface $translator, TranslatableStringHelper $translatableStringHelper, PositionRepository $positionRepository)
{ {
$this->translator = $translator; $this->translator = $translator;
@@ -70,7 +69,6 @@ final class HouseholdPositionAggregator implements AggregatorInterface, ExportEl
} else { } else {
$qb->groupBy('household_position_aggregator'); $qb->groupBy('household_position_aggregator');
} }
} }
public function applyOn() public function applyOn()

View File

@@ -18,7 +18,6 @@ use Chill\PersonBundle\Repository\MaritalStatusRepository;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
final class MaritalStatusAggregator implements AggregatorInterface final class MaritalStatusAggregator implements AggregatorInterface
{ {
private MaritalStatusRepository $maritalStatusRepository; private MaritalStatusRepository $maritalStatusRepository;

View File

@@ -124,14 +124,12 @@ final class NationalityAggregator implements AggregatorInterface, ExportElementV
->getQuery() ->getQuery()
->getResult(\Doctrine\ORM\Query::HYDRATE_SCALAR); ->getResult(\Doctrine\ORM\Query::HYDRATE_SCALAR);
// initialize array and add blank key for null values // initialize array and add blank key for null values
$labels = [ $labels = [
'' => $this->translator->trans('without data'), '' => $this->translator->trans('without data'),
'_header' => $this->translator->trans('Nationality'), '_header' => $this->translator->trans('Nationality'),
]; ];
foreach ($countries as $row) { foreach ($countries as $row) {
$labels[$row['c_countryCode']] = $this->translatableStringHelper->localize($row['c_name']); $labels[$row['c_countryCode']] = $this->translatableStringHelper->localize($row['c_name']);
} }
@@ -151,10 +149,9 @@ final class NationalityAggregator implements AggregatorInterface, ExportElementV
]; ];
} }
return function ($value) use ($labels): string { return static function ($value) use ($labels): string {
return $labels[$value]; return $labels[$value];
}; };
} }
public function getQueryKeys($data) public function getQueryKeys($data)

View File

@@ -47,7 +47,6 @@ final class ActionTypeAggregator implements AggregatorInterface
} else { } else {
$qb->groupBy('action_type_aggregator'); $qb->groupBy('action_type_aggregator');
} }
} }
public function applyOn() public function applyOn()

View File

@@ -47,7 +47,6 @@ final class GoalAggregator implements AggregatorInterface
} else { } else {
$qb->groupBy('goal_aggregator'); $qb->groupBy('goal_aggregator');
} }
} }
public function applyOn() public function applyOn()

View File

@@ -1,18 +1,25 @@
<?php <?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\PersonBundle\Export\Aggregator\SocialWorkAggregators; namespace Chill\PersonBundle\Export\Aggregator\SocialWorkAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\UserJobRepository; use Chill\MainBundle\Repository\UserJobRepository;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr\From;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
final class JobAggregator implements AggregatorInterface final class JobAggregator implements AggregatorInterface
{ {
private UserJobRepository $jobRepository; private UserJobRepository $jobRepository;
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
@@ -25,59 +32,11 @@ final class JobAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function($value): string {
if ($value === '_header') {
return 'Job';
}
$j = $this->jobRepository->find($value);
return $this->translatableStringHelper->localize(
$j->getLabel()
);
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['job_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by treating agent job';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->join('acpw.referrers', 'u'); $qb->join('acpw.referrers', 'u');
@@ -93,11 +52,38 @@ final class JobAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::SOCIAL_WORK_ACTION_TYPE; return Declarations::SOCIAL_WORK_ACTION_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Job';
}
$j = $this->jobRepository->find($value);
return $this->translatableStringHelper->localize(
$j->getLabel()
);
};
}
public function getQueryKeys($data): array
{
return ['job_aggregator'];
}
public function getTitle(): string
{
return 'Group by treating agent job';
}
} }

View File

@@ -15,16 +15,15 @@ use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\UserRepository; use Chill\MainBundle\Repository\UserRepository;
use Chill\MainBundle\Templating\Entity\UserRender; use Chill\MainBundle\Templating\Entity\UserRender;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr\From;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
final class ReferrerAggregator implements AggregatorInterface final class ReferrerAggregator implements AggregatorInterface
{ {
private UserRepository $userRepository;
private UserRender $userRender; private UserRender $userRender;
private UserRepository $userRepository;
public function __construct( public function __construct(
UserRepository $userRepository, UserRepository $userRepository,
UserRender $userRender UserRender $userRender
@@ -51,7 +50,6 @@ final class ReferrerAggregator implements AggregatorInterface
} else { } else {
$qb->groupBy('referrer_aggregator'); $qb->groupBy('referrer_aggregator');
} }
} }
public function applyOn(): string public function applyOn(): string

View File

@@ -49,7 +49,6 @@ final class ResultAggregator implements AggregatorInterface
} else { } else {
$qb->groupBy('result_aggregator'); $qb->groupBy('result_aggregator');
} }
} }
public function applyOn() public function applyOn()

View File

@@ -1,18 +1,25 @@
<?php <?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\PersonBundle\Export\Aggregator\SocialWorkAggregators; namespace Chill\PersonBundle\Export\Aggregator\SocialWorkAggregators;
use Chill\MainBundle\Export\AggregatorInterface; use Chill\MainBundle\Export\AggregatorInterface;
use Chill\MainBundle\Repository\ScopeRepository; use Chill\MainBundle\Repository\ScopeRepository;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr\From;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
final class ScopeAggregator implements AggregatorInterface final class ScopeAggregator implements AggregatorInterface
{ {
private ScopeRepository $scopeRepository; private ScopeRepository $scopeRepository;
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
@@ -25,59 +32,11 @@ final class ScopeAggregator implements AggregatorInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ($value === '_header') {
return 'Scope';
}
$s = $this->scopeRepository->find($value);
return $this->translatableStringHelper->localize(
$s->getName()
);
};
}
/**
* @inheritDoc
*/
public function getQueryKeys($data): array
{
return ['scope_aggregator'];
}
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Group by treating agent scope';
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb->join('acpw.referrers', 'u'); $qb->join('acpw.referrers', 'u');
@@ -93,11 +52,38 @@ final class ScopeAggregator implements AggregatorInterface
} }
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::SOCIAL_WORK_ACTION_TYPE; return Declarations::SOCIAL_WORK_ACTION_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
// no form
}
public function getLabels($key, array $values, $data)
{
return function ($value): string {
if ('_header' === $value) {
return 'Scope';
}
$s = $this->scopeRepository->find($value);
return $this->translatableStringHelper->localize(
$s->getName()
);
};
}
public function getQueryKeys($data): array
{
return ['scope_aggregator'];
}
public function getTitle(): string
{
return 'Group by treating agent scope';
}
} }

View File

@@ -16,15 +16,15 @@ namespace Chill\PersonBundle\Export;
*/ */
abstract class Declarations abstract class Declarations
{ {
public const PERSON_IMPLIED_IN = 'person_implied_in';
public const PERSON_TYPE = 'person';
public const ACP_TYPE = 'accompanying_period'; public const ACP_TYPE = 'accompanying_period';
public const SOCIAL_WORK_ACTION_TYPE = 'social_actions';
public const EVAL_TYPE = 'evaluation'; public const EVAL_TYPE = 'evaluation';
public const HOUSEHOLD_TYPE = 'household'; public const HOUSEHOLD_TYPE = 'household';
public const PERSON_IMPLIED_IN = 'person_implied_in';
public const PERSON_TYPE = 'person';
public const SOCIAL_WORK_ACTION_TYPE = 'social_actions';
} }

View File

@@ -21,9 +21,9 @@ use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use LogicException;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Security\Core\Role\Role;
use LogicException;
class CountAccompanyingCourse implements ExportInterface, GroupedExportInterface class CountAccompanyingCourse implements ExportInterface, GroupedExportInterface
{ {
@@ -40,11 +40,6 @@ class CountAccompanyingCourse implements ExportInterface, GroupedExportInterface
// TODO: Implement buildForm() method. // TODO: Implement buildForm() method.
} }
public function getTitle(): string
{
return 'Count accompanying courses';
}
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
@@ -55,6 +50,11 @@ class CountAccompanyingCourse implements ExportInterface, GroupedExportInterface
return 'Count accompanying courses by various parameters'; return 'Count accompanying courses by various parameters';
} }
public function getGroup(): string
{
return 'Exports of accompanying courses';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_result' !== $key) { if ('export_result' !== $key) {
@@ -79,6 +79,11 @@ class CountAccompanyingCourse implements ExportInterface, GroupedExportInterface
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
public function getTitle(): string
{
return 'Count accompanying courses';
}
public function getType(): string public function getType(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
@@ -104,9 +109,4 @@ class CountAccompanyingCourse implements ExportInterface, GroupedExportInterface
Declarations::ACP_TYPE, Declarations::ACP_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of accompanying courses';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Export; namespace Chill\PersonBundle\Export\Export;
use Chill\MainBundle\Export\ExportInterface; use Chill\MainBundle\Export\ExportInterface;
@@ -16,7 +25,6 @@ use Symfony\Component\Security\Core\Role\Role;
class CountEvaluation implements ExportInterface, GroupedExportInterface class CountEvaluation implements ExportInterface, GroupedExportInterface
{ {
private EntityRepository $repository; private EntityRepository $repository;
public function __construct( public function __construct(
@@ -25,41 +33,26 @@ class CountEvaluation implements ExportInterface, GroupedExportInterface
$this->repository = $em->getRepository(AccompanyingPeriod::class); $this->repository = $em->getRepository(AccompanyingPeriod::class);
} }
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder) public function buildForm(FormBuilderInterface $builder)
{ {
// TODO: Implement buildForm() method. // TODO: Implement buildForm() method.
} }
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Count evaluations';
}
/**
* @inheritDoc
*/
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
} }
/**
* @inheritDoc
*/
public function getDescription(): string public function getDescription(): string
{ {
return 'Count evaluation by various parameters.'; return 'Count evaluation by various parameters.';
} }
/** public function getGroup(): string
* @inheritDoc {
*/ return 'Exports of evaluations';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_result' !== $key) { if ('export_result' !== $key) {
@@ -74,56 +67,42 @@ class CountEvaluation implements ExportInterface, GroupedExportInterface
}; };
} }
/**
* @inheritDoc
*/
public function getQueryKeys($data): array public function getQueryKeys($data): array
{ {
return ['export_result']; return ['export_result'];
} }
/**
* @inheritDoc
*/
public function getResult($qb, $data) public function getResult($qb, $data)
{ {
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
/** public function getTitle(): string
* @inheritDoc {
*/ return 'Count evaluations';
}
public function getType(): string public function getType(): string
{ {
return Declarations::EVAL_TYPE; return Declarations::EVAL_TYPE;
} }
/**
* @inheritDoc
*/
public function initiateQuery(array $requiredModifiers, array $acl, array $data = []) public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{ {
$qb = $this->repository->createQueryBuilder('acp') $qb = $this->repository->createQueryBuilder('acp')
->join('acp.works', 'acpw') ->join('acp.works', 'acpw')
->join('acpw.accompanyingPeriodWorkEvaluations', 'eval') ->join('acpw.accompanyingPeriodWorkEvaluations', 'eval');
;
$qb->select('COUNT(eval.id) AS export_result'); $qb->select('COUNT(eval.id) AS export_result');
return $qb; return $qb;
} }
/**
* @inheritDoc
*/
public function requiredRole() public function requiredRole()
{ {
return new Role(AccompanyingPeriodVoter::STATS); return new Role(AccompanyingPeriodVoter::STATS);
} }
/**
* @inheritDoc
*/
public function supportsModifiers(): array public function supportsModifiers(): array
{ {
return [ return [
@@ -132,9 +111,4 @@ class CountEvaluation implements ExportInterface, GroupedExportInterface
//Declarations::SOCIAL_WORK_ACTION_TYPE, //Declarations::SOCIAL_WORK_ACTION_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of evaluations';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Export; namespace Chill\PersonBundle\Export\Export;
use Chill\MainBundle\Export\ExportInterface; use Chill\MainBundle\Export\ExportInterface;
@@ -24,41 +33,26 @@ class CountHousehold implements ExportInterface, GroupedExportInterface
$this->repository = $em->getRepository(AccompanyingPeriod::class); $this->repository = $em->getRepository(AccompanyingPeriod::class);
} }
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder) public function buildForm(FormBuilderInterface $builder)
{ {
// TODO: Implement buildForm() method. // TODO: Implement buildForm() method.
} }
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Count households';
}
/**
* @inheritDoc
*/
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
} }
/**
* @inheritDoc
*/
public function getDescription(): string public function getDescription(): string
{ {
return 'Count household by various parameters.'; return 'Count household by various parameters.';
} }
/** public function getGroup(): string
* @inheritDoc {
*/ return 'Exports of households';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_result' !== $key) { if ('export_result' !== $key) {
@@ -73,59 +67,45 @@ class CountHousehold implements ExportInterface, GroupedExportInterface
}; };
} }
/**
* @inheritDoc
*/
public function getQueryKeys($data): array public function getQueryKeys($data): array
{ {
return ['export_result']; return ['export_result'];
} }
/**
* @inheritDoc
*/
public function getResult($qb, $data) public function getResult($qb, $data)
{ {
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
/** public function getTitle(): string
* @inheritDoc {
*/ return 'Count households';
}
public function getType(): string public function getType(): string
{ {
return Declarations::HOUSEHOLD_TYPE; return Declarations::HOUSEHOLD_TYPE;
} }
/**
* @inheritDoc
*/
public function initiateQuery(array $requiredModifiers, array $acl, array $data = []) public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{ {
$qb = $this->repository->createQueryBuilder('acp') $qb = $this->repository->createQueryBuilder('acp')
->join('acp.participations', 'acppart') ->join('acp.participations', 'acppart')
->join('acppart.person', 'person') ->join('acppart.person', 'person')
->join('person.householdParticipations', 'householdmember') ->join('person.householdParticipations', 'householdmember')
->join('householdmember.household', 'household') ->join('householdmember.household', 'household');
;
$qb->select('COUNT(DISTINCT householdmember.household) AS export_result'); $qb->select('COUNT(DISTINCT householdmember.household) AS export_result');
return $qb; return $qb;
} }
/**
* @inheritDoc
*/
public function requiredRole() public function requiredRole()
{ {
// TODO HouseholdVoter::STATS !?? // TODO HouseholdVoter::STATS !??
return new Role(AccompanyingPeriodVoter::STATS); return new Role(AccompanyingPeriodVoter::STATS);
} }
/**
* @inheritDoc
*/
public function supportsModifiers(): array public function supportsModifiers(): array
{ {
return [ return [
@@ -133,9 +113,4 @@ class CountHousehold implements ExportInterface, GroupedExportInterface
//Declarations::ACP_TYPE //Declarations::ACP_TYPE
]; ];
} }
public function getGroup(): string
{
return 'Exports of households';
}
} }

View File

@@ -25,7 +25,6 @@ use Symfony\Component\Security\Core\Role\Role;
class CountPerson implements ExportInterface, GroupedExportInterface class CountPerson implements ExportInterface, GroupedExportInterface
{ {
protected PersonRepository $personRepository; protected PersonRepository $personRepository;
public function __construct( public function __construct(
@@ -49,6 +48,11 @@ class CountPerson implements ExportInterface, GroupedExportInterface
return 'Count people by various parameters.'; return 'Count people by various parameters.';
} }
public function getGroup(): string
{
return 'Exports of persons';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_result' !== $key) { if ('export_result' !== $key) {
@@ -117,9 +121,4 @@ class CountPerson implements ExportInterface, GroupedExportInterface
//Declarations::ACP_TYPE //Declarations::ACP_TYPE
]; ];
} }
public function getGroup(): string
{
return 'Exports of persons';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Export; namespace Chill\PersonBundle\Export\Export;
use Chill\MainBundle\Export\ExportInterface; use Chill\MainBundle\Export\ExportInterface;
@@ -24,41 +33,26 @@ class CountPersonWithAccompanyingCourse implements ExportInterface, GroupedExpor
$this->repository = $em->getRepository(AccompanyingPeriod::class); $this->repository = $em->getRepository(AccompanyingPeriod::class);
} }
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder) public function buildForm(FormBuilderInterface $builder)
{ {
// TODO: Implement buildForm() method. // TODO: Implement buildForm() method.
} }
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Count people participating in an accompanying course';
}
/**
* @inheritDoc
*/
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
} }
/**
* @inheritDoc
*/
public function getDescription(): string public function getDescription(): string
{ {
return 'Count people participating in an accompanying course by various parameters.'; return 'Count people participating in an accompanying course by various parameters.';
} }
/** public function getGroup(): string
* @inheritDoc {
*/ return 'Exports of persons';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_result' !== $key) { if ('export_result' !== $key) {
@@ -73,66 +67,47 @@ class CountPersonWithAccompanyingCourse implements ExportInterface, GroupedExpor
}; };
} }
/**
* @inheritDoc
*/
public function getQueryKeys($data): array public function getQueryKeys($data): array
{ {
return ['export_result']; return ['export_result'];
} }
/**
* @inheritDoc
*/
public function getResult($qb, $data) public function getResult($qb, $data)
{ {
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
/** public function getTitle(): string
* @inheritDoc {
*/ return 'Count people participating in an accompanying course';
}
public function getType(): string public function getType(): string
{ {
return Declarations::HOUSEHOLD_TYPE; return Declarations::HOUSEHOLD_TYPE;
} }
/**
* @inheritDoc
*/
public function initiateQuery(array $requiredModifiers, array $acl, array $data = []) public function initiateQuery(array $requiredModifiers, array $acl, array $data = [])
{ {
$qb = $this->repository->createQueryBuilder('acp') $qb = $this->repository->createQueryBuilder('acp')
->join('acp.participations', 'acppart') ->join('acp.participations', 'acppart')
->join('acppart.person', 'person') ->join('acppart.person', 'person');
;
$qb->select('COUNT(DISTINCT person.id) AS export_result'); $qb->select('COUNT(DISTINCT person.id) AS export_result');
return $qb; return $qb;
} }
/**
* @inheritDoc
*/
public function requiredRole() public function requiredRole()
{ {
return new Role(AccompanyingPeriodVoter::STATS); return new Role(AccompanyingPeriodVoter::STATS);
} }
/**
* @inheritDoc
*/
public function supportsModifiers(): array public function supportsModifiers(): array
{ {
return [ return [
Declarations::ACP_TYPE, Declarations::ACP_TYPE,
Declarations::PERSON_TYPE Declarations::PERSON_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of persons';
}
} }

View File

@@ -21,8 +21,8 @@ use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface;
use LogicException; use LogicException;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Role\Role; use Symfony\Component\Security\Core\Role\Role;
class CountSocialWorkActions implements ExportInterface, GroupedExportInterface class CountSocialWorkActions implements ExportInterface, GroupedExportInterface
@@ -40,11 +40,6 @@ class CountSocialWorkActions implements ExportInterface, GroupedExportInterface
// No form necessary? // No form necessary?
} }
public function getTitle(): string
{
return 'Count social work actions';
}
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
@@ -55,6 +50,11 @@ class CountSocialWorkActions implements ExportInterface, GroupedExportInterface
return 'Count social work actions by various parameters'; return 'Count social work actions by various parameters';
} }
public function getGroup(): string
{
return 'Exports of social work actions';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_result' !== $key) { if ('export_result' !== $key) {
@@ -79,6 +79,11 @@ class CountSocialWorkActions implements ExportInterface, GroupedExportInterface
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
public function getTitle(): string
{
return 'Count social work actions';
}
public function getType(): string public function getType(): string
{ {
return Declarations::SOCIAL_WORK_ACTION_TYPE; return Declarations::SOCIAL_WORK_ACTION_TYPE;
@@ -87,8 +92,7 @@ class CountSocialWorkActions implements ExportInterface, GroupedExportInterface
public function initiateQuery(array $requiredModifiers, array $acl, array $data = []): QueryBuilder public function initiateQuery(array $requiredModifiers, array $acl, array $data = []): QueryBuilder
{ {
$qb = $this->repository->createQueryBuilder('acp') $qb = $this->repository->createQueryBuilder('acp')
->join('acp.works', 'acpw') ->join('acp.works', 'acpw');
;
$qb->select('COUNT(acpw.id) as export_result'); $qb->select('COUNT(acpw.id) as export_result');
@@ -107,9 +111,4 @@ class CountSocialWorkActions implements ExportInterface, GroupedExportInterface
Declarations::SOCIAL_WORK_ACTION_TYPE, Declarations::SOCIAL_WORK_ACTION_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of social work actions';
}
} }

View File

@@ -136,6 +136,11 @@ class ListPerson implements ExportElementValidatedInterface, ListInterface, Grou
return 'Create a list of people according to various filters.'; return 'Create a list of people according to various filters.';
} }
public function getGroup(): string
{
return 'Exports of persons';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
switch ($key) { switch ($key) {
@@ -426,9 +431,11 @@ class ListPerson implements ExportElementValidatedInterface, ListInterface, Grou
if ('_header' === $value) { if ('_header' === $value) {
return $this->translatableStringHelper->localize($cf->getName()); return $this->translatableStringHelper->localize($cf->getName());
} }
if (null === $value) { if (null === $value) {
return ''; return '';
} }
return $this->customFieldProvider return $this->customFieldProvider
->getCustomFieldByType($cf->getType()) ->getCustomFieldByType($cf->getType())
->render(json_decode($value, true), $cf, 'csv'); ->render(json_decode($value, true), $cf, 'csv');
@@ -437,6 +444,7 @@ class ListPerson implements ExportElementValidatedInterface, ListInterface, Grou
if ($cfType instanceof CustomFieldChoice && $cfType->isMultiple($cf)) { if ($cfType instanceof CustomFieldChoice && $cfType->isMultiple($cf)) {
return function ($value) use ($cf, $cfType, $key) { return function ($value) use ($cf, $cfType, $key) {
$slugChoice = $this->extractInfosFromSlug($key)['additionnalInfos']['choiceSlug']; $slugChoice = $this->extractInfosFromSlug($key)['additionnalInfos']['choiceSlug'];
if (null === $value) { if (null === $value) {
return ''; return '';
} }
@@ -475,9 +483,4 @@ class ListPerson implements ExportElementValidatedInterface, ListInterface, Grou
return $uid; return $uid;
} }
public function getGroup(): string
{
return 'Exports of persons';
}
} }

View File

@@ -129,6 +129,11 @@ class ListPersonDuplicate implements DirectExportInterface, ExportElementValidat
return 'Create a list of duplicate people'; return 'Create a list of duplicate people';
} }
public function getGroup(): string
{
return 'Exports of persons';
}
/** /**
* @return string * @return string
*/ */
@@ -197,9 +202,4 @@ class ListPersonDuplicate implements DirectExportInterface, ExportElementValidat
return $result->fetchAllAssociative(); return $result->fetchAllAssociative();
} }
public function getGroup(): string
{
return 'Exports of persons';
}
} }

View File

@@ -18,6 +18,7 @@ use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\PersonBundle\Entity\AccompanyingPeriod; use Chill\PersonBundle\Entity\AccompanyingPeriod;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter; use Chill\PersonBundle\Security\Authorization\AccompanyingPeriodVoter;
use DateTime;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\EntityRepository; use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query; use Doctrine\ORM\Query;
@@ -27,7 +28,6 @@ use Symfony\Component\Security\Core\Role\Role;
class StatAccompanyingCourseDuration implements ExportInterface, GroupedExportInterface class StatAccompanyingCourseDuration implements ExportInterface, GroupedExportInterface
{ {
private EntityRepository $repository; private EntityRepository $repository;
public function __construct( public function __construct(
@@ -36,44 +36,29 @@ class StatAccompanyingCourseDuration implements ExportInterface, GroupedExportIn
$this->repository = $em->getRepository(AccompanyingPeriod::class); $this->repository = $em->getRepository(AccompanyingPeriod::class);
} }
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder): void public function buildForm(FormBuilderInterface $builder): void
{ {
$builder->add('closingdate', ChillDateType::class, [ $builder->add('closingdate', ChillDateType::class, [
'label' => 'Closingdate to apply', 'label' => 'Closingdate to apply',
'data' => new \DateTime('now'), 'data' => new DateTime('now'),
]); ]);
} }
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Accompanying courses duration';
}
/**
* @inheritDoc
*/
public function getAllowedFormattersTypes(): array public function getAllowedFormattersTypes(): array
{ {
return [FormatterInterface::TYPE_TABULAR]; return [FormatterInterface::TYPE_TABULAR];
} }
/**
* @inheritDoc
*/
public function getDescription(): string public function getDescription(): string
{ {
return 'Create an average of accompanying courses duration according to various filters'; return 'Create an average of accompanying courses duration according to various filters';
} }
/** public function getGroup(): string
* @inheritDoc {
*/ return 'Exports of accompanying courses';
}
public function getLabels($key, array $values, $data) public function getLabels($key, array $values, $data)
{ {
if ('export_result' !== $key) { if ('export_result' !== $key) {
@@ -88,33 +73,26 @@ class StatAccompanyingCourseDuration implements ExportInterface, GroupedExportIn
}; };
} }
/**
* @inheritDoc
*/
public function getQueryKeys($data): array public function getQueryKeys($data): array
{ {
return ['export_result']; return ['export_result'];
} }
/**
* @inheritDoc
*/
public function getResult($qb, $data) public function getResult($qb, $data)
{ {
return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR); return $qb->getQuery()->getResult(Query::HYDRATE_SCALAR);
} }
/** public function getTitle(): string
* @inheritDoc {
*/ return 'Accompanying courses duration';
}
public function getType(): string public function getType(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
/**
* @inheritDoc
*/
public function initiateQuery(array $requiredModifiers, array $acl, array $data = []): QueryBuilder public function initiateQuery(array $requiredModifiers, array $acl, array $data = []): QueryBuilder
{ {
$qb = $this->repository->createQueryBuilder('acp'); $qb = $this->repository->createQueryBuilder('acp');
@@ -127,32 +105,20 @@ class StatAccompanyingCourseDuration implements ExportInterface, GroupedExportIn
ELSE :force_closingDate ELSE :force_closingDate
END ) - acp.openingDate END ) - acp.openingDate
) AS export_result') ) AS export_result')
->setParameter('force_closingDate', $data['closingdate']) ->setParameter('force_closingDate', $data['closingdate']);
;
return $qb; return $qb;
} }
/**
* @inheritDoc
*/
public function requiredRole(): Role public function requiredRole(): Role
{ {
return new Role(AccompanyingPeriodVoter::STATS); return new Role(AccompanyingPeriodVoter::STATS);
} }
/**
* @inheritDoc
*/
public function supportsModifiers(): array public function supportsModifiers(): array
{ {
return [ return [
Declarations::ACP_TYPE Declarations::ACP_TYPE,
]; ];
} }
public function getGroup(): string
{
return 'Exports of accompanying courses';
}
} }

View File

@@ -1,60 +1,32 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Form\Type\ChillDateType; use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use DateTime;
use Doctrine\DBAL\Types\Types; use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use DateTime;
class ActiveOnDateFilter implements FilterInterface class ActiveOnDateFilter implements FilterInterface
{ {
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('on_date', ChillDateType::class, [
'data' => new DateTime(),
])
;
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Filter by active on date';
}
/**
* @inheritDoc
*/
public function describeAction($data, $format = 'string'): array
{
return ['Filtered by actives courses: active on %ondate%', [
'%ondate%' => $data['on_date']->format('d-m-Y')
]];
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
@@ -77,11 +49,28 @@ class ActiveOnDateFilter implements FilterInterface
$qb->setParameter('ondate', $data['on_date'], Types::DATE_MUTABLE); $qb->setParameter('ondate', $data['on_date'], Types::DATE_MUTABLE);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('on_date', ChillDateType::class, [
'data' => new DateTime(),
]);
}
public function describeAction($data, $format = 'string'): array
{
return ['Filtered by actives courses: active on %ondate%', [
'%ondate%' => $data['on_date']->format('d-m-Y'),
]];
}
public function getTitle(): string
{
return 'Filter by active on date';
}
} }

View File

@@ -1,64 +1,32 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Form\Type\ChillDateType; use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use DateTime;
use Doctrine\DBAL\Types\Types; use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use DateTime;
class ActiveOneDayBetweenDatesFilter implements FilterInterface class ActiveOneDayBetweenDatesFilter implements FilterInterface
{ {
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('date_from', ChillDateType::class, [
'data' => new DateTime(),
])
->add('date_to', ChillDateType::class, [
'data' => new DateTime(),
])
;
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Filter by active at least one day between dates';
}
/**
* @inheritDoc
*/
public function describeAction($data, $format = 'string'): array
{
return ['Filtered by actives courses: at least one day between %datefrom% and %dateto%', [
'%datefrom%' => $data['date_from']->format('d-m-Y'),
'%dateto%' => $data['date_to']->format('d-m-Y'),
]];
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
@@ -83,11 +51,32 @@ class ActiveOneDayBetweenDatesFilter implements FilterInterface
$qb->setParameter('dateto', $data['date_to'], Types::DATE_MUTABLE); $qb->setParameter('dateto', $data['date_to'], Types::DATE_MUTABLE);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('date_from', ChillDateType::class, [
'data' => new DateTime(),
])
->add('date_to', ChillDateType::class, [
'data' => new DateTime(),
]);
}
public function describeAction($data, $format = 'string'): array
{
return ['Filtered by actives courses: at least one day between %datefrom% and %dateto%', [
'%datefrom%' => $data['date_from']->format('d-m-Y'),
'%dateto%' => $data['date_to']->format('d-m-Y'),
]];
}
public function getTitle(): string
{
return 'Filter by active at least one day between dates';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\ActivityBundle\Entity\ActivityType; use Chill\ActivityBundle\Entity\ActivityType;
@@ -12,7 +21,7 @@ use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
/** /**
* TODO merge with ActivityTypeFilter in ChillActivity (!?) * TODO merge with ActivityTypeFilter in ChillActivity (!?).
*/ */
class ActivityTypeFilter implements FilterInterface class ActivityTypeFilter implements FilterInterface
{ {
@@ -23,56 +32,11 @@ class ActivityTypeFilter implements FilterInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_activitytypes', EntityType::class, [
'class' => ActivityType::class,
'choice_label' => function (ActivityType $aty) {
return $this->translatableStringHelper->localize($aty->getName());
},
'multiple' => true,
'expanded' => true
]);
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Filter accompanying course by activity type';
}
/**
* @inheritDoc
*/
public function describeAction($data, $format = 'string'): array
{
$types = [];
foreach ($data['accepted_activitytypes'] as $aty) {
$types[] = $this->translatableStringHelper->localize($aty->getName());
}
return ['Filtered by activity types: only %activitytypes%', [
'%activitytypes%' => implode(", ou ", $types)
]];
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
// One2many between activity and accompanyingperiod is not reversed ! // One2many between activity and accompanyingperiod is not reversed !
@@ -83,8 +47,7 @@ class ActivityTypeFilter implements FilterInterface
$qb $qb
->join('act.accompanyingPeriod', 'acp') ->join('act.accompanyingPeriod', 'acp')
->join('act.activityType', 'aty') ->join('act.activityType', 'aty');
;
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
$clause = $qb->expr()->in('aty.id', ':activitytypes'); $clause = $qb->expr()->in('aty.id', ':activitytypes');
@@ -97,14 +60,40 @@ class ActivityTypeFilter implements FilterInterface
$qb->add('where', $where); $qb->add('where', $where);
$qb->setParameter('activitytypes', $data['accepted_activitytypes']); $qb->setParameter('activitytypes', $data['accepted_activitytypes']);
} }
/**
* @inheritDoc
*/
public function applyOn() public function applyOn()
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_activitytypes', EntityType::class, [
'class' => ActivityType::class,
'choice_label' => function (ActivityType $aty) {
return $this->translatableStringHelper->localize($aty->getName());
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$types = [];
foreach ($data['accepted_activitytypes'] as $aty) {
$types[] = $this->translatableStringHelper->localize($aty->getName());
}
return ['Filtered by activity types: only %activitytypes%', [
'%activitytypes%' => implode(', ou ', $types),
]];
}
public function getTitle(): string
{
return 'Filter accompanying course by activity type';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Entity\Location; use Chill\MainBundle\Entity\Location;
@@ -13,9 +22,6 @@ use Symfony\Component\Form\FormBuilderInterface;
class AdministrativeLocationFilter implements FilterInterface class AdministrativeLocationFilter implements FilterInterface
{ {
/**
* @var TranslatableStringHelper
*/
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
public function __construct( public function __construct(
@@ -24,56 +30,11 @@ class AdministrativeLocationFilter implements FilterInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_locations', EntityType::class, [
'class' => Location::class,
'choice_label' => function (Location $l) {
return $l->getName() .' ('. $this->translatableStringHelper->localize($l->getLocationType()->getTitle()) . ')';
},
'multiple' => true,
'expanded' => true,
]);
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Filter by administrative location';
}
/**
* @inheritDoc
*/
public function describeAction($data, $format = 'string'): array
{
$locations = [];
foreach ($data['accepted_locations'] as $l) {
$locations[] = $l->getName();
}
return ['Filtered by administratives locations: only %locations%', [
'%locations%' => implode(", ou ", $locations)
]];
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
@@ -89,11 +50,38 @@ class AdministrativeLocationFilter implements FilterInterface
$qb->setParameter('locations', $data['accepted_locations']); $qb->setParameter('locations', $data['accepted_locations']);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_locations', EntityType::class, [
'class' => Location::class,
'choice_label' => function (Location $l) {
return $l->getName() . ' (' . $this->translatableStringHelper->localize($l->getLocationType()->getTitle()) . ')';
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$locations = [];
foreach ($data['accepted_locations'] as $l) {
$locations[] = $l->getName();
}
return ['Filtered by administratives locations: only %locations%', [
'%locations%' => implode(', ou ', $locations),
]];
}
public function getTitle(): string
{
return 'Filter by administrative location';
}
} }

View File

@@ -1,21 +1,27 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Templating\TranslatableStringHelper; use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Entity\AccompanyingPeriod\ClosingMotive;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Chill\PersonBundle\Entity\AccompanyingPeriod\ClosingMotive;
class ClosingMotiveFilter implements FilterInterface class ClosingMotiveFilter implements FilterInterface
{ {
/**
* @var TranslatableStringHelper
*/
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
public function __construct( public function __construct(
@@ -24,57 +30,11 @@ class ClosingMotiveFilter implements FilterInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_closingmotives', EntityType::class, [
'class' => ClosingMotive::class,
'choice_label' => function (ClosingMotive $cm) {
return $this->translatableStringHelper->localize($cm->getName());
},
'multiple' => true,
'expanded' => true,
]);
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Filter by closing motive';
}
/**
* @inheritDoc
*/
public function describeAction($data, $format = 'string'): array
{
$motives = [];
foreach ($data['accepted_closingmotives'] as $k => $v) {
$motives[] = $this->translatableStringHelper->localize($v->getName());
}
return [
'Filtered by closingmotive: only %closingmotives%', [
'%closingmotives%' => implode(', ou ', $motives)
]];
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
@@ -90,11 +50,39 @@ class ClosingMotiveFilter implements FilterInterface
$qb->setParameter('closingmotive', $data['accepted_closingmotives']); $qb->setParameter('closingmotive', $data['accepted_closingmotives']);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_closingmotives', EntityType::class, [
'class' => ClosingMotive::class,
'choice_label' => function (ClosingMotive $cm) {
return $this->translatableStringHelper->localize($cm->getName());
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$motives = [];
foreach ($data['accepted_closingmotives'] as $k => $v) {
$motives[] = $this->translatableStringHelper->localize($v->getName());
}
return [
'Filtered by closingmotive: only %closingmotives%', [
'%closingmotives%' => implode(', ou ', $motives),
], ];
}
public function getTitle(): string
{
return 'Filter by closing motive';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
@@ -17,7 +26,7 @@ class ConfidentialFilter implements FilterInterface
'is confidential' => true, 'is confidential' => true,
]; ];
private CONST DEFAULT_CHOICE = false; private const DEFAULT_CHOICE = false;
private TranslatorInterface $translator; private TranslatorInterface $translator;
@@ -26,39 +35,6 @@ class ConfidentialFilter implements FilterInterface
$this->translator = $translator; $this->translator = $translator;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_confidentials', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function getTitle(): string
{
return 'Filter by confidential';
}
public function describeAction($data, $format = 'string'): array
{
dump($data, self::CHOICES);
foreach (self::CHOICES as $k => $v) {
if ($v === $data['accepted_confidentials']) {
$choice = $k;
}
}
return [
'Filtered by confidential: only %confidential%', [
'%confidential%' => $this->translator->trans($choice)
]
];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -84,4 +60,36 @@ class ConfidentialFilter implements FilterInterface
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_confidentials', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function describeAction($data, $format = 'string'): array
{
dump($data, self::CHOICES);
foreach (self::CHOICES as $k => $v) {
if ($v === $data['accepted_confidentials']) {
$choice = $k;
}
}
return [
'Filtered by confidential: only %confidential%', [
'%confidential%' => $this->translator->trans($choice),
],
];
}
public function getTitle(): string
{
return 'Filter by confidential';
}
} }

View File

@@ -35,17 +35,6 @@ class CurrentUserJobFilter implements FilterInterface
$this->security = $security; $this->security = $security;
} }
public function describeAction($data, $format = 'string')
{
return [
'Filtered by user job: only %job%', [
'%job%' => $this->translatableStringHelper->localize(
$this->getUserJob()->getLabel()
)
],
];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -75,12 +64,23 @@ class CurrentUserJobFilter implements FilterInterface
{ {
} }
public function describeAction($data, $format = 'string')
{
return [
'Filtered by user job: only %job%', [
'%job%' => $this->translatableStringHelper->localize(
$this->getUserJob()->getLabel()
),
],
];
}
public function getTitle() public function getTitle()
{ {
return 'Filter by user job'; return 'Filter by user job';
} }
private function getUserJob():UserJob private function getUserJob(): UserJob
{ {
/** @var User $user */ /** @var User $user */
$user = $this->security->getUser(); $user = $this->security->getUser();

View File

@@ -18,7 +18,6 @@ use Chill\MainBundle\Templating\TranslatableStringHelper;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\Security;
@@ -26,9 +25,6 @@ class CurrentUserScopeFilter implements FilterInterface
{ {
private Security $security; private Security $security;
/**
* @var TranslatableStringHelper
*/
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
public function __construct( public function __construct(
@@ -39,17 +35,6 @@ class CurrentUserScopeFilter implements FilterInterface
$this->security = $security; $this->security = $security;
} }
public function describeAction($data, $format = 'string')
{
return [
'Filtered by user main scope: only %scope%', [
'%scope%' => $this->translatableStringHelper->localize(
$this->getUserMainScope()->getName()
)
]
];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -70,7 +55,6 @@ class CurrentUserScopeFilter implements FilterInterface
$qb->add('where', $where); $qb->add('where', $where);
$qb->setParameter('userscope', $this->getUserMainScope()); $qb->setParameter('userscope', $this->getUserMainScope());
} }
public function applyOn() public function applyOn()
@@ -82,12 +66,23 @@ class CurrentUserScopeFilter implements FilterInterface
{ {
} }
public function describeAction($data, $format = 'string')
{
return [
'Filtered by user main scope: only %scope%', [
'%scope%' => $this->translatableStringHelper->localize(
$this->getUserMainScope()->getName()
),
],
];
}
public function getTitle() public function getTitle()
{ {
return 'Filter by user scope'; return 'Filter by user scope';
} }
private function getUserMainScope():Scope private function getUserMainScope(): Scope
{ {
/** @var User $user */ /** @var User $user */
$user = $this->security->getUser(); $user = $this->security->getUser();

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
@@ -17,7 +26,7 @@ class EmergencyFilter implements FilterInterface
'is not emergency' => false, 'is not emergency' => false,
]; ];
private CONST DEFAULT_CHOICE = false; private const DEFAULT_CHOICE = false;
private TranslatorInterface $translator; private TranslatorInterface $translator;
@@ -26,37 +35,6 @@ class EmergencyFilter implements FilterInterface
$this->translator = $translator; $this->translator = $translator;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_emergency', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function getTitle(): string
{
return 'Filter by emergency';
}
public function describeAction($data, $format = 'string'): array
{
foreach (self::CHOICES as $k => $v) {
if ($v === $data['accepted_emergency']) {
$choice = $k;
}
}
return [
'Filtered by emergency: only %emergency%', [
'%emergency%' => $this->translator->trans($choice)
]
];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -82,4 +60,34 @@ class EmergencyFilter implements FilterInterface
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_emergency', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function describeAction($data, $format = 'string'): array
{
foreach (self::CHOICES as $k => $v) {
if ($v === $data['accepted_emergency']) {
$choice = $k;
}
}
return [
'Filtered by emergency: only %emergency%', [
'%emergency%' => $this->translator->trans($choice),
],
];
}
public function getTitle(): string
{
return 'Filter by emergency';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
@@ -13,9 +22,6 @@ use Symfony\Component\Form\FormBuilderInterface;
class EvaluationFilter implements FilterInterface class EvaluationFilter implements FilterInterface
{ {
/**
* @var TranslatableStringHelper
*/
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
public function __construct( public function __construct(
@@ -24,63 +30,17 @@ class EvaluationFilter implements FilterInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_evaluations', EntityType::class, [
'class' => Evaluation::class,
'choice_label' => function (Evaluation $ev) {
return $this->translatableStringHelper->localize($ev->getTitle());
},
'multiple' => true,
'expanded' => true,
]);
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Filter by evaluation';
}
/**
* @inheritDoc
*/
public function describeAction($data, $format = 'string'): array
{
$evaluations = [];
foreach ($data['accepted_evaluations'] as $ev) {
$evaluations[] = $this->translatableStringHelper->localize($ev->getTitle());
}
return ['Filtered by evaluations: only %evals%', [
'%evals%' => implode(", ou ", $evaluations)
]];
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$qb $qb
->join('acp.works', 'acpw') ->join('acp.works', 'acpw')
->join('acpw.accompanyingPeriodWorkEvaluations', 'we') ->join('acpw.accompanyingPeriodWorkEvaluations', 'we')
->join('we.evaluation', 'ev') ->join('we.evaluation', 'ev');
;
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
$clause = $qb->expr()->in('ev.id', ':evaluations'); $clause = $qb->expr()->in('ev.id', ':evaluations');
@@ -95,11 +55,38 @@ class EvaluationFilter implements FilterInterface
$qb->setParameter('evaluations', $data['accepted_evaluations']); $qb->setParameter('evaluations', $data['accepted_evaluations']);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_evaluations', EntityType::class, [
'class' => Evaluation::class,
'choice_label' => function (Evaluation $ev) {
return $this->translatableStringHelper->localize($ev->getTitle());
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$evaluations = [];
foreach ($data['accepted_evaluations'] as $ev) {
$evaluations[] = $this->translatableStringHelper->localize($ev->getTitle());
}
return ['Filtered by evaluations: only %evals%', [
'%evals%' => implode(', ou ', $evaluations),
]];
}
public function getTitle(): string
{
return 'Filter by evaluation';
}
} }

View File

@@ -1,11 +1,21 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Entity\GeographicalUnit; use Chill\MainBundle\Entity\GeographicalUnit;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Form\Type\ChillDateType; use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use DateTime;
use Doctrine\DBAL\Types\Types; use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
@@ -13,7 +23,7 @@ use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
/** /**
* e) par zone géographique * e) par zone géographique.
* *
* Paramètre: * Paramètre:
* * Date * * Date
@@ -24,55 +34,11 @@ use Symfony\Component\Form\FormBuilderInterface;
*/ */
class GeographicalUnitStatFilter implements FilterInterface class GeographicalUnitStatFilter implements FilterInterface
{ {
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('date', ChillDateType::class, [
'data' => new \DateTime(),
])
->add('accepted_loctype', EntityType::class, [
'class' => GeographicalUnit::class,
'choice_label' => function (GeographicalUnit $u) {
return $u->getUnitName();
},
'multiple' => true,
'expanded' => true,
])
;
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Filter by geographical unit';
}
/**
* @inheritDoc
*/
public function describeAction($data, $format = 'string'): array
{
return ['Filtered by geographic unit: only %date%', [
'%date%' => $data['date']->format('d-m-Y'),
]];
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
@@ -89,11 +55,36 @@ class GeographicalUnitStatFilter implements FilterInterface
$qb->setParameter('loctype', $data['accepted_loctype']); $qb->setParameter('loctype', $data['accepted_loctype']);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('date', ChillDateType::class, [
'data' => new DateTime(),
])
->add('accepted_loctype', EntityType::class, [
'class' => GeographicalUnit::class,
'choice_label' => static function (GeographicalUnit $u) {
return $u->getUnitName();
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
return ['Filtered by geographic unit: only %date%', [
'%date%' => $data['date']->format('d-m-Y'),
]];
}
public function getTitle(): string
{
return 'Filter by geographical unit';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
@@ -17,7 +26,7 @@ class IntensityFilter implements FilterInterface
'is regular' => 'regular', 'is regular' => 'regular',
]; ];
private CONST DEFAULT_CHOICE = 'occasional'; private const DEFAULT_CHOICE = 'occasional';
private TranslatorInterface $translator; private TranslatorInterface $translator;
@@ -26,37 +35,6 @@ class IntensityFilter implements FilterInterface
$this->translator = $translator; $this->translator = $translator;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_intensities', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function getTitle(): string
{
return 'Filter by intensity';
}
public function describeAction($data, $format = 'string'): array
{
foreach (self::CHOICES as $k => $v) {
if ($v === $data['accepted_intensities']) {
$choice = $k;
}
}
return [
'Filtered by intensity: only %intensity%', [
'%intensity%' => $this->translator->trans($choice)
]
];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -82,4 +60,34 @@ class IntensityFilter implements FilterInterface
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_intensities', ChoiceType::class, [
'choices' => self::CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function describeAction($data, $format = 'string'): array
{
foreach (self::CHOICES as $k => $v) {
if ($v === $data['accepted_intensities']) {
$choice = $k;
}
}
return [
'Filtered by intensity: only %intensity%', [
'%intensity%' => $this->translator->trans($choice),
],
];
}
public function getTitle(): string
{
return 'Filter by intensity';
}
} }

View File

@@ -1,64 +1,32 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Form\Type\ChillDateType; use Chill\MainBundle\Form\Type\ChillDateType;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use DateTime;
use Doctrine\DBAL\Types\Types; use Doctrine\DBAL\Types\Types;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use DateTime;
class OpenBetweenDatesFilter implements FilterInterface class OpenBetweenDatesFilter implements FilterInterface
{ {
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('date_from', ChillDateType::class, [
'data' => new DateTime(),
])
->add('date_to', ChillDateType::class, [
'data' => new DateTime(),
])
;
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Filter by opened between dates';
}
/**
* @inheritDoc
*/
public function describeAction($data, $format = 'string'): array
{
return ['Filtered by opening dates: between %datefrom% and %dateto%', [
'%datefrom%' => $data['date_from']->format('d-m-Y'),
'%dateto%' => $data['date_to']->format('d-m-Y'),
]];
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
@@ -79,11 +47,32 @@ class OpenBetweenDatesFilter implements FilterInterface
$qb->setParameter('dateto', $data['date_to'], Types::DATE_MUTABLE); $qb->setParameter('dateto', $data['date_to'], Types::DATE_MUTABLE);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder
->add('date_from', ChillDateType::class, [
'data' => new DateTime(),
])
->add('date_to', ChillDateType::class, [
'data' => new DateTime(),
]);
}
public function describeAction($data, $format = 'string'): array
{
return ['Filtered by opening dates: between %datefrom% and %dateto%', [
'%datefrom%' => $data['date_from']->format('d-m-Y'),
'%dateto%' => $data['date_to']->format('d-m-Y'),
]];
}
public function getTitle(): string
{
return 'Filter by opened between dates';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
@@ -8,15 +17,11 @@ use Chill\PersonBundle\Entity\AccompanyingPeriod\Origin;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use phpDocumentor\Reflection\Types\Boolean;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
class OriginFilter implements FilterInterface class OriginFilter implements FilterInterface
{ {
/**
* @var TranslatableStringHelper
*/
private TranslatableStringHelper $translatableStringHelper; private TranslatableStringHelper $translatableStringHelper;
public function __construct( public function __construct(
@@ -25,56 +30,11 @@ class OriginFilter implements FilterInterface
$this->translatableStringHelper = $translatableStringHelper; $this->translatableStringHelper = $translatableStringHelper;
} }
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_origins', EntityType::class, [
'class' => Origin::class,
'choice_label' => function (Origin $o) {
return $this->translatableStringHelper->localize($o->getLabel());
},
'multiple' => true,
'expanded' => true
]);
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Filter by origin';
}
/**
* @inheritDoc
*/
public function describeAction($data, $format = 'string'): array
{
$origins = [];
foreach ($data['accepted_origins'] as $v) {
$origins[] = $this->translatableStringHelper->localize($v->getLabel());
}
return ['Filtered by origins: only %origins%', [
'%origins%' => implode(', ou ', $origins)
]];
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
@@ -90,11 +50,38 @@ class OriginFilter implements FilterInterface
$qb->setParameter('origin', $data['accepted_origins']); $qb->setParameter('origin', $data['accepted_origins']);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_origins', EntityType::class, [
'class' => Origin::class,
'choice_label' => function (Origin $o) {
return $this->translatableStringHelper->localize($o->getLabel());
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$origins = [];
foreach ($data['accepted_origins'] as $v) {
$origins[] = $this->translatableStringHelper->localize($v->getLabel());
}
return ['Filtered by origins: only %origins%', [
'%origins%' => implode(', ou ', $origins),
]];
}
public function getTitle(): string
{
return 'Filter by origin';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Entity\User; use Chill\MainBundle\Entity\User;
@@ -7,7 +16,6 @@ use Chill\MainBundle\Export\FilterInterface;
use Chill\MainBundle\Templating\Entity\UserRender; use Chill\MainBundle\Templating\Entity\UserRender;
use Chill\PersonBundle\Export\Declarations; use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\Query\Expr\From;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
@@ -21,58 +29,11 @@ class ReferrerFilter implements FilterInterface
$this->userRender = $userRender; $this->userRender = $userRender;
} }
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_referrers', EntityType::class, [
'class' => User::class,
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
'multiple' => true,
'expanded' => true
]);
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Filter by referrers';
}
/**
* @inheritDoc
*/
public function describeAction($data, $format = 'string'): array
{
$users = [];
foreach ($data['accepted_referrers'] as $r) {
$users[] = $r;
}
return [
'Filtered by referrer: only %referrers%', [
'%referrers' => implode(", ou ", $users)
]];
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
@@ -88,11 +49,39 @@ class ReferrerFilter implements FilterInterface
$qb->setParameter('referrers', $data['accepted_referrers']); $qb->setParameter('referrers', $data['accepted_referrers']);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_referrers', EntityType::class, [
'class' => User::class,
'choice_label' => function (User $u) {
return $this->userRender->renderString($u, []);
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$users = [];
foreach ($data['accepted_referrers'] as $r) {
$users[] = $r;
}
return [
'Filtered by referrer: only %referrers%', [
'%referrers' => implode(', ou ', $users),
], ];
}
public function getTitle(): string
{
return 'Filter by referrers';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
@@ -7,12 +16,14 @@ use Chill\PersonBundle\Export\Declarations;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Exception;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Contracts\Translation\TranslatorInterface; use Symfony\Contracts\Translation\TranslatorInterface;
class RequestorFilter implements FilterInterface class RequestorFilter implements FilterInterface
{ {
private const DEFAULT_CHOICE = 'participation';
private const REQUESTOR_CHOICES = [ private const REQUESTOR_CHOICES = [
'is person concerned' => 'participation', 'is person concerned' => 'participation',
@@ -21,12 +32,10 @@ class RequestorFilter implements FilterInterface
'no requestor' => 'no_requestor', 'no requestor' => 'no_requestor',
]; ];
private const DEFAULT_CHOICE = 'participation'; protected EntityManagerInterface $em;
protected TranslatorInterface $translator; protected TranslatorInterface $translator;
protected EntityManagerInterface $em;
public function __construct( public function __construct(
TranslatorInterface $translator, TranslatorInterface $translator,
EntityManagerInterface $em EntityManagerInterface $em
@@ -35,75 +44,35 @@ class RequestorFilter implements FilterInterface
$this->em = $em; $this->em = $em;
} }
/**
* @inheritDoc
*/
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_choices', ChoiceType::class, [
'choices' => self::REQUESTOR_CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
/**
* @inheritDoc
*/
public function getTitle(): string
{
return 'Filter by requestor';
}
/**
* @inheritDoc
*/
public function describeAction($data, $format = 'string'): array
{
$choice = array_flip(self::REQUESTOR_CHOICES)[$data['accepted_choices']];
return ['Filtered by requestor: only %choice%', [
'%choice%' => $this->translator->trans($choice)
]];
}
/**
* @inheritDoc
*/
public function addRole() public function addRole()
{ {
return null; return null;
} }
/**
* @inheritDoc
*/
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
$where = $qb->getDQLPart('where'); $where = $qb->getDQLPart('where');
switch ($data['accepted_choices']) { switch ($data['accepted_choices']) {
case 'participation': case 'participation':
$qb->join('acp.participations', 'part'); $qb->join('acp.participations', 'part');
$clause = $qb->expr()->andX( $clause = $qb->expr()->andX(
$qb->expr()->isNotNull('acp.requestorPerson'), $qb->expr()->isNotNull('acp.requestorPerson'),
$qb->expr()->eq('acp.requestorPerson', 'part.person') $qb->expr()->eq('acp.requestorPerson', 'part.person')
); );
break; break;
case 'other_person': case 'other_person':
$expr = $this->em->getExpressionBuilder(); $expr = $this->em->getExpressionBuilder();
$qb->join('acp.participations','part'); $qb->join('acp.participations', 'part');
$clause = $expr->andX( $clause = $expr->andX(
$expr->isNotNull('acp.requestorPerson'), $expr->isNotNull('acp.requestorPerson'),
$expr->notIn('acp.requestorPerson', $expr->notIn(
'acp.requestorPerson',
// subquery // subquery
$this->em->createQueryBuilder() $this->em->createQueryBuilder()
@@ -112,26 +81,26 @@ class RequestorFilter implements FilterInterface
->join('acp2.participations', 'part2') ->join('acp2.participations', 'part2')
->where($expr->eq('acp2.requestorPerson', 'part2.person')) ->where($expr->eq('acp2.requestorPerson', 'part2.person'))
->getDQL() ->getDQL()
) )
); );
break; break;
case 'thirdparty': case 'thirdparty':
$clause = $qb->expr()->isNotNull('acp.requestorThirdParty'); $clause = $qb->expr()->isNotNull('acp.requestorThirdParty');
break; break;
case 'no_requestor': case 'no_requestor':
$clause = $qb->expr()->andX( $clause = $qb->expr()->andX(
$qb->expr()->isNull('acp.requestorPerson'), $qb->expr()->isNull('acp.requestorPerson'),
$qb->expr()->isNull('acp.requestorThirdParty') $qb->expr()->isNull('acp.requestorThirdParty')
); );
break; break;
default: default:
throw new \Exception('Uncaught choice exception'); throw new Exception('Uncaught choice exception');
} }
if ($where instanceof Andx) { if ($where instanceof Andx) {
@@ -143,11 +112,33 @@ class RequestorFilter implements FilterInterface
$qb->add('where', $where); $qb->add('where', $where);
} }
/**
* @inheritDoc
*/
public function applyOn(): string public function applyOn(): string
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_choices', ChoiceType::class, [
'choices' => self::REQUESTOR_CHOICES,
'multiple' => false,
'expanded' => true,
'empty_data' => self::DEFAULT_CHOICE,
'data' => self::DEFAULT_CHOICE,
]);
}
public function describeAction($data, $format = 'string'): array
{
$choice = array_flip(self::REQUESTOR_CHOICES)[$data['accepted_choices']];
return ['Filtered by requestor: only %choice%', [
'%choice%' => $this->translator->trans($choice),
]];
}
public function getTitle(): string
{
return 'Filter by requestor';
}
} }

View File

@@ -1,5 +1,14 @@
<?php <?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\PersonBundle\Export\Filter\AccompanyingCourseFilters; namespace Chill\PersonBundle\Export\Filter\AccompanyingCourseFilters;
use Chill\MainBundle\Export\FilterInterface; use Chill\MainBundle\Export\FilterInterface;
@@ -11,19 +20,14 @@ use Doctrine\ORM\Query\Expr\Andx;
use Doctrine\ORM\QueryBuilder; use Doctrine\ORM\QueryBuilder;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormBuilderInterface;
use function in_array;
class SocialActionFilter implements FilterInterface class SocialActionFilter implements FilterInterface
{ {
/**
* @var TranslatableStringHelper
*/
private TranslatableStringHelper $translatableStringHelper;
/**
* @var SocialActionRender
*/
private SocialActionRender $actionRender; private SocialActionRender $actionRender;
private TranslatableStringHelper $translatableStringHelper;
public function __construct( public function __construct(
TranslatableStringHelper $translatableStringHelper, TranslatableStringHelper $translatableStringHelper,
SocialActionRender $actionRender SocialActionRender $actionRender
@@ -32,36 +36,6 @@ class SocialActionFilter implements FilterInterface
$this->actionRender = $actionRender; $this->actionRender = $actionRender;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_socialactions', EntityType::class, [
'class' => SocialAction::class,
'choice_label' => function (SocialAction $sa) {
return $this->actionRender->renderString($sa, []);
},
'multiple' => true,
'expanded' => true,
]);
}
public function getTitle(): string
{
return 'Filter by socialaction';
}
public function describeAction($data, $format = 'string'): array
{
$socialactions = [];
foreach ($data['accepted_socialactions'] as $sa) {
$socialactions[] = $this->actionRender->renderString($sa, []);
}
return ['Filtered by socialactions: only %socialactions%', [
'%socialactions%' => implode(", ou ", $socialactions)
]];
}
public function addRole() public function addRole()
{ {
return null; return null;
@@ -69,7 +43,7 @@ class SocialActionFilter implements FilterInterface
public function alterQuery(QueryBuilder $qb, $data) public function alterQuery(QueryBuilder $qb, $data)
{ {
if (!in_array('acpw', $qb->getAllAliases())) { if (!in_array('acpw', $qb->getAllAliases(), true)) {
$qb->join('acp.works', 'acpw'); $qb->join('acp.works', 'acpw');
} }
$qb->join('acpw.socialAction', 'sa'); $qb->join('acpw.socialAction', 'sa');
@@ -91,4 +65,34 @@ class SocialActionFilter implements FilterInterface
{ {
return Declarations::ACP_TYPE; return Declarations::ACP_TYPE;
} }
public function buildForm(FormBuilderInterface $builder)
{
$builder->add('accepted_socialactions', EntityType::class, [
'class' => SocialAction::class,
'choice_label' => function (SocialAction $sa) {
return $this->actionRender->renderString($sa, []);
},
'multiple' => true,
'expanded' => true,
]);
}
public function describeAction($data, $format = 'string'): array
{
$socialactions = [];
foreach ($data['accepted_socialactions'] as $sa) {
$socialactions[] = $this->actionRender->renderString($sa, []);
}
return ['Filtered by socialactions: only %socialactions%', [
'%socialactions%' => implode(', ou ', $socialactions),
]];
}
public function getTitle(): string
{
return 'Filter by socialaction';
}
} }

Some files were not shown because too many files have changed in this diff Show More