Commit ee74230f authored by Herve Marie's avatar Herve Marie
Browse files

WIP :

- Composant VueJs ajout/modif section update/create equipmentType envoie vers controlleur (+ factorisation et css)
- Changement routing param passé en post
- Ajout des méthodes de suppression modification et sauvegarde EquipmentTypeService
- Traitement du CRUD au sein du controlleur -> appel service dédié EquipmentTypeService
parent 8918d255
Loading
Loading
Loading
Loading
Loading
+101 −28
Original line number Diff line number Diff line
<template>
  <section style="position: relative; min-height: 100px">
    <div v-if="urlNew">
      <a :href="urlNew">Nouveau Type d'équipement</a>
    </div>
    <div v-if="datas">
      <article class="card xs" v-for="type in datas" :key="type.id">
        <div class="card-title">
        <h2 class="card-title">
          <span>
            <i class="picto icon-doc"></i>
          <small class="text-light">{{ type.libelle }}</small>
          <nav>

            <button v-if="type.edit" @click="editEquipmentType(type)">Editer</button>

              <strong class="text-light">{{ type.libelle }}</strong>
            </span>
          <nav class="text-right">
            <small>
              <a href="#" class="link" v-if="type.edit" @click="editEquipmentType(type)">
                <i class="icon-pencil"></i> Modifier
              </a>
              <a href="#" class="link" v-if="type.delete" @click="deleteEquipmentType(type)">
                <i class="icon-trash"></i> Suppression
              </a>
            </small>
          </nav>
        </div>
        </h2>
      </article>
      <div v-if="urlNew">
        <button type="button" @click="editEquipmentType()" class="btn btn-primary">
          <i class="icon-plus-circled"></i>
          Nouveau Type d'équipement
        </button>
      </div>
    </div>

    <!-- Modal de modification insertion -->
    <div v-if="form" class="overlay">
      <div class="overlay-content">
        <h2>
          Modification du type d'équipement
          {{ messageModalEquipment }}
          <span class="overlay-closer" @click="form = false">X</span>
        </h2>
        <div>
          <label for="1">Libellé :</label>
          <input type="text" name="libelle" v-model="equipmentType.libelle"/>
        </div>
        <button class="btn btn-danger" @click="form = false">
          <span class="icon-doc"><label for="form_intitule">Libellé : </label></span>
          <input id="form_intitule" class="form-control lg" type="text" name="libelle" v-model="equipmentType.libelle"/>
          <hr/>
        <nav>
          <button class="btn btn-default" @click="form = false">
            <i class="icon-cancel-alt"></i> Annuler
          </button>

        <a class="btn btn-success" href="#" @click.prevent="performEdit()">
          <button class="btn btn-primary" href="#" @click.prevent="performEdit()">
            <i class="icon-valid"></i> Enregistrer
        </a>
          </button>
        </nav>
        </div>
      </div>
    </div>

    <!-- Modal de SUPPRESSION -->
    <div v-if="deleteModal" class="overlay">
      <div class="overlay-content">
        <h2>
          Suppression définitive du type d'équipement
          <span class="overlay-closer" @click="deleteModal = false">X</span>
        </h2>
        <div>
          <h1> <i class="icon-doc"></i> <strong>{{ equipmentType.libelle }}</strong></h1>
        </div>
        <hr/>
        <nav>
          <button class="btn btn-default" @click="deleteModal = false">
            <i class="icon-cancel-alt"></i> Annuler
          </button>
          <button class="btn btn-danger" href="#" @click.prevent="performDelete()">
            <i class="icon-valid"></i> suppression
          </button>
        </nav>
      </div>
    </div>

  </section>

