Commit 928134c9 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Gestion plus fine de la position

parent b664d4c3
Loading
Loading
Loading
Loading
+4 −15
Changes for module/Application/src/Application/Controller/FicheMetier/FicheMetierTypeController.php: 4 added lines, 15 removed lines.
Original line number Diff line number Diff line
@@ -109,11 +109,7 @@ class FicheMetierTypeController extends AbstractActionController{
            if ($form->isValid()) {
                $this->getActiviteService()->create($activite);

                $couple = new FicheMetierTypeActivite();
                $couple->setFiche($fiche);
                $couple->setActivite($activite);
                $couple->setPosition(0);
                $this->getActiviteService()->createFicheMetierTypeActivite($couple);
                $this->getActiviteService()->createFicheMetierTypeActivite($fiche, $activite);

                $this->redirect()->toRoute('fiche-metier-type/afficher', ['id' => $fiche->getId()], [], true);
            }
@@ -142,12 +138,7 @@ class FicheMetierTypeController extends AbstractActionController{

//            if ($form->isValid()) {
                $activite = $this->getActiviteService()->getActivite($data['activite']);

                $couple = new FicheMetierTypeActivite();
                $couple->setFiche($fiche);
                $couple->setActivite($activite);
                $couple->setPosition(0);
                $this->getActiviteService()->createFicheMetierTypeActivite($couple);
                $this->getActiviteService()->createFicheMetierTypeActivite($fiche, $activite);
//            }
        }

@@ -173,10 +164,8 @@ class FicheMetierTypeController extends AbstractActionController{
        $coupleId = $this->params()->fromRoute('id');
        $couple = $this->getActiviteService()->getFicheMetierTypeActivite($coupleId);

        $position = $couple->getPosition();
        if ($direction === 'up')    $position = max(0, $position-1);
        if ($direction === 'down')  $position = $position+1;
        $couple->setPosition($position);
        if ($direction === 'up')    $this->getActiviteService()->moveUp($couple);
        if ($direction === 'down')  $this->getActiviteService()->moveDown($couple);

        $this->getActiviteService()->updateFicheMetierTypeActivite($couple);

+59 −1
Changes for module/Application/src/Application/Service/Activite/ActiviteService.php: 59 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -133,8 +133,66 @@ class ActiviteService {
        return $result;
    }

    public function createFicheMetierTypeActivite($couple)
    /**
     * @param FicheMetierTypeActivite$couple
     */
    public function moveUp($couple) {
        $currentPosition = $couple->getPosition();
        if ($currentPosition !== 1) {
            $activites = $this->getActivitesByFicheMetierType($couple->getFiche());

            $swapWith = null;
            foreach ($activites as $activite) {
                if ($activite->getPosition() === $currentPosition - 1) {
                    $swapWith = $activite;
                    break;
                }
            }

            if ($swapWith) {
                $swapWith->setPosition($currentPosition);
                $couple->setPosition($currentPosition-1);
                $this->updateFicheMetierTypeActivite($swapWith);
                $this->updateFicheMetierTypeActivite($couple);
            }
        }
    }

    /**
     * @param FicheMetierTypeActivite$couple
     */
    public function moveDown($couple) {
        $currentPosition = $couple->getPosition();
        $activites = $this->getActivitesByFicheMetierType($couple->getFiche());

        if ($currentPosition < count($activites)) {

            $swapWith = null;
            foreach ($activites as $activite) {
                if ($activite->getPosition() === $currentPosition + 1) {
                    $swapWith = $activite;
                    break;
                }
            }

            if ($swapWith) {
                $swapWith->setPosition($currentPosition);
                $couple->setPosition($currentPosition+1);
                $this->updateFicheMetierTypeActivite($swapWith);
                $this->updateFicheMetierTypeActivite($couple);
            }
        }
    }

    public function createFicheMetierTypeActivite($fiche, $activite)
    {
        $activites = $this->getActivitesByFicheMetierType($fiche);

        $couple = new FicheMetierTypeActivite();
        $couple->setFiche($fiche);
        $couple->setActivite($activite);
        $couple->setPosition(count($activites) + 1);

        $this->getEntityManager()->persist($couple);
        try {
            $this->getEntityManager()->flush($couple);
+9 −4
Changes for module/Application/view/application/fiche-metier-type/afficher.phtml: 9 added lines, 4 removed lines.
Original line number Diff line number Diff line
@@ -36,7 +36,7 @@ $canEditer = true;
    </div>
    <div class="panel-body">
        <?php if ($canEditer) : ?>
            <a  class="btn btn-primary action"
            <a  class="btn btn-primary action ajax-modal"
                href="<?php echo $this->url('fiche-metier-type/editer-missions-principales', ['id' => $fiche->getId()], [] , true); ?>">
                <i class="fas fa-pencil-alt"></i>
                Éditer missions principales
@@ -71,9 +71,7 @@ $canEditer = true;


        <?php foreach ($activites as $ficheActivite): ?>
        <?php
        ?>
        <h3> <?php echo $ficheActivite->getPosition() . " - " .$ficheActivite->getActivite()->getLibelle(); ?> </h3>
        <h3> <?php echo $ficheActivite->getPosition() . " -> ".$ficheActivite->getActivite()->getLibelle(); ?> </h3>
        <div class="row">
            <div class="col-md-1">
                <a class="btn btn-default mini"
@@ -112,5 +110,12 @@ $canEditer = true;
            event.div.modal('hide');
            window.location.reload();
        });

        $('.modal').bind('shown', function() {
            $('textarea.tinymce-modal').tinymce({
                // TinyMCE Options
            });
        });
    });

</script>