CakePHP-Fr.Org

Forum francophone du Framework CakePHP

Vous n'êtes pas identifié.

#1 17-10-2016 16:28:53

nvalyfofana
Eclair café
Date d'inscription: 15-06-2016
Messages: 43

Empêcher une insertion dans une table

Bonjour, j'ai développé une application de gestion de parc automobile avec CakePhp 3.2 .

J’utilise une table vehicule pour la liste de tous les véhicules qui sont dans le parc.
J’utilise une table mission pour la liste de toutes les missions effectuées par les véhicules.

Pour ce faire, je sélectionne d'abord le matricule du véhicule provenant de la table vehicule et après selection du matricule j'ai une autre interface qui s'affiche me permettant d'associer au matricule d'autres informations concernant la table mission et je valide les informations qui vont s’insérer dans la table mission.
Pour un véhicule qui sort du parc, son statut est à 0 (le véhicule est en mission) et lorsqu'il revient dans le parc son statut devient 1 (le véhicule a terminé sa mission).
En effet, lorsque le véhicule a pour statut 0, logiquement le véhicule ne doit pas être disponible pour une autre mission, or dans mon application, je peux encore sélectionner le véhicule qui n'est pas revenu dans le parc, ce qui n'est pas bon.

Comment faire???  Besoin d'aide




Voici mon controller de la table mission


<?php
namespace App\Controller;

use App\Controller\AppController;
use Cake\I18n\Date;
use Cake\I18n\Time;
use Cake\I18n\Number;

/**
* Missions Controller
*
* @property \App\Model\Table\MissionsTable $Missions
*/
class MissionsController extends AppController
{



