Subversion Repositories eFlore/Applications.cel

Rev

Rev 2863 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/* Héritage */
function WidgetSaisieMessicoles()
{
        this.taxons = {};
}

WidgetSaisieMessicoles.prototype = new WidgetSaisie();

/* Surcharge des fonctions */

// Surcharge ajouterObs
WidgetSaisieMessicoles.prototype.ajouterObs = function() {
        // Fermeture automatique des dialogue de transmission de données
        // @WARNING TEST
        $('#dialogue-obs-transaction-ko').hide();
        $('#dialogue-obs-transaction-ok').hide();

        // vérification : si la détermination est incertaine, obligation
        // de fournir au moins une image
        var certitude = $('#identification-liste').val(),
                nbImages = $('#miniatures img').length,
                imagesOK = true;
        if (certitude != "certaine" && nbImages == 0) {
                imagesOK = false;
                $('#image-obligatoire').show();
        } else {
                $('#image-obligatoire').hide();
        }

        if ((this.validerFormulaire() == true) && imagesOK) {
                this.masquerPanneau('#dialogue-form-invalide');
                //return false;
                // suite des opérations
                this.obsNbre = this.obsNbre + 1;
                $(".obs-nbre").text(this.obsNbre);
                $(".obs-nbre").triggerHandler('changement');
                this.afficherObs();
                this.stockerObsData();
                this.supprimerMiniatures();
                if(! this.especeImposee) {
                        $("#taxon").val("");
                        $("#taxon").data("numNomSel",undefined);
                }
                $('#barre-progression-upload').attr('aria-valuemax', this.obsNbre);
                $('#barre-progression-upload .sr-only').text('0/'+this.obsNbre+" observations transmises");
        } else {
                this.afficherPanneau('#dialogue-form-invalide');
        }
};

// surcharge fonction definirReglesFormValidator()
WidgetSaisieMessicoles.prototype.definirReglesFormValidator = function() {
        // WidgetSaisie.definirReglesFormValidator();
        $("#form-observateur").validate({
                rules: {
                        courriel : {
                                required : true,
                                email : true},
                        courriel_confirmation : {
                                required : true,
                                equalTo: "#courriel"}
                }
        });
        $("#form-station").validate({
                ignore: ':hidden:not("#latitude, #longitude")', // validation des champs cachés...
                errorPlacement: function(error, element) { // ...mais erreur visible
                        error.insertBefore("#coordonnees-geo");
                },
                groups: {
                        latLon: "latitude longitude"
                },
                rules: {
                        latitude : {
                                required: true,
                                range: [-90, 90]
                        },
                        longitude : {
                                required: true,
                                range: [-180, 180]
                        }
                },
                messages: {
                        // astuce pour simuler un message personnalisé pour le groupe "latLon"
                        latitude: "Veuillez géolocaliser votre observation en déplaçant le curseur sur la carte",
                        longitude: "Veuillez géolocaliser votre observation en déplaçant le curseur sur la carte"
                }
        });
        $("#form-obs").validate({
                rules: {
                        "taxon-liste" : "required",
                        taxon : "required",
                        "abondance-liste" : "required",
                        "zone-champ[]" : {
                required : true,
                minlength : 1
            }           
                },
                errorPlacement: function(error, element) { // pas top mais mieux que rien
                        error.insertBefore(element.parent());
                }
        });
        $("#form-date").validate({
                rules: {
                        date : {
                                required : true,
                                date : date
                        }
                }
        });
};

// surcharge fonction validerFormulaire()
WidgetSaisieMessicoles.prototype.validerFormulaire = function() {
        observateur = $("#form-observateur").valid();
        station = $("#form-station").valid();
        obs = $("#form-obs").valid();
        date = $("#form-date").valid();
        return (observateur && station && obs && date);
};

