IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Améliorer un script de simulation


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Homme Profil pro
    Client interne
    Inscrit en
    Avril 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Client interne
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Améliorer un script de simulation
    Bonjour,

    Je vous présente en gros le "projet". Actuellement, là où je travaille, on propose à nos usagers de faire des simulations via un fichier Excel qu'ils téléchargent sur le site internet. Mais ce n'est pas très convivial et ils s'en plaignent. Aussi, je trouve que cela peut vite devenir un monstre à comprendre, maintenir, mettre à jour. Il se fait que la personne qui l'a créé ne travaille même plus chez nous.

    Il serait possible de le mettre à jour et de le rendre plus convivial mais je vois bien que nos visiteurs sont de plus en plus nombreux à utiliser un smartphone et donc on devra bien passer à quelque chose de "web" tôt ou tard.

    Je me suis mis, donc, à l'apprentissage accéléré du Javascript ces derniers jours. Et si ça a été très difficile, j'ai quand même bien avancé au final. Mais je bute sur une dernière chose et j'ai l'impression que ça doit vraiment être simple mais à force de passer des heures dessus et à consulter des dizaines de pages web, mon cerveau ne résonne peut-être plus correctement.

    Je sollicite donc votre aide pour me dire si ce que je veux est possible (je pense que c'est ça aussi qui rend mes recherches difficiles, je commence à douter), si ce que j'ai commencé est une bonne idée et s'il y a un meilleur chemin.

    Je ne suis pas webmaster et notre site internet fonctionne sans PHP. Donc, je préfère rester au maximum en Javascript + Jquery. Le reste risque vraiment d'être compliqué.

    -------------------

    Pour rentrer dans les détails :
    - je dois créer un simulateur d'allocations
    - les usagers entre leur catégorie familiale, leurs revenus, ceux de leur partenaires, etc dans un form (ça c'est OK)
    - un script fait le calcul à partir de ce qu'ils ont encodé (ça c'est OK, je l'ai testé, il fonctionne et donne les mêmes résultats que l'Excel)
    - le résultat doit s'afficher en dessous du formulaire (c'est là que le bas blesse)
    ---> dans l'idéal, à chaque fois qu'on modifie un champs
    ---> au pire, en appuyant sur un bouton

    Actuellement, dans ma page web, j'ai le script qui se lance et qui affiche le calcul en dessous du formulaire et j'ai aussi un bouton qui fait appel à une fonction qui remplace un DIV et affiche le résultat du calcul.

    Dans les deux cas, j'ai le même problème. Quand je change une entrée du formulaire, le calcul ne se met pas à jour dans le javascript. Sauf sur Firefox si je recharge la page (alors, il fait le calcul avec ce qui a été encodé avant le F5). Pour Chrome, il ne fait jamais le calcul.

    Je me suis dit, peut-être que c'est parce que je dois afficher les résultats APRES avoir encodé (d'où le bouton) mais ça ne change rien.

    J'ai cherché pour relancer la page de script JS avec un bouton mais IMPOSSIBLE. Le navigateur m'enlève les balises script.

    Si quelqu'un pouvait m'aider, son aide serait vraiment très précieuse.

  2. #2
    Candidat au Club
    Homme Profil pro
    Client interne
    Inscrit en
    Avril 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Client interne
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Les différents codes
    Ne faites pas forcément attention, j'ai essayé parfois beaucoup de trucs, que j'ai parfois mis en commentaire au lieu de les supprimer.

    J'ai changé le nom de mon employeur pour qu'on arrive pas ici, lors d'une recherche Google.

    Code HTML :
    Code html : 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
    <!DOCTYPE html>
    <html>
      <head>
      </head>
      <body>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <p> Cet outil permet de faire des simulations simples pour le calcul du
          montant de l'AXXX et/ou de l'AYYY. Son résultat est informatif et n'engage en
          rien XX. Pour mieux comprendre le calcul détaillé ou
          faire des estimations dans le passé, vous pouvez utiliser le fichier
          excel.<br>
        <p> </p>
        <form name="formulaire"> Prénom : &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <input id="prenom"
     
            value="Prénom" type="text"><br>
          En institution ?&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp; &nbsp;
          <select id="instit">
            <option value="0">Pas en institution</option>
            <option value="1">En institution</option>
          </select>
          <br>
          Catégorie familiale pour l'ARR :
          <select id="catarr">
            <option value="0">Pas d'ARR</option>
            <option value="1">A</option>
            <option value="2">B</option>
            <option value="3">C (1 seul C dans le ménage)</option>
            <option value="4">C (au moins 2 C dans le ménage)</option>
          </select>
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="https://handicap.belgium.be/fr/mon-dossier/categorie-de-situation-familiale.htm"
     
            target="_blank">Comment déterminer ma catégorie ?</a><br>
          Combien de points avez-vous eu pour l'AI :
          <select id="catai">
            <option value="0">Moins de 7 points</option>
            <option value="1">7 ou 8 points</option>
            <option value="2">9 à 11 points</option>
            <option value="3">12 à 14 points</option>
            <option value="4">15 ou 16 points</option>
            <option value="5">17 ou 18 points</option>
          </select>
          <br>
          <br>
          <strong>Revenus de la personne handicapée</strong> <br>
          Du travail
          :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          <input id="trav" value="0" type="number" step="0.01" style="-moz-appearance: textfield"><br>
          De remplacement : <input id="remp" value="0" type="value"> (pension,
          mutuelle, chômage, allocations familiales, ...)<br>
          Autres : &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <input
     
            id="autres" value="0" type="value"><br>
          <br>
          <strong>Revenus du partenaire : &nbsp;&nbsp; </strong> <input id="part"
     
            value="0" type="value"> Uniquement possible en catégorie C ! <br>
          <strong>Revenus non cumulables : </strong> <input id="noncum" value="0"
     
            type="value"><br><button onclick="resetAll()">Reset</button>
          </form>
     
        <div id="bizutage">
          </div>
        <div id="bizut">En attente de données ...
          </div>
        <div id="nawak"><script src="formarrai.js"></script></div>
     
     
     
      </body>
    </html>

    Et le code Javascript :
    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    var prenom = document.getElementById("prenom").value;
    //document.write("Prénom : ",prenom,"<br>"); 
    var instit = parseInt(document.getElementById("instit").value);
    //document.write("Instit ? ",instit,"<br>");
    var catarr = parseInt(document.getElementById("catarr").value);
    //document.write("Catarr ? ",catarr,"<br>");
    var catai = parseInt(document.getElementById("catai").value);
    //document.write("Catai ? ",catai,"<br>");
    var trav = parseFloat(document.getElementById("trav").value);
    //document.write("Trav ? ",trav,"<br>");
    var remp = parseFloat(document.getElementById("remp").value);
    //document.write("Remp ? ",remp,"<br>");
    var autres = parseFloat(document.getElementById("autres").value);
    //document.write("Autres ? ",autres,"<br>");
    var part = parseFloat(document.getElementById("part").value);
    //document.write("Part ? ",part,"<br>");
    var noncum = parseFloat(document.getElementById("noncum").value);
    //document.write("Non cum ? ",noncum,"<br>");
     
    //
     
    const lastUpdate = "01/06/2020";   
    document.write("Dernière mise à jour le : ");
    document.write(lastUpdate);
     
    // variables à indexer régulièrement
     
    /* ici les différents barèmes concernant l'ARR
    A, B et C sont les catégories de ménage. AP/G/T sont les abattements sur le revenu du partenaire (P), sur les autres revenus (G) et sur le travail (T) à 50% (T50) et à 25% (T25)
    */ 
     
    const BARR = {
    A : 7523.29,
    B : 11284.94,
    C : 15250.89,
    AP : 3761.65,
    AG : 700.10,
    AT50 : 4973.19,
    AT25 : 7459.78
    };
     
    /* ici les différents barèmes concernant l'AI
    b1 à b5 sont les catégories de points. AP/T/R sont les abattements sur le revenu du partenaire (P), sur les revenus du travail(T) et sur les revenus de remplacement (R et R2 suivant le seuil)
    */
    const BAI = {
    b1 : 1271.84,
    b2 : 4206.76,
    b3 : 6690.30,
    b4 : 9722.78,
    b5 : 11022.78,
    AP : 40073.35,
    AT : 22899.05,
    AR : 19627.77,
    AR2 : 3270.83 
    };
     
     
    /* Affichage des variables, pour vérifier si tout fonctionne bien ce côté là
    // A supprimer quand le code est correct
     
    document.write("<br>","BARR.A : ",BARR.A,"<br>","BARR.B : ",BARR.B,"<br>","BARR.C : ",BARR.C,"<br>","BARR.AP : ",BARR.AP,"<br>","BARR.AG : ",BARR.AG,"<br>","BARR.AT50 : ",BARR.AT50,"<br>","BARR.AT25 : ",BARR.AT25,"<br>","<br>");
    document.write("BAI.b1 : ",BAI.b1,"<br>","BAI.b2 : ",BAI.b2,"<br>","BAI.b3 : ",BAI.b3,"<br>","BAI.b4 : ",BAI.b4,"<br>","BAI.b5 : ",BAI.b5,"<br>","BAI.AP : ",BAI.AP,"<br>","BAI.AT : ",BAI.AT,"<br>","BAI.AR : ",BAI.AR,"<br>","BAI.AR2 : ",BAI.AR2,"<br>","<br>");
    */
     
    /* création des variables qu'il faudra nourrir avec les données du formulaire
    Idéalement, ils devraient en être issus directement mais comme je n'y arrive pas encore, je les crée avec une valeur de base de zéro
    */
    /*
    var instit = 0;
    var catarr = 0;
    var catai = 0;
    var trav = 0;
    var remp = 0;
    var autres = 0;
    var part = 0;
    var noncum = 0;
    */
     
    /* si la personne mentionne des revenus du partenaire en catégorie A ou B, il y aura forcément un problème dans le calcul car ce n'est normalement pas possible.
    Par souci de facilité, l'usager est prévenu directement sur le formulaire de ne pas le faire et on en tiendra pas compte dans les calculs par la suite.
    */
     
    /* Création des variables qui serviront à déduire le barème de base
    Valeurs à zéro pour permettre de tester les calculs avant d'avoir réussi à les récupérer depuis les champs de formulaire
    */
    var DeducARR;
    var DeducAI;
     
    /* Création des variable pour les calculs de déduction intermédiares
    ARR est Allocation de remplacement de revenus. AI est allocation d'intégration
    */
     
    var DeduARR_RevP = 0;
    var DeduARR_RevT = 0;
    var DeduARR_RevG = 0;
    // RevG comprend les revenus de remplacement et les autres revenus, pour l'ARR
     
    var DeduAI_RevP = 0;
    var DeduAI_RevT = 0;
    var DeduAI_RevR = 0;
    var DeduAI_RevG = 0;
    /* RevG comprend les autres revenus et la part non immunisée des revenus de remplacement pour l'AI. Doit donc se calculer en deux temps. Premier temps --> juste les autres revenus 
    */
     
    var Dedu_NonCum = noncum;
    // dans l'excel, ils sont mentionnés séparément pour l'ARR et l'AI mais je n'ai pas trouvé de raison pour justifier cela. Doit être approfondi
     
    //puis créer la variable qui contiendra toutes les autres
    var DeduARR = 0;
    var DeduAI = 0;
     
    // Calculs qui suivent concernent les abattements et les déductions pour l'ARR
     
    /*Si les revenus du partenaire sont inférieurs ou égaux à l'abattement, ils ne seront donc pas pris en considération. Dans le cas contraire, seuls les revenus qui excèdent l'abattement seront déduits.
    */
     
    if (part <= BARR.AP){
    	var DeduARR_RevP = 0;
    }
    else {
    	var DeduARR_RevP = part - BARR.AP;
    }
     
    /* Calcul de la déduction des revenus du travail
    Si les revenus du travail sont inférieurs ou égaux au barême 50, on ne déduira que la moitié.
    S'ils sont supérieur au barème 50 et inférieurs au barème 25. La première tranche ne sera compté que pour la moitié et la seconde au quart.
    Au delà de 25, tout est déduit.
    */
     
    if (trav === 0){
    	var DeduAI_RevT = 0;
    }
     
    else if (trav <= BARR.AT50){
    	var DeduARR_RevT = trav / 2;
    }
     
    else if (trav <= BARR.AT25){
    	var DeduARR_RevT = (BARR.AT50 / 2) + (((trav - BARR.AT50) / 4) * 3);
    }
     
    else {
    	var DeduARR_RevT = (BARR.AT50 / 2) + (((BARR.AT25 - BARR.AT50) / 4) * 3) + (trav - BARR.AT25);
    }
     
    /*
    Calcul de la déduction des autres revenus.
    Il y a un abattement égal au barème AG. On va reprendre le même calcul que pour les revenus du partenaire basé sur un même principe
    Mais on doit y ajouter la fusion des autres revenus et des revenus de remplacement en ARR dans une nouvelle variable autres2 (pour ne pas que la variable autre ne soit plus utilisable en AI).
    */
     
    var autres2 = (autres + remp);
     
    if (autres2 <= BARR.AG){
    	var DeduARR_RevG = 0;
    }
    else {
    	var DeduARR_RevG = autres2 - BARR.AG;
    }
     
    /* on va additionner toutes les différentes déductions dans une seule variable pour l'ARR
    */
    var DeduARR = DeduARR_RevG + DeduARR_RevP + DeduARR_RevT + Dedu_NonCum;
     
    /* suivant le choix fait dans le formulaire, on va définir ce qu'est ARR au début du calcul puis déduire les revenus. Si le résultat final est négatif, on le met à 0.
    */
     
    if (catarr === 0) {
    	var ARR = 0;
    }
     
    else if (catarr === 1) {
    	var ARR = BARR.A - DeduARR;
    	}
     
    else if (catarr === 2) {
    	var ARR = BARR.B - DeduARR;
    	}	
     
    else {
    	var ARR = BARR.C - DeduARR;
    	}
     
    if (ARR < 0) {
    	var ARR = 0;
    }
    else {
    	var ARR = ARR;
    }
     
     
    /* ARR, derniers calculs
    si catégorie C et que deux au moins le sont dans le couple, alors ce sera le barème B qui sera octroyé au maximum
    Autrement dit, si le montant final calculé est > à B --> B. Sinon, le calcul reste bon (s'il on en croit le fichier excel)
    */
     
    if (catarr === 4 && ARR > BARR.B) {
    	ARR = BARR.B;
    }
     
    else {
    	ARR = ARR;
    }
     
     
    // Calculs qui suivent concernent les abattements et les déductions pour l'AI
     
    /* on va d'abord calculer la déduction des revenus du partenaire
    Il est important de savoir que, ici, si le montant est supérieur à 0, on doit encore le diviser par deux ensuite.
    */
     
    if (part <= BAI.AP){
    	var DeduAI_RevP = 0;
    }
    else {
    	var DeduAI_RevP = (part - BAI.AP) / 2;
    }
     
    /* on va faire un calcul très similaire pour les revenus du travail de la personne handicapée
    on doit créer une variable avec l'abattement car ce sera utile dans une étape ultérieure
    */
     
    if (trav <= BAI.AT){
    	var DeduAI_RevT = 0;
    }
    else {
    	var DeduAI_RevT = (trav - BAI.AT) / 2;
    }
     
    var AbattAI_T = trav - DeduAI_RevT;
     
    /* c'est ici que ça commence à se compliquer le plus !!
    l'immunisation des revenus de remplacement ne dépend pas que d'un seul barème mais aussi du montant total immunisé en revenus du travail. 
    Si tout le pot de l'immunisation des revenus du travail a été utilisé, alors on immunise rien en revenus de remplacement. 
    Le total des immunisations revenus du travail et revenus de remplacement ne peut jamais dépasser le barème des revenus du travail.
    Exemple, si ce barème était de 100 pour les revenus du travail et de 10 pour les revenus de remplacement, on pourrait immuniser le maximum des revenus de remplacement uniquement si les revenus du travail n'excèdent pas dix. Et si les revenus du travail étaient entre 90 et 100, on ne pourrait immuniser que le restant du pot jusqu'à 100.
    La variable BAI.AR représente le seuil de revenus au delà duquel on commence à manger BAI.AR2 qui est le maximum déductible en revenus de remplacement.
     
    Concrètement, ici, on regarde si les revenus de remplacement ne sont pas tout simplement égaux à 0 alors rien à déduire.
    Ensuite on regarde si les revenus du travail laissent la possibilité d'un abattement des revenus de remplacement, sinon on déduit tous les revenus de remplacement.
    Ensuite on regarde si les revenus du travail ne mangent pas la marge et si les revenus de remplacement sont inférieurs à leur propre marge maximale. Dans ce cas, on ne déduit rien.
    Ensuite on regarde si les revenus du travail ne mangent pas la marge et si les revenus de remplacement sont supérieur à leur propre marge. Dans ce cas, on déduit la différence entre revenus de remplacement et leur propre marge.
    Ensuite, on regarde si les revenus du travail mangent une partie de la marge et si cette marge n'est pas supérieur aux revenus de remplacement. Dans ce cas, les revenus de remplacement ne sont pas déduits.
    Enfin, je pense qu'on a épuisé tous les cas de figure, on calcule la différence entre revenus de remplacement et la marge laissée par les revenus du travail. 
    On doit aussi créer une variable avec l'abattement effectué car ce sera utile dans une étape ultérieure.
    */
     
    if (remp === 0) {
    	var DeduAI_RevR = 0;
    }
    else if (trav >= BAI.AT) {
    	var DeduAI_RevR = remp;
    }
    else if (trav <= BAI.AR && remp <= BAI.AR2) {
    	var DeduAI_RevR = 0;
    }
    else if (trav <= BAI.AR && remp > BAI.AR2) {
    	var DeduAI_RevR = remp - BAI.AR2;
    }
    else if (trav > BAI.AR && remp <= (BAI.AR2 - (trav - BAI.AR))) {
    	var DeduAI_RevR = 0;
    }
    else {
    	var DeduAI_RevR = remp - (BAI.AR2 - (trav - BAI.AR));
    }
     
    var AbattAI_R = remp - DeduAI_RevR;
     
    /* pour calculer la déduction des autres revenus, il faut additionner les revenus de remplacement non immunisés (à ce stade DeduAI_RevR) aux autres revenus dans une nouvelle variable autres3.
    Ensuite, on détermine le montant de l'allocation ARR théorique avant déduction.
    Ensuite, on va voir si le total de ce qui a été abattu précédemment en revenus du travail et de remplacement ne dépasse pas le montant du barème sélectionné en ARR et on va calculer l'abbattement maximal pour cette étape.
    Ensuite, on fait l'abattement pour obtenir la dernière déduction à effectuer.
    */
     
    var autres3 = autres +DeduAI_RevR;
     
    // détemination du barème théorique
    if (catarr === 0) {
    	var BarTheoARR = 0;
    }
    else if (catarr === 1) {
    	var BarTheoARR = BARR.A;
    }
    else if (catarr === 2) {
    	var BarTheoARR = BARR.B;
    }
    else {
    	var BarTheoARR = BARR.C;
    }
     
    // détemination de l'abattement maximum
    if (BarTheoARR <= (AbattAI_T + AbattAI_R)) {
    	var AMAX_RevG = 0;
    }
    else {
    	var AMAX_RevG = BarTheoARR - (AbattAI_R + AbattAI_T);
    }
     
    // détermination de la déduction
    if (AMAX_RevG === 0) {
    	var DeduAI_RevG = autres3;
    }
    else if (AMAX_RevG >= autres3) {
    	var DeduAI_RevG = 0;
    }
    else {
    	var DeduAI_RevG = autres3 - AMAX_RevG;
    }
     
    /* on va additionner toutes les différentes déductions dans une seule variable pour l'AI. On remarquera qu'on ne déduit par les revenus de remplacement car ils sont déjà présents dans le calcul des revenus généraux.
     
    */
    var DeduAI = DeduAI_RevG + DeduAI_RevP + DeduAI_RevT + Dedu_NonCum;
     
    /* Derniers calculs pour l'AI
    D'abord, choix du barème. Ensuite on enlève du barème toutes les déductions. 
    Si la personne handicapée vit en instution, le montant doit être réduit de 28%.
    Enfin, on s'assure que le résultat ne soit pas négatif et on remet à zéro si c'est le cas.*/
     
     
    if (catai === 0) {
    	var AI = 0;
    }
     
    else if (catai === 1) {
    	var AI = BAI.b1 - DeduAI;
    	}
     
    else if (catai === 2) {
    	var AI = BAI.b2 - DeduAI;
    	}
     
    else if (catai === 3) {
    	var AI = BAI.b3 - DeduAI;
    	}
     
    else if (catai === 4) {
    	var AI = BAI.b4 - DeduAI;
    	}
     
    else {
    	var AI = BAI.b5 - DeduAI;
    	}
     
    if (AI < 0) {
    	var AI = 0;
    }
    else {
    	var AI = AI;
    }
     
    if (instit === 1) {
    	var AI = AI * 0.72;
    }
    else {
    	var AI = AI;
    }
     
     
     
    /* Addition du résultat du calcul pour l'ARR et pour l'AI pour obtenir le montant annuel.
    Création d'une variable_div12 pour obtenir le montant par mois
    */
     
    var ARRAI = ARR + AI;
    var AI = (Math.round(AI * 100)) / 100;
    var ARR = (Math.round(ARR * 100)) / 100;
    var ARRAI = (Math.round(ARRAI * 100)) / 100;
    var ARRAIdivDOUZE = ARRAI / 12;
    var ARRAIdivDOUZE = (Math.round(ARRAIdivDOUZE * 100)) / 100;
     
    document.write("<br>",prenom,", le montant de votre allocation sera de ",ARRAI,"€ par an et ",ARRAIdivDOUZE,"€ par mois.<br>Ce montant est composé de : ",ARR,"€ (ARR) et de ",AI,"€ (AI).");
     
    $("form :input").change(function(){
     
     
    $("#bizut").replaceWith("<br>",prenom,", le montant de votre allocation sera de ",ARRAI,"€ par an et ",ARRAIdivDOUZE,"€ par mois.<br>Ce montant est composé de : ",ARR,"€ (ARR) et de ",AI,"€ (AI).")
     
    });

  3. #3
    Candidat au Club
    Homme Profil pro
    Client interne
    Inscrit en
    Avril 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Client interne
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    J'ai testé quelque chose, donc j'ai l'impression d'avoir avancé un peu, mais pas encore avec un résultat satisfaisant

    J'ai mis un onclick="CalcSTP()" sur le bouton calcul

    Et j'ai copié-collé tout mon javascript en l'insérant dans une fonction CalcSTP()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function CalcSTP(){
     
    //et terminé par
    }
    Maintenant, quand je cliques sur le bouton, il semble faire les calculs avec les dernières données entrée (Hourrra !)

    Seulement, il y a encore un "hic", c'est que le résultat s'affiche sur une page blanche. Or, il faudrait que cela s'affiche en dessous du formulaire ou dans un champs du formulaire.

  4. #4
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut 374 -> 372
    Salut,

    ligne 372 à supprimer;

  5. #5
    Candidat au Club
    Homme Profil pro
    Client interne
    Inscrit en
    Avril 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Client interne
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Par ailleurs ce bout de code, agit sur la page même et pas dans une nouvelle, mais ne refait pas le calcul

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $("form :input").change(function(){
    $("#bizut").replaceWith("<br>",prenom,", le montant de votre allocation sera de ",ARRAI,"€ par an et ",ARRAIdivDOUZE,"€ par mois.<br>Ce montant est composé de : ",ARR,"€ (ARR) et de ",AI,"€ (AI).")
     
    });
    et ce code modifié comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $("form :input").change(function(){
    $("#bizut").replaceWith(CalcSTP())
     
    });
    fait le bon calcul mais sur une nouvelle page et pas dans la page courante. Pourtant il est censé remplacer la Div Bizut. Aussi, comme il le fait dans une nouvelle page, je dis que le calcul est bon mais ce n'est même pas vrai : le calcul est fait sur base d'un seul paramètre !

    donc soit j'ai le résultat au bon endroit, mais pas bon, ou soit j'ai le bon résultat, mais pas au bon endroit et sur un seul paramètre

    Je continue à chercher ...

  6. #6
    Candidat au Club
    Homme Profil pro
    Client interne
    Inscrit en
    Avril 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Client interne
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par javatwister
    ligne 372 à supprimer;
    oui, je viens de le faire, merci

    cela va paraitre bizarre, mais je l'avais laissée car j'ai tellement eu l'habitude de faire des erreurs dans l'écriture qu'elle me permettait de vérifier qu'au moins le fichier JS était bien chargé jusqu'au bout

  7. #7
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    Je comprends; mais si tu constates que le script fait ce que tu lui demandes, tu va pouvoir épurer ton code (html et js!);

  8. #8
    Candidat au Club
    Homme Profil pro
    Client interne
    Inscrit en
    Avril 2020
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Client interne
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2020
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Je vais répondre si quelqu'un avait le même problème que moi, qu'il puisse trouver la réponse que j'ai eu.

    Quand la fonction agissait, c'est comme si elle ouvrait une nouvelle page.

    Et je me suis souvenu que dans l'autre exemple que j'avais trouvé où cela fonctionnait, c'était un champs formulaire qui était updaté.

    En faisant divers tests et essais erreurs, je me suis rendu compte que :
    - on peut mettre à jour un champs de formulaire à la condition que celui-ci soit compris dans une balise "form"
    - le bouton qui lance la fonction, lui, ne doit PAS être dans le formulaire

    En effet, j'avais réussi à mettre à jour un champs mais comme le bouton était dans le formulaire, il remettait à zéro en même temps le formulaire (?!?). Peut-être qu'il y a un moyen élégant d'éviter cela mais, pour moi, ce fut de mettre ce bouton "calcul" en dehors du formulaire

    Nous avons donc, côté JavaScript, ce bout de code qui change TOUT (après plusieurs jours de recherche !!) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.forms["formulaire2"].elements["toReplaceByCalcul"].value = prenom + ", le montant de votre allocation sera de " + ARRAI + "€ par an et de " + ARRAIdivDOUZE + "€ par mois." + "\n\n" + "Ce montant est composé de : " + ARR + "€ par an pour l'allocation de remplacement de revenus et de " + AI +"€ par an pour l'allocation d'intégration.";
    et côté HTML, j'ai ajouté un champs TEXTAREA, et comme je le voulais en dessous du bouton "calcul", j'ai créé un "form" rien que pour lui :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form name="formulaire2">
    	   <textarea id="toReplaceByCalcul" name="name"
               placeholder="En attente du calcul"
               cols="60" rows="5" disabled="disabled"></textarea>

    J'ai nettoyé mon fichier et j'ai retiré toutes les constantes pour les mettre en dehors de la fonction. J'ai supprimé tout ce qui ne servait plus à rien ou qui avait été créé à des fins de test.
    Maintenant que je sais mettre des données dans des champs de formulaire, j'en ai même profité pour ajouter un champs avec la date de dernière mise à jour des données.
    Il y a encore de la mise en forme à faire, mais ça viendra plus tard, l'essentiel est fait, maintenant cela fonctionne.

    Désolé d'avoir embêté et d'avoir posé la question, quand je viens, c'est que je suis vraiment persuadé d'être dans une impasse, et pourtant j'ai fini par trouver :-D

    Je vous partage le code final, si ça peut aider :

    HTML (qui doit de toute façon être intégré dans un autre site et qui sera embelli à ce moment-là) :
    Code HTML : 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
    <!DOCTYPE html>
    <html>
      <head>
      </head>
      <body>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
        <p> Cet outil permet de faire des simulations simples pour le calcul du
          montant de l'ARR et/ou de l'AI. Son résultat est informatif et n'engage en
          rien le SPF Sécurité Sociale. Pour mieux comprendre le calcul détaillé ou
          faire des estimations dans le passé, vous pouvez utiliser le fichier
          excel.<br>
        <p> </p>
        <form name="formulaire"> Prénom : &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <input id="prenom"
     
            value="Prénom" type="text" "><br>
          En institution ?&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
          &nbsp;&nbsp;&nbsp; &nbsp;
          <select id="instit" ">
            <option value="0">Pas en institution</option>
            <option value="1">En institution</option>
          </select>
          <br>
          Catégorie familiale pour l'ARR :
          <select id="catarr" ">
            <option value="0">Pas d'ARR</option>
            <option value="1">A</option>
            <option value="2">B</option>
            <option value="3">C (1 seul C dans le ménage)</option>
            <option value="4">C (au moins 2 C dans le ménage)</option>
          </select>
          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="https://handicap.belgium.be/fr/mon-dossier/categorie-de-situation-familiale.htm"
    
            target="_blank">Comment déterminer ma catégorie ?</a><br>
          Combien de points avez-vous eu pour l'AI :
          <select id="catai" ">
            <option value="0">Moins de 7 points</option>
            <option value="1">7 ou 8 points</option>
            <option value="2">9 à 11 points</option>
            <option value="3">12 à 14 points</option>
            <option value="4">15 ou 16 points</option>
            <option value="5">17 ou 18 points</option>
          </select>
          <br>
          <br>
          <strong>Revenus de la personne handicapée</strong> <br>
          Du travail
          :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
          <input id="trav" value="0" type="number" step="0.01" style="-moz-appearance: textfield" ><br>
          De remplacement : <input id="remp" value="0" type="number" step="0.01" style="-moz-appearance: textfield" > (pension,
          mutuelle, chômage, allocations familiales, ...)<br>
          Autres : &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <input
     
            id="autres" value="0" type="number" step="0.01" style="-moz-appearance: textfield" ><br>
          <br>
          <strong>Revenus du partenaire : &nbsp;&nbsp; </strong> <input id="part"
     
            value="0" type="number" step="0.01" style="-moz-appearance: textfield" > Uniquement possible en catégorie C ! <br>
          <strong>Revenus non cumulables : </strong> <input id="noncum" value="0" type="number" step="0.01" style="-moz-appearance: textfield"
     
             ><br><button onclick="resetAll()">Reset</button>
     
          </form>
    	   <button onclick="CalcSTP()">Calcul</button><br>
    	   <form name="formulaire2">  
    	   <textarea id="toReplaceByCalcul" name="name"
               placeholder="En attente du calcul"
               cols="60" rows="5" readonly="textareaEdit" ></textarea>
    		   <br>Dernière mise à jour : &nbsp;<input id="lastUpdate" value="0" type="value"></form>
     
     
        <div id="nawak"><script src="formarrai.js"></script></div>
     
     
     
      </body>
    </html>

    Javascript :

    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
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    // champs à updater à chaque mise à jour des montants, permet à l'usager de savoir sur base de quelle indexation le calcul est fait
     
    const lastUpdate = "01/06/2020";
     
    document.forms["formulaire2"].elements["lastUpdate"].value = lastUpdate
     
    // variables à indexer régulièrement
     
    /* ici les différents barèmes concernant l'ARR
    A, B et C sont les catégories de ménage. AP/G/T sont les abattements sur le revenu du partenaire (P), sur les autres revenus (G) et sur le travail (T) à 50% (T50) et à 25% (T25)
    */ 
     
    const BARR = {
    A : 7523.29,
    B : 11284.94,
    C : 15250.89,
    AP : 3761.65,
    AG : 700.10,
    AT50 : 4973.19,
    AT25 : 7459.78
    };
     
    /* ici les différents barèmes concernant l'AI
    b1 à b5 sont les catégories de points. AP/T/R sont les abattements sur le revenu du partenaire (P), sur les revenus du travail(T) et sur les revenus de remplacement (R et R2 suivant le seuil)
    */
    const BAI = {
    b1 : 1271.84,
    b2 : 4206.76,
    b3 : 6690.30,
    b4 : 9722.78,
    b5 : 11022.78,
    AP : 40073.35,
    AT : 22899.05,
    AR : 19627.77,
    AR2 : 3270.83 
    };
     
     
    function CalcSTP(){
     
    var prenom = document.getElementById("prenom").value;
    //document.write("Prénom : ",prenom,"<br>"); 
    var instit = parseInt(document.getElementById("instit").value);
    //document.write("Instit ? ",instit,"<br>");
    var catarr = parseInt(document.getElementById("catarr").value);
    //document.write("Catarr ? ",catarr,"<br>");
    var catai = parseInt(document.getElementById("catai").value);
    //document.write("Catai ? ",catai,"<br>");
    var trav = parseFloat(document.getElementById("trav").value);
    //document.write("Trav ? ",trav,"<br>");
    var remp = parseFloat(document.getElementById("remp").value);
    //document.write("Remp ? ",remp,"<br>");
    var autres = parseFloat(document.getElementById("autres").value);
    //document.write("Autres ? ",autres,"<br>");
    var part = parseFloat(document.getElementById("part").value);
    //document.write("Part ? ",part,"<br>");
    var noncum = parseFloat(document.getElementById("noncum").value);
    //document.write("Non cum ? ",noncum,"<br>");
     
     
     
     
    /* si la personne mentionne des revenus du partenaire en catégorie A ou B, il y aura forcément un problème dans le calcul car ce n'est normalement pas possible.
    Pour ne pas rendre le présent Javascript dans sa version actuelle trop compliqué, on en tient pas compte mais l'usager reçoit un avertissement à côté du champs de formulaire.
    */
     
    /* Création des variables qui serviront à déduire le barème de base
    */
    var DeducARR;
    var DeducAI;
     
    /* Création des variable pour les calculs de déduction intermédiares.
    ARR est Allocation de remplacement de revenus. AI est allocation d'intégration
    */
     
    var DeduARR_RevP = 0;
    var DeduARR_RevT = 0;
    var DeduARR_RevG = 0;
    // RevG comprend les revenus de remplacement et les autres revenus, pour l'ARR
     
    var DeduAI_RevP = 0;
    var DeduAI_RevT = 0;
    var DeduAI_RevR = 0;
    var DeduAI_RevG = 0;
    /* RevG comprend les autres revenus et la part non immunisée des revenus de remplacement pour l'AI. Doit donc se calculer en deux temps. Premier temps --> juste les autres revenus 
    */
     
    var Dedu_NonCum = noncum;
    // dans l'excel, ils sont mentionnés séparément pour l'ARR et l'AI mais je n'ai pas trouvé de raison pour justifier cela. Doit être approfondi
     
    //puis créer la variable qui contiendra toutes les autres
    var DeduARR = 0;
    var DeduAI = 0;
     
    // Calculs qui suivent concernent les abattements et les déductions pour l'ARR
     
    /*Si les revenus du partenaire sont inférieurs ou égaux à l'abattement, ils ne seront donc pas pris en considération. Dans le cas contraire, seuls les revenus qui excèdent l'abattement seront déduits.
    */
     
    if (part <= BARR.AP){
    	var DeduARR_RevP = 0;
    }
    else {
    	var DeduARR_RevP = part - BARR.AP;
    }
     
    /* Calcul de la déduction des revenus du travail
    Si les revenus du travail sont inférieurs ou égaux au barême 50, on ne déduira que la moitié.
    S'ils sont supérieur au barème 50 et inférieurs au barème 25. La première tranche ne sera compté que pour la moitié et la seconde au quart.
    Au delà de 25, tout est déduit.
    */
     
    if (trav === 0){
    	var DeduAI_RevT = 0;
    }
     
    else if (trav <= BARR.AT50){
    	var DeduARR_RevT = trav / 2;
    }
     
    else if (trav <= BARR.AT25){
    	var DeduARR_RevT = (BARR.AT50 / 2) + (((trav - BARR.AT50) / 4) * 3);
    }
     
    else {
    	var DeduARR_RevT = (BARR.AT50 / 2) + (((BARR.AT25 - BARR.AT50) / 4) * 3) + (trav - BARR.AT25);
    }
     
    /*
    Calcul de la déduction des autres revenus.
    Il y a un abattement égal au barème AG. On va reprendre le même calcul que pour les revenus du partenaire basé sur un même principe
    Mais on doit y ajouter la fusion des autres revenus et des revenus de remplacement en ARR dans une nouvelle variable autres2 (pour ne pas que la variable autre ne soit plus utilisable en AI).
    */
     
    var autres2 = (autres + remp);
     
    if (autres2 <= BARR.AG){
    	var DeduARR_RevG = 0;
    }
    else {
    	var DeduARR_RevG = autres2 - BARR.AG;
    }
     
    /* on va additionner toutes les différentes déductions dans une seule variable pour l'ARR
    */
    var DeduARR = DeduARR_RevG + DeduARR_RevP + DeduARR_RevT + Dedu_NonCum;
     
    /* suivant le choix fait dans le formulaire, on va définir ce qu'est ARR au début du calcul puis déduire les revenus. Si le résultat final est négatif, on le met à 0.
    */
     
    if (catarr === 0) {
    	var ARR = 0;
    }
     
    else if (catarr === 1) {
    	var ARR = BARR.A - DeduARR;
    	}
     
    else if (catarr === 2) {
    	var ARR = BARR.B - DeduARR;
    	}	
     
    else {
    	var ARR = BARR.C - DeduARR;
    	}
     
    if (ARR < 0) {
    	var ARR = 0;
    }
    else {
    	var ARR = ARR;
    }
     
     
    /* ARR, derniers calculs
    si catégorie C et que deux au moins le sont dans le couple, alors ce sera le barème B qui sera octroyé au maximum
    Autrement dit, si le montant final calculé est > à B --> B. Sinon, le calcul reste bon (s'il on en croit le fichier excel)
    */
     
    if (catarr === 4 && ARR > BARR.B) {
    	ARR = BARR.B;
    }
     
    else {
    	ARR = ARR;
    }
     
     
    // Calculs qui suivent concernent les abattements et les déductions pour l'AI
     
    /* on va d'abord calculer la déduction des revenus du partenaire
    Il est important de savoir que, ici, si le montant est supérieur à 0, on doit encore le diviser par deux ensuite.
    */
     
    if (part <= BAI.AP){
    	var DeduAI_RevP = 0;
    }
    else {
    	var DeduAI_RevP = (part - BAI.AP) / 2;
    }
     
    /* on va faire un calcul très similaire pour les revenus du travail de la personne handicapée
    on doit créer une variable avec l'abattement car ce sera utile dans une étape ultérieure
    */
     
    if (trav <= BAI.AT){
    	var DeduAI_RevT = 0;
    }
    else {
    	var DeduAI_RevT = (trav - BAI.AT) / 2;
    }
     
    var AbattAI_T = trav - DeduAI_RevT;
     
    /* c'est ici que ça commence à se compliquer le plus !!
    l'immunisation des revenus de remplacement ne dépend pas que d'un seul barème mais aussi du montant total immunisé en revenus du travail. 
    Si tout le pot de l'immunisation des revenus du travail a été utilisé, alors on immunise rien en revenus de remplacement. 
    Le total des immunisations revenus du travail et revenus de remplacement ne peut jamais dépasser le barème des revenus du travail.
    Exemple, si ce barème était de 100 pour les revenus du travail et de 10 pour les revenus de remplacement, on pourrait immuniser le maximum des revenus de remplacement uniquement si les revenus du travail n'excèdent pas dix. Et si les revenus du travail étaient entre 90 et 100, on ne pourrait immuniser que le restant du pot jusqu'à 100.
    La variable BAI.AR représente le seuil de revenus au delà duquel on commence à manger BAI.AR2 qui est le maximum déductible en revenus de remplacement.
     
    Concrètement, ici, on regarde si les revenus de remplacement ne sont pas tout simplement égaux à 0 alors rien à déduire.
    Ensuite on regarde si les revenus du travail laissent la possibilité d'un abattement des revenus de remplacement, sinon on déduit tous les revenus de remplacement.
    Ensuite on regarde si les revenus du travail ne mangent pas la marge et si les revenus de remplacement sont inférieurs à leur propre marge maximale. Dans ce cas, on ne déduit rien.
    Ensuite on regarde si les revenus du travail ne mangent pas la marge et si les revenus de remplacement sont supérieur à leur propre marge. Dans ce cas, on déduit la différence entre revenus de remplacement et leur propre marge.
    Ensuite, on regarde si les revenus du travail mangent une partie de la marge et si cette marge n'est pas supérieur aux revenus de remplacement. Dans ce cas, les revenus de remplacement ne sont pas déduits.
    Enfin, je pense qu'on a épuisé tous les cas de figure, on calcule la différence entre revenus de remplacement et la marge laissée par les revenus du travail. 
    On doit aussi créer une variable avec l'abattement effectué car ce sera utile dans une étape ultérieure.
    */
     
    if (remp === 0) {
    	var DeduAI_RevR = 0;
    }
    else if (trav >= BAI.AT) {
    	var DeduAI_RevR = remp;
    }
    else if (trav <= BAI.AR && remp <= BAI.AR2) {
    	var DeduAI_RevR = 0;
    }
    else if (trav <= BAI.AR && remp > BAI.AR2) {
    	var DeduAI_RevR = remp - BAI.AR2;
    }
    else if (trav > BAI.AR && remp <= (BAI.AR2 - (trav - BAI.AR))) {
    	var DeduAI_RevR = 0;
    }
    else {
    	var DeduAI_RevR = remp - (BAI.AR2 - (trav - BAI.AR));
    }
     
    var AbattAI_R = remp - DeduAI_RevR;
     
    /* pour calculer la déduction des autres revenus, il faut additionner les revenus de remplacement non immunisés (à ce stade DeduAI_RevR) aux autres revenus dans une nouvelle variable autres3.
    Ensuite, on détermine le montant de l'allocation ARR théorique avant déduction.
    Ensuite, on va voir si le total de ce qui a été abattu précédemment en revenus du travail et de remplacement ne dépasse pas le montant du barème sélectionné en ARR et on va calculer l'abbattement maximal pour cette étape.
    Ensuite, on fait l'abattement pour obtenir la dernière déduction à effectuer.
    */
     
    var autres3 = autres +DeduAI_RevR;
     
    // détemination du barème théorique
    if (catarr === 0) {
    	var BarTheoARR = 0;
    }
    else if (catarr === 1) {
    	var BarTheoARR = BARR.A;
    }
    else if (catarr === 2) {
    	var BarTheoARR = BARR.B;
    }
    else {
    	var BarTheoARR = BARR.C;
    }
     
    // détemination de l'abattement maximum
    if (BarTheoARR <= (AbattAI_T + AbattAI_R)) {
    	var AMAX_RevG = 0;
    }
    else {
    	var AMAX_RevG = BarTheoARR - (AbattAI_R + AbattAI_T);
    }
     
    // détermination de la déduction
    if (AMAX_RevG === 0) {
    	var DeduAI_RevG = autres3;
    }
    else if (AMAX_RevG >= autres3) {
    	var DeduAI_RevG = 0;
    }
    else {
    	var DeduAI_RevG = autres3 - AMAX_RevG;
    }
     
    /* on va additionner toutes les différentes déductions dans une seule variable pour l'AI. On remarquera qu'on ne déduit par les revenus de remplacement car ils sont déjà présents dans le calcul des revenus généraux.
    */
     
    var DeduAI = DeduAI_RevG + DeduAI_RevP + DeduAI_RevT + Dedu_NonCum;
     
    /* Derniers calculs pour l'AI
    D'abord, choix du barème. Ensuite on enlève du barème toutes les déductions. 
    Si la personne handicapée vit en instution, le montant doit être réduit de 28%.
    Enfin, on s'assure que le résultat ne soit pas négatif et on remet à zéro si c'est le cas.*/
     
     
    if (catai === 0) {
    	var AI = 0;
    }
     
    else if (catai === 1) {
    	var AI = BAI.b1 - DeduAI;
    	}
     
    else if (catai === 2) {
    	var AI = BAI.b2 - DeduAI;
    	}
     
    else if (catai === 3) {
    	var AI = BAI.b3 - DeduAI;
    	}
     
    else if (catai === 4) {
    	var AI = BAI.b4 - DeduAI;
    	}
     
    else {
    	var AI = BAI.b5 - DeduAI;
    	}
     
    if (AI < 0) {
    	var AI = 0;
    }
    else {
    	var AI = AI;
    }
     
    if (instit === 1) {
    	var AI = AI * 0.72;
    }
    else {
    	var AI = AI;
    }
     
     
     
    /* Addition du résultat du calcul pour l'ARR et pour l'AI pour obtenir le montant annuel.
    Création d'une variable_div12 pour obtenir le montant par mois.
    On fait *100 /100 et on arrondi pout éviter les chiffres de plus de deux virgules. Si on veut une seule virgule, ce sera *10/10 et si on en veut pas, on arrondit directement.
    */
     
    var ARRAI = ARR + AI;
    var AI = (Math.round(AI * 100)) / 100;
    var ARR = (Math.round(ARR * 100)) / 100;
    var ARRAI = (Math.round(ARRAI * 100)) / 100;
    var ARRAIdivDOUZE = ARRAI / 12;
    var ARRAIdivDOUZE = (Math.round(ARRAIdivDOUZE * 100)) / 100;
     
    /* maintenant, on va placer et enrober le résultat obtenu dans un champs Textarea d'un formulaire sur la page web, champs créé expressément à cet effet et non modifiable*/
     
    document.forms["formulaire2"].elements["toReplaceByCalcul"].value = prenom + ", le montant de votre allocation sera de " + ARRAI + "€ par an et de " + ARRAIdivDOUZE + "€ par mois." + "\n\n" + "Ce montant est composé de : " + ARR + "€ par an pour l'allocation de remplacement de revenus et de " + AI +"€ par an pour l'allocation d'intégration.";
     
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise à jour href en javascript
    Par bashou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 22/03/2007, 12h35
  2. code pour afficher sur listview en dao
    Par sanfour_walhan dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 07/12/2006, 21h22
  3. Réponses: 2
    Dernier message: 07/06/2006, 14h13
  4. Réponses: 2
    Dernier message: 02/05/2006, 22h09
  5. Réponses: 3
    Dernier message: 05/12/2005, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo