13f3db00d591a5709d95231fe13c2630885eaf9b
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

1) function GroupList() {
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

2) 
3)   lastChange=0;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

4)   
5)   this.loadFromLocalStorage=function() {
Benjamin Renard Manage local data loading e...

Benjamin Renard authored 10 years ago

6)     if (jQuery.type(localStorage.groups)!='undefined') {
7)       try {
8)         var data=JSON.parse(localStorage.groups);
9)         this.lastChange=data.lastChange;
10)         for (el in data.groups) {
11)           this[el]=new Group(el,data.groups[el]);
12)         }
13)       }
14)       catch(e) {
15)         for (el in this) {
16)           if (this.isGroup(this[el])) {
17)             delete this[el];
18)           }
19)         }
20)         myconfirm('Erreur en chargeant les données locales. On les purges ?',
21)           function(data) {
22)             delete localStorage.groups;
23)             location.reload();
24)           }
25)         );
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

26)       }
27)     }
28)   }
29) 
30)   this.export=function() {
31)     ret={};
32)     for (el in this) {
33)       if (this.isGroup(this[el])) {
34)         ret[el]=this[el].export();
35)       }
36)     }
37)     return ret;
38)   }
39) 
Benjamin Renard Add login and sync support

Benjamin Renard authored 10 years ago

40)   this.import=function(groups) {
41)     ret={};
42)     for (el in this) {
43)       if (this.isGroup(this[el])) {
44)         delete ret[el];
45)       }
46)     }
47)     for (el in groups) {
48)       this[el]=new Group(el,groups[el]);
49)     }
50)     return true;
51)   }
52) 
53) 
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

54)   this.save=function() {
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

55)     localStorage.groups=JSON.stringify({
56)       'lastChange': new Date().getTime(),
57)       'groups': this.export()
58)     });
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

59)   }
60) 
61)   this.each=function(fct) {
62)     var idx=0;
63)     for (el in this) {
64)       if(this.isGroup(this[el])) {
65)         fct(idx++,this[el]);
66)       }
67)     }
68)   }
69) 
70)   this.count=function() {
71)     len=0;
72)     for (el in this) {
73)       if (this.isGroup(this[el])) len=len+1;
74)     }
75)     return len;
76)   }
77) 
78)   this.isGroup=function(el) {
79)     return (el.isGroup!==undefined);
80)   }
81) 
82)   this.removeGroup=function(name) {
83)     if (this.isGroup(this[name])) {
84)       delete this[name];
85)       return true;
86)     }
87)     return false;
88)   }
89) }
90) 
91) function Group(name,data) {
92)   this.name=name;
93)   this.contributors=[];
94)   this.contributions=[];
95) 
96) 
97)   this.isGroup=function() {
98)     return true;
99)   }
100) 
101)   this.export=function() {
102)     var contributors=[];
103)     for (idx in this.contributors) {
104)       contributors.push(this.contributors[idx].export());
105)     }
106)     var contributions=[];
107)     for (idx in this.contributions) {
108)       contributions.push(this.contributions[idx].export());
109)     }
110)     return {
111)       'name': this.name,
112)       'contributors': contributors,
113)       'contributions': contributions
114)     };
115)   }
116) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

