Benjamin Renard commited on 2014-01-19 13:48:41
Showing 3 changed files, with 72 additions and 81 deletions.
| ... | ... |
@@ -93,13 +93,13 @@ view_home=function() {
|
| 93 | 93 |
balances=groups.balances(); |
| 94 | 94 |
var sum=0; |
| 95 | 95 |
for (g in balances) {
|
| 96 |
- if (jQuery.type(balances[g]['balance'][user.name])!='undefined') {
|
|
| 97 |
- if (balances[g]['balance'][user.name]['diff']<0) {
|
|
| 98 |
- sum+=balances[g]['balance'][user.name]['diff']; |
|
| 99 |
- diff='<td class="negative">'+balances[g]['balance'][user.name]['diff'].toFixed(2)+'</td>'; |
|
| 96 |
+ if (jQuery.type(balances[g]['balance'][user.email])!='undefined') {
|
|
| 97 |
+ if (balances[g]['balance'][user.email]['diff']<0) {
|
|
| 98 |
+ sum+=balances[g]['balance'][user.email]['diff']; |
|
| 99 |
+ diff='<td class="negative">'+balances[g]['balance'][user.email]['diff'].toFixed(2)+'</td>'; |
|
| 100 | 100 |
} |
| 101 | 101 |
else {
|
| 102 |
- value=balances[g]['balance'][user.name]['total']-balances[g]['min']; |
|
| 102 |
+ value=balances[g]['balance'][user.email]['total']-balances[g]['min']; |
|
| 103 | 103 |
sum+=value; |
| 104 | 104 |
diff='<td class="positive">+'+value.toFixed(2)+' €</td>'; |
| 105 | 105 |
} |
| ... | ... |
@@ -143,9 +143,9 @@ set_contributors=function(group) {
|
| 143 | 143 |
$('#view-group #contributor').append('<option>Aucun participant</option>');
|
| 144 | 144 |
} |
| 145 | 145 |
else {
|
| 146 |
- $(group.contributors).each(function(idx,c) {
|
|
| 147 |
- $('#view-group #contributor').append('<option value="'+c.name+'">'+c.name+'</option>');
|
|
| 148 |
- }); |
|
| 146 |
+ for (email in group.contributors) {
|
|
| 147 |
+ $('#view-group #contributor').append('<option value="'+email+'">'+group.contributors[email].name+'</option>');
|
|
| 148 |
+ } |
|
| 149 | 149 |
} |
| 150 | 150 |
} |
| 151 | 151 |
|
| ... | ... |
@@ -153,11 +153,11 @@ on_contributor_change=function(e) {
|
| 153 | 153 |
show_contributions(groups[$('#view-group').data('uuid')],$('#view-group #contributor')[0].value);
|
| 154 | 154 |
} |
| 155 | 155 |
|
| 156 |
-show_contributions=function(group,contributor_name) {
|
|
| 156 |
+show_contributions=function(group,contributor_email) {
|
|
| 157 | 157 |
var tbody=$($('#view-group #contributions tbody')[0]);
|
| 158 | 158 |
tbody.html('');
|
| 159 | 159 |
total=$($('#view-group #total-value')[0]);
|
| 160 |
- contributions=group.contributionsByContributorName(contributor_name); |
|
| 160 |
+ contributions=group.contributionsByContributorEmail(contributor_email); |
|
| 161 | 161 |
contributions.reverse(); |
| 162 | 162 |
if (contributions.length==0) {
|
| 163 | 163 |
tbody.append('<tr><td colspan=3>Aucune contributions</td></tr>');
|
| ... | ... |
@@ -185,6 +185,7 @@ on_click_add_contributor_btn=function() {
|
| 185 | 185 |
$($('#add_contributor_modal h4')[0]).html('Ajouter un participant');
|
| 186 | 186 |
$($('#add_contributor_modal #add_contributor_submit')[0]).html('Ajouter');
|
| 187 | 187 |
$('#view-group #edit_id')[0].value='-1';
|
| 188 |
+ $('#add_contributor_modal #add_contributor_email').attr('disabled',false);
|
|
| 188 | 189 |
$('#add_contributor_modal').modal('show');
|
| 189 | 190 |
} |
| 190 | 191 |
|
| ... | ... |
@@ -201,18 +202,13 @@ on_valid_add_contributor_modal=function(e) {
|
| 201 | 202 |
alert('Vous devez saisir un nom !');
|
| 202 | 203 |
return; |
| 203 | 204 |
} |
| 204 |
- duplicate=group.contributorByName(name); |
|
| 205 |
- if (duplicate!=undefined && duplicate.id!=edit_id) {
|
|
| 206 |
- alert('Un contributor porte déjà ce nom !');
|
|
| 207 |
- return; |
|
| 208 |
- } |
|
| 209 | 205 |
var email=$('#add_contributor_email')[0].value;
|
| 210 | 206 |
if (email=='') {
|
| 211 | 207 |
alert('Vous devez saisir un email !');
|
| 212 | 208 |
return; |
| 213 | 209 |
} |
| 214 | 210 |
duplicate=group.contributorByEmail(email) |
| 215 |
- if (duplicate!=undefined && duplicate.id!=edit_id) {
|
|
| 211 |
+ if (duplicate!=undefined && edit=='-1') {
|
|
| 216 | 212 |
alert('Un contributor utilise déjà cet email !');
|
| 217 | 213 |
return; |
| 218 | 214 |
} |
| ... | ... |
@@ -220,12 +216,10 @@ on_valid_add_contributor_modal=function(e) {
|
| 220 | 216 |
group.addContributor(new Contributor(name,email)); |
| 221 | 217 |
} |
| 222 | 218 |
else {
|
| 223 |
- group.replaceContributor(edit_id,new Contributor(name,email)); |
|
| 219 |
+ group.replaceContributor(email,new Contributor(name,email)); |
|
| 224 | 220 |
} |
| 225 | 221 |
set_contributors(group); |
| 226 | 222 |
$('#add_contributor_modal').modal('hide');
|
| 227 |
- $('#add_contributor_name')[0].value='';
|
|
| 228 |
- $('#add_contributor_email')[0].value='';
|
|
| 229 | 223 |
groups.save(); |
| 230 | 224 |
} |
| 231 | 225 |
|
| ... | ... |
@@ -237,11 +231,12 @@ on_close_add_contributor_modal=function () {
|
| 237 | 231 |
on_edit_contributor_btn_click=function(e) {
|
| 238 | 232 |
var group=groups[$('#view-group').data('uuid')];
|
| 239 | 233 |
$('#add_contributor_modal').data('group-uuid',group.uuid);
|
| 240 |
- contributor_name=$('#view-group #contributor')[0].value;
|
|
| 241 |
- contributor=group.contributorByName(contributor_name); |
|
| 242 |
- $('#view-group #edit_id')[0].value=contributor.id;
|
|
| 234 |
+ contributor_email=$('#view-group #contributor')[0].value;
|
|
| 235 |
+ contributor=group.contributorByEmail(contributor_email); |
|
| 236 |
+ $('#view-group #edit_id')[0].value=contributor_email;
|
|
| 243 | 237 |
$('#add_contributor_modal #add_contributor_name')[0].value=contributor.name;
|
| 244 | 238 |
$('#add_contributor_modal #add_contributor_email')[0].value=contributor.email;
|
| 239 |
+ $('#add_contributor_modal #add_contributor_email').attr('disabled',true);
|
|
| 245 | 240 |
$($('#add_contributor_modal h4')[0]).html('Editer un participant');
|
| 246 | 241 |
$($('#add_contributor_modal #add_contributor_submit')[0]).html('Valider');
|
| 247 | 242 |
$('#add_contributor_modal').modal('show');
|
| ... | ... |
@@ -264,12 +259,8 @@ on_confirm_del_contributor=function(contributor) {
|
| 264 | 259 |
* Add/edit/delete contribution |
| 265 | 260 |
********************************/ |
| 266 | 261 |
on_show_add_contribution_modal=function(e) {
|
| 267 |
- var cs=$($('#add_contribution_modal #add_contribution_contributor_name')[0]);
|
|
| 268 |
- cs.html('');
|
|
| 269 |
- $('#view-group #contributor option').each(function(idx,option) {
|
|
| 270 |
- cs.append($(option).clone()); |
|
| 271 |
- }); |
|
| 272 |
- cs[0].value = $('#view-group #contributor')[0].value;
|
|
| 262 |
+ $('#add_contribution_modal #add_contribution_contributor_email').html($('#view-group #contributor').html());
|
|
| 263 |
+ $('#add_contribution_modal #add_contribution_contributor_email')[0].value=$('#view-group #contributor')[0].value;
|
|
| 273 | 264 |
$('#add_contribution_modal #add_contribution_title').focus();
|
| 274 | 265 |
} |
| 275 | 266 |
|
| ... | ... |
@@ -284,8 +275,8 @@ on_click_add_contribution_btn=function() {
|
| 284 | 275 |
on_valid_add_contribution_modal=function(e) {
|
| 285 | 276 |
e.preventDefault(); |
| 286 | 277 |
var group=groups[$('#add_contribution_modal').data('group-uuid')];
|
| 287 |
- var contributor_name=$('#add_contribution_contributor_name')[0].value;
|
|
| 288 |
- var contributor=group.contributorByName(contributor_name); |
|
| 278 |
+ var contributor_email=$('#add_contribution_contributor_email')[0].value;
|
|
| 279 |
+ var contributor=group.contributorByEmail(contributor_email); |
|
| 289 | 280 |
if (contributor==undefined) {
|
| 290 | 281 |
alert('Participant inconu !');
|
| 291 | 282 |
return; |
| ... | ... |
@@ -333,7 +324,7 @@ on_valid_add_contribution_modal=function(e) {
|
| 333 | 324 |
contribution_uuid=$('#add_contribution_modal #edit_uuid')[0].value;
|
| 334 | 325 |
group.updateContribution(contribution_uuid,new Contribution(contributor,cost,title,date)); |
| 335 | 326 |
} |
| 336 |
- show_contributions(group,contributor_name); |
|
| 327 |
+ show_contributions(group,contributor_email); |
|
| 337 | 328 |
$('#add_contribution_modal').modal('hide');
|
| 338 | 329 |
$('#add_contribution_modal form')[0].reset();
|
| 339 | 330 |
groups.save(); |
| ... | ... |
@@ -363,7 +354,7 @@ on_contribution_edit_btn_click=function(e) {
|
| 363 | 354 |
$($('#add_contribution_modal #add_contribution_submit')[0]).html('Valider');
|
| 364 | 355 |
contribution_uuid=$($(e.target).parents('div')[0]).data('uuid');
|
| 365 | 356 |
contribution=group.contributions[contribution_uuid]; |
| 366 |
- $('#add_contribution_modal #add_contribution_contributor_name')[0].value=contribution.contributor.name;
|
|
| 357 |
+ $('#add_contribution_modal #add_contribution_contributor_email')[0].value=contribution.contributor.email;
|
|
| 367 | 358 |
$('#add_contribution_modal #add_contribution_title')[0].value=contribution.getTitle();
|
| 368 | 359 |
$('#add_contribution_modal #add_contribution_cost')[0].value=contribution.cost;
|
| 369 | 360 |
$('#add_contribution_modal #add_contribution_date')[0].value=moment(contribution.date).format('DD/MM/YYYY');
|
| ... | ... |
@@ -406,7 +397,7 @@ display_balance=function(group) {
|
| 406 | 397 |
else {
|
| 407 | 398 |
diff='<td><span class="glyphicon glyphicon-thumbs-up"></span></td>'; |
| 408 | 399 |
} |
| 409 |
- tbody.append('<tr><td>'+c+'</td><td>'+bal['balance'][c]['total'].toFixed(2)+' €</td>'+diff+'</tr>');
|
|
| 400 |
+ tbody.append('<tr><td>'+bal['balance'][c]['name']+'</td><td>'+bal['balance'][c]['total'].toFixed(2)+' €</td>'+diff+'</tr>');
|
|
| 410 | 401 |
} |
| 411 | 402 |
$('#display_balance_modal #total-value').html(bal.sum.toFixed(2)+' €');
|
| 412 | 403 |
$('#display_balance_modal').modal('show');
|
| ... | ... |
@@ -523,8 +514,7 @@ on_click_sync_btn=function(e) {
|
| 523 | 514 |
navbar_collapse_hide(); |
| 524 | 515 |
if (user) {
|
| 525 | 516 |
pleaseWaitShow(); |
| 526 |
- sync_server.sync(user.server, user.email, user.password, groups.export(), |
|
| 527 |
- function(data) {
|
|
| 517 |
+ onsuccess=function(data) {
|
|
| 528 | 518 |
console.log(data); |
| 529 | 519 |
if (data.groups) {
|
| 530 | 520 |
groups.import(data.groups); |
| ... | ... |
@@ -534,17 +524,23 @@ on_click_sync_btn=function(e) {
|
| 534 | 524 |
alert('Groupes synchronisés');
|
| 535 | 525 |
} |
| 536 | 526 |
else {
|
| 527 |
+ onerror(data); |
|
| 528 |
+ } |
|
| 529 |
+ } |
|
| 530 |
+ onerror=function(data) {
|
|
| 537 | 531 |
pleaseWaitHide(); |
| 538 | 532 |
console.log(data); |
| 533 |
+ if (jQuery.type(data['loginerror'])!='undefined') {
|
|
| 534 |
+ alert(data['loginerror']); |
|
| 535 |
+ } |
|
| 536 |
+ else if (jQuery.type(data['syncerror'])!='undefined') {
|
|
| 537 |
+ alert(data['syncerror']); |
|
| 538 |
+ } |
|
| 539 |
+ else {
|
|
| 539 | 540 |
alert('Erreur durant la synchronisation :(');
|
| 540 | 541 |
} |
| 541 |
- }, |
|
| 542 |
- function(data) {
|
|
| 543 |
- pleaseWaitHide(); |
|
| 544 |
- console.log(data); |
|
| 545 |
- alert('Impossible de contacter le serveur :(');
|
|
| 546 | 542 |
} |
| 547 |
- ); |
|
| 543 |
+ sync_server.sync(user.server, user.email, user.password, groups.export(),onsuccess,onerror); |
|
| 548 | 544 |
} |
| 549 | 545 |
else {
|
| 550 | 546 |
alert("Vous devez vous connecter pour commencer");
|
| ... | ... |
@@ -116,7 +116,7 @@ function GroupList() {
|
| 116 | 116 |
function Group(uuid,name,data) {
|
| 117 | 117 |
this.uuid=uuid || generate_uuid(); |
| 118 | 118 |
this.name=name || false; |
| 119 |
- this.contributors=[]; |
|
| 119 |
+ this.contributors={};
|
|
| 120 | 120 |
this.contributions={};
|
| 121 | 121 |
this.deletedContributions={};
|
| 122 | 122 |
|
| ... | ... |
@@ -126,9 +126,9 @@ function Group(uuid,name,data) {
|
| 126 | 126 |
} |
| 127 | 127 |
|
| 128 | 128 |
this.export=function() {
|
| 129 |
- var contributors=[]; |
|
| 130 |
- for (idx in this.contributors) {
|
|
| 131 |
- contributors.push(this.contributors[idx].export()); |
|
| 129 |
+ var contributors={};
|
|
| 130 |
+ for (email in this.contributors) {
|
|
| 131 |
+ contributors[email]=this.contributors[email].export(); |
|
| 132 | 132 |
} |
| 133 | 133 |
var contributions={}
|
| 134 | 134 |
for (uuid in this.contributions) {
|
| ... | ... |
@@ -147,42 +147,39 @@ function Group(uuid,name,data) {
|
| 147 | 147 |
* Contributors |
| 148 | 148 |
*/ |
| 149 | 149 |
this.removeContributor=function(c) {
|
| 150 |
- this.contributors=this.contributors.filter(function(v){
|
|
| 151 |
- return (v.name!=c); |
|
| 152 |
- }); |
|
| 150 |
+ delete this.contributors[c.email]; |
|
| 153 | 151 |
} |
| 154 | 152 |
|
| 155 | 153 |
this.contributorByName=function(name) {
|
| 156 |
- for (c in this.contributors) {
|
|
| 157 |
- if (this.contributors[c].name == name) return this.contributors[c]; |
|
| 154 |
+ for (email in this.contributors) {
|
|
| 155 |
+ if (this.contributors[email].name == name) return this.contributors[email]; |
|
| 158 | 156 |
} |
| 159 | 157 |
return undefined; |
| 160 | 158 |
} |
| 161 | 159 |
|
| 162 | 160 |
this.contributorByEmail=function(email) {
|
| 163 |
- for (c in this.contributors) {
|
|
| 164 |
- if (this.contributors[c].email == email) return this.contributors[c]; |
|
| 161 |
+ if (jQuery.type(this.contributors[email])!='undefined') {
|
|
| 162 |
+ return this.contributors[email]; |
|
| 165 | 163 |
} |
| 166 | 164 |
return undefined; |
| 167 | 165 |
} |
| 168 | 166 |
|
| 169 | 167 |
this.addContributor=function(c) {
|
| 170 |
- c.id=this.contributors.length; |
|
| 171 |
- this.contributors.push(c); |
|
| 168 |
+ this.contributors[c.email]=c; |
|
| 172 | 169 |
} |
| 173 | 170 |
|
| 174 |
- this.replaceContributor=function(idx,c) {
|
|
| 175 |
- c.id=idx; |
|
| 176 |
- this.contributors[idx]=c; |
|
| 171 |
+ this.replaceContributor=function(email,c) {
|
|
| 172 |
+ delete this.contributors[email]; |
|
| 173 |
+ this.contributors[c.email]=c; |
|
| 177 | 174 |
} |
| 178 | 175 |
|
| 179 | 176 |
/* |
| 180 | 177 |
* Contributions |
| 181 | 178 |
*/ |
| 182 |
- this.contributionsByContributorName=function(name) {
|
|
| 179 |
+ this.contributionsByContributorEmail=function(email) {
|
|
| 183 | 180 |
var ret=[]; |
| 184 | 181 |
for (uuid in this.contributions) {
|
| 185 |
- if (this.contributions[uuid].contributor.name==name) {
|
|
| 182 |
+ if (this.contributions[uuid].contributor.email==email) {
|
|
| 186 | 183 |
ret.push(this.contributions[uuid]); |
| 187 | 184 |
} |
| 188 | 185 |
} |
| ... | ... |
@@ -223,10 +220,9 @@ function Group(uuid,name,data) {
|
| 223 | 220 |
total={}
|
| 224 | 221 |
min=-1; |
| 225 | 222 |
max=0; |
| 226 |
- for (idx in this.contributors) {
|
|
| 223 |
+ for (email in this.contributors) {
|
|
| 227 | 224 |
var sum=0; |
| 228 |
- c=this.contributors[idx].name; |
|
| 229 |
- cl=this.contributionsByContributorName(c); |
|
| 225 |
+ cl=this.contributionsByContributorEmail(email); |
|
| 230 | 226 |
for (idx in cl) {
|
| 231 | 227 |
sum+=cl[idx].cost; |
| 232 | 228 |
} |
| ... | ... |
@@ -236,16 +232,17 @@ function Group(uuid,name,data) {
|
| 236 | 232 |
if(max<sum) {
|
| 237 | 233 |
max=sum; |
| 238 | 234 |
} |
| 239 |
- total[c]=sum; |
|
| 235 |
+ total[email]=sum; |
|
| 240 | 236 |
} |
| 241 | 237 |
balance={}
|
| 242 | 238 |
var sum=0; |
| 243 |
- for (c in total) {
|
|
| 244 |
- balance[c]={
|
|
| 245 |
- 'total': total[c], |
|
| 246 |
- 'diff': total[c]-max, |
|
| 239 |
+ for (email in total) {
|
|
| 240 |
+ balance[email]={
|
|
| 241 |
+ 'name': this.contributors[email].name, |
|
| 242 |
+ 'total': total[email], |
|
| 243 |
+ 'diff': total[email]-max, |
|
| 247 | 244 |
} |
| 248 |
- sum=sum+total[c]; |
|
| 245 |
+ sum=sum+total[email]; |
|
| 249 | 246 |
} |
| 250 | 247 |
return {
|
| 251 | 248 |
'balance': balance, |
| ... | ... |
@@ -262,19 +259,18 @@ function Group(uuid,name,data) {
|
| 262 | 259 |
try {
|
| 263 | 260 |
this.uuid=data.uuid; |
| 264 | 261 |
this.name=data.name; |
| 265 |
- if (jQuery.type(data.contributors) == 'array') {
|
|
| 266 |
- for (idx in data.contributors) {
|
|
| 267 |
- this.contributors.push(new Contributor( |
|
| 268 |
- decodeURIComponent(data.contributors[idx].name), |
|
| 269 |
- decodeURIComponent(data.contributors[idx].email), |
|
| 270 |
- idx |
|
| 271 |
- )); |
|
| 262 |
+ if (jQuery.type(data.contributors) == 'object') {
|
|
| 263 |
+ for (email in data.contributors) {
|
|
| 264 |
+ this.contributors[email]=new Contributor( |
|
| 265 |
+ decodeURIComponent(data.contributors[email].name), |
|
| 266 |
+ data.contributors[email].email |
|
| 267 |
+ ); |
|
| 272 | 268 |
} |
| 273 | 269 |
} |
| 274 | 270 |
if (jQuery.type(data.contributions) == 'object') {
|
| 275 | 271 |
for (uuid in data.contributions) {
|
| 276 | 272 |
this.contributions[uuid]=new Contribution( |
| 277 |
- this.contributorByName(data.contributions[uuid].contributor), |
|
| 273 |
+ this.contributorByEmail(data.contributions[uuid].contributor), |
|
| 278 | 274 |
data.contributions[uuid].cost, |
| 279 | 275 |
decodeURIComponent(data.contributions[uuid].title), |
| 280 | 276 |
data.contributions[uuid].date, |
| ... | ... |
@@ -295,14 +291,13 @@ function Group(uuid,name,data) {
|
| 295 | 291 |
} |
| 296 | 292 |
} |
| 297 | 293 |
|
| 298 |
-function Contributor(name,email,id) {
|
|
| 294 |
+function Contributor(name,email) {
|
|
| 299 | 295 |
this.name=name; |
| 300 | 296 |
this.email=email; |
| 301 |
- this.id=id; |
|
| 302 | 297 |
this.export=function() {
|
| 303 | 298 |
return {
|
| 304 | 299 |
'name': encodeURIComponent(this.name), |
| 305 |
- 'email': encodeURIComponent(this.email) |
|
| 300 |
+ 'email': this.email |
|
| 306 | 301 |
}; |
| 307 | 302 |
} |
| 308 | 303 |
} |
| ... | ... |
@@ -319,7 +314,7 @@ function Contribution(contributor,cost,title,date,uuid,lastChange) {
|
| 319 | 314 |
this.lastChange=lastChange || new Date().getTime(); |
| 320 | 315 |
this.export=function() {
|
| 321 | 316 |
return {
|
| 322 |
- 'contributor': encodeURIComponent(this.contributor.name), |
|
| 317 |
+ 'contributor': this.contributor.email, |
|
| 323 | 318 |
'uuid': this.uuid, |
| 324 | 319 |
'cost': this.cost, |
| 325 | 320 |
'title': encodeURIComponent(this.title), |
| ... | ... |
@@ -316,7 +316,7 @@ body{
|
| 316 | 316 |
<div class="form-group"> |
| 317 | 317 |
<div class="input-group"> |
| 318 | 318 |
<span class="input-group-addon">Participant *</span> |
| 319 |
- <select id='add_contribution_contributor_name' class="form-control"></select> |
|
| 319 |
+ <select id='add_contribution_contributor_email' class="form-control"></select> |
|
| 320 | 320 |
</div> |
| 321 | 321 |
</div> |
| 322 | 322 |
<div class="form-group"> |
| 323 | 323 |