     public $paginate = [
        'limit' => 1000
    ];

    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('Paginator');
        $this->Auth->allow([ 'view', 'display', 'preadd', 'preadd1', 'edit', 'edit1', 'index1', 'index', 'add', 'add1']);
    }


  /**  public function confirm()
    {
     //   $vehicule = $this->Vehicules->newEntity();
    //    $vehicule = $this->Vehicules->get($id, ['contain' => []]);

        $vehicules = $this->Missions->Vehicules->find('list', ['limit' => 200]);
        $this->set(compact('mission', 'vehicules', 'personnels', 'typemissions', 'communes', 'chauffeurs'));
        $this->set('_serialize', ['mission']);

         $vehicule = $this->Missions->Vehicules
            ->find()
            ->where(['id' => $this->request->data['vehicules_id']])
            ->first();

        $miss = $this->Missions
            ->find()
            ->where(['vehicules_id' => $this->request->data['vehicules_id']])
            ->order(['created' => 'DESC'])
            ->first();

        $missd = $this->Missions
            ->find()
            ->where(['vehicules_id' => $this->request->data['vehicules_id']])
            ->order(['created' => 'DESC'])
            ->first();


    }  **/



    public function index()
    {
        $this->paginate = ['limit' => 2000,
            'contain' => ['Vehicules',
            'Personnels' => ['Services'],
            'Typemissions', 'Communes', 'Chauffeurs'],
            'conditions' => ['Missions.typemissions_id' => 2],
            'order' => ['Missions.id' => 'DESC']
           
        ];


      //  $mission->dateheuresortie = $mission->dateheuresortie->format('Y-m-d H:i');
      //  $mission->dateheuresortie = $mission->dateheuresortie->format('Y-m-d H:i');



/** $this->Mission->Personnel->name->find('all', array('joins' => array(
        array(
            'table' => '',
            'type' => 'inner',
            'conditions'=> array('Mission.personnel_id = Personnel.id' AND 'chauffeur' => 1)
            )))) **/

        $missions = $this->paginate($this->Missions, ['contain' => 'Personnels']);
        $this->set(compact('missions'));
        $this->set('_serialize', ['missions']);

    }


    public function view($id = null)
    {
        $mission = $this->Missions->get($id, [
            'contain' => ['Vehicules', 'Personnels', 'Typemissions', 'Communes', 'Chauffeurs']
        ]);

        $this->set('mission', $mission);
        $this->set('_serialize', ['mission']);
    }


    public function preadd()
    {
        $mission = $this->Missions->newEntity();
        $vehicules = $this->Missions->Vehicules->find('list');
        $this->set(compact('vehicules', 'mission'));
        $this->set('_serialize', ['mission']);

/**   $vehicules = $this->Missions
    ->find()
    ->select(['vehicules_id'])
    ->where(['Missions.vehicules_id' => 'Vehicules.id'])
    ->orwhere(['statut' => 1]);
   
     $this->set(compact('vehicules', 'missions'));
     $this->set('mission', $missions);
     $this->set('_serialize', ['mission']);
     debug(); **/
}

    public function add()
    {
        $mission = $this->Missions->newEntity();
   //     $vehicule = $this->Vehicules->newEntity();
        if ($this->request->is('post')) {
            $mission = ($this->Missions->patchEntity($mission, $this->request->data));

            if ($this->Missions->save($mission)) {
                $this->Flash->success(__('The mission has been saved.'));
                return $this->redirect(['action' => 'index']);
            } else {
                $this->Flash->error(__('The mission could not be saved. Please, try again.'));
            }
        }
       


        $vehicule = $this->Missions->Vehicules
            ->find()
            ->where(['id' => $this->request->data['vehicules_id']])
            ->first();

        $miss = $this->Missions
            ->find()
            ->where(['vehicules_id' => $this->request->data['vehicules_id']])
            ->order(['created' => 'DESC'])
            ->first();

        $missd = $this->Missions
            ->find()
            ->where(['vehicules_id' => $this->request->data['vehicules_id']])
            ->order(['created' => 'DESC'])
            ->first();


  /**      $personnels = $this->Missions->Personnels->find('list', [
             'keyField' => 'name',
             'valueField' => 'prenompersonnel'
           //  'valueField' => 'CONCAT(name, " ", prenompersonnel)'
           //  'valueField' => 'name'
             ], ['limit' => 200]);  **/

//       $mission->dateheuresortie = $mission->dateheuresortie->format('Y-m-d H:i');
  //      $mission->dateheureretour = $mission->dateheureretour->format('Y-m-d H:i');
  //        $time1 = new Time($mission->dateheureretour);

        $personnels = $this->Missions->Personnels->find('list', ['limit' => 2000]);
        $chauffeurs = $this->Missions->Chauffeurs->find('list', ['limit' => 2000]);
       
        $typemissions = $this->Missions->Typemissions->find('list', ['limit' => 2000]);
        $communes = $this->Missions->Communes->find('list', ['limit' => 2000]);
        $this->set(compact('mission', 'vehicule', 'personnels', 'typemissions', 'communes', 'chauffeurs'));
        $this->set(compact('mission', 'miss'));
        $this->set(compact('mission', 'missd'));
        $this->set('_serialize', ['mission']);


        $query = $this->Missions->find('all', ['conditions'  => ['vehicules_id' => '1'] ]);
        $number = $query->count();
   // ->where(['id =' => 1]);
  //  ->contain(['missions', 'Vehicules'])
   // ->limit(10);
    }


    public function edit($id = null)
    {
        $mission = $this->Missions->get($id, [
            'contain' => []
        ]);
        if ($this->request->is(['patch', 'post', 'put'])) {
            $mission = $this->Missions->patchEntity($mission, $this->request->data);
            if ($this->Missions->save($mission)) {
                $this->Flash->success(__('The mission has been saved.'));
                return $this->redirect(['action' => 'index1']);
            } else {
                $this->Flash->error(__('The mission could not be saved. Please, try again.'));
            }     
        }

        $mission->dateheuresortie = $mission->dateheuresortie->format('Y-m-d H:i');
    //    $mission->dateprevueretour = $mission->dateprevueretour->format('Y-m-d H:i');



        $vehicules = $this->Missions->Vehicules->find('list', ['limit' => 200]);
        $chauffeurs = $this->Missions->Chauffeurs->find('list', ['limit' => 200]);
        $personnels = $this->Missions->Personnels->find('list', ['limit' => 200]);
        $typemissions = $this->Missions->Typemissions->find('list', ['limit' => 200]);
        $communes = $this->Missions->Communes->find('list', ['limit' => 200]);
        $this->set(compact('mission', 'vehicules', 'personnels', 'typemissions', 'communes', 'chauffeurs'));
        $this->set('_serialize', ['mission']);

    }


    public function delete($id = null)
    {
        $this->request->allowMethod(['post', 'delete']);
        $mission = $this->Missions->get($id);
        if ($this->Missions->delete($mission)) {
            $this->Flash->success(__('The mission has been deleted.'));
        } else {
            $this->Flash->error(__('The mission could not be deleted. Please, try again.'));
        }
        return $this->redirect(['action' => 'index']);
    }


  public function statutNok($id = null) {
        if (!$this->Mission->exists($id)) {
            throw new NotFoundException(__('Invalid missions info'));
        }
       $this->Mission->id = $id;
       $this->Mission->saveField('statut', '0');
       $this->Session->setFlash(__('Mission en cours'));
       $this->redirect(array('action' => 'index'));
    }   
   

  public function statutok($id = null) {
        if (!$this->Mission->exists($id)) {
            throw new NotFoundException(__('Invalid missions info'));
        }
      $this->Mission->id = $id;
      $this->Mission->saveField('statut', '1');
      $this->Session->setFlash(__('Mission cloturée'));
      $this->redirect(array('action' => 'index'));
    }


