Loading front/src/EquipmentUsage.vue 0 → 100644 +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> module/Oscar/config/module.config.php +13 −3 Original line number Diff line number Diff line Loading @@ -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', Loading Loading @@ -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, ), ), Loading @@ -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, Loading module/Oscar/config/routes.yml +31 −1 Original line number Diff line number Diff line Loading @@ -1655,7 +1655,7 @@ connector: defaults: action: organization # Materiel Type # Equipment Type equipmenttype: type: segment options: Loading Loading @@ -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: Loading module/Oscar/src/Oscar/Controller/EquipmentUsageController.php 0 → 100644 +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é"); } } } module/Oscar/src/Oscar/Controller/EquipmentUsageControllerFactory.php 0 → 100644 +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
front/src/EquipmentUsage.vue 0 → 100644 +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>
module/Oscar/config/module.config.php +13 −3 Original line number Diff line number Diff line Loading @@ -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', Loading Loading @@ -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, ), ), Loading @@ -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, Loading
module/Oscar/config/routes.yml +31 −1 Original line number Diff line number Diff line Loading @@ -1655,7 +1655,7 @@ connector: defaults: action: organization # Materiel Type # Equipment Type equipmenttype: type: segment options: Loading Loading @@ -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: Loading
module/Oscar/src/Oscar/Controller/EquipmentUsageController.php 0 → 100644 +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é"); } } }
module/Oscar/src/Oscar/Controller/EquipmentUsageControllerFactory.php 0 → 100644 +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; } }