Benjamin Renard commited on 2014-07-19 18:06:57
Showing 3 changed files, with 123 additions and 8 deletions.
... | ... |
@@ -103,7 +103,8 @@ view_home=function() { |
103 | 103 |
sum+=value; |
104 | 104 |
diff='<td class="positive">+'+value.toFixed(2)+' €</td>'; |
105 | 105 |
} |
106 |
- tbody.html(tbody.html()+'<tr><td><a class="group-link" data-uuid="'+g+'">'+balances[g].name+'</a></td>'+diff+'</tr>'); |
|
106 |
+ menu='<div class="btn-group" data-grp="'+g+'"><button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="glyphicon glyphicon-cog"></span></button><ul class="dropdown-menu"><li><a class="home_grp_cat_btn"><span class="glyphicon glyphicon-th-list"></span> Catégories</a></li></ul></div>'; |
|
107 |
+ tbody.html(tbody.html()+'<tr><td><a class="group-link" data-uuid="'+g+'">'+balances[g].name+'</a></td>'+diff+'<td>'+menu+'</td></tr>'); |
|
107 | 108 |
} |
108 | 109 |
} |
109 | 110 |
$('#view-home #mybalances a.group-link').bind('click',function(e) { |
... | ... |
@@ -112,6 +113,9 @@ view_home=function() { |
112 | 113 |
view_group(groups[g]); |
113 | 114 |
} |
114 | 115 |
}); |
116 |
+ $('a.home_grp_cat_btn').each(function(idx,a) { |
|
117 |
+ $(a).bind('click',on_home_grp_cat_btn_click); |
|
118 |
+ }); |
|
115 | 119 |
if (sum<0) { |
116 | 120 |
$('#view-home #mybalances #total-value').html('<span class="negative">'+sum.toFixed(2)+' €</span>'); |
117 | 121 |
} |
... | ... |
@@ -126,6 +130,20 @@ view_home=function() { |
126 | 130 |
view_part('#view-home'); |
127 | 131 |
} |
128 | 132 |
|
133 |
+on_home_grp_cat_btn_click=function(e) { |
|
134 |
+ grp_id=$(e.target).parents('div.btn-group').data('grp'); |
|
135 |
+ grp=groups[grp_id]; |
|
136 |
+ console.log(grp.getCategories()); |
|
137 |
+ ul=$('#grp_cat_modal ul'); |
|
138 |
+ html=""; |
|
139 |
+ cats=grp.getCategories(); |
|
140 |
+ for(cid in cats) { |
|
141 |
+ html+="<li><span class='cat-color' style='background-color: "+cats[cid]['color']+"'></span> "+cats[cid]['name']+"</li>"; |
|
142 |
+ } |
|
143 |
+ ul.html(html); |
|
144 |
+ $('#grp_cat_modal').modal('show'); |
|
145 |
+} |
|
146 |
+ |
|
129 | 147 |
/**************** |
130 | 148 |
* View group |
131 | 149 |
****************/ |
... | ... |
@@ -172,8 +190,13 @@ show_contributions=function(group,contributor_email) { |
172 | 190 |
else { |
173 | 191 |
sum=0; |
174 | 192 |
for (idx in contributions) { |
193 |
+ var cat=''; |
|
194 |
+ console.log(contributions[idx].categorie); |
|
195 |
+ if (contributions[idx].categorie && jQuery.type(group.categories[contributions[idx].categorie])) { |
|
196 |
+ cat='<br/><span class="categorie"><span class="cat-color" style="background-color: '+group.categories[contributions[idx].categorie]['color']+'"></span> '+group.categories[contributions[idx].categorie]['name']+"</span>"; |
|
197 |
+ } |
|
175 | 198 |
col_actions='<td><div class="btn-group" data-uuid="'+contributions[idx].uuid+'"><button type="button" class="btn btn-default contribution_edit_btn"><span class="glyphicon glyphicon-edit"></span></button><button type="button" class="btn btn-default contribution_delete_btn"><span class="glyphicon glyphicon-trash"></span></button></div></td>'; |
176 |
- tbody.append('<tr><td>'+contributions[idx].getTitle()+'</td><td>'+contributions[idx].cost.toFixed(2)+' €<br/><span class="date">'+moment(contributions[idx].date).format('DD/MM/YYYY')+'</span></td>'+col_actions+'</tr>'); |
|
199 |
+ tbody.append('<tr><td>'+contributions[idx].getTitle()+cat+'</td><td>'+contributions[idx].cost.toFixed(2)+' €<br/><span class="date">'+moment(contributions[idx].date).format('DD/MM/YYYY')+'</span></td>'+col_actions+'</tr>'); |
|
177 | 200 |
sum+=contributions[idx].cost; |
178 | 201 |
} |
179 | 202 |
total.html(sum.toFixed(2)+' €'); |
... | ... |
@@ -370,6 +393,13 @@ on_confirm_del_contributor=function(contributor) { |
370 | 393 |
on_show_add_contribution_modal=function(e) { |
371 | 394 |
$('#add_contribution_modal #add_contribution_contributor_email').html($('#view-group #contributor').html()); |
372 | 395 |
$('#add_contribution_modal #add_contribution_contributor_email')[0].value=$('#view-group #contributor')[0].value; |
396 |
+ gid=$('#add_contribution_modal').data('group-uuid'); |
|
397 |
+ group=groups[gid]; |
|
398 |
+ cats="<option value=''>Non définie</option>"; |
|
399 |
+ for (u in group.categories) { |
|
400 |
+ cats+="<option value='"+u+"'>"+group.categories[u]['name']+"</option>"; |
|
401 |
+ } |
|
402 |
+ $('#add_contribution_modal #add_contribution_categorie').html(cats); |
|
373 | 403 |
$('#add_contribution_modal #add_contribution_title').focus(); |
374 | 404 |
} |
375 | 405 |
|
... | ... |
@@ -428,12 +458,18 @@ on_valid_add_contribution_modal=function(e) { |
428 | 458 |
date=new Date(); |
429 | 459 |
} |
430 | 460 |
|
461 |
+ var cat=$('#add_contribution_categorie')[0].value; |
|
462 |
+ if (cat != '' && !jQuery.type(group.categories[cat])) { |
|
463 |
+ alert('Categorie incorrect'); |
|
464 |
+ return; |
|
465 |
+ } |
|
466 |
+ |
|
431 | 467 |
if($('#add_contribution_modal #edit_uuid')[0].value=='-1') { |
432 |
- group.addContribution(new Contribution(contributor,cost,title,date)); |
|
468 |
+ group.addContribution(new Contribution(contributor,cost,title,date,cat)); |
|
433 | 469 |
} |
434 | 470 |
else { |
435 | 471 |
contribution_uuid=$('#add_contribution_modal #edit_uuid')[0].value; |
436 |
- group.updateContribution(contribution_uuid,new Contribution(contributor,cost,title,date)); |
|
472 |
+ group.updateContribution(contribution_uuid,new Contribution(contributor,cost,title,date,cat)); |
|
437 | 473 |
} |
438 | 474 |
show_contributions(group,contributor_email); |
439 | 475 |
$('#add_contribution_modal').modal('hide'); |
... | ... |
@@ -469,6 +505,9 @@ on_contribution_edit_btn_click=function(e) { |
469 | 505 |
$('#add_contribution_modal #add_contribution_title')[0].value=contribution.getTitle(); |
470 | 506 |
$('#add_contribution_modal #add_contribution_cost')[0].value=contribution.cost; |
471 | 507 |
$('#add_contribution_modal #add_contribution_date')[0].value=moment(contribution.date).format('DD/MM/YYYY'); |
508 |
+ if (contribution.categorie) { |
|
509 |
+ $('#add_contribution_modal #add_contribution_categorie')[0].value=contribution.categorie; |
|
510 |
+ } |
|
472 | 511 |
$('#add_contribution_modal #edit_uuid')[0].value=contribution_uuid; |
473 | 512 |
$('#add_contribution_modal').modal('show'); |
474 | 513 |
} |
... | ... |
@@ -121,7 +121,7 @@ function Group(uuid,name,data) { |
121 | 121 |
this.deletedContributors={}; |
122 | 122 |
this.contributions={}; |
123 | 123 |
this.deletedContributions={}; |
124 |
- |
|
124 |
+ this.categories={}; |
|
125 | 125 |
|
126 | 126 |
this.isGroup=function() { |
127 | 127 |
return true; |
... | ... |
@@ -142,7 +142,8 @@ function Group(uuid,name,data) { |
142 | 142 |
'contributors': contributors, |
143 | 143 |
'deletedContributors': this.deletedContributors, |
144 | 144 |
'contributions': contributions, |
145 |
- 'deletedContributions': this.deletedContributions |
|
145 |
+ 'deletedContributions': this.deletedContributions, |
|
146 |
+ 'categories': this.categories |
|
146 | 147 |
}; |
147 | 148 |
} |
148 | 149 |
|
... | ... |
@@ -239,6 +240,7 @@ function Group(uuid,name,data) { |
239 | 240 |
this.deletedContributions[uuid].cost, |
240 | 241 |
decodeURIComponent(this.deletedContributions[uuid].title), |
241 | 242 |
this.deletedContributions[uuid].date, |
243 |
+ this.deletedContributions[uuid].categorie, |
|
242 | 244 |
uuid, |
243 | 245 |
this.deletedContributions[uuid].lastChange |
244 | 246 |
)); |
... | ... |
@@ -292,6 +294,7 @@ function Group(uuid,name,data) { |
292 | 294 |
data.cost, |
293 | 295 |
decodeURIComponent(data.title), |
294 | 296 |
data.date, |
297 |
+ data.categorie, |
|
295 | 298 |
data.uuid, |
296 | 299 |
data.lastChange |
297 | 300 |
); |
... | ... |
@@ -336,6 +339,13 @@ function Group(uuid,name,data) { |
336 | 339 |
}; |
337 | 340 |
} |
338 | 341 |
|
342 |
+ /* |
|
343 |
+ * Categories |
|
344 |
+ */ |
|
345 |
+ this.getCategories=function() { |
|
346 |
+ return this.categories; |
|
347 |
+ } |
|
348 |
+ |
|
339 | 349 |
/* |
340 | 350 |
* Contructor |
341 | 351 |
*/ |
... | ... |
@@ -363,6 +373,32 @@ function Group(uuid,name,data) { |
363 | 373 |
this.deletedContributions[uuid]=data.deletedContributions[uuid]; |
364 | 374 |
} |
365 | 375 |
} |
376 |
+ if (jQuery.type(data.categories) == 'object') { |
|
377 |
+ for (cid in data.categories) { |
|
378 |
+ if (jQuery.type(data.categories[cid]['color'])!='string') { |
|
379 |
+ data.categories[cid]['color']='#'+(0x1000000+(Math.random())*0xffffff).toString(16).substr(1,6); |
|
380 |
+ } |
|
381 |
+ this.categories[cid]=data.categories[cid]; |
|
382 |
+ } |
|
383 |
+ } |
|
384 |
+ else { |
|
385 |
+ categories= { |
|
386 |
+ 'Alimentation': '#1f83db', |
|
387 |
+ 'Restaurant': '#f07305', |
|
388 |
+ 'Loisir': '#d413ce', |
|
389 |
+ 'Transport': '#13d413', |
|
390 |
+ 'Vacances': '#e9fa00', |
|
391 |
+ 'Maison': '#e9fa00', |
|
392 |
+ 'Rembourssement': '#8a8b8c', |
|
393 |
+ 'Cadeau': '#a700fa' |
|
394 |
+ }; |
|
395 |
+ for (c in categories) { |
|
396 |
+ this.categories[generate_uuid()]={ |
|
397 |
+ 'name': c, |
|
398 |
+ 'color': categories[c] |
|
399 |
+ }; |
|
400 |
+ } |
|
401 |
+ } |
|
366 | 402 |
} |
367 | 403 |
catch (e) { |
368 | 404 |
alert('Une erreur est survenue en chargeant le groupe '+this.name+' depuis le cache'); |
... | ... |
@@ -381,7 +417,7 @@ function Contributor(name,email) { |
381 | 417 |
} |
382 | 418 |
} |
383 | 419 |
|
384 |
-function Contribution(contributor,cost,title,date,uuid,lastChange) { |
|
420 |
+function Contribution(contributor,cost,title,date,cat,uuid,lastChange) { |
|
385 | 421 |
this.contributor=contributor; |
386 | 422 |
this.cost=cost; |
387 | 423 |
this.title=title; |
... | ... |
@@ -390,6 +426,7 @@ function Contribution(contributor,cost,title,date,uuid,lastChange) { |
390 | 426 |
} |
391 | 427 |
this.date=date; |
392 | 428 |
this.uuid=uuid || generate_uuid(); |
429 |
+ this.categorie=cat; |
|
393 | 430 |
this.lastChange=lastChange || new Date().getTime(); |
394 | 431 |
this.export=function() { |
395 | 432 |
return { |
... | ... |
@@ -398,6 +435,7 @@ function Contribution(contributor,cost,title,date,uuid,lastChange) { |
398 | 435 |
'cost': this.cost, |
399 | 436 |
'title': encodeURIComponent(this.title), |
400 | 437 |
'date': this.date.getTime(), |
438 |
+ 'categorie': this.categorie, |
|
401 | 439 |
'lastChange': this.lastChange, |
402 | 440 |
}; |
403 | 441 |
} |
... | ... |
@@ -55,11 +55,22 @@ body{ |
55 | 55 |
text-transform: capitalize; |
56 | 56 |
} |
57 | 57 |
|
58 |
-#view-group span.date { |
|
58 |
+#view-group span.date, #view-group span.categorie { |
|
59 | 59 |
color: #999; |
60 | 60 |
font-size: 0.8em; |
61 | 61 |
font-style: italic; |
62 | 62 |
} |
63 |
+ |
|
64 |
+span.cat-color { |
|
65 |
+ width: 0.8em; |
|
66 |
+ height: 0.8em; |
|
67 |
+ display: inline-block; |
|
68 |
+} |
|
69 |
+ |
|
70 |
+#grp_cat_modal ul { |
|
71 |
+ list-style-type: none; |
|
72 |
+ padding: 0; |
|
73 |
+} |
|
63 | 74 |
</style> |
64 | 75 |
<body> |
65 | 76 |
<div class="navbar navbar-inverse navbar-fixed-top" role="navigation"> |
... | ... |
@@ -103,6 +114,7 @@ body{ |
103 | 114 |
<tr> |
104 | 115 |
<th>Groupe</th> |
105 | 116 |
<th>Balance</th> |
117 |
+ <th> </th> |
|
106 | 118 |
</tr> |
107 | 119 |
</thead> |
108 | 120 |
<tbody></tbody> |
... | ... |
@@ -110,6 +122,7 @@ body{ |
110 | 122 |
<tr> |
111 | 123 |
<td id='total-label'>Total :</td> |
112 | 124 |
<td id='total-value'></td> |
125 |
+ <td> </td> |
|
113 | 126 |
</tr> |
114 | 127 |
</tfoot> |
115 | 128 |
</table> |
... | ... |
@@ -392,6 +405,12 @@ body{ |
392 | 405 |
<span class="input-group-addon">€</span> |
393 | 406 |
</div> |
394 | 407 |
</div> |
408 |
+ <div class="form-group"> |
|
409 |
+ <div class="input-group"> |
|
410 |
+ <span class="input-group-addon">Catégorie </span> |
|
411 |
+ <select id='add_contribution_categorie' class="form-control"></select> |
|
412 |
+ </div> |
|
413 |
+ </div> |
|
395 | 414 |
<div class="form-group"> |
396 | 415 |
<div class="input-group"> |
397 | 416 |
<span class="input-group-addon">Date</span> |
... | ... |
@@ -515,6 +534,7 @@ body{ |
515 | 534 |
</div> |
516 | 535 |
</div> |
517 | 536 |
</form> |
537 |
+ </div> |
|
518 | 538 |
<div class="modal-footer"> |
519 | 539 |
<button type="button" class="btn btn-default" data-dismiss="modal">Ok</button> |
520 | 540 |
</div> |
... | ... |
@@ -522,6 +542,24 @@ body{ |
522 | 542 |
</div><!-- /.modal-dialog --> |
523 | 543 |
</div> |
524 | 544 |
|
545 |
+<div class="modal fade" id="grp_cat_modal" tabindex="-1" role="dialog" aria-labelledby="grpCatModal" aria-hidden="true"> |
|
546 |
+ <div class="modal-dialog"> |
|
547 |
+ <div class="modal-content"> |
|
548 |
+ <div class="modal-header"> |
|
549 |
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> |
|
550 |
+ <h4 class="modal-title">Catégories</h4> |
|
551 |
+ </div> |
|
552 |
+ <div class="modal-body"> |
|
553 |
+ <ul id='grp_cat_list'></ul> |
|
554 |
+ </div> |
|
555 |
+ <div class="modal-footer"> |
|
556 |
+ <button type="button" class="btn btn-default" data-dismiss="modal">Ok</button> |
|
557 |
+ </div> |
|
558 |
+ </div><!-- /.modal-content --> |
|
559 |
+ </div><!-- /.modal-dialog --> |
|
560 |
+</div> |
|
561 |
+ |
|
562 |
+ |
|
525 | 563 |
</div> |
526 | 564 |
<!-- jQuery (necessary for Bootstrap's JavaScript plugins) --> |
527 | 565 |
<script src="inc/lib/jquery-1.10.2.min.js"></script> |
528 | 566 |