Commit 9b61fedd authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Correction bug #17882

parent a368cc93
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ en vous inspirant de l'exemple fourni dans le code source de OSE (data/Déploiem
* Le mode de saisie de service Calendaire ne fonctionnait pas. Il a été réparé.
* Dans la fiche intervenant, d'anciennes adresses s'affichaient parfois à la place des actuelles.
* La saisie d'intervenants depuis le menu "Services" fonctionne de nouveau pleinement, y compris avec des intervenants dont les codes comportent des lettres.
* Lors de la saisie de service référentiel, le système de sélection des composantes fonctionne de nouveau.

#OSE 7.0.4

+4 −0
Original line number Diff line number Diff line
@@ -101,11 +101,15 @@ class Saisie extends AbstractForm
    {
        $data = [
            'etape-requise' => [],
            'structures' => [],
        ];
        foreach( $fonctions as $fonction ){
            if ($fonction->isEtapeRequise()){
                $data['etape-requise'][] = $fonction->getId();
            }
            if ($fonction->getStructure()){
                $data['structures'][$fonction->getId()] = $fonction->getStructure()->getId();
            }
        }

        return $data;
+3 −96
Original line number Diff line number Diff line
@@ -132,10 +132,10 @@ EOS;

        $template = <<<EOS
<div class="row">
    <div class="col-md-5">
    <div class="col-md-7">
        %s
    </div>
    <div class="col-md-7">
    <div class="col-md-5">
        %s
    </div>
</div>
@@ -152,8 +152,8 @@ EOS;
EOS;
        $part     .= sprintf(
            $template,
            $this->getView()->formControlGroup($fservice->get('structure')),
            $this->getView()->formControlGroup($fservice->get('fonction')),
            $this->getView()->formControlGroup($fservice->get('structure')),
            $this->getVolumesHorairesRefreshUrl(),
            $this->getView()->formControlGroup($fservice->get('heures'))
        );
@@ -177,100 +177,7 @@ EOS;
        $part .= $this->getView()->formHidden($this->form->get('type-volume-horaire'));
        $part .= $this->getView()->form()->closeTag() . '<br />';

        $this->includeJavascript($part);

        return $part;
    }



    /**
     * @var bool
     */
    protected static $inlineJsAppended = false;



    /**
     *
     * @param string $html
     *
     * @return self
     */
    protected function includeJavascript(&$html)
    {
        $js = $this->getJavascript();

        $request          = \Application::$container->get('request');
        $isXmlHttpRequest = $request->isXmlHttpRequest();

        if ($isXmlHttpRequest) {
            // pour une requête AJAX on ne peut pas utilser le plugin "inlineScript"
            if (!static::$inlineJsAppended) {
                $html                     .= PHP_EOL . "<script>" . PHP_EOL . $js . PHP_EOL . "</script>";
                static::$inlineJsAppended = true;
            }
        } else {
            $this->getView()->inlineScript()->offsetSetScript(100, $js);
        }

        return $this;
    }



    /**
     *
     * @return string
     */
    protected function getJavascript()
    {
        $formId = $this->form->getAttribute('id');

        // collecte des structures associées aux fonctions
        $fonctions          = $this->form->get('service')->getFonctions();
        $structuresFonction = [];
        foreach ($fonctions as $fonction) {
            $structuresFonction[$fonction->getId()] = (($s = $fonction->getStructure()) ? $s->getId() : 0);
        }
        $structuresFonction = json_encode($structuresFonction);

        $js = <<<EOS
var formId = "$formId";
var form   = $("#" + formId);
var structureSelectSel = "select.fonction-referentiel-structure"; 
var fonctionSelectSel  = "select.fonction-referentiel-fonction"; 
var structuresFonction = $structuresFonction;

$(function() {
    applyStructureFonction();
    //$(":input").tooltip();

    $('body')
        .on('change', "#" + formId + " " + fonctionSelectSel, function() {
            applyStructureFonction();
        });
});

/**
 * Si une structure est associée à la fonction sélectionnée, on la sélectionne
 * et interdit les autres structures.
 */
function applyStructureFonction()
{
    var fonctionVal     = $(fonctionSelectSel, form).val();
    var structureSelect = $(structureSelectSel, form);

    $('option', structureSelect).attr('disabled', false);
                
    // si une structure est associée à la fonction sélectionnée
    if (structuresFonction[fonctionVal]) {
        structureSelect.val(structuresFonction[fonctionVal]);
        $('option:not(:selected)', structureSelect).attr('disabled', true);
    }
} 
EOS;

        return $js;
    }
}
 No newline at end of file
+35 −2
Original line number Diff line number Diff line
@@ -232,9 +232,16 @@ $.widget("ose.serviceReferentielForm", {
            that.prevuToRealise();
        });

        this.element.find('select.fonction-referentiel-fonction').change(function(){ that.majDisplayFormation(); });
        this.element.find('select.fonction-referentiel-fonction').change(function(){ that.majDisplay(); });
        that.majDisplay();
    },



        that.majDisplayFormation();
    majDisplay: function()
    {
        this.majDisplayStructure();
        this.majDisplayFormation();
    },


@@ -256,9 +263,35 @@ $.widget("ose.serviceReferentielForm", {



    majDisplayStructure: function()
    {
        var currentFonction = this.element.find('select.fonction-referentiel-fonction').val();
        var structures = this.element.data('fonctions')['structures'];

        $('option', this.getStructureElement()).attr('disabled', false);
        if (structures[currentFonction] != undefined){
            var structure = structures[currentFonction];

            this.getStructureElement().val(structure);
            $('option:not(:selected)', this.getStructureElement()).attr('disabled', true);
        }else{
            console.log('Toutes!!');
        }
        this.getStructureElement().selectpicker('refresh');
    },



    getDivFormationElement: function()
    {
        return this.element.find('.fonction-referentiel-formation').parent();
    },



    getStructureElement: function()
    {
        return this.element.find('select.fonction-referentiel-structure');
    }

})