From 20d007c9e0663e0a2f2e2507f17f1c717bd05a50 Mon Sep 17 00:00:00 2001 From: Dosseh KOUTO Date: Fri, 3 Jan 2020 15:48:40 +0100 Subject: [PATCH] l'5-creation-du-controlleur-nombredeventeparjma implementer avec succes et Definition du Helpers DateTruncFunctionDQL --- api/config/packages/doctrine.yaml | 3 ++ api/src/Controller/NombreDeVenteParJMA.php | 61 ++++++++++++++++++++++ api/src/Entity/ValeursFonciere.php | 43 ++++++++++++++- api/src/Helpers/DateTruncFunctionDQL.php | 33 ++++++++++++ api/src/Kernel.php | 0 5 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 api/src/Controller/NombreDeVenteParJMA.php create mode 100644 api/src/Helpers/DateTruncFunctionDQL.php mode change 100644 => 100755 api/src/Kernel.php diff --git a/api/config/packages/doctrine.yaml b/api/config/packages/doctrine.yaml index 7e6c080..e8f0a4c 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 0000000..6fe2222 --- /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 eddb08b..9f2ce37 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 0000000..924852a --- /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 -- GitLab