Imbrication de fonctions et mauvais positionnement

Messages postés
3
Date d'inscription
mercredi 30 octobre 2019
Statut
Membre
Dernière intervention
31 octobre 2019
- - Dernière réponse : belilan770
Messages postés
3
Date d'inscription
mercredi 30 octobre 2019
Statut
Membre
Dernière intervention
31 octobre 2019
- 31 oct. 2019 à 18:38
Bonjour,
Tout d'abord, je voudrais dire que j'ai un niveau très basique en JavaScript. Ensuite, je sais que certaines personnes vont m'indiquer à juste titre que j'utilise d'anciennes méthodes, que je ferais mieux de ceci et cela...
Je sais cela mais je suis limité par notre software interne qui est assez vieux et devrait être changé en 2021. Donc ce que je cherche, c'est de l'aide avec ce que j'ai fait.
Ceci étant dit, voici la description du problème.
Nous utilisons une plateforme pour pour la gestion de nos taches et elle a été développée de telle façon que nous devons créer nos rapports de la manières suivantes:
Le but de ce rapport est de créer une liste des projets par chargé de projets et par status de tâches pour chaque chargé de projets. pour chaque statut, un sous-total des coûts.


1. Je crée différentes requêtes SQL pour accéder aux données désirées
2. Je récupère les données en les mentionnant via {{fields.planned_cost}} comme dans le code ci-dessous, et je peux les manipuler via des scripts
3. J'effectue mes sous-totaux via JavaScript car je ne peux faire que les totaux généraux via SQL