//////////////////////////////////*******************************/////////////////////////////////////////////

    public function index1()
    {
        $this->paginate = ['limit' => 2000,
            'contain' => ['Vehicules',
            'Personnels' => ['Services'],
            'Typemissions', 'Communes', 'Chauffeurs'],
            'conditions' => ['Missions.typemissions_id' => 1],
            'order' => ['Missions.id DESC']
        ];

/** $this->Mission->Personnel->name->find('all', array('joins' => array(
        array(
            'table' => '',
            'type' => 'inner',
            'conditions'=> array('Mission.personnel_id = Personnel.id' AND 'chauffeur' => 1)
            )))) **/

        $missions = $this->paginate($this->Missions, ['contain' => 'Personnels']);
        $this->set(compact('missions'));
        $this->set('_serialize', ['missions']);

    }


    public function view1($id = null)
    {
        $mission = $this->Missions->get($id, [
            'contain' => ['Vehicules', 'Personnels', 'Typemissions', 'Communes', 'Chauffeurs']
        ]);

        $this->set('mission', $mission);
        $this->set('_serialize', ['mission']);
    }


    public function preadd1()
    {
        $mission = $this->Missions->newEntity();
        $vehicules = $this->Missions->Vehicules->find('list');
        $this->set(compact('vehicules', 'mission'));
        $this->set('_serialize', ['mission']);
    }

    public function add1()
    {
        $mission = $this->Missions->newEntity();
        if ($this->request->is('post')) {
            $mission = $this->Missions->patchEntity($mission, $this->request->data, [
                'associated' => [
                    'Missions2', 'Chauffeurs'
                ]]);
            if ($this->Missions->save($mission)) {
                $this->Flash->success(__('The mission has been saved.'));
                return $this->redirect(['action' => 'index1']);
            } else {
                $this->Flash->error(__('The mission could not be saved. Please, try again.'));
            }
        }


        $vehicule = $this->Missions->Vehicules
            ->find()
            ->where(['id' => $this->request->data['vehicules_id']])
            ->first();

        $miss = $this->Missions
            ->find()
            ->where(['vehicules_id' => $this->request->data['vehicules_id']])
            ->order(['created' => 'DESC'])
            ->first();

        $missd = $this->Missions
            ->find()
            ->where(['vehicules_id' => $this->request->data['vehicules_id']])
            ->order(['created' => 'DESC'])
            ->first();



  /**      $personnels = $this->Missions->Personnels->find('list', [
             'keyField' => 'name',
             'valueField' => 'prenompersonnel'
           //  'valueField' => 'CONCAT(name, " ", prenompersonnel)'
           //  'valueField' => 'name'
             ], ['limit' => 200]);  **/

        $personnels = $this->Missions->Personnels->find('list', ['limit' => 2000]);
        $chauffeurs = $this->Missions->Chauffeurs->find('list', ['limit' => 2000]);
       
        $typemissions = $this->Missions->Typemissions->find('list', ['limit' => 2000]);
        $communes = $this->Missions->Communes->find('list', ['limit' => 2000]);
        $this->set(compact('mission', 'vehicule', 'personnels', 'typemissions', 'communes', 'chauffeurs'));
        $this->set(compact('mission', 'miss'));
        $this->set(compact('mission', 'missd'));
        $this->set('_serialize', ['mission']);


        $query = $this->Missions->find('all', ['conditions'  => ['vehicules_id' => '1'] ]);
        $number = $query->count();
    }

    public function edit1($id = null)
    {
        $mission = $this->Missions->get($id, [
            'contain' => []
        ]);
        if ($this->request->is(['patch', 'post', 'put'])) {
            $mission = $this->Missions->patchEntity($mission, $this->request->data);
            if ($this->Missions->save($mission)) {
                $this->Flash->success(__('The mission has been saved.'));
                return $this->redirect(['action' => 'index1']);
            } else {
                $this->Flash->error(__('The mission could not be saved. Please, try again.'));
            }     
        }

        $mission->dateheuresortie = $mission->dateheuresortie->format('Y-m-d H:i');
        $mission->dateprevueretour = $mission->dateprevueretour->format('Y-m-d H:i');



        $vehicules = $this->Missions->Vehicules->find('list', ['limit' => 200]);
        $chauffeurs = $this->Missions->Chauffeurs->find('list', ['limit' => 200]);
        $personnels = $this->Missions->Personnels->find('list', ['limit' => 200]);
        $typemissions = $this->Missions->Typemissions->find('list', ['limit' => 200]);
        $communes = $this->Missions->Communes->find('list', ['limit' => 200]);
        $this->set(compact('mission', 'vehicules', 'personnels', 'typemissions', 'communes', 'chauffeurs'));
        $this->set('_serialize', ['mission']);

    }

