Commit 9b61fedd authored by Laurent Lécluse's avatar Laurent Lécluse
Browse files

Correction bug #17882

parent a368cc93
......@@ -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
......
......@@ -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;
......
......@@ -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
......@@ -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');
}
})
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment