Commit 5fe9ad81 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Possibilité de valider/dévalider des VH de mission

paufinage de l'IHM de saisie des missions
ajout d'une méthode "dqlAndWhere" pour ajouter dans un DQL des filtres "AND WHERE" en fonction des paramètres donnés
ajout du composant vue u-heures pour afficher des float proprement
parent a5cd57bb
Loading
Loading
Loading
Loading
+23 −5
Original line number Diff line number Diff line
@@ -8,11 +8,29 @@
 * @var $viewFile   string
 */

/** @var \Mission\Service\MissionService $sMission */
$sMission = $container->get(\Mission\Service\MissionService::class);
use Application\Entity\Db\Intervenant;
use Mission\Entity\Db\Mission;
use Service\Entity\Db\TypeVolumeHoraire;

$mission = $sMission->get(31);
?>
<script>

$mission->setHeures(10);

$sMission->save($mission);
 No newline at end of file
    var data = {
        0: {id: 15, heures: 15},
        1: {id: 14, heures: 14},
        2: {id: 120, heures: 120}
    };

    console.log(data[Util.json.indexById(data, 120)]);


    var data2 = [
        {id: 15, heures: 15},
        {id: 14, heures: 14},
        {id: 120, heures: 120}
    ];

    console.log(data2[Util.json.indexById(data2, 120)]);

</script>
+21 −0
Original line number Diff line number Diff line
<template>
    <span class="heures" v-html="affichage"></span>
</template>

<script>
export default {
    name: "UIcon",
    props: {
        valeur: {required: true, type: Float64Array},
    },
    computed: {
        affichage: function () {
            return Util.formattedHeures(this.valeur, true)
        }
    }
}
</script>

<style scoped>

</style>
 No newline at end of file
+3 −2
Original line number Diff line number Diff line
<template>
    <i :class="`fas fa-${name}`"></i>
    <i :class="`fas fa-${name} text-${variant}`"></i>
</template>

