diff --git a/api/config/packages/doctrine.yaml b/api/config/packages/doctrine.yaml index 7e6c080ad7a71459420bb820643cddc0a03ef17d..e8f0a4c4bae28c7da12b26c92c90395092e465d8 100644 --- a/api/config/packages/doctrine.yaml +++ b/api/config/packages/doctrine.yaml @@ -20,3 +20,6 @@ doctrine: dql: string_functions: TO_CHAR: DoctrineExtensions\Query\Postgresql\DateFormat + + datetime_functions: + DATE_TRUNC: App\Helpers\DateTruncFunctionDQL \ No newline at end of file diff --git a/api/src/Controller/NombreDeVenteParJMA.php b/api/src/Controller/NombreDeVenteParJMA.php new file mode 100644 index 0000000000000000000000000000000000000000..6fe22221e3c664461ecb2f883e744ca8e276c764 --- /dev/null +++ b/api/src/Controller/NombreDeVenteParJMA.php @@ -0,0 +1,61 @@ +em = $em; + } + + public function __invoke(Request $data) { + // $date1 = '05/06/2015'; + // $date1 = '05/06/2016'; + $date1 = $data->query->get('dateDebut'); + $date2 = $data->query->get('dateFin'); + $interval = $data->query->get('interval'); + // DATE_FORMAT("2017-06-15", "%Y"); + $query = " SELECT + COUNT(valeurs_fonciere.nature_mutation) AS nombre_de_vente, + DATE_TRUNC('$interval', valeurs_fonciere.date_mutation) AS dat + FROM + App:ValeursFonciere AS valeurs_fonciere + WHERE + lower(valeurs_fonciere.nature_mutation) = 'vente' + AND + valeurs_fonciere.date_mutation BETWEEN '$date1' AND '$date2' + GROUP BY + dat + ORDER BY + dat"; + + + $nombreVentes = $this->em->createQuery($query)->getResult(); + foreach ($nombreVentes as &$nombreVente){ + $nombreVente['nombre_de_vente'] = intval($nombreVente['nombre_de_vente']); + $nombreVente['dat'] = $nombreVente["dat"]; + } + $res = new JsonResponse( + $nombreVentes, + Response::HTTP_OK + ); + return $res; + } +} \ No newline at end of file diff --git a/api/src/Entity/ValeursFonciere.php b/api/src/Entity/ValeursFonciere.php index eddb08be6f7609179888fde0711a1b8ff256f69b..9f2ce37a5e9ff91010f6133d4d0592238ec480be 100644 --- a/api/src/Entity/ValeursFonciere.php +++ b/api/src/Entity/ValeursFonciere.php @@ -45,7 +45,48 @@ use Doctrine\ORM\Mapping as ORM; * "route_name"="prix_moyens", * "controller"=PrixMoyenParAnnee::class, * "pagination_enabled"=false, - * } + * }, + * "nombredeventeparJMA"={ + * "method"="GET", + * "openapi_context"={ + * "read"=false, + * "parameters"={ + * { + * "in"="query", + * "name"="interval", + * "required"= true, + * "schema"= { + * "type"="string", + * "enum"={"day","month","year"} + * }, + * "example"="day" + * }, + * { + * "in"="query", + * "name"="dateDebut", + * "required"= true, + * "schema"= { + * "type"="string", + * "format"="full-date" + * }, + * "example"="2015-01-01" + * }, + * { + * "in"="query", + * "name"="dateFin", + * "required"= true, + * "schema"= { + * "type"="string", + * "format"="full-date" + * }, + * "example"="2015-02-01" + * } + * } + * }, + * "route_name"="nombre_devente_parJMA", + * "controller"=NombreDeVenteParJMA::class, + * "pagination_enabled"=false, + * } * }) * @ORM\Entity(repositoryClass="App\Repository\ValeursFonciereRepository") */ diff --git a/api/src/Helpers/DateTruncFunctionDQL.php b/api/src/Helpers/DateTruncFunctionDQL.php new file mode 100644 index 0000000000000000000000000000000000000000..924852ac1ae1dfdec2da7983e252674eba5a451d --- /dev/null +++ b/api/src/Helpers/DateTruncFunctionDQL.php @@ -0,0 +1,33 @@ +match(Lexer::T_IDENTIFIER); + $parser->match(Lexer::T_OPEN_PARENTHESIS); + $this->firstDateExpression = $parser->ArithmeticPrimary(); + $parser->match(Lexer::T_COMMA); + $this->secondDateExpression = $parser->ArithmeticPrimary(); + $parser->match(Lexer::T_CLOSE_PARENTHESIS); + } + + public function getSql(SqlWalker $sqlWalker){ + return 'date_trunc(' . + $this->firstDateExpression->dispatch($sqlWalker) . ', ' . + $this->secondDateExpression->dispatch($sqlWalker) . + ')'; + } +} \ No newline at end of file diff --git a/api/src/Kernel.php b/api/src/Kernel.php old mode 100644 new mode 100755