setTable('emprunts'); $this->setDisplayField('id'); $this->setPrimaryKey('id'); $this->addBehavior('Timestamp'); $this->belongsTo('Materiels', [ 'foreignKey' => 'materiel_id', 'joinType' => 'INNER' ]); $this->belongsTo('Sites', [ 'foreignKey' => 'site_id' ]); } /** * Default validation rules. * * @param \Cake\Validation\Validator $validator * Validator instance. * @return \Cake\Validation\Validator */ public function validationDefault(Validator $validator) { $validator->integer('id')->allowEmpty('id', 'create'); $validator->notEmpty('date_emprunt', 'Une date d\'emprunt doit être saisi'); $validator->notEmpty('date_retour_emprunt', 'Une date de retour doit être saisie'); $validator->boolean('emprunt_interne')->allowEmpty('emprunt_interne'); //$validator->notEmpty('nom_emprunteur_int', 'Le champ doit être rempli'); $validator->notEmpty('nom_emprunteur_int', 'Le champ doit être rempli', function ($context) { //dump($context); //if ($context['providers']['entity']['emprunt_interne'] !== null) { if ( !empty($context['data']) && !is_null($context['data']['emprunt_interne']) ) { return $context['data']['emprunt_interne']; //return $context['providers']['entity']['emprunt_interne']; } }); //$validator->notEmpty('email_emprunteur_int', "Cet Email n'est pas valide"); $validator->notEmpty('email_emprunteur_int', "Cet Email n'est pas valide", function ($context) { //if ($context['providers']['entity']['emprunt_interne'] !== null) { if ( !empty($context['data']) && !is_null($context['data']['emprunt_interne']) ) { return $context['data']['emprunt_interne']; //return $context['providers']['entity']['emprunt_interne']; } }); $validator->notEmpty('e_lieu_detail', 'Le champ doit être rempli pour un emprunt interne.', function ($context) { //if ($context['providers']['entity']['emprunt_interne'] !== null) { if ( !empty($context['data']) && !is_null($context['data']['emprunt_interne']) ) { return $context['data']['emprunt_interne']; //return $context['providers']['entity']['emprunt_interne']; } } )->add('e_lieu_detail', 'valid', [ 'rule' => [ 'check_string' ], 'message' => 'Le champ doit être valide.', 'provider' => 'table' ]); $validator->notEmpty('laboratoire', 'Le champ doit être rempli pour un emprunt externe.', function ($context) { if ( !empty($context['data']) && !is_null($context['data']['emprunt_interne']) ) { return ! $context['data']['emprunt_interne']; } } )->add('laboratoire', 'valid', [ 'rule' => [ 'check_string' ], 'message' => 'Le champ doit être valide.', 'provider' => 'table' ]); //$validator->notEmpty('nom_emprunteur_ext', 'Le champ doit être rempli'); $validator->notEmpty('nom_emprunteur_ext', 'Le champ doit être rempli.', function ($context) { //debug($context); //if ($context['providers']['entity']['emprunt_interne'] !== null) { if ( !empty($context['data']) && !is_null($context['data']['emprunt_interne']) ) { return ! $context['data']['emprunt_interne']; //return $context['providers']['entity']['emprunt_interne']; } } ); //$validator->notEmpty('email_emprunteur_ext', "Cet Email n'est pas valide"); $validator->notEmpty('email_emprunteur_ext', 'Cet Email n\'est pas valide.', function ($context) { if ( !empty($context['data']) && !is_null($context['data']['emprunt_interne']) ) { return ! $context['data']['emprunt_interne']; /* * if (!$context['data']['emprunt_interne']) { * return (Validation::email($context['data']['email_emprunteur_ext'])); * } */ } } ); $validator->allowEmpty('commentaire')->add('commentaire', 'valid', [ 'rule' => [ 'check_string_with_some_special_cars' ], 'message' => 'Le champ doit être valide.', 'provider' => 'table' ]); return $validator; } /** * Returns a rules checker object that will be used for validating * application integrity. * * @param \Cake\ORM\RulesChecker $rules * The rules object to be modified. * @return \Cake\ORM\RulesChecker */ public function buildRules(RulesChecker $rules) { $checkReturnDateIsAfterLoanDate = function ($entity) { $dateEmprunt = $entity->date_emprunt; $dateRetour = $entity->date_retour_emprunt; $dateEmprunt = explode("/", $dateEmprunt); $dateRetour = explode("/", $dateRetour); $dateEmprunt = $dateEmprunt[2] . $dateEmprunt[1] . $dateEmprunt[0]; $dateRetour = $dateRetour[2] . $dateRetour[1] . $dateRetour[0]; if ($dateEmprunt > $dateRetour) { return false; } return true; }; $rules->add($checkReturnDateIsAfterLoanDate, [ 'errorField' => 'date_retour_emprunt', 'message' => 'La date de retour doit être postérieure à la date de l\'emprunt.' ]); $rules->add($rules->existsIn([ 'materiel_id' ], 'Materiels')); $rules->add($rules->existsIn([ 'site_id' ], 'Sites')); return $rules; } public function beforeSave($event, $entity, $options) { if (! empty($entity->toArray())) { $name = ''; $email = ''; // EMPRUNT INTERNE ? if ($entity->get('emprunt_interne') == 1) { $name = $entity->get('nom_emprunteur_int'); $email = $entity->get('email_emprunteur_int'); } // EMPRUNT EXTERNE else { $name = $entity->get('nom_emprunteur_ext'); $email = $entity->get('email_emprunteur_ext'); } $entity->set('nom_emprunteur', $name); $entity->set('email_emprunteur', $email); } if (empty($entity->get('date_emprunt'))) { $entity->set('date_emprunt', null); } if (empty($entity->get('date_retour_emprunt'))) { $entity->set('date_retour_emprunt', null); } return true; } }