Commit 02b887e4 authored by Antony Le Courtes's avatar Antony Le Courtes
Browse files

WIP usage (probleme modele entities remove)

parent ee74230f
Loading
Loading
Loading
Loading
Loading
+201 −0
Original line number Diff line number Diff line
<template>
  <section style="position: relative; min-height: 100px">
    <div v-if="datas">
      <article class="card xs" v-for="usage in datas" :key="usage.id">
        <h2 class="card-title">
          <span>
            <i class="picto icon-doc"></i>
              <strong class="text-light">{{ usage.libelle }}</strong>
            </span>
          <nav class="text-right">
            <small>
              <a href="#" class="link" v-if="usage.edit" @click="editEquipmentUsage(usage)">
                <i class="icon-pencil"></i> Modifier
              </a>
              <a href="#" class="link" v-if="usage.delete" @click="deleteEquipmentUsage(usage)">
                <i class="icon-trash"></i> Suppression
              </a>
            </small>
          </nav>
        </h2>
      </article>
      <div v-if="urlNew">
        <button type="button" @click="editEquipmentUsage()" class="btn btn-primary">
          <i class="icon-plus-circled"></i>
          Nouveau usage d'équipement
        </button>
      </div>
    </div>

    <!-- Modal de modification insertion -->
    <div v-if="form" class="overlay">
      <div class="overlay-content">
        <h2>
          {{ messageModalEquipment }}
          <span class="overlay-closer" @click="form = false">X</span>
        </h2>
        <div>
          <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="equipmentUsage.libelle"/>
          <hr/>
          <nav>
            <button class="btn btn-default" @click="form = false">
              <i class="icon-cancel-alt"></i> Annuler
            </button>
            <button class="btn btn-primary" href="#" @click.prevent="performEdit()">
              <i class="icon-valid"></i> Enregistrer
            </button>
          </nav>
        </div>
      </div>
    </div>

    <!-- Modal de SUPPRESSION -->
    <div v-if="deleteModal" class="overlay">
      <div class="overlay-content">
        <h2>
          Suppression définitive d'un usage d'équipement
          <span class="overlay-closer" @click="deleteModal = false">X</span>
        </h2>
        <div>
          <h1><i class="icon-doc"></i> <strong>{{ equipmentUsage.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>
<script>

/******************************************************************************************************************/
/* ! DEVELOPPEURS
Depuis la racine OSCAR :
cd front

Pour compiler en temps réél :

node node_modules/.bin/vue-cli-service build --name EquipmentUsage --dest ../public/js/oscar/dist --no-clean --formats umd,umd-min --target lib ./src/EquipmentUsage.vue --watch

 */


import AjaxOscar from "./remote/AjaxOscar";
import OscarRemoteData from "./remote/OscarRemoteData";

let oscarRemoteData = new OscarRemoteData();

export default {

  props: {
    urlShow: {
      required: true
    }
    ,
    urlCreate: {
      required: true
    }
  }
  ,

  data() {
    return {
      urlDatas: this.urlShow,
      urlNew: this.urlCreate,
      form: false,
      deleteModal: false,
      datas: null,
      remoterState: oscarRemoteData.state,
      equipmentUsage: null,
    }
  }
  ,
  computed: {
    messageModalEquipment() {
      let message = "";
      if (this.equipmentUsage.id == null) {
        message = "Ajout d'un nouveau usage d'équipement";
      }
      if (this.equipmentUsage.id) {
        message = "Modification d'un usage d'équipement : " + this.equipmentUsage.libelle;
      }
      return message;
    }
  },

  methods: {
    handlerSuccess(success) {
      console.log(success);
      this.datas = success.data;
    }
    ,
    fetch() {
      oscarRemoteData
          .setPendingMessage("Chargement les usages d'équipement")
          .setErrorMessage("Impossible de charger les usages d'équipement")
          .performGet(this.urlDatas, this.handlerSuccess);
    }
    ,
    editEquipmentUsage(usage = null) {
      if (!usage) {
        this.equipmentUsage = {};
        this.equipmentUsage.libelle = null;
        this.equipmentUsage.id = null;
        this.equipmentUsage.edit = this.urlNew;
      } else {
        this.equipmentUsage = usage;
      }
      this.form = true;
    },
    deleteEquipmentUsage(usage) {
      this.equipmentUsage = usage;
      console.log("delete init", this.equipmentUsage);
      this.deleteModal = true;
    },
    performDelete() {
      let formData = new FormData();
      let equipmentUsageId = this.equipmentUsage.id;
      formData.append('equipmentUsageId', equipmentUsageId);
      console.log(formData);
      console.log(equipmentUsageId);
      oscarRemoteData
          .setPendingMessage("Suppression de l'usage d'équipement")
          .setErrorMessage("Impossible de supprimer l'usage d'équipement")
          .performPost(this.equipmentUsage.delete, formData, (response) => {
            this.fetch();
            this.deleteModal = false;
          });
      console.log("suppression");
    }
    ,
    performEdit() {
      let formData = new FormData();
      let equipmentUsageId = this.equipmentUsage.id;
      let equipmentUsageLibelle = this.equipmentUsage.libelle;
      formData.append('equipmentUsageId', equipmentUsageId);
      formData.append('equipmentUsageLibelle', equipmentUsageLibelle);
      oscarRemoteData
          .setPendingMessage("Enregistrement d'un usage d'équipement")
          .setErrorMessage("Impossible d'enregistrer l'usage d'équipement")
          .performPost(this.equipmentUsage.edit, formData, (response) => {
            this.fetch();
            this.form = false;
          });
    },
  }
  ,
  mounted() {
    this.fetch();
  }
}
</script>
+13 −3
Original line number Diff line number Diff line
@@ -245,13 +245,20 @@ return array(
                    'privileges' => \Oscar\Provider\Privileges::MAINTENANCE_MENU_ADMIN,
                ],

                // --- Type de matériel
                // --- Type d'équipement
                [
                    'controller' => 'EquipmentType',
                    'action'     => ['edit', 'index', 'show', 'delete'],
                    'privileges' => \Oscar\Provider\Privileges::MAINTENANCE_MENU_ADMIN,
                ],

                // --- Usage d'équipement
                [
                    'controller' => 'EquipmentUsage',
                    'action'     => ['edit', 'index', 'show', 'delete'],
                    'privileges' => \Oscar\Provider\Privileges::MAINTENANCE_MENU_ADMIN,
                ],

                // ---   - { controller: ActivityDate, action: [index, change, new], roles: [user] }
                [
                    'controller' => 'DateType',
@@ -960,6 +967,8 @@ return array(

            \Oscar\Service\EquipmentService::class      => \Oscar\Service\EquipmentServiceFactory::class,
            \Oscar\Service\EquipmentTypeService::class  => \Oscar\Service\EquipmentTypeServiceFactory::class,
            \Oscar\Service\EquipmentUsageService::class => \Oscar\Service\EquipmentUsageServiceFactory::class,

        ),
    ),

@@ -983,6 +992,7 @@ return array(
            'ActivityType'                             => \Oscar\Controller\ActivityTypeControllerFactory::class,
            'Equipment'                                => \Oscar\Controller\EquipmentControllerFactory::class,
            'EquipmentType'                            => \Oscar\Controller\EquipmentTypeControllerFactory::class,
            'EquipmentUsage'                           => \Oscar\Controller\EquipmentUsageControllerFactory::class,
            'Api'                                      => \Oscar\Controller\ApiControllerFactory::class,
            'Administration'                           => \Oscar\Controller\AdministrationControllerFactory::class,
            'AdministrativeDocument'                   => \Oscar\Controller\AdministrativeDocumentControllerFactory::class,
+31 −1
Original line number Diff line number Diff line
@@ -1655,7 +1655,7 @@ connector:
        defaults:
          action: organization

# Materiel Type
# Equipment Type
equipmenttype:
  type: segment
  options:
@@ -1684,6 +1684,36 @@ equipmenttype:
        defaults:
          action: show

# Equipment Usage
equipmentusage:
  type: segment
  options:
    route: /equipment-usage
    defaults:
      controller: EquipmentUsage
      action: index
  may_terminate: true
  child_routes:
    delete:
      type: segment
      options:
        route: /delete
        defaults:
          action: delete
    edit:
      type: segment
      options:
        route: /edit/[:id]
        defaults:
          action: edit
    show:
      type: segment
      options:
        route: /show
        defaults:
          action: show


administration:
  type: segment
  options:
+75 −0
Original line number Diff line number Diff line
<?php

namespace Oscar\Controller;


use Oscar\Entity\Equipment;
use Oscar\Entity\EquipmentType;
use Oscar\Entity\EquipmentUsage;
use Oscar\Traits\UseEquipmentUsageService;
use Oscar\Traits\UseEquipmentUsageServiceTrait;
use Zend\View\Model\JsonModel;
use Zend\View\Model\ViewModel;

class EquipmentUsageController extends AbstractOscarController implements UseEquipmentUsageService
{

    use UseEquipmentUsageServiceTrait;

    public function indexAction()
    {
        return [];

    }

    /**
     * Retourne l'ensemble des equipmentUsage format Json
     *
     * @return JsonModel
     */
    public function showAction()
    {
        $datasEquipmentsUsages = $this->getEquipmentUsageService()->getAllEquipmentsUsages();

        return new JsonModel(
            $this->getEquipmentUsageService()->filterEquipmentUsageToJson(
                $datasEquipmentsUsages,
                $this->url()->fromRoute('equipmentusage/edit', ["id" => '']),
                $this->url()->fromRoute('equipmentusage/delete')
            )
        );
    }

    public function editAction()
    {
        $posts = $this->getRequest()->getPost();
        if ($posts) {
            $equipmentUsageId = $posts->get('equipmentUsageId');
            // Edit
            if (is_null($equipmentUsageId) || $equipmentUsageId != 'null') {
                $equipmentUsage = $this->getEntityManager()->getRepository(EquipmentUsage::class)->findOneBy(['id' => $equipmentUsageId]);
            } else {
                $equipmentUsage = new EquipmentUsage();
            }
            $equipmentUsage = $this->getEquipmentUsageService()->saveEquipmentUsage($posts, $equipmentUsage);
        }
        return new JsonModel();
    }

    /**
     * @return void|\Zend\Http\Response|JsonModel
     */
    public function deleteAction()
    {
        $posts = $this->getRequest()->getPost();
        if ($posts) {
            $equipmentUsageId = $posts->get('equipmentUsageId');
            if (true === $this->getEquipmentUsageService()->deleteEquipmentUsage($equipmentUsageId)) {
                return new JsonModel();
            };
        } else {
            return $this->getResponseBadRequest("EquipmentUsage non trouvé");
        }
    }

}
+20 −0
Original line number Diff line number Diff line
<?php

namespace Oscar\Controller;


use Interop\Container\ContainerInterface;
use Oscar\Factory\AbstractOscarFactory;
use Oscar\Service\EquipmentUsageService;

class EquipmentUsageControllerFactory extends AbstractOscarFactory
{
    public function __invoke(ContainerInterface $container, $requestedName, array $options = null)
    {
        $c = new EquipmentUsageController();
        $this->init($c, $container);
        $c->setEquipmentUsageService($container->get(EquipmentUsageService::class));
        return $c;
    }

}
Loading