Imbrication de fonctions et mauvais positionnement

Fermé
belilan770 Messages postés 3 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 31 octobre 2019 - 30 oct. 2019 à 16:59
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.

2 réponses

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
31 oct. 2019 à 15:30
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...



0
belilan770 Messages postés 3 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 31 octobre 2019
Modifié le 31 oct. 2019 à 15:53
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.
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
31 oct. 2019 à 17:15
Comme tu ne sembles pas bien voir... voici :
0
belilan770 Messages postés 3 Date d'inscription mercredi 30 octobre 2019 Statut Membre Dernière intervention 31 octobre 2019 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
31 oct. 2019 à 18:38
Oui j'ai vu. J'ai corrigé cela en rajoutant les <tr></tr>, mais cela ne change absolument rien au résultat.
0