</template>
@@ -76,12 +112,26 @@ export default {
      urlDatas: this.urlShow,
      urlNew: this.urlCreate,
      form: false,
      deleteModal: false,
      datas: null,
      remoterState: oscarRemoteData.state,
      equipmentType: null,
    }
  }
  ,
  computed: {
    messageModalEquipment (){
      let message = "";
      if (this.equipmentType.id == null){
        message = "Ajout d'un nouveau type d'équipement";
      }
      if (this.equipmentType.id){
        message = "Modification du type d'équipement : " + this.equipmentType.libelle;
      }
      return message;
    }
  },

  methods: {
    handlerSuccess(success) {
      console.log(success);
@@ -95,18 +145,41 @@ export default {
          .performGet(this.urlDatas, this.handlerSuccess);
    }
    ,
    editEquipmentType(type) {
    editEquipmentType(type=null) {
      if (!type){
        this.equipmentType = {};
        this.equipmentType.libelle = null;
        this.equipmentType.id = null;
        this.equipmentType.edit = this.urlNew;
      }else{
        this.equipmentType = type;
      }
      this.form = true;
      console.log(type);
    },
    performEdit() {
    deleteEquipmentType(type) {
      this.equipmentType = type;
      this.deleteModal = true;
    },
    performDelete(){
      let formData = new FormData();
      let equipmentTypeId = this.equipmentType.id;
      let equipmenTypetLibelle = this.equipmentType.libelle;

      formData.append('equipmentTypeId', equipmentTypeId);
      oscarRemoteData
          .setPendingMessage("Suppression du type d'équipement")
          .setErrorMessage("Impossible de supprimer le type d'équipement")
          .performPost(this.equipmentType.delete, formData, (response) => {
            this.fetch();
            this.deleteModal = false;
          });
        console.log("suppression");
    }
    ,
    performEdit() {
      let formData = new FormData();
      let equipmentTypeId = this.equipmentType.id;
      let equipmentTypeLibelle = this.equipmentType.libelle;
      formData.append('equipmentTypeId', equipmentTypeId);
      formData.append('equipmenTypetLibelle', equipmenTypetLibelle);
      formData.append('equipmentTypeLibelle', equipmentTypeLibelle);
      oscarRemoteData
          .setPendingMessage("Enregistrement du type d'équipement")
          .setErrorMessage("Impossible d'enregistrer le type d'équipement")
+1 −1
Original line number Diff line number Diff line
@@ -1668,7 +1668,7 @@ equipmenttype:
    delete:
      type: segment
      options:
        route: /delete/:id
        route: /delete
        defaults:
          action: delete
    edit:
+30 −9
Original line number Diff line number Diff line
@@ -3,11 +3,13 @@
namespace Oscar\Controller;


use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
use Oscar\Entity\EquipmentType;
use Oscar\Exception\OscarException;
use Oscar\Traits\UseEquipmentTypeService;
use Oscar\Traits\UseEquipmentTypeServiceTrait;
use Zend\View\Model\JsonModel;
use Zend\View\Model\ViewModel;

class EquipmentTypeController extends AbstractOscarController implements UseEquipmentTypeService
{
@@ -32,33 +34,52 @@ class EquipmentTypeController extends AbstractOscarController implements UseEqui
            $this->getEquipmentTypeService()->filterEquipmentTypeWithOrganizationsToJson(
                $datasEquipmentsTypes,
                $this->url()->fromRoute('equipmenttype/edit', ["id" => '']),
                $this->url()->fromRoute('equipmenttype/delete', ["id" => '']),
                $this->url()->fromRoute('equipmenttype/delete'),
                []
            )
        );
    }

    /**
     * Sauvegarde un nouveau EquipmentType ou mise à jour via Id
     *
     * @return JsonModel
     * @throws ORMException
     * @throws OptimisticLockException
     */
    public function editAction()
    {
//        if($this->isAjax()){
//            $this->getResponseBadRequest("Appel XHTML Request nécessaire !");
//        }
        $posts = $this->getRequest()->getPost();
        if ($posts) {
            $equipmentTypeId = $posts->get('equipmentTypeId');
            if ($equipmentTypeId != '') {

            // Edit
            if (is_null($equipmentTypeId) || $equipmentTypeId != 'null') {
                $equipmentType = $this->getEntityManager()->getRepository(EquipmentType::class)->findOneBy(['id' => $equipmentTypeId]);
                dd($equipmentType);
            } else {
                dd('creation');
                $equipmentType = new EquipmentType();
            }
            $equipmentType = $this->getEquipmentTypeService()->saveEquipmentType($posts, $equipmentType);
        }
        return new JsonModel();
    }

    /**
     * @return void|\Zend\Http\Response|JsonModel
     */
    public function deleteAction()
    {
        // TODO implémenter suppression equipmentType
        dd("SUPPRESSSION Equipement type !");
        return new ViewModel([]);
        $posts = $this->getRequest()->getPost();
        if ($posts) {
            $equipmentTypeId = $posts->get('equipmentTypeId');
            if(true === $this->getEquipmentTypeService()->deleteEquipmentType($equipmentTypeId)){
                return new JsonModel();
            };
        }else{
            return $this->getResponseBadRequest("EquipmentType non trouvé");
        }
    }

}
+42 −6
Original line number Diff line number Diff line
@@ -8,6 +8,8 @@
namespace Oscar\Service;


use Doctrine\ORM\OptimisticLockException;
use Doctrine\ORM\ORMException;
use Doctrine\ORM\QueryBuilder;
use Oscar\Entity\Equipment;
use Oscar\Entity\EquipmentType;
@@ -15,6 +17,7 @@ use Oscar\Formatter\Equipment\EquipmentToJson;
use Oscar\Formatter\EquipmentType\EquipmentTypeToJson;
use Oscar\Traits\UseEntityManager;
use Oscar\Traits\UseEntityManagerTrait;
use Zend\Stdlib\Parameters;

class EquipmentTypeService implements UseEntityManager
{
@@ -78,10 +81,7 @@ class EquipmentTypeService implements UseEntityManager
        return $equipmentsTypes;
    }



    // TODO WIP POUR TEST

    /**
     *
     * @param array $collectionEquipmentsTypes
@@ -103,13 +103,49 @@ class EquipmentTypeService implements UseEntityManager
        $formatterEquipmentType = new EquipmentTypeToJson();
        /** @var Equipment $equipment */
        foreach ($collectionEquipmentsTypes as $equipmentType) {

            $equipmentTypeTojson = $formatterEquipmentType->toJson($equipmentType, $withAssoc);
            $equipmentTypeTojson ["edit"] = $urlEdit . $equipmentType->getId();
            $equipmentTypeTojson ["delete"] = $urlDelete . $equipmentType->getId();
            $equipmentTypeTojson ["delete"] = $urlDelete;
            $equipmentsTypes [] = $equipmentTypeTojson;
          
        }
        return $equipmentsTypes;
    }

    /**
     * @param Parameters $posts
     * @param EquipmentType $equipmentType
     * @return EquipmentType
     * @throws ORMException
     * @throws OptimisticLockException
     */
    public function saveEquipmentType(Parameters $posts, EquipmentType $equipmentType): EquipmentType
    {
        $libelle = $posts->get("equipmentTypeLibelle");
        $equipmentType->setLibelle($libelle);
        $em = $this->getEntityManager();
        $em->persist($equipmentType);
        $em->flush();
        return $equipmentType;
    }

    /**
     * Supprime EquipmentType
     *
     * @param int $id
     * @return bool
     */
    public function deleteEquipmentType(int $id):bool{
        $isSuccess = false;
        try{
            $em = $this->getEntityManager();
            $equipmentType = $em->getRepository(EquipmentType::class)->findOneBy(["id"=>$id]);
            $em->remove($equipmentType);
            $em->flush();
            $isSuccess = true;
        }catch (\Exception $e){
            // TODO log l'erreur
            return $isSuccess;
        }
        return $isSuccess;
    }
}
+3 −3

File changed.

Preview size limit exceeded, changes collapsed.

Loading