From ed60c45ea406c60a21abad0392fbc86cc77d0f60 Mon Sep 17 00:00:00 2001 From: Etienne Pallier Date: Tue, 15 Jan 2019 12:16:56 +0100 Subject: [PATCH] Nouveau script install/update.sh pour mettre à jour le logiciel ET la BD --- README.md | 9 ++++++--- install/update.sh | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Model/Entity/Materiel.php | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/Model/Table/MaterielsTable.php | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ tests/Fixture/MaterielsFixture.php | 46 ++++++++++++++++++++++++++++++++++++++++++++++ tests/TestCase/Model/Table/MaterielsTableTest.php | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 6 files changed, 310 insertions(+), 11 deletions(-) create mode 100755 install/update.sh diff --git a/README.md b/README.md index df6cd78..84e13e7 100644 --- a/README.md +++ b/README.md @@ -53,10 +53,10 @@ Logiciel testé et validé sur les configurations suivantes : VERSION ACTUELLE -Date: 11/01/2019 -Version: 2.9.1.11 +Date: 15/01/2019 +Version: 2.9.2 Author: EP - Update fichier database/labinvent_last_version.sql contenant la BD COMPLETE + Nouveau script "install/update.sh" pour mettre à jour automatiquement le logiciel (git pull) ET la BD (si besoin) Version majeure en cours : 2.9 (https://projects.irap.omp.eu/versions/207) @@ -73,6 +73,9 @@ CHANGEMENTS IMPORTANTS (MILESTONES) Liste complète des évolutions: https://gitlab.irap.omp.eu/epallier/labinvent/commits/master ----------------------------------------------------------------------------------------------------------- +15/01/2019 Version: 2.9.2 (EP) + Nouveau script "install/update.sh" pour mettre à jour automatiquement le logiciel (git pull) ET la BD (si besoin) + 10/01/2019 Version: 2.9.1.11 (EP) Nouveau mode LDAP AUTHENTIFIÉ opérationnel (pour le CRAL) : - **ATTENTION, MODIF DE LA BD, il faut exécuter le script de mise à jour suivant**: diff --git a/install/update.sh b/install/update.sh new file mode 100755 index 0000000..f07073d --- /dev/null +++ b/install/update.sh @@ -0,0 +1,94 @@ +#!/bin/bash + +# ---------------------------------------------------------------------------------------------------------------- +# Ce script permet de mettre à jour automatiquement le code source du logiciel, ainsi que la BD (si besoin). +# C'est une bonne pratique de l'exécuter assez régulièrement pour garder un logiciel bien à jour. + +# Il ne fait essentiellement qu'un "git pull" suivi de la mise à jour de la BD (si besoin). + +# La BD est mise à jour SEULEMENT s'il existe au moins 1 NOUVEAU script de mise à jour db-update-YYYY-MM-DD.sh +# récupéré avec git pull (dans le dossier database/update/). +# S'il y en a plusieurs, ils sont exécutés dans l'ordre chronologique. +# ---------------------------------------------------------------------------------------------------------------- + +# (Bash Arrays : cf https://www.cyberciti.biz/faq/finding-bash-shell-array-length-elements/) + +TEST=1 + +db_update_scripts_folder="../database/update" +db_update_scripts_folder_tmp=/tmp/database_update + +function abort() { + echo "******************************************************" + echo "!!! Script aborté à cause d'une erreur d'exécution !!!" + echo "******************************************************" + exit 1 +} + +# TEST only +[[ $TEST == 1 ]] && (rm ../database/update/test.txt ; rm ../database/update/db-update-2017-08-24.sh ; rm ../database/update/db-update-2017-08-25.sh) + + + +# 0) Sauvegarde de l'état actuel du dossier database/update/ (dans /tmp) +#db_update_scripts_before=( "key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10" ) +rm -rf $db_update_scripts_folder_tmp/ || abort +mkdir $db_update_scripts_folder_tmp/ || abort +cp -fp $db_update_scripts_folder/db-update-????-??-??.sh $db_update_scripts_folder_tmp/ || abort +cd $db_update_scripts_folder_tmp/ || abort +db_update_scripts_before=$(ls -1 db-update-????-??-??.sh) || abort +cd - >/dev/null || abort +#echo ; echo ${db_update_scripts_before[@]} + + + +# 1) Mise à jour du code source (git pull) +#db_update_scripts_after=( "key1" "key2" "key3" "key4" "key5" "key6" "key7" "key8" "key9" "key10" "key0" "key11" ) +echo +echo "* Mise à jour du code source (git pull) (o/n) ? [o]" +read do_it ; [[ -z $do_it ]] && do_it="o" ; echo $do_it +[[ $do_it != "o" ]] && exit 0 + +cd ../ || abort +git pull || abort +cd - >/dev/null || abort + +# TEST only +[[ $TEST == 1 ]] && (touch ../database/update/test.txt ; touch ../database/update/db-update-2017-08-24.sh ; touch ../database/update/db-update-2017-08-25.sh) + +cd $db_update_scripts_folder/ || abort +db_update_scripts_after=$(ls -1 db-update-????-??-??.sh) || abort +cd - >/dev/null || abort +#echo ; echo ${db_update_scripts_after[@]} +echo "=> Fait" + + + +# 2) (Optionnel) Mise a jour de la BD (seulement s'il y a au moins 1 nouveau script db-update-YYYY-MM-DD.sh dans database/update/) +db_update_scripts_new=$( echo ${db_update_scripts_before[@]} ${db_update_scripts_after[@]} | tr ' ' '\n' | sort | uniq -u ) || abort +#temp=() ; for t in ${db_update_scripts_new[@]} ; do temp+=($t) ; done ; temp+=('toto') ; db_update_scripts_new=$temp +#echo ${#db_update_scripts_new[@]} ; echo ${db_update_scripts_new[@]} +# Pas de nouveau script de mise à jour BD à exécuter => exit +[[ $db_update_scripts_new == '' ]] && exit 0 +#nb_scripts=${#db_update_scripts_new[@]} +#[[ $nb_scripts == 0 ]] && exit 0 + +echo +echo "* Mise à jour de la Base de Données :" +echo "Voici le(s) script(s) à exécuter :" +echo ${db_update_scripts_new[@]} +cd $db_update_scripts_folder/ || abort +for db_update_script_new in ${db_update_scripts_new[@]} ; do + echo ; echo + echo "- Execution du script de mise à jour de la BD $db_update_scripts_folder/$db_update_script_new (o/n) ? [o]" + read do_it ; [[ -z $do_it ]] && do_it="o" ; echo $do_it + if [[ $do_it == "o" ]] ; then + #ls -l ./$db_update_script_new_ || abort + ./$db_update_script_new || abort + fi +done +cd - >/dev/null + +echo +echo "=> Fait" + diff --git a/src/Model/Entity/Materiel.php b/src/Model/Entity/Materiel.php index 55b22f5..7358921 100755 --- a/src/Model/Entity/Materiel.php +++ b/src/Model/Entity/Materiel.php @@ -73,4 +73,61 @@ class Materiel extends Entity '*' => true, 'id' => false ]; + + /* 14/1/19 bake autogenerated: + protected $_accessible = [ + 'designation' => true, + 'sur_categorie_id' => true, + 'categorie_id' => true, + 'sous_categorie_id' => true, + 'numero_laboratoire' => true, + 'description' => true, + 'materiel_administratif' => true, + 'materiel_technique' => true, + 'status' => true, + 'date_acquisition' => true, + 'prix_ht' => true, + 'eotp' => true, + 'numero_commande' => true, + 'code_comptable' => true, + 'numero_serie' => true, + 'groupes_thematique_id' => true, + 'groupes_metier_id' => true, + 'numero_inventaire_organisme' => true, + 'numero_inventaire_old' => true, + 'date_archivage' => true, + 'etiquette' => true, + 'lieu_detail' => true, + 'nom_responsable' => true, + 'email_responsable' => true, + 'gestionnaire_id' => true, + 'nom_createur' => true, + 'nom_modificateur' => true, + 'created' => true, + 'modified' => true, + 'date_reception' => true, + 'organisme_id' => true, + 'site_id' => true, + 'date_fin_garantie' => true, + 'duree_garantie' => true, + 'unite_duree_garantie' => true, + 'hors_service' => true, + 'photo_id' => true, + 'metrologie' => true, + 'fournisseur_id' => true, + 'sur_category' => true, + 'category' => true, + 'sous_category' => true, + 'groupes_thematique' => true, + 'groupes_metier' => true, + 'organisme' => true, + 'site' => true, + 'documents' => true, + 'emprunts' => true, + 'suivis' => true, + 'fournisseur' => true, + 'user' => true + ]; + */ + } diff --git a/src/Model/Table/MaterielsTable.php b/src/Model/Table/MaterielsTable.php index b15acf8..95ccf71 100755 --- a/src/Model/Table/MaterielsTable.php +++ b/src/Model/Table/MaterielsTable.php @@ -1,6 +1,7 @@ table('materiels'); - $this->displayField('id'); - $this->primaryKey('id'); + + $this->setTable('materiels'); + $this->setDisplayField('id'); + $this->setPrimaryKey('id'); + //$this->table('materiels'); + //$this->displayField('id'); + //$this->primaryKey('id'); + $this->addBehavior('Timestamp'); + $this->belongsTo('SurCategories', [ 'foreignKey' => 'sur_categorie_id' ]); @@ -83,10 +101,22 @@ class MaterielsTable extends AppTable 'foreignKey' => 'fournisseur_id' ]); - // EP 9/6/17 added : + // 9/6/17 EP added : $this->belongsTo('Users', [ 'foreignKey' => 'gestionnaire_id' ]); + // 14/1/19 cake bake auto added: + /* + $this->belongsTo('Gestionnaires', [ + 'foreignKey' => 'gestionnaire_id' + ]); + */ + $this->belongsTo('Photos', [ + 'foreignKey' => 'photo_id' + ]); + + + } /** @@ -98,6 +128,7 @@ class MaterielsTable extends AppTable */ public function validationDefault(Validator $validator) { + $dateValide = function ($entity) { $time = Time::now(); // On récupère la date et l'heure actuelles $today = (new date("$time->year-$time->month-$time->day"))->format('Ymd'); // On extrait la date on la formatte en un format comparable de type 20171231 @@ -114,10 +145,15 @@ class MaterielsTable extends AppTable ]); $validator->notEmpty('sur_categorie_id', 'Vous devez sélectionner une valeur'); $validator->notEmpty('categorie_id', 'Vous devez sélectionner une valeur'); - $validator->allowEmpty('numero_laboratoire')->add('numero_laboratoire', 'unique', [ + $validator + //->scalar('numero_laboratoire') + ->maxLength('numero_laboratoire', 20) + ->allowEmpty('numero_laboratoire') + ->add('numero_laboratoire', 'unique', [ 'rule' => 'validateUnique', 'provider' => 'table' ]); + $validator->allowEmpty('description')->add('description', 'valid', [ 'rule' => 'check_string_with_some_special_cars', 'message' => 'Ce champ contient des caractères interdits', @@ -210,7 +246,16 @@ class MaterielsTable extends AppTable $validator->allowEmpty('gestionnaire_id'); // ->notEmpty('gestionnaire_id', 'Ce champ doit être rempli'); $validator->allowEmpty('nom_createur'); - $validator->allowEmpty('nom_modificateur'); + $validator + ->maxLength('nom_modificateur', 45) + ->allowEmpty('nom_modificateur'); + /* 14/1/19 cake bake autogenerated: + $validator + ->scalar('nom_modificateur') + ->maxLength('nom_modificateur', 45) + ->allowEmpty('nom_modificateur'); + */ + $validator->allowEmpty('date_reception'); $validator->allowEmpty('date_fin_garantie'); $validator->allowEmpty('duree_garantie'); @@ -305,6 +350,11 @@ class MaterielsTable extends AppTable $rules->add($rules->existsIn([ 'site_id' ], 'Sites')); + // 14/1/19 bake autoadded: + //$rules->add($rules->existsIn(['gestionnaire_id'], 'Gestionnaires')); + //$rules->add($rules->existsIn(['photo_id'], 'Photos')); + $rules->add($rules->existsIn(['fournisseur_id'], 'Fournisseurs')); + return $rules; } diff --git a/tests/Fixture/MaterielsFixture.php b/tests/Fixture/MaterielsFixture.php index 8334624..d31d914 100755 --- a/tests/Fixture/MaterielsFixture.php +++ b/tests/Fixture/MaterielsFixture.php @@ -556,6 +556,52 @@ class MaterielsFixture extends TestFixture { * @var array */ public $records = [ + + /* 14/1/19 bake autogenerated + [ + 'id' => 1, + 'designation' => 'Lorem ipsum dolor sit amet', + 'sur_categorie_id' => 1, + 'categorie_id' => 1, + 'sous_categorie_id' => 1, + 'numero_laboratoire' => 'Lorem ipsum dolor ', + 'description' => 'Lorem ipsum dolor sit amet, aliquet feugiat. Convallis morbi fringilla gravida, phasellus feugiat dapibus velit nunc, pulvinar eget sollicitudin venenatis cum nullam, vivamus ut a sed, mollitia lectus. Nulla vestibulum massa neque ut et, id hendrerit sit, feugiat in taciti enim proin nibh, tempor dignissim, rhoncus duis vestibulum nunc mattis convallis.', + 'materiel_administratif' => 1, + 'materiel_technique' => 1, + 'status' => 'Lorem ipsum d', + 'date_acquisition' => '2019-01-14', + 'prix_ht' => 1, + 'eotp' => 'Lorem ipsum dolor sit amet', + 'numero_commande' => 'Lorem ipsum dolor sit amet', + 'code_comptable' => 'Lorem ipsum dolor sit amet', + 'numero_serie' => 'Lorem ipsum dolor sit amet', + 'groupes_thematique_id' => 1, + 'groupes_metier_id' => 1, + 'numero_inventaire_organisme' => 'Lorem ipsum dolor sit amet', + 'numero_inventaire_old' => 'Lorem ipsum dolor sit amet', + 'date_archivage' => '2019-01-14', + 'etiquette' => 1, + 'lieu_detail' => 'Lorem ipsum dolor sit amet', + 'nom_responsable' => 'Lorem ipsum dolor sit amet', + 'email_responsable' => 'Lorem ipsum dolor sit amet', + 'gestionnaire_id' => 1, + 'nom_createur' => 'Lorem ipsum dolor sit amet', + 'nom_modificateur' => 'Lorem ipsum dolor sit amet', + 'created' => '2019-01-14 14:14:39', + 'modified' => '2019-01-14 14:14:39', + 'date_reception' => '2019-01-14', + 'organisme_id' => 1, + 'site_id' => 1, + 'date_fin_garantie' => '2019-01-14', + 'duree_garantie' => 1, + 'unite_duree_garantie' => 'Lorem ipsum dolor sit amet', + 'hors_service' => 1, + 'photo_id' => 1, + 'metrologie' => 1, + 'fournisseur_id' => 1 + ], + */ + [ 'id' => 1, 'designation' => 'matos 1 USER (C)', diff --git a/tests/TestCase/Model/Table/MaterielsTableTest.php b/tests/TestCase/Model/Table/MaterielsTableTest.php index 38b6b73..5b4b7cd 100755 --- a/tests/TestCase/Model/Table/MaterielsTableTest.php +++ b/tests/TestCase/Model/Table/MaterielsTableTest.php @@ -37,8 +37,14 @@ class MaterielsTableTest extends TestCase 'app.suivis', 'app.emprunts', 'app.fournisseurs', - 'app.unites' + 'app.unites', + // 14/1/19 bake autogenerated: + 'app.type_suivis', + 'app.type_documents', + 'app.fichemetrologiques', + //'app.mesures', ]; + /** * setUp method @@ -48,7 +54,9 @@ class MaterielsTableTest extends TestCase public function setUp() { parent::setUp(); - $config = TableRegistry::exists('Materiels') ? [] : ['className' => 'App\Model\Table\MaterielsTable']; + // 14/1/19 bake autogenerated: + $config = TableRegistry::exists('Materiels') ? [] : ['className' => MaterielsTable::class]; + //$config = TableRegistry::exists('Materiels') ? [] : ['className' => 'App\Model\Table\MaterielsTable']; $this->Materiels = TableRegistry::get('Materiels', $config); } @@ -65,6 +73,47 @@ class MaterielsTableTest extends TestCase } /** + * Test initialize method + * + * @return void + public function testInitialize() + { + $this->markTestIncomplete('Not implemented yet.'); + } + */ + + /** + * Test validationDefault method + * + * @return void + public function testValidationDefault() + { + $this->markTestIncomplete('Not implemented yet.'); + } + */ + + /** + * Test buildRules method + * + * @return void + public function testBuildRules() + { + $this->markTestIncomplete('Not implemented yet.'); + } + */ + + /** + * Test beforeSave method + * + * @return void + public function testBeforeSave() + { + $this->markTestIncomplete('Not implemented yet.'); + } + */ + + + /** * Test check_string method * * @return void -- libgit2 0.21.2