Commit f90310b9 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

- UP : Modification du type de document

- EC : Modification du nom de base ???
Reste à ajouter une option pour utiliser ou pas la N° de version dans le fichier télécharger
Note : la propriété explode pour afficher/cacher l'historique ne semble plus réactive dans cette version de vuejs ?!
parent c3c6e472
Loading
Loading
Loading
Loading
Loading
+75 −64
Original line number Diff line number Diff line
<template>
    <section style="position: relative; background: rgba(255,0,0,.1)">
    <section style="position: relative; min-height: 100px">
        <ajax-oscar :oscar-remote-data="remoterState" />

        <pre>{{ remoteState }}</pre>
        <button @click="remoterState.loading = !remoterState.loading">TEST REMOTE</button>

        <div class="overlay" v-if="deleteData">
            <div class="overlay-content">
                <h2>
@@ -25,6 +21,39 @@
                </a>
            </div>
        </div>

        <div class="overlay" v-if="editData">
            <div class="overlay-content">
                <h2>
                    Modification du document
                    <span class="overlay-closer" @click="editData = null">X</span>
                </h2>

                <label for="typedocument">Type de document</label>
                <div>
                    <select name="type" id="typedocument" v-model="editData.documentype_id">
                        <option :value="id" v-for="t, id in documentTypes" :key="id">{{ t }}</option>
                    </select>
                </div>

                <!--
                <label for="filename">Nom du fichier</label>
                <p class="help">
                    Il s'agit du nom du fichier par défaut lors du téléchargement. Le nom d'archivage ne sera pas modifié.
                </p>
                <input type="text" id="filename" class="form-control" v-model="editData.basename" />
                -->

                <button class="btn btn-danger" @click="editData = null">
                    <i class="icon-cancel-alt"></i> Annuler
                </button>

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

        <div>
            <div class="oscar-sorter">
                <i class=" icon-sort"></i>
@@ -50,22 +79,7 @@
        <article class="card xs" v-for="document in documentsPacked" :key="document.id">
            <div class="card-title">
                <i class="picto icon-doc" :class="'doc' + document.extension"></i>

                <template v-if="document.editmode">
                    <select @change="changeTypeDocument(document, $event)" @blur="document.editmode = false">
                        <option v-for="(documentType, key) in documentTypes"
                                :value="key"
                                :key="documentType.id"
                                :selected="document.categoryText == documentType">
                            {{ documentType }}
                        </option>
                    </select>
                </template>
                <template v-else>
                    <small class="text-light" @dblclick="document.editmode = true">{{ document.categoryText }} ~ </small>
                </template>


                <small class="text-light">{{ document.categoryText }} ~ </small>
                <strong>{{document.fileName}}</strong>
                <small class="text-light" :title="document.fileSize + ' octet(s)'">&nbsp;({{document.fileSize | filesize}})</small>
            </div>
@@ -104,8 +118,8 @@
                </div>
                <nav class="text-right show-over">
                    <a class="btn btn-default btn-xs" :href="document.urlDownload" v-if="document.urlDownload">
                        <i class="icon-download-outline"></i>
                        Télécharger le fichier
                        <i class="icon-upload-outline"></i>
                        Télécharger
                    </a>

                    <a class="btn btn-default btn-xs" :href="document.urlReupload" v-if="document.urlReupload">
@@ -115,7 +129,11 @@

                    <a class="btn btn-default btn-xs" @click.prevent="deleteDocument(document)">
                        <i class="icon-trash"></i>
                        supprimer le fichier
                        Supprimer
                    </a>
                    <a class="btn btn-xs btn-default" href="#" @click.prevent="handlerEdit(document)">
                        <i class="icon-pencil"></i>
                        Modifier
                    </a>
                </nav>
            </div>
@@ -123,6 +141,19 @@
    </section>
</template>
<script>
    /******************************************************************************************************************/
    /* ! DEVELOPPEUR
    Depuis la racine OSCAR :

    cd front

    Pour compiler en temps réél :
    node node_module/.bin/gulp activityDocumentWatch

    Pour compiler :
    node node_module/.bin/gulp activityDocument

     */

    import AjaxOscar from "./remote/AjaxOscar";
    import OscarRemoteData from "./remote/OscarRemoteData";
@@ -151,6 +182,7 @@
                formData: null,
                error: null,
                deleteData: null,
                editData: null,
                documents: [],
                loading: true,
                sortField: 'dateUpload',
