Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. <PRELOAD> ./dev/bs-dbtable-filter.js ./dev/bs-ui.css # css ./dev/bs-ui.js ./dev/db-table.js ./dev/bs-dbtable.js </PRELOAD> ==== test js 1 ==== <php> echo "<script>\n"; echo "let php_auth_user='" . $_SERVER['PHP_AUTH_USER'] . "';\n"; echo "let php_remote_addr='" . $_SERVER['REMOTE_ADDR'] . "';\n"; echo "</script>\n"; </php> <col sm="3"><panel type="default" title="panel1" icon="fa fa-home"> <html> <div id='cPageContainerId1' padding:0px;"></div> <!-- style="background-color:#606060; --> </html> </panel></col> <col sm="9"><panel type="default" title="panel2" icon="fa fa-home"> <html> <div id='cPageContainerId2' padding:5px;"></div> </html> </panel></col> <html><script> if (php_auth_user == 'jeff') { let div = document.getElementById('cPageContainerId1'); div.innerHTML = 'actual user = ['+php_auth_user+']'; } else { let div = document.getElementById('cPageContainerId1'); div.innerHTML = 'actual user = ['+php_auth_user+'], cPage1 is reserved for user [jeff]'; } function cell(col, row) { return cDynTable.getInstance().getCell(col, row); } function bareme(netImposable, N) { let quotientFamilial = netImposable / N; let utilise = quotientFamilial; let tranches = [0, 9964, 27519, 73779, 156244, 99999999]; let coef = [0, 0, 14, 30, 41, 45]; let impot=0; let s =''; for (let t=1; t<tranches.length; t++) { if (quotientFamilial >= tranches[t]) { s += (coef[t]/100.0).toString() + '*' + (tranches[t]-tranches[t-1]).toString()+'+'; impot += (coef[t]/100.0) * (tranches[t]-tranches[t-1]); } else { s += (coef[t]/100.0).toString() + '*' + ((quotientFamilial - tranches[t-1])).toString()+'+'; impot += (coef[t]/100.0) * (quotientFamilial - tranches[t-1]); break; } } impot = Math.round(impot*N); s += '='+impot; return impot; } function plafonnement(netImposable, N, Adultes) { // Application Plafonnement du quotient familial if (Adultes == N) return bareme(netImposable, N); let impotBrutSansEnfants = bareme(netImposable, Adultes); let nEnfants = Math.round( (N-Adultes) * 2.0 ); let gainMaxParEnfant = 1551; let gainMax = gainMaxParEnfant * nEnfants; let impotMini = impotBrutSansEnfants - gainMax; if (impotMini<0) impotMini=0; let b = bareme(netImposable, N); if (impotMini > b) b = impotMini; return b; } function decote(plafonnementQF, N, Adultes) { let c=0; if (Adultes<2) c = 1196; // pour les contribuables célibataires, divorcés ou veufs ; else c = 1970; let dec = c - 0.75*plafonnementQF; if (dec>=plafonnementQF) dec = plafonnementQF; if (dec<0) dec = 0; return plafonnementQF-Math.round(dec); } function reducCondition(netImposable, revenuFiscalReference, decoteIR, N, Adultes) { let nEnfants = Math.round( (N-Adultes) * 2.0 ); let seuil1 = 37968 + nEnfants * 3797; let eligible1 = netImposable < seuil1; let reduc = Math.round(decoteIR * 0.2); if (eligible1) return decoteIR - reduc; let seuil2 = 42074 + nEnfants * 3797; let eligible2 = netImposable < seuil2; let tx = 0.2 * (seuil2 - revenuFiscalReference) / 4104; reduc = Math.round(decoteIR * tx); if (eligible2) return decoteIR - reduc; return decoteIR; } function impot(revenuBrut, adultes, enfants) { // 1AJ Revenu brut let revenuBrutGlobal = 0.9 * revenuBrut; let revenuNetImposable = revenuBrutGlobal; let revenuFiscalReference = revenuNetImposable; let N = adultes + 0.5*enfants; let droitsSimples = bareme( revenuNetImposable, N); // bareme (3,5), (2,5) let plafonnementQF = plafonnement(revenuNetImposable, N, adultes); // plafonnement (3,5), (2,5), 2 let decoteIR = decote(plafonnementQF, N, adultes); // decote (3,8), (2,5), 2 // reducCondition (3,5), (3,6), (3,9), (2,5), 2 let condition = reducCondition(revenuNetImposable, revenuFiscalReference, decoteIR, N, adultes); return condition; } class cDynTable { // extends bsObject constructor(containerId, tableId, strTable) { cDynTable._this = this; if (!cDynTable._dynTables) { cDynTable._dynTables = {}; } cDynTable._dynTables[tableId] = this; this.containerId = containerId; this.tableId = tableId; this.strTable = strTable; let elt = document.getElementById(this.containerId); elt.innerHTML = strTable; this.table = document.getElementById(this.tableId); this.calcSum(tableId); } // cDynTable.constructor setCookie() { let s=''; this.table = document.getElementById(this.tableId); let rows = this.table.rows; for (let i=0, iLen=rows.length; i<iLen; i++) { let cells = rows[i].cells, pcol=0; for (var j = 0, jLen = cells.length; j < jLen; j++) { let c = cells[j]; let t = this.getCellType(c); if (t=='CALC') t += ':'+this.getCellFormula(c)+' =>> '; s += '['+pcol+', '+i+']=' + t +' ' + this.getCellValue(c) + "\n"; pcol += cells[j].colSpan; } } console.log(s); // getCookie(cname) { } calcSum() { this.table = document.getElementById(this.tableId); let rows = this.table.rows, total = 0; let p = {cell: 'content', result: '', tableId: '', table: null}; p.tableId = this.tableId; p.table = this.table; for (let i=0, iLen=rows.length; i<iLen; i++) { p.col=0; p.row=i; let cells = rows[i].cells; for (var j = 0, jLen = cells.length; j < jLen; j++) { let cell = cells[j]; p.cell = cell.innerHTML.trim(); // total += Number(cell.textContent || cell.innerText); if (this.tabCalc(p)) { cell.innerHTML = '<!--'+p.tot+'-->'+escapeHtml( String(p.result) ); } else if (p.cell == '<!--{{totalCol}}-->' ) { let v = this.calcSumCol(p.table, p.col); cell.innerText = v.toFixed(2); // this.calcSumCol(table, c); } else if (p.cell == '<!--{{totalRow}}-->' ) { let v = this.calcSumRow(p.table, i); cell.innerText = v.toFixed(2); } p.col += cell.colSpan; } } } // cDynTable.calcSum static getInstance(event = null) { if (event == null) return cDynTable._this; if (event.target.tagName == 'INPUT') { for (let elt = event.target; elt!=null; elt=elt.parentElement) { if (elt.tagName == 'TABLE') { let _this = cDynTable._dynTables[elt.id]; if (_this) cDynTable._this = _this; return _this; } } } return cDynTable._this; } // static cDynTable.getInstance static inputOnKeyup(e, t) { // if (e.type == 'keypress') // if (e.code == 'Enter') cDynTable.getInstance(e).calcSum(); cDynTable.getInstance(e).setCookie(); e.preventDefault(); //prevent default return false; // returning false will prevent the event from bubbling up. } // static cDynTable.inputOnKeyup getCellType(c) { let child = c.firstChild; if (child !== null && child.tagName == 'INPUT') { return 'INPUT'; } var re = /(\<\!\-\-)(\{\{\=)(\w+)(\()(.*)(\))(\}\})(\-\-\>)(.*)/; let cc = c.innerHTML.search(re); // = s.replace(re, '$2'); if (cc !== -1) return 'CALC'; return 'TEXT'; } getCellFormula(c) { var re = /(\<\!\-\-)(\{\{\=)(\w+)(\()(.*)(\))(\}\})(\-\-\>)(.*)/; let cc = c.innerHTML.search(re); // = s.replace(re, '$2'); if (cc == -1) return null; let cmd = c.innerHTML.replace(re, '$3'); let params = c.innerHTML.replace(re, '$5'); //let tot = c.innerHTML.replace(re, '$2$3$4$5$6$7'); return cmd+'('+params+')'; } getCellValue(c) { let child = c.firstChild; if (child !== null && child.tagName == 'INPUT') { return child.value; } return c.innerText; // var re = /(\<)(\w+)(.*)(\>)/; // let i = cells[j].innerHTML.replace(re, '$2'); // if (i.toLowerCase() == 'input') { } getCell(col, row) { // let table = document.getElementById(_this.tableId); let rows = this.table.rows, total = 0; let cells = rows[row].cells, c=0; for (var j = 0, jLen = cells.length; j < jLen; j++) { if (col == j) { return this.getCellValue(cells[j]); } c += cell.colSpan; } return null; } calcSumRow(table, i) { let rows = table.rows, total = 0; let cells = rows[i].cells, c=0; for (var j = 0, jLen = cells.length; j < jLen; j++) { let cell = cells[j]; let v = Number(cell.innerText); if (!isNaN(v)) total += v; c += cell.colSpan; } return total; } calcSumCol(table, column) { let rows = table.rows, total = 0; for (let i=0, iLen=rows.length; i<iLen; i++) { let c=0; let cells = rows[i].cells; for (var j = 0, jLen = cells.length; j < jLen; j++) { let cell = cells[j]; if (c == column) { let v = Number(cell.innerText); if (!isNaN(v)) total += v; } c += cell.colSpan; } } return total; } tabCalc(p) { var re = /(\<\!\-\-)(\{\{\=)(\w+)(\()(.*)(\))(\}\})(\-\-\>)(.*)/; let c = p.cell.search(re); // = s.replace(re, '$2'); if (c == -1) return false; let cmd = p.cell.replace(re, '$3'); let params = p.cell.replace(re, '$5'); p.tot = p.cell.replace(re, '$2$3$4$5$6$7'); if (cmd == 'eval') { // let sandBox = {}; sandBox.y = 5; var result = Components.utils.evalInSandbox(params, sandBox); // p.result = window.eval(params); try { if (cDynTable._this !== this) cDynTable._this = this; let fct = new Function('return ('+params+');'); p.result = fct(); } catch(error) { p.result = error; } return true; } p.result = 0; return true; } } // class cDynTable /* var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test( text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')'); Published specification: RFC 4627 var re = /([12][0-9][0-9][0-9])(-)([01][0-9])(-?)([0123][0-9])?/; let year = parseInt(strDate.replace(re, '$1'), 10); let month = parseInt(strDate.replace(re, '$3'), 10); let day = parseInt(strDate.replace(re, '$5'), 10); */ function printTab(tableId) { let rqcmd = ` <tr> <td>1AJ Revenu brut</td> <td><input type="text" value="48663" style="display: inline-block; top: 0px; left: 0px; width: 100px; height: 31px; border: 0px none; margin: 0px; padding: 0px; vertical-align: baseline; visibility: visible;" onkeyup="cDynTable.inputOnKeyup(event,this)"></td> <td>après abattement 10%</td> <td><!--{{=eval( Math.round(cell(1,0)*0.9) )}}--></td> </tr> <tr> <td>2DC Dividendes - 2BH déjà soumis</td> <td><input type="text" value="0" style="display: inline-block; top: 0px; left: 0px; width: 100px; height: 31px; border: 0px none; margin: 0px; padding: 0px; vertical-align: baseline; visibility: visible;" onkeyup="cDynTable.inputOnKeyup(event,this)"></td> <td><input type="text" value="0" style="display: inline-block; top: 0px; left: 0px; width: 100px; height: 31px; border: 0px none; margin: 0px; padding: 0px; vertical-align: baseline; visibility: visible;" onkeyup="cDynTable.inputOnKeyup(event,this)"></td> <td><!--{{=eval( Math.round((cell(1,1)-cell(2,1))*0.6) )}}--></td> </tr> <tr> <td>4BA Foncier (& déficit report)</td> <td><input type="text" value="0" style="display: inline-block; top: 0px; left: 0px; width: 100px; height: 31px; border: 0px none; margin: 0px; padding: 0px; vertical-align: baseline; visibility: visible;" onkeyup="cDynTable.inputOnKeyup(event,this)"></td> <td><input type="text" value="0" style="display: inline-block; top: 0px; left: 0px; width: 100px; height: 31px; border: 0px none; margin: 0px; padding: 0px; vertical-align: baseline; visibility: visible;" onkeyup="cDynTable.inputOnKeyup(event,this)"></td> <td><!--{{=eval( Math.round(cell(1,2)-cell(2,2)) )}}--></td> </tr> <tr> <td>Revenu brut global</td> <td></td> <td></td> <td><!--{{=eval( parseInt(cell(3,0))+parseInt(cell(3,1))+parseInt(cell(3,2)) )}}--></td> </tr> <tr> <td>6DE CSG déductible</td> <td><input type="text" value="0" style="display: inline-block; top: 0px; left: 0px; width: 100px; height: 31px; border: 0px none; margin: 0px; padding: 0px; vertical-align: baseline; visibility: visible;" onkeyup="cDynTable.inputOnKeyup(event,this)"></td> <td></td> <td><!--{{=eval( Math.round(-cell(1,4)) )}}--></td> </tr> <tr> <td>Revenu net imposable</td> <td>Nombre de parts</td> <td><input type="text" value="3" style="display: inline-block; top: 0px; left: 0px; width: 100px; height: 31px; border: 0px none; margin: 0px; padding: 0px; vertical-align: baseline; visibility: visible;" onkeyup="cDynTable.inputOnKeyup(event,this)"></td> <td><!--{{=eval( parseInt(cell(3,3)) + parseInt(cell(3,4)) )}}--></td> </tr> <tr> <td>Revenu fiscal de référence</td> <td></td> <td></td> <td><!--{{=eval( parseInt(cell(3,5)) + parseInt(cell(1,1)) )}}--></td> </tr> <tr> <td>Droits simples</td> <td></td> <td></td> <td><!--{{=eval( bareme( parseFloat(cell(3,5)), parseFloat(cell(2,5)) ) )}}--></td> </tr> <tr> <td>Applic plafonnement QF</td> <td></td> <td></td> <td><!--{{=eval( plafonnement( parseFloat(cell(3,5)), parseFloat(cell(2,5)), 2 ) )}}--></td> </tr> <tr> <td>Application decote</td> <td></td> <td></td> <td><!--{{=eval( decote( parseFloat(cell(3,8)), parseFloat(cell(2,5)), 2 ) )}}--></td> </tr> <tr> <td>Réduction / condition revenu</td> <td></td> <td></td> <td><!--{{=eval( reducCondition ( parseFloat(cell(3,5)), parseFloat(cell(3,6)), parseFloat(cell(3,9)), parseFloat(cell(2,5)), 2 ) )}}--></td> </tr> `; // .toFixed(2) let li = 11; for (let l=0; l<140; l++) { let revenuBrut = 40000 + 500*l; // impot(revenuBrut, adultes, enfants) rqcmd += ' <tr> <td>'+revenuBrut+'</td> <td>'+impot(revenuBrut, 2, 2) +'</td>'; rqcmd += '<td><!--{{=eval( (cell(1,'+(l+li)+') - cell(1,'+(l+li-1)+')) /5.0 +"%" )}}--></td> </tr>'; } let s = '<table id="'+tableId+'" class="table table-condensed table-hover table-bordered table-striped bsDbtable-css">'+"\n"; s += rqcmd; s += '</table>'+"\n"; return s; } if (php_auth_user == 'jeff') { new cDynTable('cPageContainerId2', 'id_table_1', printTab('id_table_1')); } function log(s) { let div = document.getElementById('cPageContainerId1'); div.innerHTML += '</br>'+s+"\n"; } </script></html> ~~NOCACHE~~ syst/test-tab.txt Dernière modification : 2021/12/06 11:32de 127.0.0.1