Commit 16da967c authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Récup des précédantes formules personnalisées si on a une MAJ de formule.

Meilleure gestion des dépendances de cellules
parent aecf45f1
Loading
Loading
Loading
Loading
+20 −2
Changes for code/Créateur de formule.php: 20 added lines, 2 removed lines.
Original line number Diff line number Diff line
@@ -58,8 +58,24 @@ switch ($action) {
    break;
    case 'aff':
    case 'gen':
        $intervenantQuery = null;
        $volumeHoraireQuery = null;
        try {
            $packageName = 'FORMULE_' . $fc->getName();
            $pe          = $bdd->select('SELECT id FROM formule WHERE package_name = :pn', ['pn' => $packageName]);
            if (!empty($pe)) {
                $intervenantQuery   = trim(@$bdd->select("SELECT $packageName.INTERVENANT_QUERY Q FROM dual")[0]['Q']);
                $volumeHoraireQuery = trim(@$bdd->select("SELECT $packageName.VOLUME_HORAIRE_QUERY Q FROM dual")[0]['Q']);

                $intervenantQuery   = str_replace("'", "''", $intervenantQuery);
                $volumeHoraireQuery = str_replace("'", "''", $volumeHoraireQuery);
            }
        } catch (\Exception $e) {

        }

        $def  = $fc->makePackageDef();
        $body = $fc->makePackageBody();
        $body = $fc->makePackageBody($intervenantQuery, $volumeHoraireQuery);

        if ($action === 'gen') {
            try {
@@ -97,6 +113,9 @@ function affCreateData(\Application\Model\FormuleCalcul $fc)
    $pe          = $bdd->select('SELECT id FROM formule WHERE package_name = :pn', ['pn' => $packageName]);
    if (empty($pe)) {
        $newFormuleId = $bdd->select('SELECT max(id) + 1 nid FROM formule')[0]['NID'];
    } else {
        $newFormuleId = $pe[0]['ID'];
    }

    $array  = [
        'LIBELLE'      => '...',
@@ -144,4 +163,3 @@ function affCreateData(\Application\Model\FormuleCalcul $fc)
    echo 'Puis lancer<pre>./bin/ose update-bdd-formules</pre>';
    echo '</div>';
}
 No newline at end of file
}
 No newline at end of file
+3 −20
Changes for data/formule.sql: 3 added lines, 20 removed lines.
Original line number Diff line number Diff line
@@ -159,15 +159,7 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_<--NAME--> AS
  FUNCTION INTERVENANT_QUERY RETURN CLOB IS
  BEGIN
    RETURN '
    SELECT
      fi.*,
      NULL param_1,
      NULL param_2,
      NULL param_3,
      NULL param_4,
      NULL param_5
    FROM
      V_FORMULE_INTERVENANT fi
    <--INTERVENANT_QUERY-->
    ';
  END;

@@ -176,17 +168,8 @@ CREATE OR REPLACE PACKAGE BODY FORMULE_<--NAME--> AS
  FUNCTION VOLUME_HORAIRE_QUERY RETURN CLOB IS
  BEGIN
    RETURN '
    SELECT
      fvh.*,
      NULL param_1,
      NULL param_2,
      NULL param_3,
      NULL param_4,
      NULL param_5
    FROM
      V_FORMULE_VOLUME_HORAIRE fvh
    ORDER BY
      ordre';
    <--VOLUME_HORAIRE_QUERY-->
    ';
  END;

END FORMULE_<--NAME-->;
 No newline at end of file
+56 −1
Changes for module/Application/src/Model/FormuleCalcul.php: 56 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -308,8 +308,34 @@ END FORMULE_" . $this->getName() . ";";



    public function makePackageBody(): string
    public function makePackageBody(?string $intervenantQuery = null, ?string $volumeHoraireQuery = null): string
    {
        if (!$intervenantQuery) {
            $intervenantQuery = 'SELECT
      fi.*,
      NULL param_1,
      NULL param_2,
      NULL param_3,
      NULL param_4,
      NULL param_5
    FROM
      V_FORMULE_INTERVENANT fi';
        }

        if (!$volumeHoraireQuery) {
            $volumeHoraireQuery = 'SELECT
      fvh.*,
      NULL param_1,
      NULL param_2,
      NULL param_3,
      NULL param_4,
      NULL param_5
    FROM
      V_FORMULE_VOLUME_HORAIRE fvh
    ORDER BY
      ordre';
        }

        $s        = $this->getSheet();
        $formules = [];

@@ -328,6 +354,33 @@ END FORMULE_" . $this->getName() . ";";
        $cells = '';

        /** @var Calc\Cell[] $formules */
        foreach ($formules as $name => $cell) {
            /* On recherche les cases supplémentaires qui manqueraient */
            $mls = (string)$this->mainLine;
            if (str_ends_with($name, $mls)) {
                $name = substr($name, 0, -strlen($mls));
            }

            $deps = $cell->getDeps();
            foreach ($deps as $dep) {
                $dep = str_replace('$', '', $dep);
                if (!array_key_exists($dep, $formules)) {
                    $found = false;
                    foreach ($cellsPos as $cp) {
                        if ($cp . $mls === $dep) {
                            $found = true;
                            break;
                        }
                    }
                    if (!$found) {
                        $cellDep        = $this->getSheet()->getCell($dep);
                        $formules[$dep] = $cellDep;
                    }
                }
            }
        }


        foreach ($formules as $name => $cell) {
            $expr = $cell->getFormuleExpr();
            if ($this->exprIsTest($expr)) {
@@ -350,6 +403,8 @@ END FORMULE_" . $this->getName() . ";";
        $body = str_replace('<--DECALAGE-->', $this->mainLine - 1, $body);
        $body = str_replace('<--CELLS-->', $cells, $body);
        $body = str_replace('<--NAME-->', $this->getName(), $body);
        $body = str_replace('<--INTERVENANT_QUERY-->', $intervenantQuery, $body);
        $body = str_replace('<--VOLUME_HORAIRE_QUERY-->', $volumeHoraireQuery, $body);
        foreach ($cellsPos as $param => $cell) {
            $body = str_replace("<--$param-->", "'" . $cell . "'", $body);
        }