Bonsoir,

Je me heurte depuis ce matin à un petit souci. Je suis sur un petit projet où je récupère des prix via une requete ajax, pour les faire apparaitre sur ma page. Je fais tout dynamiquement (sauf pour ajax, où je passe par php pour récupérer mes valeurs en bdd).

Mon problème donc, c'est que pour calculer un total, je récupère mon tarif dans ma BDD, calcule ma tva et mon prix total. Si je le fais une fois, je n'ai pas de soucis, donc pour un tarif c'est ok. Par contre, si je ré-itère l'appel à la fonction, les prix sont encore bien récupérés, mais je n'arrive pas à récupérer mon ancien tarif pour faire mon total. J'ai essayé de tout stocker dans une fonction externe, dans un input, mais quand j'arrive à la fin de la fonction, je ne les garde pas visiblement.

J'ai aussi vu qu'on ne pouvait pas vraiment return de valeurs par une fonction ajax, donc je ne peux pas vraiment la sortir.

Auriez-vous une idée de solution ?

Ci-dessous mon code js, c'est donc mon tarifHT que j'aimerais sortir à chaque appel de la fonction, pour pouvoir le cumuler au prochain appel, et l'intégrer donc au calcul du TTC :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
    function validationBasket(data, index){
 
        $("#validationPanier").remove();
        $("#totalPrice").remove();
 
        // var ht = 0;
        // var totalHT = calculHT(ht, data);
        if(index == 1){
            var totalHT = data;
        }
        else{
            var oldData = $("#htPrice");
            console.log(oldData);
            console.log(oldData.val());
            // var totalHT = data * 1 + oldData * 1;
        }
 
        var totalTVA = totalHT * 0.2;
        totalTVA = totalTVA.toFixed(2);
        var totalTTC = totalHT * 1 + totalTVA * 1;
 
 
        //Récap Prix
        var $recapPrice = $("<div id = 'totalPrice'><p>Total HT : "+totalHT+"€<br />TVA : "+totalTVA+"€<br />Total TTC : "+totalTTC+"€</p></div>");
        // Création du lien
        var $validPanier = $('<div id="validationPanier"><br />Payer</div>');
        // On récupère la value du HT pour pouvoir le gérer après dans la boucle quand l'index sera supérieur à 1
        var $htValue = $("<input type = 'number' id = 'htPrice' value = "+totalHT+" />");
 
        $("#titreResa").append($recapPrice);
        // Ajout du lien
        $("#titreResa").append($validPanier);
 
    }
 
        function getPrice(index,name,firstname,datereservation,type,tarif)
        {
          //debugger;
          var url = Routing.generate('price', {tarif: tarif});
          $.ajax({
            url: url,
            data: tarif,
            type: 'POST',
            success: function(data){
                $("#resaBillet").append("<p class = 'recapBillet"+index+"'>Billet n°"+index+" - <strong>"+name+" "+firstname+"</strong><br />"+datereservation+" - Tarif "+type+" - <strong>"+data+" € HT</strong><br />");
                deleteBillet(index);
                validationBasket(data, index);
            },
            error: function(data){
                alert('No data');
            }
          });
        }
 
        function addRecapBillet($prototype){
          // On récupère les valeurs des champs qui nous intéressent pour la partie visible du récap
          var name = $('#appbundle_basket_billet_'+(index-1)+'_name').val();
          var firstname = $('#appbundle_basket_billet_'+(index-1)+'_firstname').val();
          var type = $('#appbundle_basket_type option:selected').text();
          var datereservation = $('#appbundle_basket_date').val();
 
          // On vérifie si la checkbox tarif réduit est bien cochée ou non
          var tarifreduit = $('#appbundle_basket_billet_'+(index-1)+'_discount');
            if(tarifreduit.is(':checked'))
            {
              tarifreduit = 'checked';
            }
 
 
          var country = $('#appbundle_basket_billet_'+(index-1)+'_country option:selected').text();
          // On calcule l'âge en fonction de la date choisie dans le billet
          var day = $('#appbundle_basket_billet_'+(index-1)+'_birthdate_day option:selected').val();
          var month = $('#appbundle_basket_billet_'+(index-1)+'_birthdate_month option:selected').val();
          var year = $('#appbundle_basket_billet_'+(index-1)+'_birthdate_year option:selected').val();
          month = month - 1;
          var date = new Date(year,month,day);
 
          // On convertit la date dans un format string pour l'utiliser lors de la modification du billet
          var textdate = formatDate(date);
          var today = new Date();
          var age = Math.floor((today-date) / (365.25 * 24 * 60 * 60 * 1000));
 
 
          // Détermination du tarif en fonction de l'age
            var tarif = "";
          if(age < 4)
            {
              tarif = "bebe";
            }
          else if (age >= 4 && age < 12)
            {
              tarif = "enfant";
            }
          else if (age >= 60)
            {
              tarif = "senior";
            }
          else if (age && tarifreduit.is(':checked'))
            {
              tarif = "reduit";
            }
          else
            {
              tarif = "normal";
            }
 
          // On se sert de l'élément récupéré pour faire notre calcul de tarif
          $("<input type = 'number' id = 'htPrice' value =  />");
          // Placement des différents éléments dans le bloc récap
          $("#titreResa").append("<div id ='resaBillet'></div>");
          getPrice(index,name,firstname,datereservation,type,tarif);
          changeBillet(index, name, firstname, textdate, country, tarifreduit);
          // $("#resaBillet").append(changeBillet($(".recapBillet")));
        }
Merci d'avance