// surcharge fonction stockerObsData()
WidgetSaisieMessicoles.prototype.stockerObsData = function() {
        var lthis = this;
        var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false;
                numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val();
        var nomSel = nomHorsListe ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
                nomRet = nomHorsListe ? $('#taxon').data('nomRet') : this.taxons[numNomSel]['nom_ret'],
                numNomRet = nomHorsListe ? $('#taxon').data('numNomRet') : this.taxons[numNomSel]['num_nom_ret'],
                numTaxon = nomHorsListe ? $('#taxon').data('nt') : this.taxons[numNomSel]['num_taxon'],
                famille = nomHorsListe ? $('#taxon').data('famille') : this.taxons[numNomSel]['famille'],
                referentiel = (numNomSel == undefined) ? '' : this.nomSciReferentiel,
                notes = $('#notes').val();
        // champs spécifques aux messicoles
        var abondance = $('#abondance-liste').val(),
                certitude = $('#identification-liste').val();
        
        $('#liste-obs').data('obsId'+this.obsNbre, {
                'date': $('#date').val(),
                'notes': notes,

                'latitude': $('#latitude').val(),
                'longitude': $('#longitude').val(),
                'commune_nom': $('#commune-nom').text(),
                'commune_code_insee': $('#commune-code-insee').text(),
                'lieudit' : $("#lieudit").val(),
                'station' : $("#station").val(),
                'milieu' : $("#milieu").val(),

                'nom_sel': nomSel,
                'num_nom_sel': numNomSel,
                'nom_ret': nomRet,
                'num_nom_ret': numNomRet,
                'num_taxon': numTaxon,
                'famille': famille,
                'referentiel': referentiel,

                'certitude': certitude,
                'abondance': abondance,

                // Ajout des champs images
                'image_nom' : lthis.getNomsImgsOriginales(),
                'image_b64' : lthis.getB64ImgsOriginales(),

                // Ajout des champs étendus de l'obs
                'obs_etendue': lthis.getObsChpEtendus()
        });
        if (this.debug) {
                console.log($('#liste-obs').data('obsId'+this.obsNbre));
        }
};

/**
 * Affiche une observation dans la liste des observations à transmettre
 */
WidgetSaisieMessicoles.prototype.afficherObs = function() {
        console.log(this.taxons);
        var nomHorsListe = $('#taxon-liste').val() == '?' ? true : false,
                numNomSel = nomHorsListe ? $('#taxon').data('numNomSel') : $('#taxon-liste').val();
        var nomSel = nomHorsListe ? $('#taxon').val() : $('#taxon-liste option:selected').data('nom-a-sauver'),
                //famille = nomHorsListe ? $('#taxon').data('famille') : this.taxons[numNomSel]['famille'],
                referentiel = (numNomSel == undefined) ? '' : this.nomSciReferentiel;

        var commune = $("#commune-nom").text();
        commune = commune.trim() != "" ? commune : $("#carte-recherche").val();
        var code_insee = $('#commune-code-insee').text();
        code_insee = code_insee.trim() != "" ? "("+code_insee+")" : "";
        var latitude = $("#latitude").val();
        var longitude = $("#longitude").val();
        var lieudit = ($('#lieudit').val() != "" ? $('#lieudit').val() : "pas de lieu-dit saisi");
        var station = ($('#station').val() != "" ? $('#station').val() : "pas de station saisie");
        var milieu = ($('#milieu').val() != "" ? $('#milieu').val() : "pas de milieu saisi");

        var date = $("#date").val();
        // champs spécifques aux messicoles
        var culture = ($('#culture-autres-radio').is(':checked') ? $('#culture-autres-input').val() : $('input[name=type-culture]:checked').data('titre'));
        var identification = $('#identification-liste option:selected').data('titre');
        var abondance = $('#abondance-liste option:selected').data('titre');
        var zoneChamp = [];
        // récupération des cases à cocher multiples dans un tableau pour l'abondance
        $('input[name="zone-champ[]"]:checked').each(function() {
                zoneChamp.push(' '+$(this).data('titre'));
        });
        var notes = $("#notes").val();

        // affichage des données de l'observation à transmettre
        $("#liste-obs").prepend(
                '<div id="obs'+this.obsNbre+'" class="row-fluid obs obs'+this.obsNbre+'">'+
                        '<div class="span12">'+
                                '<div class="well">'+
                                        '<div class="obs-action pull-right has-tooltip" data-placement="bottom" '+
                                                'title="Supprimer cette observation de la liste à transmettre">'+
                                                '<button class="btn btn-danger supprimer-obs" value="'+this.obsNbre+'" title="'+this.obsNbre+'">'+
                                                        '<i class="icon-trash icon-white"></i>'+
                                                '</button>'+
                                        '</div> '+
                                        '<div class="row-fluid">'+
                                                '<div class="thumbnail span2">'+
                                                this.ajouterImgMiniatureAuTransfert()+
                                                '</div>'+
                                                '<div class="span9">'+
                                                        '<ul class="unstyled">'+
                                                                '<li>'+
                                                                        '<span class="nom-sci gras">'+nomSel+'</span> '+
                                                                        this.ajouterNumNomSel(numNomSel, referentiel)+
                                                                        ' observé à <span class="gras">'+commune+' '+code_insee+'</span> ['+latitude+' / '+longitude+']'+' le <span class="gras">'+' '+date+'</span>'+
                                                                '</li>'+
                                                                '<li>'+
                                                                        '<div class="row-fluid">'+
                                                                                '<span class="span4">Lieu-dit : <span class="gras">'+lieudit+'</span></span>'+
                                                                                '<span class="span4">Station : <span class="gras">'+station+'</span></span>'+
                                                                                '<span class="span4">Milieu : <span class="gras">'+milieu+'</span></span>'+
                                                                        '</div>'+
                                                                '</li>'+
                                                                '<li>'+ 
                                                                        '<div class="row-fluid">'+
                                                                                '<span class="span4">Culture de type <span class="gras">'+culture+'</span></span>'+
                                                                                '<span class="span4">Identification <span class="gras">'+identification+'</span></span>'+
                                                                                '<span class="span4">Abondance de <span class="gras">'+abondance+'</span></span>'+
                                                                        '</div>'+
                                                                '</li>'+
                                                                '<li>'+ 
                                                                        'Espèce située en <span class="gras">'+zoneChamp+'</span> du champ'+
                                                                '</li>'+
                                                                '<li>'+
                                                                        'Notes : <span class="discretion">'+notes+'</span>'+
                                                                '</li>'+
                                                        '</ul>'+
                                                '</div>'+
                                        '</div>'+
                                '</div>'+
                        '</div>'+
                '</div>');
        $('#zone-liste-obs').removeClass("hidden").show();
};

