diff --git a/App.config b/App.config
index ba49194..60cdb85 100644
--- a/App.config
+++ b/App.config
@@ -2,77 +2,77 @@
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
+
+
+
+
-
-
+
+
\ No newline at end of file
diff --git a/Hermes.csproj b/Hermes.csproj
index 04fce3f..398884d 100644
--- a/Hermes.csproj
+++ b/Hermes.csproj
@@ -65,6 +65,9 @@
packages\EntityFramework.SqlServerCompact.6.4.4\lib\net45\EntityFramework.SqlServerCompact.dll
+
+ packages\iSendProSMS.1.1.3\lib\isendpro.dll
+
packages\Microsoft.Office.Interop.Outlook.15.0.4797.1003\lib\net20\Microsoft.Office.Interop.Outlook.dll
True
@@ -73,6 +76,12 @@
packages\Microsoft.Office.Interop.Word.15.0.4797.1003\lib\net20\Microsoft.Office.Interop.Word.dll
True
+
+ packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll
+
+
+ packages\RestSharp.Net2.1.1.11\lib\net20\RestSharp.Net2.dll
+
@@ -101,9 +110,9 @@
Designer
-
-
- 202012032233531_V1.cs
+
+
+ 202012051414539_V1.cs
@@ -112,6 +121,7 @@
PreferencesModal.xaml
+
SmsWindow.xaml
@@ -159,8 +169,8 @@
Settings.settings
True
-
- 202012032233531_V1.cs
+
+ 202012051414539_V1.cs
ResXFileCodeGenerator
diff --git a/MainWindow.xaml.cs b/MainWindow.xaml.cs
index 94827cb..014764e 100644
--- a/MainWindow.xaml.cs
+++ b/MainWindow.xaml.cs
@@ -75,15 +75,23 @@ namespace Hermes {
MessageBoxResult result = MessageBox.Show("Voulez-vous envoyer un SMS à ces citoyens ?", "Envoi de SMS", MessageBoxButton.YesNo, MessageBoxImage.Question);
if(result == MessageBoxResult.Yes) {
bool noTel = false;
+ List rcps = new List();
foreach(Citoyen citoyen in dgCitoyens.SelectedItems) {
- if(String.IsNullOrWhiteSpace(citoyen.TelPort)) {
+ if(!String.IsNullOrWhiteSpace(citoyen.TelPort)) {
+ rcps.Add(citoyen);
+ } else {
noTel = true;
}
}
- if(noTel) {
- MessageBox.Show("Certains des citoyens sélectionnés ne disposent pas d'un numéro de mobile", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ if(rcps.Count > 0) {
+ if(noTel) {
+ MessageBox.Show("Certains des citoyens sélectionnés ne disposent pas d'un numéro de mobile", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Exclamation);
+ }
+ smsModal.LoadCitoyens(rcps);
+ smsModal.ShowDialog();
+ } else {
+ MessageBox.Show("Aucun des citoyens sélectionnés ne disposent d'un numéro de mobile", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
- smsModal.ShowDialog();
}
} else {
MessageBox.Show("Aucun citoyen sélectionné", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Exclamation);
diff --git a/Migrations/202012032233531_V1.Designer.cs b/Migrations/202012051414539_V1.Designer.cs
similarity index 93%
rename from Migrations/202012032233531_V1.Designer.cs
rename to Migrations/202012051414539_V1.Designer.cs
index 2b8aa75..27f9010 100644
--- a/Migrations/202012032233531_V1.Designer.cs
+++ b/Migrations/202012051414539_V1.Designer.cs
@@ -13,7 +13,7 @@ namespace Hermes.Migrations
string IMigrationMetadata.Id
{
- get { return "202012032233531_V1"; }
+ get { return "202012051414539_V1"; }
}
string IMigrationMetadata.Source
diff --git a/Migrations/202012032233531_V1.cs b/Migrations/202012051414539_V1.cs
similarity index 100%
rename from Migrations/202012032233531_V1.cs
rename to Migrations/202012051414539_V1.cs
diff --git a/Migrations/202012032233531_V1.resx b/Migrations/202012051414539_V1.resx
similarity index 74%
rename from Migrations/202012032233531_V1.resx
rename to Migrations/202012051414539_V1.resx
index 780c8ea..37d41fc 100644
--- a/Migrations/202012032233531_V1.resx
+++ b/Migrations/202012051414539_V1.resx
@@ -118,7 +118,7 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
- H4sIAAAAAAAEAO1azW7jNhC+F+g7CDpnrfzsoQ3sXSRO0gbdJG6U5E5LY4coRakkFcTPtoc+Ul+hQ/2LUhzJkYWiKHKxh5xvhsPh/MV/f/9r+vU1YNYLCElDPrOPJoe2BdwLfcrXMztWq08/2V+//PjD9NIPXq2nfN+J3oecXM7sZ6WiU8eR3jMERE4C6olQhis18cLAIX7oHB8e/uwcHTmAEDZiWdb0PuaKBpB8wa/zkHsQqZiwm9AHJjM6rrgJqnVLApAR8WBm/woCP0+SjbZ1xihBHVxgK9sinIeKKNTw9FGCq0TI126EBMIeNhHgvhVhEjLNT8vtXQ9xeKwP4ZSMOZQXSxUGPQGPTjKrOCb7Tra1C6uh3S7RvmqjT53YbmbPqQo3gMimrNM5E3pf3bKTbP+BlVIPirtHF9F/B9Y8ZioWMOMQK0HYgbWIl4x6v8HmIfwD+IzHjFV1Qq1wrUZA0kKEEQi1uYdVpum1b1tOnc8xGQu2Ck96iGuuTo5t6xaFkyWD4sorB3ZVKOAX4CCIAn9BlALBNQYkRmtIN2TN6QtlVEEuEf0MH4tt3ZDXb8DX6nlmfz48xPdxRV/Bz0mZGo+c4uNCLiVieE/SbRiMIuSWUCkJPsH9S1sI4GOc6gKvtnEsTXzAsPO+kuEKpEwe4r4V1fj3ICk6X6noeRgyILzFjbeD3RDKRlAZxhGyCIXav6DfYyIUBbF/SWe+QK8a4ZFlgs6JzrF8BBtmAi9fR5U1X4wp7YkyNsLd6Rg1F5CVAWbc6hkPNCOmc7qi3i6AU6csI7YWFxjVVyB0BJOdC4wKz/9FRkNW4m1jOPhIbu0G8iyiaOGhRW33UWwsFKF4CXmC1K6niaBDVcNTsWvInFVmsuqHSkFdUPWiGgm2VaqRtiOTouJ2toPUHk8DpbbadvDiiGXT5KRdU95dOW+0V9MbEkV4CZV2K6NYbtprzT+5/VuRIMVwPNnSkRTaFpLwnZA1GKsoGjW9okIqjFVkSbQXzP2gsa12oW/YORfVuDMzTJTGz1n055StrTkyAUoDXuGZdOpNjgeFJmUb1uBMel3CiGgJOvOQxQF/K3Bt4y57lSpGSe2OlPQiVZCE0Iu/Uo8bQJWV7oh5K1HFymndUYxGoQpmLPXRrOwf6tqV9O5oRodQBTSWumOmjUIVKqX00AoMgITQiz+t7w2MlNgdpyzfq0AltTtSUZ5XgQpib5yy+m7BKxd74yZFdgtkQt8FTVcZ7Xh6ZRfErKZoB80W+73QsiI2H2i50g+xXhabqPXVJvLUMQK9mUqcRi4xik0zO3XKXdViYOfktQWkQwLbyr2fJFbUwlWIgtgTpwWlD0aljq3iVMgjO0ujDDS3FNKLctAo+6ZZCfb+6L1Rk6VbbAuN9IJJCOsxdyMVBBO9YeL+yVwQLyDmMPms/2GQb7shnGIiVGkLZydrtUH+v2eo7kjps26T9dG7UKrzx7t9Zs+RgTnd5i9EeM9EtHRqJXLPYfaQmI0h72Dg9VH1YLCtk2kficoYyHTT0ZxUD6Zn62B6SdWHhtLDaQd7wayOnAfDNSfMgwEbA+Whcc358dD4lXHxHqDL4dkewGtTs0FDgzn7bYsMH5r9dgTcafb730iBxux1sOvdj9M0Jqs7IvcbpDbHc50mpdvGpGkxiQ66DPEoqZrZomwY4QND1DY5Q0xZm2X01Kn+zmV6gdl0XULoX71w8PTbLEHzPdd8FeYXjaesapRvMdMsKIJvm5xhrlkRT+Gyp0sDPWR/IizGLZfBEvxrfherKFZnGMmCJat1LFNnu/xklFzXeXoX6W9yiCOgmlSHpzt+HlPmF3pftYSnNyC0X2ahALVylQ4J602BdBvyjkCZ+S4gAq4DyQMEEUMwecdd8gK76PYo4RusibfJ+6C3Qd6/iLrZpxeUrAUJZIZR8uNX9GE/eP3yDwH949LuJQAA
+ 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
dbo
diff --git a/PreferencesModal.xaml b/PreferencesModal.xaml
index 2ac7c4e..9c52eff 100644
--- a/PreferencesModal.xaml
+++ b/PreferencesModal.xaml
@@ -26,7 +26,7 @@
-
+
diff --git a/SmsSendingStatus.cs b/SmsSendingStatus.cs
new file mode 100644
index 0000000..e6076ca
--- /dev/null
+++ b/SmsSendingStatus.cs
@@ -0,0 +1,49 @@
+using System.ComponentModel;
+using System.Runtime.CompilerServices;
+
+namespace Hermes {
+ class SmsSendingStatus : INotifyPropertyChanged {
+ private string _nom = null;
+ private string _prenom = null;
+ private string _mobile = null;
+ private string _status = null;
+
+ public string Nom {
+ get => _nom;
+ set {
+ _nom = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public string Prenom {
+ get => _prenom;
+ set {
+ _prenom = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public string Mobile {
+ get => _mobile;
+ set {
+ _mobile = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public string Status {
+ get => _status;
+ set {
+ _status = value;
+ OnPropertyChanged();
+ }
+ }
+
+ public event PropertyChangedEventHandler PropertyChanged;
+
+ protected void OnPropertyChanged([CallerMemberName] string name = null) {
+ PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
+ }
+ }
+}
diff --git a/SmsWindow.xaml b/SmsWindow.xaml
index f06b7e7..a84e1f1 100644
--- a/SmsWindow.xaml
+++ b/SmsWindow.xaml
@@ -6,18 +6,34 @@
xmlns:local="clr-namespace:Hermes"
mc:Ignorable="d"
ResizeMode="NoResize"
- Title="Envoi de SMS" Height="370" Width="500"
+ Title="Envoi de SMS" Height="490" Width="700"
WindowStartupLocation="CenterOwner"
+ Loaded="Window_Loaded"
Closing="Window_Closing">
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SmsWindow.xaml.cs b/SmsWindow.xaml.cs
index 61a93e1..3170963 100644
--- a/SmsWindow.xaml.cs
+++ b/SmsWindow.xaml.cs
@@ -1,19 +1,121 @@
-using System.Windows;
-
+using Hermes.Model;
+using IO.Swagger.Api;
+using IO.Swagger.Client;
+using IO.Swagger.Model;
+using Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Windows;
+using System.Windows.Documents;
namespace Hermes {
public partial class SmsWindow : Window {
+ private ObservableCollection status = new ObservableCollection();
+ private ModelContext dbContext = null;
+ private ApiClient apiClient = new ApiClient();
+ private SmsApi smsApi = null;
+ private bool sending = false;
+
public SmsWindow() {
+ dbContext = ModelContext.Getinstance();
+ smsApi = new SmsApi(apiClient);
InitializeComponent();
}
+ private void Window_Loaded(object sender, RoutedEventArgs e) {
+ lvLog.ItemsSource = status;
+ }
+
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
e.Cancel = true;
+ if(sending) {
+ return;
+ }
+ messageTextBox.Document.Blocks.Clear();
+ status.Clear();
this.Hide();
}
+ public void LoadCitoyens(List citoyens) {
+ foreach(Citoyen citoyen in citoyens) {
+ SmsSendingStatus s = new SmsSendingStatus();
+ s.Nom = citoyen.Nom;
+ s.Prenom = citoyen.Prenom;
+ s.Mobile = citoyen.TelPort.Replace(" ", "");
+ s.Status = "En attente";
+ status.Add(s);
+ }
+ }
+
public void Envoyer_Click(object sender, RoutedEventArgs e) {
- MessageBox.Show("Erreur lors de la tentative d'envoi : Clé IsendPro invalide", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Error);
+ bool error = false;
+ string message = new TextRange(messageTextBox.Document.ContentStart, messageTextBox.Document.ContentEnd).Text;
+ string apiKey = dbContext.Preferences.Local[0].SmsApiKey;
+
+ if(String.IsNullOrWhiteSpace(apiKey)) {
+ MessageBox.Show("Erreur lors de la tentative d'envoi : Clé ISendPro invalide", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Error);
+ return;
+ }
+
+ if(String.IsNullOrWhiteSpace(message)) {
+ MessageBox.Show("Votre message est vide.", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Warning);
+ return;
+ }
+
+ envoyerButton.IsEnabled = false;
+ annulerButton.IsEnabled = false;
+ messageTextBox.IsEnabled = false;
+ sending = true;
+
+ foreach(SmsSendingStatus stat in status) {
+ if(!stat.Status.Equals("Envoyé")) {
+ SmsUniqueRequest req = new SmsUniqueRequest();
+ req.Keyid = apiKey;
+ req.Sms = message;
+ req.Smslong = "999";
+ req.Num = stat.Mobile;
+ try {
+ SMSReponse resp = smsApi.SendSms(req);
+ if(resp != null && resp.Etat != null && resp.Etat.Etat != null && resp.Etat.Etat.Count > 0) {
+ SMSReponseEtatEtat eta = resp.Etat.Etat[0];
+ if(eta.Code != null && eta.Code == 0 && eta.Tel != null) {
+ stat.Status = "Envoyé";
+ } else {
+ error = true;
+ stat.Status = eta.Message;
+ }
+ } else {
+ error = true;
+ stat.Status = "Erreur technique";
+ }
+ } catch(ApiException ex) {
+ error = true;
+ SMSReponse resp = JsonConvert.DeserializeObject((String) ex.ErrorContent);
+ if(resp != null && resp.Etat != null && resp.Etat.Etat != null && resp.Etat.Etat.Count > 0) {
+ SMSReponseEtatEtat eta = resp.Etat.Etat[0];
+ if(eta.Code != null && eta.Code == 0 && eta.Tel != null) {
+ stat.Status = "Envoyé";
+ } else {
+ error = true;
+ stat.Status = eta.Message;
+ }
+ } else {
+ error = true;
+ stat.Status = "Erreur technique";
+ }
+ }
+ }
+ }
+
+ envoyerButton.IsEnabled = true;
+ annulerButton.IsEnabled = true;
+ messageTextBox.IsEnabled = true;
+ sending = false;
+
+ if(error) {
+ MessageBox.Show("Plusieurs envois se sont mal déroulés. Vérifiez la validité des numéros de téléphone.", "Envoi de SMS", MessageBoxButton.OK, MessageBoxImage.Error);
+ }
}
public void Annuler_Click(object sender, RoutedEventArgs e) {
diff --git a/packages.config b/packages.config
index 50e7a5e..70648e9 100644
--- a/packages.config
+++ b/packages.config
@@ -2,7 +2,10 @@
+
+
+
\ No newline at end of file