Commit 16d76277 authored by Florian Joriot's avatar Florian Joriot
Browse files

Première version de la nouvelle interface des taux

parent 122cbf18
Loading
Loading
Loading
Loading
+7 −10
Original line number Diff line number Diff line
<template>
    <taux v-for="taux in listeTaux" @refresh="refresh" :key="taux.id" :taux="taux"></taux>
    <div v-for="taux in listeTaux">
        <taux v-if="!taux.missionTauxRemu" :key="taux.id" :taux="taux" :listeTaux="listeTaux"></taux>
    </div>
    <a v-if="canAddTaux" class="btn btn-primary" :href="ajoutUrl" @click.prevent="ajout">Ajout d'un nouveau taux</a>
</template>

@@ -18,7 +20,7 @@ export default {
    {
        return {
            listeTaux: [],
            ajoutUrl: "" //Util.url('mission/ajout/:intervenant', {intervenant: this.intervenant})
            ajoutUrl: Util.url('missions-taux/saisir')
        };
    },
    mounted()
@@ -42,17 +44,12 @@ export default {
        },
        reload()
        {
            this.listeTaux = {
                1: {code: 'SMIC'},
                2: {code: 'Taux 1'},
                3: {code: 'Taux 2'},
            }

            /*axios.get(
                Util.url("mission/liste-taux", {intervenant: this.intervenant})
            axios.get(
                Util.url("missions-taux/liste-taux",)
            ).then(response => {
                this.listeTaux = response.data;
            });*/
            });
        },
    }
}
+84 −3
Original line number Diff line number Diff line
<template>
    <div class="card">
        {{ taux.code }}

    <div class="card" :class="{ 'ms-5':taux.missionTauxRemu}">
        <div class="card-header">
            {{ taux.libelle }} ({{ taux.code }})
            <div class="float-end">
                <a :href="saisieUrl"
                   class="btn btn-primary"
                   @click.prevent="saisie">
                    <u-icon name="pen-to-square"/>
                    Modifier</a>
                &nbsp;
                <a :href="supprimerUrl"
                   class="btn btn-danger"
                   @click.prevent="supprimer">
                    <u-icon name="trash-can"/>
                    Supprimer</a>
            </div>
        </div>
        <div class="card-body">
            <!--            Pour les taux qui ne dépende pas d'un autre taux -->
            <div v-if=!taux.missionTauxRemu>
                Modification :<br/>
                <ul>
                    <div v-for="tauxValeur in taux.tauxRemuValeurs">
                        <li>{{ tauxValeur.valeur }}€/h à partir du {{ tauxValeur.dateEffet }}</li>
                    </div>
                </ul>
            </div>


            <!--            Pour les taux qui dépende d'un autre taux -->
            <div v-if=taux.missionTauxRemu class="row">
                <div class="col">
                    Valeurs calculées (indexées sur le taux {{ taux.missionTauxRemu.libelle }}) :
                    <ul>
                        <div v-for="indexResult in taux.tauxRemuValeursIndex">
                            <li>{{ indexResult.valeur }}€/h à partir du {{ indexResult.date }}</li>
                        </div>
                    </ul>
                    <br>
                </div>
                <div class="col order-1">
                    Modification :<br/>
                    <ul>
                        <div v-for="tauxValeur in taux.tauxRemuValeurs">
                            <li>Coéfficient de {{ tauxValeur.valeur }} à partir du {{ tauxValeur.dateEffet }}</li>
                        </div>
                    </ul>
                </div>
            </div>


        </div>
    </div>

    <div v-if=!taux.missionTauxRemu>
        <div v-for="item in listeTaux" :key="item">
            <div v-if="item.missionTauxRemu && item.missionTauxRemu.id === taux.id">
                <taux @refresh="refresh" :key="taux.id" :taux="item" :listeTaux="listeTaux"></taux>
            </div>
        </div>
    </div>
</template>

@@ -8,8 +67,30 @@
export default {
    name: "Taux",
    props: {
        taux: {required: true}
        taux: {required: true},
        listeTaux: {required: true},
    },
    data()
    {
        return {
            saisieUrl: Util.url('missions-taux/saisir/:missionTauxRemu', {missionTauxRemu: this.taux.id}),
            supprimerUrl: Util.url("missions-taux/supprimer/:missionTauxRemu", {missionTauxRemu: this.taux.id}),
        };
    },
    methods: {
        saisie(event)
        {
            modAjax(event.target, (widget) => {
                this.refresh();
            });
        },
        supprimer(event)
        {
            popConfirm(event.target, (response) => {
                this.$emit('supprimer', this.missionTauxRemu);
            });
        },
    }
}
</script>

