Skip to content

Commit

Permalink
Refactor and code cleaning
Browse files Browse the repository at this point in the history
  • Loading branch information
songecko committed Aug 11, 2019
1 parent 64ce678 commit 1fbca43
Show file tree
Hide file tree
Showing 31 changed files with 353 additions and 139 deletions.
4 changes: 2 additions & 2 deletions spec/Form/Type/DataFetcher/NumberOfOrdersTypeSpec.php
Expand Up @@ -2,7 +2,7 @@

namespace spec\Odiseo\SyliusReportPlugin\Form\Type\DataFetcher;

use Odiseo\SyliusReportPlugin\Form\Builder\QueryFilterFormBuilder;
use Odiseo\SyliusReportPlugin\Form\Builder\QueryFilterFormBuilderInterface;
use Odiseo\SyliusReportPlugin\Form\Type\DataFetcher\NumberOfOrdersType;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
Expand All @@ -14,7 +14,7 @@

class NumberOfOrdersTypeSpec extends ObjectBehavior
{
function let(QueryFilterFormBuilder $queryFilterFormBuilder)
function let(QueryFilterFormBuilderInterface $queryFilterFormBuilder)
{
$this->beConstructedWith($queryFilterFormBuilder);
}
Expand Down
4 changes: 2 additions & 2 deletions spec/Form/Type/DataFetcher/SalesTotalTypeSpec.php
Expand Up @@ -2,7 +2,7 @@

namespace spec\Odiseo\SyliusReportPlugin\Form\Type\DataFetcher;

use Odiseo\SyliusReportPlugin\Form\Builder\QueryFilterFormBuilder;
use Odiseo\SyliusReportPlugin\Form\Builder\QueryFilterFormBuilderInterface;
use Odiseo\SyliusReportPlugin\Form\Type\DataFetcher\SalesTotalType;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
Expand All @@ -14,7 +14,7 @@

class SalesTotalTypeSpec extends ObjectBehavior
{
function let(QueryFilterFormBuilder $queryFilterFormBuilder)
function let(QueryFilterFormBuilderInterface $queryFilterFormBuilder)
{
$this->beConstructedWith($queryFilterFormBuilder);
}
Expand Down
4 changes: 2 additions & 2 deletions spec/Form/Type/DataFetcher/UserRegistrationTypeSpec.php
Expand Up @@ -2,7 +2,7 @@

namespace spec\Odiseo\SyliusReportPlugin\Form\Type\DataFetcher;

use Odiseo\SyliusReportPlugin\Form\Builder\QueryFilterFormBuilder;
use Odiseo\SyliusReportPlugin\Form\Builder\QueryFilterFormBuilderInterface;
use Odiseo\SyliusReportPlugin\Form\Type\DataFetcher\UserRegistrationType;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
Expand All @@ -14,7 +14,7 @@

class UserRegistrationTypeSpec extends ObjectBehavior
{
function let(QueryFilterFormBuilder $queryFilterFormBuilder)
function let(QueryFilterFormBuilderInterface $queryFilterFormBuilder)
{
$this->beConstructedWith($queryFilterFormBuilder);
}
Expand Down
3 changes: 2 additions & 1 deletion spec/Renderer/ChartRendererSpec.php
Expand Up @@ -35,11 +35,12 @@ function it_should_implement_renderer_interface()
function it_renders_data_with_given_configuration(ReportInterface $report, Data $reportData, $templating)
{
$reportData->getData()->willReturn(['month1' => '50', 'month2' => '40']);
$reportData->getLabels()->willReturn(['month', 'sales']);

$renderData = [
'report' => $report,
'values' => ['month1' => '50', 'month2' => '40'],
'labels' => ['month1', 'month2'],
'labels' => ['month', 'sales'],
];

$report->getRendererConfiguration()->willReturn(['template' => '@OdiseoSyliusReportPlugin/Chart/default.html.twig']);
Expand Down
1 change: 0 additions & 1 deletion spec/Renderer/TableRendererSpec.php
Expand Up @@ -41,7 +41,6 @@ function it_renders_data_with_given_configuration(ReportInterface $report, Data
'report' => $report,
'values' => ['month1' => '50', 'month2' => '40'],
'labels' => ['month', 'user_total'],
'fields' => ['month1', 'month2'],
];

$report->getRendererConfiguration()->willReturn(['template' => '@OdiseoSyliusReportPlugin/Table/default.html.twig']);
Expand Down
69 changes: 32 additions & 37 deletions src/Controller/ReportController.php
Expand Up @@ -4,13 +4,12 @@

use FOS\RestBundle\View\View;
use Odiseo\SyliusReportPlugin\DataFetcher\Data;
use Odiseo\SyliusReportPlugin\DataFetcher\DataFetcherInterface;
use Odiseo\SyliusReportPlugin\DataFetcher\DelegatingDataFetcherInterface;
use Odiseo\SyliusReportPlugin\Model\ReportInterface;
use Odiseo\SyliusReportPlugin\Renderer\DelegatingRendererInterface;
use Odiseo\SyliusReportPlugin\Response\CsvResponse;
use Odiseo\SyliusReportPlugin\Form\Type\ReportDataFetcherConfigurationType;
use Sylius\Bundle\ResourceBundle\Controller\ResourceController;
use Sylius\Component\Currency\Context\CurrencyContextInterface;
use Sylius\Component\Resource\ResourceActions;
use Symfony\Component\Form\FormFactoryInterface;
use Symfony\Component\Form\FormInterface;
Expand Down Expand Up @@ -39,22 +38,8 @@ public function renderAction(Request $request)

/** @var ReportInterface $report */
$report = $this->findOr404($configuration);

/** @var FormFactoryInterface $formFactory */
$formFactory = $this->container->get('form.factory');

/** @var DataFetcherInterface $dataFetcher */
$dataFetcher = $this->getReportDataFetcher()->getDataFetcher($report);
/** @var FormInterface $configurationForm */
$configurationForm = $formFactory->createNamed(
'configuration',
$dataFetcher->getType(),
$report->getDataFetcherConfiguration()
);

if ($request->query->has('configuration')) {
$configurationForm->handleRequest($request);
}
$reportDataFetcherConfigurationForm = $this->getReportDataFetcherConfigurationForm($report, $request);
$report = $reportDataFetcherConfigurationForm->getData();

$this->eventDispatcher->dispatch(ResourceActions::SHOW, $configuration, $report);

Expand All @@ -67,8 +52,7 @@ public function renderAction(Request $request)
'configuration' => $configuration,
'metadata' => $this->metadata,
'resource' => $report,
'form' => $configurationForm->createView(),
'configurationForm' => $configurationForm->getData(),
'form' => $reportDataFetcherConfigurationForm->createView(),
$this->metadata->getName() => $report,
])
;
Expand All @@ -89,20 +73,17 @@ public function exportAction(Request $request)

/** @var ReportInterface $report */
$report = $this->findOr404($configuration);
$reportDataFetcherConfigurationForm = $this->getReportDataFetcherConfigurationForm($report, $request);
$report = $reportDataFetcherConfigurationForm->getData();

$format = $request->get('_format');
$configurationForm = $report->getDataFetcherConfiguration();

/** @var CurrencyContextInterface $currencyContext */
$currencyContext = $this->get('sylius.context.currency');

$configurationForm['baseCurrency'] = $currencyContext->getCurrencyCode();
$dataFetcherConfiguration = $report->getDataFetcherConfiguration();

/** @var Data $data */
$data = $this->getReportDataFetcher()->fetch($report, $configurationForm);
$data = $this->getReportDataFetcher()->fetch($report, $dataFetcherConfiguration);

$filename = $this->slugify($report->getName());

$format = $request->get('_format');
$response = null;
switch ($format) {
case 'json':
Expand All @@ -119,19 +100,13 @@ public function exportAction(Request $request)

/**
* @param ReportInterface $report
* @param array $configuration
* @param array $dataFetcherConfiguration
*
* @return Response
*/
public function embedAction(ReportInterface $report, array $configuration = [])
public function embedAction(ReportInterface $report, array $dataFetcherConfiguration = [])
{
/** @var CurrencyContextInterface $currencyContext */
$currencyContext = $this->get('sylius.context.currency');

$configuration = (count($configuration) > 0) ? $configuration : $report->getDataFetcherConfiguration();
$configuration['baseCurrency'] = $currencyContext->getCurrencyCode();

$data = $this->getReportDataFetcher()->fetch($report, $configuration);
$data = $this->getReportDataFetcher()->fetch($report, $dataFetcherConfiguration);

return new Response($this->getReportRenderer()->render($report, $data));
}
Expand Down Expand Up @@ -200,6 +175,26 @@ protected function createCsvResponse($filename, $data)
return $response;
}

/**
* @param ReportInterface $report
* @param Request $request
* @return FormInterface
*/
protected function getReportDataFetcherConfigurationForm(ReportInterface $report, Request $request): FormInterface
{
/** @var FormFactoryInterface $formFactory */
$formFactory = $this->container->get('form.factory');

/** @var FormInterface $configurationForm */
$configurationForm = $formFactory->create(ReportDataFetcherConfigurationType::class, $report);

if ($request->query->has($configurationForm->getName())) {
$configurationForm->handleRequest($request);
}

return $configurationForm;
}

/**
* @param string $string
*
Expand Down
8 changes: 4 additions & 4 deletions src/DataFetcher/BaseDataFetcher.php
Expand Up @@ -2,22 +2,22 @@

namespace Odiseo\SyliusReportPlugin\DataFetcher;

use Odiseo\SyliusReportPlugin\Filter\QueryFilter;
use Odiseo\SyliusReportPlugin\Filter\QueryFilterInterface;

/**
* @author Odiseo Team <team@odiseo.com.ar>
*/
abstract class BaseDataFetcher implements DataFetcherInterface
{
/**
* @var QueryFilter
* @var QueryFilterInterface
*/
protected $queryFilter;

/**
* @param QueryFilter $queryFilter
* @param QueryFilterInterface $queryFilter
*/
public function __construct(QueryFilter $queryFilter)
public function __construct(QueryFilterInterface $queryFilter)
{
$this->queryFilter = $queryFilter;
}
Expand Down
6 changes: 3 additions & 3 deletions src/DataFetcher/NumberOfOrdersDataFetcher.php
Expand Up @@ -3,7 +3,7 @@
namespace Odiseo\SyliusReportPlugin\DataFetcher;

use Exception;
use Odiseo\SyliusReportPlugin\Filter\QueryFilter;
use Odiseo\SyliusReportPlugin\Filter\QueryFilterInterface;
use Odiseo\SyliusReportPlugin\Form\Type\DataFetcher\NumberOfOrdersType;
use Sylius\Component\Core\Model\PaymentInterface;
use Sylius\Component\Core\OrderPaymentStates;
Expand All @@ -20,11 +20,11 @@ class NumberOfOrdersDataFetcher extends TimePeriodDataFetcher
private $orderClass;

/**
* @param QueryFilter $queryFilter
* @param QueryFilterInterface $queryFilter
* @param string $orderClass
*/
public function __construct(
QueryFilter $queryFilter,
QueryFilterInterface $queryFilter,
string $orderClass
) {
parent::__construct($queryFilter);
Expand Down
6 changes: 3 additions & 3 deletions src/DataFetcher/SalesTotalDataFetcher.php
Expand Up @@ -3,7 +3,7 @@
namespace Odiseo\SyliusReportPlugin\DataFetcher;

use Exception;
use Odiseo\SyliusReportPlugin\Filter\QueryFilter;
use Odiseo\SyliusReportPlugin\Filter\QueryFilterInterface;
use Odiseo\SyliusReportPlugin\Form\Type\DataFetcher\SalesTotalType;
use Sylius\Component\Core\Model\PaymentInterface;
use Sylius\Component\Core\OrderPaymentStates;
Expand All @@ -20,11 +20,11 @@ class SalesTotalDataFetcher extends TimePeriodDataFetcher
private $orderClass;

/**
* @param QueryFilter $queryFilter
* @param QueryFilterInterface $queryFilter
* @param string $orderClass
*/
public function __construct(
QueryFilter $queryFilter,
QueryFilterInterface $queryFilter,
string $orderClass
) {
parent::__construct($queryFilter);
Expand Down
31 changes: 0 additions & 31 deletions src/DataFetcher/TimePeriodDataFetcher.php
Expand Up @@ -155,35 +155,4 @@ private function fillEmptyRecords(array $fetched, array $configuration)

return $fetched;
}

/**
* @param array $datas
* @param array $configuration
* @return array
* @throws Exception
*/
protected function getMediaResults(array $datas = [], array $configuration = [])
{
if (empty($datas)) {
return [];
}
$labels = array_keys($datas[0]);
$datesMedia = [];
foreach ($datas as $data) {
$date = new DateTime($data[$labels[0]]);
$dateFormated = $date->format($configuration['timePeriod']['presentationFormat']);
$currentDateMedia = isset($datesMedia[$dateFormated])?$datesMedia[$dateFormated]:array('quantity' => 0, 'media' => 0);
$currentDateMedia['quantity'] = $currentDateMedia['quantity']+1;
$currentDateMedia['media'] = $currentDateMedia['media']+$data[$labels[1]];
$datesMedia[$dateFormated] = $currentDateMedia;
}
$fetched = [];
foreach ($datesMedia as $date => $dateMedia) {
$fetched[] = [
$labels[0] => $date,
$labels[1] => round($dateMedia['media']/$dateMedia['quantity'], 1)
];
}
return $fetched;
}
}
6 changes: 3 additions & 3 deletions src/DataFetcher/UserRegistrationDataFetcher.php
Expand Up @@ -3,7 +3,7 @@
namespace Odiseo\SyliusReportPlugin\DataFetcher;

use Exception;
use Odiseo\SyliusReportPlugin\Filter\QueryFilter;
use Odiseo\SyliusReportPlugin\Filter\QueryFilterInterface;
use Odiseo\SyliusReportPlugin\Form\Type\DataFetcher\UserRegistrationType;

/**
Expand All @@ -18,11 +18,11 @@ class UserRegistrationDataFetcher extends TimePeriodDataFetcher
private $orderClass;

/**
* @param QueryFilter $queryFilter
* @param QueryFilterInterface $queryFilter
* @param string $orderClass
*/
public function __construct(
QueryFilter $queryFilter,
QueryFilterInterface $queryFilter,
string $orderClass
) {
parent::__construct($queryFilter);
Expand Down
2 changes: 1 addition & 1 deletion src/Filter/QueryFilter.php
Expand Up @@ -14,7 +14,7 @@
/**
* @author Odiseo Team <team@odiseo.com.ar>
*/
class QueryFilter
class QueryFilter implements QueryFilterInterface
{
/** @var EntityManager */
protected $em;
Expand Down

0 comments on commit 1fbca43

Please sign in to comment.