Gousgounis / Σύστημα δηλώσεων ΤΕΕ

// ==UserScript==
// @name        Σύστημα δηλώσεων ΤΕΕ
// @namespace   http://www.meleth.gr
// @description Βελτιώσεις στο σύτημα του ΤΕΕ. Επιτρέπει την αντιγραφή κειμένου απο ανενεργά κελιά, εμφανίζει στην λίστα δηλώσεων το όνομα ιδιοκτήτη και τον αριθμό αρχείων για ανέβασμα. Αριθμεί τις δηλώσεις. Επιτρέπει τη γρήγορη αντιγραφή επικόλληση στοιχείων ιδιοκτητών απο άλλες δηλώσεις. Προσθέτει προσωπικές σημειώσεις
// @include     https://portal.tee.gr/ypeka/auth/pages/app/globalSearchDilosi.jspx*
// @include     https://portal.tee.gr/ypeka/auth/pages/app/dilosi.jspx*
// @include     https://portal.tee.gr/ypeka/auth/pages/app/dilosi2.jspx*
// @include     https://portal.tee.gr/ypeka/auth/pages/app/dilosi3.jspx*
// @license     MIT
// @version     1.6
// @grant   GM.getValue
// @grant   GM.setValue
// ==/UserScript==


function init(){

console.log("Έναρξη της ρουτίνας");
document.removeEventListener("click", function() { setTimeout(function(){ CheckIfActive(); }, 1500); }, false);
  
console.log("Έλεγχος καρτέλας");
  
var Sheet = 0;
if (document.getElementsByClassName("x2f")[0]){
  if (document.getElementsByClassName("x2f")[0].tBodies[0].rows[0].cells[1].innerHTML =="Νόμος Υπαγωγής") {
   Sheet = 1;
   console.log("Τρέχων πίνακας: Λίστα Δηλώσεων");
  } else if(document.getElementsByClassName("x2f")[0].tBodies[0].rows[0].cells[1].innerHTML == "#Τύπου"){
   Sheet = 3;
   console.log("Τρέχων πίνακας: Ανέβασμα Αρχείων");  
  } else if(document.getElementsByClassName("x2f")[0].tBodies[0].rows[0].cells[1].innerHTML == "Επώνυμο  - Όνομα - Ιδιότητα"){
   Sheet = 4;
   console.log("Τρέχων πίνακας: Στοιχεία ιδιοκτητών");
  } else if(document.getElementsByClassName("x2f")[0].tBodies[0].rows[0].cells[1].innerHTML == "Είδος"){
   Sheet = 5;
   console.log("Τρέχων πίνακας: Οικονομικά στοιχεία");
  }
}
  
if (window.location == "https://portal.tee.gr/ypeka/auth/pages/app/dilosi3.jspx" || window.location == "https://portal.tee.gr/ypeka/auth/pages/app/dilosi2.jspx"){
  
  console.log("Μετατροπή των input & textarea απο diabled σε readonly");
Unlock('input');
Unlock('textarea');

  if( Sheet !=3 && Sheet !=1) { 
console.log("Ανάκτηση στοιχείων ιδιοκτήτη και υπολοιπόμενων αρχείων τρέχουσας δήλωσης");
var CurOwner, CurAA, FilesLeft;
inputs = document.getElementsByTagName("td");
  for (index = 0; index < inputs.length; ++index) {
   if (inputs[index].innerHTML == '<span class="xc">Ιδιοκτήτης</span>') {
   CurOwner = inputs[index+2].innerHTML;
   CurAA = inputs[index-1].getElementsByTagName("span")[0].innerHTML;
    } 
    // Στον 4014 τα υπολοιπόμενα αρχεία δεν είναι bold οπότε χρειάζεται νέα ρουτίνα για την ανάκτηση
   if (inputs[index].innerHTML.indexOf('<span style="font-weight:bold;">') > -1) {
   FilesLeft = inputs[index].getElementsByTagName("span")[0].innerHTML;
    }
    
  }
      (async () => {
  await GM.setValue("Owner"+CurAA, CurOwner+"");
  await GM.setValue("Files"+CurAA, parseInt(0+FilesLeft));
          console.log("Ιδιοκτήτης δήλωσης "+CurAA+": "+CurOwner);
          console.log("Υπολειπόμενα αρχεία: "+FilesLeft);
        })();
  }
  
  console.log("Προσθήκη σημειώσεων");

  var Cur_simiosi;
  (async () => {
    
  let Cur_simiosi = await GM.getValue("simiosi"+CurAA);
	if (!document.getElementById("simiosi") && document.getElementsByClassName("xw")[1]){
  var midtable=document.getElementsByClassName("xw")[1];
  var newrow=midtable.insertRow(midtable.rows.length);
  var newcell=newrow.insertCell(0);
  newcell.colSpan = "3";
  newcell.innerHTML = '<textarea id="simiosi" rows="3" cols="50" placeholder="Προσωπικές Σημειώσεις"></textarea>';
  if (Cur_simiosi) {document.getElementById("simiosi").value = Cur_simiosi;}
  newcell.addEventListener("keyup", function() { 
    (async () => {
    await GM.setValue("simiosi"+CurAA, document.getElementById("simiosi").value+""); 
      })();
  }, false);
 }
    
  })();
}
  
    
if (document.getElementsByClassName("x2f")[0]) {
console.log("Προσθήκη στήλης στον πίνακα δηλώσεων");
	var tblBodyObj = document.getElementsByClassName("x2f")[0].tBodies[0];
	for (var i=0; i<tblBodyObj.rows.length; i++) {
		var newCell = tblBodyObj.rows[i].insertCell(-1);
    newCell.className = tblBodyObj.rows[i].cells[1].className;
    // Όνομα ιδιοκτήτη
    if (Sheet==1){
	(async () => {
    if (i==0) {newCell.innerHTML = "Ιδιοκτήτης";} else {
    newCell.innerHTML = await GM.getValue("Owner"+tblBodyObj.rows[i].cells[0].getElementsByTagName("a")[0].innerHTML);
    }
  })();
	(async () => {
    newCell.title = await GM.getValue("simiosi"+tblBodyObj.rows[i].cells[0].getElementsByTagName("a")[0].innerHTML);
  })();
      
      
      
    } else  if (Sheet==4){
      // Copy Paste ιδιοκτητών
            if (i>0) {
      newCell.innerHTML = '<a href="#" id="Copybtn_'+i+'">Copy</a>';
      newCell.innerHTML += '<br><a href="#" id="Pastebtn_'+i+'">Paste</a>';
        newCell.getElementsByTagName("a")[0].addEventListener("click", function() { CopyOwner(this.id.split("_")[1]); }, false);      
        newCell.getElementsByTagName("a")[1].addEventListener("click", function() { PasteOwner(this.id.split("_")[1]); }, false);      
            }else{newCell.innerHTML = "Εργαλεία";}
    }
  }
  console.log("Προστέθηκαν "+i+" στήλες");
}
  
if (Sheet==1){
  if (document.getElementsByClassName("x2f")[0]) {
	var tblBodyObj = document.getElementsByClassName("x2f")[0].tBodies[0];
	for (var i=0; i<tblBodyObj.rows.length; i++) {
		var newCell = tblBodyObj.rows[i].insertCell(-1);
    newCell.className = tblBodyObj.rows[i].cells[1].className;
    // Υπολοιπόμενα αρχεία
	(async () => {
    if (i==0) {newCell.innerHTML = "Υπολ.<br>Αρχεία";
              } else {
    newCell.innerHTML = await GM.getValue("Files"+tblBodyObj.rows[i].cells[0].getElementsByTagName("a")[0].innerHTML);
              }
  })();

  (async () => {
        // Ποια αρχεία;
    newCell.title = await GM.getValue("WhatFiles"+tblBodyObj.rows[i].cells[0].getElementsByTagName("a")[0].innerHTML);
  })();

  }
}
 

  // Αλλαγή σελίδας δηλώσεων με drop down (μεγαλύτερη καθυστέριση)
  if (document.getElementById("DilosiTable-nb__xc_c")){document.getElementById("DilosiTable-nb__xc_c").addEventListener("change", function() { setTimeout(function(){ CheckIfActive(); }, 2500); }, false);}
}       

  
if (Sheet==3){
  console.log("ανάκτηση ανεβασμένων αρχείων");
  var tblBodyObj = document.getElementsByClassName("x2f")[0].tBodies[0];
  var WhatFilesText = "Απο τα απαιτούμενα αρχεία εκκρεμούν:\n";
	for (var i=1; i<tblBodyObj.rows.length; i++) {
    if (tblBodyObj.rows[i].cells[3].getElementsByTagName("img")[0].src == "https://portal.tee.gr/ypeka/auth/adf/images/checkdc.gif") {
      if (tblBodyObj.rows[i].cells[7].innerHTML ==0 ) {WhatFilesText += " - " + tblBodyObj.rows[i].cells[2].innerHTML + "\n";}
    }
	}
  CurAA = document.getElementsByTagName("span")[2].innerHTML;
  	(async () => {
  await GM.setValue("WhatFiles"+CurAA, WhatFilesText);
  })();
}
    

  
if (Sheet==5){
  console.log("έλεγχος για δόσεις");
  var tblBodyObj = document.getElementsByClassName("x2f")[0].tBodies[0];
	TotalPliromes = 0;
  TotalProstimo = 0;
  for (var i=1; i<tblBodyObj.rows.length; i++) {
    TotalPliromes += parseFloat(tblBodyObj.rows[i].cells[9].innerHTML.replace(",", "."));
    TotalProstimo += parseFloat(tblBodyObj.rows[i].cells[4].innerHTML.replace(",", "."));
	}
  	(async () => {
  await GM.setValue("Payments"+CurAA, "απομένει για πληρωμή ποσό: " + TotalPliromes + "€\n απο το συνολικό: " + TotalProstimo + "€");
  })();
  console.log("Πρέπει να εξοφληθεί ακόμη ποσό :" + TotalPliromes)
}  
  
 
console.log("ReRun check (έλεγχος αλλαγής περιεχομένων σελίδας), λόγω ajax");
  
  if (document.getElementsByClassName("x2f")[0]){ document.getElementsByClassName("x2f")[0].value = Sheet;  }

   document.addEventListener("click", function() { console.log("Click"); setTimeout(function(){ CheckIfActive(); }, 1500); }, true);
  
console.log("----- Τέλος της ρουτίνας");
}


