This commit is contained in:
2022-10-05 15:08:53 +02:00
parent a90e87b1be
commit c1d96af85f
153 changed files with 3797 additions and 3874 deletions

View File

@@ -446,7 +446,7 @@ class ExportController extends AbstractController
$this->logger->notice('[export] choices for an export unserialized', [
'key' => $key,
'rawData' => json_encode($rawData)
'rawData' => json_encode($rawData),
]);
$alias = $rawData['alias'];
@@ -531,6 +531,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.
*
@@ -578,19 +593,4 @@ class ExportController extends AbstractController
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
/**
* 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;
use Doctrine\ORM\Query\AST\Functions\DateDiffFunction;
use Doctrine\ORM\Query\AST\Functions\FunctionNode;
use Doctrine\ORM\Query\AST\Node;
use Doctrine\ORM\Query\AST\PathExpression;
use Doctrine\ORM\Query\Lexer;
use Doctrine\ORM\Query\Parser;
@@ -12,7 +20,7 @@ use Doctrine\ORM\Query\SqlWalker;
/**
* 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)
* TODO allow interval usage -> EXTRACT(field FROM interval)
@@ -50,5 +58,4 @@ class Extract extends FunctionNode
$parser->match(Lexer::T_CLOSE_PARENTHESIS);
}
}
}

View File

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

View File

@@ -278,16 +278,14 @@ class ExportManager
$this->handleAggregators($export, $query, $data[ExportType::AGGREGATOR_KEY], $centers);
$this->logger->notice('[export] will execute this qb in export', [
'dql' => $query->getDQL()
'dql' => $query->getDQL(),
]);
} else {
throw new UnexpectedValueException('The method `intiateQuery` should return '
. 'a `\\Doctrine\\ORM\\NativeQuery` or a `Doctrine\\ORM\\QueryBuilder` '
. 'object.');
}
$result = $export->getResult($query, $data[ExportType::EXPORT_KEY]);
if (!is_iterable($result)) {

View File

@@ -16,6 +16,7 @@ use Doctrine\DBAL\Statement;
use Exception;
use LogicException;
use Psr\Log\LoggerInterface;
use RuntimeException;
use function array_key_exists;
use function count;
@@ -159,8 +160,8 @@ final class AddressReferenceBaseImporter
try {
$affected = $statement->executeStatement(array_merge(...$this->waitingForInsert));
if ($affected === 0) {
throw new \RuntimeException('no row affected');
if (0 === $affected) {
throw new RuntimeException('no row affected');
}
} catch (Exception $e) {
// in some case, we can add debug code here

View File

@@ -1,5 +1,14 @@
<?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 Services\Import;
use Chill\MainBundle\Entity\PostalCode;
@@ -9,11 +18,18 @@ use Chill\MainBundle\Service\Import\AddressReferenceBaseImporter;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
class AddressReferenceBaseImporterTest extends KernelTestCase
/**
* @internal
* @coversNothing
*/
final class AddressReferenceBaseImporterTest extends KernelTestCase
{
private AddressReferenceBaseImporter $importer;
private AddressReferenceRepository $addressReferenceRepository;
private EntityManagerInterface $entityManager;
private AddressReferenceBaseImporter $importer;
private PostalCodeRepository $postalCodeRepository;
protected function setUp(): void
@@ -30,7 +46,7 @@ class AddressReferenceBaseImporterTest extends KernelTestCase
public function testImportAddress(): void
{
$postalCode = (new PostalCode())
->setRefPostalCodeId($postalCodeId = '1234'.uniqid())
->setRefPostalCodeId($postalCodeId = '1234' . uniqid())
->setPostalCodeSource('testing')
->setCode('TEST456')
->setName('testing');
@@ -54,7 +70,8 @@ class AddressReferenceBaseImporterTest extends KernelTestCase
$addresses = $this->addressReferenceRepository->findByPostalCodePattern(
$postalCode,
'Rue test abcc guessed');
'Rue test abcc guessed'
);
$this->assertCount(1, $addresses);
$this->assertEquals('Rue test abccc-guessed', $addresses[0]->getStreet());
@@ -79,12 +96,11 @@ class AddressReferenceBaseImporterTest extends KernelTestCase
$addresses = $this->addressReferenceRepository->findByPostalCodePattern(
$postalCode,
'abcc guessed fixed');
'abcc guessed fixed'
);
$this->assertCount('1', $addresses);
$this->assertEquals( 'Rue test abccc guessed fixed', $addresses[0]->getStreet());
$this->assertEquals('Rue test abccc guessed fixed', $addresses[0]->getStreet());
$this->assertEquals($previousAddressId, $addresses[0]->getId());
}
}
}

