co2offset
Version:
Greenhouse Gas Accounting - ISO14064
1 lines • 7.99 kB
JavaScript
void 0===window.app&&(window.app={});const widget_inventory=async function(){await window.app.renderBalance();const t=await window.app.buildTaxonomy();let a="",e=[],n=0,d=(new Date).getTime(),o=0,i=0,l="",s=0,r=0,c={};for(const[p,v]of Object.entries(t)){let t="",m=p.split(" ").join("_");t+='<div class="card">',t+='<div class="card-header">',t+='<div class="row">',t+='<div class="col">',t+='<h3 class="text-dark mb-1">'+p+"</h3>",t+="</div>",t+='<div class="col text-end">',t+='<button type="button" class="btn btn-sm btn-primary" data-bs-toggle="collapse" data-bs-target="#'+m+'" aria-expanded="false" aria-controls="'+m+'">',t+='{{scopeEmission}} <i class="fa fa-chevron-down"></i>',t+="</button><br/>",t+="</div>",t+="</div>",t+='<div class="card-body collapse" id="'+m+'">',t+='<div class="text-start" style="margin-bottom:15px;">',t+='<canvas id="chart_'+m+'" class="img-flex w-100" style="max-height:150px;"/>',t+="</div>";let b=0,g=0,u=0;for(const[a,w]of Object.entries(v)){let v="",h=(p+"_"+a).split(" ").join("_").split("/").join("_").split("(").join("_").split(")").join("_");e.push(h),b=0,v+='<div class="row">',v+='<div class="col">',v+='<h4 class="text-dark mb-1">'+a+"</h4>",v+="</div>",v+='<table class="table table-condensed table-striped">',v+='<tr><td><strong>Reporting started </strong></td><td class="text-end">{{since}}</td></tr>',v+='<tr><td><strong>Last time reported </strong></td><td class="text-end">{{until}}</td></tr>',v+='<tr><td><strong>Year (projection) </strong></td><td class="text-end">{{yearly}}</td></tr>',v+='<tr><td><strong>Unreported (estimate)</strong></td><td class="text-end">{{unreported}}</td></tr>',v+="</table>",v+='<div class="col text-end">',v+='<button type="button" class="btn btn-sm btn-secondary" data-bs-toggle="collapse" data-bs-target="#'+h+'" aria-expanded="false" aria-controls="'+h+'">',v+='{{totalEmission}} <i class="fa fa-chevron-down"></i>',v+="</button>",v+="</div>",v+="</div>",v+='<div class="collapse" id="'+h+'">',v+='<div class="text-end" style="margin-bottom:15px;">';let y='<button type="button" class="btn btn-secondary btn-sm addEventToCategory" data-unit="'+w[0].unit+'" data-scope="'+w[0].scope+'" data-category="'+w[0].category+'" data-sortkey="'+h+'"><i class="fa fa-plus"> Event</button></i>';v+="</div>",v+='<div class="img-flex w-100" style="max-height:150px;height:150px;margin-bottom:25px;"><canvas id="chart_'+h+'" style="max-height:150px;height:150px;"></canvas></div>',v+='<table class="table table-condensed table striped" id="tbl_'+h+'">',v+="<thead>",v+='<tr><th>End of Event</th><th>Title</th><th class="text-end">Emission</th><th class="text-end">Action</th></tr>',v+="</thead>",v+="<tbody>";let f=(new Date).getTime(),x=0;for(const[t,a]of Object.entries(w)){f>a.startTime&&(f=a.startTime),x<a.endTime&&(x=a.endTime);let t=new Date(1*a.endTime).toDateString();void 0===c[m]&&(c[m]={}),void 0===c[m][t]&&(c[m][t]={x:t,y:0,s:a.endTime}),c[m][t].y+=Math.round(1*a.co2eq),void 0===c[h]&&(c[h]={}),void 0===c[h][t]&&(c[h][t]={x:t,y:0,s:a.endTime}),c[h][t].y+=Math.round(1*a.co2eq),v+="<tr>",v+='<td data-sort="'+a.endTime+'">'+new Date(a.endTime).toLocaleString()+"</td>",v+="<td>"+a.title+"</td>",v+='<td class="text-end" widht="80">'+window.app.formatGrams(Math.round(a.co2eq),1*$(".balance_balance").attr("data-max"))+"</td>",v+='<td class="text-end" width="40">',v+='<button type="button" class="btn btn-sm infoEvent d-print-none" data-sortkey="'+a.sortkey+'" data-event="'+a.event+'"><i class="fa fa-info"></button></i>',v+="</td>",b+=Math.round(a.co2eq),void 0!==a.projecion&&0==a.projecion&&(u+=Math.round(a.co2eq)),v+="</tr>",n++}v+="</tbody>",v+="</table>",v+='<div class="text-end">',v+=y,v+="</div>",v+="</div>",v+='<div style="height:25px;"></div>';let T="N/A",E=0,D=0;x-f!=0&&(E=(b-u)/(x-f),r+=Math.round(E*((new Date).getTime()-x)),T=window.app.formatGrams(Math.round(E*((new Date).getTime()-x)),1*$(".balance_balance").attr("data-max")),D=Math.round(b*(31536e6/(x-f)))),s+=1*D,t+=window.app.parseMustache(v,{totalEmission:window.app.formatGrams(b,1*$(".balance_balance").attr("data-max")),unreported:T,since:new Date(f).toLocaleString(),until:new Date(x).toLocaleString(),yearly:window.app.formatGrams(D,1e7)}),d>f&&(d=f),o<x&&(o=x),f>i&&(i=f,l=a),g+=b}t+="</div>",t+='<div class="card-footer"></div>',t+="</div>",t+="</div>",t+='<div style="height:35px;"></div>',a+=window.app.parseMustache(t,{scopeEmission:window.app.formatGrams(g,1*$(".balance_balance").attr("data-max"))})}$("#scopes").html(a);const p=t=>t.label+": "+window.app.formatGrams(t.parsed);for(const[t,a]of Object.entries(c)){const e={type:"line",data:{labels:[],datasets:[{label:"CO2eq",backgroundColor:"#9AC7BF",borderColor:"#9AC7BF",data:[],fill:!0,pointRadius:0}]},options:{responsive:!0,legend:{display:!1},plugins:{datalabels:{formatter:function(t,a){return""}},tooltip:{callbacks:{label:p}}},scales:{xAxes:[{type:"time",time:{displayFormats:{minute:"HH:mm"}},display:!0,scaleLabel:{display:!0,labelString:"Point"}}],yAxes:[{display:!0,scaleLabel:{display:!0,labelString:"Value"}}]}}};let n=[];for(const[t,e]of Object.entries(a))n.push({x:e.x,y:e.y,s:e.s});if(n.sort((t,a)=>t.s>a.s?1:-1),e.data.datasets[0].data=n,null!==document.getElementById("chart_"+t)){var v=document.getElementById("chart_"+t).getContext("2d");new Chart(v,e);try{$("#tbl_"+t).DataTable({drawCallback:function(t){$(".infoEvent").unbind(),$(".infoEvent").click((function(t){window.app.renderEvent($(this).attr("data-event"))}))}})}catch(t){console.log(t)}}}return $(".allLowTime").html(new Date(d).toLocaleString()),$(".allHighTime").html(new Date(o).toLocaleString()),$(".fldLowTime").val(new Date(d).toISOString().substr(0,10)),$(".fldHighTime").val(new Date(o).toISOString().substr(0,10)),$(".allHighTime").attr("data",o),$(".youngCatTime").html(new Date(i).toLocaleString()),$(".youngCatName").html(l),$(".totalUnreported").html(window.app.formatGrams(r,1*$(".balance_balance").attr("data-max"))),$(".totalYearly").html(window.app.formatGrams(s,1e7)),$(".totalYearly").attr("data",s),$(".addEventToCategory").unbind(),$(".addEventToCategory").click((function(t){$("#addScope").val($(t.currentTarget).attr("data-scope")),$("#addCategory").val($(t.currentTarget).attr("data-category")),$("#addUnit").val($(t.currentTarget).attr("data-unit")),$("#addEndTime").val((new Date).toISOString().substr(0,16)),$("#addNewModal").modal("show")})),$(".linkEvent").unbind(),$(".linkEvent").click((function(t){location.href="./upsert.html?event="+$(t.currentTarget).attr("data-event")})),$(".copyEvent").unbind(),$(".cntEvents").html(n),$(".infoEvent").unbind(),$(".infoEvent").click((function(t){window.app.renderEvent($(this).attr("data-event"))})),$(".copyEvent").click((function(t){let a=window.sortedevents[$(t.currentTarget).attr("data-sortkey")];void 0!==a.title&&$("#addTitle").val(a.title),void 0!==a.presafing&&$("#addPresafing").val(a.presafing),void 0!==a.qty&&$("#addQty").val(a.qty),void 0!==a.factor&&$("#addFactor").val(a.factor),void 0!==a.unit&&$("#addUnit").val(a.unit),void 0!==a.scope&&$("#addScope").val(a.scope),void 0!==a.category&&$("#addCategory").val(a.category),void 0!==a.endTime&&$("#addStartTime").val(new Date(a.endTime).toISOString().substr(0,16)),$("#addEndTime").val((new Date).toISOString().substr(0,16)),$("#addNewModal").modal("show")})),$("#expand_all").click((function(t){$(".collapse").collapse("show"),t.preventDefault()})),$("#collapse_all").click((function(t){$(".collapse").collapse("hide"),t.preventDefault()})),$("#addEventFrm").submit((function(t){let a=(new Date).getTime(),e=(new Date).getTime();try{a=new Date($("#addStartTime").val()).getTime(),e=new Date($("#addEndTime").val()).getTime()}catch(t){}!async function(t){await window.co2accounting.settleEvent({title:$("#addTitle").val(),qty:$("#addQty").val(),unit:$("#addUnit").val(),factor:$("#addFactor").val(),scope:$("#addScope").val(),startTime:a,endTime:e,category:$("#addCategory").val()}),location.reload()}(),t.preventDefault()})),t};