MyCo/inc/myco_objects.js

209 lines
4.4 KiB
JavaScript

function GroupList() {
this.loadFromLocalStorage=function() {
if (localStorage.groups!==undefined) {
var groups=JSON.parse(localStorage.groups);
for (el in groups) {
this[el]=new Group(el,groups[el]);
}
}
}
this.export=function() {
ret={};
for (el in this) {
if (this.isGroup(this[el])) {
ret[el]=this[el].export();
}
}
return ret;
}
this.save=function() {
localStorage.groups=JSON.stringify(this.export());
}
this.each=function(fct) {
var idx=0;
for (el in this) {
if(this.isGroup(this[el])) {
fct(idx++,this[el]);
}
}
}
this.count=function() {
len=0;
for (el in this) {
if (this.isGroup(this[el])) len=len+1;
}
return len;
}
this.isGroup=function(el) {
return (el.isGroup!==undefined);
}
this.removeGroup=function(name) {
if (this.isGroup(this[name])) {
delete this[name];
return true;
}
return false;
}
}
function Group(name,data) {
this.name=name;
this.contributors=[];
this.contributions=[];
this.isGroup=function() {
return true;
}
this.export=function() {
var contributors=[];
for (idx in this.contributors) {
contributors.push(this.contributors[idx].export());
}
var contributions=[];
for (idx in this.contributions) {
contributions.push(this.contributions[idx].export());
}
return {
'name': this.name,
'contributors': contributors,
'contributions': contributions
};
}
this.removeContributor=function(c) {
this.contributors=this.contributors.filter(function(v){
return (v.name!=c);
});
}
this.contributorByName=function(name) {
for (c in this.contributors) {
if (this.contributors[c].name == name) return this.contributors[c];
}
return undefined;
}
this.contributorByEmail=function(email) {
for (c in this.contributors) {
if (this.contributors[c].email == email) return this.contributors[c];
}
return undefined;
}
this.contributionsByContributorName=function(name) {
var ret=[];
for (idx in this.contributions) {
if (this.contributions[idx].contributor.name==name) {
ret.push(this.contributions[idx]);
}
}
return ret;
}
this.addContribution=function(c) {
c.id=this.contributions.length;
this.contributions.push(c);
}
this.replaceContribution=function(idx,c) {
c.id=idx;
this.contributions[idx]=c;
}
this.addContributor=function(c) {
c.id=this.contributors.length;
this.contributors.push(c);
}
this.replaceContributor=function(idx,c) {
c.id=idx;
this.contributors[idx]=c;
}
this.balance=function() {
ret={}
for (idx in this.contributors) {
sum=0;
c=this.contributors[idx].name;
cl=this.contributionsByContributorName(c);
for (idc in cl) {
sum+=cl[idc].cost;
}
ret[c]=sum;
}
return ret;
}
if (jQuery.type(data)=='object') {
try {
this.name=data.name;
if (jQuery.type(data.contributors) == 'array') {
for (idx in data.contributors) {
this.contributors.push(new Contributor(
data.contributors[idx].name,
data.contributors[idx].email,
idx
));
}
}
if (jQuery.type(data.contributions) == 'array') {
for (idx in data.contributions) {
this.contributions.push(new Contribution(
this.contributorByName(data.contributions[idx].contributor),
data.contributions[idx].cost,
data.contributions[idx].title,
data.contributions[idx].date,
idx
));
}
}
}
catch (e) {
alert('Une erreur est survenue en chargeant le groupe '+this.name+' depuis le cache');
}
}
}
function Contributor(name,email,id) {
this.name=name;
this.email=email;
this.id=id;
this.export=function() {
return {
'name': this.name,
'email': this.email
};
}
}
function Contribution(contributor,cost,title,date,id) {
this.contributor=contributor;
this.cost=cost;
this.title=title;
this.date=date;
this.id=id;
this.export=function() {
return {
'contributor': this.contributor.name,
'cost': this.cost,
'title': this.title,
'date': this.date,
};
}
this.getTitle=function() {
if (jQuery.type(this.title)=='string') {
return this.title;
}
return '';
}
}