Skip to content

Commit

Permalink
multi-voting,user can't see number of vote
Browse files Browse the repository at this point in the history
  • Loading branch information
trungngotdt committed Dec 11, 2018
1 parent e824742 commit c6851d5
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 22 deletions.
1 change: 1 addition & 0 deletions EthereumVoting/View/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
<GridViewColumn Header="Name"
DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn Header="Number of Vote"
Width="{Binding ElementName=LstCandicates,Path=DataContext.NOVoteWidth,Mode=OneWay}"
DisplayMemberBinding="{Binding NumVote}"/>
<!--
<GridViewColumn Header="aaa"
Expand Down
8 changes: 6 additions & 2 deletions EthereumVoting/View/ShellWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@
IsEnabled="False"
Grid.Column="0">
<Expander.Header>
<StackPanel Orientation="Horizontal"
Height="{Binding ElementName=ExpMenu,Path=Height}">
<StackPanel Orientation="Horizontal"
Height="{Binding ElementName=ExpMenu,Path=Height}">

<TextBlock Text="Menu"
VerticalAlignment="Center"
Expand All @@ -58,6 +58,10 @@
<Button x:Name="BtnConfigPanel"
Content="Config"
Command="{Binding CommandBtnConfigClickNavigation}"/>
<TextBlock/>
<Button x:Name="BtnLogOut"
Content="Log Out"
Command="{Binding CommandBtnLogOut}"/>
</StackPanel>
</Expander>
</Grid>
Expand Down
1 change: 1 addition & 0 deletions EthereumVoting/ViewModel/LoginViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ async Task SubmitClickAsync()
{
var ExpMenu = NavigationService.GetDescendantFromName(Application.Current.MainWindow, "ExpMenu") as Expander;
registerParamaters.SetParamater("address", account);
registerParamaters.SetParamater("role", (user.GetValue(0) as User).Role);
NavigationService.NavigateTo("Main");
Account = null;
Password = null;
Expand Down
94 changes: 74 additions & 20 deletions EthereumVoting/ViewModel/MainViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ namespace EthereumVoting.ViewModel
/// </summary>
public class MainViewModel : ViewModelBase
{
private Task<int> taskCountCandidates;

private int countCheckedCandidates=2;

private Task<int> taskCountCandidates;


private ObservableCollection<Candidate> candidates;
Expand All @@ -38,6 +38,8 @@ public class MainViewModel : ViewModelBase
private bool isEnabledBtnSubmited;
private bool isOpenSbNotify;
private string messageSbNotify;
public int NOVoteWidth { get; set; }
private List<string> candidatesIsCheck;

private IHelper helper;
private IHelperMongo helperMongo;
Expand Down Expand Up @@ -96,22 +98,27 @@ public MainViewModel(IHelper _helper,IHelperMongo _helperMongo, IRegisterParamat
{
this.registerParamaters = _registerParamaters;
this.helper = _helper;
this.helperMongo = _helperMongo;
this.helperMongo = _helperMongo;
candidatesIsCheck = new List<string>();
}

private async Task LoadedAsync()
{
Init();
await InitContractVotingAsync();
taskCountCandidates = GetHelper.CallFunctionAsync<int>(address, "GetVoterCount", new object[] { });
var role = registerParamaters.GetParamater("role");
NOVoteWidth = role.Equals("admin") ? 100 : 0;
RaisePropertyChanged("NOVoteWidth");
await GetCandidatesAsync();
var votefor = await IsExistVoteFor();
if (votefor.Trim().Count()!=0)
{
var candidates = votefor.Split(' ');
IsEnabledBtnSubmited = false;
Candidates.AsParallel().ForAll(x =>
{
x.IsCheck = x.Name.Equals(votefor);
x.IsCheck = candidates.Contains(x.Name);// x.Name.Equals(votefor);
x.IsEnable = false;
});
}
Expand All @@ -131,11 +138,34 @@ private void Init()

private void ToogleChecked(string name)
{
Candidates.AsParallel().ForAll(item =>
var itemRm = candidatesIsCheck.AsParallel().Contains(name);
if (itemRm)
{
item.IsEnable = item.Name.Equals(name) || !item.IsEnable;
});
RaisePropertyChanged("Candidates");
Candidates.AsParallel().First(item => item.Name.Equals(name)).IsCheck=false;
candidatesIsCheck.Remove(name);
if(countCheckedCandidates==0)
{
Candidates.AsParallel().ForAll(item =>
{
item.IsEnable = true;
});
}
countCheckedCandidates++;
return;
}
candidatesIsCheck.Add(name);
if(countCheckedCandidates==1)
{
Candidates.AsParallel().ForAll(item =>
{
item.IsEnable = candidatesIsCheck.AsParallel().Contains(item.Name) || !item.IsEnable;
});
RaisePropertyChanged("Candidates");
countCheckedCandidates--;
return;
}
countCheckedCandidates--;

}

private async Task GetCandidatesAsync()
Expand Down Expand Up @@ -182,22 +212,35 @@ private async Task SubmitVotingAsync()
{
try
{
var can = Candidates.AsParallel().FirstOrDefault(item => item.IsCheck);
await GetHelper.SendTransactionFunctionAsync(address, "VoteFor", new object[] { can.Name });
var previous = Builders<User>.Filter.Eq("address", address);
var update = Builders<User>.Update.Set("VoteFor", can.Name);
if (countCheckedCandidates!=0)
{
throw (new Exception("You have "+countCheckedCandidates+" candidates for voting"));
}
//var can = Candidates.AsParallel().FirstOrDefault(item => item.IsCheck);
foreach (var item in candidatesIsCheck)
{
var voting= GetHelper.SendTransactionFunctionAsync(address, "VoteFor", new object[] { item });
var can= Candidates.AsParallel().FirstOrDefault(i => i.Name.Equals(item));
can.NumVote++;
can.IsEnable = false;
await voting;
}

var previous = Builders<User>.Filter.Eq("address", address);
var update = Builders<User>.Update.Set("VoteFor", String.Join(" ", candidatesIsCheck.ToArray()));
getMongoCollection.FindOneAndUpdateAsync(previous, update);
//var task = await GetHelper.GetCallDeserializingToObjectAsync<Candidate>(address, "candidates", new object[] { can.Name });
can.NumVote++;

//can.NumVote++;
IsEnabledBtnSubmited = false;
can.IsEnable = false;
//can.IsEnable = false;
//NavigationService.Navigate();

}
catch (Exception ex)
{
OpenSnackBarNotify(true, ex.Message);
throw ex;
//throw ex;
}

}
Expand Down Expand Up @@ -236,13 +279,24 @@ private Task< string> IsExistVoteFor()

private void EffectProgress(Action action)
{
IsOpenDialog = true;
ContentDialog = ServiceLocator.Current.GetInstance<ProgressDialogWindow>("Progress");
Task.Factory.StartNew(() =>
try
{
action();
IsOpenDialog = true;
ContentDialog = ServiceLocator.Current.GetInstance<ProgressDialogWindow>("Progress");
Task.Factory.StartNew(() =>
{
action();
IsOpenDialog = false;
}).ContinueWith(t => { }, TaskScheduler.FromCurrentSynchronizationContext());

}
catch (Exception ex)
{
OpenSnackBarNotify(true, ex.Message);
IsOpenDialog = false;
}).ContinueWith(t => { }, TaskScheduler.FromCurrentSynchronizationContext());
//throw;
}

}

private void OpenSnackBarNotify(bool isOpen, string message)
Expand Down
19 changes: 19 additions & 0 deletions EthereumVoting/ViewModel/ShellViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ public class ShellViewModel: ViewModelBase
private ICommand commandNavigeted;
private ICommand commandBtnConfigClickNavigation;
private ICommand commandBtnUserClickNavigation;
private ICommand commandBtnLogOut;

private bool isOpenDialog;
private object contentDialog;

Expand Down Expand Up @@ -52,6 +54,23 @@ public class ShellViewModel: ViewModelBase
public ICommand CommandBtnConfigClickNavigation => commandBtnConfigClickNavigation = new RelayCommand(() => { NavigationService.NavigateTo("Config"); });
public ICommand CommandBtnUserClickNavigation => commandBtnUserClickNavigation = new RelayCommand(() => { NavigationService.NavigateTo("Main"); });

public ICommand CommandBtnLogOut => commandBtnLogOut = new RelayCommand(() =>
{
var ExpMenu = NavigationService.GetDescendantFromName(Application.Current.MainWindow, "ExpMenu") as Expander;
ExpMenu.IsEnabled = false;
ExpMenu.Visibility = Visibility.Hidden;
IsOpenDialog = true;
ContentDialog = ServiceLocator.Current.GetInstance<ProgressDialogWindow>("Progress");
Task.Factory.StartNew(() =>
{
Application.Current.Dispatcher.Invoke(() =>
{
NavigationService.NavigateTo("Login");
});
IsOpenDialog = false;
});
});

public ShellViewModel(IFrameNavigationService navigationService)
{
this._navigationService = navigationService;
Expand Down

0 comments on commit c6851d5

Please sign in to comment.