@@ -198,48 +230,28 @@
                return compare == this.sortField ? "active" : "";
            },

            changeTypeDocument: function( document, event ){

                /***
                 oscarRemoteData
                 .setPendingMessage("Chargement des documents")
                 .setErrorMessage("Impossible de charger les documents")
                 .performGet(this.url, this.handlerSuccess);
                 */

                var newType = event.target.selectedOptions[0].text;
            handlerEdit(document){
                console.log(document);
                this.editData = {
                    'documentype_id': document.category.id,
                    'basename': document.basename,
                    'document': document
                };
            },

            performEdit(){
                let documentId = this.editData.document.id;
                let newType = this.editData.documentype_id;
                this.editData = null;
                let formData = new FormData();
                formData.append('documentId', documentId);
                formData.append('type', newType);
                oscarRemoteData
                    .setPendingMessage("Modification du type de document")
                    .setErrorMessage("Impossible de modifier le type de document")
                    .performPost(this.urlDocumentType, {
                        documentId: document.id,
                        type: newType

                    }, (response) => {
                        // Modification du type
                        document.categoryText = newType;
                        document.editMode = false;
                        document.editMode = false;
                        this.$forceUpdate();

                    }, () => {
                        document.editMode = false;
                        this.$forceUpdate();
                    })

                // this.$http.post(this.urlDocumentType, {
                //     documentId: document.id,
                //     type: newType
                // }).then(ok => {
                //     flashMessage('success', 'Le document a bien été modifié', ok);
                //     document.categoryText = newType;
                //     document.editMode = false;
                //     this.$forceUpdate();
                // }, error => {
                //     flashMessage('error', 'Erreur' + error.responseText);
                //     document.editMode = false;
                // });
                    .performPost(this.urlDocumentType, formData, (response) => {
                        this.fetch();
                    });
            },

            handlerSuccess(success){
@@ -249,8 +261,7 @@

                data.forEach(function(doc){
                    doc.categoryText = doc.category ? doc.category.label : "";
                    doc.editmode = false;
                    doc.explode = false;
                    doc.explode = true;
                    var filename = doc.fileName;
                    if( ! documents[filename] ){
                        documents[filename] = doc;
+1 −1
Original line number Diff line number Diff line
@@ -8,7 +8,7 @@
                <i class="icon-spinner animate-spin animate"></i> {{ oscarRemoteData.pendingMessage }}
            </div>
            <div v-if="oscarRemoteData.error" class="error-message">
                <span @click="oscarRemoteData.error = false">CLOSE</span>
                <span @click="oscarRemoteData.error = false" style="font-weight: bold; position: absolute; top: 1em; right: 1em ">x</span>
                <i class="icon-attention-1"></i> <strong>{{ oscarRemoteData.errorMessage }} </strong> :
                <i>{{ oscarRemoteData.error }}</i>
            </div>
+1 −0
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ class OscarRemoteData {
    }

    performPost(url, datas, handlerResponse = null, handlerError = null){
        console.log("performPost", url, datas );
        this.state.loading = true;
        this.getAxiosInstance().post(url, datas)
            .then( response => {
+1 −1
Original line number Diff line number Diff line
@@ -177,7 +177,7 @@ class ContractDocumentController extends AbstractOscarController implements UseS
            /** @var ContractDocument $document */
            $document = $this->getEntityManager()->getRepository(ContractDocument::class)->find($request->getPost('documentId'));
            $this->getOscarUserContext()->check(Privileges::ACTIVITY_DOCUMENT_MANAGE, $document->getGrant());
            $type = $this->getEntityManager()->getRepository(TypeDocument::class)->findOneBy(['label' => $request->getPost('type')]);
            $type = $this->getEntityManager()->getRepository(TypeDocument::class)->find($request->getPost('type'));
            if( !$type ){
                $this->getResponseBadRequest("Type de document invalide");
            } else {
+6 −7
Original line number Diff line number Diff line
@@ -1295,7 +1295,11 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif
        if( $ui || !$this->isAjax() ){
            $view = new ViewModel([
                'composant' => 'activitydocument',
                'props' => []
                'props' => [
                    'url' => $_SERVER['REQUEST_URI'],
                    'documentTypes' => $this->getActivityService()->getTypesDocuments(),
                    'urlDocumentType' => $this->url()->fromRoute('contractdocument/document-change-type')
                ]
            ]);

            $view->setTemplate('oscar/generic-vue-debug');
@@ -1726,12 +1730,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif

        $activityTypeChain = $this->getActivityTypeService()->getActivityTypeChain($entity->getActivityType());

        $documentTypes = [];

        /** @var TypeDocument $type */
        foreach ($this->getEntityManager()->getRepository(TypeDocument::class)->findAll() as $type) {
            $documentTypes[$type->getId()] = $type->getLabel();
        }
        $documentTypes = $this->getActivityService()->getTypesDocuments();

        $activity = $this->getProjectGrantService()->getGrant($id);

Loading