| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<script>
(function($){
var
/*the tag for receipt tiddlers*/
tag = "receipt",
/*the names of the data fields to use*/
data = {
"revenues":"revenues",
"expenses":"expenses",
"year":"year",
"month":"month"
},
/*the month values being used*/
months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Okt","Nov","Dec"],
/*the table header*/
header = "|Month|Expenses|Revenues|Balance|Expense Total|Revenue Total|Balance Total|h\n",
/*when transcluded, use <<tiddler YearlyIncome with: 2015>>*/
get = "$1" == "$"+"1" ? null : parseInt("$1"),
y,years=[];
window.YearlyIncomeReport = function(){
var
m, out,
$sel = $(this),
$table = $sel.next(),
year = get ? get : $sel.val(),
totals = {
expenses:[0,0,0,0,0,0,0,0,0,0,0,0],
revenues:[0,0,0,0,0,0,0,0,0,0,0,0]
},
sum = function(arr,num){
var m, result = 0;
for(m=0; m<=num; m++){
result += arr[m];
}
return result;
};
if(get){
$table = $("<div>");
$(place).append($table);
}
store.forEachTiddler( function(title, tiddler) {
if(tiddler.tags.contains(tag)){
var
y = tiddler.data(data.year),
m = tiddler.data(data.month);
m = m ? months.indexOf(m) : 0;
if(0 <= m && y && y == year){
totals.expenses[m] += tiddler.data(data.expenses) || 0;
totals.revenues[m] += tiddler.data(data.revenues) || 0;
}
}
});
out = header;
for(m = 0; m< months.length; m++){
var
e = totals.expenses[m],
r = totals.revenues[m],
te = sum(totals.expenses,m),
tr = sum(totals.revenues,m);
out +=
"|" + months[m] +
"|" + e +
"|" + r +
"|" + (r - e) +
"|" + te +
"|" + tr +
"|" + (tr - te) +
"|\n";
};
$table.empty();
wikify(out,$table[0]);
}
if(get){
window.YearlyIncomeReport();
} else {
$sel = $("<select/>").change(window.YearlyIncomeReport);
$(place).append($sel);
store.forEachTiddler( function(title, tiddler) {
if(tiddler.tags.contains(tag)){
y = tiddler.data(data.year);
if(y){
years.pushUnique(y);
}
}
});
years.sort();
for(y=0;y<years.length;y++){
$sel.prepend($('<option></option>').val(years[y]).html(years[y]));
}
$(place).append("<div/>");
$sel.trigger("change");
}
})(jQuery);
</script>
and here it is slightly tweaked by me, as I actually use it
<script>
(function($){
var
/*the tag for receipt tiddlers*/
tag1 = "expense",
tag2 = "income",
/*the names of the data fields to use*/
data = {
"revenues":"incomeAmount",
"expenses":"expenseAmount",
"year":"eY",
"month":"eM"
},
/*the month values being used*/
months = ["01","02","03","04","05","06","07","08","09","10","11","12"],
/*the table header*/
header = "|borderless|k\n|!Month|!Expenses|!Revenues|!Balance|!Expense Total|!Revenue Total|!Balance Total|h\n",
/*when transcluded, use <<tiddler YearlyIncome with: 2015>>*/
get = "$1" == "$"+"1" ? null : parseInt("$1"),
y,years=[];
window.YearlyIncomeReport = function(){
var
m, out,
$sel = $(this),
$table = $sel.next(),
year = get ? get : $sel.val(),
totals = {
expenses:[0,0,0,0,0,0,0,0,0,0,0,0],
revenues:[0,0,0,0,0,0,0,0,0,0,0,0]
},
sum = function(arr,num){
var m, result = 0;
for(m=0; m<=num; m++){
result += arr[m];
}
return result;
};
if(get){
$table = $("<div>");
$(place).append($table);
}
store.forEachTiddler( function(title, tiddler) {
if (tiddler.tags.containsAny([tag1,tag2])) {
var
y = tiddler.data(data.year),
m = tiddler.data(data.month);
m = m ? months.indexOf(m) : 0;
if(0 <= m && y && y == year){
totals.expenses[m] += tiddler.data(data.expenses)*1 || 0;
totals.revenues[m] += tiddler.data(data.revenues)*1 || 0;
}
}
});
out = header;
for(m = 0; m< months.length; m++){
var
e = totals.expenses[m],
r = totals.revenues[m],
te = sum(totals.expenses,m),
tr = sum(totals.revenues,m);
out +=
"|" + months[m] +
"|" + e +
"|" + r +
"|" + (r - e) +
"|" + te +
"|" + tr +
"|" + (tr - te) +
"|\n";
};
$table.empty();
wikify(out,$table[0]);
}
if(get){
window.YearlyIncomeReport();
} else {
$sel = $("<select/>").change(window.YearlyIncomeReport);
$(place).append($sel);
store.forEachTiddler( function(title, tiddler) {
if (tiddler.tags.containsAny([tag1,tag2])){
y = tiddler.data(data.year);
if(y){
years.pushUnique(y);
}
}
});
years.sort();
for(y=0;y<years.length;y++){
$sel.prepend($('<option></option>').val(years[y]).html(years[y]));
}
$(place).append("<div/>");
$sel.trigger("change");
}
})(jQuery);
</script>
I'm on my phone right now but please let me know if more info or even an MTC is required.
Thanks again,
sklpns