function Unlock(what){
  var inputs, index;
  inputs = document.getElementsByTagName(what);
  for (index = 0; index < inputs.length; ++index) {
   if (inputs[index].disabled == true) {
     if (inputs[index].type != "checkbox") {
       inputs[index].disabled = false;}
    inputs[index].readOnly = true;
    }
  }
}

function CopyOwner(RowNo){
    var counts = 0;
  	var tblBodyObj = document.getElementsByClassName("x2f")[0].tBodies[0];
  	for (var i=1; i<tblBodyObj.rows[RowNo].cells.length-1; i++) {
   CellData = tblBodyObj.rows[RowNo].cells[i].getElementsByTagName("input");
      for (index = 0; index < CellData.length; ++index) {
	(async () => {
  await GM.setValue("Copy"+counts, CellData[index].value);
  })();
        counts = counts +1;
      }
   }   
}

function PasteOwner(RowNo){
    var counts = 0;
  	var tblBodyObj = document.getElementsByClassName("x2f")[0].tBodies[0];
  	for (var i=1; i<tblBodyObj.rows[RowNo].cells.length-1; i++) {
   CellData = tblBodyObj.rows[RowNo].cells[i].getElementsByTagName("input");
      for (index = 0; index < CellData.length; ++index) {
	(async () => {
    CellData[index].value = await GM.getValue("Copy"+counts);
   })();
     counts = counts +1;
      }
   }   
}


function CheckIfActive(){

  if (document.getElementsByClassName("x2f")[0].value){
    console.log("Το script είναι ήδη ενεργό στην καρτέλα "+document.getElementsByClassName("x2f")[0].value);
  } else { 
    console.log("Ανιχνεύθηκαν αλλαγές. Το script θα ξανατρέξει");
    init();  
  }
}

window.addEventListener("load", function() { console.log("Αρχικό (onload)"); init(); }, false);