/////////////////////////////////*******************************//////////////////////////////////////////////

}


Voici mon interface pour la sélection du véhicule


<!--<nav class="large-3 medium-4 columns" id="actions-sidebar">
    <ul class="side-nav">
        <li class="heading"><?= __('Actions') ?></li>
        <li><?= $this->Html->link(__('List Missions'), ['action' => 'index']) ?></li>
        <li><?= $this->Html->link(__('List Vehicules'), ['controller' => 'Vehicules', 'action' => 'index']) ?></li>
        <li><?= $this->Html->link(__('New Vehicule'), ['controller' => 'Vehicules', 'action' => 'add']) ?></li>
        <li><?= $this->Html->link(__('List Personnels'), ['controller' => 'Personnels', 'action' => 'index']) ?></li>
        <li><?= $this->Html->link(__('New Personnel'), ['controller' => 'Personnels', 'action' => 'add']) ?></li>
        <li><?= $this->Html->link(__('List Typemissions'), ['controller' => 'Typemissions', 'action' => 'index']) ?></li>
        <li><?= $this->Html->link(__('New Typemission'), ['controller' => 'Typemissions', 'action' => 'add']) ?></li>
        <li><?= $this->Html->link(__('List Communes'), ['controller' => 'Communes', 'action' => 'index']) ?></li>
        <li><?= $this->Html->link(__('New Commune'), ['controller' => 'Communes', 'action' => 'add']) ?></li>
    </ul>
</nav>
</nav>
<div class="missions form large-9 medium-8 columns content">
    <?= $this->Form->create($mission) ?>
    <fieldset>
        <legend><?= __('Add Mission') ?></legend>
        <?php
            echo $this->Form->input('vehicules_id', ['options' => $vehicules]);
            echo $this->Form->input('personnels_id', ['options' => $personnels]);
            echo $this->Form->input('typemissions_id', ['options' => $typemissions]);
            echo $this->Form->input('communes_id', ['options' => $communes]);
            echo $this->Form->input('chauffeur');
            echo $this->Form->input('name');
            echo $this->Form->input('numordremission');
            echo $this->Form->input('dateheuresortie', ['empty' => true]);
            echo $this->Form->input('kilometragesortie');
            echo $this->Form->input('dateprevueretour', ['empty' => true]);
            echo $this->Form->input('dateheureretour', ['empty' => true]);
            echo $this->Form->input('kilometrageretour');
            echo $this->Form->input('statut');
        ?>
    </fieldset>
    <?= $this->Form->button(__('Submit')) ?>
    <?= $this->Form->end() ?>
