Commit 417adc9d authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Refonte du dispositif, plus aucun package utilisé

parent d5caa44f
Loading
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
CHANGELOG
=========

6.1.0 (22/08/2023)
------------------

- Refonte du dispositif, plus aucun package utilisé

6.0.2 (19/06/2023)
------------------
- Pb de caractère "NUL" enlevé grâce à un TRIM
- Pb de caractère "NULL" enlevé grâce à un TRIM

6.0.1 (23/03/2023)
------------------
+1 −25
Original line number Diff line number Diff line
<?php
// Generated by UnicaenCode
return [
    'UnicaenTbl\Controller\AdminController'                     => __DIR__ . '/src/Controller/AdminController.php',
    'UnicaenTbl\Controller\Factory\AdminControllerFactory'      => __DIR__ . '/src/Controller/Factory/AdminControllerFactory.php',
    'UnicaenTbl\Entity\Column'                                  => __DIR__ . '/src/Entity/Column.php',
    'UnicaenTbl\Entity\TableauBord'                             => __DIR__ . '/src/Entity/TableauBord.php',
    'UnicaenTbl\Entity\Traits\TableauBordAwareTrait'            => __DIR__ . '/src/Entity/Traits/TableauBordAwareTrait.php',
    'UnicaenTbl\Form\ActualisationForm'                         => __DIR__ . '/src/Form/ActualisationForm.php',
    'UnicaenTbl\Form\Factory\ActualisationFormFactory'          => __DIR__ . '/src/Form/Factory/ActualisationFormFactory.php',
    'UnicaenTbl\Form\Traits\ActualisationFormAwareTrait'        => __DIR__ . '/src/Form/Traits/ActualisationFormAwareTrait.php',
    'UnicaenTbl\Module'                                         => __DIR__ . '/Module.php',
    'UnicaenTbl\Options\Factory\ModuleOptionsFactory'           => __DIR__ . '/src/Options/Factory/ModuleOptionsFactory.php',
    'UnicaenTbl\Options\ModuleOptions'                          => __DIR__ . '/src/Options/ModuleOptions.php',
    'UnicaenTbl\Options\Traits\ModuleOptionsAwareTrait'         => __DIR__ . '/src/Options/Traits/ModuleOptionsAwareTrait.php',
    'UnicaenTbl\Provider\Privilege\Privileges'                  => __DIR__ . '/src/Provider/Privilege/Privileges.php',
    'UnicaenTbl\Service\AbstractService'                        => __DIR__ . '/src/Service/AbstractService.php',
    'UnicaenTbl\Service\CollectorService'                       => __DIR__ . '/src/Service/CollectorService.php',
    'UnicaenTbl\Service\Factory\CollectorServiceFactory'        => __DIR__ . '/src/Service/Factory/CollectorServiceFactory.php',
    'UnicaenTbl\Service\Factory\QueryGeneratorServiceFactory'   => __DIR__ . '/src/Service/Factory/QueryGeneratorServiceFactory.php',
    'UnicaenTbl\Service\Factory\SchemaServiceFactory'           => __DIR__ . '/src/Service/Factory/SchemaServiceFactory.php',
    'UnicaenTbl\Service\Factory\TableauBordServiceFactory'      => __DIR__ . '/src/Service/Factory/TableauBordServiceFactory.php',
    'UnicaenTbl\Service\QueryGeneratorService'                  => __DIR__ . '/src/Service/QueryGeneratorService.php',
    'UnicaenTbl\Service\SchemaService'                          => __DIR__ . '/src/Service/SchemaService.php',
    'UnicaenTbl\Service\TableauBordService'                     => __DIR__ . '/src/Service/TableauBordService.php',
    'UnicaenTbl\Service\Traits\QueryGeneratorServiceAwareTrait' => __DIR__ . '/src/Service/Traits/QueryGeneratorServiceAwareTrait.php',
    'UnicaenTbl\Service\Traits\SchemaServiceAwareTrait'         => __DIR__ . '/src/Service/Traits/SchemaServiceAwareTrait.php',
    'UnicaenTbl\Service\Traits\TableauBordServiceAwareTrait'    => __DIR__ . '/src/Service/Traits/TableauBordServiceAwareTrait.php',

];
 No newline at end of file
+18 −113
Original line number Diff line number Diff line
@@ -2,131 +2,36 @@

