Benjamin Renard commited on 2014-01-13 23:32:29
Showing 4 changed files, with 65 additions and 44 deletions.
| ... | ... |
@@ -162,10 +162,10 @@ show_contributions=function(group,contributor_name) {
|
| 162 | 162 |
} |
| 163 | 163 |
else {
|
| 164 | 164 |
sum=0; |
| 165 |
- for (idx in contributions) {
|
|
| 166 |
- col_actions='<td><div class="btn-group" data-id="'+contributions[idx].id+'"><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>'; |
|
| 167 |
- tbody.append('<tr><td>'+contributions[idx].getTitle()+'</td><td>'+contributions[idx].cost+' €</td>'+col_actions+'</tr>');
|
|
| 168 |
- sum+=contributions[idx].cost; |
|
| 165 |
+ for (uuid in contributions) {
|
|
| 166 |
+ col_actions='<td><div class="btn-group" data-uuid="'+contributions[uuid].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>'; |
|
| 167 |
+ tbody.append('<tr><td>'+contributions[uuid].getTitle()+'</td><td>'+contributions[uuid].cost+' €</td>'+col_actions+'</tr>');
|
|
| 168 |
+ sum+=contributions[uuid].cost; |
|
| 169 | 169 |
} |
| 170 | 170 |
total.html(sum+' €'); |
| 171 | 171 |
} |
| ... | ... |
@@ -271,7 +271,7 @@ on_show_add_contribution_modal=function(e) {
|
| 271 | 271 |
|
| 272 | 272 |
on_click_add_contribution_btn=function() {
|
| 273 | 273 |
$('#add_contribution_modal #group_name')[0].value=$('#view-group #group_name')[0].value;
|
| 274 |
- $('#add_contribution_modal #edit_id')[0].value='-1';
|
|
| 274 |
+ $('#add_contribution_modal #edit_uuid')[0].value='-1';
|
|
| 275 | 275 |
$($('#add_contribution_modal h4')[0]).html('Ajouter une contribution');
|
| 276 | 276 |
$($('#add_contribution_modal #add_contribution_submit')[0]).html('Ajouter');
|
| 277 | 277 |
$('#add_contribution_modal').modal('show');
|
| ... | ... |
@@ -322,12 +322,12 @@ on_valid_add_contribution_modal=function(e) {
|
| 322 | 322 |
date=new Date(); |
| 323 | 323 |
} |
| 324 | 324 |
|
| 325 |
- if($('#add_contribution_modal #edit_id')[0].value=='-1') {
|
|
| 325 |
+ if($('#add_contribution_modal #edit_uuid')[0].value=='-1') {
|
|
| 326 | 326 |
group.addContribution(new Contribution(contributor,cost,title,date)); |
| 327 | 327 |
} |
| 328 | 328 |
else {
|
| 329 |
- contribution_id=$('#add_contribution_modal #edit_id')[0].value;
|
|
| 330 |
- group.replaceContribution(contribution_id,new Contribution(contributor,cost,title,date)); |
|
| 329 |
+ contribution_uuid=$('#add_contribution_modal #edit_uuid')[0].value;
|
|
| 330 |
+ group.updateContribution(contribution_uuid,new Contribution(contributor,cost,title,date)); |
|
| 331 | 331 |
} |
| 332 | 332 |
show_contributions(group,contributor_name); |
| 333 | 333 |
$('#add_contribution_modal').modal('hide');
|
| ... | ... |
@@ -341,13 +341,13 @@ on_close_add_contribution_modal=function () {
|
| 341 | 341 |
|
| 342 | 342 |
on_contribution_delete_btn_click=function(e) {
|
| 343 | 343 |
var group=groups[$('#view-group #group_name')[0].value];
|
| 344 |
- contribution_id=$($(e.target).parents('div')[0]).data('id');
|
|
| 345 |
- contribution=group.contributions[contribution_id]; |
|
| 346 |
- myconfirm('Etes-vous sûre de vouloir supprimer la participation '+contribution.getTitle()+' de '+contribution.contributor.name+' ?',on_confirm_contribution_delete,null,{'group':group,'contribution_id':contribution_id, 'contribution': contribution} );
|
|
| 344 |
+ contribution_uuid=$($(e.target).parents('div')[0]).data('uuid');
|
|
| 345 |
+ contribution=group.contributions[contribution_uuid]; |
|
| 346 |
+ myconfirm('Etes-vous sûre de vouloir supprimer la participation '+contribution.getTitle()+' de '+contribution.contributor.name+' ?',on_confirm_contribution_delete,null,{'group':group,'contribution_uuid':contribution_uuid, 'contribution': contribution} );
|
|
| 347 | 347 |
} |
| 348 | 348 |
|
| 349 | 349 |
on_confirm_contribution_delete=function(data) {
|
| 350 |
- delete data.group.contributions[data.contribution_id]; |
|
| 350 |
+ data.group.deleteContribution(data.contribution_uuid); |
|
| 351 | 351 |
groups.save(); |
| 352 | 352 |
on_contributor_change(); |
| 353 | 353 |
} |
| ... | ... |
@@ -357,13 +357,13 @@ on_contribution_edit_btn_click=function(e) {
|
| 357 | 357 |
$('#add_contribution_modal #group_name')[0].value=$('#view-group #group_name')[0].value;
|
| 358 | 358 |
$($('#add_contribution_modal h4')[0]).html('Editer une contribution');
|
| 359 | 359 |
$($('#add_contribution_modal #add_contribution_submit')[0]).html('Valider');
|
| 360 |
- contribution_id=$($(e.target).parents('div')[0]).data('id');
|
|
| 361 |
- contribution=group.contributions[contribution_id]; |
|
| 360 |
+ contribution_uuid=$($(e.target).parents('div')[0]).data('uuid');
|
|
| 361 |
+ contribution=group.contributions[contribution_uuid]; |
|
| 362 | 362 |
$('#add_contribution_modal #add_contribution_contributor_name')[0].value=contribution.contributor.name;
|
| 363 | 363 |
$('#add_contribution_modal #add_contribution_title')[0].value=contribution.getTitle();
|
| 364 | 364 |
$('#add_contribution_modal #add_contribution_cost')[0].value=contribution.cost;
|
| 365 | 365 |
$('#add_contribution_modal #add_contribution_date')[0].value=moment(contribution.date).format('DD/MM/YYYY');
|
| 366 |
- $('#add_contribution_modal #edit_id')[0].value=contribution_id;
|
|
| 366 |
+ $('#add_contribution_modal #edit_uuid')[0].value=contribution_uuid;
|
|
| 367 | 367 |
$('#add_contribution_modal').modal('show');
|
| 368 | 368 |
} |
| 369 | 369 |
|
| ... | ... |
@@ -96,7 +96,8 @@ function GroupList() {
|
| 96 | 96 |
function Group(name,data) {
|
| 97 | 97 |
this.name=name; |
| 98 | 98 |
this.contributors=[]; |
| 99 |
- this.contributions=[]; |
|
| 99 |
+ this.contributions={};
|
|
| 100 |
+ this.deletedContributions={};
|
|
| 100 | 101 |
|
| 101 | 102 |
|
| 102 | 103 |
this.isGroup=function() {
|
| ... | ... |
@@ -108,14 +109,15 @@ function Group(name,data) {
|
| 108 | 109 |
for (idx in this.contributors) {
|
| 109 | 110 |
contributors.push(this.contributors[idx].export()); |
| 110 | 111 |
} |
| 111 |
- var contributions=[]; |
|
| 112 |
- for (idx in this.contributions) {
|
|
| 113 |
- contributions.push(this.contributions[idx].export()); |
|
| 112 |
+ var contributions={}
|
|
| 113 |
+ for (uuid in this.contributions) {
|
|
| 114 |
+ contributions[uuid]=this.contributions[uuid].export(); |
|
| 114 | 115 |
} |
| 115 | 116 |
return {
|
| 116 | 117 |
'name': encodeURIComponent(this.name), |
| 117 | 118 |
'contributors': contributors, |
| 118 |
- 'contributions': contributions |
|
| 119 |
+ 'contributions': contributions, |
|
| 120 |
+ 'deletedContributions': this.deletedContributions |
|
| 119 | 121 |
}; |
| 120 | 122 |
} |
| 121 | 123 |
|
| ... | ... |
@@ -156,25 +158,31 @@ function Group(name,data) {
|
| 156 | 158 |
* Contributions |
| 157 | 159 |
*/ |
| 158 | 160 |
this.contributionsByContributorName=function(name) {
|
| 159 |
- var ret=[]; |
|
| 160 |
- for (idx in this.contributions) {
|
|
| 161 |
- if (this.contributions[idx].contributor.name==name) {
|
|
| 162 |
- ret.push(this.contributions[idx]); |
|
| 161 |
+ var ret={};
|
|
| 162 |
+ for (uuid in this.contributions) {
|
|
| 163 |
+ if (this.contributions[uuid].contributor.name==name) {
|
|
| 164 |
+ ret[uuid]=this.contributions[uuid]; |
|
| 163 | 165 |
} |
| 164 | 166 |
} |
| 165 | 167 |
return ret; |
| 166 | 168 |
} |
| 167 | 169 |
|
| 168 | 170 |
this.addContribution=function(c) {
|
| 169 |
- c.id=this.contributions.length; |
|
| 170 |
- this.contributions.push(c); |
|
| 171 |
+ this.contributions[c.uuid]=c; |
|
| 171 | 172 |
} |
| 172 | 173 |
|
| 173 |
- this.replaceContribution=function(idx,c) {
|
|
| 174 |
- c.id=idx; |
|
| 175 |
- this.contributions[idx]=c; |
|
| 174 |
+ this.updateContribution=function(uuid,c) {
|
|
| 175 |
+ c.uuid=uuid; |
|
| 176 |
+ this.contributions[uuid]=c; |
|
| 176 | 177 |
} |
| 177 | 178 |
|
| 179 |
+ this.deleteContribution=function(uuid) {
|
|
| 180 |
+ this.contributions[uuid].lastChange=new Date().getTime(); |
|
| 181 |
+ this.deletedContributions[uuid]=this.contributions[uuid].export(); |
|
| 182 |
+ delete this.contributions[uuid]; |
|
| 183 |
+ } |
|
| 184 |
+ |
|
| 185 |
+ |
|
| 178 | 186 |
/* |
| 179 | 187 |
* Balance |
| 180 | 188 |
*/ |
| ... | ... |
@@ -186,8 +194,8 @@ function Group(name,data) {
|
| 186 | 194 |
var sum=0; |
| 187 | 195 |
c=this.contributors[idx].name; |
| 188 | 196 |
cl=this.contributionsByContributorName(c); |
| 189 |
- for (idc in cl) {
|
|
| 190 |
- sum+=cl[idc].cost; |
|
| 197 |
+ for (uuid in cl) {
|
|
| 198 |
+ sum+=cl[uuid].cost; |
|
| 191 | 199 |
} |
| 192 | 200 |
if (min==-1 || min>sum) {
|
| 193 | 201 |
min=sum; |
| ... | ... |
@@ -229,16 +237,21 @@ function Group(name,data) {
|
| 229 | 237 |
)); |
| 230 | 238 |
} |
| 231 | 239 |
} |
| 232 |
- if (jQuery.type(data.contributions) == 'array') {
|
|
| 233 |
- for (idx in data.contributions) {
|
|
| 234 |
- this.contributions.push(new Contribution( |
|
| 235 |
- this.contributorByName(data.contributions[idx].contributor), |
|
| 236 |
- data.contributions[idx].cost, |
|
| 237 |
- decodeURIComponent(data.contributions[idx].title), |
|
| 238 |
- data.contributions[idx].date, |
|
| 239 |
- idx, |
|
| 240 |
- data.contributions[idx].lastChange |
|
| 241 |
- )); |
|
| 240 |
+ if (jQuery.type(data.contributions) == 'object') {
|
|
| 241 |
+ for (uuid in data.contributions) {
|
|
| 242 |
+ this.contributions[uuid]=new Contribution( |
|
| 243 |
+ this.contributorByName(data.contributions[uuid].contributor), |
|
| 244 |
+ data.contributions[uuid].cost, |
|
| 245 |
+ decodeURIComponent(data.contributions[uuid].title), |
|
| 246 |
+ data.contributions[uuid].date, |
|
| 247 |
+ uuid, |
|
| 248 |
+ data.contributions[uuid].lastChange |
|
| 249 |
+ ); |
|
| 250 |
+ } |
|
| 251 |
+ } |
|
| 252 |
+ if (jQuery.type(data.deletedContributions) == 'object') {
|
|
| 253 |
+ for (uuid in data.deletedContributions) {
|
|
| 254 |
+ this.deletedContributions[uuid]=data.deletedContributions[uuid]; |
|
| 242 | 255 |
} |
| 243 | 256 |
} |
| 244 | 257 |
} |
| ... | ... |
@@ -260,16 +273,17 @@ function Contributor(name,email,id) {
|
| 260 | 273 |
} |
| 261 | 274 |
} |
| 262 | 275 |
|
| 263 |
-function Contribution(contributor,cost,title,date,id,lastChange) {
|
|
| 276 |
+function Contribution(contributor,cost,title,date,uuid,lastChange) {
|
|
| 264 | 277 |
this.contributor=contributor; |
| 265 | 278 |
this.cost=cost; |
| 266 | 279 |
this.title=title; |
| 267 | 280 |
this.date=date; |
| 268 |
- this.id=id; |
|
| 281 |
+ this.uuid=uuid || generate_uuid(); |
|
| 269 | 282 |
this.lastChange=lastChange || new Date().getTime(); |
| 270 | 283 |
this.export=function() {
|
| 271 | 284 |
return {
|
| 272 | 285 |
'contributor': encodeURIComponent(this.contributor.name), |
| 286 |
+ 'uuid': this.uuid, |
|
| 273 | 287 |
'cost': this.cost, |
| 274 | 288 |
'title': encodeURIComponent(this.title), |
| 275 | 289 |
'date': this.date, |
| ... | ... |
@@ -270,7 +270,7 @@ body{
|
| 270 | 270 |
<div class="modal-body"> |
| 271 | 271 |
<form class="form-horizontal" role="form"> |
| 272 | 272 |
<input type='hidden' id='group_name' /> |
| 273 |
- <input type='hidden' id='edit_id' value='-1' /> |
|
| 273 |
+ <input type='hidden' id='edit_uuid' value='-1' /> |
|
| 274 | 274 |
<div class="form-group"> |
| 275 | 275 |
<div class="input-group"> |
| 276 | 276 |
<span class="input-group-addon">Participant *</span> |
| ... | ... |
@@ -421,6 +421,7 @@ body{
|
| 421 | 421 |
<!-- Latest compiled and minified JavaScript --> |
| 422 | 422 |
<script src="inc/lib/bootstrap/js/bootstrap.min.js"></script> |
| 423 | 423 |
<script src="inc/lib/moment.min.js"></script> |
| 424 |
+ <script src="inc/lib/uuid.js"></script> |
|
| 424 | 425 |
<script src="inc/myco_objects.js"></script> |
| 425 | 426 |
<script src="inc/myco_confirm.js"></script> |
| 426 | 427 |
<script src="inc/myco.js"></script> |
| 427 | 428 |