Regenerate data from saved export on formatter test

[ci-skip]
This commit is contained in:
Julien Fastré 2023-06-04 01:10:50 +02:00
parent fb0afc7e0a
commit cb0a6bbd21
Signed by: julienfastre
GPG Key ID: BDE2190974723FCB
4 changed files with 71 additions and 23 deletions

View File

@ -297,8 +297,18 @@ class ExportController extends AbstractController
$isGenerate = strpos($step, 'generate_') === 0;
$options = match ($step) {
'export', 'generate_export' => ['picked_centers' => $exportManager->getPickedCenters($data['centers'])],
default => [],
'export', 'generate_export' => [
'export_alias' => $alias,
'picked_centers' => $exportManager->getPickedCenters($data['centers'])
],
'formatter', 'generate_formatter' => [
'export_alias' => $alias,
'formatter_alias' => $exportManager->getFormatterAlias($data['export']),
'aggregator_aliases' => $exportManager->getUsedAggregatorsAliases($data['export']),
],
default => [
'export_alias' => $alias,
],
};
$defaultFormData = match ($savedExport) {
@ -318,26 +328,15 @@ class ExportController extends AbstractController
);
if ('centers' === $step || 'generate_centers' === $step) {
$builder->add('centers', PickCenterType::class, [
'export_alias' => $alias,
]);
$builder->add('centers', PickCenterType::class, $options);
}
if ('export' === $step || 'generate_export' === $step) {
$builder->add('export', ExportType::class, [
'export_alias' => $alias,
'picked_centers' => $exportManager->getPickedCenters($data['centers']),
]);
$builder->add('export', ExportType::class, $options);
}
if ('formatter' === $step || 'generate_formatter' === $step) {
$builder->add('formatter', FormatterType::class, [
'formatter_alias' => $exportManager
->getFormatterAlias($data['export']),
'export_alias' => $alias,
'aggregator_aliases' => $exportManager
->getUsedAggregatorsAliases($data['export']),
]);
$builder->add('formatter', FormatterType::class, $options);
}
$builder->add('submit', SubmitType::class, [

View File

@ -14,6 +14,7 @@ namespace Chill\MainBundle\Export;
use Chill\MainBundle\Entity\SavedExport;
use Chill\MainBundle\Form\Type\Export\ExportType;
use Chill\MainBundle\Form\Type\Export\FilterType;
use Chill\MainBundle\Form\Type\Export\FormatterType;
use Chill\MainBundle\Form\Type\Export\PickCenterType;
use Chill\MainBundle\Security\Authorization\AuthorizationHelperForCurrentUserInterface;
use Symfony\Component\Form\Extension\Core\Type\FormType;
@ -33,11 +34,18 @@ final readonly class ExportFormHelper
return match ($step) {
'centers', 'generate_centers' => ['centers' => $this->authorizationHelper->getReachableCenters($export->requiredRole())],
'export', 'generate_export' => ['export' => $this->getDefaultDataStepExport($export, $options)],
'formatter', 'generate_formatter' => [],
'formatter', 'generate_formatter' => ['formatter' => $this->getDefaultDataStepFormatter($options)],
default => throw new \LogicException("step not allowed : " . $step),
};
}
private function getDefaultDataStepFormatter(array $options): array
{
$formatter = $this->exportManager->getFormatter($options['formatter_alias']);
return $formatter->getFormDefaultData($options['aggregator_aliases']);
}
private function getDefaultDataStepExport(ExportInterface|DirectExportInterface $export, array $options): array
{
$data = [
@ -87,7 +95,7 @@ final readonly class ExportFormHelper
return match ($step) {
'centers', 'generate_centers' => $this->savedExportDataToFormDataStepCenter($savedExport),
'export', 'generate_export' => $this->savedExportDataToFormDataStepExport($savedExport, $formOptions),
'formatter', 'generate_formatter' => [],
'formatter', 'generate_formatter' => $this->savedExportDataToFormDataStepFormatter($savedExport, $formOptions),
default => throw new \LogicException("this step is not allowed: " . $step),
};
}
@ -134,4 +142,27 @@ final readonly class ExportFormHelper
return $form->getData();
}
private function savedExportDataToFormDataStepFormatter(
SavedExport $savedExport,
array $formOptions
): array {
dump(__METHOD__);
$builder = $this->formFactory
->createBuilder(
FormType::class,
[],
[
'csrf_protection' => false,
]
);
$builder->add('formatter', FormatterType::class, [
'export_alias' => $savedExport->getExportAlias(), ...$formOptions
]);
$form = $builder->getForm();
$form->submit($savedExport->getOptions()['formatter']);
return $form->getData();
}
}

View File

@ -173,7 +173,19 @@ class SpreadSheetFormatter implements FormatterInterface
}
}
public function getName()
public function getFormDefaultData(array $aggregatorAliases): array
{
$data = ['format' => 'xlsx'];
$aggregators = iterator_to_array($this->exportManager->getAggregators($aggregatorAliases));
foreach (array_keys($aggregators) as $index => $alias) {
$data[$alias] = ['order' => $index + 1];
}
return $data;
}
public function getName(): string
{
return 'SpreadSheet (xlsx, ods)';
}
@ -185,7 +197,7 @@ class SpreadSheetFormatter implements FormatterInterface
array $exportData,
array $filtersData,
array $aggregatorsData
) {
): Response {
// store all data when the process is initiated
$this->result = $result;
$this->formatterData = $formatterData;
@ -574,10 +586,8 @@ class SpreadSheetFormatter implements FormatterInterface
*
* This form allow to choose the aggregator position (row or column) and
* the ordering
*
* @param string $nbAggregators
*/
private function appendAggregatorForm(FormBuilderInterface $builder, $nbAggregators)
private function appendAggregatorForm(FormBuilderInterface $builder, int $nbAggregators): void
{
$builder->add('order', ChoiceType::class, [
'choices' => array_combine(

View File

@ -88,6 +88,7 @@ final class NationalityAggregator implements AggregatorInterface, ExportElementV
public function applyOn()
{
return 'abcde';
return 'person';
}
@ -103,6 +104,13 @@ final class NationalityAggregator implements AggregatorInterface, ExportElementV
]);
}
public function getFormDefaultData(): array
{
return [
'group_by_level' => 'country',
];
}
public function getLabels($key, array $values, $data)
{
$labels = [];