WidgetSaisieMessicoles.prototype.surAutocompletionTaxon = function(event, ui) {
        $("#taxon").data(ui.item);
        if (ui.item.retenu == true) {
                $("#taxon").addClass('ns-retenu');
        } else {
                $("#taxon").removeClass('ns-retenu');
        }
        // détection de si c'est un(e?) messicole ou pas
        var panneauAvertissementNonMessicole = $('#avertissement-non-messicole');
        panneauAvertissementNonMessicole.hide();
        if (nnr_messicoles.indexOf(parseInt(ui.item.numNomRet)) == -1) {
                panneauAvertissementNonMessicole.show();
        }
};

WidgetSaisieMessicoles.prototype.ajouterNumNomSel = function(numNom, referentiel) {
        var nn = '';
        if (numNom == '' || numNom == undefined) {
                nn = '<span class="alert-error">[non lié au référentiel]</span>';
        } else {
                nn = '<span class="nn">[nn'+numNom+']</span>'
                + '<span class="referentiel-obs"> '
                + referentiel+'</span>';
        }
        return nn;
};

// surcharge, abadon du mécanisme générique et bidouillage en dur (plus facile
// car champs radio / checkboxes)
WidgetSaisieMessicoles.prototype.getObsChpEtendus = function() {
        var champs = [];

        var zoneChamp = [];
        $('input[name="zone-champ[]"]:checked').each(function() {
                zoneChamp.push($(this).val());
        });
        //console.log("zc:", zoneChamp);
        // obligatoire donc jamais vide (on croise les doigts)
        champs.push({
                cle: "zoneDuChamp",
                label: "Zone du champ",
                valeur: zoneChamp.join()
        });

        var typeCulture = $('input[name=type-culture]:checked').val();
        if (typeCulture == "autres") {
                typeCulture = $('#culture-autres-input').val();
        }
        //console.log("tc:", typeCulture);
        if (typeCulture != '') {
                champs.push({
                        cle: "typeDeCulture",
                        label: "Type de culture",
                        valeur: typeCulture
                });
        }

        return champs;
}




/* jQuery en vrac */
$(document).ready(function() {
        // super popover qui va chercher son contenu dans un div à côté (pour les
        // boutons d'aide des types de champs, etc.)
        $('[data-toggle="popover"]').popover({
        html : true, 
        content: function() {
                        var parentFor = $(this).parent().attr("for");
                        var popoverHtmlContentDiv = $('.popover-html-content[data-for="' + parentFor + '"]');
                        return popoverHtmlContentDiv.html();
        }
    });

    // Activation de la saisie si on clique sur 'Autres' (type de champ)
        function gererAffichageChampAutreCulture() {
        var input = $('#culture-autres-input');
                ($('#culture-autres-radio').is(':checked')) ? input.show() && input.focus() : input.hide();
    }
    $('.culture').change(gererAffichageChampAutreCulture);
        // ... et aussi au chargement du widget, si la sélection est restée sur "Autre"
        gererAffichageChampAutreCulture();

    // Affichage de l'espèce liée au référentiel sélectionné lors de la sélection 'Autres' (espèce)
        function gererAffichageChampAutreEspece() {
        var option = $('#taxon-liste').val();
        var taxonCompletion = $('#taxon-input-groupe');
        if (option == '?') {
                taxonCompletion.show();
                $('#taxon').focus();
        }
        else {
                taxonCompletion.hide();
        }
    }
    $('#taxon-liste').change(gererAffichageChampAutreEspece);
        // ... et aussi au chargement du widget, si la sélection est restée sur "Autre espèce"
        gererAffichageChampAutreEspece();

    // On masque l'option par défaut pour l'abondance puisque le choix est obligatoire
    $('#abondance-liste').click(masquerTitreListe('abondance'));
    function masquerTitreListe(element) {
                $('#' + element + '-liste .a-masquer').hide();
        }
});