<script>
export default {
    name: "UIcon",
    props: {
        name: {required: true, type: String}
        name: {required: true, type: String},
        variant: {required: false, type: String},
    },
}
</script>
+3 −2
Original line number Diff line number Diff line
@@ -38,8 +38,9 @@ export default {
            this.reload();
        },
        refresh(mission)
        {
            this.missions[mission.id] = mission;
        {console.log(mission);
            let index = Util.json.indexById(this.missions, mission.id);
            this.missions[index] = mission;
        },
        reload()
        {
+90 −19
Original line number Diff line number Diff line
@@ -18,15 +18,18 @@
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-md-6">
                            <div class="col-md-5">
                                <label class=" form-label">Taux de rémunération</label>
                                <div class="form-control">{{ mission.missionTauxRemu.libelle }}</div>
                            </div>
                            <div class="col-md-6">
                            <div class="col-md-7">
                                <label class=" form-label">Nombre d'heures prévisionnelles</label>
                                <div class="input-group mb-3">
                                    <div class="form-control">{{ heuresLib }}</div>
                                    <button class="input-group-btn btn btn-secondary" data-bs-toggle="modal" data-bs-target="#details"><u-icon name=""/> Détails</button>
                                    <div class="form-control" v-html="heuresLib"></div>
                                    <button class="input-group-btn btn btn-secondary" data-bs-toggle="modal" :data-bs-target="`#details-${mission.id}`">
                                        <u-icon name=""/>
                                        Détails
                                    </button>
                                </div>
                            </div>
                        </div>
@@ -76,18 +79,18 @@
                            <label class=" form-label">Suivi</label>
                        </div>
                        <div>
                            <u-icon name="thumbs-up"/>
                            <u-icon name="thumbs-up" variant="success"/>
                            Créé le {{ mission.histoCreation }} par
                            <utilisateur :nom="mission.histoCreateur.displayName" :mail="mission.histoCreateur.email"/>
                        </div>
                        <div>
                            <u-icon :name="mission.valide ? 'thumbs-up' : 'thumbs-down'"/>
                            <u-icon :name="mission.valide ? 'thumbs-up' : 'thumbs-down'" :variant="mission.valide ? 'success' : 'info'"/>
                            {{ validationText }}
                            <utilisateur v-if="mission.validation && mission.validation.histoCreateur" :nom="mission.validation.histoCreateur.libelle"
                            <utilisateur v-if="mission.validation && mission.validation.histoCreateur" :nom="mission.validation.histoCreateur.displayName"
                                         :mail="mission.validation.histoCreateur.email"/>
                        </div>
                        <div>
                            <u-icon :name="mission.contrat ? 'thumbs-up' : 'thumbs-down'"/>
                            <u-icon :name="mission.contrat ? 'thumbs-up' : 'thumbs-down'" :variant="mission.contrat ? 'success' : 'info'"/>
                            {{ mission.contrat ? 'Contrat établi' : 'Pas de contrat' }}
                        </div>
                        <div>
@@ -98,12 +101,63 @@
            </div>
        </form>
    </div>
    <u-modal id="details" title="Détail des heures">
    <u-modal :id="`details-${mission.id}`" title="Détail des heures prévisionnelles">
        <template #body>
        Mon détail des heures
            <table class="table table-bordered table-condensed">
                <thead>
                <tr>
                    <th>Heures</th>
                    <th>Statut</th>
                    <th>Actions</th>
                </tr>
                </thead>
                <tbody>
                <tr v-for="vh in mission.volumesHoraires" :key="vh.id">
                    <td style="text-align: right">
                        <u-heures :valeur="vh.heures"/>
                    </td>
                    <td>
                        <u-icon name="thumbs-up" variant="success"/>
                        Saisi par
                        <utilisateur :nom="vh.histoCreateur.displayName"
                                     :mail="vh.histoCreateur.email"/>
                        le {{ vh.histoCreation }}
                        <br/>
                        <u-icon :name="vh.valide ? 'thumbs-up' : 'thumbs-down'" :variant="vh.valide ? 'success' : 'info'"/>
                        {{ vh.validation && vh.validation.id == null ? 'Autovalidé' : (!vh.validation ? 'à valider' : '') }}
                        <span v-if="vh.validation && vh.validation.histoCreateur">
                            Validé par <utilisateur :nom="vh.validation.histoCreateur.displayName"
                                                    :mail="vh.validation.histoCreateur.email"/> le {{ vh.validation.histoCreation }}
                        </span>
                    </td>
                    <td>
                        <a v-if="vh.canValider"
                           class="btn btn-secondary"
                           :data-id="vh.id"
                           data-title="Validation du volume horaire"
                           data-content="Êtes-vous sur de vouloir valider ce volume horaire ?"
                           @click.prevent="volumeHoraireValider">Valider</a>

                        <a v-if="vh.canDevalider"
                           class="btn btn-danger"
                           :data-id="vh.id"
                           data-title="Dévalidation du volume horaire"
                           data-content="Êtes-vous sur de vouloir dévalider ce volume horaire ?"
                           @click.prevent="volumeHoraireDevalider">Dévalider</a>

                        <a v-if="vh.canSupprimer"
                           class="btn btn-danger"
                           :data-id="vh.id"
                           data-title="Suppression du volume horaire"
                           data-content="Êtes-vous sur de vouloir supprimer le volume horaire ?"
                           @click.prevent="volumeHoraireSupprimer">Supprimer</a>
                    </td>
                </tr>
                </tbody>
            </table>
        </template>
        <template #footer>
            Mon test de footer

        </template>
    </u-modal>

@@ -138,11 +192,11 @@ export default {
            if (this.mission.heures === null || this.mission.heures === 0) {
                return 'Aucune heure saisie';
            } else if (this.mission.heures == this.mission.heuresValidees) {
                return this.mission.heures + ' heures (validées)';
                return Util.formattedHeures(this.mission.heures) + ' heures (validées)';
            } else if (this.mission.heuresValidees == 0) {
                return this.mission.heures + ' heures (non validées)';
                return Util.formattedHeures(this.mission.heures) + ' heures (non validées)';
            } else {
                return this.mission.heures + ' heures (' + this.mission.heuresValidees + ' validées)';
                return Util.formattedHeures(this.mission.heures) + ' heures (' + Util.formattedHeures(this.mission.heuresValidees) + ' validées)';
            }
        }
    },
@@ -181,6 +235,27 @@ export default {
                this.$emit('refresh', response.data);
            });
        },
        volumeHoraireSupprimer(event)
        {
            event.target.href = Util.url('mission/volume-horaire/supprimer/:missionVolumeHoraire', {missionVolumeHoraire: event.target.dataset.id});
            popConfirm(event.target, (response) => {
                this.$emit('refresh', response.data);
            });
        },
        volumeHoraireValider(event)
        {
            event.target.href = Util.url('mission/volume-horaire/valider/:missionVolumeHoraire', {missionVolumeHoraire: event.target.dataset.id});
            popConfirm(event.target, (response) => {
                this.$emit('refresh', response.data);
            });
        },
        volumeHoraireDevalider(event)
        {
            event.target.href = Util.url('mission/volume-horaire/devalider/:missionVolumeHoraire', {missionVolumeHoraire: event.target.dataset.id});
            popConfirm(event.target, (response) => {
                this.$emit('refresh', response.data);
            });
        },
        refresh()
        {
            axios.get(
@@ -188,11 +263,7 @@ export default {
            ).then(response => {
                this.$emit('refresh', response.data);
            });
        },
        test()
        {
            console.log('Go go go!!!');
        },
        }
    }
}
</script>
Loading