diff --git a/CHANGELOG b/CHANGELOG index 1f85935..d7fd7e7 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -331,11 +331,15 @@ Commencer à implémenter le nouveau workflow v5 : ======= CHANGES ======= ------- +31/05/2021 v4.108.21-3.7.9 + - Ajout asterisque sur nouveaux champs obligatoires pour LOT1 : description, organisme, budgets + - (Refactorisation des LOT1 et LOT2 dans MaterielsTable, plus de redondance) + +------- 05/05/2021 v4.108.20-3.7.9 - Responsable voyait les menus "Outils" ou "Autres listes" alors qu'il ne peut pas y accéder... - Suppression message debug... - ------- 04/05/2021 v4.108.19-3.7.9 - Bugfix : Responsable du crédit ne doit pas être obligatoire pour le LOT1 (création de la fiche matériel) car = acheteur par défaut diff --git a/README.md b/README.md index a6f0c84..d537989 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,8 @@ Logiciel testé et validé sur les configurations suivantes : -------------------------------------------------------------------------------------------- -Date: 05/05/2021 -Version: v4.108.20-3.7.9 +Date: 31/05/2021 +Version: v4.108.21-3.7.9 diff --git a/src/Controller/MaterielsController.php b/src/Controller/MaterielsController.php index 3df670d..b1907ce 100755 --- a/src/Controller/MaterielsController.php +++ b/src/Controller/MaterielsController.php @@ -1856,6 +1856,8 @@ class MaterielsController extends AppController { $this->myDebug("step 3: MaterielsController.add_or_edit()"); $IS_EDIT = !$IS_ADD; + //debug($this->Materiels->MANDATORY_FIELDS); + /* * (EP 20201207) * @@ -2112,83 +2114,15 @@ class MaterielsController extends AppController { */ // Attributs obligatoires pour la phase COMMANDE - $LOT1 = [ - - // Infos toujours obligatoires (cachées car calculées automatiquement) - //'status', - //'tobeordered', - - //'hors_service', // O/N - - 'designation' => 'Désignation', - - //'permanent', - //'will_stay', // O/N - - 'sur_categorie_id' => 'Domaine', - 'categorie_id' => 'Catégorie', - - // Calculé auto au moment du save() - //'numero_laboratoire', - - 'description' => 'Description', - 'prix_ht' => 'Prix HT', - - 'nom_responsable' => 'Nom du responsable', - // Calculé auto - 'email_responsable' => 'Email du responsable', - - // Optionnel car par défaut = acheteur - //'resp_credit' => 'Responsable du crédit', - - 'nom_user' => "Nom de l'utilisateur de ce matériel", - - //TODO: a remettre ? avec "je ne sais pas" - /////'gestionnaire_id' => 'Gestionnaire de référence', - - 'organisme_id' => 'Organisme', - - //'fournisseur', - - //'devis joint', - - // Utilisé par la Gestion pour remplir le champ eotp - 'budgets' => 'Budgets', - - // INFOS ADMINISTRATIVES - // - EOTP : obligatoire seulement dans LOT2 - //'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) - - ]; + $LOT1 = $this->Materiels->MANDATORY_FIELDS_LOT1; // Attributs obligatoires pour la phase VALIDATION (livré et payé) - $LOT2 = [ - - 'fournisseur_id' => 'Fournisseur', - - 'date_acquisition' => "Date d'achat", - - 'date_reception' => 'Date de livraison', - - //'etiquette', // O/N - - 'site_id' => 'Site', - - 'lieu_detail' => 'Lieu de stockage', - - // INFOS ADMINISTRATIVES : - - // La Gestion doit remplir ce champ a partir des infos qui sont dans le champ "budget" (rempli par acheteur) - 'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) - - 'numero_commande' => 'Num. BC', - 'numero_inventaire_organisme' => "N° inventaire de l'organisme", - - ]; + $LOT2 = $this->Materiels->MANDATORY_FIELDS_LOT2; + // Seulement si prix > 10K€ : exiger la facture jointe et le n° série if ($materiel->prix_ht > 10000) { //$LOT2[] = 'facture jointe'; - $LOT2[] = 'numero_serie'; + $LOT2['numero_serie'] = 'S/N'; } // LOT2 = LOT1 + LOT2; $LOT2 = array_merge($LOT1, $LOT2); @@ -2238,6 +2172,10 @@ class MaterielsController extends AppController { //$verb = $IS_ADD ? "ajouté" : "modifié"; //$action = $IS_ADD ? "add" : "edit"; //debug($materiel); exit; + + // (EP) pour provoquer une erreur de type "Action impossible" : + //$materiel->will_stay=null; + if (! $this->Materiels->save($materiel)) { //debug($this->Materiels->current_entity); exit; // (EP) Si ADD, l'id de la nouvelle entité a été mis à jour : diff --git a/src/Model/Table/MaterielsTable.php b/src/Model/Table/MaterielsTable.php index 1b7f8b9..aa701b6 100755 --- a/src/Model/Table/MaterielsTable.php +++ b/src/Model/Table/MaterielsTable.php @@ -54,6 +54,86 @@ class MaterielsTable extends AppTable private $LAST_SEUIL_INVENTORIABLE_DATE = '03/06/2020'; private $LAST_SEUIL_INVENTORIABLE; // 1000€ pour IRAP (depuis 3/6/2020) + + public $MANDATORY_FIELDS_LOT1 = [ + + // Infos toujours obligatoires (cachées car calculées automatiquement) + //'status', + //'tobeordered', + + //'hors_service', // O/N + + 'designation' => 'Désignation', + + 'description' => 'Description', + //'permanent', + //'will_stay', // O/N + + 'sur_categorie_id' => 'Domaine', + 'categorie_id' => 'Catégorie', + + // - Utilisateur + 'nom_user' => "Nom de l'utilisateur de ce matériel", + + // - Acheteur + 'nom_responsable' => 'Nom du responsable', + // (rempli automatiquement) + 'email_responsable' => 'Email du responsable', + + // Calculé auto au moment du save() + //'numero_laboratoire', + + 'organisme_id' => 'Organisme', + + 'prix_ht' => 'Prix HT', + + // Optionnel car par défaut = acheteur + //'resp_credit' => 'Responsable du crédit', + + + //TODO: a remettre ? avec "je ne sais pas" + /////'gestionnaire_id' => 'Gestionnaire de référence', + + + //'fournisseur', + + //'devis joint', + + // Utilisé par la Gestion pour remplir le champ eotp + 'budgets' => 'Budgets', + + // INFOS ADMINISTRATIVES + // - EOTP : obligatoire seulement dans LOT2 + //'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) + + ]; // $MANDATORY_FIELDS_LOT1 + + + public $MANDATORY_FIELDS_LOT2 = [ + + 'fournisseur_id' => 'Fournisseur', + + 'date_acquisition' => "Date d'achat", + + 'date_reception' => 'Date de livraison', + + //'etiquette', // O/N + + 'site_id' => 'Site', + + 'lieu_detail' => 'Lieu de stockage', + + // INFOS ADMINISTRATIVES : + + // La Gestion doit remplir ce champ a partir des infos qui sont dans le champ "budget" (rempli par acheteur) + 'eotp' => 'Entité(s) dépensière(s) (budget(s))', // ligne budgétaire (sur quel(s) budget(s)) ou entité(s) dépensière(s) + + 'numero_commande' => 'Num. BC', + 'numero_inventaire_organisme' => "N° inventaire de l'organisme", + + ]; + + public $ALL_STATUS = array( 'CREATED', 'VALIDATED', @@ -217,6 +297,11 @@ class MaterielsTable extends AppTable //public function validationDefault(Validator $validator) : Validator public function validationDefault(Validator $validator) //: Validator { + + // (EP 31/5/21) Champs obligatoires (LOT1) + foreach ($this->MANDATORY_FIELDS_LOT1 as $fname=>$fdisp) + $validator->allowEmptyString($fname, false, 'Ce champ doit être rempli'); + // Check date is dd/mm/yyyy /* $dateIsValid = function ($entity) { @@ -277,15 +362,15 @@ class MaterielsTable extends AppTable $f = 'designation'; $validator - ->notEmpty($f, 'Ce champ doit être rempli') + //->notEmpty($f, 'Ce champ doit être rempli') ->add($f, 'valid', [ 'rule' => 'check_string', 'message' => 'Ce champ contient des caractères interdits', 'provider' => 'table' ]); - $validator->notEmpty('sur_categorie_id', 'Vous devez sélectionner une valeur'); + //$validator->notEmpty('sur_categorie_id', 'Vous devez sélectionner une valeur'); - $validator->notEmpty('categorie_id', 'Vous devez sélectionner une valeur'); + //$validator->notEmpty('categorie_id', 'Vous devez sélectionner une valeur'); $f = 'numero_laboratoire'; $validator @@ -297,7 +382,15 @@ class MaterielsTable extends AppTable 'provider' => 'table' ]); - $validator->allowEmpty('description')->add('description', 'valid', [ + /* + //$validator->allowEmpty('description')->add('description', 'valid', [ + $validator->notEmpty('description')->add('description', 'valid', [ + 'rule' => 'check_string_with_some_special_cars', + 'message' => 'Ce champ contient des caractères interdits', + 'provider' => 'table' + ]); + */ + $validator->add('description', 'valid', [ 'rule' => 'check_string_with_some_special_cars', 'message' => 'Ce champ contient des caractères interdits', 'provider' => 'table' @@ -427,17 +520,17 @@ class MaterielsTable extends AppTable - $validator->numeric('prix_ht') - // (EP202010 prix obligatoire) - //->allowEmpty('prix_ht') - /* - ->add('prix_ht', 'valid', [ - 'rule' => 'check_string', - 'message' => 'Ce champ contient des caractères interdits', - 'provider' => 'table' - ]) - */ + $validator->numeric('prix_ht'); + // (EP202010 prix obligatoire) + //->allowEmpty('prix_ht') + /* + ->add('prix_ht', 'valid', [ + 'rule' => 'check_string', + 'message' => 'Ce champ contient des caractères interdits', + 'provider' => 'table' + ]) ; + */ $validator->allowEmpty('eotp')->add('eotp', 'valid', [ 'rule' => 'check_string', 'message' => 'Ce champ contient des caractères interdits', @@ -473,9 +566,12 @@ class MaterielsTable extends AppTable $validator->allowEmpty('photo_id'); $validator->boolean('etiquette')->allowEmpty('etiquette'); $validator->boolean('hors_service')->allowEmpty('hors_service'); - $validator-> - // ->notEmpty('site_id', 'Ce champ doit être rempli'); - allowEmpty('site_id'); + //$validator->notEmpty('site_id', 'Ce champ doit être rempli'); + //allowEmpty('site_id'); + //$validator->notEmpty('organisme_id','Ce champ doit être précisé'); + //$validator->notEmpty(['organisme_id', 'budgets'],'Ce champ doit être rempli'); + //$validator->allowEmptyString('organisme_id', false, 'Ce champ doit être rempli'); + //$validator->allowEmptyString('budgets', false, 'Ce champ doit être rempli'); $validator->allowEmpty('lieu_detail')->add('lieu_detail', 'valid', [ 'rule' => 'check_string', 'message' => 'Ce champ contient des caractères interdits', @@ -488,12 +584,15 @@ class MaterielsTable extends AppTable 'message' => 'Ce champ contient des caractères interdits', 'provider' => 'table' ]); - $validator->notEmpty('nom_responsable')->add('nom_responsable', 'valid', [ + //$validator->notEmpty('nom_responsable')->add('nom_responsable', 'valid', [ + $validator->add('nom_responsable', 'valid', [ 'rule' => 'check_string', 'message' => 'Ce champ contient des caractères interdits', 'provider' => 'table' ]); - $validator->allowEmpty('email_responsable')->email('email_responsable'); + //$validator->allowEmpty('email_responsable')->email('email_responsable'); + $validator->email('email_responsable'); + $validator->allowEmpty('gestionnaire_id'); // ->notEmpty('gestionnaire_id', 'Ce champ doit être rempli'); $validator->allowEmpty('nom_createur'); diff --git a/src/Template/Error/error400.ctp b/src/Template/Error/error400.ctp index 6929e52..faf4cb4 100755 --- a/src/Template/Error/error400.ctp +++ b/src/Template/Error/error400.ctp @@ -60,7 +60,7 @@ if (Configure::read('debug')) {
-

Action impossible

+

Action impossible (400)

-

Action impossible

+

Action impossible (500)

layout = false;
-

Action impossible

+

Action impossible (pdo)

- Cette action est impossible (pdo) + Cette action est impossible (pdo)

-- libgit2 0.21.2