Manage contributor by their email
This commit is contained in:
parent
bf9233401f
commit
0b8d66fbf5
3 changed files with 84 additions and 93 deletions
102
inc/myco.js
102
inc/myco.js
|
@ -93,13 +93,13 @@ view_home=function() {
|
|||
balances=groups.balances();
|
||||
var sum=0;
|
||||
for (g in balances) {
|
||||
if (jQuery.type(balances[g]['balance'][user.name])!='undefined') {
|
||||
if (balances[g]['balance'][user.name]['diff']<0) {
|
||||
sum+=balances[g]['balance'][user.name]['diff'];
|
||||
diff='<td class="negative">'+balances[g]['balance'][user.name]['diff'].toFixed(2)+'</td>';
|
||||
if (jQuery.type(balances[g]['balance'][user.email])!='undefined') {
|
||||
if (balances[g]['balance'][user.email]['diff']<0) {
|
||||
sum+=balances[g]['balance'][user.email]['diff'];
|
||||
diff='<td class="negative">'+balances[g]['balance'][user.email]['diff'].toFixed(2)+'</td>';
|
||||
}
|
||||
else {
|
||||
value=balances[g]['balance'][user.name]['total']-balances[g]['min'];
|
||||
value=balances[g]['balance'][user.email]['total']-balances[g]['min'];
|
||||
sum+=value;
|
||||
diff='<td class="positive">+'+value.toFixed(2)+' €</td>';
|
||||
}
|
||||
|
@ -143,9 +143,9 @@ set_contributors=function(group) {
|
|||
$('#view-group #contributor').append('<option>Aucun participant</option>');
|
||||
}
|
||||
else {
|
||||
$(group.contributors).each(function(idx,c) {
|
||||
$('#view-group #contributor').append('<option value="'+c.name+'">'+c.name+'</option>');
|
||||
});
|
||||
for (email in group.contributors) {
|
||||
$('#view-group #contributor').append('<option value="'+email+'">'+group.contributors[email].name+'</option>');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -153,11 +153,11 @@ on_contributor_change=function(e) {
|
|||
show_contributions(groups[$('#view-group').data('uuid')],$('#view-group #contributor')[0].value);
|
||||
}
|
||||
|
||||
show_contributions=function(group,contributor_name) {
|
||||
show_contributions=function(group,contributor_email) {
|
||||
var tbody=$($('#view-group #contributions tbody')[0]);
|
||||
tbody.html('');
|
||||
total=$($('#view-group #total-value')[0]);
|
||||
contributions=group.contributionsByContributorName(contributor_name);
|
||||
contributions=group.contributionsByContributorEmail(contributor_email);
|
||||
contributions.reverse();
|
||||
if (contributions.length==0) {
|
||||
tbody.append('<tr><td colspan=3>Aucune contributions</td></tr>');
|
||||
|
@ -185,6 +185,7 @@ on_click_add_contributor_btn=function() {
|
|||
$($('#add_contributor_modal h4')[0]).html('Ajouter un participant');
|
||||
$($('#add_contributor_modal #add_contributor_submit')[0]).html('Ajouter');
|
||||
$('#view-group #edit_id')[0].value='-1';
|
||||
$('#add_contributor_modal #add_contributor_email').attr('disabled',false);
|
||||
$('#add_contributor_modal').modal('show');
|
||||
}
|
||||
|
||||
|
@ -201,18 +202,13 @@ on_valid_add_contributor_modal=function(e) {
|
|||
alert('Vous devez saisir un nom !');
|
||||
return;
|
||||
}
|
||||
duplicate=group.contributorByName(name);
|
||||
if (duplicate!=undefined && duplicate.id!=edit_id) {
|
||||
alert('Un contributor porte déjà ce nom !');
|
||||
return;
|
||||
}
|
||||
var email=$('#add_contributor_email')[0].value;
|
||||
if (email=='') {
|
||||
alert('Vous devez saisir un email !');
|
||||
return;
|
||||
}
|
||||
duplicate=group.contributorByEmail(email)
|
||||
if (duplicate!=undefined && duplicate.id!=edit_id) {
|
||||
if (duplicate!=undefined && edit=='-1') {
|
||||
alert('Un contributor utilise déjà cet email !');
|
||||
return;
|
||||
}
|
||||
|
@ -220,12 +216,10 @@ on_valid_add_contributor_modal=function(e) {
|
|||
group.addContributor(new Contributor(name,email));
|
||||
}
|
||||
else {
|
||||
group.replaceContributor(edit_id,new Contributor(name,email));
|
||||
group.replaceContributor(email,new Contributor(name,email));
|
||||
}
|
||||
set_contributors(group);
|
||||
$('#add_contributor_modal').modal('hide');
|
||||
$('#add_contributor_name')[0].value='';
|
||||
$('#add_contributor_email')[0].value='';
|
||||
groups.save();
|
||||
}
|
||||
|
||||
|
@ -237,11 +231,12 @@ on_close_add_contributor_modal=function () {
|
|||
on_edit_contributor_btn_click=function(e) {
|
||||
var group=groups[$('#view-group').data('uuid')];
|
||||
$('#add_contributor_modal').data('group-uuid',group.uuid);
|
||||
contributor_name=$('#view-group #contributor')[0].value;
|
||||
contributor=group.contributorByName(contributor_name);
|
||||
$('#view-group #edit_id')[0].value=contributor.id;
|
||||
contributor_email=$('#view-group #contributor')[0].value;
|
||||
contributor=group.contributorByEmail(contributor_email);
|
||||
$('#view-group #edit_id')[0].value=contributor_email;
|
||||
$('#add_contributor_modal #add_contributor_name')[0].value=contributor.name;
|
||||
$('#add_contributor_modal #add_contributor_email')[0].value=contributor.email;
|
||||
$('#add_contributor_modal #add_contributor_email').attr('disabled',true);
|
||||
$($('#add_contributor_modal h4')[0]).html('Editer un participant');
|
||||
$($('#add_contributor_modal #add_contributor_submit')[0]).html('Valider');
|
||||
$('#add_contributor_modal').modal('show');
|
||||
|
@ -264,12 +259,8 @@ on_confirm_del_contributor=function(contributor) {
|
|||
* Add/edit/delete contribution
|
||||
********************************/
|
||||
on_show_add_contribution_modal=function(e) {
|
||||
var cs=$($('#add_contribution_modal #add_contribution_contributor_name')[0]);
|
||||
cs.html('');
|
||||
$('#view-group #contributor option').each(function(idx,option) {
|
||||
cs.append($(option).clone());
|
||||
});
|
||||
cs[0].value = $('#view-group #contributor')[0].value;
|
||||
$('#add_contribution_modal #add_contribution_contributor_email').html($('#view-group #contributor').html());
|
||||
$('#add_contribution_modal #add_contribution_contributor_email')[0].value=$('#view-group #contributor')[0].value;
|
||||
$('#add_contribution_modal #add_contribution_title').focus();
|
||||
}
|
||||
|
||||
|
@ -284,8 +275,8 @@ on_click_add_contribution_btn=function() {
|
|||
on_valid_add_contribution_modal=function(e) {
|
||||
e.preventDefault();
|
||||
var group=groups[$('#add_contribution_modal').data('group-uuid')];
|
||||
var contributor_name=$('#add_contribution_contributor_name')[0].value;
|
||||
var contributor=group.contributorByName(contributor_name);
|
||||
var contributor_email=$('#add_contribution_contributor_email')[0].value;
|
||||
var contributor=group.contributorByEmail(contributor_email);
|
||||
if (contributor==undefined) {
|
||||
alert('Participant inconu !');
|
||||
return;
|
||||
|
@ -333,7 +324,7 @@ on_valid_add_contribution_modal=function(e) {
|
|||
contribution_uuid=$('#add_contribution_modal #edit_uuid')[0].value;
|
||||
group.updateContribution(contribution_uuid,new Contribution(contributor,cost,title,date));
|
||||
}
|
||||
show_contributions(group,contributor_name);
|
||||
show_contributions(group,contributor_email);
|
||||
$('#add_contribution_modal').modal('hide');
|
||||
$('#add_contribution_modal form')[0].reset();
|
||||
groups.save();
|
||||
|
@ -363,7 +354,7 @@ on_contribution_edit_btn_click=function(e) {
|
|||
$($('#add_contribution_modal #add_contribution_submit')[0]).html('Valider');
|
||||
contribution_uuid=$($(e.target).parents('div')[0]).data('uuid');
|
||||
contribution=group.contributions[contribution_uuid];
|
||||
$('#add_contribution_modal #add_contribution_contributor_name')[0].value=contribution.contributor.name;
|
||||
$('#add_contribution_modal #add_contribution_contributor_email')[0].value=contribution.contributor.email;
|
||||
$('#add_contribution_modal #add_contribution_title')[0].value=contribution.getTitle();
|
||||
$('#add_contribution_modal #add_contribution_cost')[0].value=contribution.cost;
|
||||
$('#add_contribution_modal #add_contribution_date')[0].value=moment(contribution.date).format('DD/MM/YYYY');
|
||||
|
@ -406,7 +397,7 @@ display_balance=function(group) {
|
|||
else {
|
||||
diff='<td><span class="glyphicon glyphicon-thumbs-up"></span></td>';
|
||||
}
|
||||
tbody.append('<tr><td>'+c+'</td><td>'+bal['balance'][c]['total'].toFixed(2)+' €</td>'+diff+'</tr>');
|
||||
tbody.append('<tr><td>'+bal['balance'][c]['name']+'</td><td>'+bal['balance'][c]['total'].toFixed(2)+' €</td>'+diff+'</tr>');
|
||||
}
|
||||
$('#display_balance_modal #total-value').html(bal.sum.toFixed(2)+' €');
|
||||
$('#display_balance_modal').modal('show');
|
||||
|
@ -523,28 +514,33 @@ on_click_sync_btn=function(e) {
|
|||
navbar_collapse_hide();
|
||||
if (user) {
|
||||
pleaseWaitShow();
|
||||
sync_server.sync(user.server, user.email, user.password, groups.export(),
|
||||
function(data) {
|
||||
console.log(data);
|
||||
if (data.groups) {
|
||||
groups.import(data.groups);
|
||||
groups.save();
|
||||
refresh_group_list();
|
||||
pleaseWaitHide();
|
||||
alert('Groupes synchronisés');
|
||||
}
|
||||
else {
|
||||
pleaseWaitHide();
|
||||
console.log(data);
|
||||
alert('Erreur durant la synchronisation :(');
|
||||
}
|
||||
},
|
||||
function(data) {
|
||||
onsuccess=function(data) {
|
||||
console.log(data);
|
||||
if (data.groups) {
|
||||
groups.import(data.groups);
|
||||
groups.save();
|
||||
refresh_group_list();
|
||||
pleaseWaitHide();
|
||||
console.log(data);
|
||||
alert('Impossible de contacter le serveur :(');
|
||||
alert('Groupes synchronisés');
|
||||
}
|
||||
);
|
||||
else {
|
||||
onerror(data);
|
||||
}
|
||||
}
|
||||
onerror=function(data) {
|
||||
pleaseWaitHide();
|
||||
console.log(data);
|
||||
if (jQuery.type(data['loginerror'])!='undefined') {
|
||||
alert(data['loginerror']);
|
||||
}
|
||||
else if (jQuery.type(data['syncerror'])!='undefined') {
|
||||
alert(data['syncerror']);
|
||||
}
|
||||
else {
|
||||
alert('Erreur durant la synchronisation :(');
|
||||
}
|
||||
}
|
||||
sync_server.sync(user.server, user.email, user.password, groups.export(),onsuccess,onerror);
|
||||
}
|
||||
else {
|
||||
alert("Vous devez vous connecter pour commencer");
|
||||
|
|
|
@ -116,7 +116,7 @@ function GroupList() {
|
|||
function Group(uuid,name,data) {
|
||||
this.uuid=uuid || generate_uuid();
|
||||
this.name=name || false;
|
||||
this.contributors=[];
|
||||
this.contributors={};
|
||||
this.contributions={};
|
||||
this.deletedContributions={};
|
||||
|
||||
|
@ -126,9 +126,9 @@ function Group(uuid,name,data) {
|
|||
}
|
||||
|
||||
this.export=function() {
|
||||
var contributors=[];
|
||||
for (idx in this.contributors) {
|
||||
contributors.push(this.contributors[idx].export());
|
||||
var contributors={};
|
||||
for (email in this.contributors) {
|
||||
contributors[email]=this.contributors[email].export();
|
||||
}
|
||||
var contributions={}
|
||||
for (uuid in this.contributions) {
|
||||
|
@ -147,42 +147,39 @@ function Group(uuid,name,data) {
|
|||
* Contributors
|
||||
*/
|
||||
this.removeContributor=function(c) {
|
||||
this.contributors=this.contributors.filter(function(v){
|
||||
return (v.name!=c);
|
||||
});
|
||||
delete this.contributors[c.email];
|
||||
}
|
||||
|
||||
this.contributorByName=function(name) {
|
||||
for (c in this.contributors) {
|
||||
if (this.contributors[c].name == name) return this.contributors[c];
|
||||
for (email in this.contributors) {
|
||||
if (this.contributors[email].name == name) return this.contributors[email];
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
this.contributorByEmail=function(email) {
|
||||
for (c in this.contributors) {
|
||||
if (this.contributors[c].email == email) return this.contributors[c];
|
||||
if (jQuery.type(this.contributors[email])!='undefined') {
|
||||
return this.contributors[email];
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
this.addContributor=function(c) {
|
||||
c.id=this.contributors.length;
|
||||
this.contributors.push(c);
|
||||
this.contributors[c.email]=c;
|
||||
}
|
||||
|
||||
this.replaceContributor=function(idx,c) {
|
||||
c.id=idx;
|
||||
this.contributors[idx]=c;
|
||||
this.replaceContributor=function(email,c) {
|
||||
delete this.contributors[email];
|
||||
this.contributors[c.email]=c;
|
||||
}
|
||||
|
||||
/*
|
||||
* Contributions
|
||||
*/
|
||||
this.contributionsByContributorName=function(name) {
|
||||
this.contributionsByContributorEmail=function(email) {
|
||||
var ret=[];
|
||||
for (uuid in this.contributions) {
|
||||
if (this.contributions[uuid].contributor.name==name) {
|
||||
if (this.contributions[uuid].contributor.email==email) {
|
||||
ret.push(this.contributions[uuid]);
|
||||
}
|
||||
}
|
||||
|
@ -223,10 +220,9 @@ function Group(uuid,name,data) {
|
|||
total={}
|
||||
min=-1;
|
||||
max=0;
|
||||
for (idx in this.contributors) {
|
||||
for (email in this.contributors) {
|
||||
var sum=0;
|
||||
c=this.contributors[idx].name;
|
||||
cl=this.contributionsByContributorName(c);
|
||||
cl=this.contributionsByContributorEmail(email);
|
||||
for (idx in cl) {
|
||||
sum+=cl[idx].cost;
|
||||
}
|
||||
|
@ -236,16 +232,17 @@ function Group(uuid,name,data) {
|
|||
if(max<sum) {
|
||||
max=sum;
|
||||
}
|
||||
total[c]=sum;
|
||||
total[email]=sum;
|
||||
}
|
||||
balance={}
|
||||
var sum=0;
|
||||
for (c in total) {
|
||||
balance[c]={
|
||||
'total': total[c],
|
||||
'diff': total[c]-max,
|
||||
for (email in total) {
|
||||
balance[email]={
|
||||
'name': this.contributors[email].name,
|
||||
'total': total[email],
|
||||
'diff': total[email]-max,
|
||||
}
|
||||
sum=sum+total[c];
|
||||
sum=sum+total[email];
|
||||
}
|
||||
return {
|
||||
'balance': balance,
|
||||
|
@ -262,19 +259,18 @@ function Group(uuid,name,data) {
|
|||
try {
|
||||
this.uuid=data.uuid;
|
||||
this.name=data.name;
|
||||
if (jQuery.type(data.contributors) == 'array') {
|
||||
for (idx in data.contributors) {
|
||||
this.contributors.push(new Contributor(
|
||||
decodeURIComponent(data.contributors[idx].name),
|
||||
decodeURIComponent(data.contributors[idx].email),
|
||||
idx
|
||||
));
|
||||
if (jQuery.type(data.contributors) == 'object') {
|
||||
for (email in data.contributors) {
|
||||
this.contributors[email]=new Contributor(
|
||||
decodeURIComponent(data.contributors[email].name),
|
||||
data.contributors[email].email
|
||||
);
|
||||
}
|
||||
}
|
||||
if (jQuery.type(data.contributions) == 'object') {
|
||||
for (uuid in data.contributions) {
|
||||
this.contributions[uuid]=new Contribution(
|
||||
this.contributorByName(data.contributions[uuid].contributor),
|
||||
this.contributorByEmail(data.contributions[uuid].contributor),
|
||||
data.contributions[uuid].cost,
|
||||
decodeURIComponent(data.contributions[uuid].title),
|
||||
data.contributions[uuid].date,
|
||||
|
@ -295,14 +291,13 @@ function Group(uuid,name,data) {
|
|||
}
|
||||
}
|
||||
|
||||
function Contributor(name,email,id) {
|
||||
function Contributor(name,email) {
|
||||
this.name=name;
|
||||
this.email=email;
|
||||
this.id=id;
|
||||
this.export=function() {
|
||||
return {
|
||||
'name': encodeURIComponent(this.name),
|
||||
'email': encodeURIComponent(this.email)
|
||||
'email': this.email
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -319,7 +314,7 @@ function Contribution(contributor,cost,title,date,uuid,lastChange) {
|
|||
this.lastChange=lastChange || new Date().getTime();
|
||||
this.export=function() {
|
||||
return {
|
||||
'contributor': encodeURIComponent(this.contributor.name),
|
||||
'contributor': this.contributor.email,
|
||||
'uuid': this.uuid,
|
||||
'cost': this.cost,
|
||||
'title': encodeURIComponent(this.title),
|
||||
|
|
|
@ -316,7 +316,7 @@ body{
|
|||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">Participant *</span>
|
||||
<select id='add_contribution_contributor_name' class="form-control"></select>
|
||||
<select id='add_contribution_contributor_email' class="form-control"></select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
|
|
Loading…
Reference in a new issue