namespace UnicaenTbl;

use UnicaenTbl\Controller\AdminController;
use UnicaenTbl\Form\ActualisationForm;
use UnicaenTbl\Options\ModuleOptions;
use UnicaenTbl\Provider\Privilege\Privileges;
use UnicaenTbl\Service\CollectorService;
use UnicaenTbl\Service\QueryGeneratorService;
use UnicaenTbl\Service\SchemaService;
use UnicaenTbl\Process\DbDiffProcess;
use UnicaenTbl\Process\DbDiffProcessFactory;
use UnicaenTbl\Process\PlsqlProcess;
use UnicaenTbl\Process\PlsqlProcessFactory;
use UnicaenTbl\Service\BddService;
use UnicaenTbl\Service\BddServiceFactory;
use UnicaenTbl\Service\TableauBordService;


return [

    'router' => [
        'routes' => [
    'unicaen-tbl' => [
                'type'          => 'Literal',
                'options'       => [
                    'route'    => '/unicaen-tbl',
                    'defaults' => [
                        'controller' => AdminController::class,
                        'action'     => 'index',
                    ],
                ],
                'may_terminate' => true,
                'child_routes'  => [
                    'build' => [
                        'type'          => 'Literal',
                        'options'       => [
                            'route'    => '/build',
                            'defaults' => [
                                'action' => 'build-procedures',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                    'actualisation'   => [
                        'type'          => 'Segment',
                        'options'       => [
                            'route'    => '/actualisation/:tableauBord',
                            'defaults' => [
                                'action' => 'actualisation',
                            ],
                        ],
                        'may_terminate' => true,
                    ],
                ],
            ],
        ],
    ],
        'tableaux_bord' => [],

    'console' => [
        'router' => [
            'routes' => [
                'unicaen-tbl' => [
                    'options' => [
                        'type'     => 'catchall',
                        'route'    => 'UnicaenTbl build-procedures',
                        'defaults' => [
                            'controller' => AdminController::class,
                            'action'     => 'build-procedures',
                        ],
                    ],
                ],
            ],
        ],
    ],

    'doctrine' => [
        'driver' => [
            'unicaen_tbl_driver' => [
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                'cache' => 'array',
                'paths' => [
                    __DIR__ . '/../src/Entity',
                ],
            ],
            'orm_default'        => [
                'drivers' => [
                    'UnicaenTbl\Entity\Db' => 'unicaen_tbl_driver',
                ],
            ],
        ],
    ],

    'view_manager' => [
        'template_path_stack' => [
            'unicaen-tbl' => __DIR__ . '/../view',
        ],
    ],

    'controllers' => [
        'factories' => [
            AdminController::class => Controller\Factory\AdminControllerFactory::class,
        ],
        'entity_manager_name' => 'doctrine.entitymanager.orm_default',
    ],

    'service_manager' => [
        'factories' => [
            CollectorService::class      => Service\Factory\CollectorServiceFactory::class,
            ModuleOptions::class         => Options\Factory\ModuleOptionsFactory::class,
            SchemaService::class         => Service\Factory\SchemaServiceFactory::class,
            QueryGeneratorService::class => Service\Factory\QueryGeneratorServiceFactory::class,
            TableauBordService::class    => Service\Factory\TableauBordServiceFactory::class,
        ],
        'aliases'   => [
            'unicaen-tbl.process.DbDiff' => DbDiffProcess::class,
            'unicaen-tbl.process.Plsql'  => PlsqlProcess::class,
        ],

    'form_elements' => [
        'factories' => [
            ActualisationForm::class => Form\Factory\ActualisationFormFactory::class,
        ],
    ],
            ModuleOptions::class         => Options\Factory\ModuleOptionsFactory::class,
            TableauBordService::class    => Service\TableauBordServiceFactory::class,
            BddService::class            => BddServiceFactory::class,

    'bjyauthorize' => [
        'guards' => [
            'UnicaenPrivilege\Guard\PrivilegeController' => [
                [
                    'controller' => AdminController::class,
                    'action'     => ['index'],
                    'privileges' => [Privileges::UNICAEN_TBL_ADMIN],
                ],
                [
                    'controller' => AdminController::class,
                    'action'     => ['actualisation'],
                    'privileges' => [Privileges::UNICAEN_TBL_ACTUALISATION],
                ],
            ],
            DbDiffProcess::class => DbDiffProcessFactory::class,
            PlsqlProcess::class  => PlsqlProcessFactory::class,
        ],
    ],
];
 No newline at end of file

data/module.sql

deleted100644 → 0
+0 −22
Original line number Diff line number Diff line
/*********************************************************************************************
 *                                          Privilèges
 *********************************************************************************************/

/

insert into CATEGORIE_PRIVILEGE (ID, CODE, LIBELLE, ORDRE) values (
  CATEGORIE_PRIVILEGE_ID_SEQ.NEXTVAL,
  'unicaen-tbl',
  'Tableaux de bord',
  999
);

/

insert into PRIVILEGE (ID, CATEGORIE_ID, CODE, LIBELLE, ORDRE) select
   PRIVILEGE_ID_SEQ.NEXTVAL,
   cat.id,
   'admin',
   'Gestion des tableaux de bord',
   1
from CATEGORIE_PRIVILEGE cat where code = 'unicaen-tbl';

data/package.sql

deleted100644 → 0
+0 −335
Original line number Diff line number Diff line
CREATE OR REPLACE PACKAGE "UNICAEN_TBL" AS

  ACTIV_TRIGGERS BOOLEAN DEFAULT TRUE;
  ACTIV_CALCULS  BOOLEAN DEFAULT TRUE;

  TYPE t_params IS RECORD (
    p1 VARCHAR2(30), v1 VARCHAR2(80),
    p2 VARCHAR2(30), v2 VARCHAR2(80),
    p3 VARCHAR2(30), v3 VARCHAR2(80),
    p4 VARCHAR2(30), v4 VARCHAR2(80),
    p5 VARCHAR2(30), v5 VARCHAR2(80)
  );

  CALCUL_PROC_PARAMS t_params;

  FUNCTION QUERY_APPLY_PARAM( sqlQuery VARCHAR2, param VARCHAR2, value VARCHAR2) RETURN CLOB;
  FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL, alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2;

  PROCEDURE CALCULER( TBL_NAME VARCHAR2 );
  PROCEDURE CALCULER( TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2 );
  PROCEDURE CALCULER(TBL_NAME VARCHAR2, params t_params);
  PROCEDURE DEMANDE_CALCUL( TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2 );

  PROCEDURE ANNULER_DEMANDES;
  PROCEDURE ANNULER_DEMANDES( TBL_NAME VARCHAR2 );
  PROCEDURE CALCULER_DEMANDES;

  -- AUTOMATIC GENERATION --

  -- END OF AUTOMATIC GENERATION --

END UNICAEN_TBL;

/

CREATE OR REPLACE PACKAGE BODY "UNICAEN_TBL" AS
  TYPE t_dems_values IS TABLE OF BOOLEAN INDEX BY VARCHAR2(80);
  TYPE t_dems_params IS TABLE OF t_dems_values INDEX BY VARCHAR2(30);
  TYPE t_dems IS TABLE OF t_dems_params INDEX BY VARCHAR2(30);

  dems t_dems;



  FUNCTION MAKE_WHERE(param VARCHAR2 DEFAULT NULL, value VARCHAR2 DEFAULT NULL,
                      alias VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 IS
    res VARCHAR2(120) DEFAULT '';
  BEGIN
    IF param IS NULL THEN
      RETURN '1=1';
    END IF;
    IF alias IS NOT NULL THEN
      res := alias || '.';
    END IF;
    IF value IS NULL THEN
      RETURN res || param || ' IS NULL';
    END IF;
   RETURN res || param || ' = q''[' || value || ']''';
  END;



  FUNCTION QUERY_APPLY_PARAM(sqlQuery VARCHAR2, param VARCHAR2, value VARCHAR2) RETURN CLOB IS
    pos       NUMERIC;
    paramLen  NUMERIC;
    paramComm VARCHAR2(200);
    debComm   NUMERIC;
    endComm   NUMERIC;
    debReal   NUMERIC;
    realParam VARCHAR2(80);
    realValue VARCHAR2(120);
    q         CLOB;
  BEGIN
    q := sqlQuery;
    IF param IS NULL THEN
      RETURN q;
    END IF;

    paramlen := length(param);
    IF value IS NULL THEN
      realValue := ' IS NULL';
    ELSE
      BEGIN
        realValue := TO_NUMBER(value);
      EXCEPTION
        WHEN VALUE_ERROR THEN
          realValue := 'q''[' || value || ']''';
      END;
     realValue := '=' || realValue;
    END IF;

    LOOP
      pos := instr(q, '/*@' || param, 1, 1);
      EXIT WHEN pos = 0;
     debComm := pos - 1;
      endComm := instr(q, '*/', pos, 1);
      paramComm := substr(q, debComm, endComm - debComm);
     debReal := instr(paramComm, '=', 1, 1);
     realParam := trim(substr(paramComm, debReal + 1));
     --realParam := 'AND ' || substr(q,pos + paramLen + 4,endComm-pos - paramLen - 4);
      realParam := 'AND ' || realParam || realValue;
     q := substr(q, 1, debComm) || realParam || substr(q, endComm + 2);
    END LOOP;

    RETURN q;
  END;


  FUNCTION QUERY_APPLY_PARAMS(sqlQuery VARCHAR2, useParams BOOLEAN DEFAULT FALSE) RETURN CLOB IS
    q CLOB;
  BEGIN
    q := sqlQuery;

    IF NOT useParams THEN
      RETURN q;
    END IF;

    IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p1 IS NOT NULL THEN
      q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1);
    END IF;

    IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p2 IS NOT NULL THEN
      q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p2, UNICAEN_TBL.CALCUL_PROC_PARAMS.v2);
    END IF;

    IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p3 IS NOT NULL THEN
      q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p3, UNICAEN_TBL.CALCUL_PROC_PARAMS.v3);
    END IF;

    IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p4 IS NOT NULL THEN
      q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p4, UNICAEN_TBL.CALCUL_PROC_PARAMS.v4);
    END IF;

    IF UNICAEN_TBL.CALCUL_PROC_PARAMS.p5 IS NOT NULL THEN
      q := QUERY_APPLY_PARAM(q, UNICAEN_TBL.CALCUL_PROC_PARAMS.p5, UNICAEN_TBL.CALCUL_PROC_PARAMS.v5);
    END IF;

    RETURN q;
  END;


  FUNCTION PARAMS_MAKE_FILTER(useParams BOOLEAN DEFAULT FALSE) RETURN VARCHAR2 IS
    filter VARCHAR2(4000) DEFAULT '';
  BEGIN
    IF NOT useParams THEN
      RETURN '1=1';
    END IF;

    IF unicaen_tbl.calcul_proc_params.p1 IS NOT NULL THEN
      IF filter IS NOT NULL THEN
        filter := filter || ' AND ';
      END IF;
      filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p1 || ', t.' || unicaen_tbl.calcul_proc_params.p1 || ') ';
      IF unicaen_tbl.calcul_proc_params.v1 IS NULL THEN
        filter := filter || 'IS NULL';
      ELSE
        filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v1 || ']''';
      END IF;
    END IF;

    IF unicaen_tbl.calcul_proc_params.p2 IS NOT NULL THEN
      IF filter IS NOT NULL THEN
        filter := filter || ' AND ';
      END IF;
      filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p2 || ', t.' || unicaen_tbl.calcul_proc_params.p2 || ') ';
      IF unicaen_tbl.calcul_proc_params.v2 IS NULL THEN
        filter := filter || 'IS NULL';
      ELSE
        filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v2 || ']''';
      END IF;
    END IF;

    IF unicaen_tbl.calcul_proc_params.p3 IS NOT NULL THEN
      IF filter IS NOT NULL THEN
        filter := filter || ' AND ';
      END IF;
      filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p3 || ', t.' || unicaen_tbl.calcul_proc_params.p3 || ') ';
      IF unicaen_tbl.calcul_proc_params.v3 IS NULL THEN
        filter := filter || 'IS NULL';
      ELSE
        filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v3 || ']''';
      END IF;
    END IF;

    IF unicaen_tbl.calcul_proc_params.p4 IS NOT NULL THEN
      IF filter IS NOT NULL THEN
        filter := filter || ' AND ';
      END IF;
      filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p4 || ', t.' || unicaen_tbl.calcul_proc_params.p4 || ') ';
      IF unicaen_tbl.calcul_proc_params.v4 IS NULL THEN
        filter := filter || 'IS NULL';
      ELSE
        filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v4 || ']''';
      END IF;
    END IF;

    IF unicaen_tbl.calcul_proc_params.p5 IS NOT NULL THEN
      IF filter IS NOT NULL THEN
        filter := filter || ' AND ';
      END IF;
      filter := filter || 'COALESCE(v.' || unicaen_tbl.calcul_proc_params.p5 || ', t.' || unicaen_tbl.calcul_proc_params.p5 || ') ';
      IF unicaen_tbl.calcul_proc_params.v5 IS NULL THEN
        filter := filter || 'IS NULL';
      ELSE
        filter := filter || '= q''[' || unicaen_tbl.calcul_proc_params.v5 || ']''';
      END IF;
    END IF;

    IF filter = '' THEN
      RETURN '1=1';
    END IF;

    RETURN filter;
  END;



  PROCEDURE CALCULER(TBL_NAME VARCHAR2) IS
    params t_params;
  BEGIN
    ANNULER_DEMANDES(TBL_NAME);
    CALCULER(TBL_NAME, params);
  END;



  PROCEDURE CALCULER(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS
    calcul_proc varchar2(30);
    params t_params;
  BEGIN
    IF NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; END IF;

    SELECT custom_calcul_proc INTO calcul_proc FROM tbl WHERE tbl_name = CALCULER.TBL_NAME;

    params.p1 := param;
    params.v1 := value;

    unicaen_tbl.calcul_proc_params := params;

    IF calcul_proc IS NOT NULL THEN
      EXECUTE IMMEDIATE
        'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1); END;';
    ELSE
      EXECUTE IMMEDIATE
        'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(TRUE); END;';
    END IF;
  END;



  PROCEDURE CALCULER(TBL_NAME VARCHAR2, params t_params) IS
    calcul_proc varchar2(30);
  BEGIN
    IF NOT UNICAEN_TBL.ACTIV_CALCULS THEN RETURN; END IF;

    SELECT custom_calcul_proc INTO calcul_proc FROM tbl WHERE tbl_name = CALCULER.TBL_NAME;

    unicaen_tbl.calcul_proc_params := params;

    IF calcul_proc IS NOT NULL THEN
      EXECUTE IMMEDIATE
              'BEGIN ' || calcul_proc || '(UNICAEN_TBL.CALCUL_PROC_PARAMS.p1, UNICAEN_TBL.CALCUL_PROC_PARAMS.v1); END;';
    ELSE
      EXECUTE IMMEDIATE
              'BEGIN UNICAEN_TBL.C_' || TBL_NAME || '(TRUE); END;';
    END IF;
  END;



  PROCEDURE DEMANDE_CALCUL(TBL_NAME VARCHAR2, param VARCHAR2, value VARCHAR2) IS
  BEGIN
    dems(TBL_NAME)(param)(value) := TRUE;
  END;



  PROCEDURE ANNULER_DEMANDES IS
  BEGIN
    dems.delete;
  END;



  PROCEDURE ANNULER_DEMANDES(TBL_NAME VARCHAR2) IS
  BEGIN
    IF dems.exists(tbl_name) THEN
      dems(tbl_name).delete;
    END IF;
  END;



  FUNCTION HAS_DEMANDES RETURN BOOLEAN IS
  BEGIN
    RETURN dems.count > 0;
  END;



  PROCEDURE CALCULER_DEMANDES IS
    d t_dems;
    tbl_name VARCHAR2(30);
    param VARCHAR2(30);
    value VARCHAR2(80);
  BEGIN
    d := dems;
    dems.delete;

    tbl_name := d.FIRST;
    LOOP EXIT WHEN tbl_name IS NULL;
      param := d(tbl_name).FIRST;
      LOOP EXIT WHEN param IS NULL;
        value := d(tbl_name)(param).FIRST;
        LOOP EXIT WHEN value IS NULL;
          calculer(tbl_name, param, value);
          value := d(tbl_name)(param).NEXT(value);
        END LOOP;
        param := d(tbl_name).NEXT(param);
      END LOOP;
      tbl_name := d.NEXT(tbl_name);
    END LOOP;

    IF HAS_DEMANDES THEN -- pour les boucles !!
      CALCULER_DEMANDES;
    END IF;
  END;



  -- AUTOMATIC GENERATION --

  -- END OF AUTOMATIC GENERATION --

END UNICAEN_TBL;
Loading