+6 −1
Original line number Diff line number Diff line
@@ -86,6 +86,11 @@ return [
                    'controller' => MissionTauxController::class,
                    'action'     => 'saisir',
                ],
                'liste-taux'           => [
                    'route'      => '/liste-taux',
                    'controller' => MissionTauxController::class,
                    'action'     => 'getListeTaux',
                ],
                'supprimer'        => [
                    'route'      => '/supprimer/:missionTauxRemu',
                    'controller' => MissionTauxController::class,
@@ -208,7 +213,7 @@ return [

        [
            'controller' => MissionTauxController::class,
            'action'     => ['index'],
            'action'     => ['index','getListeTaux'],
            'privileges' => [
                Privileges::MISSION_VISUALISATION_TAUX,
            ],
+20 −2
Original line number Diff line number Diff line
@@ -24,14 +24,32 @@ class MissionTauxController extends AbstractController

    public function indexAction()
    {
        $annee = $this->getServiceContext()->getAnnee();

        return compact('annee');
    }



    public function getListeTauxAction()
    {
        $this->em()->getFilters()->enable('historique')->init([
            MissionTauxRemu::class,
        ]);


        $tauxMissions = $this->getServiceMissionTaux()->getTauxRemus();
        $annee        = $this->getServiceContext()->getAnnee();
        $tauxMissions = $this->getServiceMissionTaux()->getTauxRemusAnnee($tauxMissions);

        $liste = [];

        foreach ($tauxMissions as $tauxMission) {
            //Calcul de la liste des taux
            $liste[$tauxMission->getId()] = $this->getServiceMissionTaux()->missionTauxWs($tauxMission);
        }


        return compact('tauxMissions', 'annee');
        return $this->axios()->send($liste);
    }


+145 −12
Original line number Diff line number Diff line
@@ -2,16 +2,21 @@

namespace Mission\Entity\Db;

use Application\Service\Traits\ContextServiceAwareTrait;
use DateTime;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Mission\Service\MissionTauxServiceAwareTrait;
use UnicaenApp\Entity\HistoriqueAwareInterface;
use UnicaenApp\Entity\HistoriqueAwareTrait;
use UnicaenApp\Util;

class MissionTauxRemu implements HistoriqueAwareInterface
{

    use HistoriqueAwareTrait;
    use MissionTauxServiceAwareTrait;
    use ContextServiceAwareTrait;

    protected ?int             $id              = null;

@@ -64,14 +69,88 @@ class MissionTauxRemu implements HistoriqueAwareInterface



    public function getMissionTauxRemu(): ?MissionTauxRemu
    public function getTauxRemuValeursIndex(): ?array
    {
        $tauxRemuindex = $this->getMissionTauxRemu();
        if (!$tauxRemuindex) {
            return [];
        }
        $indexResult    = [];
        $valeur         = [];
        $annee          = $this->getServiceContext()->getAnnee()->getId();
        $dateDebutAnnee = "01-09-" . $annee;
        $valeursIndex   = $tauxRemuindex->getValeurAnnee($annee);
        $valeurs        = $this->getValeurAnnee($annee);
        $sizeIndex      = sizeof($valeursIndex);
        $sizeTaux       = sizeof($valeurs);
        $i              = 0;
        $j              = 0;


        while ($i < $sizeIndex || $j < $sizeTaux) {
            if ($valeursIndex[$i]->getDateEffet() < new DateTime($dateDebutAnnee) && $valeurs[$j]->getDateEffet() < new DateTime($dateDebutAnnee)) {
                $valeur['valeur'] = $valeursIndex[$i]->getValeur() * $valeurs[$j]->getValeur();
                $valeur['date']   = new DateTime($dateDebutAnnee);
            } elseif ($valeursIndex[$i]->getDateEffet() == $valeurs[$j]->getDateEffet()) {
                $valeur['valeur'] = $valeursIndex[$i]->getValeur() * $valeurs[$j]->getValeur();
                $valeur['date']   = $valeursIndex[$i]->getDateEffet();
            } else {
                $valeur['valeur'] = $valeursIndex[$i]->getValeur() * $valeurs[$j]->getValeur();
                if ($valeursIndex[$i]->getDateEffet() > $valeurs[$j]->getDateEffet()) {
                    $valeur['date'] = $valeursIndex[$i]->getDateEffet();
                } else {
                    $valeur['date'] = $valeurs[$j]->getDateEffet();
                }
                $valeur['valeur'] = $valeursIndex[$i]->getValeur() * $valeurs[$j]->getValeur();
            }
            if (!array_key_exists($valeur['date']->format(Util::DATE_FORMAT), $indexResult)) {
                $indexResult[$valeur['date']->format(Util::DATE_FORMAT)] = $valeur;
            }
            //rechercher le plus proche
            if ($i + 1 < $sizeIndex && $j + 1 < $sizeTaux) {
                if ($valeursIndex[$i]->getDateEffet() == $valeurs[$j]->getDateEffet()) {
                    if ($valeursIndex[$i + 1]->getDateEffet() > $valeurs[$j + 1]->getDateEffet()) {
                        $i++;
                    } else {
                        $j++;
                    }
                } else {
                    if ($valeursIndex[$i]->getDateEffet() > $valeurs[$j]->getDateEffet()) {
                        $i++;
                    } else {
                        $j++;
                    }
                }
            } else {
                if ($i + 1 < $sizeIndex) {
                    $i++;
                } else {
                    if ($j + 1 < $sizeTaux) {
                        $j++;
                    } else {
                        break;
                    }
                }
            }
            $valeur = [];
        }


        return $indexResult;
    }



    public
    function getMissionTauxRemu(): ?MissionTauxRemu
    {
        return $this->missionTauxRemu;
    }



    public function setMissionTauxRemu(?MissionTauxRemu $missionTauxRemu): MissionTauxRemu
    public
    function setMissionTauxRemu(?MissionTauxRemu $missionTauxRemu): MissionTauxRemu
    {
        $this->missionTauxRemu = $missionTauxRemu;

@@ -83,14 +162,16 @@ class MissionTauxRemu implements HistoriqueAwareInterface
    /**
     * @return Collection|MissionTauxRemuValeur[]
     */
    public function getTauxRemuValeurs(): Collection
    public
    function getTauxRemuValeurs(): Collection
    {
        return $this->tauxRemuValeurs;
    }



    public function addTauxRemuValeur(MissionTauxRemuValeur $missionTauxRemuValeur): self
    public
    function addTauxRemuValeur(MissionTauxRemuValeur $missionTauxRemuValeur): self
    {
        $this->tauxRemuValeurs[] = $missionTauxRemuValeur;

@@ -99,7 +180,8 @@ class MissionTauxRemu implements HistoriqueAwareInterface



    public function removeTauxRemuValeur(MissionTauxRemuValeur $missionTauxRemuValeur): self
    public
    function removeTauxRemuValeur(MissionTauxRemuValeur $missionTauxRemuValeur): self
    {
        $this->tauxRemuValeurs->removeElement($missionTauxRemuValeur);

@@ -108,7 +190,8 @@ class MissionTauxRemu implements HistoriqueAwareInterface



    public function getTauxRemuValeur(?\DateTime $date = null): ?MissionTauxRemuValeur
    public
    function getTauxRemuValeur(?\DateTime $date = null): ?MissionTauxRemuValeur
    {
        if (empty($date)) {
            $date = new \DateTime();
@@ -127,7 +210,8 @@ class MissionTauxRemu implements HistoriqueAwareInterface



    public function getValeur(?\DateTime $date = null): ?float
    public
    function getValeur(?\DateTime $date = null): ?float
    {
        $tauxRemuValeur = $this->getTauxRemuValeur($date);
        if ($tauxRemuValeur) {
@@ -139,21 +223,32 @@ class MissionTauxRemu implements HistoriqueAwareInterface



    public function __construct()
    public
    function getValeurs(): Collection
    {
        return $this->tauxRemuValeurs;
    }



    public
    function __construct()
    {
        $this->tauxRemuValeurs = new ArrayCollection();
    }



    public function __toString(): string
    public
    function __toString(): string
    {
        return $this->getLibelle();
    }



    public function getDerniereValeur()
    public
    function getDerniereValeur()
    {
        $valeurRetour     = null;
        $valeurRetourDate = null;
@@ -170,7 +265,8 @@ class MissionTauxRemu implements HistoriqueAwareInterface



    public function getDerniereValeurDate()
    public
    function getDerniereValeurDate()
    {
        $valeurRetourDate = null;
        $valeurs          = $this->tauxRemuValeurs->getValues();
@@ -185,7 +281,44 @@ class MissionTauxRemu implements HistoriqueAwareInterface



    public function setValeur(DateTime $date, float $valeur)
    public
    function setValeurs($tauxRemuValeurs)
    {
        $this->tauxRemuValeurs = new ArrayCollection();
        foreach ($tauxRemuValeurs as $tauxRemuValeur) {
            $this->tauxRemuValeurs[] = $tauxRemuValeur;
        }
    }



    public
    function getValeurAnnee(int $annee): array
    {
        $valeurs        = [];
        $dateDebutAnnee = "01-09-" . $annee;
        $dateFinAnnee   = "01-09-" . $annee + 1;
        $temp           = null;
        $testValeur     = $this->getValeurs();
        foreach ($testValeur as $valeur) {
            $date = $valeur->getDateEffet();
            if (($temp == null || $temp > new DateTime($dateDebutAnnee)) && $date < new DateTime($dateDebutAnnee)) {
                $valeurs[] = $valeur;
                break;
            }
            if ($date >= new DateTime($dateDebutAnnee) && new $date < new DateTime($dateFinAnnee)) {
                $valeurs[] = $valeur;
                $temp      = $date;
            }
        }

        return $valeurs;
    }



    public
    function setValeur(DateTime $date, float $valeur)
    {
        $tauxRemuValeurProche = $this->getTauxRemuValeur($date);
        if ($tauxRemuValeurProche != null && $tauxRemuValeurProche->getDateEffet() == $date) {
Loading