</div>
-->


<?php
$this->layout = "auto";

$this->Html->css([
    "/assets/plugins/jquery-ui/smoothness/jquery-ui.min",
    "/assets/plugins/datepicker/css/datepicker",
    "/assets/plugins/daterangepicker/css/daterangepicker-bs3",
    "/assets/plugins/timepicker/css/timepicker",
    "/assets/plugins/datetimepicker/css/datetimepicker.min",
    "/assets/plugins/colorpicker/css/bootstrap-colorpicker.min",
    "/assets/plugins/ios-switch/css/switch",
    "/assets/plugins/tagsinput/css/bootstrap-tagsinput",
    "/assets/plugins/select2/select2",
    "/assets/plugins/typeahead/css/typeahead",
    "/assets/plugins/multi-select/css/multi-select"
], ["block" => true]);
$this->Html->script([
    "/assets/plugins/jquery-ui/smoothness/jquery-ui.min",
    "/assets/plugins/datepicker/js/datepicker",
    "/assets/plugins/daterangepicker/js/moment.min",
    "/assets/plugins/daterangepicker/js/daterangepicker",
    "/assets/plugins/timepicker/js/timepicker.min",
    "/assets/plugins/datetimepicker/js/datetimepicker.min",
    "/assets/plugins/datetimepicker/js/locales/bootstrap-datetimepicker.fr",
    "/assets/plugins/colorpicker/js/bootstrap-colorpicker.min",
    "/assets/plugins/tagsinput/js/bootstrap-tagsinput.min",
    "/assets/plugins/select2/select2.min",
    "/assets/plugins/typeahead/typeahead.bundle",
    "/assets/plugins/typeahead/handlebars.min",
    "/assets/plugins/multi-select/js/jquery.multi-select",
    "/assets/plugins/multi-select/js/jquery.quicksearch"
], ["block" => true]);
?>

<section class="box ">
    <header class="panel_header">
        <h2 class="title pull-left">Choisir le véhicule</h2>
        <div class="actions panel_actions pull-right">
            <i class="box_toggle fa fa-chevron-down"></i>
            <i class="box_setting fa fa-cog" data-toggle="modal" href="#section-settings"></i>
            <i class="box_close fa fa-times"></i>
        </div>
    </header>
    <div class="content-body">    <div class="row">
       
            <?= $this->Form->create($mission, ['url' => ['action' => 'add']]) ?>
            <div class="col-md-6 col-sm-6 col-xs-6">

                <div class="form-group">
                    <label class="form-label">Immatriculation *<span  style="color: red">(obligation)</span></label>
                    <?= $this->Form->select("vehicules_id", $vehicules, $options = ['empty'=> true]) ?>
                </div>
               
            </div>
           

        </div>
            <?= $this->Form->button(__('Choisir')) ?>
            <?= $this->Form->end() ?>
    </div>
</section>


Merci d'avance

Hors ligne

 

#2 27-10-2016 11:30:30

Iziwas
Pitivier
Date d'inscription: 27-10-2016
Messages: 13

Re: Empêcher une insertion dans une table

Bonjour nvalyfofana,

Peux-tu nous indiquer la fonction que tu utilises pour l'ajout ?
Sinon, si ça peut t'aider, tu dois utiliser une clause where ne prenant que les véhicules ayant un statut égal à 1.

Voici un exemple :

Code: php

  1. $vehicules = $this->Missions->Vehicules->find('list')
  2.      ->where(['Vehicules.statut = ' => '1'])

Dernière modification par Iziwas (27-10-2016 11:31:09)

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB
Traduction par FluxBB.fr