Voici mes différents codes.
1. Cette fonction vérifie sur quel chargé de projet on est:
function CheckTechnician(value) {
if(previous_tech!=value){
document.writeln('<tr><td></td></tr>');
document.writeln('<tr style="background-color: lightgray">');
document.writeln('<th colspan="2" style="background-color: lightgray;color: red">Project Manager:</th>');
document.writeln('<th colspan="10" style="background-color: lightgray;color:red ">'+value+'</th>');
document.writeln('</tr style="background-color: lightgray">');
document.writeln('<tr><td></td></tr>');

}
previous_tech = value;

2. celle-ci vérifie le statuts de chaque projet
function Checkstatus(value) {
if(previous_status!=value){
if(ctr>0) {
document.writeln('<td colspan="5"></td>');
document.writeln('<td colspan="1" style="border-top-style:solid;border-top-width: thin;font-weight: bold">Sums:</td>');
document.writeln('<td colspan="1" style="border-top-style:solid;border-top-width: thin;font-weight: bold">' + qty + '</td>');
document.writeln('<td colspan="1" style="border-top-style:solid;border-top-width: thin;font-weight: bold">' + qty1 + '</td>');

qty = 0.0;
qty1 = 0.0;
}
ctr++;

document.writeln('<tr><td></td></tr>');
document.writeln('<tr>');
document.writeln('<th colspan="3"></th>');
document.writeln('<th colspan="10">'+value+'</th>');
document.writeln('</tr>');
document.writeln('<th width="3%">Req_ID</th>')
document.writeln('<th width="25%">PM</th>')
document.writeln('<th width="45%">Name</th>')
document.writeln('<th width="10%">Status</th>')
document.writeln('<th width="5%">Start Date</th>')
document.writeln('<th width="5%">End Date</th>')
document.writeln('<th width="5%">Pl. Cost</th>')
document.writeln('<th width="5%">Pl. Price</th>')
document.writeln('<th width="5%">Margin</th>')
document.writeln('<tr><td></td></tr>');

}
previous_status = value;
}

3. Enfin, c'est ici que j'appelle les fonctions
<tbody>

{{#rec.rows}}
<script>CheckTechnician('{{fields.pm}}')</script>
<script>Checkstatus('{{fields.status}}')</script>



<tr>
<td width="3%">{{fields.request}}</td>
<td width="25%">{{fields.pm}}</td>
<td width="45%">{{fields.name}}</td>
<td width="10%">{{fields.status1}}</td>
<td width="5%">{{fields.planned_start_date}}</td>
<td width="5%">{{fields.planned_end_date}}</td>
<td width="5%">{{fields.planned_cost}} <script>QuantitySum({{fields.planned_cost}})</script></td>
<td width="5%">{{fields.planned_price}}<script>QuantitySum1({{fields.planned_price}})</script></td>
<td width="5%">{{fields.planned_margin}}</td>



</tr>

{{/rec.rows}}



</tbody>


Voici le résultat dans la capture d'écran suivante:


Comme vous pouvez le voir sur ce qui est entouré en rouge, ce sous-total est celui de Amy et il se positionne après le changement de chargé de projet en "Aymar".
Ensuite, ca reste correct jusqu'au moment ou on change de chargé de projet.
J'ai mal fait quelque chose dans mes scripts, mais quoi?

J'ai déjà essayé d'inverser les deux "appels" aux fonction, mais le résultat est alors pire.
Mes variables sont bien sur toutes déclarées, et tous mes sous-totaux sont bons.

Merci.
Afficher la suite 

2 réponses

Messages postés
26776
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2019
1882
0
Merci
Bonjour,

Déjà, quand tu postes du code sur le forum, pense à indiquer le LANGAGE dans les balises de code afin d'avoir la coloration syntaxique et les éventuelles indentations.
Explications disponibles ici :


Ensuite, tu as un </tr> en plein milieu de tes <th> .. et tu ne remets pas de <tr> ... étrange
document.writeln('<th colspan="10">'+value+'</th>');
document.writeln('</tr>');
document.writeln('<th width="3%">Req_ID</th>')


Ensuite, il nous sera difficile de vérifier quoi que ce soit vu que nous ne disposons pas des données qui te permettent de générer cet affichage.
L'idéal serait que tu affiches le code source généré de ta page dans ton navigateur ( CTRL +U ) et que tu regardes si les balises html sont bien placées là où tu le souhaites.


Et enfin..

Ensuite, je sais que certaines personnes vont m'indiquer à juste titre que j'utilise d'anciennes méthodes, que je ferais mieux de ceci et cela...
Je sais cela mais je suis limité par notre software interne qui est assez vieux et devrait être changé en 2021.

Ah oui.. faire du writeln c'est clairement dépassé .......
mais sachque que l'ancienneté de ton software ne change rien...
Les fonctions de base de javascript qui permettent de manipuler le DOM directement existent depuis très très très longtemps.... et leur éventuelle compatibilité ne dépend que du navigateur internet qui les affiche.
Donc à moins que le soft n'utilise NETSCAPE ou Internet explorer 3 (et même là.. je ne suis pas sûr que ça n'existait pas déjà...) il serait préférable de manipuler le DOM pour créer tes lignes/cellules...



Commenter la réponse de jordane45
Messages postés
3
Date d'inscription
mercredi 30 octobre 2019
Statut
Membre
Dernière intervention
31 octobre 2019
0
Merci
Bonjour,
j'ai un <tr> juste la ligne au dessus (ligne n°2).
document.writeln('<tr><td></td></tr>');
document.writeln('<tr>');
document.writeln('<th colspan="3"></th>');
document.writeln('<th colspan="10">'+value+'</th>');
document.writeln('</tr>');


Concernant la page, elle sort directement de notre programme vers un PDF, donc il m'est impossible de vérifier les balises d'une page.
Je n'ai que mon fichier HTML, je l'upload dans notre programme et ensuite je génère le rapport.


Je suis disponible pour faire un TeamViewer ou un Google Hangout avec partage d'écran pour expliquer exactement comment cela fonctionne, cela sera plus facile.
jordane45
Messages postés
26776
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2019
1882 -
Comme tu ne sembles pas bien voir... voici :
belilan770
Messages postés
3
Date d'inscription
mercredi 30 octobre 2019
Statut
Membre
Dernière intervention
31 octobre 2019
> jordane45
Messages postés
26776
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
15 novembre 2019
-
Oui j'ai vu. J'ai corrigé cela en rajoutant les <tr></tr>, mais cela ne change absolument rien au résultat.
Commenter la réponse de belilan770