Commit aa116d0a authored by Alexandre Zvenigorosky's avatar Alexandre Zvenigorosky
Browse files

Merge branches 'Centres-cout' and 'master' of git.unicaen.fr:open-source/OSE into Centres-cout

# Conflicts:
#	composer.json
#	composer.lock
parents 3b7020e4 e5f47205
Loading
Loading
Loading
Loading
+89 −6
Original line number Diff line number Diff line
@@ -3,7 +3,32 @@ title: "Changements intervenus sur OSE"
author: Laurent Lécluse - DSI - Unicaen
...

#OSE 7.0 (en développement)
#OSE 8.0 (en développement)

## Corrections de bugs

## Nouveautés

## Notes de mise à jour

#OSE 7.0.2

## Corrections de bugs

En mode calendaire, le formulaire de saisie de service réalisé ne s'affichait plus.

#OSE 7.0.1

## Corrections de bugs

La génération des contrats ne fonctionnait pas en mode production.
Idem pour télécharger des modèles de contrats.

## Notes de mise à jour

Pas de BDD à mettre à jour, juste le code de l'application en lancant la commande /bin/ose update.

#OSE 7.0

## Corrections de bugs

@@ -13,6 +38,19 @@ author: Laurent Lécluse - DSI - Unicaen

* Les filtres portant sur l'export des services (CSV et PDF) refonctionnent.

* L'affichage des détails d'une composante (lorsqu'on clique sur son nom) a été réparé.

* Administration des fonctions référentielles :
Les composantes supprimées n'apparaissent maintenant plus dans la liste. Apparaissent en plus les composantes sans enseignements (pour lesquelles il peut y avoir du référentiel).

* Page d'accès aux contrats qui affichait une erreur si des services étaient validés dans une composante supplémentaire sans que l'agrément du conseil restreint ne soit saisi.

* Dans certains cas, le passage des heures du prévisionnel au réalisé ne fonctionnait pas.

* Les utilisateurs LDAP qui n'ont pas de SupannEmpId peuvent maintenant se connecter à OSE sans soucis

* Lorsqu'un clique sur une composante dans le service référentiel, l'affichage du détail ne plante plus.

## Nouveautés

* Synchronisation possible de services et des volumes horaires associés (en vue d'import depuis ADE)
@@ -23,21 +61,66 @@ author: Laurent Lécluse - DSI - Unicaen

* Possibilité de déterminer si les heures pour une fonction référentielle donnée peuvent être comptées dans le service statutaire ou non.

* Possibilité d'importer des heures d'enseignement depuis ADE.

* Possibilité de basculer OSE en mode calendaire ou en mode semestriel (par défaut) selon qu'on soit en prévisionnel ou en réalisé.

* Mise en place d'une interface de saisie d'heures en mode calendaire

* Possibilité de personnaliser le modèle de contrat de travail et d'avenant.
    * Un modèle générique est à votre disposition dans le dossier data de l'application (format OpenDocument Texte à adapter avec l'application LibreOffice).
    * Les modèles peuvent être spécifiques à une composante donnée ou bien à un statut donné (ou les deux)
    * Un système de variables permet de réaliser un publipostage à partir des données de contrat pour les injecter dans le document
    * Vous pouvez personnaliser les requêtes afin d'injecter dans le modèle les données de votre choix
    * Vous pouvez créer de nouvelles variables comme bon vous semble
    * Une interface d'administration vous permettra de configurer vos modèles

* il est désormais possible, via la gestion des privilèges, d'interdire à des statuts ou des rôles de générer de nouveaux contrats et/ou avenants.
    
* Le pays "France" peut maintenant être sélectionné dans la configuration globale de l'application

* Formulaire de saisie de services amélioré :
    * Le choix de l'intervenant n'apparait plus lorsque  l'on se trouve déjà dans la fiche de l'intervenant
    * La saisie des volumes horaires n'est affichée que lorsque c'est nécessaire (plus de liste de tous les types d'intervention affichés par défaut).
    * Il est désormais possible de limiter les types d'intervention disponibles pour saisir des services à l'extérieur
     (paramétrage possible depuis Administration/Types d'intervention)

* Dans le module Charges, il est désormais possible de modifier/créer des scénarios de niveau établissement

* Meilleures possibilités de personnalisation :
    * page contacts, 
    * adresse mail d'envoi, 
    * icône de l'application, 
    * URL des documentations permanents et vacataires dans les paramètres généraux.
    * possibilité de préciser des informations lorsqu'un recherche une personne pour affectation à OSE

## Notes de mise à jour

* Modifiez la structure de votre base de données en exécutant dans SQL developer le script de mise à jour suivant :
`data/Mises à jour/07.0.sql`

* Ajoutez un paramètre "contact" dans votre fichier de configuration de l'application, rubrique "etablissement"
pour pouvoir définir le contenu de votre page "contact"
* Dans les paramètres de configuration (Menu Administration/Paramètres généraux), 
veuillez sélectionner "FRANCE" dans le bloc "Divers" (en bas à gauche de la page). 
**Attention** : si ce n'est pas fait, la page "données personnelles" des intervenants ne pourra pas s'afficher.

* De nouveaux paramètres de configuration ont été ajoutés dans le fichier de configuration global de l'application
`/config.local.php`. A vous de les ajouter manuellement à votre fichier de confguration existant.
Au besoin, le modèle est le fichier `/config.local.php.default`.

Les paramètres à ajouter puis personnaliser sont :

| Rubrique        | Paramètre       | Description                         |
| --------------- | --------------- | ----------------------------------- |
| etablissement | contact | Personnalisation du contenu de votre page "contact" (code HTML) |
| etablissement | icones | Personnaliser l'icône de l'application |
| mail | from | préciser l'adresse d'expéditeur des mails de OSE |
| ldap | utilisateurExtraMasque | Masque de données à afficher lorsqu'on recherche une personne en vue de lui créer une affectation | 
| ldap | utilisateurExtraAttributes | Attributs LDAP à fournir pour le masque ci-dessus |

* Pour la génération des contrats de travail, veillez bien à installer Unoconv sur votre serveur.
Pour plus d'informations, merci de vous rendre à la page "Procédure d'installation" où tout y est expliqué.

* De nouveaux privilèges liés aux contrats de travail ont été créés. Il vous revient de les attribuer aux rôles et statuts de votre souhait.
Sans cela, les fonctionnalités associées ne seront pas accessibles.

* Idem si vous voulez personnaliser l'icône de l'application (paramètre icones dans etablissement du fichier de config).

#OSE 6.3.2

+2 −2
Original line number Diff line number Diff line
@@ -328,7 +328,7 @@ class OseAdmin

    public function exec($args)
    {
        $this->console->exec("php " . dirname(__DIR__) . "/public/index.php " . $args);
        $this->console->passthru("php " . dirname(__DIR__) . "/public/index.php " . $args);
    }


@@ -346,7 +346,7 @@ class OseAdmin

    private function loadBdd()
    {
        require_once('../config/application.config.php');
        require_once('../config.local.php');

        $bdd = new Bdd;

+1 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ class DataGen
        'IMPORT_TABLES'              => '',
        'INDICATEUR'                 => '',
        'MESSAGE'                    => '',
        'MODELE_CONTRAT'             => "libelle = 'Modèle par défaut'",
        'MOTIF_MODIFICATION_SERVICE' => '',
        'MOTIF_NON_PAIEMENT'         => '',
        'PARAMETRE'                  => '',
+368 −0
Original line number Diff line number Diff line
<?php

/**
 * @var $this       \Application\View\Renderer\PhpRenderer
 * @var $controller \Zend\Mvc\Controller\AbstractController
 * @var $viewName   string
 * @var $sl         \Zend\ServiceManager\ServiceLocatorInterface
 */

include_once __DIR__ . '/../tests/OSETest/VolumeHoraireListeTest.php';

use OSETest\VolumeHoraireListeTest;

/*
// Pour pouvoir créer un début de jeu de test à partir de données réelles
$vhlt     = new VolumeHoraireListeTest();
$scenario = $vhlt->createScenarioFromService(
    24519,
    'REALISE',
    'S1',
    'TD'
);
phpDump($scenario);

return;
*/

$seulScenario = null;
//$seulScenario = 14;

$scenarios = [
    1  => [
        'input'   => [
            1 => [
                'horaireDebut'     => '27/09/1980 à 14:00',
                'motifNonPaiement' => null,
                'HistoCreation'    => '14/08/2018 à 11:00',
                'heures'           => 5,
            ],
            2 => [
                'horaireDebut'     => '27/09/1980 à 14:00',
                'motifNonPaiement' => null,
                'HistoCreation'    => '14/08/2018 à 11:00',
                'heures'           => 4,
            ],
            3 => [
                'horaireDebut'     => '27/09/1980 à 14:00',
                'motifNonPaiement' => 1,
                'HistoCreation'    => '14/08/2018 à 11:00',
                'heures'           => 4,
            ],
            4 => [
                'horaireDebut'     => '27/09/1980 à 14:00',
                'motifNonPaiement' => 1,
                'HistoCreation'    => '14/08/2018 à 11:01',
                'heures'           => 4,
            ],
            5 => [
                'horaireDebut'     => '27/09/1980 à 14:00',
                'motifNonPaiement' => 1,
                'HistoCreation'    => null,
                'heures'           => 3,
            ],
        ],
        'actions' => [
            ['setHeures', 15],
        ],
        'output'  => [
            1 => ['removed' => true],
        ],
    ],
    2  => [
        'input'   => [10, -2],
        'output'  => [10, ['removed' => true]],
        'actions' => [['setHeures', 10]],
    ],
    3  => [
        'input'   => [50, -10, -2],
        'output'  => [58, ['removed' => true], ['removed' => true]],
        'actions' => [['setHeures', 58]],
    ],
    4  => [
        'input'   => [
            30216 => [
                'heures' => 16.0,
                'source' => 'ADE',
            ],
            30263 => ['heures' => 12.0],
            30264 => [
                'motifNonPaiement' => 'HC payées par ENSCCF',
                'heures'           => 5.0,
            ],
            30187 => [
                'heures' => 3.0,
                'valide' => true,
            ],
        ],
        'output'  => [
            30263 => ['heures' => -2],
            30264 => ['removed' => true],
        ],
        'actions' => [
            ['setHeures', 17],
        ],
    ],
    5  => [
        'input'   => [
            30216 => [
                'heures' => 16.0,
                'source' => 'ADE',
            ],
            30263 => ['heures' => 12.0],
            30264 => [
                'motifNonPaiement' => 'HC payées par ENSCCF',
                'heures'           => 4.0,
            ],
            30187 => [
                'heures' => 3.0,
                'valide' => true,
            ],
        ],
        'output'  => [
            30263 => ['heures' => -18],
            30264 => ['removed' => true],
        ],
        'actions' => [
            ['setHeures', 1],
        ],
    ],
    6  => [ // on déplace toutes les heures de MNP vers un nouveau
            'input'   => [
                30216 => [
                    'heures' => 16.0,
                    'source' => 'ADE',
                ],
                30264 => [
                    'motifNonPaiement' => 'HC payées par ENSCCF',
                    'heures'           => 5.0,
                ],
                30265 => [
                    'heures' => -8.0,
                ],
                30187 => [
                    'heures' => 3.0,
                    'valide' => true,
                ],
            ],
            'output'  => [
                30265 => [
                    'heures' => -19,
                ],
                'n1'  => [
                    'motifNonPaiement' => 'Essai-1',
                    'heures'           => 11,
                ],
            ],
            'actions' => [
                ['setMotifNonPaiement', 'Essai-1'],
                ['moveHeuresFromAncienMotifNonPaiement', 11, null],
            ],
    ],
    7  => [ // on déplace partiellement les heures de MNP vers un nouveau
            'input'   => [
                30216 => [
                    'heures' => 16.0,
                    'source' => 'ADE',
                ],
                30264 => [
                    'motifNonPaiement' => 'HC payées par ENSCCF',
                    'heures'           => 5.0,
                ],
                30265 => [
                    'heures' => -8.0,
                ],
                30187 => [
                    'heures' => 3.0,
                    'valide' => true,
                ],
            ],
            'output'  => [
                30265 => [
                    'heures' => -14,
                ],
                'n1'  => [
                    'motifNonPaiement' => 'Essai-1',
                    'heures'           => 6,
                ],
            ],
            'actions' => [
                ['setMotifNonPaiement', 'Essai-1'],
                ['moveHeuresFromAncienMotifNonPaiement', 6, null],
            ],
    ],
    8  => [ // on déplace plus  d'heures de MNP vers un nouveau MNP
            'input'   => [
                30216 => [
                    'heures' => 16.0,
                    'source' => 'ADE',
                ],
                30264 => [
                    'motifNonPaiement' => 'HC payées par ENSCCF',
                    'heures'           => 5.0,
                ],
                30265 => [
                    'heures' => -8.0,
                ],
                30187 => [
                    'heures' => 3.0,
                    'valide' => true,
                ],
            ],
            'output'  => [
                30265 => [
                    'heures' => -19,
                ],
                'n1'  => [
                    'motifNonPaiement' => 'Essai-1',
                    'heures'           => 15,
                ],
            ],
            'actions' => [
                ['setMotifNonPaiement', 'Essai-1'],
                ['moveHeuresFromAncienMotifNonPaiement', 15, null],
            ],
    ],
    9  => [ // déplacement sans changement de MNP
            'input'   => [
                30216 => [
                    'heures' => 16.0,
                    'source' => 'ADE',
                ],
                30264 => [
                    'motifNonPaiement' => 'HC payées par ENSCCF',
                    'heures'           => 5.0,
                ],
                30265 => [
                    'heures' => -8.0,
                ],
                30187 => [
                    'heures' => 3.0,
                    'valide' => true,
                ],
            ],
            'output'  => [
                30264 => [
                    'motifNonPaiement' => 'HC payées par ENSCCF',
                    'heures'           => 15.0,
                ],
            ],
            'actions' => [
                ['setMotifNonPaiement', 'HC payées par ENSCCF'],
                ['moveHeuresFromAncienMotifNonPaiement', 15, 'HC payées par ENSCCF'],
            ],
    ],
    10 => [ // déplacement sans changement de MNP
            'input'   => [
                30216 => [
                    'heures' => 16.0,
                    'source' => 'ADE',
                ],
                30264 => [
                    'motifNonPaiement' => 'HC payées par ENSCCF',
                    'heures'           => 5.0,
                ],
                30265 => [
                    'heures' => -8.0,
                ],
                30187 => [
                    'heures' => 3.0,
                    'valide' => true,
                ],
            ],
            'output'  => [
                30265 => [
                    'heures' => -4.0,
                ],
            ],
            'actions' => [
                ['setMotifNonPaiement', null],
                ['moveHeuresFromAncienMotifNonPaiement', 15, null],
            ],
    ],
    11 => [
        'input'   => [-2, 2, 5],
        'output'  => [['removed' => true], 2, 7],
        'actions' => [['setHeures', 9]],
    ],
    12 => [
        'input'   => [
            30266 => ['heures' => 5.0,],
            30267 => ['heures' => 10.0,],
            30240 => ['heures' => 1.0,],
            30245 => ['heures' => 9.0,],
            30270 => ['heures' => 1.0,],
            30271 => ['heures' => 2.0,],
        ],
        'output'  => [
            30267 => ['removed' => true],
            30240 => ['removed' => true],
            30245 => ['removed' => true],
            30270 => ['removed' => true],
            30271 => ['removed' => true],
        ],
        'actions' => [
            ['setHeures', 5],
        ],
    ],
    13 => [
        'input'   => [
            30285 => ['horaireDebut' => '02/09/2018 à 00:00', 'horaireFin' => '02/09/2018 à 00:00', 'heures' => 10,],
            30183 => ['horaireDebut' => '02/09/2018 à 00:00', 'horaireFin' => '02/09/2018 à 00:00', 'heures' => 10, 'valide' => true,],
            30294 => ['horaireDebut' => '02/09/2018 à 00:00', 'horaireFin' => '02/09/2018 à 00:00', 'heures' => 5,],
        ],
        'output'  => [
            30285 => ['motifNonPaiement' => 'HC payées par ENSCCF', 'heures' => 20],
            30294 => ['motifNonPaiement' => 'HC payées par ENSCCF',],
            'n1'  => ['horaireDebut' => '02/09/2018 à 00:00', 'horaireFin' => '02/09/2018 à 00:00', 'heures' => -10],
        ],
        'actions' => [
            ['setMotifNonPaiement', null],
            ['setHeures', 25],
            ['changeAll', '02/09/2018 à 00:00', '02/09/2018 à 00:00', 'CM', 'S2', 'HC payées par ENSCCF'],
        ],
    ],
    14 => [
        'input' => [
            30320 => ['heures' => 20.9],
            30325 => ['heures' => 1.1, 'motifNonPaiement' => 'HC payées par ENSCCF'],
        ],
        'output' => [

        ],
        'actions' => [
            ['changeAll',null,null,'CM','S2', false]
        ],
    ],
    15 => [
        'input'   => [5, 2, -2],
        'output'  => [3, ['removed' => true], -2],
        'actions' => [['setHeures', 1]],
    ],
    16 => [
        'input'   => [0],
        'output'  => [1],
        'actions' => [['setHeures', 1]],
    ],
    17 => [
        'input'   => [2, 0],
        'output'  => [2, 1],
        'actions' => [['setHeures', 3]],
    ],
    18 => [
        'input'   => [-2, 10, 5],
        'output'  => [-2, 10, 4],
        'actions' => [['setHeures', 12]],
    ],
];

if ($seulScenario) {
    $scenarios = [$seulScenario => $scenarios[$seulScenario]];
}

$vhlt = new VolumeHoraireListeTest();
foreach ($scenarios as $id => $scenario) {
    echo '<h1>Scénario ' . $id . '</h1>';
    $vhlt->calc($scenario);
    $vhlt->displayResult();
}
+116 −4
Original line number Diff line number Diff line
<?php

/**
 * @var $this       \Application\View\Renderer\PhpRenderer
 * @var $controller \Zend\Mvc\Controller\AbstractController
 * @var $viewName   string
 * @var $sl         \Zend\ServiceManager\ServiceLocatorInterface
 */

use Application\Service\ModeleContratService;
use Unicaen\OpenDocument\Document;

$r = new Document('/home/laurent/Contrat.odt');

$m = $r->getMeta();
$d = [
    [
        'nom'    => 'Lécluse',
        'prenom' => 'Laurent',
        'varFoot' => 'test footer ok!!!',
        'sec1'   => false,

        'dpl_libelle@table:table-row' => [
            [
                'dpl_libelle'             => 'MASTER',
                'dpl_annee'               => '2016/2017',
                'prof_nom@text:list-item' => [
                    [
                        'prof_nom'    => 'Gaultier',
                        'prof_prenom' => 'Jean-paul',
                    ],
                    [
                        'prof_nom'    => 'Stingwitch',
                        'prof_prenom' => 'Serge',
                    ],
                ],
            ],
            [
                'dpl_libelle'             => 'Licence',
                'dpl_annee'               => '2013/2014',
                'prof_nom@text:list-item' => [
                    [
                        'prof_nom'    => 'Diouf',
                        'prof_prenom' => 'Mouss',
                    ],
                    [
                        'prof_nom'    => 'Poeld',
                        'prof_prenom' => 'Thony',
                    ],
                ],
            ],
        ],
    ],

    [
        'nom'                         => 'Fery',
        'prenom'                      => 'Karin',
        'varFoot' => 'test footer 2 bizarre!!!',
        'sec1@text:section'           => [
            ['secvar' => 'Varsec1',],
            ['secvar' => 'Varsec2',],
            ['secvar' => 'Varsec3',],
            ['secvar' => 'Varsec4',],
            ['secvar' => 'Varsec5',],
        ],
        'dpl_libelle@table:table-row' => [
            [
                'dpl_libelle'             => 'Ingé',
                'annee'                   => '2011/2012',
                'prof_nom@text:list-item' => [
                    [
                        'prof_nom'    => 'Gaul1',
                        'prof_prenom' => 'Jean-paul2',
                    ],
                    [
                        'prof_nom'    => 'Stingwitch2',
                        'prof_prenom' => 'Serge2',
                    ],
                ],
            ],
            [
                'dpl_libelle'             => 'Licence3',
                'annee'                   => '2010/2011',
                'prof_nom@text:list-item' => [
                    [
                        'prof_nom'    => 'Diouf2',
                        'prof_prenom' => 'Mouss2
poto',
                    ],
                    [
                        'prof_nom'    => 'Poeld2',
                        'prof_prenom' => 'Thony2',
                    ],
                ],
            ],
        ],
    ],
];


///** @var ModeleContrat $contrat */
$contrat = $sl->get(ModeleContratService::class)->get(13);

$document = new Document();
$document->setTmpDir('/home/laurent/UnicaenCode');
//$document->loadFromData($contrat->getFichier());
$document->loadFromFile('/home/laurent/UnicaenCode/srcodt.odt');
$p = $document->publish($d);

//xmlDump($document->getContent());
$document->setPdfOutput(true);
//$document->saveToFile('/home/laurent/UnicaenCode/odtExport.pdf');

//xmlDump($document->getPublisher()->getOutContent());
//xmlDump($document->getStyles());
//var_dump($document->getStylist()->getVariables());


$document->download('exp.pdf');





var_dump($m);
var_dump($m->getUserDefined('testUD'));
 No newline at end of file
Loading