EmpruntsTable.php 5.84 KB
<?php
namespace App\Model\Table;

use App\Model\Entity\Emprunt;
use Cake\ORM\Query;
use Cake\ORM\RulesChecker;
use Cake\ORM\Table;
use Cake\Validation\Validator;
use Cake\ORM\toArray;
use Cake\Validation\Validation;


/**
 * Emprunts Model
 *
 * @property \Cake\ORM\Association\BelongsTo $Materiels
 */
class EmpruntsTable extends AppTable
{

    /**
     * Initialize method
     *
     * @param array $config The configuration for the Table.
     * @return void
     */
    public function initialize(array $config)
    {
        parent::initialize($config);

        $this->table('emprunts');
        $this->displayField('id');
        $this->primaryKey('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.', function ($context) {
            	if (isset($context['data']['emprunt_interne'])) {
            		return $context['data']['emprunt_interne'];
            	}
            });
            
        $validator
             ->notEmpty('email_emprunteur_int', 'Cet Email n\'est pas valide.', function ($context) {
            		if (isset($context['data']['emprunt_interne'])) {
            			return $context['data']['emprunt_interne'];
            		}
            	});
            
        $validator
        	->notEmpty('e_lieu_detail', 'Le champ doit être rempli pour un emprunt interne.', function ($context) {
        		if (isset($context['data']['emprunt_interne'])) {
        			return $context['data']['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 (isset($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.', function ($context) {
        		if (isset($context['data']['emprunt_interne'])) {
        			return !$context['data']['emprunt_interne'];
        		}
			});

        $validator
            ->notEmpty('email_emprunteur_ext', 'Cet Email n\'est pas valide.', function ($context) {
            	if (isset($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;
    }
    



    
  
}