View File

@@ -1,5 +1,14 @@
<?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 Services\Import;
use Chill\MainBundle\Repository\CountryRepository;
@@ -8,16 +17,20 @@ use Chill\MainBundle\Service\Import\PostalCodeBaseImporter;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Test\KernelTestCase;
class PostalCodeBaseImporterTest extends KernelTestCase
/**
* @internal
* @coversNothing
*/
final class PostalCodeBaseImporterTest extends KernelTestCase
{
private CountryRepository $countryRepository;
private EntityManagerInterface $entityManager;
private PostalCodeBaseImporter $importer;
private PostalCodeRepository $postalCodeRepository;
private CountryRepository $countryRepository;
protected function setUp(): void
{
parent::setUp();
@@ -34,9 +47,9 @@ class PostalCodeBaseImporterTest extends KernelTestCase
{
$this->importer->importCode(
'BE',
'tested with pattern '. ($uniqid = uniqid()),
'tested with pattern ' . ($uniqid = uniqid()),
'12345',
$refPostalCodeId = 'test'.uniqid(),
$refPostalCodeId = 'test' . uniqid(),
'test',
50.0,
5.0,
@@ -46,8 +59,8 @@ class PostalCodeBaseImporterTest extends KernelTestCase
$this->importer->finalize();
$postalCodes = $this->postalCodeRepository->findByPattern(
'with pattern '.$uniqid,
$this->countryRepository->findOneBy(['countryCode' => 'BE'])
'with pattern ' . $uniqid,
$this->countryRepository->findOneBy(['countryCode' => 'BE'])
);
$this->assertCount(1, $postalCodes);
@@ -59,7 +72,7 @@ class PostalCodeBaseImporterTest extends KernelTestCase
$this->importer->importCode(
'BE',
'tested with adapted pattern '. ($uniqid = uniqid()),
'tested with adapted pattern ' . ($uniqid = uniqid()),
'12345',
$refPostalCodeId,
'test',
@@ -71,7 +84,7 @@ class PostalCodeBaseImporterTest extends KernelTestCase
$this->importer->finalize();
$postalCodes = $this->postalCodeRepository->findByPattern(
'with pattern '.$uniqid,
'with pattern ' . $uniqid,
$this->countryRepository->findOneBy(['countryCode' => 'BE'])
);
@@ -79,7 +92,4 @@ class PostalCodeBaseImporterTest extends KernelTestCase
$this->assertStringStartsWith('tested with adapted pattern', $postalCodes[0]->getName());
$this->assertEquals($previousId, $postalCodes[0]->getId());
}
}
}

View File

@@ -1,5 +1,14 @@
<?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\Tests\Workflow\EventSubscriber;
use Chill\MainBundle\Entity\Notification;
@@ -14,16 +23,22 @@ use Prophecy\Argument;
use Prophecy\Call\Call;
use Prophecy\Exception\Prediction\FailedPredictionException;
use Prophecy\PhpUnit\ProphecyTrait;
use ReflectionClass;
use stdClass;
use Symfony\Component\Security\Core\Security;
use Symfony\Component\Templating\EngineInterface;
use Symfony\Component\Workflow\Event\Event;
use Symfony\Component\Workflow\Marking;
use Symfony\Component\Workflow\Registry;
use Symfony\Component\Workflow\Transition;
use Symfony\Component\Workflow\Workflow;
use Symfony\Component\Workflow\WorkflowInterface;
use function count;
class NotificationOnTransitionTest extends TestCase
/**
* @internal
* @coversNothing
*/
final class NotificationOnTransitionTest extends TestCase
{
use ProphecyTrait;
@@ -36,11 +51,10 @@ class NotificationOnTransitionTest extends TestCase
$entityWorkflow = new EntityWorkflow();
$entityWorkflow
->setWorkflowName('workflow_name')
->setRelatedEntityClass(\stdClass::class)
->setRelatedEntityId(1)
;
->setRelatedEntityClass(stdClass::class)
->setRelatedEntityId(1);
// force an id to entityWorkflow:
$reflection = new \ReflectionClass($entityWorkflow);
$reflection = new ReflectionClass($entityWorkflow);
$id = $reflection->getProperty('id');
$id->setAccessible(true);
$id->setValue($entityWorkflow, 1);
@@ -48,12 +62,11 @@ class NotificationOnTransitionTest extends TestCase
$step = new EntityWorkflowStep();
$entityWorkflow->addStep($step);
$step->addDestUser($dest)
->setCurrentStep('to_state')
;
->setCurrentStep('to_state');
$em = $this->prophesize(EntityManagerInterface::class);
$em->persist(Argument::type(Notification::class))->should(
function($args) use ($dest) {
static function ($args) use ($dest) {
/** @var Call[] $args */
if (1 !== count($args)) {
throw new FailedPredictionException('no notification sent');
@@ -68,7 +81,8 @@ class NotificationOnTransitionTest extends TestCase
if (!$notification->getAddressees()->contains($dest)) {
throw new FailedPredictionException('the dest is not notified');
}
});
}
);
$engine = $this->prophesize(EngineInterface::class);
$engine->render(Argument::type('string'), Argument::type('array'))

View File

@@ -41,6 +41,24 @@ class EntityWorkflowTransitionEventSubscriber implements EventSubscriberInterfac
$this->userRender = $userRender;
}
public function addDests(Event $event): void
{
if (!$event->getSubject() instanceof EntityWorkflow) {
return;
}
/** @var EntityWorkflow $entityWorkflow */
$entityWorkflow = $event->getSubject();
foreach ($entityWorkflow->futureDestUsers as $user) {
$entityWorkflow->getCurrentStep()->addDestUser($user);
}
foreach ($entityWorkflow->futureDestEmails as $email) {
$entityWorkflow->getCurrentStep()->addDestEmail($email);
}
}
public static function getSubscribedEvents(): array
{
return [
@@ -55,23 +73,6 @@ class EntityWorkflowTransitionEventSubscriber implements EventSubscriberInterfac
];
}
public function addDests(Event $event): void
{
if (!$event->getSubject() instanceof EntityWorkflow) {
return;
}
/** @var EntityWorkflow $entityWorkflow */
$entityWorkflow = $event->getSubject();
foreach ($entityWorkflow->futureDestUsers as $user) {
$entityWorkflow->getCurrentStep()->addDestUser($user);
}
foreach ($entityWorkflow->futureDestEmails as $email) {
$entityWorkflow->getCurrentStep()->addDestEmail($email);
}
}
public function guardEntityWorkflow(GuardEvent $event)
{
if (!$event->getSubject() instanceof EntityWorkflow) {

View File

@@ -57,14 +57,15 @@ class NotificationOnTransition implements EventSubscriberInterface
}
/**
* Send a notification to:
* Send a notification to:.
*
* * the dests of the new step;
* * the users which subscribed to workflow, on each step, or on final
*
* **Warning** take care that this method must be executed **after** the dest users are added to
* the step (@link{EntityWorkflowStep::addDestUser}). Currently, this is done during
* @link{EntityWorkflowTransitionEventSubscriber::addDests}.
* the step (@see{EntityWorkflowStep::addDestUser}). Currently, this is done during
*
* @see{EntityWorkflowTransitionEventSubscriber::addDests}.
*/
public function onCompletedSendNotification(Event $event): void
{
@@ -77,6 +78,7 @@ class NotificationOnTransition implements EventSubscriberInterface
/** @var array<string, User> $dests array of unique values, where keys is the object's hash */
$dests = [];
foreach (array_merge(
// the subscriber to each step
$entityWorkflow->getSubscriberToStep()->toArray(),

View File

@@ -1,5 +1,12 @@
<?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\Migrations\Main;
@@ -9,6 +16,11 @@ use Doctrine\Migrations\AbstractMigration;
final class Version20220730204216 extends AbstractMigration
{
public function down(Schema $schema): void
{
$this->addSql('DROP INDEX chill_main_address_reference_unicity');
}
public function getDescription(): string
{
return 'Add an unique constraint on addresses references';
@@ -18,9 +30,4 @@ final class Version20220730204216 extends AbstractMigration
{
$this->addSql('CREATE UNIQUE INDEX chill_main_address_reference_unicity ON chill_main_address_reference (refId, source)');
}
public function down(Schema $schema): void
{
$this->addSql('DROP INDEX chill_main_address_reference_unicity');
}
}

View File

@@ -1,5 +1,12 @@
<?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\Migrations\Main;
@@ -8,10 +15,16 @@ use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
/**
* Add new entity GeographicalUnit
* Add new entity GeographicalUnit.
*/
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
{
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 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');
}
}