117)   /*
118)    * Contributors
119)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

120)   this.removeContributor=function(c) {
121)     this.contributors=this.contributors.filter(function(v){
122)       return (v.name!=c);
123)     });
124)   }
125) 
126)   this.contributorByName=function(name) {
127)     for (c in this.contributors) {
128)       if (this.contributors[c].name == name) return this.contributors[c];
129)     }
130)     return undefined;
131)   }
132) 
133)   this.contributorByEmail=function(email) {
134)     for (c in this.contributors) {
135)       if (this.contributors[c].email == email) return this.contributors[c];
136)     }
137)     return undefined;
138)   }
139) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

140)   this.addContributor=function(c) {
141)     c.id=this.contributors.length;
142)     this.contributors.push(c);
143)   }
144) 
145)   this.replaceContributor=function(idx,c) {
146)     c.id=idx;
147)     this.contributors[idx]=c;
148)   }
149) 
150)   /*
151)    * Contributions
152)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

153)   this.contributionsByContributorName=function(name) {
154)     var ret=[];
155)     for (idx in this.contributions) {
156)       if (this.contributions[idx].contributor.name==name) {
157)         ret.push(this.contributions[idx]);
158)       }
159)     }
160)     return ret;
161)   }
162) 
163)   this.addContribution=function(c) {
164)     c.id=this.contributions.length;
165)     this.contributions.push(c);
166)   }
167) 
168)   this.replaceContribution=function(idx,c) {
169)     c.id=idx;
170)     this.contributions[idx]=c;
171)   }
172) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

173)   /*
174)    * Balance
175)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

176)   this.balance=function() {
Benjamin Renard Improve balance display

Benjamin Renard authored 10 years ago

177)     total={}
178)     min=-1;
179)     max=0;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

180)     for (idx in this.contributors) {
Benjamin Renard Improve balance display

Benjamin Renard authored 10 years ago

181)       var sum=0;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

182)       c=this.contributors[idx].name;
183)       cl=this.contributionsByContributorName(c);
184)       for (idc in cl) {
185)         sum+=cl[idc].cost;
186)       }
Benjamin Renard Improve balance display

Benjamin Renard authored 10 years ago

187)       if (min==-1 || min>sum) {
188)           min=sum;
189)         }
190)       if(max<sum) {
191)         max=sum;
192)       }
193)       total[c]=sum;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

194)     }
Benjamin Renard Improve balance display

Benjamin Renard authored 10 years ago

195)     balance={}
196)     var sum=0;
197)     for (c in total) {
198)       balance[c]={
199)         'total': total[c],
200)         'diff': total[c]-max,
201)       }
202)       sum=sum+total[c];
203)     }
204)     return {
205)       'balance': balance,
206)       'sum': sum,
207)       'min': min,
208)       'max': max
209)     };
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

210)   }
211) 
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

212)   /*
213)    * Contructor
214)    */
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

215)   if (jQuery.type(data)=='object') {
216)     try {
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

217)       this.name=data.name;
218)       if (jQuery.type(data.contributors) == 'array') {
219)         for (idx in data.contributors) {
220)           this.contributors.push(new Contributor(
221)             data.contributors[idx].name,
222)             data.contributors[idx].email,
223)             idx
224)           ));
225)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

226)       }
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

227)       if (jQuery.type(data.contributions) == 'array') {
228)         for (idx in data.contributions) {
229)           this.contributions.push(new Contribution(
230)             this.contributorByName(data.contributions[idx].contributor),
231)             data.contributions[idx].cost,
232)             data.contributions[idx].title,
233)             data.contributions[idx].date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

234)             idx,
235)             data.contributions[idx].lastChange
Benjamin Renard Clean code

Benjamin Renard authored 10 years ago

236)           ));
237)         }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

238)       }
239)     }
240)     catch (e) {
241)       alert('Une erreur est survenue en chargeant le groupe '+this.name+' depuis le cache');
242)     }
243)   }
244) }
245) 
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

246) function Contributor(name,email,id) {
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

247)   this.name=name;
248)   this.email=email;
Benjamin Renard Add edit contributor feature

Benjamin Renard authored 10 years ago

249)   this.id=id;
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

250)   this.export=function() {
251)     return {
252)       'name': this.name,
253)       'email': this.email
254)     };
255)   }
256) }
257) 
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

258) function Contribution(contributor,cost,title,date,id,lastChange) {
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

259)   this.contributor=contributor;
260)   this.cost=cost;
261)   this.title=title;
262)   this.date=date;
263)   this.id=id;
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

264)   this.lastChange=lastChange || new Date().getTime();
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

265)   this.export=function() {
266)     return {
267)       'contributor': this.contributor.name,
268)       'cost': this.cost,
269)       'title': this.title,
270)       'date': this.date,
Benjamin Renard Add lastChange field in obj...

Benjamin Renard authored 10 years ago

271)       'lastChange': this.lastChange,
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

272)     };
273)   }
274) 
275)   this.getTitle=function() {
276)     if (jQuery.type(this.title)=='string') {
277)       return this.title;
278)     }
279)     return '';
280)   }
281) }