From 73de6099485c7bc0af3ce34d1e0528f19d7d5456 Mon Sep 17 00:00:00 2001
From: Tony Ford <tonyford@strategy-investor.de>
Date: Tue, 29 Oct 2024 17:30:40 +0100
Subject: [PATCH] Fehler in der ewigen Tabelle behoben.

---
 html/_layouts/default.php   |   2 +
 html/assets/css/custom.scss |   5 +
 html/assets/js/script.js    | 198 +++++++++++++++++++++++++++++++++++-
 3 files changed, 202 insertions(+), 3 deletions(-)

diff --git a/html/_layouts/default.php b/html/_layouts/default.php
index 6b469b8..7a41e42 100644
--- a/html/_layouts/default.php
+++ b/html/_layouts/default.php
@@ -432,6 +432,7 @@ if( !empty($csv) ){
       {% endfor %}
     </div>
     <h4 class="tabelle">Tabelle <button>Zweikampf</button><button>Assists</button><button>Tore</button><button class="punktestand active">Punktestand</button></h2>
+    <div class="divTable">
     <table id="tabelle_P" class="tabelle">
       <thead>
         <tr>
@@ -455,6 +456,7 @@ if( !empty($csv) ){
       <tbody>
       </tbody>
     </table>
+    </div>
 
     <table id="tabelle_T" class="tabelle d-none">
       <thead>
diff --git a/html/assets/css/custom.scss b/html/assets/css/custom.scss
index 1295d86..b63ce32 100644
--- a/html/assets/css/custom.scss
+++ b/html/assets/css/custom.scss
@@ -488,4 +488,9 @@ div.scrollen_team {
 .unformated {
   text-decoration: inherit;
   color: inherit;
+}
+
+.divTable {
+  max-height:70vh;
+  overflow: auto;
 }
\ No newline at end of file
diff --git a/html/assets/js/script.js b/html/assets/js/script.js
index f533f9d..521714f 100644
--- a/html/assets/js/script.js
+++ b/html/assets/js/script.js
@@ -394,6 +394,198 @@ function getCsv(saison, runde, spieltag){
   $('#copypaste textarea').text('runde,spieltag,T,H,A,TH,TA,MID\n'+csv);
 }
 
+function calculateEwigePunktestand(){
+  var Ew = {}; 
+  ERGEBNISSE.filter( (a) => ( a.runde == 1 ) ).forEach(
+    function( v ){
+      var H = v.H.toLowerCase();
+      var A = v.A.toLowerCase();
+      if( Ew[H] == undefined ) Ew[H] = { 'S':0, 'P':0, 'Tp':0, 'Tn':0, 'Zp':0, 'Zn':0, 'Tr':[] }
+      Ew[H].S++;
+      Ew[H].P += v.TH*1 > v.TA*1 ? 3 : v.TH*1 == v.TA*1 ? 1 : 0;
+      Ew[H].Tr.push( v.TH*1 > v.TA*1 ? 'S' : v.TH*1 == v.TA*1 ? 'U' : 'N' );
+      Ew[H].Tp += v.TH*1;
+      Ew[H].Tn += v.TA*1;
+      if( Ew[ v.A ] == undefined ) Ew[A] = { 'S':0, 'P':0, 'Tp':0, 'Tn':0, 'Zp':0, 'Zn':0, 'Tr':[] }
+      Ew[A].S++;
+      Ew[A].P += v.TA*1 > v.TH*1 ? 3 : v.TH*1 == v.TA*1 ? 1 : 0;
+      Ew[A].Tp += v.TA*1;
+      Ew[A].Tn += v.TH*1;
+      Ew[A].Tr.push( v.TA*1 > v.TH*1 ? 'S' : v.TH*1 == v.TA*1 ? 'U' : 'N' );
+    }
+  );
+  
+  var tabelle='#tabelle_P tbody';
+  $(tabelle).html('');
+
+  var saison = 0;
+  var M = calculateAllPunktestand().map((a) => ( a[0][0].nt ));
+
+  Object.entries(Ew)
+    .map( (a) => ( [ TEAMS.filter((b) => (b.nt == a[0] ))[0], a[1] ] ) )
+    .sort( (a,b) => ( a[1].P < b[1].P || a[1].P == b[1].P && (a[1].Tp-a[1].Tn) < (b[1].Tp-b[1].Tn) ? 1 : -1 ))
+    .forEach(
+    function(v,i){
+      if( v[0].nt == 'xx' ) return;
+      v[1].Zwk = Object.values( v[0] ).filter((a) =>( a.Zwk != undefined )).map((a) => (a.Zwk)).reduce((a,b) => (a+b));
+      v[1].Td = v[1].Tp - v[1].Tn;
+
+      var border=SAISON_SETTINGS[saison - 26] == i+1 ? 'dashed ' : '';
+      
+      var tr = _e('tr');
+      if( STARTLISTE.length > 1 ) tr.classList = 'gruppe' + j;
+      
+      var td = _e('td');
+      td.classList = border;
+      td.innerText = (i+1);
+      tr.append(td);
+      
+      var t=v[1].Tr.map( (a) => ( a != 'X' ) ? 1 : 0 );
+      var trophy=ERGEBNISSE.filter((a) => ( a.saison==SAISON-1 && a.runde=='F')).map((a) => ( a.TH > a.TA ? a.H : a.A ))[0];
+      trophy = trophy == undefined ? '' : trophy;
+      //var master=TabelleLast.length > 0 ? TabelleLast[0][0].nt : '';
+      var master = '';
+
+      if( t.length == 0 ) t.push(0);
+
+      var S=t.reduce( (a,b) => a+b );
+      var pokal=ERGEBNISSE.filter((a) => ( ( a.saison*1 < saison || saison == 0 ) && a.runde=='F' && ( parseInt(a.TH) > parseInt(a.TA) && a.H.toLowerCase() == v[0].nt.toLowerCase() || parseInt(a.TH) < parseInt(a.TA) && a.A.toLowerCase() == v[0].nt.toLowerCase() ) ) ).length;
+      var finalist=ERGEBNISSE.filter((a) => ( ( a.saison*1 < saison || saison == 0 ) && a.runde=='F' && ( parseInt(a.TH) < parseInt(a.TA) && a.H.toLowerCase() == v[0].nt.toLowerCase() || parseInt(a.TH) > parseInt(a.TA) && a.A.toLowerCase() == v[0].nt.toLowerCase() ) ) ).length;
+      var meistertitel=M.filter( (a,i) => ( a == v[0].nt && ( i < saison - 26 || saison == 0 ) ) ).length;
+      var managervoted=Object.values(MANAGERVOTING_WINNER).filter((a) => (a == v[0].nt)).length;
+
+      var td = _e('td');
+      td.classList = border;
+      td.innerHTML = S;
+      tr.append(td);
+
+      var td = _e('td');
+      td.classList = border;
+      if( MANAGERVOTING ){
+        var _i = _e('i');
+        _i.classList = 'fas fa-thumbs-up ';
+        $(_i).attr('onclick', "teamVoting('"+v[0].nt+"')");
+        if( SAISON_TEAMVOTED.reduce((a,b) => (a.concat(b))).indexOf(v[0].nt) > -1 ){
+          _i.classList += 'done';
+          _i.title = 'Manager dieses Teams hat sein Voting abgegeben!';
+        } else {
+          _i.title = 'Manager dieses Teams hat noch kein Voting abgegeben!';
+        }
+        td.append(_i);
+      }
+
+      var img = _e('img');
+      img.classList = 'flags';
+      img.src = '/images/flags/'+(( v[0].flag ) ? v[0].flag : v[0].nt.toLowerCase())+'.svg';
+      td.append(img);
+
+      var span = _e('span');
+      span.innerText = ' ';
+      td.append(span);
+
+      var _a = _e('a');
+      _a.href = "javascript:calculateTeam("+((saison == 0 && false) ? SAISON_NOW : saison)+",'"+v[0].nt+"\')";
+      _a.innerHTML = v[0].name.replace(/\(NL\)/g,'<sup>'+v[0].nt.toUpperCase()+'</sup></a>');
+      td.append(_a);
+
+      var _a = _e('a');
+      _a.href = v[0].link;
+      _a.target = 'ultrasoccer';
+
+      var _i = _e('i');
+      _i.classList = 'fas fa-link';
+      _a.append(_i);
+      td.append(_a);
+
+      if( trophy.toLowerCase() == v[0].nt.toLowerCase() ){
+        var _i = _e('i');
+        _i.classList = 'fas fa-trophy';
+        _i.title = 'Amtierender Titelgewinner';
+        td.append(_i);
+      }
+
+      if( master.toLowerCase() == v[0].nt.toLowerCase() ){
+        var _i = _e('i');
+        _i.classList = 'fas fa-crown';
+        _i.title = 'Amtierender Meister';
+        td.append(_i);
+      }
+
+      if(  v[0].nt.toLowerCase() == MANAGERVOTING_TEAM ){
+        var _i = _e('i');
+        _i.classList = 'managervoted fas fa-thumbs-up';
+        _i.title = 'Team der Saison, gewählt von den Managern';
+        td.append(_i);
+      }
+      tr.append(td);
+      
+      var td = _e('td');
+      td.classList = border;
+      td.innerText = ((pokal>0) ? pokal : '');
+      tr.append(td);
+      
+      var td = _e('td');
+      td.classList = border;
+      td.innerText = ((meistertitel>0) ? meistertitel : '');
+      tr.append(td);
+      
+      var td = _e('td');
+      td.classList = border;
+      td.innerText = ((finalist>0) ? finalist : '');
+      tr.append(td);
+
+      var td = _e('td');
+      td.classList = border;
+      td.innerText = ((managervoted>0) ? managervoted : '');
+      tr.append(td);
+      
+      var td = _e('td');
+      td.classList = border;
+      td.innerText = v[1].Tr.map( (a) => ( ( a == 'S') ? 1 : 0 ) ).reduce( (a,b) => a+b );
+      tr.append(td);
+      
+      var td = _e('td');
+      td.classList = border;
+      td.innerText = v[1].Tr.map( (a) => ( ( a == 'U') ? 1 : 0 ) ).reduce( (a,b) => a+b );
+      tr.append(td);
+      
+      var td = _e('td');
+      td.classList = border;
+      td.innerText = v[1].Tr.map( (a) => ( ( a == 'N') ? 1 : 0 ) ).reduce( (a,b) => a+b );
+      tr.append(td);
+
+      var td = _e('td');
+      td.classList = border;
+      //td.innerHTML = v[1].Tr.map( (a) => '<'+a+'></'+a+'>' ).slice(-6).join('');
+      td.innerText = '';
+      tr.append(td);
+
+      var td = _e('td');
+      td.classList = border;
+      td.innerText = v[1].Tp+'/'+v[1].Tn;
+      tr.append(td);
+      
+      var td = _e('td');
+      td.classList = border + ' ' + ((v[1].Td > 0 ) ? 'p' : (v[1].Td == 0 ) ? 'u' : 'n');
+      td.innerText = ((v[1].Td > 0 ) ? '+' : '') + v[1].Td;
+      tr.append(td);
+      
+      var td = _e('td');
+      td.classList = border + ' ' + ((v[1].Zwk > 0 ) ? 'p' : (v[1].Zwk == 0 ) ? 'u' : 'n');
+      td.innerText = (v[1].Zwk > 0 ? '+' : '')+(v[1].Zwk / S).toFixed(2);
+      tr.append(td);
+      
+      var td = _e('td');
+      td.classList = border;
+      td.innerText = v[1].P;
+      tr.append(td);
+
+      $(tabelle).append(tr);
+    }
+  );
+
+}
+
 
 function calculatePunktestand(saison,runde,show=true){
 
@@ -482,12 +674,11 @@ function calculatePunktestand(saison,runde,show=true){
   STARTLISTE.forEach(
     function(w,j){
 
-
       Tabelle.filter((a) => ( w.indexOf(a[0].nt) > -1 )).forEach(
         function(v,i){
 
           var border=SAISON_SETTINGS[saison - 26] == i+1 ? 'dashed ' : '';
-          
+  
           var tr = _e('tr');
           if( STARTLISTE.length > 1 ) tr.classList = 'gruppe' + j;
           
@@ -867,7 +1058,8 @@ function calculateTeam(saison,nt){
   $('#tabelle_team tbody').html( n );
 }
 function calculateEwige(){
-  calculatePunktestand(0,'7');
+  //calculatePunktestand(0,'7');
+  calculateEwigePunktestand();
   calculateTabelle(0,'T');
   calculateTabelle(0,'A');
   calculateTabelle(0,'Z');
-- 
GitLab